{"version":3,"file":"index.umd.cjs","sources":["../src/common/utils/bigint.ts","../src/common/utils/dimensions.ts","../src/common/utils/domains.ts","../src/common/utils/formatting.ts","../src/common/utils/interpolation.ts","../src/common/utils/position.ts","../src/common/utils/selection.ts","../src/common/utils/stroke.ts","../src/common/utils/ticks.ts","../src/common/utils/math.ts","../src/common/utils/functions.ts","../src/common/utils/array.ts","../src/common/utils/size.ts","../src/common/utils/wrapText.tsx","../src/common/utils/useHoverIntent.ts","../src/common/utils/useResizeObserver.ts","../src/common/utils/merge.ts","../src/common/Axis/LinearAxis/LinearAxisLine.tsx","../src/common/Axis/LinearAxis/LinearAxisTickLine.tsx","../src/common/Axis/LinearAxis/LinearAxisTickLabel.tsx","../src/common/Axis/LinearAxis/LinearAxisTickSeries.tsx","../src/common/Axis/LinearAxis/LinearAxis.tsx","../src/common/Axis/LinearAxis/LinearXAxis.tsx","../src/common/Axis/LinearAxis/LinearYAxis.tsx","../src/common/Axis/LinearAxis/helpers.ts","../src/common/Axis/RadialAxis/RadialAxisTickSeries/RadialAxisTickLine.tsx","../src/common/Axis/RadialAxis/RadialAxisTickSeries/RadialAxisTickLabel.tsx","../src/common/Axis/RadialAxis/RadialAxisTickSeries/RadialAxisTick.tsx","../src/common/Axis/RadialAxis/RadialAxisTickSeries/RadialAxisTickSeries.tsx","../src/common/Axis/RadialAxis/RadialAxisArcSeries/RadialAxisArc.tsx","../src/common/Axis/RadialAxis/RadialAxisArcSeries/utils.ts","../src/common/Axis/RadialAxis/RadialAxisArcSeries/RadialAxisArcSeries.tsx","../src/common/Axis/RadialAxis/RadialAxisArcSeries/RadialAxisArcLine.tsx","../src/common/Axis/RadialAxis/RadialAxis.tsx","../src/common/Gestures/Move.tsx","../src/common/Brush/BrushHandle.tsx","../src/common/Brush/BrushSlice.tsx","../src/common/Brush/Brush.tsx","../src/common/Brush/ChartBrush.tsx","../src/common/containers/ChartContext.ts","../src/common/containers/ChartContainer.tsx","../src/common/data/bigInteger.ts","../src/common/data/builder.ts","../src/common/data/histogram.ts","../src/common/data/barStack.ts","../src/common/data/marimekko.ts","../src/common/data/areaStack.ts","../src/common/data/waterfall.ts","../src/common/Gestures/Pan.tsx","../src/common/Gestures/pinchUtils.ts","../src/common/Gestures/Zoom.tsx","../src/common/legends/DiscreteLegend/DiscreteLegend.tsx","../src/common/legends/DiscreteLegend/DiscreteLegendSymbol.tsx","../src/common/legends/DiscreteLegend/DiscreteLegendEntry.tsx","../src/common/legends/SequentialLegend/SequentialLegend.tsx","../src/common/Gridline/Gridline.tsx","../src/common/Gridline/GridStripe.tsx","../src/common/Gridline/GridlineSeries.tsx","../src/common/MarkLine/MarkLine.tsx","../src/common/Gradient/GradientStop.tsx","../src/common/Gradient/Gradient.tsx","../src/common/Gradient/RadialGradient.tsx","../src/common/Mask/Mask.tsx","../src/common/Mask/Stripes.tsx","../src/common/Tooltip/TooltipTemplate.tsx","../src/common/Tooltip/TooltipTheme.ts","../src/common/Tooltip/ChartTooltip.tsx","../src/common/Tooltip/TooltipArea.tsx","../src/common/ZoomPan/ZoomPan.tsx","../src/common/scales/basic.ts","../src/common/scales/marimekko.ts","../src/common/scales/multiSeries.ts","../src/common/scales/radial.ts","../src/common/ZoomPan/ChartZoomPan.tsx","../src/common/Motion/config.ts","../src/common/Motion/MotionPath.tsx","../src/common/color/schemes.ts","../src/common/color/helper.ts","../src/common/Count/useCount.tsx","../src/common/Count/Count.tsx","../src/common/ValueMarker/LinearValueMarker.tsx","../src/common/ValueMarker/RadialValueMarker.tsx","../src/common/Glow/utils.ts","../src/ScatterPlot/ScatterSeries/ScatterPoint.tsx","../src/ScatterPlot/ScatterSeries/ScatterSeries.tsx","../src/ScatterPlot/ScatterPlot.tsx","../src/AreaChart/AreaSeries/PointSeries.tsx","../src/AreaChart/AreaSeries/Area.tsx","../src/AreaChart/AreaSeries/Line.tsx","../src/AreaChart/AreaSeries/AreaSeries.tsx","../src/AreaChart/AreaSeries/StackedNormalizedAreaSeries.tsx","../src/AreaChart/AreaSeries/StackedAreaSeries.tsx","../src/AreaChart/AreaChart.tsx","../src/AreaChart/StackedAreaChart.tsx","../src/AreaChart/StackedNormalizedAreaChart.tsx","../src/BarChart/BarSeries/BarLabel.tsx","../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/transform.mjs","../node_modules/motion-dom/dist/es/value/types/maps/number.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/drag/state/set-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/utils/is-svg-element.mjs","../node_modules/motion-dom/dist/es/utils/is-svg-svg-element.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-presence.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/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/projection/geometry/conversion.mjs","../node_modules/framer-motion/dist/es/projection/utils/has-transform.mjs","../node_modules/framer-motion/dist/es/projection/geometry/delta-apply.mjs","../node_modules/framer-motion/dist/es/projection/utils/measure.mjs","../node_modules/framer-motion/dist/es/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/events/add-pointer-event.mjs","../node_modules/framer-motion/dist/es/projection/geometry/delta-calc.mjs","../node_modules/framer-motion/dist/es/projection/utils/each-axis.mjs","../node_modules/framer-motion/dist/es/utils/get-context-window.mjs","../node_modules/framer-motion/dist/es/utils/distance.mjs","../node_modules/framer-motion/dist/es/gestures/pan/PanSession.mjs","../node_modules/framer-motion/dist/es/gestures/drag/utils/constraints.mjs","../node_modules/framer-motion/dist/es/gestures/drag/VisualElementDragControls.mjs","../node_modules/framer-motion/dist/es/gestures/drag/index.mjs","../node_modules/framer-motion/dist/es/gestures/pan/index.mjs","../node_modules/framer-motion/dist/es/projection/node/state.mjs","../node_modules/framer-motion/dist/es/projection/styles/scale-border-radius.mjs","../node_modules/framer-motion/dist/es/projection/styles/scale-box-shadow.mjs","../node_modules/framer-motion/dist/es/motion/features/layout/MeasureLayout.mjs","../node_modules/framer-motion/dist/es/animation/animate/single-value.mjs","../node_modules/framer-motion/dist/es/render/utils/compare-by-depth.mjs","../node_modules/framer-motion/dist/es/render/utils/flat-tree.mjs","../node_modules/framer-motion/dist/es/utils/delay.mjs","../node_modules/framer-motion/dist/es/projection/animation/mix-values.mjs","../node_modules/framer-motion/dist/es/projection/geometry/copy.mjs","../node_modules/framer-motion/dist/es/projection/geometry/delta-remove.mjs","../node_modules/framer-motion/dist/es/projection/geometry/utils.mjs","../node_modules/framer-motion/dist/es/projection/shared/stack.mjs","../node_modules/framer-motion/dist/es/projection/styles/transform.mjs","../node_modules/framer-motion/dist/es/projection/node/create-projection-node.mjs","../node_modules/framer-motion/dist/es/projection/node/DocumentProjectionNode.mjs","../node_modules/framer-motion/dist/es/projection/node/HTMLProjectionNode.mjs","../node_modules/framer-motion/dist/es/motion/features/drag.mjs","../node_modules/framer-motion/dist/es/gestures/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/motion/features/gestures.mjs","../node_modules/framer-motion/dist/es/motion/features/layout.mjs","../node_modules/framer-motion/dist/es/render/components/motion/feature-bundle.mjs","../node_modules/framer-motion/dist/es/render/components/motion/proxy.mjs","../src/BarChart/BarSeries/BarTargetMarker.tsx","../src/BarChart/BarSeries/Bar.tsx","../src/BarChart/BarSeries/BarSeries.tsx","../src/BarChart/BarSeries/RangeLines.tsx","../src/BarChart/BarSeries/StackedBarSeries.tsx","../src/BarChart/BarSeries/StackedNormalizedBarSeries.tsx","../src/BarChart/BarSeries/MarimekkoBarSeries.tsx","../src/BarChart/BarSeries/HistogramBarSeries.tsx","../src/BarChart/BarSeries/GuideBar.tsx","../src/BarChart/BarChart.tsx","../src/BarChart/MarimekkoChart.tsx","../src/BarChart/StackedBarChart.tsx","../src/BarChart/StackedNormalizedBarChart.tsx","../src/BarChart/HistogramBarChart.tsx","../src/LineChart/LineSeries.tsx","../src/LineChart/LineChart.tsx","../src/Map/Map.tsx","../src/Map/MapMarker.tsx","../src/PieChart/PieArcSeries/useInterpolate.ts","../src/PieChart/PieArcSeries/PieArc.tsx","../src/PieChart/PieArcSeries/findBreakPoint.ts","../src/PieChart/PieArcSeries/PieArcLabel.tsx","../src/PieChart/PieArcSeries/radiusUtils.ts","../src/PieChart/PieArcSeries/PieArcSeries.tsx","../src/PieChart/PieChart.tsx","../src/Sankey/utils.ts","../src/Sankey/Sankey.tsx","../src/Sankey/SankeyLabel/SankeyLabel.tsx","../src/Sankey/SankeyLink/SankeyLink.tsx","../src/Sankey/SankeyNode/SankeyNode.tsx","../src/Sparkline/SparklineChart.tsx","../src/Sparkline/AreaSparklineChart.tsx","../src/Sparkline/BarSparklineChart.tsx","../src/Sparkline/SonarChart.tsx","../src/RadialAreaChart/RadialAreaSeries/RadialArea.tsx","../src/RadialAreaChart/RadialAreaSeries/RadialLine.tsx","../src/RadialScatterPlot/RadialScatterPlot.tsx","../src/RadialScatterPlot/RadialScatterSeries/RadialScatterPoint.tsx","../src/RadialScatterPlot/RadialScatterSeries/RadialScatterSeries.tsx","../src/RadialAreaChart/RadialAreaSeries/RadialPointSeries.tsx","../src/RadialAreaChart/RadialAreaSeries/RadialAreaSeries.tsx","../src/RadialAreaChart/RadialAreaChart.tsx","../node_modules/d3-path/src/path.js","../src/RadialBarChart/RadialBarSeries/MotionBar.tsx","../src/RadialBarChart/RadialBarSeries/RadialGuideBar.tsx","../src/RadialBarChart/RadialBarSeries/RadialBar.tsx","../src/RadialBarChart/RadialBarSeries/RadialBarSeries.tsx","../src/RadialBarChart/RadialBarChart.tsx","../src/RadialGauge/RadialGaugeSeries/RadialGaugeArc.tsx","../src/RadialGauge/RadialGaugeSeries/RadialGaugeLabel/RadialGaugeLabel.tsx","../src/RadialGauge/RadialGaugeSeries/RadialGaugeValueLabel/RadialGaugeValueLabel.tsx","../src/RadialGauge/RadialGaugeSeries/RadialGaugeOuterArc.tsx","../src/RadialGauge/RadialGaugeSeries/RadialGaugeSeries.tsx","../src/RadialGauge/RadialGaugeSeries/RadialGaugeStackedArc.tsx","../src/RadialGauge/RadialGaugeSeries/StackedRadialGaugeValueLabel/StackedRadialGaugeValueLabel.tsx","../src/RadialGauge/RadialGaugeSeries/StackedRadialGaugeSeries.tsx","../src/RadialGauge/RadialGaugeSeries/StackedRadialGaugeDescriptionLabel/StackedRadialGaugeDescriptionLabel.tsx","../src/RadialGauge/RadialGauge.tsx","../src/Heatmap/HeatmapSeries/HeatmapCell.tsx","../src/Heatmap/HeatmapSeries/HeatmapSeries.tsx","../src/Heatmap/Heatmap.tsx","../node_modules/date-fns/constants.js","../node_modules/date-fns/constructFrom.js","../node_modules/date-fns/toDate.js","../node_modules/date-fns/addDays.js","../node_modules/date-fns/subDays.js","../src/Heatmap/calendarUtils.ts","../src/Heatmap/CalendarHeatmap.tsx","../src/LinearGauge/LinearGaugeBar.tsx","../src/LinearGauge/LinearGaugeOuterBar.tsx","../src/LinearGauge/LinearGaugeSeries.tsx","../src/LinearGauge/LinearGauge.tsx","../src/VennDiagram/useInterpolate.ts","../src/VennDiagram/VennArc.tsx","../src/VennDiagram/VennLabel.tsx","../src/VennDiagram/VennOuterLabel.tsx","../src/VennDiagram/VennSeries.tsx","../src/VennDiagram/starEuler/starEuler.ts","../src/VennDiagram/VennDiagram.tsx","../src/BubbleChart/Bubble.tsx","../src/BubbleChart/BubbleLabel.tsx","../src/BubbleChart/BubbleSeries.tsx","../src/BubbleChart/BubbleChart.tsx","../src/TreeMap/TreeMapLabel.tsx","../src/TreeMap/TreeMapRect.tsx","../src/TreeMap/TreeMapSeries.tsx","../src/TreeMap/TreeMap.tsx","../src/BarList/BarListSeries.tsx","../src/BarList/BarList.tsx","../src/Meter/MeterColumn.tsx","../src/Meter/Meter.tsx","../src/RadarChart/RadarChartSeries.tsx","../src/RadarChart/RadarChart.tsx","../src/FunnelChart/FunnelSeries/FunnelArc.tsx","../src/FunnelChart/FunnelSeries/FunnelAxis/FunnelAxisLabel.tsx","../src/FunnelChart/FunnelSeries/FunnelAxis/FunnelAxisLine.tsx","../src/FunnelChart/FunnelSeries/FunnelAxis/FunnelAxis.tsx","../src/FunnelChart/FunnelSeries/FunnelSeries.tsx","../src/FunnelChart/FunnelChart.tsx","../src/SunburstChart/useInterpolate.ts","../src/SunburstChart/SunburstArc.tsx","../src/SunburstChart/SunburstArcLabel.tsx","../src/SunburstChart/SunburstSeries.tsx","../src/SunburstChart/SunburstChart.tsx","../src/WordCloud/WordCloudLabel.tsx","../src/WordCloud/WordCloud.tsx"],"sourcesContent":["import humanFormat from 'human-format';\n\nconst humanFormatScale = new humanFormat.Scale({\n  k: 1000,\n  M: 1000000,\n  B: 1000000000\n});\n\nconst humanFormatMillionScale = new humanFormat.Scale({\n  M: 1,\n  B: 1000,\n  T: 1000000\n});\n\nconst ONE_MILLION = 1000000;\nconst ONE_BILLION = 1000000000;\n\nexport const humanFormatBigInteger = (bigInteger) => {\n  if (bigInteger.greater(ONE_BILLION)) {\n    return humanFormat(bigInteger.divide(ONE_MILLION).toJSNumber(), {\n      scale: humanFormatMillionScale\n    });\n  }\n  return humanFormat(bigInteger.toJSNumber(), { scale: humanFormatScale });\n};\n\nexport const bigIntegerToLocaleString = (bigInteger) => {\n  let i = 0;\n  let formattedString = '';\n  for (const c of bigInteger.toString().split('').reverse()) {\n    if (i > 0 && i % 3 === 0) {\n      formattedString = ',' + formattedString;\n    }\n    formattedString = c + formattedString;\n    i++;\n  }\n  return formattedString;\n};\n","export interface Dimensions {\n  xOffset: number;\n  yOffset: number;\n  height: number;\n  width: number;\n  chartWidth: number;\n  chartHeight: number;\n  xMargin: number;\n  yMargin: number;\n}\n\nexport interface DimensionParameter {\n  xOffset: number;\n  yOffset: number;\n  yAxis: any;\n  xAxis: any;\n  height: number;\n  width: number;\n  margins: Margins;\n}\n\nexport type Margins =\n  | [number, number]\n  | [number, number, number, number]\n  | number;\n\n/**\n * Given a margins object, returns the top/left/right/bottom positions.\n */\nfunction parseMargins(margins?: Margins) {\n  let top = 0;\n  let right = 0;\n  let bottom = 0;\n  let left = 0;\n\n  if (Array.isArray(margins)) {\n    if (margins.length === 2) {\n      top = margins[0];\n      bottom = margins[0];\n      left = margins[1];\n      right = margins[1];\n    } else if (margins.length === 4) {\n      top = margins[0];\n      right = margins[1];\n      bottom = margins[2];\n      left = margins[3];\n    }\n  } else if (margins !== undefined) {\n    top = margins;\n    right = margins;\n    bottom = margins;\n    left = margins;\n  }\n\n  return {\n    top,\n    right,\n    bottom,\n    left\n  };\n}\n\n/**\n * Calculates the margins for the chart.\n */\nfunction calculateMarginOffsets(\n  height: number,\n  width: number,\n  margins: { left: number; right: number; bottom: number; top: number }\n) {\n  const { left, right, bottom, top } = margins;\n  const newHeight = height - top - bottom;\n  const newWidth = width - left - right;\n\n  return {\n    height: newHeight,\n    width: newWidth\n  };\n}\n\n/**\n * Calculates the dimensions for the chart.\n */\nexport function getDimension({\n  xOffset,\n  yOffset,\n  height,\n  width,\n  margins\n}: DimensionParameter | any): Dimensions {\n  const parsedMargins = parseMargins(margins);\n  const marginDims = calculateMarginOffsets(height, width, parsedMargins);\n  const chartWidth = marginDims.width - xOffset;\n  const chartHeight = marginDims.height - yOffset;\n\n  return {\n    xOffset,\n    yOffset,\n    height,\n    width,\n    chartWidth,\n    chartHeight,\n    xMargin: xOffset + parsedMargins.left,\n    yMargin: parsedMargins.top\n  };\n}\n","import { min, max } from 'd3-array';\n\n/**\n * Gets the min/max values handling nested arrays.\n */\nexport function extent(data: any[], attr: string): number[] {\n  const accessor = (val, fn) => {\n    if (Array.isArray(val.data)) {\n      return fn(val.data, (vv) => vv[attr]);\n    }\n    return val[attr];\n  };\n\n  const minVal = min(data, (d) => accessor(d, min));\n  const maxVal = max(data, (d) => accessor(d, max));\n\n  return [minVal, maxVal];\n}\n\n/**\n * Get the domain for the Y Axis.\n */\nexport function getYDomain({\n  data,\n  scaled = false,\n  isDiverging = false\n}): number[] {\n  const [startY, endY] = extent(data, 'y');\n  const [startY1, endY1] = extent(data, 'y1');\n  const [_, maxTarget] = extent(data, 'target');\n  const maxY1 = Math.max(\n    endY1,\n    isNaN(maxTarget) ? Number.MIN_SAFE_INTEGER : maxTarget\n  );\n\n  // If dealing w/ negative numbers, we should\n  // normalize the top and bottom values\n  if (startY < 0 || isDiverging) {\n    const posStart = -startY;\n    const maxNum = Math.max(posStart, endY);\n\n    return [-maxNum, maxNum];\n  }\n\n  // Scaled start scale at non-zero\n  if (scaled) {\n    return [startY1, maxY1];\n  }\n\n  // Start at 0 based\n  return [0, maxY1];\n}\n\n/**\n * Get the domain for the X Axis.\n */\nexport function getXDomain({\n  data,\n  scaled = false,\n  isDiverging = false\n}): number[] {\n  const startX0 = extent(data, 'x0')[0];\n  const endX1 = extent(data, 'x1')[1];\n  const [_, maxTarget] = extent(data, 'target');\n  const maxEndX1 = Math.max(\n    endX1,\n    isNaN(maxTarget) ? Number.MIN_SAFE_INTEGER : maxTarget\n  );\n\n  // Histograms use dates for start/end\n  if (typeof startX0 === 'number' && typeof maxEndX1 === 'number') {\n    // If dealing w/ negative numbers, we should\n    // normalize the top and bottom values\n    if (startX0 < 0 || isDiverging) {\n      const posStart = -startX0;\n      const maxNum = Math.max(posStart, maxEndX1);\n\n      return [-maxNum, maxNum];\n    }\n\n    // If not scaled, return 0/max domains\n    if (!scaled) {\n      return [0, maxEndX1];\n    }\n  }\n\n  // Scaled start scale at non-zero\n  return [startX0, maxEndX1];\n}\n","import { ChartInternalDataTypes } from '@/common/data';\n\n// https://stackoverflow.com/questions/673905/best-way-to-determine-users-locale-within-browser\nconst getNavigatorLanguage = () => {\n  if (typeof window === 'undefined') {\n    return 'en';\n  }\n\n  if (navigator.languages && navigator.languages.length) {\n    return navigator.languages[0];\n  }\n\n  return (\n    (navigator as any).userLanguage ||\n    navigator.language ||\n    (navigator as any).browserLanguage ||\n    'en'\n  );\n};\n\nconst locale = getNavigatorLanguage();\n\nconst options = {\n  year: 'numeric',\n  month: 'numeric',\n  day: 'numeric',\n  hour12: true,\n  formatMatcher: 'best fit'\n};\n\n/**\n * Format a value based on type.\n */\nexport function formatValue(value: ChartInternalDataTypes): string {\n  if (value !== undefined) {\n    if (value instanceof Date) {\n      return (value as Date).toLocaleDateString(locale, options as any);\n    } else if (typeof value === 'number') {\n      return value.toLocaleString();\n    }\n\n    return value as string;\n  }\n\n  return 'No value';\n}\n\n/**\n * Generate aria label text for the given data point(s)\n * @param datapoint\n * @returns Aria Label\n */\nexport function getAriaLabel(datapoint) {\n  const isArray = Array.isArray(datapoint);\n  if (isArray) {\n    return datapoint?.map((row) => getAriaLabel(row)).join(', ');\n  } else {\n    const key = datapoint?.key || datapoint?.x;\n    // 'data' or 'y' will not be an array as the label is unique for each element\n    const value = datapoint?.data || datapoint?.y;\n    return `${key}: ${formatValue(value)}`;\n  }\n}\n","import { curveLinear, curveMonotoneX, curveStep } from 'd3-shape';\n\nexport type InterpolationTypes = 'linear' | 'smooth' | 'step';\nexport type RadialInterpolationTypes = 'linear' | 'smooth';\n\n/**\n * Helper function for interpolation.\n */\nexport function interpolate(\n  type: InterpolationTypes | RadialInterpolationTypes\n) {\n  if (type === 'smooth') {\n    return curveMonotoneX;\n  } else if (type === 'step') {\n    return curveStep;\n  } else {\n    return curveLinear;\n  }\n}\n","import { bisector } from 'd3-array';\nimport { applyToPoint, applyToPoints, inverse } from 'transformation-matrix';\n\ntype PointObjectNotation = { x: number; y: number };\n\n/**\n * Add ability to calculate scale band position.\n * Reference: https://stackoverflow.com/questions/38633082/d3-getting-invert-value-of-band-scales\n */\nconst scaleBandInvert = (scale, round = false) => {\n  const domain = scale.domain();\n  const paddingOuter = scale(domain[0]);\n  const eachBand = scale.step();\n  const [, end] = scale.range();\n\n  return (offset) => {\n    // Keep the band from going outside the domain length\n    let band = Math.min(\n      (offset - paddingOuter) / eachBand,\n      domain.length - 0.01\n    );\n\n    // Catch negative band values from horizontal charts exceeding domain length\n    if (band < 0 && Math.abs(band) > domain.length - 1) {\n      band = Math.floor(Math.abs(band)) * -1;\n    }\n\n    // Round to the closest index OR take the floor value\n    let index = round\n      ? Math.round(band) % domain.length\n      : Math.floor(band) % domain.length;\n\n    // Handle horizontal charts...\n    if (end === 0) {\n      index = index * -1;\n    }\n\n    return domain[Math.max(0, Math.min(index, domain.length - 1))];\n  };\n};\n\n/**\n * Get the data point closest to a given position on a continuous scale.\n *\n * @param {Object} params - The parameters for the function.\n * @param {number} params.pos - The position to find the closest point to.\n * @param {Object} params.scale - The scale object.\n * @param {Array} params.data - The data array.\n * @param {string} [params.attr='x'] - The attribute to use for comparison.\n * @param {boolean} [params.roundDown=false] - Whether to round down to the nearest point.\n *\n * @returns {Object} The closest point to the specified position.\n */\nexport const getClosestContinousScalePoint = ({\n  pos,\n  scale,\n  data,\n  attr = 'x',\n  roundDown = false\n}: {\n  pos: number;\n  scale: any;\n  data: any[];\n  attr?: string;\n  roundDown?: boolean;\n}) => {\n  const domain = scale.invert(pos);\n\n  // Select the index\n  const bisect = bisector((d: any) => {\n    // add 1 to an index so it's the upper limit of a domain\n    return attr === 'i' ? d[attr] + 1 : d[attr];\n  }).right;\n  const index = bisect(data, domain);\n\n  // Determine min index\n  const minIndex = Math.max(0, index - 1);\n  const before = data[minIndex];\n\n  if (roundDown) {\n    return before;\n  }\n\n  // Determine max index\n  const maxIndex = Math.min(data.length - 1, index);\n  const after = data[maxIndex];\n\n  // Determine which is closest to the point\n  let beforeVal = before[attr];\n  let afterVal = after[attr];\n  beforeVal = domain - beforeVal;\n  afterVal = afterVal - domain;\n\n  return beforeVal < afterVal ? before : after;\n};\n\n/**\n * Get the data point closest to a given position on a band scale. This rounds down by default.\n *\n * @param {Object} params - The parameters for the function.\n * @param {number} params.pos - The position to find the closest point to.\n * @param {Object} params.scale - The scale object.\n * @param {Array} params.data - The data array.\n * @param {boolean} [params.roundClosest=false] - Whether to round to the closest point instead of down.\n *\n * @returns {Object} The closest point to the specified position.\n */\nexport const getClosestBandScalePoint = ({\n  pos,\n  scale,\n  data,\n  roundClosest = false\n}: {\n  pos: number;\n  scale: any;\n  data: any[];\n  roundClosest?: boolean;\n}) => {\n  const domain = scale.domain();\n  let prop;\n\n  // Of course the Marimekko is a pain...\n  if (scale.mariemkoInvert) {\n    prop = scale.mariemkoInvert(pos);\n  } else {\n    prop = scaleBandInvert(scale, roundClosest)(pos);\n  }\n\n  const idx = domain.indexOf(prop);\n  return data[idx];\n};\n\n/**\n * Given an event, get the parent svg element;\n */\nexport const getParentSVG = (event) => {\n  // set node to targets owner svg\n  let node = event.target.ownerSVGElement;\n\n  // find the outermost svg\n  if (node) {\n    while (node.ownerSVGElement) {\n      node = node.ownerSVGElement;\n    }\n  }\n\n  return node;\n};\n\n/**\n * Given an event, get the relative X/Y position for a target.\n */\nexport const getPositionForTarget = ({ target, clientX, clientY }) => {\n  const rect = target.getBoundingClientRect();\n  return {\n    x: clientX - (rect?.left || 0) - target.clientLeft,\n    y: clientY - (rect?.top || 0) - target.clientTop\n  };\n};\n\n/**\n * Gets the point from q given matrix.\n */\nexport const getPointFromMatrix = (event, matrix): PointObjectNotation | null => {\n  const parent = getParentSVG(event);\n\n  if (!parent) {\n    return null;\n  }\n\n  // Determines client coordinates relative to the editor component\n  const { top, left } = parent.getBoundingClientRect();\n  const x = event.clientX - left;\n  const y = event.clientY - top;\n\n  // Transforms the coordinate to world coordinate (in the SVG/DIV world)\n  return applyToPoint(inverse(matrix), { x, y });\n};\n\n/**\n * Get the start/end matrix.\n */\nexport const getLimitMatrix = (\n  height: number,\n  width: number,\n  matrix\n): PointObjectNotation[] =>\n  applyToPoints(matrix, [\n    { x: 0, y: 0 },\n    { x: width, y: height }\n  ]);\n\n/**\n * Constrain the matrix.\n */\nexport const constrainMatrix = (height: number, width: number, matrix) => {\n  const [min, max] = getLimitMatrix(height, width, matrix) as {\n    x: number;\n    y: number;\n  }[];\n\n  if (max.x < width || max.y < height) {\n    return true;\n  }\n\n  if (min.x > 0 || min.y > 0) {\n    return true;\n  }\n\n  return false;\n};\n\n/**\n * Determine if scale factor is less than allowed.\n */\nconst lessThanScaleFactorMin = (value, scaleFactor: number) =>\n  value.scaleFactorMin && value.d * scaleFactor <= value.scaleFactorMin;\n\n/**\n * Determine if scale factor is larger than allowed.\n */\nconst moreThanScaleFactorMax = (value, scaleFactor: number) =>\n  value.scaleFactorMax && value.d * scaleFactor >= value.scaleFactorMax;\n\n/**\n * Determine if both min and max scale fctors are going out of bounds.\n */\nexport const isZoomLevelGoingOutOfBounds = (value, scaleFactor: number) => {\n  const a = lessThanScaleFactorMin(value, scaleFactor) && scaleFactor < 1;\n  const b = moreThanScaleFactorMax(value, scaleFactor) && scaleFactor > 1;\n  return a || b;\n};\n","/**\n * Toggle the text selection of the body.\n */\nexport function toggleTextSelection(allowSelection: boolean) {\n  const style = allowSelection ? '' : 'none';\n  [\n    '-webkit-touch-callout',\n    '-webkit-user-select',\n    '-khtml-user-select',\n    '-moz-user-select',\n    '-ms-user-select',\n    'user-select'\n  ].forEach((prop) => (document.body.style[prop] = style));\n}\n","import { ChartInternalShallowDataShape } from '@/common/data';\n\n/**\n * Calculates whether the stroke should be shown.\n */\nexport function calculateShowStroke(\n  current: ChartInternalShallowDataShape,\n  data: ChartInternalShallowDataShape[]\n) {\n  const i = data.indexOf(current);\n  let showLine = false;\n\n  const prev = data[i - 1];\n  if (i > 0 && prev.y) {\n    showLine = true;\n  }\n\n  const cur = data[i];\n  if (cur.y) {\n    showLine = true;\n  }\n\n  const next = data[i + 1];\n  if (i < data.length - 1 && next.y) {\n    showLine = true;\n  }\n\n  return showLine;\n}\n","import { TimeInterval } from 'd3-time';\n\nconst ONE_DAY = 60 * 60 * 24;\nconst DURATION_TICK_STEPS = [\n  0.001, // 1 ms\n  0.005, // 5 ms\n  0.01, // 10 ms\n  0.05, // 50 ms\n  0.1, // 100 ms\n  0.5, // 500 ms\n  1, // 1 s\n  5, // 5 s\n  10, // 10 s\n  15, // 15 s\n  60, // 1 m\n  60 * 15, // 15 m\n  60 * 30, // 30 m\n  60 * 60, // 1 h\n  60 * 60 * 2, // 2 h\n  60 * 60 * 4, // 4 h\n  60 * 60 * 6, // 6 h\n  60 * 60 * 8, // 8 h\n  60 * 60 * 12, // 12 h\n  ONE_DAY // 24 h\n];\n\n/**\n * Reduce the ticks to the max number of ticks.\n */\nexport function reduceTicks<T>(ticks: T[], maxTicks: number) {\n  if (ticks.length > maxTicks) {\n    const reduced: T[] = [];\n    const modulus = Math.floor(ticks.length / maxTicks);\n\n    for (let i = 0; i < ticks.length; i++) {\n      if (i % modulus === 0) {\n        reduced.push(ticks[i]);\n      }\n    }\n    ticks = reduced;\n  }\n\n  return ticks;\n}\n\n/**\n * Determine the max ticks for the available width.\n */\nexport function getMaxTicks(size: number, dimension: number) {\n  const tickWidth = Math.max(size, 0);\n  return Math.floor(dimension / tickWidth);\n}\n\n/**\n * Formats the ticks in a duration format.\n */\nexport function getDurationTicks(domain, maxTicks) {\n  const domainWidth = domain[1] - domain[0];\n  let tickStep: number | null = null;\n  for (const s of DURATION_TICK_STEPS) {\n    if (domainWidth / s < maxTicks) {\n      tickStep = s;\n      break;\n    }\n  }\n\n  if (tickStep === null) {\n    const numDayTicks = domainWidth / ONE_DAY;\n    const dayStep = Math.ceil(numDayTicks / maxTicks);\n    tickStep = ONE_DAY * dayStep;\n  }\n\n  const ticks = [domain[0]];\n  while (ticks[ticks.length - 1] + tickStep <= domain[1]) {\n    ticks.push(ticks[ticks.length - 1] + tickStep);\n  }\n\n  return ticks;\n}\n\n/**\n * Get the tick values from the scale.\n */\nexport function getTicks(\n  scale: any,\n  tickValues: any[],\n  type: 'value' | 'category' | 'time' | 'duration',\n  maxTicks = 100,\n  interval?: number | TimeInterval\n) {\n  let result;\n\n  if (tickValues) {\n    result = tickValues;\n  } else {\n    if (scale.ticks) {\n      if (type === 'duration') {\n        result = getDurationTicks(scale.domain(), maxTicks);\n      } else if (interval) {\n        result = scale.ticks(interval);\n      } else {\n        if (type === 'time') {\n          // If its time, we need to handle the time count\n          // manually because d3 does this odd rounding\n          result = scale.ticks();\n          result = reduceTicks(result, maxTicks);\n        } else {\n          result = scale.ticks(maxTicks);\n        }\n      }\n    } else {\n      tickValues = scale.domain();\n      result = reduceTicks(tickValues, maxTicks);\n    }\n  }\n\n  return result;\n}\n","/**\n * Get the angle from a radian.\n */\nexport const getDegrees = (radians: number) => (radians / Math.PI) * 180 - 90;\n\nexport const roundDecimals = (value: number, decimals: number = 5): number =>\n  parseFloat(value.toFixed(decimals));\n","import classNames from 'classnames';\n\nexport interface PropFunctionTypes {\n  /**\n   * Classnames to apply to the element.\n   */\n  className?: any;\n\n  /**\n   * CSS styles to apply to the element.\n   */\n  style?: any;\n}\n\nexport const functionProps = (prop: string, val: any, data: any) => {\n  if (typeof val === 'function') {\n    return val(data);\n  } else if (prop === 'className') {\n    return classNames(val);\n  } else if (val !== undefined && val !== null) {\n    return val;\n  }\n\n  return {};\n};\n\nexport const constructFunctionProps = (\n  props: PropFunctionTypes,\n  data: any\n) => ({\n  className: functionProps('className', props.className, data),\n  style: functionProps('style', props.style, data)\n});\n","type AccessorCallback = (data: any) => any;\n\n/**\n * Given a dataset and a list of accessors, returns a unique collection.\n */\nexport function uniqueBy<T = any>(data: T[], ...accessors: AccessorCallback[]) {\n  const result: any[] = [];\n  const seen = new Set<any>();\n\n  const ittr = (arr: T[], depth: number) => {\n    for (const a of arr) {\n      const acc = accessors[depth];\n      if (acc === undefined) {\n        throw new Error(`Accessor not found for depth: ${depth}`);\n      }\n\n      const val = acc(a);\n      if (Array.isArray(val)) {\n        ittr(val, depth + 1);\n      } else if (!seen.has(val)) {\n        seen.add(val);\n        result.push(val);\n      }\n    }\n  };\n\n  ittr(data, 0);\n\n  return result;\n}\n","export interface TextDimensions {\n  height: number;\n  width: number;\n}\n\nconst cache: { [key: string]: TextDimensions } = {};\n\nexport const calculateDimensions = (\n  text: string,\n  fontFamily: string,\n  fontSize: string | number\n): TextDimensions => {\n  const key = `${text}_${fontFamily}_${fontSize}`;\n\n  // Check if we have a cache hit\n  if (cache[key]) {\n    return cache[key];\n  }\n\n  // If we are in a Node.js environment\n  if (typeof window === 'undefined' || typeof document === 'undefined') {\n    const height = parseInt(typeof fontSize === 'string' ? fontSize : fontSize.toString(), 10);\n    const dimensions = {\n      height,\n      // 8 is an approximation of the width of a character\n      width: text.length * 8\n    };\n\n    cache[key] = dimensions;\n\n    return dimensions;\n  }\n\n  // Create a temporary div element\n  const element = document.createElement('div');\n\n  // Set up the style so the size can be measured\n  element.style.fontFamily = fontFamily;\n  element.style.fontSize = typeof fontSize === 'string' ? fontSize : `${fontSize}px`;\n  element.style.position = 'absolute';\n  element.style.left = '-9999px';\n  element.style.whiteSpace = 'nowrap';\n  element.style.height = 'auto';\n  element.style.fontWeight = 'normal';\n  element.style.lineHeight = 'normal';\n  element.style.width = 'auto';\n  element.style.wordBreak = 'normal';\n\n  // Add the text to the div\n  element.textContent = text;\n\n  // Add the div to the body\n  document.body.appendChild(element);\n\n  // Measure the div\n  const dimensions = {\n    height: element.offsetHeight,\n    width: element.offsetWidth\n  };\n\n  // Remove the div from the body\n  document.body.removeChild(element);\n\n  // Store the result in the cache for future calls\n  cache[key] = dimensions;\n\n  return dimensions;\n};\n","import React, { ReactElement } from 'react';\nimport { calculateDimensions } from './size';\n\nexport interface WrapTextInputs {\n  key: string;\n  x?: any;\n  paddingY?: number;\n  paddingX?: number;\n  width: number;\n  height?: number;\n  fontFamily: string;\n  fontSize: number;\n  wrap?: boolean;\n  size?: {\n    width: number;\n    height: number;\n  };\n  visibility?: 'auto' | 'always';\n}\n\nexport function wrapText({\n  key,\n  x = 0,\n  size,\n  paddingY,\n  wrap = true,\n  paddingX,\n  width,\n  height,\n  fontFamily,\n  fontSize,\n  visibility = 'auto'\n}: WrapTextInputs): ReactElement | ReactElement[] | null {\n  size = size || calculateDimensions(key, fontFamily, fontSize);\n  const words = key.toString().split(/\\s+/);\n\n  if (words.length > 1 && size.width > width) {\n    let rows = [];\n    let maxWidth = 0;\n    let maxHeight = 0;\n    let curText = '';\n    let currWidth = 0;\n    let nextText = '';\n    let nextWidth = 0;\n\n    for (const word of words) {\n      nextText = curText === '' ? word : `${curText} ${word}`;\n      nextWidth = calculateDimensions(nextText, fontFamily, fontSize).width;\n\n      if (nextWidth <= width - (paddingX ? 2 * paddingX : 0)) {\n        curText = nextText;\n        currWidth = nextWidth;\n      } else {\n        rows.push(curText);\n        maxWidth = Math.max(maxWidth, currWidth);\n        curText = word;\n        currWidth = calculateDimensions(curText, fontFamily, fontSize).width;\n      }\n    }\n    rows.push(curText);\n    maxHeight = rows.length * size.height;\n\n    if (visibility !== 'always') {\n      if (height && maxHeight >= height - (paddingY ? 2 * paddingY : 0)) {\n        return null;\n      }\n\n      if (width && maxWidth >= width - (paddingX ? 2 * paddingX : 0)) {\n        return null;\n      }\n    }\n\n    if (!wrap && rows.length > 1) {\n      return rows[0];\n    }\n\n    return rows.map((r, i) => (\n      <tspan\n        key={i}\n        dominantBaseline=\"alphabetic\"\n        style={{ baselineShift: '0%' }}\n        dy={\n          i > 0\n            ? size.height\n            : height\n              ? size.height / 2 - 5\n              : -maxHeight / 2 + size.height\n        }\n        x={x}\n      >\n        {r}\n      </tspan>\n    ));\n  }\n\n  if (visibility !== 'always') {\n    if (height && size.height + paddingY >= height) {\n      return null;\n    }\n\n    if (width && size.width + paddingX >= width) {\n      return null;\n    }\n  }\n\n  // NOTE: 5px seems to magic number for making it center\n  return (\n    <tspan\n      dominantBaseline=\"alphabetic\"\n      style={{ baselineShift: '0%' }}\n      dy={size.height / 2 - 5}\n      x={x}\n    >\n      {key}\n    </tspan>\n  );\n}\n","import { PointerEvent, useCallback, useEffect, useRef } from 'react';\n\nexport interface HoverIntentOptions {\n  interval?: number;\n  sensitivity?: number;\n  timeout?: number;\n  disabled?: boolean;\n  onPointerOver: (event: PointerEvent<SVGElement>) => void;\n  onPointerOut: (event: PointerEvent<SVGElement>) => void;\n}\n\nexport interface HoverIntentResult {\n  pointerOut: (event: PointerEvent<SVGElement>) => void;\n  pointerOver: (event: PointerEvent<SVGElement>) => void;\n}\n\n/**\n * Hover intent identifies if the user actually is\n * intending to over by measuring the position of the mouse\n * once a pointer enters and determining if in a duration if\n * the mouse moved inside a certain threshold and fires the events.\n */\nexport const useHoverIntent = ({\n  sensitivity = 7,\n  interval = 50,\n  timeout = 10,\n  disabled,\n  onPointerOver,\n  onPointerOut\n}: HoverIntentOptions | undefined): HoverIntentResult => {\n  const mouseOver = useRef<boolean>(false);\n  const timer = useRef<any | null>(null);\n  const state = useRef<number>(0);\n  const coords = useRef({\n    x: null,\n    y: null,\n    px: null,\n    py: null\n  });\n\n  const onMouseMove = useCallback((event: MouseEvent) => {\n    coords.current.x = event.clientX;\n    coords.current.y = event.clientY;\n  }, []);\n\n  const comparePosition = useCallback(\n    (event: PointerEvent<SVGElement>) => {\n      timer.current = clearTimeout(timer.current);\n      const { px, x, py, y } = coords.current;\n\n      if (Math.abs(px - x) + Math.abs(py - y) < sensitivity) {\n        state.current = 1;\n        onPointerOver(event);\n      } else {\n        coords.current.px = x;\n        coords.current.py = y;\n        timer.current = setTimeout(() => comparePosition(event), interval);\n      }\n    },\n    [interval, onPointerOver, sensitivity]\n  );\n\n  const cleanup = useCallback(() => {\n    clearTimeout(timer.current);\n    document.removeEventListener('mousemove', onMouseMove, false);\n  }, [onMouseMove]);\n\n  const pointerOver = useCallback(\n    (event: PointerEvent<SVGElement>) => {\n      if (!disabled) {\n        mouseOver.current = true;\n        cleanup();\n\n        if (state.current !== 1) {\n          coords.current.px = event.nativeEvent.x;\n          coords.current.py = event.nativeEvent.y;\n          document.addEventListener('mousemove', onMouseMove, false);\n          timer.current = setTimeout(() => comparePosition(event), timeout);\n        }\n      }\n    },\n    [cleanup, comparePosition, disabled, onMouseMove, timeout]\n  );\n\n  const delay = useCallback(\n    (event: PointerEvent<SVGElement>) => {\n      timer.current = clearTimeout(timer.current);\n      state.current = 0;\n      onPointerOut(event);\n    },\n    [onPointerOut]\n  );\n\n  const pointerOut = useCallback(\n    (event: PointerEvent<SVGElement>) => {\n      mouseOver.current = false;\n      cleanup();\n\n      if (state.current === 1) {\n        timer.current = setTimeout(() => delay(event), timeout);\n      }\n    },\n    [cleanup, delay, timeout]\n  );\n\n  useEffect(() => {\n    return () => {\n      cleanup();\n    };\n  }, [cleanup]);\n\n  return {\n    pointerOver,\n    pointerOut\n  };\n};\n","import { useEffect, useRef, useState, RefObject } from 'react';\n\ntype Size = {\n  width: number | undefined;\n  height: number | undefined;\n};\n\nexport const useResizeObserver = <T extends HTMLElement>(): [\n  RefObject<T>,\n  Size\n] => {\n  const ref = useRef<T>(null);\n  const [size, setSize] = useState<Size>({\n    width: undefined,\n    height: undefined\n  });\n\n  useEffect(() => {\n    const element = ref.current;\n    if (!element) return;\n\n    const resizeObserver = new ResizeObserver((entries) => {\n      if (entries.length === 0) return;\n      const entry = entries[0];\n      setSize({\n        width: entry.contentRect.width,\n        height: entry.contentRect.height\n      });\n    });\n\n    resizeObserver.observe(element);\n\n    return () => {\n      resizeObserver.disconnect();\n    };\n  }, []);\n\n  return [ref, size];\n};\n","/**\n * Merges default props with props and returns a new object, filtering out undefined values to keep original behavior.\n * @param defaultProps - The default props to merge.\n * @param props - The props to merge.\n * @returns The merged props.\n */\n\nexport const mergeDefaultProps = <T>(\n  defaultProps: Partial<T>,\n  props: Partial<T> = {}\n): T => {\n  const filteredProps = Object.fromEntries(\n    Object.entries(props).filter(([_, value]) => value !== undefined)\n  );\n  return { ...defaultProps, ...filteredProps } as T;\n};\n","import React, { Fragment, FC, ReactElement } from 'react';\nimport { GradientProps, Gradient } from '@/common/Gradient';\nimport { CloneElement, useId } from 'reablocks';\nimport { mergeDefaultProps } from '@/common/utils';\n\nexport interface LinearAxisLineProps {\n  height: number;\n  width: number;\n  strokeColor?: string;\n  strokeWidth: number;\n  strokeGradient: ReactElement<GradientProps, typeof Gradient> | null;\n  scale: any;\n  orientation: 'horizontal' | 'vertical';\n  className?: string;\n}\n\nexport const LinearAxisLine: FC<Partial<LinearAxisLineProps>> = (props) => {\n  const {\n    strokeColor,\n    strokeWidth,\n    strokeGradient,\n    scale,\n    orientation,\n    className\n  } = mergeDefaultProps(linearAxisLineDefaultProps, props);\n  const id = useId();\n  const [range0, range1] = scale.range();\n\n  return (\n    <Fragment>\n      <line\n        className={className}\n        x1={orientation === 'vertical' ? 0 : range0}\n        // Workaround for a Chrome/Firefox bug where it won't render gradients for straight lines\n        x2={orientation === 'vertical' ? 0.00001 : range1}\n        y1={orientation === 'vertical' ? range0 : 0}\n        y2={orientation === 'vertical' ? range1 : 0.00001}\n        strokeWidth={strokeWidth}\n        stroke={strokeGradient ? `url(#axis-gradient-${id})` : strokeColor}\n      />\n      {strokeGradient && (\n        <CloneElement<GradientProps>\n          element={strokeGradient}\n          id={`axis-gradient-${id}`}\n        />\n      )}\n    </Fragment>\n  );\n};\n\nexport const linearAxisLineDefaultProps = {\n  strokeColor: '#8F979F',\n  strokeWidth: 1\n};\n","import React, { FC, useMemo } from 'react';\n\nexport interface LinearAxisTickLineProps {\n  height: number;\n  width: number;\n  orientation: 'horizontal' | 'vertical';\n  size: number;\n  strokeColor?: string;\n  strokeWidth: number;\n  position: 'start' | 'end' | 'center';\n  className?: string;\n}\n\nexport const LinearAxisTickLine: FC<Partial<LinearAxisTickLineProps>> = (\n  props\n) => {\n  const { size, position, orientation, strokeColor, strokeWidth, className } = {\n    ...LINEAR_AXIS_TICK_LINE_DEFAULT_PROPS,\n    ...props\n  };\n\n  const path = useMemo(() => {\n    const isVertical = orientation === 'vertical';\n    const tickSize = size || 0;\n    const start =\n      position === 'start'\n        ? tickSize * -1\n        : position === 'center'\n          ? tickSize * -0.5\n          : 0;\n    const end = start + tickSize;\n\n    return {\n      x1: isVertical ? end : 0,\n      x2: isVertical ? start : 0,\n      y1: isVertical ? 0 : start,\n      y2: isVertical ? 0 : end\n    };\n  }, [orientation, position, size]);\n\n  return (\n    <line\n      className={className}\n      strokeWidth={strokeWidth}\n      stroke={strokeColor}\n      {...path}\n    />\n  );\n};\n\nexport const LINEAR_AXIS_TICK_LINE_DEFAULT_PROPS = {\n  strokeColor: '#8F979F',\n  strokeWidth: 1,\n  size: 5\n};\n","import React, { FC, ReactElement } from 'react';\nimport {\n  LINEAR_AXIS_TICK_LINE_DEFAULT_PROPS,\n  LinearAxisTickLine,\n  LinearAxisTickLineProps\n} from './LinearAxisTickLine';\nimport { mergeDefaultProps } from '@/common/utils';\nimport classNames from 'classnames';\nimport css from './LinearAxisTickLabel.module.css';\n\nexport interface LinearAxisTickLabelProps {\n  text: string;\n  fullText: string;\n  /**\n   * The raw data value for this tick (e.g., Date object, number, string).\n   */\n  data: any;\n  angle: number;\n  orientation: 'horizontal' | 'vertical';\n  half: 'start' | 'end' | 'center';\n  line: ReactElement<LinearAxisTickLineProps, typeof LinearAxisTickLine>;\n  format?: (v) => any;\n  /**\n   * Format tooltip title on hover label.\n   */\n  formatTooltip?: (value: any) => any | string;\n  fill: string;\n  fontSize: number;\n  fontFamily: string;\n  rotation: boolean | number;\n  padding: number | { fromAxis: number; alongAxis: number };\n  textAnchor?: 'start' | 'end' | 'middle';\n  position: 'start' | 'end' | 'center';\n  align: 'start' | 'end' | 'center' | 'inside' | 'outside';\n  className?: string;\n  /**\n   * Click handler for the label.\n   */\n  onClick?: (event: React.MouseEvent<SVGGElement>, data: any) => void;\n}\n\nexport const LinearAxisTickLabel: FC<Partial<LinearAxisTickLabelProps>> = (\n  props\n) => {\n  const {\n    text,\n    fullText,\n    data,\n    angle,\n    orientation,\n    half,\n    line,\n    textAnchor,\n    position,\n    className,\n    fill,\n    fontSize,\n    fontFamily,\n    rotation,\n    padding,\n    formatTooltip,\n    align,\n    onClick\n  } = mergeDefaultProps(LINEAR_AXIS_TICK_LABEL_DEFAULT_PROPS, props);\n\n  function getAlign() {\n    if ((align === 'inside' || align === 'outside') && half === 'center') {\n      return 'center';\n    }\n\n    if (align === 'inside') {\n      return half === 'start' ? 'end' : 'start';\n    }\n\n    if (align === 'outside') {\n      return half === 'start' ? 'start' : 'end';\n    }\n\n    return align;\n  }\n\n  // bug in this function - spacing is NA\n  function getTickLineSpacing() {\n    if (!line) {\n      return [0, 0];\n    }\n\n    const lineProps = { ...LINEAR_AXIS_TICK_LINE_DEFAULT_PROPS, ...line.props };\n    const size = lineProps.size ?? 3;\n    const position = lineProps.position ?? 'center';\n\n    if (position === 'start') {\n      return [size * -1, 0];\n    } else if (position === 'end') {\n      return [0, size];\n    } else {\n      return [size * -0.5, size * 0.5];\n    }\n  }\n\n  function getOffset() {\n    const adjustedPadding =\n      typeof padding === 'number'\n        ? { fromAxis: padding, alongAxis: padding }\n        : padding;\n\n    const spacing = getTickLineSpacing();\n    const offset1 =\n      position === 'start'\n        ? spacing[0] - adjustedPadding.fromAxis\n        : position === 'end'\n          ? spacing[1] + adjustedPadding.fromAxis\n          : 0;\n\n    const align = getAlign();\n    let offset2 = 0;\n    offset2 +=\n      align === 'center'\n        ? 0\n        : align === 'start'\n          ? -adjustedPadding.alongAxis\n          : adjustedPadding.alongAxis;\n\n    const horz = orientation === 'horizontal';\n\n    return {\n      [horz ? 'x' : 'y']: offset2,\n      [horz ? 'y' : 'x']: offset1\n    };\n  }\n\n  function getTextPosition() {\n    let transform = '';\n    let newtextAnchor = '';\n    let alignmentBaseline = 'middle' as 'middle' | 'baseline' | 'hanging';\n\n    if (angle !== 0) {\n      transform = `rotate(${angle})`;\n      newtextAnchor = 'end';\n    } else {\n      const align = getAlign();\n      if (orientation === 'horizontal') {\n        newtextAnchor =\n          align === 'center' ? 'middle' : align === 'start' ? 'end' : 'start';\n        if (position === 'start') {\n          alignmentBaseline = 'baseline';\n        } else if (position === 'end') {\n          alignmentBaseline = 'hanging';\n        }\n      } else {\n        alignmentBaseline =\n          align === 'center'\n            ? 'middle'\n            : align === 'start'\n              ? 'baseline'\n              : 'hanging';\n        if (position === 'start') {\n          newtextAnchor = 'end';\n        } else if (position === 'end') {\n          newtextAnchor = 'start';\n        } else {\n          newtextAnchor = 'middle';\n        }\n      }\n    }\n\n    return {\n      transform,\n      textAnchor: (textAnchor || newtextAnchor) as\n        | 'start'\n        | 'end'\n        | 'middle'\n        | 'inherit',\n      alignmentBaseline\n    };\n  }\n\n  const { x, y } = getOffset();\n  const textPosition = getTextPosition();\n  const titleHover =\n    typeof formatTooltip === 'function' ? formatTooltip(fullText) : fullText;\n\n  return (\n    <g\n      transform={`translate(${x}, ${y})`}\n      fontSize={fontSize}\n      fontFamily={fontFamily}\n      className={classNames({\n        [css.clickable]: !!onClick\n      })}\n      onClick={(event) => onClick?.(event, data)}\n    >\n      <title>{titleHover}</title>\n      <text {...textPosition} fill={fill} className={className}>\n        {text}\n      </text>\n    </g>\n  );\n};\n\nexport const LINEAR_AXIS_TICK_LABEL_DEFAULT_PROPS: Partial<LinearAxisTickLabelProps> =\n  {\n    fill: '#8F979F',\n    fontSize: 11,\n    fontFamily: 'sans-serif',\n    rotation: true,\n    padding: 5,\n    align: 'center'\n  };\n","import React, { FC, Fragment, ReactElement, useCallback, useMemo } from 'react';\nimport {\n  LINEAR_AXIS_TICK_LABEL_DEFAULT_PROPS,\n  LinearAxisTickLabel,\n  LinearAxisTickLabelProps\n} from './LinearAxisTickLabel';\nimport {\n  LINEAR_AXIS_TICK_LINE_DEFAULT_PROPS,\n  LinearAxisTickLine,\n  LinearAxisTickLineProps\n} from './LinearAxisTickLine';\nimport { formatValue } from '@/common/utils/formatting';\nimport { getTicks, getMaxTicks } from '@/common/utils/ticks';\nimport { TimeInterval } from 'd3-time';\nimport { CloneElement } from 'reablocks';\nimport { LinearAxisProps } from './LinearAxis';\nimport ellipsize from 'ellipsize';\nimport { max } from 'd3-array';\nimport { calculateDimensions } from '@/common/utils/size';\nimport { mergeDefaultProps } from '@/common/utils';\n\nexport interface LinearAxisTickSeriesProps {\n  height: number;\n  width: number;\n  scale: any;\n  interval?: number | TimeInterval;\n  tickSize: number;\n  tickValues: any[];\n  orientation: 'horizontal' | 'vertical';\n  label: ReactElement<\n    LinearAxisTickLabelProps,\n    typeof LinearAxisTickLabel\n  > | null;\n  line: ReactElement<LinearAxisTickLineProps, typeof LinearAxisTickLine> | null;\n  axis: LinearAxisProps;\n  /**\n   * The maximum length for ellipsizing tick labels. Default is 18.\n   */\n  ellipsisLength?: number;\n}\n\ninterface ProcessedTick {\n  text: string;\n  fullText: string;\n  data: any;\n  x: number;\n  y: number;\n  height: number;\n  width: number;\n  half: 'start' | 'end' | 'center';\n}\n\nexport const LinearAxisTickSeries: FC<Partial<LinearAxisTickSeriesProps>> = (\n  props\n) => {\n  const {\n    scale,\n    orientation,\n    height,\n    width,\n    label,\n    tickSize,\n    tickValues,\n    interval,\n    line,\n    axis,\n    ellipsisLength\n  } = mergeDefaultProps(LINEAR_AXIS_TICK_SERIES_DEFAULT_PROPS, props);\n\n  const labelProps = useMemo(\n    () => ({\n      ...LINEAR_AXIS_TICK_LABEL_DEFAULT_PROPS,\n      ...(label?.props ?? {})\n    }),\n    [label?.props]\n  );\n\n  /**\n   * Gets the adjusted scale given offsets.\n   */\n  const getAdjustedScale = useCallback(() => {\n    if (scale.bandwidth) {\n      let offset = scale.bandwidth() / 2;\n      if (scale.round()) {\n        offset = Math.round(offset);\n      }\n\n      return (d) => +scale(d) + offset;\n    } else {\n      return (d) => +scale(d);\n    }\n  }, [scale]);\n\n  /**\n   * Gets the x/y position for a given tick.\n   */\n  const getPosition = useCallback(\n    (scaledTick: number) => {\n      if (orientation === 'horizontal') {\n        return { x: scaledTick, y: 0 };\n      } else {\n        return { x: 0, y: scaledTick };\n      }\n    },\n    [orientation]\n  );\n\n  /**\n   * Gets the dimension (height/width) this axis is calculating on.\n   */\n  const getDimension = useCallback(() => {\n    return orientation === 'vertical' ? height : width;\n  }, [height, orientation, width]);\n\n  /**\n   * Gets the formatted label of the tick.\n   */\n  const labelFormatFn = useMemo((): any => {\n    if (labelProps.format) {\n      return labelProps.format;\n    } else if (scale.tickFormat) {\n      return scale.tickFormat.apply(scale, [5]);\n    } else {\n      return (v) => formatValue(v);\n    }\n  }, [labelProps.format, scale]);\n\n  /**\n   * Gets the ticks given the dimensions and scales and returns\n   * the text and position.\n   */\n  const ticks = useMemo((): ProcessedTick[] => {\n    const dimension = getDimension();\n    const maxTicks = getMaxTicks(tickSize, dimension);\n    const ticks = getTicks(scale, tickValues, axis.type, maxTicks, interval);\n    const adjustedScale = getAdjustedScale();\n    const format = labelFormatFn;\n    const midpoint = dimension / 2;\n\n    return ticks.map((tick) => {\n      const fullText = format(tick);\n      const scaledTick = adjustedScale(tick);\n      const position = getPosition(scaledTick);\n      const text = ellipsize(fullText, ellipsisLength);\n      const size = label\n        ? calculateDimensions(\n            text,\n            labelProps.fontFamily,\n            labelProps.fontSize?.toString()\n          )\n        : {};\n\n      return {\n        ...position,\n        ...size,\n        text,\n        fullText,\n        data: tick,\n        half:\n          scaledTick === midpoint\n            ? 'center'\n            : scaledTick < midpoint\n              ? 'start'\n              : 'end'\n      };\n    });\n  }, [\n    axis.type,\n    ellipsisLength,\n    getAdjustedScale,\n    getDimension,\n    getPosition,\n    interval,\n    label,\n    labelProps,\n    labelFormatFn,\n    scale,\n    tickSize,\n    tickValues\n  ]);\n\n  /**\n   * Calculates the rotation angle that the ticks need to be shifted to.\n   * This equation will measure the length of the text in a external canvas\n   * object and determine what the longest label is and rotate until they fit.\n   */\n  const angle = useMemo((): number => {\n    if (!label) {\n      return 0;\n    }\n\n    const dimension = getDimension();\n    const maxTicksLength = max(ticks, (tick) => tick.width);\n    let angle = 0;\n\n    if (labelProps.rotation) {\n      if (labelProps.rotation === true) {\n        let baseWidth = maxTicksLength;\n        const maxBaseWidth = Math.floor(dimension / ticks.length);\n\n        while (baseWidth > maxBaseWidth && angle > -90) {\n          angle -= 30;\n          baseWidth = Math.cos(angle * (Math.PI / 180)) * maxTicksLength;\n        }\n      } else {\n        angle = labelProps.rotation;\n      }\n    }\n\n    return angle;\n  }, [getDimension, label, labelProps, ticks]);\n\n  return (\n    <Fragment>\n      {ticks.map((tick, i) => (\n        <g key={i} transform={`translate(${tick.x}, ${tick.y})`}>\n          {line && (\n            <CloneElement<LinearAxisTickLineProps>\n              element={line}\n              height={height}\n              width={width}\n              orientation={orientation}\n            />\n          )}\n          {label && (\n            <CloneElement<LinearAxisTickLabelProps>\n              element={label}\n              text={tick.text}\n              fullText={tick.fullText}\n              data={tick.data}\n              half={tick.half}\n              angle={angle}\n              orientation={orientation}\n              line={line!}\n            />\n          )}\n        </g>\n      ))}\n    </Fragment>\n  );\n};\n\nexport const LINEAR_AXIS_TICK_SERIES_DEFAULT_PROPS = {\n  line: (\n    <LinearAxisTickLine\n      {...LINEAR_AXIS_TICK_LINE_DEFAULT_PROPS}\n      height={10}\n      width={10}\n      orientation=\"horizontal\"\n      position=\"center\"\n    />\n  ),\n  label: (\n    <LinearAxisTickLabel\n      line={\n        <LinearAxisTickLine\n          {...LINEAR_AXIS_TICK_LINE_DEFAULT_PROPS}\n          orientation=\"horizontal\"\n          position=\"center\"\n          height={5}\n          width={5}\n        />\n      }\n      text=\"\"\n      fullText=\"\"\n      data={undefined}\n      angle={0}\n      orientation=\"horizontal\"\n      half=\"start\"\n      position=\"center\"\n    />\n  ),\n  tickSize: 30,\n  ellipsisLength: 18\n};\n","import { CloneElement } from 'reablocks';\nimport React, {\n  FC,\n  ReactElement,\n  useRef,\n  useCallback,\n  useEffect,\n  useMemo,\n  useState\n} from 'react';\nimport { ChartDataTypes } from '@/common/data';\nimport { LinearAxisLine, LinearAxisLineProps } from './LinearAxisLine';\nimport {\n  LINEAR_AXIS_TICK_SERIES_DEFAULT_PROPS,\n  LinearAxisTickSeries,\n  LinearAxisTickSeriesProps\n} from './LinearAxisTickSeries';\nimport { mergeDefaultProps } from '@/common/utils';\n\nexport interface LinearAxisDimensionChanged {\n  height?: number;\n  width?: number;\n}\n\nexport interface LinearAxisProps {\n  height?: number;\n  width?: number;\n  domain?: ChartDataTypes[];\n  scaled?: boolean;\n  roundDomains?: boolean;\n  type?: 'value' | 'time' | 'category' | 'duration';\n  position?: 'start' | 'end' | 'center';\n  tickSeries?: ReactElement<\n    LinearAxisTickSeriesProps,\n    typeof LinearAxisTickSeries\n  >;\n  axisLine?: ReactElement<LinearAxisLineProps, typeof LinearAxisLine> | null;\n  scale?: any;\n  visibility?: 'visible' | 'hidden';\n  orientation?: 'horizontal' | 'vertical';\n  onDimensionsChange?: (event: LinearAxisDimensionChanged) => void;\n}\n\ninterface LinearAxisState {\n  height?: number;\n  width?: number;\n}\n\nconst MIN_DIMENSION_CHANGE = 6;\n\nexport const LinearAxis: FC<Partial<LinearAxisProps>> = (props) => {\n  const {\n    position,\n    tickSeries,\n    axisLine,\n    height,\n    width,\n    scale,\n    orientation,\n    visibility = 'visible',\n    onDimensionsChange\n  } = mergeDefaultProps(LINEAR_AXIS_DEFAULT_PROPS, props);\n  const tickSeriesProps = useMemo(\n    () =>\n      mergeDefaultProps(\n        LINEAR_AXIS_TICK_SERIES_DEFAULT_PROPS,\n        tickSeries?.props\n      ),\n    [tickSeries?.props]\n  );\n\n  const containerRef = useRef<SVGGElement>(null);\n  const [dimensions, setDimensions] = useState<LinearAxisState>({\n    height: height,\n    width: width\n  });\n\n  const updateDimensions = useCallback(() => {\n    const shouldOffset = position !== 'center';\n\n    let height;\n    let width;\n    if (shouldOffset) {\n      const dims = containerRef.current!.getBoundingClientRect();\n      width = Math.floor(dims.width);\n      height = Math.floor(dims.height);\n    }\n\n    if (orientation === 'vertical') {\n      // Condition check to prevent the infinite loop of re-renders when the tickSize prop is changed\n      if (Math.abs(dimensions.width - width) > MIN_DIMENSION_CHANGE) {\n        setDimensions({ ...dimensions, width: width });\n        onDimensionsChange({ width });\n      }\n    } else {\n      if (dimensions.height !== height) {\n        setDimensions({ ...dimensions, height: height });\n        onDimensionsChange({ height });\n      }\n    }\n  }, [containerRef, dimensions, onDimensionsChange, orientation, position]);\n\n  useEffect(() => {\n    updateDimensions();\n  }, [updateDimensions, height, width, scale]);\n\n  function getPosition() {\n    let translateY = 0;\n    let translateX = 0;\n\n    if (position === 'end' && orientation === 'horizontal') {\n      translateY = height;\n    } else if (position === 'center' && orientation === 'horizontal') {\n      translateY = height / 2;\n    } else if (position === 'end' && orientation === 'vertical') {\n      translateX = width;\n    } else if (position === 'center' && orientation === 'vertical') {\n      translateX = width / 2;\n    }\n\n    return { translateX, translateY };\n  }\n\n  const { translateX, translateY } = getPosition();\n\n  return (\n    <g\n      transform={`translate(${translateX}, ${translateY})`}\n      ref={containerRef}\n      visibility={visibility}\n    >\n      {axisLine && (\n        <CloneElement<LinearAxisLineProps>\n          element={axisLine}\n          height={height}\n          width={width}\n          scale={scale}\n          orientation={orientation}\n        />\n      )}\n      {(tickSeriesProps.line || tickSeriesProps.label) && (\n        <CloneElement<LinearAxisTickSeriesProps>\n          element={tickSeries}\n          height={height}\n          width={width}\n          scale={scale}\n          orientation={orientation}\n          axis={props}\n        />\n      )}\n    </g>\n  );\n};\n\nexport const LINEAR_AXIS_DEFAULT_PROPS = {\n  scaled: false,\n  roundDomains: false,\n  axisLine: <LinearAxisLine />,\n  onDimensionsChange: () => undefined\n};\n","import React, { FC, useMemo } from 'react';\nimport {\n  LinearAxisTickLabelProps,\n  LinearAxisTickLabel,\n  LINEAR_AXIS_TICK_LABEL_DEFAULT_PROPS\n} from './LinearAxisTickLabel';\nimport {\n  LinearAxisTickLineProps,\n  LinearAxisTickLine,\n  LINEAR_AXIS_TICK_LINE_DEFAULT_PROPS\n} from './LinearAxisTickLine';\nimport {\n  LinearAxisTickSeriesProps,\n  LinearAxisTickSeries,\n  LINEAR_AXIS_TICK_SERIES_DEFAULT_PROPS\n} from './LinearAxisTickSeries';\nimport {\n  LinearAxisProps,\n  LinearAxis,\n  LINEAR_AXIS_DEFAULT_PROPS\n} from './LinearAxis';\nimport { mergeDefaultProps } from '@/common/utils';\n\nexport const LinearXAxisTickLabel: FC<Partial<LinearAxisTickLabelProps>> = (\n  props\n) => (\n  <LinearAxisTickLabel\n    {...mergeDefaultProps(LINEAR_X_AXIS_TICK_LABEL_DEFAULT_PROPS, props)}\n  />\n);\nexport const LINEAR_X_AXIS_TICK_LABEL_DEFAULT_PROPS = {\n  ...LINEAR_AXIS_TICK_LABEL_DEFAULT_PROPS,\n  rotation: true,\n  position: 'end',\n  align: 'center'\n} as Partial<LinearAxisTickLabelProps>;\n\nexport const LinearXAxisTickLine: FC<Partial<LinearAxisTickLineProps>> = (\n  props\n) => (\n  <LinearAxisTickLine\n    {...mergeDefaultProps(LINEAR_X_AXIS_TICK_LINE_DEFAULT_PROPS, props)}\n  />\n);\nexport const LINEAR_X_AXIS_TICK_LINE_DEFAULT_PROPS = {\n  ...LINEAR_AXIS_TICK_LINE_DEFAULT_PROPS,\n  position: 'end'\n} as Partial<LinearAxisTickLineProps>;\n\nexport const LinearXAxisTickSeries: FC<Partial<LinearAxisTickSeriesProps>> = (\n  props\n) => {\n  const xTickSeriesProps = mergeDefaultProps(\n    LINEAR_X_AXIS_TICK_SERIES_DEFAULT_PROPS,\n    props\n  );\n\n  return (\n    <LinearAxisTickSeries\n      {...xTickSeriesProps}\n      line={\n        xTickSeriesProps?.line ? (\n          <LinearXAxisTickLine\n            {...mergeDefaultProps(\n              LINEAR_X_AXIS_TICK_LINE_DEFAULT_PROPS,\n              props?.line?.props\n            )}\n          />\n        ) : null\n      }\n      label={\n        xTickSeriesProps?.label ? (\n          <LinearXAxisTickLabel\n            {...mergeDefaultProps(\n              LINEAR_X_AXIS_TICK_LABEL_DEFAULT_PROPS,\n              props?.label?.props\n            )}\n          />\n        ) : null\n      }\n    />\n  );\n};\nexport const LINEAR_X_AXIS_TICK_SERIES_DEFAULT_PROPS = {\n  ...LINEAR_AXIS_TICK_SERIES_DEFAULT_PROPS,\n  tickSize: 75,\n  line: <LinearXAxisTickLine {...LINEAR_X_AXIS_TICK_LINE_DEFAULT_PROPS} />,\n  label: <LinearXAxisTickLabel {...LINEAR_X_AXIS_TICK_LABEL_DEFAULT_PROPS} />\n};\n\nexport const LinearXAxis: FC<Partial<LinearAxisProps>> = (props) => {\n  const xAxisProps = useMemo(\n    () => mergeDefaultProps(LINEAR_X_AXIS_DEFAULT_PROPS, props),\n    [props]\n  );\n\n  return (\n    <LinearAxis\n      {...xAxisProps}\n      tickSeries={\n        xAxisProps.tickSeries && (\n          <LinearXAxisTickSeries\n            {...mergeDefaultProps(\n              LINEAR_X_AXIS_TICK_SERIES_DEFAULT_PROPS,\n              xAxisProps?.tickSeries?.props\n            )}\n          />\n        )\n      }\n    />\n  );\n};\nexport const LINEAR_X_AXIS_DEFAULT_PROPS = {\n  ...LINEAR_AXIS_DEFAULT_PROPS,\n  position: 'end',\n  roundDomains: false,\n  scaled: false,\n  type: 'value',\n  orientation: 'horizontal',\n  tickSeries: <LinearXAxisTickSeries />\n} as Partial<LinearAxisProps>;\n","import React, { FC, useMemo } from 'react';\nimport {\n  LinearAxisTickLabelProps,\n  LinearAxisTickLabel,\n  LINEAR_AXIS_TICK_LABEL_DEFAULT_PROPS\n} from './LinearAxisTickLabel';\nimport {\n  LinearAxisTickLineProps,\n  LinearAxisTickLine,\n  LINEAR_AXIS_TICK_LINE_DEFAULT_PROPS\n} from './LinearAxisTickLine';\nimport {\n  LinearAxisTickSeriesProps,\n  LinearAxisTickSeries,\n  LINEAR_AXIS_TICK_SERIES_DEFAULT_PROPS\n} from './LinearAxisTickSeries';\nimport {\n  LinearAxisProps,\n  LinearAxis,\n  LINEAR_AXIS_DEFAULT_PROPS\n} from './LinearAxis';\nimport { mergeDefaultProps } from '@/common/utils';\n\nexport const LinearYAxisTickLabel: FC<Partial<LinearAxisTickLabelProps>> = (\n  props\n) => (\n  <LinearAxisTickLabel\n    {...mergeDefaultProps(LINEAR_Y_AXIS_TICK_LABEL_DEFAULT_PROPS, props)}\n  />\n);\nexport const LINEAR_Y_AXIS_TICK_LABEL_DEFAULT_PROPS = {\n  ...LINEAR_AXIS_TICK_LABEL_DEFAULT_PROPS,\n  rotation: false,\n  position: 'start',\n  align: 'center'\n} as Partial<LinearAxisTickLabelProps>;\n\nexport const LinearYAxisTickLine: FC<Partial<LinearAxisTickLineProps>> = (\n  props\n) => (\n  <LinearAxisTickLine\n    {...mergeDefaultProps(LINEAR_Y_AXIS_TICK_LINE_DEFAULT_PROPS, props)}\n  />\n);\nexport const LINEAR_Y_AXIS_TICK_LINE_DEFAULT_PROPS = {\n  ...LINEAR_AXIS_TICK_LINE_DEFAULT_PROPS,\n  position: 'start'\n} as Partial<LinearAxisTickLineProps>;\n\nexport const LinearYAxisTickSeries: FC<Partial<LinearAxisTickSeriesProps>> = (\n  props\n) => {\n  const yTickSeriesProps = mergeDefaultProps(\n    LINEAR_Y_AXIS_TICK_SERIES_DEFAULT_PROPS,\n    props\n  );\n\n  return (\n    <LinearAxisTickSeries\n      {...yTickSeriesProps}\n      line={\n        yTickSeriesProps?.line ? (\n          <LinearYAxisTickLine\n            {...mergeDefaultProps(\n              LINEAR_Y_AXIS_TICK_LINE_DEFAULT_PROPS,\n              props?.line?.props\n            )}\n          />\n        ) : null\n      }\n      label={\n        yTickSeriesProps?.label ? (\n          <LinearYAxisTickLabel\n            {...mergeDefaultProps(\n              LINEAR_Y_AXIS_TICK_LABEL_DEFAULT_PROPS,\n              props?.label?.props\n            )}\n          />\n        ) : null\n      }\n    />\n  );\n};\nexport const LINEAR_Y_AXIS_TICK_SERIES_DEFAULT_PROPS = {\n  ...LINEAR_AXIS_TICK_SERIES_DEFAULT_PROPS,\n  tickSize: 30,\n  line: <LinearYAxisTickLine {...LINEAR_Y_AXIS_TICK_LINE_DEFAULT_PROPS} />,\n  label: <LinearYAxisTickLabel {...LINEAR_Y_AXIS_TICK_LABEL_DEFAULT_PROPS} />\n};\n\nexport const LinearYAxis: FC<Partial<LinearAxisProps>> = (props) => {\n  const yAxisProps = useMemo(\n    () => mergeDefaultProps(LINEAR_Y_AXIS_DEFAULT_PROPS, props),\n    [props]\n  );\n\n  return (\n    <LinearAxis\n      {...yAxisProps}\n      tickSeries={\n        yAxisProps.tickSeries && (\n          <LinearYAxisTickSeries\n            {...mergeDefaultProps(\n              LINEAR_Y_AXIS_TICK_SERIES_DEFAULT_PROPS,\n              yAxisProps?.tickSeries?.props\n            )}\n          />\n        )\n      }\n    />\n  );\n};\nexport const LINEAR_Y_AXIS_DEFAULT_PROPS = {\n  ...LINEAR_AXIS_DEFAULT_PROPS,\n  orientation: 'vertical',\n  scaled: false,\n  roundDomains: false,\n  type: 'value',\n  position: 'start',\n  tickSeries: <LinearYAxisTickSeries />\n} as Partial<LinearAxisProps>;\n","import { LinearAxisProps } from './LinearAxis';\n\n/**\n * Returns whether the axis has a visual element or not.\n */\nexport const isAxisVisible = (axis: LinearAxisProps) =>\n  !!axis.tickSeries.props.label || !!axis.tickSeries.props.line;\n","import React, { FC } from 'react';\n\nexport interface RadialAxisTickLineProps {\n  /**\n   * Size of the tick line.\n   */\n  size?: number;\n\n  /**\n   * Stroke color of the tick line.\n   */\n  stroke: string;\n\n  /**\n   * Inner radius of the arc.\n   */\n  innerRadius: number;\n\n  /**\n   * Outer radius of the arc.\n   */\n  outerRadius: number;\n\n  /**\n   * Position of the tick line.\n   */\n  position: 'inside' | 'outside';\n}\n\nexport const RadialAxisTickLine: FC<Partial<RadialAxisTickLineProps>> = (\n  props\n) => {\n  const { stroke, size, position, innerRadius, outerRadius } = {\n    ...RADIAL_AXIS_TICK_LINE_DEFAULT_PROPS,\n    ...props\n  };\n\n  const x1 = position === 'outside' ? size : -(outerRadius - innerRadius);\n\n  return (\n    <line x1={x1} x2={0} stroke={stroke} style={{ pointerEvents: 'none' }} />\n  );\n};\n\nexport const RADIAL_AXIS_TICK_LINE_DEFAULT_PROPS = {\n  stroke: 'rgba(113, 128, 141, .5)',\n  size: 10,\n  position: 'inside'\n};\n","import React, { FC, SVGTextElementAttributes, useMemo } from 'react';\nimport { formatValue } from '@/common/utils/formatting';\nimport classNames from 'classnames';\nimport css from './RadialAxisTickLabel.module.css';\n\nconst rad2deg = (angle: number) => (angle * 180) / Math.PI;\n\nexport interface RadialAxisTickLabelProps\n  extends Omit<SVGTextElementAttributes<SVGTextElement>, 'format' | 'onClick'> {\n  /**\n   * Data to render.\n   */\n  data: any;\n\n  /**\n   * Size of the line.\n   */\n  lineSize: number;\n\n  /**\n   * Color of the text.\n   */\n  fill: string;\n\n  /**\n   * Font size of the text.\n   */\n  fontSize: number;\n\n  /**\n   * Rotation of the text.\n   */\n  rotation: number;\n\n  /**\n   * Font family of the text.\n   */\n  fontFamily: string;\n\n  /**\n   * Index of the tick.\n   */\n  index: number;\n\n  /**\n   * Padding of the tick.\n   */\n  padding: number;\n\n  /**\n   * Point of the tick.\n   */\n  point: any;\n\n  /**\n   * Auto rotate the text.\n   */\n  autoRotate: boolean;\n\n  /**\n   * Format of the label.\n   */\n  format?: (value: any, index: number) => any | string;\n\n  /**\n   * Format tooltip title on hover label.\n   */\n  formatTooltip?: (value: any, index: number) => any | string;\n\n  /**\n   * Click handler for the label.\n   */\n  onClick?: (event: React.MouseEvent<SVGGElement>, value: any) => void;\n}\n\nexport const RadialAxisTickLabel: FC<Partial<RadialAxisTickLabelProps>> = ({\n  point,\n  autoRotate = true,\n  rotation,\n  padding = 15,\n  data,\n  fill = '#71808d',\n  fontFamily = 'sans-serif',\n  fontSize = 11,\n  format,\n  lineSize,\n  index,\n  formatTooltip,\n  onClick,\n  ...rest\n}) => {\n  const { transform, textAnchor } = useMemo(() => {\n    let textAnchor;\n    let transform;\n\n    if (autoRotate) {\n      // TODO: This centers the text, determine better way later\n      if (\n        (rotation >= 85 && rotation <= 95) ||\n        (rotation <= -85 && rotation >= -95) ||\n        (rotation >= 265 && rotation <= 275) ||\n        (rotation <= -265 && rotation >= -275)\n      ) {\n        textAnchor = 'middle';\n      } else if (\n        (rotation < -85 && rotation > -265) ||\n        (rotation > 95 && rotation < 265)\n      ) {\n        textAnchor = 'end';\n      } else {\n        textAnchor = 'start';\n      }\n\n      transform = `rotate(${90 - rad2deg(point)}, ${padding}, 0)`;\n    } else {\n      const shouldRotate = rotation && (rotation > 100 || rotation < -100);\n      const rotate = shouldRotate ? 180 : 0;\n      const translate = shouldRotate ? -30 : 0;\n      textAnchor = shouldRotate ? 'end' : 'start';\n      transform = `rotate(${rotate}) translate(${translate})`;\n    }\n\n    return {\n      transform,\n      textAnchor\n    };\n  }, [autoRotate, padding, point, rotation]);\n\n  const text = format ? format(data, index) : formatValue(data);\n  const titleHover =\n    typeof formatTooltip === 'function' ? formatTooltip(data, index) : text;\n\n  return (\n    <g\n      transform={transform}\n      className={classNames({\n        [css.clickable]: !!onClick\n      })}\n      onClick={(event) => onClick?.(event, data)}\n    >\n      <title>{titleHover}</title>\n      <text\n        dy=\"0.35em\"\n        x={lineSize + 5}\n        textAnchor={textAnchor}\n        fill={fill}\n        fontFamily={fontFamily}\n        fontSize={fontSize}\n        {...rest}\n      >\n        {text}\n      </text>\n    </g>\n  );\n};\n","import React, { FC, ReactElement, useMemo } from 'react';\nimport {\n  RadialAxisTickLineProps,\n  RadialAxisTickLine,\n  RADIAL_AXIS_TICK_LINE_DEFAULT_PROPS\n} from './RadialAxisTickLine';\nimport {\n  RadialAxisTickLabelProps,\n  RadialAxisTickLabel\n} from './RadialAxisTickLabel';\nimport { CloneElement } from 'reablocks';\n\nexport interface RadialAxisTickProps {\n  /**\n   * Scale to use for the tick.\n   */\n  scale: any;\n\n  /**\n   * Outer radius of the arc.\n   */\n  outerRadius: number;\n\n  /**\n   * Inner radius of the arc.\n   */\n  innerRadius: number;\n\n  /**\n   * Padding between the tick and the label.\n   */\n  padding: number;\n\n  /**\n   * Data to render.\n   */\n  data: any;\n\n  /**\n   * Index of the tick.\n   */\n  index: number;\n\n  /**\n   * Line element to render.\n   */\n  line: ReactElement<RadialAxisTickLineProps, typeof RadialAxisTickLine> | null;\n\n  /**\n   * Label element to render.\n   */\n  label: ReactElement<\n    RadialAxisTickLabelProps,\n    typeof RadialAxisTickLabel\n  > | null;\n\n  /**\n   * Start angle for the first value.\n   */\n  startAngle?: number;\n\n  /**\n   * End angle for the last value.\n   */\n  endAngle?: number;\n}\n\nexport const RadialAxisTick: FC<Partial<RadialAxisTickProps>> = ({\n  line = <RadialAxisTickLine />,\n  label = <RadialAxisTickLabel />,\n  scale,\n  outerRadius = 0,\n  data,\n  index,\n  padding = 0,\n  innerRadius\n}) => {\n  const lineProps = useMemo(\n    () => ({ ...RADIAL_AXIS_TICK_LINE_DEFAULT_PROPS, ...(line?.props ?? {}) }),\n    [line?.props]\n  );\n  const point = scale(data);\n  const rotation = (point * 180) / Math.PI - 90;\n  const transform = `rotate(${rotation}) translate(${outerRadius + padding},0)`;\n  const lineSize = line ? lineProps.size : 0;\n\n  return (\n    <g transform={transform}>\n      {line && (\n        <CloneElement<RadialAxisTickLineProps>\n          element={line}\n          innerRadius={innerRadius}\n          outerRadius={outerRadius}\n        />\n      )}\n      {label && (\n        <CloneElement<RadialAxisTickLabelProps>\n          element={label}\n          index={index}\n          point={point}\n          rotation={rotation}\n          lineSize={lineSize}\n          data={data}\n        />\n      )}\n    </g>\n  );\n};\n","import React, { FC, Fragment, ReactElement } from 'react';\nimport { RadialAxisTick, RadialAxisTickProps } from './RadialAxisTick';\nimport { CloneElement } from 'reablocks';\nimport { getTicks } from '@/common/utils/ticks';\nimport { TimeInterval } from 'd3-time';\n\nexport interface TickCallback {\n  index?: number;\n}\n\nexport interface RadialAxisTickSeriesProps {\n  /**\n   * Scale to use for the tick.\n   */\n  scale: any;\n\n  /**\n   * Number of ticks to render.\n   */\n  count?: number;\n\n  /**\n   * Interval between ticks.\n   */\n  interval?: number | TimeInterval;\n\n  /**\n   * Tick values to render.\n   */\n  tickValues: any[];\n\n  /**\n   * Outer radius of the arc.\n   */\n  outerRadius: number;\n\n  /**\n   * Type of the axis.\n   */\n  type: 'value' | 'category' | 'time' | 'duration';\n\n  /**\n   * Inner radius of the arc.\n   */\n  innerRadius: number;\n\n  /**\n   * Tick element to render.\n   */\n  tick:\n    | ((\n        tick: TickCallback\n      ) => ReactElement<RadialAxisTickProps, typeof RadialAxisTick>)\n    | ReactElement<RadialAxisTickProps, typeof RadialAxisTick>;\n\n  /**\n   * Start angle for the first value.\n   */\n  startAngle?: number;\n\n  /**\n   * End angle for the last value.\n   */\n  endAngle?: number;\n}\n\nexport const RadialAxisTickSeries: FC<Partial<RadialAxisTickSeriesProps>> = ({\n  scale,\n  count = 12,\n  outerRadius,\n  tick = <RadialAxisTick />,\n  tickValues,\n  innerRadius,\n  interval,\n  type = 'time',\n  startAngle = 0,\n  endAngle = 2 * Math.PI\n}) => {\n  const ticks = getTicks(scale, tickValues, type, count, interval || count);\n\n  return (\n    <Fragment>\n      {ticks.map((data, i) => {\n        const tickElement =\n          typeof tick === 'function' ? tick({ index: i }) : tick;\n        return (\n          <CloneElement<RadialAxisTickProps>\n            element={tickElement}\n            key={i}\n            index={i}\n            scale={scale}\n            data={data}\n            innerRadius={innerRadius}\n            outerRadius={outerRadius}\n            startAngle={startAngle}\n            endAngle={endAngle}\n          />\n        );\n      })}\n    </Fragment>\n  );\n};\n","import { arc } from 'd3-shape';\nimport React, { FC } from 'react';\n\nexport interface RadialAxisArcProps {\n  /**\n   * Index of the arc.\n   */\n  index: number;\n\n  /**\n   * Scale to use for the arc.\n   */\n  scale: any;\n\n  /**\n   * Stroke color of the arc.\n   */\n  stroke: ((index: number) => string) | string;\n\n  /**\n   * Stroke dash array of the arc.\n   */\n  strokeDasharray: ((index: number) => string) | string;\n\n  /**\n   * Start angle for the first value.\n   */\n  startAngle?: number;\n\n  /**\n   * End angle for the last value.\n   */\n  endAngle?: number;\n}\n\nexport const RadialAxisArc: FC<Partial<RadialAxisArcProps>> = (props) => {\n  const { index, stroke, strokeDasharray, scale, startAngle, endAngle } = {\n    ...RADIAL_AXIS_ARC_DEFAULT_PROPS,\n    ...props\n  };\n\n  const r = scale(index);\n  const strokeColor = typeof stroke === 'string' ? stroke : stroke(index);\n  const strokeDash =\n    typeof strokeDasharray === 'string'\n      ? strokeDasharray\n      : strokeDasharray(index);\n\n  const isFullCircle = Math.abs(endAngle - startAngle) >= 2 * Math.PI;\n\n  const x = arc()({\n    innerRadius: r,\n    outerRadius: r,\n    startAngle: startAngle,\n    endAngle: endAngle\n  });\n\n  // Path calculation for intermediate angles\n  const REGEX = /(-?\\d+\\.?\\d*,-?\\d+\\.?\\d*A-?\\d+\\.?\\d*,-?\\d+\\.?\\d*)/gm;\n  const matches = x.match(REGEX);\n  const start = matches?.[0]?.split('A', 2)?.[0];\n  const end = matches?.[1]?.split('A', 2)?.[0];\n  const d = x + ` M ${start} L 0,0 M ${end} L 0,0`;\n\n  return (\n    <>\n      {isFullCircle ? (\n        <circle\n          fill=\"none\"\n          strokeDasharray={strokeDash}\n          stroke={strokeColor}\n          style={{ pointerEvents: 'none' }}\n          cx=\"0\"\n          cy=\"0\"\n          r={r}\n        />\n      ) : (\n        <path\n          d={d}\n          fill=\"none\"\n          strokeDasharray={strokeDash}\n          stroke={strokeColor}\n          style={{ pointerEvents: 'none' }}\n        />\n      )}\n    </>\n  );\n};\n\nexport const RADIAL_AXIS_ARC_DEFAULT_PROPS = {\n  stroke: '#71808d',\n  strokeDasharray: '1,4',\n  startAngle: 0,\n  endAngle: 2 * Math.PI\n};\n","/**\n * Given a set of arcs, return an array of points for each arc.\n */\nexport const getPointsForLevels = ({ count, outerRadius, ticks, arcs }) => {\n  const levels: Array<Array<{ x: number; y: number }>> = [];\n  const polyangle = (Math.PI * 2) / ticks;\n\n  for (const level of arcs) {\n    const hyp = (level / count) * outerRadius;\n\n    const points: Array<{ x: number; y: number }> = [];\n    for (let vertex = 0; vertex < ticks; vertex++) {\n      const theta = vertex * polyangle;\n      points.push({\n        x: hyp * Math.sin(Math.PI - theta),\n        y: hyp * Math.cos(Math.PI - theta)\n      });\n    }\n\n    levels.push([...points, points[0]]);\n  }\n\n  return levels;\n};\n","import React, { FC, ReactElement } from 'react';\nimport {\n  RADIAL_AXIS_ARC_DEFAULT_PROPS,\n  RadialAxisArc,\n  RadialAxisArcProps\n} from './RadialAxisArc';\nimport { CloneElement } from 'reablocks';\nimport { scaleLinear } from 'd3-scale';\nimport { getPointsForLevels } from './utils';\nimport { RadialAxisArcLine, RadialAxisArcLineProps } from './RadialAxisArcLine';\nimport { mergeDefaultProps } from '@/common/utils';\n\nexport interface RadialAxisArcSeriesProps {\n  /**\n   * Arc element to render.\n   */\n  arc: ReactElement<RadialAxisArcProps, typeof RadialAxisArc>;\n\n  /**\n   * Line element to render.\n   */\n  line: ReactElement<RadialAxisArcLineProps, typeof RadialAxisArcLine>;\n\n  /**\n   * Number of arcs to render.\n   */\n  count: number;\n\n  /**\n   * Inner radius of the arc.\n   */\n  innerRadius: number;\n\n  /**\n   * Outer radius of the arc.\n   */\n  outerRadius: number;\n\n  /**\n   * Calculated tick values by the Radial Axis.\n   */\n  tickValues?: any[];\n\n  /**\n   * Start angle for the first value.\n   */\n  startAngle?: number;\n\n  /**\n   * End angle for the last value.\n   */\n  endAngle?: number;\n}\n\nexport const RadialAxisArcSeries: FC<Partial<RadialAxisArcSeriesProps>> = (\n  props\n) => {\n  const {\n    count,\n    innerRadius,\n    outerRadius,\n    line,\n    arc,\n    tickValues,\n    startAngle,\n    endAngle\n  } = mergeDefaultProps(RADIAL_AXIS_ARC_SERIES_DEFAULT_PROPS, props);\n\n  const scale = scaleLinear()\n    .domain([0, count])\n    .range([innerRadius, outerRadius]);\n\n  const arcs = scale.ticks(count);\n\n  const points = getPointsForLevels({\n    count,\n    outerRadius,\n    ticks: tickValues.length,\n    arcs\n  });\n\n  return (\n    <>\n      {line && (\n        <>\n          {points.map((d, i) => (\n            <CloneElement<RadialAxisArcLineProps>\n              element={line}\n              key={i}\n              data={d}\n              index={i}\n            />\n          ))}\n        </>\n      )}\n      {arc && (\n        <>\n          {arcs.map((d) => (\n            <CloneElement<RadialAxisArcProps>\n              element={arc}\n              key={d}\n              index={d}\n              scale={scale}\n              startAngle={startAngle}\n              endAngle={endAngle}\n            />\n          ))}\n        </>\n      )}\n    </>\n  );\n};\n\nexport const RADIAL_AXIS_ARC_SERIES_DEFAULT_PROPS = {\n  count: 12,\n  arc: <RadialAxisArc />,\n  startAngle: 0,\n  endAngle: 2 * Math.PI\n};\n","import { line } from 'd3-shape';\nimport React, { FC } from 'react';\n\nexport interface RadialAxisArcLineProps {\n  /**\n   * Stroke color of the arc.\n   */\n  stroke: ((index: number) => string) | string;\n\n  /**\n   * Data to render the line.\n   */\n  data: Array<{ x: number; y: number }>;\n\n  /**\n   * Index of the arc.\n   */\n  index: number;\n}\n\nexport const RadialAxisArcLine: FC<Partial<RadialAxisArcLineProps>> = (\n  props\n) => {\n  const { data, stroke, index } = {\n    ...RADIAL_AXIS_ARC_LINE_DEFAULT_PROPS,\n    ...props\n  };\n\n  const lineGenerator = line<{ x: number; y: number }>()\n    .x((d: any) => d.x)\n    .y((d: any) => d.y);\n\n  const d = lineGenerator(data);\n  const strokeColor = typeof stroke === 'string' ? stroke : stroke(index);\n\n  return (\n    <path\n      d={d}\n      stroke={strokeColor}\n      fill=\"none\"\n      style={{ pointerEvents: 'none' }}\n    />\n  );\n};\n\nexport const RADIAL_AXIS_ARC_LINE_DEFAULT_PROPS = {\n  stroke: '#71808d'\n};\n","import React, { FC, Fragment, ReactElement } from 'react';\nimport {\n  RadialAxisTickSeries,\n  RadialAxisTickSeriesProps\n} from './RadialAxisTickSeries';\nimport {\n  RADIAL_AXIS_ARC_SERIES_DEFAULT_PROPS,\n  RadialAxisArcSeries,\n  RadialAxisArcSeriesProps\n} from './RadialAxisArcSeries';\nimport { CloneElement } from 'reablocks';\nimport { getTicks, mergeDefaultProps } from '@/common/utils';\n\ntype RadialAxisType = 'value' | 'time' | 'category';\n\nexport interface RadialAxisProps {\n  /**\n   * Height of the axis.\n   */\n  height: number;\n\n  /**\n   * Width of the axis.\n   */\n  width: number;\n\n  /**\n   * Scale to use for the axis.\n   */\n  xScale: any;\n\n  /**\n   * Inner radius of the axis.\n   */\n  innerRadius: number;\n\n  /**\n   * Type of the axis.\n   */\n  type: 'value' | 'time' | 'category';\n\n  /**\n   * Arc element to render.\n   */\n  arcs: ReactElement<\n    RadialAxisArcSeriesProps,\n    typeof RadialAxisArcSeries\n  > | null;\n\n  /**\n   * Tick element to render.\n   */\n  ticks: ReactElement<\n    RadialAxisTickSeriesProps,\n    typeof RadialAxisTickSeries\n  > | null;\n\n  /**\n   * Start angle for the first value.\n   */\n  startAngle?: number;\n\n  /**\n   * End angle for the last value.\n   */\n  endAngle?: number;\n}\n\nexport const RadialAxis: FC<Partial<RadialAxisProps>> = (props) => {\n  const {\n    arcs,\n    ticks,\n    xScale,\n    height,\n    width,\n    innerRadius,\n    type,\n    startAngle,\n    endAngle\n  } = mergeDefaultProps(RADIAL_AXIS_DEFAULT_PROPS, props);\n\n  const outerRadius = Math.min(height, width) / 2;\n\n  // TODO: This is a hack to get the ticks in the parent\n  // component. This is because the ticks are needed\n  // for the arcs's lines.\n  const tickValues = getTicks(\n    xScale,\n    ticks.props.tickValues,\n    type as RadialAxisType,\n    ticks.props.count,\n    ticks.props.interval || ticks.props.count\n  );\n\n  return (\n    <Fragment>\n      {arcs && (\n        <CloneElement<RadialAxisArcSeriesProps>\n          element={arcs}\n          outerRadius={outerRadius}\n          innerRadius={innerRadius}\n          tickValues={tickValues}\n          startAngle={startAngle}\n          endAngle={endAngle}\n        />\n      )}\n      {ticks && (\n        <CloneElement<RadialAxisTickSeriesProps>\n          element={ticks}\n          scale={xScale}\n          type={type as RadialAxisType}\n          innerRadius={innerRadius}\n          outerRadius={outerRadius}\n          startAngle={startAngle}\n          endAngle={endAngle}\n        />\n      )}\n    </Fragment>\n  );\n};\n\nexport const RADIAL_AXIS_DEFAULT_PROPS: Partial<RadialAxisProps> = {\n  innerRadius: 10,\n  type: 'value',\n  arcs: <RadialAxisArcSeries />,\n  ticks: <RadialAxisTickSeries />,\n  startAngle: 0,\n  endAngle: 2 * Math.PI\n};\n","import React, {\n  Children,\n  cloneElement,\n  PropsWithChildren,\n  FC,\n  useEffect,\n  useRef\n} from 'react';\nimport { toggleTextSelection } from '@/common/utils/selection';\n\ninterface MoveProps extends PropsWithChildren {\n  cursor?: string;\n  disabled?: boolean;\n  preventRightClick: boolean;\n  disableText: boolean;\n  threshold: number;\n  onMoveStart: (event) => void;\n  onMove: (event) => void;\n  onMoveCancel: (event) => void;\n  onMoveEnd: (event) => void;\n}\n\nexport const Move: FC<Partial<MoveProps>> = ({\n  cursor,\n  disabled = false,\n  preventRightClick = true,\n  disableText = true,\n  threshold = 0,\n  onMoveStart = () => undefined,\n  onMove = () => undefined,\n  onMoveCancel = () => undefined,\n  onMoveEnd = () => undefined,\n  children\n}) => {\n  const started = useRef(false);\n  const deltaX = useRef(0);\n  const deltaY = useRef(0);\n  const prevXPosition = useRef(0);\n  const prevYPosition = useRef(0);\n  const rqf = useRef<number>();\n\n  useEffect(() => {\n    return () => {\n      cancelAnimationFrame(rqf.current);\n      disposeHandlers();\n    };\n  }, []);\n\n  const disposeHandlers = () => {\n    window.removeEventListener('mousemove', onMouseMove);\n    window.removeEventListener('mouseup', onMouseUp);\n    window.removeEventListener('touchmove', onTouchMove);\n    window.removeEventListener('touchend', onTouchEnd);\n\n    setCursor(false);\n    disableTextSelection(true);\n  };\n\n  const disableTextSelection = (shouldDisable: boolean) => {\n    if (disableText) {\n      toggleTextSelection(shouldDisable);\n    }\n  };\n\n  const setCursor = (set: boolean) => {\n    if (cursor) {\n      document.body.style.cursor = set ? cursor : 'inherit';\n    }\n  };\n\n  const checkThreshold = () => {\n    return (\n      !started.current && (Math.abs(deltaX.current) > threshold || Math.abs(deltaY.current) > threshold)\n    );\n  };\n\n  const getTouchCoords = (event) => {\n    const { clientX, clientY } = event.touches[0];\n    return {\n      clientX,\n      clientY\n    };\n  };\n\n  const onMouseDown = (event: React.MouseEvent) => {\n    const shouldCancel = event.nativeEvent.which === 3 && preventRightClick;\n    if (shouldCancel || disabled) {\n      return;\n    }\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    started.current = false;\n    deltaX.current = 0;\n    deltaY.current = 0;\n\n    // Always bind event so we cancel movement even if no action was taken\n    window.addEventListener('mousemove', onMouseMove);\n    window.addEventListener('mouseup', onMouseUp);\n  };\n\n  const onMouseMove = (event) => {\n    event.preventDefault();\n    event.stopPropagation();\n\n    const { movementX, movementY } = event;\n    let localDeltaX = deltaX.current + movementX;\n    let localDeltaY = deltaY.current + movementY;\n\n    if (checkThreshold()) {\n      disableTextSelection(true);\n      setCursor(true);\n\n      localDeltaX = 0;\n      localDeltaY = 0;\n      started.current = true;\n\n      onMoveStart({\n        nativeEvent: event,\n        type: 'mouse'\n      });\n    } else {\n      rqf.current = requestAnimationFrame(() => {\n        onMove({\n          nativeEvent: event,\n          type: 'mouse',\n          x: localDeltaX,\n          y: localDeltaY\n        });\n      });\n    }\n\n    deltaX.current = localDeltaX;\n    deltaY.current = localDeltaY;\n  };\n\n  const onMouseUp = (event) => {\n    event.preventDefault();\n    event.stopPropagation();\n\n    disposeHandlers();\n\n    if (started.current) {\n      onMoveEnd({\n        nativeEvent: event,\n        type: 'mouse'\n      });\n    } else {\n      onMoveCancel({\n        nativeEvent: event,\n        type: 'mouse'\n      });\n    }\n  };\n\n  const onTouchStart = (event: React.TouchEvent) => {\n    if (disabled || event.touches.length !== 1) {\n      return;\n    }\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    started.current = false;\n    deltaX.current = 0;\n    deltaY.current = 0;\n    prevXPosition.current = event.touches[0].clientX;\n    prevYPosition.current = event.touches[0].clientY;\n\n    // Always bind event so we cancel movement even if no action was taken\n    window.addEventListener('touchmove', onTouchMove);\n    window.addEventListener('touchend', onTouchEnd);\n  };\n\n  const onTouchMove = (event: TouchEvent) => {\n    event.preventDefault();\n    event.stopPropagation();\n\n    // Calculate delta from previous position and current\n    const { clientX, clientY } = getTouchCoords(event);\n    let localDeltaX = clientX - prevXPosition.current;\n    let localDeltaY = clientY - prevYPosition.current;\n\n    // Track the delta\n    localDeltaX = localDeltaX + localDeltaX;\n    localDeltaY = localDeltaY + localDeltaY;\n\n    if (checkThreshold()) {\n      disableTextSelection(true);\n      setCursor(true);\n\n      localDeltaX = 0;\n      localDeltaY = 0;\n      started.current = true;\n\n      onMoveStart({\n        nativeEvent: { ...event, clientX, clientY },\n        type: 'touch'\n      });\n    } else {\n      rqf.current = requestAnimationFrame(() => {\n        onMove({\n          // TODO: Come back and clean this up...\n          nativeEvent: {\n            ...event,\n            clientX,\n            clientY\n          },\n          type: 'touch',\n          x: localDeltaX,\n          y: localDeltaY\n        });\n      });\n    }\n\n    prevXPosition.current = clientX;\n    prevYPosition.current = clientY;\n  };\n\n  const onTouchEnd = (event: TouchEvent) => {\n    event.preventDefault();\n    event.stopPropagation();\n    disposeHandlers();\n\n    if (started.current) {\n      onMoveEnd({\n        nativeEvent: event,\n        type: 'touch'\n      });\n    } else {\n      onMoveCancel({\n        nativeEvent: event,\n        type: 'touch'\n      });\n    }\n  };\n\n  return Children.map(children, (child: any) =>\n    cloneElement(child, {\n      ...child.props,\n      onMouseDown: (e) => {\n        onMouseDown(e);\n        if (child.props.onMouseDown) {\n          child.props.onMouseDown(e);\n        }\n      },\n      onTouchStart: (e) => {\n        onTouchStart(e);\n        if (child.props.onTouchStart) {\n          child.props.onTouchStart(e);\n        }\n      }\n    })\n  );\n};\n","import React, { FC, useState } from 'react';\nimport classNames from 'classnames';\nimport { range } from 'd3-array';\nimport { Move } from '@/common/Gestures/Move';\nimport css from './BrushHandle.module.css';\n\nexport interface BrushHandleProps {\n  height: number;\n  onHandleDrag: (deltaX: number) => void;\n}\n\nexport const BrushHandle: FC<BrushHandleProps> = (props) => {\n  const { height, onHandleDrag } = props;\n  const [isDragging, setIsDragging] = useState(false);\n\n  return (\n    <Move\n      cursor=\"ew-resize\"\n      onMoveStart={() => setIsDragging(true)}\n      onMove={({ x }) => onHandleDrag(x)}\n      onMoveEnd={() => setIsDragging(false)}\n    >\n      <g>\n        <line className={css.line} y1=\"0\" y2={height} x1=\"5\" x2=\"5\" />\n        <rect\n          className={classNames(css.handle, { [css.dragging]: isDragging })}\n          height={height - 10}\n          style={{ cursor: 'ew-resize' }}\n          width={8}\n          y=\"5\"\n          y1={height - 5}\n        />\n        <g\n          transform={`translate(-1, ${height / 2 - 10})`}\n          style={{ pointerEvents: 'none' }}\n        >\n          {range(5).map((i) => (\n            <circle cy={i * 5} cx=\"5\" r=\".5\" key={i} className={css.dot} />\n          ))}\n        </g>\n      </g>\n    </Move>\n  );\n};\n","import React, { Fragment, useState, FC, useCallback } from 'react';\nimport { BrushHandle } from './BrushHandle';\nimport { Move } from '@/common/Gestures/Move';\nimport css from './BrushSlice.module.css';\n\nexport interface BrushChangeEvent {\n  start?: number;\n  end?: number;\n}\n\ninterface BrushSliceProps {\n  height: number;\n  width: number;\n  start: number;\n  end: number;\n  onBrushChange: (event: BrushChangeEvent) => void;\n}\n\nexport const BrushSlice: FC<BrushSliceProps> = (props) => {\n  const { height, start, end, width, onBrushChange } = props;\n  const [isDragging, setIsDragging] = useState(false);\n  const sliceWidth = Math.max(end - start, 0);\n  const endSliceWidth = Math.max(width - end, 0);\n  const hasNoSlice = start === 0 && end === width;\n\n  const onMoveStart = useCallback(() => {\n    const hasNoSlice = start === 0 && end === width;\n\n    if (!hasNoSlice) {\n      setIsDragging(true);\n    }\n  }, [end, start, width]);\n\n  const onMove = useCallback(\n    ({ x }) => {\n      const startUpdated = start + x;\n      const endUpdated = end + x;\n\n      if (startUpdated >= 0 && endUpdated <= width) {\n        onBrushChange({\n          start: startUpdated,\n          end: endUpdated\n        });\n      }\n    },\n    [start, end, width, onBrushChange]\n  );\n\n  const onHandleDrag = useCallback(\n    (direction: 'start' | 'end', deltaX: number) => {\n      const startUpdated = direction === 'start' ? start + deltaX : start;\n      const endUpdated = direction !== 'start' ? end + deltaX : end;\n\n      onBrushChange({\n        start: startUpdated,\n        end: endUpdated\n      });\n    },\n    [end, onBrushChange, start]\n  );\n\n  return (\n    <Fragment>\n      <rect className={css.unsliced} height={height} width={start} />\n      <rect\n        transform={`translate(${end}, 0)`}\n        className={css.unsliced}\n        height={height}\n        width={endSliceWidth}\n      />\n      <g transform={`translate(${start}, 0)`}>\n        <Move\n          cursor=\"grabbing\"\n          onMoveStart={onMoveStart}\n          onMove={onMove}\n          onMoveEnd={() => setIsDragging(false)}\n        >\n          <rect\n            className={css.slice}\n            height={height}\n            width={sliceWidth}\n            style={{\n              cursor: isDragging ? 'grabbing' : 'grab',\n              opacity: hasNoSlice ? 0 : 0.1,\n              pointerEvents: !hasNoSlice ? 'initial' : 'none'\n            }}\n          />\n        </Move>\n        <g transform={'translate(-4, 0)'}>\n          <BrushHandle\n            height={height}\n            onHandleDrag={(deltaX) => onHandleDrag('start', deltaX)}\n          />\n        </g>\n        <g transform={`translate(${sliceWidth - 5}, 0)`}>\n          <BrushHandle\n            height={height}\n            onHandleDrag={(deltaX) => onHandleDrag('end', deltaX)}\n          />\n        </g>\n      </g>\n    </Fragment>\n  );\n};\n","import React, {\n  useState,\n  useEffect,\n  useRef,\n  FC,\n  PropsWithChildren,\n  useCallback\n} from 'react';\nimport { getPositionForTarget } from '@/common/utils/position';\nimport { BrushSlice, BrushChangeEvent } from './BrushSlice';\nimport { ChartDataTypes } from '@/common/data';\nimport { Move } from '@/common/Gestures/Move';\n\nexport interface BrushConfiguration {\n  disabled?: boolean;\n  fill?: string;\n  domain?: [ChartDataTypes, ChartDataTypes];\n  onBrushChange?: (e) => void;\n}\n\ninterface BrushProps extends PropsWithChildren {\n  height: number;\n  width: number;\n  disabled?: boolean;\n  start?: number;\n  end?: number;\n  onBrushChange?: (e: BrushChangeEvent) => void;\n}\n\ninterface BrushState {\n  start?: number;\n  end?: number;\n}\n\nexport const Brush: FC<Partial<BrushProps>> = (props) => {\n  const {\n    children,\n    disabled,\n    height,\n    width,\n    start: startProp,\n    end: endProp,\n    onBrushChange\n  } = props;\n  const [isSlicing, setIsSlicing] = useState(false);\n  const [initial, setInitial] = useState<number>();\n  const [range, setRange] = useState<BrushState>({\n    start: props.start || 0,\n    end: props.end || props.width\n  });\n  const { start, end } = range;\n\n  const ref = useRef<any>();\n\n  const ensurePositionInBounds = useCallback(\n    (newStart?: number, newEnd?: number) => {\n      let startUpdated = newStart;\n      let endUpdated = newEnd;\n\n      if (startUpdated === undefined || startUpdated <= 0) {\n        startUpdated = 0;\n      }\n\n      if (end === undefined) {\n        endUpdated = width;\n      }\n\n      if (startUpdated > endUpdated) {\n        startUpdated = start;\n      }\n\n      if (endUpdated < startUpdated) {\n        endUpdated = end;\n      }\n\n      if (endUpdated >= width) {\n        endUpdated = width;\n      }\n\n      return { start: startUpdated, end: endUpdated };\n    },\n    [end, start, width]\n  );\n\n  const getPositionsForPanEvent = useCallback((event: any) => {\n    const eventObj = {\n      target: ref.current,\n      clientX: event.clientX,\n      clientY: event.clientY\n    };\n\n    return getPositionForTarget(eventObj);\n  }, []);\n\n  const getStartEnd = useCallback(\n    (event: any) => {\n      const { x } = getPositionsForPanEvent(event);\n\n      if (x < initial) {\n        return ensurePositionInBounds(x, initial);\n      } else {\n        return ensurePositionInBounds(initial, x);\n      }\n    },\n    [ensurePositionInBounds, getPositionsForPanEvent, initial]\n  );\n\n  const onMoveStart = useCallback(\n    (event: any) => {\n      if (!disabled) {\n        const positions = getPositionsForPanEvent(event.nativeEvent);\n\n        setIsSlicing(true);\n        setInitial(positions.x);\n      }\n    },\n    [disabled, getPositionsForPanEvent]\n  );\n\n  const onMove = useCallback(\n    (event: any) => {\n      if (!disabled) {\n        const { start, end } = getStartEnd(event.nativeEvent);\n\n        if (onBrushChange) {\n          onBrushChange({\n            start,\n            end\n          });\n        }\n\n        setRange({ start, end });\n      }\n    },\n    [disabled, getStartEnd, onBrushChange]\n  );\n\n  const onMoveEnd = useCallback(() => {\n    setIsSlicing(false);\n  }, []);\n\n  const onMoveCancel = useCallback(() => {\n    const val = {\n      start: 0,\n      end: width\n    };\n\n    setRange(val);\n\n    if (onBrushChange) {\n      onBrushChange(val);\n    }\n  }, [onBrushChange, width]);\n\n  const onSliceChange = useCallback(\n    (event: BrushChangeEvent) => {\n      const val = ensurePositionInBounds(event.start, event.end);\n\n      setRange((state) => ({ ...state, ...val }));\n\n      if (onBrushChange) {\n        onBrushChange(val);\n      }\n    },\n    [ensurePositionInBounds, onBrushChange]\n  );\n\n  useEffect(() => {\n    if (end === width) {\n      setRange((prev) => ({\n        ...prev,\n        end: width\n      }));\n    }\n  }, [end, width]);\n\n  useEffect(() => {\n    // Don't update if we are doing the slicing\n    if (!isSlicing) {\n      const startUpdated = startProp !== start;\n      const endUpdated = endProp !== end;\n\n      if (startUpdated || endUpdated) {\n        setRange(ensurePositionInBounds(start, end));\n      }\n    }\n  }, [end, endProp, ensurePositionInBounds, isSlicing, start, startProp]);\n\n  return (\n    <Move\n      cursor=\"crosshair\"\n      onMoveStart={onMoveStart}\n      onMove={onMove}\n      onMoveEnd={onMoveEnd}\n      onMoveCancel={onMoveCancel}\n    >\n      <g\n        style={{\n          pointerEvents: isSlicing ? 'none' : 'auto',\n          cursor: disabled ? '' : 'crosshair'\n        }}\n      >\n        {children}\n        {!disabled && (\n          <>\n            <rect ref={ref} height={height} width={width} opacity={0} />\n            {start !== undefined && end !== undefined && (\n              <BrushSlice\n                start={start}\n                end={end}\n                height={height}\n                width={width}\n                onBrushChange={onSliceChange}\n              />\n            )}\n          </>\n        )}\n      </g>\n    </Move>\n  );\n};\n","import React, { FC, PropsWithChildren, useCallback } from 'react';\nimport { BrushConfiguration, Brush } from './Brush';\nimport { BrushChangeEvent } from './BrushSlice';\n\nexport interface ChartBrushProps extends BrushConfiguration, PropsWithChildren {\n  scale: any;\n  height: number;\n  width: number;\n  children: any;\n}\n\nexport const ChartBrush: FC<Partial<ChartBrushProps>> = (props) => {\n  const { disabled, domain, scale, onBrushChange, width, children } = props;\n\n  const getBrushOffset = useCallback(() => {\n    let start;\n    let end;\n\n    if (!disabled && domain) {\n      start = scale(domain[0]);\n      end = scale(domain[1]);\n    }\n\n    return { start, end };\n  }, [disabled, domain, scale]);\n\n  const onBrushChangeHandler = useCallback(\n    (event: BrushChangeEvent) => {\n      if (onBrushChange) {\n        let domain;\n\n        if (\n          event.start !== undefined &&\n          event.end !== undefined &&\n          (event.start !== 0 || event.end !== width)\n        ) {\n          if (scale.invert) {\n            const start = scale.invert(event.start);\n            const end = scale.invert(event.end);\n            domain = [start, end];\n          } else {\n            // invert scaleBend\n            const band = scale.step();\n            const start = Math.ceil((event.start - band / 2) / band);\n            const end = Math.ceil((event.end - band / 2) / band);\n\n            domain = [scale.domain()[start], scale.domain()[end]];\n          }\n        }\n\n        onBrushChange({\n          domain\n        });\n      }\n    },\n    [onBrushChange, scale, width]\n  );\n\n  return (\n    <Brush\n      {...props}\n      {...getBrushOffset()}\n      onBrushChange={onBrushChangeHandler}\n    >\n      {children}\n    </Brush>\n  );\n};\n","import { createContext, useContext } from 'react';\nimport { Dimensions } from '@/common/utils';\nimport { LinearAxisDimensionChanged } from '@/common/Axis';\n\nexport interface ChartContextProps extends Dimensions {\n  id: string;\n  chartSized?: boolean;\n  yAxisSized?: boolean;\n  xAxisSized?: boolean;\n  updateAxes: (\n    orientation: 'horizontal' | 'vertical',\n    event: LinearAxisDimensionChanged\n  ) => void;\n}\n\nexport const ChartContext = createContext<Partial<ChartContextProps>>({});\n\nexport const { Provider: ChartProvider, Consumer: ChartConsumer } =\n  ChartContext;\n\nexport const useChart = () => {\n  const context = useContext(ChartContext);\n\n  if (context === undefined) {\n    throw new Error('`useChart` hook must be used within a `ChartProvider`');\n  }\n\n  return context;\n};\n","import React, { FC, useCallback, useState, useMemo } from 'react';\nimport { Margins, getDimension } from '@/common/utils/dimensions';\nimport { useResizeObserver } from '@/common/utils/useResizeObserver';\nimport { useId } from 'reablocks';\nimport { LinearAxisDimensionChanged } from '@/common/Axis';\nimport classNames from 'classnames';\nimport { ChartContextProps, ChartProvider } from './ChartContext';\nimport css from './ChartContainer.module.css';\n\nexport interface ChartProps {\n  /**\n   * Id of the chart.\n   */\n  id?: string;\n\n  /**\n   * Width of the chart. If not provided will autosize.\n   */\n  width?: number;\n\n  /**\n   * Height of the chart. If not provided will autosize.\n   */\n  height?: number;\n\n  /**\n   * Margins for the chart.\n   */\n  margins?: Margins;\n\n  /**\n   * Classnames for the chart.\n   */\n  className?: string;\n\n  /**\n   * Classnames for the chart.\n   */\n  containerClassName?: string;\n\n  /**\n   * Additional css styles.\n   */\n  style?: React.StyleHTMLAttributes<SVGSVGElement>;\n\n  /**\n   * Center the chart. Used mainly internally.\n   */\n  center?: boolean;\n\n  /**\n   * Center chart on X Axis only. Used mainly internally.\n   */\n  centerX?: boolean;\n\n  /**\n   * Center chart on Y Axis only. Used mainly internally.\n   */\n  centerY?: boolean;\n}\n\nexport interface ChartContainerProps extends ChartProps {\n  /**\n   * Internal property to identify if the xAxis is visible.\n   */\n  xAxisVisible?: boolean;\n\n  /**\n   * Internal property to identify if the xAxis is visible.\n   */\n  yAxisVisible?: boolean;\n\n  /**\n   * Children elements to recieve the calculated props.\n   */\n  children: (props: ChartContainerChildProps) => any;\n}\n\nexport type ChartContainerChildProps = ChartContextProps;\n\nexport const ChartContainer: FC<ChartContainerProps> = ({\n  className,\n  children,\n  center,\n  centerX,\n  centerY,\n  style,\n  margins,\n  containerClassName,\n  xAxisVisible,\n  yAxisVisible,\n  id,\n  ...rest\n}) => {\n  const curId = useId(id);\n  const [xAxisSized, setXAxisSized] = useState<boolean>(false);\n  const [yAxisSized, setYAxisSized] = useState<boolean>(false);\n  const [xOffset, setXOffset] = useState<number>(0);\n  const [yOffset, setYOffset] = useState<number>(0);\n  const [ref, { width, height }] = useResizeObserver<HTMLDivElement>();\n\n  const chartSized = useMemo(() => {\n    if (!height || !width) {\n      return false;\n    }\n\n    // TODO: @amcdnl refactor this to account for 0-2 axises on x/y\n    if (xAxisVisible && !xAxisSized) {\n      return false;\n    }\n\n    if (yAxisVisible && !yAxisSized) {\n      return false;\n    }\n\n    return true;\n  }, [height, width, xAxisSized, xAxisVisible, yAxisVisible, yAxisSized]);\n\n  const onUpdateAxes = useCallback(\n    (\n      orientation: 'horizontal' | 'vertical',\n      event: LinearAxisDimensionChanged\n    ) => {\n      if (orientation === 'horizontal') {\n        setXAxisSized(true);\n      } else {\n        setYAxisSized(true);\n      }\n\n      if (event.height) {\n        setYOffset(event.height);\n      }\n\n      if (event.width) {\n        setXOffset(event.width);\n      }\n    },\n    []\n  );\n\n  const childProps: ChartContainerChildProps = useMemo(\n    () => ({\n      chartSized,\n      id: curId,\n      updateAxes: onUpdateAxes,\n      yAxisSized,\n      xAxisSized,\n      ...getDimension({\n        margins,\n        height,\n        width,\n        yOffset,\n        xOffset\n      })\n    }),\n    [\n      chartSized,\n      curId,\n      onUpdateAxes,\n      yAxisSized,\n      xAxisSized,\n      margins,\n      height,\n      width,\n      yOffset,\n      xOffset\n    ]\n  );\n\n  const translateX = center || centerX ? width / 2 : childProps.xMargin;\n  const translateY = center || centerY ? height / 2 : childProps.yMargin;\n\n  const styleHeight =\n    rest.height !== undefined && rest.height !== null ? rest.height : '100%';\n  const styleWidth =\n    rest.width !== undefined && rest.width !== null ? rest.width : '100%';\n\n  return (\n    <div\n      ref={ref}\n      style={{ height: styleHeight, width: styleWidth }}\n      className={classNames(containerClassName, css.container)}\n      {...rest}\n    >\n      <ChartProvider value={childProps}>\n        {height > 0 && width > 0 && (\n          <svg\n            width={width}\n            height={height}\n            className={classNames(css.svg, className)}\n            style={style}\n            tabIndex={0}\n          >\n            <g transform={`translate(${translateX}, ${translateY})`}>\n              {children(childProps)}\n            </g>\n          </svg>\n        )}\n      </ChartProvider>\n    </div>\n  );\n};\n","import bigInt from 'big-integer';\nimport { bigIntegerToLocaleString } from '@/common/utils/bigint';\nimport {\n  ChartDataTypes,\n  ChartInternalDataTypes,\n  ChartNestedDataShape,\n  ChartShallowDataShape\n} from './types';\n\nexport function normalizeValue(\n  value: ChartDataTypes,\n  maxBigInt: bigInt.BigInteger\n): ChartInternalDataTypes {\n  if (bigInt.isInstance(value)) {\n    if (maxBigInt.greater(1000000)) {\n      const divideBy = maxBigInt.divide(1000000);\n      return (value as bigInt.BigInteger).divide(divideBy).toJSNumber();\n    } else {\n      return (value as bigInt.BigInteger).toJSNumber();\n    }\n  } else {\n    return value as ChartInternalDataTypes;\n  }\n}\n\nexport function normalizeValueForFormatting(\n  value: ChartDataTypes\n): ChartInternalDataTypes {\n  if (bigInt.isInstance(value)) {\n    return bigIntegerToLocaleString(value as bigInt.BigInteger);\n  }\n  return value as ChartInternalDataTypes;\n}\n\nexport function getMaxBigIntegerForNested(series: ChartNestedDataShape[]) {\n  let maxBigInteger = bigInt.one;\n  for (const group of series) {\n    const maxBigIntegerForGroup = getMaxBigIntegerForShallow(group.data as any);\n    if (maxBigIntegerForGroup.greater(maxBigInteger)) {\n      maxBigInteger = maxBigIntegerForGroup;\n    }\n  }\n  return maxBigInteger;\n}\n\nexport function getMaxBigIntegerForShallow(series: ChartShallowDataShape[]) {\n  let maxBigInteger = bigInt.one;\n  for (const point of series) {\n    if (bigInt.isInstance(point.data)) {\n      const bigInteger = point.data as bigInt.BigInteger;\n      if (bigInteger.greater(maxBigInteger)) {\n        maxBigInteger = bigInteger;\n      }\n    }\n  }\n  return maxBigInteger;\n}\n","import { median } from 'd3-array';\nimport {\n  ChartInternalNestedDataShape,\n  ChartShallowDataShape,\n  ChartNestedDataShape,\n  ChartInternalShallowDataShape,\n  ChartDataTypes\n} from './types';\nimport {\n  getMaxBigIntegerForNested,\n  getMaxBigIntegerForShallow,\n  normalizeValue,\n  normalizeValueForFormatting\n} from './bigInteger';\nimport bigInt from 'big-integer';\n\nexport type Direction = 'vertical' | 'horizontal';\n\n/**\n * Accepts a `ChartDataShape` and transforms it to a chart readable data shape.\n *\n * Example:\n *\n *   [{\n *    key: 'Threat Intel',\n *    data: [{ key:'2011', data: 25 }]\n *   }]\n *\n * will be transformed to:\n *\n *  [{\n *    key: 'Threat Intel',\n *    data: [\n *      key: 'Threat Intel',\n *      x: '2011',\n *      y: 25\n *    ]\n *  }]\n */\nexport function buildNestedChartData(\n  series: ChartNestedDataShape[],\n  sort = false,\n  direction: Direction = 'vertical'\n): ChartInternalNestedDataShape[] {\n  let result: ChartInternalNestedDataShape[] = [];\n  const maxBigInteger = getMaxBigIntegerForNested(series);\n  const isVertical = direction === 'vertical';\n\n  for (const point of series) {\n    for (const nestedPoint of point.data) {\n      const key = normalizeValueForFormatting(point.key);\n      let idx = result.findIndex((r) => {\n        const left = r.key;\n        if (left instanceof Date && key instanceof Date) {\n          return left.getTime() === key.getTime();\n        }\n        return left === key;\n      });\n\n      if (idx === -1) {\n        result.push({\n          key,\n          metadata: point.metadata,\n          data: []\n        });\n\n        idx = result.length - 1;\n      }\n\n      const x = normalizeValue(\n        isVertical ? nestedPoint.key : (nestedPoint.data as any),\n        maxBigInteger\n      );\n\n      const y = normalizeValue(\n        isVertical ? nestedPoint.data : (nestedPoint.key as any),\n        maxBigInteger\n      );\n      const normalizedTarget = nestedPoint.target\n        ? normalizeValue(nestedPoint.target as any, maxBigInteger)\n        : undefined;\n\n      result[idx].data.push({\n        key,\n        value: normalizeValueForFormatting(nestedPoint.data as any),\n        target: normalizedTarget,\n        metadata: nestedPoint.metadata,\n        id: point.id,\n        x,\n        x0: isVertical ? x : 0,\n        x1: x,\n        y,\n        y0: isVertical ? 0 : y,\n        y1: y\n      });\n    }\n  }\n\n  // Sort the series data based on the median value\n  if (sort) {\n    result = result.sort((a, b) => {\n      const aMax = median(a.data, (d: any) => d.y)!;\n      const bMax = median(b.data, (d: any) => d.y)!;\n      return aMax < bMax ? 1 : -1;\n    });\n  }\n\n  return result;\n}\n\nfunction addToChartType(\n  a: ChartDataTypes,\n  b: number | bigInt.BigInteger\n): ChartDataTypes {\n  if (bigInt.isInstance(a) && bigInt.isInstance(b)) {\n    return (a as bigInt.BigInteger).add(b as bigInt.BigInteger);\n  } else if (a instanceof Date && typeof b === 'number') {\n    return new Date(a.valueOf() + b);\n  } else if (typeof a === 'number' && typeof b === 'number') {\n    return a + b;\n  } else {\n    throw new Error('Invalid types to addToChartTypes');\n  }\n}\n\n/**\n * Accepts a shallow shape and normalizes it to a chart readable format.\n */\nexport function buildShallowChartData(\n  series: ChartShallowDataShape[],\n  direction: Direction = 'vertical',\n  binSize: number | undefined = undefined\n): ChartInternalShallowDataShape[] {\n  const result: ChartInternalShallowDataShape[] = [];\n  const maxBigInteger = getMaxBigIntegerForShallow(series);\n  const isVertical = direction === 'vertical';\n\n  for (const point of series) {\n    const isTuple = Array.isArray(point.data);\n    let k1 = point.key;\n    if (binSize) {\n      k1 = addToChartType(point.key, binSize);\n    }\n\n    const props = {\n      k0: normalizeValue(point.key, maxBigInteger),\n      k1: normalizeValue(k1, maxBigInteger),\n      v0: normalizeValue(isTuple ? point.data[0] : 0, maxBigInteger),\n      v1: normalizeValue(isTuple ? point.data[1] : point.data, maxBigInteger)\n    };\n\n    const xProp = isVertical ? 'k' : 'v';\n    const yProp = isVertical ? 'v' : 'k';\n    // Normalize the target value for correct scaling of the chart\n    const normalizedTarget = point.target\n      ? normalizeValueForFormatting(\n        normalizeValue(\n          isTuple ? point.target?.[1] : point.target,\n          maxBigInteger\n        )\n      )\n      : undefined;\n\n    result.push({\n      key: normalizeValueForFormatting(props.k0),\n      value: normalizeValueForFormatting(props.v1),\n      target: normalizedTarget,\n      metadata: point.metadata,\n      id: point.id,\n      x: props[`${xProp}1`],\n      x0: props[`${xProp}0`],\n      x1: props[`${xProp}1`],\n      y: props[`${yProp}1`],\n      y0: props[`${yProp}0`],\n      y1: props[`${yProp}1`]\n    });\n  }\n\n  return result;\n}\n","import { histogram } from 'd3-array';\nimport { ChartInternalShallowDataShape, ChartInternalDataTypes } from './types';\n\n/**\n * Build a histogram given data set.\n */\nexport function buildBins(\n  xScale,\n  thresholds,\n  data: any[]\n): ChartInternalShallowDataShape[] {\n  const layout = histogram()\n    .value((d: any) => d.x)\n    .domain(xScale.domain())\n    .thresholds(xScale.ticks(thresholds));\n\n  const bins = layout(data as any);\n\n  return bins.map((bin) => ({\n    x0: bin.x0 as ChartInternalDataTypes,\n    x1: bin.x1 as ChartInternalDataTypes,\n    y: bin.length,\n    y0: 0,\n    y1: bin.length\n  }));\n}\n","import { stack, stackOffsetExpand, stackOffsetDiverging } from 'd3-shape';\nimport { ChartNestedDataShape, ChartInternalNestedDataShape } from './types';\nimport {\n  getMaxBigIntegerForNested,\n  normalizeValue,\n  normalizeValueForFormatting\n} from './bigInteger';\nimport { uniqueBy } from '@/common/utils/array';\n\nexport type StackTypes = 'default' | 'expand' | 'diverging';\n\n/**\n * Given a dataset like:\n *\n *   [{\n *    key: 'Threat Intel',\n *    data: [{ key:'2011', data: 25 }]\n *   }]\n *\n * it will transform it to:\n *\n *  [\n *    { x: 'Theat Intel', '2011': 25 }\n *  ]\n */\nfunction transformDataToStack(data: ChartNestedDataShape[]) {\n  const result: any[] = [];\n  const maxBigInteger = getMaxBigIntegerForNested(data);\n\n  for (const category of data) {\n    for (const value of category.data) {\n      let idx = result.findIndex((r) => {\n        if (r.x instanceof Date && category.key instanceof Date) {\n          return r.x.getTime() === category.key.getTime();\n        }\n        return r.x === category.key;\n      });\n\n      if (idx === -1) {\n        result.push({\n          metadata: category.metadata,\n          x: category.key,\n          formattedValues: {}\n        });\n\n        idx = result.length - 1;\n      }\n\n      result[idx].metadata = value.metadata;\n\n      result[idx][value.key as string] = normalizeValue(\n        value.data as any,\n        maxBigInteger\n      );\n\n      result[idx].formattedValues[value.key as string] =\n        normalizeValueForFormatting(value.data as any);\n    }\n  }\n\n  return result;\n}\n\n/**\n * Translates the stack data to a chart standard dataset.\n */\nfunction transformStackToData(\n  stackData,\n  direction = 'vertical'\n): ChartInternalNestedDataShape[] {\n  const result: ChartInternalNestedDataShape[] = [];\n  const isVertical = direction === 'vertical';\n\n  // Transform the data from the d3 stack format to our internal format\n  for (const category of stackData) {\n    for (const point of category) {\n      const key = point.data.x;\n\n      let idx = result.findIndex((r) => {\n        if (r.key instanceof Date && key instanceof Date) {\n          return r.key.getTime() === key.getTime();\n        }\n        return r.key === key;\n      });\n\n      if (idx === -1) {\n        result.push({\n          key,\n          data: []\n        });\n\n        idx = result.length - 1;\n      }\n\n      const categoryKey = category.key;\n      const y = point.data[categoryKey];\n      const [y0, y1] = point;\n\n      result[idx].data.push({\n        metadata: point.data.metadata,\n        key,\n        x: isVertical ? categoryKey : y1,\n        x0: isVertical ? categoryKey : y0,\n        x1: isVertical ? categoryKey : y1,\n        y: isVertical ? y : categoryKey,\n        y0: isVertical ? y0 : categoryKey,\n        y1: isVertical ? y1 : categoryKey,\n        value: point.data.formattedValues[categoryKey]\n      });\n    }\n  }\n\n  return result;\n}\n\n/**\n * Builds a stack dataset from the standard data format.\n */\nexport function buildBarStackData(\n  data: ChartNestedDataShape[] = [],\n  offset: StackTypes = 'default',\n  direction = 'vertical'\n) {\n  const keys = uniqueBy<ChartNestedDataShape>(\n    data,\n    (d) => d.data,\n    (d) => d.key\n  );\n  const stackData = transformDataToStack(data);\n\n  let stackFn = stack();\n  if (offset === 'expand') {\n    stackFn = stackFn.offset(stackOffsetExpand);\n  } else if (offset === 'diverging') {\n    stackFn = stackFn.offset(stackOffsetDiverging);\n  }\n\n  const result = stackFn.keys(keys)(stackData);\n\n  return transformStackToData(result, direction);\n}\n","import { ChartNestedDataShape, ChartInternalNestedDataShape } from './types';\nimport { buildBarStackData } from './barStack';\n\n/**\n * Builds a stack dataset from the standard data format.\n */\nexport function buildMarimekkoData(\n  data: ChartNestedDataShape[] = []\n): ChartInternalNestedDataShape[] {\n  const result = buildBarStackData(data, 'expand');\n  const sums = {};\n\n  // Calculate the sum for each series and the total sum\n  let totalSum = 0;\n  for (const series of result) {\n    const sum = series.data.reduce((acc, cur) => acc + (cur.y as number), 0);\n\n    sums[series.key as string] = sum;\n    totalSum += sum;\n  }\n\n  // Calculate the x0/x1 for each series\n  let prev = 0;\n  for (const series of result) {\n    const x0 = prev;\n    const x1 = prev + sums[series.key as string] / totalSum;\n    prev = x1;\n\n    for (const point of series.data) {\n      point.x0 = x0;\n      point.x1 = x1;\n    }\n  }\n\n  return result;\n}\n","import { stack, stackOffsetExpand } from 'd3-shape';\nimport {\n  ChartNestedDataShape,\n  ChartInternalDataShape,\n  ChartInternalNestedDataShape,\n  ChartInternalShallowDataShape\n} from './types';\nimport {\n  getMaxBigIntegerForNested,\n  normalizeValue,\n  normalizeValueForFormatting\n} from './bigInteger';\nimport { uniqueBy } from '@/common/utils/array';\n\n/**\n * Given a dataset like:\n *\n *   [{\n *    key: 'Threat Intel',\n *    data: [{ key:'2011', data: 25 }]\n *   }]\n *\n * it will transform it to:\n *\n *  [\n *    { x: '2011', 'Theat Intel': 25 }\n *  ]\n */\nfunction transformDataToStack(data) {\n  const result: any[] = [];\n  const maxBigInteger = getMaxBigIntegerForNested(data);\n\n  for (const category of data) {\n    for (const value of category.data) {\n      let idx = result.findIndex((r) => {\n        if (r.x instanceof Date && value.key instanceof Date) {\n          return r.x.getTime() === value.key.getTime();\n        }\n        return r.x === value.key;\n      });\n\n      if (idx === -1) {\n        result.push({\n          x: value.key,\n          formattedValues: {}\n        });\n\n        idx = result.length - 1;\n      }\n\n      result[idx][category.key as string] = normalizeValue(\n        value.data,\n        maxBigInteger\n      );\n      result[idx].formattedValues[category.key as string] =\n        normalizeValueForFormatting(value.data);\n    }\n  }\n\n  return result;\n}\n\n/**\n * Translates the stack data to a chart standard dataset.\n */\nfunction transformStackToData(stackData): ChartInternalNestedDataShape[] {\n  const result: ChartInternalNestedDataShape[] = [];\n\n  for (const category of stackData) {\n    const series: ChartInternalShallowDataShape[] = [];\n\n    for (const point of category) {\n      const [y0, y1] = point;\n      const x = point.data.x;\n      series.push({\n        key: category.key,\n        x,\n        x0: x,\n        x1: x,\n        y: y1 - y0,\n        y0,\n        y1,\n        value: point.data.formattedValues[category.key]\n      });\n    }\n\n    result.push({\n      key: category.key,\n      data: series\n    });\n  }\n\n  return result;\n}\n\n/**\n * Builds a stack dataset from the standard data format.\n */\nexport function buildStackData(\n  data: ChartNestedDataShape[],\n  normalized = false\n): ChartInternalDataShape[] {\n  const keys = uniqueBy<ChartNestedDataShape>(data, (d) => d.key);\n  const stackData = transformDataToStack(data);\n  const stackFn = !normalized ? stack() : stack().offset(stackOffsetExpand);\n\n  const result = stackFn.keys(keys)(stackData);\n\n  return transformStackToData(result);\n}\n","import { ChartShallowDataShape } from './types';\nimport { Direction, buildShallowChartData } from './builder';\n\nexport const buildWaterfall = (\n  series: ChartShallowDataShape[],\n  direction: Direction = 'vertical',\n  binSize: number | undefined = undefined\n) => {\n  const data = buildShallowChartData(series, direction, binSize);\n  const isVertical = direction === 'vertical';\n  const v = isVertical ? 'y' : 'x';\n\n  let cumulative = 0;\n  for (const point of data) {\n    point[`${v}0`] = cumulative;\n    cumulative += point[v] as number;\n    point[`${v}1`] = cumulative;\n    point[v] = cumulative;\n  }\n\n  return data;\n};\n","import React, { Component, PropsWithChildren, createRef } from 'react';\nimport { toggleTextSelection } from '@/common/utils/selection';\nimport { smoothMatrix, transform, translate } from 'transformation-matrix';\nimport { constrainMatrix } from '@/common/utils/position';\n\ninterface PanProps extends PropsWithChildren {\n  disabled: boolean;\n  threshold: number;\n  cursor?: string;\n  x: number;\n  y: number;\n  scale: number;\n  matrix: any;\n  width: number;\n  height: number;\n  constrain: boolean;\n  globalPanning: boolean;\n  onPanStart: (event: PanStartEvent) => void;\n  onPanMove: (event: PanMoveEvent) => void;\n  onPanEnd: (event: PanEndEvent) => void;\n  onPanCancel: (event: PanCancelEvent) => void;\n}\n\nexport interface PanStartEvent {\n  source: 'mouse' | 'touch';\n  nativeEvent: MouseEvent | TouchEvent;\n}\n\nexport interface PanMoveEvent {\n  source: 'mouse' | 'touch';\n  x: number;\n  y: number;\n  nativeEvent: MouseEvent | TouchEvent;\n}\n\nexport interface PanEndEvent {\n  source: 'mouse' | 'touch';\n  nativeEvent: MouseEvent | TouchEvent;\n}\n\nexport interface PanCancelEvent {\n  source: 'mouse' | 'touch';\n  nativeEvent: MouseEvent | TouchEvent;\n}\n\nexport class Pan extends Component<PanProps> {\n  static defaultProps: Partial<PanProps> = {\n    x: 0,\n    y: 0,\n    disabled: false,\n    scale: 1,\n    threshold: 10,\n    globalPanning: true,\n    onPanStart: () => undefined,\n    onPanMove: () => undefined,\n    onPanEnd: () => undefined,\n    onPanCancel: () => undefined\n  };\n\n  prevXPosition: number = 0;\n  prevYPosition: number = 0;\n  started: boolean = false;\n  deltaX: number = 0;\n  deltaY: number = 0;\n  childRef = createRef<SVGGElement>();\n\n  componentDidMount() {\n    if (this.childRef.current) {\n      this.childRef.current.addEventListener('mousedown', this.onMouseDown, {\n        passive: false\n      });\n      this.childRef.current.addEventListener('touchstart', this.onTouchStart, {\n        passive: false\n      });\n    }\n  }\n\n  componentWillUnmount() {\n    this.disposeHandlers();\n\n    if (this.childRef.current) {\n      this.childRef.current.removeEventListener('mousedown', this.onMouseDown);\n      this.childRef.current.removeEventListener(\n        'touchstart',\n        this.onTouchStart\n      );\n    }\n  }\n\n  disposeHandlers() {\n    window.removeEventListener('mousemove', this.onMouseMove);\n    window.removeEventListener('mouseup', this.onMouseUp);\n    window.removeEventListener('touchmove', this.onTouchMove);\n    window.removeEventListener('touchend', this.onTouchEnd);\n\n    // Reset cursor on body back to original\n    document.body.style['cursor'] = 'inherit';\n    toggleTextSelection(true);\n  }\n\n  checkThreshold() {\n    const { threshold } = this.props;\n    return (\n      !this.started &&\n      (Math.abs(this.deltaX) > threshold || Math.abs(this.deltaY) > threshold)\n    );\n  }\n\n  onPanStart(nativeEvent, source: 'mouse' | 'touch') {\n    this.props.onPanStart({\n      nativeEvent,\n      source\n    });\n  }\n\n  onPanMove(x: number, y: number, source: 'mouse' | 'touch', nativeEvent) {\n    this.props.onPanMove({\n      source,\n      nativeEvent,\n      x,\n      y\n    });\n  }\n\n  onPanEnd(nativeEvent, source: 'mouse' | 'touch') {\n    const { onPanEnd } = this.props;\n\n    onPanEnd({\n      nativeEvent,\n      source\n    });\n  }\n\n  pan(x: number, y: number, nativeEvent, source: 'mouse' | 'touch') {\n    const { scale, constrain, width, height, matrix } = this.props;\n\n    const newMatrix = smoothMatrix(\n      transform(matrix, translate(x / scale, y / scale)),\n      100\n    );\n\n    const shouldConstrain =\n      constrain && constrainMatrix(height, width, newMatrix);\n    if (!shouldConstrain) {\n      this.onPanMove(newMatrix.e, newMatrix.f, source, nativeEvent);\n    }\n\n    return shouldConstrain;\n  }\n\n  onMouseDown = (event: MouseEvent) => {\n    // Stop at disabled\n    if (this.props.disabled) {\n      return;\n    }\n\n    // Ignore right click\n    if (event.which === 3) {\n      return;\n    }\n\n    // If global panning is turned off, it will only pan on the container\n    if (\n      !this.props.globalPanning &&\n      event.target &&\n      !(event.target as HTMLElement).classList.contains('pan-container')\n    ) {\n      return;\n    }\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    toggleTextSelection(false);\n    this.started = false;\n\n    // Always bind event so we cancel movement even if no action was taken\n    window.addEventListener('mousemove', this.onMouseMove);\n    window.addEventListener('mouseup', this.onMouseUp);\n  };\n\n  onMouseMove = (event: MouseEvent) => {\n    event.preventDefault();\n    event.stopPropagation();\n\n    this.deltaX = this.deltaX + event.movementX;\n    this.deltaY = this.deltaY + event.movementY;\n\n    if (this.checkThreshold()) {\n      if (this.props.cursor) {\n        document.body.style['cursor'] = this.props.cursor;\n      }\n\n      this.deltaX = 0;\n      this.deltaY = 0;\n      this.started = true;\n\n      this.onPanStart(event, 'mouse');\n    } else {\n      this.pan(event.movementX, event.movementY, event, 'mouse');\n    }\n  };\n\n  onMouseUp = (event: MouseEvent) => {\n    event.preventDefault();\n    event.stopPropagation();\n\n    this.disposeHandlers();\n    toggleTextSelection(true);\n\n    if (this.started) {\n      this.onPanEnd(event, 'mouse');\n    } else {\n      this.props.onPanCancel({\n        nativeEvent: event,\n        source: 'mouse'\n      });\n    }\n  };\n\n  onTouchStart = (event: TouchEvent) => {\n    // Stop at disabled\n    if (this.props.disabled) {\n      return;\n    }\n\n    // Reqquire more than one touch\n    if (event.touches.length !== 1) {\n      return;\n    }\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    toggleTextSelection(false);\n    this.started = false;\n\n    this.prevXPosition = event.touches[0].clientX;\n    this.prevYPosition = event.touches[0].clientY;\n\n    // Always bind event so we cancel movement even if no action was taken\n    window.addEventListener('touchmove', this.onTouchMove);\n    window.addEventListener('touchend', this.onTouchEnd);\n  };\n\n  onTouchMove = (event: TouchEvent) => {\n    event.preventDefault();\n    event.stopPropagation();\n\n    // Calculate delta from previous position and current\n    const x = event.touches[0].clientX;\n    const y = event.touches[0].clientY;\n\n    const deltaX = x - this.prevXPosition;\n    const deltaY = y - this.prevYPosition;\n\n    this.deltaX = this.deltaX + deltaX;\n    this.deltaY = this.deltaY + deltaY;\n\n    if (this.checkThreshold()) {\n      this.deltaX = 0;\n      this.deltaY = 0;\n      this.started = true;\n\n      this.onPanStart(event, 'touch');\n    } else {\n      const contrained = this.pan(deltaX, deltaY, event, 'touch');\n\n      if (!contrained) {\n        this.prevXPosition = x;\n        this.prevYPosition = y;\n      }\n    }\n  };\n\n  onTouchEnd = (event: TouchEvent) => {\n    event.preventDefault();\n    event.stopPropagation();\n\n    this.disposeHandlers();\n    toggleTextSelection(true);\n\n    if (this.started) {\n      this.onPanEnd(event, 'touch');\n    } else {\n      this.props.onPanCancel({\n        nativeEvent: event,\n        source: 'touch'\n      });\n    }\n  };\n\n  render() {\n    return <g ref={this.childRef}>{this.props.children}</g>;\n  }\n}\n","/**\n * Gets the position between a given set of points.\n */\nexport const getMidpoint = (pointA, pointB) => ({\n  x: (pointA.x + pointB.x) / 2,\n  y: (pointA.y + pointB.y) / 2\n});\n\n/**\n * Gets the distance between a given set of points.\n */\nexport const getDistanceBetweenPoints = (pointA, pointB) =>\n  Math.sqrt(\n    Math.pow(pointB.y - pointA.y, 2) + Math.pow(pointB.x - pointA.x, 2)\n  );\n\n/**\n * Get touch points.\n */\nexport function getTouchPoints(event, node) {\n  const { left, top } = node.getBoundingClientRect();\n\n  const [pointA, pointB] = [...event.touches].map((touch) => ({\n    x: touch.clientX - Math.round(left),\n    y: touch.clientY - Math.round(top)\n  }));\n\n  const distance = getDistanceBetweenPoints(pointA, pointB);\n  const midpoint = getMidpoint(pointA, pointB);\n\n  return {\n    pointA,\n    pointB,\n    distance,\n    midpoint\n  };\n}\n","import React, { Component, PropsWithChildren, createRef } from 'react';\nimport { toggleTextSelection } from '@/common/utils/selection';\nimport {\n  getPointFromMatrix,\n  isZoomLevelGoingOutOfBounds\n} from '@/common/utils/position';\nimport { getTouchPoints } from './pinchUtils';\nimport {\n  scale,\n  smoothMatrix,\n  transform,\n  translate,\n  applyToPoint,\n  inverse\n} from 'transformation-matrix';\n\ninterface ZoomGestureProps extends PropsWithChildren {\n  disabled?: boolean;\n  maxZoom: number;\n  minZoom: number;\n  scaleFactor: number;\n  scale: number;\n  matrix: any;\n  x: number;\n  y: number;\n  style?: any;\n  disableMouseWheel?: boolean;\n  requireZoomModifier?: boolean;\n  onZoom: (event: ZoomEvent) => void;\n  onZoomEnd: () => void;\n}\n\nexport interface ZoomEvent {\n  scale: number;\n  x: number;\n  y: number;\n  nativeEvent: any;\n}\n\nexport class Zoom extends Component<ZoomGestureProps> {\n  static defaultProps: Partial<ZoomGestureProps> = {\n    x: 0,\n    y: 0,\n    scale: 1,\n    scaleFactor: 0.1,\n    minZoom: 1,\n    maxZoom: 10\n  };\n\n  firstTouch: any;\n  lastDistance: any;\n  timeout: any;\n  childRef = createRef<SVGGElement>();\n  rqf: any;\n\n  componentDidMount() {\n    const { disabled, disableMouseWheel } = this.props;\n\n    const ref = this.childRef.current;\n    if (!disabled && ref) {\n      if (!disableMouseWheel) {\n        ref.addEventListener('mousewheel', this.onMouseWheel, {\n          passive: false\n        });\n      }\n\n      ref.addEventListener('touchstart', this.onTouchStart, { passive: false });\n    }\n  }\n\n  componentWillUnmount() {\n    window.removeEventListener('touchmove', this.onTouchMove);\n    window.removeEventListener('touchend', this.onTouchEnd);\n    cancelAnimationFrame(this.rqf);\n    clearTimeout(this.timeout);\n\n    const ref = this.childRef.current;\n    if (ref) {\n      ref.removeEventListener('mousewheel', this.onMouseWheel);\n      ref.removeEventListener('touchstart', this.onTouchStart);\n    }\n\n    toggleTextSelection(true);\n  }\n\n  getStep(delta: number) {\n    const { scaleFactor } = this.props;\n    return -delta > 0 ? scaleFactor + 1 : 1 - scaleFactor;\n  }\n\n  scale(x: number, y: number, step: number, nativeEvent) {\n    const { minZoom, maxZoom, onZoom, matrix } = this.props;\n\n    const outside = isZoomLevelGoingOutOfBounds(\n      {\n        d: matrix.a,\n        scaleFactorMin: minZoom,\n        scaleFactorMax: maxZoom\n      },\n      step\n    );\n\n    if (!outside) {\n      const newMatrix = smoothMatrix(\n        transform(\n          matrix,\n          translate(x, y),\n          scale(step, step),\n          translate(-x, -y)\n        ),\n        100\n      );\n\n      this.rqf = requestAnimationFrame(() => {\n        onZoom({\n          scale: newMatrix.a,\n          x: newMatrix.e,\n          y: newMatrix.f,\n          nativeEvent\n        });\n      });\n    }\n\n    return outside;\n  }\n\n  onMouseWheel = (event) => {\n    const { disableMouseWheel, requireZoomModifier, matrix, onZoomEnd } =\n      this.props;\n\n    if (disableMouseWheel) {\n      return false;\n    }\n\n    const hasModifier = event.metaKey || event.ctrlKey;\n    if (requireZoomModifier && !hasModifier) {\n      return false;\n    }\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    const point = getPointFromMatrix(event, matrix);\n    if (point) {\n      const { x, y } = point as { x: number; y: number };\n      const step = this.getStep(event.deltaY);\n\n      this.scale(x, y, step, event);\n\n      // Do small timeout to 'guess' when its done zooming\n      clearTimeout(this.timeout);\n      this.timeout = setTimeout(() => onZoomEnd(), 500);\n    }\n  };\n\n  onTouchStart = (event: TouchEvent) => {\n    if (event.touches.length === 2) {\n      event.preventDefault();\n      event.stopPropagation();\n      toggleTextSelection(false);\n\n      this.firstTouch = getTouchPoints(event, this.childRef.current);\n      this.lastDistance = this.firstTouch.distance;\n\n      window.addEventListener('touchmove', this.onTouchMove);\n      window.addEventListener('touchend', this.onTouchEnd);\n    }\n  };\n\n  onTouchMove = (event: TouchEvent) => {\n    if (event.touches.length === 2) {\n      event.preventDefault();\n      event.stopPropagation();\n\n      const { distance } = getTouchPoints(event, this.childRef.current);\n      const distanceFactor = distance / this.lastDistance;\n\n      const point = applyToPoint(inverse(this.props.matrix), {\n        x: this.firstTouch.midpoint.x,\n        y: this.firstTouch.midpoint.y\n      }) as { x: number; y: number };\n\n      if (point.x && point.y) {\n        const outside = this.scale(point.x, point.y, distanceFactor, event);\n\n        if (!outside) {\n          this.lastDistance = distance;\n        }\n      }\n    }\n  };\n\n  onTouchEnd = (event: TouchEvent) => {\n    event.preventDefault();\n    event.stopPropagation();\n\n    window.removeEventListener('touchmove', this.onTouchMove);\n    window.removeEventListener('touchend', this.onTouchEnd);\n\n    toggleTextSelection(true);\n    this.props.onZoomEnd();\n  };\n\n  render() {\n    const { style, children } = this.props;\n    return (\n      <g ref={this.childRef} style={style}>\n        {children}\n      </g>\n    );\n  }\n}\n","import React, { FC, ReactElement } from 'react';\nimport classNames from 'classnames';\nimport { CloneElement } from 'reablocks';\nimport {\n  DiscreteLegendEntryProps,\n  DiscreteLegendEntry\n} from './DiscreteLegendEntry';\nimport css from './DiscreteLegend.module.css';\n\nexport interface DiscreteLegendProps {\n  /**\n   * CSS Class name.\n   */\n  className?: string;\n\n  /**\n   * CSS Styles.\n   */\n  style?: React.CSSProperties;\n\n  /**\n   * Orientation of the legend.\n   */\n  orientation?: 'horizontal' | 'vertical';\n\n  /**\n   * Entry components to show in the legend.\n   */\n  entries: ReactElement<DiscreteLegendEntryProps, typeof DiscreteLegendEntry>[];\n}\n\nexport const DiscreteLegend: FC<Partial<DiscreteLegendProps>> = ({\n  entries,\n  orientation = 'vertical',\n  style,\n  className\n}) => (\n  <div\n    className={classNames(css.container, className, {\n      [css.horizontal]: orientation === 'horizontal',\n      [css.vertical]: orientation === 'vertical'\n    })}\n    style={style}\n  >\n    {entries.map((entry, index) => (\n      <CloneElement<DiscreteLegendEntryProps>\n        element={entry}\n        key={`dle-${index}`}\n        orientation={orientation}\n      />\n    ))}\n  </div>\n);\n","import React, { FC } from 'react';\nimport classNames from 'classnames';\nimport css from './DiscreteLegendSymbol.module.css';\n\nexport interface DiscreteLegendSymbolProps {\n  /**\n   * Color for the symbol set by the `DiscreteLegendEntry`.\n   */\n  color: string;\n\n  /**\n   * CSS Class names.\n   */\n  className?: string;\n}\n\nexport const DiscreteLegendSymbol: FC<Partial<DiscreteLegendSymbolProps>> = ({\n  className,\n  color\n}) => (\n  <div\n    className={classNames(css.symbol, className)}\n    style={{ background: color }}\n  />\n);\n","import React, { ReactNode, ReactElement, FC } from 'react';\nimport classNames from 'classnames';\nimport {\n  DiscreteLegendSymbol,\n  DiscreteLegendSymbolProps\n} from './DiscreteLegendSymbol';\nimport { CloneElement } from 'reablocks';\nimport css from './DiscreteLegendEntry.module.css';\n\nexport interface DiscreteLegendEntryProps {\n  /**\n   * Label for the entry.\n   */\n  label: string;\n\n  /**\n   * Color for the entry.\n   */\n  color: string;\n\n  /**\n   * Symbol for the entry.\n   */\n  symbol:\n    | ReactElement<DiscreteLegendSymbolProps, typeof DiscreteLegendSymbol>\n    | ReactNode;\n\n  /**\n   * CSS Styles.\n   */\n  style?: React.CSSProperties;\n\n  /**\n   * CSS Class names.\n   */\n  className?: string;\n\n  /**\n   * HTML Title Attribute.\n   */\n  title?: string;\n\n  /**\n   * Orientation of the entry set internally by `DiscreteLegend`.\n   */\n  orientation: 'horizontal' | 'vertical';\n\n  /**\n   * Mouse enter event.\n   */\n  onMouseEnter: (event: React.MouseEvent<HTMLDivElement>) => void;\n\n  /**\n   * Mouse leave event.\n   */\n  onMouseLeave: (event: React.MouseEvent<HTMLDivElement>) => void;\n\n  /**\n   * On click event.\n   */\n  onClick: (event: React.MouseEvent<HTMLDivElement>) => void;\n}\n\nexport const DiscreteLegendEntry: FC<Partial<DiscreteLegendEntryProps>> = ({\n  label,\n  symbol = <DiscreteLegendSymbol />,\n  title,\n  className,\n  color,\n  style,\n  orientation = 'horizontal',\n  onMouseEnter,\n  onMouseLeave,\n  onClick\n}) => (\n  <div\n    title={title}\n    className={classNames(css.entry, className, {\n      [css.vertical]: orientation === 'vertical',\n      [css.horizontal]: orientation === 'horizontal'\n    })}\n    onClick={onClick}\n    onMouseEnter={onMouseEnter}\n    onMouseLeave={onMouseLeave}\n    style={style}\n  >\n    <CloneElement<DiscreteLegendSymbolProps> element={symbol} color={color} />\n    <span className={css.label}>{label}</span>\n  </div>\n);\n","import React, { FC, useMemo } from 'react';\nimport classNames from 'classnames';\nimport { ChartDataShape } from '@/common/data';\nimport chroma from 'chroma-js';\nimport { uniqueBy } from '@/common/utils/array';\nimport { extent } from 'd3-array';\nimport { formatValue } from '@/common/utils/formatting';\n\nimport css from './SequentialLegend.module.css';\n\nexport interface SequentialLegendProps {\n  /**\n   * CSS Class name.\n   */\n  className?: any;\n\n  /**\n   * CSS Class name for the gradient element.\n   */\n  gradientClassName?: string;\n\n  /**\n   * CSS Styles.\n   */\n  style?: any;\n\n  /**\n   * Orientation of the legend.\n   */\n  orientation?: 'horizontal' | 'vertical';\n\n  /**\n   * Data to use to render the scale.\n   */\n  data: ChartDataShape[];\n\n  /**\n   * Color scheme for the scale.\n   */\n  colorScheme?: string[];\n}\n\nexport const SequentialLegend: FC<SequentialLegendProps> = ({\n  className,\n  gradientClassName,\n  style,\n  data,\n  colorScheme = ['rgba(28, 107, 86, 0.5)', '#2da283'],\n  orientation = 'vertical'\n}) => {\n  // Generate the color gradient\n  const color = useMemo(\n    () =>\n      chroma\n        .scale(colorScheme)\n        .colors(10)\n        .reverse()\n        .map((c, i) => `${c} ${i * 10}%`)\n        .join(','),\n    [colorScheme]\n  );\n\n  // Get the extent from the data passed\n  const [end, start] = useMemo(\n    () =>\n      extent(\n        uniqueBy(\n          data,\n          (d) => d.data,\n          (d) => d.data\n        )\n      ),\n    [data]\n  );\n\n  // Get direction\n  const gradientDir = orientation === 'vertical' ? '' : 'to left,';\n\n  return (\n    <div\n      style={style}\n      className={classNames(css.container, className, {\n        [css.vertical]: orientation === 'vertical',\n        [css.horizontal]: orientation === 'horizontal'\n      })}\n    >\n      <div className={css.start}>{formatValue(start)}</div>\n      <div\n        className={classNames(css.gradient, gradientClassName)}\n        style={{\n          background: `linear-gradient(${gradientDir}${color})`\n        }}\n      />\n      <div className={css.end}>{formatValue(end)}</div>\n    </div>\n  );\n};\n","import classNames from 'classnames';\nimport React, { FC, useMemo } from 'react';\nimport css from './Gridline.module.css';\nimport { mergeDefaultProps } from '../utils';\n\nexport interface GridlineProps {\n  /**\n   * Height of the line set by the `GridlineSeries`.\n   */\n  height: number;\n\n  /**\n   * Width of the line set by the `GridlineSeries`.\n   */\n  width: number;\n\n  /**\n   * CSS Classname to apply.\n   */\n  className?: string;\n\n  /**\n   * Direction set by the `GridlineSeries`.\n   */\n  direction: 'all' | 'x' | 'y';\n\n  /**\n   * D3 Scale set by `GridlineSeries`.\n   */\n  scale: any;\n\n  /**\n   * SVG Stroke Width Property.\n   */\n  strokeWidth: number;\n\n  /**\n   * SVG Stroke Color Property.\n   */\n  strokeColor: string;\n\n  /**\n   * Data point for the position set by the `GridlineSeries`.\n   */\n  data: number;\n\n  /**\n   * Index set by the `GridlineSeries`.\n   */\n  index: number;\n\n  /**\n   * SVG Stroke Dash Array Property.\n   */\n  strokeDasharray: string;\n}\n\nexport const Gridline: FC<Partial<GridlineProps>> = (props) => {\n  const {\n    strokeWidth,\n    direction,\n    className,\n    strokeColor,\n    data,\n    height,\n    width,\n    scale,\n    strokeDasharray\n  } = mergeDefaultProps(GRID_LINE_DEFAULT_PROPS, props);\n\n  const coords = useMemo(() => {\n    const pos = scale(data);\n\n    if (direction === 'x') {\n      return {\n        x1: pos,\n        x2: pos,\n        y1: 0,\n        y2: height\n      };\n    } else {\n      return {\n        y1: pos,\n        y2: pos,\n        x1: 0,\n        x2: width\n      };\n    }\n  }, [direction, data, height, width, scale]);\n\n  return (\n    <line\n      {...coords}\n      className={classNames(css.gridLine, className)}\n      strokeDasharray={strokeDasharray}\n      strokeWidth={strokeWidth}\n      stroke={strokeColor}\n      fill=\"none\"\n    />\n  );\n};\n\nexport const GRID_LINE_DEFAULT_PROPS: Partial<GridlineProps> = {\n  strokeWidth: 1,\n  strokeDasharray: '2 5',\n  direction: 'all',\n  strokeColor: 'rgba(153, 153, 153, 0.5)'\n};\n","import classNames from 'classnames';\nimport React, { FC, useMemo } from 'react';\nimport css from './GridStripe.module.css';\n\nexport interface GridStripeProps {\n  /**\n   * Position set by the `GridlineSeries`.\n   */\n  position: 'horizontal' | 'vertical';\n\n  /**\n   * CSS Classname to apply.\n   */\n  className?: string;\n\n  /**\n   * Stripe fill color.\n   */\n  fill: string;\n\n  /**\n   * Height of the line set by the `GridlineSeries`.\n   */\n  height: number;\n\n  /**\n   * Width of the line set by the `GridlineSeries`.\n   */\n  width: number;\n\n  /**\n   * Direction set by the `GridlineSeries`.\n   */\n  direction: 'all' | 'x' | 'y';\n\n  /**\n   * D3 Scale set by `GridlineSeries`.\n   */\n  scale: any;\n\n  /**\n   * Data point for the position set by the `GridlineSeries`.\n   */\n  data: number;\n\n  /**\n   * Index set by the `GridlineSeries`.\n   */\n  index: number;\n}\n\nexport const GridStripe: FC<Partial<GridStripeProps>> = (props) => {\n  const { fill, className, position, data, height, width, scale, index } = {\n    ...GRID_STRIPE_DEFAULT_PROPS,\n    ...props\n  };\n  const coords = useMemo(() => {\n    const pos = scale(data);\n    const stripeFill = index % 2 ? 'none' : fill;\n    const dim = scale.bandwidth();\n\n    if (position === 'vertical') {\n      return {\n        y: 0,\n        x: pos,\n        height: height,\n        width: dim,\n        fill: stripeFill\n      };\n    } else {\n      return {\n        y: pos,\n        x: 0,\n        height: dim,\n        width,\n        fill: stripeFill\n      };\n    }\n  }, [scale, data, index, height, width, fill, position]);\n\n  return <rect className={classNames(css.gridStripe, className)} {...coords} />;\n};\n\nexport const GRID_STRIPE_DEFAULT_PROPS = {\n  fill: '#393c3e'\n};\n","import React, { Fragment, ReactElement, FC, useMemo, useCallback } from 'react';\nimport { Gridline, GRID_LINE_DEFAULT_PROPS, GridlineProps } from './Gridline';\nimport { getTicks, getMaxTicks } from '@/common/utils/ticks';\nimport { CloneElement } from 'reablocks';\nimport {\n  LINEAR_X_AXIS_TICK_SERIES_DEFAULT_PROPS,\n  LINEAR_Y_AXIS_TICK_SERIES_DEFAULT_PROPS,\n  LinearAxisProps\n} from '../Axis';\nimport {\n  GridStripeProps,\n  GridStripe,\n  GRID_STRIPE_DEFAULT_PROPS\n} from './GridStripe';\n\ntype GridLineElement = ReactElement<GridlineProps, typeof Gridline>;\ntype GridStripeElement = ReactElement<GridStripeProps, typeof GridStripe>;\ntype GridElement = GridLineElement | GridStripeElement;\n\nexport interface GridlineSeriesProps {\n  /**\n   * D3 scale for Y Axis.\n   */\n  yScale: any;\n\n  /**\n   * D3 scale for X Axis.\n   */\n  xScale: any;\n\n  /**\n   * The linear axis component for the Y Axis of the chart.\n   */\n  yAxis: LinearAxisProps;\n\n  /**\n   * The linear axis component for the X Axis of the chart.\n   */\n  xAxis: LinearAxisProps;\n\n  /**\n   * Height of the chart.\n   */\n  height: number;\n\n  /**\n   * Width of the chart.\n   */\n  width: number;\n\n  /**\n   * Gridline that is rendered.\n   */\n  line: GridLineElement | null;\n\n  /**\n   * GridStripe that is rendered.\n   */\n  stripe: GridStripeElement | null;\n}\n\nexport const GridlineSeries: FC<Partial<GridlineSeriesProps>> = ({\n  line = <Gridline direction=\"all\" />,\n  stripe,\n  yScale,\n  xScale,\n  yAxis,\n  xAxis,\n  height,\n  width\n}) => {\n  const lineProps = useMemo(\n    () => ({ ...GRID_LINE_DEFAULT_PROPS, ...line.props }),\n    [line.props]\n  );\n  const stripeProps = useMemo(\n    () => ({ ...GRID_STRIPE_DEFAULT_PROPS, ...(stripe?.props ?? {}) }),\n    [stripe?.props]\n  );\n\n  const shouldRenderY = (direction: 'all' | 'x' | 'y') =>\n    direction === 'all' || direction === 'y';\n  const shouldRenderX = (direction: 'all' | 'x' | 'y') =>\n    direction === 'all' || direction === 'x';\n\n  const { yAxisGrid, xAxisGrid } = useMemo(() => {\n    const xTickSeriesProps = {\n      ...LINEAR_X_AXIS_TICK_SERIES_DEFAULT_PROPS,\n      ...xAxis.tickSeries.props\n    };\n    const yTickSeriesProps = {\n      ...LINEAR_Y_AXIS_TICK_SERIES_DEFAULT_PROPS,\n      ...yAxis.tickSeries.props\n    };\n\n    return {\n      yAxisGrid: getTicks(\n        yScale,\n        yTickSeriesProps.tickValues,\n        yAxis.type,\n        getMaxTicks(yTickSeriesProps.tickSize, height),\n        yTickSeriesProps.interval\n      ),\n      xAxisGrid: getTicks(\n        xScale,\n        xTickSeriesProps.tickValues,\n        xAxis.type,\n        getMaxTicks(xTickSeriesProps.tickSize, width),\n        xTickSeriesProps.interval\n      )\n    };\n  }, [height, width, xAxis, yAxis, yScale, xScale]);\n\n  const renderGroup = useCallback(\n    (\n      element: GridElement,\n      grid,\n      scale,\n      direction: 'x' | 'y',\n      type: 'line' | 'stripe'\n    ) => {\n      return grid.map((point, index) => (\n        <Fragment key={`${type}-${direction}-${index}`}>\n          <CloneElement<GridlineProps | GridStripeProps>\n            element={element}\n            index={index}\n            scale={scale}\n            data={point}\n            height={height}\n            width={width}\n            direction={direction}\n          />\n        </Fragment>\n      ));\n    },\n    [height, width]\n  );\n\n  const renderSeries = useCallback(\n    (\n      yAxisGrid,\n      xAxisGrid,\n      element: GridElement,\n      direction: 'x' | 'y' | 'all',\n      type: 'line' | 'stripe'\n    ) => {\n      return (\n        <Fragment>\n          {shouldRenderY(direction) &&\n            renderGroup(element, yAxisGrid, yScale, 'y', type)}\n          {shouldRenderX(direction) &&\n            renderGroup(element, xAxisGrid, xScale, 'x', type)}\n        </Fragment>\n      );\n    },\n    [renderGroup, xScale, yScale]\n  );\n\n  return (\n    <g style={{ pointerEvents: 'none' }}>\n      {line &&\n        renderSeries(yAxisGrid, xAxisGrid, line, lineProps.direction, 'line')}\n      {stripe &&\n        renderSeries(\n          yAxisGrid,\n          xAxisGrid,\n          stripe,\n          stripeProps.direction,\n          'stripe'\n        )}\n    </g>\n  );\n};\n","import React, { FC } from 'react';\nimport css from './MarkLine.module.css';\n\nexport interface MarkLineProps {\n  height: number;\n  pointX?: number;\n  strokeColor: string;\n  strokeWidth: number;\n}\n\nexport const MarkLine: FC<Partial<MarkLineProps>> = ({\n  pointX,\n  height,\n  strokeWidth = 1,\n  strokeColor = '#eee'\n}) => (\n  <line\n    stroke={strokeColor}\n    strokeWidth={strokeWidth}\n    y1=\"0\"\n    vectorEffect=\"non-scaling-stroke\"\n    y2={height}\n    x1={pointX}\n    x2={pointX}\n    className={css.markLine}\n  />\n);\n","import React, { FC } from 'react';\n\nexport interface GradientStopProps {\n  offset: number | string;\n  stopOpacity: number | string;\n  color?: string;\n}\n\nexport const GradientStop: FC<Partial<GradientStopProps>> = ({\n  color,\n  offset,\n  stopOpacity = 1\n}) => <stop offset={offset} stopOpacity={stopOpacity} stopColor={color} />;\n","import React, { FC, ReactElement } from 'react';\nimport { GradientStop, GradientStopProps } from './GradientStop';\nimport { CloneElement } from 'reablocks';\n\nexport interface GradientProps {\n  id: string;\n  stops: ReactElement<GradientStopProps, typeof GradientStop>[];\n  color?: string;\n  direction: 'vertical' | 'horizontal' | 'radial';\n}\n\nexport const Gradient: FC<Partial<GradientProps>> = ({\n  id,\n  color,\n  direction = 'vertical',\n  stops = [\n    <GradientStop offset=\"0%\" stopOpacity={0.3} key=\"start\" />,\n    <GradientStop offset=\"80%\" stopOpacity={1} key=\"stop\" />\n  ]\n}) => {\n  if (direction === 'radial') {\n    return (\n      <radialGradient id={id}>\n        {stops.map((stop, index) => (\n          <CloneElement<GradientStopProps>\n            element={stop}\n            key={`gradient-${index}`}\n            color={stop.props.color || color}\n          />\n        ))}\n      </radialGradient>\n    );\n  }\n\n  const pos =\n    direction === 'vertical'\n      ? {\n          x1: '10%',\n          x2: '10%',\n          y1: '100%',\n          y2: '0%'\n        }\n      : {\n          y1: '0%',\n          y2: '0%',\n          x1: '0%',\n          x2: '100%'\n        };\n\n  return (\n    <linearGradient spreadMethod=\"pad\" id={id} {...pos}>\n      {stops.map((stop, index) => (\n        <CloneElement<GradientStopProps>\n          element={stop}\n          key={`gradient-${index}`}\n          color={stop.props.color || color}\n        />\n      ))}\n    </linearGradient>\n  );\n};\n","import React, { FC, ReactElement } from 'react';\nimport { GradientStop, GradientStopProps } from './GradientStop';\nimport { CloneElement } from 'reablocks';\n\nexport interface RadialGradientProps {\n  id: string;\n  stops: ReactElement<GradientStopProps, typeof GradientStop>[];\n  color?: string;\n  radius: number | string;\n}\n\nexport const RadialGradient: FC<Partial<RadialGradientProps>> = ({\n  id,\n  color,\n  radius = '30%',\n  stops = [\n    <GradientStop offset=\"0%\" stopOpacity={0.2} key=\"start\" />,\n    <GradientStop offset=\"80%\" stopOpacity={0.7} key=\"stop\" />\n  ]\n}) => (\n  <radialGradient\n    id={id}\n    cx={0}\n    cy={0}\n    r={radius}\n    gradientUnits=\"userSpaceOnUse\"\n  >\n    {stops.map((stop, index) => (\n      <CloneElement<GradientStopProps>\n        element={stop}\n        key={`gradient-${index}`}\n        color={color}\n      />\n    ))}\n  </radialGradient>\n);\n","import React, { FC } from 'react';\n\nexport interface MaskProps {\n  id?: string;\n  fill?: string;\n}\n\nexport const Mask: FC<MaskProps> = ({ id, fill }) => (\n  <mask id={id}>\n    <rect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" fill={fill} />\n  </mask>\n);\n","import React, { FC } from 'react';\nimport { MaskProps } from './Mask';\n\nexport interface StripesProps extends MaskProps {\n  id?: string;\n  fill?: string;\n}\n\nexport const Stripes: FC<StripesProps> = ({ id, fill }) => (\n  <pattern\n    id={id}\n    width=\"4\"\n    height=\"4\"\n    patternUnits=\"userSpaceOnUse\"\n    patternTransform=\"rotate(45)\"\n  >\n    <rect className=\"area-stripe\" width=\"1\" height=\"4\" fill={fill} />\n  </pattern>\n);\n","import React, { Fragment, FC } from 'react';\nimport { formatValue } from '@/common/utils/formatting';\nimport { ChartInternalDataTypes } from '@/common/data';\nimport css from './TooltipTemplate.module.css';\n\ninterface SingleTooltipValue {\n  key?: ChartInternalDataTypes;\n  value?: ChartInternalDataTypes;\n  x: ChartInternalDataTypes;\n  y: ChartInternalDataTypes;\n}\n\ninterface MultipleTooltipValues {\n  x: ChartInternalDataTypes;\n  data: SingleTooltipValue[];\n}\n\ninterface TooltipTemplateProps {\n  /**\n   * Tooltip data value.\n   */\n  value?: SingleTooltipValue | MultipleTooltipValues;\n\n  /**\n   * Color scheme to apply.\n   */\n  color?: any;\n\n  /**\n   * Additional CSS classes to apply.\n   */\n  className?: any;\n}\n\nexport const TooltipTemplate: FC<TooltipTemplateProps> = ({\n  value,\n  color,\n  className\n}) => {\n  if (!value) {\n    return null;\n  }\n\n  const renderValues = (data: SingleTooltipValue, index: number) => {\n    const fill = color(data, index);\n\n    return (\n      <span className={css.subValue}>\n        <span className={css.subValueColor} style={{ backgroundColor: fill }} />\n        <span className={css.subValueName}>\n          {formatValue(data.key || data.x)}:\n        </span>\n        <span>{formatValue(data.value || data.y)}</span>\n      </span>\n    );\n  };\n\n  const renderMultiple = (value: MultipleTooltipValues) => {\n    const excessCount = value.data.length - 15;\n    const pagedValues = value.data.slice(0, 15);\n\n    return (\n      <Fragment>\n        {pagedValues.map((point, i) => (\n          <Fragment key={i}>{renderValues(point, i)}</Fragment>\n        ))}\n        {excessCount > 0 && <div>...{excessCount} more...</div>}\n      </Fragment>\n    );\n  };\n\n  const isMultiple = Array.isArray((value as any).data);\n\n  return (\n    <div className={className} role=\"tooltip\">\n      <div className={css.label}>{formatValue(value!.x)}</div>\n      <div className={css.value}>\n        {isMultiple && renderMultiple(value as MultipleTooltipValues)}\n        {!isMultiple && (\n          <Fragment>\n            {formatValue(\n              (value as SingleTooltipValue).value ||\n                (value as SingleTooltipValue).y\n            )}\n          </Fragment>\n        )}\n      </div>\n    </div>\n  );\n};\n","import { TooltipTheme } from 'reablocks';\n\nimport css from './Tooltip.module.css';\n\nexport const tooltipTheme: TooltipTheme = {\n  base: css.base,\n  disablePointer: css.disablePointer\n};\n","import React, { cloneElement, FC } from 'react';\nimport { Tooltip, TooltipProps } from 'reablocks';\nimport { TooltipTemplate } from './TooltipTemplate';\nimport { tooltipTheme } from './TooltipTheme';\n\nexport interface ChartTooltipProps extends TooltipProps {\n  /**\n   * Content for the tooltip.\n   */\n  content: any;\n\n  /**\n   * Tooltip data value.\n   */\n  value?: any;\n\n  /**\n   * Color scheme to apply.\n   */\n  color?: any;\n\n  /**\n   * Complete dataset.\n   */\n  data: any;\n\n  /**\n   * Whether the tooltip should move with the cursor or not.\n   */\n  followCursor?: boolean;\n}\n\nexport const ChartTooltip: FC<Partial<ChartTooltipProps>> = ({\n  content = <TooltipTemplate />,\n  value,\n  data,\n  color,\n  ...rest\n}) => {\n  return (\n    <Tooltip\n      theme={tooltipTheme}\n      {...rest}\n      content={() => {\n        if (!value && !data) {\n          return null;\n        }\n\n        return typeof content === 'function'\n          ? content(data || value, color)\n          : cloneElement(content, {\n              ...content.props,\n              value,\n              color\n            });\n      }}\n    />\n  );\n};\n","import React, {\n  Fragment,\n  ReactElement,\n  useState,\n  useRef,\n  useCallback,\n  useMemo,\n  forwardRef,\n  useImperativeHandle,\n  useEffect\n} from 'react';\nimport { flip, offset } from '@floating-ui/dom';\nimport { TooltipAreaEvent } from './TooltipAreaEvent';\nimport {\n  ChartDataTypes,\n  ChartInternalDataShape,\n  ChartInternalShallowDataShape,\n  ChartInternalNestedDataShape\n} from '@/common/data';\nimport {\n  getPositionForTarget,\n  getClosestContinousScalePoint,\n  getClosestBandScalePoint\n} from '@/common/utils/position';\nimport { CloneElement, Placement } from 'reablocks';\nimport { ChartTooltip, ChartTooltipProps } from './ChartTooltip';\nimport { arc } from 'd3-shape';\nimport isEqual from 'react-fast-compare';\nimport { scaleLinear } from 'd3-scale';\n\nexport interface TooltipAreaProps {\n  /**\n   * Popperjs placement.\n   */\n  placement: Placement;\n\n  /**\n   * Chart height. Set internally.\n   */\n  height: number;\n\n  /**\n   * Chart width. Set internally.\n   */\n  width: number;\n\n  /**\n   * Chart D3 XScale. Set internally.\n   */\n  xScale: any;\n\n  /**\n   * Chart D3 YScale. Set internally.\n   */\n  yScale: any;\n\n  /**\n   * Whether the tooltip is disabled or not.\n   */\n  disabled: boolean;\n\n  /**\n   * Color setter.\n   */\n  color: any;\n\n  /**\n   * Chart internal data type.\n   */\n  data: ChartInternalDataShape[];\n\n  /**\n   * Child elements to be contained by.\n   */\n  children?: any;\n\n  /**\n   * Whether the area is radial or not.\n   */\n  isRadial?: boolean;\n\n  /**\n   * Whether the area is continous or not (e.g. line and area charts are continous, bar charts are not).\n   */\n  isContinous?: boolean;\n\n  /**\n   * Inner-radius to set the positioning by. Set internally.\n   */\n  innerRadius?: number;\n\n  /**\n   * Outer-radius to set the positioning by. Set internally.\n   */\n  outerRadius?: number;\n\n  /**\n   * Tooltip element.\n   */\n  tooltip: ReactElement<ChartTooltipProps, typeof ChartTooltip>;\n\n  /**\n   * Whether to inverse the data or not.\n   */\n  inverse: boolean;\n\n  /**\n   * When pointer entered mouse area.\n   */\n  onValueEnter: (event: TooltipAreaEvent) => void;\n\n  /**\n   * When pointer left mouse area.\n   */\n  onValueLeave: () => void;\n\n  /**\n   * Whether the layout is horizontal or not.\n   */\n  isHorizontal: boolean;\n\n  /**\n   * Start angle for the first value.\n   */\n  startAngle?: number;\n\n  /**\n   * End angle for the last value.\n   */\n  endAngle?: number;\n}\n\ninterface TooltipDataShape {\n  x?: ChartDataTypes;\n  y?: ChartDataTypes;\n  data?: ChartDataTypes | Array<ChartDataTypes | ChartInternalShallowDataShape>;\n  i?: number;\n}\n\n// eslint-disable-next-line react/display-name\nexport const TooltipArea = forwardRef<any, Partial<TooltipAreaProps>>(\n  (\n    {\n      children,\n      inverse = true,\n      tooltip = <ChartTooltip />,\n      disabled,\n      color,\n      isRadial = false,\n      isContinous = true,\n      width,\n      height,\n      xScale,\n      yScale,\n      onValueEnter = () => undefined,\n      data,\n      isHorizontal,\n      innerRadius,\n      outerRadius,\n      placement: placementProp,\n      onValueLeave = () => undefined,\n      startAngle = 0,\n      endAngle = 2 * Math.PI\n    },\n    childRef\n  ) => {\n    const [visible, setVisible] = useState<boolean>();\n    const [placement, setPlacement] = useState<Placement>();\n    const [value, setValue] = useState<any>();\n    const [offsetX, setOffsetX] = useState<any>();\n    const [offsetY, setOffsetY] = useState<any>();\n    const [prevX, setPrevX] = useState<number>();\n    const [prevY, setPrevY] = useState<number>();\n    const ref = useRef<SVGRectElement | SVGPathElement | any>();\n    const fullCircleRef = useRef<SVGRectElement | SVGPathElement | any>(null);\n    const isFullCircle = Math.abs(endAngle - startAngle) >= 2 * Math.PI;\n\n    const range = Math.abs(endAngle - startAngle);\n\n    const rotationFactor = 0.5;\n\n    /**\n     * Calculates the offset for the tooltip.\n     * If the shape is radial, it converts the X coords to a radial format.\n     * @param pointX - The X coordinate of the point.\n     * @param pointY - The Y coordinate of the point.\n     * @param rect - The bounding rectangle of the tooltip.\n     * @param marginX - The margin for the X coordinate.\n     * @param marginY - The margin for the Y coordinate.\n     * @returns The offset for the tooltip.\n     */\n    const calculateOffset = useCallback(\n      (\n        pointX: number,\n        pointY: number,\n        rect: DOMRect,\n        marginX: number,\n        marginY: number\n      ) => {\n        let nx = 0;\n        let ny = 0;\n        if (isRadial) {\n          const outer = Math.min(width, height) / 2;\n          nx = pointY * Math.cos(pointX - rotationFactor * Math.PI) + outer;\n          ny = pointY * Math.sin(pointX - rotationFactor * Math.PI) + outer;\n        } else {\n          nx = pointX;\n          ny = pointY;\n        }\n        nx += rect.left + marginX;\n        ny += rect.top + marginY;\n        return { nx, ny };\n      },\n      [isRadial, width, height, rotationFactor]\n    );\n\n    /**\n     * If the shape is radial, we need to convert the X coords to a radial format.\n     * @param x - The X coordinate of the point.\n     * @param y - The Y coordinate of the point.\n     * @returns The radial coordinate.\n     */\n    const getXCoord = useCallback(\n      (x: number, y: number) => {\n        // If the shape is radial, we need to convert the X coords to a radial format.\n        if (isRadial) {\n          const outerRadiusNew = outerRadius || Math.min(width, height) / 2;\n          let rad =\n            Math.atan2(y - outerRadiusNew, x - outerRadiusNew) +\n            rotationFactor * Math.PI;\n\n          // Align it with the expected start angle\n          rad = (rad - startAngle) % (2 * Math.PI);\n\n          // TODO: Figure out what the 'correct' way to do this is...\n          if (rad < 0) {\n            rad += Math.PI * 2;\n          }\n\n          // convert to given range\n          const scale = scaleLinear()\n            .domain([0, range])\n            .range([startAngle, endAngle]);\n          rad = scale(rad);\n\n          return rad;\n        }\n\n        return x;\n      },\n      [endAngle, height, isRadial, outerRadius, range, startAngle, width]\n    );\n\n    /**\n     * Transforms the data for the tooltip.\n     * @param series - The series of data.\n     * @returns The transformed data.\n     */\n    const transformData = useCallback(\n      (series: ChartInternalDataShape[]) => {\n        const result: TooltipDataShape[] = [];\n\n        if (inverse) {\n          const indexMap = new Map<string | number, number>();\n          for (const point of series) {\n            const seriesPoint = point as ChartInternalNestedDataShape;\n            if (Array.isArray(seriesPoint.data)) {\n              for (const nestedPoint of seriesPoint.data) {\n                const right = nestedPoint.x;\n                const key = right instanceof Date ? `d:${right.getTime()}` : right;\n                let idx = indexMap.get(key);\n\n                if (idx === undefined) {\n                  result.push({\n                    x: nestedPoint.x,\n                    data: []\n                  });\n\n                  idx = result.length - 1;\n                  indexMap.set(key, idx);\n                }\n\n                const data = result[idx].data;\n\n                if (Array.isArray(data)) {\n                  data.push(nestedPoint);\n                }\n              }\n            } else {\n              result.push(point);\n            }\n          }\n        } else {\n          for (const point of series) {\n            const nestedPoint = point as ChartInternalNestedDataShape;\n            if (Array.isArray(nestedPoint.data)) {\n              result.push({\n                ...nestedPoint,\n                x: nestedPoint.key,\n                data: nestedPoint.data.map((d) => ({\n                  ...d,\n                  key: !isHorizontal ? d.x : d.y,\n                  value: !isHorizontal ? d.y : d.x\n                }))\n              });\n            } else {\n              const shallowPoint = point as ChartInternalShallowDataShape;\n              result.push({\n                ...shallowPoint,\n                // Histograms special logic...\n                x: shallowPoint.key === undefined ? shallowPoint.x0 : point.key,\n                y:\n                  shallowPoint.value === undefined\n                    ? shallowPoint.y\n                    : shallowPoint.value\n              });\n            }\n          }\n        }\n\n        return result;\n      },\n      [inverse, isHorizontal]\n    );\n\n    const onMouseMove = useCallback(\n      (event: React.MouseEvent) => {\n        const transformed = transformData(data);\n\n        // Get our default placement\n        let newPlacement = placementProp;\n        if (!placementProp) {\n          if (isHorizontal) {\n            newPlacement = 'right';\n          } else {\n            newPlacement = 'top';\n          }\n        }\n\n        // Get the path container element\n        // Note that we are using the dummy 'full' circle for alignment\n        let target = fullCircleRef.current || ref.current;\n\n        const { y, x } = getPositionForTarget({\n          target: target,\n          // Manually pass the x/y from the event\n          clientX: event.clientX,\n          clientY: event.clientY\n        });\n\n        // Need to flip scales/coords if we are a horz layout\n        let keyScale;\n        let valueScale;\n        let coord;\n        let attr = 'x';\n        if (isHorizontal) {\n          keyScale = yScale;\n          valueScale = xScale;\n          coord = y;\n        } else {\n          coord = getXCoord(x, y);\n          keyScale = xScale;\n          valueScale = yScale;\n        }\n\n        // If an index value exists in the data, use that to grab closest point\n        if (typeof transformed[0].i === 'number') {\n          attr = 'i';\n        }\n\n        // Get the closest point to the mouse\n        // Consider invertable scales to be continous\n        // Round non-continous charts with a continous scale down\n        // Round band scales to the closest point for radial charts\n        const newValue = keyScale.invert\n          ? getClosestContinousScalePoint({\n              pos: coord,\n              scale: keyScale,\n              data: transformed,\n              attr,\n              roundDown: !isContinous\n            })\n          : getClosestBandScalePoint({\n              pos: coord,\n              scale: keyScale,\n              data: transformed,\n              roundClosest: isRadial\n            });\n\n        if (!isEqual(newValue, value) && newValue) {\n          const pointX = keyScale(newValue.x);\n          let pointY = valueScale(newValue.y);\n          let marginX = 0;\n          let marginY = 0;\n\n          if (isNaN(pointY)) {\n            pointY = height / 2;\n            marginX = 10;\n            if (!placement) {\n              newPlacement = 'right';\n            }\n          } else {\n            marginY = -10;\n          }\n\n          // If the points didn't change, don't trigger an update\n          if (pointX === prevX && pointY === prevY) {\n            return;\n          }\n\n          setPrevX(pointX);\n          setPrevY(pointY);\n\n          const target = event.target as SVGRectElement;\n          const rect = target.getBoundingClientRect();\n          const { nx, ny } = calculateOffset(\n            pointX,\n            pointY,\n            rect,\n            marginX,\n            marginY\n          );\n\n          setPlacement(newPlacement);\n          setVisible(true);\n          setValue(newValue);\n          setOffsetX(nx);\n          setOffsetY(ny);\n\n          onValueEnter({\n            visible: true,\n            value: newValue,\n            pointY,\n            pointX,\n            offsetX: nx,\n            offsetY: ny,\n            nativeEvent: event\n          });\n        }\n      },\n      [\n        data,\n        getXCoord,\n        height,\n        isContinous,\n        isHorizontal,\n        isRadial,\n        calculateOffset,\n        onValueEnter,\n        placement,\n        placementProp,\n        prevX,\n        prevY,\n        transformData,\n        value,\n        xScale,\n        yScale\n      ]\n    );\n\n    const onMouseLeave = useCallback(() => {\n      setPrevX(undefined);\n      setPrevY(undefined);\n\n      setValue(undefined);\n      setVisible(false);\n\n      onValueLeave();\n    }, [onValueLeave]);\n\n    /**\n     * This is used to update the tooltip offsets when the window is scrolled or resized to maintain the correct position.\n     * @returns void\n     */\n    const recomputeOffsets = useCallback(() => {\n      if (!visible) {\n        return;\n      }\n      const container = (fullCircleRef.current ||\n        ref.current) as SVGElement | null;\n      if (!container) {\n        return;\n      }\n      const rect = container.getBoundingClientRect();\n      let marginX = 0;\n      let marginY = 0;\n      let px = prevX as number;\n      let py: number;\n      if (prevY === undefined || isNaN(prevY)) {\n        py = height / 2;\n        marginX = 10;\n      } else {\n        py = prevY as number;\n        marginY = -10;\n      }\n      const { nx, ny } = calculateOffset(px, py, rect, marginX, marginY);\n      setOffsetX(nx);\n      setOffsetY(ny);\n    }, [fullCircleRef, ref, visible, prevX, prevY, height, calculateOffset]);\n\n    // Update the offsets when the window is scrolled or resized\n    useEffect(() => {\n      if (!visible) {\n        return;\n      }\n      const handler = () => recomputeOffsets();\n      window.addEventListener('scroll', handler, true);\n      window.addEventListener('resize', handler);\n\n      return () => {\n        window.removeEventListener('scroll', handler, true);\n        window.removeEventListener('resize', handler);\n      };\n    }, [visible, recomputeOffsets]);\n\n    useImperativeHandle(childRef, () => ({\n      triggerMouseMove(e: React.MouseEvent) {\n        onMouseMove(e);\n      }\n    }));\n\n    const tooltipReference = useMemo(\n      () => ({\n        width: 4,\n        height: 4,\n        top: offsetY,\n        left: offsetX\n      }),\n      [offsetX, offsetY]\n    );\n\n    const renderRadial = useCallback(() => {\n      const innerRadiusNew = innerRadius || 0;\n      const outerRadiusNew = outerRadius || Math.min(width, height) / 2;\n\n      const d = arc()({\n        innerRadius: innerRadiusNew,\n        outerRadius: outerRadiusNew,\n        startAngle: isFullCircle ? 0 : startAngle,\n        endAngle: isFullCircle ? 2 * Math.PI : endAngle\n      });\n\n      // This is a dummuy full circle in the background as we need the\n      // full circle to get the coordinates right from getBoundingClientRect().\n      // If we don't use a full circle, then the bounding rectangle could be of any dimension and\n      // the logic in getPositionForTarget() wouldn't work\n      const fullCircle = arc()({\n        innerRadius: innerRadiusNew,\n        outerRadius: outerRadiusNew,\n        startAngle: 0,\n        endAngle: 2 * Math.PI\n      });\n\n      return (\n        <>\n          <path d={fullCircle!} opacity=\"0\" cursor=\"auto\" ref={fullCircleRef} />\n          <path\n            d={d!}\n            opacity=\"0\"\n            cursor=\"auto\"\n            ref={ref}\n            onMouseMove={onMouseMove}\n          />\n        </>\n      );\n    }, [\n      endAngle,\n      height,\n      innerRadius,\n      isFullCircle,\n      onMouseMove,\n      outerRadius,\n      startAngle,\n      width\n    ]);\n\n    const renderLinear = useCallback(() => {\n      return (\n        <rect\n          height={height}\n          ref={ref}\n          width={width}\n          opacity={0}\n          cursor=\"auto\"\n          onMouseMove={onMouseMove}\n        />\n      );\n    }, [height, onMouseMove, width]);\n\n    return (\n      <Fragment>\n        {disabled && children}\n        {!disabled && (\n          <g id=\"tooltip-area\" onMouseLeave={onMouseLeave} ref={childRef}>\n            {isRadial && renderRadial()}\n            {!isRadial && renderLinear()}\n            <CloneElement<ChartTooltipProps>\n              element={tooltip}\n              visible={visible}\n              placement={placement}\n              modifiers={[offset({ mainAxis: 15 }), flip()]}\n              reference={tooltipReference}\n              color={color}\n              value={value}\n            />\n            {children}\n          </g>\n        )}\n      </Fragment>\n    );\n  }\n);\n","import React, {\n  PropsWithChildren,\n  FC,\n  useRef,\n  useState,\n  useEffect,\n  useCallback\n} from 'react';\nimport {\n  Pan,\n  PanMoveEvent,\n  PanStartEvent,\n  PanEndEvent,\n  PanCancelEvent\n} from '@/common/Gestures/Pan';\nimport { Zoom, ZoomEvent } from '@/common/Gestures/Zoom';\nimport {\n  identity,\n  fromObject,\n  fromDefinition,\n  transform\n} from 'transformation-matrix';\nimport isEqual from 'react-fast-compare';\n\nexport interface ZoomPanEvent {\n  scale: number;\n  x: number;\n  y: number;\n  type: 'zoom' | 'pan';\n  nativeEvent: any;\n}\n\nexport interface ZoomPanProps extends PropsWithChildren {\n  height: number;\n  width: number;\n  scale: number;\n  x: number;\n  y: number;\n  pannable: boolean;\n  zoomable: boolean;\n  disabled?: boolean;\n  maxZoom: number;\n  minZoom: number;\n  zoomStep: number;\n  constrain: boolean;\n  globalPanning: boolean;\n  disableMouseWheel?: boolean;\n  requireZoomModifier?: boolean;\n  onZoomPan: (event: ZoomPanEvent) => void;\n  onZoom: (event: ZoomEvent) => void;\n  onZoomEnd: () => void;\n  onPanStart: (event: PanStartEvent) => void;\n  onPanMove: (event: PanMoveEvent) => void;\n  onPanEnd: (event: PanEndEvent) => void;\n  onPanCancel: (event: PanCancelEvent) => void;\n}\n\nexport const ZoomPan: FC<Partial<ZoomPanProps>> = ({\n  height = 0,\n  width = 0,\n  children,\n  disabled,\n  pannable = true,\n  maxZoom = 10,\n  minZoom = 0,\n  zoomable = true,\n  scale = 1,\n  x = 0,\n  y = 0,\n  disableMouseWheel,\n  constrain = true,\n  zoomStep = 0.1,\n  onPanCancel = () => undefined,\n  requireZoomModifier,\n  globalPanning = true,\n  onPanStart = () => undefined,\n  onZoomPan = () => undefined,\n  onPanMove = () => undefined,\n  onPanEnd = () => undefined,\n  onZoom = () => undefined,\n  onZoomEnd = () => undefined\n}) => {\n  const zoomRef = useRef<Zoom>();\n  const panRef = useRef<Pan>();\n  const [isZooming, setIsZooming] = useState<boolean>();\n  const [isPanning, setIsPanning] = useState<boolean>();\n  const [matrix, setMatrix] = useState<any>(identity());\n\n  useEffect(() => {\n    const newMatrix = transform(\n      fromDefinition([\n        { type: 'translate', tx: x, ty: y },\n        { type: 'scale', sx: scale, sy: scale }\n      ])\n    );\n\n    if (!isEqual(newMatrix, matrix)) {\n      setMatrix(newMatrix);\n    }\n  }, [x, y, scale, matrix]);\n\n  const onPanStartHandler = useCallback(\n    (event: PanStartEvent) => {\n      setIsPanning(true);\n      onPanStart(event);\n    },\n    [onPanStart]\n  );\n\n  const onPanMoveHandler = useCallback(\n    (event: PanMoveEvent) => {\n      onZoomPan({\n        scale: scale,\n        x: event.x,\n        y: event.y,\n        type: 'pan',\n        nativeEvent: event.nativeEvent\n      });\n\n      onPanMove(event);\n    },\n    [onPanMove, onZoomPan, scale]\n  );\n\n  const onPanEndHandler = useCallback(\n    (event: PanEndEvent) => {\n      setIsPanning(false);\n      onPanEnd(event);\n    },\n    [onPanEnd]\n  );\n\n  const onZoomHandler = useCallback(\n    (event: ZoomEvent) => {\n      onZoomPan({\n        x: event.x,\n        y: event.y,\n        scale: event.scale,\n        nativeEvent: event.nativeEvent,\n        type: 'zoom'\n      });\n      onZoom(event);\n    },\n    [onZoom, onZoomPan]\n  );\n\n  const onZoomEndHandler = useCallback(() => {\n    setIsZooming(false);\n    onZoomEnd();\n  }, [onZoomEnd]);\n\n  const cursor = pannable ? 'move' : 'auto';\n  const selection = isZooming || isPanning ? 'none' : 'auto';\n  const matrixObj = fromObject(matrix);\n\n  return (\n    <Pan\n      x={x}\n      y={y}\n      scale={scale}\n      matrix={matrixObj}\n      constrain={constrain}\n      height={height}\n      width={width}\n      disabled={!pannable || disabled}\n      ref={panRef}\n      globalPanning={globalPanning}\n      onPanStart={onPanStartHandler}\n      onPanMove={onPanMoveHandler}\n      onPanEnd={onPanEndHandler}\n      onPanCancel={onPanCancel}\n    >\n      <Zoom\n        ref={zoomRef}\n        disabled={!zoomable || disabled}\n        scaleFactor={zoomStep}\n        disableMouseWheel={disableMouseWheel}\n        maxZoom={maxZoom}\n        minZoom={minZoom}\n        scale={scale}\n        x={x}\n        y={y}\n        style={{ cursor }}\n        requireZoomModifier={requireZoomModifier}\n        matrix={matrix}\n        onZoom={onZoomHandler}\n        onZoomEnd={onZoomEndHandler}\n      >\n        {!disabled && (\n          <rect\n            height={height}\n            width={width}\n            opacity={0}\n            className=\"pan-container\"\n          />\n        )}\n        <g\n          style={{\n            pointerEvents: selection,\n            userSelect: selection\n          }}\n        >\n          {children}\n        </g>\n      </Zoom>\n    </Pan>\n  );\n};\n","import { scaleLinear, scaleTime, scaleBand } from 'd3-scale';\nimport { getXDomain, getYDomain } from '@/common/utils/domains';\nimport {\n  ChartInternalShallowDataShape,\n  ChartInternalNestedDataShape\n} from '../data';\nimport { uniqueBy } from '@/common/utils/array';\n\ninterface ScaleConfig {\n  type: 'category' | 'value' | 'time' | 'duration';\n  roundDomains?: boolean;\n  data: any[];\n  domain?: any[];\n  padding?: number;\n  scaled?: boolean;\n  width?: number;\n  height?: number;\n  isMultiSeries?: boolean;\n  isDiverging?: boolean;\n}\n\n/**\n * Gets the X Scale function.\n */\nexport function getXScale({\n  type,\n  roundDomains,\n  data,\n  width,\n  domain,\n  padding,\n  scaled,\n  isMultiSeries = false,\n  isDiverging = false\n}: ScaleConfig) {\n  let scale;\n\n  if (type === 'time' || type === 'duration' || type === 'value') {\n    if (type === 'time') {\n      scale = scaleTime().rangeRound([0, width!]);\n    } else {\n      scale = scaleLinear().rangeRound([0, width!]);\n    }\n\n    scale = scale.domain(domain || getXDomain({ data, scaled, isDiverging }));\n  } else {\n    if (!domain) {\n      if (isMultiSeries) {\n        domain = uniqueBy<ChartInternalShallowDataShape>(data, (d) => d.key);\n      } else {\n        domain = uniqueBy<ChartInternalShallowDataShape>(data, (d) => d.x);\n      }\n    }\n\n    scale = scaleBand()\n      .rangeRound([0, width!])\n      .padding(padding || 0)\n      .domain(domain as ReadonlyArray<any>);\n  }\n\n  return roundDomains ? scale.nice() : scale;\n}\n\n/**\n * Gets the Y Scale function.\n */\nexport function getYScale({\n  type,\n  height,\n  data,\n  domain,\n  roundDomains = false,\n  scaled = false,\n  padding = 0,\n  isMultiSeries = false,\n  isDiverging = false\n}: ScaleConfig) {\n  let scale;\n\n  if (type === 'time' || type === 'value' || type === 'duration') {\n    scale = scaleLinear()\n      .range([height!, 0])\n      .domain(domain || getYDomain({ data, scaled, isDiverging }));\n  } else {\n    if (!domain) {\n      if (isMultiSeries) {\n        domain = uniqueBy<ChartInternalNestedDataShape>(\n          data as [],\n          (d) => d.key\n        );\n      } else {\n        domain = uniqueBy<ChartInternalShallowDataShape>(data, (d) => d.y);\n      }\n    }\n\n    scale = scaleBand()\n      .rangeRound([height!, 0])\n      .padding(padding)\n      .domain(domain as ReadonlyArray<any>);\n  }\n\n  return roundDomains ? scale.nice() : scale;\n}\n","import { scaleLinear } from 'd3-scale';\nimport { ChartInternalNestedDataShape } from '@/common/data';\nimport { uniqueBy } from '@/common/utils/array';\n\ninterface MariemkoScaleData {\n  data: ChartInternalNestedDataShape[];\n  width: number;\n  valueScale: any;\n  padding: number;\n}\n\n/**\n * Get a linear scale for the mariemko chart.\n */\nexport const getMarimekkoScale = (width: number, roundDomains: boolean) => {\n  const scale = scaleLinear().rangeRound([0, width]);\n  return roundDomains ? scale.nice() : scale;\n};\n\n/**\n * Builds a fake scale function to get a group scale for a marimekko value scale.\n */\nexport const getMarimekkoGroupScale = ({\n  data,\n  width,\n  valueScale,\n  padding\n}: MariemkoScaleData) => {\n  const domain = uniqueBy<ChartInternalNestedDataShape>(data, (d) => d.key);\n  const barCount = data.length;\n  const widthMinusPadding = width - padding * (barCount - 1);\n  const xMultiplier = widthMinusPadding / width;\n\n  // Given a data series, find the x0/x1 for it.\n  const getXRange = (series) => {\n    const [val] = series.data;\n    const x0 = valueScale(val.x0);\n    const x1 = valueScale(val.x1);\n    return { x0, x1 };\n  };\n\n  const scale: any = (arg) => {\n    let result = 0;\n    const index = data.findIndex((d) => d.key === arg);\n    const series = data[index];\n\n    if (series && series.data && series.data.length) {\n      const { x1, x0 } = getXRange(series);\n      result = (x1 - x0) / 2 + x0;\n\n      if (padding) {\n        result = result * xMultiplier + index * padding;\n      }\n    }\n\n    return result;\n  };\n\n  scale.range = () => [0, width];\n  scale.domain = () => domain;\n\n  // Special invert function for marimekko\n  scale.mariemkoInvert = (offset: number) => {\n    let found;\n\n    for (let i = 0; i < domain.length; i++) {\n      const attr = domain[i];\n      const series = data[i];\n      const { x1, x0 } = getXRange(series);\n\n      if (offset >= x0 - padding / 2 && offset <= x1 - padding / 2) {\n        found = attr;\n        break;\n      }\n    }\n\n    return found;\n  };\n\n  return scale;\n};\n","import { scaleBand } from 'd3-scale';\nimport { uniqueBy } from '@/common/utils/array';\n\n/**\n * Get the group scale aka x0.\n */\nexport function getGroupScale({\n  dimension,\n  padding,\n  data,\n  direction = 'vertical'\n}) {\n  const domain = uniqueBy(data, (d) => d.key);\n  const spacing = domain.length / (dimension / padding + 1);\n  const range = direction === 'vertical' ? [0, dimension] : [dimension, 0];\n\n  return scaleBand()\n    .rangeRound(range as any)\n    .paddingInner(spacing)\n    .paddingOuter(spacing / 2)\n    .domain(domain as string[]);\n}\n\n/**\n * Get the inner scale aka x1.\n */\nexport function getInnerScale({ groupScale, padding, data, prop = 'x' }) {\n  const dimension = groupScale.bandwidth();\n  const domain = uniqueBy(\n    data,\n    (d) => d.data,\n    (d) => d[prop]\n  );\n  const spacing = domain.length / (dimension / padding + 1);\n\n  return scaleBand()\n    .rangeRound([0, dimension])\n    .paddingInner(spacing)\n    .domain(domain as string[]);\n}\n","import { scaleLinear } from 'd3-scale';\n\n/**\n * Get the Y Scale for a given set of radiuses.\n * Reference: https://github.com/d3/d3-scale/issues/90\n */\nexport const getRadialYScale = (\n  innerRadius: number,\n  outerRadius: number,\n  domain: any[]\n) => {\n  if (domain[0] === 0 && domain[1] === 0) {\n    // If all values are 0, set the domain to [0, 1], so the zero values are\n    // all at the bottom of the chart, not the middle.\n    domain = [0, 1];\n  }\n  const y = scaleLinear()\n    .range([innerRadius * innerRadius, outerRadius * outerRadius])\n    .domain(domain);\n\n  const yScale = Object.assign((d) => Math.sqrt(y(d)), y);\n\n  return yScale;\n};\n","import React, { FC, PropsWithChildren, useCallback, useMemo } from 'react';\nimport { ZoomPan, ZoomPanEvent } from './ZoomPan';\nimport { ChartInternalDataShape, ChartDataTypes } from '@/common/data';\nimport { getXScale } from '../scales';\n\nexport interface ZoomPanChangeEvent {\n  domain: [ChartDataTypes, ChartDataTypes];\n  isZoomed: boolean;\n}\n\nexport interface ChartZoomPanProps extends PropsWithChildren {\n  data: ChartInternalDataShape[];\n  domain?: [ChartDataTypes, ChartDataTypes];\n  axisType: 'value' | 'time' | 'category' | 'duration';\n  roundDomains: boolean;\n  height: number;\n  width: number;\n  scale: number;\n  offset: number;\n  pannable: boolean;\n  zoomable: boolean;\n  disabled?: boolean;\n  maxZoom: number;\n  zoomStep: number;\n  disableMouseWheel?: boolean;\n  requireZoomModifier?: boolean;\n  onZoomPan?: (event: ZoomPanChangeEvent) => void;\n}\n\nexport const ChartZoomPan: FC<Partial<ChartZoomPanProps>> = ({\n  data,\n  height,\n  children,\n  disabled,\n  domain,\n  width,\n  axisType,\n  roundDomains,\n  onZoomPan = () => undefined,\n  ...rest\n}) => {\n  const onZoomPanHandler = useCallback(\n    (event: ZoomPanEvent) => {\n      const can =\n        event.type === 'zoom' || (event.type === 'pan' && event.scale > 1);\n\n      if (can) {\n        const scale: any = getXScale({\n          width: width,\n          type: axisType,\n          roundDomains,\n          data\n        });\n\n        const newScale = scale.copy().domain(\n          scale\n            .range()\n            .map((x) => (x - event.x) / event.scale)\n            .map(scale.clamp(true).invert, event.x)\n        );\n\n        onZoomPan!({\n          domain: newScale.domain(),\n          isZoomed: event.scale !== 1\n        });\n      }\n    },\n    [axisType, data, onZoomPan, roundDomains, width]\n  );\n\n  const zoomOffset = useMemo(() => {\n    let zoomOffset = {\n      scale: undefined,\n      x: undefined\n    } as any;\n\n    if (!disabled && domain) {\n      const xScale: any = getXScale({\n        width,\n        type: axisType,\n        roundDomains,\n        data\n      });\n\n      let offset = xScale(domain[0]);\n      const endOffset = xScale(domain[1]);\n      const scale = width / (endOffset - offset);\n\n      // Apply the new scale to the offset so its scaled correctly\n      offset = offset * scale;\n\n      zoomOffset = {\n        scale: scale,\n        x: -offset\n      };\n    }\n\n    return zoomOffset;\n  }, [axisType, data, disabled, domain, roundDomains, width]);\n\n  return (\n    <ZoomPan\n      {...rest}\n      scale={zoomOffset.scale}\n      x={zoomOffset.x}\n      height={height}\n      width={width}\n      pannable={zoomOffset.scale > 1}\n      onZoomPan={onZoomPanHandler}\n    >\n      {children}\n    </ZoomPan>\n  );\n};\n","export const DEFAULT_TRANSITION = {\n  type: 'spring' as const,\n  velocity: 5,\n  damping: 20,\n  // https://github.com/framer/motion/issues/1513#issuecomment-1121133717\n  restDelta: 0.01,\n  restSpeed: 0.01\n};\n","import React, { useEffect } from 'react';\nimport { motion, useSpring, useMotionValue } from 'motion/react';\nimport { interpolate } from 'd3-interpolate';\nimport { DEFAULT_TRANSITION } from './config';\n\nexport const MotionPath = ({ custom, transition, ...rest }) => {\n  const d = useMotionValue(custom.exit.d);\n  const spring = useSpring(0, DEFAULT_TRANSITION);\n\n  useEffect(() => {\n    const interpolator = interpolate(d.get(), custom.enter.d);\n    const prevSpring = spring.get();\n    spring.set(prevSpring + 1);\n\n    return spring.on('change', (v) => d.set(interpolator(v - prevSpring)));\n  }, [custom.enter.d, custom.exit.d, d, spring]);\n\n  const { d: enterD, ...enterRest } = custom.enter;\n  const { d: exitD, ...exitRest } = custom.exit;\n\n  return (\n    <motion.path\n      {...rest}\n      initial={{ opacity: 0, ...exitRest }}\n      exit={{ opacity: 0, ...exitRest }}\n      animate={{ opacity: 1, ...enterRest }}\n      transition={transition}\n      d={transition.type !== false ? d : enterD}\n    />\n  );\n};\n","import chroma from 'chroma-js';\n\n/**\n * Color Schemes\n * Credits: https://gka.github.io/chroma.js/#chroma-brewer\n */\nexport const schemes = {\n  unifyviz: [\n    '#4C86FF',\n    '#40D3F4',\n    '#40E5D1',\n    '#9152EE',\n    '#A840E8',\n    '#80CE5B',\n    '#AADC40',\n    '#D740BE',\n    '#EE4094',\n    '#E84045',\n    '#F8A340',\n    '#FFD440'\n  ],\n  unifyvizwarm: ['#FFD440', '#F8A340', '#E84045'],\n  unify8Colors: chroma\n    .scale(['#4C86FF', '#26efb5'])\n    .correctLightness()\n    .colors(8),\n  cybertron: chroma.scale(['#2d60e8', '#26efb5']).correctLightness().colors(8),\n  ...chroma.brewer\n};\n","import { scaleOrdinal, scaleQuantile } from 'd3-scale';\nimport { maxIndex, extent } from 'd3-array';\nimport { schemes } from './schemes';\nimport { uniqueBy } from '../utils';\n\nexport type ColorSchemeType =\n  | ((data, index: number, active?: any[]) => string)\n  | string[]\n  | string;\n\nexport type ColorSchemeStyleArray = Partial<CSSStyleDeclaration>[];\n\ntype ColorHelperProps = {\n  colorScheme: ColorSchemeType;\n  point: any;\n  data: any[];\n  index: number;\n  active: any[];\n  scale?: any;\n  domain?: any[];\n  key?: any;\n  attribute?: string;\n  isMultiSeries?: boolean;\n};\n\ntype ColorSchemeValueScale = (point: any) => string;\n\nfunction isColorSchemeStyleArray(\n  colorScheme: any\n): colorScheme is ColorSchemeStyleArray {\n  return Array.isArray(colorScheme) && typeof colorScheme[0] === 'object';\n}\n\n/**\n * Given a point, get the key attributes for it.\n */\nconst rangeHelper = (point: any, attribute: string) =>\n  point.map((r, i) => {\n    if (r) {\n      if (r[attribute] !== undefined) {\n        return r[attribute];\n      } else if (r.data && r.data[attribute] !== undefined) {\n        return r.data[attribute];\n      }\n    }\n\n    return i;\n  });\n\n/**\n * Get a color given a range.\n */\nexport const getColor = (props: Partial<ColorHelperProps>) => {\n  let {\n    point,\n    colorScheme,\n    attribute,\n    index,\n    data,\n    active,\n    isMultiSeries,\n    domain,\n    key,\n    scale\n  } = {\n    attribute: 'key',\n    isMultiSeries: false,\n    scale: scaleOrdinal,\n    ...props\n  };\n\n  if (typeof colorScheme === 'string' && schemes[colorScheme]) {\n    colorScheme = schemes[colorScheme];\n  }\n\n  if (Array.isArray(colorScheme)) {\n    if (!domain) {\n      if (isMultiSeries && Array.isArray(data)) {\n        const maxIdx = maxIndex(data, (d) => d.data.length);\n        const maxVal = data[maxIdx];\n        data = maxVal.data;\n      }\n\n      domain = rangeHelper(data, attribute);\n    }\n\n    key = key !== undefined ? key : point[attribute];\n\n    return scale(colorScheme).domain(domain)(key);\n  } else if (typeof colorScheme === 'function') {\n    return colorScheme(point, index!, active);\n  } else {\n    return colorScheme;\n  }\n};\n\n/**\n * This function creates a value scale that maps data points to colors or CSS styles.\n *\n * @param {Array} data - The data used to create the scale.\n * @param {ColorSchemeType} colorScheme - The color scheme used to generate the scale.\n * @param {string} emptyColor - The color used for data points with no value.\n * @param {any} selections - Selected values in active state\n *\n * @returns {ColorSchemeValueScale} A function that takes a data point and returns a color or CSS style based on the data point's value.\n */\nconst getValueScale = (\n  data,\n  colorScheme: ColorSchemeType,\n  emptyColor: string,\n  selections: any\n): ColorSchemeValueScale => {\n  const valueDomain = extent(\n    uniqueBy(\n      data,\n      (d) => d.data,\n      (d) => d.value\n    )\n  );\n\n  return (point) => {\n    // For 0 values, lets show a placeholder fill\n    if (point?.value === undefined || point?.value === null) {\n      return emptyColor;\n    }\n\n    // Note: this can return css style values, not just colors\n    return getColor({\n      scale: scaleQuantile,\n      domain: valueDomain,\n      key: point.value,\n      colorScheme,\n      point,\n      active: selections\n    });\n  };\n};\n\n/**\n * This function generates a style object for a given data point based on a map of value scales.\n *\n * @param {any} point - The data point for which to generate the style object.\n * @param {Map<string, ColorSchemeValueScale>} valueScales - A map where each key is a property name and each value is a function that takes a data point and returns a CSS style.\n *\n * @returns {Partial<CSSStyleDeclaration>} A style object where each key is a property name and each value is a color or CSS style based on the value of the data point for that property.\n */\nexport const getColorSchemeStyles = (\n  point,\n  valueScales: Map<string, ColorSchemeValueScale>\n): Partial<CSSStyleDeclaration> =>\n  Array.from(valueScales).reduce((acc, [key, valueScale]) => {\n    return { ...acc, [key]: valueScale(point) };\n  }, {});\n\n/**\n * This function retrieves a color scheme for a specific property from a given color scheme.\n *\n * @param {ColorSchemeStyleArray} colorScheme - The color scheme used to generate the scale.\n * @param {string} colorSchemeProperty - The property for which to retrieve the new color scheme.\n *\n * @returns {ColorSchemeType} A color scheme for the specified property.\n */\nconst getColorSchemeForProperty = (\n  colorScheme: ColorSchemeStyleArray,\n  colorSchemeProperty: string\n): ColorSchemeType =>\n  colorScheme.map(\n    (schemeItem: Partial<CSSStyleDeclaration>) =>\n      schemeItem?.[colorSchemeProperty]\n  );\n\n/**\n * This function creates a map of value scales for different properties based on a provided color scheme.\n * Each value scale is a function that takes a data point and returns a css style value based on that point.\n *\n * @param {Array} data - The data used to create the scales.\n * @param {ColorSchemeType | ColorSchemeStyleArray} colorScheme - The color scheme used to generate the scales. This can be an array of colors or an array of objects where each object contains a set of css styles.\n * @param {string} emptyColor - The color used for data points with no value.\n * @param {any} selections - Selected values in active state\n *\n * @returns {Map<string, ColorSchemeValueScale>} A map where each key is a property name and each value is a function that takes a data point and returns a value for the property.\n *\n * If the color scheme is an array of strings, they will be treated as fill values.\n */\nexport const createColorSchemeValueScales = (\n  data,\n  colorScheme: ColorSchemeType | ColorSchemeStyleArray,\n  emptyColor: string,\n  selections: any\n): Map<string, ColorSchemeValueScale> => {\n  const valueScales = new Map<string, ColorSchemeValueScale>();\n\n  if (isColorSchemeStyleArray(colorScheme)) {\n    const colorSchemeProperties = [\n      ...new Set(colorScheme.flatMap(Object.keys))\n    ];\n\n    colorSchemeProperties.forEach((key) => {\n      const valueScale = getValueScale(\n        data,\n        getColorSchemeForProperty(colorScheme, key),\n        emptyColor,\n        selections\n      );\n      valueScales.set(key, valueScale);\n    });\n  } else {\n    valueScales.set('fill', getValueScale(data, colorScheme, emptyColor, selections));\n  }\n\n  return valueScales;\n};\n","import { animate } from 'motion/react';\nimport { useEffect, useRef } from 'react';\n\nexport interface CountInputs {\n  /**\n   * Number to animate to\n   */\n  to: number;\n\n  /**\n   * Number to animate from. Defaults 0.\n   */\n  from?: number;\n\n  /**\n   * Duration of the animation in seconds. Defaults 1.\n   */\n  duration?: number;\n\n  /**\n   * Delay of the animation. Defaults 0.\n   */\n  delay?: number;\n\n  /**\n   * Localize the number. Defaults true.\n   */\n  format?: boolean;\n\n  /**\n   * Number of decimal places. Defaults 0.\n   */\n  decimalPlaces?: number;\n\n  /**\n   * Prefix the number with a string or number.\n   */\n  prefix?: string | number;\n\n  /**\n   * Suffix the number with a string or number.\n   */\n  suffix?: string | number;\n}\n\nexport const COUNT_DEFAULTS = {\n  from: 0,\n  duration: 1,\n  delay: 0,\n  format: true,\n  decimalPlaces: 0\n};\n\nexport const useCount = ({\n  from,\n  to,\n  duration,\n  delay,\n  prefix,\n  suffix,\n  decimalPlaces,\n  format\n}: CountInputs) => {\n  const nodeRef = useRef<any | null>(null);\n\n  from = from || COUNT_DEFAULTS.from;\n  duration = duration || COUNT_DEFAULTS.duration;\n  delay = delay || COUNT_DEFAULTS.delay;\n  format = format || COUNT_DEFAULTS.format;\n  decimalPlaces = decimalPlaces || COUNT_DEFAULTS.decimalPlaces;\n\n  useEffect(() => {\n    const node = nodeRef.current;\n\n    const controls = animate(from, to, {\n      duration,\n      delay,\n      onUpdate(value) {\n        let formatted: number | string = value;\n        if (decimalPlaces) {\n          formatted = Number(value.toFixed(decimalPlaces));\n        } else {\n          formatted = Number(value.toFixed(0));\n        }\n\n        if (format) {\n          formatted = formatted.toLocaleString();\n        }\n\n        if (node) {\n          if (prefix) {\n            formatted = `${prefix}${formatted}`;\n          }\n          if (suffix) {\n            formatted = `${formatted}${suffix}`;\n          }\n\n          node.textContent = formatted as string;\n        }\n      }\n    });\n\n    return () => controls.stop();\n  }, [from, to, duration, delay, decimalPlaces, format, prefix, suffix]);\n\n  return nodeRef;\n};\n","import React, { FC } from 'react';\nimport { CountInputs, useCount } from './useCount';\n\nexport interface CountProps extends CountInputs {\n  className?: string;\n}\n\nexport const Count: FC<CountProps> = ({ className, ...rest }) => {\n  const ref = useCount(rest);\n  return <span ref={ref} className={className} />;\n};\n","import React, { FC } from 'react';\n\nexport interface LinearValueMarkerProps {\n  color: string;\n  value: any;\n  className?: string;\n  thickness?: number;\n  size?: number;\n  direction?: 'horizontal' | 'vertical';\n}\nexport const LinearValueMarker: FC<LinearValueMarkerProps> = ({\n  color,\n  value,\n  className,\n  thickness = 1,\n  size,\n  direction = 'horizontal'\n}) => {\n  const coordinates =\n    direction === 'horizontal'\n      ? { x1: 0, y1: value, x2: size, y2: value }\n      : { x1: value, y1: 0, x2: value, y2: size };\n\n  return (\n    <line\n      className={className}\n      stroke={color}\n      strokeWidth={thickness}\n      {...coordinates}\n    />\n  );\n};\n","import React, { FC } from 'react';\n\nexport interface RadialValueMarkerProps {\n  color: string;\n  value: number;\n  className?: string;\n  thickness?: number;\n}\nexport const RadialValueMarker: FC<RadialValueMarkerProps> = ({\n  color,\n  value,\n  className,\n  thickness = 1\n}) => (\n  <circle\n    className={className}\n    cx={0}\n    cy={0}\n    r={value}\n    fill=\"none\"\n    stroke={color}\n    strokeWidth={thickness}\n  />\n);\n","import { Glow } from './Glow';\nimport chroma from 'chroma-js';\n\nexport interface generateGlowStylesInput {\n  glow?: Glow;\n  colorSchemeColor?: string;\n}\n\nexport const generateGlowStyles = ({\n  glow,\n  colorSchemeColor\n}: generateGlowStylesInput) => {\n  if (!glow) return {};\n\n  let {\n    x = 0,\n    y = 0,\n    blur = 5,\n    color = colorSchemeColor || 'rgb(255, 255, 255, 0.25)',\n    opacity = 1\n  } = glow;\n\n  color = chroma(color).alpha(opacity).css();\n\n  return blur\n    ? { filter: `drop-shadow(${x}px ${y}px ${blur}px ${color})` }\n    : {};\n};\n","import React, {\n  Fragment,\n  ReactNode,\n  ReactElement,\n  useState,\n  FC,\n  useRef,\n  useMemo\n} from 'react';\nimport { ChartInternalShallowDataShape } from '@/common/data';\nimport { ChartTooltip, ChartTooltipProps } from '@/common/Tooltip';\nimport classNames from 'classnames';\nimport { CloneElement } from 'reablocks';\nimport {\n  constructFunctionProps,\n  PropFunctionTypes\n} from '@/common/utils/functions';\nimport { motion, Transition } from 'motion/react';\nimport { DEFAULT_TRANSITION } from '@/common/Motion';\nimport { schemes, getColor, ColorSchemeType } from '@/common/color';\nimport { identifier } from 'safe-identifier';\nimport css from './ScatterPoint.module.css';\nimport { Glow } from '@/common/Glow';\nimport { generateGlowStyles } from '@/common/Glow/utils';\nimport { getAriaLabel, mergeDefaultProps } from '@/common';\n\nexport type ScatterPointProps = {\n  /**\n   * Whether the element is active or not. Set internally by `ScatterSeries`.\n   */\n  active?: boolean;\n\n  /**\n   * Size of the circle element.\n   */\n  size?: ((data: ChartInternalShallowDataShape) => number) | number;\n\n  /**\n   * Color of the circle.\n   */\n  color?: ColorSchemeType;\n\n  /**\n   * Cursor for the element.\n   */\n  cursor?: string;\n\n  /**\n   * D3 scale for X Axis. Set internally by `ScatterPlot`.\n   */\n  xScale: any;\n\n  /**\n   * D3 scale for Y Axis. Set internally by `ScatterPlot`.\n   */\n  yScale: any;\n\n  /**\n   * Height of the chart. Set internally by `ScatterPlot`.\n   */\n  height: number;\n\n  /**\n   * Whether to animate the enter/update/exit. Set internally by `ScatterSeries`.\n   */\n  animated?: boolean;\n\n  /**\n   * Index of the element in the series. Set internally by `ScatterSeries`.\n   */\n  index: number;\n\n  /**\n   * Tooltip element.\n   */\n  tooltip: ReactElement<ChartTooltipProps, typeof ChartTooltip> | null;\n\n  /**\n   * Parsed data shape. Set internally by `ScatterPlot`.\n   */\n  data: ChartInternalShallowDataShape;\n\n  /**\n   * Id set internally by `ScatterPlot`.\n   */\n  id: string;\n\n  /**\n   * Glow styling for the point.\n   */\n  glow?: Glow;\n\n  /**\n   * Symbol element to render.\n   */\n  symbol?: (data: ChartInternalShallowDataShape) => ReactNode;\n\n  /**\n   * Whether the elment is visiblbe or not.\n   */\n  visible?: (data: ChartInternalShallowDataShape, index: number) => boolean;\n\n  /**\n   * Event for when a symbol is clicked.\n   */\n  onClick?: (data: ChartInternalShallowDataShape) => void;\n\n  /**\n   * Event for when the symbol has mouse enter.\n   */\n  onMouseEnter?: (data: ChartInternalShallowDataShape) => void;\n\n  /**\n   * Event for when the symbol has mouse leave.\n   */\n  onMouseLeave?: (data: ChartInternalShallowDataShape) => void;\n} & PropFunctionTypes;\n\nexport const ScatterPoint: FC<Partial<ScatterPointProps>> = (props) => {\n  const {\n    symbol,\n    index,\n    id,\n    data,\n    xScale,\n    yScale,\n    active,\n    tooltip,\n    cursor,\n    size,\n    glow,\n    color,\n    animated,\n    onClick,\n    onMouseEnter,\n    onMouseLeave,\n    visible,\n    ...rest\n  } = mergeDefaultProps(SCATTER_POINT_DEFAULT_PROPS, props);\n\n  const rectRef = useRef<any | null>(null);\n  const [tooltipVisible, setTooltipVisible] = useState<boolean>(false);\n  const extras = useMemo(\n    () => constructFunctionProps(rest, data),\n    [rest, data]\n  );\n  const r = useMemo(\n    () => (typeof size === 'function' ? size(data!) : size),\n    [size, data]\n  );\n  const renderedSymbol = useMemo(\n    () => (symbol ? symbol(data!) : null),\n    [data, symbol]\n  );\n\n  const transitionProps = useMemo(\n    () =>\n      animated\n        ? {\n            ...DEFAULT_TRANSITION,\n            delay: index! * 0.005\n          }\n        : {\n            type: false as const,\n            delay: 0\n          },\n    [index, animated]\n  );\n\n  const enterProps = useMemo(() => {\n    let cy = yScale(data!.y1);\n    if (yScale.bandwidth) {\n      const width = yScale.bandwidth();\n      cy = cy + width / 2;\n    }\n\n    return {\n      x: xScale(data!.x),\n      y: cy\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [data, yScale]);\n\n  const exitProps = useMemo(() => {\n    const [yStartDomain] = yScale.domain();\n    return {\n      y: yScale(yStartDomain),\n      x: xScale(data!.x)\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [data, yScale]);\n\n  const fill = useMemo(\n    () =>\n      getColor({\n        colorScheme: color,\n        index,\n        point: data\n      }),\n    [data, color, index]\n  );\n\n  const key = `symbol-${id}-${identifier(`${data!.id}`)}`;\n  const ariaLabelData = useMemo(() => getAriaLabel(data), [data]);\n\n  const isVisible = visible ? visible?.(data, index) : active;\n\n  return (\n    <Fragment>\n      <g\n        ref={rectRef}\n        className={classNames({\n          [css.inactive]: !active,\n          [css.hidden]: !isVisible\n        })}\n        onMouseEnter={() => {\n          setTooltipVisible(true);\n          onMouseEnter(data!);\n        }}\n        onMouseLeave={() => {\n          setTooltipVisible(false);\n          onMouseLeave(data!);\n        }}\n        onClick={() => onClick(data!)}\n        tabIndex={0}\n        aria-label={ariaLabelData}\n        role=\"graphics-document\"\n      >\n        {symbol ? (\n          <motion.g\n            key={key}\n            {...extras}\n            initial={{\n              translateX: exitProps.x,\n              translateY: exitProps.y,\n              opacity: 0\n            }}\n            animate={{\n              translateX: enterProps.x,\n              translateY: enterProps.y,\n              opacity: 1\n            }}\n            exit={{\n              translateX: exitProps.x,\n              translateY: exitProps.y,\n              opacity: 0\n            }}\n            transition={transitionProps as Transition}\n          >\n            {renderedSymbol}\n          </motion.g>\n        ) : (\n          <motion.circle\n            key={key}\n            className={extras.className}\n            style={{\n              ...extras.style,\n              ...generateGlowStyles({ glow }),\n              cursor\n            }}\n            fill={fill}\n            initial={{\n              cx: exitProps.x,\n              cy: exitProps.y,\n              r,\n              opacity: 0\n            }}\n            animate={{\n              cx: enterProps.x,\n              cy: enterProps.y,\n              opacity: 1,\n              r\n            }}\n            exit={{\n              cx: exitProps.x,\n              cy: exitProps.y,\n              r,\n              opacity: 0\n            }}\n            transition={transitionProps as Transition}\n          />\n        )}\n      </g>\n      {tooltip && !tooltip.props.disabled && (\n        <CloneElement<ChartTooltipProps>\n          element={tooltip}\n          visible={tooltipVisible}\n          reference={rectRef}\n          value={data}\n        />\n      )}\n    </Fragment>\n  );\n};\n\nexport const SCATTER_POINT_DEFAULT_PROPS = {\n  active: true,\n  tooltip: <ChartTooltip />,\n  cursor: 'pointer',\n  size: 4,\n  color: schemes.cybertron[0],\n  animated: true,\n  onClick: () => undefined,\n  onMouseEnter: () => undefined,\n  onMouseLeave: () => undefined\n};\n","import React, { useCallback, Fragment, ReactElement, FC } from 'react';\nimport { ChartInternalShallowDataShape } from '@/common/data';\nimport { CloneElement } from 'reablocks';\nimport { ScatterPoint, ScatterPointProps } from './ScatterPoint';\nimport { identifier } from 'safe-identifier';\nimport { LinearValueMarker, LinearValueMarkerProps } from '@/common';\n\nexport interface ScatterSeriesProps {\n  /**\n   * Point that is rendered.\n   */\n  point: ReactElement<ScatterPointProps, typeof ScatterPoint>;\n\n  /**\n   * D3 scale for X Axis. Set internally by `ScatterPlot`.\n   */\n  xScale: any;\n\n  /**\n   * D3 scale for Y Axis. Set internally by `ScatterPlot`.\n   */\n  yScale: any;\n\n  /**\n   * Parsed data shape. Set internally by `ScatterPlot`.\n   */\n  data: ChartInternalShallowDataShape[];\n\n  /**\n   * Id set internally by `ScatterPlot`.\n   */\n  id: string;\n\n  /**\n   * Height of the chart. Set internally by `ScatterPlot`.\n   */\n  height: number;\n\n  /**\n   * Width of the chart. Set internally by `ScatterPlot`.\n   */\n  width: number;\n\n  /**\n   * Whether the chart has been zoomed or not. Set internally by `ScatterPlot`.\n   */\n  isZoomed: boolean;\n\n  /**\n   * Whether to animate the enter/update/exit.\n   */\n  animated: boolean;\n\n  /**\n   * Active element ids to highlight.\n   */\n  activeIds?: string[];\n\n  /**\n   * Value markers line for the chart.\n   */\n  valueMarkers:\n    | ReactElement<LinearValueMarkerProps, typeof LinearValueMarker>[]\n    | null;\n}\n\n// For bubble charts, often symbols exceed the area\n// and we want to add a little bit of padding to prevent clipping\nconst PADDING = 25;\nconst HALF_PADDING = PADDING / 2;\n\nexport const ScatterSeries: FC<Partial<ScatterSeriesProps>> = ({\n  data,\n  height,\n  width,\n  id,\n  isZoomed,\n  activeIds,\n  point = <ScatterPoint />,\n  valueMarkers,\n  xScale,\n  yScale,\n  ...rest\n}) => {\n  const renderPoint = useCallback(\n    (pointData: ChartInternalShallowDataShape, index: number) => {\n      let pointId;\n      if (pointData.id) {\n        pointId = pointData.id;\n      }\n\n      const key = identifier(`${pointId + index || index}`);\n      const active =\n        !(activeIds && activeIds.length) || activeIds.includes(pointId);\n\n      return (\n        <CloneElement<ScatterPointProps>\n          element={point}\n          key={key}\n          xScale={xScale}\n          yScale={yScale}\n          {...rest}\n          id={id}\n          data={pointData}\n          index={index}\n          active={active}\n        />\n      );\n    },\n    [activeIds, point, xScale, yScale, rest, id]\n  );\n\n  const renderValueMarkers = useCallback(\n    () => (\n      <>\n        {valueMarkers?.length &&\n          valueMarkers.map((marker) => {\n            const isVertical = marker?.props?.direction === 'vertical';\n            const size = isVertical ? height : width;\n            const value = isVertical\n              ? xScale(marker.props.value)\n              : yScale(marker.props.value);\n            return (\n              <CloneElement<LinearValueMarkerProps>\n                key={marker.key}\n                element={marker}\n                size={size}\n                value={value}\n              />\n            );\n          })}\n      </>\n    ),\n    [height, valueMarkers, width, xScale, yScale]\n  );\n\n  return (\n    <Fragment>\n      <defs>\n        <clipPath id={`${id}-path`}>\n          <rect\n            width={isZoomed ? width : width! + PADDING}\n            height={height! + PADDING}\n            x={isZoomed ? 0 : -HALF_PADDING}\n            y={-HALF_PADDING}\n          />\n        </clipPath>\n      </defs>\n      {renderValueMarkers()}\n      <g clipPath={`url(#${id}-path)`}>{data!.map(renderPoint)}</g>\n    </Fragment>\n  );\n};\n","import React, {\n  FC,\n  Fragment,\n  ReactElement,\n  useState,\n  useRef,\n  useCallback,\n  useMemo\n} from 'react';\nimport classNames from 'classnames';\nimport {\n  ChartShallowDataShape,\n  buildShallowChartData,\n  ChartDataTypes\n} from '@/common/data';\nimport {\n  isAxisVisible,\n  LinearAxisProps,\n  LinearXAxis,\n  LinearYAxis,\n  LinearAxis,\n  LINEAR_X_AXIS_DEFAULT_PROPS,\n  LINEAR_Y_AXIS_DEFAULT_PROPS\n} from '@/common/Axis';\nimport { getYScale, getXScale } from '@/common/scales';\nimport { ScatterSeries, ScatterSeriesProps } from './ScatterSeries';\nimport { GridlineSeries, GridlineSeriesProps } from '@/common/Gridline';\nimport {\n  ZoomPanChangeEvent,\n  ChartZoomPanProps,\n  ChartZoomPan\n} from '@/common/ZoomPan';\nimport { ChartBrushProps, ChartBrush } from '@/common/Brush';\nimport {\n  ChartProps,\n  ChartContainer,\n  ChartContainerChildProps\n} from '@/common/containers/ChartContainer';\nimport { CloneElement } from 'reablocks';\nimport css from './ScatterPlot.module.css';\n\nexport interface ScatterPlotProps extends ChartProps {\n  /**\n   * Data the chart will receive to render.\n   */\n  data: ChartShallowDataShape[];\n\n  /**\n   * The series component that renders the scatter components.\n   */\n  series: ReactElement<ScatterSeriesProps, typeof ScatterSeries>;\n\n  /**\n   * The linear axis component for the Y Axis of the chart.\n   */\n  yAxis: ReactElement<LinearAxisProps, typeof LinearAxis>;\n\n  /**\n   * The linear axis component for the X Axis of the chart.\n   */\n  xAxis: ReactElement<LinearAxisProps, typeof LinearAxis>;\n\n  /**\n   * The chart's background gridlines component.\n   */\n  gridlines: ReactElement<GridlineSeriesProps, typeof GridlineSeries> | null;\n\n  /**\n   * The chart's brush component.\n   */\n  brush: ReactElement<ChartBrushProps, typeof ChartBrush> | null;\n\n  /**\n   * The chart's zoom pan component.\n   */\n  zoomPan: ReactElement<ChartZoomPanProps, typeof ChartZoomPan> | null;\n\n  /**\n   * Any secondary axis components. Useful for multi-axis charts.\n   */\n  secondaryAxis?: ReactElement<LinearAxisProps, typeof LinearAxis>[];\n}\n\nexport const ScatterPlot: FC<Partial<ScatterPlotProps>> = ({\n  id,\n  width,\n  height,\n  margins,\n  className,\n  series = <ScatterSeries />,\n  xAxis = <LinearXAxis type=\"time\" />,\n  yAxis = <LinearYAxis type=\"value\" />,\n  data = [],\n  gridlines = <GridlineSeries />,\n  containerClassName,\n  brush = null,\n  zoomPan = null,\n  secondaryAxis\n}) => {\n  const xAxisProps = useMemo(\n    () => ({ ...LINEAR_X_AXIS_DEFAULT_PROPS, ...xAxis.props }),\n    [xAxis.props]\n  );\n  const yAxisProps = useMemo(\n    () => ({ ...LINEAR_Y_AXIS_DEFAULT_PROPS, ...yAxis.props }),\n    [yAxis.props]\n  );\n  const zoomControlled = useMemo(\n    () =>\n      // eslint-disable-next-line\n      !zoomPan?.props?.domain?.hasOwnProperty('domain'),\n    [zoomPan]\n  );\n\n  const timeout = useRef<any | null>(null);\n  const [preventAnimation, setPreventAnimation] = useState<boolean>(false);\n  const [zoomDomain, setZoomDomain] = useState<\n    [ChartDataTypes, ChartDataTypes] | null\n  >(null);\n  const [isZoomed, setIsZoomed] = useState<boolean>(false);\n  const aggregatedData = useMemo(() => buildShallowChartData(data), [data]);\n\n  const getScales = useCallback(\n    (chartHeight: number, chartWidth: number) => {\n      const yScale = getYScale({\n        roundDomains: yAxisProps.roundDomains,\n        type: yAxisProps.type,\n        height: chartHeight,\n        data: aggregatedData,\n        domain: yAxisProps.domain\n      });\n\n      const xScale = getXScale({\n        width: chartWidth,\n        type: xAxisProps.type,\n        roundDomains: xAxisProps.roundDomains,\n        data: aggregatedData,\n        domain: zoomDomain || xAxisProps.domain\n      });\n\n      return {\n        yScale,\n        xScale\n      };\n    },\n    [yAxisProps, xAxisProps, aggregatedData, zoomDomain]\n  );\n\n  const onZoomPan = useCallback(\n    (event: ZoomPanChangeEvent) => {\n      if (zoomControlled) {\n        setPreventAnimation(true);\n        setZoomDomain(event.domain);\n        setIsZoomed(event.isZoomed);\n\n        clearTimeout(timeout.current);\n        timeout.current = setTimeout(() => setPreventAnimation(false), 500);\n      }\n    },\n    [zoomControlled]\n  );\n\n  const renderChart = useCallback(\n    ({\n      chartHeight,\n      chartWidth,\n      id,\n      updateAxes,\n      chartSized\n    }: ChartContainerChildProps) => {\n      const { yScale, xScale } = getScales(chartHeight, chartWidth);\n      const animated =\n        preventAnimation === true ? false : series.props.animated;\n      const disableBrush = aggregatedData.length <= 1;\n\n      return (\n        <Fragment>\n          {chartSized && gridlines && (\n            <CloneElement<GridlineSeriesProps>\n              element={gridlines}\n              height={chartHeight}\n              width={chartWidth}\n              yScale={yScale}\n              xScale={xScale}\n              yAxis={yAxisProps}\n              xAxis={xAxisProps}\n            />\n          )}\n          <CloneElement<LinearAxisProps>\n            element={xAxis}\n            height={chartHeight}\n            width={chartWidth}\n            scale={xScale}\n            visibility={chartSized ? 'visible' : 'hidden'}\n            onDimensionsChange={(e) => updateAxes('horizontal', e)}\n          />\n          <CloneElement<LinearAxisProps>\n            element={yAxis}\n            height={chartHeight}\n            width={chartWidth}\n            scale={yScale}\n            visibility={chartSized ? 'visible' : 'hidden'}\n            onDimensionsChange={(e) => updateAxes('vertical', e)}\n          />\n          {secondaryAxis &&\n            secondaryAxis.map((axis, i) => (\n              <CloneElement<LinearAxisProps>\n                key={i}\n                element={axis}\n                height={chartHeight}\n                width={chartWidth}\n                visibility={chartSized ? 'visible' : 'hidden'}\n                onDimensionsChange={(e) => updateAxes('horizontal', e)}\n              />\n            ))}\n          {chartSized && (\n            <CloneElement<ChartBrushProps>\n              disabled={disableBrush}\n              element={brush}\n              height={chartHeight}\n              width={chartWidth}\n              scale={xScale}\n            >\n              <CloneElement<ChartZoomPanProps>\n                element={zoomPan}\n                onZoomPan={onZoomPan}\n                height={chartHeight}\n                width={chartWidth}\n                axisType={xAxis.props.type}\n                roundDomains={xAxis.props.roundDomains}\n                data={aggregatedData}\n                domain={zoomDomain}\n              >\n                <CloneElement<ScatterSeriesProps>\n                  element={series}\n                  id={`area-series-${id}`}\n                  data={aggregatedData}\n                  height={chartHeight}\n                  width={chartWidth}\n                  yScale={yScale}\n                  xScale={xScale}\n                  isZoomed={isZoomed}\n                  animated={animated}\n                />\n              </CloneElement>\n            </CloneElement>\n          )}\n        </Fragment>\n      );\n    },\n    [\n      getScales,\n      preventAnimation,\n      series,\n      gridlines,\n      yAxis,\n      xAxis,\n      xAxisProps,\n      yAxisProps,\n      secondaryAxis,\n      brush,\n      zoomPan,\n      onZoomPan,\n      aggregatedData,\n      zoomDomain,\n      isZoomed\n    ]\n  );\n\n  return (\n    <ChartContainer\n      id={id}\n      width={width}\n      height={height}\n      containerClassName={containerClassName}\n      margins={margins}\n      xAxisVisible={isAxisVisible(xAxisProps)}\n      yAxisVisible={isAxisVisible(yAxisProps)}\n      className={classNames(css.scatterPlot, className)}\n    >\n      {renderChart}\n    </ChartContainer>\n  );\n};\n","import React, { FC, ReactElement, useCallback } from 'react';\nimport { ChartInternalShallowDataShape } from '@/common/data';\nimport { CloneElement } from 'reablocks';\nimport { ScatterPoint, ScatterSeries, ScatterPointProps } from '@/ScatterPlot';\nimport css from './PointSeries.module.css';\nimport isEqual from 'react-fast-compare';\nimport { mergeDefaultProps } from '@/common';\n\nexport interface PointSeriesProps {\n  /**\n   * Determines if the points should be animated or not.\n   */\n  animated: boolean;\n\n  /**\n   * The color of the points.\n   */\n  color: any;\n\n  /**\n   * The active values for the points.\n   */\n  activeValues?: any;\n\n  /**\n   * The data for the points.\n   */\n  data: ChartInternalShallowDataShape[];\n\n  /**\n   * The y-scale for the points.\n   */\n  yScale: any;\n\n  /**\n   * The x-scale for the points.\n   */\n  xScale: any;\n\n  /**\n   * The unique identifier for the points.\n   */\n  id: string;\n\n  /**\n   * The height of the points.\n   */\n  height: number;\n\n  /**\n   * The width of the points.\n   */\n  width: number;\n\n  /**\n   * Determines when the points should be shown. Can be a boolean or one of the following strings: 'hover', 'first', 'last'.\n   */\n  show: boolean | 'hover' | 'first' | 'last';\n\n  /**\n   * The point element.\n   */\n  point: ReactElement<ScatterPointProps, typeof ScatterPoint>;\n\n  /**\n   * The index of the points.\n   */\n  index: number;\n}\n\nexport const PointSeries: FC<Partial<PointSeriesProps>> = (props) => {\n  const {\n    data,\n    xScale,\n    yScale,\n    animated,\n    point,\n    color,\n    height,\n    width,\n    id,\n    activeValues,\n    show\n  } = mergeDefaultProps(POINT_SERIES_DEFAULT_PROPS, props);\n\n  const getIsVisible = useCallback(\n    (point: ChartInternalShallowDataShape, index: number): boolean => {\n      const isActive =\n        activeValues && point && isEqual(activeValues.x, point.x);\n\n      if (show === 'hover') {\n        return isActive;\n      } else if (show === 'first') {\n        if (activeValues) {\n          return isActive;\n        } else {\n          return index === 0;\n        }\n      } else if (show === 'last') {\n        if (activeValues) {\n          return isActive;\n        } else {\n          return index === data.length - 1;\n        }\n      }\n\n      return Boolean(show);\n    },\n    [activeValues, data.length, show]\n  );\n\n  return (\n    <ScatterSeries\n      height={height}\n      width={width}\n      id={id}\n      animated={animated}\n      data={data}\n      xScale={xScale}\n      yScale={yScale}\n      point={\n        <CloneElement<ScatterPointProps>\n          element={point}\n          color={color}\n          className={css.point}\n          size={4}\n          tooltip={null}\n          visible={getIsVisible}\n        />\n      }\n    />\n  );\n};\n\nexport const POINT_SERIES_DEFAULT_PROPS: Partial<PointSeriesProps> = {\n  show: 'hover',\n  point: <ScatterPoint />\n};\n","import React, { Fragment, useMemo, ReactElement, FC, useCallback } from 'react';\nimport { area } from 'd3-shape';\nimport { Gradient, GradientProps } from '@/common/Gradient';\nimport { Mask, MaskProps } from '@/common/Mask';\nimport { interpolate, InterpolationTypes } from '@/common/utils/interpolation';\nimport {\n  ChartInternalDataShape,\n  ChartInternalShallowDataShape\n} from '@/common/data';\nimport { CloneElement } from 'reablocks';\nimport {\n  constructFunctionProps,\n  PropFunctionTypes\n} from '@/common/utils/functions';\nimport { MotionPath, DEFAULT_TRANSITION } from '@/common/Motion';\nimport { generateGlowStyles } from '@/common/Glow/utils';\nimport { Glow, mergeDefaultProps, roundDecimals } from '@/common';\n\nexport interface AreaProps extends PropFunctionTypes {\n  /**\n   * Id set internally by `AreaSeries`.\n   */\n  id: string;\n\n  /**\n   * Parsed data shape. Set internally by `AreaChart`.\n   */\n  data: ChartInternalDataShape[];\n\n  /**\n   * Interpolation for the area. Set internally by `AreaSeries`.\n   */\n  interpolation: InterpolationTypes;\n\n  /**\n   * Color for the area. Set internally by `AreaSeries`.\n   */\n  color: any;\n\n  /**\n   * D3 scale for X Axis. Set internally by `AreaChart`.\n   */\n  xScale: any;\n\n  /**\n   * D3 scale for Y Axis. Set internally by `AreaChart`.\n   */\n  yScale: any;\n\n  /**\n   * Index of the area in the series. Set internally by `AreaSeries`.\n   */\n  index: number;\n\n  /**\n   * Total number of areas in the series. Set internally by `AreaSeries`.\n   */\n  total: number;\n\n  /**\n   * Whether to animate the enter/update/exit. Set internally by `AreaSeries`.\n   */\n  animated: boolean;\n\n  /**\n   * Mask to apply to the area.\n   */\n  mask: ReactElement<MaskProps, typeof Mask> | null;\n\n  /**\n   * Gradient to apply to the area.\n   */\n  gradient: ReactElement<GradientProps, typeof Gradient> | null;\n\n  /**\n   * Glow to apply to the area.\n   */\n  glow?: Glow;\n\n  /**\n   * Pointer events to manage the area events.\n   * @default 'none'\n   */\n  pointerEvents: string;\n}\n\nexport const Area: FC<Partial<AreaProps>> = (props) => {\n  const {\n    id,\n    gradient,\n    glow,\n    mask,\n    data,\n    color,\n    index,\n    total,\n    xScale,\n    yScale,\n    animated,\n    interpolation,\n    pointerEvents = 'none',\n    ...rest\n  } = mergeDefaultProps(AREA_DEFAULT_PROPS, props);\n\n  const stroke = color(data, index);\n\n  const coords = useMemo(() => {\n    return data.map((item: any) => ({\n      x: xScale(item.x),\n      x1: xScale(item.x) - xScale(item.x1),\n      y: yScale(item.y),\n      y0: yScale(item.y0),\n      y1: yScale(item.y1)\n    })) as ChartInternalShallowDataShape[];\n  }, [data, xScale, yScale]);\n\n  const getAreaPath = useCallback(\n    (d: ChartInternalShallowDataShape[]) => {\n      // If the input data is a single value and this is the only\n      // area in a series, fill the available space with an area:\n      if (d.length === 1 && total === 1) {\n        const [point] = d;\n        // Assume the single data point's `x` value\n        // is the middle of the graph:\n        const midpoint = roundDecimals(point.x as number);\n        d = [{ ...point }, { ...point }];\n        const [start, end] = d;\n        start.x = 0;\n        end.x = midpoint * 2;\n      }\n\n      const fn = area()\n        .x((d: any) => roundDecimals(d.x))\n        .y0((d: any) => roundDecimals(d.y0))\n        .y1((d: any) => roundDecimals(d.y1))\n        .curve(interpolate(interpolation as InterpolationTypes));\n\n      return fn(d as any);\n    },\n    [interpolation, total]\n  );\n\n  const enter = useMemo(() => {\n    const areaPath = getAreaPath(coords);\n\n    return {\n      d: areaPath === null ? undefined : areaPath\n    };\n  }, [coords, getAreaPath]);\n\n  const exit = useMemo(() => {\n    const maxY = Math.max(...yScale.range());\n    const coords = data.map((item: any) => ({\n      x: xScale(item.x),\n      x1: 0,\n      y: 0,\n      y1: maxY,\n      y0: maxY\n    })) as ChartInternalShallowDataShape[];\n\n    const areaPath = getAreaPath(coords);\n\n    return {\n      d: areaPath === null ? undefined : areaPath\n    };\n  }, [data, getAreaPath, xScale, yScale]);\n\n  const fill = useMemo(() => {\n    if (mask) {\n      return `url(#mask-pattern-${id})`;\n    } else {\n      if (gradient) {\n        return `url(#gradient-${id})`;\n      }\n\n      return '';\n    }\n  }, [gradient, id, mask]);\n\n  const transition = useMemo(() => {\n    if (animated) {\n      return {\n        ...DEFAULT_TRANSITION,\n        delay: index * 0.05\n      };\n    } else {\n      return {\n        type: false as const,\n        delay: 0\n      };\n    }\n  }, [animated, index]);\n\n  const renderArea = useCallback(() => {\n    const maskPath = mask ? `url(#mask-${id})` : '';\n    const extras = constructFunctionProps(rest, data);\n\n    return (\n      <MotionPath\n        {...extras}\n        pointerEvents={pointerEvents}\n        mask={maskPath}\n        fill={fill}\n        transition={transition}\n        custom={{\n          enter,\n          exit\n        }}\n        style={{\n          ...extras.style,\n          ...generateGlowStyles({ glow, colorSchemeColor: stroke })\n        }}\n      />\n    );\n  }, [\n    data,\n    enter,\n    exit,\n    fill,\n    glow,\n    id,\n    mask,\n    rest,\n    stroke,\n    transition,\n    pointerEvents\n  ]);\n\n  return (\n    <Fragment>\n      {renderArea()}\n      {mask && (\n        <Fragment>\n          <Mask id={`mask-${id}`} fill={`url(#gradient-${id})`} />\n          <CloneElement<MaskProps>\n            element={mask}\n            id={`mask-pattern-${id}`}\n            fill={stroke}\n          />\n        </Fragment>\n      )}\n      {gradient && (\n        <CloneElement<GradientProps>\n          element={gradient}\n          id={`gradient-${id}`}\n          color={stroke}\n        />\n      )}\n    </Fragment>\n  );\n};\n\nexport const AREA_DEFAULT_PROPS: Partial<AreaProps> = {\n  gradient: <Gradient />,\n  interpolation: 'linear'\n};\n","import React, {\n  FC,\n  Fragment,\n  ReactElement,\n  useCallback,\n  useEffect,\n  useMemo,\n  useRef,\n  useState\n} from 'react';\nimport { line } from 'd3-shape';\nimport { interpolate, InterpolationTypes } from '@/common/utils/interpolation';\nimport {\n  ChartInternalDataShape,\n  ChartInternalShallowDataShape\n} from '@/common/data';\nimport { calculateShowStroke } from '@/common/utils/stroke';\nimport {\n  constructFunctionProps,\n  PropFunctionTypes\n} from '@/common/utils/functions';\nimport { MotionPath, DEFAULT_TRANSITION } from '@/common/Motion';\nimport { Glow, Gradient, GradientProps, roundDecimals } from '@/common';\nimport { generateGlowStyles } from '@/common/Glow/utils';\nimport { CloneElement } from 'reablocks';\n\nexport interface LineProps extends PropFunctionTypes {\n  /**\n   * Id set internally by `AreaChart`.\n   */\n  id: string;\n\n  /**\n   * Parsed data shape. Set internally by `AreaChart`.\n   */\n  data: ChartInternalDataShape[];\n\n  /**\n   * Width of the chart. Set internally by `AreaChart`.\n   */\n  width: number;\n\n  /**\n   * Interpolation for the area. Set internally by `AreaSeries`.\n   */\n  interpolation: InterpolationTypes;\n\n  /**\n   * Color for the area. Set internally by `AreaSeries`.\n   */\n  color: any;\n\n  /**\n   * D3 scale for X Axis. Set internally by `AreaChart`.\n   */\n  xScale: any;\n\n  /**\n   * D3 scale for Y Axis. Set internally by `AreaChart`.\n   */\n  yScale: any;\n\n  /**\n   * Index of the area in the series. Set internally by `AreaSeries`.\n   */\n  index: number;\n\n  /**\n   * Whether to animate the enter/update/exit. Set internally by `AreaSeries`.\n   */\n  animated: boolean;\n\n  /**\n   * Stroke width of the line.\n   */\n  strokeWidth: number;\n\n  /**\n   * Show the stroke if there is no value.\n   */\n  showZeroStroke: boolean;\n\n  /**\n   * Internal property to identify if there is a area or not.\n   */\n  hasArea: boolean;\n\n  /**\n   * Gradient to apply to the line.\n   */\n  gradient: ReactElement<GradientProps, typeof Gradient> | null;\n\n  /**\n   * Glow to apply to the line.\n   */\n  glow?: Glow;\n}\n\nexport const Line: FC<Partial<LineProps>> = ({\n  id,\n  width,\n  data,\n  color,\n  index,\n  strokeWidth = 3,\n  hasArea,\n  animated,\n  yScale,\n  xScale,\n  showZeroStroke = true,\n  interpolation,\n  gradient,\n  glow,\n  ...rest\n}) => {\n  const [pathLength, setPathLength] = useState<number | null>(null);\n  const ghostPathRef = useRef<SVGPathElement | null>(null);\n\n  useEffect(() => {\n    if (ghostPathRef.current) {\n      setPathLength(roundDecimals(ghostPathRef.current.getTotalLength()));\n    }\n  }, [data, xScale, yScale, width]);\n\n  const getLinePath = useCallback(\n    (point: ChartInternalShallowDataShape[]) => {\n      const fn = line()\n        .x((d: any) => roundDecimals(d.x))\n        .y((d: any) => roundDecimals(d.y1))\n        .defined((d: any) => showZeroStroke || calculateShowStroke(d, point))\n        .curve(interpolate(interpolation));\n\n      return fn(point as any);\n    },\n    [interpolation, showZeroStroke]\n  );\n\n  const transition = useMemo(() => {\n    if (animated) {\n      return {\n        ...DEFAULT_TRANSITION,\n        delay: hasArea ? 0 : index * 0.05\n      };\n    } else {\n      return {\n        type: false as const,\n        delay: 0\n      };\n    }\n  }, [animated, hasArea, index]);\n\n  const coords = useMemo(() => {\n    return data.map((item: any) => ({\n      x: xScale(item.x),\n      x1: xScale(item.x) - xScale(item.x1),\n      y: yScale(item.y),\n      y0: yScale(item.y0),\n      y1: yScale(item.y1)\n    })) as ChartInternalShallowDataShape[];\n  }, [data, xScale, yScale]);\n\n  const enter = useMemo(() => {\n    const linePath = getLinePath(coords);\n\n    let strokeDasharray = '';\n    if (!hasArea && pathLength !== null) {\n      strokeDasharray = `${pathLength} ${pathLength}`;\n    }\n\n    return {\n      d: linePath === null ? undefined : linePath,\n      strokeDashoffset: 0,\n      strokeDasharray: strokeDasharray\n    };\n  }, [coords, getLinePath, hasArea, pathLength]);\n\n  const exit = useMemo(() => {\n    let newCoords = coords;\n    if (hasArea) {\n      const maxY = Math.max(...yScale.range());\n      newCoords = data.map((item: any) => ({\n        x: xScale(item.x),\n        x1: 0,\n        y: maxY,\n        y1: maxY,\n        y0: maxY\n      })) as ChartInternalShallowDataShape[];\n    }\n\n    const linePath = getLinePath(newCoords);\n\n    let strokeDasharray = '';\n    let strokeDashoffset = 0;\n    if (!hasArea && pathLength !== null) {\n      strokeDasharray = `${pathLength} ${pathLength}`;\n      strokeDashoffset = pathLength;\n    }\n\n    return {\n      d: linePath === null ? undefined : linePath,\n      strokeDasharray,\n      strokeDashoffset\n    };\n  }, [coords, data, getLinePath, hasArea, pathLength, xScale, yScale]);\n\n  const stroke = useMemo(() => color(data, index), [data, index, color]);\n  const extras = constructFunctionProps(rest, data);\n  const showLine = hasArea || pathLength !== null;\n\n  const strokeFill = useMemo(() => {\n    if (gradient) {\n      return `url(#gradient-${id})`;\n    }\n    return stroke;\n  }, [gradient, id, stroke]);\n\n  // framer-motion freaks out when these are added for area\n  if (hasArea) {\n    delete enter.strokeDashoffset;\n    delete exit.strokeDashoffset;\n  }\n\n  return (\n    <Fragment>\n      {showLine && (\n        <MotionPath\n          {...extras}\n          pointerEvents=\"none\"\n          stroke={strokeFill}\n          strokeWidth={strokeWidth}\n          fill=\"none\"\n          transition={transition}\n          custom={{\n            enter,\n            exit\n          }}\n          style={{\n            ...extras.style,\n            ...generateGlowStyles({ glow, colorSchemeColor: strokeFill })\n          }}\n        />\n      )}\n      {!hasArea && (\n        <path opacity=\"0\" d={enter.d} ref={ghostPathRef} pointerEvents=\"none\" />\n      )}\n      {gradient && (\n        <CloneElement<GradientProps>\n          element={gradient}\n          id={`gradient-${id}`}\n          color={stroke}\n        />\n      )}\n    </Fragment>\n  );\n};\n","import React, {\n  Fragment,\n  ReactElement,\n  FC,\n  useCallback,\n  useState,\n  useMemo\n} from 'react';\nimport {\n  POINT_SERIES_DEFAULT_PROPS,\n  PointSeries,\n  PointSeriesProps\n} from './PointSeries';\nimport { Area, AreaProps } from './Area';\nimport { MarkLine, MarkLineProps } from '@/common/MarkLine';\nimport {\n  ChartInternalDataShape,\n  ChartInternalNestedDataShape,\n  ChartInternalShallowDataShape\n} from '@/common/data';\nimport { CloneElement } from 'reablocks';\nimport {\n  TooltipArea,\n  TooltipAreaProps,\n  TooltipAreaEvent\n} from '@/common/Tooltip';\nimport { Line, LineProps } from './Line';\nimport { InterpolationTypes } from '@/common/utils/interpolation';\nimport { getColor, ColorSchemeType } from '@/common/color';\nimport { identifier } from 'safe-identifier';\nimport {\n  LinearValueMarker,\n  LinearValueMarkerProps,\n  mergeDefaultProps\n} from '@/common';\n\nexport type AreaChartTypes =\n  | 'standard'\n  | 'grouped'\n  | 'stacked'\n  | 'stackedNormalized';\n\nexport interface AreaSeriesProps {\n  /**\n   * Id set internally by `AreaChart`.\n   */\n  id: string;\n\n  /**\n   * D3 scale for X Axis. Set internally by `AreaChart`.\n   */\n  xScale: any;\n\n  /**\n   * D3 scale for Y Axis. Set internally by `AreaChart`.\n   */\n  yScale: any;\n\n  /**\n   * Parsed data shape. Set internally by `AreaChart`.\n   */\n  data: ChartInternalDataShape[];\n\n  /**\n   * Height of the chart. Set internally by `AreaChart`.\n   */\n  height: number;\n\n  /**\n   * Width of the chart. Set internally by `AreaChart`.\n   */\n  width: number;\n\n  /**\n   * Whether to animate the enter/update/exit.\n   */\n  animated: boolean;\n\n  /**\n   * Type of area chart to render.\n   */\n  type: AreaChartTypes;\n\n  /**\n   * Interpolation type for the area/line.\n   */\n  interpolation: InterpolationTypes;\n\n  /**\n   * Tooltip for the chart area.\n   */\n  tooltip: ReactElement<TooltipAreaProps, typeof TooltipArea>;\n\n  /**\n   * Markline for the chart.\n   */\n  markLine: ReactElement<MarkLineProps, typeof MarkLine> | null;\n\n  /**\n   * Symbols used to show points.\n   */\n  symbols: ReactElement<PointSeriesProps, typeof PointSeries> | null;\n\n  /**\n   * Line that is rendered.\n   */\n  line: ReactElement<LineProps, typeof Line> | null;\n\n  /**\n   * Area that is rendered.\n   */\n  area: ReactElement<AreaProps, typeof Area> | null;\n\n  /**\n   * Color scheme for the series.\n   */\n  colorScheme: ColorSchemeType;\n\n  /**\n   * Whether the chart has been zoomed or not. Set internally by `AreaChart`.\n   */\n  isZoomed: boolean;\n\n  /**\n   * Value markers line for the chart.\n   */\n  valueMarkers:\n    | ReactElement<LinearValueMarkerProps, typeof LinearValueMarker>[]\n    | null;\n}\n\n// For area charts, often symbols exceed the area\n// and we want to add a little bit of padding to prevent clipping\nconst PADDING = 25;\nconst HALF_PADDING = PADDING / 2;\n\nexport const AreaSeries: FC<Partial<AreaSeriesProps>> = (props) => {\n  const {\n    data,\n    height,\n    id,\n    width,\n    isZoomed,\n    tooltip,\n    xScale,\n    yScale,\n    type,\n    markLine,\n    symbols,\n    animated,\n    area,\n    interpolation,\n    line,\n    colorScheme,\n    valueMarkers\n  } = mergeDefaultProps(AREA_SERIES_DEFAULT_PROPS, props);\n\n  const symbolsProps = useMemo(\n    () => ({\n      ...POINT_SERIES_DEFAULT_PROPS,\n      ...(symbols?.props ?? {})\n    }),\n    [symbols]\n  );\n\n  const [activeValues, setActiveValues] = useState<any | null>(null);\n  const [activePoint, setActivePoint] = useState<any | null>(null);\n\n  const onValueEnter = useCallback((event: TooltipAreaEvent) => {\n    setActivePoint(event.pointX);\n    setActiveValues(event.value);\n  }, []);\n\n  const onValueLeave = useCallback(() => {\n    setActivePoint(undefined);\n    setActiveValues(undefined);\n  }, []);\n\n  const isMulti =\n    type === 'grouped' || type === 'stacked' || type === 'stackedNormalized';\n\n  const getPointColor = useCallback(\n    (point, index: number) => {\n      const key = Array.isArray(point) ? point?.[0]?.key : point?.key;\n\n      return getColor({\n        data,\n        colorScheme,\n        active: activeValues,\n        point,\n        index,\n        key\n      });\n    },\n    [activeValues, colorScheme, data]\n  );\n\n  const renderArea = useCallback(\n    (data: ChartInternalShallowDataShape[], index = 0, total = 1) => (\n      <Fragment>\n        {line && (\n          <CloneElement<LineProps>\n            element={line}\n            xScale={xScale}\n            yScale={yScale}\n            data={data}\n            width={width}\n            index={index}\n            hasArea={area !== null}\n            animated={animated}\n            interpolation={interpolation as InterpolationTypes}\n            color={getPointColor}\n          />\n        )}\n        {area && (\n          <CloneElement<AreaProps>\n            element={area}\n            id={`${id}-area-${index}`}\n            xScale={xScale}\n            yScale={yScale}\n            data={data}\n            index={index}\n            total={total}\n            animated={animated}\n            interpolation={interpolation as InterpolationTypes}\n            color={getPointColor}\n          />\n        )}\n      </Fragment>\n    ),\n    [\n      animated,\n      area,\n      getPointColor,\n      id,\n      interpolation,\n      line,\n      width,\n      xScale,\n      yScale\n    ]\n  );\n\n  const renderSymbols = useCallback(\n    (data: ChartInternalShallowDataShape[], index = 0) => {\n      const visible = symbols !== null;\n      const activeSymbols =\n        (symbols && symbolsProps.activeValues) || activeValues;\n\n      // Animations are only valid for Area\n      const isAnimated = area !== undefined && animated && !activeSymbols;\n\n      return (\n        <Fragment>\n          {visible && (\n            <CloneElement<PointSeriesProps>\n              element={symbols}\n              key={`point-series-${id}`}\n              id={id}\n              height={height}\n              width={width}\n              activeValues={activeSymbols}\n              xScale={xScale}\n              yScale={yScale}\n              index={index}\n              data={data}\n              animated={isAnimated}\n              color={() => getPointColor(data, index)}\n            />\n          )}\n        </Fragment>\n      );\n    },\n    [\n      activeValues,\n      animated,\n      area,\n      getPointColor,\n      height,\n      id,\n      symbols,\n      width,\n      xScale,\n      yScale\n    ]\n  );\n\n  const renderMarkLine = useCallback(\n    () => (\n      <>\n        {activeValues && markLine && (\n          <CloneElement<MarkLineProps>\n            element={markLine}\n            height={height}\n            pointX={activePoint}\n          />\n        )}\n      </>\n    ),\n    [activePoint, activeValues, height, markLine]\n  );\n\n  const renderSingleSeries = useCallback(\n    (data: ChartInternalShallowDataShape[]) => (\n      <Fragment>\n        {renderArea(data)}\n        {renderMarkLine()}\n        {renderSymbols(data)}\n      </Fragment>\n    ),\n    [renderArea, renderMarkLine, renderSymbols]\n  );\n\n  const renderMultiSeries = useCallback(\n    (data: ChartInternalNestedDataShape[]) => (\n      <Fragment>\n        {data\n          .map((point, index) => (\n            <Fragment key={identifier(`${point.key}`)}>\n              {renderArea(point.data, index, data.length)}\n            </Fragment>\n          ))\n          .reverse()}\n        {renderMarkLine()}\n        {data\n          .map((point, index) => (\n            <Fragment key={identifier(`${point.key}`)}>\n              {renderSymbols(point.data, index)}\n            </Fragment>\n          ))\n          .reverse()}\n      </Fragment>\n    ),\n    [renderArea, renderMarkLine, renderSymbols]\n  );\n\n  const renderValueMarkers = useCallback(\n    () => (\n      <>\n        {valueMarkers?.length &&\n          valueMarkers.map((marker) => {\n            const isVertical = marker?.props?.direction === 'vertical';\n            const size = isVertical ? height : width;\n            const value = isVertical\n              ? xScale(marker.props.value)\n              : yScale(marker.props.value);\n            return (\n              <CloneElement<LinearValueMarkerProps>\n                key={marker.key}\n                element={marker}\n                size={size}\n                value={value}\n              />\n            );\n          })}\n      </>\n    ),\n    [valueMarkers, width, yScale, xScale, height]\n  );\n\n  return (\n    <Fragment>\n      <defs>\n        <clipPath id={`${id}-path`}>\n          <rect\n            width={isZoomed ? width : width + PADDING}\n            height={height + PADDING}\n            x={isZoomed ? 0 : -HALF_PADDING}\n            y={-HALF_PADDING}\n          />\n        </clipPath>\n      </defs>\n      <CloneElement<TooltipAreaProps>\n        element={tooltip}\n        xScale={xScale}\n        yScale={yScale}\n        data={data}\n        height={height}\n        width={width}\n        color={getPointColor}\n        onValueEnter={onValueEnter}\n        onValueLeave={onValueLeave}\n      >\n        <g clipPath={`url(#${id}-path)`}>\n          {isMulti && renderMultiSeries(data as ChartInternalNestedDataShape[])}\n          {!isMulti &&\n            renderSingleSeries(data as ChartInternalShallowDataShape[])}\n          {renderValueMarkers()}\n        </g>\n      </CloneElement>\n    </Fragment>\n  );\n};\n\nexport const AREA_SERIES_DEFAULT_PROPS: Partial<AreaSeriesProps> = {\n  colorScheme: 'cybertron',\n  animated: true,\n  interpolation: 'linear',\n  type: 'standard',\n  line: <Line />,\n  area: <Area />,\n  markLine: <MarkLine />,\n  tooltip: <TooltipArea />,\n  symbols: <PointSeries />\n};\n","import React, { FC, useMemo } from 'react';\nimport {\n  AreaSeriesProps,\n  AreaSeries,\n  AREA_SERIES_DEFAULT_PROPS\n} from './AreaSeries';\nimport { formatValue } from '@/common/utils/formatting';\nimport { TooltipTemplate, TooltipArea, ChartTooltip } from '@/common/Tooltip';\nimport { CloneElement } from 'reablocks';\nimport { POINT_SERIES_DEFAULT_PROPS, PointSeriesProps } from './PointSeries';\nimport { ScatterPointProps } from '@/ScatterPlot';\nimport { InterpolationTypes } from '@/common';\n\nexport const StackedNormalizedAreaSeries: FC<Partial<AreaSeriesProps>> = (\n  props\n) => {\n  const { interpolation, symbols, ...rest } = {\n    ...AREA_SERIES_DEFAULT_PROPS,\n    ...props\n  };\n\n  const symbolsProps = useMemo(\n    () => ({\n      ...POINT_SERIES_DEFAULT_PROPS,\n      ...symbols?.props\n    }),\n    [symbols]\n  );\n\n  return (\n    <AreaSeries\n      {...rest}\n      interpolation={interpolation as InterpolationTypes}\n      type=\"stackedNormalized\"\n      symbols={\n        symbols && (\n          <CloneElement<PointSeriesProps>\n            element={symbols}\n            {...symbols.props}\n            point={\n              <CloneElement<ScatterPointProps>\n                element={symbolsProps.point}\n                {...symbolsProps.point.props}\n                tooltip={null}\n              />\n            }\n          />\n        )\n      }\n      tooltip={\n        <TooltipArea\n          tooltip={\n            <ChartTooltip\n              content={(series, color) => {\n                if (!series) {\n                  return null;\n                }\n\n                const value = {\n                  ...series,\n                  data: series.data.map((d) => ({\n                    ...d,\n                    value: `${formatValue(d.value)} ∙ ${formatValue(\n                      Math.floor((d.y1 - d.y0) * 100)\n                    )}%`\n                  }))\n                };\n\n                return <TooltipTemplate color={color} value={value} />;\n              }}\n            />\n          }\n        />\n      }\n    />\n  );\n};\n","import React, { FC, useMemo } from 'react';\nimport {\n  AreaSeriesProps,\n  AreaSeries,\n  AREA_SERIES_DEFAULT_PROPS\n} from './AreaSeries';\nimport { CloneElement } from 'reablocks';\nimport { POINT_SERIES_DEFAULT_PROPS, PointSeriesProps } from './PointSeries';\nimport { SCATTER_POINT_DEFAULT_PROPS, ScatterPointProps } from '@/ScatterPlot';\nimport { InterpolationTypes } from '@/common';\n\nexport const StackedAreaSeries: FC<Partial<AreaSeriesProps>> = (props) => {\n  const { symbols, interpolation, ...rest } = {\n    ...AREA_SERIES_DEFAULT_PROPS,\n    ...props\n  };\n\n  const symbolsProps = useMemo(\n    () => ({\n      ...POINT_SERIES_DEFAULT_PROPS,\n      ...symbols?.props\n    }),\n    [symbols]\n  );\n\n  const pointProps = useMemo(\n    () => ({\n      ...SCATTER_POINT_DEFAULT_PROPS,\n      ...symbolsProps.point?.props\n    }),\n    [symbolsProps]\n  );\n\n  return (\n    <AreaSeries\n      {...rest}\n      interpolation={interpolation as InterpolationTypes}\n      type=\"stacked\"\n      symbols={\n        symbols && (\n          <CloneElement<PointSeriesProps>\n            element={symbols}\n            {...symbolsProps}\n            point={\n              <CloneElement<ScatterPointProps>\n                element={symbolsProps.point}\n                {...pointProps}\n                tooltip={null}\n              />\n            }\n          />\n        )\n      }\n    />\n  );\n};\n","import React, {\n  Fragment,\n  useEffect,\n  ReactElement,\n  FC,\n  useCallback,\n  useMemo,\n  useState,\n  useRef\n} from 'react';\nimport classNames from 'classnames';\nimport {\n  AREA_SERIES_DEFAULT_PROPS,\n  AreaSeries,\n  AreaSeriesProps\n} from './AreaSeries';\nimport {\n  isAxisVisible,\n  LinearAxisProps,\n  LinearXAxis,\n  LinearYAxis,\n  LinearAxis,\n  LINEAR_Y_AXIS_DEFAULT_PROPS,\n  LINEAR_X_AXIS_DEFAULT_PROPS\n} from '@/common/Axis/LinearAxis';\nimport { getXScale, getYScale } from '@/common/scales';\nimport { GridlineSeries, GridlineSeriesProps } from '@/common/Gridline';\nimport {\n  ChartDataShape,\n  ChartNestedDataShape,\n  buildStackData,\n  buildShallowChartData,\n  ChartShallowDataShape,\n  buildNestedChartData\n} from '@/common/data';\nimport css from './AreaChart.module.css';\nimport { ChartBrushProps, ChartBrush } from '@/common/Brush';\nimport {\n  ZoomPanChangeEvent,\n  ChartZoomPanProps,\n  ChartZoomPan\n} from '@/common/ZoomPan';\nimport {\n  ChartContainerChildProps,\n  ChartContainer,\n  ChartProps\n} from '@/common/containers/ChartContainer';\nimport { CloneElement } from 'reablocks';\nimport { mergeDefaultProps } from '@/common';\n\nexport interface AreaChartProps extends ChartProps {\n  /**\n   * Data the chart will receive to render.\n   */\n  data: ChartDataShape[];\n\n  /**\n   * The series component that renders the area/line/circles components.\n   */\n  series: ReactElement<AreaSeriesProps, typeof AreaSeries>;\n\n  /**\n   * The linear axis component for the Y Axis of the chart.\n   */\n  yAxis: ReactElement<LinearAxisProps, typeof LinearAxis>;\n\n  /**\n   * The linear axis component for the X Axis of the chart.\n   */\n  xAxis: ReactElement<LinearAxisProps, typeof LinearAxis>;\n\n  /**\n   * The chart's background gridlines component.\n   */\n  gridlines: ReactElement<GridlineSeriesProps, typeof GridlineSeries> | null;\n\n  /**\n   * The chart's brush component.\n   */\n  brush: ReactElement<ChartBrushProps, typeof ChartBrush> | null;\n\n  /**\n   * The chart's zoom pan component.\n   */\n  zoomPan: ReactElement<ChartZoomPanProps, typeof ChartZoomPan> | null;\n\n  /**\n   * Any secondary axis components. Useful for multi-axis charts.\n   */\n  secondaryAxis?: ReactElement<LinearAxisProps, typeof LinearAxis>[];\n}\n\nexport const AreaChart: FC<Partial<AreaChartProps>> = (props) => {\n  const {\n    xAxis,\n    yAxis,\n    id,\n    data,\n    width,\n    height,\n    margins,\n    className,\n    containerClassName,\n    series,\n    gridlines,\n    brush,\n    zoomPan,\n    secondaryAxis\n  } = mergeDefaultProps(AREA_CHART_DEFAULT_PROPS, props);\n\n  const zoom: any = zoomPan ? zoomPan.props : {};\n  const [zoomDomain, setZoomDomain] = useState<any>(zoom.domain);\n  const [preventAnimation, setPreventAnimation] = useState<boolean>(false);\n  const [isZoomed, setIsZoomed] = useState<boolean>(!!zoom.domain);\n  // eslint-disable-next-line\n  const [zoomControlled] = useState<boolean>(!zoom.hasOwnProperty('domain'));\n  const xAxisProps = useMemo(\n    () => ({ ...LINEAR_X_AXIS_DEFAULT_PROPS, ...xAxis.props }),\n    [xAxis.props]\n  );\n  const yAxisProps = useMemo(\n    () => ({ ...LINEAR_Y_AXIS_DEFAULT_PROPS, ...yAxis.props }),\n    [yAxis.props]\n  );\n  const seriesProps = useMemo(\n    () => ({ ...AREA_SERIES_DEFAULT_PROPS, ...series.props }),\n    [series.props]\n  );\n\n  const timeoutRef = useRef<any | null>(null);\n\n  const seriesType = seriesProps.type;\n  const isMultiSeries =\n    seriesType === 'stacked' ||\n    seriesType === 'stackedNormalized' ||\n    seriesType === 'grouped';\n\n  const animated = preventAnimation === true ? false : seriesProps.animated;\n\n  useEffect(() => {\n    if (zoomPan) {\n      const zoom = zoomPan.props;\n      if (!zoomControlled && zoom.domain !== zoomDomain) {\n        setZoomDomain(zoom.domain);\n        setIsZoomed(!!zoom.domain);\n      }\n    }\n  }, [zoomControlled, zoomDomain, zoomPan]);\n\n  const aggregatedData = useMemo(() => {\n    if (seriesType === 'stacked' || seriesType === 'stackedNormalized') {\n      return buildStackData(\n        data as ChartNestedDataShape[],\n        seriesType === 'stackedNormalized'\n      );\n    } else if (seriesType === 'grouped') {\n      return buildNestedChartData(data as ChartNestedDataShape[], true);\n    } else {\n      return buildShallowChartData(data as ChartShallowDataShape[]);\n    }\n  }, [data, seriesType]);\n\n  const getScales = useCallback(\n    (chartWidth: number, chartHeight: number) => {\n      const xScale = getXScale({\n        width: chartWidth,\n        type: xAxisProps.type,\n        roundDomains: xAxisProps.roundDomains,\n        data: aggregatedData,\n        domain: zoomDomain || xAxisProps.domain,\n        isMultiSeries\n      });\n\n      const yScale = getYScale({\n        roundDomains: yAxisProps.roundDomains,\n        type: yAxisProps.type,\n        height: chartHeight,\n        data: aggregatedData,\n        domain: yAxisProps.domain,\n        isMultiSeries\n      });\n\n      return { xScale, yScale };\n    },\n    [\n      aggregatedData,\n      isMultiSeries,\n      xAxisProps.domain,\n      xAxisProps.roundDomains,\n      xAxisProps.type,\n      yAxisProps.domain,\n      yAxisProps.roundDomains,\n      yAxisProps.type,\n      zoomDomain\n    ]\n  );\n\n  const onZoomPan = useCallback(\n    (event: ZoomPanChangeEvent) => {\n      if (zoomControlled) {\n        setZoomDomain(event.domain);\n        setIsZoomed(event.isZoomed);\n        setPreventAnimation(true);\n\n        clearTimeout(timeoutRef.current);\n        timeoutRef.current = setTimeout(() => setPreventAnimation(false));\n      }\n    },\n    [zoomControlled]\n  );\n\n  const renderChart = useCallback(\n    ({\n      chartHeight,\n      chartWidth,\n      id,\n      updateAxes,\n      chartSized\n    }: ChartContainerChildProps) => {\n      const { xScale, yScale } = getScales(chartWidth, chartHeight);\n      const disableBrush = aggregatedData.length <= 1;\n\n      return (\n        <Fragment>\n          {chartSized && gridlines && (\n            <CloneElement<GridlineSeriesProps>\n              element={gridlines}\n              height={chartHeight}\n              width={chartWidth}\n              yScale={yScale}\n              xScale={xScale}\n              yAxis={yAxisProps}\n              xAxis={xAxisProps}\n            />\n          )}\n          <CloneElement<LinearAxisProps>\n            element={xAxis}\n            height={chartHeight}\n            width={chartWidth}\n            scale={xScale}\n            visibility={chartSized ? 'visible' : 'hidden'}\n            onDimensionsChange={(event) => updateAxes('horizontal', event)}\n          />\n          <CloneElement<LinearAxisProps>\n            element={yAxis}\n            height={chartHeight}\n            width={chartWidth}\n            scale={yScale}\n            visibility={chartSized ? 'visible' : 'hidden'}\n            onDimensionsChange={(event) => updateAxes('vertical', event)}\n          />\n          {secondaryAxis &&\n            secondaryAxis.map((axis, i) => (\n              <CloneElement<LinearAxisProps>\n                key={i}\n                element={axis}\n                height={chartHeight}\n                width={chartWidth}\n                visibility={chartSized ? 'visible' : 'hidden'}\n                onDimensionsChange={(event) => updateAxes('horizontal', event)}\n              />\n            ))}\n          {chartSized && (\n            <CloneElement<ChartBrushProps>\n              disabled={disableBrush}\n              element={brush}\n              height={chartHeight}\n              width={chartWidth}\n              scale={xScale}\n            >\n              <CloneElement<ChartZoomPanProps>\n                element={zoomPan}\n                onZoomPan={onZoomPan}\n                height={chartHeight}\n                width={chartWidth}\n                axisType={xAxisProps.type}\n                roundDomains={xAxisProps.roundDomains}\n                data={aggregatedData}\n                domain={zoomDomain}\n              >\n                <CloneElement<AreaSeriesProps>\n                  element={series}\n                  id={`area-series-${id}`}\n                  data={aggregatedData}\n                  height={chartHeight}\n                  width={chartWidth}\n                  yScale={yScale}\n                  xScale={xScale}\n                  isZoomed={isZoomed}\n                  animated={animated}\n                />\n              </CloneElement>\n            </CloneElement>\n          )}\n        </Fragment>\n      );\n    },\n    [\n      aggregatedData,\n      animated,\n      brush,\n      getScales,\n      gridlines,\n      isZoomed,\n      onZoomPan,\n      secondaryAxis,\n      series,\n      xAxis,\n      yAxis,\n      xAxisProps,\n      yAxisProps,\n      zoomDomain,\n      zoomPan\n    ]\n  );\n\n  return (\n    <ChartContainer\n      id={id}\n      width={width}\n      height={height}\n      margins={margins}\n      containerClassName={containerClassName}\n      xAxisVisible={isAxisVisible(xAxisProps)}\n      yAxisVisible={isAxisVisible(yAxisProps)}\n      className={classNames(\n        css.areaChart,\n        className,\n        series.type as unknown as string\n      )}\n    >\n      {renderChart}\n    </ChartContainer>\n  );\n};\n\nexport const AREA_CHART_DEFAULT_PROPS = {\n  data: [],\n  xAxis: <LinearXAxis type=\"time\" />,\n  yAxis: <LinearYAxis type=\"value\" />,\n  series: <AreaSeries />,\n  gridlines: <GridlineSeries />,\n  brush: null,\n  zoomPan: null\n};\n","import React, { FC } from 'react';\nimport { AreaChart, AreaChartProps } from './AreaChart';\nimport { ChartNestedDataShape } from '@/common/data';\nimport { StackedAreaSeries } from './AreaSeries';\n\nexport interface StackedAreaChartProps extends AreaChartProps {\n  data: ChartNestedDataShape[];\n}\n\nexport const StackedAreaChart: FC<Partial<StackedAreaChartProps>> = (props) => (\n  <AreaChart\n    {...props}\n    series={<StackedAreaSeries {...props.series?.props} type=\"stacked\" />}\n  />\n);\n","import React, { FC } from 'react';\nimport { AreaChart, AreaChartProps } from './AreaChart';\nimport { ChartNestedDataShape } from '@/common/data';\nimport { StackedNormalizedAreaSeries } from './AreaSeries';\nimport {\n  LinearYAxis,\n  LinearYAxisTickSeries,\n  LinearYAxisTickLabel,\n  LINEAR_Y_AXIS_TICK_LABEL_DEFAULT_PROPS\n} from '@/common/Axis/LinearAxis';\n\nexport interface StackedNormalizedAreaChartProps extends AreaChartProps {\n  data: ChartNestedDataShape[];\n}\n\nexport const StackedNormalizedAreaChart: FC<\n  Partial<StackedNormalizedAreaChartProps>\n> = (props) => (\n  <AreaChart\n    {...props}\n    series={\n      <StackedNormalizedAreaSeries\n        {...props.series?.props}\n        type=\"stackedNormalized\"\n      />\n    }\n    yAxis={\n      <LinearYAxis\n        type=\"value\"\n        tickSeries={\n          <LinearYAxisTickSeries\n            label={\n              <LinearYAxisTickLabel\n                {...LINEAR_Y_AXIS_TICK_LABEL_DEFAULT_PROPS}\n                rotation={false}\n                format={(data) => `${data * 100}%`}\n              />\n            }\n          />\n        }\n        {...props.yAxis?.props}\n      />\n    }\n  />\n);\n","import React, { FC, useMemo } from 'react';\nimport { ChartInternalShallowDataShape, Direction } from '@/common/data';\nimport { BarType } from './Bar';\nimport { motion } from 'motion/react';\nimport { DEFAULT_TRANSITION } from '@/common/Motion';\nimport { mergeDefaultProps } from '@/common';\n\nexport interface BarLabelProps {\n  /**\n   * Text of the label. Set internally by `Bar`.\n   */\n  text: string;\n\n  /**\n   * Height of the bar.\n   */\n  height: number;\n\n  /**\n   * Width of the bar.\n   */\n  width: number;\n\n  /**\n   * SVG x attribute for the bar.\n   */\n  x: number;\n\n  /**\n   * SVG y attribute for the bar.\n   */\n  y: number;\n\n  /**\n   * Group index or index of the bar. Set internally by `BarSeries`.\n   */\n  index: number;\n\n  /**\n   * D3 scale for Axis. Set internally by `BarChart`.\n   */\n  scale: any;\n\n  /**\n   * Position of the label.\n   */\n  position: 'top' | 'center' | 'bottom';\n\n  /**\n   * Parsed data shape. Set internally by `BarChart`.\n   */\n  data: ChartInternalShallowDataShape;\n\n  /**\n   * Color of the text.\n   */\n  fill: string;\n\n  /**\n   * Number of the bars in the bar group. Set internally by `BarSeries`.\n   */\n  barCount: number;\n\n  /**\n   * Layout of bar chart to render. Set internally by `BarSeries`.\n   */\n  layout: Direction;\n\n  /**\n   * Whether to animate the enter/update/exit. Set internally by `BarSeries`.\n   */\n  animated: boolean;\n\n  /**\n   * Type of bar chart to render. Set internally by `BarSeries`.\n   */\n  type: BarType;\n\n  /**\n   * Font size of the text.\n   */\n  fontSize: number;\n\n  /**\n   * Font family of the text.\n   */\n  fontFamily: string;\n\n  /**\n   * Padding of the label.\n   */\n  padding: number;\n\n  /**\n   * Class name to apply to the text.\n   */\n  className?: any;\n}\n\nexport const BarLabel: FC<Partial<BarLabelProps>> = (props) => {\n  const {\n    fontSize,\n    fontFamily,\n    fill,\n    layout,\n    className,\n    text,\n    x,\n    y,\n    height,\n    position,\n    width,\n    data,\n    padding,\n    scale,\n    type,\n    animated,\n    index,\n    barCount\n  } = mergeDefaultProps(BAR_LABEL_DEFAULT_PROPS, props);\n\n  const isVertical = useMemo(() => layout === 'vertical', [layout]);\n  const textAnchor = isVertical ? 'middle' : 'start';\n\n  const enterProps = useMemo(() => {\n    let newY = y;\n    let newX = x;\n\n    // If its diverging and the value is negative, we\n    // need to reverse the type...\n    const isTop = position === 'top';\n    const direction = isVertical\n      ? (data.y as number) < 0 && isTop\n        ? 'bottom'\n        : position\n      : (data.x0 as number) < 0 && isTop\n        ? 'bottom'\n        : position;\n\n    if (isVertical) {\n      if (direction === 'top') {\n        newY = y - padding;\n      } else if (direction === 'center') {\n        newY = y + height / 2;\n      } else if (direction === 'bottom') {\n        newY = y + height - padding;\n      }\n      newX = newX + width / 2;\n    } else {\n      if (direction === 'top') {\n        newX = x + width + padding;\n      } else if (direction === 'center') {\n        newX = x + width / 2;\n      } else if (direction === 'bottom') {\n        newX = x + padding;\n      }\n      newY = newY + height / 2;\n    }\n\n    return {\n      translateX: newX,\n      translateY: newY,\n      opacity: 1\n    };\n  }, [data.x0, data.y, height, isVertical, padding, position, width, x, y]);\n\n  const exitProps = useMemo(() => {\n    let newY = y;\n    let newX = x;\n\n    if (isVertical) {\n      const maxY = Math.max(...scale.range());\n      if (position === 'top') {\n        newY = maxY;\n      } else {\n        newY = maxY + height + padding;\n      }\n\n      newX = newX + width / 2;\n    } else {\n      const minX = Math.min(...scale.range());\n      if (position === 'top') {\n        newX = minX;\n      } else {\n        newX = minX + width + padding;\n      }\n\n      newY = newY + height / 2;\n    }\n\n    if (type === 'stackedDiverging') {\n      if (isVertical) {\n        newY = newY / 2;\n      } else {\n        newX = newX / 2;\n      }\n    }\n\n    return {\n      translateY: newY,\n      translateX: newX,\n      opacity: 0\n    };\n  }, [height, isVertical, padding, position, scale, type, width, x, y]);\n\n  const delay = useMemo(() => {\n    let delay = 0;\n    if (animated) {\n      if (layout === 'vertical') {\n        return (index / barCount) * 0.5;\n      } else {\n        return ((barCount - index) / barCount) * 0.5;\n      }\n    }\n\n    return delay;\n  }, [animated, barCount, index, layout]);\n\n  return (\n    <motion.g\n      initial={exitProps}\n      animate={enterProps}\n      exit={exitProps}\n      transition={{\n        ...DEFAULT_TRANSITION,\n        delay\n      }}\n      fontSize={fontSize}\n      fontFamily={fontFamily}\n    >\n      <text fill={fill} className={className} textAnchor={textAnchor}>\n        {text}\n      </text>\n    </motion.g>\n  );\n};\n\nexport const BAR_LABEL_DEFAULT_PROPS: Partial<BarLabelProps> = {\n  position: 'top',\n  layout: 'vertical' as const,\n  fontSize: 13,\n  padding: 5,\n  fontFamily: 'sans-serif',\n  fill: '#000'\n};\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 iterationDuration() {\n        const { delay = 0 } = this.options || {};\n        return this.duration + millisecondsToSeconds(delay);\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 iterationDuration() {\n        const { delay = 0 } = this.options || {};\n        return this.duration + millisecondsToSeconds(delay);\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 iterationDuration() {\n        return this.animation.iterationDuration;\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 { 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 { 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 { 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 { isDragging } from './is-active.mjs';\n\nfunction setDragLock(axis) {\n    if (axis === \"x\" || axis === \"y\") {\n        if (isDragging[axis]) {\n            return null;\n        }\n        else {\n            isDragging[axis] = true;\n            return () => {\n                isDragging[axis] = false;\n            };\n        }\n    }\n    else {\n        if (isDragging.x || isDragging.y) {\n            return null;\n        }\n        else {\n            isDragging.x = isDragging.y = true;\n            return () => {\n                isDragging.x = isDragging.y = false;\n            };\n        }\n    }\n}\n\nexport { setDragLock };\n","import { 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","import { isObject } from 'motion-utils';\n\n/**\n * Checks if an element is an SVG element in a way\n * that works across iframes\n */\nfunction isSVGElement(element) {\n    return isObject(element) && \"ownerSVGElement\" in element;\n}\n\nexport { isSVGElement };\n","import { isSVGElement } from './is-svg-element.mjs';\n\n/**\n * Checks if an element is specifically an SVGSVGElement (the root SVG element)\n * in a way that works across iframes\n */\nfunction isSVGSVGElement(element) {\n    return isSVGElement(element) && element.tagName === \"svg\";\n}\n\nexport { isSVGSVGElement };\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","\"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","\"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","/**\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","/**\n * Bounding boxes tend to be defined as top, left, right, bottom. For various operations\n * it's easier to consider each axis individually. This function returns a bounding box\n * as a map of single-axis min/max values.\n */\nfunction convertBoundingBoxToBox({ top, left, right, bottom, }) {\n    return {\n        x: { min: left, max: right },\n        y: { min: top, max: bottom },\n    };\n}\nfunction convertBoxToBoundingBox({ x, y }) {\n    return { top: y.min, right: x.max, bottom: y.max, left: x.min };\n}\n/**\n * Applies a TransformPoint function to a bounding box. TransformPoint is usually a function\n * provided by Framer to allow measured points to be corrected for device scaling. This is used\n * when measuring DOM elements and DOM event points.\n */\nfunction transformBoxPoints(point, transformPoint) {\n    if (!transformPoint)\n        return point;\n    const topLeft = transformPoint({ x: point.left, y: point.top });\n    const bottomRight = transformPoint({ x: point.right, y: point.bottom });\n    return {\n        top: topLeft.y,\n        left: topLeft.x,\n        bottom: bottomRight.y,\n        right: bottomRight.x,\n    };\n}\n\nexport { convertBoundingBoxToBox, convertBoxToBoundingBox, transformBoxPoints };\n","function isIdentityScale(scale) {\n    return scale === undefined || scale === 1;\n}\nfunction hasScale({ scale, scaleX, scaleY }) {\n    return (!isIdentityScale(scale) ||\n        !isIdentityScale(scaleX) ||\n        !isIdentityScale(scaleY));\n}\nfunction hasTransform(values) {\n    return (hasScale(values) ||\n        has2DTranslate(values) ||\n        values.z ||\n        values.rotate ||\n        values.rotateX ||\n        values.rotateY ||\n        values.skewX ||\n        values.skewY);\n}\nfunction has2DTranslate(values) {\n    return is2DTranslate(values.x) || is2DTranslate(values.y);\n}\nfunction is2DTranslate(value) {\n    return value && value !== \"0%\";\n}\n\nexport { has2DTranslate, hasScale, hasTransform };\n","import { mixNumber } from 'motion-dom';\nimport { hasTransform } from '../utils/has-transform.mjs';\n\n/**\n * Scales a point based on a factor and an originPoint\n */\nfunction scalePoint(point, scale, originPoint) {\n    const distanceFromOrigin = point - originPoint;\n    const scaled = scale * distanceFromOrigin;\n    return originPoint + scaled;\n}\n/**\n * Applies a translate/scale delta to a point\n */\nfunction applyPointDelta(point, translate, scale, originPoint, boxScale) {\n    if (boxScale !== undefined) {\n        point = scalePoint(point, boxScale, originPoint);\n    }\n    return scalePoint(point, scale, originPoint) + translate;\n}\n/**\n * Applies a translate/scale delta to an axis\n */\nfunction applyAxisDelta(axis, translate = 0, scale = 1, originPoint, boxScale) {\n    axis.min = applyPointDelta(axis.min, translate, scale, originPoint, boxScale);\n    axis.max = applyPointDelta(axis.max, translate, scale, originPoint, boxScale);\n}\n/**\n * Applies a translate/scale delta to a box\n */\nfunction applyBoxDelta(box, { x, y }) {\n    applyAxisDelta(box.x, x.translate, x.scale, x.originPoint);\n    applyAxisDelta(box.y, y.translate, y.scale, y.originPoint);\n}\nconst TREE_SCALE_SNAP_MIN = 0.999999999999;\nconst TREE_SCALE_SNAP_MAX = 1.0000000000001;\n/**\n * Apply a tree of deltas to a box. We do this to calculate the effect of all the transforms\n * in a tree upon our box before then calculating how to project it into our desired viewport-relative box\n *\n * This is the final nested loop within updateLayoutDelta for future refactoring\n */\nfunction applyTreeDeltas(box, treeScale, treePath, isSharedTransition = false) {\n    const treeLength = treePath.length;\n    if (!treeLength)\n        return;\n    // Reset the treeScale\n    treeScale.x = treeScale.y = 1;\n    let node;\n    let delta;\n    for (let i = 0; i < treeLength; i++) {\n        node = treePath[i];\n        delta = node.projectionDelta;\n        /**\n         * TODO: Prefer to remove this, but currently we have motion components with\n         * display: contents in Framer.\n         */\n        const { visualElement } = node.options;\n        if (visualElement &&\n            visualElement.props.style &&\n            visualElement.props.style.display === \"contents\") {\n            continue;\n        }\n        if (isSharedTransition &&\n            node.options.layoutScroll &&\n            node.scroll &&\n            node !== node.root) {\n            transformBox(box, {\n                x: -node.scroll.offset.x,\n                y: -node.scroll.offset.y,\n            });\n        }\n        if (delta) {\n            // Incoporate each ancestor's scale into a culmulative treeScale for this component\n            treeScale.x *= delta.x.scale;\n            treeScale.y *= delta.y.scale;\n            // Apply each ancestor's calculated delta into this component's recorded layout box\n            applyBoxDelta(box, delta);\n        }\n        if (isSharedTransition && hasTransform(node.latestValues)) {\n            transformBox(box, node.latestValues);\n        }\n    }\n    /**\n     * Snap tree scale back to 1 if it's within a non-perceivable threshold.\n     * This will help reduce useless scales getting rendered.\n     */\n    if (treeScale.x < TREE_SCALE_SNAP_MAX &&\n        treeScale.x > TREE_SCALE_SNAP_MIN) {\n        treeScale.x = 1.0;\n    }\n    if (treeScale.y < TREE_SCALE_SNAP_MAX &&\n        treeScale.y > TREE_SCALE_SNAP_MIN) {\n        treeScale.y = 1.0;\n    }\n}\nfunction translateAxis(axis, distance) {\n    axis.min = axis.min + distance;\n    axis.max = axis.max + distance;\n}\n/**\n * Apply a transform to an axis from the latest resolved motion values.\n * This function basically acts as a bridge between a flat motion value map\n * and applyAxisDelta\n */\nfunction transformAxis(axis, axisTranslate, axisScale, boxScale, axisOrigin = 0.5) {\n    const originPoint = mixNumber(axis.min, axis.max, axisOrigin);\n    // Apply the axis delta to the final axis\n    applyAxisDelta(axis, axisTranslate, axisScale, originPoint, boxScale);\n}\n/**\n * Apply a transform to a box from the latest resolved motion values.\n */\nfunction transformBox(box, transform) {\n    transformAxis(box.x, transform.x, transform.scaleX, transform.scale, transform.originX);\n    transformAxis(box.y, transform.y, transform.scaleY, transform.scale, transform.originY);\n}\n\nexport { applyAxisDelta, applyBoxDelta, applyPointDelta, applyTreeDeltas, scalePoint, transformAxis, transformBox, translateAxis };\n","import { convertBoundingBoxToBox, transformBoxPoints } from '../geometry/conversion.mjs';\nimport { translateAxis } from '../geometry/delta-apply.mjs';\n\nfunction measureViewportBox(instance, transformPoint) {\n    return convertBoundingBoxToBox(transformBoxPoints(instance.getBoundingClientRect(), transformPoint));\n}\nfunction measurePageBox(element, rootProjectionNode, transformPagePoint) {\n    const viewportBox = measureViewportBox(element, transformPagePoint);\n    const { scroll } = rootProjectionNode;\n    if (scroll) {\n        translateAxis(viewportBox.x, scroll.offset.x);\n        translateAxis(viewportBox.y, scroll.offset.y);\n    }\n    return viewportBox;\n}\n\nexport { measurePageBox, measureViewportBox };\n","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 { addDomEvent } from './add-dom-event.mjs';\nimport { addPointerInfo } from './event-info.mjs';\n\nfunction addPointerEvent(target, eventName, handler, options) {\n    return addDomEvent(target, eventName, addPointerInfo(handler), options);\n}\n\nexport { addPointerEvent };\n","import { mixNumber } from 'motion-dom';\n\nconst SCALE_PRECISION = 0.0001;\nconst SCALE_MIN = 1 - SCALE_PRECISION;\nconst SCALE_MAX = 1 + SCALE_PRECISION;\nconst TRANSLATE_PRECISION = 0.01;\nconst TRANSLATE_MIN = 0 - TRANSLATE_PRECISION;\nconst TRANSLATE_MAX = 0 + TRANSLATE_PRECISION;\nfunction calcLength(axis) {\n    return axis.max - axis.min;\n}\nfunction isNear(value, target, maxDistance) {\n    return Math.abs(value - target) <= maxDistance;\n}\nfunction calcAxisDelta(delta, source, target, origin = 0.5) {\n    delta.origin = origin;\n    delta.originPoint = mixNumber(source.min, source.max, delta.origin);\n    delta.scale = calcLength(target) / calcLength(source);\n    delta.translate =\n        mixNumber(target.min, target.max, delta.origin) - delta.originPoint;\n    if ((delta.scale >= SCALE_MIN && delta.scale <= SCALE_MAX) ||\n        isNaN(delta.scale)) {\n        delta.scale = 1.0;\n    }\n    if ((delta.translate >= TRANSLATE_MIN &&\n        delta.translate <= TRANSLATE_MAX) ||\n        isNaN(delta.translate)) {\n        delta.translate = 0.0;\n    }\n}\nfunction calcBoxDelta(delta, source, target, origin) {\n    calcAxisDelta(delta.x, source.x, target.x, origin ? origin.originX : undefined);\n    calcAxisDelta(delta.y, source.y, target.y, origin ? origin.originY : undefined);\n}\nfunction calcRelativeAxis(target, relative, parent) {\n    target.min = parent.min + relative.min;\n    target.max = target.min + calcLength(relative);\n}\nfunction calcRelativeBox(target, relative, parent) {\n    calcRelativeAxis(target.x, relative.x, parent.x);\n    calcRelativeAxis(target.y, relative.y, parent.y);\n}\nfunction calcRelativeAxisPosition(target, layout, parent) {\n    target.min = layout.min - parent.min;\n    target.max = target.min + calcLength(layout);\n}\nfunction calcRelativePosition(target, layout, parent) {\n    calcRelativeAxisPosition(target.x, layout.x, parent.x);\n    calcRelativeAxisPosition(target.y, layout.y, parent.y);\n}\n\nexport { calcAxisDelta, calcBoxDelta, calcLength, calcRelativeAxis, calcRelativeAxisPosition, calcRelativeBox, calcRelativePosition, isNear };\n","function eachAxis(callback) {\n    return [callback(\"x\"), callback(\"y\")];\n}\n\nexport { eachAxis };\n","// Fixes https://github.com/motiondivision/motion/issues/2270\nconst getContextWindow = ({ current }) => {\n    return current ? current.ownerDocument.defaultView : null;\n};\n\nexport { getContextWindow };\n","const distance = (a, b) => Math.abs(a - b);\nfunction distance2D(a, b) {\n    // Multi-dimensional\n    const xDelta = distance(a.x, b.x);\n    const yDelta = distance(a.y, b.y);\n    return Math.sqrt(xDelta ** 2 + yDelta ** 2);\n}\n\nexport { distance, distance2D };\n","import { frame, isPrimaryPointer, cancelFrame, frameData } from 'motion-dom';\nimport { pipe, secondsToMilliseconds, millisecondsToSeconds } from 'motion-utils';\nimport { addPointerEvent } from '../../events/add-pointer-event.mjs';\nimport { extractEventInfo } from '../../events/event-info.mjs';\nimport { distance2D } from '../../utils/distance.mjs';\n\n/**\n * @internal\n */\nclass PanSession {\n    constructor(event, handlers, { transformPagePoint, contextWindow = window, dragSnapToOrigin = false, distanceThreshold = 3, } = {}) {\n        /**\n         * @internal\n         */\n        this.startEvent = null;\n        /**\n         * @internal\n         */\n        this.lastMoveEvent = null;\n        /**\n         * @internal\n         */\n        this.lastMoveEventInfo = null;\n        /**\n         * @internal\n         */\n        this.handlers = {};\n        /**\n         * @internal\n         */\n        this.contextWindow = window;\n        this.updatePoint = () => {\n            if (!(this.lastMoveEvent && this.lastMoveEventInfo))\n                return;\n            const info = getPanInfo(this.lastMoveEventInfo, this.history);\n            const isPanStarted = this.startEvent !== null;\n            // Only start panning if the offset is larger than 3 pixels. If we make it\n            // any larger than this we'll want to reset the pointer history\n            // on the first update to avoid visual snapping to the cursor.\n            const isDistancePastThreshold = distance2D(info.offset, { x: 0, y: 0 }) >= this.distanceThreshold;\n            if (!isPanStarted && !isDistancePastThreshold)\n                return;\n            const { point } = info;\n            const { timestamp } = frameData;\n            this.history.push({ ...point, timestamp });\n            const { onStart, onMove } = this.handlers;\n            if (!isPanStarted) {\n                onStart && onStart(this.lastMoveEvent, info);\n                this.startEvent = this.lastMoveEvent;\n            }\n            onMove && onMove(this.lastMoveEvent, info);\n        };\n        this.handlePointerMove = (event, info) => {\n            this.lastMoveEvent = event;\n            this.lastMoveEventInfo = transformPoint(info, this.transformPagePoint);\n            // Throttle mouse move event to once per frame\n            frame.update(this.updatePoint, true);\n        };\n        this.handlePointerUp = (event, info) => {\n            this.end();\n            const { onEnd, onSessionEnd, resumeAnimation } = this.handlers;\n            if (this.dragSnapToOrigin)\n                resumeAnimation && resumeAnimation();\n            if (!(this.lastMoveEvent && this.lastMoveEventInfo))\n                return;\n            const panInfo = getPanInfo(event.type === \"pointercancel\"\n                ? this.lastMoveEventInfo\n                : transformPoint(info, this.transformPagePoint), this.history);\n            if (this.startEvent && onEnd) {\n                onEnd(event, panInfo);\n            }\n            onSessionEnd && onSessionEnd(event, panInfo);\n        };\n        // If we have more than one touch, don't start detecting this gesture\n        if (!isPrimaryPointer(event))\n            return;\n        this.dragSnapToOrigin = dragSnapToOrigin;\n        this.handlers = handlers;\n        this.transformPagePoint = transformPagePoint;\n        this.distanceThreshold = distanceThreshold;\n        this.contextWindow = contextWindow || window;\n        const info = extractEventInfo(event);\n        const initialInfo = transformPoint(info, this.transformPagePoint);\n        const { point } = initialInfo;\n        const { timestamp } = frameData;\n        this.history = [{ ...point, timestamp }];\n        const { onSessionStart } = handlers;\n        onSessionStart &&\n            onSessionStart(event, getPanInfo(initialInfo, this.history));\n        this.removeListeners = pipe(addPointerEvent(this.contextWindow, \"pointermove\", this.handlePointerMove), addPointerEvent(this.contextWindow, \"pointerup\", this.handlePointerUp), addPointerEvent(this.contextWindow, \"pointercancel\", this.handlePointerUp));\n    }\n    updateHandlers(handlers) {\n        this.handlers = handlers;\n    }\n    end() {\n        this.removeListeners && this.removeListeners();\n        cancelFrame(this.updatePoint);\n    }\n}\nfunction transformPoint(info, transformPagePoint) {\n    return transformPagePoint ? { point: transformPagePoint(info.point) } : info;\n}\nfunction subtractPoint(a, b) {\n    return { x: a.x - b.x, y: a.y - b.y };\n}\nfunction getPanInfo({ point }, history) {\n    return {\n        point,\n        delta: subtractPoint(point, lastDevicePoint(history)),\n        offset: subtractPoint(point, startDevicePoint(history)),\n        velocity: getVelocity(history, 0.1),\n    };\n}\nfunction startDevicePoint(history) {\n    return history[0];\n}\nfunction lastDevicePoint(history) {\n    return history[history.length - 1];\n}\nfunction getVelocity(history, timeDelta) {\n    if (history.length < 2) {\n        return { x: 0, y: 0 };\n    }\n    let i = history.length - 1;\n    let timestampedPoint = null;\n    const lastPoint = lastDevicePoint(history);\n    while (i >= 0) {\n        timestampedPoint = history[i];\n        if (lastPoint.timestamp - timestampedPoint.timestamp >\n            secondsToMilliseconds(timeDelta)) {\n            break;\n        }\n        i--;\n    }\n    if (!timestampedPoint) {\n        return { x: 0, y: 0 };\n    }\n    const time = millisecondsToSeconds(lastPoint.timestamp - timestampedPoint.timestamp);\n    if (time === 0) {\n        return { x: 0, y: 0 };\n    }\n    const currentVelocity = {\n        x: (lastPoint.x - timestampedPoint.x) / time,\n        y: (lastPoint.y - timestampedPoint.y) / time,\n    };\n    if (currentVelocity.x === Infinity) {\n        currentVelocity.x = 0;\n    }\n    if (currentVelocity.y === Infinity) {\n        currentVelocity.y = 0;\n    }\n    return currentVelocity;\n}\n\nexport { PanSession };\n","import { mixNumber } from 'motion-dom';\nimport { progress, clamp } from 'motion-utils';\nimport { calcLength } from '../../../projection/geometry/delta-calc.mjs';\n\n/**\n * Apply constraints to a point. These constraints are both physical along an\n * axis, and an elastic factor that determines how much to constrain the point\n * by if it does lie outside the defined parameters.\n */\nfunction applyConstraints(point, { min, max }, elastic) {\n    if (min !== undefined && point < min) {\n        // If we have a min point defined, and this is outside of that, constrain\n        point = elastic\n            ? mixNumber(min, point, elastic.min)\n            : Math.max(point, min);\n    }\n    else if (max !== undefined && point > max) {\n        // If we have a max point defined, and this is outside of that, constrain\n        point = elastic\n            ? mixNumber(max, point, elastic.max)\n            : Math.min(point, max);\n    }\n    return point;\n}\n/**\n * Calculate constraints in terms of the viewport when defined relatively to the\n * measured axis. This is measured from the nearest edge, so a max constraint of 200\n * on an axis with a max value of 300 would return a constraint of 500 - axis length\n */\nfunction calcRelativeAxisConstraints(axis, min, max) {\n    return {\n        min: min !== undefined ? axis.min + min : undefined,\n        max: max !== undefined\n            ? axis.max + max - (axis.max - axis.min)\n            : undefined,\n    };\n}\n/**\n * Calculate constraints in terms of the viewport when\n * defined relatively to the measured bounding box.\n */\nfunction calcRelativeConstraints(layoutBox, { top, left, bottom, right }) {\n    return {\n        x: calcRelativeAxisConstraints(layoutBox.x, left, right),\n        y: calcRelativeAxisConstraints(layoutBox.y, top, bottom),\n    };\n}\n/**\n * Calculate viewport constraints when defined as another viewport-relative axis\n */\nfunction calcViewportAxisConstraints(layoutAxis, constraintsAxis) {\n    let min = constraintsAxis.min - layoutAxis.min;\n    let max = constraintsAxis.max - layoutAxis.max;\n    // If the constraints axis is actually smaller than the layout axis then we can\n    // flip the constraints\n    if (constraintsAxis.max - constraintsAxis.min <\n        layoutAxis.max - layoutAxis.min) {\n        [min, max] = [max, min];\n    }\n    return { min, max };\n}\n/**\n * Calculate viewport constraints when defined as another viewport-relative box\n */\nfunction calcViewportConstraints(layoutBox, constraintsBox) {\n    return {\n        x: calcViewportAxisConstraints(layoutBox.x, constraintsBox.x),\n        y: calcViewportAxisConstraints(layoutBox.y, constraintsBox.y),\n    };\n}\n/**\n * Calculate a transform origin relative to the source axis, between 0-1, that results\n * in an asthetically pleasing scale/transform needed to project from source to target.\n */\nfunction calcOrigin(source, target) {\n    let origin = 0.5;\n    const sourceLength = calcLength(source);\n    const targetLength = calcLength(target);\n    if (targetLength > sourceLength) {\n        origin = progress(target.min, target.max - sourceLength, source.min);\n    }\n    else if (sourceLength > targetLength) {\n        origin = progress(source.min, source.max - targetLength, target.min);\n    }\n    return clamp(0, 1, origin);\n}\n/**\n * Rebase the calculated viewport constraints relative to the layout.min point.\n */\nfunction rebaseAxisConstraints(layout, constraints) {\n    const relativeConstraints = {};\n    if (constraints.min !== undefined) {\n        relativeConstraints.min = constraints.min - layout.min;\n    }\n    if (constraints.max !== undefined) {\n        relativeConstraints.max = constraints.max - layout.min;\n    }\n    return relativeConstraints;\n}\nconst defaultElastic = 0.35;\n/**\n * Accepts a dragElastic prop and returns resolved elastic values for each axis.\n */\nfunction resolveDragElastic(dragElastic = defaultElastic) {\n    if (dragElastic === false) {\n        dragElastic = 0;\n    }\n    else if (dragElastic === true) {\n        dragElastic = defaultElastic;\n    }\n    return {\n        x: resolveAxisElastic(dragElastic, \"left\", \"right\"),\n        y: resolveAxisElastic(dragElastic, \"top\", \"bottom\"),\n    };\n}\nfunction resolveAxisElastic(dragElastic, minLabel, maxLabel) {\n    return {\n        min: resolvePointElastic(dragElastic, minLabel),\n        max: resolvePointElastic(dragElastic, maxLabel),\n    };\n}\nfunction resolvePointElastic(dragElastic, label) {\n    return typeof dragElastic === \"number\"\n        ? dragElastic\n        : dragElastic[label] || 0;\n}\n\nexport { applyConstraints, calcOrigin, calcRelativeAxisConstraints, calcRelativeConstraints, calcViewportAxisConstraints, calcViewportConstraints, defaultElastic, rebaseAxisConstraints, resolveAxisElastic, resolveDragElastic, resolvePointElastic };\n","import { frame, mixNumber, setDragLock, percent } from 'motion-dom';\nimport { invariant } from 'motion-utils';\nimport { animateMotionValue } from '../../animation/interfaces/motion-value.mjs';\nimport { addDomEvent } from '../../events/add-dom-event.mjs';\nimport { addPointerEvent } from '../../events/add-pointer-event.mjs';\nimport { extractEventInfo } from '../../events/event-info.mjs';\nimport { convertBoxToBoundingBox, convertBoundingBoxToBox } from '../../projection/geometry/conversion.mjs';\nimport { calcLength } from '../../projection/geometry/delta-calc.mjs';\nimport { createBox } from '../../projection/geometry/models.mjs';\nimport { eachAxis } from '../../projection/utils/each-axis.mjs';\nimport { measurePageBox } from '../../projection/utils/measure.mjs';\nimport { getContextWindow } from '../../utils/get-context-window.mjs';\nimport { isRefObject } from '../../utils/is-ref-object.mjs';\nimport { addValueToWillChange } from '../../value/use-will-change/add-will-change.mjs';\nimport { PanSession } from '../pan/PanSession.mjs';\nimport { applyConstraints, calcRelativeConstraints, resolveDragElastic, rebaseAxisConstraints, calcViewportConstraints, calcOrigin, defaultElastic } from './utils/constraints.mjs';\n\nconst elementDragControls = new WeakMap();\nclass VisualElementDragControls {\n    constructor(visualElement) {\n        this.openDragLock = null;\n        this.isDragging = false;\n        this.currentDirection = null;\n        this.originPoint = { x: 0, y: 0 };\n        /**\n         * The permitted boundaries of travel, in pixels.\n         */\n        this.constraints = false;\n        this.hasMutatedConstraints = false;\n        /**\n         * The per-axis resolved elastic values.\n         */\n        this.elastic = createBox();\n        /**\n         * The latest pointer event. Used as fallback when the `cancel` and `stop` functions are called without arguments.\n         */\n        this.latestPointerEvent = null;\n        /**\n         * The latest pan info. Used as fallback when the `cancel` and `stop` functions are called without arguments.\n         */\n        this.latestPanInfo = null;\n        this.visualElement = visualElement;\n    }\n    start(originEvent, { snapToCursor = false, distanceThreshold } = {}) {\n        /**\n         * Don't start dragging if this component is exiting\n         */\n        const { presenceContext } = this.visualElement;\n        if (presenceContext && presenceContext.isPresent === false)\n            return;\n        const onSessionStart = (event) => {\n            const { dragSnapToOrigin } = this.getProps();\n            // Stop or pause any animations on both axis values immediately. This allows the user to throw and catch\n            // the component.\n            dragSnapToOrigin ? this.pauseAnimation() : this.stopAnimation();\n            if (snapToCursor) {\n                this.snapToCursor(extractEventInfo(event).point);\n            }\n        };\n        const onStart = (event, info) => {\n            // Attempt to grab the global drag gesture lock - maybe make this part of PanSession\n            const { drag, dragPropagation, onDragStart } = this.getProps();\n            if (drag && !dragPropagation) {\n                if (this.openDragLock)\n                    this.openDragLock();\n                this.openDragLock = setDragLock(drag);\n                // If we don 't have the lock, don't start dragging\n                if (!this.openDragLock)\n                    return;\n            }\n            this.latestPointerEvent = event;\n            this.latestPanInfo = info;\n            this.isDragging = true;\n            this.currentDirection = null;\n            this.resolveConstraints();\n            if (this.visualElement.projection) {\n                this.visualElement.projection.isAnimationBlocked = true;\n                this.visualElement.projection.target = undefined;\n            }\n            /**\n             * Record gesture origin\n             */\n            eachAxis((axis) => {\n                let current = this.getAxisMotionValue(axis).get() || 0;\n                /**\n                 * If the MotionValue is a percentage value convert to px\n                 */\n                if (percent.test(current)) {\n                    const { projection } = this.visualElement;\n                    if (projection && projection.layout) {\n                        const measuredAxis = projection.layout.layoutBox[axis];\n                        if (measuredAxis) {\n                            const length = calcLength(measuredAxis);\n                            current = length * (parseFloat(current) / 100);\n                        }\n                    }\n                }\n                this.originPoint[axis] = current;\n            });\n            // Fire onDragStart event\n            if (onDragStart) {\n                frame.postRender(() => onDragStart(event, info));\n            }\n            addValueToWillChange(this.visualElement, \"transform\");\n            const { animationState } = this.visualElement;\n            animationState && animationState.setActive(\"whileDrag\", true);\n        };\n        const onMove = (event, info) => {\n            this.latestPointerEvent = event;\n            this.latestPanInfo = info;\n            const { dragPropagation, dragDirectionLock, onDirectionLock, onDrag, } = this.getProps();\n            // If we didn't successfully receive the gesture lock, early return.\n            if (!dragPropagation && !this.openDragLock)\n                return;\n            const { offset } = info;\n            // Attempt to detect drag direction if directionLock is true\n            if (dragDirectionLock && this.currentDirection === null) {\n                this.currentDirection = getCurrentDirection(offset);\n                // If we've successfully set a direction, notify listener\n                if (this.currentDirection !== null) {\n                    onDirectionLock && onDirectionLock(this.currentDirection);\n                }\n                return;\n            }\n            // Update each point with the latest position\n            this.updateAxis(\"x\", info.point, offset);\n            this.updateAxis(\"y\", info.point, offset);\n            /**\n             * Ideally we would leave the renderer to fire naturally at the end of\n             * this frame but if the element is about to change layout as the result\n             * of a re-render we want to ensure the browser can read the latest\n             * bounding box to ensure the pointer and element don't fall out of sync.\n             */\n            this.visualElement.render();\n            /**\n             * This must fire after the render call as it might trigger a state\n             * change which itself might trigger a layout update.\n             */\n            onDrag && onDrag(event, info);\n        };\n        const onSessionEnd = (event, info) => {\n            this.latestPointerEvent = event;\n            this.latestPanInfo = info;\n            this.stop(event, info);\n            this.latestPointerEvent = null;\n            this.latestPanInfo = null;\n        };\n        const resumeAnimation = () => eachAxis((axis) => this.getAnimationState(axis) === \"paused\" &&\n            this.getAxisMotionValue(axis).animation?.play());\n        const { dragSnapToOrigin } = this.getProps();\n        this.panSession = new PanSession(originEvent, {\n            onSessionStart,\n            onStart,\n            onMove,\n            onSessionEnd,\n            resumeAnimation,\n        }, {\n            transformPagePoint: this.visualElement.getTransformPagePoint(),\n            dragSnapToOrigin,\n            distanceThreshold,\n            contextWindow: getContextWindow(this.visualElement),\n        });\n    }\n    /**\n     * @internal\n     */\n    stop(event, panInfo) {\n        const finalEvent = event || this.latestPointerEvent;\n        const finalPanInfo = panInfo || this.latestPanInfo;\n        const isDragging = this.isDragging;\n        this.cancel();\n        if (!isDragging || !finalPanInfo || !finalEvent)\n            return;\n        const { velocity } = finalPanInfo;\n        this.startAnimation(velocity);\n        const { onDragEnd } = this.getProps();\n        if (onDragEnd) {\n            frame.postRender(() => onDragEnd(finalEvent, finalPanInfo));\n        }\n    }\n    /**\n     * @internal\n     */\n    cancel() {\n        this.isDragging = false;\n        const { projection, animationState } = this.visualElement;\n        if (projection) {\n            projection.isAnimationBlocked = false;\n        }\n        this.panSession && this.panSession.end();\n        this.panSession = undefined;\n        const { dragPropagation } = this.getProps();\n        if (!dragPropagation && this.openDragLock) {\n            this.openDragLock();\n            this.openDragLock = null;\n        }\n        animationState && animationState.setActive(\"whileDrag\", false);\n    }\n    updateAxis(axis, _point, offset) {\n        const { drag } = this.getProps();\n        // If we're not dragging this axis, do an early return.\n        if (!offset || !shouldDrag(axis, drag, this.currentDirection))\n            return;\n        const axisValue = this.getAxisMotionValue(axis);\n        let next = this.originPoint[axis] + offset[axis];\n        // Apply constraints\n        if (this.constraints && this.constraints[axis]) {\n            next = applyConstraints(next, this.constraints[axis], this.elastic[axis]);\n        }\n        axisValue.set(next);\n    }\n    resolveConstraints() {\n        const { dragConstraints, dragElastic } = this.getProps();\n        const layout = this.visualElement.projection &&\n            !this.visualElement.projection.layout\n            ? this.visualElement.projection.measure(false)\n            : this.visualElement.projection?.layout;\n        const prevConstraints = this.constraints;\n        if (dragConstraints && isRefObject(dragConstraints)) {\n            if (!this.constraints) {\n                this.constraints = this.resolveRefConstraints();\n            }\n        }\n        else {\n            if (dragConstraints && layout) {\n                this.constraints = calcRelativeConstraints(layout.layoutBox, dragConstraints);\n            }\n            else {\n                this.constraints = false;\n            }\n        }\n        this.elastic = resolveDragElastic(dragElastic);\n        /**\n         * If we're outputting to external MotionValues, we want to rebase the measured constraints\n         * from viewport-relative to component-relative.\n         */\n        if (prevConstraints !== this.constraints &&\n            layout &&\n            this.constraints &&\n            !this.hasMutatedConstraints) {\n            eachAxis((axis) => {\n                if (this.constraints !== false &&\n                    this.getAxisMotionValue(axis)) {\n                    this.constraints[axis] = rebaseAxisConstraints(layout.layoutBox[axis], this.constraints[axis]);\n                }\n            });\n        }\n    }\n    resolveRefConstraints() {\n        const { dragConstraints: constraints, onMeasureDragConstraints } = this.getProps();\n        if (!constraints || !isRefObject(constraints))\n            return false;\n        const constraintsElement = constraints.current;\n        invariant(constraintsElement !== null, \"If `dragConstraints` is set as a React ref, that ref must be passed to another component's `ref` prop.\", \"drag-constraints-ref\");\n        const { projection } = this.visualElement;\n        // TODO\n        if (!projection || !projection.layout)\n            return false;\n        const constraintsBox = measurePageBox(constraintsElement, projection.root, this.visualElement.getTransformPagePoint());\n        let measuredConstraints = calcViewportConstraints(projection.layout.layoutBox, constraintsBox);\n        /**\n         * If there's an onMeasureDragConstraints listener we call it and\n         * if different constraints are returned, set constraints to that\n         */\n        if (onMeasureDragConstraints) {\n            const userConstraints = onMeasureDragConstraints(convertBoxToBoundingBox(measuredConstraints));\n            this.hasMutatedConstraints = !!userConstraints;\n            if (userConstraints) {\n                measuredConstraints = convertBoundingBoxToBox(userConstraints);\n            }\n        }\n        return measuredConstraints;\n    }\n    startAnimation(velocity) {\n        const { drag, dragMomentum, dragElastic, dragTransition, dragSnapToOrigin, onDragTransitionEnd, } = this.getProps();\n        const constraints = this.constraints || {};\n        const momentumAnimations = eachAxis((axis) => {\n            if (!shouldDrag(axis, drag, this.currentDirection)) {\n                return;\n            }\n            let transition = (constraints && constraints[axis]) || {};\n            if (dragSnapToOrigin)\n                transition = { min: 0, max: 0 };\n            /**\n             * Overdamp the boundary spring if `dragElastic` is disabled. There's still a frame\n             * of spring animations so we should look into adding a disable spring option to `inertia`.\n             * We could do something here where we affect the `bounceStiffness` and `bounceDamping`\n             * using the value of `dragElastic`.\n             */\n            const bounceStiffness = dragElastic ? 200 : 1000000;\n            const bounceDamping = dragElastic ? 40 : 10000000;\n            const inertia = {\n                type: \"inertia\",\n                velocity: dragMomentum ? velocity[axis] : 0,\n                bounceStiffness,\n                bounceDamping,\n                timeConstant: 750,\n                restDelta: 1,\n                restSpeed: 10,\n                ...dragTransition,\n                ...transition,\n            };\n            // If we're not animating on an externally-provided `MotionValue` we can use the\n            // component's animation controls which will handle interactions with whileHover (etc),\n            // otherwise we just have to animate the `MotionValue` itself.\n            return this.startAxisValueAnimation(axis, inertia);\n        });\n        // Run all animations and then resolve the new drag constraints.\n        return Promise.all(momentumAnimations).then(onDragTransitionEnd);\n    }\n    startAxisValueAnimation(axis, transition) {\n        const axisValue = this.getAxisMotionValue(axis);\n        addValueToWillChange(this.visualElement, axis);\n        return axisValue.start(animateMotionValue(axis, axisValue, 0, transition, this.visualElement, false));\n    }\n    stopAnimation() {\n        eachAxis((axis) => this.getAxisMotionValue(axis).stop());\n    }\n    pauseAnimation() {\n        eachAxis((axis) => this.getAxisMotionValue(axis).animation?.pause());\n    }\n    getAnimationState(axis) {\n        return this.getAxisMotionValue(axis).animation?.state;\n    }\n    /**\n     * Drag works differently depending on which props are provided.\n     *\n     * - If _dragX and _dragY are provided, we output the gesture delta directly to those motion values.\n     * - Otherwise, we apply the delta to the x/y motion values.\n     */\n    getAxisMotionValue(axis) {\n        const dragKey = `_drag${axis.toUpperCase()}`;\n        const props = this.visualElement.getProps();\n        const externalMotionValue = props[dragKey];\n        return externalMotionValue\n            ? externalMotionValue\n            : this.visualElement.getValue(axis, (props.initial\n                ? props.initial[axis]\n                : undefined) || 0);\n    }\n    snapToCursor(point) {\n        eachAxis((axis) => {\n            const { drag } = this.getProps();\n            // If we're not dragging this axis, do an early return.\n            if (!shouldDrag(axis, drag, this.currentDirection))\n                return;\n            const { projection } = this.visualElement;\n            const axisValue = this.getAxisMotionValue(axis);\n            if (projection && projection.layout) {\n                const { min, max } = projection.layout.layoutBox[axis];\n                axisValue.set(point[axis] - mixNumber(min, max, 0.5));\n            }\n        });\n    }\n    /**\n     * When the viewport resizes we want to check if the measured constraints\n     * have changed and, if so, reposition the element within those new constraints\n     * relative to where it was before the resize.\n     */\n    scalePositionWithinConstraints() {\n        if (!this.visualElement.current)\n            return;\n        const { drag, dragConstraints } = this.getProps();\n        const { projection } = this.visualElement;\n        if (!isRefObject(dragConstraints) || !projection || !this.constraints)\n            return;\n        /**\n         * Stop current animations as there can be visual glitching if we try to do\n         * this mid-animation\n         */\n        this.stopAnimation();\n        /**\n         * Record the relative position of the dragged element relative to the\n         * constraints box and save as a progress value.\n         */\n        const boxProgress = { x: 0, y: 0 };\n        eachAxis((axis) => {\n            const axisValue = this.getAxisMotionValue(axis);\n            if (axisValue && this.constraints !== false) {\n                const latest = axisValue.get();\n                boxProgress[axis] = calcOrigin({ min: latest, max: latest }, this.constraints[axis]);\n            }\n        });\n        /**\n         * Update the layout of this element and resolve the latest drag constraints\n         */\n        const { transformTemplate } = this.visualElement.getProps();\n        this.visualElement.current.style.transform = transformTemplate\n            ? transformTemplate({}, \"\")\n            : \"none\";\n        projection.root && projection.root.updateScroll();\n        projection.updateLayout();\n        this.resolveConstraints();\n        /**\n         * For each axis, calculate the current progress of the layout axis\n         * within the new constraints.\n         */\n        eachAxis((axis) => {\n            if (!shouldDrag(axis, drag, null))\n                return;\n            /**\n             * Calculate a new transform based on the previous box progress\n             */\n            const axisValue = this.getAxisMotionValue(axis);\n            const { min, max } = this.constraints[axis];\n            axisValue.set(mixNumber(min, max, boxProgress[axis]));\n        });\n    }\n    addListeners() {\n        if (!this.visualElement.current)\n            return;\n        elementDragControls.set(this.visualElement, this);\n        const element = this.visualElement.current;\n        /**\n         * Attach a pointerdown event listener on this DOM element to initiate drag tracking.\n         */\n        const stopPointerListener = addPointerEvent(element, \"pointerdown\", (event) => {\n            const { drag, dragListener = true } = this.getProps();\n            drag && dragListener && this.start(event);\n        });\n        const measureDragConstraints = () => {\n            const { dragConstraints } = this.getProps();\n            if (isRefObject(dragConstraints) && dragConstraints.current) {\n                this.constraints = this.resolveRefConstraints();\n            }\n        };\n        const { projection } = this.visualElement;\n        const stopMeasureLayoutListener = projection.addEventListener(\"measure\", measureDragConstraints);\n        if (projection && !projection.layout) {\n            projection.root && projection.root.updateScroll();\n            projection.updateLayout();\n        }\n        frame.read(measureDragConstraints);\n        /**\n         * Attach a window resize listener to scale the draggable target within its defined\n         * constraints as the window resizes.\n         */\n        const stopResizeListener = addDomEvent(window, \"resize\", () => this.scalePositionWithinConstraints());\n        /**\n         * If the element's layout changes, calculate the delta and apply that to\n         * the drag gesture's origin point.\n         */\n        const stopLayoutUpdateListener = projection.addEventListener(\"didUpdate\", (({ delta, hasLayoutChanged }) => {\n            if (this.isDragging && hasLayoutChanged) {\n                eachAxis((axis) => {\n                    const motionValue = this.getAxisMotionValue(axis);\n                    if (!motionValue)\n                        return;\n                    this.originPoint[axis] += delta[axis].translate;\n                    motionValue.set(motionValue.get() + delta[axis].translate);\n                });\n                this.visualElement.render();\n            }\n        }));\n        return () => {\n            stopResizeListener();\n            stopPointerListener();\n            stopMeasureLayoutListener();\n            stopLayoutUpdateListener && stopLayoutUpdateListener();\n        };\n    }\n    getProps() {\n        const props = this.visualElement.getProps();\n        const { drag = false, dragDirectionLock = false, dragPropagation = false, dragConstraints = false, dragElastic = defaultElastic, dragMomentum = true, } = props;\n        return {\n            ...props,\n            drag,\n            dragDirectionLock,\n            dragPropagation,\n            dragConstraints,\n            dragElastic,\n            dragMomentum,\n        };\n    }\n}\nfunction shouldDrag(direction, drag, currentDirection) {\n    return ((drag === true || drag === direction) &&\n        (currentDirection === null || currentDirection === direction));\n}\n/**\n * Based on an x/y offset determine the current drag direction. If both axis' offsets are lower\n * than the provided threshold, return `null`.\n *\n * @param offset - The x/y offset from origin.\n * @param lockThreshold - (Optional) - the minimum absolute offset before we can determine a drag direction.\n */\nfunction getCurrentDirection(offset, lockThreshold = 10) {\n    let direction = null;\n    if (Math.abs(offset.y) > lockThreshold) {\n        direction = \"y\";\n    }\n    else if (Math.abs(offset.x) > lockThreshold) {\n        direction = \"x\";\n    }\n    return direction;\n}\n\nexport { VisualElementDragControls, elementDragControls };\n","import { Feature } from '../../motion/features/Feature.mjs';\nimport { noop } from 'motion-utils';\nimport { VisualElementDragControls } from './VisualElementDragControls.mjs';\n\nclass DragGesture extends Feature {\n    constructor(node) {\n        super(node);\n        this.removeGroupControls = noop;\n        this.removeListeners = noop;\n        this.controls = new VisualElementDragControls(node);\n    }\n    mount() {\n        // If we've been provided a DragControls for manual control over the drag gesture,\n        // subscribe this component to it on mount.\n        const { dragControls } = this.node.getProps();\n        if (dragControls) {\n            this.removeGroupControls = dragControls.subscribe(this.controls);\n        }\n        this.removeListeners = this.controls.addListeners() || noop;\n    }\n    unmount() {\n        this.removeGroupControls();\n        this.removeListeners();\n    }\n}\n\nexport { DragGesture };\n","import { frame } from 'motion-dom';\nimport { noop } from 'motion-utils';\nimport { addPointerEvent } from '../../events/add-pointer-event.mjs';\nimport { Feature } from '../../motion/features/Feature.mjs';\nimport { getContextWindow } from '../../utils/get-context-window.mjs';\nimport { PanSession } from './PanSession.mjs';\n\nconst asyncHandler = (handler) => (event, info) => {\n    if (handler) {\n        frame.postRender(() => handler(event, info));\n    }\n};\nclass PanGesture extends Feature {\n    constructor() {\n        super(...arguments);\n        this.removePointerDownListener = noop;\n    }\n    onPointerDown(pointerDownEvent) {\n        this.session = new PanSession(pointerDownEvent, this.createPanHandlers(), {\n            transformPagePoint: this.node.getTransformPagePoint(),\n            contextWindow: getContextWindow(this.node),\n        });\n    }\n    createPanHandlers() {\n        const { onPanSessionStart, onPanStart, onPan, onPanEnd } = this.node.getProps();\n        return {\n            onSessionStart: asyncHandler(onPanSessionStart),\n            onStart: asyncHandler(onPanStart),\n            onMove: onPan,\n            onEnd: (event, info) => {\n                delete this.session;\n                if (onPanEnd) {\n                    frame.postRender(() => onPanEnd(event, info));\n                }\n            },\n        };\n    }\n    mount() {\n        this.removePointerDownListener = addPointerEvent(this.node.current, \"pointerdown\", (event) => this.onPointerDown(event));\n    }\n    update() {\n        this.session && this.session.updateHandlers(this.createPanHandlers());\n    }\n    unmount() {\n        this.removePointerDownListener();\n        this.session && this.session.end();\n    }\n}\n\nexport { PanGesture };\n","/**\n * This should only ever be modified on the client otherwise it'll\n * persist through server requests. If we need instanced states we\n * could lazy-init via root.\n */\nconst globalProjectionState = {\n    /**\n     * Global flag as to whether the tree has animated since the last time\n     * we resized the window\n     */\n    hasAnimatedSinceResize: true,\n    /**\n     * We set this to true once, on the first update. Any nodes added to the tree beyond that\n     * update will be given a `data-projection-id` attribute.\n     */\n    hasEverUpdated: false,\n};\n\nexport { globalProjectionState };\n","import { px } from 'motion-dom';\n\nfunction pixelsToPercent(pixels, axis) {\n    if (axis.max === axis.min)\n        return 0;\n    return (pixels / (axis.max - axis.min)) * 100;\n}\n/**\n * We always correct borderRadius as a percentage rather than pixels to reduce paints.\n * For example, if you are projecting a box that is 100px wide with a 10px borderRadius\n * into a box that is 200px wide with a 20px borderRadius, that is actually a 10%\n * borderRadius in both states. If we animate between the two in pixels that will trigger\n * a paint each time. If we animate between the two in percentage we'll avoid a paint.\n */\nconst correctBorderRadius = {\n    correct: (latest, node) => {\n        if (!node.target)\n            return latest;\n        /**\n         * If latest is a string, if it's a percentage we can return immediately as it's\n         * going to be stretched appropriately. Otherwise, if it's a pixel, convert it to a number.\n         */\n        if (typeof latest === \"string\") {\n            if (px.test(latest)) {\n                latest = parseFloat(latest);\n            }\n            else {\n                return latest;\n            }\n        }\n        /**\n         * If latest is a number, it's a pixel value. We use the current viewportBox to calculate that\n         * pixel value as a percentage of each axis\n         */\n        const x = pixelsToPercent(latest, node.target.x);\n        const y = pixelsToPercent(latest, node.target.y);\n        return `${x}% ${y}%`;\n    },\n};\n\nexport { correctBorderRadius, pixelsToPercent };\n","import { complex, mixNumber } from 'motion-dom';\n\nconst correctBoxShadow = {\n    correct: (latest, { treeScale, projectionDelta }) => {\n        const original = latest;\n        const shadow = complex.parse(latest);\n        // TODO: Doesn't support multiple shadows\n        if (shadow.length > 5)\n            return original;\n        const template = complex.createTransformer(latest);\n        const offset = typeof shadow[0] !== \"number\" ? 1 : 0;\n        // Calculate the overall context scale\n        const xScale = projectionDelta.x.scale * treeScale.x;\n        const yScale = projectionDelta.y.scale * treeScale.y;\n        shadow[0 + offset] /= xScale;\n        shadow[1 + offset] /= yScale;\n        /**\n         * Ideally we'd correct x and y scales individually, but because blur and\n         * spread apply to both we have to take a scale average and apply that instead.\n         * We could potentially improve the outcome of this by incorporating the ratio between\n         * the two scales.\n         */\n        const averageScale = mixNumber(xScale, yScale, 0.5);\n        // Blur\n        if (typeof shadow[2 + offset] === \"number\")\n            shadow[2 + offset] /= averageScale;\n        // Spread\n        if (typeof shadow[3 + offset] === \"number\")\n            shadow[3 + offset] /= averageScale;\n        return template(shadow);\n    },\n};\n\nexport { correctBoxShadow };\n","\"use client\";\nimport { jsx } from 'react/jsx-runtime';\nimport { frame, microtask } from 'motion-dom';\nimport { useContext, Component } from 'react';\nimport { usePresence } from '../../../components/AnimatePresence/use-presence.mjs';\nimport { LayoutGroupContext } from '../../../context/LayoutGroupContext.mjs';\nimport { SwitchLayoutGroupContext } from '../../../context/SwitchLayoutGroupContext.mjs';\nimport { globalProjectionState } from '../../../projection/node/state.mjs';\nimport { correctBorderRadius } from '../../../projection/styles/scale-border-radius.mjs';\nimport { correctBoxShadow } from '../../../projection/styles/scale-box-shadow.mjs';\nimport { addScaleCorrector } from '../../../projection/styles/scale-correction.mjs';\n\n/**\n * Track whether we've taken any snapshots yet. If not,\n * we can safely skip notification of didUpdate.\n *\n * Difficult to capture in a test but to prevent flickering\n * we must set this to true either on update or unmount.\n * Running `next-env/layout-id` in Safari will show this behaviour if broken.\n */\nlet hasTakenAnySnapshot = false;\nclass MeasureLayoutWithContext extends Component {\n    /**\n     * This only mounts projection nodes for components that\n     * need measuring, we might want to do it for all components\n     * in order to incorporate transforms\n     */\n    componentDidMount() {\n        const { visualElement, layoutGroup, switchLayoutGroup, layoutId } = this.props;\n        const { projection } = visualElement;\n        addScaleCorrector(defaultScaleCorrectors);\n        if (projection) {\n            if (layoutGroup.group)\n                layoutGroup.group.add(projection);\n            if (switchLayoutGroup && switchLayoutGroup.register && layoutId) {\n                switchLayoutGroup.register(projection);\n            }\n            if (hasTakenAnySnapshot) {\n                projection.root.didUpdate();\n            }\n            projection.addEventListener(\"animationComplete\", () => {\n                this.safeToRemove();\n            });\n            projection.setOptions({\n                ...projection.options,\n                onExitComplete: () => this.safeToRemove(),\n            });\n        }\n        globalProjectionState.hasEverUpdated = true;\n    }\n    getSnapshotBeforeUpdate(prevProps) {\n        const { layoutDependency, visualElement, drag, isPresent } = this.props;\n        const { projection } = visualElement;\n        if (!projection)\n            return null;\n        /**\n         * TODO: We use this data in relegate to determine whether to\n         * promote a previous element. There's no guarantee its presence data\n         * will have updated by this point - if a bug like this arises it will\n         * have to be that we markForRelegation and then find a new lead some other way,\n         * perhaps in didUpdate\n         */\n        projection.isPresent = isPresent;\n        hasTakenAnySnapshot = true;\n        if (drag ||\n            prevProps.layoutDependency !== layoutDependency ||\n            layoutDependency === undefined ||\n            prevProps.isPresent !== isPresent) {\n            projection.willUpdate();\n        }\n        else {\n            this.safeToRemove();\n        }\n        if (prevProps.isPresent !== isPresent) {\n            if (isPresent) {\n                projection.promote();\n            }\n            else if (!projection.relegate()) {\n                /**\n                 * If there's another stack member taking over from this one,\n                 * it's in charge of the exit animation and therefore should\n                 * be in charge of the safe to remove. Otherwise we call it here.\n                 */\n                frame.postRender(() => {\n                    const stack = projection.getStack();\n                    if (!stack || !stack.members.length) {\n                        this.safeToRemove();\n                    }\n                });\n            }\n        }\n        return null;\n    }\n    componentDidUpdate() {\n        const { projection } = this.props.visualElement;\n        if (projection) {\n            projection.root.didUpdate();\n            microtask.postRender(() => {\n                if (!projection.currentAnimation && projection.isLead()) {\n                    this.safeToRemove();\n                }\n            });\n        }\n    }\n    componentWillUnmount() {\n        const { visualElement, layoutGroup, switchLayoutGroup: promoteContext, } = this.props;\n        const { projection } = visualElement;\n        hasTakenAnySnapshot = true;\n        if (projection) {\n            projection.scheduleCheckAfterUnmount();\n            if (layoutGroup && layoutGroup.group)\n                layoutGroup.group.remove(projection);\n            if (promoteContext && promoteContext.deregister)\n                promoteContext.deregister(projection);\n        }\n    }\n    safeToRemove() {\n        const { safeToRemove } = this.props;\n        safeToRemove && safeToRemove();\n    }\n    render() {\n        return null;\n    }\n}\nfunction MeasureLayout(props) {\n    const [isPresent, safeToRemove] = usePresence();\n    const layoutGroup = useContext(LayoutGroupContext);\n    return (jsx(MeasureLayoutWithContext, { ...props, layoutGroup: layoutGroup, switchLayoutGroup: useContext(SwitchLayoutGroupContext), isPresent: isPresent, safeToRemove: safeToRemove }));\n}\nconst defaultScaleCorrectors = {\n    borderRadius: {\n        ...correctBorderRadius,\n        applyTo: [\n            \"borderTopLeftRadius\",\n            \"borderTopRightRadius\",\n            \"borderBottomLeftRadius\",\n            \"borderBottomRightRadius\",\n        ],\n    },\n    borderTopLeftRadius: correctBorderRadius,\n    borderTopRightRadius: correctBorderRadius,\n    borderBottomLeftRadius: correctBorderRadius,\n    borderBottomRightRadius: correctBorderRadius,\n    boxShadow: correctBoxShadow,\n};\n\nexport { MeasureLayout };\n","import { isMotionValue, motionValue } from 'motion-dom';\nimport { animateMotionValue } from '../interfaces/motion-value.mjs';\n\nfunction animateSingleValue(value, keyframes, options) {\n    const motionValue$1 = isMotionValue(value) ? value : motionValue(value);\n    motionValue$1.start(animateMotionValue(\"\", motionValue$1, keyframes, options));\n    return motionValue$1.animation;\n}\n\nexport { animateSingleValue };\n","const compareByDepth = (a, b) => a.depth - b.depth;\n\nexport { compareByDepth };\n","import { addUniqueItem, removeItem } from 'motion-utils';\nimport { compareByDepth } from './compare-by-depth.mjs';\n\nclass FlatTree {\n    constructor() {\n        this.children = [];\n        this.isDirty = false;\n    }\n    add(child) {\n        addUniqueItem(this.children, child);\n        this.isDirty = true;\n    }\n    remove(child) {\n        removeItem(this.children, child);\n        this.isDirty = true;\n    }\n    forEach(callback) {\n        this.isDirty && this.children.sort(compareByDepth);\n        this.isDirty = false;\n        this.children.forEach(callback);\n    }\n}\n\nexport { FlatTree };\n","import { time, frame, cancelFrame } from 'motion-dom';\nimport { secondsToMilliseconds } from 'motion-utils';\n\n/**\n * Timeout defined in ms\n */\nfunction delay(callback, timeout) {\n    const start = time.now();\n    const checkElapsed = ({ timestamp }) => {\n        const elapsed = timestamp - start;\n        if (elapsed >= timeout) {\n            cancelFrame(checkElapsed);\n            callback(elapsed - timeout);\n        }\n    };\n    frame.setup(checkElapsed, true);\n    return () => cancelFrame(checkElapsed);\n}\nfunction delayInSeconds(callback, timeout) {\n    return delay(callback, secondsToMilliseconds(timeout));\n}\n\nexport { delay, delayInSeconds };\n","import { mixNumber, percent, px } from 'motion-dom';\nimport { progress, circOut, noop } from 'motion-utils';\n\nconst borders = [\"TopLeft\", \"TopRight\", \"BottomLeft\", \"BottomRight\"];\nconst numBorders = borders.length;\nconst asNumber = (value) => typeof value === \"string\" ? parseFloat(value) : value;\nconst isPx = (value) => typeof value === \"number\" || px.test(value);\nfunction mixValues(target, follow, lead, progress, shouldCrossfadeOpacity, isOnlyMember) {\n    if (shouldCrossfadeOpacity) {\n        target.opacity = mixNumber(0, lead.opacity ?? 1, easeCrossfadeIn(progress));\n        target.opacityExit = mixNumber(follow.opacity ?? 1, 0, easeCrossfadeOut(progress));\n    }\n    else if (isOnlyMember) {\n        target.opacity = mixNumber(follow.opacity ?? 1, lead.opacity ?? 1, progress);\n    }\n    /**\n     * Mix border radius\n     */\n    for (let i = 0; i < numBorders; i++) {\n        const borderLabel = `border${borders[i]}Radius`;\n        let followRadius = getRadius(follow, borderLabel);\n        let leadRadius = getRadius(lead, borderLabel);\n        if (followRadius === undefined && leadRadius === undefined)\n            continue;\n        followRadius || (followRadius = 0);\n        leadRadius || (leadRadius = 0);\n        const canMix = followRadius === 0 ||\n            leadRadius === 0 ||\n            isPx(followRadius) === isPx(leadRadius);\n        if (canMix) {\n            target[borderLabel] = Math.max(mixNumber(asNumber(followRadius), asNumber(leadRadius), progress), 0);\n            if (percent.test(leadRadius) || percent.test(followRadius)) {\n                target[borderLabel] += \"%\";\n            }\n        }\n        else {\n            target[borderLabel] = leadRadius;\n        }\n    }\n    /**\n     * Mix rotation\n     */\n    if (follow.rotate || lead.rotate) {\n        target.rotate = mixNumber(follow.rotate || 0, lead.rotate || 0, progress);\n    }\n}\nfunction getRadius(values, radiusName) {\n    return values[radiusName] !== undefined\n        ? values[radiusName]\n        : values.borderRadius;\n}\n// /**\n//  * We only want to mix the background color if there's a follow element\n//  * that we're not crossfading opacity between. For instance with switch\n//  * AnimateSharedLayout animations, this helps the illusion of a continuous\n//  * element being animated but also cuts down on the number of paints triggered\n//  * for elements where opacity is doing that work for us.\n//  */\n// if (\n//     !hasFollowElement &&\n//     latestLeadValues.backgroundColor &&\n//     latestFollowValues.backgroundColor\n// ) {\n//     /**\n//      * This isn't ideal performance-wise as mixColor is creating a new function every frame.\n//      * We could probably create a mixer that runs at the start of the animation but\n//      * the idea behind the crossfader is that it runs dynamically between two potentially\n//      * changing targets (ie opacity or borderRadius may be animating independently via variants)\n//      */\n//     leadState.backgroundColor = followState.backgroundColor = mixColor(\n//         latestFollowValues.backgroundColor as string,\n//         latestLeadValues.backgroundColor as string\n//     )(p)\n// }\nconst easeCrossfadeIn = /*@__PURE__*/ compress(0, 0.5, circOut);\nconst easeCrossfadeOut = /*@__PURE__*/ compress(0.5, 0.95, noop);\nfunction compress(min, max, easing) {\n    return (p) => {\n        // Could replace ifs with clamp\n        if (p < min)\n            return 0;\n        if (p > max)\n            return 1;\n        return easing(progress(min, max, p));\n    };\n}\n\nexport { mixValues };\n","/**\n * Reset an axis to the provided origin box.\n *\n * This is a mutative operation.\n */\nfunction copyAxisInto(axis, originAxis) {\n    axis.min = originAxis.min;\n    axis.max = originAxis.max;\n}\n/**\n * Reset a box to the provided origin box.\n *\n * This is a mutative operation.\n */\nfunction copyBoxInto(box, originBox) {\n    copyAxisInto(box.x, originBox.x);\n    copyAxisInto(box.y, originBox.y);\n}\n/**\n * Reset a delta to the provided origin box.\n *\n * This is a mutative operation.\n */\nfunction copyAxisDeltaInto(delta, originDelta) {\n    delta.translate = originDelta.translate;\n    delta.scale = originDelta.scale;\n    delta.originPoint = originDelta.originPoint;\n    delta.origin = originDelta.origin;\n}\n\nexport { copyAxisDeltaInto, copyAxisInto, copyBoxInto };\n","import { percent, mixNumber } from 'motion-dom';\nimport { scalePoint } from './delta-apply.mjs';\n\n/**\n * Remove a delta from a point. This is essentially the steps of applyPointDelta in reverse\n */\nfunction removePointDelta(point, translate, scale, originPoint, boxScale) {\n    point -= translate;\n    point = scalePoint(point, 1 / scale, originPoint);\n    if (boxScale !== undefined) {\n        point = scalePoint(point, 1 / boxScale, originPoint);\n    }\n    return point;\n}\n/**\n * Remove a delta from an axis. This is essentially the steps of applyAxisDelta in reverse\n */\nfunction removeAxisDelta(axis, translate = 0, scale = 1, origin = 0.5, boxScale, originAxis = axis, sourceAxis = axis) {\n    if (percent.test(translate)) {\n        translate = parseFloat(translate);\n        const relativeProgress = mixNumber(sourceAxis.min, sourceAxis.max, translate / 100);\n        translate = relativeProgress - sourceAxis.min;\n    }\n    if (typeof translate !== \"number\")\n        return;\n    let originPoint = mixNumber(originAxis.min, originAxis.max, origin);\n    if (axis === originAxis)\n        originPoint -= translate;\n    axis.min = removePointDelta(axis.min, translate, scale, originPoint, boxScale);\n    axis.max = removePointDelta(axis.max, translate, scale, originPoint, boxScale);\n}\n/**\n * Remove a transforms from an axis. This is essentially the steps of applyAxisTransforms in reverse\n * and acts as a bridge between motion values and removeAxisDelta\n */\nfunction removeAxisTransforms(axis, transforms, [key, scaleKey, originKey], origin, sourceAxis) {\n    removeAxisDelta(axis, transforms[key], transforms[scaleKey], transforms[originKey], transforms.scale, origin, sourceAxis);\n}\n/**\n * The names of the motion values we want to apply as translation, scale and origin.\n */\nconst xKeys = [\"x\", \"scaleX\", \"originX\"];\nconst yKeys = [\"y\", \"scaleY\", \"originY\"];\n/**\n * Remove a transforms from an box. This is essentially the steps of applyAxisBox in reverse\n * and acts as a bridge between motion values and removeAxisDelta\n */\nfunction removeBoxTransforms(box, transforms, originBox, sourceBox) {\n    removeAxisTransforms(box.x, transforms, xKeys, originBox ? originBox.x : undefined, sourceBox ? sourceBox.x : undefined);\n    removeAxisTransforms(box.y, transforms, yKeys, originBox ? originBox.y : undefined, sourceBox ? sourceBox.y : undefined);\n}\n\nexport { removeAxisDelta, removeAxisTransforms, removeBoxTransforms, removePointDelta };\n","import { calcLength } from './delta-calc.mjs';\n\nfunction isAxisDeltaZero(delta) {\n    return delta.translate === 0 && delta.scale === 1;\n}\nfunction isDeltaZero(delta) {\n    return isAxisDeltaZero(delta.x) && isAxisDeltaZero(delta.y);\n}\nfunction axisEquals(a, b) {\n    return a.min === b.min && a.max === b.max;\n}\nfunction boxEquals(a, b) {\n    return axisEquals(a.x, b.x) && axisEquals(a.y, b.y);\n}\nfunction axisEqualsRounded(a, b) {\n    return (Math.round(a.min) === Math.round(b.min) &&\n        Math.round(a.max) === Math.round(b.max));\n}\nfunction boxEqualsRounded(a, b) {\n    return axisEqualsRounded(a.x, b.x) && axisEqualsRounded(a.y, b.y);\n}\nfunction aspectRatio(box) {\n    return calcLength(box.x) / calcLength(box.y);\n}\nfunction axisDeltaEquals(a, b) {\n    return (a.translate === b.translate &&\n        a.scale === b.scale &&\n        a.originPoint === b.originPoint);\n}\n\nexport { aspectRatio, axisDeltaEquals, axisEquals, axisEqualsRounded, boxEquals, boxEqualsRounded, isDeltaZero };\n","import { addUniqueItem, removeItem } from 'motion-utils';\n\nclass NodeStack {\n    constructor() {\n        this.members = [];\n    }\n    add(node) {\n        addUniqueItem(this.members, node);\n        node.scheduleRender();\n    }\n    remove(node) {\n        removeItem(this.members, node);\n        if (node === this.prevLead) {\n            this.prevLead = undefined;\n        }\n        if (node === this.lead) {\n            const prevLead = this.members[this.members.length - 1];\n            if (prevLead) {\n                this.promote(prevLead);\n            }\n        }\n    }\n    relegate(node) {\n        const indexOfNode = this.members.findIndex((member) => node === member);\n        if (indexOfNode === 0)\n            return false;\n        /**\n         * Find the next projection node that is present\n         */\n        let prevLead;\n        for (let i = indexOfNode; i >= 0; i--) {\n            const member = this.members[i];\n            if (member.isPresent !== false) {\n                prevLead = member;\n                break;\n            }\n        }\n        if (prevLead) {\n            this.promote(prevLead);\n            return true;\n        }\n        else {\n            return false;\n        }\n    }\n    promote(node, preserveFollowOpacity) {\n        const prevLead = this.lead;\n        if (node === prevLead)\n            return;\n        this.prevLead = prevLead;\n        this.lead = node;\n        node.show();\n        if (prevLead) {\n            prevLead.instance && prevLead.scheduleRender();\n            node.scheduleRender();\n            node.resumeFrom = prevLead;\n            if (preserveFollowOpacity) {\n                node.resumeFrom.preserveOpacity = true;\n            }\n            if (prevLead.snapshot) {\n                node.snapshot = prevLead.snapshot;\n                node.snapshot.latestValues =\n                    prevLead.animationValues || prevLead.latestValues;\n            }\n            if (node.root && node.root.isUpdating) {\n                node.isLayoutDirty = true;\n            }\n            const { crossfade } = node.options;\n            if (crossfade === false) {\n                prevLead.hide();\n            }\n            /**\n             * TODO:\n             *   - Test border radius when previous node was deleted\n             *   - boxShadow mixing\n             *   - Shared between element A in scrolled container and element B (scroll stays the same or changes)\n             *   - Shared between element A in transformed container and element B (transform stays the same or changes)\n             *   - Shared between element A in scrolled page and element B (scroll stays the same or changes)\n             * ---\n             *   - Crossfade opacity of root nodes\n             *   - layoutId changes after animation\n             *   - layoutId changes mid animation\n             */\n        }\n    }\n    exitAnimationComplete() {\n        this.members.forEach((node) => {\n            const { options, resumingFrom } = node;\n            options.onExitComplete && options.onExitComplete();\n            if (resumingFrom) {\n                resumingFrom.options.onExitComplete &&\n                    resumingFrom.options.onExitComplete();\n            }\n        });\n    }\n    scheduleRender() {\n        this.members.forEach((node) => {\n            node.instance && node.scheduleRender(false);\n        });\n    }\n    /**\n     * Clear any leads that have been removed this render to prevent them from being\n     * used in future animations and to prevent memory leaks\n     */\n    removeLeadSnapshot() {\n        if (this.lead && this.lead.snapshot) {\n            this.lead.snapshot = undefined;\n        }\n    }\n}\n\nexport { NodeStack };\n","function buildProjectionTransform(delta, treeScale, latestTransform) {\n    let transform = \"\";\n    /**\n     * The translations we use to calculate are always relative to the viewport coordinate space.\n     * But when we apply scales, we also scale the coordinate space of an element and its children.\n     * For instance if we have a treeScale (the culmination of all parent scales) of 0.5 and we need\n     * to move an element 100 pixels, we actually need to move it 200 in within that scaled space.\n     */\n    const xTranslate = delta.x.translate / treeScale.x;\n    const yTranslate = delta.y.translate / treeScale.y;\n    const zTranslate = latestTransform?.z || 0;\n    if (xTranslate || yTranslate || zTranslate) {\n        transform = `translate3d(${xTranslate}px, ${yTranslate}px, ${zTranslate}px) `;\n    }\n    /**\n     * Apply scale correction for the tree transform.\n     * This will apply scale to the screen-orientated axes.\n     */\n    if (treeScale.x !== 1 || treeScale.y !== 1) {\n        transform += `scale(${1 / treeScale.x}, ${1 / treeScale.y}) `;\n    }\n    if (latestTransform) {\n        const { transformPerspective, rotate, rotateX, rotateY, skewX, skewY } = latestTransform;\n        if (transformPerspective)\n            transform = `perspective(${transformPerspective}px) ${transform}`;\n        if (rotate)\n            transform += `rotate(${rotate}deg) `;\n        if (rotateX)\n            transform += `rotateX(${rotateX}deg) `;\n        if (rotateY)\n            transform += `rotateY(${rotateY}deg) `;\n        if (skewX)\n            transform += `skewX(${skewX}deg) `;\n        if (skewY)\n            transform += `skewY(${skewY}deg) `;\n    }\n    /**\n     * Apply scale to match the size of the element to the size we want it.\n     * This will apply scale to the element-orientated axes.\n     */\n    const elementScaleX = delta.x.scale * treeScale.x;\n    const elementScaleY = delta.y.scale * treeScale.y;\n    if (elementScaleX !== 1 || elementScaleY !== 1) {\n        transform += `scale(${elementScaleX}, ${elementScaleY})`;\n    }\n    return transform || \"none\";\n}\n\nexport { buildProjectionTransform };\n","import { statsBuffer, isSVGElement, isSVGSVGElement, frame, getValueTransition, cancelFrame, time, frameData, frameSteps, microtask, activeAnimations, motionValue, mixNumber } from 'motion-dom';\nimport { SubscriptionManager, clamp, noop } from 'motion-utils';\nimport { animateSingleValue } from '../../animation/animate/single-value.mjs';\nimport { getOptimisedAppearId } from '../../animation/optimized-appear/get-appear-id.mjs';\nimport { FlatTree } from '../../render/utils/flat-tree.mjs';\nimport { delay } from '../../utils/delay.mjs';\nimport { resolveMotionValue } from '../../value/utils/resolve-motion-value.mjs';\nimport { mixValues } from '../animation/mix-values.mjs';\nimport { copyBoxInto, copyAxisDeltaInto } from '../geometry/copy.mjs';\nimport { translateAxis, transformBox, applyBoxDelta, applyTreeDeltas } from '../geometry/delta-apply.mjs';\nimport { calcLength, calcRelativePosition, calcRelativeBox, calcBoxDelta, isNear } from '../geometry/delta-calc.mjs';\nimport { removeBoxTransforms } from '../geometry/delta-remove.mjs';\nimport { createBox, createDelta } from '../geometry/models.mjs';\nimport { boxEqualsRounded, isDeltaZero, axisDeltaEquals, aspectRatio, boxEquals } from '../geometry/utils.mjs';\nimport { NodeStack } from '../shared/stack.mjs';\nimport { scaleCorrectors } from '../styles/scale-correction.mjs';\nimport { buildProjectionTransform } from '../styles/transform.mjs';\nimport { eachAxis } from '../utils/each-axis.mjs';\nimport { hasTransform, hasScale, has2DTranslate } from '../utils/has-transform.mjs';\nimport { globalProjectionState } from './state.mjs';\n\nconst metrics = {\n    nodes: 0,\n    calculatedTargetDeltas: 0,\n    calculatedProjections: 0,\n};\nconst transformAxes = [\"\", \"X\", \"Y\", \"Z\"];\n/**\n * We use 1000 as the animation target as 0-1000 maps better to pixels than 0-1\n * which has a noticeable difference in spring animations\n */\nconst animationTarget = 1000;\nlet id = 0;\nfunction resetDistortingTransform(key, visualElement, values, sharedAnimationValues) {\n    const { latestValues } = visualElement;\n    // Record the distorting transform and then temporarily set it to 0\n    if (latestValues[key]) {\n        values[key] = latestValues[key];\n        visualElement.setStaticValue(key, 0);\n        if (sharedAnimationValues) {\n            sharedAnimationValues[key] = 0;\n        }\n    }\n}\nfunction cancelTreeOptimisedTransformAnimations(projectionNode) {\n    projectionNode.hasCheckedOptimisedAppear = true;\n    if (projectionNode.root === projectionNode)\n        return;\n    const { visualElement } = projectionNode.options;\n    if (!visualElement)\n        return;\n    const appearId = getOptimisedAppearId(visualElement);\n    if (window.MotionHasOptimisedAnimation(appearId, \"transform\")) {\n        const { layout, layoutId } = projectionNode.options;\n        window.MotionCancelOptimisedAnimation(appearId, \"transform\", frame, !(layout || layoutId));\n    }\n    const { parent } = projectionNode;\n    if (parent && !parent.hasCheckedOptimisedAppear) {\n        cancelTreeOptimisedTransformAnimations(parent);\n    }\n}\nfunction createProjectionNode({ attachResizeListener, defaultParent, measureScroll, checkIsScrollRoot, resetTransform, }) {\n    return class ProjectionNode {\n        constructor(latestValues = {}, parent = defaultParent?.()) {\n            /**\n             * A unique ID generated for every projection node.\n             */\n            this.id = id++;\n            /**\n             * An id that represents a unique session instigated by startUpdate.\n             */\n            this.animationId = 0;\n            this.animationCommitId = 0;\n            /**\n             * A Set containing all this component's children. This is used to iterate\n             * through the children.\n             *\n             * TODO: This could be faster to iterate as a flat array stored on the root node.\n             */\n            this.children = new Set();\n            /**\n             * Options for the node. We use this to configure what kind of layout animations\n             * we should perform (if any).\n             */\n            this.options = {};\n            /**\n             * We use this to detect when its safe to shut down part of a projection tree.\n             * We have to keep projecting children for scale correction and relative projection\n             * until all their parents stop performing layout animations.\n             */\n            this.isTreeAnimating = false;\n            this.isAnimationBlocked = false;\n            /**\n             * Flag to true if we think this layout has been changed. We can't always know this,\n             * currently we set it to true every time a component renders, or if it has a layoutDependency\n             * if that has changed between renders. Additionally, components can be grouped by LayoutGroup\n             * and if one node is dirtied, they all are.\n             */\n            this.isLayoutDirty = false;\n            /**\n             * Flag to true if we think the projection calculations for this node needs\n             * recalculating as a result of an updated transform or layout animation.\n             */\n            this.isProjectionDirty = false;\n            /**\n             * Flag to true if the layout *or* transform has changed. This then gets propagated\n             * throughout the projection tree, forcing any element below to recalculate on the next frame.\n             */\n            this.isSharedProjectionDirty = false;\n            /**\n             * Flag transform dirty. This gets propagated throughout the whole tree but is only\n             * respected by shared nodes.\n             */\n            this.isTransformDirty = false;\n            /**\n             * Block layout updates for instant layout transitions throughout the tree.\n             */\n            this.updateManuallyBlocked = false;\n            this.updateBlockedByResize = false;\n            /**\n             * Set to true between the start of the first `willUpdate` call and the end of the `didUpdate`\n             * call.\n             */\n            this.isUpdating = false;\n            /**\n             * If this is an SVG element we currently disable projection transforms\n             */\n            this.isSVG = false;\n            /**\n             * Flag to true (during promotion) if a node doing an instant layout transition needs to reset\n             * its projection styles.\n             */\n            this.needsReset = false;\n            /**\n             * Flags whether this node should have its transform reset prior to measuring.\n             */\n            this.shouldResetTransform = false;\n            /**\n             * Store whether this node has been checked for optimised appear animations. As\n             * effects fire bottom-up, and we want to look up the tree for appear animations,\n             * this makes sure we only check each path once, stopping at nodes that\n             * have already been checked.\n             */\n            this.hasCheckedOptimisedAppear = false;\n            /**\n             * An object representing the calculated contextual/accumulated/tree scale.\n             * This will be used to scale calculcated projection transforms, as these are\n             * calculated in screen-space but need to be scaled for elements to layoutly\n             * make it to their calculated destinations.\n             *\n             * TODO: Lazy-init\n             */\n            this.treeScale = { x: 1, y: 1 };\n            /**\n             *\n             */\n            this.eventHandlers = new Map();\n            this.hasTreeAnimated = false;\n            // Note: Currently only running on root node\n            this.updateScheduled = false;\n            this.scheduleUpdate = () => this.update();\n            this.projectionUpdateScheduled = false;\n            this.checkUpdateFailed = () => {\n                if (this.isUpdating) {\n                    this.isUpdating = false;\n                    this.clearAllSnapshots();\n                }\n            };\n            /**\n             * This is a multi-step process as shared nodes might be of different depths. Nodes\n             * are sorted by depth order, so we need to resolve the entire tree before moving to\n             * the next step.\n             */\n            this.updateProjection = () => {\n                this.projectionUpdateScheduled = false;\n                /**\n                 * Reset debug counts. Manually resetting rather than creating a new\n                 * object each frame.\n                 */\n                if (statsBuffer.value) {\n                    metrics.nodes =\n                        metrics.calculatedTargetDeltas =\n                            metrics.calculatedProjections =\n                                0;\n                }\n                this.nodes.forEach(propagateDirtyNodes);\n                this.nodes.forEach(resolveTargetDelta);\n                this.nodes.forEach(calcProjection);\n                this.nodes.forEach(cleanDirtyNodes);\n                if (statsBuffer.addProjectionMetrics) {\n                    statsBuffer.addProjectionMetrics(metrics);\n                }\n            };\n            /**\n             * Frame calculations\n             */\n            this.resolvedRelativeTargetAt = 0.0;\n            this.hasProjected = false;\n            this.isVisible = true;\n            this.animationProgress = 0;\n            /**\n             * Shared layout\n             */\n            // TODO Only running on root node\n            this.sharedNodes = new Map();\n            this.latestValues = latestValues;\n            this.root = parent ? parent.root || parent : this;\n            this.path = parent ? [...parent.path, parent] : [];\n            this.parent = parent;\n            this.depth = parent ? parent.depth + 1 : 0;\n            for (let i = 0; i < this.path.length; i++) {\n                this.path[i].shouldResetTransform = true;\n            }\n            if (this.root === this)\n                this.nodes = new FlatTree();\n        }\n        addEventListener(name, handler) {\n            if (!this.eventHandlers.has(name)) {\n                this.eventHandlers.set(name, new SubscriptionManager());\n            }\n            return this.eventHandlers.get(name).add(handler);\n        }\n        notifyListeners(name, ...args) {\n            const subscriptionManager = this.eventHandlers.get(name);\n            subscriptionManager && subscriptionManager.notify(...args);\n        }\n        hasListeners(name) {\n            return this.eventHandlers.has(name);\n        }\n        /**\n         * Lifecycles\n         */\n        mount(instance) {\n            if (this.instance)\n                return;\n            this.isSVG = isSVGElement(instance) && !isSVGSVGElement(instance);\n            this.instance = instance;\n            const { layoutId, layout, visualElement } = this.options;\n            if (visualElement && !visualElement.current) {\n                visualElement.mount(instance);\n            }\n            this.root.nodes.add(this);\n            this.parent && this.parent.children.add(this);\n            if (this.root.hasTreeAnimated && (layout || layoutId)) {\n                this.isLayoutDirty = true;\n            }\n            if (attachResizeListener) {\n                let cancelDelay;\n                let innerWidth = 0;\n                const resizeUnblockUpdate = () => (this.root.updateBlockedByResize = false);\n                // Set initial innerWidth in a frame.read callback to batch the read\n                frame.read(() => {\n                    innerWidth = window.innerWidth;\n                });\n                attachResizeListener(instance, () => {\n                    const newInnerWidth = window.innerWidth;\n                    if (newInnerWidth === innerWidth)\n                        return;\n                    innerWidth = newInnerWidth;\n                    this.root.updateBlockedByResize = true;\n                    cancelDelay && cancelDelay();\n                    cancelDelay = delay(resizeUnblockUpdate, 250);\n                    if (globalProjectionState.hasAnimatedSinceResize) {\n                        globalProjectionState.hasAnimatedSinceResize = false;\n                        this.nodes.forEach(finishAnimation);\n                    }\n                });\n            }\n            if (layoutId) {\n                this.root.registerSharedNode(layoutId, this);\n            }\n            // Only register the handler if it requires layout animation\n            if (this.options.animate !== false &&\n                visualElement &&\n                (layoutId || layout)) {\n                this.addEventListener(\"didUpdate\", ({ delta, hasLayoutChanged, hasRelativeLayoutChanged, layout: newLayout, }) => {\n                    if (this.isTreeAnimationBlocked()) {\n                        this.target = undefined;\n                        this.relativeTarget = undefined;\n                        return;\n                    }\n                    // TODO: Check here if an animation exists\n                    const layoutTransition = this.options.transition ||\n                        visualElement.getDefaultTransition() ||\n                        defaultLayoutTransition;\n                    const { onLayoutAnimationStart, onLayoutAnimationComplete, } = visualElement.getProps();\n                    /**\n                     * The target layout of the element might stay the same,\n                     * but its position relative to its parent has changed.\n                     */\n                    const hasTargetChanged = !this.targetLayout ||\n                        !boxEqualsRounded(this.targetLayout, newLayout);\n                    /*\n                     * Note: Disabled to fix relative animations always triggering new\n                     * layout animations. If this causes further issues, we can try\n                     * a different approach to detecting relative target changes.\n                     */\n                    // || hasRelativeLayoutChanged\n                    /**\n                     * If the layout hasn't seemed to have changed, it might be that the\n                     * element is visually in the same place in the document but its position\n                     * relative to its parent has indeed changed. So here we check for that.\n                     */\n                    const hasOnlyRelativeTargetChanged = !hasLayoutChanged && hasRelativeLayoutChanged;\n                    if (this.options.layoutRoot ||\n                        this.resumeFrom ||\n                        hasOnlyRelativeTargetChanged ||\n                        (hasLayoutChanged &&\n                            (hasTargetChanged || !this.currentAnimation))) {\n                        if (this.resumeFrom) {\n                            this.resumingFrom = this.resumeFrom;\n                            this.resumingFrom.resumingFrom = undefined;\n                        }\n                        const animationOptions = {\n                            ...getValueTransition(layoutTransition, \"layout\"),\n                            onPlay: onLayoutAnimationStart,\n                            onComplete: onLayoutAnimationComplete,\n                        };\n                        if (visualElement.shouldReduceMotion ||\n                            this.options.layoutRoot) {\n                            animationOptions.delay = 0;\n                            animationOptions.type = false;\n                        }\n                        this.startAnimation(animationOptions);\n                        /**\n                         * Set animation origin after starting animation to avoid layout jump\n                         * caused by stopping previous layout animation\n                         */\n                        this.setAnimationOrigin(delta, hasOnlyRelativeTargetChanged);\n                    }\n                    else {\n                        /**\n                         * If the layout hasn't changed and we have an animation that hasn't started yet,\n                         * finish it immediately. Otherwise it will be animating from a location\n                         * that was probably never commited to screen and look like a jumpy box.\n                         */\n                        if (!hasLayoutChanged) {\n                            finishAnimation(this);\n                        }\n                        if (this.isLead() && this.options.onExitComplete) {\n                            this.options.onExitComplete();\n                        }\n                    }\n                    this.targetLayout = newLayout;\n                });\n            }\n        }\n        unmount() {\n            this.options.layoutId && this.willUpdate();\n            this.root.nodes.remove(this);\n            const stack = this.getStack();\n            stack && stack.remove(this);\n            this.parent && this.parent.children.delete(this);\n            this.instance = undefined;\n            this.eventHandlers.clear();\n            cancelFrame(this.updateProjection);\n        }\n        // only on the root\n        blockUpdate() {\n            this.updateManuallyBlocked = true;\n        }\n        unblockUpdate() {\n            this.updateManuallyBlocked = false;\n        }\n        isUpdateBlocked() {\n            return this.updateManuallyBlocked || this.updateBlockedByResize;\n        }\n        isTreeAnimationBlocked() {\n            return (this.isAnimationBlocked ||\n                (this.parent && this.parent.isTreeAnimationBlocked()) ||\n                false);\n        }\n        // Note: currently only running on root node\n        startUpdate() {\n            if (this.isUpdateBlocked())\n                return;\n            this.isUpdating = true;\n            this.nodes && this.nodes.forEach(resetSkewAndRotation);\n            this.animationId++;\n        }\n        getTransformTemplate() {\n            const { visualElement } = this.options;\n            return visualElement && visualElement.getProps().transformTemplate;\n        }\n        willUpdate(shouldNotifyListeners = true) {\n            this.root.hasTreeAnimated = true;\n            if (this.root.isUpdateBlocked()) {\n                this.options.onExitComplete && this.options.onExitComplete();\n                return;\n            }\n            /**\n             * If we're running optimised appear animations then these must be\n             * cancelled before measuring the DOM. This is so we can measure\n             * the true layout of the element rather than the WAAPI animation\n             * which will be unaffected by the resetSkewAndRotate step.\n             *\n             * Note: This is a DOM write. Worst case scenario is this is sandwiched\n             * between other snapshot reads which will cause unnecessary style recalculations.\n             * This has to happen here though, as we don't yet know which nodes will need\n             * snapshots in startUpdate(), but we only want to cancel optimised animations\n             * if a layout animation measurement is actually going to be affected by them.\n             */\n            if (window.MotionCancelOptimisedAnimation &&\n                !this.hasCheckedOptimisedAppear) {\n                cancelTreeOptimisedTransformAnimations(this);\n            }\n            !this.root.isUpdating && this.root.startUpdate();\n            if (this.isLayoutDirty)\n                return;\n            this.isLayoutDirty = true;\n            for (let i = 0; i < this.path.length; i++) {\n                const node = this.path[i];\n                node.shouldResetTransform = true;\n                node.updateScroll(\"snapshot\");\n                if (node.options.layoutRoot) {\n                    node.willUpdate(false);\n                }\n            }\n            const { layoutId, layout } = this.options;\n            if (layoutId === undefined && !layout)\n                return;\n            const transformTemplate = this.getTransformTemplate();\n            this.prevTransformTemplateValue = transformTemplate\n                ? transformTemplate(this.latestValues, \"\")\n                : undefined;\n            this.updateSnapshot();\n            shouldNotifyListeners && this.notifyListeners(\"willUpdate\");\n        }\n        update() {\n            this.updateScheduled = false;\n            const updateWasBlocked = this.isUpdateBlocked();\n            // When doing an instant transition, we skip the layout update,\n            // but should still clean up the measurements so that the next\n            // snapshot could be taken correctly.\n            if (updateWasBlocked) {\n                this.unblockUpdate();\n                this.clearAllSnapshots();\n                this.nodes.forEach(clearMeasurements);\n                return;\n            }\n            /**\n             * If this is a repeat of didUpdate then ignore the animation.\n             */\n            if (this.animationId <= this.animationCommitId) {\n                this.nodes.forEach(clearIsLayoutDirty);\n                return;\n            }\n            this.animationCommitId = this.animationId;\n            if (!this.isUpdating) {\n                this.nodes.forEach(clearIsLayoutDirty);\n            }\n            else {\n                this.isUpdating = false;\n                /**\n                 * Write\n                 */\n                this.nodes.forEach(resetTransformStyle);\n                /**\n                 * Read ==================\n                 */\n                // Update layout measurements of updated children\n                this.nodes.forEach(updateLayout);\n                /**\n                 * Write\n                 */\n                // Notify listeners that the layout is updated\n                this.nodes.forEach(notifyLayoutUpdate);\n            }\n            this.clearAllSnapshots();\n            /**\n             * Manually flush any pending updates. Ideally\n             * we could leave this to the following requestAnimationFrame but this seems\n             * to leave a flash of incorrectly styled content.\n             */\n            const now = time.now();\n            frameData.delta = clamp(0, 1000 / 60, now - frameData.timestamp);\n            frameData.timestamp = now;\n            frameData.isProcessing = true;\n            frameSteps.update.process(frameData);\n            frameSteps.preRender.process(frameData);\n            frameSteps.render.process(frameData);\n            frameData.isProcessing = false;\n        }\n        didUpdate() {\n            if (!this.updateScheduled) {\n                this.updateScheduled = true;\n                microtask.read(this.scheduleUpdate);\n            }\n        }\n        clearAllSnapshots() {\n            this.nodes.forEach(clearSnapshot);\n            this.sharedNodes.forEach(removeLeadSnapshots);\n        }\n        scheduleUpdateProjection() {\n            if (!this.projectionUpdateScheduled) {\n                this.projectionUpdateScheduled = true;\n                frame.preRender(this.updateProjection, false, true);\n            }\n        }\n        scheduleCheckAfterUnmount() {\n            /**\n             * If the unmounting node is in a layoutGroup and did trigger a willUpdate,\n             * we manually call didUpdate to give a chance to the siblings to animate.\n             * Otherwise, cleanup all snapshots to prevents future nodes from reusing them.\n             */\n            frame.postRender(() => {\n                if (this.isLayoutDirty) {\n                    this.root.didUpdate();\n                }\n                else {\n                    this.root.checkUpdateFailed();\n                }\n            });\n        }\n        /**\n         * Update measurements\n         */\n        updateSnapshot() {\n            if (this.snapshot || !this.instance)\n                return;\n            this.snapshot = this.measure();\n            if (this.snapshot &&\n                !calcLength(this.snapshot.measuredBox.x) &&\n                !calcLength(this.snapshot.measuredBox.y)) {\n                this.snapshot = undefined;\n            }\n        }\n        updateLayout() {\n            if (!this.instance)\n                return;\n            this.updateScroll();\n            if (!(this.options.alwaysMeasureLayout && this.isLead()) &&\n                !this.isLayoutDirty) {\n                return;\n            }\n            /**\n             * When a node is mounted, it simply resumes from the prevLead's\n             * snapshot instead of taking a new one, but the ancestors scroll\n             * might have updated while the prevLead is unmounted. We need to\n             * update the scroll again to make sure the layout we measure is\n             * up to date.\n             */\n            if (this.resumeFrom && !this.resumeFrom.instance) {\n                for (let i = 0; i < this.path.length; i++) {\n                    const node = this.path[i];\n                    node.updateScroll();\n                }\n            }\n            const prevLayout = this.layout;\n            this.layout = this.measure(false);\n            this.layoutCorrected = createBox();\n            this.isLayoutDirty = false;\n            this.projectionDelta = undefined;\n            this.notifyListeners(\"measure\", this.layout.layoutBox);\n            const { visualElement } = this.options;\n            visualElement &&\n                visualElement.notify(\"LayoutMeasure\", this.layout.layoutBox, prevLayout ? prevLayout.layoutBox : undefined);\n        }\n        updateScroll(phase = \"measure\") {\n            let needsMeasurement = Boolean(this.options.layoutScroll && this.instance);\n            if (this.scroll &&\n                this.scroll.animationId === this.root.animationId &&\n                this.scroll.phase === phase) {\n                needsMeasurement = false;\n            }\n            if (needsMeasurement && this.instance) {\n                const isRoot = checkIsScrollRoot(this.instance);\n                this.scroll = {\n                    animationId: this.root.animationId,\n                    phase,\n                    isRoot,\n                    offset: measureScroll(this.instance),\n                    wasRoot: this.scroll ? this.scroll.isRoot : isRoot,\n                };\n            }\n        }\n        resetTransform() {\n            if (!resetTransform)\n                return;\n            const isResetRequested = this.isLayoutDirty ||\n                this.shouldResetTransform ||\n                this.options.alwaysMeasureLayout;\n            const hasProjection = this.projectionDelta && !isDeltaZero(this.projectionDelta);\n            const transformTemplate = this.getTransformTemplate();\n            const transformTemplateValue = transformTemplate\n                ? transformTemplate(this.latestValues, \"\")\n                : undefined;\n            const transformTemplateHasChanged = transformTemplateValue !== this.prevTransformTemplateValue;\n            if (isResetRequested &&\n                this.instance &&\n                (hasProjection ||\n                    hasTransform(this.latestValues) ||\n                    transformTemplateHasChanged)) {\n                resetTransform(this.instance, transformTemplateValue);\n                this.shouldResetTransform = false;\n                this.scheduleRender();\n            }\n        }\n        measure(removeTransform = true) {\n            const pageBox = this.measurePageBox();\n            let layoutBox = this.removeElementScroll(pageBox);\n            /**\n             * Measurements taken during the pre-render stage\n             * still have transforms applied so we remove them\n             * via calculation.\n             */\n            if (removeTransform) {\n                layoutBox = this.removeTransform(layoutBox);\n            }\n            roundBox(layoutBox);\n            return {\n                animationId: this.root.animationId,\n                measuredBox: pageBox,\n                layoutBox,\n                latestValues: {},\n                source: this.id,\n            };\n        }\n        measurePageBox() {\n            const { visualElement } = this.options;\n            if (!visualElement)\n                return createBox();\n            const box = visualElement.measureViewportBox();\n            const wasInScrollRoot = this.scroll?.wasRoot || this.path.some(checkNodeWasScrollRoot);\n            if (!wasInScrollRoot) {\n                // Remove viewport scroll to give page-relative coordinates\n                const { scroll } = this.root;\n                if (scroll) {\n                    translateAxis(box.x, scroll.offset.x);\n                    translateAxis(box.y, scroll.offset.y);\n                }\n            }\n            return box;\n        }\n        removeElementScroll(box) {\n            const boxWithoutScroll = createBox();\n            copyBoxInto(boxWithoutScroll, box);\n            if (this.scroll?.wasRoot) {\n                return boxWithoutScroll;\n            }\n            /**\n             * Performance TODO: Keep a cumulative scroll offset down the tree\n             * rather than loop back up the path.\n             */\n            for (let i = 0; i < this.path.length; i++) {\n                const node = this.path[i];\n                const { scroll, options } = node;\n                if (node !== this.root && scroll && options.layoutScroll) {\n                    /**\n                     * If this is a new scroll root, we want to remove all previous scrolls\n                     * from the viewport box.\n                     */\n                    if (scroll.wasRoot) {\n                        copyBoxInto(boxWithoutScroll, box);\n                    }\n                    translateAxis(boxWithoutScroll.x, scroll.offset.x);\n                    translateAxis(boxWithoutScroll.y, scroll.offset.y);\n                }\n            }\n            return boxWithoutScroll;\n        }\n        applyTransform(box, transformOnly = false) {\n            const withTransforms = createBox();\n            copyBoxInto(withTransforms, box);\n            for (let i = 0; i < this.path.length; i++) {\n                const node = this.path[i];\n                if (!transformOnly &&\n                    node.options.layoutScroll &&\n                    node.scroll &&\n                    node !== node.root) {\n                    transformBox(withTransforms, {\n                        x: -node.scroll.offset.x,\n                        y: -node.scroll.offset.y,\n                    });\n                }\n                if (!hasTransform(node.latestValues))\n                    continue;\n                transformBox(withTransforms, node.latestValues);\n            }\n            if (hasTransform(this.latestValues)) {\n                transformBox(withTransforms, this.latestValues);\n            }\n            return withTransforms;\n        }\n        removeTransform(box) {\n            const boxWithoutTransform = createBox();\n            copyBoxInto(boxWithoutTransform, box);\n            for (let i = 0; i < this.path.length; i++) {\n                const node = this.path[i];\n                if (!node.instance)\n                    continue;\n                if (!hasTransform(node.latestValues))\n                    continue;\n                hasScale(node.latestValues) && node.updateSnapshot();\n                const sourceBox = createBox();\n                const nodeBox = node.measurePageBox();\n                copyBoxInto(sourceBox, nodeBox);\n                removeBoxTransforms(boxWithoutTransform, node.latestValues, node.snapshot ? node.snapshot.layoutBox : undefined, sourceBox);\n            }\n            if (hasTransform(this.latestValues)) {\n                removeBoxTransforms(boxWithoutTransform, this.latestValues);\n            }\n            return boxWithoutTransform;\n        }\n        setTargetDelta(delta) {\n            this.targetDelta = delta;\n            this.root.scheduleUpdateProjection();\n            this.isProjectionDirty = true;\n        }\n        setOptions(options) {\n            this.options = {\n                ...this.options,\n                ...options,\n                crossfade: options.crossfade !== undefined ? options.crossfade : true,\n            };\n        }\n        clearMeasurements() {\n            this.scroll = undefined;\n            this.layout = undefined;\n            this.snapshot = undefined;\n            this.prevTransformTemplateValue = undefined;\n            this.targetDelta = undefined;\n            this.target = undefined;\n            this.isLayoutDirty = false;\n        }\n        forceRelativeParentToResolveTarget() {\n            if (!this.relativeParent)\n                return;\n            /**\n             * If the parent target isn't up-to-date, force it to update.\n             * This is an unfortunate de-optimisation as it means any updating relative\n             * projection will cause all the relative parents to recalculate back\n             * up the tree.\n             */\n            if (this.relativeParent.resolvedRelativeTargetAt !==\n                frameData.timestamp) {\n                this.relativeParent.resolveTargetDelta(true);\n            }\n        }\n        resolveTargetDelta(forceRecalculation = false) {\n            /**\n             * Once the dirty status of nodes has been spread through the tree, we also\n             * need to check if we have a shared node of a different depth that has itself\n             * been dirtied.\n             */\n            const lead = this.getLead();\n            this.isProjectionDirty || (this.isProjectionDirty = lead.isProjectionDirty);\n            this.isTransformDirty || (this.isTransformDirty = lead.isTransformDirty);\n            this.isSharedProjectionDirty || (this.isSharedProjectionDirty = lead.isSharedProjectionDirty);\n            const isShared = Boolean(this.resumingFrom) || this !== lead;\n            /**\n             * We don't use transform for this step of processing so we don't\n             * need to check whether any nodes have changed transform.\n             */\n            const canSkip = !(forceRecalculation ||\n                (isShared && this.isSharedProjectionDirty) ||\n                this.isProjectionDirty ||\n                this.parent?.isProjectionDirty ||\n                this.attemptToResolveRelativeTarget ||\n                this.root.updateBlockedByResize);\n            if (canSkip)\n                return;\n            const { layout, layoutId } = this.options;\n            /**\n             * If we have no layout, we can't perform projection, so early return\n             */\n            if (!this.layout || !(layout || layoutId))\n                return;\n            this.resolvedRelativeTargetAt = frameData.timestamp;\n            /**\n             * If we don't have a targetDelta but do have a layout, we can attempt to resolve\n             * a relativeParent. This will allow a component to perform scale correction\n             * even if no animation has started.\n             */\n            if (!this.targetDelta && !this.relativeTarget) {\n                const relativeParent = this.getClosestProjectingParent();\n                if (relativeParent &&\n                    relativeParent.layout &&\n                    this.animationProgress !== 1) {\n                    this.relativeParent = relativeParent;\n                    this.forceRelativeParentToResolveTarget();\n                    this.relativeTarget = createBox();\n                    this.relativeTargetOrigin = createBox();\n                    calcRelativePosition(this.relativeTargetOrigin, this.layout.layoutBox, relativeParent.layout.layoutBox);\n                    copyBoxInto(this.relativeTarget, this.relativeTargetOrigin);\n                }\n                else {\n                    this.relativeParent = this.relativeTarget = undefined;\n                }\n            }\n            /**\n             * If we have no relative target or no target delta our target isn't valid\n             * for this frame.\n             */\n            if (!this.relativeTarget && !this.targetDelta)\n                return;\n            /**\n             * Lazy-init target data structure\n             */\n            if (!this.target) {\n                this.target = createBox();\n                this.targetWithTransforms = createBox();\n            }\n            /**\n             * If we've got a relative box for this component, resolve it into a target relative to the parent.\n             */\n            if (this.relativeTarget &&\n                this.relativeTargetOrigin &&\n                this.relativeParent &&\n                this.relativeParent.target) {\n                this.forceRelativeParentToResolveTarget();\n                calcRelativeBox(this.target, this.relativeTarget, this.relativeParent.target);\n                /**\n                 * If we've only got a targetDelta, resolve it into a target\n                 */\n            }\n            else if (this.targetDelta) {\n                if (Boolean(this.resumingFrom)) {\n                    // TODO: This is creating a new object every frame\n                    this.target = this.applyTransform(this.layout.layoutBox);\n                }\n                else {\n                    copyBoxInto(this.target, this.layout.layoutBox);\n                }\n                applyBoxDelta(this.target, this.targetDelta);\n            }\n            else {\n                /**\n                 * If no target, use own layout as target\n                 */\n                copyBoxInto(this.target, this.layout.layoutBox);\n            }\n            /**\n             * If we've been told to attempt to resolve a relative target, do so.\n             */\n            if (this.attemptToResolveRelativeTarget) {\n                this.attemptToResolveRelativeTarget = false;\n                const relativeParent = this.getClosestProjectingParent();\n                if (relativeParent &&\n                    Boolean(relativeParent.resumingFrom) ===\n                        Boolean(this.resumingFrom) &&\n                    !relativeParent.options.layoutScroll &&\n                    relativeParent.target &&\n                    this.animationProgress !== 1) {\n                    this.relativeParent = relativeParent;\n                    this.forceRelativeParentToResolveTarget();\n                    this.relativeTarget = createBox();\n                    this.relativeTargetOrigin = createBox();\n                    calcRelativePosition(this.relativeTargetOrigin, this.target, relativeParent.target);\n                    copyBoxInto(this.relativeTarget, this.relativeTargetOrigin);\n                }\n                else {\n                    this.relativeParent = this.relativeTarget = undefined;\n                }\n            }\n            /**\n             * Increase debug counter for resolved target deltas\n             */\n            if (statsBuffer.value) {\n                metrics.calculatedTargetDeltas++;\n            }\n        }\n        getClosestProjectingParent() {\n            if (!this.parent ||\n                hasScale(this.parent.latestValues) ||\n                has2DTranslate(this.parent.latestValues)) {\n                return undefined;\n            }\n            if (this.parent.isProjecting()) {\n                return this.parent;\n            }\n            else {\n                return this.parent.getClosestProjectingParent();\n            }\n        }\n        isProjecting() {\n            return Boolean((this.relativeTarget ||\n                this.targetDelta ||\n                this.options.layoutRoot) &&\n                this.layout);\n        }\n        calcProjection() {\n            const lead = this.getLead();\n            const isShared = Boolean(this.resumingFrom) || this !== lead;\n            let canSkip = true;\n            /**\n             * If this is a normal layout animation and neither this node nor its nearest projecting\n             * is dirty then we can't skip.\n             */\n            if (this.isProjectionDirty || this.parent?.isProjectionDirty) {\n                canSkip = false;\n            }\n            /**\n             * If this is a shared layout animation and this node's shared projection is dirty then\n             * we can't skip.\n             */\n            if (isShared &&\n                (this.isSharedProjectionDirty || this.isTransformDirty)) {\n                canSkip = false;\n            }\n            /**\n             * If we have resolved the target this frame we must recalculate the\n             * projection to ensure it visually represents the internal calculations.\n             */\n            if (this.resolvedRelativeTargetAt === frameData.timestamp) {\n                canSkip = false;\n            }\n            if (canSkip)\n                return;\n            const { layout, layoutId } = this.options;\n            /**\n             * If this section of the tree isn't animating we can\n             * delete our target sources for the following frame.\n             */\n            this.isTreeAnimating = Boolean((this.parent && this.parent.isTreeAnimating) ||\n                this.currentAnimation ||\n                this.pendingAnimation);\n            if (!this.isTreeAnimating) {\n                this.targetDelta = this.relativeTarget = undefined;\n            }\n            if (!this.layout || !(layout || layoutId))\n                return;\n            /**\n             * Reset the corrected box with the latest values from box, as we're then going\n             * to perform mutative operations on it.\n             */\n            copyBoxInto(this.layoutCorrected, this.layout.layoutBox);\n            /**\n             * Record previous tree scales before updating.\n             */\n            const prevTreeScaleX = this.treeScale.x;\n            const prevTreeScaleY = this.treeScale.y;\n            /**\n             * Apply all the parent deltas to this box to produce the corrected box. This\n             * is the layout box, as it will appear on screen as a result of the transforms of its parents.\n             */\n            applyTreeDeltas(this.layoutCorrected, this.treeScale, this.path, isShared);\n            /**\n             * If this layer needs to perform scale correction but doesn't have a target,\n             * use the layout as the target.\n             */\n            if (lead.layout &&\n                !lead.target &&\n                (this.treeScale.x !== 1 || this.treeScale.y !== 1)) {\n                lead.target = lead.layout.layoutBox;\n                lead.targetWithTransforms = createBox();\n            }\n            const { target } = lead;\n            if (!target) {\n                /**\n                 * If we don't have a target to project into, but we were previously\n                 * projecting, we want to remove the stored transform and schedule\n                 * a render to ensure the elements reflect the removed transform.\n                 */\n                if (this.prevProjectionDelta) {\n                    this.createProjectionDeltas();\n                    this.scheduleRender();\n                }\n                return;\n            }\n            if (!this.projectionDelta || !this.prevProjectionDelta) {\n                this.createProjectionDeltas();\n            }\n            else {\n                copyAxisDeltaInto(this.prevProjectionDelta.x, this.projectionDelta.x);\n                copyAxisDeltaInto(this.prevProjectionDelta.y, this.projectionDelta.y);\n            }\n            /**\n             * Update the delta between the corrected box and the target box before user-set transforms were applied.\n             * This will allow us to calculate the corrected borderRadius and boxShadow to compensate\n             * for our layout reprojection, but still allow them to be scaled correctly by the user.\n             * It might be that to simplify this we may want to accept that user-set scale is also corrected\n             * and we wouldn't have to keep and calc both deltas, OR we could support a user setting\n             * to allow people to choose whether these styles are corrected based on just the\n             * layout reprojection or the final bounding box.\n             */\n            calcBoxDelta(this.projectionDelta, this.layoutCorrected, target, this.latestValues);\n            if (this.treeScale.x !== prevTreeScaleX ||\n                this.treeScale.y !== prevTreeScaleY ||\n                !axisDeltaEquals(this.projectionDelta.x, this.prevProjectionDelta.x) ||\n                !axisDeltaEquals(this.projectionDelta.y, this.prevProjectionDelta.y)) {\n                this.hasProjected = true;\n                this.scheduleRender();\n                this.notifyListeners(\"projectionUpdate\", target);\n            }\n            /**\n             * Increase debug counter for recalculated projections\n             */\n            if (statsBuffer.value) {\n                metrics.calculatedProjections++;\n            }\n        }\n        hide() {\n            this.isVisible = false;\n            // TODO: Schedule render\n        }\n        show() {\n            this.isVisible = true;\n            // TODO: Schedule render\n        }\n        scheduleRender(notifyAll = true) {\n            this.options.visualElement?.scheduleRender();\n            if (notifyAll) {\n                const stack = this.getStack();\n                stack && stack.scheduleRender();\n            }\n            if (this.resumingFrom && !this.resumingFrom.instance) {\n                this.resumingFrom = undefined;\n            }\n        }\n        createProjectionDeltas() {\n            this.prevProjectionDelta = createDelta();\n            this.projectionDelta = createDelta();\n            this.projectionDeltaWithTransform = createDelta();\n        }\n        setAnimationOrigin(delta, hasOnlyRelativeTargetChanged = false) {\n            const snapshot = this.snapshot;\n            const snapshotLatestValues = snapshot ? snapshot.latestValues : {};\n            const mixedValues = { ...this.latestValues };\n            const targetDelta = createDelta();\n            if (!this.relativeParent ||\n                !this.relativeParent.options.layoutRoot) {\n                this.relativeTarget = this.relativeTargetOrigin = undefined;\n            }\n            this.attemptToResolveRelativeTarget = !hasOnlyRelativeTargetChanged;\n            const relativeLayout = createBox();\n            const snapshotSource = snapshot ? snapshot.source : undefined;\n            const layoutSource = this.layout ? this.layout.source : undefined;\n            const isSharedLayoutAnimation = snapshotSource !== layoutSource;\n            const stack = this.getStack();\n            const isOnlyMember = !stack || stack.members.length <= 1;\n            const shouldCrossfadeOpacity = Boolean(isSharedLayoutAnimation &&\n                !isOnlyMember &&\n                this.options.crossfade === true &&\n                !this.path.some(hasOpacityCrossfade));\n            this.animationProgress = 0;\n            let prevRelativeTarget;\n            this.mixTargetDelta = (latest) => {\n                const progress = latest / 1000;\n                mixAxisDelta(targetDelta.x, delta.x, progress);\n                mixAxisDelta(targetDelta.y, delta.y, progress);\n                this.setTargetDelta(targetDelta);\n                if (this.relativeTarget &&\n                    this.relativeTargetOrigin &&\n                    this.layout &&\n                    this.relativeParent &&\n                    this.relativeParent.layout) {\n                    calcRelativePosition(relativeLayout, this.layout.layoutBox, this.relativeParent.layout.layoutBox);\n                    mixBox(this.relativeTarget, this.relativeTargetOrigin, relativeLayout, progress);\n                    /**\n                     * If this is an unchanged relative target we can consider the\n                     * projection not dirty.\n                     */\n                    if (prevRelativeTarget &&\n                        boxEquals(this.relativeTarget, prevRelativeTarget)) {\n                        this.isProjectionDirty = false;\n                    }\n                    if (!prevRelativeTarget)\n                        prevRelativeTarget = createBox();\n                    copyBoxInto(prevRelativeTarget, this.relativeTarget);\n                }\n                if (isSharedLayoutAnimation) {\n                    this.animationValues = mixedValues;\n                    mixValues(mixedValues, snapshotLatestValues, this.latestValues, progress, shouldCrossfadeOpacity, isOnlyMember);\n                }\n                this.root.scheduleUpdateProjection();\n                this.scheduleRender();\n                this.animationProgress = progress;\n            };\n            this.mixTargetDelta(this.options.layoutRoot ? 1000 : 0);\n        }\n        startAnimation(options) {\n            this.notifyListeners(\"animationStart\");\n            this.currentAnimation?.stop();\n            this.resumingFrom?.currentAnimation?.stop();\n            if (this.pendingAnimation) {\n                cancelFrame(this.pendingAnimation);\n                this.pendingAnimation = undefined;\n            }\n            /**\n             * Start the animation in the next frame to have a frame with progress 0,\n             * where the target is the same as when the animation started, so we can\n             * calculate the relative positions correctly for instant transitions.\n             */\n            this.pendingAnimation = frame.update(() => {\n                globalProjectionState.hasAnimatedSinceResize = true;\n                activeAnimations.layout++;\n                this.motionValue || (this.motionValue = motionValue(0));\n                this.currentAnimation = animateSingleValue(this.motionValue, [0, 1000], {\n                    ...options,\n                    velocity: 0,\n                    isSync: true,\n                    onUpdate: (latest) => {\n                        this.mixTargetDelta(latest);\n                        options.onUpdate && options.onUpdate(latest);\n                    },\n                    onStop: () => {\n                        activeAnimations.layout--;\n                    },\n                    onComplete: () => {\n                        activeAnimations.layout--;\n                        options.onComplete && options.onComplete();\n                        this.completeAnimation();\n                    },\n                });\n                if (this.resumingFrom) {\n                    this.resumingFrom.currentAnimation = this.currentAnimation;\n                }\n                this.pendingAnimation = undefined;\n            });\n        }\n        completeAnimation() {\n            if (this.resumingFrom) {\n                this.resumingFrom.currentAnimation = undefined;\n                this.resumingFrom.preserveOpacity = undefined;\n            }\n            const stack = this.getStack();\n            stack && stack.exitAnimationComplete();\n            this.resumingFrom =\n                this.currentAnimation =\n                    this.animationValues =\n                        undefined;\n            this.notifyListeners(\"animationComplete\");\n        }\n        finishAnimation() {\n            if (this.currentAnimation) {\n                this.mixTargetDelta && this.mixTargetDelta(animationTarget);\n                this.currentAnimation.stop();\n            }\n            this.completeAnimation();\n        }\n        applyTransformsToTarget() {\n            const lead = this.getLead();\n            let { targetWithTransforms, target, layout, latestValues } = lead;\n            if (!targetWithTransforms || !target || !layout)\n                return;\n            /**\n             * If we're only animating position, and this element isn't the lead element,\n             * then instead of projecting into the lead box we instead want to calculate\n             * a new target that aligns the two boxes but maintains the layout shape.\n             */\n            if (this !== lead &&\n                this.layout &&\n                layout &&\n                shouldAnimatePositionOnly(this.options.animationType, this.layout.layoutBox, layout.layoutBox)) {\n                target = this.target || createBox();\n                const xLength = calcLength(this.layout.layoutBox.x);\n                target.x.min = lead.target.x.min;\n                target.x.max = target.x.min + xLength;\n                const yLength = calcLength(this.layout.layoutBox.y);\n                target.y.min = lead.target.y.min;\n                target.y.max = target.y.min + yLength;\n            }\n            copyBoxInto(targetWithTransforms, target);\n            /**\n             * Apply the latest user-set transforms to the targetBox to produce the targetBoxFinal.\n             * This is the final box that we will then project into by calculating a transform delta and\n             * applying it to the corrected box.\n             */\n            transformBox(targetWithTransforms, latestValues);\n            /**\n             * Update the delta between the corrected box and the final target box, after\n             * user-set transforms are applied to it. This will be used by the renderer to\n             * create a transform style that will reproject the element from its layout layout\n             * into the desired bounding box.\n             */\n            calcBoxDelta(this.projectionDeltaWithTransform, this.layoutCorrected, targetWithTransforms, latestValues);\n        }\n        registerSharedNode(layoutId, node) {\n            if (!this.sharedNodes.has(layoutId)) {\n                this.sharedNodes.set(layoutId, new NodeStack());\n            }\n            const stack = this.sharedNodes.get(layoutId);\n            stack.add(node);\n            const config = node.options.initialPromotionConfig;\n            node.promote({\n                transition: config ? config.transition : undefined,\n                preserveFollowOpacity: config && config.shouldPreserveFollowOpacity\n                    ? config.shouldPreserveFollowOpacity(node)\n                    : undefined,\n            });\n        }\n        isLead() {\n            const stack = this.getStack();\n            return stack ? stack.lead === this : true;\n        }\n        getLead() {\n            const { layoutId } = this.options;\n            return layoutId ? this.getStack()?.lead || this : this;\n        }\n        getPrevLead() {\n            const { layoutId } = this.options;\n            return layoutId ? this.getStack()?.prevLead : undefined;\n        }\n        getStack() {\n            const { layoutId } = this.options;\n            if (layoutId)\n                return this.root.sharedNodes.get(layoutId);\n        }\n        promote({ needsReset, transition, preserveFollowOpacity, } = {}) {\n            const stack = this.getStack();\n            if (stack)\n                stack.promote(this, preserveFollowOpacity);\n            if (needsReset) {\n                this.projectionDelta = undefined;\n                this.needsReset = true;\n            }\n            if (transition)\n                this.setOptions({ transition });\n        }\n        relegate() {\n            const stack = this.getStack();\n            if (stack) {\n                return stack.relegate(this);\n            }\n            else {\n                return false;\n            }\n        }\n        resetSkewAndRotation() {\n            const { visualElement } = this.options;\n            if (!visualElement)\n                return;\n            // If there's no detected skew or rotation values, we can early return without a forced render.\n            let hasDistortingTransform = false;\n            /**\n             * An unrolled check for rotation values. Most elements don't have any rotation and\n             * skipping the nested loop and new object creation is 50% faster.\n             */\n            const { latestValues } = visualElement;\n            if (latestValues.z ||\n                latestValues.rotate ||\n                latestValues.rotateX ||\n                latestValues.rotateY ||\n                latestValues.rotateZ ||\n                latestValues.skewX ||\n                latestValues.skewY) {\n                hasDistortingTransform = true;\n            }\n            // If there's no distorting values, we don't need to do any more.\n            if (!hasDistortingTransform)\n                return;\n            const resetValues = {};\n            if (latestValues.z) {\n                resetDistortingTransform(\"z\", visualElement, resetValues, this.animationValues);\n            }\n            // Check the skew and rotate value of all axes and reset to 0\n            for (let i = 0; i < transformAxes.length; i++) {\n                resetDistortingTransform(`rotate${transformAxes[i]}`, visualElement, resetValues, this.animationValues);\n                resetDistortingTransform(`skew${transformAxes[i]}`, visualElement, resetValues, this.animationValues);\n            }\n            // Force a render of this element to apply the transform with all skews and rotations\n            // set to 0.\n            visualElement.render();\n            // Put back all the values we reset\n            for (const key in resetValues) {\n                visualElement.setStaticValue(key, resetValues[key]);\n                if (this.animationValues) {\n                    this.animationValues[key] = resetValues[key];\n                }\n            }\n            // Schedule a render for the next frame. This ensures we won't visually\n            // see the element with the reset rotate value applied.\n            visualElement.scheduleRender();\n        }\n        applyProjectionStyles(targetStyle, // CSSStyleDeclaration - doesn't allow numbers to be assigned to properties\n        styleProp) {\n            if (!this.instance || this.isSVG)\n                return;\n            if (!this.isVisible) {\n                targetStyle.visibility = \"hidden\";\n                return;\n            }\n            const transformTemplate = this.getTransformTemplate();\n            if (this.needsReset) {\n                this.needsReset = false;\n                targetStyle.visibility = \"\";\n                targetStyle.opacity = \"\";\n                targetStyle.pointerEvents =\n                    resolveMotionValue(styleProp?.pointerEvents) || \"\";\n                targetStyle.transform = transformTemplate\n                    ? transformTemplate(this.latestValues, \"\")\n                    : \"none\";\n                return;\n            }\n            const lead = this.getLead();\n            if (!this.projectionDelta || !this.layout || !lead.target) {\n                if (this.options.layoutId) {\n                    targetStyle.opacity =\n                        this.latestValues.opacity !== undefined\n                            ? this.latestValues.opacity\n                            : 1;\n                    targetStyle.pointerEvents =\n                        resolveMotionValue(styleProp?.pointerEvents) || \"\";\n                }\n                if (this.hasProjected && !hasTransform(this.latestValues)) {\n                    targetStyle.transform = transformTemplate\n                        ? transformTemplate({}, \"\")\n                        : \"none\";\n                    this.hasProjected = false;\n                }\n                return;\n            }\n            targetStyle.visibility = \"\";\n            const valuesToRender = lead.animationValues || lead.latestValues;\n            this.applyTransformsToTarget();\n            let transform = buildProjectionTransform(this.projectionDeltaWithTransform, this.treeScale, valuesToRender);\n            if (transformTemplate) {\n                transform = transformTemplate(valuesToRender, transform);\n            }\n            targetStyle.transform = transform;\n            const { x, y } = this.projectionDelta;\n            targetStyle.transformOrigin = `${x.origin * 100}% ${y.origin * 100}% 0`;\n            if (lead.animationValues) {\n                /**\n                 * If the lead component is animating, assign this either the entering/leaving\n                 * opacity\n                 */\n                targetStyle.opacity =\n                    lead === this\n                        ? valuesToRender.opacity ??\n                            this.latestValues.opacity ??\n                            1\n                        : this.preserveOpacity\n                            ? this.latestValues.opacity\n                            : valuesToRender.opacityExit;\n            }\n            else {\n                /**\n                 * Or we're not animating at all, set the lead component to its layout\n                 * opacity and other components to hidden.\n                 */\n                targetStyle.opacity =\n                    lead === this\n                        ? valuesToRender.opacity !== undefined\n                            ? valuesToRender.opacity\n                            : \"\"\n                        : valuesToRender.opacityExit !== undefined\n                            ? valuesToRender.opacityExit\n                            : 0;\n            }\n            /**\n             * Apply scale correction\n             */\n            for (const key in scaleCorrectors) {\n                if (valuesToRender[key] === undefined)\n                    continue;\n                const { correct, applyTo, isCSSVariable } = scaleCorrectors[key];\n                /**\n                 * Only apply scale correction to the value if we have an\n                 * active projection transform. Otherwise these values become\n                 * vulnerable to distortion if the element changes size without\n                 * a corresponding layout animation.\n                 */\n                const corrected = transform === \"none\"\n                    ? valuesToRender[key]\n                    : correct(valuesToRender[key], lead);\n                if (applyTo) {\n                    const num = applyTo.length;\n                    for (let i = 0; i < num; i++) {\n                        targetStyle[applyTo[i]] = corrected;\n                    }\n                }\n                else {\n                    // If this is a CSS variable, set it directly on the instance.\n                    // Replacing this function from creating styles to setting them\n                    // would be a good place to remove per frame object creation\n                    if (isCSSVariable) {\n                        this.options.visualElement.renderState.vars[key] = corrected;\n                    }\n                    else {\n                        targetStyle[key] = corrected;\n                    }\n                }\n            }\n            /**\n             * Disable pointer events on follow components. This is to ensure\n             * that if a follow component covers a lead component it doesn't block\n             * pointer events on the lead.\n             */\n            if (this.options.layoutId) {\n                targetStyle.pointerEvents =\n                    lead === this\n                        ? resolveMotionValue(styleProp?.pointerEvents) || \"\"\n                        : \"none\";\n            }\n        }\n        clearSnapshot() {\n            this.resumeFrom = this.snapshot = undefined;\n        }\n        // Only run on root\n        resetTree() {\n            this.root.nodes.forEach((node) => node.currentAnimation?.stop());\n            this.root.nodes.forEach(clearMeasurements);\n            this.root.sharedNodes.clear();\n        }\n    };\n}\nfunction updateLayout(node) {\n    node.updateLayout();\n}\nfunction notifyLayoutUpdate(node) {\n    const snapshot = node.resumeFrom?.snapshot || node.snapshot;\n    if (node.isLead() &&\n        node.layout &&\n        snapshot &&\n        node.hasListeners(\"didUpdate\")) {\n        const { layoutBox: layout, measuredBox: measuredLayout } = node.layout;\n        const { animationType } = node.options;\n        const isShared = snapshot.source !== node.layout.source;\n        // TODO Maybe we want to also resize the layout snapshot so we don't trigger\n        // animations for instance if layout=\"size\" and an element has only changed position\n        if (animationType === \"size\") {\n            eachAxis((axis) => {\n                const axisSnapshot = isShared\n                    ? snapshot.measuredBox[axis]\n                    : snapshot.layoutBox[axis];\n                const length = calcLength(axisSnapshot);\n                axisSnapshot.min = layout[axis].min;\n                axisSnapshot.max = axisSnapshot.min + length;\n            });\n        }\n        else if (shouldAnimatePositionOnly(animationType, snapshot.layoutBox, layout)) {\n            eachAxis((axis) => {\n                const axisSnapshot = isShared\n                    ? snapshot.measuredBox[axis]\n                    : snapshot.layoutBox[axis];\n                const length = calcLength(layout[axis]);\n                axisSnapshot.max = axisSnapshot.min + length;\n                /**\n                 * Ensure relative target gets resized and rerendererd\n                 */\n                if (node.relativeTarget && !node.currentAnimation) {\n                    node.isProjectionDirty = true;\n                    node.relativeTarget[axis].max =\n                        node.relativeTarget[axis].min + length;\n                }\n            });\n        }\n        const layoutDelta = createDelta();\n        calcBoxDelta(layoutDelta, layout, snapshot.layoutBox);\n        const visualDelta = createDelta();\n        if (isShared) {\n            calcBoxDelta(visualDelta, node.applyTransform(measuredLayout, true), snapshot.measuredBox);\n        }\n        else {\n            calcBoxDelta(visualDelta, layout, snapshot.layoutBox);\n        }\n        const hasLayoutChanged = !isDeltaZero(layoutDelta);\n        let hasRelativeLayoutChanged = false;\n        if (!node.resumeFrom) {\n            const relativeParent = node.getClosestProjectingParent();\n            /**\n             * If the relativeParent is itself resuming from a different element then\n             * the relative snapshot is not relavent\n             */\n            if (relativeParent && !relativeParent.resumeFrom) {\n                const { snapshot: parentSnapshot, layout: parentLayout } = relativeParent;\n                if (parentSnapshot && parentLayout) {\n                    const relativeSnapshot = createBox();\n                    calcRelativePosition(relativeSnapshot, snapshot.layoutBox, parentSnapshot.layoutBox);\n                    const relativeLayout = createBox();\n                    calcRelativePosition(relativeLayout, layout, parentLayout.layoutBox);\n                    if (!boxEqualsRounded(relativeSnapshot, relativeLayout)) {\n                        hasRelativeLayoutChanged = true;\n                    }\n                    if (relativeParent.options.layoutRoot) {\n                        node.relativeTarget = relativeLayout;\n                        node.relativeTargetOrigin = relativeSnapshot;\n                        node.relativeParent = relativeParent;\n                    }\n                }\n            }\n        }\n        node.notifyListeners(\"didUpdate\", {\n            layout,\n            snapshot,\n            delta: visualDelta,\n            layoutDelta,\n            hasLayoutChanged,\n            hasRelativeLayoutChanged,\n        });\n    }\n    else if (node.isLead()) {\n        const { onExitComplete } = node.options;\n        onExitComplete && onExitComplete();\n    }\n    /**\n     * Clearing transition\n     * TODO: Investigate why this transition is being passed in as {type: false } from Framer\n     * and why we need it at all\n     */\n    node.options.transition = undefined;\n}\nfunction propagateDirtyNodes(node) {\n    /**\n     * Increase debug counter for nodes encountered this frame\n     */\n    if (statsBuffer.value) {\n        metrics.nodes++;\n    }\n    if (!node.parent)\n        return;\n    /**\n     * If this node isn't projecting, propagate isProjectionDirty. It will have\n     * no performance impact but it will allow the next child that *is* projecting\n     * but *isn't* dirty to just check its parent to see if *any* ancestor needs\n     * correcting.\n     */\n    if (!node.isProjecting()) {\n        node.isProjectionDirty = node.parent.isProjectionDirty;\n    }\n    /**\n     * Propagate isSharedProjectionDirty and isTransformDirty\n     * throughout the whole tree. A future revision can take another look at\n     * this but for safety we still recalcualte shared nodes.\n     */\n    node.isSharedProjectionDirty || (node.isSharedProjectionDirty = Boolean(node.isProjectionDirty ||\n        node.parent.isProjectionDirty ||\n        node.parent.isSharedProjectionDirty));\n    node.isTransformDirty || (node.isTransformDirty = node.parent.isTransformDirty);\n}\nfunction cleanDirtyNodes(node) {\n    node.isProjectionDirty =\n        node.isSharedProjectionDirty =\n            node.isTransformDirty =\n                false;\n}\nfunction clearSnapshot(node) {\n    node.clearSnapshot();\n}\nfunction clearMeasurements(node) {\n    node.clearMeasurements();\n}\nfunction clearIsLayoutDirty(node) {\n    node.isLayoutDirty = false;\n}\nfunction resetTransformStyle(node) {\n    const { visualElement } = node.options;\n    if (visualElement && visualElement.getProps().onBeforeLayoutMeasure) {\n        visualElement.notify(\"BeforeLayoutMeasure\");\n    }\n    node.resetTransform();\n}\nfunction finishAnimation(node) {\n    node.finishAnimation();\n    node.targetDelta = node.relativeTarget = node.target = undefined;\n    node.isProjectionDirty = true;\n}\nfunction resolveTargetDelta(node) {\n    node.resolveTargetDelta();\n}\nfunction calcProjection(node) {\n    node.calcProjection();\n}\nfunction resetSkewAndRotation(node) {\n    node.resetSkewAndRotation();\n}\nfunction removeLeadSnapshots(stack) {\n    stack.removeLeadSnapshot();\n}\nfunction mixAxisDelta(output, delta, p) {\n    output.translate = mixNumber(delta.translate, 0, p);\n    output.scale = mixNumber(delta.scale, 1, p);\n    output.origin = delta.origin;\n    output.originPoint = delta.originPoint;\n}\nfunction mixAxis(output, from, to, p) {\n    output.min = mixNumber(from.min, to.min, p);\n    output.max = mixNumber(from.max, to.max, p);\n}\nfunction mixBox(output, from, to, p) {\n    mixAxis(output.x, from.x, to.x, p);\n    mixAxis(output.y, from.y, to.y, p);\n}\nfunction hasOpacityCrossfade(node) {\n    return (node.animationValues && node.animationValues.opacityExit !== undefined);\n}\nconst defaultLayoutTransition = {\n    duration: 0.45,\n    ease: [0.4, 0, 0.1, 1],\n};\nconst userAgentContains = (string) => typeof navigator !== \"undefined\" &&\n    navigator.userAgent &&\n    navigator.userAgent.toLowerCase().includes(string);\n/**\n * Measured bounding boxes must be rounded in Safari and\n * left untouched in Chrome, otherwise non-integer layouts within scaled-up elements\n * can appear to jump.\n */\nconst roundPoint = userAgentContains(\"applewebkit/\") && !userAgentContains(\"chrome/\")\n    ? Math.round\n    : noop;\nfunction roundAxis(axis) {\n    // Round to the nearest .5 pixels to support subpixel layouts\n    axis.min = roundPoint(axis.min);\n    axis.max = roundPoint(axis.max);\n}\nfunction roundBox(box) {\n    roundAxis(box.x);\n    roundAxis(box.y);\n}\nfunction shouldAnimatePositionOnly(animationType, snapshot, layout) {\n    return (animationType === \"position\" ||\n        (animationType === \"preserve-aspect\" &&\n            !isNear(aspectRatio(snapshot), aspectRatio(layout), 0.2)));\n}\nfunction checkNodeWasScrollRoot(node) {\n    return node !== node.root && node.scroll?.wasRoot;\n}\n\nexport { cleanDirtyNodes, createProjectionNode, mixAxis, mixAxisDelta, mixBox, propagateDirtyNodes };\n","import { addDomEvent } from '../../events/add-dom-event.mjs';\nimport { createProjectionNode } from './create-projection-node.mjs';\n\nconst DocumentProjectionNode = createProjectionNode({\n    attachResizeListener: (ref, notify) => addDomEvent(ref, \"resize\", notify),\n    measureScroll: () => ({\n        x: document.documentElement.scrollLeft || document.body.scrollLeft,\n        y: document.documentElement.scrollTop || document.body.scrollTop,\n    }),\n    checkIsScrollRoot: () => true,\n});\n\nexport { DocumentProjectionNode };\n","import { createProjectionNode } from './create-projection-node.mjs';\nimport { DocumentProjectionNode } from './DocumentProjectionNode.mjs';\n\nconst rootProjectionNode = {\n    current: undefined,\n};\nconst HTMLProjectionNode = createProjectionNode({\n    measureScroll: (instance) => ({\n        x: instance.scrollLeft,\n        y: instance.scrollTop,\n    }),\n    defaultParent: () => {\n        if (!rootProjectionNode.current) {\n            const documentNode = new DocumentProjectionNode({});\n            documentNode.mount(window);\n            documentNode.setOptions({ layoutScroll: true });\n            rootProjectionNode.current = documentNode;\n        }\n        return rootProjectionNode.current;\n    },\n    resetTransform: (instance, value) => {\n        instance.style.transform = value !== undefined ? value : \"none\";\n    },\n    checkIsScrollRoot: (instance) => Boolean(window.getComputedStyle(instance).position === \"fixed\"),\n});\n\nexport { HTMLProjectionNode, rootProjectionNode };\n","import { DragGesture } from '../../gestures/drag/index.mjs';\nimport { PanGesture } from '../../gestures/pan/index.mjs';\nimport { MeasureLayout } from './layout/MeasureLayout.mjs';\nimport { HTMLProjectionNode } from '../../projection/node/HTMLProjectionNode.mjs';\n\nconst drag = {\n    pan: {\n        Feature: PanGesture,\n    },\n    drag: {\n        Feature: DragGesture,\n        ProjectionNode: HTMLProjectionNode,\n        MeasureLayout,\n    },\n};\n\nexport { drag };\n","import { 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","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 { HTMLProjectionNode } from '../../projection/node/HTMLProjectionNode.mjs';\nimport { MeasureLayout } from './layout/MeasureLayout.mjs';\n\nconst layout = {\n    layout: {\n        ProjectionNode: HTMLProjectionNode,\n        MeasureLayout,\n    },\n};\n\nexport { layout };\n","import { animations } from '../../../motion/features/animations.mjs';\nimport { drag } from '../../../motion/features/drag.mjs';\nimport { gestureAnimations } from '../../../motion/features/gestures.mjs';\nimport { layout } from '../../../motion/features/layout.mjs';\n\nconst featureBundle = {\n    ...animations,\n    ...gestureAnimations,\n    ...drag,\n    ...layout,\n};\n\nexport { featureBundle };\n","import { createDomVisualElement } from '../../dom/create-visual-element.mjs';\nimport { createMotionProxy } from '../create-proxy.mjs';\nimport { featureBundle } from './feature-bundle.mjs';\n\nconst motion = /*@__PURE__*/ createMotionProxy(featureBundle, createDomVisualElement);\n\nexport { motion };\n","import React, { FC, useMemo } from 'react';\nimport { motion } from 'framer-motion';\nimport {\n  ChartInternalShallowDataShape,\n  DEFAULT_TRANSITION,\n  Direction,\n  mergeDefaultProps\n} from '@/common';\n\nexport interface BarTargetMarkerProps {\n  /**\n   * Height of the bar.\n   */\n  height: number;\n\n  /**\n   * Width of the bar.\n   */\n  width: number;\n\n  /**\n   * SVG x attribute for the bar.\n   */\n  x: number;\n\n  /**\n   * SVG y attribute for the bar.\n   */\n  y: number;\n\n  /**\n   * Group index or index of the bar. Set internally by `BarSeries`.\n   */\n  index: number;\n\n  /**\n   * D3 scale for Axis. Set internally by `BarChart`.\n   */\n  scale: any;\n\n  /**\n   * Parsed data shape. Set internally by `BarChart`.\n   */\n  data: ChartInternalShallowDataShape;\n\n  /**\n   * Color of the target marker line.\n   */\n  fill: string;\n\n  /**\n   * Color of the positive delta line.\n   */\n  positiveDeltaFill: string;\n\n  /**\n   * Color of the negative delta line.\n   */\n  negativeDeltaFill: string;\n\n  /**\n   * Number of the bars in the bar group. Set internally by `BarSeries`.\n   */\n  barCount: number;\n\n  /**\n   * Layout of bar chart to render. Set internally by `BarSeries`.\n   */\n  layout: Direction;\n\n  /**\n   * Whether to animate the enter/update/exit. Set internally by `BarSeries`.\n   */\n  animated: boolean;\n\n  /**\n   * Class name to apply to the text.\n   */\n  className?: string;\n\n  /**\n   * Thickness of the target marker line.\n   */\n  targetStrokeWidth?: number;\n\n  /**\n   * Thickness of the difference/delta line that shows distance between target and actual value.\n   */\n  deltaStrokeWidth?: number;\n}\n\nexport const BarTargetMarker: FC<Partial<BarTargetMarkerProps>> = (props) => {\n  const {\n    data,\n    height,\n    width,\n    x,\n    y,\n    animated,\n    layout,\n    scale,\n    index,\n    barCount,\n    fill,\n    positiveDeltaFill,\n    negativeDeltaFill,\n    targetStrokeWidth,\n    deltaStrokeWidth\n  } = mergeDefaultProps(BAR_TARGET_MARKER_DEFAULT_PROPS, props);\n  const isVertical = layout === 'vertical';\n  const [valuePos, targetPos] = useMemo(\n    () => [scale(data.value), scale(data.target)],\n    [data.target, data.value, scale]\n  );\n\n  const enterProps = useMemo(() => {\n    let newY = y;\n    let newX = x;\n\n    if (isVertical) {\n      newY = targetPos;\n    } else {\n      newX = targetPos;\n    }\n\n    return {\n      translateX: newX,\n      translateY: newY,\n      opacity: 1\n    };\n  }, [isVertical, targetPos, x, y]);\n\n  const exitProps = useMemo(() => {\n    let newY = y;\n    let newX = x;\n\n    if (isVertical) {\n      const maxY = Math.max(...scale.range());\n      newY = maxY;\n\n      newX = newX + width / 2;\n    } else {\n      const minX = Math.min(...scale.range());\n      newX = minX;\n    }\n\n    return {\n      translateY: newY,\n      translateX: newX,\n      opacity: 0\n    };\n  }, [isVertical, scale, width, x, y]);\n\n  const delay = useMemo(() => {\n    let delay = 0;\n    if (animated) {\n      return (index / barCount) * 0.5;\n    }\n\n    return delay;\n  }, [animated, barCount, index]);\n\n  const delta = Math.abs(valuePos - targetPos);\n  const isTargetGreaterThanValue = targetPos > valuePos;\n  const targetWidth = isVertical ? width : targetStrokeWidth;\n  const targetHeight = isVertical ? targetStrokeWidth : height;\n  const deltaWidth = isVertical\n    ? Math.max(deltaStrokeWidth, 0)\n    : Math.max(delta, 0);\n  const deltaHeight = isVertical\n    ? Math.max(delta, 0)\n    : Math.max(deltaStrokeWidth, 0);\n  const animateDelta = {\n    x: isVertical ? width / 2 : isTargetGreaterThanValue ? -delta : 0,\n    y: isVertical ? (isTargetGreaterThanValue ? -delta : 0) : height / 2\n  };\n\n  return (\n    <motion.g\n      initial={exitProps}\n      animate={enterProps}\n      exit={exitProps}\n      transition={{\n        ...DEFAULT_TRANSITION,\n        delay\n      }}\n    >\n      <motion.rect\n        width={deltaWidth}\n        height={deltaHeight}\n        fill={isTargetGreaterThanValue ? positiveDeltaFill : negativeDeltaFill}\n        animate={animateDelta}\n        transition={DEFAULT_TRANSITION}\n      />\n      <rect width={targetWidth} height={targetHeight} fill={fill} />\n    </motion.g>\n  );\n};\n\nexport const BAR_TARGET_MARKER_DEFAULT_PROPS: Partial<BarTargetMarkerProps> = {\n  layout: 'vertical' as const,\n  fill: '#fff',\n  positiveDeltaFill: '#00C49F',\n  negativeDeltaFill: '#FF7361',\n  targetStrokeWidth: 2,\n  deltaStrokeWidth: 1\n};\n","import React, {\n  Fragment,\n  ReactElement,\n  useCallback,\n  FC,\n  useRef,\n  useMemo,\n  useState\n} from 'react';\nimport chroma from 'chroma-js';\nimport { Gradient, GradientProps } from '@/common/Gradient';\nimport classNames from 'classnames';\nimport { ChartInternalShallowDataShape, Direction } from '@/common/data';\nimport { RangeLinesProps, RangeLines } from './RangeLines';\nimport { CloneElement } from 'reablocks';\nimport { Mask, MaskProps } from '@/common/Mask';\nimport {\n  constructFunctionProps,\n  PropFunctionTypes\n} from '@/common/utils/functions';\nimport { motion } from 'motion/react';\nimport { DEFAULT_TRANSITION } from '@/common/Motion';\nimport { BarLabelProps, BarLabel, BAR_LABEL_DEFAULT_PROPS } from './BarLabel';\nimport { BarTargetMarker, BarTargetMarkerProps } from './BarTargetMarker';\nimport { formatValue, getAriaLabel } from '@/common/utils/formatting';\nimport { GuideBarProps, GuideBar } from './GuideBar';\nimport { ChartTooltipProps, ChartTooltip } from '@/common/Tooltip';\nimport { Glow } from '@/common/Glow';\nimport { ClickEvent } from '@/common/types';\nimport { generateGlowStyles } from '@/common/Glow/utils';\nimport { mergeDefaultProps } from '@/common';\n\nexport type BarType =\n  | 'standard'\n  | 'grouped'\n  | 'stacked'\n  | 'stackedNormalized'\n  | 'stackedDiverging'\n  | 'marimekko'\n  | 'waterfall';\n\nexport type BarProps = {\n  /**\n   * Whether the bar is active or not.\n   */\n  active: boolean;\n\n  /**\n   * Chroma brightness factor to brighten the active bar. See\n   * https://gka.github.io/chroma.js/#color-brighten for more info.\n   */\n  activeBrightness?: number;\n\n  /**\n   * D3 scale for X Axis. Set internally by `BarChart`.\n   */\n  xScale: any;\n\n  /**\n   * D3 scale for Y Axis. Set internally by `BarChart`.\n   */\n  yScale: any;\n\n  /**\n   * D3 scale for X Multi-Group Axis. Set internally by `BarChart`.\n   */\n  xScale1: any;\n\n  /**\n   * Parsed data shape. Set internally by `BarChart`.\n   */\n  data: ChartInternalShallowDataShape;\n\n  /**\n   * Id set internally by `BarChart`.\n   */\n  id: string;\n\n  /**\n   * Gradient shades for the bar.\n   */\n  gradient: ReactElement<GradientProps, typeof Gradient> | null;\n\n  /**\n   * SVG rx attribute for the bar.\n   */\n  rx: number;\n\n  /**\n   * SVG ry attribute for the bar.\n   */\n  ry: number;\n\n  /**\n   * Width of the bar. Set internally by `BarSeries`.\n   */\n  width: number;\n\n  /**\n   * Padding for the bar groups.\n   */\n  padding: number;\n\n  /**\n   * Total number of bars used for animation. Set internally by `BarSeries`.\n   */\n  barCount: number;\n\n  /**\n   * Color callback for the bar.\n   */\n  color: any;\n\n  /**\n   * Cursor for the bar element.\n   */\n  cursor: string;\n\n  /**\n   * Index of the bar. Set internally by `BarSeries`.\n   */\n  barIndex: number;\n\n  /**\n   * Index of the group. Set internally by `BarSeries`.\n   */\n  groupIndex?: number;\n\n  /**\n   * Whether to animate the enter/update/exit. Set internally by `BarSeries`.\n   */\n  animated: boolean;\n\n  /**\n   * Whether this is categorical chart or not. Set internally by `BarSeries`.\n   */\n  isCategorical: boolean;\n\n  /**\n   * Rangelines element. for the bar.\n   */\n  rangeLines: ReactElement<RangeLinesProps, typeof RangeLines> | null;\n\n  /**\n   * Mask element for the bar.\n   */\n  mask: ReactElement<MaskProps, typeof Mask> | null;\n\n  /**\n   * Tooltip element.\n   */\n  tooltip: ReactElement<ChartTooltipProps, typeof ChartTooltip> | null;\n\n  /**\n   * Direction of the chart. Set internally by `BarSeries`.\n   */\n  layout: Direction;\n\n  /**\n   * Type of bar chart. Set internally by `BarSeries`.\n   */\n  type: BarType;\n\n  /**\n   * Label element.\n   */\n  label: ReactElement<BarLabelProps, typeof BarLabel> | null;\n\n  /**\n   * Target marker element.\n   */\n  targetMarker: ReactElement<\n    BarTargetMarkerProps,\n    typeof BarTargetMarker\n  > | null;\n\n  /**\n   * Guide bar component.\n   */\n  guide: ReactElement<GuideBarProps, typeof GuideBar> | null;\n\n  /**\n   * Force a min height on the bar.\n   */\n  minHeight?: number;\n\n  /**\n   * Glow styling for the bar.\n   */\n  glow?: Glow;\n\n  /**\n   * Event for when the bar is clicked.\n   */\n  onClick?: (event: ClickEvent) => void;\n\n  /**\n   * Event for when the bar has mouse enter.\n   */\n  onMouseEnter?: (event) => void;\n\n  /**\n   * Event for when the bar has mouse leave.\n   */\n  onMouseLeave?: (event) => void;\n\n  /**\n   * Event for when a bar has mouse move.\n   */\n  onMouseMove?: (event) => void;\n} & PropFunctionTypes;\n\ninterface BarCoordinates {\n  width: number;\n  height: number;\n  x: number;\n  y: number;\n}\n\nexport const Bar: FC<Partial<BarProps>> = (props) => {\n  const {\n    activeBrightness,\n    id,\n    gradient,\n    data,\n    barIndex,\n    color,\n    yScale,\n    barCount,\n    glow,\n    xScale,\n    groupIndex,\n    minHeight,\n    rangeLines,\n    animated,\n    active,\n    type,\n    tooltip,\n    layout,\n    mask,\n    label,\n    targetMarker,\n    cursor,\n    rx,\n    ry,\n    isCategorical,\n    className,\n    style,\n    width,\n    padding,\n    guide,\n    xScale1,\n    onMouseEnter,\n    onClick,\n    onMouseMove,\n    onMouseLeave\n  } = mergeDefaultProps(BAR_DEFAULT_PROPS, props);\n  const labelProps = useMemo(\n    () => ({ ...BAR_LABEL_DEFAULT_PROPS, ...label?.props }),\n    [label?.props]\n  );\n\n  const isVertical = useMemo(() => layout === 'vertical', [layout]);\n  const rect = useRef<SVGGElement | null>(null);\n  const [internalActive, setInternalActive] = useState<boolean>(active);\n\n  const calculateLinearScalePadding = useCallback(\n    (scale, offset: number, size: number) => {\n      // This function calculates the padding on a linear scale used by the marimekko chart.\n      const totalSize = scale.range()[1];\n      const sizeMinusPadding = totalSize - padding * (barCount - 1);\n      const multiplier = sizeMinusPadding / totalSize;\n      offset = offset * multiplier + groupIndex! * padding;\n      size = size * multiplier;\n\n      return { size, offset };\n    },\n    [barCount, groupIndex, padding]\n  );\n\n  const getExit = useCallback(\n    ({ x, y, width, height }: BarCoordinates) => {\n      let newX = isVertical ? x : Math.min(...xScale.range());\n      let newY = isVertical ? Math.max(...yScale.range()) : y;\n      const newHeight = isVertical ? 0 : height;\n      const newWidth = isVertical ? width : 0;\n\n      if (type === 'stackedDiverging') {\n        if (isVertical) {\n          newY = newY / 2;\n        } else {\n          newX = newX / 2;\n        }\n      }\n\n      return {\n        x: newX,\n        y: newY,\n        height: newHeight,\n        width: newWidth\n      };\n    },\n    [isVertical, type, xScale, yScale]\n  );\n\n  const getKeyCoords = useCallback(\n    (\n      v,\n      v0,\n      v1,\n      scale,\n      sizeOverride: number,\n      isCategorical: boolean,\n      padding: number\n    ) => {\n      let offset;\n      let size;\n\n      if (isCategorical) {\n        if (scale.bandwidth) {\n          offset = scale(v);\n          size = scale.bandwidth();\n\n          if (sizeOverride) {\n            if (offset) {\n              offset = offset + size / 2 - sizeOverride / 2;\n            } else {\n              // Stacked bar charts don't have offsets...\n              offset = size / 2 - sizeOverride / 2;\n            }\n\n            size = sizeOverride;\n          }\n        } else {\n          if (sizeOverride) {\n            throw new Error('Not a valid option for this scale type');\n          }\n\n          offset = scale(v0);\n          size = scale((v1 as any) - (v0 as any));\n\n          if (padding) {\n            const calc = calculateLinearScalePadding(scale, offset, size);\n            offset = calc.offset;\n            size = calc.size;\n          }\n        }\n      } else {\n        if (sizeOverride) {\n          throw new Error('Not a valid option for this scale type');\n        }\n\n        const c0 = scale(v0);\n        const c1 = scale(v1);\n        const delta = c1 - c0;\n        offset = c0;\n        size = Math.max(delta - 1, 0);\n      }\n\n      return {\n        offset: isNaN(offset) ? 0 : offset,\n        size: isNaN(size) ? 0 : size\n      };\n    },\n    [calculateLinearScalePadding]\n  );\n\n  const getValueCoords = useCallback(\n    (v0, v1, scale) => {\n      const c0 = scale(v0);\n      const c1 = scale(v1);\n      const size = Math.abs(c0 - c1);\n      const minSize = Math.max(minHeight || 0, size);\n      const offset = Math.min(c0, c1);\n\n      return {\n        offset: isNaN(offset) ? 0 : offset,\n        size: isNaN(minSize) ? 0 : minSize\n      };\n    },\n    [minHeight]\n  );\n\n  const getCoords = useCallback(\n    (data: ChartInternalShallowDataShape) => {\n      let newYScale = yScale;\n      let newXScale = xScale;\n\n      if (xScale1) {\n        if (isVertical) {\n          newXScale = xScale1;\n        } else {\n          newYScale = xScale1;\n        }\n      }\n\n      if (isVertical) {\n        const xCoords = getKeyCoords(\n          data.x,\n          data.x0,\n          data.x1,\n          newXScale,\n          width,\n          isCategorical,\n          padding\n        );\n        const yCoords = getValueCoords(data.y0, data.y1, newYScale);\n\n        return {\n          x: xCoords.offset,\n          width: xCoords.size,\n          y: yCoords.offset,\n          height: yCoords.size\n        } as BarCoordinates;\n      } else {\n        const yCoords = getKeyCoords(\n          data.y,\n          data.y0,\n          data.y1,\n          newYScale,\n          width,\n          isCategorical,\n          padding\n        );\n        const xCoords = getValueCoords(data.x0, data.x1, newXScale);\n\n        return {\n          x: xCoords.offset,\n          width: xCoords.size,\n          y: yCoords.offset,\n          height: yCoords.size\n        } as BarCoordinates;\n      }\n    },\n    [\n      getKeyCoords,\n      getValueCoords,\n      isCategorical,\n      isVertical,\n      padding,\n      width,\n      xScale,\n      xScale1,\n      yScale\n    ]\n  );\n\n  const onMouseEnterInternal = useCallback(\n    (event) => {\n      // Only tooltip bars rely on this...\n      if (tooltip) {\n        setInternalActive(true);\n      }\n\n      onMouseEnter?.({\n        value: data,\n        nativeEvent: event\n      });\n    },\n    [data, onMouseEnter, tooltip]\n  );\n\n  const onMouseLeaveInternal = useCallback(\n    (event) => {\n      // Only tooltip bars rely on this...\n      if (tooltip) {\n        setInternalActive(false);\n      }\n\n      onMouseLeave?.({\n        value: data,\n        nativeEvent: event\n      });\n    },\n    [data, onMouseLeave, tooltip]\n  );\n\n  const onMouseClick = useCallback(\n    (event) => {\n      onClick?.({\n        value: data,\n        nativeEvent: event\n      });\n    },\n    [data, onClick]\n  );\n\n  const getFill = useCallback(\n    (color: string) => {\n      if (mask) {\n        return `url(#mask-pattern-${id})`;\n      } else {\n        if (gradient) {\n          return `url(#gradient-${id})`;\n        }\n\n        return color;\n      }\n    },\n    [gradient, id, mask]\n  );\n\n  const tooltipData = useMemo(() => {\n    const xAttr = isCategorical ? 'x' : 'x0';\n    let x = data[xAttr]!;\n\n    // Stacked diverging negative numbers\n    // in horizontal layouts need to pull x0\n    if ((data.x0 as number) < 0) {\n      x = data.x0;\n    }\n\n    const matches = isVertical\n      ? data.key && data.key !== x\n      : data.key && data.key !== data.y;\n\n    if (matches) {\n      x = `${data.key} ∙ ${x}`;\n    }\n\n    return {\n      y: data.y,\n      x\n    };\n  }, [data, isCategorical, isVertical]);\n\n  const ariaLabelData = useMemo(() => getAriaLabel(tooltipData), [tooltipData]);\n\n  const getTransition = useCallback(\n    (index: number) => {\n      if (animated) {\n        let delay = 0;\n        if (layout === 'vertical') {\n          delay = (index / barCount) * 0.5;\n        } else {\n          delay = ((barCount - index) / barCount) * 0.5;\n        }\n\n        return {\n          ...DEFAULT_TRANSITION,\n          delay: delay\n        };\n      } else {\n        return {\n          type: false as const,\n          delay: 0\n        };\n      }\n    },\n    [animated, barCount, layout]\n  );\n\n  const renderBar = useCallback(\n    (currentColorShade: string, coords: BarCoordinates, index: number) => {\n      const maskPath = mask ? `url(#mask-${id})` : '';\n      const fill = getFill(currentColorShade);\n      const initialExit = getExit(coords);\n      const extras = constructFunctionProps({ className, style }, data);\n      const transition = getTransition(index);\n\n      // UGH: https://github.com/framer/motion/issues/384\n      const initial = {\n        ...initialExit,\n        attrX: initialExit.x,\n        attrY: initialExit.y,\n        fill\n      };\n\n      delete initial.x;\n      delete initial.y;\n\n      const animate = {\n        ...coords,\n        attrX: coords.x,\n        attrY: coords.y,\n        fill\n      };\n\n      delete animate.x;\n      delete animate.y;\n\n      // If the fill is a gradient, we need to add it to the element\n      // rather than try and animate it. This is a workaround for a bug\n      // in the motion library where the gradient is not animated.\n      const extra: any = {};\n      if (fill.includes('url')) {\n        delete initial.fill;\n        delete animate.fill;\n        extra.fill = fill;\n      }\n\n      return (\n        <g ref={rect}>\n          <motion.rect\n            className={classNames(extras.className)}\n            style={{\n              ...extras.style,\n              ...generateGlowStyles({\n                glow,\n                colorSchemeColor: currentColorShade\n              }),\n              cursor\n            }}\n            {...extra}\n            mask={maskPath}\n            rx={rx}\n            ry={ry}\n            initial={initial}\n            animate={animate}\n            exit={initial}\n            transition={transition}\n            onMouseEnter={onMouseEnterInternal}\n            onMouseLeave={onMouseLeaveInternal}\n            onClick={onMouseClick}\n            onMouseMove={onMouseMove}\n            tabIndex={0}\n            aria-label={ariaLabelData}\n            role=\"graphics-document\"\n          />\n        </g>\n      );\n    },\n    [\n      className,\n      cursor,\n      data,\n      getExit,\n      getFill,\n      getTransition,\n      glow,\n      id,\n      mask,\n      onMouseClick,\n      onMouseEnterInternal,\n      onMouseLeaveInternal,\n      onMouseMove,\n      rx,\n      ry,\n      style,\n      ariaLabelData\n    ]\n  );\n\n  const renderGuideBar = useCallback(() => {\n    if (!guide) {\n      return null;\n    }\n\n    // If we are stacked, only render the first bar\n    if (type === 'stacked' && barIndex !== 0) {\n      return null;\n    }\n\n    // No reason to show them since they are always 100% tall\n    if (type === 'stackedNormalized' || type === 'marimekko') {\n      console.error('Guide bars are not supported for these chart types');\n      return null;\n    }\n\n    const valueScale = isVertical ? yScale : xScale;\n    const [start, end] = valueScale.domain();\n    const attr = isVertical ? 'y' : 'x';\n\n    // For stacked diverging we need to flip the points for positive / negative bars\n    const attrStart = type === 'stackedDiverging' ? '0' : '1';\n    const endPoint = type === 'stackedDiverging' ? start : end;\n    const startPoint =\n      type === 'stackedDiverging' && (data[attr]! as number) > 0\n        ? end\n        : endPoint;\n\n    const coords = getCoords({\n      ...data,\n      [attr]: endPoint,\n      [`${attr}${attrStart}`]: startPoint\n    });\n\n    return (\n      <CloneElement<GuideBarProps>\n        element={guide}\n        {...coords}\n        active={active}\n      />\n    );\n  }, [\n    active,\n    barIndex,\n    data,\n    getCoords,\n    guide,\n    isVertical,\n    type,\n    xScale,\n    yScale\n  ]);\n\n  const isActive = tooltip ? internalActive : active;\n  const stroke = color(data, barIndex);\n  const coords = getCoords(data);\n  const currentColorShade = active\n    ? chroma(stroke).brighten(activeBrightness).hex()\n    : stroke;\n  const rangeLineColor = (rangeLines && rangeLines.props.color) || stroke;\n  const rangeLineColorShade = active\n    ? chroma(rangeLineColor).brighten(activeBrightness)\n    : rangeLineColor;\n  const index = groupIndex !== undefined ? groupIndex : barIndex;\n  const scale = isVertical ? yScale : xScale;\n  const barLabel = isVertical ? tooltipData.y : tooltipData.x;\n  const placement = layout === 'vertical' ? 'top' : 'right';\n  const hasTarget = data.target;\n\n  return (\n    <Fragment>\n      {renderGuideBar()}\n      {renderBar(currentColorShade, coords, index)}\n      {rangeLines && (\n        <CloneElement<RangeLinesProps>\n          element={rangeLines}\n          {...coords}\n          index={index}\n          data={data}\n          scale={scale}\n          color={rangeLineColorShade}\n          barCount={barCount}\n          animated={animated}\n          layout={layout}\n          type={type}\n        />\n      )}\n      {mask && (\n        <Fragment>\n          <Mask id={`mask-${id}`} fill={`url(#gradient-${id})`} />\n          <CloneElement<MaskProps>\n            element={mask}\n            id={`mask-pattern-${id}`}\n            fill={stroke}\n          />\n        </Fragment>\n      )}\n      {gradient && (\n        <CloneElement<GradientProps>\n          element={gradient}\n          id={`gradient-${id}`}\n          direction={layout}\n          color={currentColorShade}\n        />\n      )}\n      {label && (\n        <CloneElement<BarLabelProps>\n          element={label}\n          {...coords}\n          text={formatValue(barLabel)}\n          index={index}\n          data={data}\n          scale={scale}\n          fill={labelProps.fill || currentColorShade}\n          barCount={barCount}\n          animated={animated}\n          layout={layout}\n          type={type}\n        />\n      )}\n      {hasTarget && (\n        <CloneElement<BarTargetMarkerProps>\n          element={targetMarker}\n          {...coords}\n          index={index}\n          data={data}\n          scale={scale}\n          barCount={barCount}\n          animated={animated}\n          layout={layout}\n        />\n      )}\n      {tooltip && (\n        <CloneElement<ChartTooltipProps>\n          element={tooltip}\n          visible={!!isActive}\n          reference={rect}\n          color={color}\n          value={tooltipData}\n          placement={(tooltip.props as any).placement || placement}\n          data={data}\n        />\n      )}\n    </Fragment>\n  );\n};\n\nexport const BAR_DEFAULT_PROPS = {\n  activeBrightness: 0.5,\n  rx: 0,\n  ry: 0,\n  cursor: 'auto',\n  rangeLines: null,\n  label: null,\n  targetMarker: <BarTargetMarker />,\n  tooltip: null,\n  layout: 'vertical' as const,\n  guide: null,\n  gradient: <Gradient />\n};\n","import {\n  LinearValueMarker,\n  LinearValueMarkerProps,\n  mergeDefaultProps\n} from '@/common';\nimport { ColorSchemeType, getColor } from '@/common/color';\nimport {\n  ChartInternalDataShape,\n  ChartInternalNestedDataShape,\n  ChartInternalShallowDataShape,\n  Direction\n} from '@/common/data';\nimport {\n  ChartTooltip,\n  TooltipArea,\n  TooltipAreaEvent,\n  TooltipAreaProps\n} from '@/common/Tooltip';\nimport { offset } from '@floating-ui/dom';\nimport { CloneElement } from 'reablocks';\nimport React, {\n  FC,\n  Fragment,\n  ReactElement,\n  useCallback,\n  useMemo,\n  useRef,\n  useState\n} from 'react';\nimport { Bar, BAR_DEFAULT_PROPS, BarProps, BarType } from './Bar';\n\ntype BarElement = ReactElement<BarProps, typeof Bar>;\n\nexport interface BarSeriesProps {\n  /**\n   * Parsed data shape. Set internally by `BarChart`.\n   */\n  data: ChartInternalDataShape[];\n\n  /**\n   * Id of the bar chart. Set internally by `BarChart`.\n   */\n  id: string;\n\n  /**\n   * D3 scale for X Axis. Set internally by `BarChart`.\n   */\n  xScale: any;\n\n  /**\n   * D3 scale for Y Axis. Set internally by `BarChart`.\n   */\n  yScale: any;\n\n  /**\n   * D3 scale for X Multi-Group Axis. Set internally by `BarChart`.\n   */\n  xScale1: any;\n\n  /**\n   * Bar element.\n   */\n  bar: BarElement | BarElement[];\n\n  /**\n   * Type of the chart.\n   */\n  type: BarType;\n\n  /**\n   * Color scheme for the chart.\n   */\n  colorScheme: ColorSchemeType;\n\n  /**\n   * Whether the chart is animated or not.\n   */\n  animated: boolean;\n\n  /**\n   * Amount of padding between each bar.\n   */\n  padding: number;\n\n  /**\n   * Amount of padding between each group.\n   */\n  groupPadding: number;\n\n  /**\n   * Whether the chart is categorical or not. Set internally by `BarChart`.\n   */\n  isCategorical: boolean;\n\n  /**\n   * Direction of the chart\n   */\n  layout: Direction;\n\n  /**\n   * The size of each bin/bucket in the bar chart.\n   */\n  binSize?: number;\n\n  /**\n   * Height of the chart. Set internally by `BarChart`.\n   */\n  height: number;\n\n  /**\n   * Width of the chart. Set internally by `BarChart`.\n   */\n  width: number;\n\n  /**\n   * Tooltip for the chart area.\n   */\n  tooltip: ReactElement<TooltipAreaProps, typeof TooltipArea> | null;\n\n  /**\n   * Value markers line for the chart.\n   */\n  valueMarkers:\n    | ReactElement<LinearValueMarkerProps, typeof LinearValueMarker>[]\n    | null;\n}\n\nexport const BarSeries: FC<Partial<BarSeriesProps>> = (props) => {\n  const {\n    data,\n    tooltip,\n    xScale,\n    yScale,\n    height,\n    width,\n    colorScheme,\n    xScale1,\n    bar,\n    padding,\n    animated,\n    isCategorical,\n    layout,\n    type,\n    id,\n    valueMarkers\n  } = mergeDefaultProps(BAR_SERIES_DEFAULT_PROPS, props);\n  const ref = useRef<any | null>(null);\n  const [activeValues, setActiveValues] = useState<any | null>(null);\n  const isVertical = useMemo(() => layout === 'vertical', [layout]);\n\n  const isMultiSeries = useMemo(() => {\n    return (\n      type === 'grouped' ||\n      type === 'stacked' ||\n      type === 'marimekko' ||\n      type === 'stackedNormalized' ||\n      type === 'stackedDiverging'\n    );\n  }, [type]);\n\n  const getTransform = useCallback(\n    (data: ChartInternalNestedDataShape) => {\n      let xPos = 0;\n      let yPos = 0;\n      if (type !== 'marimekko') {\n        if (layout === 'vertical') {\n          xPos = xScale(data.key);\n        } else {\n          yPos = yScale(data.key);\n        }\n      }\n\n      return `translate(${xPos}, ${yPos})`;\n    },\n    [layout, type, xScale, yScale]\n  );\n\n  const getBarColor = useCallback(\n    (point, index: number) => {\n      let key = 'key';\n      if (isMultiSeries) {\n        if (layout === 'vertical') {\n          key = 'x';\n        } else {\n          key = 'y';\n        }\n      }\n\n      // histograms...\n      if (point[key] === undefined) {\n        key = 'x0';\n      }\n\n      return getColor({\n        colorScheme,\n        point,\n        index,\n        data,\n        isMultiSeries,\n        attribute: key\n      });\n    },\n    [colorScheme, data, isMultiSeries, layout]\n  );\n\n  const onMouseMove = useCallback((event) => {\n    // Manuallly call mouse move so we don't have to kill bar pointer events\n    ref.current?.triggerMouseMove(event);\n  }, []);\n\n  const onValueEnter = useCallback((event: TooltipAreaEvent) => {\n    setActiveValues(event.value);\n  }, []);\n\n  const onValueLeave = useCallback(() => {\n    setActiveValues(null);\n  }, []);\n\n  const renderBar = useCallback(\n    (\n      data: ChartInternalShallowDataShape,\n      barIndex: number,\n      barCount: number,\n      groupIndex?: number\n    ) => {\n      const active = activeValues && activeValues.x === data.key;\n\n      let newYScale = yScale;\n      let newXScale = xScale;\n\n      if (xScale1) {\n        if (isVertical) {\n          newXScale = xScale1;\n        } else {\n          newYScale = xScale1;\n        }\n      }\n\n      // Histograms dont have keys\n      let key = barIndex.toString();\n      if (data.key) {\n        key = `${data.key!.toString()}-${groupIndex}-${data.x}`;\n      }\n\n      let barElements = Array.isArray(bar) ? bar[barIndex] : bar;\n      if (!bar) {\n        barElements = <Bar {...BAR_DEFAULT_PROPS} />;\n      }\n\n      return (\n        <Fragment key={key}>\n          <CloneElement<BarProps>\n            element={barElements}\n            id={`${id}-bar-${groupIndex}-${barIndex}`}\n            animated={animated}\n            active={active}\n            xScale={newXScale}\n            xScale1={xScale1}\n            yScale={newYScale}\n            padding={padding}\n            barCount={barCount}\n            groupIndex={groupIndex}\n            barIndex={barIndex}\n            data={data}\n            isCategorical={isCategorical}\n            color={getBarColor}\n            layout={layout}\n            type={type}\n            onMouseMove={onMouseMove}\n          />\n        </Fragment>\n      );\n    },\n    [\n      activeValues,\n      animated,\n      bar,\n      getBarColor,\n      id,\n      isCategorical,\n      isVertical,\n      layout,\n      onMouseMove,\n      padding,\n      type,\n      xScale,\n      xScale1,\n      yScale\n    ]\n  );\n\n  const renderBarGroup = useCallback(\n    (\n      data: ChartInternalShallowDataShape[],\n      barCount: number,\n      groupIndex?: number\n    ) => {\n      return (\n        <Fragment>\n          {data.map((barData, barIndex) =>\n            renderBar(barData, barIndex, barCount, groupIndex)\n          )}\n        </Fragment>\n      );\n    },\n    [renderBar]\n  );\n\n  const renderValueMarkers = useCallback(\n    () => (\n      <>\n        {valueMarkers?.length &&\n          valueMarkers.map((marker) => (\n            <CloneElement<LinearValueMarkerProps>\n              key={marker.key}\n              element={marker}\n              size={layout === 'vertical' ? width : height}\n              value={\n                layout === 'vertical'\n                  ? yScale(marker.props.value)\n                  : xScale(marker.props.value)\n              }\n              direction={layout === 'vertical' ? 'horizontal' : 'vertical'}\n            />\n          ))}\n      </>\n    ),\n    [height, layout, valueMarkers, width, xScale, yScale]\n  );\n\n  return (\n    <CloneElement<TooltipAreaProps>\n      element={tooltip}\n      childRef={ref}\n      xScale={xScale}\n      yScale={yScale}\n      data={data}\n      height={height}\n      width={width}\n      inverse={false}\n      isHorizontal={layout === 'horizontal'}\n      color={getBarColor}\n      onValueEnter={onValueEnter}\n      onValueLeave={onValueLeave}\n      isContinous={false}\n    >\n      {isMultiSeries &&\n        (data as ChartInternalNestedDataShape[]).map((groupData, index) => (\n          <g transform={getTransform(groupData)} key={`bar-group-${index}`}>\n            {renderBarGroup(\n              groupData.data as ChartInternalShallowDataShape[],\n              data.length,\n              index\n            )}\n          </g>\n        ))}\n      {!isMultiSeries &&\n        renderBarGroup(data as ChartInternalShallowDataShape[], data.length)}\n      {renderValueMarkers()}\n    </CloneElement>\n  );\n};\n\nexport const BAR_SERIES_DEFAULT_PROPS = {\n  type: 'standard' as BarType,\n  padding: 0.1,\n  groupPadding: 16,\n  animated: true,\n  tooltip: (\n    <TooltipArea\n      tooltip={<ChartTooltip followCursor={true} modifiers={[offset(5)]} />}\n    />\n  ),\n  colorScheme: 'cybertron',\n  bar: <Bar />,\n  layout: 'vertical' as const\n};\n","import React, { FC, useMemo } from 'react';\nimport { ChartInternalShallowDataShape, Direction } from '@/common/data';\nimport { motion } from 'motion/react';\nimport { DEFAULT_TRANSITION } from '@/common/Motion';\nimport { BarType } from './Bar';\n\nexport interface RangeLinesProps {\n  /**\n   * Height of the bar.\n   */\n  height: number;\n\n  /**\n   * Width of the bar.\n   */\n  width: number;\n\n  /**\n   * SVG x attribute for the bar.\n   */\n  x: number;\n\n  /**\n   * SVG y attribute for the bar.\n   */\n  y: number;\n\n  /**\n   * Group index or index of the bar. Set internally by `BarSeries`.\n   */\n  index: number;\n\n  /**\n   * Stroke width of the range line.\n   */\n  strokeWidth: number;\n\n  /**\n   * D3 scale for Axis. Set internally by `BarChart`.\n   */\n  scale: any;\n\n  /**\n   * Position of the range line.\n   */\n  position: 'top' | 'bottom';\n\n  /**\n   * Parsed data shape. Set internally by `BarChart`.\n   */\n  data: ChartInternalShallowDataShape;\n\n  /**\n   * Color for the range line.\n   */\n  color: string;\n\n  /**\n   * Total number of bars used for animation. Set internally by `BarSeries`.\n   */\n  barCount: number;\n\n  /**\n   * Direction of the chart. Set internally by `BarSeries`.\n   */\n  layout: Direction;\n\n  /**\n   * Whether to animate the enter/update/exit. Set internally by `BarSeries`.\n   */\n  animated: boolean;\n\n  /**\n   * Type of bar chart. Set internally by `BarSeries`.\n   */\n  type: BarType;\n}\n\nexport const RangeLines: FC<Partial<RangeLinesProps>> = ({\n  layout = 'vertical',\n  color,\n  x,\n  y,\n  scale,\n  type,\n  height,\n  position = 'top',\n  strokeWidth = 1,\n  width,\n  animated,\n  index,\n  barCount,\n  data\n}) => {\n  const isVertical = useMemo(() => layout === 'vertical', [layout]);\n  const rangeLineHeight = useMemo(\n    () => Math.min(strokeWidth, isVertical ? height : width),\n    [height, isVertical, strokeWidth, width]\n  );\n\n  const [newWidth, newHeight] = useMemo(\n    () => [\n      isVertical ? width : rangeLineHeight,\n      isVertical ? rangeLineHeight : height\n    ],\n    [height, isVertical, rangeLineHeight, width]\n  );\n\n  const enterProps = useMemo(() => {\n    let newY = y;\n    let newX = x;\n\n    // If its diverging and the value is negative, we\n    // need to reverse the type...\n    const isTop = position === 'top';\n    const direction = isVertical\n      ? (data.y as number) < 0 && isTop\n        ? 'bottom'\n        : position\n      : (data.x0 as number) < 0 && isTop\n        ? 'bottom'\n        : position;\n\n    if (isVertical) {\n      if (direction === 'top') {\n        newY = y;\n      } else {\n        newY = y + height - rangeLineHeight;\n      }\n    } else {\n      if (direction === 'top') {\n        newX = x + width - rangeLineHeight;\n      } else {\n        newX = x;\n      }\n    }\n\n    return {\n      x: newX,\n      y: newY,\n      opacity: 1\n    };\n  }, [\n    data.x0,\n    data.y,\n    height,\n    isVertical,\n    position,\n    rangeLineHeight,\n    width,\n    x,\n    y\n  ]);\n\n  const exitProps = useMemo(() => {\n    let newY = y;\n    let newX = x;\n\n    if (isVertical) {\n      const maxY = Math.max(...scale.range());\n      if (position === 'top') {\n        newY = maxY;\n      } else {\n        newY = maxY + height - rangeLineHeight;\n      }\n    } else {\n      const minX = Math.min(...scale.range());\n      if (position === 'top') {\n        newX = minX;\n      } else {\n        newX = minX + width - rangeLineHeight;\n      }\n    }\n\n    if (type === 'stackedDiverging') {\n      if (isVertical) {\n        newY = newY / 2;\n      } else {\n        newX = newX / 2;\n      }\n    }\n\n    return {\n      y: newY,\n      x: newX,\n      opacity: 0\n    };\n  }, [height, isVertical, position, rangeLineHeight, scale, type, width, x, y]);\n\n  const delay = useMemo(() => {\n    let delay = 0;\n    if (animated) {\n      if (layout === 'vertical') {\n        return (index / barCount) * 0.5;\n      } else {\n        return ((barCount - index) / barCount) * 0.5;\n      }\n    }\n\n    return delay;\n  }, [animated, barCount, index, layout]);\n\n  // UGH: https://github.com/framer/motion/issues/384\n  const initial = useMemo(() => {\n    const r = {\n      ...exitProps,\n      attrX: exitProps.x,\n      attrY: exitProps.y\n    };\n\n    delete r.x;\n    delete r.y;\n\n    return r;\n  }, [exitProps]);\n\n  const animate = useMemo(() => {\n    const r = {\n      ...enterProps,\n      attrX: enterProps.x,\n      attrY: enterProps.y\n    };\n\n    delete r.x;\n    delete r.y;\n\n    return r;\n  }, [enterProps]);\n\n  return (\n    <motion.rect\n      pointerEvents=\"none\"\n      fill={color}\n      width={newWidth}\n      height={newHeight}\n      initial={initial}\n      animate={animate}\n      exit={initial}\n      transition={{\n        ...DEFAULT_TRANSITION,\n        delay\n      }}\n    />\n  );\n};\n","import React, { FC } from 'react';\nimport {\n  BarSeriesProps,\n  BarSeries,\n  BAR_SERIES_DEFAULT_PROPS\n} from './BarSeries';\nimport { Bar, BAR_DEFAULT_PROPS, BarType } from './Bar';\nimport { RangeLines } from './RangeLines';\nimport { Gradient, GradientStop } from '@/common';\n\nexport const StackedBarSeries: FC<Partial<BarSeriesProps>> = (props) => (\n  <BarSeries {...STACKED_BAR_SERIES_DEFAULT_PROPS} {...props} />\n);\n\nexport const STACKED_BAR_SERIES_DEFAULT_PROPS = {\n  ...BAR_SERIES_DEFAULT_PROPS,\n  type: 'stacked' as BarType,\n  bar: (\n    <Bar\n      {...BAR_DEFAULT_PROPS}\n      gradient={\n        <Gradient\n          stops={[\n            <GradientStop offset=\"5%\" stopOpacity={0.1} key=\"start\" />,\n            <GradientStop offset=\"90%\" stopOpacity={0.7} key=\"stop\" />\n          ]}\n        />\n      }\n      rangeLines={<RangeLines position=\"top\" strokeWidth={3} />}\n    />\n  )\n};\n","import React, { FC } from 'react';\nimport { offset } from '@floating-ui/dom';\nimport {\n  BarSeriesProps,\n  BarSeries,\n  BAR_SERIES_DEFAULT_PROPS\n} from './BarSeries';\nimport { Bar, BAR_DEFAULT_PROPS, BarType } from './Bar';\nimport { RangeLines } from './RangeLines';\nimport { ChartTooltip, TooltipTemplate, TooltipArea } from '@/common/Tooltip';\nimport { formatValue } from '@/common/utils/formatting';\nimport { Gradient, GradientStop } from '@/common/Gradient';\n\nexport const StackedNormalizedBarSeries: FC<Partial<BarSeriesProps>> = (\n  props\n) => <BarSeries {...STACKED_NORMALIZED_BAR_SERIES_DEFAULT_PROPS} {...props} />;\n\nexport const STACKED_NORMALIZED_BAR_SERIES_DEFAULT_PROPS = {\n  ...BAR_SERIES_DEFAULT_PROPS,\n  type: 'stackedNormalized' as BarType,\n  tooltip: (\n    <TooltipArea\n      tooltip={\n        <ChartTooltip\n          followCursor={true}\n          modifiers={[offset(5)]}\n          content={(point, color) => {\n            point.data = point.data.map((d) => {\n              // Handle horz case\n              const start = isNaN(d.y0) ? d.x0 : d.y0;\n              const end = isNaN(d.y1) ? d.x1 : d.y1;\n\n              return {\n                ...d,\n                value: `${formatValue(Math.floor((end - start) * 100))}%`\n              };\n            });\n\n            return <TooltipTemplate value={point} color={color} />;\n          }}\n        />\n      }\n    />\n  ),\n  bar: (\n    <Bar\n      {...BAR_DEFAULT_PROPS}\n      gradient={\n        <Gradient\n          stops={[\n            <GradientStop offset=\"5%\" stopOpacity={0.1} key=\"start\" />,\n            <GradientStop offset=\"90%\" stopOpacity={0.7} key=\"stop\" />\n          ]}\n        />\n      }\n      rangeLines={<RangeLines position=\"top\" strokeWidth={3} />}\n    />\n  )\n};\n","import React, { FC } from 'react';\nimport { offset } from '@floating-ui/dom';\nimport {\n  BarSeriesProps,\n  BarSeries,\n  BAR_SERIES_DEFAULT_PROPS\n} from './BarSeries';\nimport { Bar, BAR_DEFAULT_PROPS, BarType } from './Bar';\nimport { RangeLines } from './RangeLines';\nimport { ChartTooltip, TooltipTemplate, TooltipArea } from '@/common/Tooltip';\nimport { formatValue } from '@/common/utils/formatting';\nimport { Gradient, GradientStop } from '@/common/Gradient';\n\nexport const MarimekkoBarSeries: FC<Partial<BarSeriesProps>> = (props) => (\n  <BarSeries {...MARIMEKKO_BAR_SERIES_DEFAULT_PROPS} {...props} />\n);\n\nexport const MARIMEKKO_BAR_SERIES_DEFAULT_PROPS: Partial<BarSeriesProps> = {\n  ...BAR_SERIES_DEFAULT_PROPS,\n  type: 'marimekko' as BarType,\n  padding: 10,\n  tooltip: (\n    <TooltipArea\n      tooltip={\n        <ChartTooltip\n          followCursor={true}\n          modifiers={[offset(5)]}\n          content={(point, color) => {\n            const data = {\n              ...point,\n              data: point.data.map((d) => ({\n                ...d,\n                value: `${formatValue(d.value)} ∙ ${formatValue(\n                  Math.floor((d.y1 - d.y0) * 100)\n                )}%`\n              }))\n            };\n\n            return <TooltipTemplate value={data} color={color} />;\n          }}\n        />\n      }\n    />\n  ),\n  bar: (\n    <Bar\n      {...BAR_DEFAULT_PROPS}\n      padding={10}\n      gradient={\n        <Gradient\n          stops={[\n            <GradientStop offset=\"5%\" stopOpacity={0.1} key=\"start\" />,\n            <GradientStop offset=\"90%\" stopOpacity={0.7} key=\"stop\" />\n          ]}\n        />\n      }\n      rangeLines={<RangeLines position=\"top\" strokeWidth={3} />}\n    />\n  )\n};\n","import React, { FC } from 'react';\nimport { offset } from '@floating-ui/dom';\nimport {\n  BarSeriesProps,\n  BarSeries,\n  BAR_SERIES_DEFAULT_PROPS\n} from './BarSeries';\nimport { ChartTooltip, TooltipTemplate, TooltipArea } from '@/common/Tooltip';\nimport { formatValue } from '@/common/utils/formatting';\nimport { schemes } from '@/common/color';\n\nexport const HistogramBarSeries: FC<Partial<BarSeriesProps>> = ({\n  type,\n  ...rest\n}) => <BarSeries {...HISTOGRAM_BAR_SERIES_DEFAULT_PROPS} {...rest} />;\n\nexport const HISTOGRAM_BAR_SERIES_DEFAULT_PROPS = {\n  ...BAR_SERIES_DEFAULT_PROPS,\n  colorScheme: schemes.cybertron[0],\n  tooltip: (\n    <TooltipArea\n      tooltip={\n        <ChartTooltip\n          followCursor={true}\n          modifiers={[offset(5)]}\n          content={(point, color) => {\n            const data = {\n              ...point,\n              x: `${formatValue(point.x0)} - ${formatValue(point.x1)}`,\n              value: point.y\n            };\n\n            return <TooltipTemplate value={data} color={color} />;\n          }}\n        />\n      }\n    />\n  )\n};\n","import React, { FC } from 'react';\nimport { motion } from 'motion/react';\n\nexport interface GuideBarProps extends SVGRect {\n  /**\n   * Whether the guide bar is active.\n   */\n  active: boolean;\n\n  /**\n   * Fill for the guide bar element.\n   */\n  fill?: string;\n\n  /**\n   * Opacity for the guide bar element.\n   */\n  opacity?: number;\n}\n\nexport const GuideBar: FC<Partial<GuideBarProps>> = ({\n  fill = '#eee',\n  active,\n  opacity = 0.15,\n  ...rest\n}) => {\n  const { x, y, ...other } = rest;\n\n  return (\n    <motion.rect\n      fill={fill}\n      {...other}\n      pointerEvents=\"none\"\n      initial=\"hidden\"\n      animate={active ? 'visible' : 'hidden'}\n      variants={{\n        hidden: { opacity: 0, attrX: x, attrY: y },\n        visible: { opacity, attrX: x, attrY: y }\n      }}\n    />\n  );\n};\n","import React, { Fragment, ReactElement, FC, useMemo, useCallback } from 'react';\nimport classNames from 'classnames';\nimport {\n  isAxisVisible,\n  LinearAxisProps,\n  LinearXAxisTickSeries,\n  LinearXAxis,\n  LinearYAxis,\n  LinearAxis,\n  LINEAR_X_AXIS_DEFAULT_PROPS,\n  LINEAR_Y_AXIS_DEFAULT_PROPS\n} from '@/common/Axis';\nimport {\n  BAR_SERIES_DEFAULT_PROPS,\n  BarSeries,\n  BarSeriesProps\n} from './BarSeries';\nimport {\n  ChartDataShape,\n  ChartNestedDataShape,\n  buildBarStackData,\n  buildMarimekkoData,\n  buildWaterfall,\n  ChartShallowDataShape,\n  buildNestedChartData,\n  buildShallowChartData,\n  StackTypes\n} from '@/common/data';\nimport { GridlineSeries, GridlineSeriesProps } from '@/common/Gridline';\nimport {\n  getXScale,\n  getYScale,\n  getGroupScale,\n  getInnerScale,\n  getMarimekkoScale,\n  getMarimekkoGroupScale\n} from '@/common/scales';\nimport { ChartBrushProps, ChartBrush } from '@/common/Brush';\nimport css from './BarChart.module.css';\nimport {\n  ChartContainer,\n  ChartContainerChildProps,\n  ChartProps\n} from '@/common/containers/ChartContainer';\nimport { CloneElement } from 'reablocks';\nimport { mergeDefaultProps } from '@/common';\n\nexport interface BarChartProps extends ChartProps {\n  /**\n   * Data the chart will receive to render.\n   */\n  data: ChartDataShape[];\n\n  /**\n   * The series component that renders the bar components.\n   */\n  series: ReactElement<BarSeriesProps, typeof BarSeries>;\n\n  /**\n   * The linear axis component for the Y Axis of the chart.\n   */\n  yAxis: ReactElement<LinearAxisProps, typeof LinearAxis>;\n\n  /**\n   * The linear axis component for the X Axis of the chart.\n   */\n  xAxis: ReactElement<LinearAxisProps, typeof LinearAxis>;\n\n  /**\n   * The chart's background gridlines component.\n   */\n  gridlines: ReactElement<GridlineSeriesProps, typeof GridlineSeries> | null;\n\n  /**\n   * The chart's brush component.\n   */\n  brush: ReactElement<ChartBrushProps, typeof ChartBrush> | null;\n\n  /**\n   * Any secondary axis components. Useful for multi-axis charts.\n   */\n  secondaryAxis?: ReactElement<LinearAxisProps, typeof LinearAxis>[];\n}\n\nexport const BarChart: FC<Partial<BarChartProps>> = (props) => {\n  const {\n    id,\n    width,\n    height,\n    margins,\n    className,\n    data,\n    xAxis,\n    yAxis,\n    series,\n    brush,\n    gridlines,\n    secondaryAxis,\n    containerClassName\n  } = mergeDefaultProps(BAR_CHART_DEFAULT_PROPS, props);\n  const seriesProps = useMemo(\n    () => ({ ...BAR_SERIES_DEFAULT_PROPS, ...series?.props }),\n    [series?.props]\n  );\n  const xAxisProps = useMemo(\n    () => ({ ...LINEAR_X_AXIS_DEFAULT_PROPS, ...xAxis.props }),\n    [xAxis.props]\n  );\n  const yAxisProps = useMemo(\n    () => ({ ...LINEAR_Y_AXIS_DEFAULT_PROPS, ...yAxis.props }),\n    [yAxis.props]\n  );\n  const isVertical = useMemo(\n    () => seriesProps.layout === 'vertical',\n    [seriesProps]\n  );\n  const keyAxisProps = useMemo(\n    () => (isVertical ? xAxisProps : yAxisProps),\n    [isVertical, xAxisProps, yAxisProps]\n  );\n  const isDiverging = useMemo(\n    () => seriesProps.type === 'stackedDiverging',\n    [seriesProps.type]\n  );\n\n  const getMarimekkoGroupScales = useCallback(\n    (aggregatedData, axisProps, width: number) => {\n      const keyScale = getMarimekkoScale(width, axisProps.roundDomains);\n\n      const groupScale = getMarimekkoGroupScale({\n        width,\n        padding: seriesProps.padding,\n        data: aggregatedData,\n        valueScale: keyScale\n      });\n\n      return {\n        keyScale,\n        groupScale\n      };\n    },\n    [seriesProps.padding]\n  );\n\n  const getMultiGroupScales = useCallback(\n    (aggregatedData, height: number, width: number) => {\n      const { groupPadding, layout } = seriesProps;\n\n      const groupScale = getGroupScale({\n        dimension: isVertical ? width : height,\n        direction: layout,\n        padding: groupPadding,\n        data: aggregatedData\n      });\n\n      const keyScale = getInnerScale({\n        groupScale: groupScale,\n        padding: seriesProps.padding,\n        data: aggregatedData,\n        prop: isVertical ? 'x' : 'y'\n      });\n\n      return {\n        groupScale,\n        keyScale\n      };\n    },\n    [isVertical, seriesProps]\n  );\n\n  const getKeyScale = useCallback(\n    (aggregatedData, axisProps, isMultiSeries: boolean, width: number) => {\n      return getXScale({\n        width,\n        type: axisProps.type,\n        roundDomains: axisProps.roundDomains,\n        data: aggregatedData,\n        padding: seriesProps.padding,\n        domain: axisProps.domain,\n        isMultiSeries,\n        isDiverging\n      });\n    },\n    [isDiverging, seriesProps]\n  );\n\n  const getValueScale = useCallback(\n    (aggregatedData, axisProps, isMultiSeries: boolean, height: number) => {\n      return getYScale({\n        roundDomains: axisProps.roundDomains,\n        padding: seriesProps.padding,\n        type: axisProps.type,\n        height,\n        data: aggregatedData,\n        domain: axisProps.domain,\n        isMultiSeries,\n        isDiverging\n      });\n    },\n    [isDiverging, seriesProps]\n  );\n\n  const getScalesAndData = useCallback(\n    (chartHeight: number, chartWidth: number) => {\n      const { type, layout } = seriesProps;\n      const isMarimekko = type === 'marimekko';\n      const isGrouped = type === 'grouped';\n      const isStacked =\n        type === 'stacked' ||\n        type === 'stackedNormalized' ||\n        type === 'stackedDiverging';\n      const isMultiSeries = isGrouped || isStacked;\n\n      let aggregatedData;\n      if (isStacked) {\n        let distroType: StackTypes = 'default';\n        if (type === 'stackedNormalized') {\n          distroType = 'expand';\n        } else if (type === 'stackedDiverging') {\n          distroType = 'diverging';\n        }\n\n        aggregatedData = buildBarStackData(\n          data as ChartNestedDataShape[],\n          distroType,\n          layout\n        );\n      } else if (type === 'waterfall') {\n        aggregatedData = buildWaterfall(\n          data as ChartShallowDataShape[],\n          layout,\n          seriesProps.binSize\n        );\n      } else if (isMarimekko) {\n        aggregatedData = buildMarimekkoData(data as ChartNestedDataShape[]);\n      } else if (isGrouped) {\n        aggregatedData = buildNestedChartData(\n          data as ChartNestedDataShape[],\n          false,\n          layout\n        );\n      } else {\n        aggregatedData = buildShallowChartData(\n          data as ChartShallowDataShape[],\n          layout,\n          seriesProps.binSize\n        );\n      }\n\n      let yScale;\n      let xScale;\n      let xScale1;\n\n      if (isVertical) {\n        if (isGrouped) {\n          const { keyScale, groupScale } = getMultiGroupScales(\n            aggregatedData,\n            chartHeight,\n            chartWidth\n          );\n          xScale = groupScale;\n          xScale1 = keyScale;\n        } else if (isMarimekko) {\n          const { keyScale, groupScale } = getMarimekkoGroupScales(\n            aggregatedData,\n            xAxisProps,\n            chartWidth\n          );\n          xScale = groupScale;\n          xScale1 = keyScale;\n        } else {\n          xScale = getKeyScale(\n            aggregatedData,\n            xAxisProps,\n            isMultiSeries,\n            chartWidth\n          );\n        }\n\n        yScale = getValueScale(\n          aggregatedData,\n          yAxisProps,\n          isMultiSeries,\n          chartHeight\n        );\n      } else {\n        if (isGrouped) {\n          const { keyScale, groupScale } = getMultiGroupScales(\n            aggregatedData,\n            chartHeight,\n            chartWidth\n          );\n          yScale = groupScale;\n          xScale1 = keyScale;\n          xScale = getKeyScale(\n            aggregatedData,\n            xAxisProps,\n            isMultiSeries,\n            chartWidth\n          );\n        } else if (isMarimekko) {\n          throw new Error(\n            'Marimekko is currently not supported for horizontal layouts'\n          );\n        } else {\n          xScale = getKeyScale(\n            aggregatedData,\n            xAxisProps,\n            isMultiSeries,\n            chartWidth\n          );\n          yScale = getValueScale(\n            aggregatedData,\n            yAxisProps,\n            isMultiSeries,\n            chartHeight\n          );\n        }\n      }\n\n      return { xScale, xScale1, yScale, aggregatedData };\n    },\n    [\n      getKeyScale,\n      data,\n      getMarimekkoGroupScales,\n      getMultiGroupScales,\n      getValueScale,\n      isVertical,\n      seriesProps,\n      xAxisProps,\n      yAxisProps\n    ]\n  );\n\n  const renderChart = useCallback(\n    (containerProps: ChartContainerChildProps) => {\n      const { chartHeight, chartWidth, id, updateAxes, chartSized } =\n        containerProps;\n      const { xScale, xScale1, yScale, aggregatedData } = getScalesAndData(\n        chartHeight,\n        chartWidth\n      );\n\n      const isCategorical = keyAxisProps.type === 'category';\n      const disableBrush = aggregatedData.length <= 1;\n\n      return (\n        <Fragment>\n          {chartSized && gridlines && (\n            <CloneElement<GridlineSeriesProps>\n              element={gridlines}\n              height={chartHeight}\n              width={chartWidth}\n              yScale={yScale}\n              xScale={xScale}\n              yAxis={yAxisProps}\n              xAxis={xAxisProps}\n            />\n          )}\n          <CloneElement<LinearAxisProps>\n            element={xAxis}\n            height={chartHeight}\n            width={chartWidth}\n            scale={xScale}\n            visibility={chartSized ? 'visible' : 'hidden'}\n            onDimensionsChange={(event) =>\n              updateAxes(isVertical ? 'horizontal' : 'vertical', event)\n            }\n          />\n          <CloneElement<LinearAxisProps>\n            element={yAxis}\n            height={chartHeight}\n            width={chartWidth}\n            scale={yScale}\n            visibility={chartSized ? 'visible' : 'hidden'}\n            onDimensionsChange={(event) =>\n              updateAxes(isVertical ? 'vertical' : 'horizontal', event)\n            }\n          />\n          {secondaryAxis &&\n            secondaryAxis.map((axis, i) => (\n              <CloneElement<LinearAxisProps>\n                key={i}\n                element={axis}\n                height={chartHeight}\n                width={chartWidth}\n                visibility={chartSized ? 'visible' : 'hidden'}\n                onDimensionsChange={(event) => updateAxes('horizontal', event)}\n              />\n            ))}\n          {chartSized && (\n            <CloneElement<ChartBrushProps>\n              disabled={disableBrush}\n              element={brush}\n              height={chartHeight}\n              width={chartWidth}\n              scale={xScale}\n            >\n              <CloneElement<BarSeriesProps>\n                element={series}\n                id={`bar-series-${id}`}\n                data={aggregatedData}\n                height={chartHeight}\n                width={chartWidth}\n                isCategorical={isCategorical}\n                xScale={xScale}\n                xScale1={xScale1}\n                yScale={yScale}\n              />\n            </CloneElement>\n          )}\n        </Fragment>\n      );\n    },\n    [\n      brush,\n      getScalesAndData,\n      gridlines,\n      isVertical,\n      keyAxisProps,\n      secondaryAxis,\n      series,\n      xAxis,\n      yAxis,\n      xAxisProps,\n      yAxisProps\n    ]\n  );\n\n  return (\n    <ChartContainer\n      id={id}\n      width={width}\n      height={height}\n      margins={margins}\n      containerClassName={containerClassName}\n      xAxisVisible={isAxisVisible(xAxisProps)}\n      yAxisVisible={isAxisVisible(yAxisProps)}\n      className={classNames(css.barChart, className, css[seriesProps.type])}\n    >\n      {renderChart}\n    </ChartContainer>\n  );\n};\n\nconst BAR_CHART_DEFAULT_PROPS = {\n  data: [],\n  xAxis: (\n    <LinearXAxis\n      type=\"category\"\n      tickSeries={<LinearXAxisTickSeries tickSize={20} />}\n    />\n  ),\n  yAxis: <LinearYAxis type=\"value\" />,\n  series: <BarSeries />,\n  gridlines: <GridlineSeries />,\n  brush: null\n};\n","import React, { FC, ReactElement } from 'react';\nimport { BarChart, BarChartProps } from './BarChart';\nimport { ChartNestedDataShape } from '@/common/data';\nimport {\n  BarSeriesProps,\n  MARIMEKKO_BAR_SERIES_DEFAULT_PROPS,\n  MarimekkoBarSeries\n} from './BarSeries';\nimport {\n  LinearXAxis,\n  LinearXAxisTickSeries,\n  LinearYAxis,\n  LinearYAxisTickSeries,\n  LinearYAxisTickLabel,\n  LINEAR_Y_AXIS_TICK_LABEL_DEFAULT_PROPS\n} from '@/common/Axis/LinearAxis';\n\nexport interface MarimekkoChartProps extends BarChartProps {\n  data: ChartNestedDataShape[];\n  series: ReactElement<BarSeriesProps, typeof MarimekkoBarSeries>;\n}\n\nexport const MarimekkoChart: FC<Partial<MarimekkoChartProps>> = (props) => (\n  <BarChart\n    {...MARIMEKKO_CHART_DEFAULT_PROPS}\n    {...props}\n    series={\n      <MarimekkoBarSeries\n        {...MARIMEKKO_BAR_SERIES_DEFAULT_PROPS}\n        {...props.series.props}\n      />\n    }\n  />\n);\n\nconst MARIMEKKO_CHART_DEFAULT_PROPS = {\n  xAxis: (\n    <LinearXAxis\n      type=\"category\"\n      tickSeries={<LinearXAxisTickSeries tickSize={15} />}\n    />\n  ),\n  yAxis: (\n    <LinearYAxis\n      type=\"value\"\n      tickSeries={\n        <LinearYAxisTickSeries\n          label={\n            <LinearYAxisTickLabel\n              {...LINEAR_Y_AXIS_TICK_LABEL_DEFAULT_PROPS}\n              rotation={false}\n              format={(data) => `${data * 100}%`}\n            />\n          }\n        />\n      }\n    />\n  )\n};\n","import React, { FC } from 'react';\nimport { BarChart, BarChartProps } from './BarChart';\nimport { ChartNestedDataShape } from '@/common/data';\nimport {\n  STACKED_BAR_SERIES_DEFAULT_PROPS,\n  StackedBarSeries\n} from './BarSeries';\n\nexport interface StackedBarChartProps extends BarChartProps {\n  data: ChartNestedDataShape[];\n}\n\nexport const StackedBarChart: FC<Partial<StackedBarChartProps>> = (props) => (\n  <BarChart\n    {...props}\n    series={\n      <StackedBarSeries\n        {...STACKED_BAR_SERIES_DEFAULT_PROPS}\n        {...props.series.props}\n      />\n    }\n  />\n);\n","import React, { FC } from 'react';\nimport { ChartNestedDataShape } from '@/common/data';\nimport { BarChartProps, BarChart } from './BarChart';\nimport {\n  STACKED_NORMALIZED_BAR_SERIES_DEFAULT_PROPS,\n  StackedNormalizedBarSeries\n} from './BarSeries';\nimport {\n  LinearYAxis,\n  LinearYAxisTickSeries,\n  LinearYAxisTickLabel,\n  LINEAR_Y_AXIS_TICK_LABEL_DEFAULT_PROPS\n} from '@/common/Axis/LinearAxis';\n\nexport interface StackedNormalizedBarChartProps extends BarChartProps {\n  data: ChartNestedDataShape[];\n}\n\nexport const StackedNormalizedBarChart: FC<\n  Partial<StackedNormalizedBarChartProps>\n> = (props) => (\n  <BarChart\n    {...STACKED_NORMALIZED_BAR_CHART_DEFAULT_PROPS}\n    {...props}\n    series={\n      <StackedNormalizedBarSeries\n        {...STACKED_NORMALIZED_BAR_SERIES_DEFAULT_PROPS}\n        {...props.series.props}\n      />\n    }\n  />\n);\n\nconst STACKED_NORMALIZED_BAR_CHART_DEFAULT_PROPS = {\n  yAxis: (\n    <LinearYAxis\n      type=\"value\"\n      tickSeries={\n        <LinearYAxisTickSeries\n          label={\n            <LinearYAxisTickLabel\n              {...LINEAR_Y_AXIS_TICK_LABEL_DEFAULT_PROPS}\n              rotation={false}\n              format={(data) => `${data * 100}%`}\n            />\n          }\n        />\n      }\n    />\n  )\n};\n","import React, { FC } from 'react';\nimport { ChartShallowDataShape } from '@/common/data';\nimport { BarChartProps, BarChart } from './BarChart';\nimport {\n  HISTOGRAM_BAR_SERIES_DEFAULT_PROPS,\n  HistogramBarSeries\n} from './BarSeries';\n\nexport interface HistogramBarChartProps extends BarChartProps {\n  data: ChartShallowDataShape[];\n}\n\nexport const HistogramBarChart: FC<Partial<HistogramBarChartProps>> = (\n  props\n) => (\n  <BarChart\n    {...props}\n    series={\n      <HistogramBarSeries\n        {...HISTOGRAM_BAR_SERIES_DEFAULT_PROPS}\n        {...props.series.props}\n      />\n    }\n  />\n);\n","import React, { FC } from 'react';\nimport { AreaSeries, Line, AreaSeriesProps } from '@/AreaChart';\n\nexport type LineSeriesProps = AreaSeriesProps;\n\nexport const LineSeries: FC<Partial<LineSeriesProps>> = (props) => (\n  <AreaSeries area={null} line={<Line strokeWidth={3} />} {...props} />\n);\n","import React, { FC } from 'react';\nimport { AreaChart, AreaChartProps } from '@/AreaChart';\nimport { LineSeries } from './LineSeries';\n\nexport type LineChartProps = AreaChartProps;\n\nexport const LineChart: FC<Partial<LineChartProps>> = (props) => (\n  <AreaChart series={<LineSeries />} {...props} />\n);\n","import React, { Fragment, ReactElement, FC, useCallback } from 'react';\nimport {\n  geoNaturalEarth1,\n  geoPath,\n  GeoProjection,\n  GeoPath,\n  geoMercator\n} from 'd3-geo';\nimport {\n  ChartProps,\n  ChartContainer,\n  ChartContainerChildProps\n} from '@/common/containers/ChartContainer';\nimport { CloneElement } from 'reablocks';\nimport { MapMarkerProps, MapMarker } from './MapMarker';\nimport { motion } from 'motion/react';\n\ntype MarkerElement = ReactElement<MapMarkerProps, typeof MapMarker>;\n\nexport interface MapProps extends ChartProps {\n  markers?: MarkerElement[];\n  data: any;\n  fill?: string;\n  /**\n   * Determines how the map transforms spherical geometry to planar geometry\n   */\n  projection?: 'mercator' | 'natural-earth';\n}\n\nexport const Map: FC<MapProps> = ({\n  id,\n  width,\n  height,\n  margins,\n  className,\n  containerClassName,\n  markers,\n  data,\n  fill = 'rgba(255, 255, 255, 0.3)',\n  projection = 'mercator'\n}) => {\n  const getProjection = useCallback(\n    ({ chartWidth, chartHeight }: ChartContainerChildProps) => {\n      if (projection === 'natural-earth') {\n        return geoNaturalEarth1()\n          .fitSize([chartWidth, chartHeight], data)\n          .center([0, 0]);\n      }\n      return geoMercator()\n        .fitSize([chartWidth, chartHeight], data)\n        .center([0, 35]);\n    },\n    [data, projection]\n  );\n\n  const renderMarker = useCallback(\n    (marker: MarkerElement, index: number, projection: GeoProjection) => {\n      const position = projection(marker.props.coordinates);\n\n      if (!position) {\n        console.warn(\n          `Position for ${marker.props.coordinates.toString()} not found.`\n        );\n        return null;\n      }\n\n      return (\n        <CloneElement<MapMarkerProps>\n          element={marker}\n          cx={position[0]}\n          cy={position[1]}\n          index={index}\n        />\n      );\n    },\n    []\n  );\n\n  const renderCountry = useCallback(\n    (point, index: number, path: GeoPath) => {\n      // Exclude ATA\n      if (point.id === '010') {\n        return null;\n      }\n\n      return <path key={`path-${index}`} d={path(point)!} fill={fill} />;\n    },\n    [fill]\n  );\n\n  const renderChart = useCallback(\n    (containerProps: ChartContainerChildProps) => {\n      if (!data) {\n        return null;\n      }\n\n      const geoProjection = getProjection(containerProps);\n      const path = geoPath().projection(geoProjection);\n\n      return (\n        <motion.g\n          initial={{\n            opacity: 0\n          }}\n          animate={{\n            opacity: 1\n          }}\n        >\n          {data.features.map((point, index) =>\n            renderCountry(point, index, path)\n          )}\n          {markers &&\n            markers.map((marker, index) => (\n              <Fragment key={`marker-${index}`}>\n                {renderMarker(marker, index, geoProjection)}\n              </Fragment>\n            ))}\n        </motion.g>\n      );\n    },\n    [data, getProjection, markers, renderCountry, renderMarker]\n  );\n\n  return (\n    <ChartContainer\n      id={id}\n      width={width}\n      height={height}\n      margins={margins}\n      containerClassName={containerClassName}\n      xAxisVisible={false}\n      yAxisVisible={false}\n      className={className}\n    >\n      {(props) => renderChart(props)}\n    </ChartContainer>\n  );\n};\n","import React, { Fragment, useRef, useState, FC, useMemo } from 'react';\nimport { Tooltip } from 'reablocks';\nimport { motion } from 'motion/react';\nimport css from './MapMarker.module.css';\nimport { tooltipTheme } from '@/common';\nimport { offset } from '@floating-ui/dom';\n\nexport interface MapMarkerProps {\n  coordinates: [number, number];\n  index: number;\n  cy?: number;\n  cx?: number;\n  size?: number;\n  tooltip?: any;\n  onClick?: () => void;\n}\n\nexport const MapMarker: FC<Partial<MapMarkerProps>> = ({\n  size = 3,\n  index,\n  tooltip,\n  cx,\n  cy,\n  onClick = () => undefined\n}) => {\n  const ref = useRef<SVGCircleElement | null>(null);\n  const [active, setActive] = useState<boolean>(false);\n\n  const ariaLabelData = useMemo(\n    () => (typeof tooltip === 'string' ? tooltip : 'map marker'),\n    [tooltip]\n  );\n\n  return (\n    <Fragment>\n      <motion.circle\n        initial={{\n          opacity: 0,\n          scale: 0.02\n        }}\n        animate={{\n          opacity: 1,\n          scale: 1\n        }}\n        transition={{\n          delay: index! * 0.3\n        }}\n        ref={ref}\n        className={css.marker}\n        cx={cx}\n        cy={cy}\n        r={size}\n        onMouseEnter={() => setActive(true)}\n        onMouseLeave={() => setActive(false)}\n        onClick={onClick}\n        tabIndex={0}\n        aria-label={ariaLabelData}\n        role=\"graphics-document\"\n      />\n      {tooltip && (\n        <Tooltip\n          theme={tooltipTheme}\n          visible={active}\n          reference={ref}\n          modifiers={[offset({ mainAxis: 0, crossAxis: 3 })]}\n          content={tooltip}\n        />\n      )}\n    </Fragment>\n  );\n};\n","import { useEffect, useMemo, useRef } from 'react';\nimport { DEFAULT_TRANSITION } from '@/common/Motion';\nimport { useMotionValue, useSpring } from 'motion/react';\nimport { interpolate } from 'd3-interpolate';\n\nexport const useInterpolate = ({ data, animated, arc }) => {\n  const exit = useMemo(() => {\n    const startAngle = data.startAngle;\n    const endAngle = animated ? startAngle : data.endAngle;\n\n    return {\n      ...data,\n      startAngle,\n      endAngle\n    };\n  }, [data, animated]);\n\n  const prevData = useRef(exit);\n  const d = useMotionValue('');\n  const spring = useSpring(0, DEFAULT_TRANSITION);\n\n  useEffect(() => {\n    const interpolator = interpolate(prevData.current, data);\n    const prevSpring = spring.get();\n\n    spring.set(prevSpring + 1);\n\n    return spring.on('change', (v) => {\n      const newData = interpolator(v - prevSpring);\n      prevData.current = newData;\n\n      d.set(arc(newData));\n    });\n  }, [arc, d, data, exit, spring]);\n\n  return d;\n};\n","import React, { ReactElement, useState, FC, useRef, useMemo } from 'react';\nimport chroma from 'chroma-js';\nimport { motion, MotionStyle } from 'motion/react';\nimport { CloneElement } from 'reablocks';\nimport { ArcData } from '@/PieChart';\nimport { ChartTooltip, ChartTooltipProps } from '@/common/Tooltip';\nimport { useInterpolate } from './useInterpolate';\nimport { useHoverIntent } from '@/common/utils/useHoverIntent';\nimport { Gradient, GradientProps } from '@/common/Gradient';\nimport { getAriaLabel } from '@/common';\n\nexport interface PieArcMouseEvent {\n  value: ArcData['data'];\n  nativeEvent: React.MouseEvent<SVGPathElement>;\n}\n\nexport interface PieArcProps {\n  /**\n   * Unique id for arc\n   */\n  id?: string;\n\n  /**\n   * The arc generator function returning an arc path\n   * @param data\n   */\n  arc?: (data: ArcData) => string | null;\n\n  /**\n   * Data is the datum passed to the arc generator function\n   */\n  data?: ArcData;\n\n  /**\n   * Color\n   */\n  color?: string;\n\n  /**\n   * Animate\n   */\n  animated?: boolean;\n\n  /**\n   * Tooltip component\n   */\n  tooltip?: ReactElement<ChartTooltipProps, typeof ChartTooltip> | null;\n\n  /**\n   * The cursor type used when hovering\n   */\n  cursor?: string;\n\n  /**\n   * Disable the arc\n   */\n  disabled?: boolean;\n\n  /**\n   * Gradient shades for the bar.\n   */\n  gradient?: ReactElement<GradientProps, typeof Gradient> | null;\n\n  /**\n   * Style for the arc\n   */\n  style?: MotionStyle;\n\n  /**\n   * OnClick event handler\n   * @param e Click event\n   */\n  onClick?: (e: PieArcMouseEvent) => void;\n\n  /**\n   * MouseEnter event handler\n   * @param e MouseEnter event\n   */\n  onMouseEnter?: (e: PieArcMouseEvent) => void;\n\n  /**\n   * MouseLeave event handler\n   * @param e MouseLeave event\n   */\n  onMouseLeave?: (e: PieArcMouseEvent) => void;\n}\n\nexport const PieArc: FC<PieArcProps> = ({\n  id,\n  color,\n  data,\n  arc,\n  style = {},\n  cursor = 'initial',\n  animated = true,\n  gradient,\n  disabled = false,\n  onClick,\n  onMouseEnter,\n  onMouseLeave,\n  tooltip = <ChartTooltip />\n}) => {\n  const arcRef = useRef<SVGPathElement | null>(null);\n  const d = useInterpolate({ animated, arc, data });\n  const [active, setActive] = useState<boolean>(false);\n  const fill = useMemo(\n    () => (active ? chroma(color).brighten(0.5) : color),\n    [color, active]\n  );\n\n  const { pointerOut, pointerOver } = useHoverIntent({\n    onPointerOver: (event) => {\n      if (!disabled) {\n        setActive(true);\n        onMouseEnter?.({\n          value: data.data,\n          nativeEvent: event as any\n        });\n      }\n    },\n    onPointerOut: (event) => {\n      if (!disabled) {\n        setActive(false);\n        onMouseLeave?.({\n          value: data.data,\n          nativeEvent: event as any\n        });\n      }\n    }\n  });\n\n  const internalFill = useMemo(() => {\n    if (gradient) {\n      return `url(#gradient-${id})`;\n    }\n\n    return color;\n  }, [gradient, id, color]);\n\n  const tooltipData = useMemo(\n    () => ({ y: data.data.data, x: data.data.key }),\n    [data]\n  );\n  const ariaLabelData = useMemo(() => getAriaLabel(tooltipData), [tooltipData]);\n\n  return (\n    <g\n      ref={arcRef}\n      tabIndex={0}\n      aria-label={ariaLabelData}\n      role=\"graphics-document\"\n    >\n      <motion.path\n        role=\"graphics-symbol\"\n        d={d}\n        style={{ cursor, ...style }}\n        fill={internalFill}\n        onPointerOver={pointerOver}\n        onPointerOut={pointerOut}\n        onClick={(event) => {\n          if (!disabled) {\n            onClick?.({\n              value: data.data,\n              nativeEvent: event\n            });\n          }\n        }}\n      />\n      {gradient && (\n        <CloneElement<GradientProps>\n          element={gradient}\n          id={`gradient-${id}`}\n          direction=\"horizontal\"\n          color={fill}\n        />\n      )}\n      {!tooltip?.props?.disabled && (\n        <CloneElement<ChartTooltipProps>\n          element={tooltip}\n          visible={!!active}\n          reference={arcRef}\n          value={tooltipData}\n        />\n      )}\n    </g>\n  );\n};\n","type Coordinate = [number, number];\n\n/**\n * Finds intermediate point between two points so that this three points\n * can be nicely connected by two lines. One of this lines must be horizontal\n */\nexport function findBreakPoint(\n  [startX, startY]: Coordinate,\n  [endX, endY]: Coordinate\n): Coordinate {\n  let breakPoint: Coordinate = [0, 0];\n\n  // whether we should create breakpoint near pie or near label\n  const breakPointCondition = (endY - startY) * Math.sign(startY) >= 0;\n\n  if (breakPointCondition) {\n    // extend the line starting from startY till the endY\n    let scale = Math.abs(endY / startY) || 1;\n    const minScale = 1;\n    const maxScale = Math.abs(endX / startX) || 1;\n\n    scale = Math.max(Math.min(maxScale, scale), minScale);\n\n    breakPoint = [startX * scale, endY];\n  } else {\n    // some arbitrary scale to ensure that break point will be placed\n    // at some horizontal distance from the end point\n    let scale = 0.85;\n    const minScale = Math.abs(startX / endX) || 1;\n    const maxScale = 1;\n\n    scale = Math.max(Math.min(maxScale, scale), minScale);\n\n    breakPoint = [endX * scale, startY];\n  }\n\n  return breakPoint;\n}\n","import React, { FC } from 'react';\nimport { motion } from 'motion/react';\nimport { arc } from 'd3-shape';\nimport { ArcData } from '@/PieChart';\nimport { ChartInternalDataTypes } from '@/common/data/types';\nimport { formatValue } from '@/common/utils/formatting';\nimport { findBreakPoint } from './findBreakPoint';\nimport { mergeDefaultProps } from '@/common';\n\nexport interface PieArcLabelProps {\n  /**\n   * Data set by the parent component\n   */\n  data: ArcData;\n\n  /**\n   * A function returning the centroid of the corresponding `PieArc`\n   * @param d PieArcDatum\n   */\n  centroid: (d: ArcData) => [number, number];\n\n  /**\n   * A Formatting function for the label value\n   * @param v The label value\n   */\n  format?: (\n    // have added any because not sure whether this change won't be breaking\n    v: any & ArcData['data'] & { textAnchor: 'start' | 'end' }\n  ) => React.ReactNode;\n\n  /**\n   * FontFill color\n   */\n  fontFill: string;\n\n  /**\n   * FontSize\n   */\n  fontSize: number;\n\n  /**\n   * FontFamily\n   */\n  fontFamily: string;\n\n  /**\n   * Line stroke of the label connector\n   */\n  lineStroke: string;\n\n  /**\n   * Outer radius of the corresponding `PieArc`\n   */\n  outerRadius: number;\n\n  /**\n   * y Padding of the label\n   */\n  padding: string;\n\n  /**\n   * The label position set by the parent component\n   */\n  position: [number, number];\n\n  /**\n   * Width of the label\n   */\n  width?: number;\n\n  /**\n   * Height of the label\n   */\n  height?: number;\n}\n\nconst getTextAnchor = ({ startAngle, endAngle }: ArcData) =>\n  // we could also use the sign of position[0]\n  startAngle + (endAngle - startAngle) / 2 < Math.PI ? 'start' : 'end';\n\nexport const PieArcLabel: FC<Partial<PieArcLabelProps>> = (props) => {\n  const {\n    centroid,\n    data,\n    lineStroke,\n    padding,\n    fontSize,\n    fontFill,\n    format,\n    fontFamily,\n    position,\n    outerRadius,\n    width,\n    height\n  } = mergeDefaultProps(PIE_ARC_LABEL_DEFAULT_PROPS, props);\n\n  const textAnchor = getTextAnchor(data);\n  const text: React.ReactNode = format\n    ? format({ ...data.data, textAnchor })\n    : formatValue(data.data.key as ChartInternalDataTypes);\n  const [posX, posY] = position;\n  // we want to have at least some pixels of straight line (margin)\n  // from pie section till we start to change line direction\n  const minRadius = outerRadius + 4;\n\n  const startPoint = centroid(data);\n  const innerPoint = arc<ArcData>()\n    .innerRadius(minRadius)\n    .outerRadius(minRadius)\n    .centroid(data);\n  const breakPoint = findBreakPoint(innerPoint, position);\n\n  return (\n    <motion.g\n      initial={{ opacity: 0 }}\n      animate={{ opacity: 1 }}\n      exit={{ opacity: 0 }}\n      transition={{\n        duration: 0.1\n      }}\n    >\n      {typeof text === 'string' ? (\n        <>\n          <title>{text}</title>\n          <text\n            dy={padding}\n            fill={fontFill}\n            fontSize={fontSize}\n            fontFamily={fontFamily}\n            textAnchor={textAnchor}\n            style={{\n              shapeRendering: 'crispEdges',\n              transform: `translate3d(${posX}px,${posY}px, 0)`\n            }}\n          >\n            {text}\n          </text>\n        </>\n      ) : (\n        <foreignObject\n          width={width}\n          height={height}\n          style={{\n            transform: `translate3d(${\n              textAnchor === 'start' ? posX : posX - width\n            }px,${posY - height / 2}px, 0)`,\n            color: fontFill,\n            fontFamily,\n            fontSize\n          }}\n        >\n          {text}\n        </foreignObject>\n      )}\n      <polyline\n        fill=\"none\"\n        stroke={lineStroke}\n        points={`${startPoint},${innerPoint},${breakPoint},${position}`}\n      />\n    </motion.g>\n  );\n};\n\nexport const PIE_ARC_LABEL_DEFAULT_PROPS = {\n  format: undefined,\n  lineStroke: 'rgba(127,127,127,0.5)',\n  fontFill: '#8F979F',\n  fontSize: 11,\n  fontFamily: 'sans-serif',\n  padding: '.35em',\n  height: 11\n};\n","import { max } from 'd3-array';\nimport { arc } from 'd3-shape';\nimport { ArcData } from '@/PieChart';\n\nconst factor = 1.2;\nconst midAngle = (d: ArcData) => d.startAngle + (d.endAngle - d.startAngle) / 2;\nconst labelVisible = (arc: ArcData) =>\n  arc.endAngle - arc.startAngle > Math.PI / 30;\n\nfunction shouldDisplayLabel(displayAllLabels: boolean, arcData: ArcData) {\n  return displayAllLabels || labelVisible(arcData);\n}\n\nexport function calculateOuterRadius(\n  outerRadius: number,\n  data: ArcData[],\n  point: ArcData,\n  explode: boolean\n) {\n  if (!explode || data === undefined) {\n    return outerRadius;\n  }\n\n  const maxVal = max(data, (d: ArcData) => d.value);\n\n  return (outerRadius * point.value) / maxVal;\n}\n\nexport function calculateCentroid(\n  data: ArcData[],\n  innerRadius: number,\n  outerRadius: number,\n  explode: boolean\n) {\n  return (point: ArcData) => {\n    const newOuter = calculateOuterRadius(outerRadius, data, point, explode);\n\n    return arc<any, ArcData>()\n      .innerRadius(innerRadius)\n      .outerRadius(newOuter)\n      .centroid(point);\n  };\n}\n\nexport function calculateRadius(height, width, label, arcWidth, doughnut) {\n  const minDimension = Math.min(width, height);\n\n  let outerRadius = minDimension / 2;\n  let labelWidth = 0;\n\n  if (label) {\n    labelWidth = label.props.width;\n\n    if (labelWidth) {\n      const outerArcRadius = width / 2 - labelWidth;\n\n      outerRadius = Math.min(outerArcRadius / factor, height / 2);\n    } else {\n      outerRadius = minDimension / 3;\n      labelWidth = width / 2 - outerRadius * factor;\n    }\n  }\n\n  const innerRadius = doughnut ? outerRadius * (1 - arcWidth) : 0;\n\n  return {\n    outerRadius,\n    innerRadius,\n    labelWidth\n  };\n}\n\nexport function calculateInnerArc(\n  data: ArcData[],\n  innerRadius: number,\n  outerRadius: number,\n  cornerRadius: number,\n  padAngle: number,\n  padRadius: number,\n  explode: boolean\n) {\n  return (point: ArcData) => {\n    const newOuter = calculateOuterRadius(outerRadius, data, point, explode);\n\n    return arc<any, ArcData>()\n      .innerRadius(innerRadius)\n      .outerRadius(newOuter)\n      .cornerRadius(cornerRadius)\n      .padRadius(padRadius)\n      .padAngle(padAngle)(point);\n  };\n}\n\nexport function calculateLabelPositions(\n  data: ArcData[],\n  outerRadius: number,\n  minDistance: number,\n  cornerRadius: number,\n  padAngle: number,\n  padRadius: number,\n  displayAllLabels: boolean\n): Array<[number, number] | null> {\n  const outerArcRadius = outerRadius * factor;\n  const outerArc = arc<any, ArcData>()\n    .innerRadius(outerArcRadius)\n    .outerRadius(outerArcRadius)\n    .cornerRadius(cornerRadius)\n    .padAngle(padAngle)\n    .padRadius(padRadius);\n\n  const positions: Array<[number, number] | null> = data.map((d) => {\n    if (!shouldDisplayLabel(displayAllLabels, d)) {\n      return null;\n    }\n\n    const pos = outerArc.centroid(d);\n\n    // reposition the labels to the left/right from outerArc centroid\n    // so that all labels won't collide with pie\n    // when we will vertically reposition them\n    pos[0] = outerArcRadius * (midAngle(d) < Math.PI ? 1 : -1);\n\n    return pos;\n  });\n\n  for (let i = 0; i < data.length - 1; i++) {\n    if (!positions[i]) {\n      continue;\n    }\n\n    const [aPosX, aPosY] = positions[i];\n\n    for (let j = i + 1; j < data.length; j++) {\n      if (!positions[j]) {\n        continue;\n      }\n\n      const [bPosX, bPosY] = positions[j];\n\n      // if they're on the same side (both with - or + sign)\n      if (bPosX * aPosX > 0) {\n        // if they're overlapping\n        const overlap = minDistance - Math.abs(bPosY - aPosY);\n\n        if (overlap > 0) {\n          // push the second up or down\n          positions[j][1] += Math.sign(bPosX) * overlap;\n        }\n      }\n    }\n  }\n\n  return positions;\n}\n","import React, { FC, Fragment, ReactElement, useMemo } from 'react';\nimport { CloneElement } from 'reablocks';\nimport { ArcData } from '@/PieChart';\nimport { PieArc, PieArcProps } from './PieArc';\nimport {\n  PIE_ARC_LABEL_DEFAULT_PROPS,\n  PieArcLabel,\n  PieArcLabelProps\n} from './PieArcLabel';\nimport { getColor, ColorSchemeType } from '@/common/color';\nimport {\n  calculateCentroid,\n  calculateInnerArc,\n  calculateLabelPositions,\n  calculateRadius\n} from './radiusUtils';\nimport { identifier } from 'safe-identifier';\nimport { mergeDefaultProps } from '@/common';\n\nexport interface PieArcSeriesProps {\n  /**\n   * Unique id for the series.\n   */\n  id?: string;\n\n  /**\n   * Animated set by the `PieArc` components.\n   */\n  animated: boolean;\n\n  /**\n   * Outer radius set by the parent component.\n   */\n  outerRadius: number;\n\n  /**\n   * Inner radius set by the parent component.\n   */\n  innerRadius: number;\n\n  /**\n   * Pad Angle between adjacent arcs, see https://github.com/d3/d3-shape#arc_padAngle\n   */\n  padAngle: number;\n\n  /**\n   * Pad Radius between adjacent arcs, see https://github.com/d3/d3-shape#arc_padRadius\n   */\n  padRadius: number;\n\n  /**\n   * Corner Radius of the arcs, see https://github.com/d3/d3-shape#arc_cornerRadius\n   */\n  cornerRadius: number;\n\n  /**\n   * Data set by the parent component.\n   */\n  data: ArcData[];\n\n  /**\n   * Width of the arc\n   */\n  arcWidth: number;\n\n  /**\n   * Doughnut, render as a donut shape\n   */\n  doughnut: boolean;\n\n  /**\n   * Explode: OuterRadius will be adjusted by the data property\n   */\n  explode: boolean;\n\n  /**\n   * Display all labels shows labels even if there is little space\n   */\n  displayAllLabels: boolean;\n\n  /**\n   * Label component\n   */\n  label?: ReactElement<PieArcLabelProps, typeof PieArcLabel> | null;\n\n  /**\n   * Arc Component\n   */\n  arc: ReactElement<PieArcProps, typeof PieArc>;\n\n  /**\n   * Color scheme\n   */\n  colorScheme: ColorSchemeType;\n\n  /**\n   * Height set by the parent component\n   */\n  height: number;\n\n  /**\n   * Width set by the parent component\n   */\n  width: number;\n}\n\nexport const PieArcSeries: FC<Partial<PieArcSeriesProps>> = (props) => {\n  const {\n    doughnut,\n    arcWidth,\n    label,\n    colorScheme,\n    width,\n    displayAllLabels,\n    height,\n    explode,\n    id,\n    animated,\n    cornerRadius,\n    padAngle,\n    padRadius,\n    arc,\n    data\n  } = mergeDefaultProps(PIE_ARC_SERIES_DEFAULT_PROPS, props);\n\n  const labelProps = useMemo(\n    () => ({ ...PIE_ARC_LABEL_DEFAULT_PROPS, ...label?.props }),\n    [label]\n  );\n\n  const { outerRadius, innerRadius, labelWidth } = calculateRadius(\n    height,\n    width,\n    label,\n    arcWidth,\n    doughnut\n  );\n\n  const innerArc = calculateInnerArc(\n    data,\n    innerRadius,\n    outerRadius,\n    cornerRadius,\n    padAngle,\n    padRadius,\n    explode\n  );\n\n  const positions = label\n    ? calculateLabelPositions(\n        data,\n        outerRadius,\n        // 4 is for vertical margins between labels\n        labelProps.height + 4,\n        cornerRadius,\n        padAngle,\n        padRadius,\n        displayAllLabels\n      )\n    : [];\n\n  const centroid = calculateCentroid(data, innerRadius, outerRadius, explode);\n\n  function renderItem(arcData: ArcData, index: number) {\n    const safeKey = identifier(arcData.data.key.toString());\n    const color = getColor({\n      data,\n      colorScheme,\n      point: arcData.data,\n      index\n    });\n\n    return (\n      <Fragment key={safeKey}>\n        {positions[index] && (\n          <CloneElement<PieArcLabelProps>\n            element={label}\n            data={arcData}\n            centroid={centroid}\n            outerRadius={outerRadius}\n            width={labelWidth}\n            position={positions[index]}\n          />\n        )}\n        <CloneElement<PieArcProps>\n          id={`${id}-arc-${safeKey}`}\n          data={arcData}\n          animated={animated}\n          arc={innerArc}\n          color={color}\n          element={arc}\n        />\n      </Fragment>\n    );\n  }\n\n  return <>{data.map(renderItem)}</>;\n};\n\nexport const PIE_ARC_SERIES_DEFAULT_PROPS = {\n  animated: true,\n  colorScheme: 'cybertron',\n  innerRadius: 0,\n  cornerRadius: 0,\n  padAngle: 0,\n  padRadius: 0,\n  explode: false,\n  displayAllLabels: false,\n  arcWidth: 0.25,\n  label: <PieArcLabel />,\n  arc: <PieArc />\n};\n","import React, { FC, ReactElement, useCallback, useMemo } from 'react';\nimport classNames from 'classnames';\nimport { PieArcDatum } from 'd3-shape';\nimport { pie } from 'd3-shape';\nimport { CloneElement, useId } from 'reablocks';\nimport {\n  ChartProps,\n  ChartContainer,\n  ChartContainerChildProps\n} from '@/common/containers';\nimport { ChartShallowDataShape } from '@/common/data';\nimport { PieArcSeries, PieArcSeriesProps } from './PieArcSeries';\n\nexport type ArcData = PieArcDatum<ChartShallowDataShape>;\n\nexport interface PieChartProps extends ChartProps {\n  /**\n   * Data the chart will receive to render.\n   */\n  data?: ChartShallowDataShape[];\n\n  /**\n   * Whether the chart is disabled.\n   */\n  disabled?: boolean;\n\n  /**\n   * Whether to display labels even if their value has a small display radius.\n   */\n  displayAllLabels?: boolean;\n\n  /**\n   * The series component that renders the arc components.\n   */\n  series?: ReactElement<PieArcSeriesProps, typeof PieArcSeries>;\n}\n\nexport const PieChart: FC<PieChartProps> = ({\n  id,\n  width,\n  height,\n  className,\n  containerClassName,\n  displayAllLabels,\n  data = [],\n  margins = 10,\n  series = <PieArcSeries />\n}) => {\n  const newId = useId(id);\n\n  const internalData = useMemo(() => {\n    const pieLayout = pie<void, ChartShallowDataShape>().value(\n      (d: ChartShallowDataShape) => Number(d.data)\n    );\n\n    // Explode sort doesn't work right...\n    if (!series.props.explode) {\n      pieLayout.sort(null);\n    }\n\n    return pieLayout(data);\n  }, [data, series]);\n\n  const renderSeries = useCallback(\n    ({ chartWidth, chartHeight }: ChartContainerChildProps) => {\n      return (\n        <CloneElement<PieArcSeriesProps>\n          element={series}\n          id={newId}\n          data={internalData}\n          height={chartHeight}\n          width={chartWidth}\n          displayAllLabels={displayAllLabels}\n        />\n      );\n    },\n    [displayAllLabels, internalData, newId, series]\n  );\n\n  return (\n    <ChartContainer\n      id={id}\n      width={width}\n      height={height}\n      margins={margins}\n      containerClassName={containerClassName}\n      xAxisVisible={false}\n      yAxisVisible={false}\n      center={true}\n      className={classNames(className)}\n    >\n      {renderSeries}\n    </ChartContainer>\n  );\n};\n","import { SankeyNode, SankeyLink } from 'd3-sankey';\n\nexport interface NodeExtra {\n  /**\n   * ID of the node. If not provided, the node's index will be used.\n   */\n  id?: string;\n\n  /**\n   * Title of the node.\n   */\n  title: string;\n\n  /**\n   * Color of the node.\n   */\n  color?: string;\n}\n\nexport interface LinkExtra {\n  /**\n   * Color of the link.\n   */\n  color?: string;\n}\n\nexport type SankeyNodeExtra = SankeyNode<NodeExtra, LinkExtra>;\n\nexport type SankeyLinkExtra = SankeyLink<NodeExtra, LinkExtra>;\n\nexport const DEFAULT_COLOR = 'rgba(255, 255, 255, 0.2)';\n\nexport const LABEL_PADDING_PERCENT = 0.1;\n","import React, {\n  FC,\n  Fragment,\n  ReactElement,\n  useCallback,\n  useMemo,\n  useState\n} from 'react';\nimport {\n  sankey,\n  sankeyLeft,\n  sankeyRight,\n  sankeyCenter,\n  sankeyJustify\n} from 'd3-sankey';\nimport {\n  ChartProps,\n  ChartContainer,\n  ChartContainerChildProps\n} from '@/common/containers/ChartContainer';\nimport { CloneElement, useId } from 'reablocks';\n\nimport { getColor, ColorSchemeType } from '@/common/color';\nimport { SankeyNodeProps, SankeyNode } from './SankeyNode';\nimport { SankeyLinkProps, SankeyLink } from './SankeyLink';\nimport {\n  SankeyNodeExtra,\n  SankeyLinkExtra,\n  LABEL_PADDING_PERCENT\n} from './utils';\nimport { SankeyLabelPosition } from './SankeyLabel';\n\nconst JUSTIFICATION = {\n  justify: sankeyJustify,\n  center: sankeyCenter,\n  left: sankeyLeft,\n  right: sankeyRight\n};\n\nexport type Justification = 'justify' | 'center' | 'left' | 'right';\n\nexport type NodeElement = ReactElement<SankeyNodeProps, typeof SankeyNode>;\n\nexport type LinkElement = ReactElement<SankeyLinkProps, typeof SankeyLink>;\n\nexport interface SankeyProps extends ChartProps {\n  /**\n   * Whether to animate the enter/update/exit. Set internally by `SankeyNode` and `SankeyLink`.\n   */\n  animated?: boolean;\n\n  /**\n   * Color scheme for the nodes. Set internally by `SankeyNode`.\n   */\n  colorScheme?: ColorSchemeType;\n\n  /**\n   * The node alignment method.\n   */\n  justification?: Justification;\n\n  /**\n   * Width of the node.\n   */\n  nodeWidth?: number;\n\n  /**\n   * Vertical padding between nodes in the same column.\n   */\n  nodePadding?: number;\n\n  /**\n   * Label position.\n   */\n  labelPosition?: SankeyLabelPosition;\n\n  /**\n   * Sort function for the nodes.\n   *\n   * If sort is specified, sets the node sort method and returns this Sankey generator.\n   * If sort is not specified, returns the current node sort method, which defaults\n   * to undefined, indicating that vertical order of nodes within each column will\n   * be determined automatically by the layout. If sort is null, the order is fixed\n   * by the input. Otherwise, the specified sort function determines the order;\n   * the function is passed two nodes, and must return a value less than 0 if the\n   * first node should be above the second, and a value greater than 0 if the second\n   * node should be above the first, or 0 if the order is not specified.\n   *\n   * Reference: https://github.com/d3/d3-sankey#sankey_nodeSort\n   */\n  nodeSort?: (a: any, b: any) => number;\n\n  /**\n   * Nodes that are rendered.\n   */\n  nodes: NodeElement[];\n\n  /**\n   * Links that are rendered.\n   */\n  links: LinkElement[];\n}\n\nexport const Sankey: FC<SankeyProps> = ({\n  width,\n  height,\n  margins,\n  className,\n  animated = true,\n  links,\n  justification = 'justify',\n  nodeWidth = 15,\n  nodePadding = 10,\n  labelPosition = 'inside',\n  nodeSort,\n  colorScheme,\n  nodes,\n  containerClassName,\n  ...rest\n}) => {\n  const id = useId(rest.id);\n  const [activeNodes, setActiveNodes] = useState<SankeyNodeExtra[]>([]);\n  const [activeLinks, setActiveLinks] = useState<SankeyLinkExtra[]>([]);\n\n  const getNodeColor = useCallback(\n    (node: NodeElement, index: any) => {\n      if (colorScheme) {\n        return getColor({\n          data: nodes,\n          colorScheme,\n          point: nodes[index],\n          index\n        });\n      } else {\n        return node.props.color;\n      }\n    },\n    [colorScheme, nodes]\n  );\n\n  const onNodeActive = useCallback((node: SankeyNodeExtra) => {\n    const activeNodes: SankeyNodeExtra[] = [node];\n    const activeLinks: SankeyLinkExtra[] = [];\n\n    if (node.sourceLinks) {\n      activeLinks.push(...node.sourceLinks);\n      node.sourceLinks.forEach((sourceLink) => {\n        const sourceLinkTarget = sourceLink.target as SankeyNodeExtra;\n        if (sourceLinkTarget.index !== node.index) {\n          activeNodes.push(sourceLinkTarget);\n        }\n      });\n    }\n\n    if (node.targetLinks) {\n      activeLinks.push(...node.targetLinks);\n      node.targetLinks.forEach((targetLink) => {\n        const targetLinkSource = targetLink.source as SankeyNodeExtra;\n        if (targetLinkSource.index !== node.index) {\n          activeNodes.push(targetLinkSource);\n        }\n      });\n    }\n\n    setActiveNodes(activeNodes);\n    setActiveLinks(activeLinks);\n  }, []);\n\n  const onLinkActive = useCallback((link: SankeyLinkExtra) => {\n    const activeNodes: SankeyNodeExtra[] = [\n      link.source as SankeyNodeExtra,\n      link.target as SankeyNodeExtra\n    ];\n    const activeLinks: SankeyLinkExtra[] = [link];\n\n    setActiveNodes(activeNodes);\n    setActiveLinks(activeLinks);\n  }, []);\n\n  const onInactive = useCallback(() => {\n    setActiveNodes([]);\n    setActiveLinks([]);\n  }, []);\n\n  const nodeMap = useMemo(() => {\n    // Not sure what this is for\n    const nodeMap = new Map<string, NodeElement>();\n    nodes.forEach((node: any) => node && nodeMap.set(node.props.title, node));\n\n    return nodeMap;\n  }, [nodes]);\n\n  const renderNode = useCallback(\n    (\n      computedNode: SankeyNodeExtra,\n      index: number,\n      chartWidth: number,\n      node?: NodeElement\n    ) => {\n      const active = activeNodes.some(\n        (node) => node.index === computedNode.index\n      );\n      const disabled = activeNodes.length > 0 && !active;\n      const labelPadding =\n        labelPosition === 'outside' ? LABEL_PADDING_PERCENT : 0;\n\n      return (\n        <CloneElement<SankeyNodeProps>\n          element={node}\n          key={`node-${index}`}\n          active={active}\n          animated={animated}\n          disabled={disabled}\n          chartWidth={chartWidth}\n          onMouseEnter={() => onNodeActive(computedNode)}\n          onMouseLeave={() => onInactive()}\n          labelPosition={labelPosition}\n          labelPadding={labelPadding}\n          {...computedNode}\n        />\n      );\n    },\n    [activeNodes, animated, onInactive, onNodeActive, labelPosition]\n  );\n\n  const renderLink = useCallback(\n    (computedLink: SankeyLinkExtra, index: number) => {\n      const active = activeLinks.some(\n        (link) => link.index === computedLink.index\n      );\n      const disabled = activeLinks.length > 0 && !active;\n\n      return (\n        <CloneElement<SankeyLinkProps>\n          element={links[index]}\n          active={active}\n          animated={animated}\n          key={`link-${index}`}\n          chartId={`sankey-${id}`}\n          disabled={disabled}\n          {...computedLink}\n          onMouseEnter={() => onLinkActive(computedLink)}\n          onMouseLeave={() => onInactive()}\n        />\n      );\n    },\n    [activeLinks, id, animated, links, onInactive, onLinkActive]\n  );\n\n  const getNodesAndLinks = useCallback(\n    (chartWidth: number, chartHeight: number) => {\n      const labelPadding =\n        labelPosition === 'outside' ? LABEL_PADDING_PERCENT : 0;\n      const padding = labelPadding * chartWidth;\n\n      const sankeyChart = sankey()\n        .extent([\n          [1 + padding, 1],\n          [chartWidth - padding, chartHeight]\n        ])\n        .nodeWidth(nodeWidth)\n        .nodePadding(nodePadding)\n        .nodeSort(nodeSort)\n        .nodeAlign(JUSTIFICATION[justification])\n        .nodeId((node: any) => node.id || node.index);\n\n      const nodesCopy: any = nodes.map((node, index) => ({\n        id: node.props.id,\n        title: node.props.title,\n        color: getNodeColor(node, index)\n      }));\n\n      const linksCopy = links.map((link) => ({\n        source: link.props.source,\n        target: link.props.target,\n        value: link.props.value\n      }));\n\n      const { nodes: sankeyNodes, links: sankeyLinks } = sankeyChart({\n        nodes: nodesCopy,\n        links: linksCopy\n      });\n\n      /*\n      // NOTE: Not sure what this is doing\n      sankeyNodes.sort((a, b) => {\n        const aX0 = a && a.x0 ? a.x0 : 0;\n        const aY0 = a && a.y0 ? a.y0 : 0;\n        const bX0 = b && b.x0 ? b.x0 : 0;\n        const bY0 = b && b.y0 ? b.y0 : 0;\n        return aX0 - bX0 || aY0 - bY0;\n      });\n      */\n\n      return { sankeyNodes, sankeyLinks };\n    },\n    [\n      getNodeColor,\n      nodeSort,\n      justification,\n      links,\n      nodePadding,\n      nodeWidth,\n      nodes,\n      labelPosition\n    ]\n  );\n\n  const renderChart = useCallback(\n    ({ id, chartWidth, chartHeight, chartSized }: ChartContainerChildProps) => {\n      if (!chartSized) {\n        return null;\n      }\n\n      const { sankeyNodes, sankeyLinks } = getNodesAndLinks(\n        chartWidth,\n        chartHeight\n      );\n\n      return (\n        <Fragment key=\"group\">\n          {sankeyLinks.map((link, index) =>\n            renderLink(link as SankeyLinkExtra, index)\n          )}\n          {sankeyNodes.map((node: SankeyNodeExtra, index) =>\n            renderNode(node, index, chartWidth, nodeMap.get(node.title))\n          )}\n        </Fragment>\n      );\n    },\n    [getNodesAndLinks, nodeMap, renderLink, renderNode]\n  );\n\n  return (\n    <ChartContainer\n      id={id}\n      width={width}\n      containerClassName={containerClassName}\n      height={height}\n      margins={margins}\n      className={className}\n    >\n      {renderChart}\n    </ChartContainer>\n  );\n};\n","import React, { FC } from 'react';\nimport classNames from 'classnames';\nimport { SankeyNodeExtra } from '@/Sankey/utils';\nimport css from './SankeyLabel.module.css';\nimport ellipsize from 'ellipsize';\n\nexport type SankeyLabelPosition = 'inside' | 'outside';\n\nexport interface SankeyLabelFormatProps {\n  x: number;\n  y: number;\n  textAnchor: string;\n  node: SankeyNodeExtra;\n}\n\nexport interface SankeyLabelProps {\n  /**\n   * Whether the element is active or not. Set internally by `Sankey`.\n   */\n  active: boolean;\n\n  /**\n   * Whether the label is disabled. Set internally by `Sankey`.\n   */\n  disabled: boolean;\n\n  /**\n   * Width of the chart. Set internally by `Sankey`.\n   */\n  chartWidth?: number;\n\n  /**\n   * CSS class to apply.\n   */\n  className?: string;\n\n  /**\n   * Fill color.\n   */\n  fill: string;\n\n  /**\n   * Label position. Set internally by `Sankey`.\n   */\n  position?: SankeyLabelPosition;\n\n  /**\n   * Percentage of total width occupied by labels on\n   * either side of the graph inside the container.\n   * Used for auto-ellipsizing labels\n   * Set internally by `Sankey`.\n   */\n  labelPadding?: number;\n\n  /**\n   * Node data. Set internally by `Sankey`.\n   */\n  node?: SankeyNodeExtra;\n\n  /**\n   * Opacity callback. Used internally by `Sankey`.\n   */\n  opacity: (active: boolean, disabled: boolean) => number;\n\n  /**\n   * Padding between the label and the node.\n   */\n  padding?: string | number;\n\n  /**\n   * Whether to show the label or not.\n   */\n  visible: boolean;\n\n  /**\n   * Width of the node set by the 'Sankey'.\n   */\n  nodeWidth: number;\n\n  /**\n   * Custom formatting for the label.\n   */\n  format?: (value: SankeyLabelFormatProps) => any;\n\n  /**\n   * Specify the number of characters at which the text would be ellipsized.\n   * Defaults to 'auto' based on available width and max cut-off at `LABEL_TRUNCATE_LENGTH=10`\n   */\n  ellipsis?: number | 'none' | 'auto';\n}\n\nconst LABEL_PADDING = 5;\nconst LABEL_TRUNCATE_LENGTH = 10;\n\nexport const SankeyLabel: FC<Partial<SankeyLabelProps>> = ({\n  active = false,\n  chartWidth,\n  className,\n  nodeWidth,\n  disabled,\n  fill = '#fff',\n  format,\n  node,\n  position = 'inside',\n  opacity = (active, disabled) => (active ? 1 : disabled ? 0.2 : 0.9),\n  padding,\n  visible = true,\n  ellipsis = 'auto',\n  labelPadding\n}) => {\n  const x0 = node?.x0 || 0;\n  const x1 = node?.x1 || 0;\n  const y0 = node?.y0 || 0;\n  const y1 = node?.y1 || 0;\n  const paddedWidth = nodeWidth + LABEL_PADDING;\n\n  const width = chartWidth || 0;\n  const showRightSide = x0 < width / 2;\n  let x = showRightSide ? x1 + paddedWidth : x0 - paddedWidth;\n  const y = (y1 + y0) / 2;\n\n  let textAnchor: 'start' | 'end' = showRightSide ? 'start' : 'end';\n  if (position === 'outside') {\n    textAnchor = showRightSide ? 'end' : 'start';\n    x = showRightSide ? x1 - paddedWidth : x0 + paddedWidth;\n  }\n\n  if (!visible || !node) {\n    return null;\n  }\n\n  let truncatedTitle = '';\n  if (ellipsis === 'auto') {\n    // This math somehow works for now!\n    const avaialableWidth = showRightSide ? x : width - x;\n    truncatedTitle = ellipsize(\n      node.title,\n      Math.min(LABEL_TRUNCATE_LENGTH, avaialableWidth / (labelPadding * 100))\n    );\n  } else if (ellipsis === 'none') {\n    truncatedTitle = node.title;\n  } else {\n    truncatedTitle = ellipsize(node.title, ellipsis);\n  }\n\n  return (\n    <text\n      className={classNames(css.label, className)}\n      x={x}\n      y={y}\n      dy=\"0.35em\"\n      textAnchor={textAnchor}\n      fill={fill}\n      opacity={opacity(active, disabled)}\n      style={{ padding }}\n    >\n      {typeof format === 'function'\n        ? format({ x, y, textAnchor, node })\n        : truncatedTitle}\n    </text>\n  );\n};\n","import React, {\n  Fragment,\n  ReactElement,\n  useCallback,\n  useState,\n  useMemo,\n  useRef,\n  FC\n} from 'react';\nimport { offset } from '@floating-ui/dom';\nimport classNames from 'classnames';\nimport { motion } from 'motion/react';\nimport { sankeyLinkHorizontal } from 'd3-sankey';\nimport { CloneElement } from 'reablocks';\nimport { formatValue } from '@/common/utils/formatting';\nimport { Tooltip, TooltipProps } from 'reablocks';\nimport {\n  NodeExtra,\n  SankeyNodeExtra,\n  SankeyLinkExtra,\n  DEFAULT_COLOR\n} from '@/Sankey/utils';\nimport css from './SankeyLink.module.css';\nimport { useHoverIntent } from '@/common/utils/useHoverIntent';\nimport { tooltipTheme } from '@/common';\n\nexport interface SankeyLinkProps extends SankeyLinkExtra {\n  /**\n   * Color of the link.\n   */\n  color?: string;\n\n  /**\n   * Whether the element is active or not. Set internally by `Sankey`.\n   */\n  active: boolean;\n\n  /**\n   * Whether to animate the enter/update/exit.\n   */\n  animated: boolean;\n\n  /**\n   * Id of Sankey chart. Set internally by `Sankey`.\n   */\n  chartId: string;\n\n  /**\n   * CSS class to apply.\n   */\n  className?: string;\n\n  /**\n   * Whether the node is disabled. Set internally by `Sankey`.\n   */\n  disabled: boolean;\n\n  /**\n   * Whether to use gradient or not.\n   */\n  gradient?: boolean;\n\n  /**\n   * Opacity callback for the link.\n   */\n  opacity: (active: boolean, disabled: boolean) => number;\n\n  /**\n   * CSS styles to apply.\n   */\n  style?: object;\n\n  /**\n   * Tooltip element.\n   */\n  tooltip?: ReactElement<TooltipProps, typeof Tooltip> | null;\n\n  /**\n   * Width of the link. Set internally by `Sankey`.\n   */\n  width: number;\n\n  /**\n   * Event for when the link is clicked.\n   */\n  onClick?: (event: React.MouseEvent<SVGPathElement>) => void;\n\n  /**\n   * Event for when the link has mouse enter.\n   */\n  onMouseEnter?: (event: React.MouseEvent<SVGPathElement>) => void;\n\n  /**\n   * Event for when the link has mouse leave.\n   */\n  onMouseLeave?: (event: React.MouseEvent<SVGPathElement>) => void;\n}\n\nexport const SankeyLink: FC<Partial<SankeyLinkProps>> = ({\n  gradient = true,\n  index,\n  source,\n  target,\n  tooltip = (\n    <Tooltip theme={tooltipTheme} followCursor={true} modifiers={[offset(5)]} />\n  ),\n  chartId,\n  value,\n  active = false,\n  animated = true,\n  className,\n  disabled = false,\n  opacity = (active, disabled) => (active ? 0.5 : disabled ? 0.1 : 0.35),\n  style,\n  width = 0,\n  color,\n  y0,\n  y1,\n  onClick,\n  onMouseEnter,\n  onMouseLeave\n}) => {\n  const linkSource = source as SankeyNodeExtra;\n  const linkTarget = target as SankeyNodeExtra;\n\n  const [hovered, setHovered] = useState<boolean>(false);\n  const linkRef = useRef<SVGPathElement | null>(null);\n\n  const getLink = useCallback(() => {\n    return { index, y0, y1, value, width, source, target };\n  }, [index, source, target, value, width, y0, y1]);\n\n  const stroke = useMemo(() => {\n    if (gradient) {\n      return `url(#${chartId}-gradient-${index})`;\n    } else if (color) {\n      return color;\n    }\n\n    return DEFAULT_COLOR;\n  }, [chartId, gradient, index, color]);\n\n  const enterProps = useMemo(() => {\n    const path = sankeyLinkHorizontal();\n    const d = path(getLink()) as string;\n    const strokeWidth = Math.max(1, width);\n    return { d, strokeWidth };\n  }, [getLink, width]);\n\n  const exitProps = useMemo(() => {\n    const path = sankeyLinkHorizontal();\n    const d = path({ ...getLink(), width: 0 }) as string;\n    return { d, strokeWidth: 0 };\n  }, [getLink]);\n\n  const renderTooltipContent = useCallback(() => {\n    return (\n      <div className={css.tooltip}>\n        <div className={css.tooltipLabel}>\n          {`${(source as NodeExtra).title} → ${(target as NodeExtra).title}`}\n        </div>\n        <div className={css.tooltipValue}>{formatValue(value)}</div>\n      </div>\n    );\n  }, [source, target, value]);\n\n  const { pointerOut, pointerOver } = useHoverIntent({\n    onPointerOver: (event) => {\n      setHovered(true);\n      onMouseEnter?.(event as any);\n    },\n    onPointerOut: (event) => {\n      setHovered(false);\n      onMouseLeave?.(event as any);\n    }\n  });\n\n  const ariaLabelData = useMemo(\n    () =>\n      `${(source as NodeExtra).title} → ${\n        (target as NodeExtra).title\n      }: ${formatValue(value)}`,\n    [source, target, value]\n  );\n\n  return (\n    <Fragment>\n      {gradient && (\n        <linearGradient\n          id={`${chartId}-gradient-${index}`}\n          gradientUnits=\"userSpaceOnUse\"\n          x1={linkSource.x1}\n          x2={linkTarget.x0}\n        >\n          <stop offset=\"0%\" stopColor={linkSource.color} />\n          <stop offset=\"100%\" stopColor={linkTarget.color} />\n        </linearGradient>\n      )}\n      <g ref={linkRef}>\n        <motion.path\n          key={`sankey-link-${enterProps.d}-${index}`}\n          className={classNames(css.link, className)}\n          style={style}\n          initial={exitProps}\n          animate={enterProps}\n          exit={exitProps}\n          transition={{\n            duration: animated ? 0.5 : 0\n          }}\n          stroke={stroke}\n          strokeOpacity={opacity(active, disabled)}\n          onClick={onClick}\n          onPointerOver={pointerOver}\n          onPointerOut={pointerOut}\n          aria-label={ariaLabelData}\n          role=\"graphics-document\"\n        />\n      </g>\n      {!tooltip?.props?.disabled && (\n        <CloneElement<TooltipProps>\n          content={renderTooltipContent}\n          element={tooltip}\n          visible={hovered}\n          reference={linkRef}\n        />\n      )}\n    </Fragment>\n  );\n};\n","import React, {\n  Fragment,\n  ReactElement,\n  useCallback,\n  FC,\n  useState,\n  useRef,\n  useMemo\n} from 'react';\nimport { offset } from '@floating-ui/dom';\nimport classNames from 'classnames';\nimport { motion } from 'motion/react';\nimport { ChartInternalDataTypes } from '@/common/data';\nimport { CloneElement } from 'reablocks';\nimport { formatValue } from '@/common/utils/formatting';\nimport { Tooltip, TooltipProps } from 'reablocks';\nimport {\n  SankeyLabel,\n  SankeyLabelPosition,\n  SankeyLabelProps\n} from '@/Sankey/SankeyLabel';\nimport { SankeyNodeExtra, DEFAULT_COLOR } from '@/Sankey/utils';\nimport css from './SankeyNode.module.css';\nimport { useHoverIntent } from '@/common/utils/useHoverIntent';\nimport { tooltipTheme } from '@/common';\n\nexport interface SankeyNodeProps extends SankeyNodeExtra {\n  /**\n   * ID of the node. If not provided, the node's index will be used.\n   */\n  id?: string;\n\n  /**\n   * Title of the node.\n   */\n  title: string;\n\n  /**\n   * Color of the node.\n   */\n  color?: string;\n\n  /**\n   * Whether the element is active or not. Set internally by `Sankey`.\n   */\n  active: boolean;\n\n  /**\n   * Whether to animate the enter/update/exit.\n   */\n  animated: boolean;\n\n  /**\n   * Width of the chart. Set internally by `Sankey`.\n   */\n  chartWidth?: number;\n\n  /**\n   * CSS class to apply.\n   */\n  className?: string;\n\n  /**\n   * Whether the node is disabled. Set internally by `Sankey`.\n   */\n  disabled: boolean;\n\n  /**\n   * Label element.\n   */\n  label: ReactElement<SankeyLabelProps, typeof SankeyLabel>;\n\n  /**\n   * Label position. Set internally by `Sankey`.\n   */\n  labelPosition?: SankeyLabelPosition;\n\n  /**\n   * Percentage of total width occupied by labels on\n   * either side of the graph inside the container.\n   * Set internally by `Sankey`.\n   */\n  labelPadding?: number;\n\n  /**\n   * Opacity callback for the node.\n   */\n  opacity: (active: boolean, disabled: boolean) => number;\n\n  /**\n   * CSS styles to apply.\n   */\n  style?: React.StyleHTMLAttributes<SVGRectElement>;\n\n  /**\n   * Tooltip element.\n   */\n  tooltip?: ReactElement<TooltipProps, typeof Tooltip> | null;\n\n  /**\n   * Width of the node. Set internally by `Sankey`.\n   */\n  width?: number;\n\n  /**\n   * Event for when the node is clicked.\n   */\n  onClick?: (event: React.MouseEvent<SVGRectElement>) => void;\n\n  /**\n   * Event for when the node has mouse enter.\n   */\n  onMouseEnter?: (event: React.MouseEvent<SVGRectElement>) => void;\n\n  /**\n   * Event for when the node has mouse leave.\n   */\n  onMouseLeave?: (event: React.MouseEvent<SVGRectElement>) => void;\n}\n\nexport const SankeyNode: FC<Partial<SankeyNodeProps>> = ({\n  active = false,\n  animated = true,\n  chartWidth,\n  label = <SankeyLabel />,\n  labelPosition,\n  labelPadding,\n  tooltip = (\n    <Tooltip theme={tooltipTheme} followCursor={true} modifiers={[offset(5)]} />\n  ),\n  title,\n  value,\n  className,\n  color = DEFAULT_COLOR,\n  disabled = false,\n  index,\n  opacity = (active, disabled) => (active ? 1 : disabled ? 0.2 : 0.9),\n  style,\n  width,\n  x0,\n  x1,\n  y0,\n  y1,\n  id,\n  sourceLinks,\n  targetLinks,\n  onClick,\n  onMouseEnter,\n  onMouseLeave\n}) => {\n  const node = {\n    id,\n    title,\n    color,\n    sourceLinks,\n    targetLinks,\n    value,\n    index,\n    x0,\n    x1,\n    y0,\n    y1\n  };\n  const nodeWidth = width || (x1 && x0 && x1 - x0 > 0 ? x1 - x0 : 0);\n  const nodeHeight = y1 && y0 && y1 - y0 > 0 ? y1 - y0 : 0;\n\n  const [hovered, setHovered] = useState<boolean>(false);\n  const rectRef = useRef<SVGRectElement | null>(null);\n\n  const renderTooltipContent = useCallback(() => {\n    return (\n      <div className={css.tooltip}>\n        <div className={css.tooltipLabel}>{title}</div>\n        <div className={css.tooltipValue}>\n          {formatValue(value as ChartInternalDataTypes)}\n        </div>\n      </div>\n    );\n  }, [title, value]);\n\n  const { pointerOut, pointerOver } = useHoverIntent({\n    onPointerOver: (event) => {\n      setHovered(true);\n      onMouseEnter?.(event as any);\n    },\n    onPointerOut: (event) => {\n      setHovered(false);\n      onMouseLeave?.(event as any);\n    }\n  });\n\n  const ariaLabelData = useMemo(\n    () => `${title}: ${formatValue(value as ChartInternalDataTypes)}`,\n    [title, value]\n  );\n\n  return (\n    <Fragment>\n      <motion.g\n        ref={rectRef}\n        tabIndex={0}\n        aria-label={ariaLabelData}\n        role=\"graphics-document\"\n      >\n        <motion.rect\n          key={`sankey-node-${x0}-${x1}-${y0}-${y1}-${index}`}\n          className={classNames(css.node, className)}\n          fillOpacity={opacity(active, disabled)}\n          style={style}\n          width={nodeWidth}\n          height={nodeHeight}\n          fill={color}\n          initial={{\n            opacity: 0,\n            attrX: x0,\n            attrY: y0\n          }}\n          animate={{\n            opacity: 1,\n            attrX: x0,\n            attrY: y0\n          }}\n          exit={{\n            opacity: 0,\n            attrX: x0,\n            attrY: y0\n          }}\n          transition={{\n            duration: animated ? 0.1 : 0\n          }}\n          onClick={onClick}\n          onPointerOver={pointerOver}\n          onPointerOut={pointerOut}\n        />\n      </motion.g>\n      {label !== null && (\n        <CloneElement<SankeyLabelProps>\n          active={active}\n          element={label}\n          disabled={disabled}\n          chartWidth={chartWidth}\n          nodeWidth={nodeWidth}\n          node={node}\n          position={labelPosition}\n          labelPadding={labelPadding}\n        />\n      )}\n      {!tooltip?.props?.disabled && (\n        <CloneElement<TooltipProps>\n          content={renderTooltipContent}\n          element={tooltip}\n          visible={hovered}\n          reference={rectRef}\n        />\n      )}\n    </Fragment>\n  );\n};\n","import React, { FC } from 'react';\nimport { LineChart, LineChartProps } from '@/LineChart';\nimport { ChartShallowDataShape } from '@/common/data';\nimport { AreaSeries, Line } from '@/AreaChart';\nimport { PointSeries } from '@/AreaChart';\nimport {\n  LinearXAxis,\n  LinearYAxis,\n  LinearYAxisTickSeries,\n  LinearXAxisTickSeries\n} from '@/common/Axis/LinearAxis';\n\nexport interface SparklineChartProps extends LineChartProps {\n  data: ChartShallowDataShape[];\n}\n\nexport const SparklineChart: FC<Partial<SparklineChartProps>> = (props) => (\n  <LineChart\n    gridlines={null}\n    series={\n      <AreaSeries\n        symbols={<PointSeries show=\"hover\" />}\n        interpolation=\"smooth\"\n        markLine={null}\n        area={null}\n        line={<Line strokeWidth={2} />}\n      />\n    }\n    yAxis={\n      <LinearYAxis\n        scaled={true}\n        type=\"value\"\n        axisLine={null}\n        tickSeries={<LinearYAxisTickSeries line={null} label={null} />}\n      />\n    }\n    xAxis={\n      <LinearXAxis\n        type=\"time\"\n        scaled={true}\n        axisLine={null}\n        tickSeries={<LinearXAxisTickSeries line={null} label={null} />}\n      />\n    }\n    {...props}\n  />\n);\n","import React, { FC } from 'react';\nimport { AreaChart, AreaChartProps, AreaSeries, Area, Line } from '@/AreaChart';\nimport { ChartShallowDataShape } from '@/common/data';\nimport { PointSeries } from '@/AreaChart';\nimport {\n  LinearYAxisTickSeries,\n  LinearYAxis,\n  LinearXAxis,\n  LinearXAxisTickSeries\n} from '@/common/Axis/LinearAxis';\nimport { GradientStop, Gradient } from '@/common/Gradient';\nimport { Stripes } from '@/common/Mask';\n\nexport interface AreaSparklineChartProps extends AreaChartProps {\n  data: ChartShallowDataShape[];\n}\n\nexport const AreaSparklineChart: FC<Partial<AreaSparklineChartProps>> = (\n  props\n) => (\n  <AreaChart\n    gridlines={null}\n    series={\n      <AreaSeries\n        symbols={<PointSeries show=\"hover\" />}\n        interpolation=\"smooth\"\n        markLine={null}\n        area={\n          <Area\n            mask={<Stripes />}\n            gradient={\n              <Gradient\n                stops={[\n                  <GradientStop offset=\"10%\" stopOpacity={0} key=\"start\" />,\n                  <GradientStop offset=\"80%\" stopOpacity={1} key=\"stop\" />\n                ]}\n              />\n            }\n          />\n        }\n        line={<Line strokeWidth={3} />}\n      />\n    }\n    yAxis={\n      <LinearYAxis\n        type=\"value\"\n        scaled={true}\n        axisLine={null}\n        tickSeries={<LinearYAxisTickSeries line={null} label={null} />}\n      />\n    }\n    xAxis={\n      <LinearXAxis\n        type=\"time\"\n        scaled={true}\n        axisLine={null}\n        tickSeries={<LinearXAxisTickSeries line={null} label={null} />}\n      />\n    }\n    {...props}\n  />\n);\n","import React, { FC } from 'react';\nimport { BarChart, BarChartProps } from '@/BarChart';\nimport { ChartShallowDataShape } from '@/common/data';\nimport {\n  LinearXAxis,\n  LinearYAxis,\n  LinearYAxisTickSeries,\n  LinearXAxisTickSeries\n} from '@/common/Axis';\nimport { BarSeries } from '@/BarChart';\nimport { schemes } from '@/common/color';\n\nexport interface BarSparklineChartProps extends BarChartProps {\n  data: ChartShallowDataShape[];\n}\n\nexport const BarSparklineChart: FC<Partial<BarSparklineChartProps>> = (\n  props\n) => (\n  <BarChart\n    gridlines={null}\n    series={<BarSeries colorScheme={schemes.cybertron[0]} />}\n    yAxis={\n      <LinearYAxis\n        type=\"value\"\n        axisLine={null}\n        tickSeries={<LinearYAxisTickSeries line={null} label={null} />}\n      />\n    }\n    xAxis={\n      <LinearXAxis\n        type=\"category\"\n        axisLine={null}\n        tickSeries={<LinearXAxisTickSeries line={null} label={null} />}\n      />\n    }\n    {...props}\n  />\n);\n","import React, { FC } from 'react';\nimport { offset } from '@floating-ui/dom';\nimport {\n  StackedBarChart,\n  StackedBarSeries,\n  Bar,\n  BarChartProps,\n  BAR_DEFAULT_PROPS\n} from '@/BarChart';\nimport {\n  Gradient,\n  GradientStop,\n  LinearYAxis,\n  LinearXAxis,\n  LinearYAxisTickSeries,\n  LinearXAxisTickSeries,\n  TooltipArea,\n  ChartTooltip,\n  TooltipTemplate,\n  formatValue,\n  ChartNestedDataShape\n} from '@/common';\n\nexport interface SonarChartProps extends BarChartProps {\n  data: ChartNestedDataShape[];\n}\n\nexport const SonarChart: FC<Partial<SonarChartProps>> = (props) => (\n  <StackedBarChart\n    {...props}\n    margins={0}\n    gridlines={null}\n    series={\n      <StackedBarSeries\n        type=\"stackedDiverging\"\n        colorScheme=\"rgb(17, 207, 247)\"\n        tooltip={\n          <TooltipArea\n            tooltip={\n              <ChartTooltip\n                followCursor={true}\n                modifiers={[offset(5)]}\n                content={(data, color) => (\n                  <TooltipTemplate\n                    color={color}\n                    value={{\n                      x: formatValue(data.x),\n                      y: `${formatValue(Math.abs(data.data[0].y))}`\n                    }}\n                  />\n                )}\n              />\n            }\n          />\n        }\n        bar={[\n          <Bar\n            {...BAR_DEFAULT_PROPS}\n            key=\"first\"\n            width={1}\n            rangeLines={null}\n            minHeight={1}\n            gradient={\n              <Gradient\n                stops={[\n                  <GradientStop offset=\"5%\" stopOpacity={0.7} key=\"start\" />,\n                  <GradientStop offset=\"90%\" stopOpacity={1} key=\"stop\" />\n                ]}\n              />\n            }\n          />,\n          <Bar\n            key=\"second\"\n            width={1}\n            rangeLines={null}\n            minHeight={1}\n            gradient={\n              <Gradient\n                stops={[\n                  <GradientStop offset=\"5%\" stopOpacity={1} key=\"stop\" />,\n                  <GradientStop offset=\"90%\" stopOpacity={0.7} key=\"start\" />\n                ]}\n              />\n            }\n          />\n        ]}\n      />\n    }\n    yAxis={\n      <LinearYAxis\n        type=\"value\"\n        axisLine={null}\n        tickSeries={<LinearYAxisTickSeries line={null} label={null} />}\n      />\n    }\n    xAxis={\n      <LinearXAxis\n        type=\"category\"\n        axisLine={null}\n        tickSeries={<LinearXAxisTickSeries line={null} label={null} />}\n      />\n    }\n  />\n);\n","import React, { ReactElement, useCallback, FC, useMemo, Fragment } from 'react';\nimport { ChartInternalShallowDataShape } from '@/common/data';\nimport {\n  radialArea,\n  curveCardinalClosed,\n  curveLinearClosed,\n  curveCardinal,\n  curveLinear\n} from 'd3-shape';\nimport { RadialGradient, RadialGradientProps } from '@/common/Gradient';\nimport { CloneElement } from 'reablocks';\nimport { RadialInterpolationTypes } from '@/common/utils/interpolation';\nimport { MotionPath, DEFAULT_TRANSITION } from '@/common/Motion';\n\nexport interface RadialAreaProps {\n  /**\n   * Parsed data shape. Set internally by `RadialAreaChart`.\n   */\n  data: ChartInternalShallowDataShape[];\n\n  /**\n   * Whether to animate the enter/update/exit.\n   */\n  animated: boolean;\n\n  /**\n   * D3 scale for X Axis. Set internally by `RadialAreaChart`.\n   */\n  xScale: any;\n\n  /**\n   * D3 scale for Y Axis. Set internally by `RadialAreaChart`.\n   */\n  yScale: any;\n\n  /**\n   * Interpolation for the area. Set internally by `RadialAreaSeries`.\n   */\n  interpolation: RadialInterpolationTypes;\n\n  /**\n   * Color for the area. Set internally by `RadialAreaSeries`.\n   */\n  color: any;\n\n  /**\n   * Id set internally by `RadialAreaSeries`.\n   */\n  id: string;\n\n  /**\n   * The inner radius for the chart center.\n   */\n  innerRadius: number;\n\n  /**\n   * The outer radius for the chart center.\n   */\n  outerRadius: number;\n\n  /**\n   * CSS classes to apply.\n   */\n  className?: string;\n\n  /**\n   * Index of the area in the series. Set internally by `RadialAreaSeries`.\n   */\n  index: number;\n\n  /**\n   * Gradient to apply to the area.\n   */\n  gradient: ReactElement<RadialGradientProps, typeof RadialGradient> | null;\n\n  /**\n   * Whether the curve should be closed. Set to true by deafult\n   */\n  isClosedCurve: boolean;\n}\n\nexport const RadialArea: FC<Partial<RadialAreaProps>> = ({\n  id,\n  data,\n  className,\n  yScale,\n  color,\n  animated,\n  index,\n  outerRadius,\n  xScale,\n  innerRadius,\n  interpolation,\n  gradient = <RadialGradient />,\n  isClosedCurve = true\n}) => {\n  const transition = useMemo(\n    () =>\n      animated\n        ? {\n            ...DEFAULT_TRANSITION,\n            delay: index * 0.05\n          }\n        : {\n            type: false as const,\n            delay: 0\n          },\n    [animated, index]\n  );\n\n  const getFill = useCallback(\n    (c: string) => {\n      if (!gradient) {\n        return c;\n      }\n\n      return `url(#${id}-gradient)`;\n    },\n    [id, gradient]\n  );\n\n  const getPath = useCallback(\n    (d: ChartInternalShallowDataShape[]) => {\n      const curve =\n        interpolation === 'smooth'\n          ? isClosedCurve\n            ? curveCardinalClosed\n            : curveCardinal\n          : isClosedCurve\n            ? curveLinearClosed\n            : curveLinear;\n\n      const radialFn = radialArea()\n        .angle((dd: any) => xScale(dd.x))\n        .innerRadius((_) => innerRadius!)\n        .outerRadius((d: any) => yScale(d.y))\n        .curve(curve);\n\n      return radialFn(d as any);\n    },\n    [interpolation, isClosedCurve, xScale, innerRadius, yScale]\n  );\n\n  const enter = useMemo(\n    () => ({\n      d: getPath(data!),\n      opacity: 1\n    }),\n    [data, getPath]\n  );\n\n  const exit = useMemo(() => {\n    const [yStart] = yScale.domain();\n    return {\n      d: getPath(data!.map((d) => ({ ...d, y: yStart }))),\n      opacity: 0\n    };\n  }, [data, getPath, yScale]);\n\n  const fill = color(data, 0);\n\n  return (\n    <Fragment>\n      <MotionPath\n        custom={{\n          enter,\n          exit\n        }}\n        transition={transition}\n        pointerEvents=\"none\"\n        className={className}\n        fill={getFill(color)}\n      />\n      {gradient && (\n        <CloneElement<RadialGradientProps>\n          element={gradient}\n          id={`${id}-gradient`}\n          radius={outerRadius}\n          color={fill}\n        />\n      )}\n    </Fragment>\n  );\n};\n","import React, { useCallback, useMemo, FC } from 'react';\nimport { ChartInternalShallowDataShape } from '@/common/data';\nimport {\n  radialLine,\n  curveCardinalClosed,\n  curveLinearClosed,\n  curveCardinal,\n  curveLinear\n} from 'd3-shape';\nimport { RadialInterpolationTypes } from '@/common/utils/interpolation';\nimport { MotionPath, DEFAULT_TRANSITION } from '@/common/Motion';\n\nexport interface RadialLineProps {\n  /**\n   * Parsed data shape. Set internally by `RadialAreaChart`.\n   */\n  data: ChartInternalShallowDataShape[];\n\n  /**\n   * Whether to animate the enter/update/exit. Set internally by `RadialAreaSeries`.\n   */\n  animated: boolean;\n\n  /**\n   * D3 scale for X Axis. Set internally by `RadialAreaChart`.\n   */\n  xScale: any;\n\n  /**\n   * D3 scale for Y Axis. Set internally by `RadialAreaChart`.\n   */\n  yScale: any;\n\n  /**\n   * Color for the area. Set internally by `RadialAreaSeries`.\n   */\n  color: any;\n\n  /**\n   * Interpolation for the area. Set internally by `RadialAreaSeries`.\n   */\n  interpolation: RadialInterpolationTypes;\n\n  /**\n   * Index of the area in the series. Set internally by `RadialAreaSeries`.\n   */\n  index: number;\n\n  /**\n   * Stroke width of the line.\n   */\n  strokeWidth: number;\n\n  /**\n   * CSS classes to apply.\n   */\n  className?: string;\n\n  /**\n   * Internal property to identify if there is a area or not.\n   */\n  hasArea: boolean;\n\n  /**\n   * Whether the curve should be closed. Set to true by deafult\n   */\n  isClosedCurve: boolean;\n}\n\nexport const RadialLine: FC<Partial<RadialLineProps>> = ({\n  xScale,\n  yScale,\n  className,\n  index,\n  hasArea,\n  color,\n  data,\n  interpolation,\n  strokeWidth = 2,\n  animated = true,\n  isClosedCurve = true\n}) => {\n  const fill = color(data, index);\n\n  const getPath = useCallback(\n    (preData: ChartInternalShallowDataShape[]) => {\n      const curve =\n        interpolation === 'smooth'\n          ? isClosedCurve\n            ? curveCardinalClosed\n            : curveCardinal\n          : isClosedCurve\n            ? curveLinearClosed\n            : curveLinear;\n\n      const radialFn = radialLine()\n        .angle((d: any) => xScale(d.x))\n        .radius((d: any) => yScale(d.y))\n        .curve(curve);\n\n      return radialFn(preData as any);\n    },\n    [interpolation, isClosedCurve, xScale, yScale]\n  );\n\n  const transition = useMemo(\n    () =>\n      animated\n        ? {\n            ...DEFAULT_TRANSITION,\n            delay: hasArea ? 0 : index * 0.05\n          }\n        : {\n            type: false as const,\n            delay: 0\n          },\n    [animated, index, hasArea]\n  );\n\n  const enter = useMemo(\n    () => ({\n      d: getPath(data!),\n      opacity: 1\n    }),\n    [data, getPath]\n  );\n\n  const exit = useMemo(() => {\n    const [yStart] = yScale.domain();\n    return {\n      d: getPath(data!.map((d) => ({ ...d, y: yStart }))),\n      opacity: 0\n    };\n  }, [data, yScale, getPath]);\n\n  return (\n    <MotionPath\n      custom={{\n        enter,\n        exit\n      }}\n      transition={transition}\n      className={className}\n      pointerEvents=\"none\"\n      stroke={fill}\n      fill=\"none\"\n      strokeWidth={strokeWidth}\n    />\n  );\n};\n","import React, { FC, useCallback, Fragment, ReactElement } from 'react';\nimport {\n  ChartShallowDataShape,\n  buildShallowChartData,\n  ChartInternalShallowDataShape\n} from '@/common/data';\nimport { scaleBand, scaleTime } from 'd3-scale';\nimport { getYDomain, getXDomain } from '@/common/utils/domains';\nimport {\n  RadialScatterSeries,\n  RadialScatterSeriesProps\n} from './RadialScatterSeries';\nimport {\n  ChartProps,\n  ChartContainer,\n  ChartContainerChildProps\n} from '@/common/containers';\nimport { CloneElement } from 'reablocks';\nimport { RadialAxisProps, RadialAxis } from '@/common/Axis/RadialAxis';\nimport { getRadialYScale } from '@/common/scales';\nimport { uniqueBy } from '@/common';\n\nexport interface RadialScatterPlotProps extends ChartProps {\n  /**\n   * Data the chart will receive to render.\n   */\n  data: ChartShallowDataShape[];\n\n  /**\n   * The series component that renders the scatter components.\n   */\n  series: ReactElement<RadialScatterSeriesProps, typeof RadialScatterSeries>;\n\n  /**\n   * The radial axis component for the chart.\n   */\n  axis: ReactElement<RadialAxisProps, typeof RadialAxis> | null;\n\n  /**\n   * The inner radius for the chart center.\n   */\n  innerRadius: number;\n}\n\nexport const RadialScatterPlot: FC<Partial<RadialScatterPlotProps>> = ({\n  id,\n  width,\n  height,\n  margins,\n  className,\n  containerClassName,\n  innerRadius,\n  series,\n  axis,\n  data\n}) => {\n  const getScales = useCallback(\n    (\n      aggregatedData: ChartInternalShallowDataShape[],\n      outer: number,\n      inner: number\n    ) => {\n      let xScale;\n      if (axis?.props.type === 'category') {\n        const xDomain = uniqueBy<ChartInternalShallowDataShape>(\n          aggregatedData,\n          (dd) => dd.x\n        );\n        xScale = scaleBand()\n          .range([0, 2 * Math.PI])\n          .domain(xDomain as any[]);\n      } else {\n        const xDomain = getXDomain({ data: aggregatedData });\n        xScale = scaleTime()\n          .range([0, 2 * Math.PI])\n          .domain(xDomain);\n      }\n\n      const yDomain = getYDomain({ data: aggregatedData, scaled: false });\n      const yScale = getRadialYScale(inner, outer, yDomain);\n\n      return {\n        yScale,\n        xScale\n      };\n    },\n    []\n  );\n\n  const renderChart = useCallback(\n    (containerProps: ChartContainerChildProps) => {\n      const { chartWidth, chartHeight, id } = containerProps;\n      const outerRadius = Math.min(chartWidth, chartHeight) / 2;\n      const aggregatedData = buildShallowChartData(data);\n      const { yScale, xScale } = getScales(\n        aggregatedData,\n        outerRadius,\n        innerRadius\n      );\n\n      return (\n        <Fragment>\n          {axis && (\n            <CloneElement<RadialAxisProps>\n              element={axis}\n              xScale={xScale}\n              height={chartHeight}\n              width={chartWidth}\n              innerRadius={innerRadius}\n            />\n          )}\n          <CloneElement<RadialScatterSeriesProps>\n            element={series}\n            id={id}\n            data={aggregatedData}\n            xScale={xScale}\n            yScale={yScale}\n          />\n        </Fragment>\n      );\n    },\n    [data, getScales, innerRadius, series, axis]\n  );\n\n  return (\n    <ChartContainer\n      id={id}\n      containerClassName={containerClassName}\n      width={width}\n      height={height}\n      margins={margins}\n      xAxisVisible={false}\n      yAxisVisible={false}\n      center={true}\n      className={className}\n    >\n      {renderChart}\n    </ChartContainer>\n  );\n};\n","import React, {\n  ReactNode,\n  useRef,\n  Fragment,\n  ReactElement,\n  FC,\n  useState,\n  useMemo\n} from 'react';\nimport { ChartInternalShallowDataShape } from '@/common/data';\nimport { radialLine } from 'd3-shape';\nimport classNames from 'classnames';\nimport { ChartTooltip, ChartTooltipProps } from '@/common/Tooltip';\nimport { CloneElement } from 'reablocks';\nimport { motion } from 'motion/react';\nimport { DEFAULT_TRANSITION } from '@/common/Motion';\nimport { schemes } from '@/common/color';\nimport css from './RadialScatterPoint.module.css';\nimport { getAriaLabel, mergeDefaultProps } from '@/common';\n\nexport interface RadialScatterPointProps {\n  /**\n   * Parsed data shape. Set internally by `RadialScatterPlot`.\n   */\n  data: ChartInternalShallowDataShape;\n\n  /**\n   * Index of the element in the series. Set internally by `RadialScatterSeries`.\n   */\n  index: number;\n\n  /**\n   * Whether the element is active or not. Set internally by `RadialScatterSeries`.\n   */\n  animated: boolean;\n\n  /**\n   * D3 scale for X Axis. Set internally by `RadialScatterPlot`.\n   */\n  xScale: any;\n\n  /**\n   * D3 scale for Y Axis. Set internally by `RadialScatterPlot`.\n   */\n  yScale: any;\n\n  /**\n   * Fill for the element.\n   */\n  fill: string;\n\n  /**\n   * Id set internally by `RadialScatterPlot`.\n   */\n  id: string;\n\n  /**\n   * Color of the circle.\n   */\n  color: any;\n\n  /**\n   * CSS classes to apply.\n   */\n  className?: any;\n\n  /**\n   * Whether the element is active or not. Set internally by `RadialScatterSeries`.\n   */\n  active?: boolean;\n\n  /**\n   * Whether the elment is visiblbe or not.\n   */\n  visible?: (value, index) => boolean;\n\n  /**\n   * Symbol element to render.\n   */\n  symbol: (value) => ReactNode;\n\n  /**\n   * Size of the circle element.\n   */\n  size?: ((d) => number) | number;\n\n  /**\n   * Tooltip element.\n   */\n  tooltip: ReactElement<ChartTooltipProps, typeof ChartTooltip> | null;\n\n  /**\n   * Event for when a symbol is clicked.\n   */\n  onClick: (event) => void;\n\n  /**\n   * Event for when the symbol has mouse enter.\n   */\n  onMouseEnter: (event) => void;\n\n  /**\n   * Event for when the symbol has mouse leave.\n   */\n  onMouseLeave: (event) => void;\n}\n\nexport const RadialScatterPoint: FC<Partial<RadialScatterPointProps>> = (\n  props\n) => {\n  const {\n    size,\n    data,\n    color,\n    index,\n    symbol,\n    active,\n    tooltip,\n    yScale,\n    xScale,\n    animated,\n    className,\n    visible,\n    ...rest\n  } = mergeDefaultProps(RADIAL_SCATTER_POINT_DEFAULT_PROPS, props);\n\n  const ref = useRef<any>(null);\n  const [hovered, setHovered] = useState<boolean>(false);\n\n  function onMouseEnter(event: React.MouseEvent) {\n    setHovered(true);\n    rest.onMouseEnter({\n      value: data,\n      nativeEvent: event\n    });\n  }\n\n  function onMouseLeave(event: React.MouseEvent) {\n    setHovered(false);\n    rest.onMouseLeave({\n      value: data,\n      nativeEvent: event\n    });\n  }\n\n  function onClick(event: React.MouseEvent) {\n    rest.onClick({\n      value: data,\n      nativeEvent: event\n    });\n  }\n\n  function getTranslate(data: ChartInternalShallowDataShape) {\n    const fn = radialLine()\n      .radius((d: any) => yScale(d.y))\n      .angle((d: any) => xScale(d.x));\n\n    // Parse the generated path to get point coordinates\n    // Ref: https://bit.ly/2CnZcPl\n    const path = fn([data] as any);\n\n    if (path) {\n      const [translateX, translateY] = path.slice(1).slice(0, -1).split(',');\n\n      return {\n        translateX: parseFloat(translateX),\n        translateY: parseFloat(translateY)\n      };\n    }\n  }\n\n  function getTransition() {\n    if (animated) {\n      return {\n        ...DEFAULT_TRANSITION,\n        delay: index * 0.005\n      };\n    } else {\n      return {\n        type: false as const,\n        delay: 0\n      };\n    }\n  }\n\n  const fill = typeof color === 'function' ? color(data, index) : color;\n  const transform = getTranslate(data);\n  const sizeVal = typeof size === 'function' ? size(data) : size;\n  const transition = getTransition();\n\n  const [yStart] = yScale.domain();\n  const exitTransform = getTranslate({ ...data, y: yStart });\n\n  const ariaLabelData = useMemo(() => getAriaLabel(data), [data]);\n\n  const isVisible = visible ? visible?.(data, index) : active;\n\n  return (\n    <Fragment>\n      <motion.g\n        initial={{ ...exitTransform, opacity: 0 }}\n        animate={{ ...transform, opacity: 1 }}\n        exit={{ ...exitTransform, opacity: 0 }}\n        transition={transition}\n        ref={ref}\n        onMouseEnter={onMouseEnter}\n        onMouseLeave={onMouseLeave}\n        onClick={onClick}\n        className={classNames(className, {\n          [css.inactive]: !active,\n          [css.hidden]: !isVisible\n        })}\n        tabIndex={0}\n        aria-label={ariaLabelData}\n        role=\"graphics-document\"\n      >\n        {symbol && symbol(data)}\n        {!symbol && <circle r={sizeVal} fill={fill} />}\n      </motion.g>\n      {tooltip && (\n        <CloneElement<ChartTooltipProps>\n          element={tooltip}\n          visible={hovered}\n          reference={ref}\n          value={data}\n        />\n      )}\n    </Fragment>\n  );\n};\n\nexport const RADIAL_SCATTER_POINT_DEFAULT_PROPS = {\n  size: 3,\n  color: schemes.cybertron[0],\n  tooltip: <ChartTooltip />,\n  active: true,\n  onClick: () => undefined,\n  onMouseEnter: () => undefined,\n  onMouseLeave: () => undefined\n};\n","import React, {\n  useState,\n  FC,\n  Fragment,\n  ReactElement,\n  useEffect,\n  useCallback,\n  useMemo\n} from 'react';\nimport { ChartInternalShallowDataShape } from '@/common/data';\nimport {\n  RADIAL_SCATTER_POINT_DEFAULT_PROPS,\n  RadialScatterPoint,\n  RadialScatterPointProps\n} from './RadialScatterPoint';\nimport { CloneElement } from 'reablocks';\nimport { identifier } from 'safe-identifier';\nimport { RadialValueMarker, RadialValueMarkerProps } from '@/common';\n\nexport interface RadialScatterSeriesProps {\n  /**\n   * Point that is rendered.\n   */\n  point: ReactElement<RadialScatterPointProps, typeof RadialScatterPoint>;\n\n  /**\n   * D3 scale for X Axis. Set internally by `RadialScatterPlot`.\n   */\n  xScale: any;\n\n  /**\n   * D3 scale for Y Axis. Set internally by `RadialScatterPlot`.\n   */\n  yScale: any;\n\n  /**\n   * Parsed data shape. Set internally by `RadialScatterPlot`.\n   */\n  data: ChartInternalShallowDataShape[];\n\n  /**\n   * Id set internally by `RadialScatterPlot`.\n   */\n  id: string;\n\n  /**\n   * Whether to animate the enter/update/exit.\n   */\n  animated: boolean;\n\n  /**\n   * Active element ids to highlight.\n   */\n  activeIds?: string[];\n\n  /**\n   * When to show the point.\n   */\n  show: boolean;\n\n  /**\n   * Value markers line for the chart.\n   */\n  valueMarkers:\n    | ReactElement<RadialValueMarkerProps, typeof RadialValueMarker>[]\n    | null;\n}\n\nexport const RadialScatterSeries: FC<Partial<RadialScatterSeriesProps>> = ({\n  data,\n  point = <RadialScatterPoint />,\n  xScale,\n  yScale,\n  animated = true,\n  activeIds,\n  show = true,\n  valueMarkers\n}) => {\n  const pointProps = useMemo(\n    () => ({ ...RADIAL_SCATTER_POINT_DEFAULT_PROPS, ...(point?.props ?? {}) }),\n    [point?.props]\n  );\n  const [internalActiveIds, setInternalActiveIds] = useState<string[] | null>(\n    activeIds\n  );\n\n  useEffect(() => {\n    setInternalActiveIds(activeIds || []);\n  }, [activeIds]);\n\n  const onMouseEnter = useCallback(\n    ({ value }) => {\n      // Only perform this on unmanaged activations\n      if (!activeIds) {\n        setInternalActiveIds([value.id]);\n      }\n    },\n    [activeIds]\n  );\n\n  const onMouseLeave = useCallback(() => {\n    // Only perform this on unmanaged activations\n    if (!activeIds) {\n      setInternalActiveIds([]);\n    }\n  }, [activeIds]);\n\n  const isVisible = useCallback(() => show, [show]);\n\n  const renderPoint = useCallback(\n    (d: ChartInternalShallowDataShape, index: number) => {\n      let dataId;\n      if (d.id) {\n        dataId = d.id;\n      } else {\n        console.warn(\n          'No \\'id\\' property provided for scatter point; provide one via \\'id\\'.'\n        );\n      }\n\n      const key = identifier(`${dataId || index}`);\n      const active =\n        !(internalActiveIds && internalActiveIds.length) ||\n        internalActiveIds.includes(dataId);\n\n      const pointVisible = pointProps?.visible;\n\n      return (\n        <CloneElement<RadialScatterPointProps>\n          /* Trick to pass isVisible callback, directly cannot be passed when point is a cloned element already */\n          {...(pointVisible ? {} : { visible: isVisible })}\n          element={point}\n          key={key}\n          data={d}\n          index={index}\n          active={active}\n          xScale={xScale}\n          yScale={yScale}\n          animated={animated}\n          onMouseEnter={onMouseEnter}\n          onMouseLeave={onMouseLeave}\n        />\n      );\n    },\n    [\n      isVisible,\n      point,\n      pointProps,\n      internalActiveIds,\n      xScale,\n      yScale,\n      animated,\n      onMouseEnter,\n      onMouseLeave\n    ]\n  );\n\n  const renderValueMarkers = useCallback(\n    () => (\n      <>\n        {valueMarkers?.length &&\n          valueMarkers.map((marker) => (\n            <CloneElement<RadialValueMarkerProps>\n              key={marker.key}\n              element={marker}\n              value={yScale(marker.props.value)}\n            />\n          ))}\n      </>\n    ),\n    [valueMarkers, yScale]\n  );\n\n  return (\n    <Fragment>\n      {renderValueMarkers()}\n      {data.map(renderPoint)}\n    </Fragment>\n  );\n};\n","import React, { useCallback, ReactElement, FC } from 'react';\nimport {\n  RadialScatterSeries,\n  RadialScatterPoint,\n  RadialScatterPointProps\n} from '@/RadialScatterPlot';\nimport { ChartInternalShallowDataShape } from '@/common/data';\nimport { CloneElement } from 'reablocks';\nimport isEqual from 'react-fast-compare';\n\nexport interface RadialPointSeriesProps {\n  /**\n   * Whether the points are animated or not.\n   */\n  animated: boolean;\n\n  /**\n   * Color scheme.\n   */\n  color: any;\n\n  /**\n   * Index of the area in the series. Set internally by `RadialAreaSeries`.\n   */\n  index: number;\n\n  /**\n   * Active values set by parent.\n   */\n  activeValues?: any;\n\n  /**\n   * Parsed data object.\n   */\n  data: ChartInternalShallowDataShape[];\n\n  /**\n   * D3 X-Scale.\n   */\n  yScale: any;\n\n  /**\n   * D3 Y-Scale.\n   */\n  xScale: any;\n\n  /**\n   * When to show the point.\n   */\n  show: boolean | 'hover' | 'first' | 'last';\n\n  /**\n   * Point react component.\n   */\n  point: ReactElement<RadialScatterPointProps, typeof RadialScatterPoint>;\n}\n\nexport const RadialPointSeries: FC<Partial<RadialPointSeriesProps>> = (\n  props\n) => {\n  const { data, xScale, yScale, animated, color, activeValues, show, point } = {\n    ...RADIAL_POINT_SERIES_DEFAULT_PROPS,\n    ...props\n  };\n\n  const isVisible = useCallback(\n    (point: ChartInternalShallowDataShape, index: number): boolean => {\n      const isActive =\n        activeValues && point && isEqual(activeValues.x, point.x);\n\n      if (show === 'hover') {\n        return isActive;\n      } else if (show === 'first') {\n        if (activeValues) {\n          return isActive;\n        } else {\n          return index === 0;\n        }\n      } else if (show === 'last') {\n        if (activeValues) {\n          return isActive;\n        } else {\n          return index === data!.length - 1;\n        }\n      }\n\n      return Boolean(show);\n    },\n    [data, activeValues, show]\n  );\n\n  return (\n    <RadialScatterSeries\n      animated={animated}\n      data={data}\n      xScale={xScale}\n      yScale={yScale}\n      point={\n        <CloneElement<RadialScatterPointProps>\n          element={point}\n          color={color}\n          tooltip={null}\n          visible={isVisible}\n        />\n      }\n    />\n  );\n};\n\nexport const RADIAL_POINT_SERIES_DEFAULT_PROPS = {\n  show: 'hover',\n  point: <RadialScatterPoint />\n};\n","import React, {\n  FC,\n  Fragment,\n  ReactElement,\n  useCallback,\n  useMemo,\n  useState\n} from 'react';\nimport {\n  ChartInternalNestedDataShape,\n  ChartInternalShallowDataShape\n} from '@/common/data';\nimport { getColor, ColorSchemeType, schemes } from '@/common/color';\nimport { CloneElement } from 'reablocks';\nimport { RadialAreaProps, RadialArea } from './RadialArea';\nimport { RadialLine, RadialLineProps } from './RadialLine';\nimport { RadialInterpolationTypes } from '@/common/utils/interpolation';\nimport {\n  RADIAL_POINT_SERIES_DEFAULT_PROPS,\n  RadialPointSeries,\n  RadialPointSeriesProps\n} from './RadialPointSeries';\nimport { TooltipAreaProps, TooltipArea } from '@/common/Tooltip';\nimport {\n  mergeDefaultProps,\n  RadialValueMarker,\n  RadialValueMarkerProps\n} from '@/common';\n\nexport type RadialPointSeriesType = 'standard' | 'grouped';\n\nexport interface RadialAreaSeriesProps {\n  /**\n   * Parsed data shape. Set internally by `RadialAreaChart`.\n   */\n  data: ChartInternalShallowDataShape[];\n\n  /**\n   * The type of the chart.\n   */\n  type?: RadialPointSeriesType;\n\n  /**\n   * Color scheme for the series.\n   */\n  colorScheme: ColorSchemeType;\n\n  /**\n   * The outer radius for the chart center.\n   */\n  outerRadius: number;\n\n  /**\n   * The inner radius for the chart center.\n   */\n  innerRadius: number;\n\n  /**\n   * D3 scale for X Axis. Set internally by `RadialAreaChart`.\n   */\n  xScale: any;\n\n  /**\n   * D3 scale for Y Axis. Set internally by `RadialAreaChart`.\n   */\n  yScale: any;\n\n  /**\n   * Id set internally by `RadialAreaChart`.\n   */\n  id: string;\n\n  /**\n   * interpolation set internally by `RadialAreaChart`.\n   */\n  interpolation: RadialInterpolationTypes;\n\n  /**\n   * Whether to animate the enter/update/exit.\n   */\n  animated: boolean;\n\n  /**\n   * Height of the chart. Set internally by `RadialAreaChart`.\n   */\n  height: number;\n\n  /**\n   * Width of the chart. Set internally by `RadialAreaChart`.\n   */\n  width: number;\n\n  /**\n   * Area that is rendered.\n   */\n  area: ReactElement<RadialAreaProps, typeof RadialArea> | null;\n\n  /**\n   * Line that is rendered.\n   */\n  line: ReactElement<RadialLineProps, typeof RadialLine> | null;\n\n  /**\n   * Symbols used to show points.\n   */\n  symbols: ReactElement<\n    RadialPointSeriesProps,\n    typeof RadialPointSeries\n  > | null;\n\n  /**\n   * Tooltip for the chart area.\n   */\n  tooltip: ReactElement<TooltipAreaProps, typeof TooltipArea>;\n\n  /**\n   * Start angle for the first value.\n   */\n  startAngle?: number;\n\n  /**\n   * End angle for the last value.\n   */\n  endAngle?: number;\n\n  /**\n   * Whether the curve should be closed. Set to true by deafult\n   */\n  isClosedCurve: boolean;\n\n  /**\n   * Value markers line for the chart.\n   */\n  valueMarkers:\n    | ReactElement<RadialValueMarkerProps, typeof RadialValueMarker>[]\n    | null;\n}\n\nexport const RadialAreaSeries: FC<Partial<RadialAreaSeriesProps>> = (props) => {\n  const {\n    area,\n    line,\n    symbols,\n    tooltip,\n    xScale,\n    yScale,\n    data,\n    id,\n    animated,\n    width,\n    height,\n    innerRadius,\n    outerRadius,\n    type,\n    colorScheme,\n    interpolation,\n    startAngle,\n    endAngle,\n    isClosedCurve,\n    valueMarkers\n  } = mergeDefaultProps(RADIAL_AREA_SERIES_DEFAULT_PROPS, props);\n\n  const symbolsProps = useMemo(\n    () => ({\n      ...RADIAL_POINT_SERIES_DEFAULT_PROPS,\n      ...symbols?.props\n    }),\n    [symbols]\n  );\n  const [activeValues, setActiveValues] = useState<any | null>(null);\n  const isMulti = type === 'grouped';\n\n  const getColorForPoint = useCallback(\n    (point: ChartInternalShallowDataShape, index: number) => {\n      const key = Array.isArray(point) ? point?.[0]?.key : point?.key;\n\n      return getColor({\n        colorScheme,\n        data,\n        index,\n        point,\n        key\n      });\n    },\n    [colorScheme, data]\n  );\n\n  const renderArea = useCallback(\n    (point: ChartInternalShallowDataShape[], index = 0) => (\n      <>\n        {area && (\n          <CloneElement<RadialAreaProps>\n            element={area}\n            id={`${id}-radial-area-${index}`}\n            xScale={xScale}\n            yScale={yScale}\n            animated={animated}\n            color={getColorForPoint}\n            index={index}\n            data={point}\n            interpolation={interpolation as RadialInterpolationTypes}\n            outerRadius={outerRadius}\n            innerRadius={innerRadius}\n            isClosedCurve={isClosedCurve}\n          />\n        )}\n        {line && (\n          <CloneElement<RadialLineProps>\n            element={line}\n            xScale={xScale}\n            yScale={yScale}\n            hasArea={area !== null}\n            index={index}\n            animated={animated}\n            interpolation={interpolation as RadialInterpolationTypes}\n            color={getColorForPoint}\n            data={point}\n            isClosedCurve={isClosedCurve}\n          />\n        )}\n      </>\n    ),\n    [\n      animated,\n      area,\n      getColorForPoint,\n      id,\n      innerRadius,\n      interpolation,\n      isClosedCurve,\n      line,\n      outerRadius,\n      xScale,\n      yScale\n    ]\n  );\n\n  const renderSymbols = useCallback(\n    (data: ChartInternalShallowDataShape[], index = 0) => {\n      // Animations are only valid for Area\n      const activeSymbols =\n        (symbols && symbolsProps.activeValues) || activeValues;\n      const isAnimated = area !== undefined && animated && !activeSymbols;\n\n      return (\n        <CloneElement<RadialPointSeriesProps>\n          element={symbols}\n          activeValues={activeValues}\n          xScale={xScale}\n          index={index}\n          yScale={yScale}\n          data={data}\n          animated={isAnimated}\n          color={getColorForPoint}\n        />\n      );\n    },\n    [\n      activeValues,\n      animated,\n      area,\n      getColorForPoint,\n      symbols,\n      symbolsProps,\n      xScale,\n      yScale\n    ]\n  );\n\n  const renderSingleSeries = useCallback(\n    (points: ChartInternalShallowDataShape[]) => (\n      <Fragment>\n        {renderArea(points)}\n        {symbols && renderSymbols(points)}\n      </Fragment>\n    ),\n    [renderArea, renderSymbols, symbols]\n  );\n\n  const renderMultiSeries = useCallback(\n    (points: ChartInternalNestedDataShape[]) => (\n      <Fragment>\n        {points\n          .map((point, index) => (\n            <Fragment key={`${point.key!.toString()}`}>\n              {renderArea(point.data, index)}\n            </Fragment>\n          ))\n          .reverse()}\n        {points\n          .map((point, index) => (\n            <Fragment key={`${point.key!.toString()}`}>\n              {renderSymbols(point.data, index)}\n            </Fragment>\n          ))\n          .reverse()}\n      </Fragment>\n    ),\n    [renderArea, renderSymbols]\n  );\n\n  const renderValueMarkers = useCallback(\n    () => (\n      <>\n        {valueMarkers?.length &&\n          valueMarkers.map((marker) => (\n            <CloneElement<RadialValueMarkerProps>\n              key={marker.key}\n              element={marker}\n              value={yScale(marker.props.value)}\n            />\n          ))}\n      </>\n    ),\n    [valueMarkers, yScale]\n  );\n\n  return (\n    <CloneElement<TooltipAreaProps>\n      element={tooltip}\n      xScale={xScale}\n      yScale={yScale}\n      data={data}\n      height={height}\n      width={width}\n      isRadial={true}\n      innerRadius={innerRadius}\n      outerRadius={outerRadius}\n      color={getColorForPoint}\n      onValueEnter={(event) => setActiveValues(event.value)}\n      onValueLeave={() => setActiveValues(null)}\n      startAngle={startAngle}\n      endAngle={endAngle}\n    >\n      <g clipPath={`url(#${id}-path)`}>\n        {isMulti &&\n          renderMultiSeries(data as unknown as ChartInternalNestedDataShape[])}\n        {!isMulti &&\n          renderSingleSeries(data as ChartInternalShallowDataShape[])}\n        {renderValueMarkers()}\n      </g>\n    </CloneElement>\n  );\n};\n\nexport const RADIAL_AREA_SERIES_DEFAULT_PROPS: Partial<RadialAreaSeriesProps> =\n  {\n    colorScheme: schemes.cybertron,\n    interpolation: 'smooth',\n    type: 'standard',\n    animated: true,\n    area: <RadialArea />,\n    line: <RadialLine />,\n    symbols: <RadialPointSeries />,\n    tooltip: <TooltipArea />,\n    startAngle: 0,\n    endAngle: 2 * Math.PI,\n    isClosedCurve: true\n  };\n","import React, { Fragment, ReactElement, FC, useCallback, useMemo } from 'react';\nimport {\n  ChartInternalShallowDataShape,\n  buildShallowChartData,\n  ChartDataShape,\n  buildNestedChartData,\n  ChartNestedDataShape,\n  ChartShallowDataShape\n} from '@/common/data';\nimport { scaleTime, scaleBand, scalePoint } from 'd3-scale';\nimport { getYDomain, getXDomain } from '@/common/utils/domains';\nimport {\n  ChartProps,\n  ChartContainer,\n  ChartContainerChildProps\n} from '@/common/containers';\nimport { CloneElement } from 'reablocks';\nimport {\n  RADIAL_AREA_SERIES_DEFAULT_PROPS,\n  RadialAreaSeries,\n  RadialAreaSeriesProps\n} from './RadialAreaSeries';\nimport {\n  RADIAL_AXIS_DEFAULT_PROPS,\n  RadialAxis,\n  RadialAxisProps\n} from '@/common/Axis/RadialAxis';\nimport { getRadialYScale } from '@/common/scales/radial';\nimport { uniqueBy } from '@/common/utils';\n\nexport interface RadialAreaChartProps extends ChartProps {\n  /**\n   * Data the chart will receive to render.\n   */\n  data: ChartDataShape[];\n\n  /**\n   * The series component that renders the area components.\n   */\n  series: ReactElement<RadialAreaSeriesProps, typeof RadialAreaSeries>;\n\n  /**\n   * The radial axis component for the chart.\n   */\n  innerRadius: number;\n\n  /**\n   * The inner radius for the chart center.\n   */\n  axis: ReactElement<RadialAxisProps, typeof RadialAxis> | null;\n\n  /**\n   * Start angle for the first value.\n   */\n  startAngle?: number;\n\n  /**\n   * End angle for the last value.\n   */\n  endAngle?: number;\n\n  /**\n   * Whether the curve should be closed. Set to true by deafult\n   */\n  isClosedCurve?: boolean;\n}\n\nexport const RadialAreaChart: FC<Partial<RadialAreaChartProps>> = ({\n  id,\n  width,\n  height,\n  className,\n  data,\n  containerClassName,\n  innerRadius = 0.1,\n  series = <RadialAreaSeries />,\n  axis = <RadialAxis />,\n  margins = 75,\n  startAngle = 0,\n  endAngle = 2 * Math.PI,\n  isClosedCurve = true\n}) => {\n  const seriesProps = useMemo(\n    () => ({ ...RADIAL_AREA_SERIES_DEFAULT_PROPS, ...series.props }),\n    [series.props]\n  );\n  const axisProps = useMemo(\n    () => ({ ...RADIAL_AXIS_DEFAULT_PROPS, ...(axis?.props ?? {}) }),\n    [axis?.props]\n  );\n\n  const getXScale = useCallback(\n    (points) => {\n      const isFullCircle = Math.abs(endAngle - startAngle) >= 2 * Math.PI;\n      let xScale;\n      if (axisProps.type === 'category') {\n        const isMultiSeries = seriesProps.type === 'grouped';\n\n        let xDomain;\n        if (isMultiSeries) {\n          xDomain = uniqueBy<ChartInternalShallowDataShape>(\n            points,\n            (dd) => dd.data,\n            (dd) => dd.x\n          );\n        } else {\n          xDomain = uniqueBy<ChartInternalShallowDataShape>(\n            points,\n            (dd) => dd.x\n          );\n        }\n\n        if (isFullCircle) {\n          xScale = scaleBand()\n            .range([0, 2 * Math.PI])\n            .domain(xDomain as any[]);\n        } else {\n          // scaleBand() excludes the end value from the band:\n          //  https://www.d3indepth.com/scales/#scaleband\n          xScale = scalePoint()\n            .range([startAngle, endAngle])\n            .domain(xDomain as any[]);\n        }\n      } else {\n        const xDomain = getXDomain({ data: points });\n\n        xScale = scaleTime().range([startAngle, endAngle]).domain(xDomain);\n      }\n\n      return xScale;\n    },\n    [axisProps.type, endAngle, seriesProps.type, startAngle]\n  );\n\n  const getScales = useCallback(\n    (preData: ChartDataShape[], outerRadius: number, innerRadius: number) => {\n      const isMultiSeries = seriesProps.type === 'grouped';\n\n      let d;\n      if (isMultiSeries) {\n        d = buildNestedChartData(preData as ChartNestedDataShape[], true);\n      } else {\n        d = buildShallowChartData(preData as ChartShallowDataShape[]);\n      }\n\n      const xScale = getXScale(d);\n      const yDomain = getYDomain({ data: d, scaled: false });\n      const yScale = getRadialYScale(innerRadius, outerRadius, yDomain);\n\n      return {\n        yScale,\n        xScale,\n        result: d\n      };\n    },\n    [getXScale, seriesProps.type]\n  );\n\n  const renderChart = useCallback(\n    (containerProps: ChartContainerChildProps) => {\n      const { chartWidth, chartHeight, id } = containerProps;\n      const outerRadius = Math.min(chartWidth, chartHeight) / 2;\n      const { yScale, xScale, result } = getScales(\n        data!,\n        outerRadius,\n        innerRadius\n      );\n\n      return (\n        <Fragment>\n          {axis && (\n            <CloneElement<RadialAxisProps>\n              element={axis}\n              xScale={xScale}\n              height={chartHeight}\n              width={chartWidth}\n              innerRadius={innerRadius}\n              startAngle={startAngle}\n              endAngle={endAngle}\n            />\n          )}\n          <CloneElement<RadialAreaSeriesProps>\n            element={series}\n            id={id}\n            data={result}\n            xScale={xScale}\n            yScale={yScale}\n            height={chartHeight}\n            width={chartWidth}\n            outerRadius={outerRadius}\n            innerRadius={innerRadius}\n            startAngle={startAngle}\n            endAngle={endAngle}\n            isClosedCurve={isClosedCurve}\n          />\n        </Fragment>\n      );\n    },\n    [\n      getScales,\n      data,\n      innerRadius,\n      axis,\n      startAngle,\n      endAngle,\n      series,\n      isClosedCurve\n    ]\n  );\n\n  return (\n    <ChartContainer\n      id={id}\n      width={width}\n      height={height}\n      containerClassName={containerClassName}\n      margins={margins}\n      xAxisVisible={false}\n      yAxisVisible={false}\n      center={true}\n      className={className}\n    >\n      {renderChart}\n    </ChartContainer>\n  );\n};\n","const pi = Math.PI,\n    tau = 2 * pi,\n    epsilon = 1e-6,\n    tauEpsilon = tau - epsilon;\n\nfunction append(strings) {\n  this._ += strings[0];\n  for (let i = 1, n = strings.length; i < n; ++i) {\n    this._ += arguments[i] + strings[i];\n  }\n}\n\nfunction appendRound(digits) {\n  let d = Math.floor(digits);\n  if (!(d >= 0)) throw new Error(`invalid digits: ${digits}`);\n  if (d > 15) return append;\n  const k = 10 ** d;\n  return function(strings) {\n    this._ += strings[0];\n    for (let i = 1, n = strings.length; i < n; ++i) {\n      this._ += Math.round(arguments[i] * k) / k + strings[i];\n    }\n  };\n}\n\nexport class Path {\n  constructor(digits) {\n    this._x0 = this._y0 = // start of current subpath\n    this._x1 = this._y1 = null; // end of current subpath\n    this._ = \"\";\n    this._append = digits == null ? append : appendRound(digits);\n  }\n  moveTo(x, y) {\n    this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n  }\n  closePath() {\n    if (this._x1 !== null) {\n      this._x1 = this._x0, this._y1 = this._y0;\n      this._append`Z`;\n    }\n  }\n  lineTo(x, y) {\n    this._append`L${this._x1 = +x},${this._y1 = +y}`;\n  }\n  quadraticCurveTo(x1, y1, x, y) {\n    this._append`Q${+x1},${+y1},${this._x1 = +x},${this._y1 = +y}`;\n  }\n  bezierCurveTo(x1, y1, x2, y2, x, y) {\n    this._append`C${+x1},${+y1},${+x2},${+y2},${this._x1 = +x},${this._y1 = +y}`;\n  }\n  arcTo(x1, y1, x2, y2, r) {\n    x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(`negative radius: ${r}`);\n\n    let x0 = this._x1,\n        y0 = this._y1,\n        x21 = x2 - x1,\n        y21 = y2 - y1,\n        x01 = x0 - x1,\n        y01 = y0 - y1,\n        l01_2 = x01 * x01 + y01 * y01;\n\n    // Is this path empty? Move to (x1,y1).\n    if (this._x1 === null) {\n      this._append`M${this._x1 = x1},${this._y1 = y1}`;\n    }\n\n    // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n    else if (!(l01_2 > epsilon));\n\n    // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n    // Equivalently, is (x1,y1) coincident with (x2,y2)?\n    // Or, is the radius zero? Line to (x1,y1).\n    else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n      this._append`L${this._x1 = x1},${this._y1 = y1}`;\n    }\n\n    // Otherwise, draw an arc!\n    else {\n      let x20 = x2 - x0,\n          y20 = y2 - y0,\n          l21_2 = x21 * x21 + y21 * y21,\n          l20_2 = x20 * x20 + y20 * y20,\n          l21 = Math.sqrt(l21_2),\n          l01 = Math.sqrt(l01_2),\n          l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n          t01 = l / l01,\n          t21 = l / l21;\n\n      // If the start tangent is not coincident with (x0,y0), line to.\n      if (Math.abs(t01 - 1) > epsilon) {\n        this._append`L${x1 + t01 * x01},${y1 + t01 * y01}`;\n      }\n\n      this._append`A${r},${r},0,0,${+(y01 * x20 > x01 * y20)},${this._x1 = x1 + t21 * x21},${this._y1 = y1 + t21 * y21}`;\n    }\n  }\n  arc(x, y, r, a0, a1, ccw) {\n    x = +x, y = +y, r = +r, ccw = !!ccw;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(`negative radius: ${r}`);\n\n    let dx = r * Math.cos(a0),\n        dy = r * Math.sin(a0),\n        x0 = x + dx,\n        y0 = y + dy,\n        cw = 1 ^ ccw,\n        da = ccw ? a0 - a1 : a1 - a0;\n\n    // Is this path empty? Move to (x0,y0).\n    if (this._x1 === null) {\n      this._append`M${x0},${y0}`;\n    }\n\n    // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n    else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n      this._append`L${x0},${y0}`;\n    }\n\n    // Is this arc empty? We’re done.\n    if (!r) return;\n\n    // Does the angle go the wrong way? Flip the direction.\n    if (da < 0) da = da % tau + tau;\n\n    // Is this a complete circle? Draw two arcs to complete the circle.\n    if (da > tauEpsilon) {\n      this._append`A${r},${r},0,1,${cw},${x - dx},${y - dy}A${r},${r},0,1,${cw},${this._x1 = x0},${this._y1 = y0}`;\n    }\n\n    // Is this arc non-empty? Draw an arc!\n    else if (da > epsilon) {\n      this._append`A${r},${r},0,${+(da >= pi)},${cw},${this._x1 = x + r * Math.cos(a1)},${this._y1 = y + r * Math.sin(a1)}`;\n    }\n  }\n  rect(x, y, w, h) {\n    this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${w = +w}v${+h}h${-w}Z`;\n  }\n  toString() {\n    return this._;\n  }\n}\n\nexport function path() {\n  return new Path;\n}\n\n// Allow instanceof d3.path\npath.prototype = Path.prototype;\n\nexport function pathRound(digits = 3) {\n  return new Path(+digits);\n}\n","import React, { useEffect, useRef } from 'react';\nimport { motion, useMotionValue, useSpring } from 'motion/react';\nimport { interpolate } from 'd3-interpolate';\nimport { DEFAULT_TRANSITION } from '@/common/Motion';\n\nexport const MotionBar = ({ custom, transition, arc, ...rest }) => {\n  const d = useMotionValue('');\n  const currentYRef = useRef(custom.exit.y);\n  const spring = useSpring(0, DEFAULT_TRANSITION);\n\n  useEffect(() => {\n    const interpolator = interpolate(currentYRef.current, custom.enter.y);\n    const prevSpring = spring.get();\n    let timeoutId;\n\n    if (transition?.delay) {\n      timeoutId = setTimeout(() => {\n        spring.set(prevSpring + 1);\n      }, transition.delay * 1000);\n    } else {\n      spring.set(prevSpring + 1);\n    }\n\n    const unsubscribe = spring.onChange((v) => {\n      currentYRef.current = interpolator(v - prevSpring);\n      d.set(arc({ ...custom.enter, y: currentYRef.current }));\n    });\n\n    return () => {\n      if (timeoutId) {\n        clearTimeout(timeoutId);\n      }\n      unsubscribe();\n    };\n  }, [arc, custom.enter, d, spring, transition.delay]);\n\n  const { d: enterD, ...enterRest } = custom.enter;\n  const { d: exitD, ...exitRest } = custom.exit;\n\n  return (\n    <motion.path\n      {...rest}\n      initial={exitRest}\n      exit={exitRest}\n      animate={enterRest}\n      transition={transition}\n      d={transition.type !== false ? d : enterD}\n      tabIndex={0}\n    />\n  );\n};\n","import React, { FC } from 'react';\nimport { motion } from 'motion/react';\n\nexport interface RadialGuideBarProps {\n  active: boolean;\n  path: string;\n  fill?: string;\n  opacity?: number;\n}\n\nexport const RadialGuideBar: FC<Partial<RadialGuideBarProps>> = ({\n  active,\n  path,\n  fill = '#eee',\n  opacity = 0.2\n}) => (\n  <motion.path\n    d={path}\n    fill={fill}\n    pointerEvents=\"none\"\n    initial=\"hidden\"\n    animate={active ? 'visible' : 'hidden'}\n    variants={{\n      hidden: { opacity: 0 },\n      visible: { opacity }\n    }}\n  />\n);\n","import React, {\n  FC,\n  Fragment,\n  ReactElement,\n  useCallback,\n  useMemo,\n  useRef\n} from 'react';\nimport { ChartInternalShallowDataShape } from '@/common/data';\nimport { arc } from 'd3-shape';\nimport { Gradient } from '@/common/Gradient';\nimport chroma from 'chroma-js';\nimport { path } from 'd3-path';\nimport { DEFAULT_TRANSITION } from '@/common/Motion';\nimport { MotionBar } from './MotionBar';\nimport { RadialGuideBar, RadialGuideBarProps } from './RadialGuideBar';\nimport { CloneElement } from 'reablocks';\nimport { scaleBand } from 'd3-scale';\n\nexport interface RadialBarProps {\n  /**\n   * Parsed data shape. Set internally by `RadialBarChart`.\n   */\n  data: ChartInternalShallowDataShape;\n\n  /**\n   * The inner radius for the chart center.\n   */\n  innerRadius: number;\n\n  /**\n   * Index of the element in the series. Set internally by `RadialBarSeries`.\n   */\n  index: number;\n\n  /**\n   * Whether the element is active or not. Set internally by `RadialBarSeries`.\n   */\n  animated: boolean;\n\n  /**\n   * D3 scale for X Axis. Set internally by `RadialBarChart`.\n   */\n  xScale: any;\n\n  /**\n   * D3 scale for Y Axis. Set internally by `RadialBarChart`.\n   */\n  yScale: any;\n\n  /**\n   * Color of the bar.\n   */\n  color: any;\n\n  /**\n   * Whether to use gradient or not.\n   */\n  gradient: boolean;\n\n  /**\n   * Id set internally by `RadialBarSeries`.\n   */\n  id: string;\n\n  /**\n   * Total number of bars used for animation. Set internally by `RadialBarSeries`.\n   */\n  barCount: number;\n\n  /**\n   * Total number of nested bars inside each group. Set internally by `RadialBarSeries`.\n   */\n  innerBarCount: number;\n\n  /**\n   * Index of the group. Set internally by `BarSeries`.\n   */\n  groupIndex?: number;\n\n  /**\n   * CSS classes to apply.\n   */\n  className?: string;\n\n  /**\n   * Whether the bar is curved or not.\n   */\n  curved: boolean;\n\n  /**\n   * Guide bar component.\n   */\n  guide: ReactElement<RadialGuideBarProps, typeof RadialGuideBar> | null;\n\n  /**\n   * Active caused by hover.\n   */\n  active: boolean;\n\n  /**\n   * Event for when a symbol is clicked.\n   */\n  onClick: (event) => void;\n\n  /**\n   * Event for when the symbol has mouse enter.\n   */\n  onMouseEnter: (event) => void;\n\n  /**\n   * Event for when the symbol has mouse leave.\n   */\n  onMouseLeave: (event) => void;\n}\n\nexport const RadialBar: FC<Partial<RadialBarProps>> = ({\n  animated,\n  innerRadius,\n  xScale,\n  yScale,\n  curved = false,\n  id,\n  gradient = true,\n  barCount,\n  innerBarCount,\n  groupIndex,\n  className,\n  data,\n  active,\n  guide = <RadialGuideBar />,\n  index,\n  color,\n  onClick = () => undefined,\n  onMouseEnter = () => undefined,\n  onMouseLeave = () => undefined\n}) => {\n  const previousEnter = useRef<any | null>(null);\n  const fill = color(data, index);\n  const currentColorShade = active ? chroma(fill).brighten(0.5) : fill;\n\n  const transition = useMemo(() => {\n    if (animated) {\n      return {\n        ...DEFAULT_TRANSITION,\n        delay: (index / barCount) * 0.9\n      };\n    } else {\n      return {\n        type: false as const,\n        delay: 0\n      };\n    }\n  }, [animated, barCount, index]);\n\n  const getFill = useCallback(\n    (color: string) => {\n      if (!gradient) {\n        return color;\n      }\n\n      return `url(#${id}-gradient)`;\n    },\n    [gradient, id]\n  );\n\n  const getArc = useCallback(\n    (data: ChartInternalShallowDataShape) => {\n      const outerRadius = yScale(data.y);\n\n      if (curved) {\n        const startAngle = xScale(data.x);\n        const endAngle = startAngle + xScale.bandwidth();\n\n        const arcFn = arc()\n          .innerRadius(innerRadius)\n          .outerRadius(outerRadius)\n          .startAngle(startAngle)\n          .endAngle(endAngle)\n          .padAngle(0.01)\n          .padRadius(innerRadius);\n\n        return arcFn(data as any);\n      } else {\n        const isMultiSeries = groupIndex !== undefined;\n        const xScaleDomain = xScale.domain();\n        const xScaleRange = xScale.range();\n        const isFullCircle =\n          Math.abs(xScaleRange[1] - xScaleRange[0]) >= 2 * Math.PI;\n\n        let xScaleBandwidth;\n        let rotateMid;\n        let startAngle;\n        let endAngle;\n        if (isFullCircle) {\n          xScaleBandwidth = xScale.bandwidth();\n\n          // Align groups centrally about the label axis\n          rotateMid =\n            isMultiSeries && xScaleBandwidth ? xScaleBandwidth / 2 : 0;\n          startAngle = xScale(data.x) - Math.PI * 0.5 - rotateMid;\n          endAngle = startAngle + xScaleBandwidth;\n        } else {\n          xScaleBandwidth = scaleBand()\n            .domain(xScaleDomain)\n            .range(xScaleRange)\n            .bandwidth();\n          rotateMid =\n            isMultiSeries && xScaleBandwidth ? xScaleBandwidth / 2 : 0;\n\n          if (index === 0) {\n            // Squeeze in the first group aligning the first bar in the group with the start margin\n            startAngle = xScale(data.x) - Math.PI * 0.5;\n            endAngle = startAngle + xScaleBandwidth - rotateMid;\n          } else if (index === barCount - 1) {\n            // Squeeze in the last group aligning the last bar in the group with the end margin\n            endAngle = xScaleRange[1] - Math.PI * 0.5;\n            startAngle = endAngle - xScaleBandwidth + rotateMid;\n          } else {\n            // Other groups are center aligned with the label axis\n            startAngle = xScale(data.x) - Math.PI * 0.5 - rotateMid;\n            endAngle = startAngle + xScaleBandwidth;\n          }\n        }\n\n        const innerAngleDistance = endAngle - startAngle;\n        const arcLength = innerRadius * innerAngleDistance;\n        const outerAngleDistance = arcLength / outerRadius;\n        const halfAngleDistanceDelta =\n          (innerAngleDistance - outerAngleDistance) / 2;\n\n        const innerDiff = innerAngleDistance / innerBarCount;\n        const innerStart = isMultiSeries\n          ? startAngle + groupIndex * innerDiff\n          : startAngle;\n        const innerEnd = isMultiSeries ? innerStart + innerDiff : endAngle;\n        const outerDiff = outerAngleDistance / innerBarCount;\n        const halfAngleDiffDistanceDelta = isMultiSeries\n          ? (innerDiff - outerDiff) / 2\n          : halfAngleDistanceDelta;\n\n        const pathFn = path();\n        pathFn.arc(0, 0, innerRadius, innerStart, innerEnd);\n        pathFn.arc(\n          0,\n          0,\n          outerRadius,\n          innerEnd - halfAngleDiffDistanceDelta,\n          innerStart + halfAngleDiffDistanceDelta,\n          true\n        );\n\n        return pathFn.toString();\n      }\n    },\n    [\n      barCount,\n      curved,\n      groupIndex,\n      index,\n      innerBarCount,\n      innerRadius,\n      xScale,\n      yScale\n    ]\n  );\n\n  const renderBar = useCallback(\n    (color: string) => {\n      const fill = getFill(color);\n\n      // Track previous props\n      const prev = previousEnter.current\n        ? { ...previousEnter.current }\n        : undefined;\n      previousEnter.current = { ...data };\n\n      const [yStart, yEnd] = yScale.domain();\n      const exit = {\n        ...data,\n        y: yStart\n      };\n\n      const guidePath = getArc({\n        ...data,\n        y: yEnd\n      }) as string;\n\n      return (\n        <Fragment>\n          {guide && (\n            <CloneElement<RadialGuideBarProps>\n              element={guide}\n              active={active}\n              path={guidePath}\n            />\n          )}\n          <MotionBar\n            arc={getArc}\n            custom={{\n              enter: data,\n              exit,\n              previousEnter: prev\n            }}\n            transition={transition}\n            fill={fill}\n            className={className}\n            onMouseEnter={(event) =>\n              onMouseEnter?.({\n                value: data,\n                nativeEvent: event\n              })\n            }\n            onMouseLeave={(event) =>\n              onMouseLeave?.({\n                value: data,\n                nativeEvent: event\n              })\n            }\n            onClick={(event) =>\n              onClick?.({\n                value: data,\n                nativeEvent: event\n              })\n            }\n          />\n        </Fragment>\n      );\n    },\n    [\n      active,\n      className,\n      data,\n      getArc,\n      getFill,\n      guide,\n      onClick,\n      onMouseEnter,\n      onMouseLeave,\n      transition,\n      yScale\n    ]\n  );\n\n  return (\n    <Fragment>\n      {renderBar(currentColorShade)}\n      {gradient && <Gradient id={`${id}-gradient`} color={currentColorShade} />}\n    </Fragment>\n  );\n};\n","import React, {\n  FC,\n  Fragment,\n  ReactElement,\n  useState,\n  useCallback,\n  useMemo\n} from 'react';\nimport {\n  ChartInternalDataShape,\n  ChartInternalNestedDataShape,\n  ChartInternalShallowDataShape\n} from '@/common/data';\nimport { RadialBar, RadialBarProps } from './RadialBar';\nimport { CloneElement } from 'reablocks';\nimport { ColorSchemeType, getColor, schemes } from '@/common/color';\nimport { TooltipAreaProps, TooltipArea, ChartTooltip } from '@/common/Tooltip';\nimport isEqual from 'react-fast-compare';\nimport { RadialValueMarker, RadialValueMarkerProps } from '@/common';\n\nexport type RadialBarSeriesType = 'standard' | 'grouped';\n\nexport interface RadialBarSeriesProps {\n  /**\n   * Parsed data shape. Set internally by `RadialBarChart`.\n   */\n  data: ChartInternalDataShape[];\n\n  /**\n   * Color scheme for the series.\n   */\n  colorScheme: ColorSchemeType;\n\n  /**\n   * The inner radius for the chart center.\n   */\n  innerRadius: number;\n\n  /**\n   * The outer radius for the chart center.\n   */\n  outerRadius: number;\n\n  /**\n   * D3 scale for X Axis. Set internally by `RadialBarChart`.\n   */\n  xScale: any;\n\n  /**\n   * D3 scale for Y Axis. Set internally by `RadialBarChart`.\n   */\n  yScale: any;\n\n  /**\n   * Id set internally by `RadialBarChart`.\n   */\n  id: string;\n\n  /**\n   * Bar that is rendered.\n   */\n  bar: ReactElement<RadialBarProps, typeof RadialBar>;\n\n  /**\n   * Whether to animate the enter/update/exit.\n   */\n  animated: boolean;\n\n  /**\n   * Height of the chart. Set internally by `RadialBarChart`.\n   */\n  height: number;\n\n  /**\n   * Width of the chart. Set internally by `RadialBarChart`.\n   */\n  width: number;\n\n  /**\n   * Tooltip for the chart area.\n   */\n  tooltip: ReactElement<TooltipAreaProps, typeof TooltipArea>;\n\n  /**\n   * Start angle for the first value.\n   */\n  startAngle?: number;\n\n  /**\n   * End angle for the last value.\n   */\n  endAngle?: number;\n\n  /**\n   * The type of the chart.\n   */\n  type?: RadialBarSeriesType;\n\n  /**\n   * Value markers line for the chart.\n   */\n  valueMarkers:\n    | ReactElement<RadialValueMarkerProps, typeof RadialValueMarker>[]\n    | null;\n}\n\nexport const RadialBarSeries: FC<Partial<RadialBarSeriesProps>> = ({\n  data,\n  id,\n  innerRadius,\n  outerRadius,\n  xScale,\n  yScale,\n  height,\n  width,\n  tooltip = <TooltipArea tooltip={<ChartTooltip followCursor={true} />} />,\n  colorScheme = schemes.cybertron[0],\n  bar = <RadialBar />,\n  animated = true,\n  startAngle = 0,\n  endAngle = 2 * Math.PI,\n  type = 'standard',\n  valueMarkers\n}) => {\n  const [activeValues, setActiveValues] = useState<any | null>(null);\n  const isMultiSeries = useMemo(() => type === 'grouped', [type]);\n\n  const renderBar = useCallback(\n    (\n      point: ChartInternalShallowDataShape,\n      innerBarCount: number,\n      index: number,\n      barCount: number,\n      groupIndex?: number\n    ) => {\n      const active = activeValues && data && isEqual(activeValues.x, point.x);\n\n      return (\n        <Fragment key={index}>\n          <CloneElement<RadialBarProps>\n            element={bar}\n            id={`radialbar-${id}-${index}`}\n            index={index}\n            data={point}\n            xScale={xScale}\n            active={active}\n            yScale={yScale}\n            innerRadius={innerRadius}\n            color={(point) => getColor({ data, point, index: 0, colorScheme })}\n            barCount={barCount}\n            innerBarCount={innerBarCount}\n            groupIndex={groupIndex}\n            animated={animated}\n          />\n        </Fragment>\n      );\n    },\n    [\n      activeValues,\n      animated,\n      bar,\n      colorScheme,\n      data,\n      endAngle,\n      id,\n      innerRadius,\n      startAngle,\n      xScale,\n      yScale\n    ]\n  );\n\n  const renderBarGroup = useCallback(\n    (\n      data: ChartInternalShallowDataShape[],\n      innerBarCount: number,\n      barCount: number,\n      groupIndex?: number\n    ) => {\n      return (\n        <Fragment>\n          {data.map((barData, barIndex) =>\n            renderBar(barData, innerBarCount, barIndex, barCount, groupIndex)\n          )}\n        </Fragment>\n      );\n    },\n    [renderBar]\n  );\n\n  const renderValueMarkers = useCallback(\n    () => (\n      <>\n        {valueMarkers?.length &&\n          valueMarkers.map((marker) => (\n            <CloneElement<RadialValueMarkerProps>\n              key={marker.key}\n              element={marker}\n              value={yScale(marker.props.value)}\n            />\n          ))}\n      </>\n    ),\n    [valueMarkers, yScale]\n  );\n\n  return (\n    <CloneElement<TooltipAreaProps>\n      element={tooltip}\n      xScale={xScale}\n      yScale={yScale}\n      data={data}\n      height={height}\n      width={width}\n      isRadial={true}\n      innerRadius={innerRadius}\n      outerRadius={outerRadius}\n      onValueEnter={(event) => setActiveValues(event.value)}\n      onValueLeave={() => setActiveValues(null)}\n      color={(point, index) => getColor({ data, point, index, colorScheme })}\n      startAngle={startAngle}\n      endAngle={endAngle}\n    >\n      {isMultiSeries\n        ? (data as ChartInternalNestedDataShape[]).map((groupData, index) => (\n            <g key={`bar-group-${index}`}>\n              {renderBarGroup(\n                groupData.data as ChartInternalShallowDataShape[],\n                data.length,\n                groupData.data.length,\n                index\n              )}\n            </g>\n          ))\n        : renderBarGroup(\n            data as ChartInternalShallowDataShape[],\n            1,\n            data.length\n          )}\n      {renderValueMarkers()}\n    </CloneElement>\n  );\n};\n","import React, { useCallback, FC, Fragment, ReactElement, useMemo } from 'react';\nimport {\n  ChartShallowDataShape,\n  ChartInternalShallowDataShape,\n  buildShallowChartData,\n  ChartDataShape,\n  buildNestedChartData,\n  ChartNestedDataShape\n} from '@/common/data';\nimport { scaleBand, scalePoint } from 'd3-scale';\nimport { getYDomain } from '@/common/utils/domains';\nimport { RadialBarSeries, RadialBarSeriesProps } from './RadialBarSeries';\nimport {\n  ChartProps,\n  ChartContainer,\n  ChartContainerChildProps\n} from '@/common/containers';\nimport { CloneElement } from 'reablocks';\nimport {\n  RADIAL_AXIS_DEFAULT_PROPS,\n  RadialAxis,\n  RadialAxisProps\n} from '@/common/Axis/RadialAxis';\nimport { getRadialYScale } from '@/common/scales';\nimport { uniqueBy } from '@/common/utils/array';\n\nexport interface RadialBarChartProps extends ChartProps {\n  /**\n   * Data the chart will receive to render.\n   */\n  data: ChartDataShape[];\n\n  /**\n   * The series component that renders the bar components.\n   */\n  series: ReactElement<RadialBarSeriesProps, typeof RadialBarSeries>;\n\n  /**\n   * The radial axis component for the chart.\n   */\n  axis: ReactElement<RadialAxisProps, typeof RadialAxis> | null;\n\n  /**\n   * The inner radius for the chart center.\n   */\n  innerRadius: number;\n\n  /**\n   * Start angle for the first value.\n   */\n  startAngle?: number;\n\n  /**\n   * End angle for the last value.\n   */\n  endAngle?: number;\n}\n\nexport const RadialBarChart: FC<Partial<RadialBarChartProps>> = ({\n  id,\n  width,\n  height,\n  margins = 75,\n  className,\n  containerClassName,\n  data,\n  innerRadius = 10,\n  series = <RadialBarSeries />,\n  axis = <RadialAxis />,\n  startAngle = 0,\n  endAngle = 2 * Math.PI\n}) => {\n  const axisProps = useMemo(\n    () => ({ ...RADIAL_AXIS_DEFAULT_PROPS, ...(axis?.props ?? {}) }),\n    [axis?.props]\n  );\n\n  const seriesProps = useMemo(\n    () => ({ ...RADIAL_AXIS_DEFAULT_PROPS, ...(series?.props ?? {}) }),\n    [series?.props]\n  );\n\n  const getXScale = useCallback(\n    (points) => {\n      const isFullCircle = Math.abs(endAngle - startAngle) >= 2 * Math.PI;\n      let xScale;\n      if (axisProps.type === 'category') {\n        const isMultiSeries = seriesProps.type === 'grouped';\n\n        let xDomain;\n        if (isMultiSeries) {\n          xDomain = uniqueBy<ChartInternalShallowDataShape>(\n            points,\n            (dd) => dd.data,\n            (dd) => dd.x\n          );\n        } else {\n          xDomain = uniqueBy<ChartInternalShallowDataShape>(\n            points,\n            (dd) => dd.x\n          );\n        }\n\n        if (isFullCircle) {\n          xScale = scaleBand()\n            .range([0, 2 * Math.PI])\n            .domain(xDomain as any[]);\n        } else {\n          // scaleBand() excludes the end value from the band:\n          //  https://www.d3indepth.com/scales/#scaleband\n          xScale = scalePoint()\n            .range([startAngle, endAngle])\n            .domain(xDomain as any[]);\n        }\n      } else {\n        const xDomain = uniqueBy(points, (d) => d.x);\n\n        xScale = scaleBand()\n          .range([startAngle, endAngle])\n          .domain(xDomain as any[]);\n      }\n\n      return xScale;\n    },\n    [axisProps.type, endAngle, seriesProps.type, startAngle]\n  );\n\n  const getScales = useCallback(\n    (preData: ChartDataShape[], innerRadius: number, outerRadius: number) => {\n      const isMultiSeries = seriesProps.type === 'grouped';\n      let newData;\n      if (isMultiSeries) {\n        newData = buildNestedChartData(preData as ChartNestedDataShape[], true);\n      } else {\n        newData = buildShallowChartData(preData as ChartShallowDataShape[]);\n      }\n\n      const yDomain = getYDomain({ data: newData, scaled: false });\n\n      const yScale = getRadialYScale(innerRadius, outerRadius, yDomain);\n\n      const xScale = getXScale(newData);\n\n      return {\n        xScale,\n        yScale,\n        newData\n      };\n    },\n    [getXScale, seriesProps.type]\n  );\n\n  const renderChart = useCallback(\n    ({ chartWidth, chartHeight, id }: ChartContainerChildProps) => {\n      const outerRadius = Math.min(chartWidth, chartHeight) / 2;\n      const { yScale, xScale, newData } = getScales(\n        data,\n        innerRadius,\n        outerRadius\n      );\n\n      return (\n        <Fragment>\n          {axis && (\n            <CloneElement<RadialAxisProps>\n              element={axis}\n              xScale={xScale}\n              height={chartHeight}\n              width={chartWidth}\n              innerRadius={innerRadius}\n              startAngle={startAngle}\n              endAngle={endAngle}\n            />\n          )}\n          <CloneElement<RadialBarSeriesProps>\n            element={series}\n            id={id}\n            data={newData}\n            height={chartHeight}\n            width={chartWidth}\n            xScale={xScale}\n            yScale={yScale}\n            innerRadius={innerRadius}\n            outerRadius={outerRadius}\n            startAngle={startAngle}\n            endAngle={endAngle}\n          />\n        </Fragment>\n      );\n    },\n    [axis, data, endAngle, getScales, innerRadius, series, startAngle]\n  );\n\n  return (\n    <ChartContainer\n      id={id}\n      width={width}\n      height={height}\n      margins={margins}\n      xAxisVisible={false}\n      yAxisVisible={false}\n      center={true}\n      className={className}\n      containerClassName={containerClassName}\n    >\n      {renderChart}\n    </ChartContainer>\n  );\n};\n","import React, { FC, ReactElement, useMemo } from 'react';\nimport { arc } from 'd3-shape';\nimport { PieArc, ArcData } from '@/PieChart';\nimport { ChartShallowDataShape } from '@/common/data';\nimport { ChartTooltip, ChartTooltipProps } from '@/common/Tooltip';\nimport { Gradient, GradientProps } from '@/common/Gradient';\n\nexport interface RadialGaugeArcProps {\n  /**\n   * ID generated by the chart.\n   */\n  id?: string;\n\n  /**\n   * Data set by the `RadialGaugeSeries` components.\n   */\n  data?: ChartShallowDataShape;\n\n  /**\n   * Start angle set by the `RadialGaugeSeries` components.\n   */\n  startAngle: number;\n\n  /**\n   * End angle set by the `RadialGaugeSeries` components.\n   */\n  endAngle: number;\n\n  /**\n   * Inner radius set by the `RadialGaugeSeries` components.\n   */\n  innerRadius: number;\n\n  /**\n   * Outer radius set by the `RadialGaugeSeries` components.\n   */\n  outerRadius: number;\n\n  /**\n   * Color set by the `RadialGaugeSeries` components.\n   */\n  color: any;\n\n  /**\n   * Corner Radius of the arcs, see https://github.com/d3/d3-shape#arc_cornerRadius\n   */\n  cornerRadius?: number;\n\n  /**\n   * Pad Angle between adjacent arcs, see https://github.com/d3/d3-shape#arc_padAngle\n   */\n  padAngle?: number;\n\n  /**\n   * Pad Radius between adjacent arcs, see https://github.com/d3/d3-shape#arc_padRadius\n   */\n  padRadius?: number;\n\n  /**\n   * Animation set by the `RadialGaugeSeries` component.\n   */\n  animated: boolean;\n\n  /**\n   * Disable the interactions.\n   */\n  disabled: boolean;\n\n  /**\n   * Fill the arc.\n   */\n  fill?: string;\n\n  /**\n   * Gradient shades for the bar.\n   */\n  gradient: ReactElement<GradientProps, typeof Gradient> | null;\n\n  /**\n   * Tooltip component.\n   */\n  tooltip: ReactElement<ChartTooltipProps, typeof ChartTooltip> | null;\n\n  /**\n   * Event for when the arc is clicked.\n   */\n  onClick: (event) => void;\n\n  /**\n   * Event for when the arc has mouse enter.\n   */\n  onMouseEnter: (event) => void;\n\n  /**\n   * Event for when the arc has mouse leave.\n   */\n  onMouseLeave: (event) => void;\n}\n\nexport const RadialGaugeArc: FC<Partial<RadialGaugeArcProps>> = ({\n  data,\n  gradient,\n  startAngle,\n  id,\n  endAngle,\n  innerRadius,\n  outerRadius,\n  cornerRadius = 0,\n  padAngle = 0,\n  color = '#353d44',\n  animated = true,\n  disabled = false,\n  fill,\n  onClick,\n  onMouseEnter,\n  onMouseLeave,\n  tooltip = <ChartTooltip />\n}) => {\n  /**\n   * This function will generate the arcs\n   * https://github.com/d3/d3-shape#arcs\n   */\n  const arcGenerator = useMemo(() => {\n    return arc<ArcData>()\n      .innerRadius(innerRadius)\n      .outerRadius(outerRadius)\n      .cornerRadius(cornerRadius);\n  }, [innerRadius, outerRadius, cornerRadius]);\n\n  const arcElement = useMemo(() => {\n    const arcData: ArcData = {\n      // @ts-ignore Data must be passed\n      data: data || {},\n      startAngle,\n      endAngle,\n      padAngle\n    };\n\n    return (\n      <PieArc\n        id={id}\n        arc={arcGenerator}\n        data={arcData}\n        animated={animated}\n        color={color}\n        gradient={gradient}\n        disabled={disabled}\n        tooltip={tooltip}\n        onClick={onClick}\n        onMouseEnter={onMouseEnter}\n        onMouseLeave={onMouseLeave}\n      />\n    );\n  }, [\n    id,\n    arcGenerator,\n    startAngle,\n    endAngle,\n    padAngle,\n    data,\n    animated,\n    color,\n    gradient,\n    disabled,\n    tooltip,\n    onClick,\n    onMouseEnter,\n    onMouseLeave\n  ]);\n\n  return (\n    <g>\n      {fill && <circle fill={fill} r={outerRadius} />}\n      {arcElement}\n    </g>\n  );\n};\n","import React, { FC } from 'react';\nimport { ChartShallowDataShape, ChartInternalDataTypes } from '@/common/data';\nimport { formatValue } from '@/common/utils';\nimport classNames from 'classnames';\nimport css from './RadialGaugeLabel.module.css';\n\nexport interface RadialGaugeLabelProps {\n  /**\n   * Data set by the `RadialGaugeSeries` component.\n   */\n  data: ChartShallowDataShape;\n\n  /**\n   * Offset set by the `RadialGaugeSeries` component.\n   */\n  offset: number;\n\n  /**\n   * Classname to apply to the label.\n   */\n  className?: any;\n\n  /**\n   * Label click event.\n   */\n  onClick: (event: { data; nativeEvent }) => void;\n}\n\nexport const RadialGaugeLabel: FC<Partial<RadialGaugeLabelProps>> = ({\n  data,\n  className,\n  offset,\n  onClick = () => undefined\n}) => {\n  const label = formatValue(data.key as ChartInternalDataTypes);\n\n  return (\n    <text\n      x=\"0\"\n      y={offset}\n      textAnchor=\"middle\"\n      // This is only valid when placed below the chart\n      alignmentBaseline={'text-after-edge'}\n      onClick={(nativeEvent) => onClick({ data, nativeEvent })}\n      className={classNames(className, css.valueLabel)}\n    >\n      {label}\n    </text>\n  );\n};\n","import React, { FC } from 'react';\nimport { ChartShallowDataShape } from '@/common/data';\nimport classNames from 'classnames';\nimport css from './RadialGaugeValueLabel.module.css';\nimport { useCount } from '@/common/Count';\n\nexport interface RadialGaugeValueLabelProps {\n  /**\n   * Data set by the `RadialGaugeSeries` component.\n   */\n  data: ChartShallowDataShape;\n\n  /**\n   * Classname to apply to the value label.\n   */\n  className?: any;\n}\n\nexport const RadialGaugeValueLabel: FC<Partial<RadialGaugeValueLabelProps>> = ({\n  data,\n  className\n}) => {\n  const ref = useCount({\n    to: data.data as number\n  });\n\n  return (\n    <text\n      dy=\"-0.5em\"\n      x=\"0\"\n      y=\"15\"\n      textAnchor=\"middle\"\n      className={classNames(className, css.valueLabel)}\n      ref={ref}\n    />\n  );\n};\n","import React, { FC } from 'react';\nimport { RadialGaugeArc, RadialGaugeArcProps } from './RadialGaugeArc';\n\nexport const RadialGaugeOuterArc: FC<Partial<RadialGaugeArcProps>> = (\n  props\n) => <RadialGaugeArc animated={false} disabled={true} {...props} />;\n","import React, {\n  cloneElement,\n  FC,\n  Fragment,\n  ReactElement,\n  useCallback,\n  useMemo\n} from 'react';\nimport { range, min } from 'd3-array';\nimport { scaleBand } from 'd3-scale';\nimport { ChartShallowDataShape } from '@/common';\nimport { ColorSchemeType, getColor } from '@/common/color';\nimport { RadialGaugeArc, RadialGaugeArcProps } from './RadialGaugeArc';\nimport { RadialGaugeLabel, RadialGaugeLabelProps } from './RadialGaugeLabel';\nimport {\n  RadialGaugeValueLabel,\n  RadialGaugeValueLabelProps\n} from './RadialGaugeValueLabel';\nimport { RadialGaugeOuterArc } from './RadialGaugeOuterArc';\nimport { identifier } from 'safe-identifier';\n\nexport interface RadialGaugeSeriesProps {\n  /**\n   * Unique id for the series.\n   */\n  id?: string;\n\n  /**\n   * Data to render set by `RadialGauge` component.\n   */\n  data: ChartShallowDataShape[];\n\n  /**\n   * D3 scale function set by `RadialGauge` component.\n   */\n  scale: any;\n\n  /**\n   * Start angle set by `RadialGauge` component.\n   */\n  startAngle: number;\n\n  /**\n   * Start angle set by `RadialGauge` component.\n   */\n  endAngle: number;\n\n  /**\n   * The \"thickness\" of the arcs\n   */\n  arcWidth?: number;\n\n  /**\n   * Width set by `RadialGauge` component.\n   */\n  width: number;\n\n  /**\n   * Height set by `RadialGauge` component.\n   */\n  height: number;\n\n  /**\n   * Padding between each gauge.\n   */\n  padding: number;\n\n  /**\n   * Color scheme to apply.\n   */\n  colorScheme: ColorSchemeType;\n\n  /**\n   * Arc component.\n   */\n  innerArc: ReactElement<RadialGaugeArcProps, typeof RadialGaugeArc>;\n\n  /**\n   * Outer arc component. This is the 'fill' element.\n   */\n  outerArc: ReactElement<RadialGaugeArcProps, typeof RadialGaugeArc> | null;\n\n  /**\n   * Label component.\n   */\n  label: ReactElement<RadialGaugeLabelProps, typeof RadialGaugeLabel> | null;\n\n  /**\n   * Value label component.\n   */\n  valueLabel: ReactElement<\n    RadialGaugeValueLabelProps,\n    typeof RadialGaugeValueLabel\n  > | null;\n\n  /**\n   * Min width for a gauge. Only applicable in multi-series gauges.\n   */\n  minGaugeWidth: number;\n}\n\nexport const RadialGaugeSeries: FC<Partial<RadialGaugeSeriesProps>> = ({\n  data,\n  scale,\n  startAngle,\n  endAngle,\n  arcWidth = 5,\n  outerArc = <RadialGaugeOuterArc />,\n  innerArc = <RadialGaugeArc />,\n  label = <RadialGaugeLabel />,\n  valueLabel = <RadialGaugeValueLabel />,\n  colorScheme = ['#00ECB1'],\n  id,\n  padding = 20,\n  minGaugeWidth = 50,\n  ...props\n}) => {\n  const { columns, width, height, xScale, yScale } = useMemo(() => {\n    let rows = 1;\n    let columns = data.length;\n\n    if (props.width / data.length < minGaugeWidth) {\n      while (props.width / columns < minGaugeWidth) {\n        rows += 1;\n        columns = Math.ceil(data.length / rows);\n      }\n    }\n\n    const xScale: any = scaleBand();\n    xScale.domain(range(columns));\n    xScale.rangeRound([0, props.width], 0.1);\n\n    const yScale: any = scaleBand();\n    yScale.domain(range(rows));\n    yScale.rangeRound([0, props.height], 0.1);\n\n    return {\n      columns,\n      xScale,\n      yScale,\n      width: xScale.bandwidth(),\n      height: yScale.bandwidth()\n    };\n  }, [data.length, minGaugeWidth, props.height, props.width]);\n\n  const renderGauge = useCallback(\n    (point: ChartShallowDataShape, index: number) => {\n      const dataEndAngle = scale(point.data as number);\n\n      const outerRadius =\n        (min([width - padding * 2, height - padding * 2]) as number) / 2;\n\n      const innerRadius = outerRadius - arcWidth;\n\n      const labelOffset = height / 2;\n\n      const x = xScale(index % columns);\n      const y = yScale(Math.floor(index / columns));\n\n      const xOffset = x + width / 2;\n      const yOffset = y + height / 2;\n      const key = identifier(point.key?.toLocaleString());\n\n      return (\n        <g key={key} transform={`translate(${xOffset}, ${yOffset})`}>\n          {outerArc &&\n            cloneElement(outerArc, {\n              id: `${id}-${key}-outer`,\n              outerRadius,\n              innerRadius,\n              startAngle,\n              endAngle\n            })}\n          {innerArc &&\n            cloneElement(innerArc, {\n              id: `${id}-${key}-inner`,\n              outerRadius,\n              innerRadius,\n              startAngle,\n              endAngle: dataEndAngle,\n              data: point,\n              color: getColor({\n                data,\n                colorScheme,\n                point,\n                index\n              })\n            })}\n          {valueLabel && cloneElement(valueLabel, { data: point })}\n          {label && cloneElement(label, { data: point, offset: labelOffset })}\n        </g>\n      );\n    },\n    [\n      id,\n      arcWidth,\n      colorScheme,\n      columns,\n      data,\n      endAngle,\n      height,\n      innerArc,\n      label,\n      outerArc,\n      padding,\n      scale,\n      startAngle,\n      valueLabel,\n      width,\n      xScale,\n      yScale\n    ]\n  );\n\n  return <Fragment>{data.map(renderGauge)}</Fragment>;\n};\n","import React, { FC, JSX, useMemo } from 'react';\nimport { arc } from 'd3-shape';\n\nimport {\n  ChartNestedDataShape,\n  ChartShallowDataShape,\n  ChartTooltip,\n  ColorSchemeType,\n  getColor\n} from '@/common';\nimport { ArcData, PieArc } from '@/PieChart';\nimport { RadialGaugeArcProps } from './RadialGaugeArc';\n\nexport type RadialGaugeStackedArcProps = Omit<\n  RadialGaugeArcProps,\n  'endAngle' | 'data' | 'color'\n> & {\n  /**\n   * Data set by the `StackedRadialGaugeSeries` components.\n   */\n  data: ChartNestedDataShape;\n\n  /**\n   * D3 scale function set by `RadialGauge` component.\n   */\n  scale: (x: number) => number;\n\n  /**\n   * Color scheme to apply set by 'StackedRadialGaugeSeries' component.\n   */\n  colorScheme: ColorSchemeType;\n};\n\nexport const RadialGaugeStackedArc: FC<Partial<RadialGaugeStackedArcProps>> = ({\n  id,\n  data,\n  scale,\n  innerRadius,\n  outerRadius,\n  cornerRadius = 0,\n  padAngle = 0,\n  padRadius = 0,\n  startAngle,\n  colorScheme,\n  animated = true,\n  disabled = false,\n  tooltip = <ChartTooltip />,\n  ...restProps\n}) => {\n  const arcGenerator = useMemo(() => {\n    return arc<ArcData>()\n      .innerRadius(innerRadius)\n      .outerRadius(outerRadius)\n      .cornerRadius(cornerRadius);\n  }, [innerRadius, outerRadius, cornerRadius]);\n\n  const stackedArcs = useMemo(() => {\n    let prevEndAngle = startAngle;\n\n    function renderArc(\n      point: ChartShallowDataShape,\n      index: number\n    ): JSX.Element {\n      const value = point.data as number;\n      const startArcAngle = prevEndAngle;\n      const endArcAngle = startArcAngle + scale(value) - startAngle;\n      prevEndAngle = endArcAngle;\n\n      const arcData: ArcData = {\n        data: point,\n        startAngle: startArcAngle,\n        endAngle: endArcAngle,\n        padAngle,\n        value,\n        index\n      };\n\n      const color = getColor({\n        colorScheme,\n        data: [data],\n        point: point,\n        index,\n        active: [data],\n        isMultiSeries: true\n      });\n\n      return (\n        <PieArc\n          animated={animated}\n          disabled={disabled}\n          tooltip={tooltip}\n          {...restProps}\n          id={point.key.toLocaleString()}\n          key={point.key.toLocaleString()}\n          arc={arcGenerator}\n          data={arcData}\n          color={color}\n        />\n      );\n    }\n\n    return data.data.map(renderArc as any) as any;\n  }, [\n    animated,\n    arcGenerator,\n    colorScheme,\n    data,\n    disabled,\n    padAngle,\n    restProps,\n    scale,\n    startAngle,\n    tooltip\n  ]);\n\n  return <g key={id}>{stackedArcs}</g>;\n};\n","import React, { FC } from 'react';\nimport classNames from 'classnames';\nimport css from './StackedRadialGaugeValueLabel.module.css';\n\nexport interface StackedRadialGaugeValueLabelProps {\n  /**\n   * A label shown at the center\n   */\n  label: string;\n\n  /**\n   * A class name to apply\n   */\n  className?: string;\n\n  /**\n   * A y offset to apply to the label\n   */\n  yOffset?: number;\n}\n\nexport const StackedRadialGaugeValueLabel: FC<\n  Partial<StackedRadialGaugeValueLabelProps>\n> = ({ label, className, yOffset = 0 }) => (\n  <>\n    {label && (\n      <text\n        x=\"0\"\n        y={yOffset}\n        textAnchor=\"middle\"\n        alignmentBaseline=\"middle\"\n        className={classNames(className, css.stackedValueLabel)}\n      >\n        {label}\n      </text>\n    )}\n  </>\n);\n","import React, { cloneElement, FC, ReactElement, useCallback } from 'react';\nimport { range } from 'd3-array';\nimport { scaleBand } from 'd3-scale';\nimport {\n  ChartDataShape,\n  ChartNestedDataShape,\n  ChartShallowDataShape\n} from '@/common/data';\nimport { ColorSchemeType, getColor } from '@/common/color';\nimport { RadialGaugeArc, RadialGaugeArcProps } from './RadialGaugeArc';\nimport {\n  RadialGaugeStackedArc,\n  RadialGaugeStackedArcProps\n} from './RadialGaugeStackedArc';\nimport {\n  StackedRadialGaugeValueLabel,\n  StackedRadialGaugeValueLabelProps\n} from './StackedRadialGaugeValueLabel';\nimport {\n  StackedRadialGaugeDescriptionLabel,\n  StackedRadialGaugeDescriptionLabelProps\n} from './StackedRadialGaugeDescriptionLabel';\n\nexport interface StackedRadialGaugeSeriesProps {\n  /**\n   * Data to render set by `RadialGauge` component.\n   */\n  data: ChartDataShape[];\n\n  /**\n   * D3 scale function set by `RadialGauge` component.\n   */\n  scale: any;\n\n  /**\n   * Start angle set by `RadialGauge` component.\n   */\n  startAngle: number;\n\n  /**\n   * Start angle set by `RadialGauge` component.\n   */\n  endAngle: number;\n\n  /**\n   * Width set by `RadialGauge` component.\n   */\n  width: number;\n\n  /**\n   * Height set by `RadialGauge` component.\n   */\n  height: number;\n\n  /**\n   * Color scheme to apply.\n   */\n  colorScheme: ColorSchemeType;\n\n  /**\n   * Arc component.\n   */\n  innerArc: ReactElement<RadialGaugeArcProps, typeof RadialGaugeArc>;\n\n  /**\n   * Stacked Arc component.\n   */\n  stackedInnerArc: ReactElement<\n    RadialGaugeStackedArcProps,\n    typeof RadialGaugeStackedArc\n  >;\n\n  /**\n   * Outer arc component. This is the 'fill' element.\n   */\n  outerArc: ReactElement<RadialGaugeArcProps, typeof RadialGaugeArc> | null;\n\n  /**\n   * Label component.\n   */\n  label: ReactElement<\n    StackedRadialGaugeValueLabelProps,\n    typeof StackedRadialGaugeValueLabel\n  > | null;\n\n  /**\n   * Description label component.\n   */\n  descriptionLabel: ReactElement<\n    StackedRadialGaugeDescriptionLabelProps,\n    typeof StackedRadialGaugeDescriptionLabel\n  > | null;\n\n  /**\n   * A factor from 0 to 1 determining how much of the Gauge should be filled with arcs\n   */\n  fillFactor: number;\n\n  /**\n   * Padding between the stacked arcs, following d3 bandwidth innerPadding\n   */\n  arcPadding: number;\n}\n\nconst isChartNestedData = (\n  point: ChartDataShape\n): point is ChartNestedDataShape => {\n  return Array.isArray(point.data);\n};\n\nexport const StackedRadialGaugeSeries: FC<\n  Partial<StackedRadialGaugeSeriesProps>\n> = ({\n  data,\n  width,\n  height,\n  scale,\n  startAngle,\n  endAngle,\n  outerArc = <RadialGaugeArc disabled={true} animated={false} />,\n  innerArc = <RadialGaugeArc animated={true} />,\n  stackedInnerArc = <RadialGaugeStackedArc animated={true} />,\n  label = <StackedRadialGaugeValueLabel />,\n  descriptionLabel,\n  colorScheme = ['#00ECB1'],\n  fillFactor = 0.2,\n  arcPadding = 0.15\n}) => {\n  const radius = Math.min(width, height) / 2;\n  const innerRadius = radius * (1 - Math.min(fillFactor, 1));\n\n  const rAxis = scaleBand()\n    .domain(range(data.length).map(String))\n    .range([innerRadius, radius])\n    .paddingInner(arcPadding);\n\n  const renderOuterArc = useCallback(\n    (outerRadius: number, innerRadius: number) => {\n      return (\n        outerArc &&\n        cloneElement(outerArc, {\n          outerRadius,\n          innerRadius,\n          startAngle,\n          endAngle\n        })\n      );\n    },\n    [outerArc, startAngle, endAngle]\n  );\n\n  const renderInnerArc = useCallback(\n    (\n      outerRadius: number,\n      innerRadius: number,\n      dataEndAngle: number,\n      point: ChartShallowDataShape,\n      index: number\n    ) => {\n      const color = getColor({ data, colorScheme, point, index });\n\n      return (\n        innerArc &&\n        cloneElement(innerArc, {\n          outerRadius,\n          innerRadius,\n          startAngle,\n          endAngle: dataEndAngle,\n          data: point,\n          color\n        })\n      );\n    },\n    [innerArc, startAngle, data, colorScheme]\n  );\n\n  const renderStackedArc = useCallback(\n    (\n      outerRadius: number,\n      innerRadius: number,\n      point: ChartNestedDataShape,\n      index: number\n    ) => {\n      return (\n        <>\n          {stackedInnerArc &&\n            cloneElement(stackedInnerArc, {\n              outerRadius,\n              innerRadius,\n              colorScheme,\n              startAngle,\n              scale: scale?.[index] ?? scale?.[index] ?? scale,\n              data: point\n            })}\n        </>\n      );\n    },\n    [stackedInnerArc, colorScheme, startAngle, scale]\n  );\n\n  const renderStackedGauges = useCallback(\n    (point: ChartDataShape, index: number) => {\n      const outerRadius = rAxis(index as any);\n      const innerRadius = outerRadius - rAxis.bandwidth();\n\n      return (\n        <g key={point.key.toLocaleString()}>\n          {renderOuterArc(outerRadius, innerRadius)}\n          {isChartNestedData(point)\n            ? renderStackedArc(outerRadius, innerRadius, point, index)\n            : renderInnerArc(\n                outerRadius,\n                innerRadius,\n                scale?.[index]?.(point.data) ??\n                  scale?.[0]?.(point.data) ??\n                  scale(point.data),\n                point,\n                index\n              )}\n        </g>\n      );\n    },\n    [rAxis, renderOuterArc, renderStackedArc, renderInnerArc, scale]\n  );\n\n  return (\n    <>\n      <g transform={`translate(${width / 2}, ${height / 2})`}>\n        {data.map(renderStackedGauges)}\n        {descriptionLabel}\n        {label}\n      </g>\n    </>\n  );\n};\n","import React, { FC } from 'react';\nimport classNames from 'classnames';\nimport css from './StackedRadialGaugeDescriptionLabel.module.css';\n\nexport interface StackedRadialGaugeDescriptionLabelProps {\n  /**\n   * A label shown at the center\n   */\n  label: string;\n\n  /**\n   * A class name to apply\n   */\n  className?: string;\n\n  /**\n   * A y offset to apply to the label\n   */\n  yOffset?: number;\n}\n\nexport const StackedRadialGaugeDescriptionLabel: FC<\n  Partial<StackedRadialGaugeDescriptionLabelProps>\n> = ({ label, className, yOffset = 0 }) => (\n  <>\n    {label && (\n      <text\n        x=\"0\"\n        y={yOffset - 20}\n        textAnchor=\"middle\"\n        alignmentBaseline=\"middle\"\n        className={classNames(className, css.stackedDescriptionLabel)}\n      >\n        {label}\n      </text>\n    )}\n  </>\n);\n","import React, { cloneElement, FC, ReactElement, useCallback } from 'react';\nimport { scaleLinear } from 'd3-scale';\nimport {\n  ChartContainer,\n  ChartContextProps,\n  ChartProps\n} from '@/common/containers';\nimport { ChartDataShape } from '@/common/data';\nimport {\n  RadialGaugeSeries,\n  RadialGaugeSeriesProps,\n  StackedRadialGaugeSeries,\n  StackedRadialGaugeSeriesProps\n} from './RadialGaugeSeries';\nimport { useId } from 'reablocks';\n\nexport interface RadialGaugeProps extends ChartProps {\n  /**\n   * Data the chart will receive to render.\n   */\n  data: ChartDataShape[];\n\n  /**\n   * Min value to scale on.\n   */\n  minValue?: number | number[];\n\n  /**\n   * Max value to scale on.\n   */\n  maxValue?: number | number[];\n\n  /**\n   * Start angle for the first value.\n   */\n  startAngle?: number;\n\n  /**\n   * End angle for the last value.\n   */\n  endAngle?: number;\n\n  /**\n   * Gauge series component to render.\n   */\n  series?: ReactElement<\n    RadialGaugeSeriesProps | StackedRadialGaugeSeriesProps,\n    typeof RadialGaugeSeries | typeof StackedRadialGaugeSeries\n  >;\n}\n\nexport const RadialGauge: FC<RadialGaugeProps> = ({\n  id,\n  width,\n  height,\n  margins,\n  className,\n  data,\n  minValue = 0,\n  maxValue = 100,\n  startAngle = 0,\n  endAngle = Math.PI * 2,\n  series = <RadialGaugeSeries />,\n  containerClassName\n}) => {\n  const newId = useId(id);\n\n  const renderSeries = useCallback(\n    ({ chartHeight, chartWidth }: ChartContextProps) => {\n      let scale;\n\n      if (Array.isArray(maxValue)) {\n        scale = maxValue.map((max, index) =>\n          scaleLinear()\n            .domain([minValue?.[index] ?? minValue?.[0] ?? minValue, max])\n            .range([startAngle, endAngle])\n        );\n      } else if (Array.isArray(minValue)) {\n        scale = minValue.map((min, index) =>\n          scaleLinear()\n            .domain([min, maxValue?.[index] ?? maxValue?.[0] ?? maxValue])\n            .range([startAngle, endAngle])\n        );\n      } else {\n        scale = scaleLinear()\n          .domain([minValue, maxValue])\n          .range([startAngle, endAngle]);\n      }\n\n      return cloneElement(series, {\n        id: newId,\n        scale,\n        data,\n        startAngle,\n        endAngle,\n        width: chartWidth,\n        height: chartHeight\n      });\n    },\n    [data, endAngle, maxValue, minValue, series, startAngle, newId]\n  );\n\n  return (\n    <ChartContainer\n      id={id}\n      width={width}\n      height={height}\n      margins={margins}\n      xAxisVisible={false}\n      yAxisVisible={false}\n      className={className}\n      containerClassName={containerClassName}\n    >\n      {renderSeries}\n    </ChartContainer>\n  );\n};\n","import React, {\n  FC,\n  Fragment,\n  MouseEvent,\n  ReactElement,\n  useMemo,\n  useState,\n  useRef,\n  ReactNode\n} from 'react';\nimport { flip, offset } from '@floating-ui/dom';\nimport { ChartTooltip, ChartTooltipProps } from '@/common/Tooltip';\nimport { CloneElement } from 'reablocks';\nimport {\n  constructFunctionProps,\n  PropFunctionTypes\n} from '@/common/utils/functions';\nimport chroma from 'chroma-js';\nimport classNames from 'classnames';\nimport { motion } from 'motion/react';\nimport { DEFAULT_TRANSITION } from '@/common/Motion';\nimport { ChartInternalShallowDataShape } from '@/common/data';\nimport css from './HeatmapCell.module.css';\nimport { useHoverIntent } from '@/common/utils/useHoverIntent';\nimport { getAriaLabel } from '@/common';\n\nexport type HeatmapCellProps = {\n  /**\n   * X Position set by `HeatmapSeries`.\n   */\n  x: number;\n\n  /**\n   * Y Position set by `HeatmapSeries`.\n   */\n  y: number;\n\n  /**\n   * rx SVG Attribute.\n   */\n  rx: number;\n\n  /**\n   * ry SVG Attribute.\n   */\n  ry: number;\n\n  /**\n   * Height of cell set by `HeatmapSeries`.\n   */\n  height: number;\n\n  /**\n   * Width of cell set by `HeatmapSeries`.\n   */\n  width: number;\n\n  /**\n   * Total count of cells set by `HeatmapSeries`.\n   */\n  cellCount: number;\n\n  /**\n   * Tooltip component.\n   */\n  tooltip: ReactElement<ChartTooltipProps, typeof ChartTooltip> | null;\n\n  /**\n   * Fill color set by `HeatmapSeries`.\n   */\n  fill: string;\n\n  /**\n   * Stroke color set by `HeatmapSeries`.\n   */\n  stroke: string;\n\n  /**\n   * Symbol element to render.\n   */\n  symbol?: (data: ChartInternalShallowDataShape) => ReactNode;\n\n  /**\n   * Data object set by `Heatmap`.\n   */\n  data: ChartInternalShallowDataShape;\n\n  /**\n   * Whether cell is animated or not set by `HeatmapSeries`.\n   */\n  animated: boolean;\n\n  /**\n   * Cell index set by `HeatmapSeries`.\n   */\n  cellIndex: number;\n\n  /**\n   * Cursor style attribute.\n   */\n  cursor: string;\n\n  /**\n   * Event for when the bar is clicked.\n   */\n  onClick: (event) => void;\n\n  /**\n   * Event for when the bar has mouse enter.\n   */\n  onMouseEnter: (event) => void;\n\n  /**\n   * Event for when the bar has mouse leave.\n   */\n  onMouseLeave: (event) => void;\n} & PropFunctionTypes;\n\n// Set padding modifier for the tooltips\nconst modifiers = [offset({ mainAxis: 0, crossAxis: 3 })];\n\nexport const HeatmapCell: FC<Partial<HeatmapCellProps>> = ({\n  rx = 2,\n  ry = 2,\n  cursor = 'auto',\n  tooltip = <ChartTooltip modifiers={[flip()]} />,\n  onClick,\n  onMouseEnter,\n  onMouseLeave,\n  data,\n  animated,\n  cellIndex,\n  cellCount,\n  fill,\n  stroke,\n  symbol,\n  x,\n  y,\n  style,\n  className,\n  ...rest\n}) => {\n  const [active, setActive] = useState(false);\n  const rect = useRef<SVGRectElement | null>(null);\n\n  const { pointerOut, pointerOver } = useHoverIntent({\n    onPointerOver: (event) => {\n      setActive(true);\n      onMouseEnter({\n        value: data,\n        nativeEvent: event\n      });\n    },\n    onPointerOut: (event) => {\n      setActive(false);\n      onMouseLeave({\n        value: data,\n        nativeEvent: event\n      });\n    }\n  });\n\n  const onMouseClick = (event: MouseEvent) => {\n    onClick({\n      value: data,\n      nativeEvent: event\n    });\n  };\n\n  const tooltipData = useMemo(\n    () => ({\n      y: data.value,\n      x: `${data.key} ∙ ${data.x}`,\n      data\n    }),\n    [data]\n  );\n\n  const transition = useMemo(() => {\n    if (animated) {\n      return {\n        ...DEFAULT_TRANSITION,\n        delay: (cellIndex / cellCount) * 0.005\n      };\n    } else {\n      return {\n        type: false as const,\n        delay: 0\n      };\n    }\n  }, [animated, cellIndex, cellCount]);\n\n  const extras = constructFunctionProps({ style, className }, data);\n  const isTransparent = fill === 'transparent';\n  const appliedStroke =\n    active && !isTransparent\n      ? chroma(stroke || fill).brighten(1)\n      : stroke || fill;\n\n  const ariaLabelData = useMemo(\n    () => getAriaLabel({ ...tooltipData, data: null }),\n    [tooltipData]\n  );\n\n  const renderedSymbol = useMemo(\n    () => (symbol ? symbol(data!) : null),\n    [data, symbol]\n  );\n\n  return (\n    <Fragment>\n      <g ref={rect}>\n        {renderedSymbol ? (\n          <motion.g\n            {...rest}\n            fill={fill}\n            stroke={appliedStroke}\n            style={{ ...extras.style, cursor }}\n            className={extras?.className}\n            transform={`translate(${x}, ${y})`}\n            initial={{\n              opacity: 0\n            }}\n            animate={{\n              opacity: 1\n            }}\n            exit={{\n              opacity: 0\n            }}\n            transition={transition}\n            onPointerOver={pointerOver}\n            onPointerOut={pointerOut}\n            onClick={onMouseClick}\n            tabIndex={0}\n            aria-label={ariaLabelData}\n            role=\"graphics-document\"\n          >\n            {renderedSymbol}\n          </motion.g>\n        ) : (\n          <motion.rect\n            {...rest}\n            fill={fill}\n            stroke={appliedStroke}\n            x={x}\n            y={y}\n            rx={rx}\n            ry={ry}\n            style={{ ...extras.style, cursor }}\n            className={classNames(css.cell, extras.className)}\n            initial={{\n              opacity: 0\n            }}\n            animate={{\n              opacity: 1\n            }}\n            exit={{\n              opacity: 0\n            }}\n            transition={transition}\n            onPointerOver={pointerOver}\n            onPointerOut={pointerOut}\n            onClick={onMouseClick}\n            tabIndex={0}\n            aria-label={ariaLabelData}\n            role=\"graphics-document\"\n          />\n        )}\n      </g>\n      {tooltip && !(tooltip.props as any).disabled && !isTransparent && (\n        <CloneElement<ChartTooltipProps>\n          element={tooltip}\n          visible={active}\n          modifiers={(tooltip.props as any).modifiers || modifiers}\n          reference={rect}\n          value={tooltipData}\n        />\n      )}\n    </Fragment>\n  );\n};\n","import React, { FC, ReactElement, Fragment } from 'react';\nimport { HeatmapCell, HeatmapCellProps } from './HeatmapCell';\nimport { CloneElement } from 'reablocks';\nimport { ColorSchemeType } from '@/common/color';\nimport { ChartInternalNestedDataShape } from '@/common/data';\nimport {\n  ColorSchemeStyleArray,\n  createColorSchemeValueScales,\n  getColorSchemeStyles\n} from '@/common/color/helper';\nimport { mergeDefaultProps } from '@/common';\n\nexport interface HeatmapSeriesProps {\n  /**\n   * Padding between cells.\n   */\n  padding: number;\n\n  /**\n   * Id set by `Heatmap`.\n   */\n  id: string;\n\n  /**\n   * Parsed data set by `Heatmap`.\n   */\n  data: ChartInternalNestedDataShape[];\n\n  /**\n   * D3 scale for X Axis. Set internally by `Heatmap`.\n   */\n  xScale: any;\n\n  /**\n   * D3 scale for Y Axis. Set internally by `Heatmap`.\n   */\n  yScale: any;\n\n  /**\n   * Color scheme for the chart.\n   */\n  colorScheme: ColorSchemeType | ColorSchemeStyleArray;\n\n  /**\n   * Color for the empty cell of the chart.\n   */\n  emptyColor: string;\n\n  /**\n   * Whether the chart is animated or not.\n   */\n  animated: boolean;\n\n  /**\n   * Cell component that will be rendered.\n   */\n  cell: ReactElement<HeatmapCellProps, typeof HeatmapCell>;\n\n  /**\n   * Selected cell(s) in active state\n   */\n  selections?: any;\n}\n\nexport const HeatmapSeries: FC<Partial<HeatmapSeriesProps>> = (props) => {\n  const {\n    animated,\n    emptyColor,\n    colorScheme,\n    cell: cellElement,\n    xScale,\n    yScale,\n    data,\n    id,\n    selections\n  } = mergeDefaultProps(HEATMAP_SERIES_DEFAULT_PROPS, props);\n\n  const valueScales = createColorSchemeValueScales(\n    data,\n    colorScheme,\n    emptyColor,\n    selections\n  );\n  const height = yScale.bandwidth();\n  const width = xScale.bandwidth();\n  const cellCount = [...yScale.domain(), ...xScale.domain()].length;\n\n  const renderCell = ({\n    row,\n    cell,\n    rowIndex,\n    cellIndex,\n    width,\n    height,\n    cellCount\n  }) => {\n    const x = xScale(row.key);\n    const y = yScale(cell.x);\n    const style = getColorSchemeStyles(cell, valueScales);\n\n    return (\n      <CloneElement<HeatmapCellProps>\n        key={`${id}-${rowIndex}-${cellIndex}`}\n        element={cellElement}\n        animated={animated}\n        cellIndex={rowIndex + cellIndex}\n        cellCount={cellCount}\n        x={x}\n        y={y}\n        fill={style?.fill}\n        stroke={style?.stroke}\n        width={width}\n        height={height}\n        data={cell}\n        style={style}\n      />\n    );\n  };\n\n  return (\n    <Fragment>\n      {data.map((row, rowIndex) =>\n        row.data.map((cell, cellIndex) =>\n          renderCell({\n            height,\n            width,\n            cellCount,\n            row,\n            cell,\n            rowIndex,\n            cellIndex\n          })\n        )\n      )}\n    </Fragment>\n  );\n};\n\nexport const HEATMAP_SERIES_DEFAULT_PROPS: Partial<HeatmapSeriesProps> = {\n  padding: 0.1,\n  animated: true,\n  emptyColor: 'rgba(200,200,200,0.08)',\n  colorScheme: ['rgba(28, 107, 86, 0.5)', '#2da283'],\n  cell: <HeatmapCell />\n};\n","import React, { useCallback, Fragment, ReactElement, FC, useMemo } from 'react';\nimport {\n  ChartProps,\n  ChartContainer,\n  ChartContainerChildProps\n} from '@/common/containers/ChartContainer';\nimport { ChartNestedDataShape, buildNestedChartData } from '@/common/data';\nimport { CloneElement } from 'reablocks';\nimport {\n  isAxisVisible,\n  LinearAxisProps,\n  LinearXAxis,\n  LinearYAxis,\n  LinearYAxisTickSeries,\n  LinearXAxisTickSeries,\n  LinearYAxisTickLabel,\n  LinearXAxisTickLabel,\n  LinearAxis,\n  LINEAR_X_AXIS_DEFAULT_PROPS,\n  LINEAR_Y_AXIS_DEFAULT_PROPS,\n  LINEAR_Y_AXIS_TICK_LABEL_DEFAULT_PROPS,\n  LINEAR_X_AXIS_TICK_LABEL_DEFAULT_PROPS\n} from '@/common/Axis';\nimport {\n  HEATMAP_SERIES_DEFAULT_PROPS,\n  HeatmapSeries,\n  HeatmapSeriesProps\n} from './HeatmapSeries';\nimport { scaleBand } from 'd3-scale';\nimport { uniqueBy } from '@/common/utils/array';\n\nexport interface HeatmapProps extends ChartProps {\n  /**\n   * Data the chart will receive to render.\n   */\n  data: ChartNestedDataShape[];\n\n  /**\n   * The series component that renders the cell components.\n   */\n  series: ReactElement<HeatmapSeriesProps, typeof HeatmapSeries>;\n\n  /**\n   * The linear axis component for the Y Axis of the chart.\n   */\n  yAxis: ReactElement<LinearAxisProps, typeof LinearAxis>;\n\n  /**\n   * The linear axis component for the X Axis of the chart.\n   */\n  xAxis: ReactElement<LinearAxisProps, typeof LinearAxis>;\n\n  /**\n   * Any secondary axis components. Useful for multi-axis charts.\n   */\n  secondaryAxis?: ReactElement<LinearAxisProps, typeof LinearAxis>[];\n}\n\nexport const Heatmap: FC<Partial<HeatmapProps>> = ({\n  data = [],\n  margins = 10,\n  series = <HeatmapSeries padding={0.3} />,\n  yAxis = (\n    <LinearYAxis\n      type=\"category\"\n      axisLine={null}\n      tickSeries={\n        <LinearYAxisTickSeries\n          line={null}\n          label={\n            <LinearYAxisTickLabel\n              {...LINEAR_Y_AXIS_TICK_LABEL_DEFAULT_PROPS}\n              padding={5}\n            />\n          }\n        />\n      }\n    />\n  ),\n  xAxis = (\n    <LinearXAxis\n      type=\"category\"\n      axisLine={null}\n      tickSeries={\n        <LinearXAxisTickSeries\n          line={null}\n          label={\n            <LinearXAxisTickLabel\n              {...LINEAR_X_AXIS_TICK_LABEL_DEFAULT_PROPS}\n              padding={5}\n            />\n          }\n        />\n      }\n    />\n  ),\n  secondaryAxis,\n  id,\n  width,\n  height,\n  className,\n  containerClassName\n}) => {\n  const xAxisProps = useMemo(\n    () => ({ ...LINEAR_X_AXIS_DEFAULT_PROPS, ...xAxis.props }),\n    [xAxis.props]\n  );\n  const yAxisProps = useMemo(\n    () => ({ ...LINEAR_Y_AXIS_DEFAULT_PROPS, ...yAxis.props }),\n    [yAxis.props]\n  );\n  const seriesProps = useMemo(\n    () => ({ ...HEATMAP_SERIES_DEFAULT_PROPS, ...series.props }),\n    [series.props]\n  );\n\n  const getScalesData = useCallback(\n    (chartHeight: number, chartWidth: number) => {\n      const nestedData = buildNestedChartData(data);\n\n      const xDomain: any =\n        xAxisProps.domain || uniqueBy(nestedData, (d) => d.key);\n\n      const xScale = scaleBand()\n        .range([0, chartWidth])\n        .domain(xDomain)\n        .paddingInner(seriesProps.padding || 0.1);\n\n      const yDomain: any =\n        yAxisProps.domain ||\n        uniqueBy(\n          nestedData,\n          (d) => d.data,\n          (d) => d.x\n        );\n\n      const yScale = scaleBand()\n        .domain(yDomain)\n        .range([chartHeight, 0])\n        .paddingInner(seriesProps.padding || 0.1);\n\n      return {\n        yScale,\n        xScale,\n        data: nestedData\n      };\n    },\n    [data, xAxisProps.domain, seriesProps.padding, yAxisProps.domain]\n  );\n\n  const renderChart = useCallback(\n    (containerProps: ChartContainerChildProps) => {\n      const { chartWidth, chartHeight, updateAxes, id, chartSized } =\n        containerProps;\n      const {\n        xScale,\n        yScale,\n        data: scalesData\n      } = getScalesData(chartHeight, chartWidth);\n\n      return (\n        <Fragment>\n          <CloneElement<LinearAxisProps>\n            element={xAxis}\n            height={chartHeight}\n            width={chartWidth}\n            scale={xScale}\n            visibility={chartSized ? 'visible' : 'hidden'}\n            onDimensionsChange={(event) => updateAxes('horizontal', event)}\n          />\n          <CloneElement<LinearAxisProps>\n            element={yAxis}\n            height={chartHeight}\n            width={chartWidth}\n            scale={yScale}\n            visibility={chartSized ? 'visible' : 'hidden'}\n            onDimensionsChange={(event) => updateAxes('vertical', event)}\n          />\n          {secondaryAxis &&\n            secondaryAxis.map((axis, i) => (\n              <CloneElement<LinearAxisProps>\n                key={i}\n                element={axis}\n                height={chartHeight}\n                width={chartWidth}\n                visibility={chartSized ? 'visible' : 'hidden'}\n                onDimensionsChange={(event) => updateAxes('horizontal', event)}\n              />\n            ))}\n          {chartSized && (\n            <CloneElement<HeatmapSeriesProps>\n              element={series}\n              id={`heat-series-${id}`}\n              data={scalesData}\n              xScale={xScale}\n              yScale={yScale}\n            />\n          )}\n        </Fragment>\n      );\n    },\n    [getScalesData, secondaryAxis, series, xAxis, yAxis]\n  );\n\n  return (\n    <ChartContainer\n      id={id}\n      width={width}\n      height={height}\n      margins={margins}\n      containerClassName={containerClassName}\n      xAxisVisible={isAxisVisible(xAxisProps)}\n      yAxisVisible={isAxisVisible(yAxisProps)}\n      className={className}\n    >\n      {renderChart}\n    </ChartContainer>\n  );\n};\n","/**\n * @module constants\n * @summary Useful constants\n * @description\n * Collection of useful date constants.\n *\n * The constants could be imported from `date-fns/constants`:\n *\n * ```ts\n * import { maxTime, minTime } from \"./constants/date-fns/constants\";\n *\n * function isAllowedTime(time) {\n *   return time <= maxTime && time >= minTime;\n * }\n * ```\n */\n\n/**\n * @constant\n * @name daysInWeek\n * @summary Days in 1 week.\n */\nexport const daysInWeek = 7;\n\n/**\n * @constant\n * @name daysInYear\n * @summary Days in 1 year.\n *\n * @description\n * How many days in a year.\n *\n * One years equals 365.2425 days according to the formula:\n *\n * > Leap year occurs every 4 years, except for years that are divisible by 100 and not divisible by 400.\n * > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days\n */\nexport const daysInYear = 365.2425;\n\n/**\n * @constant\n * @name maxTime\n * @summary Maximum allowed time.\n *\n * @example\n * import { maxTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = 8640000000000001 <= maxTime;\n * //=> false\n *\n * new Date(8640000000000001);\n * //=> Invalid Date\n */\nexport const maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000;\n\n/**\n * @constant\n * @name minTime\n * @summary Minimum allowed time.\n *\n * @example\n * import { minTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = -8640000000000001 >= minTime;\n * //=> false\n *\n * new Date(-8640000000000001)\n * //=> Invalid Date\n */\nexport const minTime = -maxTime;\n\n/**\n * @constant\n * @name millisecondsInWeek\n * @summary Milliseconds in 1 week.\n */\nexport const millisecondsInWeek = 604800000;\n\n/**\n * @constant\n * @name millisecondsInDay\n * @summary Milliseconds in 1 day.\n */\nexport const millisecondsInDay = 86400000;\n\n/**\n * @constant\n * @name millisecondsInMinute\n * @summary Milliseconds in 1 minute\n */\nexport const millisecondsInMinute = 60000;\n\n/**\n * @constant\n * @name millisecondsInHour\n * @summary Milliseconds in 1 hour\n */\nexport const millisecondsInHour = 3600000;\n\n/**\n * @constant\n * @name millisecondsInSecond\n * @summary Milliseconds in 1 second\n */\nexport const millisecondsInSecond = 1000;\n\n/**\n * @constant\n * @name minutesInYear\n * @summary Minutes in 1 year.\n */\nexport const minutesInYear = 525600;\n\n/**\n * @constant\n * @name minutesInMonth\n * @summary Minutes in 1 month.\n */\nexport const minutesInMonth = 43200;\n\n/**\n * @constant\n * @name minutesInDay\n * @summary Minutes in 1 day.\n */\nexport const minutesInDay = 1440;\n\n/**\n * @constant\n * @name minutesInHour\n * @summary Minutes in 1 hour.\n */\nexport const minutesInHour = 60;\n\n/**\n * @constant\n * @name monthsInQuarter\n * @summary Months in 1 quarter.\n */\nexport const monthsInQuarter = 3;\n\n/**\n * @constant\n * @name monthsInYear\n * @summary Months in 1 year.\n */\nexport const monthsInYear = 12;\n\n/**\n * @constant\n * @name quartersInYear\n * @summary Quarters in 1 year\n */\nexport const quartersInYear = 4;\n\n/**\n * @constant\n * @name secondsInHour\n * @summary Seconds in 1 hour.\n */\nexport const secondsInHour = 3600;\n\n/**\n * @constant\n * @name secondsInMinute\n * @summary Seconds in 1 minute.\n */\nexport const secondsInMinute = 60;\n\n/**\n * @constant\n * @name secondsInDay\n * @summary Seconds in 1 day.\n */\nexport const secondsInDay = secondsInHour * 24;\n\n/**\n * @constant\n * @name secondsInWeek\n * @summary Seconds in 1 week.\n */\nexport const secondsInWeek = secondsInDay * 7;\n\n/**\n * @constant\n * @name secondsInYear\n * @summary Seconds in 1 year.\n */\nexport const secondsInYear = secondsInDay * daysInYear;\n\n/**\n * @constant\n * @name secondsInMonth\n * @summary Seconds in 1 month\n */\nexport const secondsInMonth = secondsInYear / 12;\n\n/**\n * @constant\n * @name secondsInQuarter\n * @summary Seconds in 1 quarter.\n */\nexport const secondsInQuarter = secondsInMonth * 3;\n\n/**\n * @constant\n * @name constructFromSymbol\n * @summary Symbol enabling Date extensions to inherit properties from the reference date.\n *\n * The symbol is used to enable the `constructFrom` function to construct a date\n * using a reference date and a value. It allows to transfer extra properties\n * from the reference date to the new date. It's useful for extensions like\n * [`TZDate`](https://github.com/date-fns/tz) that accept a time zone as\n * a constructor argument.\n */\nexport const constructFromSymbol = Symbol.for(\"constructDateFrom\");\n","import { constructFromSymbol } from \"./constants.js\";\n\n/**\n * @name constructFrom\n * @category Generic Helpers\n * @summary Constructs a date using the reference date and the value\n *\n * @description\n * The function constructs a new date using the constructor from the reference\n * date and the given value. It helps to build generic functions that accept\n * date extensions.\n *\n * It defaults to `Date` if the passed reference date is a number or a string.\n *\n * Starting from v3.7.0, it allows to construct a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The reference date to take constructor from\n * @param value - The value to create the date\n *\n * @returns Date initialized using the given date and value\n *\n * @example\n * import { constructFrom } from \"./constructFrom/date-fns\";\n *\n * // A function that clones a date preserving the original type\n * function cloneDate<DateType extends Date>(date: DateType): DateType {\n *   return constructFrom(\n *     date, // Use constructor from the given date\n *     date.getTime() // Use the date value to create a new date\n *   );\n * }\n */\nexport function constructFrom(date, value) {\n  if (typeof date === \"function\") return date(value);\n\n  if (date && typeof date === \"object\" && constructFromSymbol in date)\n    return date[constructFromSymbol](value);\n\n  if (date instanceof Date) return new date.constructor(value);\n\n  return new Date(value);\n}\n\n// Fallback for modularized imports:\nexport default constructFrom;\n","import { constructFrom } from \"./constructFrom.js\";\n\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * Starting from v3.7.0, it clones a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param argument - The value to convert\n *\n * @returns The parsed date in the local time zone\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\nexport function toDate(argument, context) {\n  // [TODO] Get rid of `toDate` or `constructFrom`?\n  return constructFrom(context || argument, argument);\n}\n\n// Fallback for modularized imports:\nexport default toDate;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link addDays} function options.\n */\n\n/**\n * @name addDays\n * @category Day Helpers\n * @summary Add the specified number of days to the given date.\n *\n * @description\n * Add the specified number of days to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of days to be added.\n * @param options - An object with options\n *\n * @returns The new date with the days added\n *\n * @example\n * // Add 10 days to 1 September 2014:\n * const result = addDays(new Date(2014, 8, 1), 10)\n * //=> Thu Sep 11 2014 00:00:00\n */\nexport function addDays(date, amount, options) {\n  const _date = toDate(date, options?.in);\n  if (isNaN(amount)) return constructFrom(options?.in || date, NaN);\n\n  // If 0 days, no-op to avoid changing times in the hour before end of DST\n  if (!amount) return _date;\n\n  _date.setDate(_date.getDate() + amount);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default addDays;\n","import { addDays } from \"./addDays.js\";\n\n/**\n * The {@link subDays} function options.\n */\n\n/**\n * @name subDays\n * @category Day Helpers\n * @summary Subtract the specified number of days from the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of days to be subtracted.\n * @param options - An object with options\n *\n * @returns The new date with the days subtracted\n *\n * @example\n * // Subtract 10 days from 1 September 2014:\n * const result = subDays(new Date(2014, 8, 1), 10)\n * //=> Fri Aug 22 2014 00:00:00\n */\nexport function subDays(date, amount, options) {\n  return addDays(date, -amount, options);\n}\n\n// Fallback for modularized imports:\nexport default subDays;\n","import { ChartShallowDataShape } from '@/common/data';\nimport { max, min, range } from 'd3-array';\nimport { subDays } from 'date-fns';\n\nexport type CalendarView = 'year' | 'month';\n\nconst getFirstOfMonth = (date: Date) =>\n  new Date(date.getFullYear(), date.getMonth(), 1);\n\nexport const addWeeksToDate = (date: Date, weeks: number) => {\n  const d = new Date(date.getTime());\n  d.setDate(d.getDate() + weeks * 7);\n  return d;\n};\n\nconst getStartOfDay = (date: Date) => {\n  const d = new Date(date.getTime());\n  d.setHours(0, 0, 0, 0);\n  return d;\n};\n\nconst getNewDayFromDay = (date: Date, num: number) => {\n  const d = new Date(date.getTime());\n  d.setDate(d.getDate() + num);\n  return d;\n};\n\nexport const weekDays: string[] = (() => {\n  const base = new Date(Date.UTC(2017, 0, 2));\n  return range(7).map(() => {\n    const name = base.toLocaleDateString('default', { weekday: 'short' });\n    base.setDate(base.getDate() + 1);\n    return name;\n  });\n})();\n\nexport const buildDataScales = (\n  rawData: ChartShallowDataShape[],\n  view: CalendarView\n) => {\n  // Get the most recent date to get the range from\n  // From the end date, lets find the start year/month of that\n  // From that start year/month, lets find the end year/month for our bounds\n  const startDate = min(rawData, (d) => d.key as Date) || new Date();\n  const endDomain = view === 'year' ? 53 : 5;\n\n  let end, start;\n  if (view === 'year') {\n    // For year view, end at the most recent date and start 364 days before that\n    end = getStartOfDay(max(rawData, (d) => d.key as Date) || new Date());\n    start = getStartOfDay(subDays(end, 365));\n  } else {\n    // For month view, start at the first of the month and end 4 weeks from that\n    start = getFirstOfMonth(startDate);\n    end = addWeeksToDate(start, endDomain);\n  }\n\n  // Base on the view type, swap out some ranges\n  const xDomainRange = view === 'year' ? 53 : 5;\n\n  // Build our x/y domains for days of week + number of weeks in year\n  const yDomain = range(7).reverse();\n  const xDomain = range(xDomainRange);\n\n  // Filter out dates that are not in the start/end ranges\n  // and turn them into something our chart can read\n  const dates = rawData\n    .filter(\n      (d) =>\n        (d.key as Date).getTime() > start.getTime() ||\n        (d.key as Date).getTime() < end.getTime()\n    )\n    .map((d) => ({\n      key: getStartOfDay(d.key as Date),\n      data: d.data\n    }));\n\n  // Find the first day of the duration and subtract the delta\n  const firstDayOfStart = start.getDay();\n  const curDate = getNewDayFromDay(start, -firstDayOfStart);\n  const rows: any[] = [];\n\n  // Build out the dataset for the n duration\n  for (let week = 0; week < xDomainRange; week++) {\n    const row = {\n      key: week,\n      data: [] as any\n    };\n\n    for (let day = 0; day <= 6; day++) {\n      const dayValue = dates.find((d) => d.key.getTime() === curDate.getTime());\n\n      row.data.push({\n        key: day,\n        data: dayValue?.data ?? undefined,\n        metadata: {\n          date: new Date(curDate.getTime()),\n          start: start,\n          end: end\n        }\n      });\n\n      curDate.setDate(curDate.getDate() + 1);\n    }\n\n    rows.push(row);\n  }\n\n  return {\n    data: rows,\n    yDomain,\n    xDomain,\n    start\n  };\n};\n","import React, { FC, useCallback, useMemo } from 'react';\nimport { ChartShallowDataShape } from '@/common/data';\nimport { Heatmap, HeatmapProps } from './Heatmap';\nimport {\n  LinearXAxis,\n  LinearYAxis,\n  LinearYAxisTickSeries,\n  LinearXAxisTickSeries,\n  LinearYAxisTickLabel,\n  LinearXAxisTickLabel,\n  LINEAR_Y_AXIS_TICK_LABEL_DEFAULT_PROPS,\n  LINEAR_X_AXIS_TICK_LABEL_DEFAULT_PROPS\n} from '@/common/Axis';\nimport { HeatmapSeries, HeatmapCell } from './HeatmapSeries';\nimport { ChartTooltip } from '@/common/Tooltip';\nimport { formatValue } from '@/common/utils/formatting';\nimport {\n  buildDataScales,\n  CalendarView,\n  addWeeksToDate,\n  weekDays\n} from './calendarUtils';\n\nexport interface CalendarHeatmapProps extends Omit<HeatmapProps, 'data'> {\n  /**\n   * Chart data shape.\n   */\n  data: ChartShallowDataShape[];\n\n  /**\n   * Height of the component.\n   */\n  height: number;\n\n  /**\n   * Width of the component.\n   */\n  width: number;\n\n  /**\n   * View of the calendar renderer.\n   */\n  view: CalendarView;\n}\n\nexport const CalendarHeatmap: FC<Partial<CalendarHeatmapProps>> = ({\n  view = 'year',\n  data,\n  series = (\n    <HeatmapSeries\n      padding={0.3}\n      emptyColor=\"transparent\"\n      cell={\n        <HeatmapCell\n          tooltip={\n            <ChartTooltip\n              content={(d) =>\n                `${formatValue(d.data.metadata.date)} ∙ ${formatValue(\n                  d.data.value\n                )}`\n              }\n            />\n          }\n        />\n      }\n    />\n  ),\n  ...rest\n}) => {\n  const {\n    data: domainData,\n    yDomain,\n    xDomain,\n    start\n  } = useMemo(() => buildDataScales(data, view), [data, view]);\n\n  // For month, only pass 1 tick value\n  const xTickValues = view === 'year' ? undefined : [1];\n\n  const getDayOfWeek = useCallback((day: number) => weekDays[day], []);\n\n  // Get the yAxis label formatting based on view type\n  const yAxisLabelFormat = useMemo(\n    () => (view === 'year' ? getDayOfWeek : () => null),\n    [getDayOfWeek, view]\n  );\n\n  // Format the xAxis label for the start + n week\n  const xAxisLabelFormat = useCallback(\n    (weeks: number) =>\n      addWeeksToDate(start, weeks).toLocaleString('default', { month: 'long' }),\n    [start]\n  );\n\n  return (\n    <Heatmap\n      {...rest}\n      series={series}\n      data={domainData}\n      yAxis={\n        <LinearYAxis\n          type=\"category\"\n          axisLine={null}\n          domain={yDomain}\n          tickSeries={\n            <LinearYAxisTickSeries\n              tickSize={20}\n              line={null}\n              label={\n                <LinearYAxisTickLabel padding={5} format={yAxisLabelFormat} />\n              }\n            />\n          }\n        />\n      }\n      xAxis={\n        <LinearXAxis\n          type=\"category\"\n          axisLine={null}\n          domain={xDomain}\n          tickSeries={\n            <LinearXAxisTickSeries\n              line={null}\n              tickValues={xTickValues}\n              label={\n                <LinearXAxisTickLabel\n                  padding={5}\n                  align=\"end\"\n                  format={xAxisLabelFormat}\n                />\n              }\n            />\n          }\n        />\n      }\n    />\n  );\n};\n","import React, { FC } from 'react';\nimport { Bar, BarProps } from '../BarChart';\nimport { ChartTooltip, TooltipTemplate } from '@/common/Tooltip';\n\nexport type LinearGaugeBarProps = BarProps;\n\nexport const LinearGaugeBar: FC<Partial<LinearGaugeBarProps>> = (props) => (\n  <Bar\n    tooltip={\n      <ChartTooltip\n        placement=\"top\"\n        content={(data) => (\n          <TooltipTemplate value={{ y: data.value, x: data.y }} />\n        )}\n      />\n    }\n    {...props}\n  />\n);\n","import React, { FC } from 'react';\n\nexport interface LinearGaugeOuterBarProps extends SVGRect {\n  /**\n   * Height of the chart. Set by `LinearGauge` component.\n   */\n  height: number;\n\n  /**\n   * Width of the chart. Set by `LinearGauge` component.\n   */\n  width: number;\n\n  /**\n   * Fill for the bar element.\n   */\n  fill: string;\n}\n\nexport const LinearGaugeOuterBar: FC<Partial<LinearGaugeOuterBarProps>> = ({\n  height,\n  width,\n  fill = '#484848',\n  ...rest\n}) => (\n  <rect\n    {...rest}\n    fill={fill}\n    width={Math.max(width!, 0)}\n    height={Math.max(height!, 0)}\n  />\n);\n","import React, { Fragment, ReactElement, FC } from 'react';\nimport { BarSeries, BarSeriesProps } from '@/BarChart';\nimport { LinearGaugeBar, LinearGaugeBarProps } from './LinearGaugeBar';\nimport {\n  LinearGaugeOuterBar,\n  LinearGaugeOuterBarProps\n} from './LinearGaugeOuterBar';\nimport { CloneElement } from 'reablocks';\n\nexport interface LinearGaugeSeriesProps extends Omit<BarSeriesProps, 'bar'> {\n  /**\n   * Height of the chart. Set by `LinearGauge` component.\n   */\n  height: number;\n\n  /**\n   * Width of the chart. Set by `LinearGauge` component.\n   */\n  width: number;\n\n  /**\n   * Whether its a multi-series or not. Set by `LinearGauge` component.\n   */\n  isMultiSeries: boolean;\n\n  /**\n   * Bar element. Only applicable for single series.\n   */\n  bar: ReactElement<LinearGaugeBarProps, typeof LinearGaugeBar>;\n\n  /**\n   * Outer bar element. Only applicable for single series.\n   */\n  outerBar: ReactElement<LinearGaugeOuterBarProps, typeof LinearGaugeOuterBar>;\n}\n\nexport const LinearGaugeSeries: FC<Partial<LinearGaugeSeriesProps>> = ({\n  height,\n  width,\n  bar = <LinearGaugeBar />,\n  outerBar = <LinearGaugeOuterBar />,\n  isMultiSeries,\n  ...rest\n}) => (\n  <Fragment>\n    {!isMultiSeries && outerBar && (\n      <CloneElement<LinearGaugeOuterBarProps>\n        element={outerBar}\n        height={height}\n        width={width}\n      />\n    )}\n    <BarSeries\n      {...rest}\n      layout=\"horizontal\"\n      tooltip={null}\n      bar={<CloneElement<LinearGaugeOuterBarProps> element={bar} />}\n    />\n  </Fragment>\n);\n","import React, { FC, Fragment, ReactElement, useCallback, useMemo } from 'react';\nimport {\n  ChartProps,\n  ChartContainer,\n  ChartContainerChildProps\n} from '@/common/containers';\nimport {\n  ChartShallowDataShape,\n  buildBarStackData,\n  ChartInternalNestedDataShape,\n  buildShallowChartData,\n  ChartNestedDataShape\n} from '@/common/data';\nimport { getXScale, getYScale } from '@/common/scales';\nimport { CloneElement } from 'reablocks';\nimport { LinearGaugeSeries, LinearGaugeSeriesProps } from './LinearGaugeSeries';\n\nexport interface LinearGaugeProps extends ChartProps {\n  /**\n   * Data the chart will receive to render.\n   */\n  data: ChartShallowDataShape | ChartShallowDataShape[];\n\n  /**\n   * The series component that renders the bar components.\n   */\n  series: ReactElement<LinearGaugeSeriesProps, typeof LinearGaugeSeries>;\n\n  /**\n   * Min value to scale on. Only applicable for single-series.\n   */\n  minValue: number;\n\n  /**\n   * Max value to scale on. Only applicable for single-series.\n   */\n  maxValue: number;\n}\n\nexport const LinearGauge: FC<Partial<LinearGaugeProps>> = ({\n  id,\n  width,\n  height,\n  margins,\n  className,\n  containerClassName,\n  series = <LinearGaugeSeries />,\n  data,\n  minValue = 0,\n  maxValue = 100\n}) => {\n  const transformedData = useMemo(() => {\n    if (Array.isArray(data)) {\n      return buildBarStackData(\n        [\n          {\n            key: 'default',\n            data\n          }\n        ] as ChartNestedDataShape[],\n        'expand',\n        'horizontal'\n      );\n    } else {\n      return buildShallowChartData([data], 'horizontal');\n    }\n  }, [data]);\n\n  const getScales = useCallback(\n    (\n      isMultiSeries: boolean,\n      data: ChartInternalNestedDataShape[],\n      width: number,\n      height: number,\n      minValue: number,\n      maxValue: number\n    ) => {\n      const domain = !isMultiSeries ? [minValue, maxValue] : undefined;\n\n      const keyScale = getXScale({\n        width,\n        type: 'value',\n        data,\n        domain,\n        isMultiSeries\n      });\n\n      const valueScale = getYScale({\n        type: 'category',\n        height,\n        data,\n        isMultiSeries\n      });\n\n      return {\n        keyScale,\n        valueScale\n      };\n    },\n    []\n  );\n\n  const renderChart = useCallback(\n    ({ chartHeight, chartWidth, id, chartSized }: ChartContainerChildProps) => {\n      const isMultiSeries = Array.isArray(data);\n      const type = isMultiSeries ? 'stackedNormalized' : 'standard';\n      const { keyScale, valueScale } = getScales(\n        isMultiSeries,\n        transformedData as ChartInternalNestedDataShape[],\n        chartWidth,\n        chartHeight,\n        minValue,\n        maxValue\n      );\n\n      return (\n        <Fragment>\n          {chartSized && (\n            <CloneElement<LinearGaugeSeriesProps>\n              element={series}\n              id={`linear-gauge-series-${id}`}\n              data={transformedData}\n              isCategorical={true}\n              xScale={keyScale}\n              yScale={valueScale}\n              type={type}\n              height={chartHeight}\n              width={chartWidth}\n              isMultiSeries={isMultiSeries}\n            />\n          )}\n        </Fragment>\n      );\n    },\n    [data, getScales, maxValue, minValue, series, transformedData]\n  );\n\n  return (\n    <ChartContainer\n      id={id}\n      width={width}\n      height={height}\n      margins={margins}\n      className={className}\n      containerClassName={containerClassName}\n    >\n      {renderChart}\n    </ChartContainer>\n  );\n};\n","import { useEffect } from 'react';\nimport { DEFAULT_TRANSITION } from '@/common/Motion';\nimport { useMotionValue, useSpring } from 'motion/react';\nimport { interpolate } from 'd3-interpolate';\n\nexport const useInterpolate = ({ data, animated }) => {\n  const transition = animated\n    ? { ...DEFAULT_TRANSITION }\n    : {\n        delay: 0,\n        type: false as const\n      };\n\n  const d = useMotionValue(data.path);\n  const spring = useSpring(0, { stiffness: 300, damping: 30 });\n\n  useEffect(() => {\n    const interpolator = interpolate(d.get(), data.path);\n    const prevSpring = spring.get();\n    spring.set(1 + prevSpring);\n\n    return spring.on('change', (v) => d.set(interpolator(v - prevSpring)));\n  }, [d, data.path, spring]);\n\n  return { transition, d };\n};\n","import React, {\n  FC,\n  useRef,\n  ReactElement,\n  useState,\n  Fragment,\n  useMemo\n} from 'react';\nimport { IVennLayout } from '@upsetjs/venn.js';\nimport { ChartTooltip, ChartTooltipProps } from '@/common/Tooltip';\nimport { CloneElement } from 'reablocks';\nimport { motion } from 'motion/react';\nimport { useInterpolate } from './useInterpolate';\nimport { Mask, MaskProps } from '@/common/Mask';\nimport { Gradient, GradientProps } from '@/common/Gradient';\nimport { useHoverIntent } from '@/common/utils/useHoverIntent';\nimport { Glow, getAriaLabel } from '@/common';\nimport { generateGlowStyles } from '@/common/Glow/utils';\n\nexport interface VennArcProps {\n  /**\n   * Whether the shape is active or not.\n   */\n  active?: boolean | null;\n\n  /**\n   * Id set by the parent.\n   */\n  id: string;\n\n  /**\n   * Whether the chart is animated or not.\n   */\n  animated?: boolean;\n\n  /**\n   * Fill color for the arc.\n   */\n  fill: string;\n\n  /**\n   * Stroke for the arc.\n   */\n  stroke?:\n    | string\n    | ((\n        data: IVennLayout<any>[],\n        index: number,\n        isActive: boolean | null,\n        isHovered: boolean | null\n      ) => string);\n\n  /**\n   * The internal data object built by venn.js\n   */\n  data: IVennLayout<any>;\n\n  /**\n   * Whether the chart is disabled.\n   */\n  disabled?: boolean;\n\n  /**\n   * Stroke on the arc.\n   */\n  strokeWidth?: number;\n\n  /**\n   * Initial style of arc.\n   */\n  initialStyle?: any;\n\n  /**\n   * Active style of arc.\n   */\n  activeStyle?: any;\n\n  /**\n   * Inactive style of arc.\n   */\n  inactiveStyle?: any;\n\n  /**\n   * CSS Styles for the arc.\n   */\n  style?: any;\n\n  /**\n   * Tooltip element.\n   */\n  tooltip?: ReactElement<ChartTooltipProps, typeof ChartTooltip> | null;\n\n  /**\n   * Mask element for the arc.\n   */\n  mask: ReactElement<MaskProps, typeof Mask> | null;\n\n  /**\n   * Gradient shades for the arc.\n   */\n  gradient: ReactElement<GradientProps, typeof Gradient> | null;\n\n  /**\n   * Glow styling for the arc.\n   */\n  glow: Glow;\n\n  /**\n   * Event for when the arc is clicked.\n   */\n  onClick: (event) => void;\n\n  /**\n   * Event for when the arc has mouse enter.\n   */\n  onMouseEnter: (event) => void;\n\n  /**\n   * Event for when the arc has mouse leave.\n   */\n  onMouseLeave: (event) => void;\n}\n\nexport const VennArc: FC<Partial<VennArcProps>> = ({\n  data,\n  fill,\n  disabled,\n  animated,\n  stroke,\n  mask,\n  id,\n  style,\n  active = false,\n  inactiveStyle = { opacity: 0.3 },\n  activeStyle = { opacity: 0.8 },\n  initialStyle = { opacity: 0.6 },\n  strokeWidth = 3,\n  gradient = <Gradient />,\n  glow,\n  tooltip = <ChartTooltip />,\n  onClick = () => undefined,\n  onMouseEnter = () => undefined,\n  onMouseLeave = () => undefined\n}) => {\n  const [internalActive, setInternalActive] = useState<boolean>(false);\n  const arcRef = useRef<any | null>(null);\n  const { transition, d } = useInterpolate({ animated, data });\n  const currentStyle = active\n    ? activeStyle\n    : active === null\n      ? inactiveStyle\n      : initialStyle;\n\n  const arcFill =\n    gradient && !mask\n      ? `url(#gradient-${id})`\n      : mask\n        ? `url(#mask-pattern-${id})`\n        : fill;\n\n  const { pointerOut, pointerOver } = useHoverIntent({\n    onPointerOver: (event) => {\n      if (!disabled) {\n        setInternalActive(true);\n        onMouseEnter?.({\n          value: data.data,\n          nativeEvent: event\n        });\n      }\n    },\n    onPointerOut: (event) => {\n      if (!disabled) {\n        setInternalActive(false);\n        onMouseLeave?.({\n          value: data.data,\n          nativeEvent: event\n        });\n      }\n    }\n  });\n\n  const tooltipData = useMemo(\n    () => ({ y: data.data.size, x: data.data?.sets?.join(' | ') }),\n    [data]\n  );\n  const ariaLabelData = useMemo(() => getAriaLabel(tooltipData), [tooltipData]);\n\n  return (\n    <g\n      onPointerOver={pointerOver}\n      onPointerOut={pointerOut}\n      onClick={(event) => {\n        if (!disabled) {\n          onClick?.({\n            value: data.data,\n            nativeEvent: event\n          });\n        }\n      }}\n      tabIndex={0}\n      aria-label={ariaLabelData}\n      role=\"graphics-document\"\n    >\n      <motion.path\n        ref={arcRef}\n        fill={arcFill}\n        id={`${id}-arc`}\n        strokeWidth={strokeWidth}\n        stroke={stroke as string}\n        transition={transition}\n        d={d}\n        initial={initialStyle}\n        animate={currentStyle}\n        style={{\n          ...style,\n          ...generateGlowStyles({\n            glow,\n            colorSchemeColor: typeof stroke === 'string' ? stroke : null\n          })\n        }}\n      />\n      {mask && (\n        <Fragment>\n          <Mask id={`mask-${id}`} fill={`url(#gradient-${id})`} />\n          <CloneElement<MaskProps>\n            element={mask}\n            id={`mask-pattern-${id}`}\n            fill={fill}\n          />\n        </Fragment>\n      )}\n      {gradient && (\n        <CloneElement<GradientProps>\n          element={gradient}\n          id={`gradient-${id}`}\n          color={fill}\n        />\n      )}\n      {tooltip && !tooltip.props.disabled && (\n        <CloneElement<ChartTooltipProps>\n          element={tooltip}\n          visible={!!internalActive}\n          reference={arcRef}\n          value={tooltipData}\n        />\n      )}\n    </g>\n  );\n};\n","import React, { FC } from 'react';\nimport { motion } from 'motion/react';\nimport { wrapText } from '@/common/utils/wrapText';\nimport { DEFAULT_TRANSITION } from '@/common/Motion';\n\nexport interface VennLabelProps {\n  /**\n   * Whether the shape is active or not.\n   */\n  active?: boolean | null;\n\n  /**\n   * Set by the parent element.\n   */\n  id?: string;\n\n  /**\n   * Show all labels or just the large ones. Default false.\n   */\n  showAll?: boolean;\n\n  /**\n   * The label type to show.\n   */\n  labelType: 'key' | 'value';\n\n  /**\n   * Should wrap text or not.\n   */\n  wrap?: boolean;\n\n  /**\n   * The internal data object built by venn.js\n   */\n  data: any;\n\n  /**\n   * Font size of the text.\n   */\n  fontSize?: number;\n\n  /**\n   * Font family of the text.\n   */\n  fontFamily?: string;\n\n  /**\n   * Fill of the text.\n   */\n  fill?: string;\n\n  /**\n   * Whether the chart is animated or not.\n   */\n  animated?: boolean;\n\n  /**\n   * Format label.\n   */\n  format?: (data) => any;\n}\n\nexport const VennLabel: FC<Partial<VennLabelProps>> = ({\n  data,\n  format,\n  id,\n  active,\n  labelType = 'key',\n  showAll = false,\n  wrap = true,\n  animated = true,\n  fill,\n  fontSize = 11,\n  fontFamily = 'sans-serif'\n}) => {\n  // If the text area is very large, then lets just skip showing the label\n  if (!showAll && !data.arcs?.filter((a) => a.large).length) {\n    return null;\n  }\n\n  const key =\n    labelType === 'key' ? data.data?.sets?.join(' | ') : data.data.size;\n\n  const transition = animated\n    ? DEFAULT_TRANSITION\n    : { delay: 0, type: false as const };\n  const text = wrap\n    ? wrapText({\n        key,\n        x: data.text.x,\n        fontFamily,\n        fontSize,\n        width: data?.circles?.[0]?.radius\n      })\n    : key;\n\n  return (\n    <motion.text\n      id={`${id}-text`}\n      fill={fill}\n      pointerEvents=\"none\"\n      fontFamily={fontFamily}\n      fontSize={fontSize}\n      initial={\n        {\n          attrX: data.text.x,\n          attrY: data.text.y,\n          opacity: 1\n        } as any\n      }\n      animate={\n        {\n          attrX: data.text.x,\n          attrY: data.text.y,\n          opacity: active === null ? 0.3 : 1\n        } as any\n      }\n      transition={transition}\n      textAnchor=\"middle\"\n    >\n      {format ? format(data) : text}\n    </motion.text>\n  );\n};\n","import React, { FC, Fragment, isValidElement } from 'react';\nimport { motion } from 'motion/react';\nimport { DEFAULT_TRANSITION } from '@/common/Motion';\n\nexport interface VennOuterLabelProps {\n  /**\n   * The internal data object built by venn.js\n   */\n  data: any;\n\n  /**\n   * Font size of the text.\n   */\n  fontSize?: number;\n\n  /**\n   * Font family of the text.\n   */\n  fontFamily?: string;\n\n  /**\n   * Fill of the text.\n   */\n  fill?: string;\n\n  /**\n   * Whether the chart is animated or not.\n   */\n  animated?: boolean;\n\n  /**\n   * Format label.\n   */\n  format?: (data) => any;\n}\n\nexport const VennOuterLabel: FC<Partial<VennOuterLabelProps>> = ({\n  data,\n  format,\n  animated = true,\n  fill = '#000',\n  fontSize = 14,\n  fontFamily = 'sans-serif'\n}) => {\n  const transition = animated\n    ? DEFAULT_TRANSITION\n    : { delay: 0, type: false as const };\n  const text = data.set.data.key;\n\n  const label = format ? format(data) : text;\n  const isElement = isValidElement(label);\n  const showIcon = isElement && data.set.icon;\n\n  // TODO: framer-motion doesn't seem to like the translates on the g\n  // initial={pos} animate={pos}\n  const pos = {\n    x: showIcon ? data.set.icon.x : data.set.text.x,\n    y: showIcon ? data.set.icon.y : data.set.text.y\n  };\n\n  return (\n    <Fragment>\n      {isElement ? (\n        <g style={{ transform: `translate(${pos.x}px, ${pos.y}px)` }}>\n          {label}\n        </g>\n      ) : (\n        <motion.text\n          fill={fill}\n          style={{ pointerEvents: 'none', fontFamily, fontSize }}\n          textAnchor={data.set.align === 'middle' ? 'center' : data.set.align}\n          alignmentBaseline={data.set.verticalAlign}\n          initial={\n            {\n              attrX: pos.x,\n              attrY: pos.y\n            } as any\n          }\n          animate={\n            {\n              attrX: pos.x,\n              attrY: pos.y\n            } as any\n          }\n          transition={transition}\n        >\n          {label}\n        </motion.text>\n      )}\n    </Fragment>\n  );\n};\n","import React, {\n  FC,\n  Fragment,\n  ReactElement,\n  useCallback,\n  useState,\n  useMemo\n} from 'react';\nimport { IVennLayout } from '@upsetjs/venn.js';\nimport { ColorSchemeType, getColor } from '@/common/color';\nimport { VennArc, VennArcProps } from './VennArc';\nimport { VennLabel, VennLabelProps } from './VennLabel';\nimport { motion } from 'motion/react';\nimport { CloneElement } from 'reablocks';\nimport chroma from 'chroma-js';\nimport { VennOuterLabel, VennOuterLabelProps } from './VennOuterLabel';\nimport invert from 'invert-color';\nimport { DEFAULT_TRANSITION } from '@/common/Motion';\nimport { identifier } from 'safe-identifier';\n\nexport interface VennSeriesProps {\n  /**\n   * Id set by the parent.\n   */\n  id: string;\n\n  /**\n   * Active managed selections.\n   */\n  selections?: string[];\n\n  /**\n   * The internal data object built by venn.js\n   */\n  data: IVennLayout<any>[];\n\n  /**\n   * Color scheme for the chart.\n   */\n  colorScheme: ColorSchemeType;\n\n  /**\n   * Whether the chart is disabled.\n   */\n  disabled?: boolean;\n\n  /**\n   * Whether the chart is animated or not.\n   */\n  animated?: boolean;\n\n  /**\n   * Label element.\n   */\n  label?: ReactElement<VennLabelProps, typeof VennLabel> | null;\n\n  /**\n   * Label element.\n   */\n  outerLabel?: ReactElement<VennOuterLabelProps, typeof VennOuterLabel> | null;\n\n  /**\n   * Arc element.\n   */\n  arc?: ReactElement<VennArcProps, typeof VennArc> | null;\n}\n\nexport const VennSeries: FC<Partial<VennSeriesProps>> = ({\n  data,\n  id,\n  selections,\n  animated = true,\n  disabled = false,\n  colorScheme = 'cybertron',\n  outerLabel = <VennOuterLabel />,\n  arc = <VennArc />,\n  label = <VennLabel />\n}) => {\n  const transition = animated\n    ? DEFAULT_TRANSITION\n    : { type: false as const, delay: 0 };\n  const [actives, setActives] = useState<string[]>([]);\n  const [hovered, setHovered] = useState<string | null>(null);\n\n  const onActivate = useCallback(\n    (point: string) => {\n      setHovered(point);\n\n      setActives(\n        data\n          .filter((d) => d.data?.key.indexOf(point) > -1)\n          .map((d) => d.data?.key)\n      );\n    },\n    [data]\n  );\n\n  const renderArc = useCallback(\n    (d: IVennLayout<any> & { set?: any }, index: number) => {\n      // Get the colors of the fill\n      const fill = getColor({\n        data,\n        colorScheme,\n        point: d.data,\n        index\n      });\n\n      const textFill = fill\n        ? invert(chroma(fill).darken(0.5).hex(), true)\n        : 'white';\n\n      const arcFill = arc.props.fill || fill;\n\n      const key = d?.data?.key;\n      const safeKey = identifier(d.data?.key);\n      const isSelected = selections?.includes(key);\n\n      // Get the state of the arc\n      const isHovered = hovered === key || isSelected;\n      const isActive =\n        isSelected ||\n        actives.includes(key) ||\n        (actives.length > 0 ? null : false);\n\n      const getStrokeColor = () => {\n        if (typeof arc.props.stroke === 'function') {\n          return arc.props.stroke(data, index, isActive, isHovered);\n        }\n        if (arc.props.stroke !== undefined) {\n          return arc.props.stroke;\n        }\n\n        // fallback to fill (determined by colorScheme) if stroke is undefined\n        return fill;\n      };\n\n      const stroke = getStrokeColor();\n\n      const arcStroke =\n        stroke ||\n        chroma(arcFill)\n          .darken(isActive ? 0.8 : 0.5)\n          .hex();\n\n      return (\n        <Fragment key={safeKey}>\n          <CloneElement<VennArcProps>\n            element={arc}\n            id={`${id}-${safeKey}`}\n            data={d}\n            fill={arcFill}\n            stroke={arcStroke}\n            disabled={disabled}\n            animated={animated}\n            active={isActive}\n            onMouseEnter={() => onActivate(key)}\n            onMouseLeave={() => {\n              setActives([]);\n              setHovered(null);\n            }}\n          />\n          {label && (\n            <CloneElement<VennLabelProps>\n              element={label}\n              data={d}\n              id={`${id}-${safeKey}`}\n              active={isActive}\n              animated={animated}\n              fill={textFill}\n              {...label.props}\n            />\n          )}\n          {d.set && outerLabel && (\n            <CloneElement<VennLabelProps>\n              element={outerLabel}\n              data={d}\n              animated={animated}\n            />\n          )}\n        </Fragment>\n      );\n    },\n    [\n      data,\n      colorScheme,\n      arc,\n      selections,\n      hovered,\n      actives,\n      id,\n      disabled,\n      animated,\n      label,\n      outerLabel,\n      onActivate\n    ]\n  );\n\n  const topArcs = useMemo(() => {\n    const result = [];\n\n    if (actives.length > 0) {\n      result.push(...actives.filter((s) => s !== hovered));\n    }\n\n    if (selections?.length) {\n      result.push(\n        ...selections.filter((s) => !actives.includes(s) && s !== hovered)\n      );\n    }\n\n    if (hovered) {\n      result.push(hovered);\n    }\n\n    return result;\n  }, [hovered, actives, selections]);\n\n  return (\n    <motion.g\n      initial={{ opacity: 0, scale: 0 }}\n      animate={{ opacity: 1, scale: 1 }}\n      transition={transition}\n    >\n      {data.map(renderArc)}\n      {topArcs.length > 0 &&\n        topArcs.map((a) => (\n          <use\n            key={a}\n            xlinkHref={`#${id}-${a}-arc`}\n            style={{ pointerEvents: 'none' }}\n          />\n        ))}\n      {data.map((d, index) => (\n        <use\n          key={index}\n          xlinkHref={`#${id}-${identifier(d.data?.key)}-text`}\n          style={{ pointerEvents: 'none' }}\n        />\n      ))}\n    </motion.g>\n  );\n};\n","import venn0 from './venn0.json';\nimport venn1 from './venn1.json';\nimport venn2 from './venn2.json';\nimport venn3 from './venn3.json';\nimport venn4 from './venn4.json';\nimport venn5 from './venn5.json';\n\nexport interface BoundingBox {\n  width: number;\n  height: number;\n}\n\n// Static shapes for rendering\nconst shapes = [venn0, venn1, venn2, venn3, venn4, venn5];\n\n/**\n * Sort helper.\n * Reference: https://stackoverflow.com/a/64449554/1288340\n */\nconst upto = (limit) => Array.from({ length: limit }, (_, i) => i);\n\n/**\n * Detect ellipse.\n * Reference: https://github.com/upsetjs/chartjs-chart-venn/blob/master/src/model/generate.ts#L4\n */\nfunction isEllipse(d) {\n  return typeof d.rx === 'number';\n}\n\n/**\n * Generate all combinations of a given array.\n * Reference: https://stackoverflow.com/questions/5752002/find-all-possible-subset-combos-in-an-array\n */\nfunction combinations(array: string[]) {\n  return (new Array(1 << array.length) as any)\n    .fill()\n    .map((_e1, i) => array.filter((_e2, j) => i & (1 << j)));\n}\n\n/**\n * Given a array set, lookup the data.\n */\nfunction lookup(combo: string[], data: any[]) {\n  const key = combo.join('|');\n  const found = data.find((d) => d.key === key);\n\n  return {\n    key,\n    sets: combo,\n    size: found?.size || 0\n  };\n}\n\n/**\n * Build the data combinations for the layout.\n */\nfunction buildData(data: any[]) {\n  // Collect all unique sets and sort by size\n  const uniqueSets = data\n    .filter((d) => d.sets.length === 1)\n    .sort((a, b) => b.size - a.size);\n\n  // Map our unique sets\n  const uniqueSetKeys = uniqueSets.map((u) => u.key);\n\n  // Build all combos and return 1+ combos\n  const sets: any[] = combinations(uniqueSetKeys);\n  const filteredSets = sets.slice(1, sets.length);\n\n  // Sort the child sets based on the parent\n  const result = filteredSets.map((d) =>\n    [...d].sort((a, b) => uniqueSetKeys.indexOf(a) - uniqueSetKeys.indexOf(b))\n  );\n\n  // Sort the data based on index of keys and length\n  // Reference: https://stackoverflow.com/a/64449554/1288340\n  result.sort(\n    (a, b) =>\n      a.length - b.length ||\n      upto(a.length).reduce(\n        (diff, i) =>\n          diff || uniqueSetKeys.indexOf(a[i]) - uniqueSetKeys.indexOf(b[i]),\n        0\n      )\n  );\n\n  // reshape the data key so they will match combos\n  const keyedData = data.map((d) => {\n    const sets = [...d.sets].sort(\n      (a, b) => uniqueSetKeys.indexOf(a) - uniqueSetKeys.indexOf(b)\n    );\n    const key = sets.join('|');\n\n    return {\n      size: d.size,\n      sets,\n      key\n    };\n  });\n\n  return {\n    uniqueCount: uniqueSets.length,\n    data: result.map((r) => lookup(r, keyedData))\n  };\n}\n\n/**\n * Generate the arc slice path.\n * Reference: https://github.com/upsetjs/chartjs-chart-venn/blob/master/src/model/generate.ts#L4\n */\nexport function generateArcSlicePath(s: any, refs: any[]) {\n  return `M ${s.x1},${s.y1} ${s.arcs\n    .map((arc) => {\n      const ref = refs[arc.ref];\n      const rx = isEllipse(ref) ? ref.rx : ref.r;\n      const ry = isEllipse(ref) ? ref.ry : ref.r;\n      const rot = isEllipse(ref) ? ref.rotation : 0;\n      return `A ${rx} ${ry} ${rot} ${arc.large ? 1 : 0} ${arc.sweep ? 1 : 0} ${\n        arc.x2\n      } ${arc.y2}`;\n    })\n    .join(' ')}`;\n}\n\n/**\n * Build the layout for the given chart.\n * Reference: https://github.com/upsetjs/chartjs-chart-venn/blob/master/src/model/generate.ts#L4\n */\nfunction buildLayout({ data, uniqueCount }, box: BoundingBox) {\n  const shape = shapes[Math.min(shapes.length - 1, uniqueCount)];\n  const f = Math.min(box.width / shape.bb.width, box.height / shape.bb.height);\n  const x = f * -shape.bb.x + (box.width - f * shape.bb.width) / 2 + 0;\n  const y = f * -shape.bb.y + (box.height - f * shape.bb.height) / 2 + 0;\n  const mx = (v: number) => x + f * v;\n  const my = (v: number) => y + f * v;\n\n  const shapeSets = shape.sets.map((c, i) => ({\n    ...c,\n    ...{\n      data: data[i],\n      cx: mx(c.cx),\n      cy: my(c.cy),\n      text: {\n        x: mx(c.text.x),\n        y: my(c.text.y)\n      },\n      ...(c.icon\n        ? {\n          icon: {\n            x: mx(c.icon.x),\n            y: my(c.icon.y)\n          }\n        }\n        : {})\n    },\n    ...(isEllipse(c)\n      ? {\n        rx: c.rx * f,\n        ry: c.ry * f\n      }\n      : {\n        r: c.r * f\n      })\n  }));\n\n  const intersections = shape.intersections.map((c, i) => ({\n    text: {\n      x: mx(c.text.x),\n      y: my(c.text.y)\n    },\n    x1: mx(c.x1),\n    y1: my(c.y1),\n    data: data[i],\n    set: shapeSets[i],\n    arcs: c.arcs.map((a) => ({\n      ...a,\n      x2: mx(a.x2),\n      y2: my(a.y2)\n    }))\n  }));\n\n  return intersections.map((i) => ({\n    ...i,\n    path: generateArcSlicePath(i, shapeSets)\n  }));\n}\n\n/**\n * Generate the star euler layout.\n * Adapted from: https://github.com/upsetjs/chartjs-chart-venn\n */\nexport function starEulerLayout(data: any[], bb: BoundingBox) {\n  return buildLayout(buildData(data), bb);\n}\n","import React, { FC, ReactElement, useCallback } from 'react';\nimport {\n  ChartContainer,\n  ChartContainerChildProps,\n  ChartProps\n} from '@/common/containers';\nimport { layout } from '@upsetjs/venn.js';\nimport { VennSeries, VennSeriesProps } from './VennSeries';\nimport { CloneElement } from 'reablocks';\nimport { starEulerLayout } from './starEuler';\n\nexport interface VennDiagramData {\n  /**\n   * List of Keys for the data.\n   */\n  key: string[];\n\n  /**\n   * Size of the data keys.\n   */\n  data: number;\n}\n\nexport interface VennDiagramProps extends ChartProps {\n  /**\n   * Type of the chart.\n   */\n  type?: 'venn' | 'euler' | 'starEuler';\n\n  /**\n   * Data the chart will receive to render.\n   */\n  data: VennDiagramData[];\n\n  /**\n   * The series component that renders the arc and label components.\n   */\n  series?: ReactElement<VennSeriesProps, typeof VennSeries> | null;\n\n  /**\n   * Whether the chart is disabled.\n   */\n  disabled?: boolean;\n}\n\nexport const VennDiagram: FC<VennDiagramProps> = ({\n  id,\n  type = 'venn',\n  width,\n  height,\n  margins,\n  className,\n  containerClassName,\n  data,\n  disabled,\n  series = <VennSeries />\n}) => {\n  const renderChart = useCallback(\n    (containerProps: ChartContainerChildProps) => {\n      const normalized = data.map((d) => ({\n        key: d.key.join('|'),\n        sets: d.key,\n        size: d.data\n      }));\n\n      let layoutData;\n      if (type === 'starEuler') {\n        layoutData = starEulerLayout(normalized, {\n          height: containerProps.height,\n          width: containerProps.width\n        });\n      } else {\n        layoutData = layout(normalized, {\n          height: containerProps.height,\n          width: containerProps.width,\n          distinct: type !== 'euler'\n        });\n      }\n\n      return (\n        <CloneElement<VennSeriesProps>\n          element={series}\n          data={layoutData}\n          disabled={disabled}\n          id={containerProps.id}\n        />\n      );\n    },\n    [data, disabled, series, type]\n  );\n\n  return (\n    <ChartContainer\n      id={id}\n      width={width}\n      height={height}\n      margins={margins}\n      containerClassName={containerClassName}\n      xAxisVisible={false}\n      yAxisVisible={false}\n      center={false}\n      className={className}\n    >\n      {renderChart}\n    </ChartContainer>\n  );\n};\n","import React, {\n  FC,\n  Fragment,\n  ReactElement,\n  useMemo,\n  useRef,\n  useState\n} from 'react';\nimport { HierarchyCircularNode } from 'd3-hierarchy';\nimport { ChartTooltip, ChartTooltipProps } from '@/common/Tooltip';\nimport { CloneElement } from 'reablocks';\nimport { motion } from 'motion/react';\nimport { Gradient, GradientProps } from '@/common/Gradient';\nimport { Mask, MaskProps } from '@/common/Mask';\nimport { DEFAULT_TRANSITION } from '@/common/Motion';\nimport { useHoverIntent } from '@/common/utils/useHoverIntent';\nimport { Glow } from '@/common/Glow';\nimport { generateGlowStyles } from '@/common/Glow/utils';\nimport { getAriaLabel } from '@/common';\n\nexport interface BubbleProps {\n  /**\n   * Id set by the parent.\n   */\n  id: string;\n\n  /**\n   * The internal data object built by d3\n   */\n  data: HierarchyCircularNode<any>;\n\n  /**\n   * Fill for the bubble.\n   */\n  fill: string;\n\n  /**\n   * Whether the chart is animated or not.\n   */\n  animated?: boolean;\n\n  /**\n   * Tooltip element.\n   */\n  tooltip?: ReactElement<ChartTooltipProps, typeof ChartTooltip> | null;\n\n  /**\n   * Mask element for the bubble.\n   */\n  mask: ReactElement<MaskProps, typeof Mask> | null;\n\n  /**\n   * Glow styling for the bubble.\n   */\n  glow?: Glow;\n\n  /**\n   * Gradient shades for the bubble.\n   */\n  gradient: ReactElement<GradientProps, typeof Gradient> | null;\n\n  /**\n   * Event for when the bubble is clicked.\n   */\n  onClick?: (\n    event: React.MouseEvent<SVGCircleElement>,\n    currentItem?: HierarchyCircularNode<any>\n  ) => void;\n\n  /**\n   * Event for when the mouse enters bubble.\n   */\n  onMouseEnter?: (event) => void;\n\n  /**\n   * Event for when the mouse leaves the bubble.\n   */\n  onMouseLeave?: (event) => void;\n}\n\nexport const Bubble: FC<Partial<BubbleProps>> = ({\n  id,\n  data,\n  fill,\n  mask,\n  gradient,\n  glow,\n  onClick,\n  onMouseEnter,\n  onMouseLeave,\n  animated,\n  tooltip = <ChartTooltip />\n}) => {\n  const [internalActive, setInternalActive] = useState<boolean>(false);\n  const bubbleRef = useRef<any | null>(null);\n  const transition = animated\n    ? DEFAULT_TRANSITION\n    : { type: false as const, delay: 0 };\n\n  const { pointerOut, pointerOver } = useHoverIntent({\n    onPointerOver: (event) => {\n      setInternalActive(true);\n      onMouseEnter?.(event);\n    },\n    onPointerOut: (event) => {\n      setInternalActive(false);\n      onMouseLeave?.(event);\n    }\n  });\n\n  const arcFill =\n    gradient && !mask\n      ? `url(#gradient-${id})`\n      : mask\n        ? `url(#mask-pattern-${id})`\n        : fill;\n\n  const tooltipData = useMemo(\n    () => ({ y: data.data.data, x: data.data.key }),\n    [data]\n  );\n  const ariaLabelData = useMemo(() => getAriaLabel(tooltipData), [tooltipData]);\n\n  return (\n    <Fragment>\n      <motion.circle\n        id={`${id}-bubble`}\n        ref={bubbleRef}\n        fill={arcFill}\n        style={generateGlowStyles({ glow })}\n        initial={{\n          r: data.r,\n          cx: data.x,\n          cy: data.y\n        }}\n        animate={{\n          r: data.r,\n          cx: data.x,\n          cy: data.y\n        }}\n        transition={transition}\n        onClick={(event) => onClick && onClick(event, data)}\n        onPointerOver={pointerOver}\n        onPointerOut={pointerOut}\n        tabIndex={0}\n        aria-label={ariaLabelData}\n        role=\"graphics-document\"\n      />\n      {mask && (\n        <Fragment>\n          <Mask id={`mask-${id}`} fill={`url(#gradient-${id})`} />\n          <CloneElement<MaskProps>\n            element={mask}\n            id={`mask-pattern-${id}`}\n            fill={fill}\n          />\n        </Fragment>\n      )}\n      {gradient && (\n        <CloneElement<GradientProps>\n          element={gradient}\n          id={`gradient-${id}`}\n          color={fill}\n        />\n      )}\n      {tooltip && !tooltip.props.disabled && (\n        <CloneElement<ChartTooltipProps>\n          element={tooltip}\n          visible={!!internalActive}\n          reference={bubbleRef}\n          value={tooltipData}\n        />\n      )}\n    </Fragment>\n  );\n};\n","import React, { FC, isValidElement } from 'react';\nimport { HierarchyCircularNode } from 'd3-hierarchy';\nimport { motion } from 'motion/react';\nimport { wrapText } from '@/common/utils/wrapText';\nimport { DEFAULT_TRANSITION } from '@/common/Motion';\n\nexport interface BubbleLabelProps {\n  /**\n   * Id set by the parent.\n   */\n  id: string;\n\n  /**\n   * The internal data object built by d3\n   */\n  data: HierarchyCircularNode<any>;\n\n  /**\n   * Font size of the text.\n   */\n  fontSize?: number;\n\n  /**\n   * Font family of the text.\n   */\n  fontFamily?: string;\n\n  /**\n   * Fill of the text.\n   */\n  fill?: string;\n\n  /**\n   * Should wrap text or not.\n   */\n  wrap?: boolean;\n\n  /**\n   * Whether the chart is animated or not.\n   */\n  animated?: boolean;\n\n  /**\n   * Format label.\n   */\n  format?: (data) => any;\n}\n\nexport const BubbleLabel: FC<Partial<BubbleLabelProps>> = ({\n  id,\n  data,\n  format,\n  wrap = true,\n  fill,\n  fontSize = 14,\n  fontFamily = 'sans-serif',\n  animated\n}) => {\n  const transition = animated\n    ? DEFAULT_TRANSITION\n    : { type: false as const, delay: 0 };\n  let isElement = false;\n  let label;\n\n  if (format) {\n    label = format(data);\n    isElement = isValidElement(label);\n  }\n\n  if (!isElement) {\n    const text = wrap\n      ? wrapText({\n          key: data.data.key,\n          fontFamily,\n          fontSize,\n          width: data.r\n        })\n      : data.data.key;\n\n    return (\n      <motion.text\n        initial={{\n          x: data.x,\n          y: data.y\n        }}\n        animate={{\n          x: data.x,\n          y: data.y\n        }}\n        transition={transition}\n        id={`${id}-text`}\n        style={{ pointerEvents: 'none', fontFamily, fontSize }}\n        fill={fill}\n        textAnchor=\"middle\"\n      >\n        {text}\n      </motion.text>\n    );\n  }\n\n  return (\n    <g style={{ transform: `translate(${data.x}px, ${data.y}px)` }}>{label}</g>\n  );\n};\n","import React, { FC, Fragment, ReactElement } from 'react';\nimport { motion } from 'motion/react';\nimport { HierarchyCircularNode } from 'd3-hierarchy';\nimport { ColorSchemeType, getColor } from '@/common/color';\nimport { Bubble, BubbleProps } from './Bubble';\nimport { BubbleLabel, BubbleLabelProps } from './BubbleLabel';\nimport { CloneElement } from 'reablocks';\nimport invert from 'invert-color';\nimport chroma from 'chroma-js';\nimport { DEFAULT_TRANSITION } from '@/common/Motion';\nimport { identifier } from 'safe-identifier';\n\nexport interface BubbleSeriesProps {\n  /**\n   * Id set by the parent.\n   */\n  id: string;\n\n  /**\n   * The internal data object built by d3\n   */\n  data: HierarchyCircularNode<any>[];\n\n  /**\n   * Whether the chart is animated or not.\n   */\n  animated?: boolean;\n\n  /**\n   * Color scheme for the chart.\n   */\n  colorScheme: ColorSchemeType;\n\n  /**\n   * Bubble element.\n   */\n  bubble?: ReactElement<BubbleProps, typeof Bubble>;\n\n  /**\n   * Bubble element.\n   */\n  format?: (item: any) => ReactElement<BubbleProps, typeof Bubble>;\n\n  /**\n   * Label element.\n   */\n  label?: ReactElement<BubbleLabelProps, typeof BubbleLabel>;\n}\n\nexport const BubbleSeries: FC<Partial<BubbleSeriesProps>> = ({\n  id,\n  data,\n  colorScheme = 'cybertron',\n  animated = true,\n  bubble = <Bubble />,\n  format,\n  label = <BubbleLabel />\n}) => {\n  const transition = animated\n    ? DEFAULT_TRANSITION\n    : { type: false as const, delay: 0 };\n\n  const renderBubble = (item, index) => {\n    const fill = getColor({\n      data,\n      colorScheme,\n      point: item.data,\n      index\n    });\n\n    const textFill = fill\n      ? invert(chroma(fill).darken(0.5).hex(), true)\n      : 'white';\n\n    return (\n      <motion.g\n        key={(item.data as any).key}\n        initial={{\n          scale: 0.5,\n          opacity: 0\n        }}\n        animate={{\n          scale: 1,\n          opacity: 1\n        }}\n        transition={transition}\n      >\n        <CloneElement<BubbleProps>\n          element={format ? format(item) : bubble}\n          id={identifier(`${id}-${item.data.key}-bubble`)}\n          animated={animated}\n          data={item}\n          fill={fill}\n        />\n        <CloneElement<BubbleLabelProps>\n          element={label}\n          id={identifier(`${id}-${item.data.key}-label`)}\n          animated={animated}\n          data={item}\n          fill={textFill}\n        />\n      </motion.g>\n    );\n  };\n\n  return <Fragment>{data.map(renderBubble)}</Fragment>;\n};\n","import React, { FC, ReactElement, useCallback } from 'react';\nimport { hierarchy, pack } from 'd3-hierarchy';\nimport { CloneElement } from 'reablocks';\nimport {\n  ChartContainer,\n  ChartContainerChildProps,\n  ChartProps,\n  ChartShallowDataShape\n} from '@/common';\nimport { BubbleSeries, BubbleSeriesProps } from './BubbleSeries';\n\nexport interface BubbleChartProps extends ChartProps {\n  /**\n   * Data the chart will receive to render.\n   */\n  data: ChartShallowDataShape[];\n\n  /**\n   * The series component that renders the arc components.\n   */\n  series?: ReactElement<BubbleSeriesProps, typeof BubbleSeries>;\n}\n\nexport const BubbleChart: FC<Partial<BubbleChartProps>> = ({\n  data = [],\n  id,\n  width,\n  height,\n  className,\n  containerClassName,\n  margins = 10,\n  series = <BubbleSeries />\n}) => {\n  const getData = useCallback(\n    (cw: number, ch: number) => {\n      const bubble = pack().size([cw, ch]).padding(3);\n\n      const root = hierarchy<any>({ children: data })\n        .sum((d) => d.data)\n        .sort((a, b) => b.data - a.data);\n\n      return bubble(root).leaves();\n    },\n    [data]\n  );\n\n  const renderChart = useCallback(\n    ({ chartWidth, chartHeight, ...rest }: ChartContainerChildProps) => {\n      const circles = getData(chartWidth, chartHeight);\n\n      return (\n        <CloneElement<BubbleSeriesProps>\n          element={series}\n          id={`${rest.id}-series`}\n          data={circles}\n        />\n      );\n    },\n    [series, getData]\n  );\n\n  return (\n    <ChartContainer\n      id={id}\n      width={width}\n      height={height}\n      containerClassName={containerClassName}\n      margins={margins}\n      xAxisVisible={false}\n      yAxisVisible={false}\n      className={className}\n    >\n      {renderChart}\n    </ChartContainer>\n  );\n};\n","import React, { FC } from 'react';\nimport { calculateDimensions, wrapText } from '@/common/utils';\n\nexport interface TreeMapLabelProps {\n  /**\n   * Id set by the parent.\n   */\n  id: string;\n\n  /**\n   * The internal data object built by d3\n   */\n  data: any;\n\n  /**\n   * Font size of the text.\n   */\n  fontSize?: number;\n\n  /**\n   * Font family of the text.\n   */\n  fontFamily?: string;\n\n  /**\n   * Fill of the text.\n   */\n  fill?: string;\n\n  /**\n   * Should wrap text or not.\n   */\n  wrap?: boolean;\n\n  /**\n   * Placement of the text.\n   */\n  placement?: 'start' | 'middle' | 'end';\n}\n\nexport const TreeMapLabel: FC<Partial<TreeMapLabelProps>> = ({\n  id,\n  data,\n  fill = '#FFF',\n  wrap = true,\n  placement = 'start',\n  fontSize = 14,\n  fontFamily = 'sans-serif'\n}) => {\n  const key = data.data.key;\n  const width = data.x1 - data.x0;\n  const text = wrapText({\n    key,\n    fontFamily,\n    fontSize,\n    paddingX: 10,\n    wrap,\n    paddingY: 10,\n    width,\n    height: data.y1 - data.y0\n  });\n  const size = calculateDimensions(\n    typeof text === 'string' ? text : key,\n    fontFamily,\n    fontSize\n  );\n\n  const offsetX =\n    placement === 'start'\n      ? 10\n      : placement === 'middle'\n        ? (width - size.width) / 2\n        : width - size.width - 10;\n\n  return (\n    <g style={{ transform: `translate(${offsetX}px, 15px)` }}>\n      <text\n        id={`${id}-text`}\n        style={{ pointerEvents: 'none', fontFamily, fontSize }}\n        fill={fill}\n      >\n        {text}\n      </text>\n    </g>\n  );\n};\n","import React, {\n  FC,\n  ReactElement,\n  useRef,\n  useState,\n  Fragment,\n  useMemo\n} from 'react';\nimport { motion } from 'motion/react';\nimport chroma from 'chroma-js';\nimport { ChartTooltip, ChartTooltipProps } from '@/common/Tooltip';\nimport { CloneElement } from 'reablocks';\nimport { DEFAULT_TRANSITION } from '@/common/Motion';\nimport { useHoverIntent } from '@/common/utils/useHoverIntent';\nimport { getAriaLabel } from '@/common';\n\nexport interface TreeMapRectProps {\n  /**\n   * The internal data object built by d3\n   */\n  data: any;\n\n  /**\n   * Id set by the parent.\n   */\n  id: string;\n\n  /**\n   * Fill for the rect.\n   */\n  fill: string;\n\n  /**\n   * Whether the chart is animated or not.\n   */\n  animated?: boolean;\n\n  /**\n   * Cursor for the element.\n   */\n  cursor?: string;\n\n  /**\n   * Tooltip element.\n   */\n  tooltip?: ReactElement<ChartTooltipProps, typeof ChartTooltip> | null;\n\n  /**\n   * Event for when the arc is clicked.\n   */\n  onClick?: (event, data) => void;\n\n  /**\n   * Event for when the arc has mouse enter.\n   */\n  onMouseEnter?: (event, data) => void;\n\n  /**\n   * Event for when the arc has mouse leave.\n   */\n  onMouseLeave?: (event, data) => void;\n}\n\nexport const TreeMapRect: FC<Partial<TreeMapRectProps>> = ({\n  data,\n  fill,\n  animated,\n  cursor = 'pointer',\n  tooltip = <ChartTooltip />,\n  onMouseEnter,\n  onMouseLeave,\n  onClick\n}) => {\n  const [internalActive, setInternalActive] = useState<boolean>(false);\n  const rectRef = useRef<any | null>(null);\n  const transition = animated\n    ? DEFAULT_TRANSITION\n    : { type: false as const, delay: 0 };\n  const currentFill = internalActive ? chroma(fill).darken(0.8).hex() : fill;\n\n  const { pointerOut, pointerOver } = useHoverIntent({\n    onPointerOver: (event) => {\n      setInternalActive(true);\n      onMouseEnter?.(event, data);\n    },\n    onPointerOut: (event) => {\n      setInternalActive(false);\n      onMouseLeave?.(event, data);\n    }\n  });\n\n  const tooltipLabel = useMemo(() => {\n    const getKey = (node): string[] => {\n      if (!node.parent) {\n        return [];\n      }\n      return [...getKey(node.parent), node.data.key];\n    };\n    return getKey(data).join(' → ');\n  }, [data]);\n\n  const tooltipData = useMemo(\n    () => ({ y: data.value, x: tooltipLabel }),\n    [data, tooltipLabel]\n  );\n  const ariaLabelData = useMemo(() => getAriaLabel(tooltipData), [tooltipData]);\n\n  return (\n    <Fragment>\n      <motion.rect\n        ref={rectRef}\n        initial={{\n          fill: currentFill,\n          width: data.x1 - data.x0,\n          height: data.y1 - data.y0\n        }}\n        animate={{\n          fill: currentFill,\n          width: data.x1 - data.x0,\n          height: data.y1 - data.y0\n        }}\n        style={{ cursor }}\n        transition={transition}\n        onClick={(event) => {\n          onClick?.(event, data);\n        }}\n        onPointerOver={pointerOver}\n        onPointerOut={pointerOut}\n        tabIndex={0}\n        aria-label={ariaLabelData}\n        role=\"graphics-document\"\n      />\n      {tooltip && !tooltip.props.disabled && (\n        <CloneElement<ChartTooltipProps>\n          element={tooltip}\n          visible={!!internalActive}\n          reference={rectRef}\n          value={tooltipData}\n        />\n      )}\n    </Fragment>\n  );\n};\n","import React, { FC, Fragment, ReactElement } from 'react';\nimport { motion } from 'motion/react';\nimport { CloneElement } from 'reablocks';\nimport { ColorSchemeType, getColor } from '@/common/color';\nimport { TreeMapLabel, TreeMapLabelProps } from './TreeMapLabel';\nimport { TreeMapRect, TreeMapRectProps } from './TreeMapRect';\nimport invert from 'invert-color';\nimport chroma from 'chroma-js';\nimport { DEFAULT_TRANSITION } from '@/common/Motion';\n\nexport interface TreeMapSeriesProps {\n  /**\n   * Id set by the parent.\n   */\n  id: string;\n\n  /**\n   * The internal data object built by d3\n   */\n  data: any[];\n\n  /**\n   * Whether the chart is animated or not.\n   */\n  animated?: boolean;\n\n  /**\n   * Color scheme for the chart.\n   */\n  colorScheme: ColorSchemeType;\n\n  /**\n   * Rect element to be rendered.\n   */\n  rect?: ReactElement<TreeMapRectProps, typeof TreeMapRect>;\n\n  /**\n   * Label element to be rendered.\n   */\n  label?: ReactElement<TreeMapLabelProps, typeof TreeMapLabel>;\n}\n\nexport const TreeMapSeries: FC<Partial<TreeMapSeriesProps>> = ({\n  id,\n  data,\n  colorScheme = 'cybertron',\n  animated = true,\n  rect = <TreeMapRect />,\n  label = <TreeMapLabel />\n}) => {\n  const transition = animated\n    ? DEFAULT_TRANSITION\n    : { type: false as const, delay: 0 };\n\n  const renderItem = (item: any, index: number) => {\n    const fill = getColor({\n      data,\n      colorScheme,\n      point: item.data,\n      index\n    });\n\n    const textFill = fill\n      ? invert(chroma(fill).darken(0.5).hex(), true)\n      : 'white';\n\n    return (\n      <motion.g\n        key={item.data.key}\n        initial={{\n          scale: 0.5,\n          opacity: 0,\n          x: item.x0,\n          y: item.y0\n        }}\n        animate={{\n          scale: 1,\n          opacity: 1,\n          x: item.x0,\n          y: item.y0\n        }}\n        transition={transition}\n      >\n        <CloneElement<TreeMapRectProps>\n          element={rect}\n          id={`${id}-${item.data.key}-rect`}\n          animated={animated}\n          data={item}\n          fill={fill}\n        />\n        <CloneElement<TreeMapLabelProps>\n          element={label}\n          id={`${id}-${item.data.key}-label`}\n          data={item}\n          fill={textFill}\n        />\n      </motion.g>\n    );\n  };\n\n  return <Fragment>{data.map((d, index) => renderItem(d, index))}</Fragment>;\n};\n","import React, { FC, ReactElement, useCallback } from 'react';\nimport {\n  ChartContainer,\n  ChartContainerChildProps,\n  ChartProps\n} from '@/common/containers/ChartContainer';\nimport { ChartNestedDataShape, ChartShallowDataShape } from '@/common/data';\nimport { hierarchy, treemap, treemapSquarify } from 'd3-hierarchy';\nimport { TreeMapSeries, TreeMapSeriesProps } from './TreeMapSeries';\nimport { CloneElement } from 'reablocks';\n\nexport interface TreeMapProps extends ChartProps {\n  /**\n   * Data the chart will receive to render.\n   */\n  data: ChartShallowDataShape[] | ChartNestedDataShape[];\n\n  /**\n   * The series component that renders the components.\n   */\n  series?: ReactElement<TreeMapSeriesProps, typeof TreeMapSeries>;\n\n  /**\n   * Inner padding for the treemap. Defaults to 5.\n   */\n  paddingInner?: number;\n\n  /**\n   * Outer padding for the treemap. Defaults to 5.\n   */\n  paddingOuter?: number;\n\n  /**\n   * Padding top for the treemap. This is used for the title\n   * spacing in nested situations. Defaults to 30.\n   */\n  paddingTop?: number;\n}\n\nexport const TreeMap: FC<Partial<TreeMapProps>> = ({\n  data = [],\n  id,\n  containerClassName,\n  paddingInner = 5,\n  paddingTop = 30,\n  paddingOuter = 5,\n  width,\n  height,\n  className,\n  margins = 0,\n  series = <TreeMapSeries />\n}) => {\n  const getData = useCallback(\n    (cw: number, ch: number) => {\n      const root = hierarchy<any>({ data }, (d) => d.data)\n        .sum((d) => d.data)\n        .sort((a, b) => b.data - a.data);\n\n      const t = treemap()\n        .size([cw, ch])\n        .tile(treemapSquarify)\n        .round(true)\n        .paddingInner(paddingInner)\n        .paddingOuter(paddingOuter)\n        .paddingTop(paddingTop);\n\n      const tree = t(root);\n      const nodes = [];\n\n      const getAllNodes = (node) => {\n        if (node?.parent) {\n          // Don't add root node\n          nodes.push(node);\n        }\n        for (let child of node?.children || []) {\n          getAllNodes(child);\n        }\n      };\n\n      getAllNodes(tree);\n      return nodes;\n    },\n    [data, paddingInner, paddingOuter, paddingTop]\n  );\n\n  const renderChart = useCallback(\n    ({ chartWidth, chartHeight, ...rest }: ChartContainerChildProps) => {\n      const datas = getData(chartWidth, chartHeight);\n      return (\n        <CloneElement<TreeMapSeriesProps>\n          element={series}\n          {...rest}\n          id={`${id || rest.id}-series`}\n          data={datas}\n        />\n      );\n    },\n    [series, getData, id]\n  );\n\n  return (\n    <ChartContainer\n      id={id}\n      width={width}\n      height={height}\n      containerClassName={containerClassName}\n      margins={margins}\n      xAxisVisible={false}\n      yAxisVisible={false}\n      className={className}\n    >\n      {renderChart}\n    </ChartContainer>\n  );\n};\n","import React, { FC, useCallback } from 'react';\nimport {\n  ChartInternalDataTypes,\n  ChartShallowDataShape,\n  ColorSchemeType,\n  DEFAULT_TRANSITION,\n  formatValue,\n  getAriaLabel,\n  getColor\n} from '@/common';\nimport { motion } from 'motion/react';\nimport classNames from 'classnames';\nimport css from './BarListSeries.module.css';\n\nexport type BarListLabelPosition = 'none' | 'top' | 'start' | 'end' | 'bottom';\n\nexport interface BarListSeriesProps {\n  /**\n   * Data for the chart.\n   */\n  data?: ChartShallowDataShape[];\n\n  /**\n   * Color scheme for the chart.\n   */\n  colorScheme?: ColorSchemeType;\n\n  /**\n   * The label position.\n   */\n  labelPosition?: BarListLabelPosition;\n\n  /**\n   * The value position.\n   */\n  valuePosition?: BarListLabelPosition;\n\n  /**\n   * The bar item class name.\n   */\n  itemClassName?: string;\n\n  /**\n   * Label css class name.\n   */\n  labelClassName?: string;\n\n  /**\n   * Label value class name.\n   */\n  valueClassName?: string;\n\n  /**\n   * Bar component class name.\n   */\n  barClassName?: string;\n\n  /**\n   * Bar container class name.\n   */\n  outerBarClassName?: string;\n\n  /**\n   * Custom label format.\n   */\n  labelFormat?: (data: ChartInternalDataTypes, index: number) => any;\n\n  /**\n   * Custom value format\n   */\n  valueFormat?: (data: ChartInternalDataTypes, index: number) => any;\n\n  /**\n   * Item was clicked.\n   */\n  onItemClick?: (data: ChartShallowDataShape) => void;\n\n  /**\n   * Item had mouse enter.\n   */\n  onItemMouseEnter?: (data: ChartShallowDataShape) => void;\n\n  /**\n   * Item had mouse leave.\n   */\n  onItemMouseLeave?: (data: ChartShallowDataShape) => void;\n}\n\nexport const BarListSeries: FC<Partial<BarListSeriesProps>> = ({\n  data,\n  colorScheme = 'cybertron',\n  itemClassName,\n  labelClassName,\n  outerBarClassName,\n  valueClassName,\n  labelFormat,\n  barClassName,\n  labelPosition = 'top',\n  valuePosition = 'none',\n  valueFormat,\n  onItemClick,\n  onItemMouseEnter,\n  onItemMouseLeave\n}) => {\n  const renderBar = useCallback(\n    (item, index) => {\n      const fill = getColor({\n        data,\n        colorScheme,\n        point: item.data,\n        index\n      });\n\n      return (\n        <div className={classNames(css.outerBar, outerBarClassName)}>\n          <motion.div\n            transition={DEFAULT_TRANSITION}\n            className={classNames(css.bar, barClassName)}\n            initial={{ width: '0%' }}\n            animate={{ width: `${item.data}%` }}\n            style={{ background: fill }}\n            tabIndex={0}\n            aria-label={getAriaLabel(item)}\n            role=\"graphics-document\"\n          />\n        </div>\n      );\n    },\n    [barClassName, outerBarClassName, colorScheme, data]\n  );\n\n  return (\n    <>\n      {data.map((d, i) => {\n        const label = labelFormat ? labelFormat(d.key as any, i) : d.key;\n\n        const valueLabel = valueFormat\n          ? valueFormat(d.metadata.value, i)\n          : formatValue(d.metadata.value);\n\n        return (\n          <div\n            key={d.key as string}\n            role=\"listitem\"\n            className={classNames(css.item, itemClassName, {\n              [css.clickable]: onItemClick,\n              [css.valueBottom]: valuePosition === 'bottom',\n              [css.valueStart]: valuePosition === 'start',\n              [css.valueEnd]: valuePosition === 'end',\n              [css.valueNone]: valuePosition === 'none',\n              [css.labelBottom]: labelPosition === 'bottom',\n              [css.labelTop]: labelPosition === 'top',\n              [css.labelStart]: labelPosition === 'start',\n              [css.labelEnd]: labelPosition === 'end',\n              [css.labelNone]: labelPosition === 'none'\n            })}\n            onMouseEnter={() => onItemMouseEnter?.(d)}\n            onMouseLeave={() => onItemMouseLeave?.(d)}\n            onClick={() => onItemClick?.(d)}\n          >\n            <label\n              title={label}\n              className={classNames(css.label, labelClassName)}\n            >\n              {label}\n            </label>\n            {renderBar(d, i)}\n            <label\n              title={valueLabel}\n              className={classNames(css.valueLabel, valueClassName)}\n            >\n              <small>{valueLabel}</small>\n            </label>\n          </div>\n        );\n      })}\n    </>\n  );\n};\n","import { max } from 'd3-array';\nimport { scaleLinear } from 'd3-scale';\nimport { motion } from 'motion/react';\nimport { CloneElement, useId } from 'reablocks';\nimport React, { FC, ReactElement, useMemo } from 'react';\nimport { ChartShallowDataShape } from '@/common';\nimport { BarListSeries, BarListSeriesProps } from './BarListSeries';\n\nexport interface BarListProps {\n  /**\n   * ID for the chart.\n   */\n  id?: string;\n\n  /**\n   * CSS Classname for the element.\n   */\n  className?: string;\n\n  /**\n   * Style for the element.\n   */\n  style?: React.CSSProperties;\n\n  /**\n   * Data for the chart.\n   */\n  data: ChartShallowDataShape[];\n\n  /**\n   * Sort direction of the data.\n   */\n  sortDirection?: 'asc' | 'desc' | 'none';\n\n  /**\n   * Series to render.\n   */\n  series?: ReactElement<BarListSeriesProps, typeof BarList>;\n\n  /**\n   * Whether the values are percentages or absolute values.\n   * In the latter case, the chart would be relative\n   */\n  type?: 'percent' | 'count';\n}\n\nexport const BarList: FC<BarListProps> = ({\n  id,\n  className,\n  style,\n  data = [],\n  sortDirection = 'desc',\n  series = <BarListSeries />,\n  type = 'count'\n}) => {\n  const curId = useId(id);\n\n  const mashedData = useMemo(() => {\n    const maxVal = type === 'count' ? max(data, (d) => d.data as number) : 100;\n    const domainVal = maxVal === 0 ? [0] : [0, maxVal];\n    const groupScale = scaleLinear()\n      .domain(domainVal as [number, number])\n      .rangeRound([0, 100]);\n\n    const mashed = data.map((d) => ({\n      ...d,\n      data: groupScale(d.data as number),\n      metadata: {\n        value: d.data,\n        percent: (data.length * (d.data as number)) / 100\n      }\n    }));\n\n    if (sortDirection === 'asc') {\n      mashed.sort((a, b) => a.data - b.data);\n    } else if (sortDirection === 'desc') {\n      mashed.sort((a, b) => b.data - a.data);\n    }\n\n    return mashed;\n  }, [data, sortDirection]);\n\n  return (\n    <motion.section\n      role=\"list\"\n      variants={{\n        initial: {\n          transition: {\n            staggerChildren: 0.05,\n            staggerDirection: -1 as any\n          }\n        },\n        animate: {\n          transition: {\n            staggerChildren: 0.07,\n            delayChildren: 0.2\n          }\n        }\n      }}\n      id={curId}\n      className={className}\n      style={style}\n    >\n      <CloneElement<BarListSeriesProps> element={series} data={mashedData} />\n    </motion.section>\n  );\n};\n","import React, { FC } from 'react';\nimport { motion } from 'motion/react';\nimport { DEFAULT_TRANSITION, schemes } from '@/common';\n\nexport interface MeterColumnProps {\n  /**\n   * The value of the meter.\n   */\n  value: number;\n\n  /**\n   * The height of the column.\n   */\n  height?: number;\n\n  /**\n   * The index of the column.\n   */\n  index: number;\n\n  /**\n   * The scale to use.\n   */\n  scale: any;\n\n  /**\n   * The active fill color.\n   */\n  activeFill: string;\n\n  /**\n   * The inactive fill color.\n   */\n  inActiveFill: string;\n\n  /**\n   * Additional class names to apply.\n   */\n  className?: string;\n\n  /**\n   * The total number of columns. Set internally.\n   */\n  count?: number;\n\n  /**\n   * Whether to animate the column.\n   */\n  animated?: boolean;\n}\n\nexport const MeterColumn: FC<Partial<MeterColumnProps>> = ({\n  index,\n  scale,\n  value,\n  count,\n  height = 32,\n  className,\n  animated = true,\n  activeFill = schemes.cybertron[0],\n  inActiveFill = '#414242'\n}) => {\n  const isActive = scale(index) <= scale(value);\n  const fill = isActive ? activeFill : inActiveFill;\n  const transition = animated\n    ? {\n        ...DEFAULT_TRANSITION,\n        delay: (index / count) * 0.5\n      }\n    : {\n        type: false as const,\n        delay: 0\n      };\n\n  return (\n    <motion.div\n      key={index}\n      initial={{\n        background: inActiveFill,\n        height\n      }}\n      animate={{\n        background: fill,\n        height\n      }}\n      transition={transition}\n      className={className}\n    />\n  );\n};\n","import React, { FC, ReactElement } from 'react';\nimport { scaleLinear } from 'd3-scale';\nimport classNames from 'classnames';\nimport { MeterColumn, MeterColumnProps } from './MeterColumn';\nimport { CloneElement } from 'reablocks';\nimport css from './Meter.module.css';\n\nexport interface MeterProps {\n  /**\n   * The value of the meter.\n   */\n  value: number;\n\n  /**\n   * The minimum value of the meter.\n   */\n  min?: number;\n\n  /**\n   * The maximum value of the meter.\n   */\n  max?: number;\n\n  /**\n   * The number of columns to display.\n   */\n  columns?: number;\n\n  /**\n   * Additional class names to apply.\n   */\n  className?: string;\n\n  /**\n   * The gap between columns.\n   */\n  gap?: number;\n\n  /**\n   * Additional styles to apply.\n   */\n  style?: React.CSSProperties;\n\n  /**\n   * The column to render.\n   */\n  column: ReactElement<MeterColumnProps, typeof MeterColumn> | null;\n}\n\nexport const Meter: FC<Partial<MeterProps>> = ({\n  min = 0,\n  max = 100,\n  className,\n  column = <MeterColumn />,\n  gap = 15,\n  style = {},\n  value,\n  columns = 10\n}) => {\n  const scale = scaleLinear().domain([min, max]).range([0, 100]);\n  const cols = scale.ticks(columns);\n\n  return (\n    <div\n      className={classNames(css.container, className)}\n      style={{ gap: `${gap}px`, ...style }}\n    >\n      {cols.map((index) => (\n        <CloneElement<MeterColumnProps>\n          element={column}\n          key={index}\n          count={cols.length}\n          index={index}\n          scale={scale}\n          value={value}\n        />\n      ))}\n    </div>\n  );\n};\n","import React, { FC } from 'react';\nimport {\n  RadialAreaSeries,\n  RadialAreaSeriesProps,\n  RadialPointSeries,\n  RadialPointSeriesType\n} from '@/RadialAreaChart';\n\nexport interface RadarChartSeriesProps extends RadialAreaSeriesProps {}\n\nexport const RadarChartSeries: FC<Partial<RadarChartSeriesProps>> = (props) => (\n  <RadialAreaSeries {...RADAR_CHART_SERIES_DEFAULT_PROPS} {...props} />\n);\n\nexport const RADAR_CHART_SERIES_DEFAULT_PROPS = {\n  area: null,\n  type: 'grouped' as RadialPointSeriesType,\n  symbols: <RadialPointSeries show />\n};\n","import React, { FC } from 'react';\nimport { ChartNestedDataShape } from '@/common/data';\nimport { RadialAreaChart, RadialAreaChartProps } from '@/RadialAreaChart';\nimport {\n  RadialAxis,\n  RadialAxisArcLine,\n  RadialAxisArcSeries\n} from '@/common/Axis/RadialAxis';\nimport {\n  RADAR_CHART_SERIES_DEFAULT_PROPS,\n  RadarChartSeries\n} from './RadarChartSeries';\n\nexport interface RadarChartProps extends RadialAreaChartProps {\n  data: ChartNestedDataShape[];\n}\n\nexport const RadarChart: FC<Partial<RadarChartProps>> = (props) => (\n  <RadialAreaChart\n    {...props}\n    series={\n      <RadarChartSeries\n        {...RADAR_CHART_SERIES_DEFAULT_PROPS}\n        {...props?.series?.props}\n      />\n    }\n    axis={\n      <RadialAxis\n        type=\"category\"\n        arcs={\n          <RadialAxisArcSeries\n            count={5}\n            arc={null}\n            line={<RadialAxisArcLine />}\n          />\n        }\n      />\n    }\n  />\n);\n","import React, { FC, ReactElement, useMemo } from 'react';\nimport { ChartShallowDataShape } from '@/common/data';\nimport { area } from 'd3-shape';\nimport {\n  InterpolationTypes,\n  getAriaLabel,\n  interpolate,\n  mergeDefaultProps\n} from '@/common/utils';\nimport { ColorSchemeType, getColor, schemes } from '@/common/color';\nimport { Gradient, GradientProps, GradientStop } from '@/common/Gradient';\nimport { CloneElement } from 'reablocks';\nimport { motion } from 'motion/react';\nimport {\n  ChartTooltip,\n  TooltipArea,\n  TooltipAreaProps,\n  TooltipTemplate\n} from '@/common/Tooltip';\nimport { Glow } from '@/common/Glow';\nimport { generateGlowStyles } from '@/common/Glow/utils';\n\nexport interface FunnelArcProps {\n  /**\n   * Unique identifier for the arc. Set internally by `FunnelChart`.\n   */\n  id: string;\n\n  /**\n   * Data to render the funnel. Set internally by `FunnelChart`.\n   */\n  data: ChartShallowDataShape[];\n\n  /**\n   * Opacity of the funnel arc.\n   */\n  opacity?: number;\n\n  /**\n   * Index of the funnel arc. Set internally by `FunnelChart`.\n   */\n  index?: number;\n\n  /**\n   * The chart funnel style to use.\n   */\n  variant?: 'default' | 'layered';\n\n  /**\n   * xScale for the funnel. Set internally by `FunnelChart`.\n   */\n  xScale: any;\n\n  /**\n   * yScale for the funnel. Set internally by `FunnelChart`.\n   */\n  yScale: any;\n\n  /**\n   * Interpolation for the area. Set internally by `AreaSeries`.\n   */\n  interpolation: InterpolationTypes;\n\n  /**\n   * Color scheme for the chart.\n   */\n  colorScheme: ColorSchemeType;\n\n  /**\n   * Gradient to apply to the area.\n   */\n  gradient: ReactElement<GradientProps, typeof Gradient> | null;\n\n  /**\n   * Glow styling for the arc.\n   */\n  glow?: Glow;\n\n  /**\n   * Tooltip for the chart area.\n   */\n  tooltip: ReactElement<TooltipAreaProps, typeof TooltipArea>;\n}\n\nexport const FunnelArc: FC<Partial<FunnelArcProps>> = (props) => {\n  const {\n    data,\n    id,\n    xScale,\n    opacity,\n    index,\n    variant,\n    yScale,\n    interpolation,\n    colorScheme,\n    gradient,\n    glow,\n    tooltip\n  } = mergeDefaultProps(FUNNEL_ARC_DEFAULT_PROPS, props);\n\n  // Note: Need to append the last section\n  const internalData = [...data, data[data.length - 1]];\n\n  const areaGenerator = area()\n    .curve(interpolate(interpolation))\n    .x((_d, i) => xScale(i))\n    .y0(yScale(0))\n    .y1(({ data }: any) => yScale(data));\n\n  const areaMirrorGenerator = area()\n    .curve(interpolate(interpolation))\n    .x((_d, i) => xScale(i))\n    .y0(yScale(0))\n    .y1(({ data }: any) => yScale(-data));\n\n  const fillColor = getColor({\n    data,\n    domain: [0, 1, 2, 3],\n    colorScheme,\n    key: index\n  });\n\n  const fillTop = gradient ? `url(#gradient-${id}-top)` : fillColor;\n  const fillBottom = gradient ? `url(#gradient-${id}-bottom)` : fillColor;\n\n  const [height] = yScale.range();\n  const [_, width] = xScale.range();\n\n  const ariaLabelData = useMemo(() => getAriaLabel(data), [data]);\n\n  return (\n    <CloneElement<TooltipAreaProps>\n      element={tooltip}\n      xScale={xScale}\n      yScale={yScale}\n      data={data as any}\n      height={height}\n      width={width}\n      tooltip={\n        <ChartTooltip\n          followCursor\n          content={(data, color) => {\n            const value = {\n              x: data.key,\n              y: data.data,\n              value: data.data\n            };\n\n            return <TooltipTemplate value={value} color={color} />;\n          }}\n        />\n      }\n    >\n      <g\n        pointerEvents={tooltip ? 'none' : 'auto'}\n        style={generateGlowStyles({ glow })}\n        aria-label={ariaLabelData}\n        role=\"graphics-document\"\n      >\n        <motion.path\n          d={areaGenerator(internalData as any[])}\n          fill={fillTop}\n          stroke=\"none\"\n          initial={{\n            opacity: 0\n          }}\n          animate={{\n            opacity\n          }}\n        />\n        <motion.path\n          d={areaMirrorGenerator(internalData as any[])}\n          fill={fillBottom}\n          stroke=\"none\"\n          initial={{\n            opacity: 0\n          }}\n          animate={{\n            opacity\n          }}\n        />\n        {gradient && (\n          <>\n            <CloneElement<GradientProps>\n              element={gradient}\n              id={`gradient-${id}-top`}\n              color={fillColor}\n            />\n            <CloneElement<GradientProps>\n              element={gradient}\n              id={`gradient-${id}-bottom`}\n              color={fillColor}\n            />\n          </>\n        )}\n      </g>\n    </CloneElement>\n  );\n};\n\nexport const FUNNEL_ARC_DEFAULT_PROPS: Partial<FunnelArcProps> = {\n  gradient: (\n    <Gradient\n      direction=\"horizontal\"\n      stops={[\n        <GradientStop offset=\"0%\" stopOpacity={1} key=\"stop\" />,\n        <GradientStop offset=\"80%\" stopOpacity={0.5} key=\"start\" />\n      ]}\n    />\n  ),\n  interpolation: 'smooth',\n  colorScheme: schemes.cybertron[0],\n  variant: 'default',\n  opacity: 1,\n  tooltip: null\n};\n","import React, { FC, useCallback } from 'react';\nimport { ChartShallowDataShape } from '@/common/data';\nimport { calculateDimensions, formatValue, wrapText } from '@/common/utils';\nimport { motion } from 'motion/react';\n\nexport interface FunnelAxisLabelProps {\n  /**\n   * Data object for the label. Set internally by `FunnelAxis`.\n   */\n  data: ChartShallowDataShape;\n\n  /**\n   * Index of the label. Set internally by `FunnelAxis`.\n   */\n  index: number;\n\n  /**\n   * Color of the text.\n   */\n  fill: string;\n\n  /**\n   * Font size of the text.\n   */\n  fontSize: number;\n\n  /**\n   * Font family of the text.\n   */\n  fontFamily: string;\n\n  /**\n   * Padding of the label.\n   */\n  padding?: number;\n\n  /**\n   * Class name to apply to the text.\n   */\n  className?: string;\n\n  /**\n   * xScale for the funnel. Set internally by `FunnelAxis`.\n   */\n  xScale: any;\n\n  /**\n   * yScale for the funnel. Set internally by `FunnelAxis`.\n   */\n  yScale: any;\n\n  /**\n   * Positioning of the label.\n   */\n  position?: 'top' | 'middle' | 'bottom';\n\n  /**\n   * Whether to show the value of the data.\n   * Defaults to `true`.\n   */\n  showValue?: boolean;\n\n  /**\n   * Visibility of the label.\n   */\n  labelVisibility?: 'auto' | 'always';\n}\n\nexport const FunnelAxisLabel: FC<Partial<FunnelAxisLabelProps>> = ({\n  data,\n  index,\n  xScale,\n  yScale,\n  fontFamily = 'sans-serif',\n  padding = 10,\n  fontSize = 13,\n  fill = '#fff',\n  className,\n  position = 'middle',\n  showValue = true,\n  labelVisibility = 'auto'\n}) => {\n  const x = xScale(index) + padding;\n  const [height] = yScale.range();\n  const y = height / 2 + padding;\n  const label = data.key as string;\n  const nextOffset = xScale(index + 1);\n  const width = (nextOffset ? nextOffset - xScale(index) : 0) - padding;\n  const size = calculateDimensions(label, fontFamily, fontSize);\n  const text = wrapText({\n    key: label,\n    size,\n    paddingY: padding,\n    paddingX: padding,\n    width,\n    height,\n    fontFamily,\n    fontSize,\n    visibility: labelVisibility\n  });\n\n  const getTransformString = useCallback(() => {\n    let transform: string;\n\n    switch (position) {\n      case 'top':\n        transform = `translate(${x}, ${fontSize * 3})`; // fontSize * 3 is to account for the total height of the label\n        break;\n      case 'middle':\n        transform = `translate(${x}, ${y})`;\n        break;\n      case 'bottom':\n        {\n          // If the text is wrapping, we need to account for the height of all the lines\n          const textWrapHeight = Array.isArray(text)\n            ? text.slice(1).reduce((acc, curr) => acc + curr.props.dy, 0) // Don't include first line's dy in order to align properly\n            : 0;\n          transform = `translate(${x}, ${height - padding - textWrapHeight})`;\n        }\n        break;\n    }\n\n    return transform;\n  }, [position, x, fontSize, y, text, height, padding]);\n\n  // If the labels don't fit, just hide them\n  if (labelVisibility !== 'always' && size.width > width) {\n    return null;\n  }\n\n  return (\n    <motion.g\n      transform={getTransformString()}\n      initial={{ opacity: 0 }}\n      animate={{ opacity: 1 }}\n    >\n      {showValue && (\n        <text\n          pointerEvents=\"none\"\n          fill={fill}\n          y={-(fontSize + padding)}\n          className={className}\n          dominantBaseline=\"middle\"\n          fontFamily={fontFamily}\n          fontSize={fontSize * 2}\n        >\n          {formatValue(data.data as any)}\n        </text>\n      )}\n      <text\n        pointerEvents=\"none\"\n        fill={fill}\n        className={className}\n        dominantBaseline=\"middle\"\n        fontFamily={fontFamily}\n        fontSize={fontSize}\n      >\n        {text}\n      </text>\n    </motion.g>\n  );\n};\n","import React, { FC } from 'react';\n\nexport interface FunnelAxisLineProps {\n  /**\n   * Color of the axis lines.\n   */\n  strokeColor: string;\n\n  /**\n   * Width of the axis lines.\n   */\n  strokeWidth: number;\n\n  /**\n   * xScale for the funnel. Set internally by `FunnelChart`.\n   */\n  xScale: any;\n\n  /**\n   * yScale for the funnel. Set internally by `FunnelChart`.\n   */\n  yScale: any;\n\n  /**\n   * Index of the line. Set internally by `FunnelAxis`.\n   */\n  index: number;\n}\n\nexport const FunnelAxisLine: FC<Partial<FunnelAxisLineProps>> = ({\n  strokeColor = '#333',\n  strokeWidth = 2,\n  yScale,\n  xScale,\n  index\n}) => {\n  const [height] = yScale.range();\n\n  return (\n    <line\n      x1={xScale(index)}\n      y1={0}\n      x2={xScale(index)}\n      y2={height}\n      stroke={strokeColor}\n      strokeWidth={strokeWidth}\n      pointerEvents=\"none\"\n    />\n  );\n};\n","import React, { FC, Fragment, ReactElement } from 'react';\nimport { ChartShallowDataShape } from '@/common/data';\nimport { range } from 'd3-array';\nimport { FunnelAxisLabel, FunnelAxisLabelProps } from './FunnelAxisLabel';\nimport { CloneElement } from 'reablocks';\nimport { FunnelAxisLine, FunnelAxisLineProps } from './FunnelAxisLine';\n\nexport interface FunnelAxisProps {\n  /**\n   * Data to render the funnel. Set internally by `FunnelChart`.\n   */\n  data: ChartShallowDataShape[];\n\n  /**\n   * xScale for the funnel. Set internally by `FunnelChart`.\n   */\n  xScale: any;\n\n  /**\n   * yScale for the funnel. Set internally by `FunnelChart`.\n   */\n  yScale: any;\n\n  /**\n   * The funnel axis line.\n   */\n  line?: ReactElement<FunnelAxisLineProps, typeof FunnelAxisLine> | null;\n\n  /**\n   * Label component for the axis.\n   */\n  label?: ReactElement<FunnelAxisLabelProps, typeof FunnelAxisLabel> | null;\n}\n\nexport const FunnelAxis: FC<Partial<FunnelAxisProps>> = ({\n  data,\n  xScale,\n  yScale,\n  line = <FunnelAxisLine />,\n  label = <FunnelAxisLabel />\n}) => {\n  const lines = range(0, data.length);\n\n  return (\n    <>\n      {lines.map((index) => (\n        <Fragment key={index}>\n          {line && index !== 0 && (\n            <CloneElement<FunnelAxisLineProps>\n              element={line}\n              index={index}\n              xScale={xScale}\n              yScale={yScale}\n            />\n          )}\n          {label && (\n            <CloneElement<FunnelAxisLabelProps>\n              element={label}\n              index={index}\n              data={data[index]}\n              xScale={xScale}\n              yScale={yScale}\n            />\n          )}\n        </Fragment>\n      ))}\n    </>\n  );\n};\n","import React, { MouseEvent, useCallback, useMemo } from 'react';\nimport { FUNNEL_ARC_DEFAULT_PROPS, FunnelArc } from './FunnelArc';\nimport { CloneElement } from 'reablocks';\nimport { FunnelArcProps } from './FunnelArc';\nimport { FunnelAxis, FunnelAxisProps } from './FunnelAxis';\nimport {\n  ChartShallowDataShape,\n  getClosestContinousScalePoint,\n  getPositionForTarget\n} from '@/common';\nimport { ClickEvent } from '@/common/types';\nimport { scaleLinear } from 'd3-scale';\nimport { max } from 'd3-array';\n\nexport interface FunnelSeriesProps {\n  /**\n   * Parsed data shape. Set internally by `FunnelChart`.\n   */\n  data: ChartShallowDataShape[];\n\n  /**\n   * Id of the funnel chart. Set internally by `FunnelChart`.\n   */\n  id: string;\n\n  /**\n   * The arc component that renders the funnel shape.\n   */\n  arc: React.ReactElement<FunnelArcProps, typeof FunnelArc>;\n\n  /**\n   * The axis component that renders the funnel axis.\n   */\n  axis: React.ReactElement<FunnelAxisProps, typeof FunnelAxis>;\n\n  /**\n   * Height of the chart. Set internally by `FunnelChart`.\n   */\n  height: number;\n\n  /**\n   * Width of the chart. Set internally by `FunnelChart`.\n   */\n  width: number;\n\n  /**\n   * Event for when a segment is clicked.\n   */\n  onSegmentClick?: (e: ClickEvent) => void;\n}\n\nexport const FunnelSeries: React.FC<Partial<FunnelSeriesProps>> = ({\n  data,\n  id,\n  arc = <FunnelArc />,\n  axis = <FunnelAxis />,\n  height,\n  width,\n  onSegmentClick\n}) => {\n  const arcProps = useMemo(\n    () => ({ ...FUNNEL_ARC_DEFAULT_PROPS, ...(arc?.props ?? {}) }),\n    [arc?.props]\n  );\n\n  // Calculate the funnel data on mount and when data changes\n  const getScales = useCallback(\n    (height: number, width: number) => {\n      const yScale = scaleLinear()\n        .domain([\n          -max(data, ({ data }) => data as number),\n          max(data, ({ data }) => data as number)\n        ])\n        .nice()\n        .range([height, 0]);\n\n      const xScale = scaleLinear().domain([0, data.length]).range([0, width]);\n\n      const transformedData = data.map((d, i) => ({\n        ...d,\n        key: d.key,\n        x: xScale(i),\n        i\n      }));\n\n      return {\n        data: transformedData,\n        yScale,\n        xScale\n      };\n    },\n    [data]\n  );\n\n  const { datas, halfOffset } = useMemo(() => {\n    // The 'layered' variant is actually just a series of funnel charts\n    // laid on top of each other to create the effect of a layered funnel.\n    if (arcProps.variant === 'layered') {\n      const offset = height / 4;\n      const halfOffset = offset / 2;\n\n      return {\n        halfOffset,\n        datas: [\n          { data, ...getScales(height, width) },\n          { data, ...getScales(height - offset, width) },\n          { data, ...getScales(height - offset * 2, width) }\n        ]\n      };\n    } else {\n      return {\n        halfOffset: 0,\n        datas: [{ data, ...getScales(height, width) }]\n      };\n    }\n  }, [data, arcProps, height, width, getScales]);\n\n  const handleSegmentClick = useCallback(\n    (e: MouseEvent) => {\n      if (onSegmentClick) {\n        const { xScale, data } = datas[0];\n        const { clientX, clientY, target } = e;\n        const position = getPositionForTarget({ target, clientX, clientY });\n        const value = getClosestContinousScalePoint({\n          pos: position.x,\n          scale: xScale,\n          data,\n          attr: 'i'\n        });\n\n        onSegmentClick({\n          value: { key: value.key, data: value.data },\n          nativeEvent: e\n        });\n      }\n    },\n    [datas, onSegmentClick]\n  );\n\n  return (\n    <>\n      {datas.map((d, i) => (\n        <g\n          key={i}\n          style={{ transform: `translate(0, ${i * halfOffset}px)` }}\n          onClick={handleSegmentClick}\n        >\n          <CloneElement<FunnelArcProps>\n            element={arc}\n            {...d}\n            id={`${id}-arc-${i}`}\n            index={i}\n          />\n        </g>\n      ))}\n      <CloneElement<FunnelAxisProps>\n        element={axis}\n        data={data}\n        xScale={datas[0].xScale}\n        yScale={datas[0].yScale}\n      />\n    </>\n  );\n};\n","import React, { FC, ReactElement, useCallback } from 'react';\nimport { CloneElement, useId } from 'reablocks';\nimport {\n  ChartContainer,\n  ChartContainerChildProps,\n  ChartProps\n} from '@/common/containers';\nimport { ChartShallowDataShape } from '@/common/data';\nimport { FunnelSeries, FunnelSeriesProps } from './FunnelSeries/FunnelSeries';\n\nexport interface FunnelChartProps extends ChartProps {\n  /**\n   * Chart shape used to render the funnel.\n   */\n  data: ChartShallowDataShape[];\n\n  /**\n   * The series component that renders the funnel components.\n   */\n  series: ReactElement<FunnelSeriesProps, typeof FunnelSeries>;\n}\n\nexport const FunnelChart: FC<Partial<FunnelChartProps>> = ({\n  data,\n  width,\n  margins = 0,\n  height,\n  className,\n  containerClassName,\n  series = <FunnelSeries />,\n  ...rest\n}) => {\n  const id = useId(rest.id);\n\n  const renderChart = useCallback(\n    ({ id, chartWidth, chartHeight, chartSized }: ChartContainerChildProps) => {\n      if (!chartSized) {\n        return null;\n      }\n\n      return (\n        <CloneElement<FunnelSeriesProps>\n          element={series}\n          id={`funnel-series-${id}`}\n          data={data}\n          height={chartHeight}\n          width={chartWidth}\n        />\n      );\n    },\n    [data, series]\n  );\n\n  return (\n    <ChartContainer\n      id={id}\n      width={width}\n      height={height}\n      margins={margins}\n      containerClassName={containerClassName}\n      className={className}\n    >\n      {renderChart}\n    </ChartContainer>\n  );\n};\n","import { useEffect } from 'react';\nimport { DEFAULT_TRANSITION } from '@/common/Motion';\nimport { useMotionValue, useSpring } from 'motion/react';\nimport { interpolate } from 'd3-interpolate';\n\nexport const useInterpolate = ({ animated, initial, path }) => {\n  const transition = animated\n    ? { ...DEFAULT_TRANSITION }\n    : {\n        delay: 0,\n        type: false as const\n      };\n\n  const d = useMotionValue(initial);\n  const spring = useSpring(0, { stiffness: 300, damping: 30 });\n\n  useEffect(() => {\n    const interpolator = interpolate(d.get(), path);\n    const prevSpring = spring.get();\n    spring.set(1 + prevSpring);\n\n    return spring.on('change', (v) => d.set(interpolator(v - prevSpring)));\n  }, [d, path, spring]);\n\n  return { transition, d: animated ? d : path };\n};\n","import React, {\n  FC,\n  ReactElement,\n  useCallback,\n  useMemo,\n  useRef,\n  useState\n} from 'react';\nimport { arc } from 'd3-shape';\nimport { getAriaLabel } from '@/common/utils/formatting';\nimport { motion } from 'motion/react';\nimport { ChartTooltip, ChartTooltipProps } from '@/common/Tooltip';\nimport { CloneElement } from 'reablocks';\nimport { useHoverIntent } from '@/common/utils/useHoverIntent';\nimport { Gradient, GradientProps } from '@/common/Gradient';\nimport chroma from 'chroma-js';\nimport { useInterpolate } from './useInterpolate';\n\nexport interface SunburstArcProps {\n  /**\n   * Id set by the parent.\n   */\n  id: string;\n\n  /**\n   * Radius of the chart. Set internally by `SunburstChart`.\n   */\n  radius: number;\n\n  /**\n   * The internal data object built by d3\n   */\n  data: any;\n\n  /**\n   * Fill color for the arc.\n   */\n  fill: string;\n\n  /**\n   * Whether the chart is animated or not.\n   */\n  animated?: boolean;\n\n  /**\n   * Cursor for the element.\n   */\n  cursor?: string;\n\n  /**\n   * Tooltip element.\n   */\n  tooltip?: ReactElement<ChartTooltipProps, typeof ChartTooltip> | null;\n\n  /**\n   * Gradient shades for the bar.\n   */\n  gradient?: ReactElement<GradientProps, typeof Gradient> | null;\n\n  /**\n   * The onClick handler for the arc.\n   */\n  onClick?: (event: React.MouseEvent, data: any) => void;\n\n  /**\n   * Event for when the arc has mouse enter.\n   */\n  onMouseEnter?: (event, data) => void;\n\n  /**\n   * Event for when the arc has mouse leave.\n   */\n  onMouseLeave?: (event, data) => void;\n}\n\nexport const SunburstArc: FC<Partial<SunburstArcProps>> = ({\n  id,\n  radius,\n  fill,\n  data,\n  cursor = 'pointer',\n  tooltip = <ChartTooltip />,\n  animated,\n  gradient,\n  onClick,\n  onMouseEnter,\n  onMouseLeave\n}) => {\n  const [internalActive, setInternalActive] = useState<boolean>(false);\n  const arcRef = useRef<any | null>(null);\n\n  const getPath = useCallback(\n    (item) => {\n      return arc()\n        .startAngle((d: any) => d.x0)\n        .endAngle((d: any) => d.x1)\n        .padAngle((d: any) => Math.min((d.x1 - d.x0) / 2, 0.005))\n        .padRadius(radius / 2)\n        .innerRadius((d: any) => d.y0)\n        .outerRadius((d: any) => d.y1 - 1)(item);\n    },\n    [radius]\n  );\n\n  const p = data.parent || { x0: 0, x1: 0, y0: 0, y1: 0 };\n  const initial = getPath({\n    x0: ((data.x0 - p.x0) / (p.x1 - p.x0)) * 2 * Math.PI,\n    x1: ((data.x1 - p.x0) / (p.x1 - p.x0)) * 2 * Math.PI,\n    y0: 0,\n    y1: 0\n  });\n  const animate = getPath(data);\n  const ariaLabelData = getAriaLabel(data.data);\n\n  const { pointerOut, pointerOver } = useHoverIntent({\n    onPointerOver: (event) => {\n      setInternalActive(true);\n      onMouseEnter?.(event, data);\n    },\n    onPointerOut: (event) => {\n      setInternalActive(false);\n      onMouseLeave?.(event, data);\n    }\n  });\n\n  const tooltipLabel = useMemo(() => {\n    const getKey = (node): string[] => {\n      if (!node.parent) {\n        return [];\n      }\n      return [...getKey(node.parent), node.data.key];\n    };\n    return getKey(data).join(' → ');\n  }, [data]);\n\n  const tooltipData = useMemo(\n    () => ({ y: data.value, x: tooltipLabel }),\n    [data, tooltipLabel]\n  );\n\n  const currentFill = useMemo(\n    () => (internalActive ? chroma(fill).brighten(0.5).hex() : fill),\n    [fill, internalActive]\n  );\n\n  const pathFill = gradient ? `url(#gradient-${id})` : currentFill;\n\n  const { transition, d } = useInterpolate({\n    animated,\n    path: animate,\n    initial\n  });\n\n  return (\n    <g\n      ref={arcRef}\n      tabIndex={0}\n      aria-label={ariaLabelData}\n      role=\"graphics-document\"\n    >\n      <motion.path\n        id={id}\n        fill={pathFill}\n        d={d}\n        initial={{ opacity: 0 }}\n        animate={{ opacity: 1 }}\n        role=\"graphics-symbol\"\n        tabIndex={0}\n        style={{ cursor }}\n        transition={transition}\n        aria-label={ariaLabelData}\n        onClick={(event) => onClick?.(event, data)}\n        onPointerOver={pointerOver}\n        onPointerOut={pointerOut}\n      />\n      {gradient && (\n        <CloneElement<GradientProps>\n          element={gradient}\n          id={`gradient-${id}`}\n          direction=\"vertical\"\n          color={currentFill}\n        />\n      )}\n      {tooltip && !tooltip.props.disabled && (\n        <CloneElement<ChartTooltipProps>\n          element={tooltip}\n          visible={!!internalActive}\n          reference={arcRef}\n          value={tooltipData}\n        />\n      )}\n    </g>\n  );\n};\n","import React, { FC, useMemo } from 'react';\nimport invert from 'invert-color';\nimport ellipsize from 'ellipsize';\nimport { motion } from 'motion/react';\nimport { DEFAULT_TRANSITION } from '@/common/Motion';\n\nexport interface SunburstArcLabelProps {\n  /**\n   * Id set by the parent.\n   */\n  id: string;\n\n  /**\n   * The internal data object built by d3\n   */\n  data: any;\n\n  /**\n   * Fill color for the arc.\n   */\n  fill: string;\n\n  /**\n   * Radius of the chart. Set internally by `SunburstChart`.\n   */\n  radius: number;\n\n  /**\n   * Font size of the text.\n   */\n  fontSize?: number;\n\n  /**\n   * Font family of the text.\n   */\n  fontFamily?: string;\n\n  /**\n   * Whether the chart is animated or not.\n   */\n  animated?: boolean;\n}\n\nexport const SunburstArcLabel: FC<Partial<SunburstArcLabelProps>> = ({\n  data,\n  animated,\n  fill = 'black',\n  fontSize = 14,\n  fontFamily = 'sans-serif',\n  radius\n}) => {\n  // Get the full text and the truncated text\n  // NOTE: This could use some improvement around measuring\n  const fullText = data.data.key;\n  const text = ellipsize(fullText, 10);\n\n  // Make the fill inverted for better contrast\n  fill = invert(fill, true);\n\n  function labelTransform(d) {\n    const x = (((data.x0 + data.x1) / 2) * 180) / Math.PI;\n    const y = (data.y0 + data.y1) / 2;\n    return `rotate(${x - 90}deg) translate(${y}px,0) rotate(${x < 180 ? 0 : 180}deg)`;\n  }\n\n  function labelVisible(d) {\n    return (d.y1 - d.y0) * (d.x1 - d.x0) > 0.05;\n  }\n\n  const transition = useMemo(() => {\n    if (animated) {\n      return {\n        ...DEFAULT_TRANSITION\n      };\n    } else {\n      return {\n        type: false as const,\n        delay: 0\n      };\n    }\n  }, [animated]);\n\n  if (!labelVisible(data)) {\n    return null;\n  }\n\n  return (\n    <motion.g\n      initial={{ opacity: 0 }}\n      animate={{ opacity: 1 }}\n      style={{ transform: labelTransform(data) }}\n      fontFamily={fontFamily}\n      fontSize={fontSize}\n      transition={transition}\n    >\n      <title>{fullText}</title>\n      <text\n        style={{\n          pointerEvents: 'none',\n          userSelect: 'none'\n        }}\n        fill={fill}\n        dy=\"0.35em\"\n        textAnchor=\"middle\"\n      >\n        {text}\n      </text>\n    </motion.g>\n  );\n};\n","import React, { FC, Fragment, ReactElement, useCallback } from 'react';\nimport { ColorSchemeType, getColor } from '@/common/color';\nimport chroma from 'chroma-js';\nimport { SunburstArc, SunburstArcProps } from './SunburstArc';\nimport { SunburstArcLabel, SunburstArcLabelProps } from './SunburstArcLabel';\nimport { CloneElement } from 'reablocks';\nimport { identifier } from 'safe-identifier';\n\nexport interface SunburstSeriesProps {\n  /**\n   * Id set by the parent.\n   */\n  id: string;\n\n  /**\n   * The internal data object built by d3\n   */\n  data: any[];\n\n  /**\n   * Whether the chart is animated or not.\n   */\n  animated?: boolean;\n\n  /**\n   * Color scheme for the chart.\n   */\n  colorScheme: ColorSchemeType;\n\n  /**\n   * Radius of the chart. Set internally by `SunburstChart`.\n   */\n  radius: number;\n\n  /**\n   * The arc component to render.\n   */\n  arc?: ReactElement<SunburstArcProps, typeof SunburstArc>;\n\n  /**\n   * The arc label component to render.\n   */\n  label?: ReactElement<SunburstArcLabelProps, typeof SunburstArcLabel>;\n}\n\nexport const SunburstSeries: FC<Partial<SunburstSeriesProps>> = ({\n  id,\n  data,\n  radius,\n  colorScheme = 'cybertron',\n  animated = true,\n  arc = <SunburstArc />,\n  label = <SunburstArcLabel />\n}) => {\n  const getFill = useCallback(\n    (item: any, index: number) => {\n      // Get the parent most item for the color start\n      let parent = item;\n      while (parent.depth > 1) {\n        parent = parent.parent;\n      }\n\n      let fill = getColor({\n        data,\n        colorScheme,\n        point: parent.data,\n        index\n      });\n\n      // darken the color based on the depth\n      fill = chroma(fill)\n        .darken((item.depth - 1) * 0.5)\n        .hex();\n\n      return fill;\n    },\n    [colorScheme, data]\n  );\n\n  const renderItem = useCallback(\n    (item: any, index: number) => {\n      const fill = getFill(item, index);\n\n      // // Handle getting the item id recursively\n      const getItemId = (item: any): string => {\n        if (item.parent) {\n          return `${getItemId(item.parent)}-${item.data.key}`;\n        }\n        return `${item.data.key}`;\n      };\n\n      const itemId = getItemId(item);\n      const safeKey = identifier(itemId);\n\n      return (\n        <Fragment key={safeKey}>\n          <CloneElement<SunburstArcProps>\n            element={arc}\n            id={`${id}-${safeKey}-arc`}\n            fill={fill}\n            radius={radius}\n            animated={animated}\n            data={item}\n          />\n          <CloneElement<SunburstArcLabelProps>\n            element={label}\n            id={`${id}-${safeKey}-label`}\n            fill={fill}\n            data={item}\n            radius={radius}\n            animated={animated}\n          />\n        </Fragment>\n      );\n    },\n    [animated, arc, getFill, id, label, radius]\n  );\n\n  return <>{data.map(renderItem)}</>;\n};\n","import React, { FC, ReactElement, useCallback } from 'react';\nimport {\n  ChartContainer,\n  ChartContainerChildProps,\n  ChartProps\n} from '@/common/containers/ChartContainer';\nimport { ChartNestedDataShape, ChartShallowDataShape } from '@/common/data';\nimport { hierarchy, partition } from 'd3-hierarchy';\nimport { CloneElement, useId } from 'reablocks';\nimport { SunburstSeries, SunburstSeriesProps } from './SunburstSeries';\n\nexport interface SunburstChartProps extends ChartProps {\n  /**\n   * Data the chart will receive to render.\n   */\n  data: ChartShallowDataShape[] | ChartNestedDataShape[];\n\n  /**\n   * The series component that renders the components.\n   */\n  series?: ReactElement<SunburstSeriesProps, typeof SunburstSeries>;\n}\n\nexport const SunburstChart: FC<Partial<SunburstChartProps>> = ({\n  data = [],\n  id,\n  series = <SunburstSeries />,\n  containerClassName,\n  width,\n  height,\n  className,\n  margins = 0\n}) => {\n  const newId = useId(id);\n\n  const getData = useCallback(\n    (radius: number) => {\n      const rootHierarchy = hierarchy<any>({ data }, (d) => d.data)\n        .sum((d) => d.data)\n        .sort((a, b) => b.data - a.data);\n\n      const root = partition().size([2 * Math.PI, radius])(rootHierarchy);\n\n      const nodes = [];\n      const getAllNodes = (node) => {\n        if (node?.parent) {\n          // Don't add root node\n          nodes.push(node);\n        }\n        for (let child of node?.children || []) {\n          getAllNodes(child);\n        }\n      };\n\n      getAllNodes(root);\n      return nodes;\n    },\n    [data]\n  );\n\n  const renderChart = useCallback(\n    ({ chartWidth, chartHeight, ...rest }: ChartContainerChildProps) => {\n      const radius = Math.min(chartWidth, chartHeight) / 2;\n      const root = getData(radius);\n\n      return (\n        <CloneElement<SunburstSeriesProps>\n          element={series}\n          id={`${newId}-series`}\n          data={root}\n          radius={radius}\n        />\n      );\n    },\n    [getData, newId, series]\n  );\n\n  return (\n    <ChartContainer\n      id={newId}\n      width={width}\n      height={height}\n      containerClassName={containerClassName}\n      margins={margins}\n      xAxisVisible={false}\n      yAxisVisible={false}\n      center={true}\n      className={className}\n    >\n      {renderChart}\n    </ChartContainer>\n  );\n};\n","import React, { FC, ReactElement, useRef, useState } from 'react';\nimport { motion } from 'motion/react';\nimport { ChartShallowDataShape } from '../common/data';\nimport { ChartTooltip, ChartTooltipProps } from '../common/Tooltip';\nimport { CloneElement } from 'reablocks';\nimport classNames from 'classnames';\nimport css from './WordCloudLabel.module.css';\nimport { useHoverIntent } from '@/common/utils/useHoverIntent';\n\nexport interface WordCloudLabelProps {\n  /**\n   * Text to display.\n   */\n  text: string;\n\n  /**\n   * Font size in pixels.\n   */\n  fontSize: number;\n\n  /**\n   * Font family to use.\n   */\n  fontFamily: string;\n\n  /**\n   * Fill color for the text.\n   */\n  fill: string;\n\n  /**\n   * X position of the text.\n   */\n  x: number;\n\n  /**\n   * Y position of the text.\n   */\n  y: number;\n\n  /**\n   * Rotation angle in degrees.\n   */\n  rotate: number;\n\n  /**\n   * Original data point.\n   */\n  data: ChartShallowDataShape;\n\n  /**\n   * Additional className to apply.\n   */\n  className?: string;\n\n  /**\n   * Tooltip element.\n   */\n  tooltip?: ReactElement<ChartTooltipProps, typeof ChartTooltip> | null;\n\n  /**\n   * Click handler.\n   */\n  onClick?: (event: React.MouseEvent, data: ChartShallowDataShape) => void;\n\n  /**\n   * Mouse enter handler.\n   */\n  onMouseEnter?: (\n    event: React.PointerEvent,\n    data: ChartShallowDataShape\n  ) => void;\n\n  /**\n   * Mouse leave handler.\n   */\n  onMouseLeave?: (\n    event: React.PointerEvent,\n    data: ChartShallowDataShape\n  ) => void;\n}\n\nexport const WordCloudLabel: FC<Partial<WordCloudLabelProps>> = ({\n  text,\n  fontSize,\n  fontFamily,\n  fill,\n  x,\n  y,\n  rotate,\n  data,\n  onClick,\n  className,\n  onMouseEnter,\n  onMouseLeave,\n  tooltip = <ChartTooltip />\n}) => {\n  const [tooltipVisible, setTooltipVisible] = useState<boolean>(false);\n  const labelRef = useRef<SVGTextElement>(null);\n\n  const { pointerOut, pointerOver } = useHoverIntent({\n    onPointerOver: (event) => {\n      setTooltipVisible(true);\n      onMouseEnter?.(event, data);\n    },\n    onPointerOut: (event) => {\n      setTooltipVisible(false);\n      onMouseLeave?.(event, data);\n    }\n  });\n\n  return (\n    <>\n      <g\n        ref={labelRef}\n        className={classNames(css.wordLabel, className, {\n          [css.clickable]: !!onClick\n        })}\n        onPointerOut={pointerOut}\n        onPointerOver={pointerOver}\n        onClick={(event) => onClick?.(event, data)}\n      >\n        <motion.text\n          style={{\n            fontSize: `${fontSize}px`,\n            fontFamily,\n            fill,\n            cursor: onClick ? 'pointer' : 'default'\n          }}\n          textAnchor=\"middle\"\n          initial={{\n            opacity: 0,\n            x,\n            y,\n            rotate\n          }}\n          animate={{\n            opacity: 1,\n            x,\n            y,\n            rotate\n          }}\n          exit={{\n            opacity: 0,\n            x,\n            y,\n            rotate\n          }}\n          whileHover={{\n            opacity: 0.7,\n            transition: { duration: 0.2 }\n          }}\n        >\n          {text}\n        </motion.text>\n      </g>\n      <CloneElement<ChartTooltipProps>\n        element={tooltip}\n        visible={tooltipVisible}\n        reference={labelRef}\n        value={{\n          x: text,\n          value: data.data\n        }}\n      />\n    </>\n  );\n};\n","import React, { useCallback, FC } from 'react';\nimport cloud from 'd3-cloud';\nimport { max } from 'd3-array';\nimport { scaleLinear } from 'd3-scale';\nimport { getColor, schemes } from '@/common/color';\nimport { ChartShallowDataShape } from '@/common/data';\nimport {\n  ChartProps,\n  ChartContainer,\n  ChartContextProps\n} from '@/common/containers';\nimport { WordCloudLabel } from './WordCloudLabel';\n\nexport interface WordCloudProps extends ChartProps {\n  /**\n   * Data to render in the word cloud.\n   * The 'key' represents the word and 'data' represents its frequency/weight.\n   */\n  data: ChartShallowDataShape[];\n\n  /**\n   * Font size range [min, max].\n   */\n  fontSizeRange?: [number, number];\n\n  /**\n   * Font family to use.\n   */\n  fontFamily?: string;\n\n  /**\n   * Padding between words.\n   */\n  padding?: number;\n\n  /**\n   * Rotation angles for words.\n   */\n  rotationAngles?: [number, number];\n\n  /**\n   * Number of possible rotations.\n   */\n  rotations?: number;\n\n  /**\n   * Custom color scheme for words.\n   */\n  colorScheme?: string[];\n\n  /**\n   * Event triggered when a word is clicked.\n   */\n  onLabelClick?: (event: React.MouseEvent, data: ChartShallowDataShape) => void;\n\n  /**\n   * Mouse enter handler.\n   */\n  onLabelMouseEnter?: (\n    event: React.PointerEvent,\n    data: ChartShallowDataShape\n  ) => void;\n\n  /**\n   * Mouse leave handler.\n   */\n  onLabelMouseLeave?: (\n    event: React.PointerEvent,\n    data: ChartShallowDataShape\n  ) => void;\n}\n\nexport const WordCloud: FC<Partial<WordCloudProps>> = ({\n  data = [],\n  width,\n  height,\n  fontSizeRange = [12, 50],\n  fontFamily = 'Arial',\n  padding = 3,\n  rotationAngles = [-30, 30],\n  rotations = 2,\n  colorScheme = schemes.cybertron,\n  onLabelClick,\n  onLabelMouseEnter,\n  onLabelMouseLeave,\n  margins,\n  className,\n  containerClassName\n}) => {\n  const buildData = useCallback(\n    (chartWidth: number, chartHeight: number) => {\n      // Create scales\n      const sizeScale = scaleLinear()\n        .domain([0, max(data, (d) => Number(d.data)) || 0])\n        .range(fontSizeRange);\n\n      // Create layout\n      const layout = cloud()\n        .size([chartWidth, chartHeight])\n        .words(\n          data.map((d, index) => ({\n            text: String(d.key),\n            size: sizeScale(Number(d.data)),\n            color: getColor({\n              colorScheme,\n              index,\n              point: d,\n              data\n            }),\n            data: d\n          }))\n        )\n        .padding(padding)\n        .font(fontFamily)\n        .fontSize((d) => d.size)\n        .rotate(() =>\n          rotations > 0\n            ? (Math.floor(Math.random() * rotations) *\n                (rotationAngles[1] - rotationAngles[0])) /\n                (rotations - 1) +\n              rotationAngles[0]\n            : 0\n        );\n\n      layout.start();\n      const words = layout.words();\n      return words;\n    },\n    [\n      colorScheme,\n      data,\n      fontFamily,\n      fontSizeRange,\n      padding,\n      rotationAngles,\n      rotations\n    ]\n  );\n\n  const renderChart = useCallback(\n    ({ chartHeight, chartWidth }: ChartContextProps) => {\n      const words = buildData(chartWidth, chartHeight);\n\n      return words.map((word: any, i) => (\n        <WordCloudLabel\n          key={`${word.text}-${i}`}\n          text={word.text}\n          fontSize={word.size}\n          fontFamily={fontFamily}\n          fill={word.color}\n          x={word.x || 0}\n          y={word.y || 0}\n          rotate={word.rotate || 0}\n          data={word.data}\n          onClick={onLabelClick}\n          onMouseEnter={onLabelMouseEnter}\n          onMouseLeave={onLabelMouseLeave}\n        />\n      ));\n    },\n    [buildData, fontFamily, onLabelClick, onLabelMouseEnter, onLabelMouseLeave]\n  );\n\n  return (\n    <ChartContainer\n      width={width}\n      height={height}\n      margins={margins}\n      className={className}\n      containerClassName={containerClassName}\n      center={true}\n    >\n      {renderChart}\n    </ChartContainer>\n  );\n};\n"],"names":["min","max","value","interpolate","curveMonotoneX","curveStep","curveLinear","scale","end","bisector","node","applyToPoint","inverse","applyToPoints","dimensions","jsx","useRef","useCallback","px","delay","useEffect","useState","entry","id","useId","Fragment","CloneElement","path","useMemo","start","line","position","align","jsxs","css","label","getDimension","ticks","angle","height","width","translateY","translateX","point","textAnchor","transform","rotate","arc","scaleLinear","d","Children","cloneElement","isDragging","hasNoSlice","domain","createContext","useContext","median","layout","histogram","transformDataToStack","transformStackToData","stack","stackOffsetExpand","stackOffsetDiverging","Component","createRef","smoothMatrix","translate","distance","color","symbol","extent","yAxisGrid","xAxisGrid","Tooltip","forwardRef","tooltip","data","target","container","useImperativeHandle","offset","flip","identity","fromDefinition","fromObject","scaleTime","scaleBand","zoomOffset","useMotionValue","spring","useSpring","motion","scaleOrdinal","maxIndex","scaleQuantile","animate","identifier","PADDING","marker","gradient","item","area","coords","markLine","zoom","useLayoutEffect","ease","frameData","process","alpha","getAnimatableNone","mixNumber","progress","options","undampedFreq","factor","keyframes","isNotNull","getFinalKeyframe","percent","motionValue","now","number","hasTransform","isSVGTag","createElement","scrapeMotionValuesFromProps","createProjectionNode","useInsertionEffect","drag","MeasureLayout","transformPoint","scaleX","scaleY","rootProjectionNode","getComputedStyle","animations","context","info","timestamp","event","time","dragSnapToOrigin","inertia","isCategorical","padding","index","currentColorShade","bar","getValueScale","Map","geoNaturalEarth1","geoMercator","projection","geoPath","useInterpolate","pie","sankeyJustify","sankeyCenter","sankeyLeft","sankeyRight","activeNodes","activeLinks","link","nodeMap","sankey","active","disabled","sankeyLinkHorizontal","curveCardinalClosed","curveCardinal","curveLinearClosed","radialArea","radialLine","getXScale","scalePoint","innerRadius","fill","valueLabel","columns","xScale","range","yScale","cell","cellCount","base","outerBar","minValue","maxValue","isValidElement","sets","intersections","bb","pack","hierarchy","tooltipLabel","treemap","treemapSquarify","halfOffset","labelVisible","partition","buildData"],"mappings":"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","x_google_ignoreList":[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,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,393,412,413,414,415,416]}