@wandelbots/wandelbots-js-react-components 3.3.2-pr.docs-robot.419.890441d → 3.3.2-pr.fix-update-dependencies.436.72f7910

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/3d.cjs.js +1 -1
  2. package/dist/3d.es.js +1 -1
  3. package/dist/{LoadingCover-CunO727J.js → LoadingCover-Dr9hDTku.js} +2 -2
  4. package/dist/{LoadingCover-CunO727J.js.map → LoadingCover-Dr9hDTku.js.map} +1 -1
  5. package/dist/{LoadingCover-TeNDvBAl.cjs → LoadingCover-r2yhJZF9.cjs} +2 -2
  6. package/dist/{LoadingCover-TeNDvBAl.cjs.map → LoadingCover-r2yhJZF9.cjs.map} +1 -1
  7. package/dist/{WandelscriptEditor-b2onJkmt.cjs → WandelscriptEditor-Dj7TBCkF.cjs} +2 -2
  8. package/dist/{WandelscriptEditor-b2onJkmt.cjs.map → WandelscriptEditor-Dj7TBCkF.cjs.map} +1 -1
  9. package/dist/{WandelscriptEditor-CB2JeI-5.js → WandelscriptEditor-DnJvITTA.js} +3 -3
  10. package/dist/{WandelscriptEditor-CB2JeI-5.js.map → WandelscriptEditor-DnJvITTA.js.map} +1 -1
  11. package/dist/core.cjs.js +1 -1
  12. package/dist/core.es.js +4 -4
  13. package/dist/externalizeComponent.d.ts.map +1 -1
  14. package/dist/index-CAib4NKw.js +2261 -0
  15. package/dist/index-CAib4NKw.js.map +1 -0
  16. package/dist/{index-KsgdpgvF.cjs → index-CqMZL0FV.cjs} +2 -2
  17. package/dist/{index-KsgdpgvF.cjs.map → index-CqMZL0FV.cjs.map} +1 -1
  18. package/dist/{index-BSBCGCFW.js → index-CxasuX80.js} +2 -2
  19. package/dist/{index-BSBCGCFW.js.map → index-CxasuX80.js.map} +1 -1
  20. package/dist/index-DxwppshT.cjs +29 -0
  21. package/dist/index-DxwppshT.cjs.map +1 -0
  22. package/dist/index.cjs.js +1 -1
  23. package/dist/index.es.js +6 -6
  24. package/dist/{manufacturerHomePositions--1G0LNoV.cjs → manufacturerHomePositions-Ca80ycLi.cjs} +2 -2
  25. package/dist/{manufacturerHomePositions--1G0LNoV.cjs.map → manufacturerHomePositions-Ca80ycLi.cjs.map} +1 -1
  26. package/dist/{manufacturerHomePositions-CZto6Qyy.js → manufacturerHomePositions-CgaG5vaK.js} +3 -3
  27. package/dist/{manufacturerHomePositions-CZto6Qyy.js.map → manufacturerHomePositions-CgaG5vaK.js.map} +1 -1
  28. package/dist/theming-BQcKj8Gp.cjs +133 -0
  29. package/dist/theming-BQcKj8Gp.cjs.map +1 -0
  30. package/dist/{theming-BHuWUUZY.js → theming-Bafjg0Wg.js} +8553 -5916
  31. package/dist/theming-Bafjg0Wg.js.map +1 -0
  32. package/dist/wandelscript.cjs.js +1 -1
  33. package/dist/wandelscript.es.js +1 -1
  34. package/package.json +12 -12
  35. package/src/externalizeComponent.tsx +1 -17
  36. package/dist/index-DH-ITo65.cjs +0 -115
  37. package/dist/index-DH-ITo65.cjs.map +0 -1
  38. package/dist/index-DLrnRIOH.js +0 -5676
  39. package/dist/index-DLrnRIOH.js.map +0 -1
  40. package/dist/theming-BHuWUUZY.js.map +0 -1
  41. package/dist/theming-neVGQ-FN.cjs +0 -79
  42. package/dist/theming-neVGQ-FN.cjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"theming-BHuWUUZY.js","sources":["../node_modules/@mui/system/esm/styleFunctionSx/extendSxProp.js","../node_modules/@mui/utils/esm/generateUtilityClasses/generateUtilityClasses.js","../node_modules/@mui/utils/esm/getDisplayName/getDisplayName.js","../node_modules/@mui/system/esm/preprocessStyles.js","../node_modules/@mui/system/esm/createStyled/createStyled.js","../node_modules/@mui/system/esm/styled/styled.js","../node_modules/@mui/system/esm/useThemeProps/getThemeProps.js","../node_modules/@mui/system/esm/useThemeProps/useThemeProps.js","../node_modules/@mui/system/esm/memoTheme.js","../node_modules/@mui/utils/esm/composeClasses/composeClasses.js","../node_modules/@mui/system/esm/Stack/createStack.js","../node_modules/@mui/material/esm/styles/useThemeProps.js","../node_modules/@mui/material/esm/styles/slotShouldForwardProp.js","../node_modules/@mui/material/esm/styles/rootShouldForwardProp.js","../node_modules/@mui/material/esm/styles/styled.js","../node_modules/reconnecting-websocket/dist/reconnecting-websocket-mjs.js","../node_modules/@wandelbots/nova-js/dist/LoginWithAuth0-wQB-Sol1.mjs","../node_modules/url-join/lib/url-join.js","../node_modules/path-to-regexp/dist/index.js","../node_modules/@wandelbots/nova-js/dist/lib/v2/index.mjs","../src/icons/DropdownArrowIcon.tsx","../src/components/AppHeader.tsx","../node_modules/@babel/runtime/helpers/esm/extends.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../node_modules/@mui/utils/esm/useForkRef/useForkRef.js","../node_modules/reselect/dist/reselect.mjs","../node_modules/@mui/x-internals/esm/store/createSelector.js","../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js","../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js","../node_modules/use-sync-external-store/shim/index.js","../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.js","../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js","../node_modules/use-sync-external-store/shim/with-selector.js","../node_modules/@mui/x-internals/esm/reactMajor/index.js","../node_modules/@mui/x-internals/esm/store/useStore.js","../node_modules/@mui/utils/esm/useLazyRef/useLazyRef.js","../node_modules/@mui/utils/esm/useOnMount/useOnMount.js","../node_modules/@mui/x-internals/esm/store/useStoreEffect.js","../node_modules/@mui/x-internals/esm/store/Store.js","../node_modules/@mui/x-charts/esm/internals/plugins/corePlugins/useChartAnimation/useChartAnimation.js","../node_modules/@mui/x-charts/esm/internals/plugins/corePlugins/useChartAnimation/useChartAnimation.selectors.js","../node_modules/@mui/x-internals/esm/useEffectAfterFirstRender/useEffectAfterFirstRender.js","../node_modules/@mui/utils/esm/ownerDocument/ownerDocument.js","../node_modules/@mui/utils/esm/ownerWindow/ownerWindow.js","../node_modules/@mui/x-charts/esm/internals/store/useSelector.js","../node_modules/@mui/x-charts/esm/constants/index.js","../node_modules/@mui/x-charts/esm/internals/plugins/featurePlugins/useChartCartesianAxis/useChartCartesianAxisLayout.selectors.js","../node_modules/@mui/x-charts/esm/internals/plugins/featurePlugins/useChartCartesianAxis/useChartAxisSize.selectors.js","../node_modules/@mui/x-charts/esm/internals/plugins/corePlugins/useChartDimensions/useChartDimensions.selectors.js","../node_modules/@mui/x-charts/esm/internals/defaultizeMargin.js","../node_modules/@mui/x-charts/esm/internals/plugins/corePlugins/useChartDimensions/useChartDimensions.js","../node_modules/@mui/x-charts/esm/internals/plugins/corePlugins/useChartExperimentalFeature/useChartExperimentalFeature.js","../node_modules/@mui/x-charts/esm/internals/plugins/corePlugins/useChartExperimentalFeature/useChartExperimentalFeature.selectors.js","../node_modules/@mui/x-charts/esm/internals/plugins/corePlugins/useChartId/useChartId.utils.js","../node_modules/@mui/x-charts/esm/internals/plugins/corePlugins/useChartId/useChartId.js","../node_modules/@mui/x-charts/esm/internals/plugins/corePlugins/useChartId/useChartId.selectors.js","../node_modules/@mui/x-charts/esm/colorPalettes/categorical/rainbowSurge.js","../node_modules/@mui/x-charts/esm/internals/plugins/corePlugins/useChartSeries/processSeries.js","../node_modules/@mui/x-charts/esm/internals/plugins/corePlugins/useChartSeries/useChartSeries.js","../node_modules/@mui/x-charts/esm/internals/plugins/corePlugins/useChartSeries/useChartSeries.selectors.js","../node_modules/@mui/x-internal-gestures/esm/core/utils/eventList.js","../node_modules/@mui/x-internal-gestures/esm/core/Gesture.js","../node_modules/@mui/x-internal-gestures/esm/core/ActiveGesturesRegistry.js","../node_modules/@mui/x-internal-gestures/esm/core/KeyboardManager.js","../node_modules/@mui/x-internal-gestures/esm/core/PointerManager.js","../node_modules/@mui/x-internal-gestures/esm/core/GestureManager.js","../node_modules/@mui/x-internal-gestures/esm/core/PointerGesture.js","../node_modules/@mui/x-internal-gestures/esm/core/utils/getDistance.js","../node_modules/@mui/x-internal-gestures/esm/core/utils/calculateAverageDistance.js","../node_modules/@mui/x-internal-gestures/esm/core/utils/calculateCentroid.js","../node_modules/@mui/x-internal-gestures/esm/core/utils/createEventName.js","../node_modules/@mui/x-internal-gestures/esm/core/utils/getDirection.js","../node_modules/@mui/x-internal-gestures/esm/core/utils/isDirectionAllowed.js","../node_modules/@mui/x-internal-gestures/esm/core/utils/getPinchDirection.js","../node_modules/@mui/x-internal-gestures/esm/core/utils/preventDefault.js","../node_modules/@mui/x-internal-gestures/esm/core/gestures/MoveGesture.js","../node_modules/@mui/x-internal-gestures/esm/core/gestures/PanGesture.js","../node_modules/@mui/x-internal-gestures/esm/core/gestures/PinchGesture.js","../node_modules/@mui/x-internal-gestures/esm/core/gestures/PressGesture.js","../node_modules/@mui/x-internal-gestures/esm/core/gestures/PressAndDragGesture.js","../node_modules/@mui/x-internal-gestures/esm/core/gestures/TapGesture.js","../node_modules/@mui/x-internal-gestures/esm/core/gestures/TapAndDragGesture.js","../node_modules/@mui/x-internal-gestures/esm/core/gestures/TurnWheelGesture.js","../node_modules/@mui/x-charts/esm/internals/plugins/corePlugins/useChartInteractionListener/useChartInteractionListener.js","../node_modules/@mui/x-charts/esm/internals/plugins/corePlugins/corePlugins.js","../node_modules/@mui/x-charts/esm/internals/store/extractPluginParamsFromProps.js","../node_modules/@mui/x-charts/esm/internals/store/useCharts.js","../node_modules/@mui/x-charts/esm/context/ChartProvider/ChartContext.js","../node_modules/@mui/x-internals/esm/warning/warning.js","../node_modules/@mui/x-internals/esm/useAssertModelConsistency/useAssertModelConsistency.js","../node_modules/@mui/x-charts/esm/internals/constants.js","../node_modules/@mui/x-charts/esm/internals/plugins/featurePlugins/useChartCartesianAxis/defaultizeZoom.js","../node_modules/@mui/x-charts/esm/internals/plugins/featurePlugins/useChartCartesianAxis/defaultizeAxis.js","../node_modules/@mui/x-charts/esm/internals/defaultValueFormatters.js","../node_modules/@mui/x-charts/esm/models/axis.js","../node_modules/d3-array/src/ascending.js","../node_modules/d3-array/src/descending.js","../node_modules/d3-array/src/bisector.js","../node_modules/d3-array/src/number.js","../node_modules/d3-array/src/bisect.js","../node_modules/internmap/src/index.js","../node_modules/d3-array/src/ticks.js","../node_modules/d3-array/src/range.js","../node_modules/d3-scale/src/init.js","../node_modules/d3-scale/src/ordinal.js","../node_modules/d3-color/src/define.js","../node_modules/d3-color/src/color.js","../node_modules/d3-interpolate/src/constant.js","../node_modules/d3-interpolate/src/color.js","../node_modules/d3-interpolate/src/rgb.js","../node_modules/d3-interpolate/src/numberArray.js","../node_modules/d3-interpolate/src/array.js","../node_modules/d3-interpolate/src/date.js","../node_modules/d3-interpolate/src/number.js","../node_modules/d3-interpolate/src/object.js","../node_modules/d3-interpolate/src/string.js","../node_modules/d3-interpolate/src/value.js","../node_modules/d3-interpolate/src/round.js","../node_modules/d3-scale/src/constant.js","../node_modules/d3-scale/src/number.js","../node_modules/d3-scale/src/continuous.js","../node_modules/d3-format/src/formatDecimal.js","../node_modules/d3-format/src/exponent.js","../node_modules/d3-format/src/formatGroup.js","../node_modules/d3-format/src/formatNumerals.js","../node_modules/d3-format/src/formatSpecifier.js","../node_modules/d3-format/src/formatTrim.js","../node_modules/d3-format/src/formatPrefixAuto.js","../node_modules/d3-format/src/formatRounded.js","../node_modules/d3-format/src/formatTypes.js","../node_modules/d3-format/src/identity.js","../node_modules/d3-format/src/locale.js","../node_modules/d3-format/src/defaultLocale.js","../node_modules/d3-format/src/precisionFixed.js","../node_modules/d3-format/src/precisionPrefix.js","../node_modules/d3-format/src/precisionRound.js","../node_modules/d3-scale/src/tickFormat.js","../node_modules/d3-scale/src/linear.js","../node_modules/d3-scale/src/nice.js","../node_modules/d3-scale/src/log.js","../node_modules/d3-scale/src/symlog.js","../node_modules/d3-scale/src/pow.js","../node_modules/d3-scale/src/threshold.js","../node_modules/d3-time/src/interval.js","../node_modules/d3-time/src/millisecond.js","../node_modules/d3-time/src/duration.js","../node_modules/d3-time/src/second.js","../node_modules/d3-time/src/minute.js","../node_modules/d3-time/src/hour.js","../node_modules/d3-time/src/day.js","../node_modules/d3-time/src/week.js","../node_modules/d3-time/src/month.js","../node_modules/d3-time/src/year.js","../node_modules/d3-time/src/ticks.js","../node_modules/d3-time-format/src/locale.js","../node_modules/d3-time-format/src/defaultLocale.js","../node_modules/d3-scale/src/time.js","../node_modules/d3-scale/src/utcTime.js","../node_modules/d3-scale/src/sequential.js","../node_modules/@mui/x-charts/esm/internals/colorScale.js","../node_modules/@mui/x-charts/esm/internals/ticks.js","../node_modules/@mui/x-charts/esm/internals/scales/scaleBand.js","../node_modules/@mui/x-charts/esm/internals/scales/scalePoint.js","../node_modules/@mui/x-charts/esm/internals/scales/scaleSymlog.js","../node_modules/@mui/x-charts/esm/internals/getScale.js","../node_modules/@mui/x-charts/esm/internals/dateHelpers.js","../node_modules/@mui/x-charts/esm/internals/configInit.js","../node_modules/@mui/x-charts/esm/internals/isCartesian.js","../node_modules/@mui/x-charts/esm/internals/plugins/featurePlugins/useChartCartesianAxis/getAxisTriggerTooltip.js","../node_modules/@mui/x-charts/esm/internals/scaleGuards.js","../node_modules/@mui/x-charts/esm/internals/plugins/featurePlugins/useChartCartesianAxis/computeAxisValue.js","../node_modules/@mui/x-charts/esm/internals/isDefined.js","../node_modules/@mui/x-charts/esm/internals/plugins/featurePlugins/useChartCartesianAxis/createAxisFilterMapper.js","../node_modules/@mui/x-charts/esm/internals/plugins/featurePlugins/useChartCartesianAxis/createZoomLookup.js","../node_modules/@mui/x-charts/esm/internals/plugins/featurePlugins/useChartCartesianAxis/getAxisScale.js","../node_modules/@mui/x-charts/esm/internals/plugins/featurePlugins/useChartCartesianAxis/zoom.js","../node_modules/@mui/x-charts/esm/internals/plugins/featurePlugins/useChartCartesianAxis/getAxisExtrema.js","../node_modules/@mui/x-charts/esm/internals/plugins/featurePlugins/useChartCartesianAxis/getAxisDomainLimit.js","../node_modules/@mui/x-charts/esm/internals/plugins/featurePlugins/useChartCartesianAxis/domain.js","../node_modules/flatqueue/index.js","../node_modules/@mui/x-charts/esm/internals/Flatbush.js","../node_modules/@mui/x-charts/esm/internals/plugins/featurePlugins/useChartCartesianAxis/useChartCartesianAxisRendering.selectors.js","../node_modules/@mui/x-charts/esm/internals/plugins/featurePlugins/useChartCartesianAxis/getAxisValue.js","../node_modules/@mui/x-charts/esm/internals/getSVGPoint.js","../node_modules/@mui/utils/esm/useEventCallback/useEventCallback.js","../node_modules/@mui/x-charts/esm/internals/plugins/featurePlugins/useChartInteraction/useChartInteraction.js","../node_modules/@mui/x-charts/esm/internals/plugins/featurePlugins/useChartInteraction/useChartInteraction.selectors.js","../node_modules/@mui/x-internals/esm/isDeepEqual/isDeepEqual.js","../node_modules/@mui/x-charts/esm/internals/plugins/featurePlugins/useChartCartesianAxis/useChartCartesianInteraction.selectors.js","../node_modules/@mui/x-charts/esm/internals/plugins/featurePlugins/useChartInteraction/checkHasInteractionPlugin.js","../node_modules/@mui/x-charts/esm/internals/plugins/featurePlugins/useChartCartesianAxis/useChartCartesianAxis.js","../node_modules/@mui/x-charts/esm/internals/plugins/featurePlugins/useChartKeyboardNavigation/useChartKeyboardNavigation.selectors.js","../node_modules/@mui/x-internals/esm/fastObjectShallowCompare/fastObjectShallowCompare.js","../node_modules/@mui/x-charts/esm/internals/plugins/featurePlugins/useChartTooltip/useChartTooltip.js","../node_modules/@mui/x-charts/esm/internals/angleConversion.js","../node_modules/@mui/x-charts/esm/internals/plugins/featurePlugins/useChartZAxis/useChartZAxis.js","../node_modules/@mui/x-charts/esm/internals/plugins/featurePlugins/useChartZAxis/useChartZAxis.selectors.js","../node_modules/@mui/x-charts/esm/internals/plugins/featurePlugins/useChartHighlight/useChartHighlight.js","../node_modules/@mui/x-charts/esm/internals/findMinMax.js","../node_modules/@mui/x-charts/esm/BarChart/seriesConfig/bar/extremums.js","../node_modules/d3-shape/src/constant.js","../node_modules/d3-shape/src/math.js","../node_modules/d3-path/src/path.js","../node_modules/d3-shape/src/path.js","../node_modules/d3-shape/src/arc.js","../node_modules/d3-shape/src/array.js","../node_modules/d3-shape/src/descending.js","../node_modules/d3-shape/src/identity.js","../node_modules/d3-shape/src/pie.js","../node_modules/d3-shape/src/offset/none.js","../node_modules/d3-shape/src/order/none.js","../node_modules/d3-shape/src/stack.js","../node_modules/d3-shape/src/offset/expand.js","../node_modules/d3-shape/src/offset/diverging.js","../node_modules/d3-shape/src/offset/silhouette.js","../node_modules/d3-shape/src/offset/wiggle.js","../node_modules/d3-shape/src/order/appearance.js","../node_modules/d3-shape/src/order/ascending.js","../node_modules/d3-shape/src/order/descending.js","../node_modules/d3-shape/src/order/insideOut.js","../node_modules/d3-shape/src/order/reverse.js","../node_modules/@mui/x-charts/esm/internals/stackSeries.js","../node_modules/@mui/x-charts/esm/BarChart/seriesConfig/bar/seriesProcessor.js","../node_modules/@mui/x-charts/esm/internals/getLabel.js","../node_modules/@mui/x-charts/esm/BarChart/seriesConfig/bar/legend.js","../node_modules/@mui/x-charts/esm/internals/getSeriesColorFn.js","../node_modules/@mui/x-charts/esm/BarChart/seriesConfig/bar/getColor.js","../node_modules/@mui/x-charts/esm/BarChart/seriesConfig/bar/tooltip.js","../node_modules/@mui/x-charts/esm/internals/getBandSize.js","../node_modules/@mui/x-charts/esm/internals/getBarDimensions.js","../node_modules/@mui/x-charts/esm/BarChart/seriesConfig/bar/tooltipPosition.js","../node_modules/@mui/x-charts/esm/BarChart/seriesConfig/bar/getSeriesWithDefaultValues.js","../node_modules/@mui/x-charts/esm/BarChart/seriesConfig/index.js","../node_modules/@mui/x-charts/esm/ScatterChart/seriesConfig/extremums.js","../node_modules/@mui/x-charts/esm/ScatterChart/seriesConfig/seriesProcessor.js","../node_modules/@mui/x-charts/esm/ScatterChart/seriesConfig/getColor.js","../node_modules/@mui/x-charts/esm/ScatterChart/seriesConfig/legend.js","../node_modules/@mui/x-charts/esm/ScatterChart/seriesConfig/tooltip.js","../node_modules/@mui/x-charts/esm/ScatterChart/seriesConfig/getSeriesWithDefaultValues.js","../node_modules/@mui/x-charts/esm/ScatterChart/seriesConfig/tooltipPosition.js","../node_modules/@mui/x-charts/esm/ScatterChart/seriesConfig/index.js","../node_modules/@mui/x-charts/esm/LineChart/seriesConfig/extremums.js","../node_modules/@mui/x-charts/esm/LineChart/seriesConfig/seriesProcessor.js","../node_modules/@mui/x-charts/esm/LineChart/seriesConfig/getColor.js","../node_modules/@mui/x-charts/esm/LineChart/seriesConfig/legend.js","../node_modules/@mui/x-charts/esm/LineChart/seriesConfig/tooltip.js","../node_modules/@mui/x-charts/esm/LineChart/seriesConfig/getSeriesWithDefaultValues.js","../node_modules/@mui/x-charts/esm/LineChart/seriesConfig/tooltipPosition.js","../node_modules/@mui/x-charts/esm/LineChart/seriesConfig/index.js","../node_modules/@mui/x-charts/esm/PieChart/seriesConfig/seriesProcessor.js","../node_modules/@mui/x-charts/esm/PieChart/seriesConfig/getColor.js","../node_modules/@mui/x-charts/esm/PieChart/seriesConfig/legend.js","../node_modules/@mui/x-charts/esm/PieChart/seriesConfig/tooltip.js","../node_modules/@mui/x-charts/esm/internals/getPercentageValue.js","../node_modules/@mui/x-charts/esm/PieChart/getPieCoordinates.js","../node_modules/@mui/x-charts/esm/PieChart/seriesConfig/seriesLayout.js","../node_modules/@mui/x-charts/esm/PieChart/seriesConfig/getSeriesWithDefaultValues.js","../node_modules/@mui/x-charts/esm/PieChart/seriesConfig/tooltipPosition.js","../node_modules/@mui/x-charts/esm/PieChart/seriesConfig/index.js","../node_modules/@mui/x-charts/esm/context/ChartProvider/ChartProvider.js","../node_modules/@mui/x-charts/esm/context/ChartProvider/useChartContext.js","../node_modules/@mui/x-charts/esm/internals/store/useStore.js","../node_modules/@mui/x-charts/esm/hooks/useDrawingArea.js","../node_modules/@mui/x-charts/esm/hooks/useChartId.js","../node_modules/@mui/x-charts/esm/hooks/useAxis.js","../node_modules/@mui/x-charts/esm/hooks/useZAxis.js","../node_modules/@mui/x-charts/esm/hooks/useSvgRef.js","../node_modules/@mui/x-charts/esm/hooks/useChartGradientId.js","../node_modules/bezier-easing/src/index.js","../node_modules/@mui/x-charts/esm/internals/animation/animation.js","../node_modules/d3-timer/src/timer.js","../node_modules/d3-timer/src/timeout.js","../node_modules/@mui/x-charts/esm/internals/animation/Transition.js","../node_modules/@mui/x-charts/esm/internals/shallowEqual.js","../node_modules/@mui/x-charts/esm/internals/animation/useAnimateInternal.js","../node_modules/@mui/x-charts/esm/hooks/animation/useAnimate.js","../node_modules/@mui/x-charts/esm/internals/components/ChartsAxesGradients/ChartsPiecewiseGradient.js","../node_modules/@mui/x-charts/esm/internals/components/ChartsAxesGradients/ChartsContinuousGradient.js","../node_modules/@mui/x-charts/esm/internals/components/ChartsAxesGradients/ChartsContinuousGradientObjectBound.js","../node_modules/@mui/x-charts/esm/internals/components/ChartsAxesGradients/ChartsAxesGradients.js","../node_modules/@mui/x-charts/esm/ChartsSurface/chartsSurfaceClasses.js","../node_modules/@mui/x-charts/esm/ChartsSurface/ChartsSurface.js","../node_modules/@mui/x-charts/esm/Gauge/utils.js","../node_modules/@mui/x-charts/esm/Gauge/GaugeProvider.js","../node_modules/@mui/x-charts/esm/Gauge/GaugeContainer.js","../node_modules/@mui/x-charts/esm/hooks/useSkipAnimation.js","../node_modules/@mui/x-charts/esm/hooks/animation/useAnimateGaugeValueArc.js","../node_modules/@mui/x-charts/esm/Gauge/gaugeClasses.js","../node_modules/@mui/x-charts/esm/Gauge/GaugeValueArc.js","../node_modules/@mui/x-charts/esm/Gauge/GaugeReferenceArc.js","../node_modules/@mui/x-charts/esm/internals/domUtils.js","../node_modules/@mui/x-charts/esm/internals/getWordsByLines.js","../node_modules/@mui/x-charts/esm/hooks/useIsHydrated.js","../node_modules/@mui/x-charts/esm/ChartsText/ChartsText.js","../node_modules/@mui/x-charts/esm/Gauge/GaugeValueText.js","../node_modules/@mui/x-charts/esm/Gauge/Gauge.js","../src/components/CycleTimer/utils.ts","../src/components/CycleTimer/DefaultVariant.tsx","../src/components/CycleTimer/SmallVariant.tsx","../src/components/CycleTimer/useAnimations.ts","../src/components/CycleTimer/useTimerLogic.ts","../src/components/CycleTimer/index.tsx","../node_modules/@mui/material/esm/utils/memoTheme.js","../node_modules/@mui/material/esm/DefaultPropsProvider/DefaultPropsProvider.js","../node_modules/@mui/material/esm/SvgIcon/svgIconClasses.js","../node_modules/@mui/material/esm/SvgIcon/SvgIcon.js","../node_modules/@mui/material/esm/utils/createSvgIcon.js","../node_modules/@mui/utils/esm/useControlled/useControlled.js","../node_modules/@mui/icons-material/esm/Clear.js","../node_modules/@mui/icons-material/esm/FilterList.js","../node_modules/@mui/icons-material/esm/Search.js","../src/components/DataGrid.tsx","../node_modules/@mui/material/esm/Stack/Stack.js","../src/icons/jog-minus.svg","../src/icons/jog-plus.svg","../src/components/jogging/JoggingCartesianAxisControl.tsx","../node_modules/@mui/icons-material/esm/ChevronLeft.js","../node_modules/@mui/icons-material/esm/ChevronRight.js","../node_modules/lodash-es/isObject.js","../node_modules/lodash-es/_freeGlobal.js","../node_modules/lodash-es/_root.js","../node_modules/lodash-es/now.js","../node_modules/lodash-es/_trimmedEndIndex.js","../node_modules/lodash-es/_baseTrim.js","../node_modules/lodash-es/_Symbol.js","../node_modules/lodash-es/_getRawTag.js","../node_modules/lodash-es/_objectToString.js","../node_modules/lodash-es/_baseGetTag.js","../node_modules/lodash-es/isObjectLike.js","../node_modules/lodash-es/isSymbol.js","../node_modules/lodash-es/toNumber.js","../node_modules/lodash-es/debounce.js","../node_modules/lodash-es/throttle.js","../src/components/jogging/JoggingJointRotationControl.tsx","../node_modules/@mui/icons-material/esm/OpenWith.js","../node_modules/@mui/icons-material/esm/Share.js","../node_modules/three/src/math/MathUtils.js","../node_modules/three/src/math/Quaternion.js","../node_modules/three/src/math/Vector3.js","../src/lib/motionStateUpdate.ts","../src/lib/MotionStreamConnection.ts","../src/lib/JoggerConnection.ts","../node_modules/lodash-es/isFunction.js","../node_modules/lodash-es/_coreJsData.js","../node_modules/lodash-es/_isMasked.js","../node_modules/lodash-es/_toSource.js","../node_modules/lodash-es/_baseIsNative.js","../node_modules/lodash-es/_getValue.js","../node_modules/lodash-es/_getNative.js","../node_modules/lodash-es/_defineProperty.js","../node_modules/lodash-es/_baseAssignValue.js","../node_modules/lodash-es/_arrayAggregator.js","../node_modules/lodash-es/_createBaseFor.js","../node_modules/lodash-es/_baseFor.js","../node_modules/lodash-es/_baseTimes.js","../node_modules/lodash-es/_baseIsArguments.js","../node_modules/lodash-es/isArguments.js","../node_modules/lodash-es/isArray.js","../node_modules/lodash-es/stubFalse.js","../node_modules/lodash-es/isBuffer.js","../node_modules/lodash-es/_isIndex.js","../node_modules/lodash-es/isLength.js","../node_modules/lodash-es/_baseIsTypedArray.js","../node_modules/lodash-es/_baseUnary.js","../node_modules/lodash-es/_nodeUtil.js","../node_modules/lodash-es/isTypedArray.js","../node_modules/lodash-es/_arrayLikeKeys.js","../node_modules/lodash-es/_isPrototype.js","../node_modules/lodash-es/_overArg.js","../node_modules/lodash-es/_nativeKeys.js","../node_modules/lodash-es/_baseKeys.js","../node_modules/lodash-es/isArrayLike.js","../node_modules/lodash-es/keys.js","../node_modules/lodash-es/_baseForOwn.js","../node_modules/lodash-es/_createBaseEach.js","../node_modules/lodash-es/_baseEach.js","../node_modules/lodash-es/_baseAggregator.js","../node_modules/lodash-es/_listCacheClear.js","../node_modules/lodash-es/eq.js","../node_modules/lodash-es/_assocIndexOf.js","../node_modules/lodash-es/_listCacheDelete.js","../node_modules/lodash-es/_listCacheGet.js","../node_modules/lodash-es/_listCacheHas.js","../node_modules/lodash-es/_listCacheSet.js","../node_modules/lodash-es/_ListCache.js","../node_modules/lodash-es/_stackClear.js","../node_modules/lodash-es/_stackDelete.js","../node_modules/lodash-es/_stackGet.js","../node_modules/lodash-es/_stackHas.js","../node_modules/lodash-es/_Map.js","../node_modules/lodash-es/_nativeCreate.js","../node_modules/lodash-es/_hashClear.js","../node_modules/lodash-es/_hashDelete.js","../node_modules/lodash-es/_hashGet.js","../node_modules/lodash-es/_hashHas.js","../node_modules/lodash-es/_hashSet.js","../node_modules/lodash-es/_Hash.js","../node_modules/lodash-es/_mapCacheClear.js","../node_modules/lodash-es/_isKeyable.js","../node_modules/lodash-es/_getMapData.js","../node_modules/lodash-es/_mapCacheDelete.js","../node_modules/lodash-es/_mapCacheGet.js","../node_modules/lodash-es/_mapCacheHas.js","../node_modules/lodash-es/_mapCacheSet.js","../node_modules/lodash-es/_MapCache.js","../node_modules/lodash-es/_stackSet.js","../node_modules/lodash-es/_Stack.js","../node_modules/lodash-es/_setCacheAdd.js","../node_modules/lodash-es/_setCacheHas.js","../node_modules/lodash-es/_SetCache.js","../node_modules/lodash-es/_arraySome.js","../node_modules/lodash-es/_cacheHas.js","../node_modules/lodash-es/_equalArrays.js","../node_modules/lodash-es/_Uint8Array.js","../node_modules/lodash-es/_mapToArray.js","../node_modules/lodash-es/_setToArray.js","../node_modules/lodash-es/_equalByTag.js","../node_modules/lodash-es/_arrayPush.js","../node_modules/lodash-es/_baseGetAllKeys.js","../node_modules/lodash-es/_arrayFilter.js","../node_modules/lodash-es/stubArray.js","../node_modules/lodash-es/_getSymbols.js","../node_modules/lodash-es/_getAllKeys.js","../node_modules/lodash-es/_equalObjects.js","../node_modules/lodash-es/_DataView.js","../node_modules/lodash-es/_Promise.js","../node_modules/lodash-es/_Set.js","../node_modules/lodash-es/_WeakMap.js","../node_modules/lodash-es/_getTag.js","../node_modules/lodash-es/_baseIsEqualDeep.js","../node_modules/lodash-es/_baseIsEqual.js","../node_modules/lodash-es/_baseIsMatch.js","../node_modules/lodash-es/_isStrictComparable.js","../node_modules/lodash-es/_getMatchData.js","../node_modules/lodash-es/_matchesStrictComparable.js","../node_modules/lodash-es/_baseMatches.js","../node_modules/lodash-es/_isKey.js","../node_modules/lodash-es/memoize.js","../node_modules/lodash-es/_memoizeCapped.js","../node_modules/lodash-es/_stringToPath.js","../node_modules/lodash-es/_arrayMap.js","../node_modules/lodash-es/_baseToString.js","../node_modules/lodash-es/toString.js","../node_modules/lodash-es/_castPath.js","../node_modules/lodash-es/_toKey.js","../node_modules/lodash-es/_baseGet.js","../node_modules/lodash-es/get.js","../node_modules/lodash-es/_baseHasIn.js","../node_modules/lodash-es/_hasPath.js","../node_modules/lodash-es/hasIn.js","../node_modules/lodash-es/_baseMatchesProperty.js","../node_modules/lodash-es/identity.js","../node_modules/lodash-es/_baseProperty.js","../node_modules/lodash-es/_basePropertyDeep.js","../node_modules/lodash-es/property.js","../node_modules/lodash-es/_baseIteratee.js","../node_modules/lodash-es/_createAggregator.js","../node_modules/lodash-es/keyBy.js","../node_modules/lodash-es/uniqueId.js","../src/components/jogging/JoggingStore.ts","../src/components/jogging/JoggingBlocked.tsx","../src/icons/axis-x.svg","../src/icons/axis-y.svg","../src/icons/axis-z.svg","../src/icons/rotation.svg","../node_modules/lodash-es/isEqual.js","../src/components/jogging/JoggingJointLimitDetector.tsx","../src/components/experimental/utils/AdornedSelect.tsx","../src/components/jogging/JoggingOptions.tsx","../src/components/jogging/JoggingToggleButtonGroup.tsx","../node_modules/@mui/utils/esm/chainPropTypes/chainPropTypes.js","../node_modules/@mui/utils/esm/isHostComponent/isHostComponent.js","../node_modules/@mui/utils/esm/appendOwnerState/appendOwnerState.js","../node_modules/@mui/utils/esm/extractEventHandlers/extractEventHandlers.js","../node_modules/@mui/utils/esm/omitEventHandlers/omitEventHandlers.js","../node_modules/@mui/utils/esm/mergeSlotProps/mergeSlotProps.js","../node_modules/@mui/utils/esm/resolveComponentProps/resolveComponentProps.js","../node_modules/@mui/utils/esm/useSlotProps/useSlotProps.js","../node_modules/@mui/utils/esm/isFocusVisible/isFocusVisible.js","../node_modules/@mui/utils/esm/visuallyHidden/visuallyHidden.js","../node_modules/@mui/material/esm/utils/areArraysEqual.js","../node_modules/@mui/material/esm/Slider/useSlider.js","../node_modules/@mui/material/esm/utils/shouldSpreadAdditionalProps.js","../node_modules/@mui/material/esm/utils/createSimplePaletteValueFilter.js","../node_modules/@mui/material/esm/Slider/sliderClasses.js","../node_modules/@mui/material/esm/Slider/SliderValueLabel.js","../node_modules/@mui/material/esm/Slider/Slider.js","../node_modules/lodash-es/isNumber.js","../src/components/VelocitySlider.tsx","../src/components/jogging/JoggingVelocitySlider.tsx","../src/components/jogging/JoggingCartesianTab.tsx","../src/components/jogging/JoggingJointTab.tsx","../src/components/jogging/JoggingPanel.tsx","../src/components/CopyableText.tsx","../src/components/jogging/PoseCartesianValues.tsx","../src/components/jogging/PoseJointValues.tsx","../src/components/LogStore.ts","../src/components/LogViewer.tsx","../src/components/LogPanel.tsx","../src/components/modal/NoMotionGroupModal.tsx","../node_modules/@mui/icons-material/esm/Error.js","../src/icons/robot.svg","../src/components/RobotSetupReadinessIndicator.tsx","../src/components/RobotListItem.tsx","../src/components/safetyBar/icons/controller-type-physical.svg","../src/components/safetyBar/icons/controller-type-virtual.svg","../src/components/safetyBar/IndicatorWithExplanation.tsx","../src/components/safetyBar/ControllerTypeIndicator.tsx","../src/components/safetyBar/icons/operation-mode-automatic.svg","../src/components/safetyBar/icons/operation-mode-error.svg","../src/components/safetyBar/icons/operation-mode-manual.svg","../src/components/safetyBar/OperationModeIndicator.tsx","../src/components/safetyBar/icons/safety-state-error.svg","../src/components/safetyBar/icons/safety-state-estop.svg","../src/components/safetyBar/icons/safety-state-manual-action-required.svg","../src/components/safetyBar/icons/safety-state-normal.svg","../src/components/safetyBar/icons/safety-state-stop.svg","../src/components/safetyBar/SafetyStateIndicator.tsx","../src/components/safetyBar/SafetyBar.tsx","../src/components/SelectableFab.tsx","../src/components/TabBar.tsx","../src/components/Timer/utils.ts","../src/components/Timer/TimerDefaultVariant.tsx","../src/components/Timer/TimerSmallVariant.tsx","../src/components/Timer/useTimerAnimations.ts","../src/components/Timer/useTimerLogic.ts","../src/components/Timer/index.tsx","../src/lib/ConnectedMotionGroup.ts","../src/themes/createDarkTheme.ts","../src/themes/createLightTheme.ts","../src/themes/theming.ts"],"sourcesContent":["import { isPlainObject } from '@mui/utils/deepmerge';\nimport defaultSxConfig from \"./defaultSxConfig.js\";\nconst splitProps = props => {\n const result = {\n systemProps: {},\n otherProps: {}\n };\n const config = props?.theme?.unstable_sxConfig ?? defaultSxConfig;\n Object.keys(props).forEach(prop => {\n if (config[prop]) {\n result.systemProps[prop] = props[prop];\n } else {\n result.otherProps[prop] = props[prop];\n }\n });\n return result;\n};\nexport default function extendSxProp(props) {\n const {\n sx: inSx,\n ...other\n } = props;\n const {\n systemProps,\n otherProps\n } = splitProps(other);\n let finalSx;\n if (Array.isArray(inSx)) {\n finalSx = [systemProps, ...inSx];\n } else if (typeof inSx === 'function') {\n finalSx = (...args) => {\n const result = inSx(...args);\n if (!isPlainObject(result)) {\n return systemProps;\n }\n return {\n ...systemProps,\n ...result\n };\n };\n } else {\n finalSx = {\n ...systemProps,\n ...inSx\n };\n }\n return {\n ...otherProps,\n sx: finalSx\n };\n}","import generateUtilityClass from \"../generateUtilityClass/index.js\";\nexport default function generateUtilityClasses(componentName, slots, globalStatePrefix = 'Mui') {\n const result = {};\n slots.forEach(slot => {\n result[slot] = generateUtilityClass(componentName, slot, globalStatePrefix);\n });\n return result;\n}","import { ForwardRef, Memo } from 'react-is';\nfunction getFunctionComponentName(Component, fallback = '') {\n return Component.displayName || Component.name || fallback;\n}\nfunction getWrappedName(outerType, innerType, wrapperName) {\n const functionName = getFunctionComponentName(innerType);\n return outerType.displayName || (functionName !== '' ? `${wrapperName}(${functionName})` : wrapperName);\n}\n\n/**\n * cherry-pick from\n * https://github.com/facebook/react/blob/769b1f270e1251d9dbdce0fcbd9e92e502d059b8/packages/shared/getComponentName.js\n * originally forked from recompose/getDisplayName\n */\nexport default function getDisplayName(Component) {\n if (Component == null) {\n return undefined;\n }\n if (typeof Component === 'string') {\n return Component;\n }\n if (typeof Component === 'function') {\n return getFunctionComponentName(Component, 'Component');\n }\n\n // TypeScript can't have components as objects but they exist in the form of `memo` or `Suspense`\n if (typeof Component === 'object') {\n switch (Component.$$typeof) {\n case ForwardRef:\n return getWrappedName(Component, Component.render, 'ForwardRef');\n case Memo:\n return getWrappedName(Component, Component.type, 'memo');\n default:\n return undefined;\n }\n }\n return undefined;\n}","import { internal_serializeStyles } from '@mui/styled-engine';\nexport default function preprocessStyles(input) {\n const {\n variants,\n ...style\n } = input;\n const result = {\n variants,\n style: internal_serializeStyles(style),\n isProcessed: true\n };\n\n // Not supported on styled-components\n if (result.style === style) {\n return result;\n }\n if (variants) {\n variants.forEach(variant => {\n if (typeof variant.style !== 'function') {\n variant.style = internal_serializeStyles(variant.style);\n }\n });\n }\n return result;\n}","import styledEngineStyled, { internal_mutateStyles as mutateStyles, internal_serializeStyles as serializeStyles } from '@mui/styled-engine';\nimport { isPlainObject } from '@mui/utils/deepmerge';\nimport capitalize from '@mui/utils/capitalize';\nimport getDisplayName from '@mui/utils/getDisplayName';\nimport createTheme from \"../createTheme/index.js\";\nimport styleFunctionSx from \"../styleFunctionSx/index.js\";\nimport preprocessStyles from \"../preprocessStyles.js\";\n\n/* eslint-disable no-underscore-dangle */\n/* eslint-disable no-labels */\n/* eslint-disable no-lone-blocks */\n\nexport const systemDefaultTheme = createTheme();\n\n// Update /system/styled/#api in case if this changes\nexport function shouldForwardProp(prop) {\n return prop !== 'ownerState' && prop !== 'theme' && prop !== 'sx' && prop !== 'as';\n}\nfunction shallowLayer(serialized, layerName) {\n if (layerName && serialized && typeof serialized === 'object' && serialized.styles && !serialized.styles.startsWith('@layer') // only add the layer if it is not already there.\n ) {\n serialized.styles = `@layer ${layerName}{${String(serialized.styles)}}`;\n }\n return serialized;\n}\nfunction defaultOverridesResolver(slot) {\n if (!slot) {\n return null;\n }\n return (_props, styles) => styles[slot];\n}\nfunction attachTheme(props, themeId, defaultTheme) {\n props.theme = isObjectEmpty(props.theme) ? defaultTheme : props.theme[themeId] || props.theme;\n}\nfunction processStyle(props, style, layerName) {\n /*\n * Style types:\n * - null/undefined\n * - string\n * - CSS style object: { [cssKey]: [cssValue], variants }\n * - Processed style object: { style, variants, isProcessed: true }\n * - Array of any of the above\n */\n\n const resolvedStyle = typeof style === 'function' ? style(props) : style;\n if (Array.isArray(resolvedStyle)) {\n return resolvedStyle.flatMap(subStyle => processStyle(props, subStyle, layerName));\n }\n if (Array.isArray(resolvedStyle?.variants)) {\n let rootStyle;\n if (resolvedStyle.isProcessed) {\n rootStyle = layerName ? shallowLayer(resolvedStyle.style, layerName) : resolvedStyle.style;\n } else {\n const {\n variants,\n ...otherStyles\n } = resolvedStyle;\n rootStyle = layerName ? shallowLayer(serializeStyles(otherStyles), layerName) : otherStyles;\n }\n return processStyleVariants(props, resolvedStyle.variants, [rootStyle], layerName);\n }\n if (resolvedStyle?.isProcessed) {\n return layerName ? shallowLayer(serializeStyles(resolvedStyle.style), layerName) : resolvedStyle.style;\n }\n return layerName ? shallowLayer(serializeStyles(resolvedStyle), layerName) : resolvedStyle;\n}\nfunction processStyleVariants(props, variants, results = [], layerName = undefined) {\n let mergedState; // We might not need it, initialized lazily\n\n variantLoop: for (let i = 0; i < variants.length; i += 1) {\n const variant = variants[i];\n if (typeof variant.props === 'function') {\n mergedState ??= {\n ...props,\n ...props.ownerState,\n ownerState: props.ownerState\n };\n if (!variant.props(mergedState)) {\n continue;\n }\n } else {\n for (const key in variant.props) {\n if (props[key] !== variant.props[key] && props.ownerState?.[key] !== variant.props[key]) {\n continue variantLoop;\n }\n }\n }\n if (typeof variant.style === 'function') {\n mergedState ??= {\n ...props,\n ...props.ownerState,\n ownerState: props.ownerState\n };\n results.push(layerName ? shallowLayer(serializeStyles(variant.style(mergedState)), layerName) : variant.style(mergedState));\n } else {\n results.push(layerName ? shallowLayer(serializeStyles(variant.style), layerName) : variant.style);\n }\n }\n return results;\n}\nexport default function createStyled(input = {}) {\n const {\n themeId,\n defaultTheme = systemDefaultTheme,\n rootShouldForwardProp = shouldForwardProp,\n slotShouldForwardProp = shouldForwardProp\n } = input;\n function styleAttachTheme(props) {\n attachTheme(props, themeId, defaultTheme);\n }\n const styled = (tag, inputOptions = {}) => {\n // If `tag` is already a styled component, filter out the `sx` style function\n // to prevent unnecessary styles generated by the composite components.\n mutateStyles(tag, styles => styles.filter(style => style !== styleFunctionSx));\n const {\n name: componentName,\n slot: componentSlot,\n skipVariantsResolver: inputSkipVariantsResolver,\n skipSx: inputSkipSx,\n // TODO v6: remove `lowercaseFirstLetter()` in the next major release\n // For more details: https://github.com/mui/material-ui/pull/37908\n overridesResolver = defaultOverridesResolver(lowercaseFirstLetter(componentSlot)),\n ...options\n } = inputOptions;\n const layerName = componentName && componentName.startsWith('Mui') || !!componentSlot ? 'components' : 'custom';\n\n // if skipVariantsResolver option is defined, take the value, otherwise, true for root and false for other slots.\n const skipVariantsResolver = inputSkipVariantsResolver !== undefined ? inputSkipVariantsResolver :\n // TODO v6: remove `Root` in the next major release\n // For more details: https://github.com/mui/material-ui/pull/37908\n componentSlot && componentSlot !== 'Root' && componentSlot !== 'root' || false;\n const skipSx = inputSkipSx || false;\n let shouldForwardPropOption = shouldForwardProp;\n\n // TODO v6: remove `Root` in the next major release\n // For more details: https://github.com/mui/material-ui/pull/37908\n if (componentSlot === 'Root' || componentSlot === 'root') {\n shouldForwardPropOption = rootShouldForwardProp;\n } else if (componentSlot) {\n // any other slot specified\n shouldForwardPropOption = slotShouldForwardProp;\n } else if (isStringTag(tag)) {\n // for string (html) tag, preserve the behavior in emotion & styled-components.\n shouldForwardPropOption = undefined;\n }\n const defaultStyledResolver = styledEngineStyled(tag, {\n shouldForwardProp: shouldForwardPropOption,\n label: generateStyledLabel(componentName, componentSlot),\n ...options\n });\n const transformStyle = style => {\n // - On the server Emotion doesn't use React.forwardRef for creating components, so the created\n // component stays as a function. This condition makes sure that we do not interpolate functions\n // which are basically components used as a selectors.\n // - `style` could be a styled component from a babel plugin for component selectors, This condition\n // makes sure that we do not interpolate them.\n if (style.__emotion_real === style) {\n return style;\n }\n if (typeof style === 'function') {\n return function styleFunctionProcessor(props) {\n return processStyle(props, style, props.theme.modularCssLayers ? layerName : undefined);\n };\n }\n if (isPlainObject(style)) {\n const serialized = preprocessStyles(style);\n return function styleObjectProcessor(props) {\n if (!serialized.variants) {\n return props.theme.modularCssLayers ? shallowLayer(serialized.style, layerName) : serialized.style;\n }\n return processStyle(props, serialized, props.theme.modularCssLayers ? layerName : undefined);\n };\n }\n return style;\n };\n const muiStyledResolver = (...expressionsInput) => {\n const expressionsHead = [];\n const expressionsBody = expressionsInput.map(transformStyle);\n const expressionsTail = [];\n\n // Preprocess `props` to set the scoped theme value.\n // This must run before any other expression.\n expressionsHead.push(styleAttachTheme);\n if (componentName && overridesResolver) {\n expressionsTail.push(function styleThemeOverrides(props) {\n const theme = props.theme;\n const styleOverrides = theme.components?.[componentName]?.styleOverrides;\n if (!styleOverrides) {\n return null;\n }\n const resolvedStyleOverrides = {};\n\n // TODO: v7 remove iteration and use `resolveStyleArg(styleOverrides[slot])` directly\n // eslint-disable-next-line guard-for-in\n for (const slotKey in styleOverrides) {\n resolvedStyleOverrides[slotKey] = processStyle(props, styleOverrides[slotKey], props.theme.modularCssLayers ? 'theme' : undefined);\n }\n return overridesResolver(props, resolvedStyleOverrides);\n });\n }\n if (componentName && !skipVariantsResolver) {\n expressionsTail.push(function styleThemeVariants(props) {\n const theme = props.theme;\n const themeVariants = theme?.components?.[componentName]?.variants;\n if (!themeVariants) {\n return null;\n }\n return processStyleVariants(props, themeVariants, [], props.theme.modularCssLayers ? 'theme' : undefined);\n });\n }\n if (!skipSx) {\n expressionsTail.push(styleFunctionSx);\n }\n\n // This function can be called as a tagged template, so the first argument would contain\n // CSS `string[]` values.\n if (Array.isArray(expressionsBody[0])) {\n const inputStrings = expressionsBody.shift();\n\n // We need to add placeholders in the tagged template for the custom functions we have\n // possibly added (attachTheme, overrides, variants, and sx).\n const placeholdersHead = new Array(expressionsHead.length).fill('');\n const placeholdersTail = new Array(expressionsTail.length).fill('');\n let outputStrings;\n // prettier-ignore\n {\n outputStrings = [...placeholdersHead, ...inputStrings, ...placeholdersTail];\n outputStrings.raw = [...placeholdersHead, ...inputStrings.raw, ...placeholdersTail];\n }\n\n // The only case where we put something before `attachTheme`\n expressionsHead.unshift(outputStrings);\n }\n const expressions = [...expressionsHead, ...expressionsBody, ...expressionsTail];\n const Component = defaultStyledResolver(...expressions);\n if (tag.muiName) {\n Component.muiName = tag.muiName;\n }\n if (process.env.NODE_ENV !== 'production') {\n Component.displayName = generateDisplayName(componentName, componentSlot, tag);\n }\n return Component;\n };\n if (defaultStyledResolver.withConfig) {\n muiStyledResolver.withConfig = defaultStyledResolver.withConfig;\n }\n return muiStyledResolver;\n };\n return styled;\n}\nfunction generateDisplayName(componentName, componentSlot, tag) {\n if (componentName) {\n return `${componentName}${capitalize(componentSlot || '')}`;\n }\n return `Styled(${getDisplayName(tag)})`;\n}\nfunction generateStyledLabel(componentName, componentSlot) {\n let label;\n if (process.env.NODE_ENV !== 'production') {\n if (componentName) {\n // TODO v6: remove `lowercaseFirstLetter()` in the next major release\n // For more details: https://github.com/mui/material-ui/pull/37908\n label = `${componentName}-${lowercaseFirstLetter(componentSlot || 'Root')}`;\n }\n }\n return label;\n}\nfunction isObjectEmpty(object) {\n // eslint-disable-next-line\n for (const _ in object) {\n return false;\n }\n return true;\n}\n\n// https://github.com/emotion-js/emotion/blob/26ded6109fcd8ca9875cc2ce4564fee678a3f3c5/packages/styled/src/utils.js#L40\nfunction isStringTag(tag) {\n return typeof tag === 'string' &&\n // 96 is one less than the char code\n // for \"a\" so this is checking that\n // it's a lowercase character\n tag.charCodeAt(0) > 96;\n}\nfunction lowercaseFirstLetter(string) {\n if (!string) {\n return string;\n }\n return string.charAt(0).toLowerCase() + string.slice(1);\n}","import createStyled from \"../createStyled/index.js\";\nconst styled = createStyled();\nexport default styled;","import resolveProps from '@mui/utils/resolveProps';\nexport default function getThemeProps(params) {\n const {\n theme,\n name,\n props\n } = params;\n if (!theme || !theme.components || !theme.components[name] || !theme.components[name].defaultProps) {\n return props;\n }\n return resolveProps(theme.components[name].defaultProps, props);\n}","'use client';\n\nimport getThemeProps from \"./getThemeProps.js\";\nimport useTheme from \"../useTheme/index.js\";\nexport default function useThemeProps({\n props,\n name,\n defaultTheme,\n themeId\n}) {\n let theme = useTheme(defaultTheme);\n if (themeId) {\n theme = theme[themeId] || theme;\n }\n return getThemeProps({\n theme,\n name,\n props\n });\n}","import preprocessStyles from \"./preprocessStyles.js\";\n\n/* eslint-disable @typescript-eslint/naming-convention */\n\n// We need to pass an argument as `{ theme }` for PigmentCSS, but we don't want to\n// allocate more objects.\nconst arg = {\n theme: undefined\n};\n\n/**\n * Memoize style function on theme.\n * Intended to be used in styled() calls that only need access to the theme.\n */\nexport default function unstable_memoTheme(styleFn) {\n let lastValue;\n let lastTheme;\n return function styleMemoized(props) {\n let value = lastValue;\n if (value === undefined || props.theme !== lastTheme) {\n arg.theme = props.theme;\n value = preprocessStyles(styleFn(arg));\n lastValue = value;\n lastTheme = props.theme;\n }\n return value;\n };\n}","/* eslint no-restricted-syntax: 0, prefer-template: 0, guard-for-in: 0\n ---\n These rules are preventing the performance optimizations below.\n */\n\n/**\n * Compose classes from multiple sources.\n *\n * @example\n * ```tsx\n * const slots = {\n * root: ['root', 'primary'],\n * label: ['label'],\n * };\n *\n * const getUtilityClass = (slot) => `MuiButton-${slot}`;\n *\n * const classes = {\n * root: 'my-root-class',\n * };\n *\n * const output = composeClasses(slots, getUtilityClass, classes);\n * // {\n * // root: 'MuiButton-root MuiButton-primary my-root-class',\n * // label: 'MuiButton-label',\n * // }\n * ```\n *\n * @param slots a list of classes for each possible slot\n * @param getUtilityClass a function to resolve the class based on the slot name\n * @param classes the input classes from props\n * @returns the resolved classes for all slots\n */\nexport default function composeClasses(slots, getUtilityClass, classes = undefined) {\n const output = {};\n for (const slotName in slots) {\n const slot = slots[slotName];\n let buffer = '';\n let start = true;\n for (let i = 0; i < slot.length; i += 1) {\n const value = slot[i];\n if (value) {\n buffer += (start === true ? '' : ' ') + getUtilityClass(value);\n start = false;\n if (classes && classes[value]) {\n buffer += ' ' + classes[value];\n }\n }\n }\n output[slotName] = buffer;\n }\n return output;\n}","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport deepmerge from '@mui/utils/deepmerge';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nimport composeClasses from '@mui/utils/composeClasses';\nimport systemStyled from \"../styled/index.js\";\nimport useThemePropsSystem from \"../useThemeProps/index.js\";\nimport { extendSxProp } from \"../styleFunctionSx/index.js\";\nimport createTheme from \"../createTheme/index.js\";\nimport { handleBreakpoints, mergeBreakpointsInOrder, resolveBreakpointValues } from \"../breakpoints/index.js\";\nimport { createUnarySpacing, getValue } from \"../spacing/index.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst defaultTheme = createTheme();\n// widening Theme to any so that the consumer can own the theme structure.\nconst defaultCreateStyledComponent = systemStyled('div', {\n name: 'MuiStack',\n slot: 'Root'\n});\nfunction useThemePropsDefault(props) {\n return useThemePropsSystem({\n props,\n name: 'MuiStack',\n defaultTheme\n });\n}\n\n/**\n * Return an array with the separator React element interspersed between\n * each React node of the input children.\n *\n * > joinChildren([1,2,3], 0)\n * [1,0,2,0,3]\n */\nfunction joinChildren(children, separator) {\n const childrenArray = React.Children.toArray(children).filter(Boolean);\n return childrenArray.reduce((output, child, index) => {\n output.push(child);\n if (index < childrenArray.length - 1) {\n output.push(/*#__PURE__*/React.cloneElement(separator, {\n key: `separator-${index}`\n }));\n }\n return output;\n }, []);\n}\nconst getSideFromDirection = direction => {\n return {\n row: 'Left',\n 'row-reverse': 'Right',\n column: 'Top',\n 'column-reverse': 'Bottom'\n }[direction];\n};\nexport const style = ({\n ownerState,\n theme\n}) => {\n let styles = {\n display: 'flex',\n flexDirection: 'column',\n ...handleBreakpoints({\n theme\n }, resolveBreakpointValues({\n values: ownerState.direction,\n breakpoints: theme.breakpoints.values\n }), propValue => ({\n flexDirection: propValue\n }))\n };\n if (ownerState.spacing) {\n const transformer = createUnarySpacing(theme);\n const base = Object.keys(theme.breakpoints.values).reduce((acc, breakpoint) => {\n if (typeof ownerState.spacing === 'object' && ownerState.spacing[breakpoint] != null || typeof ownerState.direction === 'object' && ownerState.direction[breakpoint] != null) {\n acc[breakpoint] = true;\n }\n return acc;\n }, {});\n const directionValues = resolveBreakpointValues({\n values: ownerState.direction,\n base\n });\n const spacingValues = resolveBreakpointValues({\n values: ownerState.spacing,\n base\n });\n if (typeof directionValues === 'object') {\n Object.keys(directionValues).forEach((breakpoint, index, breakpoints) => {\n const directionValue = directionValues[breakpoint];\n if (!directionValue) {\n const previousDirectionValue = index > 0 ? directionValues[breakpoints[index - 1]] : 'column';\n directionValues[breakpoint] = previousDirectionValue;\n }\n });\n }\n const styleFromPropValue = (propValue, breakpoint) => {\n if (ownerState.useFlexGap) {\n return {\n gap: getValue(transformer, propValue)\n };\n }\n return {\n // The useFlexGap={false} implement relies on each child to give up control of the margin.\n // We need to reset the margin to avoid double spacing.\n '& > :not(style):not(style)': {\n margin: 0\n },\n '& > :not(style) ~ :not(style)': {\n [`margin${getSideFromDirection(breakpoint ? directionValues[breakpoint] : ownerState.direction)}`]: getValue(transformer, propValue)\n }\n };\n };\n styles = deepmerge(styles, handleBreakpoints({\n theme\n }, spacingValues, styleFromPropValue));\n }\n styles = mergeBreakpointsInOrder(theme.breakpoints, styles);\n return styles;\n};\nexport default function createStack(options = {}) {\n const {\n // This will allow adding custom styled fn (for example for custom sx style function)\n createStyledComponent = defaultCreateStyledComponent,\n useThemeProps = useThemePropsDefault,\n componentName = 'MuiStack'\n } = options;\n const useUtilityClasses = () => {\n const slots = {\n root: ['root']\n };\n return composeClasses(slots, slot => generateUtilityClass(componentName, slot), {});\n };\n const StackRoot = createStyledComponent(style);\n const Stack = /*#__PURE__*/React.forwardRef(function Grid(inProps, ref) {\n const themeProps = useThemeProps(inProps);\n const props = extendSxProp(themeProps); // `color` type conflicts with html color attribute.\n const {\n component = 'div',\n direction = 'column',\n spacing = 0,\n divider,\n children,\n className,\n useFlexGap = false,\n ...other\n } = props;\n const ownerState = {\n direction,\n spacing,\n useFlexGap\n };\n const classes = useUtilityClasses();\n return /*#__PURE__*/_jsx(StackRoot, {\n as: component,\n ownerState: ownerState,\n ref: ref,\n className: clsx(classes.root, className),\n ...other,\n children: divider ? joinChildren(children, divider) : children\n });\n });\n process.env.NODE_ENV !== \"production\" ? Stack.propTypes /* remove-proptypes */ = {\n children: PropTypes.node,\n direction: PropTypes.oneOfType([PropTypes.oneOf(['column-reverse', 'column', 'row-reverse', 'row']), PropTypes.arrayOf(PropTypes.oneOf(['column-reverse', 'column', 'row-reverse', 'row'])), PropTypes.object]),\n divider: PropTypes.node,\n spacing: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string])), PropTypes.number, PropTypes.object, PropTypes.string]),\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n } : void 0;\n return Stack;\n}","'use client';\n\nimport systemUseThemeProps from '@mui/system/useThemeProps';\nimport defaultTheme from \"./defaultTheme.js\";\nimport THEME_ID from \"./identifier.js\";\nexport default function useThemeProps({\n props,\n name\n}) {\n return systemUseThemeProps({\n props,\n name,\n defaultTheme,\n themeId: THEME_ID\n });\n}","// copied from @mui/system/createStyled\nfunction slotShouldForwardProp(prop) {\n return prop !== 'ownerState' && prop !== 'theme' && prop !== 'sx' && prop !== 'as';\n}\nexport default slotShouldForwardProp;","import slotShouldForwardProp from \"./slotShouldForwardProp.js\";\nconst rootShouldForwardProp = prop => slotShouldForwardProp(prop) && prop !== 'classes';\nexport default rootShouldForwardProp;","'use client';\n\nimport createStyled from '@mui/system/createStyled';\nimport defaultTheme from \"./defaultTheme.js\";\nimport THEME_ID from \"./identifier.js\";\nimport rootShouldForwardProp from \"./rootShouldForwardProp.js\";\nexport { default as slotShouldForwardProp } from \"./slotShouldForwardProp.js\";\nexport { default as rootShouldForwardProp } from \"./rootShouldForwardProp.js\";\nconst styled = createStyled({\n themeId: THEME_ID,\n defaultTheme,\n rootShouldForwardProp\n});\nexport default styled;","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nfunction __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nfunction __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nfunction __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\n\nvar Event = /** @class */ (function () {\r\n function Event(type, target) {\r\n this.target = target;\r\n this.type = type;\r\n }\r\n return Event;\r\n}());\r\nvar ErrorEvent = /** @class */ (function (_super) {\r\n __extends(ErrorEvent, _super);\r\n function ErrorEvent(error, target) {\r\n var _this = _super.call(this, 'error', target) || this;\r\n _this.message = error.message;\r\n _this.error = error;\r\n return _this;\r\n }\r\n return ErrorEvent;\r\n}(Event));\r\nvar CloseEvent = /** @class */ (function (_super) {\r\n __extends(CloseEvent, _super);\r\n function CloseEvent(code, reason, target) {\r\n if (code === void 0) { code = 1000; }\r\n if (reason === void 0) { reason = ''; }\r\n var _this = _super.call(this, 'close', target) || this;\r\n _this.wasClean = true;\r\n _this.code = code;\r\n _this.reason = reason;\r\n return _this;\r\n }\r\n return CloseEvent;\r\n}(Event));\n\n/*!\r\n * Reconnecting WebSocket\r\n * by Pedro Ladaria <pedro.ladaria@gmail.com>\r\n * https://github.com/pladaria/reconnecting-websocket\r\n * License MIT\r\n */\r\nvar getGlobalWebSocket = function () {\r\n if (typeof WebSocket !== 'undefined') {\r\n // @ts-ignore\r\n return WebSocket;\r\n }\r\n};\r\n/**\r\n * Returns true if given argument looks like a WebSocket class\r\n */\r\nvar isWebSocket = function (w) { return typeof w !== 'undefined' && !!w && w.CLOSING === 2; };\r\nvar DEFAULT = {\r\n maxReconnectionDelay: 10000,\r\n minReconnectionDelay: 1000 + Math.random() * 4000,\r\n minUptime: 5000,\r\n reconnectionDelayGrowFactor: 1.3,\r\n connectionTimeout: 4000,\r\n maxRetries: Infinity,\r\n maxEnqueuedMessages: Infinity,\r\n startClosed: false,\r\n debug: false,\r\n};\r\nvar ReconnectingWebSocket = /** @class */ (function () {\r\n function ReconnectingWebSocket(url, protocols, options) {\r\n var _this = this;\r\n if (options === void 0) { options = {}; }\r\n this._listeners = {\r\n error: [],\r\n message: [],\r\n open: [],\r\n close: [],\r\n };\r\n this._retryCount = -1;\r\n this._shouldReconnect = true;\r\n this._connectLock = false;\r\n this._binaryType = 'blob';\r\n this._closeCalled = false;\r\n this._messageQueue = [];\r\n /**\r\n * An event listener to be called when the WebSocket connection's readyState changes to CLOSED\r\n */\r\n this.onclose = null;\r\n /**\r\n * An event listener to be called when an error occurs\r\n */\r\n this.onerror = null;\r\n /**\r\n * An event listener to be called when a message is received from the server\r\n */\r\n this.onmessage = null;\r\n /**\r\n * An event listener to be called when the WebSocket connection's readyState changes to OPEN;\r\n * this indicates that the connection is ready to send and receive data\r\n */\r\n this.onopen = null;\r\n this._handleOpen = function (event) {\r\n _this._debug('open event');\r\n var _a = _this._options.minUptime, minUptime = _a === void 0 ? DEFAULT.minUptime : _a;\r\n clearTimeout(_this._connectTimeout);\r\n _this._uptimeTimeout = setTimeout(function () { return _this._acceptOpen(); }, minUptime);\r\n _this._ws.binaryType = _this._binaryType;\r\n // send enqueued messages (messages sent before websocket open event)\r\n _this._messageQueue.forEach(function (message) { return _this._ws.send(message); });\r\n _this._messageQueue = [];\r\n if (_this.onopen) {\r\n _this.onopen(event);\r\n }\r\n _this._listeners.open.forEach(function (listener) { return _this._callEventListener(event, listener); });\r\n };\r\n this._handleMessage = function (event) {\r\n _this._debug('message event');\r\n if (_this.onmessage) {\r\n _this.onmessage(event);\r\n }\r\n _this._listeners.message.forEach(function (listener) { return _this._callEventListener(event, listener); });\r\n };\r\n this._handleError = function (event) {\r\n _this._debug('error event', event.message);\r\n _this._disconnect(undefined, event.message === 'TIMEOUT' ? 'timeout' : undefined);\r\n if (_this.onerror) {\r\n _this.onerror(event);\r\n }\r\n _this._debug('exec error listeners');\r\n _this._listeners.error.forEach(function (listener) { return _this._callEventListener(event, listener); });\r\n _this._connect();\r\n };\r\n this._handleClose = function (event) {\r\n _this._debug('close event');\r\n _this._clearTimeouts();\r\n if (_this._shouldReconnect) {\r\n _this._connect();\r\n }\r\n if (_this.onclose) {\r\n _this.onclose(event);\r\n }\r\n _this._listeners.close.forEach(function (listener) { return _this._callEventListener(event, listener); });\r\n };\r\n this._url = url;\r\n this._protocols = protocols;\r\n this._options = options;\r\n if (this._options.startClosed) {\r\n this._shouldReconnect = false;\r\n }\r\n this._connect();\r\n }\r\n Object.defineProperty(ReconnectingWebSocket, \"CONNECTING\", {\r\n get: function () {\r\n return 0;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket, \"OPEN\", {\r\n get: function () {\r\n return 1;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket, \"CLOSING\", {\r\n get: function () {\r\n return 2;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket, \"CLOSED\", {\r\n get: function () {\r\n return 3;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket.prototype, \"CONNECTING\", {\r\n get: function () {\r\n return ReconnectingWebSocket.CONNECTING;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket.prototype, \"OPEN\", {\r\n get: function () {\r\n return ReconnectingWebSocket.OPEN;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket.prototype, \"CLOSING\", {\r\n get: function () {\r\n return ReconnectingWebSocket.CLOSING;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket.prototype, \"CLOSED\", {\r\n get: function () {\r\n return ReconnectingWebSocket.CLOSED;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket.prototype, \"binaryType\", {\r\n get: function () {\r\n return this._ws ? this._ws.binaryType : this._binaryType;\r\n },\r\n set: function (value) {\r\n this._binaryType = value;\r\n if (this._ws) {\r\n this._ws.binaryType = value;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket.prototype, \"retryCount\", {\r\n /**\r\n * Returns the number or connection retries\r\n */\r\n get: function () {\r\n return Math.max(this._retryCount, 0);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket.prototype, \"bufferedAmount\", {\r\n /**\r\n * The number of bytes of data that have been queued using calls to send() but not yet\r\n * transmitted to the network. This value resets to zero once all queued data has been sent.\r\n * This value does not reset to zero when the connection is closed; if you keep calling send(),\r\n * this will continue to climb. Read only\r\n */\r\n get: function () {\r\n var bytes = this._messageQueue.reduce(function (acc, message) {\r\n if (typeof message === 'string') {\r\n acc += message.length; // not byte size\r\n }\r\n else if (message instanceof Blob) {\r\n acc += message.size;\r\n }\r\n else {\r\n acc += message.byteLength;\r\n }\r\n return acc;\r\n }, 0);\r\n return bytes + (this._ws ? this._ws.bufferedAmount : 0);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket.prototype, \"extensions\", {\r\n /**\r\n * The extensions selected by the server. This is currently only the empty string or a list of\r\n * extensions as negotiated by the connection\r\n */\r\n get: function () {\r\n return this._ws ? this._ws.extensions : '';\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket.prototype, \"protocol\", {\r\n /**\r\n * A string indicating the name of the sub-protocol the server selected;\r\n * this will be one of the strings specified in the protocols parameter when creating the\r\n * WebSocket object\r\n */\r\n get: function () {\r\n return this._ws ? this._ws.protocol : '';\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket.prototype, \"readyState\", {\r\n /**\r\n * The current state of the connection; this is one of the Ready state constants\r\n */\r\n get: function () {\r\n if (this._ws) {\r\n return this._ws.readyState;\r\n }\r\n return this._options.startClosed\r\n ? ReconnectingWebSocket.CLOSED\r\n : ReconnectingWebSocket.CONNECTING;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket.prototype, \"url\", {\r\n /**\r\n * The URL as resolved by the constructor\r\n */\r\n get: function () {\r\n return this._ws ? this._ws.url : '';\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Closes the WebSocket connection or connection attempt, if any. If the connection is already\r\n * CLOSED, this method does nothing\r\n */\r\n ReconnectingWebSocket.prototype.close = function (code, reason) {\r\n if (code === void 0) { code = 1000; }\r\n this._closeCalled = true;\r\n this._shouldReconnect = false;\r\n this._clearTimeouts();\r\n if (!this._ws) {\r\n this._debug('close enqueued: no ws instance');\r\n return;\r\n }\r\n if (this._ws.readyState === this.CLOSED) {\r\n this._debug('close: already closed');\r\n return;\r\n }\r\n this._ws.close(code, reason);\r\n };\r\n /**\r\n * Closes the WebSocket connection or connection attempt and connects again.\r\n * Resets retry counter;\r\n */\r\n ReconnectingWebSocket.prototype.reconnect = function (code, reason) {\r\n this._shouldReconnect = true;\r\n this._closeCalled = false;\r\n this._retryCount = -1;\r\n if (!this._ws || this._ws.readyState === this.CLOSED) {\r\n this._connect();\r\n }\r\n else {\r\n this._disconnect(code, reason);\r\n this._connect();\r\n }\r\n };\r\n /**\r\n * Enqueue specified data to be transmitted to the server over the WebSocket connection\r\n */\r\n ReconnectingWebSocket.prototype.send = function (data) {\r\n if (this._ws && this._ws.readyState === this.OPEN) {\r\n this._debug('send', data);\r\n this._ws.send(data);\r\n }\r\n else {\r\n var _a = this._options.maxEnqueuedMessages, maxEnqueuedMessages = _a === void 0 ? DEFAULT.maxEnqueuedMessages : _a;\r\n if (this._messageQueue.length < maxEnqueuedMessages) {\r\n this._debug('enqueue', data);\r\n this._messageQueue.push(data);\r\n }\r\n }\r\n };\r\n /**\r\n * Register an event handler of a specific event type\r\n */\r\n ReconnectingWebSocket.prototype.addEventListener = function (type, listener) {\r\n if (this._listeners[type]) {\r\n // @ts-ignore\r\n this._listeners[type].push(listener);\r\n }\r\n };\r\n ReconnectingWebSocket.prototype.dispatchEvent = function (event) {\r\n var e_1, _a;\r\n var listeners = this._listeners[event.type];\r\n if (listeners) {\r\n try {\r\n for (var listeners_1 = __values(listeners), listeners_1_1 = listeners_1.next(); !listeners_1_1.done; listeners_1_1 = listeners_1.next()) {\r\n var listener = listeners_1_1.value;\r\n this._callEventListener(event, listener);\r\n }\r\n }\r\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\r\n finally {\r\n try {\r\n if (listeners_1_1 && !listeners_1_1.done && (_a = listeners_1.return)) _a.call(listeners_1);\r\n }\r\n finally { if (e_1) throw e_1.error; }\r\n }\r\n }\r\n return true;\r\n };\r\n /**\r\n * Removes an event listener\r\n */\r\n ReconnectingWebSocket.prototype.removeEventListener = function (type, listener) {\r\n if (this._listeners[type]) {\r\n // @ts-ignore\r\n this._listeners[type] = this._listeners[type].filter(function (l) { return l !== listener; });\r\n }\r\n };\r\n ReconnectingWebSocket.prototype._debug = function () {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n if (this._options.debug) {\r\n // not using spread because compiled version uses Symbols\r\n // tslint:disable-next-line\r\n console.log.apply(console, __spread(['RWS>'], args));\r\n }\r\n };\r\n ReconnectingWebSocket.prototype._getNextDelay = function () {\r\n var _a = this._options, _b = _a.reconnectionDelayGrowFactor, reconnectionDelayGrowFactor = _b === void 0 ? DEFAULT.reconnectionDelayGrowFactor : _b, _c = _a.minReconnectionDelay, minReconnectionDelay = _c === void 0 ? DEFAULT.minReconnectionDelay : _c, _d = _a.maxReconnectionDelay, maxReconnectionDelay = _d === void 0 ? DEFAULT.maxReconnectionDelay : _d;\r\n var delay = 0;\r\n if (this._retryCount > 0) {\r\n delay =\r\n minReconnectionDelay * Math.pow(reconnectionDelayGrowFactor, this._retryCount - 1);\r\n if (delay > maxReconnectionDelay) {\r\n delay = maxReconnectionDelay;\r\n }\r\n }\r\n this._debug('next delay', delay);\r\n return delay;\r\n };\r\n ReconnectingWebSocket.prototype._wait = function () {\r\n var _this = this;\r\n return new Promise(function (resolve) {\r\n setTimeout(resolve, _this._getNextDelay());\r\n });\r\n };\r\n ReconnectingWebSocket.prototype._getNextUrl = function (urlProvider) {\r\n if (typeof urlProvider === 'string') {\r\n return Promise.resolve(urlProvider);\r\n }\r\n if (typeof urlProvider === 'function') {\r\n var url = urlProvider();\r\n if (typeof url === 'string') {\r\n return Promise.resolve(url);\r\n }\r\n if (!!url.then) {\r\n return url;\r\n }\r\n }\r\n throw Error('Invalid URL');\r\n };\r\n ReconnectingWebSocket.prototype._connect = function () {\r\n var _this = this;\r\n if (this._connectLock || !this._shouldReconnect) {\r\n return;\r\n }\r\n this._connectLock = true;\r\n var _a = this._options, _b = _a.maxRetries, maxRetries = _b === void 0 ? DEFAULT.maxRetries : _b, _c = _a.connectionTimeout, connectionTimeout = _c === void 0 ? DEFAULT.connectionTimeout : _c, _d = _a.WebSocket, WebSocket = _d === void 0 ? getGlobalWebSocket() : _d;\r\n if (this._retryCount >= maxRetries) {\r\n this._debug('max retries reached', this._retryCount, '>=', maxRetries);\r\n return;\r\n }\r\n this._retryCount++;\r\n this._debug('connect', this._retryCount);\r\n this._removeListeners();\r\n if (!isWebSocket(WebSocket)) {\r\n throw Error('No valid WebSocket class provided');\r\n }\r\n this._wait()\r\n .then(function () { return _this._getNextUrl(_this._url); })\r\n .then(function (url) {\r\n // close could be called before creating the ws\r\n if (_this._closeCalled) {\r\n return;\r\n }\r\n _this._debug('connect', { url: url, protocols: _this._protocols });\r\n _this._ws = _this._protocols\r\n ? new WebSocket(url, _this._protocols)\r\n : new WebSocket(url);\r\n _this._ws.binaryType = _this._binaryType;\r\n _this._connectLock = false;\r\n _this._addListeners();\r\n _this._connectTimeout = setTimeout(function () { return _this._handleTimeout(); }, connectionTimeout);\r\n });\r\n };\r\n ReconnectingWebSocket.prototype._handleTimeout = function () {\r\n this._debug('timeout event');\r\n this._handleError(new ErrorEvent(Error('TIMEOUT'), this));\r\n };\r\n ReconnectingWebSocket.prototype._disconnect = function (code, reason) {\r\n if (code === void 0) { code = 1000; }\r\n this._clearTimeouts();\r\n if (!this._ws) {\r\n return;\r\n }\r\n this._removeListeners();\r\n try {\r\n this._ws.close(code, reason);\r\n this._handleClose(new CloseEvent(code, reason, this));\r\n }\r\n catch (error) {\r\n // ignore\r\n }\r\n };\r\n ReconnectingWebSocket.prototype._acceptOpen = function () {\r\n this._debug('accept open');\r\n this._retryCount = 0;\r\n };\r\n ReconnectingWebSocket.prototype._callEventListener = function (event, listener) {\r\n if ('handleEvent' in listener) {\r\n // @ts-ignore\r\n listener.handleEvent(event);\r\n }\r\n else {\r\n // @ts-ignore\r\n listener(event);\r\n }\r\n };\r\n ReconnectingWebSocket.prototype._removeListeners = function () {\r\n if (!this._ws) {\r\n return;\r\n }\r\n this._debug('removeListeners');\r\n this._ws.removeEventListener('open', this._handleOpen);\r\n this._ws.removeEventListener('close', this._handleClose);\r\n this._ws.removeEventListener('message', this._handleMessage);\r\n // @ts-ignore\r\n this._ws.removeEventListener('error', this._handleError);\r\n };\r\n ReconnectingWebSocket.prototype._addListeners = function () {\r\n if (!this._ws) {\r\n return;\r\n }\r\n this._debug('addListeners');\r\n this._ws.addEventListener('open', this._handleOpen);\r\n this._ws.addEventListener('close', this._handleClose);\r\n this._ws.addEventListener('message', this._handleMessage);\r\n // @ts-ignore\r\n this._ws.addEventListener('error', this._handleError);\r\n };\r\n ReconnectingWebSocket.prototype._clearTimeouts = function () {\r\n clearTimeout(this._connectTimeout);\r\n clearTimeout(this._uptimeTimeout);\r\n };\r\n return ReconnectingWebSocket;\r\n}());\n\nexport default ReconnectingWebSocket;\n","import ReconnectingWebSocket from \"reconnecting-websocket\";\n\n//#region src/lib/AutoReconnectingWebsocket.ts\nvar AutoReconnectingWebsocket = class extends ReconnectingWebSocket {\n\tconstructor(targetUrl, opts = {}) {\n\t\tconsole.log(\"Opening websocket to\", targetUrl);\n\t\tsuper(() => this.targetUrl || targetUrl, void 0, { startClosed: true });\n\t\tthis.opts = opts;\n\t\tthis.disposed = false;\n\t\tObject.defineProperty(this, \"url\", { get() {\n\t\t\treturn this.targetUrl;\n\t\t} });\n\t\tthis.targetUrl = targetUrl;\n\t\tthis.addEventListener(\"open\", () => {\n\t\t\tconsole.log(`Websocket to ${this.url} opened`);\n\t\t});\n\t\tthis.addEventListener(\"message\", (ev) => {\n\t\t\tif (!this.receivedFirstMessage) this.receivedFirstMessage = ev;\n\t\t});\n\t\tthis.addEventListener(\"close\", () => {\n\t\t\tconsole.log(`Websocket to ${this.url} closed`);\n\t\t});\n\t\tconst origReconnect = this.reconnect;\n\t\tthis.reconnect = () => {\n\t\t\tif (this.opts.mock) this.opts.mock.handleWebsocketConnection(this);\n\t\t\telse origReconnect.apply(this);\n\t\t};\n\t\tthis.reconnect();\n\t}\n\tchangeUrl(targetUrl) {\n\t\tthis.receivedFirstMessage = void 0;\n\t\tthis.targetUrl = targetUrl;\n\t\tthis.reconnect();\n\t}\n\tsendJson(data) {\n\t\tif (this.opts.mock) this.opts.mock.handleWebsocketMessage(this, JSON.stringify(data));\n\t\telse this.send(JSON.stringify(data));\n\t}\n\t/**\n\t* Permanently close this websocket and indicate that\n\t* this object should not be used again.\n\t**/\n\tdispose() {\n\t\tthis.close();\n\t\tthis.disposed = true;\n\t\tif (this.opts.onDispose) this.opts.onDispose();\n\t}\n\t/**\n\t* Returns a promise that resolves once the websocket\n\t* is in the OPEN state. */\n\tasync opened() {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tif (this.readyState === WebSocket.OPEN) resolve();\n\t\t\telse {\n\t\t\t\tthis.addEventListener(\"open\", () => resolve());\n\t\t\t\tthis.addEventListener(\"error\", reject);\n\t\t\t}\n\t\t});\n\t}\n\t/**\n\t* Returns a promise that resolves once the websocket\n\t* is in the CLOSED state. */\n\tasync closed() {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tif (this.readyState === WebSocket.CLOSED) resolve();\n\t\t\telse {\n\t\t\t\tthis.addEventListener(\"close\", () => resolve());\n\t\t\t\tthis.addEventListener(\"error\", reject);\n\t\t\t}\n\t\t});\n\t}\n\t/**\n\t* Returns a promise that resolves when the first message\n\t* is received from the websocket. Resolves immediately if\n\t* the first message has already been received.\n\t*/\n\tasync firstMessage() {\n\t\tif (this.receivedFirstMessage) return this.receivedFirstMessage;\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst onMessage = (ev) => {\n\t\t\t\tthis.receivedFirstMessage = ev;\n\t\t\t\tthis.removeEventListener(\"message\", onMessage);\n\t\t\t\tthis.removeEventListener(\"error\", onError);\n\t\t\t\tresolve(ev);\n\t\t\t};\n\t\t\tconst onError = (ev) => {\n\t\t\t\tthis.removeEventListener(\"message\", onMessage);\n\t\t\t\tthis.removeEventListener(\"error\", onError);\n\t\t\t\treject(ev);\n\t\t\t};\n\t\t\tthis.addEventListener(\"message\", onMessage);\n\t\t\tthis.addEventListener(\"error\", onError);\n\t\t});\n\t}\n\t/**\n\t* Returns a promise that resolves when the next message\n\t* is received from the websocket.\n\t*/\n\tasync nextMessage() {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst onMessage = (ev) => {\n\t\t\t\tthis.removeEventListener(\"message\", onMessage);\n\t\t\t\tthis.removeEventListener(\"error\", onError);\n\t\t\t\tresolve(ev);\n\t\t\t};\n\t\t\tconst onError = (ev) => {\n\t\t\t\tthis.removeEventListener(\"message\", onMessage);\n\t\t\t\tthis.removeEventListener(\"error\", onError);\n\t\t\t\treject(ev);\n\t\t\t};\n\t\t\tthis.addEventListener(\"message\", onMessage);\n\t\t\tthis.addEventListener(\"error\", onError);\n\t\t});\n\t}\n};\n\n//#endregion\n//#region src/lib/availableStorage.ts\n/**\n* Safety wrapper around browser localStorage providing context availability\n* checks and JSON parsing\n*/\nvar AvailableStorage = class {\n\tconstructor() {\n\t\tthis.available = typeof window !== \"undefined\" && !!window.localStorage;\n\t}\n\tgetJSON(key) {\n\t\tif (!this.available) return null;\n\t\tconst result = window.localStorage.getItem(key);\n\t\tif (result === null) return null;\n\t\ttry {\n\t\t\treturn JSON.parse(result);\n\t\t} catch (err) {\n\t\t\treturn null;\n\t\t}\n\t}\n\tsetJSON(key, obj) {\n\t\tif (!this.available) return null;\n\t\twindow.localStorage.setItem(key, JSON.stringify(obj));\n\t}\n\tdelete(key) {\n\t\tif (!this.available) return null;\n\t\twindow.localStorage.removeItem(key);\n\t}\n\tsetString(key, value) {\n\t\tif (!this.available) return null;\n\t\twindow.localStorage.setItem(key, value);\n\t}\n\tgetString(key) {\n\t\tif (!this.available) return null;\n\t\treturn window.localStorage.getItem(key);\n\t}\n};\nconst availableStorage = new AvailableStorage();\n\n//#endregion\n//#region src/LoginWithAuth0.ts\nconst DOMAIN_SUFFIX = \"wandelbots.io\";\n/**\n* Mapping of stages to Auth0 configurations.\n* The client ids are public identifiers for a specific auth0 application\n* and are safe to include in client-side code.\n* https://auth0.com/docs/get-started/applications/application-settings\n*/\nconst auth0ConfigMap = {\n\tdev: {\n\t\tdomain: `https://auth.portal.dev.${DOMAIN_SUFFIX}`,\n\t\tclientId: \"fLbJD0RLp5r2Dpucm5j8BjwMR6Hunfha\"\n\t},\n\tstg: {\n\t\tdomain: `https://auth.portal.stg.${DOMAIN_SUFFIX}`,\n\t\tclientId: \"joVDeD9e786WzFNSGCqoVq7HNkWt5j6s\"\n\t},\n\tprod: {\n\t\tdomain: `https://auth.portal.${DOMAIN_SUFFIX}`,\n\t\tclientId: \"J7WJUi38xVQdJAEBNRT9Xw1b0fXDb4J2\"\n\t}\n};\n/** Determine which Auth0 configuration to use based on instance URL */\nconst getAuth0Config = (instanceUrl) => {\n\tif (instanceUrl.endsWith(`dev.${DOMAIN_SUFFIX}`)) return auth0ConfigMap.dev;\n\tif (instanceUrl.endsWith(`stg.${DOMAIN_SUFFIX}`)) return auth0ConfigMap.stg;\n\tif (instanceUrl.endsWith(DOMAIN_SUFFIX)) return auth0ConfigMap.prod;\n\tthrow new Error(\"Unsupported instance URL. Cannot determine Auth0 configuration.\");\n};\n/**\n* Initializes Auth0 login process using redirect if necessary and retrieves an access token.\n* Returns null when an access token should not be needed to authenticate (i.e. cookie auth\n* when deployed on the instance domain)\n*/\nconst loginWithAuth0 = async (instanceUrl) => {\n\tif (typeof window === \"undefined\") throw new Error(`Access token must be set to use NovaClient when not in a browser environment.`);\n\tconst auth0Config = getAuth0Config(instanceUrl);\n\tif (new URL(instanceUrl).origin === window.location.origin) {\n\t\twindow.location.reload();\n\t\tthrow new Error(\"Failed to reload page to get auth details, please refresh manually\");\n\t}\n\tconst { Auth0Client } = await import(\"@auth0/auth0-spa-js\");\n\tconst auth0Client = new Auth0Client({\n\t\tdomain: auth0Config.domain,\n\t\tclientId: auth0Config.clientId ?? \"\",\n\t\tuseRefreshTokens: false,\n\t\tauthorizationParams: {\n\t\t\taudience: \"nova-api\",\n\t\t\tredirect_uri: window.location.origin\n\t\t}\n\t});\n\tif (window.location.search.includes(\"code=\") && window.location.search.includes(\"state=\")) {\n\t\tconst { appState } = await auth0Client.handleRedirectCallback();\n\t\twindow.history.replaceState({}, document.title, appState?.returnTo || window.location.pathname);\n\t} else await auth0Client.loginWithRedirect();\n\treturn await auth0Client.getTokenSilently();\n};\n\n//#endregion\nexport { availableStorage as n, AutoReconnectingWebsocket as r, loginWithAuth0 as t };\n//# sourceMappingURL=LoginWithAuth0-wQB-Sol1.mjs.map","function normalize (strArray) {\n var resultArray = [];\n if (strArray.length === 0) { return ''; }\n\n if (typeof strArray[0] !== 'string') {\n throw new TypeError('Url must be a string. Received ' + strArray[0]);\n }\n\n // If the first part is a plain protocol, we combine it with the next part.\n if (strArray[0].match(/^[^/:]+:\\/*$/) && strArray.length > 1) {\n var first = strArray.shift();\n strArray[0] = first + strArray[0];\n }\n\n // There must be two or three slashes in the file protocol, two slashes in anything else.\n if (strArray[0].match(/^file:\\/\\/\\//)) {\n strArray[0] = strArray[0].replace(/^([^/:]+):\\/*/, '$1:///');\n } else {\n strArray[0] = strArray[0].replace(/^([^/:]+):\\/*/, '$1://');\n }\n\n for (var i = 0; i < strArray.length; i++) {\n var component = strArray[i];\n\n if (typeof component !== 'string') {\n throw new TypeError('Url must be a string. Received ' + component);\n }\n\n if (component === '') { continue; }\n\n if (i > 0) {\n // Removing the starting slashes for each component but the first.\n component = component.replace(/^[\\/]+/, '');\n }\n if (i < strArray.length - 1) {\n // Removing the ending slashes for each component but the last.\n component = component.replace(/[\\/]+$/, '');\n } else {\n // For the last component we will combine multiple slashes to a single one.\n component = component.replace(/[\\/]+$/, '/');\n }\n\n resultArray.push(component);\n\n }\n\n var str = resultArray.join('/');\n // Each input component is now separated by a single slash except the possible first plain protocol part.\n\n // remove trailing slash before parameters or hash\n str = str.replace(/\\/(\\?|&|#[^!])/g, '$1');\n\n // replace ? in parameters with &\n var parts = str.split('?');\n str = parts.shift() + (parts.length > 0 ? '?': '') + parts.join('&');\n\n return str;\n}\n\nexport default function urlJoin() {\n var input;\n\n if (typeof arguments[0] === 'object') {\n input = arguments[0];\n } else {\n input = [].slice.call(arguments);\n }\n\n return normalize(input);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PathError = exports.TokenData = void 0;\nexports.parse = parse;\nexports.compile = compile;\nexports.match = match;\nexports.pathToRegexp = pathToRegexp;\nexports.stringify = stringify;\nconst DEFAULT_DELIMITER = \"/\";\nconst NOOP_VALUE = (value) => value;\nconst ID_START = /^[$_\\p{ID_Start}]$/u;\nconst ID_CONTINUE = /^[$\\u200c\\u200d\\p{ID_Continue}]$/u;\nconst SIMPLE_TOKENS = {\n // Groups.\n \"{\": \"{\",\n \"}\": \"}\",\n // Reserved.\n \"(\": \"(\",\n \")\": \")\",\n \"[\": \"[\",\n \"]\": \"]\",\n \"+\": \"+\",\n \"?\": \"?\",\n \"!\": \"!\",\n};\n/**\n * Escape text for stringify to path.\n */\nfunction escapeText(str) {\n return str.replace(/[{}()\\[\\]+?!:*\\\\]/g, \"\\\\$&\");\n}\n/**\n * Escape a regular expression string.\n */\nfunction escape(str) {\n return str.replace(/[.+*?^${}()[\\]|/\\\\]/g, \"\\\\$&\");\n}\n/**\n * Tokenized path instance.\n */\nclass TokenData {\n constructor(tokens, originalPath) {\n this.tokens = tokens;\n this.originalPath = originalPath;\n }\n}\nexports.TokenData = TokenData;\n/**\n * ParseError is thrown when there is an error processing the path.\n */\nclass PathError extends TypeError {\n constructor(message, originalPath) {\n let text = message;\n if (originalPath)\n text += `: ${originalPath}`;\n text += `; visit https://git.new/pathToRegexpError for info`;\n super(text);\n this.originalPath = originalPath;\n }\n}\nexports.PathError = PathError;\n/**\n * Parse a string for the raw tokens.\n */\nfunction parse(str, options = {}) {\n const { encodePath = NOOP_VALUE } = options;\n const chars = [...str];\n const tokens = [];\n let index = 0;\n let pos = 0;\n function name() {\n let value = \"\";\n if (ID_START.test(chars[index])) {\n do {\n value += chars[index++];\n } while (ID_CONTINUE.test(chars[index]));\n }\n else if (chars[index] === '\"') {\n let quoteStart = index;\n while (index++ < chars.length) {\n if (chars[index] === '\"') {\n index++;\n quoteStart = 0;\n break;\n }\n // Increment over escape characters.\n if (chars[index] === \"\\\\\")\n index++;\n value += chars[index];\n }\n if (quoteStart) {\n throw new PathError(`Unterminated quote at index ${quoteStart}`, str);\n }\n }\n if (!value) {\n throw new PathError(`Missing parameter name at index ${index}`, str);\n }\n return value;\n }\n while (index < chars.length) {\n const value = chars[index];\n const type = SIMPLE_TOKENS[value];\n if (type) {\n tokens.push({ type, index: index++, value });\n }\n else if (value === \"\\\\\") {\n tokens.push({ type: \"escape\", index: index++, value: chars[index++] });\n }\n else if (value === \":\") {\n tokens.push({ type: \"param\", index: index++, value: name() });\n }\n else if (value === \"*\") {\n tokens.push({ type: \"wildcard\", index: index++, value: name() });\n }\n else {\n tokens.push({ type: \"char\", index: index++, value });\n }\n }\n tokens.push({ type: \"end\", index, value: \"\" });\n function consumeUntil(endType) {\n const output = [];\n while (true) {\n const token = tokens[pos++];\n if (token.type === endType)\n break;\n if (token.type === \"char\" || token.type === \"escape\") {\n let path = token.value;\n let cur = tokens[pos];\n while (cur.type === \"char\" || cur.type === \"escape\") {\n path += cur.value;\n cur = tokens[++pos];\n }\n output.push({\n type: \"text\",\n value: encodePath(path),\n });\n continue;\n }\n if (token.type === \"param\" || token.type === \"wildcard\") {\n output.push({\n type: token.type,\n name: token.value,\n });\n continue;\n }\n if (token.type === \"{\") {\n output.push({\n type: \"group\",\n tokens: consumeUntil(\"}\"),\n });\n continue;\n }\n throw new PathError(`Unexpected ${token.type} at index ${token.index}, expected ${endType}`, str);\n }\n return output;\n }\n return new TokenData(consumeUntil(\"end\"), str);\n}\n/**\n * Compile a string to a template function for the path.\n */\nfunction compile(path, options = {}) {\n const { encode = encodeURIComponent, delimiter = DEFAULT_DELIMITER } = options;\n const data = typeof path === \"object\" ? path : parse(path, options);\n const fn = tokensToFunction(data.tokens, delimiter, encode);\n return function path(params = {}) {\n const [path, ...missing] = fn(params);\n if (missing.length) {\n throw new TypeError(`Missing parameters: ${missing.join(\", \")}`);\n }\n return path;\n };\n}\nfunction tokensToFunction(tokens, delimiter, encode) {\n const encoders = tokens.map((token) => tokenToFunction(token, delimiter, encode));\n return (data) => {\n const result = [\"\"];\n for (const encoder of encoders) {\n const [value, ...extras] = encoder(data);\n result[0] += value;\n result.push(...extras);\n }\n return result;\n };\n}\n/**\n * Convert a single token into a path building function.\n */\nfunction tokenToFunction(token, delimiter, encode) {\n if (token.type === \"text\")\n return () => [token.value];\n if (token.type === \"group\") {\n const fn = tokensToFunction(token.tokens, delimiter, encode);\n return (data) => {\n const [value, ...missing] = fn(data);\n if (!missing.length)\n return [value];\n return [\"\"];\n };\n }\n const encodeValue = encode || NOOP_VALUE;\n if (token.type === \"wildcard\" && encode !== false) {\n return (data) => {\n const value = data[token.name];\n if (value == null)\n return [\"\", token.name];\n if (!Array.isArray(value) || value.length === 0) {\n throw new TypeError(`Expected \"${token.name}\" to be a non-empty array`);\n }\n return [\n value\n .map((value, index) => {\n if (typeof value !== \"string\") {\n throw new TypeError(`Expected \"${token.name}/${index}\" to be a string`);\n }\n return encodeValue(value);\n })\n .join(delimiter),\n ];\n };\n }\n return (data) => {\n const value = data[token.name];\n if (value == null)\n return [\"\", token.name];\n if (typeof value !== \"string\") {\n throw new TypeError(`Expected \"${token.name}\" to be a string`);\n }\n return [encodeValue(value)];\n };\n}\n/**\n * Transform a path into a match function.\n */\nfunction match(path, options = {}) {\n const { decode = decodeURIComponent, delimiter = DEFAULT_DELIMITER } = options;\n const { regexp, keys } = pathToRegexp(path, options);\n const decoders = keys.map((key) => {\n if (decode === false)\n return NOOP_VALUE;\n if (key.type === \"param\")\n return decode;\n return (value) => value.split(delimiter).map(decode);\n });\n return function match(input) {\n const m = regexp.exec(input);\n if (!m)\n return false;\n const path = m[0];\n const params = Object.create(null);\n for (let i = 1; i < m.length; i++) {\n if (m[i] === undefined)\n continue;\n const key = keys[i - 1];\n const decoder = decoders[i - 1];\n params[key.name] = decoder(m[i]);\n }\n return { path, params };\n };\n}\nfunction pathToRegexp(path, options = {}) {\n const { delimiter = DEFAULT_DELIMITER, end = true, sensitive = false, trailing = true, } = options;\n const keys = [];\n const flags = sensitive ? \"\" : \"i\";\n const sources = [];\n for (const input of pathsToArray(path, [])) {\n const data = typeof input === \"object\" ? input : parse(input, options);\n for (const tokens of flatten(data.tokens, 0, [])) {\n sources.push(toRegExpSource(tokens, delimiter, keys, data.originalPath));\n }\n }\n let pattern = `^(?:${sources.join(\"|\")})`;\n if (trailing)\n pattern += `(?:${escape(delimiter)}$)?`;\n pattern += end ? \"$\" : `(?=${escape(delimiter)}|$)`;\n const regexp = new RegExp(pattern, flags);\n return { regexp, keys };\n}\n/**\n * Convert a path or array of paths into a flat array.\n */\nfunction pathsToArray(paths, init) {\n if (Array.isArray(paths)) {\n for (const p of paths)\n pathsToArray(p, init);\n }\n else {\n init.push(paths);\n }\n return init;\n}\n/**\n * Generate a flat list of sequence tokens from the given tokens.\n */\nfunction* flatten(tokens, index, init) {\n if (index === tokens.length) {\n return yield init;\n }\n const token = tokens[index];\n if (token.type === \"group\") {\n for (const seq of flatten(token.tokens, 0, init.slice())) {\n yield* flatten(tokens, index + 1, seq);\n }\n }\n else {\n init.push(token);\n }\n yield* flatten(tokens, index + 1, init);\n}\n/**\n * Transform a flat sequence of tokens into a regular expression.\n */\nfunction toRegExpSource(tokens, delimiter, keys, originalPath) {\n let result = \"\";\n let backtrack = \"\";\n let isSafeSegmentParam = true;\n for (const token of tokens) {\n if (token.type === \"text\") {\n result += escape(token.value);\n backtrack += token.value;\n isSafeSegmentParam || (isSafeSegmentParam = token.value.includes(delimiter));\n continue;\n }\n if (token.type === \"param\" || token.type === \"wildcard\") {\n if (!isSafeSegmentParam && !backtrack) {\n throw new PathError(`Missing text before \"${token.name}\" ${token.type}`, originalPath);\n }\n if (token.type === \"param\") {\n result += `(${negate(delimiter, isSafeSegmentParam ? \"\" : backtrack)}+)`;\n }\n else {\n result += `([\\\\s\\\\S]+)`;\n }\n keys.push(token);\n backtrack = \"\";\n isSafeSegmentParam = false;\n continue;\n }\n }\n return result;\n}\n/**\n * Block backtracking on previous text and ignore delimiter string.\n */\nfunction negate(delimiter, backtrack) {\n if (backtrack.length < 2) {\n if (delimiter.length < 2)\n return `[^${escape(delimiter + backtrack)}]`;\n return `(?:(?!${escape(delimiter)})[^${escape(backtrack)}])`;\n }\n if (delimiter.length < 2) {\n return `(?:(?!${escape(backtrack)})[^${escape(delimiter)}])`;\n }\n return `(?:(?!${escape(backtrack)}|${escape(delimiter)})[\\\\s\\\\S])`;\n}\n/**\n * Stringify an array of tokens into a path string.\n */\nfunction stringifyTokens(tokens) {\n let value = \"\";\n let i = 0;\n function name(value) {\n const isSafe = isNameSafe(value) && isNextNameSafe(tokens[i]);\n return isSafe ? value : JSON.stringify(value);\n }\n while (i < tokens.length) {\n const token = tokens[i++];\n if (token.type === \"text\") {\n value += escapeText(token.value);\n continue;\n }\n if (token.type === \"group\") {\n value += `{${stringifyTokens(token.tokens)}}`;\n continue;\n }\n if (token.type === \"param\") {\n value += `:${name(token.name)}`;\n continue;\n }\n if (token.type === \"wildcard\") {\n value += `*${name(token.name)}`;\n continue;\n }\n throw new TypeError(`Unknown token type: ${token.type}`);\n }\n return value;\n}\n/**\n * Stringify token data into a path string.\n */\nfunction stringify(data) {\n return stringifyTokens(data.tokens);\n}\n/**\n * Validate the parameter name contains valid ID characters.\n */\nfunction isNameSafe(name) {\n const [first, ...rest] = name;\n return ID_START.test(first) && rest.every((char) => ID_CONTINUE.test(char));\n}\n/**\n * Validate the next token does not interfere with the current param name.\n */\nfunction isNextNameSafe(token) {\n if (token && token.type === \"text\")\n return !ID_CONTINUE.test(token.value[0]);\n return true;\n}\n//# sourceMappingURL=index.js.map","import { n as availableStorage, r as AutoReconnectingWebsocket, t as loginWithAuth0 } from \"../../LoginWithAuth0-wQB-Sol1.mjs\";\nimport axios, { AxiosError, isAxiosError } from \"axios\";\nimport urlJoin from \"url-join\";\nimport * as pathToRegexp from \"path-to-regexp\";\nimport { ApplicationApi, BUSInputsOutputsApi, CellApi, ControllerApi, ControllerInputsOutputsApi, JoggingApi, KinematicsApi, MotionGroupApi, MotionGroupModelsApi, StoreCollisionComponentsApi, StoreCollisionSetupsApi, StoreObjectApi, SystemApi, TrajectoryCachingApi, TrajectoryExecutionApi, TrajectoryPlanningApi, VirtualControllerApi, VirtualControllerBehaviorApi, VirtualControllerInputsOutputsApi } from \"@wandelbots/nova-api/v2\";\n\nexport * from \"@wandelbots/nova-api/v2\"\n\n//#region src/lib/v2/NovaCellAPIClient.ts\n/**\n* API client providing type-safe access to all the Nova API REST endpoints\n* associated with a specific cell id.\n*/\nvar NovaCellAPIClient = class {\n\tconstructor(cellId, opts) {\n\t\tthis.cellId = cellId;\n\t\tthis.opts = opts;\n\t\tthis.system = this.withUnwrappedResponsesOnly(SystemApi);\n\t\tthis.cell = this.withUnwrappedResponsesOnly(CellApi);\n\t\tthis.motionGroup = this.withCellId(MotionGroupApi);\n\t\tthis.motionGroupModels = this.withCellId(MotionGroupModelsApi);\n\t\tthis.controller = this.withCellId(ControllerApi);\n\t\tthis.controllerIOs = this.withCellId(ControllerInputsOutputsApi);\n\t\tthis.trajectoryPlanning = this.withCellId(TrajectoryPlanningApi);\n\t\tthis.trajectoryExecution = this.withCellId(TrajectoryExecutionApi);\n\t\tthis.trajectoryCaching = this.withCellId(TrajectoryCachingApi);\n\t\tthis.application = this.withCellId(ApplicationApi);\n\t\tthis.applicationGlobal = this.withUnwrappedResponsesOnly(ApplicationApi);\n\t\tthis.jogging = this.withCellId(JoggingApi);\n\t\tthis.kinematics = this.withCellId(KinematicsApi);\n\t\tthis.busInputsOutputs = this.withCellId(BUSInputsOutputsApi);\n\t\tthis.virtualController = this.withCellId(VirtualControllerApi);\n\t\tthis.virtualControllerBehavior = this.withCellId(VirtualControllerBehaviorApi);\n\t\tthis.virtualControllerIOs = this.withCellId(VirtualControllerInputsOutputsApi);\n\t\tthis.storeObject = this.withCellId(StoreObjectApi);\n\t\tthis.storeCollisionComponents = this.withCellId(StoreCollisionComponentsApi);\n\t\tthis.storeCollisionSetups = this.withCellId(StoreCollisionSetupsApi);\n\t}\n\t/**\n\t* Some TypeScript sorcery which alters the API class methods so you don't\n\t* have to pass the cell id to every single one, and de-encapsulates the\n\t* response data\n\t*/\n\twithCellId(ApiConstructor) {\n\t\tconst apiClient = new ApiConstructor({\n\t\t\t...this.opts,\n\t\t\tisJsonMime: (mime) => {\n\t\t\t\treturn mime === \"application/json\";\n\t\t\t}\n\t\t}, this.opts.basePath ?? \"\", this.opts.axiosInstance ?? axios.create());\n\t\tfor (const key of Reflect.ownKeys(Reflect.getPrototypeOf(apiClient))) if (key !== \"constructor\" && typeof apiClient[key] === \"function\") {\n\t\t\tconst originalFunction = apiClient[key];\n\t\t\tapiClient[key] = (...args) => {\n\t\t\t\treturn originalFunction.apply(apiClient, [this.cellId, ...args]).then((res) => res.data);\n\t\t\t};\n\t\t}\n\t\treturn apiClient;\n\t}\n\t/**\n\t* As withCellId, but only does the response unwrapping\n\t*/\n\twithUnwrappedResponsesOnly(ApiConstructor) {\n\t\tconst apiClient = new ApiConstructor({\n\t\t\t...this.opts,\n\t\t\tisJsonMime: (mime) => {\n\t\t\t\treturn mime === \"application/json\";\n\t\t\t}\n\t\t}, this.opts.basePath ?? \"\", this.opts.axiosInstance ?? axios.create());\n\t\tfor (const key of Reflect.ownKeys(Reflect.getPrototypeOf(apiClient))) if (key !== \"constructor\" && typeof apiClient[key] === \"function\") {\n\t\t\tconst originalFunction = apiClient[key];\n\t\t\tapiClient[key] = (...args) => {\n\t\t\t\treturn originalFunction.apply(apiClient, args).then((res) => res.data);\n\t\t\t};\n\t\t}\n\t\treturn apiClient;\n\t}\n};\n\n//#endregion\n//#region src/lib/v2/mock/MockNovaInstance.ts\n/**\n* Ultra-simplified mock Nova server for testing stuff\n*/\nvar MockNovaInstance = class {\n\tconstructor() {\n\t\tthis.connections = [];\n\t}\n\tasync handleAPIRequest(config) {\n\t\tconst apiHandlers = [\n\t\t\t{\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tpath: \"/cells/:cellId/controllers\",\n\t\t\t\thandle() {\n\t\t\t\t\treturn [\"mock-ur5e\"];\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tpath: \"/cells/:cellId/controllers/:controllerId\",\n\t\t\t\thandle() {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tconfiguration: {\n\t\t\t\t\t\t\tinitial_joint_position: \"[0,-1.571,-1.571,-1.571,1.571,-1.571,0]\",\n\t\t\t\t\t\t\tkind: \"VirtualController\",\n\t\t\t\t\t\t\tmanufacturer: \"universalrobots\",\n\t\t\t\t\t\t\ttype: \"universalrobots-ur5e\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\tname: \"mock-ur5\"\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tpath: \"/cells/:cellId/controllers/:controllerId/state\",\n\t\t\t\thandle() {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tmode: \"MODE_CONTROL\",\n\t\t\t\t\t\tlast_error: [],\n\t\t\t\t\t\ttimestamp: \"2025-10-16T09:19:26.634534092Z\",\n\t\t\t\t\t\tsequence_number: 1054764,\n\t\t\t\t\t\tcontroller: \"mock-ur5e\",\n\t\t\t\t\t\toperation_mode: \"OPERATION_MODE_AUTO\",\n\t\t\t\t\t\tsafety_state: \"SAFETY_STATE_NORMAL\",\n\t\t\t\t\t\tvelocity_override: 100,\n\t\t\t\t\t\tmotion_groups: [{\n\t\t\t\t\t\t\ttimestamp: \"2025-10-16T09:19:26.634534092Z\",\n\t\t\t\t\t\t\tsequence_number: 1054764,\n\t\t\t\t\t\t\tmotion_group: \"0@mock-ur5e\",\n\t\t\t\t\t\t\tcontroller: \"mock-ur5e\",\n\t\t\t\t\t\t\tjoint_position: [\n\t\t\t\t\t\t\t\t1.487959623336792,\n\t\t\t\t\t\t\t\t-1.8501918315887451,\n\t\t\t\t\t\t\t\t1.8003005981445312,\n\t\t\t\t\t\t\t\t6.034560203552246,\n\t\t\t\t\t\t\t\t1.4921919107437134,\n\t\t\t\t\t\t\t\t1.593459963798523\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tjoint_limit_reached: { limit_reached: [\n\t\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t\t\tfalse\n\t\t\t\t\t\t\t] },\n\t\t\t\t\t\t\tjoint_torque: [],\n\t\t\t\t\t\t\tjoint_current: [\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t0\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tflange_pose: {\n\t\t\t\t\t\t\t\tposition: [\n\t\t\t\t\t\t\t\t\t107.6452433732927,\n\t\t\t\t\t\t\t\t\t-409.0402987746852,\n\t\t\t\t\t\t\t\t\t524.2402132330305\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\torientation: [\n\t\t\t\t\t\t\t\t\t.9874434028353319,\n\t\t\t\t\t\t\t\t\t-.986571714997442,\n\t\t\t\t\t\t\t\t\t1.3336589451098142\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttcp: \"Flange\",\n\t\t\t\t\t\t\ttcp_pose: {\n\t\t\t\t\t\t\t\tposition: [\n\t\t\t\t\t\t\t\t\t107.6452433732927,\n\t\t\t\t\t\t\t\t\t-409.0402987746852,\n\t\t\t\t\t\t\t\t\t524.2402132330305\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\torientation: [\n\t\t\t\t\t\t\t\t\t.9874434028353319,\n\t\t\t\t\t\t\t\t\t-.986571714997442,\n\t\t\t\t\t\t\t\t\t1.3336589451098142\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tpayload: \"\",\n\t\t\t\t\t\t\tcoordinate_system: \"\",\n\t\t\t\t\t\t\tstandstill: true\n\t\t\t\t\t\t}]\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tpath: \"/cells/:cellId/controllers/:controllerId/motion-groups/:motionGroupId/description\",\n\t\t\t\thandle() {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tmotion_group_model: \"UniversalRobots_UR5e\",\n\t\t\t\t\t\tmounting: {\n\t\t\t\t\t\t\tposition: [\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t0\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\torientation: [\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t0\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttcps: { Flange: {\n\t\t\t\t\t\t\tname: \"Default-Flange\",\n\t\t\t\t\t\t\tpose: {\n\t\t\t\t\t\t\t\tposition: [\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t0\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\torientation: [\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t0\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} },\n\t\t\t\t\t\tpayloads: { \"FPay-0\": {\n\t\t\t\t\t\t\tname: \"FPay-0\",\n\t\t\t\t\t\t\tpayload: 0,\n\t\t\t\t\t\t\tcenter_of_mass: [\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t0\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tmoment_of_inertia: [\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t0\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t} },\n\t\t\t\t\t\tcycle_time: 8,\n\t\t\t\t\t\tdh_parameters: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\talpha: 1.5707963267948966,\n\t\t\t\t\t\t\t\td: 162.25\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{ a: -425 },\n\t\t\t\t\t\t\t{ a: -392.2 },\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\talpha: 1.5707963267948966,\n\t\t\t\t\t\t\t\td: 133.3\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\talpha: -1.5707963267948966,\n\t\t\t\t\t\t\t\td: 99.7\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{ d: 99.6 }\n\t\t\t\t\t\t],\n\t\t\t\t\t\toperation_limits: {\n\t\t\t\t\t\t\tauto_limits: {\n\t\t\t\t\t\t\t\tjoints: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t\t\t\t\tlower_limit: -6.283185307179586,\n\t\t\t\t\t\t\t\t\t\t\tupper_limit: 6.283185307179586\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tvelocity: 3.34159255027771,\n\t\t\t\t\t\t\t\t\t\tacceleration: 40,\n\t\t\t\t\t\t\t\t\t\ttorque: 150\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t\t\t\t\tlower_limit: -6.283185307179586,\n\t\t\t\t\t\t\t\t\t\t\tupper_limit: 6.283185307179586\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tvelocity: 3.34159255027771,\n\t\t\t\t\t\t\t\t\t\tacceleration: 40,\n\t\t\t\t\t\t\t\t\t\ttorque: 150\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t\t\t\t\tlower_limit: -6.283185307179586,\n\t\t\t\t\t\t\t\t\t\t\tupper_limit: 6.283185307179586\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tvelocity: 3.34159255027771,\n\t\t\t\t\t\t\t\t\t\tacceleration: 40,\n\t\t\t\t\t\t\t\t\t\ttorque: 150\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t\t\t\t\tlower_limit: -6.283185307179586,\n\t\t\t\t\t\t\t\t\t\t\tupper_limit: 6.283185307179586\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tvelocity: 3.34159255027771,\n\t\t\t\t\t\t\t\t\t\tacceleration: 40,\n\t\t\t\t\t\t\t\t\t\ttorque: 28\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t\t\t\t\tlower_limit: -6.283185307179586,\n\t\t\t\t\t\t\t\t\t\t\tupper_limit: 6.283185307179586\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tvelocity: 3.34159255027771,\n\t\t\t\t\t\t\t\t\t\tacceleration: 40,\n\t\t\t\t\t\t\t\t\t\ttorque: 28\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t\t\t\t\tlower_limit: -6.283185307179586,\n\t\t\t\t\t\t\t\t\t\t\tupper_limit: 6.283185307179586\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tvelocity: 3.34159255027771,\n\t\t\t\t\t\t\t\t\t\tacceleration: 40,\n\t\t\t\t\t\t\t\t\t\ttorque: 28\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\ttcp: { velocity: 5e3 },\n\t\t\t\t\t\t\t\telbow: { velocity: 5e3 },\n\t\t\t\t\t\t\t\tflange: { velocity: 5e3 }\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tmanual_limits: {\n\t\t\t\t\t\t\t\tjoints: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t\t\t\t\tlower_limit: -6.283185307179586,\n\t\t\t\t\t\t\t\t\t\t\tupper_limit: 6.283185307179586\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tvelocity: 3.34159255027771,\n\t\t\t\t\t\t\t\t\t\tacceleration: 40,\n\t\t\t\t\t\t\t\t\t\ttorque: 150\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t\t\t\t\tlower_limit: -6.283185307179586,\n\t\t\t\t\t\t\t\t\t\t\tupper_limit: 6.283185307179586\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tvelocity: 3.34159255027771,\n\t\t\t\t\t\t\t\t\t\tacceleration: 40,\n\t\t\t\t\t\t\t\t\t\ttorque: 150\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t\t\t\t\tlower_limit: -6.283185307179586,\n\t\t\t\t\t\t\t\t\t\t\tupper_limit: 6.283185307179586\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tvelocity: 3.34159255027771,\n\t\t\t\t\t\t\t\t\t\tacceleration: 40,\n\t\t\t\t\t\t\t\t\t\ttorque: 150\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t\t\t\t\tlower_limit: -6.283185307179586,\n\t\t\t\t\t\t\t\t\t\t\tupper_limit: 6.283185307179586\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tvelocity: 3.34159255027771,\n\t\t\t\t\t\t\t\t\t\tacceleration: 40,\n\t\t\t\t\t\t\t\t\t\ttorque: 28\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t\t\t\t\tlower_limit: -6.283185307179586,\n\t\t\t\t\t\t\t\t\t\t\tupper_limit: 6.283185307179586\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tvelocity: 3.34159255027771,\n\t\t\t\t\t\t\t\t\t\tacceleration: 40,\n\t\t\t\t\t\t\t\t\t\ttorque: 28\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t\t\t\t\tlower_limit: -6.283185307179586,\n\t\t\t\t\t\t\t\t\t\t\tupper_limit: 6.283185307179586\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tvelocity: 3.34159255027771,\n\t\t\t\t\t\t\t\t\t\tacceleration: 40,\n\t\t\t\t\t\t\t\t\t\ttorque: 28\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\ttcp: { velocity: 5e3 }\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tmanual_t1_limits: {\n\t\t\t\t\t\t\t\tjoints: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t\t\t\t\tlower_limit: -6.283185307179586,\n\t\t\t\t\t\t\t\t\t\t\tupper_limit: 6.283185307179586\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tvelocity: 3.34159255027771,\n\t\t\t\t\t\t\t\t\t\tacceleration: 40,\n\t\t\t\t\t\t\t\t\t\ttorque: 150\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t\t\t\t\tlower_limit: -6.283185307179586,\n\t\t\t\t\t\t\t\t\t\t\tupper_limit: 6.283185307179586\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tvelocity: 3.34159255027771,\n\t\t\t\t\t\t\t\t\t\tacceleration: 40,\n\t\t\t\t\t\t\t\t\t\ttorque: 150\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t\t\t\t\tlower_limit: -6.283185307179586,\n\t\t\t\t\t\t\t\t\t\t\tupper_limit: 6.283185307179586\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tvelocity: 3.34159255027771,\n\t\t\t\t\t\t\t\t\t\tacceleration: 40,\n\t\t\t\t\t\t\t\t\t\ttorque: 150\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t\t\t\t\tlower_limit: -6.283185307179586,\n\t\t\t\t\t\t\t\t\t\t\tupper_limit: 6.283185307179586\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tvelocity: 3.34159255027771,\n\t\t\t\t\t\t\t\t\t\tacceleration: 40,\n\t\t\t\t\t\t\t\t\t\ttorque: 28\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t\t\t\t\tlower_limit: -6.283185307179586,\n\t\t\t\t\t\t\t\t\t\t\tupper_limit: 6.283185307179586\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tvelocity: 3.34159255027771,\n\t\t\t\t\t\t\t\t\t\tacceleration: 40,\n\t\t\t\t\t\t\t\t\t\ttorque: 28\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t\t\t\t\tlower_limit: -6.283185307179586,\n\t\t\t\t\t\t\t\t\t\t\tupper_limit: 6.283185307179586\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tvelocity: 3.34159255027771,\n\t\t\t\t\t\t\t\t\t\tacceleration: 40,\n\t\t\t\t\t\t\t\t\t\ttorque: 28\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\ttcp: { velocity: 5e3 }\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tmanual_t2_limits: {\n\t\t\t\t\t\t\t\tjoints: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t\t\t\t\tlower_limit: -6.283185307179586,\n\t\t\t\t\t\t\t\t\t\t\tupper_limit: 6.283185307179586\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tvelocity: 3.34159255027771,\n\t\t\t\t\t\t\t\t\t\tacceleration: 40,\n\t\t\t\t\t\t\t\t\t\ttorque: 150\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t\t\t\t\tlower_limit: -6.283185307179586,\n\t\t\t\t\t\t\t\t\t\t\tupper_limit: 6.283185307179586\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tvelocity: 3.34159255027771,\n\t\t\t\t\t\t\t\t\t\tacceleration: 40,\n\t\t\t\t\t\t\t\t\t\ttorque: 150\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t\t\t\t\tlower_limit: -6.283185307179586,\n\t\t\t\t\t\t\t\t\t\t\tupper_limit: 6.283185307179586\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tvelocity: 3.34159255027771,\n\t\t\t\t\t\t\t\t\t\tacceleration: 40,\n\t\t\t\t\t\t\t\t\t\ttorque: 150\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t\t\t\t\tlower_limit: -6.283185307179586,\n\t\t\t\t\t\t\t\t\t\t\tupper_limit: 6.283185307179586\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tvelocity: 3.34159255027771,\n\t\t\t\t\t\t\t\t\t\tacceleration: 40,\n\t\t\t\t\t\t\t\t\t\ttorque: 28\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t\t\t\t\tlower_limit: -6.283185307179586,\n\t\t\t\t\t\t\t\t\t\t\tupper_limit: 6.283185307179586\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tvelocity: 3.34159255027771,\n\t\t\t\t\t\t\t\t\t\tacceleration: 40,\n\t\t\t\t\t\t\t\t\t\ttorque: 28\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t\t\t\t\tlower_limit: -6.283185307179586,\n\t\t\t\t\t\t\t\t\t\t\tupper_limit: 6.283185307179586\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tvelocity: 3.34159255027771,\n\t\t\t\t\t\t\t\t\t\tacceleration: 40,\n\t\t\t\t\t\t\t\t\t\ttorque: 28\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\ttcp: { velocity: 5e3 }\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tserial_number: \"WBVirtualRobot\"\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tpath: \"/cells/:cellId/controllers/:controllerId/coordinate-systems\",\n\t\t\t\thandle() {\n\t\t\t\t\treturn [{\n\t\t\t\t\t\tcoordinate_system: \"\",\n\t\t\t\t\t\tname: \"world\",\n\t\t\t\t\t\treference_coordinate_system: \"\",\n\t\t\t\t\t\tposition: [\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t0\n\t\t\t\t\t\t],\n\t\t\t\t\t\torientation: [\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t0\n\t\t\t\t\t\t],\n\t\t\t\t\t\torientation_type: \"ROTATION_VECTOR\"\n\t\t\t\t\t}, {\n\t\t\t\t\t\tcoordinate_system: \"CS-0\",\n\t\t\t\t\t\tname: \"Default-CS\",\n\t\t\t\t\t\treference_coordinate_system: \"\",\n\t\t\t\t\t\tposition: [\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t0\n\t\t\t\t\t\t],\n\t\t\t\t\t\torientation: [\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t0\n\t\t\t\t\t\t],\n\t\t\t\t\t\torientation_type: \"ROTATION_VECTOR\"\n\t\t\t\t\t}];\n\t\t\t\t}\n\t\t\t}\n\t\t];\n\t\tconst method = config.method?.toUpperCase() || \"GET\";\n\t\tconst path = `/cells${config.url?.split(\"/cells\")[1]?.split(\"?\")[0]}`;\n\t\tfor (const handler of apiHandlers) {\n\t\t\tconst match = pathToRegexp.match(handler.path)(path || \"\");\n\t\t\tif (method === handler.method && match) {\n\t\t\t\tconst json = handler.handle();\n\t\t\t\treturn {\n\t\t\t\t\tstatus: 200,\n\t\t\t\t\tstatusText: \"Success\",\n\t\t\t\t\tdata: JSON.stringify(json),\n\t\t\t\t\theaders: {},\n\t\t\t\t\tconfig,\n\t\t\t\t\trequest: { responseURL: config.url }\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\tthrow new AxiosError(`No mock handler matched this request: ${method} ${path}`, \"404\", config);\n\t}\n\thandleWebsocketConnection(socket) {\n\t\tthis.connections.push(socket);\n\t\tsetTimeout(() => {\n\t\t\tsocket.dispatchEvent(new Event(\"open\"));\n\t\t\tconsole.log(\"Websocket connection opened from\", socket.url);\n\t\t\tif (socket.url.includes(\"/state-stream\")) socket.dispatchEvent(new MessageEvent(\"message\", { data: JSON.stringify(defaultMotionState) }));\n\t\t\tif (socket.url.includes(\"/execution/jogging\")) socket.dispatchEvent(new MessageEvent(\"message\", { data: JSON.stringify({ result: {\n\t\t\t\tmessage: \"string\",\n\t\t\t\tkind: \"INITIALIZE_RECEIVED\"\n\t\t\t} }) }));\n\t\t}, 10);\n\t}\n\thandleWebsocketMessage(socket, message) {\n\t\tconsole.log(`Received message on ${socket.url}`, message);\n\t}\n};\nconst defaultMotionState = { result: {\n\tmotion_group: \"0@universalrobots-ur5e\",\n\tcontroller: \"universalrobots-ur5e\",\n\ttimestamp: (/* @__PURE__ */ new Date()).toISOString(),\n\tsequence_number: 1,\n\tjoint_position: [\n\t\t1.1699999570846558,\n\t\t-1.5700000524520874,\n\t\t1.3600000143051147,\n\t\t1.0299999713897705,\n\t\t1.2899999618530273,\n\t\t1.2799999713897705\n\t],\n\tjoint_limit_reached: { limit_reached: [\n\t\tfalse,\n\t\tfalse,\n\t\tfalse,\n\t\tfalse,\n\t\tfalse,\n\t\tfalse\n\t] },\n\tstandstill: false,\n\tflange_pose: {\n\t\tposition: [\n\t\t\t1.3300010259703043,\n\t\t\t-409.2680714682808,\n\t\t\t531.0203477065281\n\t\t],\n\t\torientation: [\n\t\t\t1.7564919306270736,\n\t\t\t-1.7542521568325058,\n\t\t\t.7326972590614671\n\t\t]\n\t},\n\ttcp_pose: {\n\t\tposition: [\n\t\t\t1.3300010259703043,\n\t\t\t-409.2680714682808,\n\t\t\t531.0203477065281\n\t\t],\n\t\torientation: [\n\t\t\t1.7564919306270736,\n\t\t\t-1.7542521568325058,\n\t\t\t.7326972590614671\n\t\t]\n\t}\n} };\n\n//#endregion\n//#region src/lib/v2/NovaClient.ts\nfunction permissiveInstanceUrlParse(url) {\n\tif (!url.startsWith(\"http\")) url = `http://${url}`;\n\treturn new URL(url).toString();\n}\n/**\n*\n* Client for connecting to a Nova instance and controlling robots.\n*/\nvar NovaClient = class {\n\tconstructor(config) {\n\t\tthis.authPromise = null;\n\t\tthis.accessToken = null;\n\t\tconst cellId = config.cellId ?? \"cell\";\n\t\tthis.config = {\n\t\t\tcellId,\n\t\t\t...config\n\t\t};\n\t\tthis.accessToken = config.accessToken || availableStorage.getString(\"wbjs.access_token\") || null;\n\t\tif (this.config.instanceUrl === \"https://mock.example.com\") this.mock = new MockNovaInstance();\n\t\telse this.config.instanceUrl = permissiveInstanceUrlParse(this.config.instanceUrl);\n\t\tconst axiosInstance = axios.create({\n\t\t\tbaseURL: urlJoin(this.config.instanceUrl, \"/api/v2\"),\n\t\t\theaders: typeof window !== \"undefined\" && window.location.origin.includes(\"localhost\") ? {} : { \"X-Wandelbots-Client\": \"Wandelbots-Nova-JS-SDK\" }\n\t\t});\n\t\taxiosInstance.interceptors.request.use(async (request) => {\n\t\t\tif (!request.headers.Authorization) {\n\t\t\t\tif (this.accessToken) request.headers.Authorization = `Bearer ${this.accessToken}`;\n\t\t\t\telse if (this.config.username && this.config.password) request.headers.Authorization = `Basic ${btoa(`${config.username}:${config.password}`)}`;\n\t\t\t}\n\t\t\treturn request;\n\t\t});\n\t\tif (typeof window !== \"undefined\") axiosInstance.interceptors.response.use((r) => r, async (error) => {\n\t\t\tif (isAxiosError(error)) {\n\t\t\t\tif (error.response?.status === 401) try {\n\t\t\t\t\tawait this.renewAuthentication();\n\t\t\t\t\tif (error.config) {\n\t\t\t\t\t\tif (this.accessToken) error.config.headers.Authorization = `Bearer ${this.accessToken}`;\n\t\t\t\t\t\telse delete error.config.headers.Authorization;\n\t\t\t\t\t\treturn axiosInstance.request(error.config);\n\t\t\t\t\t}\n\t\t\t\t} catch (err) {\n\t\t\t\t\treturn Promise.reject(err);\n\t\t\t\t}\n\t\t\t\telse if (error.response?.status === 503) {\n\t\t\t\t\tif ((await fetch(window.location.href)).status === 503) window.location.reload();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn Promise.reject(error);\n\t\t});\n\t\tthis.api = new NovaCellAPIClient(cellId, {\n\t\t\t...config,\n\t\t\tbasePath: urlJoin(this.config.instanceUrl, \"/api/v2\"),\n\t\t\tisJsonMime: (mime) => {\n\t\t\t\treturn mime === \"application/json\";\n\t\t\t},\n\t\t\tbaseOptions: {\n\t\t\t\t...this.mock ? { adapter: (config$1) => {\n\t\t\t\t\treturn this.mock.handleAPIRequest(config$1);\n\t\t\t\t} } : {},\n\t\t\t\t...config.baseOptions\n\t\t\t},\n\t\t\taxiosInstance\n\t\t});\n\t}\n\tasync renewAuthentication() {\n\t\tif (this.authPromise) return;\n\t\tthis.authPromise = loginWithAuth0(this.config.instanceUrl);\n\t\ttry {\n\t\t\tthis.accessToken = await this.authPromise;\n\t\t\tif (this.accessToken) availableStorage.setString(\"wbjs.access_token\", this.accessToken);\n\t\t\telse availableStorage.delete(\"wbjs.access_token\");\n\t\t} finally {\n\t\t\tthis.authPromise = null;\n\t\t}\n\t}\n\tmakeWebsocketURL(path) {\n\t\tconst url = new URL(urlJoin(this.config.instanceUrl, `/api/v2/cells/${this.config.cellId}`, path));\n\t\turl.protocol = url.protocol.replace(\"http\", \"ws\");\n\t\turl.protocol = url.protocol.replace(\"https\", \"wss\");\n\t\tif (this.accessToken) url.searchParams.append(\"token\", this.accessToken);\n\t\telse if (this.config.username && this.config.password) {\n\t\t\turl.username = this.config.username;\n\t\t\turl.password = this.config.password;\n\t\t}\n\t\treturn url.toString();\n\t}\n\t/**\n\t* Retrieve an AutoReconnectingWebsocket to the given path on the Nova instance.\n\t* If you explicitly want to reconnect an existing websocket, call `reconnect`\n\t* on the returned object.\n\t*/\n\topenReconnectingWebsocket(path) {\n\t\treturn new AutoReconnectingWebsocket(this.makeWebsocketURL(path), { mock: this.mock });\n\t}\n};\n\n//#endregion\n//#region src/lib/v2/wandelscriptUtils.ts\n/**\n* Convert a Pose object representing a motion group position\n* into a string which represents that pose in Wandelscript.\n*/\nfunction poseToWandelscriptString(pose) {\n\tconst position = [\n\t\tpose.position?.[0] ?? 0,\n\t\tpose.position?.[1] ?? 0,\n\t\tpose.position?.[2] ?? 0\n\t];\n\tconst orientation = [\n\t\tpose.orientation?.[0] ?? 0,\n\t\tpose.orientation?.[1] ?? 0,\n\t\tpose.orientation?.[2] ?? 0\n\t];\n\tconst positionValues = position.map((v) => v.toFixed(1));\n\tconst rotationValues = orientation.map((v) => v.toFixed(4));\n\treturn `(${positionValues.concat(rotationValues).join(\", \")})`;\n}\n\n//#endregion\nexport { NovaCellAPIClient, NovaClient, poseToWandelscriptString };\n//# sourceMappingURL=index.mjs.map","import { SvgIcon, type SvgIconProps } from \"@mui/material\"\n\nexport const DropdownArrowIcon = (props: SvgIconProps) => {\n return (\n <SvgIcon {...props} viewBox=\"0 0 10 8\">\n <path\n d=\"M8.825 0.9125L5 4.72917L1.175 0.9125L0 2.0875L5 7.0875L10 2.0875L8.825 0.9125Z\"\n fill=\"currentColor\"\n fillOpacity=\"0.56\"\n />\n </SvgIcon>\n )\n}\n","import {\n alpha,\n AppBar,\n Backdrop,\n Box,\n IconButton,\n Menu,\n MenuItem,\n type SxProps,\n Toolbar,\n Typography,\n} from \"@mui/material\"\nimport { observer } from \"mobx-react-lite\"\nimport { type MouseEvent, type ReactNode, useState } from \"react\"\nimport { externalizeComponent } from \"../externalizeComponent\"\nimport { DropdownArrowIcon } from \"../icons/DropdownArrowIcon\"\n\nexport type AppItem = {\n /** Unique identifier for the app */\n id: string\n /** Display name of the app */\n name: string\n /** Icon component to display */\n icon: ReactNode\n /** URL or callback to navigate to the app */\n href?: string\n /** Click handler for the app */\n onClick?: () => void\n}\n\nexport type AppHeaderProps = {\n /** Current app icon */\n appIcon: ReactNode\n /** Current app name */\n appName: string\n /** List of other available apps */\n apps?: AppItem[]\n /** Callback when an app is selected */\n onAppSelect?: (app: AppItem) => void\n /** Disable the menu button */\n disabled?: boolean\n /** Additional styling */\n sx?: SxProps\n}\n\n/**\n * A top navigation header component that displays the current app and provides\n * a dropdown menu to navigate to other apps.\n */\nexport const AppHeader = externalizeComponent(\n observer((props: AppHeaderProps) => {\n const {\n appIcon,\n appName,\n apps = [],\n onAppSelect,\n disabled = false,\n sx,\n } = props\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null)\n const isMenuOpen = Boolean(anchorEl)\n\n const handleMenuOpen = (event: MouseEvent<HTMLElement>) => {\n setAnchorEl(event.currentTarget)\n }\n\n const handleMenuClose = () => {\n setAnchorEl(null)\n }\n\n const handleAppSelect = (app: AppItem) => {\n handleMenuClose()\n\n if (app.onClick) {\n app.onClick()\n } else if (app.href) {\n window.location.href = app.href\n }\n\n onAppSelect?.(app)\n }\n\n return (\n <>\n <AppBar\n position=\"static\"\n sx={{\n boxShadow: \"none\",\n backgroundImage: \"none\",\n \"& .MuiAppBar-root\": {\n backgroundImage: \"none\",\n backgroundColor: \"transparent\",\n },\n ...sx,\n }}\n >\n <Toolbar sx={{ minHeight: \"62px !important\" }}>\n {/* App Icon */}\n <Box sx={{ mr: 1, display: \"flex\", alignItems: \"center\" }}>\n {appIcon}\n </Box>\n\n {/* App Name and Dropdown */}\n <Box sx={{ display: \"flex\", alignItems: \"center\", flexGrow: 1 }}>\n <Typography\n component=\"h1\"\n sx={{\n fontWeight: \"bold\",\n fontSize: \"1rem\",\n }}\n >\n {appName}\n </Typography>\n\n {/* Dropdown Button */}\n {apps.length > 0 && (\n <IconButton\n color=\"inherit\"\n aria-label=\"switch app\"\n aria-controls=\"app-menu\"\n aria-haspopup=\"true\"\n onClick={handleMenuOpen}\n disabled={disabled}\n sx={{\n ml: 1,\n width: 28,\n height: 28,\n borderRadius: \"6px\",\n padding: 0,\n backgroundColor: (theme) =>\n alpha(theme.palette.common.white, 0.1),\n opacity: 1,\n \"&:hover\": {\n backgroundColor: (theme) =>\n alpha(theme.palette.common.white, 0.16),\n },\n \"& .MuiSvgIcon-root\": {\n fontSize: \"8px\",\n width: \"8px\",\n height: \"6px\",\n },\n }}\n >\n <DropdownArrowIcon />\n </IconButton>\n )}\n </Box>\n </Toolbar>\n </AppBar>\n\n {/* Backdrop for blur effect */}\n <Backdrop\n open={isMenuOpen}\n onClick={handleMenuClose}\n sx={{\n backdropFilter: \"blur(4px)\",\n backgroundColor: \"rgba(0, 0, 0, 0.3)\",\n zIndex: (theme) => theme.zIndex.modal - 1,\n }}\n />\n\n {/* Dropdown Menu */}\n <Menu\n id=\"app-menu\"\n anchorEl={anchorEl}\n open={isMenuOpen}\n onClose={handleMenuClose}\n anchorOrigin={{\n vertical: \"bottom\",\n horizontal: \"left\",\n }}\n transformOrigin={{\n vertical: \"top\",\n horizontal: \"left\",\n }}\n sx={{\n zIndex: (theme) => theme.zIndex.modal,\n \"& .MuiPaper-root\": {\n minWidth: 200,\n mt: 1,\n },\n }}\n >\n {apps.map((app) => (\n <MenuItem key={app.id} onClick={() => handleAppSelect(app)}>\n <Box sx={{ display: \"flex\", alignItems: \"center\" }}>\n {app.icon}\n </Box>\n <Typography variant=\"body1\" sx={{ ml: 2 }}>\n {app.name}\n </Typography>\n </MenuItem>\n ))}\n </Menu>\n </>\n )\n }),\n)\n","function _extends() {\n return _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, _extends.apply(null, arguments);\n}\nexport { _extends as default };","function _objectWithoutPropertiesLoose(r, e) {\n if (null == r) return {};\n var t = {};\n for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n if (-1 !== e.indexOf(n)) continue;\n t[n] = r[n];\n }\n return t;\n}\nexport { _objectWithoutPropertiesLoose as default };","'use client';\n\nimport * as React from 'react';\n\n/**\n * Merges refs into a single memoized callback ref or `null`.\n *\n * ```tsx\n * const rootRef = React.useRef<Instance>(null);\n * const refFork = useForkRef(rootRef, props.ref);\n *\n * return (\n * <Root {...props} ref={refFork} />\n * );\n * ```\n *\n * @param {Array<React.Ref<Instance> | undefined>} refs The ref array.\n * @returns {React.RefCallback<Instance> | null} The new ref callback.\n */\nexport default function useForkRef(...refs) {\n const cleanupRef = React.useRef(undefined);\n const refEffect = React.useCallback(instance => {\n const cleanups = refs.map(ref => {\n if (ref == null) {\n return null;\n }\n if (typeof ref === 'function') {\n const refCallback = ref;\n const refCleanup = refCallback(instance);\n return typeof refCleanup === 'function' ? refCleanup : () => {\n refCallback(null);\n };\n }\n ref.current = instance;\n return () => {\n ref.current = null;\n };\n });\n return () => {\n cleanups.forEach(refCleanup => refCleanup?.());\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, refs);\n return React.useMemo(() => {\n if (refs.every(ref => ref == null)) {\n return null;\n }\n return value => {\n if (cleanupRef.current) {\n cleanupRef.current();\n cleanupRef.current = undefined;\n }\n if (value != null) {\n cleanupRef.current = refEffect(value);\n }\n };\n // TODO: uncomment once we enable eslint-plugin-react-compiler // eslint-disable-next-line react-compiler/react-compiler -- intentionally ignoring that the dependency array must be an array literal\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, refs);\n}","// src/devModeChecks/identityFunctionCheck.ts\nvar runIdentityFunctionCheck = (resultFunc, inputSelectorsResults, outputSelectorResult) => {\n if (inputSelectorsResults.length === 1 && inputSelectorsResults[0] === outputSelectorResult) {\n let isInputSameAsOutput = false;\n try {\n const emptyObject = {};\n if (resultFunc(emptyObject) === emptyObject)\n isInputSameAsOutput = true;\n } catch {\n }\n if (isInputSameAsOutput) {\n let stack = void 0;\n try {\n throw new Error();\n } catch (e) {\n ;\n ({ stack } = e);\n }\n console.warn(\n \"The result function returned its own inputs without modification. e.g\\n`createSelector([state => state.todos], todos => todos)`\\nThis could lead to inefficient memoization and unnecessary re-renders.\\nEnsure transformation logic is in the result function, and extraction logic is in the input selectors.\",\n { stack }\n );\n }\n }\n};\n\n// src/devModeChecks/inputStabilityCheck.ts\nvar runInputStabilityCheck = (inputSelectorResultsObject, options, inputSelectorArgs) => {\n const { memoize, memoizeOptions } = options;\n const { inputSelectorResults, inputSelectorResultsCopy } = inputSelectorResultsObject;\n const createAnEmptyObject = memoize(() => ({}), ...memoizeOptions);\n const areInputSelectorResultsEqual = createAnEmptyObject.apply(null, inputSelectorResults) === createAnEmptyObject.apply(null, inputSelectorResultsCopy);\n if (!areInputSelectorResultsEqual) {\n let stack = void 0;\n try {\n throw new Error();\n } catch (e) {\n ;\n ({ stack } = e);\n }\n console.warn(\n \"An input selector returned a different result when passed same arguments.\\nThis means your output selector will likely run more frequently than intended.\\nAvoid returning a new reference inside your input selector, e.g.\\n`createSelector([state => state.todos.map(todo => todo.id)], todoIds => todoIds.length)`\",\n {\n arguments: inputSelectorArgs,\n firstInputs: inputSelectorResults,\n secondInputs: inputSelectorResultsCopy,\n stack\n }\n );\n }\n};\n\n// src/devModeChecks/setGlobalDevModeChecks.ts\nvar globalDevModeChecks = {\n inputStabilityCheck: \"once\",\n identityFunctionCheck: \"once\"\n};\nvar setGlobalDevModeChecks = (devModeChecks) => {\n Object.assign(globalDevModeChecks, devModeChecks);\n};\n\n// src/utils.ts\nvar NOT_FOUND = /* @__PURE__ */ Symbol(\"NOT_FOUND\");\nfunction assertIsFunction(func, errorMessage = `expected a function, instead received ${typeof func}`) {\n if (typeof func !== \"function\") {\n throw new TypeError(errorMessage);\n }\n}\nfunction assertIsObject(object, errorMessage = `expected an object, instead received ${typeof object}`) {\n if (typeof object !== \"object\") {\n throw new TypeError(errorMessage);\n }\n}\nfunction assertIsArrayOfFunctions(array, errorMessage = `expected all items to be functions, instead received the following types: `) {\n if (!array.every((item) => typeof item === \"function\")) {\n const itemTypes = array.map(\n (item) => typeof item === \"function\" ? `function ${item.name || \"unnamed\"}()` : typeof item\n ).join(\", \");\n throw new TypeError(`${errorMessage}[${itemTypes}]`);\n }\n}\nvar ensureIsArray = (item) => {\n return Array.isArray(item) ? item : [item];\n};\nfunction getDependencies(createSelectorArgs) {\n const dependencies = Array.isArray(createSelectorArgs[0]) ? createSelectorArgs[0] : createSelectorArgs;\n assertIsArrayOfFunctions(\n dependencies,\n `createSelector expects all input-selectors to be functions, but received the following types: `\n );\n return dependencies;\n}\nfunction collectInputSelectorResults(dependencies, inputSelectorArgs) {\n const inputSelectorResults = [];\n const { length } = dependencies;\n for (let i = 0; i < length; i++) {\n inputSelectorResults.push(dependencies[i].apply(null, inputSelectorArgs));\n }\n return inputSelectorResults;\n}\nvar getDevModeChecksExecutionInfo = (firstRun, devModeChecks) => {\n const { identityFunctionCheck, inputStabilityCheck } = {\n ...globalDevModeChecks,\n ...devModeChecks\n };\n return {\n identityFunctionCheck: {\n shouldRun: identityFunctionCheck === \"always\" || identityFunctionCheck === \"once\" && firstRun,\n run: runIdentityFunctionCheck\n },\n inputStabilityCheck: {\n shouldRun: inputStabilityCheck === \"always\" || inputStabilityCheck === \"once\" && firstRun,\n run: runInputStabilityCheck\n }\n };\n};\n\n// src/autotrackMemoize/autotracking.ts\nvar $REVISION = 0;\nvar CURRENT_TRACKER = null;\nvar Cell = class {\n revision = $REVISION;\n _value;\n _lastValue;\n _isEqual = tripleEq;\n constructor(initialValue, isEqual = tripleEq) {\n this._value = this._lastValue = initialValue;\n this._isEqual = isEqual;\n }\n // Whenever a storage value is read, it'll add itself to the current tracker if\n // one exists, entangling its state with that cache.\n get value() {\n CURRENT_TRACKER?.add(this);\n return this._value;\n }\n // Whenever a storage value is updated, we bump the global revision clock,\n // assign the revision for this storage to the new value, _and_ we schedule a\n // rerender. This is important, and it's what makes autotracking _pull_\n // based. We don't actively tell the caches which depend on the storage that\n // anything has happened. Instead, we recompute the caches when needed.\n set value(newValue) {\n if (this.value === newValue)\n return;\n this._value = newValue;\n this.revision = ++$REVISION;\n }\n};\nfunction tripleEq(a, b) {\n return a === b;\n}\nvar TrackingCache = class {\n _cachedValue;\n _cachedRevision = -1;\n _deps = [];\n hits = 0;\n fn;\n constructor(fn) {\n this.fn = fn;\n }\n clear() {\n this._cachedValue = void 0;\n this._cachedRevision = -1;\n this._deps = [];\n this.hits = 0;\n }\n get value() {\n if (this.revision > this._cachedRevision) {\n const { fn } = this;\n const currentTracker = /* @__PURE__ */ new Set();\n const prevTracker = CURRENT_TRACKER;\n CURRENT_TRACKER = currentTracker;\n this._cachedValue = fn();\n CURRENT_TRACKER = prevTracker;\n this.hits++;\n this._deps = Array.from(currentTracker);\n this._cachedRevision = this.revision;\n }\n CURRENT_TRACKER?.add(this);\n return this._cachedValue;\n }\n get revision() {\n return Math.max(...this._deps.map((d) => d.revision), 0);\n }\n};\nfunction getValue(cell) {\n if (!(cell instanceof Cell)) {\n console.warn(\"Not a valid cell! \", cell);\n }\n return cell.value;\n}\nfunction setValue(storage, value) {\n if (!(storage instanceof Cell)) {\n throw new TypeError(\n \"setValue must be passed a tracked store created with `createStorage`.\"\n );\n }\n storage.value = storage._lastValue = value;\n}\nfunction createCell(initialValue, isEqual = tripleEq) {\n return new Cell(initialValue, isEqual);\n}\nfunction createCache(fn) {\n assertIsFunction(\n fn,\n \"the first parameter to `createCache` must be a function\"\n );\n return new TrackingCache(fn);\n}\n\n// src/autotrackMemoize/tracking.ts\nvar neverEq = (a, b) => false;\nfunction createTag() {\n return createCell(null, neverEq);\n}\nfunction dirtyTag(tag, value) {\n setValue(tag, value);\n}\nvar consumeCollection = (node) => {\n let tag = node.collectionTag;\n if (tag === null) {\n tag = node.collectionTag = createTag();\n }\n getValue(tag);\n};\nvar dirtyCollection = (node) => {\n const tag = node.collectionTag;\n if (tag !== null) {\n dirtyTag(tag, null);\n }\n};\n\n// src/autotrackMemoize/proxy.ts\nvar REDUX_PROXY_LABEL = Symbol();\nvar nextId = 0;\nvar proto = Object.getPrototypeOf({});\nvar ObjectTreeNode = class {\n constructor(value) {\n this.value = value;\n this.value = value;\n this.tag.value = value;\n }\n proxy = new Proxy(this, objectProxyHandler);\n tag = createTag();\n tags = {};\n children = {};\n collectionTag = null;\n id = nextId++;\n};\nvar objectProxyHandler = {\n get(node, key) {\n function calculateResult() {\n const { value } = node;\n const childValue = Reflect.get(value, key);\n if (typeof key === \"symbol\") {\n return childValue;\n }\n if (key in proto) {\n return childValue;\n }\n if (typeof childValue === \"object\" && childValue !== null) {\n let childNode = node.children[key];\n if (childNode === void 0) {\n childNode = node.children[key] = createNode(childValue);\n }\n if (childNode.tag) {\n getValue(childNode.tag);\n }\n return childNode.proxy;\n } else {\n let tag = node.tags[key];\n if (tag === void 0) {\n tag = node.tags[key] = createTag();\n tag.value = childValue;\n }\n getValue(tag);\n return childValue;\n }\n }\n const res = calculateResult();\n return res;\n },\n ownKeys(node) {\n consumeCollection(node);\n return Reflect.ownKeys(node.value);\n },\n getOwnPropertyDescriptor(node, prop) {\n return Reflect.getOwnPropertyDescriptor(node.value, prop);\n },\n has(node, prop) {\n return Reflect.has(node.value, prop);\n }\n};\nvar ArrayTreeNode = class {\n constructor(value) {\n this.value = value;\n this.value = value;\n this.tag.value = value;\n }\n proxy = new Proxy([this], arrayProxyHandler);\n tag = createTag();\n tags = {};\n children = {};\n collectionTag = null;\n id = nextId++;\n};\nvar arrayProxyHandler = {\n get([node], key) {\n if (key === \"length\") {\n consumeCollection(node);\n }\n return objectProxyHandler.get(node, key);\n },\n ownKeys([node]) {\n return objectProxyHandler.ownKeys(node);\n },\n getOwnPropertyDescriptor([node], prop) {\n return objectProxyHandler.getOwnPropertyDescriptor(node, prop);\n },\n has([node], prop) {\n return objectProxyHandler.has(node, prop);\n }\n};\nfunction createNode(value) {\n if (Array.isArray(value)) {\n return new ArrayTreeNode(value);\n }\n return new ObjectTreeNode(value);\n}\nfunction updateNode(node, newValue) {\n const { value, tags, children } = node;\n node.value = newValue;\n if (Array.isArray(value) && Array.isArray(newValue) && value.length !== newValue.length) {\n dirtyCollection(node);\n } else {\n if (value !== newValue) {\n let oldKeysSize = 0;\n let newKeysSize = 0;\n let anyKeysAdded = false;\n for (const _key in value) {\n oldKeysSize++;\n }\n for (const key in newValue) {\n newKeysSize++;\n if (!(key in value)) {\n anyKeysAdded = true;\n break;\n }\n }\n const isDifferent = anyKeysAdded || oldKeysSize !== newKeysSize;\n if (isDifferent) {\n dirtyCollection(node);\n }\n }\n }\n for (const key in tags) {\n const childValue = value[key];\n const newChildValue = newValue[key];\n if (childValue !== newChildValue) {\n dirtyCollection(node);\n dirtyTag(tags[key], newChildValue);\n }\n if (typeof newChildValue === \"object\" && newChildValue !== null) {\n delete tags[key];\n }\n }\n for (const key in children) {\n const childNode = children[key];\n const newChildValue = newValue[key];\n const childValue = childNode.value;\n if (childValue === newChildValue) {\n continue;\n } else if (typeof newChildValue === \"object\" && newChildValue !== null) {\n updateNode(childNode, newChildValue);\n } else {\n deleteNode(childNode);\n delete children[key];\n }\n }\n}\nfunction deleteNode(node) {\n if (node.tag) {\n dirtyTag(node.tag, null);\n }\n dirtyCollection(node);\n for (const key in node.tags) {\n dirtyTag(node.tags[key], null);\n }\n for (const key in node.children) {\n deleteNode(node.children[key]);\n }\n}\n\n// src/lruMemoize.ts\nfunction createSingletonCache(equals) {\n let entry;\n return {\n get(key) {\n if (entry && equals(entry.key, key)) {\n return entry.value;\n }\n return NOT_FOUND;\n },\n put(key, value) {\n entry = { key, value };\n },\n getEntries() {\n return entry ? [entry] : [];\n },\n clear() {\n entry = void 0;\n }\n };\n}\nfunction createLruCache(maxSize, equals) {\n let entries = [];\n function get(key) {\n const cacheIndex = entries.findIndex((entry) => equals(key, entry.key));\n if (cacheIndex > -1) {\n const entry = entries[cacheIndex];\n if (cacheIndex > 0) {\n entries.splice(cacheIndex, 1);\n entries.unshift(entry);\n }\n return entry.value;\n }\n return NOT_FOUND;\n }\n function put(key, value) {\n if (get(key) === NOT_FOUND) {\n entries.unshift({ key, value });\n if (entries.length > maxSize) {\n entries.pop();\n }\n }\n }\n function getEntries() {\n return entries;\n }\n function clear() {\n entries = [];\n }\n return { get, put, getEntries, clear };\n}\nvar referenceEqualityCheck = (a, b) => a === b;\nfunction createCacheKeyComparator(equalityCheck) {\n return function areArgumentsShallowlyEqual(prev, next) {\n if (prev === null || next === null || prev.length !== next.length) {\n return false;\n }\n const { length } = prev;\n for (let i = 0; i < length; i++) {\n if (!equalityCheck(prev[i], next[i])) {\n return false;\n }\n }\n return true;\n };\n}\nfunction lruMemoize(func, equalityCheckOrOptions) {\n const providedOptions = typeof equalityCheckOrOptions === \"object\" ? equalityCheckOrOptions : { equalityCheck: equalityCheckOrOptions };\n const {\n equalityCheck = referenceEqualityCheck,\n maxSize = 1,\n resultEqualityCheck\n } = providedOptions;\n const comparator = createCacheKeyComparator(equalityCheck);\n let resultsCount = 0;\n const cache = maxSize <= 1 ? createSingletonCache(comparator) : createLruCache(maxSize, comparator);\n function memoized() {\n let value = cache.get(arguments);\n if (value === NOT_FOUND) {\n value = func.apply(null, arguments);\n resultsCount++;\n if (resultEqualityCheck) {\n const entries = cache.getEntries();\n const matchingEntry = entries.find(\n (entry) => resultEqualityCheck(entry.value, value)\n );\n if (matchingEntry) {\n value = matchingEntry.value;\n resultsCount !== 0 && resultsCount--;\n }\n }\n cache.put(arguments, value);\n }\n return value;\n }\n memoized.clearCache = () => {\n cache.clear();\n memoized.resetResultsCount();\n };\n memoized.resultsCount = () => resultsCount;\n memoized.resetResultsCount = () => {\n resultsCount = 0;\n };\n return memoized;\n}\n\n// src/autotrackMemoize/autotrackMemoize.ts\nfunction autotrackMemoize(func) {\n const node = createNode(\n []\n );\n let lastArgs = null;\n const shallowEqual = createCacheKeyComparator(referenceEqualityCheck);\n const cache = createCache(() => {\n const res = func.apply(null, node.proxy);\n return res;\n });\n function memoized() {\n if (!shallowEqual(lastArgs, arguments)) {\n updateNode(node, arguments);\n lastArgs = arguments;\n }\n return cache.value;\n }\n memoized.clearCache = () => {\n return cache.clear();\n };\n return memoized;\n}\n\n// src/weakMapMemoize.ts\nvar StrongRef = class {\n constructor(value) {\n this.value = value;\n }\n deref() {\n return this.value;\n }\n};\nvar Ref = typeof WeakRef !== \"undefined\" ? WeakRef : StrongRef;\nvar UNTERMINATED = 0;\nvar TERMINATED = 1;\nfunction createCacheNode() {\n return {\n s: UNTERMINATED,\n v: void 0,\n o: null,\n p: null\n };\n}\nfunction weakMapMemoize(func, options = {}) {\n let fnNode = createCacheNode();\n const { resultEqualityCheck } = options;\n let lastResult;\n let resultsCount = 0;\n function memoized() {\n let cacheNode = fnNode;\n const { length } = arguments;\n for (let i = 0, l = length; i < l; i++) {\n const arg = arguments[i];\n if (typeof arg === \"function\" || typeof arg === \"object\" && arg !== null) {\n let objectCache = cacheNode.o;\n if (objectCache === null) {\n cacheNode.o = objectCache = /* @__PURE__ */ new WeakMap();\n }\n const objectNode = objectCache.get(arg);\n if (objectNode === void 0) {\n cacheNode = createCacheNode();\n objectCache.set(arg, cacheNode);\n } else {\n cacheNode = objectNode;\n }\n } else {\n let primitiveCache = cacheNode.p;\n if (primitiveCache === null) {\n cacheNode.p = primitiveCache = /* @__PURE__ */ new Map();\n }\n const primitiveNode = primitiveCache.get(arg);\n if (primitiveNode === void 0) {\n cacheNode = createCacheNode();\n primitiveCache.set(arg, cacheNode);\n } else {\n cacheNode = primitiveNode;\n }\n }\n }\n const terminatedNode = cacheNode;\n let result;\n if (cacheNode.s === TERMINATED) {\n result = cacheNode.v;\n } else {\n result = func.apply(null, arguments);\n resultsCount++;\n if (resultEqualityCheck) {\n const lastResultValue = lastResult?.deref?.() ?? lastResult;\n if (lastResultValue != null && resultEqualityCheck(lastResultValue, result)) {\n result = lastResultValue;\n resultsCount !== 0 && resultsCount--;\n }\n const needsWeakRef = typeof result === \"object\" && result !== null || typeof result === \"function\";\n lastResult = needsWeakRef ? new Ref(result) : result;\n }\n }\n terminatedNode.s = TERMINATED;\n terminatedNode.v = result;\n return result;\n }\n memoized.clearCache = () => {\n fnNode = createCacheNode();\n memoized.resetResultsCount();\n };\n memoized.resultsCount = () => resultsCount;\n memoized.resetResultsCount = () => {\n resultsCount = 0;\n };\n return memoized;\n}\n\n// src/createSelectorCreator.ts\nfunction createSelectorCreator(memoizeOrOptions, ...memoizeOptionsFromArgs) {\n const createSelectorCreatorOptions = typeof memoizeOrOptions === \"function\" ? {\n memoize: memoizeOrOptions,\n memoizeOptions: memoizeOptionsFromArgs\n } : memoizeOrOptions;\n const createSelector2 = (...createSelectorArgs) => {\n let recomputations = 0;\n let dependencyRecomputations = 0;\n let lastResult;\n let directlyPassedOptions = {};\n let resultFunc = createSelectorArgs.pop();\n if (typeof resultFunc === \"object\") {\n directlyPassedOptions = resultFunc;\n resultFunc = createSelectorArgs.pop();\n }\n assertIsFunction(\n resultFunc,\n `createSelector expects an output function after the inputs, but received: [${typeof resultFunc}]`\n );\n const combinedOptions = {\n ...createSelectorCreatorOptions,\n ...directlyPassedOptions\n };\n const {\n memoize,\n memoizeOptions = [],\n argsMemoize = weakMapMemoize,\n argsMemoizeOptions = [],\n devModeChecks = {}\n } = combinedOptions;\n const finalMemoizeOptions = ensureIsArray(memoizeOptions);\n const finalArgsMemoizeOptions = ensureIsArray(argsMemoizeOptions);\n const dependencies = getDependencies(createSelectorArgs);\n const memoizedResultFunc = memoize(function recomputationWrapper() {\n recomputations++;\n return resultFunc.apply(\n null,\n arguments\n );\n }, ...finalMemoizeOptions);\n let firstRun = true;\n const selector = argsMemoize(function dependenciesChecker() {\n dependencyRecomputations++;\n const inputSelectorResults = collectInputSelectorResults(\n dependencies,\n arguments\n );\n lastResult = memoizedResultFunc.apply(null, inputSelectorResults);\n if (process.env.NODE_ENV !== \"production\") {\n const { identityFunctionCheck, inputStabilityCheck } = getDevModeChecksExecutionInfo(firstRun, devModeChecks);\n if (identityFunctionCheck.shouldRun) {\n identityFunctionCheck.run(\n resultFunc,\n inputSelectorResults,\n lastResult\n );\n }\n if (inputStabilityCheck.shouldRun) {\n const inputSelectorResultsCopy = collectInputSelectorResults(\n dependencies,\n arguments\n );\n inputStabilityCheck.run(\n { inputSelectorResults, inputSelectorResultsCopy },\n { memoize, memoizeOptions: finalMemoizeOptions },\n arguments\n );\n }\n if (firstRun)\n firstRun = false;\n }\n return lastResult;\n }, ...finalArgsMemoizeOptions);\n return Object.assign(selector, {\n resultFunc,\n memoizedResultFunc,\n dependencies,\n dependencyRecomputations: () => dependencyRecomputations,\n resetDependencyRecomputations: () => {\n dependencyRecomputations = 0;\n },\n lastResult: () => lastResult,\n recomputations: () => recomputations,\n resetRecomputations: () => {\n recomputations = 0;\n },\n memoize,\n argsMemoize\n });\n };\n Object.assign(createSelector2, {\n withTypes: () => createSelector2\n });\n return createSelector2;\n}\nvar createSelector = /* @__PURE__ */ createSelectorCreator(weakMapMemoize);\n\n// src/createStructuredSelector.ts\nvar createStructuredSelector = Object.assign(\n (inputSelectorsObject, selectorCreator = createSelector) => {\n assertIsObject(\n inputSelectorsObject,\n `createStructuredSelector expects first argument to be an object where each property is a selector, instead received a ${typeof inputSelectorsObject}`\n );\n const inputSelectorKeys = Object.keys(inputSelectorsObject);\n const dependencies = inputSelectorKeys.map(\n (key) => inputSelectorsObject[key]\n );\n const structuredSelector = selectorCreator(\n dependencies,\n (...inputSelectorResults) => {\n return inputSelectorResults.reduce((composition, value, index) => {\n composition[inputSelectorKeys[index]] = value;\n return composition;\n }, {});\n }\n );\n return structuredSelector;\n },\n { withTypes: () => createStructuredSelector }\n);\nexport {\n createSelector,\n createSelectorCreator,\n createStructuredSelector,\n lruMemoize,\n referenceEqualityCheck,\n setGlobalDevModeChecks,\n autotrackMemoize as unstable_autotrackMemoize,\n weakMapMemoize\n};\n//# sourceMappingURL=reselect.mjs.map","import { lruMemoize, createSelectorCreator } from 'reselect';\n/* eslint-disable no-underscore-dangle */ // __cacheKey__\n\nconst reselectCreateSelector = createSelectorCreator({\n memoize: lruMemoize,\n memoizeOptions: {\n maxSize: 1,\n equalityCheck: Object.is\n }\n});\n/* eslint-disable id-denylist */\nexport const createSelector = (a, b, c, d, e, f, g, h, ...other) => {\n if (other.length > 0) {\n throw new Error('Unsupported number of selectors');\n }\n let selector;\n if (a && b && c && d && e && f && g && h) {\n selector = (state, a1, a2, a3) => {\n const va = a(state, a1, a2, a3);\n const vb = b(state, a1, a2, a3);\n const vc = c(state, a1, a2, a3);\n const vd = d(state, a1, a2, a3);\n const ve = e(state, a1, a2, a3);\n const vf = f(state, a1, a2, a3);\n const vg = g(state, a1, a2, a3);\n return h(va, vb, vc, vd, ve, vf, vg, a1, a2, a3);\n };\n } else if (a && b && c && d && e && f && g) {\n selector = (state, a1, a2, a3) => {\n const va = a(state, a1, a2, a3);\n const vb = b(state, a1, a2, a3);\n const vc = c(state, a1, a2, a3);\n const vd = d(state, a1, a2, a3);\n const ve = e(state, a1, a2, a3);\n const vf = f(state, a1, a2, a3);\n return g(va, vb, vc, vd, ve, vf, a1, a2, a3);\n };\n } else if (a && b && c && d && e && f) {\n selector = (state, a1, a2, a3) => {\n const va = a(state, a1, a2, a3);\n const vb = b(state, a1, a2, a3);\n const vc = c(state, a1, a2, a3);\n const vd = d(state, a1, a2, a3);\n const ve = e(state, a1, a2, a3);\n return f(va, vb, vc, vd, ve, a1, a2, a3);\n };\n } else if (a && b && c && d && e) {\n selector = (state, a1, a2, a3) => {\n const va = a(state, a1, a2, a3);\n const vb = b(state, a1, a2, a3);\n const vc = c(state, a1, a2, a3);\n const vd = d(state, a1, a2, a3);\n return e(va, vb, vc, vd, a1, a2, a3);\n };\n } else if (a && b && c && d) {\n selector = (state, a1, a2, a3) => {\n const va = a(state, a1, a2, a3);\n const vb = b(state, a1, a2, a3);\n const vc = c(state, a1, a2, a3);\n return d(va, vb, vc, a1, a2, a3);\n };\n } else if (a && b && c) {\n selector = (state, a1, a2, a3) => {\n const va = a(state, a1, a2, a3);\n const vb = b(state, a1, a2, a3);\n return c(va, vb, a1, a2, a3);\n };\n } else if (a && b) {\n selector = (state, a1, a2, a3) => {\n const va = a(state, a1, a2, a3);\n return b(va, a1, a2, a3);\n };\n } else if (a) {\n selector = a;\n } else {\n throw new Error('Missing arguments');\n }\n return selector;\n};\n/* eslint-enable id-denylist */\n\nexport const createSelectorMemoizedWithOptions = options => (...inputs) => {\n const cache = new WeakMap();\n let nextCacheId = 1;\n const combiner = inputs[inputs.length - 1];\n const nSelectors = inputs.length - 1 || 1;\n // (s1, s2, ..., sN, a1, a2, a3) => { ... }\n const argsLength = Math.max(combiner.length - nSelectors, 0);\n if (argsLength > 3) {\n throw new Error('Unsupported number of arguments');\n }\n\n // prettier-ignore\n const selector = (state, a1, a2, a3) => {\n let cacheKey = state.__cacheKey__;\n if (!cacheKey) {\n cacheKey = {\n id: nextCacheId\n };\n state.__cacheKey__ = cacheKey;\n nextCacheId += 1;\n }\n let fn = cache.get(cacheKey);\n if (!fn) {\n const selectors = inputs.length === 1 ? [x => x, combiner] : inputs;\n let reselectArgs = inputs;\n const selectorArgs = [undefined, undefined, undefined];\n switch (argsLength) {\n case 0:\n break;\n case 1:\n {\n reselectArgs = [...selectors.slice(0, -1), () => selectorArgs[0], combiner];\n break;\n }\n case 2:\n {\n reselectArgs = [...selectors.slice(0, -1), () => selectorArgs[0], () => selectorArgs[1], combiner];\n break;\n }\n case 3:\n {\n reselectArgs = [...selectors.slice(0, -1), () => selectorArgs[0], () => selectorArgs[1], () => selectorArgs[2], combiner];\n break;\n }\n default:\n throw new Error('Unsupported number of arguments');\n }\n if (options) {\n reselectArgs = [...reselectArgs, options];\n }\n fn = reselectCreateSelector(...reselectArgs);\n fn.selectorArgs = selectorArgs;\n cache.set(cacheKey, fn);\n }\n\n /* eslint-disable no-fallthrough */\n\n switch (argsLength) {\n case 3:\n fn.selectorArgs[2] = a3;\n case 2:\n fn.selectorArgs[1] = a2;\n case 1:\n fn.selectorArgs[0] = a1;\n case 0:\n default:\n }\n switch (argsLength) {\n case 0:\n return fn(state);\n case 1:\n return fn(state, a1);\n case 2:\n return fn(state, a1, a2);\n case 3:\n return fn(state, a1, a2, a3);\n default:\n throw new Error('unreachable');\n }\n };\n return selector;\n};\nexport const createSelectorMemoized = createSelectorMemoizedWithOptions();","/**\n * @license React\n * use-sync-external-store-shim.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue;\nfunction useSyncExternalStore$2(subscribe, getSnapshot) {\n var value = getSnapshot(),\n _useState = useState({ inst: { value: value, getSnapshot: getSnapshot } }),\n inst = _useState[0].inst,\n forceUpdate = _useState[1];\n useLayoutEffect(\n function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n },\n [subscribe, value, getSnapshot]\n );\n useEffect(\n function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n });\n },\n [subscribe]\n );\n useDebugValue(value);\n return value;\n}\nfunction checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n}\nfunction useSyncExternalStore$1(subscribe, getSnapshot) {\n return getSnapshot();\n}\nvar shim =\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ? useSyncExternalStore$1\n : useSyncExternalStore$2;\nexports.useSyncExternalStore =\n void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n","/**\n * @license React\n * use-sync-external-store-shim.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n }\n function useSyncExternalStore$2(subscribe, getSnapshot) {\n didWarnOld18Alpha ||\n void 0 === React.startTransition ||\n ((didWarnOld18Alpha = !0),\n console.error(\n \"You are using an outdated, pre-release alpha of React 18 that does not support useSyncExternalStore. The use-sync-external-store shim will not work correctly. Upgrade to a newer pre-release.\"\n ));\n var value = getSnapshot();\n if (!didWarnUncachedGetSnapshot) {\n var cachedValue = getSnapshot();\n objectIs(value, cachedValue) ||\n (console.error(\n \"The result of getSnapshot should be cached to avoid an infinite loop\"\n ),\n (didWarnUncachedGetSnapshot = !0));\n }\n cachedValue = useState({\n inst: { value: value, getSnapshot: getSnapshot }\n });\n var inst = cachedValue[0].inst,\n forceUpdate = cachedValue[1];\n useLayoutEffect(\n function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n },\n [subscribe, value, getSnapshot]\n );\n useEffect(\n function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n });\n },\n [subscribe]\n );\n useDebugValue(value);\n return value;\n }\n function checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n }\n function useSyncExternalStore$1(subscribe, getSnapshot) {\n return getSnapshot();\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n var React = require(\"react\"),\n objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue,\n didWarnOld18Alpha = !1,\n didWarnUncachedGetSnapshot = !1,\n shim =\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ? useSyncExternalStore$1\n : useSyncExternalStore$2;\n exports.useSyncExternalStore =\n void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","/**\n * @license React\n * use-sync-external-store-shim/with-selector.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\"),\n shim = require(\"use-sync-external-store/shim\");\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useSyncExternalStore = shim.useSyncExternalStore,\n useRef = React.useRef,\n useEffect = React.useEffect,\n useMemo = React.useMemo,\n useDebugValue = React.useDebugValue;\nexports.useSyncExternalStoreWithSelector = function (\n subscribe,\n getSnapshot,\n getServerSnapshot,\n selector,\n isEqual\n) {\n var instRef = useRef(null);\n if (null === instRef.current) {\n var inst = { hasValue: !1, value: null };\n instRef.current = inst;\n } else inst = instRef.current;\n instRef = useMemo(\n function () {\n function memoizedSelector(nextSnapshot) {\n if (!hasMemo) {\n hasMemo = !0;\n memoizedSnapshot = nextSnapshot;\n nextSnapshot = selector(nextSnapshot);\n if (void 0 !== isEqual && inst.hasValue) {\n var currentSelection = inst.value;\n if (isEqual(currentSelection, nextSnapshot))\n return (memoizedSelection = currentSelection);\n }\n return (memoizedSelection = nextSnapshot);\n }\n currentSelection = memoizedSelection;\n if (objectIs(memoizedSnapshot, nextSnapshot)) return currentSelection;\n var nextSelection = selector(nextSnapshot);\n if (void 0 !== isEqual && isEqual(currentSelection, nextSelection))\n return (memoizedSnapshot = nextSnapshot), currentSelection;\n memoizedSnapshot = nextSnapshot;\n return (memoizedSelection = nextSelection);\n }\n var hasMemo = !1,\n memoizedSnapshot,\n memoizedSelection,\n maybeGetServerSnapshot =\n void 0 === getServerSnapshot ? null : getServerSnapshot;\n return [\n function () {\n return memoizedSelector(getSnapshot());\n },\n null === maybeGetServerSnapshot\n ? void 0\n : function () {\n return memoizedSelector(maybeGetServerSnapshot());\n }\n ];\n },\n [getSnapshot, getServerSnapshot, selector, isEqual]\n );\n var value = useSyncExternalStore(subscribe, instRef[0], instRef[1]);\n useEffect(\n function () {\n inst.hasValue = !0;\n inst.value = value;\n },\n [value]\n );\n useDebugValue(value);\n return value;\n};\n","/**\n * @license React\n * use-sync-external-store-shim/with-selector.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n var React = require(\"react\"),\n shim = require(\"use-sync-external-store/shim\"),\n objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useSyncExternalStore = shim.useSyncExternalStore,\n useRef = React.useRef,\n useEffect = React.useEffect,\n useMemo = React.useMemo,\n useDebugValue = React.useDebugValue;\n exports.useSyncExternalStoreWithSelector = function (\n subscribe,\n getSnapshot,\n getServerSnapshot,\n selector,\n isEqual\n ) {\n var instRef = useRef(null);\n if (null === instRef.current) {\n var inst = { hasValue: !1, value: null };\n instRef.current = inst;\n } else inst = instRef.current;\n instRef = useMemo(\n function () {\n function memoizedSelector(nextSnapshot) {\n if (!hasMemo) {\n hasMemo = !0;\n memoizedSnapshot = nextSnapshot;\n nextSnapshot = selector(nextSnapshot);\n if (void 0 !== isEqual && inst.hasValue) {\n var currentSelection = inst.value;\n if (isEqual(currentSelection, nextSnapshot))\n return (memoizedSelection = currentSelection);\n }\n return (memoizedSelection = nextSnapshot);\n }\n currentSelection = memoizedSelection;\n if (objectIs(memoizedSnapshot, nextSnapshot))\n return currentSelection;\n var nextSelection = selector(nextSnapshot);\n if (void 0 !== isEqual && isEqual(currentSelection, nextSelection))\n return (memoizedSnapshot = nextSnapshot), currentSelection;\n memoizedSnapshot = nextSnapshot;\n return (memoizedSelection = nextSelection);\n }\n var hasMemo = !1,\n memoizedSnapshot,\n memoizedSelection,\n maybeGetServerSnapshot =\n void 0 === getServerSnapshot ? null : getServerSnapshot;\n return [\n function () {\n return memoizedSelector(getSnapshot());\n },\n null === maybeGetServerSnapshot\n ? void 0\n : function () {\n return memoizedSelector(maybeGetServerSnapshot());\n }\n ];\n },\n [getSnapshot, getServerSnapshot, selector, isEqual]\n );\n var value = useSyncExternalStore(subscribe, instRef[0], instRef[1]);\n useEffect(\n function () {\n inst.hasValue = !0;\n inst.value = value;\n },\n [value]\n );\n useDebugValue(value);\n return value;\n };\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.production.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.development.js');\n}\n","import * as React from 'react';\nexport default parseInt(React.version, 10);","import * as React from 'react';\n/* We need to import the shim because React 17 does not support the `useSyncExternalStore` API.\n * More info: https://github.com/mui/mui-x/issues/18303#issuecomment-2958392341 */\nimport { useSyncExternalStore } from 'use-sync-external-store/shim';\nimport { useSyncExternalStoreWithSelector } from 'use-sync-external-store/shim/with-selector';\nimport reactMajor from \"../reactMajor/index.js\";\n/* Some tests fail in R18 with the raw useSyncExternalStore. It may be possible to make it work\n * but for now we only enable it for R19+. */\nconst canUseRawUseSyncExternalStore = reactMajor >= 19;\nconst useStoreImplementation = canUseRawUseSyncExternalStore ? useStoreR19 : useStoreLegacy;\nexport function useStore(store, selector, a1, a2, a3) {\n return useStoreImplementation(store, selector, a1, a2, a3);\n}\nfunction useStoreR19(store, selector, a1, a2, a3) {\n const getSelection = React.useCallback(() => selector(store.getSnapshot(), a1, a2, a3), [store, selector, a1, a2, a3]);\n return useSyncExternalStore(store.subscribe, getSelection, getSelection);\n}\nfunction useStoreLegacy(store, selector, a1, a2, a3) {\n return useSyncExternalStoreWithSelector(store.subscribe, store.getSnapshot, store.getSnapshot, state => selector(state, a1, a2, a3));\n}","'use client';\n\nimport * as React from 'react';\nconst UNINITIALIZED = {};\n\n/**\n * A React.useRef() that is initialized lazily with a function. Note that it accepts an optional\n * initialization argument, so the initialization function doesn't need to be an inline closure.\n *\n * @usage\n * const ref = useLazyRef(sortColumns, columns)\n */\nexport default function useLazyRef(init, initArg) {\n const ref = React.useRef(UNINITIALIZED);\n if (ref.current === UNINITIALIZED) {\n ref.current = init(initArg);\n }\n return ref;\n}","'use client';\n\nimport * as React from 'react';\nconst EMPTY = [];\n\n/**\n * A React.useEffect equivalent that runs once, when the component is mounted.\n */\nexport default function useOnMount(fn) {\n // TODO: uncomment once we enable eslint-plugin-react-compiler // eslint-disable-next-line react-compiler/react-compiler -- no need to put `fn` in the dependency array\n /* eslint-disable react-hooks/exhaustive-deps */\n React.useEffect(fn, EMPTY);\n /* eslint-enable react-hooks/exhaustive-deps */\n}","import useLazyRef from '@mui/utils/useLazyRef';\nimport useOnMount from '@mui/utils/useOnMount';\nconst noop = () => {};\n\n/**\n * An Effect implementation for the Store. This should be used for side-effects only. To\n * compute and store derived state, use `createSelectorMemoized` instead.\n */\nexport function useStoreEffect(store, selector, effect) {\n const instance = useLazyRef(initialize, {\n store,\n selector\n }).current;\n instance.effect = effect;\n useOnMount(instance.onMount);\n}\n\n// `useLazyRef` typings are incorrect, `params` should not be optional\nfunction initialize(params) {\n const {\n store,\n selector\n } = params;\n let previousState = selector(store.state);\n const instance = {\n effect: noop,\n dispose: null,\n // We want a single subscription done right away and cleared on unmount only,\n // but React triggers `useOnMount` multiple times in dev, so we need to manage\n // the subscription anyway.\n subscribe: () => {\n instance.dispose ??= store.subscribe(state => {\n const nextState = selector(state);\n if (!Object.is(previousState, nextState)) {\n const prev = previousState;\n previousState = nextState;\n instance.effect(prev, nextState);\n }\n });\n },\n onMount: () => {\n instance.subscribe();\n return () => {\n instance.dispose?.();\n instance.dispose = null;\n };\n }\n };\n instance.subscribe();\n return instance;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport { useStore } from \"./useStore.js\";\n/* eslint-disable no-cond-assign */\n\nexport class Store {\n // HACK: `any` fixes adding listeners that accept partial state.\n\n // Internal state to handle recursive `setState()` calls\n\n static create(state) {\n return new Store(state);\n }\n constructor(state) {\n this.state = state;\n this.listeners = new Set();\n this.updateTick = 0;\n }\n subscribe = fn => {\n this.listeners.add(fn);\n return () => {\n this.listeners.delete(fn);\n };\n };\n\n /**\n * Returns the current state snapshot. Meant for usage with `useSyncExternalStore`.\n * If you want to access the state, use the `state` property instead.\n */\n getSnapshot = () => {\n return this.state;\n };\n setState(newState) {\n this.state = newState;\n this.updateTick += 1;\n const currentTick = this.updateTick;\n const it = this.listeners.values();\n let result;\n while (result = it.next(), !result.done) {\n if (currentTick !== this.updateTick) {\n // If the tick has changed, a recursive `setState` call has been made,\n // and it has already notified all listeners.\n return;\n }\n const listener = result.value;\n listener(newState);\n }\n }\n update(changes) {\n for (const key in changes) {\n if (!Object.is(this.state[key], changes[key])) {\n this.setState(_extends({}, this.state, changes));\n return;\n }\n }\n }\n set(key, value) {\n if (!Object.is(this.state[key], value)) {\n this.setState(_extends({}, this.state, {\n [key]: value\n }));\n }\n }\n use = (() => (selector, a1, a2, a3) => {\n return useStore(this, selector, a1, a2, a3);\n })();\n}","'use client';\n\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport useEnhancedEffect from '@mui/utils/useEnhancedEffect';\nexport const useChartAnimation = ({\n params,\n store\n}) => {\n React.useEffect(() => {\n store.set('animation', _extends({}, store.state.animation, {\n skip: params.skipAnimation\n }));\n }, [store, params.skipAnimation]);\n const disableAnimation = React.useCallback(() => {\n let disableCalled = false;\n store.set('animation', _extends({}, store.state.animation, {\n skipAnimationRequests: store.state.animation.skipAnimationRequests + 1\n }));\n return () => {\n if (disableCalled) {\n return;\n }\n disableCalled = true;\n store.set('animation', _extends({}, store.state.animation, {\n skipAnimationRequests: store.state.animation.skipAnimationRequests - 1\n }));\n };\n }, [store]);\n useEnhancedEffect(() => {\n // Skip animation test/jsdom\n const isAnimationDisabledEnvironment = typeof window === 'undefined' || !window?.matchMedia;\n if (isAnimationDisabledEnvironment) {\n return undefined;\n }\n let disableAnimationCleanup;\n const handleMediaChange = event => {\n if (event.matches) {\n disableAnimationCleanup = disableAnimation();\n } else {\n disableAnimationCleanup?.();\n }\n };\n const mql = window.matchMedia('(prefers-reduced-motion)');\n handleMediaChange(mql);\n mql.addEventListener('change', handleMediaChange);\n return () => {\n mql.removeEventListener('change', handleMediaChange);\n };\n }, [disableAnimation, store]);\n return {\n instance: {\n disableAnimation\n }\n };\n};\nuseChartAnimation.params = {\n skipAnimation: true\n};\nuseChartAnimation.getDefaultizedParams = ({\n params\n}) => _extends({}, params, {\n skipAnimation: params.skipAnimation ?? false\n});\nuseChartAnimation.getInitialState = ({\n skipAnimation\n}) => {\n const isAnimationDisabledEnvironment = typeof window === 'undefined' || !window?.matchMedia;\n\n // We use the value of `isAnimationDisabledEnvironment` as the initial value of `skipAnimation` to avoid\n // re-rendering the component on environments where matchMedia is not supported, hence skipAnimation will always be true.\n const disableAnimations = process.env.NODE_ENV === 'test' ? isAnimationDisabledEnvironment : false;\n return {\n animation: {\n skip: skipAnimation,\n // By initializing the skipAnimationRequests to 1, we ensure that the animation is always skipped\n skipAnimationRequests: disableAnimations ? 1 : 0\n }\n };\n};","import { createSelector } from '@mui/x-internals/store';\nconst selectorChartAnimationState = state => state.animation;\nexport const selectorChartSkipAnimation = createSelector(selectorChartAnimationState, state => state.skip || state.skipAnimationRequests > 0);","'use client';\n\nimport * as React from 'react';\n\n/**\n * Run an effect only after the first render.\n *\n * @param effect The effect to run after the first render\n * @param deps The dependencies for the effect\n */\nexport function useEffectAfterFirstRender(effect, deps) {\n const isFirstRender = React.useRef(true);\n React.useEffect(() => {\n if (isFirstRender.current) {\n isFirstRender.current = false;\n return undefined;\n }\n return effect();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps);\n}","export default function ownerDocument(node) {\n return node && node.ownerDocument || document;\n}","import ownerDocument from \"../ownerDocument/index.js\";\nexport default function ownerWindow(node) {\n const doc = ownerDocument(node);\n return doc.defaultView || window;\n}","import { useStore as useInternalStore } from '@mui/x-internals/store';\nexport const useSelector = useInternalStore;","export const DEFAULT_X_AXIS_KEY = 'DEFAULT_X_AXIS_KEY';\nexport const DEFAULT_Y_AXIS_KEY = 'DEFAULT_Y_AXIS_KEY';\nexport const DEFAULT_ROTATION_AXIS_KEY = 'DEFAULT_ROTATION_AXIS_KEY';\nexport const DEFAULT_RADIUS_AXIS_KEY = 'DEFAULT_RADIUS_AXIS_KEY';\nexport const DEFAULT_MARGINS = {\n top: 20,\n bottom: 20,\n left: 20,\n right: 20\n};\nexport const DEFAULT_AXIS_SIZE_WIDTH = 45;\nexport const DEFAULT_AXIS_SIZE_HEIGHT = 25;\n\n// How many pixels to add to the default axis size if that axis has a label\nexport const AXIS_LABEL_DEFAULT_HEIGHT = 20;","export const selectorChartCartesianAxisState = state => state.cartesianAxis;\nexport const selectorChartRawXAxis = state => state.cartesianAxis?.x;\nexport const selectorChartRawYAxis = state => state.cartesianAxis?.y;","import { createSelector, createSelectorMemoized } from '@mui/x-internals/store';\nimport { selectorChartRawXAxis, selectorChartRawYAxis } from \"./useChartCartesianAxisLayout.selectors.js\";\nexport const selectorChartLeftAxisSize = createSelector(selectorChartRawYAxis, function selectorChartLeftAxisSize(yAxis) {\n return (yAxis ?? []).reduce((acc, axis) => axis.position === 'left' ? acc + (axis.width || 0) + (axis.zoom?.slider.enabled ? axis.zoom.slider.size : 0) : acc, 0);\n});\nexport const selectorChartRightAxisSize = createSelector(selectorChartRawYAxis, function selectorChartRightAxisSize(yAxis) {\n return (yAxis ?? []).reduce((acc, axis) => axis.position === 'right' ? acc + (axis.width || 0) + (axis.zoom?.slider.enabled ? axis.zoom.slider.size : 0) : acc, 0);\n});\nexport const selectorChartTopAxisSize = createSelector(selectorChartRawXAxis, function selectorChartTopAxisSize(xAxis) {\n return (xAxis ?? []).reduce((acc, axis) => axis.position === 'top' ? acc + (axis.height || 0) + (axis.zoom?.slider.enabled ? axis.zoom.slider.size : 0) : acc, 0);\n});\nexport const selectorChartBottomAxisSize = createSelector(selectorChartRawXAxis, function selectorChartBottomAxisSize(xAxis) {\n return (xAxis ?? []).reduce((acc, axis) => axis.position === 'bottom' ? acc + (axis.height || 0) + (axis.zoom?.slider.enabled ? axis.zoom.slider.size : 0) : acc, 0);\n});\nexport const selectorChartAxisSizes = createSelectorMemoized(selectorChartLeftAxisSize, selectorChartRightAxisSize, selectorChartTopAxisSize, selectorChartBottomAxisSize, function selectorChartAxisSizes(left, right, top, bottom) {\n return {\n left,\n right,\n top,\n bottom\n };\n});","import { createSelector, createSelectorMemoized } from '@mui/x-internals/store';\nimport { selectorChartAxisSizes } from \"../../featurePlugins/useChartCartesianAxis/useChartAxisSize.selectors.js\";\nexport const selectorChartDimensionsState = state => state.dimensions;\nexport const selectorChartMargin = state => state.dimensions.margin;\nexport const selectorChartDrawingArea = createSelectorMemoized(selectorChartDimensionsState, selectorChartMargin, selectorChartAxisSizes, function selectorChartDrawingArea({\n width,\n height\n}, {\n top: marginTop,\n right: marginRight,\n bottom: marginBottom,\n left: marginLeft\n}, {\n left: axisSizeLeft,\n right: axisSizeRight,\n top: axisSizeTop,\n bottom: axisSizeBottom\n}) {\n return {\n width: width - marginLeft - marginRight - axisSizeLeft - axisSizeRight,\n left: marginLeft + axisSizeLeft,\n right: marginRight + axisSizeRight,\n height: height - marginTop - marginBottom - axisSizeTop - axisSizeBottom,\n top: marginTop + axisSizeTop,\n bottom: marginBottom + axisSizeBottom\n };\n});\nexport const selectorChartSvgWidth = createSelector(selectorChartDimensionsState, dimensionsState => dimensionsState.width);\nexport const selectorChartSvgHeight = createSelector(selectorChartDimensionsState, dimensionsState => dimensionsState.height);\nexport const selectorChartPropsWidth = createSelector(selectorChartDimensionsState, dimensionsState => dimensionsState.propsWidth);\nexport const selectorChartPropsHeight = createSelector(selectorChartDimensionsState, dimensionsState => dimensionsState.propsHeight);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nexport function defaultizeMargin(input, defaultMargin) {\n if (typeof input === 'number') {\n return {\n top: input,\n bottom: input,\n left: input,\n right: input\n };\n }\n if (defaultMargin) {\n return _extends({}, defaultMargin, input);\n }\n return input;\n}","'use client';\n\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport { useEffectAfterFirstRender } from '@mui/x-internals/useEffectAfterFirstRender';\nimport useEnhancedEffect from '@mui/utils/useEnhancedEffect';\nimport ownerWindow from '@mui/utils/ownerWindow';\nimport { useSelector } from \"../../../store/useSelector.js\";\nimport { DEFAULT_MARGINS } from \"../../../../constants/index.js\";\nimport { selectorChartDrawingArea } from \"./useChartDimensions.selectors.js\";\nimport { defaultizeMargin } from \"../../../defaultizeMargin.js\";\nconst MAX_COMPUTE_RUN = 10;\nexport const useChartDimensions = ({\n params,\n store,\n svgRef\n}) => {\n const hasInSize = params.width !== undefined && params.height !== undefined;\n const stateRef = React.useRef({\n displayError: false,\n initialCompute: true,\n computeRun: 0\n });\n // States only used for the initialization of the size.\n const [innerWidth, setInnerWidth] = React.useState(0);\n const [innerHeight, setInnerHeight] = React.useState(0);\n const computeSize = React.useCallback(() => {\n const mainEl = svgRef?.current;\n if (!mainEl) {\n return {};\n }\n const win = ownerWindow(mainEl);\n const computedStyle = win.getComputedStyle(mainEl);\n const newHeight = Math.floor(parseFloat(computedStyle.height)) || 0;\n const newWidth = Math.floor(parseFloat(computedStyle.width)) || 0;\n if (store.state.dimensions.width !== newWidth || store.state.dimensions.height !== newHeight) {\n store.set('dimensions', {\n margin: {\n top: params.margin.top,\n right: params.margin.right,\n bottom: params.margin.bottom,\n left: params.margin.left\n },\n width: params.width ?? newWidth,\n height: params.height ?? newHeight,\n propsWidth: params.width,\n propsHeight: params.height\n });\n }\n return {\n height: newHeight,\n width: newWidth\n };\n }, [store, svgRef, params.height, params.width,\n // Margin is an object, so we need to include all the properties to prevent infinite loops.\n params.margin.left, params.margin.right, params.margin.top, params.margin.bottom]);\n useEffectAfterFirstRender(() => {\n const width = params.width ?? store.state.dimensions.width;\n const height = params.height ?? store.state.dimensions.height;\n store.set('dimensions', {\n margin: {\n top: params.margin.top,\n right: params.margin.right,\n bottom: params.margin.bottom,\n left: params.margin.left\n },\n width,\n height,\n propsHeight: params.height,\n propsWidth: params.width\n });\n }, [store, params.height, params.width,\n // Margin is an object, so we need to include all the properties to prevent infinite loops.\n params.margin.left, params.margin.right, params.margin.top, params.margin.bottom]);\n React.useEffect(() => {\n // Ensure the error detection occurs after the first rendering.\n stateRef.current.displayError = true;\n }, []);\n\n // This effect is used to compute the size of the container on the initial render.\n // It is not bound to the raf loop to avoid an unwanted \"resize\" event.\n // https://github.com/mui/mui-x/issues/13477#issuecomment-2336634785\n useEnhancedEffect(() => {\n // computeRun is used to avoid infinite loops.\n if (hasInSize || !stateRef.current.initialCompute || stateRef.current.computeRun > MAX_COMPUTE_RUN) {\n return;\n }\n const computedSize = computeSize();\n if (computedSize.width !== innerWidth || computedSize.height !== innerHeight) {\n stateRef.current.computeRun += 1;\n if (computedSize.width !== undefined) {\n setInnerWidth(computedSize.width);\n }\n if (computedSize.height !== undefined) {\n setInnerHeight(computedSize.height);\n }\n } else if (stateRef.current.initialCompute) {\n stateRef.current.initialCompute = false;\n }\n }, [innerHeight, innerWidth, computeSize, hasInSize]);\n useEnhancedEffect(() => {\n if (hasInSize) {\n return () => {};\n }\n computeSize();\n const elementToObserve = svgRef.current;\n if (typeof ResizeObserver === 'undefined') {\n return () => {};\n }\n let animationFrame;\n const observer = new ResizeObserver(() => {\n // See https://github.com/mui/mui-x/issues/8733\n animationFrame = requestAnimationFrame(() => {\n computeSize();\n });\n });\n if (elementToObserve) {\n observer.observe(elementToObserve);\n }\n return () => {\n if (animationFrame) {\n cancelAnimationFrame(animationFrame);\n }\n if (elementToObserve) {\n observer.unobserve(elementToObserve);\n }\n };\n }, [computeSize, hasInSize, svgRef]);\n if (process.env.NODE_ENV !== 'production') {\n if (stateRef.current.displayError && params.width === undefined && innerWidth === 0) {\n console.error(`MUI X Charts: ChartContainer does not have \\`width\\` prop, and its container has no \\`width\\` defined.`);\n stateRef.current.displayError = false;\n }\n if (stateRef.current.displayError && params.height === undefined && innerHeight === 0) {\n console.error(`MUI X Charts: ChartContainer does not have \\`height\\` prop, and its container has no \\`height\\` defined.`);\n stateRef.current.displayError = false;\n }\n }\n const drawingArea = useSelector(store, selectorChartDrawingArea);\n const isXInside = React.useCallback(x => x >= drawingArea.left - 1 && x <= drawingArea.left + drawingArea.width, [drawingArea.left, drawingArea.width]);\n const isYInside = React.useCallback(y => y >= drawingArea.top - 1 && y <= drawingArea.top + drawingArea.height, [drawingArea.height, drawingArea.top]);\n const isPointInside = React.useCallback((x, y, targetElement) => {\n // For element allowed to overflow, wrapping them in <g data-drawing-container /> make them fully part of the drawing area.\n if (targetElement && 'closest' in targetElement && targetElement.closest('[data-drawing-container]')) {\n return true;\n }\n return isXInside(x) && isYInside(y);\n }, [isXInside, isYInside]);\n return {\n instance: {\n isPointInside,\n isXInside,\n isYInside\n }\n };\n};\nuseChartDimensions.params = {\n width: true,\n height: true,\n margin: true\n};\nuseChartDimensions.getDefaultizedParams = ({\n params\n}) => _extends({}, params, {\n margin: defaultizeMargin(params.margin, DEFAULT_MARGINS)\n});\nuseChartDimensions.getInitialState = ({\n width,\n height,\n margin\n}) => {\n return {\n dimensions: {\n margin,\n width: width ?? 0,\n height: height ?? 0,\n propsWidth: width,\n propsHeight: height\n }\n };\n};","'use client';\n\nimport useEnhancedEffect from '@mui/utils/useEnhancedEffect';\nexport const useChartExperimentalFeatures = ({\n params,\n store\n}) => {\n useEnhancedEffect(() => {\n store.set('experimentalFeatures', params.experimentalFeatures);\n }, [store, params.experimentalFeatures]);\n return {};\n};\nuseChartExperimentalFeatures.params = {\n experimentalFeatures: true\n};\nuseChartExperimentalFeatures.getInitialState = ({\n experimentalFeatures\n}) => {\n return {\n experimentalFeatures\n };\n};","import { createSelector } from '@mui/x-internals/store';\nexport const selectorChartExperimentalFeaturesState = state => state.experimentalFeatures;\nexport const selectorPreferStrictDomainInLineCharts = createSelector(selectorChartExperimentalFeaturesState, features => Boolean(features?.preferStrictDomainInLineCharts));","let globalChartDefaultId = 0;\nexport const createChartDefaultId = () => {\n globalChartDefaultId += 1;\n return `mui-chart-${globalChartDefaultId}`;\n};","'use client';\n\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport { createChartDefaultId } from \"./useChartId.utils.js\";\nexport const useChartId = ({\n params,\n store\n}) => {\n React.useEffect(() => {\n if (params.id === undefined || params.id === store.state.id.providedChartId && store.state.id.chartId !== undefined) {\n return;\n }\n store.set('id', _extends({}, store.state.id, {\n chartId: params.id ?? createChartDefaultId()\n }));\n }, [store, params.id]);\n return {};\n};\nuseChartId.params = {\n id: true\n};\nuseChartId.getInitialState = ({\n id\n}) => ({\n id: {\n chartId: id,\n providedChartId: id\n }\n});","import { createSelector } from '@mui/x-internals/store';\nconst selectorChartIdState = state => state.id;\n\n/**\n * Get the id attribute of the chart.\n * @param {ChartState<[UseChartIdSignature]>} state The state of the chart.\n * @returns {string} The id attribute of the chart.\n */\nexport const selectorChartId = createSelector(selectorChartIdState, idState => idState.chartId);","export const rainbowSurgePaletteLight = ['#4254FB', '#FFB422', '#FA4F58', '#0DBEFF', '#22BF75', '#FA83B4', '#FF7511'];\nexport const rainbowSurgePaletteDark = ['#495AFB', '#FFC758', '#F35865', '#30C8FF', '#44CE8D', '#F286B3', '#FF8C39'];\nexport const rainbowSurgePalette = mode => mode === 'dark' ? rainbowSurgePaletteDark : rainbowSurgePaletteLight;","/**\n * This method groups series by type and adds defaultized values such as the ids and colors.\n * It does NOT apply the series processors - that happens in a selector.\n * @param series The array of series provided by the developer\n * @param colors The color palette used to defaultize series colors\n * @returns An object structuring all the series by type with default values.\n */\nexport const defaultizeSeries = ({\n series,\n colors,\n seriesConfig\n}) => {\n // Group series by type\n const seriesGroups = {};\n series.forEach((seriesData, seriesIndex) => {\n const seriesWithDefaultValues = seriesConfig[seriesData.type].getSeriesWithDefaultValues(seriesData, seriesIndex, colors);\n const id = seriesWithDefaultValues.id;\n if (seriesGroups[seriesData.type] === undefined) {\n seriesGroups[seriesData.type] = {\n series: {},\n seriesOrder: []\n };\n }\n if (seriesGroups[seriesData.type]?.series[id] !== undefined) {\n throw new Error(`MUI X Charts: series' id \"${id}\" is not unique.`);\n }\n seriesGroups[seriesData.type].series[id] = seriesWithDefaultValues;\n seriesGroups[seriesData.type].seriesOrder.push(id);\n });\n return seriesGroups;\n};\n\n/**\n * Applies series processors to the defaultized series groups.\n * This should be called in a selector to compute processed series on-demand.\n * @param defaultizedSeries The defaultized series groups\n * @param seriesConfig The series configuration\n * @param dataset The optional dataset\n * @returns Processed series with all transformations applied\n */\nexport const applySeriesProcessors = (defaultizedSeries, seriesConfig, dataset) => {\n const processedSeries = {};\n\n // Apply formatter on a type group\n Object.keys(seriesConfig).forEach(type => {\n const group = defaultizedSeries[type];\n if (group !== undefined) {\n processedSeries[type] = seriesConfig[type]?.seriesProcessor?.(group, dataset) ?? group;\n }\n });\n return processedSeries;\n};\n\n/**\n * Applies series processors with drawing area to series if defined.\n * @param processedSeries The processed series groups\n * @param seriesConfig The series configuration\n * @param drawingArea The drawing area\n * @returns Processed series with all transformations applied\n */\nexport const applySeriesLayout = (processedSeries, seriesConfig, drawingArea) => {\n let processingDetected = false;\n const seriesLayout = {};\n\n // Apply processors on series type per group\n Object.keys(processedSeries).forEach(type => {\n const processor = seriesConfig[type]?.seriesLayout;\n const thisSeries = processedSeries[type];\n if (processor !== undefined && thisSeries !== undefined) {\n const newValue = processor(thisSeries, drawingArea);\n if (newValue && newValue !== processedSeries[type]) {\n processingDetected = true;\n seriesLayout[type] = newValue;\n }\n }\n });\n if (!processingDetected) {\n return {};\n }\n return seriesLayout;\n};","'use client';\n\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport { useEffectAfterFirstRender } from '@mui/x-internals/useEffectAfterFirstRender';\nimport { rainbowSurgePalette } from \"../../../../colorPalettes/index.js\";\nimport { defaultizeSeries } from \"./processSeries.js\";\nexport const useChartSeries = ({\n params,\n store,\n seriesConfig\n}) => {\n const {\n series,\n dataset,\n theme,\n colors\n } = params;\n\n // The effect do not track any value defined synchronously during the 1st render by hooks called after `useChartSeries`\n // As a consequence, the state generated by the 1st run of this useEffect will always be equal to the initialization one\n useEffectAfterFirstRender(() => {\n store.set('series', _extends({}, store.state.series, {\n defaultizedSeries: defaultizeSeries({\n series,\n colors: typeof colors === 'function' ? colors(theme) : colors,\n seriesConfig\n }),\n dataset\n }));\n }, [colors, dataset, series, theme, seriesConfig, store]);\n return {};\n};\nuseChartSeries.params = {\n dataset: true,\n series: true,\n colors: true,\n theme: true\n};\nconst EMPTY_ARRAY = [];\nuseChartSeries.getDefaultizedParams = ({\n params\n}) => _extends({}, params, {\n series: params.series?.length ? params.series : EMPTY_ARRAY,\n colors: params.colors ?? rainbowSurgePalette,\n theme: params.theme ?? 'light'\n});\nuseChartSeries.getInitialState = ({\n series = [],\n colors,\n theme,\n dataset\n}, _, seriesConfig) => {\n return {\n series: {\n seriesConfig,\n defaultizedSeries: defaultizeSeries({\n series,\n colors: typeof colors === 'function' ? colors(theme) : colors,\n seriesConfig\n }),\n dataset\n }\n };\n};","import { createSelectorMemoized, createSelector } from '@mui/x-internals/store';\nimport { applySeriesLayout, applySeriesProcessors } from \"./processSeries.js\";\nimport { selectorChartDrawingArea } from \"../useChartDimensions/useChartDimensions.selectors.js\";\nexport const selectorChartSeriesState = state => state.series;\nexport const selectorChartDefaultizedSeries = createSelector(selectorChartSeriesState, seriesState => seriesState.defaultizedSeries);\nexport const selectorChartSeriesConfig = createSelector(selectorChartSeriesState, seriesState => seriesState.seriesConfig);\n\n/**\n * Get the dataset from the series state.\n * @returns {DatasetType | undefined} The dataset.\n */\nexport const selectorChartDataset = createSelector(selectorChartSeriesState, seriesState => seriesState.dataset);\n\n/**\n * Get the processed series after applying series processors.\n * This selector computes the processed series on-demand from the defaultized series.\n * @returns {ProcessedSeries} The processed series.\n */\nexport const selectorChartSeriesProcessed = createSelectorMemoized(selectorChartDefaultizedSeries, selectorChartSeriesConfig, selectorChartDataset, function selectorChartSeriesProcessed(defaultizedSeries, seriesConfig, dataset) {\n return applySeriesProcessors(defaultizedSeries, seriesConfig, dataset);\n});\n\n/**\n * Get the processed series after applying series processors.\n * This selector computes the processed series on-demand from the defaultized series.\n * @returns {ProcessedSeries} The processed series.\n */\nexport const selectorChartSeriesLayout = createSelectorMemoized(selectorChartSeriesProcessed, selectorChartSeriesConfig, selectorChartDrawingArea, function selectorChartSeriesLayout(processedSeries, seriesConfig, drawingArea) {\n return applySeriesLayout(processedSeries, seriesConfig, drawingArea);\n});","export const eventList = {\n abort: true,\n animationcancel: true,\n animationend: true,\n animationiteration: true,\n animationstart: true,\n auxclick: true,\n beforeinput: true,\n beforetoggle: true,\n blur: true,\n cancel: true,\n canplay: true,\n canplaythrough: true,\n change: true,\n click: true,\n close: true,\n compositionend: true,\n compositionstart: true,\n compositionupdate: true,\n contextlost: true,\n contextmenu: true,\n contextrestored: true,\n copy: true,\n cuechange: true,\n cut: true,\n dblclick: true,\n drag: true,\n dragend: true,\n dragenter: true,\n dragleave: true,\n dragover: true,\n dragstart: true,\n drop: true,\n durationchange: true,\n emptied: true,\n ended: true,\n error: true,\n focus: true,\n focusin: true,\n focusout: true,\n formdata: true,\n gotpointercapture: true,\n input: true,\n invalid: true,\n keydown: true,\n keypress: true,\n keyup: true,\n load: true,\n loadeddata: true,\n loadedmetadata: true,\n loadstart: true,\n lostpointercapture: true,\n mousedown: true,\n mouseenter: true,\n mouseleave: true,\n mousemove: true,\n mouseout: true,\n mouseover: true,\n mouseup: true,\n paste: true,\n pause: true,\n play: true,\n playing: true,\n pointercancel: true,\n pointerdown: true,\n pointerenter: true,\n pointerleave: true,\n pointermove: true,\n pointerout: true,\n pointerover: true,\n pointerup: true,\n progress: true,\n ratechange: true,\n reset: true,\n resize: true,\n scroll: true,\n scrollend: true,\n securitypolicyviolation: true,\n seeked: true,\n seeking: true,\n select: true,\n selectionchange: true,\n selectstart: true,\n slotchange: true,\n stalled: true,\n submit: true,\n suspend: true,\n timeupdate: true,\n toggle: true,\n touchcancel: true,\n touchend: true,\n touchmove: true,\n touchstart: true,\n transitioncancel: true,\n transitionend: true,\n transitionrun: true,\n transitionstart: true,\n volumechange: true,\n waiting: true,\n webkitanimationend: true,\n webkitanimationiteration: true,\n webkitanimationstart: true,\n webkittransitionend: true,\n wheel: true,\n beforematch: true,\n pointerrawupdate: true\n};","import _extends from \"@babel/runtime/helpers/esm/extends\";\n/**\n * Base Gesture module that provides common functionality for all gesture implementations\n */\n\nimport { eventList } from \"./utils/eventList.js\";\n\n/**\n * The possible phases of a gesture during its lifecycle.\n *\n * - 'start': The gesture has been recognized and is beginning\n * - 'ongoing': The gesture is in progress (e.g., a finger is moving)\n * - 'end': The gesture has completed successfully\n * - 'cancel': The gesture was interrupted or terminated abnormally\n */\n\n/**\n * Core data structure passed to gesture event handlers.\n * Contains all relevant information about a gesture event.\n */\n\n/**\n * Defines the types of pointers that can trigger a gesture.\n */\n\n/**\n * Base configuration options that can be overridden per pointer mode.\n */\n\n/**\n * Configuration options for creating a gesture instance.\n */\n\n// eslint-disable-next-line no-underscore-dangle, @typescript-eslint/naming-convention\n\n/**\n * Type for the state of a gesture recognizer.\n */\n\n/**\n * Base abstract class for all gestures. This class provides the fundamental structure\n * and functionality for handling gestures, including registering and unregistering\n * gesture handlers, creating emitters, and managing gesture state.\n *\n * Gesture is designed as an extensible base for implementing specific gesture recognizers.\n * Concrete gesture implementations should extend this class or one of its subclasses.\n *\n * To implement:\n * - Non-pointer gestures (like wheel events): extend this Gesture class directly\n * - Pointer-based gestures: extend the PointerGesture class instead\n *\n * @example\n * ```ts\n * import { Gesture } from './Gesture';\n *\n * class CustomGesture extends Gesture {\n * constructor(options) {\n * super(options);\n * }\n *\n * clone(overrides) {\n * return new CustomGesture({\n * name: this.name,\n * // ... other options\n * ...overrides,\n * });\n * }\n * }\n * ```\n */\nexport class Gesture {\n /** Unique name identifying this gesture type */\n\n /** Whether to prevent default browser action for gesture events */\n\n /** Whether to stop propagation of gesture events */\n\n /**\n * List of gesture names that should prevent this gesture from activating when they are active.\n */\n\n /**\n * Array of keyboard keys that must be pressed for the gesture to be recognized.\n */\n\n /**\n * KeyboardManager instance for tracking key presses\n */\n\n /**\n * List of pointer types that can trigger this gesture.\n * If undefined, all pointer types are allowed.\n */\n\n /**\n * Pointer mode-specific configuration overrides.\n */\n\n /**\n * User-mutable data object for sharing state between gesture events\n * This object is included in all events emitted by this gesture\n */\n customData = {};\n\n /** Reference to the singleton PointerManager instance */\n\n /** Reference to the singleton ActiveGesturesRegistry instance */\n\n /** The DOM element this gesture is attached to */\n\n /** Stores the active gesture state */\n\n /** @internal For types. If false enables phases (xStart, x, xEnd) */\n\n /** @internal For types. The event type this gesture is associated with */\n\n /** @internal For types. The options type for this gesture */\n\n /** @internal For types. The options that can be changed at runtime */\n\n /** @internal For types. The state that can be changed at runtime */\n\n /**\n * Create a new gesture instance with the specified options\n *\n * @param options - Configuration options for this gesture\n */\n constructor(options) {\n if (!options || !options.name) {\n throw new Error('Gesture must be initialized with a valid name.');\n }\n if (options.name in eventList) {\n throw new Error(`Gesture can't be created with a native event name. Tried to use \"${options.name}\". Please use a custom name instead.`);\n }\n this.name = options.name;\n this.preventDefault = options.preventDefault ?? false;\n this.stopPropagation = options.stopPropagation ?? false;\n this.preventIf = options.preventIf ?? [];\n this.requiredKeys = options.requiredKeys ?? [];\n this.pointerMode = options.pointerMode ?? [];\n this.pointerOptions = options.pointerOptions ?? {};\n }\n\n /**\n * Initialize the gesture by acquiring the pointer manager and gestures registry\n * Must be called before the gesture can be used\n */\n init(element, pointerManager, gestureRegistry, keyboardManager) {\n this.element = element;\n this.pointerManager = pointerManager;\n this.gesturesRegistry = gestureRegistry;\n this.keyboardManager = keyboardManager;\n const changeOptionsEventName = `${this.name}ChangeOptions`;\n this.element.addEventListener(changeOptionsEventName, this.handleOptionsChange);\n const changeStateEventName = `${this.name}ChangeState`;\n this.element.addEventListener(changeStateEventName, this.handleStateChange);\n }\n\n /**\n * Handle option change events\n * @param event Custom event with new options in the detail property\n */\n handleOptionsChange = event => {\n if (event && event.detail) {\n this.updateOptions(event.detail);\n }\n };\n\n /**\n * Update the gesture options with new values\n * @param options Object containing properties to update\n */\n updateOptions(options) {\n // Update common options\n this.preventDefault = options.preventDefault ?? this.preventDefault;\n this.stopPropagation = options.stopPropagation ?? this.stopPropagation;\n this.preventIf = options.preventIf ?? this.preventIf;\n this.requiredKeys = options.requiredKeys ?? this.requiredKeys;\n this.pointerMode = options.pointerMode ?? this.pointerMode;\n this.pointerOptions = options.pointerOptions ?? this.pointerOptions;\n }\n\n /**\n * Get the default configuration for the pointer specific options.\n * Change this function in child classes to provide different defaults.\n */\n getBaseConfig() {\n return {\n requiredKeys: this.requiredKeys\n };\n }\n\n /**\n * Get the effective configuration for a specific pointer mode.\n * This merges the base configuration with pointer mode-specific overrides.\n *\n * @param pointerType - The pointer type to get configuration for\n * @returns The effective configuration object\n */\n getEffectiveConfig(pointerType, baseConfig) {\n if (pointerType !== 'mouse' && pointerType !== 'touch' && pointerType !== 'pen') {\n // Unknown pointer type, return base config\n return baseConfig;\n }\n\n // Apply pointer mode-specific overrides\n const pointerModeOverrides = this.pointerOptions[pointerType];\n if (pointerModeOverrides) {\n return _extends({}, baseConfig, pointerModeOverrides);\n }\n return baseConfig;\n }\n\n /**\n * Handle state change events\n * @param event Custom event with new state values in the detail property\n */\n handleStateChange = event => {\n if (event && event.detail) {\n this.updateState(event.detail);\n }\n };\n\n /**\n * Update the gesture state with new values\n * @param stateChanges Object containing state properties to update\n */\n updateState(stateChanges) {\n // This is a base implementation - concrete gesture classes should override\n // to handle specific state updates based on their state structure\n Object.assign(this.state, stateChanges);\n }\n\n /**\n * Create a deep clone of this gesture for a new element\n *\n * @param overrides - Optional configuration options that override the defaults\n * @returns A new instance of this gesture with the same configuration and any overrides applied\n */\n\n /**\n * Check if the event's target is or is contained within any of our registered elements\n *\n * @param event - The browser event to check\n * @returns The matching element or null if no match is found\n */\n getTargetElement(event) {\n if (this.isActive || this.element === event.target || 'contains' in this.element && this.element.contains(event.target) || 'getRootNode' in this.element && this.element.getRootNode() instanceof ShadowRoot && event.composedPath().includes(this.element)) {\n return this.element;\n }\n return null;\n }\n\n /** Whether the gesture is currently active */\n set isActive(isActive) {\n if (isActive) {\n this.gesturesRegistry.registerActiveGesture(this.element, this);\n } else {\n this.gesturesRegistry.unregisterActiveGesture(this.element, this);\n }\n }\n\n /** Whether the gesture is currently active */\n get isActive() {\n return this.gesturesRegistry.isGestureActive(this.element, this) ?? false;\n }\n\n /**\n * Checks if this gesture should be prevented from activating.\n *\n * @param element - The DOM element to check against\n * @param pointerType - The type of pointer triggering the gesture\n * @returns true if the gesture should be prevented, false otherwise\n */\n shouldPreventGesture(element, pointerType) {\n // Get effective configuration for this pointer type\n const effectiveConfig = this.getEffectiveConfig(pointerType, this.getBaseConfig());\n\n // First check if required keyboard keys are pressed\n if (!this.keyboardManager.areKeysPressed(effectiveConfig.requiredKeys)) {\n return true; // Prevent the gesture if required keys are not pressed\n }\n if (this.preventIf.length === 0) {\n return false; // No prevention rules, allow the gesture\n }\n const activeGestures = this.gesturesRegistry.getActiveGestures(element);\n\n // Check if any of the gestures that would prevent this one are active\n return this.preventIf.some(gestureName => activeGestures[gestureName]);\n }\n\n /**\n * Checks if the given pointer type is allowed for this gesture based on the pointerMode setting.\n *\n * @param pointerType - The type of pointer to check.\n * @returns true if the pointer type is allowed, false otherwise.\n */\n isPointerTypeAllowed(pointerType) {\n // If no pointer mode is specified, all pointer types are allowed\n if (!this.pointerMode || this.pointerMode.length === 0) {\n return true;\n }\n\n // Check if the pointer type is in the allowed types list\n return this.pointerMode.includes(pointerType);\n }\n\n /**\n * Clean up the gesture and unregister any listeners\n * Call this method when the gesture is no longer needed to prevent memory leaks\n */\n destroy() {\n const changeOptionsEventName = `${this.name}ChangeOptions`;\n this.element.removeEventListener(changeOptionsEventName, this.handleOptionsChange);\n const changeStateEventName = `${this.name}ChangeState`;\n this.element.removeEventListener(changeStateEventName, this.handleStateChange);\n }\n\n /**\n * Reset the gesture state to its initial values\n */\n}","/**\n * ActiveGesturesRegistry - Centralized registry for tracking which gestures are active on elements\n *\n * This singleton class keeps track of all gesture instances that are currently in their active state,\n * allowing both the system and applications to query which gestures are active on specific elements.\n */\n\n/**\n * Type for entries in the active gestures registry\n */\n\n/**\n * Registry that maintains a record of all currently active gestures across elements\n */\nexport class ActiveGesturesRegistry {\n /** Map of elements to their active gestures */\n activeGestures = (() => new Map())();\n\n /**\n * Register a gesture as active on an element\n *\n * @param element - The DOM element on which the gesture is active\n * @param gesture - The gesture instance that is active\n */\n registerActiveGesture(element, gesture) {\n if (!this.activeGestures.has(element)) {\n this.activeGestures.set(element, new Set());\n }\n const elementGestures = this.activeGestures.get(element);\n const entry = {\n gesture,\n element\n };\n elementGestures.add(entry);\n }\n\n /**\n * Remove a gesture from the active registry\n *\n * @param element - The DOM element on which the gesture was active\n * @param gesture - The gesture instance to deactivate\n */\n unregisterActiveGesture(element, gesture) {\n const elementGestures = this.activeGestures.get(element);\n if (!elementGestures) {\n return;\n }\n\n // Find and remove the specific gesture entry\n elementGestures.forEach(entry => {\n if (entry.gesture === gesture) {\n elementGestures.delete(entry);\n }\n });\n\n // Remove the element from the map if it no longer has any active gestures\n if (elementGestures.size === 0) {\n this.activeGestures.delete(element);\n }\n }\n\n /**\n * Get all active gestures for a specific element\n *\n * @param element - The DOM element to query\n * @returns Array of active gesture names\n */\n getActiveGestures(element) {\n const elementGestures = this.activeGestures.get(element);\n if (!elementGestures) {\n return {};\n }\n return Array.from(elementGestures).reduce((acc, entry) => {\n acc[entry.gesture.name] = true;\n return acc;\n }, {});\n }\n\n /**\n * Check if a specific gesture is active on an element\n *\n * @param element - The DOM element to check\n * @param gesture - The gesture instance to check\n * @returns True if the gesture is active on the element, false otherwise\n */\n isGestureActive(element, gesture) {\n const elementGestures = this.activeGestures.get(element);\n if (!elementGestures) {\n return false;\n }\n return Array.from(elementGestures).some(entry => entry.gesture === gesture);\n }\n\n /**\n * Clear all active gestures from the registry\n */\n destroy() {\n this.activeGestures.clear();\n }\n\n /**\n * Clear all active gestures for a specific element\n *\n * @param element - The DOM element to clear\n */\n unregisterElement(element) {\n this.activeGestures.delete(element);\n }\n}","/**\n * KeyboardManager - Manager for keyboard events in the gesture recognition system\n *\n * This class tracks keyboard state:\n * 1. Capturing and tracking all pressed keys\n * 2. Providing methods to check if specific keys are pressed\n */\n\n/**\n * Type definition for keyboard keys\n */\n\n/**\n * Class responsible for tracking keyboard state\n */\nexport class KeyboardManager {\n pressedKeys = (() => new Set())();\n\n /**\n * Create a new KeyboardManager instance\n */\n constructor() {\n this.initialize();\n }\n\n /**\n * Initialize the keyboard event listeners\n */\n initialize() {\n if (typeof window === 'undefined') {\n return;\n }\n\n // Add keyboard event listeners\n window.addEventListener('keydown', this.handleKeyDown);\n window.addEventListener('keyup', this.handleKeyUp);\n // Reset keys when window loses focus\n window.addEventListener('blur', this.clearKeys);\n }\n\n /**\n * Handle keydown events\n */\n handleKeyDown = event => {\n this.pressedKeys.add(event.key);\n };\n\n /**\n * Handle keyup events\n */\n handleKeyUp = event => {\n this.pressedKeys.delete(event.key);\n };\n\n /**\n * Clear all pressed keys\n */\n clearKeys = () => {\n this.pressedKeys.clear();\n };\n\n /**\n * Check if a set of keys are all currently pressed\n * @param keys The keys to check\n * @returns True if all specified keys are pressed, false otherwise\n */\n areKeysPressed(keys) {\n if (!keys || keys.length === 0) {\n return true; // No keys required means the condition is satisfied\n }\n return keys.every(key => {\n if (key === 'ControlOrMeta') {\n // May be \"deprecated\" on types, but it is still the best option for cross-platform detection\n // https://stackoverflow.com/a/71785253/24269134\n return navigator.platform.includes('Mac') ? this.pressedKeys.has('Meta') : this.pressedKeys.has('Control');\n }\n return this.pressedKeys.has(key);\n });\n }\n\n /**\n * Cleanup method to remove event listeners\n */\n destroy() {\n if (typeof window !== 'undefined') {\n window.removeEventListener('keydown', this.handleKeyDown);\n window.removeEventListener('keyup', this.handleKeyUp);\n window.removeEventListener('blur', this.clearKeys);\n }\n this.clearKeys();\n }\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\n/**\n * PointerManager - Centralized manager for pointer events in the gesture recognition system\n *\n * This singleton class abstracts the complexity of working with pointer events by:\n * 1. Capturing and tracking all active pointers (touch, mouse, pen)\n * 2. Normalizing pointer data into a consistent format\n * 3. Managing pointer capture for proper tracking across elements\n * 4. Distributing events to registered gesture recognizers\n */\n\n/**\n * Normalized representation of a pointer, containing all relevant information\n * from the original PointerEvent plus additional tracking data.\n *\n * This data structure encapsulates everything gesture recognizers need to know\n * about a pointer's current state.\n */\n\n/**\n * Configuration options for initializing the PointerManager.\n */\n\n/**\n * Manager for handling pointer events across the application.\n *\n * PointerManager serves as the foundational layer for gesture recognition,\n * providing a centralized system for tracking active pointers and distributing\n * pointer events to gesture recognizers.\n *\n * It normalizes browser pointer events into a consistent format and simplifies\n * multi-touch handling by managing pointer capture and tracking multiple\n * simultaneous pointers.\n */\nexport class PointerManager {\n /** Root element where pointer events are captured */\n\n /** CSS touch-action property value applied to the root element */\n\n /** Whether to use passive event listeners */\n\n /** Whether to prevent interrupt events like blur or contextmenu */\n preventEventInterruption = true;\n\n /** Map of all currently active pointers by their pointerId */\n pointers = (() => new Map())();\n\n /** Set of registered gesture handlers that receive pointer events */\n gestureHandlers = (() => new Set())();\n constructor(options) {\n this.root =\n // User provided root element\n options.root ??\n // Fallback to document root or body, this fixes shadow DOM scenarios\n document.getRootNode({\n composed: true\n }) ??\n // Fallback to document body, for some testing environments\n document.body;\n this.touchAction = options.touchAction || 'auto';\n this.passive = options.passive ?? false;\n this.preventEventInterruption = options.preventEventInterruption ?? true;\n this.setupEventListeners();\n }\n\n /**\n * Register a handler function to receive pointer events.\n *\n * The handler will be called whenever pointer events occur within the root element.\n * It receives the current map of all active pointers and the original event.\n *\n * @param {Function} handler - Function to receive pointer events and current pointer state\n * @returns {Function} An unregister function that removes this handler when called\n */\n registerGestureHandler(handler) {\n this.gestureHandlers.add(handler);\n\n // Return unregister function\n return () => {\n this.gestureHandlers.delete(handler);\n };\n }\n\n /**\n * Get a copy of the current active pointers map.\n *\n * Returns a new Map containing all currently active pointers.\n * Modifying the returned map will not affect the internal pointers state.\n *\n * @returns A new Map containing all active pointers\n */\n getPointers() {\n return new Map(this.pointers);\n }\n\n /**\n * Set up event listeners for pointer events on the root element.\n *\n * This method attaches all necessary event listeners and configures\n * the CSS touch-action property on the root element.\n */\n setupEventListeners() {\n // Set touch-action CSS property\n if (this.touchAction !== 'auto') {\n this.root.style.touchAction = this.touchAction;\n }\n\n // Add event listeners\n this.root.addEventListener('pointerdown', this.handlePointerEvent, {\n passive: this.passive\n });\n this.root.addEventListener('pointermove', this.handlePointerEvent, {\n passive: this.passive\n });\n this.root.addEventListener('pointerup', this.handlePointerEvent, {\n passive: this.passive\n });\n this.root.addEventListener('pointercancel', this.handlePointerEvent, {\n passive: this.passive\n });\n // @ts-expect-error, forceCancel is not a standard event, but used for custom handling\n this.root.addEventListener('forceCancel', this.handlePointerEvent, {\n passive: this.passive\n });\n\n // Add blur and contextmenu event listeners to interrupt all gestures\n this.root.addEventListener('blur', this.handleInterruptEvents);\n this.root.addEventListener('contextmenu', this.handleInterruptEvents);\n }\n\n /**\n * Handle events that should interrupt all gestures.\n * This clears all active pointers and notifies handlers with a pointercancel-like event.\n *\n * @param event - The event that triggered the interruption (blur or contextmenu)\n */\n handleInterruptEvents = event => {\n if (this.preventEventInterruption && 'pointerType' in event && event.pointerType === 'touch') {\n event.preventDefault();\n return;\n }\n\n // Create a synthetic pointer cancel event\n const cancelEvent = new PointerEvent('forceCancel', {\n bubbles: false,\n cancelable: false\n });\n const firstPointer = this.pointers.values().next().value;\n if (this.pointers.size > 0 && firstPointer) {\n // If there are active pointers, use the first one as a template for coordinates\n\n // Update the synthetic event with the pointer's coordinates\n Object.defineProperties(cancelEvent, {\n clientX: {\n value: firstPointer.clientX\n },\n clientY: {\n value: firstPointer.clientY\n },\n pointerId: {\n value: firstPointer.pointerId\n },\n pointerType: {\n value: firstPointer.pointerType\n }\n });\n\n // Force update of all pointers to have type 'forceCancel'\n for (const [pointerId, pointer] of this.pointers.entries()) {\n const updatedPointer = _extends({}, pointer, {\n type: 'forceCancel'\n });\n this.pointers.set(pointerId, updatedPointer);\n }\n }\n\n // Notify all handlers about the interruption\n this.notifyHandlers(cancelEvent);\n\n // Clear all pointers\n this.pointers.clear();\n };\n\n /**\n * Event handler for all pointer events.\n *\n * This method:\n * 1. Updates the internal pointers map based on the event type\n * 2. Manages pointer capture for tracking pointers outside the root element\n * 3. Notifies all registered handlers with the current state\n *\n * @param event - The original pointer event from the browser\n */\n handlePointerEvent = event => {\n const {\n type,\n pointerId\n } = event;\n\n // Create or update pointer data\n if (type === 'pointerdown' || type === 'pointermove') {\n this.pointers.set(pointerId, this.createPointerData(event));\n }\n // Remove pointer data on up or cancel\n else if (type === 'pointerup' || type === 'pointercancel' || type === 'forceCancel') {\n // Update one last time before removing\n this.pointers.set(pointerId, this.createPointerData(event));\n\n // Notify handlers with current state\n this.notifyHandlers(event);\n\n // Then remove the pointer\n this.pointers.delete(pointerId);\n return;\n }\n this.notifyHandlers(event);\n };\n\n /**\n * Notify all registered gesture handlers about a pointer event.\n *\n * Each handler receives the current map of active pointers and the original event.\n *\n * @param event - The original pointer event that triggered this notification\n */\n notifyHandlers(event) {\n this.gestureHandlers.forEach(handler => handler(this.pointers, event));\n }\n\n /**\n * Create a normalized PointerData object from a browser PointerEvent.\n *\n * This method extracts all relevant information from the original event\n * and formats it in a consistent way for gesture recognizers to use.\n *\n * @param event - The original browser pointer event\n * @returns A new PointerData object representing this pointer\n */\n createPointerData(event) {\n return {\n pointerId: event.pointerId,\n clientX: event.clientX,\n clientY: event.clientY,\n pageX: event.pageX,\n pageY: event.pageY,\n target: event.target,\n timeStamp: event.timeStamp,\n type: event.type,\n isPrimary: event.isPrimary,\n pressure: event.pressure,\n width: event.width,\n height: event.height,\n pointerType: event.pointerType,\n srcEvent: event\n };\n }\n\n /**\n * Clean up all event listeners and reset the PointerManager state.\n *\n * This method should be called when the PointerManager is no longer needed\n * to prevent memory leaks. It removes all event listeners, clears the\n * internal state, and resets the singleton instance.\n */\n destroy() {\n this.root.removeEventListener('pointerdown', this.handlePointerEvent);\n this.root.removeEventListener('pointermove', this.handlePointerEvent);\n this.root.removeEventListener('pointerup', this.handlePointerEvent);\n this.root.removeEventListener('pointercancel', this.handlePointerEvent);\n // @ts-expect-error, forceCancel is not a standard event, but used for custom handling\n this.root.removeEventListener('forceCancel', this.handlePointerEvent);\n this.root.removeEventListener('blur', this.handleInterruptEvents);\n this.root.removeEventListener('contextmenu', this.handleInterruptEvents);\n this.pointers.clear();\n this.gestureHandlers.clear();\n }\n}","import { ActiveGesturesRegistry } from \"./ActiveGesturesRegistry.js\";\nimport { KeyboardManager } from \"./KeyboardManager.js\";\nimport { PointerManager } from \"./PointerManager.js\";\n\n/**\n * Configuration options for initializing the GestureManager\n */\n\n/**\n * The primary class responsible for setting up and managing gestures across multiple elements.\n *\n * GestureManager maintains a collection of gesture templates that can be instantiated for\n * specific DOM elements. It handles lifecycle management, event dispatching, and cleanup.\n *\n * @example\n * ```typescript\n * // Basic setup with default gestures\n * const manager = new GestureManager({\n * root: document.body,\n * touchAction: 'none',\n * gestures: [\n * new PanGesture({ name: 'pan' }),\n * ],\n * });\n *\n * // Register pan gestures on an element\n * const element = manager.registerElement('pan', document.querySelector('.draggable'));\n *\n * // Add event listeners with proper typing\n * element.addEventListener('panStart', (event) => {\n * console.log('Pan started');\n * });\n *\n * element.addEventListener('pan', (event) => {\n * console.log(`Pan delta: ${event.deltaX}, ${event.deltaY}`);\n * });\n *\n * // Custom gesture types\n * interface MyGestureEvents {\n * custom: { x: number, y: number }\n * }\n * const customManager = new GestureManager<MyGestureEvents>({\n * root: document.body\n * gestures: [\n * new CustomGesture({ name: 'custom' }),\n * ],\n * });\n * ```\n */\nexport class GestureManager {\n /** Repository of gesture templates that can be cloned for specific elements */\n gestureTemplates = (() => new Map())();\n\n /** Maps DOM elements to their active gesture instances */\n elementGestureMap = (() => new Map())();\n activeGesturesRegistry = (() => new ActiveGesturesRegistry())();\n keyboardManager = (() => new KeyboardManager())();\n\n /**\n * Create a new GestureManager instance to coordinate gesture recognition\n *\n * @param options - Configuration options for the gesture manager\n */\n constructor(options) {\n // Initialize the PointerManager\n this.pointerManager = new PointerManager({\n root: options.root,\n touchAction: options.touchAction,\n passive: options.passive\n });\n\n // Add initial gestures as templates if provided\n if (options.gestures && options.gestures.length > 0) {\n options.gestures.forEach(gesture => {\n this.addGestureTemplate(gesture);\n });\n }\n }\n\n /**\n * Add a gesture template to the manager's template registry.\n * Templates serve as prototypes that can be cloned for individual elements.\n *\n * @param gesture - The gesture instance to use as a template\n */\n addGestureTemplate(gesture) {\n if (this.gestureTemplates.has(gesture.name)) {\n console.warn(`Gesture template with name \"${gesture.name}\" already exists. It will be overwritten.`);\n }\n this.gestureTemplates.set(gesture.name, gesture);\n }\n\n /**\n * Updates the options for a specific gesture on a given element and emits a change event.\n *\n * @param gestureName - Name of the gesture whose options should be updated\n * @param element - The DOM element where the gesture is attached\n * @param options - New options to apply to the gesture\n * @returns True if the options were successfully updated, false if the gesture wasn't found\n *\n * @example\n * ```typescript\n * // Update pan gesture sensitivity on the fly\n * manager.setGestureOptions('pan', element, { threshold: 5 });\n * ```\n */\n setGestureOptions(gestureName, element, options) {\n const elementGestures = this.elementGestureMap.get(element);\n if (!elementGestures || !elementGestures.has(gestureName)) {\n console.error(`Gesture \"${gestureName}\" not found on the provided element.`);\n return;\n }\n const event = new CustomEvent(`${gestureName}ChangeOptions`, {\n detail: options,\n bubbles: false,\n cancelable: false,\n composed: false\n });\n element.dispatchEvent(event);\n }\n\n /**\n * Updates the state for a specific gesture on a given element and emits a change event.\n *\n * @param gestureName - Name of the gesture whose state should be updated\n * @param element - The DOM element where the gesture is attached\n * @param state - New state to apply to the gesture\n * @returns True if the state was successfully updated, false if the gesture wasn't found\n *\n * @example\n * ```typescript\n * // Update total delta for a turnWheel gesture\n * manager.setGestureState('turnWheel', element, { totalDeltaX: 10 });\n * ```\n */\n setGestureState(gestureName, element, state) {\n const elementGestures = this.elementGestureMap.get(element);\n if (!elementGestures || !elementGestures.has(gestureName)) {\n console.error(`Gesture \"${gestureName}\" not found on the provided element.`);\n return;\n }\n const event = new CustomEvent(`${gestureName}ChangeState`, {\n detail: state,\n bubbles: false,\n cancelable: false,\n composed: false\n });\n element.dispatchEvent(event);\n }\n\n /**\n * Register an element to recognize one or more gestures.\n *\n * This method clones the specified gesture template(s) and creates\n * gesture recognizer instance(s) specifically for the provided element.\n * The element is returned with enhanced TypeScript typing for gesture events.\n *\n * @param gestureNames - Name(s) of the gesture(s) to register (must match template names)\n * @param element - The DOM element to attach the gesture(s) to\n * @param options - Optional map of gesture-specific options to override when registering\n * @returns The same element with properly typed event listeners\n *\n * @example\n * ```typescript\n * // Register multiple gestures\n * const element = manager.registerElement(['pan', 'pinch'], myDiv);\n *\n * // Register a single gesture\n * const draggable = manager.registerElement('pan', dragHandle);\n *\n * // Register with customized options for each gesture\n * const customElement = manager.registerElement(\n * ['pan', 'pinch', 'rotate'],\n * myElement,\n * {\n * pan: { threshold: 20, direction: ['left', 'right'] },\n * pinch: { threshold: 0.1 }\n * }\n * );\n * ```\n */\n registerElement(gestureNames, element, options) {\n // Handle array of gesture names\n if (!Array.isArray(gestureNames)) {\n gestureNames = [gestureNames];\n }\n gestureNames.forEach(name => {\n const gestureOptions = options?.[name];\n this.registerSingleGesture(name, element, gestureOptions);\n });\n return element;\n }\n\n /**\n * Internal method to register a single gesture on an element.\n *\n * @param gestureName - Name of the gesture to register\n * @param element - DOM element to attach the gesture to\n * @param options - Optional options to override the gesture template configuration\n * @returns True if the registration was successful, false otherwise\n */\n registerSingleGesture(gestureName, element, options) {\n // Find the gesture template\n const gestureTemplate = this.gestureTemplates.get(gestureName);\n if (!gestureTemplate) {\n console.error(`Gesture template \"${gestureName}\" not found.`);\n return false;\n }\n\n // Create element's gesture map if it doesn't exist\n if (!this.elementGestureMap.has(element)) {\n this.elementGestureMap.set(element, new Map());\n }\n\n // Check if this element already has this gesture registered\n const elementGestures = this.elementGestureMap.get(element);\n if (elementGestures.has(gestureName)) {\n console.warn(`Element already has gesture \"${gestureName}\" registered. It will be replaced.`);\n // Unregister the existing gesture first\n this.unregisterElement(gestureName, element);\n }\n\n // Clone the gesture template and create a new instance with optional overrides\n // This allows each element to have its own state, event listeners, and configuration\n const gestureInstance = gestureTemplate.clone(options);\n gestureInstance.init(element, this.pointerManager, this.activeGesturesRegistry, this.keyboardManager);\n\n // Store the gesture in the element's gesture map\n elementGestures.set(gestureName, gestureInstance);\n return true;\n }\n\n /**\n * Unregister a specific gesture from an element.\n * This removes the gesture recognizer and stops event emission for that gesture.\n *\n * @param gestureName - Name of the gesture to unregister\n * @param element - The DOM element to remove the gesture from\n * @returns True if the gesture was found and removed, false otherwise\n */\n unregisterElement(gestureName, element) {\n const elementGestures = this.elementGestureMap.get(element);\n if (!elementGestures || !elementGestures.has(gestureName)) {\n return false;\n }\n\n // Destroy the gesture instance\n const gesture = elementGestures.get(gestureName);\n gesture.destroy();\n\n // Remove from the map\n elementGestures.delete(gestureName);\n this.activeGesturesRegistry.unregisterElement(element);\n\n // Remove the element from the map if it no longer has any gestures\n if (elementGestures.size === 0) {\n this.elementGestureMap.delete(element);\n }\n return true;\n }\n\n /**\n * Unregister all gestures from an element.\n * Completely removes the element from the gesture system.\n *\n * @param element - The DOM element to remove all gestures from\n */\n unregisterAllGestures(element) {\n const elementGestures = this.elementGestureMap.get(element);\n if (elementGestures) {\n // Unregister all gestures for this element\n for (const [, gesture] of elementGestures) {\n gesture.destroy();\n this.activeGesturesRegistry.unregisterElement(element);\n }\n\n // Clear the map\n this.elementGestureMap.delete(element);\n }\n }\n\n /**\n * Clean up all gestures and event listeners.\n * Call this method when the GestureManager is no longer needed to prevent memory leaks.\n */\n destroy() {\n // Unregister all element gestures\n for (const [element] of this.elementGestureMap) {\n this.unregisterAllGestures(element);\n }\n\n // Clear all templates\n this.gestureTemplates.clear();\n this.elementGestureMap.clear();\n this.activeGesturesRegistry.destroy();\n this.keyboardManager.destroy();\n this.pointerManager.destroy();\n }\n}","import { Gesture } from \"./Gesture.js\";\n\n/**\n * Base configuration options that can be overridden per pointer mode.\n */\n\n/**\n * Configuration options for pointer-based gestures, extending the base GestureOptions.\n *\n * These options provide fine-grained control over how pointer events are interpreted\n * and when the gesture should be recognized.\n */\n\n/**\n * Base class for all pointer-based gestures.\n *\n * This class extends the base Gesture class with specialized functionality for\n * handling pointer events via the PointerManager. It provides common logic for\n * determining when a gesture should activate, tracking pointer movements, and\n * managing pointer thresholds.\n *\n * All pointer-based gesture implementations should extend this class rather than\n * the base Gesture class.\n *\n * @example\n * ```ts\n * import { PointerGesture } from './PointerGesture';\n *\n * class CustomGesture extends PointerGesture {\n * constructor(options) {\n * super(options);\n * }\n *\n * clone(overrides) {\n * return new CustomGesture({\n * name: this.name,\n * // ... other options\n * ...overrides,\n * });\n * }\n *\n * handlePointerEvent = (pointers, event) => {\n * // Handle pointer events here\n * }\n * }\n * ```\n */\nexport class PointerGesture extends Gesture {\n /** Function to unregister from the PointerManager when destroying this gesture */\n unregisterHandler = null;\n\n /** The original target element when the gesture began, used to prevent limbo state if target is removed */\n originalTarget = null;\n\n /**\n * Minimum number of simultaneous pointers required to activate the gesture.\n * The gesture will not start until at least this many pointers are active.\n */\n\n /**\n * Maximum number of simultaneous pointers allowed for this gesture.\n * If more than this many pointers are detected, the gesture may be canceled.\n */\n\n constructor(options) {\n super(options);\n this.minPointers = options.minPointers ?? 1;\n this.maxPointers = options.maxPointers ?? Infinity;\n }\n init(element, pointerManager, gestureRegistry, keyboardManager) {\n super.init(element, pointerManager, gestureRegistry, keyboardManager);\n this.unregisterHandler = this.pointerManager.registerGestureHandler(this.handlePointerEvent);\n }\n updateOptions(options) {\n super.updateOptions(options);\n this.minPointers = options.minPointers ?? this.minPointers;\n this.maxPointers = options.maxPointers ?? this.maxPointers;\n }\n getBaseConfig() {\n return {\n requiredKeys: this.requiredKeys,\n minPointers: this.minPointers,\n maxPointers: this.maxPointers\n };\n }\n isWithinPointerCount(pointers, pointerMode) {\n const config = this.getEffectiveConfig(pointerMode, this.getBaseConfig());\n return pointers.length >= config.minPointers && pointers.length <= config.maxPointers;\n }\n\n /**\n * Handler for pointer events from the PointerManager.\n * Concrete gesture implementations must override this method to provide\n * gesture-specific logic for recognizing and tracking the gesture.\n *\n * @param pointers - Map of active pointers by pointer ID\n * @param event - The original pointer event from the browser\n */\n\n /**\n * Calculate the target element for the gesture based on the active pointers.\n *\n * It takes into account the original target element.\n *\n * @param pointers - Map of active pointers by pointer ID\n * @param calculatedTarget - The target element calculated from getTargetElement\n * @returns A list of relevant pointers for this gesture\n */\n getRelevantPointers(pointers, calculatedTarget) {\n return pointers.filter(pointer => this.isPointerTypeAllowed(pointer.pointerType) && (calculatedTarget === pointer.target || pointer.target === this.originalTarget || calculatedTarget === this.originalTarget || 'contains' in calculatedTarget && calculatedTarget.contains(pointer.target)) || 'getRootNode' in calculatedTarget && calculatedTarget.getRootNode() instanceof ShadowRoot && pointer.srcEvent.composedPath().includes(calculatedTarget));\n }\n destroy() {\n if (this.unregisterHandler) {\n this.unregisterHandler();\n this.unregisterHandler = null;\n }\n super.destroy();\n }\n}","/**\n * Calculate the distance between two points\n */\nexport function getDistance(pointA, pointB) {\n const deltaX = pointB.x - pointA.x;\n const deltaY = pointB.y - pointA.y;\n return Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n}","import { getDistance } from \"./getDistance.js\";\n\n/**\n * Calculate the average distance between all pairs of pointers\n */\nexport function calculateAverageDistance(pointers) {\n if (pointers.length < 2) {\n return 0;\n }\n let totalDistance = 0;\n let pairCount = 0;\n\n // Calculate distance between each pair of pointers\n for (let i = 0; i < pointers.length; i += 1) {\n for (let j = i + 1; j < pointers.length; j += 1) {\n totalDistance += getDistance({\n x: pointers[i].clientX,\n y: pointers[i].clientY\n }, {\n x: pointers[j].clientX,\n y: pointers[j].clientY\n });\n pairCount += 1;\n }\n }\n\n // Return average distance\n return pairCount > 0 ? totalDistance / pairCount : 0;\n}","/**\n * Calculate the centroid (average position) of multiple pointers\n */\nexport function calculateCentroid(pointers) {\n if (pointers.length === 0) {\n return {\n x: 0,\n y: 0\n };\n }\n const sum = pointers.reduce((acc, pointer) => {\n acc.x += pointer.clientX;\n acc.y += pointer.clientY;\n return acc;\n }, {\n x: 0,\n y: 0\n });\n return {\n x: sum.x / pointers.length,\n y: sum.y / pointers.length\n };\n}","/**\n * Creates the event name for a specific gesture and phase\n */\nexport function createEventName(gesture, phase) {\n return `${gesture}${phase === 'ongoing' ? '' : phase.charAt(0).toUpperCase() + phase.slice(1)}`;\n}","const MAIN_THRESHOLD = 0.00001;\nconst ANGLE_THRESHOLD = 0.00001;\nconst SECONDARY_THRESHOLD = 0.15;\n\n/**\n * Get the direction of movement based on the current and previous positions\n */\nexport function getDirection(previous, current) {\n const deltaX = current.x - previous.x;\n const deltaY = current.y - previous.y;\n const direction = {\n vertical: null,\n horizontal: null,\n mainAxis: null\n };\n const isDiagonal = isDiagonalMovement(current, previous);\n const mainMovement = Math.abs(deltaX) > Math.abs(deltaY) ? 'horizontal' : 'vertical';\n\n // eslint-disable-next-line no-nested-ternary\n const horizontalThreshold = isDiagonal ? MAIN_THRESHOLD : mainMovement === 'horizontal' ? MAIN_THRESHOLD : SECONDARY_THRESHOLD;\n // eslint-disable-next-line no-nested-ternary\n const verticalThreshold = isDiagonal ? MAIN_THRESHOLD : mainMovement === 'horizontal' ? SECONDARY_THRESHOLD : MAIN_THRESHOLD;\n\n // Set horizontal direction if there's a significant movement horizontally\n if (Math.abs(deltaX) > horizontalThreshold) {\n // Small threshold to avoid noise\n direction.horizontal = deltaX > 0 ? 'right' : 'left';\n }\n\n // Set vertical direction if there's a significant movement vertically\n if (Math.abs(deltaY) > verticalThreshold) {\n // Small threshold to avoid noise\n direction.vertical = deltaY > 0 ? 'down' : 'up';\n }\n direction.mainAxis = isDiagonal ? 'diagonal' : mainMovement;\n return direction;\n}\nfunction isDiagonalMovement(previous, current) {\n const deltaX = current.x - previous.x;\n const deltaY = current.y - previous.y;\n\n // Calculate the angle of movement\n const angle = Math.atan2(deltaY, deltaX) * 180 / Math.PI;\n\n // Check if the angle is within the diagonal range\n return angle >= -45 + ANGLE_THRESHOLD && angle <= -22.5 + ANGLE_THRESHOLD || angle >= 22.5 + ANGLE_THRESHOLD && angle <= 45 + ANGLE_THRESHOLD || angle >= 135 + ANGLE_THRESHOLD && angle <= 157.5 + ANGLE_THRESHOLD || angle >= -157.5 + ANGLE_THRESHOLD && angle <= -135 + ANGLE_THRESHOLD;\n}","/**\n * Check if a direction matches one of the allowed directions\n */\nexport function isDirectionAllowed(direction, allowedDirections) {\n if (!direction.vertical && !direction.horizontal) {\n return false;\n }\n if (allowedDirections.length === 0) {\n return true;\n }\n\n // Check if the vertical direction is allowed (if it exists)\n const verticalAllowed = direction.vertical === null || allowedDirections.includes(direction.vertical);\n\n // Check if the horizontal direction is allowed (if it exists)\n const horizontalAllowed = direction.horizontal === null || allowedDirections.includes(direction.horizontal);\n\n // Both directions must be allowed\n return verticalAllowed && horizontalAllowed;\n}","const DIRECTION_THRESHOLD = 0;\nexport const getPinchDirection = velocity => {\n if (velocity > DIRECTION_THRESHOLD) {\n return 1; // Zooming in\n }\n if (velocity < -DIRECTION_THRESHOLD) {\n return -1; // Zooming out\n }\n return 0; // No significant movement\n};","export const preventDefault = event => {\n if (event.cancelable) {\n event.preventDefault();\n }\n};","import _extends from \"@babel/runtime/helpers/esm/extends\";\n/**\n * MoveGesture - Detects when a pointer enters, moves within, and leaves an element\n *\n * This gesture tracks pointer movements over an element, firing events when:\n * - A pointer enters the element (start)\n * - A pointer moves within the element (ongoing)\n * - A pointer leaves the element (end)\n *\n * Unlike other gestures which often require specific actions to trigger,\n * the move gesture fires automatically when pointers interact with the target element.\n *\n * This gesture only works with mouse pointers, not touch or pen.\n */\n\nimport { PointerGesture } from \"../PointerGesture.js\";\nimport { calculateCentroid, createEventName } from \"../utils/index.js\";\n\n/**\n * Configuration options for the MoveGesture\n * Extends the base PointerGestureOptions\n */\n\n/**\n * Event data specific to move gesture events\n * Includes the source pointer event and standard gesture data\n */\n\n/**\n * Type definition for the CustomEvent created by MoveGesture\n */\n\n/**\n * State tracking for the MoveGesture\n */\n\n/**\n * MoveGesture class for handling pointer movement over elements\n *\n * This gesture detects when pointers enter, move within, or leave target elements,\n * and dispatches corresponding custom events.\n *\n * This gesture only works with hovering mouse pointers, not touch.\n */\nexport class MoveGesture extends PointerGesture {\n state = {\n lastPosition: null\n };\n\n /**\n * Movement threshold in pixels that must be exceeded before the gesture activates.\n * Higher values reduce false positive gesture detection for small movements.\n */\n\n constructor(options) {\n super(options);\n this.threshold = options.threshold || 0;\n }\n clone(overrides) {\n return new MoveGesture(_extends({\n name: this.name,\n preventDefault: this.preventDefault,\n stopPropagation: this.stopPropagation,\n threshold: this.threshold,\n minPointers: this.minPointers,\n maxPointers: this.maxPointers,\n requiredKeys: [...this.requiredKeys],\n pointerMode: [...this.pointerMode],\n preventIf: [...this.preventIf],\n pointerOptions: structuredClone(this.pointerOptions)\n }, overrides));\n }\n init(element, pointerManager, gestureRegistry, keyboardManager) {\n super.init(element, pointerManager, gestureRegistry, keyboardManager);\n\n // Add event listeners for entering and leaving elements\n // These are different from pointer events handled by PointerManager\n // @ts-expect-error, PointerEvent is correct.\n this.element.addEventListener('pointerenter', this.handleElementEnter);\n // @ts-expect-error, PointerEvent is correct.\n this.element.addEventListener('pointerleave', this.handleElementLeave);\n }\n destroy() {\n // Remove event listeners using the same function references\n // @ts-expect-error, PointerEvent is correct.\n this.element.removeEventListener('pointerenter', this.handleElementEnter);\n // @ts-expect-error, PointerEvent is correct.\n this.element.removeEventListener('pointerleave', this.handleElementLeave);\n this.resetState();\n super.destroy();\n }\n updateOptions(options) {\n // Call parent method to handle common options\n super.updateOptions(options);\n }\n resetState() {\n this.isActive = false;\n this.state = {\n lastPosition: null\n };\n }\n\n /**\n * Handle pointer enter events for a specific element\n * @param event The original pointer event\n */\n handleElementEnter = event => {\n if (event.pointerType !== 'mouse' && event.pointerType !== 'pen') {\n return;\n }\n\n // Get pointers from the PointerManager\n const pointers = this.pointerManager.getPointers() || new Map();\n const pointersArray = Array.from(pointers.values());\n\n // Only activate if we're within pointer count constraints\n if (this.isWithinPointerCount(pointersArray, event.pointerType)) {\n this.isActive = true;\n const currentPosition = {\n x: event.clientX,\n y: event.clientY\n };\n this.state.lastPosition = currentPosition;\n\n // Emit start event\n this.emitMoveEvent(this.element, 'start', pointersArray, event);\n this.emitMoveEvent(this.element, 'ongoing', pointersArray, event);\n }\n };\n\n /**\n * Handle pointer leave events for a specific element\n * @param event The original pointer event\n */\n handleElementLeave = event => {\n if (event.pointerType !== 'mouse' && event.pointerType !== 'pen') {\n return;\n }\n if (!this.isActive) {\n return;\n }\n\n // Get pointers from the PointerManager\n const pointers = this.pointerManager.getPointers() || new Map();\n const pointersArray = Array.from(pointers.values());\n\n // Emit end event and reset state\n this.emitMoveEvent(this.element, 'end', pointersArray, event);\n this.resetState();\n };\n\n /**\n * Handle pointer events for the move gesture (only handles move events now)\n * @param pointers Map of active pointers\n * @param event The original pointer event\n */\n handlePointerEvent = (pointers, event) => {\n if (event.type !== 'pointermove' || event.pointerType !== 'mouse' && event.pointerType !== 'pen') {\n return;\n }\n if (this.preventDefault) {\n event.preventDefault();\n }\n if (this.stopPropagation) {\n event.stopPropagation();\n }\n const pointersArray = Array.from(pointers.values());\n\n // Find which element (if any) is being targeted\n const targetElement = this.getTargetElement(event);\n if (!targetElement) {\n return;\n }\n if (!this.isWithinPointerCount(pointersArray, event.pointerType)) {\n return;\n }\n if (this.shouldPreventGesture(targetElement, event.pointerType)) {\n if (!this.isActive) {\n return;\n }\n this.resetState();\n this.emitMoveEvent(targetElement, 'end', pointersArray, event);\n return;\n }\n\n // Update position\n const currentPosition = {\n x: event.clientX,\n y: event.clientY\n };\n this.state.lastPosition = currentPosition;\n if (!this.isActive) {\n this.isActive = true;\n this.emitMoveEvent(targetElement, 'start', pointersArray, event);\n }\n // Emit ongoing event\n this.emitMoveEvent(targetElement, 'ongoing', pointersArray, event);\n };\n\n /**\n * Emit move-specific events\n * @param element The DOM element the event is related to\n * @param phase The current phase of the gesture (start, ongoing, end)\n * @param pointers Array of active pointers\n * @param event The original pointer event\n */\n emitMoveEvent(element, phase, pointers, event) {\n const currentPosition = this.state.lastPosition || calculateCentroid(pointers);\n\n // Get list of active gestures\n const activeGestures = this.gesturesRegistry.getActiveGestures(element);\n\n // Create custom event data\n const customEventData = {\n gestureName: this.name,\n centroid: currentPosition,\n target: event.target,\n srcEvent: event,\n phase,\n pointers,\n timeStamp: event.timeStamp,\n activeGestures,\n customData: this.customData\n };\n\n // Event names to trigger\n const eventName = createEventName(this.name, phase);\n\n // Dispatch custom events on the element\n const domEvent = new CustomEvent(eventName, {\n bubbles: true,\n cancelable: true,\n composed: true,\n detail: customEventData\n });\n element.dispatchEvent(domEvent);\n }\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\n/**\n * PanGesture - Detects panning (dragging) movements\n *\n * This gesture tracks pointer dragging movements across elements, firing events when:\n * - The drag movement begins and passes the threshold distance (start)\n * - The drag movement continues (ongoing)\n * - The drag movement ends (end)\n *\n * The gesture can be configured to recognize movement only in specific directions.\n */\n\nimport { PointerGesture } from \"../PointerGesture.js\";\nimport { calculateCentroid, createEventName, getDirection, isDirectionAllowed } from \"../utils/index.js\";\n\n/**\n * Configuration options for PanGesture\n * Extends PointerGestureOptions with direction constraints\n */\n\n/**\n * Event data specific to pan gesture events\n * Contains information about movement distance, direction, and velocity\n */\n\n/**\n * Type definition for the CustomEvent created by PanGesture\n */\n\n/**\n * State tracking for the PanGesture\n */\n\n/**\n * PanGesture class for handling panning/dragging interactions\n *\n * This gesture detects when users drag across elements with one or more pointers,\n * and dispatches directional movement events with delta and velocity information.\n */\nexport class PanGesture extends PointerGesture {\n state = (() => ({\n startPointers: new Map(),\n startCentroid: null,\n lastCentroid: null,\n movementThresholdReached: false,\n totalDeltaX: 0,\n totalDeltaY: 0,\n activeDeltaX: 0,\n activeDeltaY: 0,\n lastDirection: {\n vertical: null,\n horizontal: null,\n mainAxis: null\n },\n lastDeltas: null\n }))();\n\n /**\n * Movement threshold in pixels that must be exceeded before the gesture activates.\n * Higher values reduce false positive gesture detection for small movements.\n */\n\n /**\n * Allowed directions for the pan gesture\n * Default allows all directions\n */\n\n constructor(options) {\n super(options);\n this.direction = options.direction || ['up', 'down', 'left', 'right'];\n this.threshold = options.threshold || 0;\n }\n clone(overrides) {\n return new PanGesture(_extends({\n name: this.name,\n preventDefault: this.preventDefault,\n stopPropagation: this.stopPropagation,\n threshold: this.threshold,\n minPointers: this.minPointers,\n maxPointers: this.maxPointers,\n direction: [...this.direction],\n requiredKeys: [...this.requiredKeys],\n pointerMode: [...this.pointerMode],\n preventIf: [...this.preventIf],\n pointerOptions: structuredClone(this.pointerOptions)\n }, overrides));\n }\n destroy() {\n this.resetState();\n super.destroy();\n }\n updateOptions(options) {\n super.updateOptions(options);\n this.direction = options.direction || this.direction;\n this.threshold = options.threshold ?? this.threshold;\n }\n resetState() {\n this.isActive = false;\n this.state = _extends({}, this.state, {\n startPointers: new Map(),\n startCentroid: null,\n lastCentroid: null,\n lastDeltas: null,\n activeDeltaX: 0,\n activeDeltaY: 0,\n movementThresholdReached: false,\n lastDirection: {\n vertical: null,\n horizontal: null,\n mainAxis: null\n }\n });\n }\n\n /**\n * Handle pointer events for the pan gesture\n */\n handlePointerEvent = (pointers, event) => {\n const pointersArray = Array.from(pointers.values());\n\n // Check for our forceCancel event to handle interrupted gestures (from contextmenu, blur)\n if (event.type === 'forceCancel') {\n // Reset all active pan gestures when we get a force reset event\n this.cancel(event.target, pointersArray, event);\n return;\n }\n\n // Find which element (if any) is being targeted\n const targetElement = this.getTargetElement(event);\n if (!targetElement) {\n return;\n }\n\n // Check if this gesture should be prevented by active gestures\n if (this.shouldPreventGesture(targetElement, event.pointerType)) {\n // If the gesture was active but now should be prevented, cancel it gracefully\n this.cancel(targetElement, pointersArray, event);\n return;\n }\n\n // Filter pointers to only include those targeting our element or its children\n const relevantPointers = this.getRelevantPointers(pointersArray, targetElement);\n if (!this.isWithinPointerCount(relevantPointers, event.pointerType)) {\n // Cancel or end the gesture if it was active\n this.cancel(targetElement, relevantPointers, event);\n return;\n }\n switch (event.type) {\n case 'pointerdown':\n if (!this.isActive && !this.state.startCentroid) {\n // Store initial pointers\n relevantPointers.forEach(pointer => {\n this.state.startPointers.set(pointer.pointerId, pointer);\n });\n\n // Store the original target element\n this.originalTarget = targetElement;\n\n // Calculate and store the starting centroid\n this.state.startCentroid = calculateCentroid(relevantPointers);\n this.state.lastCentroid = _extends({}, this.state.startCentroid);\n }\n break;\n case 'pointermove':\n if (this.state.startCentroid && this.isWithinPointerCount(pointersArray, event.pointerType)) {\n // Calculate current centroid\n const currentCentroid = calculateCentroid(relevantPointers);\n\n // Calculate delta from start\n const distanceDeltaX = currentCentroid.x - this.state.startCentroid.x;\n const distanceDeltaY = currentCentroid.y - this.state.startCentroid.y;\n\n // Calculate movement distance\n const distance = Math.sqrt(distanceDeltaX * distanceDeltaX + distanceDeltaY * distanceDeltaY);\n\n // Determine movement direction\n const moveDirection = getDirection(this.state.lastCentroid ?? this.state.startCentroid, currentCentroid);\n\n // Calculate change in position since last move\n const lastDeltaX = this.state.lastCentroid ? currentCentroid.x - this.state.lastCentroid.x : 0;\n const lastDeltaY = this.state.lastCentroid ? currentCentroid.y - this.state.lastCentroid.y : 0;\n\n // Check if movement passes the threshold and is in an allowed direction\n if (!this.state.movementThresholdReached && distance >= this.threshold && isDirectionAllowed(moveDirection, this.direction)) {\n this.state.movementThresholdReached = true;\n this.isActive = true;\n\n // Update total accumulated delta\n this.state.lastDeltas = {\n x: lastDeltaX,\n y: lastDeltaY\n };\n this.state.totalDeltaX += lastDeltaX;\n this.state.totalDeltaY += lastDeltaY;\n this.state.activeDeltaX += lastDeltaX;\n this.state.activeDeltaY += lastDeltaY;\n\n // Emit start event\n this.emitPanEvent(targetElement, 'start', relevantPointers, event, currentCentroid);\n this.emitPanEvent(targetElement, 'ongoing', relevantPointers, event, currentCentroid);\n }\n // If we've already crossed the threshold, continue tracking\n else if (this.state.movementThresholdReached && this.isActive) {\n // Update total accumulated delta\n this.state.lastDeltas = {\n x: lastDeltaX,\n y: lastDeltaY\n };\n this.state.totalDeltaX += lastDeltaX;\n this.state.totalDeltaY += lastDeltaY;\n this.state.activeDeltaX += lastDeltaX;\n this.state.activeDeltaY += lastDeltaY;\n\n // Emit ongoing event\n this.emitPanEvent(targetElement, 'ongoing', relevantPointers, event, currentCentroid);\n }\n\n // Update last centroid\n this.state.lastCentroid = currentCentroid;\n this.state.lastDirection = moveDirection;\n }\n break;\n case 'pointerup':\n case 'pointercancel':\n case 'forceCancel':\n // If the gesture was active (threshold was reached), emit end event\n if (this.isActive && this.state.movementThresholdReached) {\n const remainingPointers = relevantPointers.filter(p => p.type !== 'pointerup' && p.type !== 'pointercancel');\n\n // If we no longer meet the pointer count requirements, end the gesture\n if (!this.isWithinPointerCount(remainingPointers, event.pointerType)) {\n // End the gesture\n const currentCentroid = this.state.lastCentroid || this.state.startCentroid;\n if (event.type === 'pointercancel') {\n this.emitPanEvent(targetElement, 'cancel', relevantPointers, event, currentCentroid);\n }\n this.emitPanEvent(targetElement, 'end', relevantPointers, event, currentCentroid);\n this.resetState();\n }\n } else {\n this.resetState();\n }\n break;\n default:\n break;\n }\n };\n\n /**\n * Emit pan-specific events with additional data\n */\n emitPanEvent(element, phase, pointers, event, currentCentroid) {\n if (!this.state.startCentroid) {\n return;\n }\n const deltaX = this.state.lastDeltas?.x ?? 0;\n const deltaY = this.state.lastDeltas?.y ?? 0;\n\n // Calculate velocity - time difference in seconds\n const firstPointer = this.state.startPointers.values().next().value;\n const timeElapsed = firstPointer ? (event.timeStamp - firstPointer.timeStamp) / 1000 : 0;\n const velocityX = timeElapsed > 0 ? deltaX / timeElapsed : 0;\n const velocityY = timeElapsed > 0 ? deltaY / timeElapsed : 0;\n const velocity = Math.sqrt(velocityX * velocityX + velocityY * velocityY);\n\n // Get list of active gestures\n const activeGestures = this.gesturesRegistry.getActiveGestures(element);\n\n // Create custom event data\n const customEventData = {\n gestureName: this.name,\n initialCentroid: this.state.startCentroid,\n centroid: currentCentroid,\n target: event.target,\n srcEvent: event,\n phase,\n pointers,\n timeStamp: event.timeStamp,\n deltaX,\n deltaY,\n direction: this.state.lastDirection,\n velocityX,\n velocityY,\n velocity,\n totalDeltaX: this.state.totalDeltaX,\n totalDeltaY: this.state.totalDeltaY,\n activeDeltaX: this.state.activeDeltaX,\n activeDeltaY: this.state.activeDeltaY,\n activeGestures,\n customData: this.customData\n };\n\n // Event names to trigger\n const eventName = createEventName(this.name, phase);\n\n // Dispatch custom events on the element\n const domEvent = new CustomEvent(eventName, {\n bubbles: true,\n cancelable: true,\n composed: true,\n detail: customEventData\n });\n element.dispatchEvent(domEvent);\n\n // Apply preventDefault/stopPropagation if configured\n if (this.preventDefault) {\n event.preventDefault();\n }\n if (this.stopPropagation) {\n event.stopPropagation();\n }\n }\n\n /**\n * Cancel the current gesture\n */\n cancel(element, pointers, event) {\n if (this.isActive) {\n const el = element ?? this.element;\n this.emitPanEvent(el, 'cancel', pointers, event, this.state.lastCentroid);\n this.emitPanEvent(el, 'end', pointers, event, this.state.lastCentroid);\n }\n this.resetState();\n }\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\n/**\n * PinchGesture - Detects pinch (zoom) movements with two or more pointers\n *\n * This gesture tracks when multiple pointers move toward or away from each other, firing events when:\n * - Two or more pointers begin moving (start)\n * - The pointers continue changing distance (ongoing)\n * - One or more pointers are released or lifted (end)\n *\n * This gesture is commonly used to implement zoom functionality in touch interfaces.\n */\n\nimport { PointerGesture } from \"../PointerGesture.js\";\nimport { calculateAverageDistance, calculateCentroid, createEventName, getPinchDirection } from \"../utils/index.js\";\n\n/**\n * Configuration options for the PinchGesture\n * Uses the same options as the base PointerGesture\n */\n\n/**\n * Event data specific to pinch gesture events\n * Contains information about scale, distance, and velocity\n */\n\n/**\n * Type definition for the CustomEvent created by PinchGesture\n */\n\n/**\n * State tracking for the PinchGesture\n */\n\n/**\n * PinchGesture class for handling pinch/zoom interactions\n *\n * This gesture detects when users move multiple pointers toward or away from each other,\n * and dispatches scale-related events with distance and velocity information.\n */\nexport class PinchGesture extends PointerGesture {\n state = {\n startDistance: 0,\n lastDistance: 0,\n lastScale: 1,\n lastTime: 0,\n velocity: 0,\n totalScale: 1,\n deltaScale: 0\n };\n\n /**\n * Movement threshold in pixels that must be exceeded before the gesture activates.\n * Higher values reduce false positive gesture detection for small movements.\n */\n\n constructor(options) {\n super(_extends({}, options, {\n minPointers: options.minPointers ?? 2\n }));\n this.threshold = options.threshold ?? 0;\n }\n clone(overrides) {\n return new PinchGesture(_extends({\n name: this.name,\n preventDefault: this.preventDefault,\n stopPropagation: this.stopPropagation,\n threshold: this.threshold,\n minPointers: this.minPointers,\n maxPointers: this.maxPointers,\n requiredKeys: [...this.requiredKeys],\n pointerMode: [...this.pointerMode],\n preventIf: [...this.preventIf],\n pointerOptions: structuredClone(this.pointerOptions)\n }, overrides));\n }\n destroy() {\n this.resetState();\n super.destroy();\n }\n updateOptions(options) {\n super.updateOptions(options);\n }\n resetState() {\n this.isActive = false;\n this.state = _extends({}, this.state, {\n startDistance: 0,\n lastDistance: 0,\n lastScale: 1,\n lastTime: 0,\n velocity: 0,\n deltaScale: 0\n });\n }\n\n /**\n * Handle pointer events for the pinch gesture\n */\n handlePointerEvent = (pointers, event) => {\n const pointersArray = Array.from(pointers.values());\n\n // Find which element (if any) is being targeted\n const targetElement = this.getTargetElement(event);\n if (!targetElement) {\n return;\n }\n\n // Check if this gesture should be prevented by active gestures\n if (this.shouldPreventGesture(targetElement, event.pointerType)) {\n if (this.isActive) {\n // If the gesture was active but now should be prevented, end it gracefully\n this.emitPinchEvent(targetElement, 'cancel', pointersArray, event);\n this.resetState();\n }\n return;\n }\n\n // Filter pointers to only include those targeting our element or its children\n const relevantPointers = this.getRelevantPointers(pointersArray, targetElement);\n switch (event.type) {\n case 'pointerdown':\n if (relevantPointers.length >= 2 && !this.isActive) {\n // Calculate and store the starting distance between pointers\n const initialDistance = calculateAverageDistance(relevantPointers);\n this.state.startDistance = initialDistance;\n this.state.lastDistance = initialDistance;\n this.state.lastTime = event.timeStamp;\n\n // Store the original target element\n this.originalTarget = targetElement;\n }\n break;\n case 'pointermove':\n if (this.state.startDistance && this.isWithinPointerCount(relevantPointers, event.pointerType)) {\n // Calculate current distance between pointers\n const currentDistance = calculateAverageDistance(relevantPointers);\n\n // Calculate absolute distance change\n const distanceChange = Math.abs(currentDistance - this.state.lastDistance);\n\n // Only proceed if the distance between pointers has changed enough\n if (distanceChange !== 0 && distanceChange >= this.threshold) {\n // Calculate scale relative to starting distance\n const scale = this.state.startDistance ? currentDistance / this.state.startDistance : 1;\n\n // Calculate the relative scale change since last event\n const scaleChange = scale / this.state.lastScale;\n // Apply this change to the total accumulated scale\n this.state.totalScale *= scaleChange;\n // Calculate velocity (change in scale over time)\n const deltaTime = (event.timeStamp - this.state.lastTime) / 1000; // convert to seconds\n if (this.state.lastDistance) {\n const deltaDistance = currentDistance - this.state.lastDistance;\n const result = deltaDistance / deltaTime;\n this.state.velocity = Number.isNaN(result) ? 0 : result;\n }\n\n // Update state\n this.state.lastDistance = currentDistance;\n this.state.deltaScale = scale - this.state.lastScale;\n this.state.lastScale = scale;\n this.state.lastTime = event.timeStamp;\n if (!this.isActive) {\n // Mark gesture as active\n this.isActive = true;\n\n // Emit start event\n this.emitPinchEvent(targetElement, 'start', relevantPointers, event);\n this.emitPinchEvent(targetElement, 'ongoing', relevantPointers, event);\n } else {\n // Emit ongoing event\n this.emitPinchEvent(targetElement, 'ongoing', relevantPointers, event);\n }\n }\n }\n break;\n case 'pointerup':\n case 'pointercancel':\n case 'forceCancel':\n if (this.isActive) {\n const remainingPointers = relevantPointers.filter(p => p.type !== 'pointerup' && p.type !== 'pointercancel');\n\n // If we no longer meet the pointer count requirements, end the gesture\n if (!this.isWithinPointerCount(remainingPointers, event.pointerType)) {\n if (event.type === 'pointercancel') {\n this.emitPinchEvent(targetElement, 'cancel', relevantPointers, event);\n }\n this.emitPinchEvent(targetElement, 'end', relevantPointers, event);\n\n // Reset state\n this.resetState();\n } else if (remainingPointers.length >= 2) {\n // If we still have enough pointers, update the start distance\n // to prevent jumping when a finger is lifted\n const newDistance = calculateAverageDistance(remainingPointers);\n this.state.startDistance = newDistance / this.state.lastScale;\n }\n }\n break;\n default:\n break;\n }\n };\n\n /**\n * Emit pinch-specific events with additional data\n */\n emitPinchEvent(element, phase, pointers, event) {\n // Calculate current centroid\n const centroid = calculateCentroid(pointers);\n\n // Create custom event data\n const distance = this.state.lastDistance;\n const scale = this.state.lastScale;\n\n // Get list of active gestures\n const activeGestures = this.gesturesRegistry.getActiveGestures(element);\n const customEventData = {\n gestureName: this.name,\n centroid,\n target: event.target,\n srcEvent: event,\n phase,\n pointers,\n timeStamp: event.timeStamp,\n scale,\n deltaScale: this.state.deltaScale,\n totalScale: this.state.totalScale,\n distance,\n velocity: this.state.velocity,\n activeGestures,\n direction: getPinchDirection(this.state.velocity),\n customData: this.customData\n };\n\n // Handle default event behavior\n if (this.preventDefault) {\n event.preventDefault();\n }\n if (this.stopPropagation) {\n event.stopPropagation();\n }\n\n // Event names to trigger\n const eventName = createEventName(this.name, phase);\n\n // Dispatch custom events on the element\n const domEvent = new CustomEvent(eventName, {\n bubbles: true,\n cancelable: true,\n composed: true,\n detail: customEventData\n });\n element.dispatchEvent(domEvent);\n }\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\n/**\n * PressGesture - Detects press and hold interactions\n *\n * This gesture tracks when users press and hold on an element for a specified duration, firing events when:\n * - The press begins and passes the holding threshold time (start, ongoing)\n * - The press ends (end)\n * - The press is canceled by movement beyond threshold (cancel)\n *\n * This gesture is commonly used for contextual menus, revealing additional options, or alternate actions.\n */\n\nimport { PointerGesture } from \"../PointerGesture.js\";\nimport { calculateCentroid, createEventName } from \"../utils/index.js\";\n\n/**\n * Configuration options for PressGesture\n * Extends PointerGestureOptions with press-specific options\n */\n\n/**\n * Event data specific to press gesture events\n * Contains information about the press location and duration\n */\n\n/**\n * Type definition for the CustomEvent created by PressGesture\n */\n\n/**\n * State tracking for the PressGesture\n */\n\n/**\n * PressGesture class for handling press/hold interactions\n *\n * This gesture detects when users press and hold on an element for a specified duration,\n * and dispatches press-related events when the user holds long enough.\n *\n * The `start` and `ongoing` events are dispatched at the same time once the press threshold is reached.\n * If the press is canceled (event.g., by moving too far), a `cancel` event is dispatched before the `end` event.\n */\nexport class PressGesture extends PointerGesture {\n state = {\n startCentroid: null,\n lastPosition: null,\n timerId: null,\n startTime: 0,\n pressThresholdReached: false\n };\n\n /**\n * Duration in milliseconds required to hold before the press gesture is recognized\n */\n\n /**\n * Maximum distance a pointer can move for a gesture to still be considered a press\n */\n\n constructor(options) {\n super(options);\n this.duration = options.duration ?? 500;\n this.maxDistance = options.maxDistance ?? 10;\n }\n clone(overrides) {\n return new PressGesture(_extends({\n name: this.name,\n preventDefault: this.preventDefault,\n stopPropagation: this.stopPropagation,\n minPointers: this.minPointers,\n maxPointers: this.maxPointers,\n duration: this.duration,\n maxDistance: this.maxDistance,\n requiredKeys: [...this.requiredKeys],\n pointerMode: [...this.pointerMode],\n preventIf: [...this.preventIf],\n pointerOptions: structuredClone(this.pointerOptions)\n }, overrides));\n }\n destroy() {\n this.clearPressTimer();\n this.resetState();\n super.destroy();\n }\n updateOptions(options) {\n super.updateOptions(options);\n this.duration = options.duration ?? this.duration;\n this.maxDistance = options.maxDistance ?? this.maxDistance;\n }\n resetState() {\n this.clearPressTimer();\n this.isActive = false;\n this.state = _extends({}, this.state, {\n startCentroid: null,\n lastPosition: null,\n timerId: null,\n startTime: 0,\n pressThresholdReached: false\n });\n }\n\n /**\n * Clear the press timer if it's active\n */\n clearPressTimer() {\n if (this.state.timerId !== null) {\n clearTimeout(this.state.timerId);\n this.state.timerId = null;\n }\n }\n\n /**\n * Handle pointer events for the press gesture\n */\n handlePointerEvent = (pointers, event) => {\n const pointersArray = Array.from(pointers.values());\n\n // Check for our forceCancel event to handle interrupted gestures (from contextmenu, blur)\n if (event.type === 'forceCancel') {\n // Reset all active press gestures when we get a force reset event\n this.cancelPress(event.target, pointersArray, event);\n return;\n }\n\n // Find which element (if any) is being targeted\n const targetElement = this.getTargetElement(event);\n if (!targetElement) {\n return;\n }\n\n // Check if this gesture should be prevented by active gestures\n if (this.shouldPreventGesture(targetElement, event.pointerType)) {\n if (this.isActive) {\n // If the gesture was active but now should be prevented, cancel it gracefully\n this.cancelPress(targetElement, pointersArray, event);\n }\n return;\n }\n\n // Filter pointers to only include those targeting our element or its children\n const relevantPointers = this.getRelevantPointers(pointersArray, targetElement);\n if (!this.isWithinPointerCount(relevantPointers, event.pointerType)) {\n if (this.isActive) {\n // Cancel or end the gesture if it was active\n this.cancelPress(targetElement, relevantPointers, event);\n }\n return;\n }\n switch (event.type) {\n case 'pointerdown':\n if (!this.isActive && !this.state.startCentroid) {\n // Calculate and store the starting centroid\n this.state.startCentroid = calculateCentroid(relevantPointers);\n this.state.lastPosition = _extends({}, this.state.startCentroid);\n this.state.startTime = event.timeStamp;\n this.isActive = true;\n\n // Store the original target element\n this.originalTarget = targetElement;\n\n // Start the timer for press recognition\n this.clearPressTimer(); // Clear any existing timer first\n this.state.timerId = setTimeout(() => {\n if (this.isActive && this.state.startCentroid) {\n this.state.pressThresholdReached = true;\n const lastPosition = this.state.lastPosition;\n\n // Emit press start event\n this.emitPressEvent(targetElement, 'start', relevantPointers, event, lastPosition);\n this.emitPressEvent(targetElement, 'ongoing', relevantPointers, event, lastPosition);\n }\n }, this.duration);\n }\n break;\n case 'pointermove':\n if (this.isActive && this.state.startCentroid) {\n // Calculate current position\n const currentPosition = calculateCentroid(relevantPointers);\n this.state.lastPosition = currentPosition;\n\n // Calculate distance from start position\n const deltaX = currentPosition.x - this.state.startCentroid.x;\n const deltaY = currentPosition.y - this.state.startCentroid.y;\n const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n\n // If moved too far, cancel the press gesture\n if (distance > this.maxDistance) {\n this.cancelPress(targetElement, relevantPointers, event);\n }\n }\n break;\n case 'pointerup':\n if (this.isActive) {\n if (this.state.pressThresholdReached) {\n // Complete the press gesture if we've held long enough\n const position = this.state.lastPosition || this.state.startCentroid;\n this.emitPressEvent(targetElement, 'end', relevantPointers, event, position);\n }\n\n // Reset state\n this.resetState();\n }\n break;\n case 'pointercancel':\n case 'forceCancel':\n // Cancel the gesture\n this.cancelPress(targetElement, relevantPointers, event);\n break;\n default:\n break;\n }\n };\n\n /**\n * Emit press-specific events with additional data\n */\n emitPressEvent(element, phase, pointers, event, position) {\n // Get list of active gestures\n const activeGestures = this.gesturesRegistry.getActiveGestures(element);\n\n // Calculate current duration of the press\n const currentDuration = event.timeStamp - this.state.startTime;\n\n // Create custom event data\n const customEventData = {\n gestureName: this.name,\n centroid: position,\n target: event.target,\n srcEvent: event,\n phase,\n pointers,\n timeStamp: event.timeStamp,\n x: position.x,\n y: position.y,\n duration: currentDuration,\n activeGestures,\n customData: this.customData\n };\n\n // Event names to trigger\n const eventName = createEventName(this.name, phase);\n\n // Dispatch custom events on the element\n const domEvent = new CustomEvent(eventName, {\n bubbles: true,\n cancelable: true,\n composed: true,\n detail: customEventData\n });\n element.dispatchEvent(domEvent);\n\n // Apply preventDefault/stopPropagation if configured\n if (this.preventDefault) {\n event.preventDefault();\n }\n if (this.stopPropagation) {\n event.stopPropagation();\n }\n }\n\n /**\n * Cancel the current press gesture\n */\n cancelPress(element, pointers, event) {\n if (this.isActive && this.state.pressThresholdReached) {\n const position = this.state.lastPosition || this.state.startCentroid;\n this.emitPressEvent(element ?? this.element, 'cancel', pointers, event, position);\n this.emitPressEvent(element ?? this.element, 'end', pointers, event, position);\n }\n this.resetState();\n }\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\n/**\n * PressAndDragGesture - Detects press followed by drag gestures using composition\n *\n * This gesture uses internal PressGesture and PanGesture instances to:\n * 1. First, detect a press (hold for specified duration without movement)\n * 2. Then, track drag movements from the press position\n *\n * The gesture fires events when:\n * - A press is completed (press phase)\n * - Drag movement begins and passes threshold (dragStart)\n * - Drag movement continues (drag)\n * - Drag movement ends (dragEnd)\n * - The gesture is canceled at any point\n *\n * This is ideal for panning operations where you want to hold first, then drag.\n */\n\nimport { PointerGesture } from \"../PointerGesture.js\";\nimport { createEventName, preventDefault } from \"../utils/index.js\";\nimport { PanGesture } from \"./PanGesture.js\";\nimport { PressGesture } from \"./PressGesture.js\";\n\n/**\n * Configuration options for PressAndDragGesture\n * Extends PointerGestureOptions with press and drag specific settings\n */\n\n/**\n * Event data specific to press and drag gesture events\n * Contains information about the gesture state, position, and movement\n */\n\n/**\n * Type definition for the CustomEvent created by PressAndDragGesture\n */\n\n/**\n * Represents the current phase of the PressAndDrag gesture\n */\n\n/**\n * State tracking for the PressAndDragGesture\n */\n\n/**\n * PressAndDragGesture class for handling press followed by drag interactions\n *\n * This gesture composes press and drag logic patterns from PressGesture and PanGesture\n * into a single coordinated gesture that handles press-then-drag interactions.\n */\nexport class PressAndDragGesture extends PointerGesture {\n state = {\n phase: 'waitingForPress',\n dragTimeoutId: null\n };\n\n /**\n * Duration required for press recognition\n */\n\n /**\n * Maximum distance a pointer can move during press for it to still be considered a press\n */\n\n /**\n * Maximum time between press completion and drag start\n */\n\n /**\n * Movement threshold for drag activation\n */\n\n /**\n * Allowed directions for the drag gesture\n */\n\n constructor(options) {\n super(options);\n this.pressDuration = options.pressDuration ?? 500;\n this.pressMaxDistance = options.pressMaxDistance ?? 10;\n this.dragTimeout = options.dragTimeout ?? 1000;\n this.dragThreshold = options.dragThreshold ?? 0;\n this.dragDirection = options.dragDirection || ['up', 'down', 'left', 'right'];\n this.pressGesture = new PressGesture({\n name: `${this.name}-press`,\n duration: this.pressDuration,\n maxDistance: this.pressMaxDistance,\n maxPointers: this.maxPointers,\n pointerMode: this.pointerMode,\n requiredKeys: this.requiredKeys,\n preventIf: this.preventIf,\n pointerOptions: structuredClone(this.pointerOptions)\n });\n this.panGesture = new PanGesture({\n name: `${this.name}-pan`,\n minPointers: this.minPointers,\n maxPointers: this.maxPointers,\n threshold: this.dragThreshold,\n direction: this.dragDirection,\n pointerMode: this.pointerMode,\n requiredKeys: this.requiredKeys,\n preventIf: this.preventIf,\n pointerOptions: structuredClone(this.pointerOptions)\n });\n }\n clone(overrides) {\n return new PressAndDragGesture(_extends({\n name: this.name,\n preventDefault: this.preventDefault,\n stopPropagation: this.stopPropagation,\n minPointers: this.minPointers,\n maxPointers: this.maxPointers,\n pressDuration: this.pressDuration,\n pressMaxDistance: this.pressMaxDistance,\n dragTimeout: this.dragTimeout,\n dragThreshold: this.dragThreshold,\n dragDirection: [...this.dragDirection],\n requiredKeys: [...this.requiredKeys],\n pointerMode: [...this.pointerMode],\n preventIf: [...this.preventIf],\n pointerOptions: structuredClone(this.pointerOptions)\n }, overrides));\n }\n init(element, pointerManager, gestureRegistry, keyboardManager) {\n super.init(element, pointerManager, gestureRegistry, keyboardManager);\n this.pressGesture.init(element, pointerManager, gestureRegistry, keyboardManager);\n this.panGesture.init(element, pointerManager, gestureRegistry, keyboardManager);\n\n // Listen to press gesture events\n this.element.addEventListener(this.pressGesture.name, this.pressHandler);\n\n // Listen to pan gesture events for dragging\n // @ts-expect-error, PointerEvent is correct.\n this.element.addEventListener(`${this.panGesture.name}Start`, this.dragStartHandler);\n // @ts-expect-error, PointerEvent is correct.\n this.element.addEventListener(this.panGesture.name, this.dragMoveHandler);\n // @ts-expect-error, PointerEvent is correct.\n this.element.addEventListener(`${this.panGesture.name}End`, this.dragEndHandler);\n // @ts-expect-error, PointerEvent is correct.\n this.element.addEventListener(`${this.panGesture.name}Cancel`, this.dragEndHandler);\n }\n destroy() {\n this.resetState();\n this.pressGesture.destroy();\n this.panGesture.destroy();\n this.element.removeEventListener(this.pressGesture.name, this.pressHandler);\n // @ts-expect-error, PointerEvent is correct.\n this.element.removeEventListener(`${this.panGesture.name}Start`, this.dragStartHandler);\n // @ts-expect-error, PointerEvent is correct.\n this.element.removeEventListener(this.panGesture.name, this.dragMoveHandler);\n // @ts-expect-error, PointerEvent is correct.\n this.element.removeEventListener(`${this.panGesture.name}End`, this.dragEndHandler);\n // @ts-expect-error, PointerEvent is correct.\n this.element.removeEventListener(`${this.panGesture.name}Cancel`, this.dragEndHandler);\n super.destroy();\n }\n updateOptions(options) {\n super.updateOptions(options);\n this.pressDuration = options.pressDuration ?? this.pressDuration;\n this.pressMaxDistance = options.pressMaxDistance ?? this.pressMaxDistance;\n this.dragTimeout = options.dragTimeout ?? this.dragTimeout;\n this.dragThreshold = options.dragThreshold ?? this.dragThreshold;\n this.dragDirection = options.dragDirection || this.dragDirection;\n\n // Update internal gesture options\n this.element.dispatchEvent(new CustomEvent(`${this.panGesture.name}ChangeOptions`, {\n detail: {\n minPointers: this.minPointers,\n maxPointers: this.maxPointers,\n threshold: this.dragThreshold,\n direction: this.dragDirection,\n pointerMode: this.pointerMode,\n requiredKeys: this.requiredKeys,\n preventIf: this.preventIf,\n pointerOptions: structuredClone(this.pointerOptions)\n }\n }));\n this.element.dispatchEvent(new CustomEvent(`${this.pressGesture.name}ChangeOptions`, {\n detail: {\n duration: this.pressDuration,\n maxDistance: this.pressMaxDistance,\n maxPointers: this.maxPointers,\n pointerMode: this.pointerMode,\n requiredKeys: this.requiredKeys,\n preventIf: this.preventIf,\n pointerOptions: structuredClone(this.pointerOptions)\n }\n }));\n }\n resetState() {\n if (this.state.dragTimeoutId !== null) {\n clearTimeout(this.state.dragTimeoutId);\n }\n this.restoreTouchAction();\n this.isActive = false;\n this.state = {\n phase: 'waitingForPress',\n dragTimeoutId: null\n };\n }\n\n /**\n * This can be empty because the PressAndDragGesture relies on PressGesture and PanGesture to handle pointer events\n * The internal gestures will manage their own state and events, while this class coordinates between them\n */\n handlePointerEvent() {}\n pressHandler = () => {\n if (this.state.phase !== 'waitingForPress') {\n return;\n }\n this.state.phase = 'pressDetected';\n this.setTouchAction();\n\n // Start timeout to wait for drag start\n this.state.dragTimeoutId = setTimeout(() => {\n // Timeout expired, reset gesture\n this.resetState();\n }, this.dragTimeout);\n };\n dragStartHandler = event => {\n if (this.state.phase !== 'pressDetected') {\n return;\n }\n\n // Clear the drag timeout as drag has started\n if (this.state.dragTimeoutId !== null) {\n clearTimeout(this.state.dragTimeoutId);\n this.state.dragTimeoutId = null;\n }\n\n // Restore touch action since we're now dragging\n this.restoreTouchAction();\n this.state.phase = 'dragging';\n this.isActive = true;\n\n // Fire start event\n this.element.dispatchEvent(new CustomEvent(createEventName(this.name, event.detail.phase), event));\n };\n dragMoveHandler = event => {\n if (this.state.phase !== 'dragging') {\n return;\n }\n\n // Fire move event\n this.element.dispatchEvent(new CustomEvent(createEventName(this.name, event.detail.phase), event));\n };\n dragEndHandler = event => {\n if (this.state.phase !== 'dragging') {\n return;\n }\n this.resetState();\n\n // Fire end event\n this.element.dispatchEvent(new CustomEvent(createEventName(this.name, event.detail.phase), event));\n };\n setTouchAction() {\n this.element.addEventListener('touchstart', preventDefault, {\n passive: false\n });\n this.element.addEventListener('touchmove', preventDefault, {\n passive: false\n });\n this.element.addEventListener('touchend', preventDefault, {\n passive: false\n });\n }\n restoreTouchAction() {\n this.element.removeEventListener('touchstart', preventDefault);\n this.element.removeEventListener('touchmove', preventDefault);\n this.element.removeEventListener('touchend', preventDefault);\n }\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\n/**\n * TapGesture - Detects tap (quick touch without movement) gestures\n *\n * This gesture tracks simple tap interactions on elements, firing a single event when:\n * - A complete tap is detected (pointerup after brief touch without excessive movement)\n * - The tap is canceled (event.g., moved too far or held too long)\n */\n\nimport { PointerGesture } from \"../PointerGesture.js\";\nimport { calculateCentroid, createEventName } from \"../utils/index.js\";\n\n/**\n * Configuration options for TapGesture\n * Extends PointerGestureOptions with tap-specific settings\n */\n\n/**\n * Event data specific to tap gesture events\n * Contains information about the tap location and counts\n */\n\n/**\n * Type definition for the CustomEvent created by TapGesture\n */\n\n/**\n * State tracking for the TapGesture\n */\n\n/**\n * TapGesture class for handling tap interactions\n *\n * This gesture detects when users tap on elements without significant movement,\n * and can recognize single taps, double taps, or other multi-tap sequences.\n */\nexport class TapGesture extends PointerGesture {\n state = {\n startCentroid: null,\n currentTapCount: 0,\n lastTapTime: 0,\n lastPosition: null\n };\n\n /**\n * Maximum distance a pointer can move for a gesture to still be considered a tap\n */\n\n /**\n * Number of consecutive taps to detect\n */\n\n constructor(options) {\n super(options);\n this.maxDistance = options.maxDistance ?? 10;\n this.taps = options.taps ?? 1;\n }\n clone(overrides) {\n return new TapGesture(_extends({\n name: this.name,\n preventDefault: this.preventDefault,\n stopPropagation: this.stopPropagation,\n minPointers: this.minPointers,\n maxPointers: this.maxPointers,\n maxDistance: this.maxDistance,\n taps: this.taps,\n requiredKeys: [...this.requiredKeys],\n pointerMode: [...this.pointerMode],\n preventIf: [...this.preventIf],\n pointerOptions: structuredClone(this.pointerOptions)\n }, overrides));\n }\n destroy() {\n this.resetState();\n super.destroy();\n }\n updateOptions(options) {\n super.updateOptions(options);\n this.maxDistance = options.maxDistance ?? this.maxDistance;\n this.taps = options.taps ?? this.taps;\n }\n resetState() {\n this.isActive = false;\n this.state = {\n startCentroid: null,\n currentTapCount: 0,\n lastTapTime: 0,\n lastPosition: null\n };\n }\n\n /**\n * Handle pointer events for the tap gesture\n */\n handlePointerEvent = (pointers, event) => {\n const pointersArray = Array.from(pointers.values());\n\n // Find which element (if any) is being targeted\n const targetElement = this.getTargetElement(event);\n if (!targetElement) {\n return;\n }\n\n // Filter pointers to only include those targeting our element or its children\n const relevantPointers = this.getRelevantPointers(pointersArray, targetElement);\n if (this.shouldPreventGesture(targetElement, event.pointerType) || !this.isWithinPointerCount(relevantPointers, event.pointerType)) {\n if (this.isActive) {\n // Cancel the gesture if it was active\n this.cancelTap(targetElement, relevantPointers, event);\n }\n return;\n }\n switch (event.type) {\n case 'pointerdown':\n if (!this.isActive) {\n // Calculate and store the starting centroid\n this.state.startCentroid = calculateCentroid(relevantPointers);\n this.state.lastPosition = _extends({}, this.state.startCentroid);\n this.isActive = true;\n\n // Store the original target element\n this.originalTarget = targetElement;\n }\n break;\n case 'pointermove':\n if (this.isActive && this.state.startCentroid) {\n // Calculate current position\n const currentPosition = calculateCentroid(relevantPointers);\n this.state.lastPosition = currentPosition;\n\n // Calculate distance from start position\n const deltaX = currentPosition.x - this.state.startCentroid.x;\n const deltaY = currentPosition.y - this.state.startCentroid.y;\n const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n\n // If moved too far, cancel the tap gesture\n if (distance > this.maxDistance) {\n this.cancelTap(targetElement, relevantPointers, event);\n }\n }\n break;\n case 'pointerup':\n if (this.isActive) {\n // For valid tap: increment tap count\n this.state.currentTapCount += 1;\n\n // Make sure we have a valid position before firing the tap event\n const position = this.state.lastPosition || this.state.startCentroid;\n if (!position) {\n this.cancelTap(targetElement, relevantPointers, event);\n return;\n }\n\n // Check if we've reached the desired number of taps\n if (this.state.currentTapCount >= this.taps) {\n // The complete tap sequence has been detected - fire the tap event\n this.fireTapEvent(targetElement, relevantPointers, event, position);\n\n // Reset state after successful tap\n this.resetState();\n } else {\n // Store the time of this tap for multi-tap detection\n this.state.lastTapTime = event.timeStamp;\n\n // Reset active state but keep the tap count for multi-tap detection\n this.isActive = false;\n\n // For multi-tap detection: keep track of the last tap position\n // but clear the start centroid to prepare for next tap\n this.state.startCentroid = null;\n\n // Start a timeout to reset the tap count if the next tap doesn't come soon enough\n setTimeout(() => {\n if (this.state && this.state.currentTapCount > 0 && this.state.currentTapCount < this.taps) {\n this.state.currentTapCount = 0;\n }\n }, 300); // 300ms is a typical double-tap detection window\n }\n }\n break;\n case 'pointercancel':\n case 'forceCancel':\n // Cancel the gesture\n this.cancelTap(targetElement, relevantPointers, event);\n break;\n default:\n break;\n }\n };\n\n /**\n * Fire the main tap event when a valid tap is detected\n */\n fireTapEvent(element, pointers, event, position) {\n // Get list of active gestures\n const activeGestures = this.gesturesRegistry.getActiveGestures(element);\n\n // Create custom event data for the tap event\n const customEventData = {\n gestureName: this.name,\n centroid: position,\n target: event.target,\n srcEvent: event,\n phase: 'end',\n // The tap is complete, so we use 'end' state for the event data\n pointers,\n timeStamp: event.timeStamp,\n x: position.x,\n y: position.y,\n tapCount: this.state.currentTapCount,\n activeGestures,\n customData: this.customData\n };\n\n // Dispatch a single 'tap' event (not 'tapStart', 'tapEnd', etc.)\n const domEvent = new CustomEvent(this.name, {\n bubbles: true,\n cancelable: true,\n composed: true,\n detail: customEventData\n });\n element.dispatchEvent(domEvent);\n\n // Apply preventDefault/stopPropagation if configured\n if (this.preventDefault) {\n event.preventDefault();\n }\n if (this.stopPropagation) {\n event.stopPropagation();\n }\n }\n\n /**\n * Cancel the current tap gesture\n */\n cancelTap(element, pointers, event) {\n if (this.state.startCentroid || this.state.lastPosition) {\n const position = this.state.lastPosition || this.state.startCentroid;\n\n // Get list of active gestures\n const activeGestures = this.gesturesRegistry.getActiveGestures(element);\n\n // Create custom event data for the cancel event\n const customEventData = {\n gestureName: this.name,\n centroid: position,\n target: event.target,\n srcEvent: event,\n phase: 'cancel',\n pointers,\n timeStamp: event.timeStamp,\n x: position.x,\n y: position.y,\n tapCount: this.state.currentTapCount,\n activeGestures,\n customData: this.customData\n };\n\n // Dispatch a 'tapCancel' event\n const eventName = createEventName(this.name, 'cancel');\n const domEvent = new CustomEvent(eventName, {\n bubbles: true,\n cancelable: true,\n composed: true,\n detail: customEventData\n });\n element.dispatchEvent(domEvent);\n }\n this.resetState();\n }\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\n/**\n * TapAndDragGesture - Detects tap followed by drag gestures using composition\n *\n * This gesture uses internal TapGesture and PanGesture instances to:\n * 1. First, detect a tap (quick touch without movement)\n * 2. Then, track drag movements on the next pointer down\n *\n * The gesture fires events when:\n * - A tap is completed (tap phase)\n * - Drag movement begins and passes threshold (dragStart)\n * - Drag movement continues (drag)\n * - Drag movement ends (dragEnd)\n * - The gesture is canceled at any point\n */\n\nimport { PointerGesture } from \"../PointerGesture.js\";\nimport { createEventName, preventDefault } from \"../utils/index.js\";\nimport { PanGesture } from \"./PanGesture.js\";\nimport { TapGesture } from \"./TapGesture.js\";\n\n/**\n * Configuration options for TapAndDragGesture\n * Extends PointerGestureOptions with tap and drag specific settings\n */\n\n/**\n * Event data specific to tap and drag gesture events\n * Contains information about the gesture state, position, and movement\n */\n\n/**\n * Type definition for the CustomEvent created by TapAndDragGesture\n */\n\n/**\n * Represents the current phase of the TapAndDrag gesture\n */\n\n/**\n * State tracking for the TapAndDragGesture\n */\n\n/**\n * TapAndDragGesture class for handling tap followed by drag interactions\n *\n * This gesture composes tap and drag logic patterns from TapGesture and PanGesture\n * into a single coordinated gesture that handles tap-then-drag interactions.\n */\nexport class TapAndDragGesture extends PointerGesture {\n state = {\n phase: 'waitingForTap',\n dragTimeoutId: null\n };\n\n /**\n * Maximum distance a pointer can move during tap for it to still be considered a tap\n * (Following TapGesture pattern)\n */\n\n /**\n * Maximum time between tap completion and drag start\n */\n\n /**\n * Movement threshold for drag activation\n */\n\n /**\n * Allowed directions for the drag gesture\n */\n\n constructor(options) {\n super(options);\n this.tapMaxDistance = options.tapMaxDistance ?? 10;\n this.dragTimeout = options.dragTimeout ?? 1000;\n this.dragThreshold = options.dragThreshold ?? 0;\n this.dragDirection = options.dragDirection || ['up', 'down', 'left', 'right'];\n this.tapGesture = new TapGesture({\n name: `${this.name}-tap`,\n maxDistance: this.tapMaxDistance,\n maxPointers: this.maxPointers,\n pointerMode: this.pointerMode,\n requiredKeys: this.requiredKeys,\n preventIf: this.preventIf,\n pointerOptions: structuredClone(this.pointerOptions)\n });\n this.panGesture = new PanGesture({\n name: `${this.name}-pan`,\n minPointers: this.minPointers,\n maxPointers: this.maxPointers,\n threshold: this.dragThreshold,\n direction: this.dragDirection,\n pointerMode: this.pointerMode,\n requiredKeys: this.requiredKeys,\n preventIf: this.preventIf,\n pointerOptions: structuredClone(this.pointerOptions)\n });\n }\n clone(overrides) {\n return new TapAndDragGesture(_extends({\n name: this.name,\n preventDefault: this.preventDefault,\n stopPropagation: this.stopPropagation,\n minPointers: this.minPointers,\n maxPointers: this.maxPointers,\n tapMaxDistance: this.tapMaxDistance,\n dragTimeout: this.dragTimeout,\n dragThreshold: this.dragThreshold,\n dragDirection: [...this.dragDirection],\n requiredKeys: [...this.requiredKeys],\n pointerMode: [...this.pointerMode],\n preventIf: [...this.preventIf],\n pointerOptions: structuredClone(this.pointerOptions)\n }, overrides));\n }\n init(element, pointerManager, gestureRegistry, keyboardManager) {\n super.init(element, pointerManager, gestureRegistry, keyboardManager);\n this.tapGesture.init(element, pointerManager, gestureRegistry, keyboardManager);\n this.panGesture.init(element, pointerManager, gestureRegistry, keyboardManager);\n this.element.addEventListener(this.tapGesture.name, this.tapHandler);\n // @ts-expect-error, PointerEvent is correct.\n this.element.addEventListener(`${this.panGesture.name}Start`, this.dragStartHandler);\n // @ts-expect-error, PointerEvent is correct.\n this.element.addEventListener(this.panGesture.name, this.dragMoveHandler);\n // @ts-expect-error, PointerEvent is correct.\n this.element.addEventListener(`${this.panGesture.name}End`, this.dragEndHandler);\n // @ts-expect-error, PointerEvent is correct.\n this.element.addEventListener(`${this.panGesture.name}Cancel`, this.dragEndHandler);\n }\n destroy() {\n this.resetState();\n this.tapGesture.destroy();\n this.panGesture.destroy();\n this.element.removeEventListener(this.tapGesture.name, this.tapHandler);\n // @ts-expect-error, PointerEvent is correct.\n this.element.removeEventListener(`${this.panGesture.name}Start`, this.dragStartHandler);\n // @ts-expect-error, PointerEvent is correct.\n this.element.removeEventListener(this.panGesture.name, this.dragMoveHandler);\n // @ts-expect-error, PointerEvent is correct.\n this.element.removeEventListener(`${this.panGesture.name}End`, this.dragEndHandler);\n // @ts-expect-error, PointerEvent is correct.\n this.element.removeEventListener(`${this.panGesture.name}Cancel`, this.dragEndHandler);\n super.destroy();\n }\n updateOptions(options) {\n super.updateOptions(options);\n this.tapMaxDistance = options.tapMaxDistance ?? this.tapMaxDistance;\n this.dragTimeout = options.dragTimeout ?? this.dragTimeout;\n this.dragThreshold = options.dragThreshold ?? this.dragThreshold;\n this.dragDirection = options.dragDirection || this.dragDirection;\n this.element.dispatchEvent(new CustomEvent(`${this.panGesture.name}ChangeOptions`, {\n detail: {\n minPointers: this.minPointers,\n maxPointers: this.maxPointers,\n threshold: this.dragThreshold,\n direction: this.dragDirection,\n pointerMode: this.pointerMode,\n requiredKeys: this.requiredKeys,\n preventIf: this.preventIf,\n pointerOptions: structuredClone(this.pointerOptions)\n }\n }));\n this.element.dispatchEvent(new CustomEvent(`${this.tapGesture.name}ChangeOptions`, {\n detail: {\n maxDistance: this.tapMaxDistance,\n maxPointers: this.maxPointers,\n pointerMode: this.pointerMode,\n requiredKeys: this.requiredKeys,\n preventIf: this.preventIf,\n pointerOptions: structuredClone(this.pointerOptions)\n }\n }));\n }\n resetState() {\n if (this.state.dragTimeoutId !== null) {\n clearTimeout(this.state.dragTimeoutId);\n }\n this.restoreTouchAction();\n this.isActive = false;\n this.state = {\n phase: 'waitingForTap',\n dragTimeoutId: null\n };\n }\n\n /**\n * This can be empty because the TapAndDragGesture relies on TapGesture and PanGesture to handle pointer events\n * The internal gestures will manage their own state and events, while this class coordinates between them\n */\n handlePointerEvent() {}\n tapHandler = () => {\n if (this.state.phase !== 'waitingForTap') {\n return;\n }\n this.state.phase = 'tapDetected';\n this.setTouchAction();\n\n // Start timeout to wait for drag start\n this.state.dragTimeoutId = setTimeout(() => {\n // Timeout expired, reset gesture\n this.resetState();\n }, this.dragTimeout);\n };\n dragStartHandler = event => {\n if (this.state.phase !== 'tapDetected') {\n return;\n }\n\n // Clear the drag timeout as drag has started\n if (this.state.dragTimeoutId !== null) {\n clearTimeout(this.state.dragTimeoutId);\n this.state.dragTimeoutId = null;\n }\n this.restoreTouchAction();\n this.state.phase = 'dragging';\n this.isActive = true;\n\n // Fire start event\n this.element.dispatchEvent(new CustomEvent(createEventName(this.name, event.detail.phase), event));\n };\n dragMoveHandler = event => {\n if (this.state.phase !== 'dragging') {\n return;\n }\n\n // Fire move event\n this.element.dispatchEvent(new CustomEvent(createEventName(this.name, event.detail.phase), event));\n };\n dragEndHandler = event => {\n if (this.state.phase !== 'dragging') {\n return;\n }\n this.resetState();\n\n // Fire end event\n this.element.dispatchEvent(new CustomEvent(createEventName(this.name, event.detail.phase), event));\n };\n setTouchAction() {\n this.element.addEventListener('touchstart', preventDefault, {\n passive: false\n });\n }\n restoreTouchAction() {\n this.element.removeEventListener('touchstart', preventDefault);\n }\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\n/**\n * TurnWheelGesture - Detects wheel events on an element\n *\n * This gesture tracks mouse wheel or touchpad scroll events on elements, firing events when:\n * - The user scrolls/wheels on the element (ongoing)\n *\n * Unlike other gestures which may have start/ongoing/end states,\n * wheel gestures are always considered \"ongoing\" since they are discrete events.\n */\n\nimport { Gesture } from \"../Gesture.js\";\nimport { calculateCentroid, createEventName } from \"../utils/index.js\";\n\n/**\n * Configuration options for the TurnWheelGesture\n * Uses the base gesture options with additional wheel-specific options\n */\n\n/**\n * Event data specific to wheel gesture events\n * Contains information about scroll delta amounts and mode\n */\n\n/**\n * Type definition for the CustomEvent created by TurnWheelGesture\n */\n\n/**\n * State tracking for the TurnWheelGesture\n */\n\n/**\n * TurnWheelGesture class for handling wheel/scroll interactions\n *\n * This gesture detects when users scroll or use the mouse wheel on elements,\n * and dispatches corresponding scroll events with delta information.\n * Unlike most gestures, it extends directly from Gesture rather than PointerGesture.\n */\nexport class TurnWheelGesture extends Gesture {\n state = {\n totalDeltaX: 0,\n totalDeltaY: 0,\n totalDeltaZ: 0\n };\n\n /**\n * Scaling factor for delta values\n * Values > 1 increase sensitivity, values < 1 decrease sensitivity\n */\n\n /**\n * Maximum value for totalDelta values\n * Limits how large the accumulated wheel deltas can be\n */\n\n /**\n * Minimum value for totalDelta values\n * Sets a lower bound for accumulated wheel deltas\n */\n\n /**\n * Initial value for totalDelta values\n * Sets the starting value for delta trackers\n */\n\n /**\n * Whether to invert the direction of delta changes\n * When true, reverses the sign of deltaX, deltaY, and deltaZ values\n */\n\n constructor(options) {\n super(options);\n this.sensitivity = options.sensitivity ?? 1;\n this.max = options.max ?? Number.MAX_SAFE_INTEGER;\n this.min = options.min ?? Number.MIN_SAFE_INTEGER;\n this.initialDelta = options.initialDelta ?? 0;\n this.invert = options.invert ?? false;\n this.state.totalDeltaX = this.initialDelta;\n this.state.totalDeltaY = this.initialDelta;\n this.state.totalDeltaZ = this.initialDelta;\n }\n clone(overrides) {\n return new TurnWheelGesture(_extends({\n name: this.name,\n preventDefault: this.preventDefault,\n stopPropagation: this.stopPropagation,\n sensitivity: this.sensitivity,\n max: this.max,\n min: this.min,\n initialDelta: this.initialDelta,\n invert: this.invert,\n requiredKeys: [...this.requiredKeys],\n preventIf: [...this.preventIf]\n }, overrides));\n }\n init(element, pointerManager, gestureRegistry, keyboardManager) {\n super.init(element, pointerManager, gestureRegistry, keyboardManager);\n\n // Add event listener directly to the element\n // @ts-expect-error, WheelEvent is correct.\n this.element.addEventListener('wheel', this.handleWheelEvent);\n }\n destroy() {\n // Remove the element-specific event listener\n // @ts-expect-error, WheelEvent is correct.\n this.element.removeEventListener('wheel', this.handleWheelEvent);\n this.resetState();\n super.destroy();\n }\n resetState() {\n this.isActive = false;\n this.state = {\n totalDeltaX: 0,\n totalDeltaY: 0,\n totalDeltaZ: 0\n };\n }\n updateOptions(options) {\n super.updateOptions(options);\n this.sensitivity = options.sensitivity ?? this.sensitivity;\n this.max = options.max ?? this.max;\n this.min = options.min ?? this.min;\n this.initialDelta = options.initialDelta ?? this.initialDelta;\n this.invert = options.invert ?? this.invert;\n }\n\n /**\n * Handle wheel events for a specific element\n * @param element The element that received the wheel event\n * @param event The original wheel event\n */\n handleWheelEvent = event => {\n // Check if this gesture should be prevented by active gestures\n if (this.shouldPreventGesture(this.element, 'mouse')) {\n return;\n }\n\n // Get pointers from the PointerManager to use for centroid calculation\n const pointers = this.pointerManager.getPointers() || new Map();\n const pointersArray = Array.from(pointers.values());\n\n // Update total deltas with scaled values\n this.state.totalDeltaX += event.deltaX * this.sensitivity * (this.invert ? -1 : 1);\n this.state.totalDeltaY += event.deltaY * this.sensitivity * (this.invert ? -1 : 1);\n this.state.totalDeltaZ += event.deltaZ * this.sensitivity * (this.invert ? -1 : 1);\n\n // Apply proper min/max clamping for each axis\n // Ensure values stay between min and max bounds\n ['totalDeltaX', 'totalDeltaY', 'totalDeltaZ'].forEach(axis => {\n // First clamp at the minimum bound\n if (this.state[axis] < this.min) {\n this.state[axis] = this.min;\n }\n\n // Then clamp at the maximum bound\n if (this.state[axis] > this.max) {\n this.state[axis] = this.max;\n }\n });\n\n // Emit the wheel event\n this.emitWheelEvent(pointersArray, event);\n };\n\n /**\n * Emit wheel-specific events\n * @param pointers The current pointers on the element\n * @param event The original wheel event\n */\n emitWheelEvent(pointers, event) {\n // Calculate centroid - either from existing pointers or from the wheel event position\n const centroid = pointers.length > 0 ? calculateCentroid(pointers) : {\n x: event.clientX,\n y: event.clientY\n };\n\n // Get list of active gestures\n const activeGestures = this.gesturesRegistry.getActiveGestures(this.element);\n\n // Create custom event data\n const customEventData = {\n gestureName: this.name,\n centroid,\n target: event.target,\n srcEvent: event,\n phase: 'ongoing',\n // Wheel events are always in \"ongoing\" state\n pointers,\n timeStamp: event.timeStamp,\n deltaX: event.deltaX * this.sensitivity * (this.invert ? -1 : 1),\n deltaY: event.deltaY * this.sensitivity * (this.invert ? -1 : 1),\n deltaZ: event.deltaZ * this.sensitivity * (this.invert ? -1 : 1),\n deltaMode: event.deltaMode,\n totalDeltaX: this.state.totalDeltaX,\n totalDeltaY: this.state.totalDeltaY,\n totalDeltaZ: this.state.totalDeltaZ,\n activeGestures,\n customData: this.customData\n };\n\n // Apply default event behavior if configured\n if (this.preventDefault) {\n event.preventDefault();\n }\n if (this.stopPropagation) {\n event.stopPropagation();\n }\n\n // Event names to trigger\n const eventName = createEventName(this.name, 'ongoing');\n\n // Dispatch custom events on the element\n const domEvent = new CustomEvent(eventName, {\n bubbles: true,\n cancelable: true,\n composed: true,\n detail: customEventData\n });\n this.element.dispatchEvent(domEvent);\n }\n}","'use client';\n\nimport * as React from 'react';\nimport { GestureManager, MoveGesture, PanGesture, PinchGesture, PressAndDragGesture, PressGesture, TapAndDragGesture, TapGesture, TurnWheelGesture } from '@mui/x-internal-gestures/core';\nconst preventDefault = event => event.preventDefault();\nexport const useChartInteractionListener = ({\n svgRef\n}) => {\n const gestureManagerRef = React.useRef(null);\n React.useEffect(() => {\n const svg = svgRef.current;\n if (!gestureManagerRef.current) {\n gestureManagerRef.current = new GestureManager({\n gestures: [\n // We separate the zoom gestures from the gestures that are not zoom related\n // This allows us to configure the zoom gestures based on the zoom configuration.\n new PanGesture({\n name: 'pan',\n threshold: 0,\n maxPointers: 1\n }), new MoveGesture({\n name: 'move',\n preventIf: ['pan', 'zoomPinch', 'zoomPan']\n }), new TapGesture({\n name: 'tap',\n preventIf: ['pan', 'zoomPinch', 'zoomPan']\n }), new PressGesture({\n name: 'quickPress',\n duration: 50\n }), new PanGesture({\n name: 'brush',\n threshold: 0,\n maxPointers: 1\n }),\n // Zoom gestures\n new PanGesture({\n name: 'zoomPan',\n threshold: 0,\n preventIf: ['zoomTapAndDrag', 'zoomPressAndDrag']\n }), new PinchGesture({\n name: 'zoomPinch',\n threshold: 5\n }), new TurnWheelGesture({\n name: 'zoomTurnWheel',\n sensitivity: 0.01,\n initialDelta: 1\n }), new TurnWheelGesture({\n name: 'panTurnWheel',\n sensitivity: 0.5\n }), new TapAndDragGesture({\n name: 'zoomTapAndDrag',\n dragThreshold: 10\n }), new PressAndDragGesture({\n name: 'zoomPressAndDrag',\n dragThreshold: 10,\n preventIf: ['zoomPinch']\n }), new TapGesture({\n name: 'zoomDoubleTapReset',\n taps: 2\n })]\n });\n }\n\n // Assign gesture manager after initialization\n const gestureManager = gestureManagerRef.current;\n if (!svg || !gestureManager) {\n return undefined;\n }\n gestureManager.registerElement(['pan', 'move', 'zoomPinch', 'zoomPan', 'zoomTurnWheel', 'panTurnWheel', 'tap', 'quickPress', 'zoomTapAndDrag', 'zoomPressAndDrag', 'zoomDoubleTapReset', 'brush'], svg);\n return () => {\n // Cleanup gesture manager\n gestureManager.unregisterAllGestures(svg);\n };\n }, [svgRef, gestureManagerRef]);\n const addInteractionListener = React.useCallback((interaction, callback, options) => {\n // Forcefully cast the svgRef to any, it is annoying to fix the types.\n const svg = svgRef.current;\n svg?.addEventListener(interaction, callback, options);\n return {\n cleanup: () => svg?.removeEventListener(interaction, callback)\n };\n }, [svgRef]);\n const updateZoomInteractionListeners = React.useCallback((interaction, options) => {\n const svg = svgRef.current;\n const gestureManager = gestureManagerRef.current;\n if (!gestureManager || !svg) {\n return;\n }\n gestureManager.setGestureOptions(interaction, svg, options ?? {});\n }, [svgRef, gestureManagerRef]);\n React.useEffect(() => {\n const svg = svgRef.current;\n\n // Disable gesture on safari\n // https://use-gesture.netlify.app/docs/gestures/#about-the-pinch-gesture\n svg?.addEventListener('gesturestart', preventDefault);\n svg?.addEventListener('gesturechange', preventDefault);\n svg?.addEventListener('gestureend', preventDefault);\n return () => {\n svg?.removeEventListener('gesturestart', preventDefault);\n svg?.removeEventListener('gesturechange', preventDefault);\n svg?.removeEventListener('gestureend', preventDefault);\n };\n }, [svgRef]);\n return {\n instance: {\n addInteractionListener,\n updateZoomInteractionListeners\n }\n };\n};\nuseChartInteractionListener.params = {};\nuseChartInteractionListener.getInitialState = () => {\n return {};\n};","import { useChartAnimation } from \"./useChartAnimation/index.js\";\nimport { useChartDimensions } from \"./useChartDimensions/index.js\";\nimport { useChartExperimentalFeatures } from \"./useChartExperimentalFeature/index.js\";\nimport { useChartId } from \"./useChartId/index.js\";\nimport { useChartSeries } from \"./useChartSeries/index.js\";\nimport { useChartInteractionListener } from \"./useChartInteractionListener/index.js\";\n\n/**\n * Internal plugins that create the tools used by the other plugins.\n * These plugins are used by the Charts components.\n */\nexport const CHART_CORE_PLUGINS = [useChartId, useChartExperimentalFeatures, useChartDimensions, useChartSeries, useChartInteractionListener, useChartAnimation];","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"apiRef\"];\nexport const extractPluginParamsFromProps = _ref => {\n let {\n plugins\n } = _ref,\n props = _objectWithoutPropertiesLoose(_ref.props, _excluded);\n const paramsLookup = {};\n plugins.forEach(plugin => {\n Object.assign(paramsLookup, plugin.params);\n });\n const pluginParams = {};\n Object.keys(props).forEach(propName => {\n const prop = props[propName];\n if (paramsLookup[propName]) {\n pluginParams[propName] = prop;\n }\n });\n const defaultizedPluginParams = plugins.reduce((acc, plugin) => {\n if (plugin.getDefaultizedParams) {\n return plugin.getDefaultizedParams({\n params: acc\n });\n }\n return acc;\n }, pluginParams);\n return defaultizedPluginParams;\n};","import * as React from 'react';\nimport useId from '@mui/utils/useId';\nimport { Store } from '@mui/x-internals/store';\nimport { CHART_CORE_PLUGINS } from \"../plugins/corePlugins/index.js\";\nimport { extractPluginParamsFromProps } from \"./extractPluginParamsFromProps.js\";\nlet globalId = 0;\n\n/**\n * This is the main hook that setups the plugin system for the chart.\n *\n * It manages the data used to create the charts.\n *\n * @param inPlugins All the plugins that will be used in the chart.\n * @param props The props passed to the chart.\n * @param seriesConfig The set of helpers used for series-specific computation.\n */\nexport function useCharts(inPlugins, props, seriesConfig) {\n const chartId = useId();\n const plugins = React.useMemo(() => [...CHART_CORE_PLUGINS, ...inPlugins], [inPlugins]);\n const pluginParams = extractPluginParamsFromProps({\n plugins,\n props\n });\n pluginParams.id = pluginParams.id ?? chartId;\n const instanceRef = React.useRef({});\n const instance = instanceRef.current;\n const publicAPI = useChartApiInitialization(props.apiRef);\n const innerChartRootRef = React.useRef(null);\n const innerSvgRef = React.useRef(null);\n const storeRef = React.useRef(null);\n if (storeRef.current == null) {\n // eslint-disable-next-line react-compiler/react-compiler\n globalId += 1;\n const initialState = {\n cacheKey: {\n id: globalId\n }\n };\n plugins.forEach(plugin => {\n if (plugin.getInitialState) {\n Object.assign(initialState, plugin.getInitialState(pluginParams, initialState, seriesConfig));\n }\n });\n storeRef.current = new Store(initialState);\n }\n const runPlugin = plugin => {\n const pluginResponse = plugin({\n instance,\n params: pluginParams,\n plugins: plugins,\n store: storeRef.current,\n svgRef: innerSvgRef,\n chartRootRef: innerChartRootRef,\n seriesConfig\n });\n if (pluginResponse.publicAPI) {\n Object.assign(publicAPI.current, pluginResponse.publicAPI);\n }\n if (pluginResponse.instance) {\n Object.assign(instance, pluginResponse.instance);\n }\n };\n plugins.forEach(runPlugin);\n const contextValue = React.useMemo(() => ({\n store: storeRef.current,\n publicAPI: publicAPI.current,\n instance,\n svgRef: innerSvgRef,\n chartRootRef: innerChartRootRef\n }), [instance, publicAPI]);\n return {\n contextValue\n };\n}\nfunction initializeInputApiRef(inputApiRef) {\n if (inputApiRef.current == null) {\n inputApiRef.current = {};\n }\n return inputApiRef;\n}\nexport function useChartApiInitialization(inputApiRef) {\n const fallbackPublicApiRef = React.useRef({});\n if (inputApiRef) {\n return initializeInputApiRef(inputApiRef);\n }\n return fallbackPublicApiRef;\n}","'use client';\n\nimport * as React from 'react';\n/**\n * @ignore - internal component.\n */\nexport const ChartContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") ChartContext.displayName = \"ChartContext\";","const warnedOnceCache = new Set();\n\n/**\n * Logs a message to the console on development mode. The warning will only be logged once.\n *\n * The message is the log's cache key. Two identical messages will only be logged once.\n *\n * This function is a no-op in production.\n *\n * @param message the message to log\n * @param gravity the gravity of the warning. Defaults to `'warning'`.\n * @returns\n */\nexport function warnOnce(message, gravity = 'warning') {\n if (process.env.NODE_ENV === 'production') {\n return;\n }\n const cleanMessage = Array.isArray(message) ? message.join('\\n') : message;\n if (!warnedOnceCache.has(cleanMessage)) {\n warnedOnceCache.add(cleanMessage);\n if (gravity === 'error') {\n console.error(cleanMessage);\n } else {\n console.warn(cleanMessage);\n }\n }\n}\nexport function clearWarningsCache() {\n warnedOnceCache.clear();\n}","'use client';\n\nimport * as React from 'react';\nimport { warnOnce } from \"../warning/index.js\";\n\n/**\n * Make sure a controlled prop is used correctly.\n * Logs errors if the prop either:\n *\n * - switch between controlled and uncontrolled\n * - modify it's default value\n * @param parameters\n */\nfunction useAssertModelConsistencyOutsideOfProduction(parameters) {\n const {\n componentName,\n propName,\n controlled,\n defaultValue,\n warningPrefix = 'MUI X'\n } = parameters;\n const [{\n initialDefaultValue,\n isControlled\n }] = React.useState({\n initialDefaultValue: defaultValue,\n isControlled: controlled !== undefined\n });\n if (isControlled !== (controlled !== undefined)) {\n warnOnce([`${warningPrefix}: A component is changing the ${isControlled ? '' : 'un'}controlled ${propName} state of ${componentName} to be ${isControlled ? 'un' : ''}controlled.`, 'Elements should not switch from uncontrolled to controlled (or vice versa).', `Decide between using a controlled or uncontrolled ${propName} ` + 'element for the lifetime of the component.', \"The nature of the state is determined during the first render. It's considered controlled if the value is not `undefined`.\", 'More info: https://fb.me/react-controlled-components'], 'error');\n }\n if (JSON.stringify(initialDefaultValue) !== JSON.stringify(defaultValue)) {\n warnOnce([`${warningPrefix}: A component is changing the default ${propName} state of an uncontrolled ${componentName} after being initialized. ` + `To suppress this warning opt to use a controlled ${componentName}.`], 'error');\n }\n}\nexport const useAssertModelConsistency = process.env.NODE_ENV === 'production' ? () => {} : useAssertModelConsistencyOutsideOfProduction;","/** Margin in the opposite direction of the axis, i.e., horizontal if the axis is vertical and vice versa. */\nexport const ZOOM_SLIDER_MARGIN = 4;\n\n/** Size of the zoom slider preview. */\nexport const ZOOM_SLIDER_PREVIEW_SIZE = 40;\n\n/** Size reserved for the zoom slider. The actual size of the slider might be smaller. */\nexport const DEFAULT_ZOOM_SLIDER_SIZE = 20 + 2 * ZOOM_SLIDER_MARGIN;\nexport const DEFAULT_ZOOM_SLIDER_PREVIEW_SIZE = 40 + 2 * ZOOM_SLIDER_MARGIN;\nexport const DEFAULT_ZOOM_SLIDER_SHOW_TOOLTIP = 'hover';\n\n/** Default margin for pie charts. */\nexport const DEFAULT_PIE_CHART_MARGIN = {\n top: 5,\n bottom: 5,\n left: 5,\n right: 5\n};","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport { DEFAULT_ZOOM_SLIDER_PREVIEW_SIZE, DEFAULT_ZOOM_SLIDER_SHOW_TOOLTIP, DEFAULT_ZOOM_SLIDER_SIZE } from \"../../../constants.js\";\nexport const defaultZoomOptions = {\n minStart: 0,\n maxEnd: 100,\n step: 5,\n minSpan: 10,\n maxSpan: 100,\n panning: true,\n filterMode: 'keep',\n reverse: false,\n slider: {\n enabled: false,\n preview: false,\n size: DEFAULT_ZOOM_SLIDER_SIZE,\n showTooltip: DEFAULT_ZOOM_SLIDER_SHOW_TOOLTIP\n }\n};\nexport const defaultizeZoom = (zoom, axisId, axisDirection, reverse) => {\n if (!zoom) {\n return undefined;\n }\n if (zoom === true) {\n return _extends({\n axisId,\n axisDirection\n }, defaultZoomOptions, {\n reverse: reverse ?? false\n });\n }\n return _extends({\n axisId,\n axisDirection\n }, defaultZoomOptions, {\n reverse: reverse ?? false\n }, zoom, {\n slider: _extends({}, defaultZoomOptions.slider, {\n size: zoom.slider?.preview ?? defaultZoomOptions.slider.preview ? DEFAULT_ZOOM_SLIDER_PREVIEW_SIZE : DEFAULT_ZOOM_SLIDER_SIZE\n }, zoom.slider)\n });\n};","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport { defaultizeZoom } from \"./defaultizeZoom.js\";\nimport { DEFAULT_X_AXIS_KEY, DEFAULT_Y_AXIS_KEY, DEFAULT_AXIS_SIZE_HEIGHT, DEFAULT_AXIS_SIZE_WIDTH, AXIS_LABEL_DEFAULT_HEIGHT } from \"../../../../constants/index.js\";\nexport function defaultizeXAxis(inAxes, dataset) {\n const offsets = {\n top: 0,\n bottom: 0,\n none: 0\n };\n const inputAxes = inAxes && inAxes.length > 0 ? inAxes : [{\n id: DEFAULT_X_AXIS_KEY,\n scaleType: 'linear'\n }];\n const parsedAxes = inputAxes.map((axisConfig, index) => {\n const dataKey = axisConfig.dataKey;\n\n // The first x-axis is defaultized to the bottom\n const defaultPosition = index === 0 ? 'bottom' : 'none';\n const position = axisConfig.position ?? defaultPosition;\n const defaultHeight = DEFAULT_AXIS_SIZE_HEIGHT + (axisConfig.label ? AXIS_LABEL_DEFAULT_HEIGHT : 0);\n const id = axisConfig.id ?? `defaultized-x-axis-${index}`;\n const sharedConfig = _extends({\n offset: offsets[position]\n }, axisConfig, {\n id,\n position,\n height: axisConfig.height ?? defaultHeight,\n zoom: defaultizeZoom(axisConfig.zoom, id, 'x', axisConfig.reverse)\n });\n\n // Increment the offset for the next axis\n if (position !== 'none') {\n offsets[position] += sharedConfig.height;\n if (sharedConfig.zoom?.slider.enabled) {\n offsets[position] += sharedConfig.zoom.slider.size;\n }\n }\n\n // If `dataKey` is NOT provided\n if (dataKey === undefined || axisConfig.data !== undefined) {\n return sharedConfig;\n }\n if (dataset === undefined) {\n throw new Error(`MUI X Charts: x-axis uses \\`dataKey\\` but no \\`dataset\\` is provided.`);\n }\n\n // If `dataKey` is provided\n return _extends({}, sharedConfig, {\n data: dataset.map(d => d[dataKey])\n });\n });\n return parsedAxes;\n}\nexport function defaultizeYAxis(inAxes, dataset) {\n const offsets = {\n right: 0,\n left: 0,\n none: 0\n };\n const inputAxes = inAxes && inAxes.length > 0 ? inAxes : [{\n id: DEFAULT_Y_AXIS_KEY,\n scaleType: 'linear'\n }];\n const parsedAxes = inputAxes.map((axisConfig, index) => {\n const dataKey = axisConfig.dataKey;\n\n // The first y-axis is defaultized to the left\n const defaultPosition = index === 0 ? 'left' : 'none';\n const position = axisConfig.position ?? defaultPosition;\n const defaultWidth = DEFAULT_AXIS_SIZE_WIDTH + (axisConfig.label ? AXIS_LABEL_DEFAULT_HEIGHT : 0);\n const id = axisConfig.id ?? `defaultized-y-axis-${index}`;\n const sharedConfig = _extends({\n offset: offsets[position]\n }, axisConfig, {\n id,\n position,\n width: axisConfig.width ?? defaultWidth,\n zoom: defaultizeZoom(axisConfig.zoom, id, 'y', axisConfig.reverse)\n });\n\n // Increment the offset for the next axis\n if (position !== 'none') {\n offsets[position] += sharedConfig.width;\n if (sharedConfig.zoom?.slider.enabled) {\n offsets[position] += sharedConfig.zoom.slider.size;\n }\n }\n\n // If `dataKey` is NOT provided\n if (dataKey === undefined || axisConfig.data !== undefined) {\n return sharedConfig;\n }\n if (dataset === undefined) {\n throw new Error(`MUI X Charts: y-axis uses \\`dataKey\\` but no \\`dataset\\` is provided.`);\n }\n\n // If `dataKey` is provided\n return _extends({}, sharedConfig, {\n data: dataset.map(d => d[dataKey])\n });\n });\n return parsedAxes;\n}","/**\n * Creates a default formatter function for continuous scales (e.g., linear, sqrt, log).\n * @returns A formatter function for continuous values.\n */\nexport function createScalarFormatter(tickNumber, zoomScale) {\n return function defaultScalarValueFormatter(value, context) {\n if (context.location === 'tick') {\n const domain = context.scale.domain();\n const zeroSizeDomain = domain[0] === domain[1];\n if (zeroSizeDomain) {\n return context.scale.tickFormat(1)(value);\n }\n return context.scale.tickFormat(tickNumber)(value);\n }\n if (context.location === 'zoom-slider-tooltip') {\n return zoomScale.tickFormat(2)(value);\n }\n return `${value}`;\n };\n}","/**\n * Use this type instead of `AxisScaleConfig` when the values\n * shouldn't be provided by the user.\n */\n\n/**\n * Config that is shared between cartesian and polar axes.\n */\n\n/**\n * Use this type for advanced typing. For basic usage, use `XAxis`, `YAxis`, `RotationAxis` or `RadiusAxis`.\n */\n\nexport function isBandScaleConfig(scaleConfig) {\n return scaleConfig.scaleType === 'band';\n}\nexport function isPointScaleConfig(scaleConfig) {\n return scaleConfig.scaleType === 'point';\n}\nexport function isContinuousScaleConfig(scaleConfig) {\n return scaleConfig.scaleType !== 'point' && scaleConfig.scaleType !== 'band';\n}\nexport function isSymlogScaleConfig(scaleConfig) {\n return scaleConfig.scaleType === 'symlog';\n}\n\n/**\n * The data format returned by onAxisClick.\n */\n\n/**\n * Identifies a data point within an axis.\n */\n\n/**\n * The axis configuration with missing values filled with default values.\n */\n\n/**\n * The x-axis configuration with missing values filled with default values.\n */\n\n/**\n * The y-axis configuration with missing values filled with default values.\n */","export default function ascending(a, b) {\n return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function descending(a, b) {\n return a == null || b == null ? NaN\n : b < a ? -1\n : b > a ? 1\n : b >= a ? 0\n : NaN;\n}\n","import ascending from \"./ascending.js\";\nimport descending from \"./descending.js\";\n\nexport default function bisector(f) {\n let compare1, compare2, delta;\n\n // If an accessor is specified, promote it to a comparator. In this case we\n // can test whether the search value is (self-) comparable. We can’t do this\n // for a comparator (except for specific, known comparators) because we can’t\n // tell if the comparator is symmetric, and an asymmetric comparator can’t be\n // used to test whether a single value is comparable.\n if (f.length !== 2) {\n compare1 = ascending;\n compare2 = (d, x) => ascending(f(d), x);\n delta = (d, x) => f(d) - x;\n } else {\n compare1 = f === ascending || f === descending ? f : zero;\n compare2 = f;\n delta = f;\n }\n\n function left(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function right(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) <= 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function center(a, x, lo = 0, hi = a.length) {\n const i = left(a, x, lo, hi - 1);\n return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n }\n\n return {left, center, right};\n}\n\nfunction zero() {\n return 0;\n}\n","export default function number(x) {\n return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\nimport number from \"./number.js\";\n\nconst ascendingBisect = bisector(ascending);\nexport const bisectRight = ascendingBisect.right;\nexport const bisectLeft = ascendingBisect.left;\nexport const bisectCenter = bisector(number).center;\nexport default bisectRight;\n","export class InternMap extends Map {\n constructor(entries, key = keyof) {\n super();\n Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n if (entries != null) for (const [key, value] of entries) this.set(key, value);\n }\n get(key) {\n return super.get(intern_get(this, key));\n }\n has(key) {\n return super.has(intern_get(this, key));\n }\n set(key, value) {\n return super.set(intern_set(this, key), value);\n }\n delete(key) {\n return super.delete(intern_delete(this, key));\n }\n}\n\nexport class InternSet extends Set {\n constructor(values, key = keyof) {\n super();\n Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n if (values != null) for (const value of values) this.add(value);\n }\n has(value) {\n return super.has(intern_get(this, value));\n }\n add(value) {\n return super.add(intern_set(this, value));\n }\n delete(value) {\n return super.delete(intern_delete(this, value));\n }\n}\n\nfunction intern_get({_intern, _key}, value) {\n const key = _key(value);\n return _intern.has(key) ? _intern.get(key) : value;\n}\n\nfunction intern_set({_intern, _key}, value) {\n const key = _key(value);\n if (_intern.has(key)) return _intern.get(key);\n _intern.set(key, value);\n return value;\n}\n\nfunction intern_delete({_intern, _key}, value) {\n const key = _key(value);\n if (_intern.has(key)) {\n value = _intern.get(key);\n _intern.delete(key);\n }\n return value;\n}\n\nfunction keyof(value) {\n return value !== null && typeof value === \"object\" ? value.valueOf() : value;\n}\n","const e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nfunction tickSpec(start, stop, count) {\n const step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log10(step)),\n error = step / Math.pow(10, power),\n factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1;\n let i1, i2, inc;\n if (power < 0) {\n inc = Math.pow(10, -power) / factor;\n i1 = Math.round(start * inc);\n i2 = Math.round(stop * inc);\n if (i1 / inc < start) ++i1;\n if (i2 / inc > stop) --i2;\n inc = -inc;\n } else {\n inc = Math.pow(10, power) * factor;\n i1 = Math.round(start / inc);\n i2 = Math.round(stop / inc);\n if (i1 * inc < start) ++i1;\n if (i2 * inc > stop) --i2;\n }\n if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2);\n return [i1, i2, inc];\n}\n\nexport default function ticks(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n if (!(count > 0)) return [];\n if (start === stop) return [start];\n const reverse = stop < start, [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count);\n if (!(i2 >= i1)) return [];\n const n = i2 - i1 + 1, ticks = new Array(n);\n if (reverse) {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc;\n } else {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc;\n }\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n return tickSpec(start, stop, count)[2];\n}\n\nexport function tickStep(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n const reverse = stop < start, inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count);\n return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);\n}\n","export default function range(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","export function initRange(domain, range) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.range(domain); break;\n default: this.range(range).domain(domain); break;\n }\n return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n switch (arguments.length) {\n case 0: break;\n case 1: {\n if (typeof domain === \"function\") this.interpolator(domain);\n else this.range(domain);\n break;\n }\n default: {\n this.domain(domain);\n if (typeof interpolator === \"function\") this.interpolator(interpolator);\n else this.range(interpolator);\n break;\n }\n }\n return this;\n}\n","import {InternMap} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport const implicit = Symbol(\"implicit\");\n\nexport default function ordinal() {\n var index = new InternMap(),\n domain = [],\n range = [],\n unknown = implicit;\n\n function scale(d) {\n let i = index.get(d);\n if (i === undefined) {\n if (unknown !== implicit) return unknown;\n index.set(d, i = domain.push(d) - 1);\n }\n return range[i % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = new InternMap();\n for (const value of _) {\n if (index.has(value)) continue;\n index.set(value, domain.push(value) - 1);\n }\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal(domain, range).unknown(unknown);\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHex8: color_formatHex8,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb() {\n return this;\n },\n clamp() {\n return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n },\n displayable() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatHex8: rgb_formatHex8,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n value = clampi(value);\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n clamp() {\n return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n },\n displayable() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n }\n}));\n\nfunction clamph(value) {\n value = (value || 0) % 360;\n return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n if (!b) b = [];\n var n = a ? Math.min(b.length, a.length) : 0,\n c = b.slice(),\n i;\n return function(t) {\n for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n return c;\n };\n}\n\nexport function isNumberArray(x) {\n return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b = +b, function(t) {\n return d.setTime(a * (1 - t) + b * t), d;\n };\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : isNumberArray(b) ? numberArray\n : Array.isArray(b) ? genericArray\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return Math.round(a * (1 - t) + b * t);\n };\n}\n","export default function constants(x) {\n return function() {\n return x;\n };\n}\n","export default function number(x) {\n return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport constant from \"./constant.js\";\nimport number from \"./number.js\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n return x;\n}\n\nfunction normalize(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(a, b) {\n var t;\n if (a > b) t = a, a = b, b = t;\n return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = normalize(domain[i], domain[i + 1]);\n r[i] = interpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport function transformer() {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n transform,\n untransform,\n unknown,\n clamp = identity,\n piecewise,\n output,\n input;\n\n function rescale() {\n var n = Math.min(domain.length, range.length);\n if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n piecewise = n > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n }\n\n scale.invert = function(y) {\n return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = Array.from(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t, u) {\n transform = t, untransform = u;\n return rescale();\n };\n}\n\nexport default function continuous() {\n return transformer()(identity, identity);\n}\n","export default function(x) {\n return Math.abs(x = Math.round(x)) >= 1e21\n ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n \"%\": (x, p) => (x * 100).toFixed(p),\n \"b\": (x) => Math.round(x).toString(2),\n \"c\": (x) => x + \"\",\n \"d\": formatDecimal,\n \"e\": (x, p) => x.toExponential(p),\n \"f\": (x, p) => x.toFixed(p),\n \"g\": (x, p) => x.toPrecision(p),\n \"o\": (x) => Math.round(x).toString(8),\n \"p\": (x, p) => formatRounded(x * 100, p),\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n \"x\": (x) => Math.round(x).toString(16)\n};\n","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n minus = locale.minus === undefined ? \"−\" : locale.minus + \"\",\n nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision === undefined ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n var valueNegative = value < 0 || 1 / value < 0;\n\n // Perform the initial formatting.\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function tickFormat(start, stop, count, specifier) {\n var step = tickStep(start, stop, count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport tickFormat from \"./tickFormat.js\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n var d = domain();\n return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain();\n var i0 = 0;\n var i1 = d.length - 1;\n var start = d[i0];\n var stop = d[i1];\n var prestep;\n var step;\n var maxIter = 10;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n \n while (maxIter-- > 0) {\n step = tickIncrement(start, stop, count);\n if (step === prestep) {\n d[i0] = start\n d[i1] = stop\n return domain(d);\n } else if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n } else {\n break;\n }\n prestep = step;\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous();\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n initRange.apply(scale, arguments);\n\n return linearish(scale);\n}\n","export default function nice(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n","import {ticks} from \"d3-array\";\nimport {format, formatSpecifier} from \"d3-format\";\nimport nice from \"./nice.js\";\nimport {copy, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformLog(x) {\n return Math.log(x);\n}\n\nfunction transformExp(x) {\n return Math.exp(x);\n}\n\nfunction transformLogn(x) {\n return -Math.log(-x);\n}\n\nfunction transformExpn(x) {\n return -Math.exp(-x);\n}\n\nfunction pow10(x) {\n return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n return base === 10 ? pow10\n : base === Math.E ? Math.exp\n : x => Math.pow(base, x);\n}\n\nfunction logp(base) {\n return base === Math.E ? Math.log\n : base === 10 && Math.log10\n || base === 2 && Math.log2\n || (base = Math.log(base), x => Math.log(x) / base);\n}\n\nfunction reflect(f) {\n return (x, k) => -f(-x, k);\n}\n\nexport function loggish(transform) {\n const scale = transform(transformLog, transformExp);\n const domain = scale.domain;\n let base = 10;\n let logs;\n let pows;\n\n function rescale() {\n logs = logp(base), pows = powp(base);\n if (domain()[0] < 0) {\n logs = reflect(logs), pows = reflect(pows);\n transform(transformLogn, transformExpn);\n } else {\n transform(transformLog, transformExp);\n }\n return scale;\n }\n\n scale.base = function(_) {\n return arguments.length ? (base = +_, rescale()) : base;\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.ticks = count => {\n const d = domain();\n let u = d[0];\n let v = d[d.length - 1];\n const r = v < u;\n\n if (r) ([u, v] = [v, u]);\n\n let i = logs(u);\n let j = logs(v);\n let k;\n let t;\n const n = count == null ? 10 : +count;\n let z = [];\n\n if (!(base % 1) && j - i < n) {\n i = Math.floor(i), j = Math.ceil(j);\n if (u > 0) for (; i <= j; ++i) {\n for (k = 1; k < base; ++k) {\n t = i < 0 ? k / pows(-i) : k * pows(i);\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n } else for (; i <= j; ++i) {\n for (k = base - 1; k >= 1; --k) {\n t = i > 0 ? k / pows(-i) : k * pows(i);\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n }\n if (z.length * 2 < n) z = ticks(u, v, n);\n } else {\n z = ticks(i, j, Math.min(j - i, n)).map(pows);\n }\n return r ? z.reverse() : z;\n };\n\n scale.tickFormat = (count, specifier) => {\n if (count == null) count = 10;\n if (specifier == null) specifier = base === 10 ? \"s\" : \",\";\n if (typeof specifier !== \"function\") {\n if (!(base % 1) && (specifier = formatSpecifier(specifier)).precision == null) specifier.trim = true;\n specifier = format(specifier);\n }\n if (count === Infinity) return specifier;\n const k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n return d => {\n let i = d / pows(Math.round(logs(d)));\n if (i * base < base - 0.5) i *= base;\n return i <= k ? specifier(d) : \"\";\n };\n };\n\n scale.nice = () => {\n return domain(nice(domain(), {\n floor: x => pows(Math.floor(logs(x))),\n ceil: x => pows(Math.ceil(logs(x)))\n }));\n };\n\n return scale;\n}\n\nexport default function log() {\n const scale = loggish(transformer()).domain([1, 10]);\n scale.copy = () => copy(scale, log()).base(scale.base());\n initRange.apply(scale, arguments);\n return scale;\n}\n","import {linearish} from \"./linear.js\";\nimport {copy, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformSymlog(c) {\n return function(x) {\n return Math.sign(x) * Math.log1p(Math.abs(x / c));\n };\n}\n\nfunction transformSymexp(c) {\n return function(x) {\n return Math.sign(x) * Math.expm1(Math.abs(x)) * c;\n };\n}\n\nexport function symlogish(transform) {\n var c = 1, scale = transform(transformSymlog(c), transformSymexp(c));\n\n scale.constant = function(_) {\n return arguments.length ? transform(transformSymlog(c = +_), transformSymexp(c)) : c;\n };\n\n return linearish(scale);\n}\n\nexport default function symlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, symlog()).constant(scale.constant());\n };\n\n return initRange.apply(scale, arguments);\n}\n","import {linearish} from \"./linear.js\";\nimport {copy, identity, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformPow(exponent) {\n return function(x) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n };\n}\n\nfunction transformSqrt(x) {\n return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);\n}\n\nfunction transformSquare(x) {\n return x < 0 ? -x * x : x * x;\n}\n\nexport function powish(transform) {\n var scale = transform(identity, identity),\n exponent = 1;\n\n function rescale() {\n return exponent === 1 ? transform(identity, identity)\n : exponent === 0.5 ? transform(transformSqrt, transformSquare)\n : transform(transformPow(exponent), transformPow(1 / exponent));\n }\n\n scale.exponent = function(_) {\n return arguments.length ? (exponent = +_, rescale()) : exponent;\n };\n\n return linearish(scale);\n}\n\nexport default function pow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, pow()).exponent(scale.exponent());\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n\nexport function sqrt() {\n return pow.apply(null, arguments).exponent(0.5);\n}\n","import {bisect} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport default function threshold() {\n var domain = [0.5],\n range = [0, 1],\n unknown,\n n = 1;\n\n function scale(x) {\n return x != null && x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return [domain[i - 1], domain[i]];\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return threshold()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(scale, arguments);\n}\n","const t0 = new Date, t1 = new Date;\n\nexport function timeInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n }\n\n interval.floor = (date) => {\n return floori(date = new Date(+date)), date;\n };\n\n interval.ceil = (date) => {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = (date) => {\n const d0 = interval(date), d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.offset = (date, step) => {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = (start, stop, step) => {\n const range = [];\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n let previous;\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = (test) => {\n return timeInterval((date) => {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, (date, step) => {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n interval.count = (start, end) => {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n interval.every = (step) => {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? (d) => field(d) % step === 0\n : (d) => interval.count(0, d) % step === 0);\n };\n }\n\n return interval;\n}\n","import {timeInterval} from \"./interval.js\";\n\nexport const millisecond = timeInterval(() => {\n // noop\n}, (date, step) => {\n date.setTime(+date + step);\n}, (start, end) => {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = (k) => {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return timeInterval((date) => {\n date.setTime(Math.floor(date / k) * k);\n }, (date, step) => {\n date.setTime(+date + step * k);\n }, (start, end) => {\n return (end - start) / k;\n });\n};\n\nexport const milliseconds = millisecond.range;\n","export const durationSecond = 1000;\nexport const durationMinute = durationSecond * 60;\nexport const durationHour = durationMinute * 60;\nexport const durationDay = durationHour * 24;\nexport const durationWeek = durationDay * 7;\nexport const durationMonth = durationDay * 30;\nexport const durationYear = durationDay * 365;\n","import {timeInterval} from \"./interval.js\";\nimport {durationSecond} from \"./duration.js\";\n\nexport const second = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds());\n}, (date, step) => {\n date.setTime(+date + step * durationSecond);\n}, (start, end) => {\n return (end - start) / durationSecond;\n}, (date) => {\n return date.getUTCSeconds();\n});\n\nexport const seconds = second.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeMinute = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, (date, step) => {\n date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n return (end - start) / durationMinute;\n}, (date) => {\n return date.getMinutes();\n});\n\nexport const timeMinutes = timeMinute.range;\n\nexport const utcMinute = timeInterval((date) => {\n date.setUTCSeconds(0, 0);\n}, (date, step) => {\n date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n return (end - start) / durationMinute;\n}, (date) => {\n return date.getUTCMinutes();\n});\n\nexport const utcMinutes = utcMinute.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeHour = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, (date, step) => {\n date.setTime(+date + step * durationHour);\n}, (start, end) => {\n return (end - start) / durationHour;\n}, (date) => {\n return date.getHours();\n});\n\nexport const timeHours = timeHour.range;\n\nexport const utcHour = timeInterval((date) => {\n date.setUTCMinutes(0, 0, 0);\n}, (date, step) => {\n date.setTime(+date + step * durationHour);\n}, (start, end) => {\n return (end - start) / durationHour;\n}, (date) => {\n return date.getUTCHours();\n});\n\nexport const utcHours = utcHour.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationDay, durationMinute} from \"./duration.js\";\n\nexport const timeDay = timeInterval(\n date => date.setHours(0, 0, 0, 0),\n (date, step) => date.setDate(date.getDate() + step),\n (start, end) => (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay,\n date => date.getDate() - 1\n);\n\nexport const timeDays = timeDay.range;\n\nexport const utcDay = timeInterval((date) => {\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n return (end - start) / durationDay;\n}, (date) => {\n return date.getUTCDate() - 1;\n});\n\nexport const utcDays = utcDay.range;\n\nexport const unixDay = timeInterval((date) => {\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n return (end - start) / durationDay;\n}, (date) => {\n return Math.floor(date / durationDay);\n});\n\nexport const unixDays = unixDay.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationWeek} from \"./duration.js\";\n\nfunction timeWeekday(i) {\n return timeInterval((date) => {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setDate(date.getDate() + step * 7);\n }, (start, end) => {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport const timeSunday = timeWeekday(0);\nexport const timeMonday = timeWeekday(1);\nexport const timeTuesday = timeWeekday(2);\nexport const timeWednesday = timeWeekday(3);\nexport const timeThursday = timeWeekday(4);\nexport const timeFriday = timeWeekday(5);\nexport const timeSaturday = timeWeekday(6);\n\nexport const timeSundays = timeSunday.range;\nexport const timeMondays = timeMonday.range;\nexport const timeTuesdays = timeTuesday.range;\nexport const timeWednesdays = timeWednesday.range;\nexport const timeThursdays = timeThursday.range;\nexport const timeFridays = timeFriday.range;\nexport const timeSaturdays = timeSaturday.range;\n\nfunction utcWeekday(i) {\n return timeInterval((date) => {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, (start, end) => {\n return (end - start) / durationWeek;\n });\n}\n\nexport const utcSunday = utcWeekday(0);\nexport const utcMonday = utcWeekday(1);\nexport const utcTuesday = utcWeekday(2);\nexport const utcWednesday = utcWeekday(3);\nexport const utcThursday = utcWeekday(4);\nexport const utcFriday = utcWeekday(5);\nexport const utcSaturday = utcWeekday(6);\n\nexport const utcSundays = utcSunday.range;\nexport const utcMondays = utcMonday.range;\nexport const utcTuesdays = utcTuesday.range;\nexport const utcWednesdays = utcWednesday.range;\nexport const utcThursdays = utcThursday.range;\nexport const utcFridays = utcFriday.range;\nexport const utcSaturdays = utcSaturday.range;\n","import {timeInterval} from \"./interval.js\";\n\nexport const timeMonth = timeInterval((date) => {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setMonth(date.getMonth() + step);\n}, (start, end) => {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, (date) => {\n return date.getMonth();\n});\n\nexport const timeMonths = timeMonth.range;\n\nexport const utcMonth = timeInterval((date) => {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCMonth(date.getUTCMonth() + step);\n}, (start, end) => {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, (date) => {\n return date.getUTCMonth();\n});\n\nexport const utcMonths = utcMonth.range;\n","import {timeInterval} from \"./interval.js\";\n\nexport const timeYear = timeInterval((date) => {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setFullYear(date.getFullYear() + step);\n}, (start, end) => {\n return end.getFullYear() - start.getFullYear();\n}, (date) => {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\ntimeYear.every = (k) => {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport const timeYears = timeYear.range;\n\nexport const utcYear = timeInterval((date) => {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, (start, end) => {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, (date) => {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = (k) => {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport const utcYears = utcYear.range;\n","import {bisector, tickStep} from \"d3-array\";\nimport {durationDay, durationHour, durationMinute, durationMonth, durationSecond, durationWeek, durationYear} from \"./duration.js\";\nimport {millisecond} from \"./millisecond.js\";\nimport {second} from \"./second.js\";\nimport {timeMinute, utcMinute} from \"./minute.js\";\nimport {timeHour, utcHour} from \"./hour.js\";\nimport {timeDay, unixDay} from \"./day.js\";\nimport {timeSunday, utcSunday} from \"./week.js\";\nimport {timeMonth, utcMonth} from \"./month.js\";\nimport {timeYear, utcYear} from \"./year.js\";\n\nfunction ticker(year, month, week, day, hour, minute) {\n\n const tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function ticks(start, stop, count) {\n const reverse = stop < start;\n if (reverse) [start, stop] = [stop, start];\n const interval = count && typeof count.range === \"function\" ? count : tickInterval(start, stop, count);\n const ticks = interval ? interval.range(start, +stop + 1) : []; // inclusive stop\n return reverse ? ticks.reverse() : ticks;\n }\n\n function tickInterval(start, stop, count) {\n const target = Math.abs(stop - start) / count;\n const i = bisector(([,, step]) => step).right(tickIntervals, target);\n if (i === tickIntervals.length) return year.every(tickStep(start / durationYear, stop / durationYear, count));\n if (i === 0) return millisecond.every(Math.max(tickStep(start, stop, count), 1));\n const [t, step] = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n return t.every(step);\n }\n\n return [ticks, tickInterval];\n}\n\nconst [utcTicks, utcTickInterval] = ticker(utcYear, utcMonth, utcSunday, unixDay, utcHour, utcMinute);\nconst [timeTicks, timeTickInterval] = ticker(timeYear, timeMonth, timeSunday, timeDay, timeHour, timeMinute);\n\nexport {utcTicks, utcTickInterval, timeTicks, timeTickInterval};\n","import {\n timeDay,\n timeSunday,\n timeMonday,\n timeThursday,\n timeYear,\n utcDay,\n utcSunday,\n utcMonday,\n utcThursday,\n utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newDate(y, m, d) {\n return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodRe = formatRe(locale_periods),\n periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n \"a\": formatShortWeekday,\n \"A\": formatWeekday,\n \"b\": formatShortMonth,\n \"B\": formatMonth,\n \"c\": null,\n \"d\": formatDayOfMonth,\n \"e\": formatDayOfMonth,\n \"f\": formatMicroseconds,\n \"g\": formatYearISO,\n \"G\": formatFullYearISO,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"q\": formatQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\n \"W\": formatWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatYear,\n \"Y\": formatFullYear,\n \"Z\": formatZone,\n \"%\": formatLiteralPercent\n };\n\n var utcFormats = {\n \"a\": formatUTCShortWeekday,\n \"A\": formatUTCWeekday,\n \"b\": formatUTCShortMonth,\n \"B\": formatUTCMonth,\n \"c\": null,\n \"d\": formatUTCDayOfMonth,\n \"e\": formatUTCDayOfMonth,\n \"f\": formatUTCMicroseconds,\n \"g\": formatUTCYearISO,\n \"G\": formatUTCFullYearISO,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"q\": formatUTCQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\n \"W\": formatUTCWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatUTCYear,\n \"Y\": formatUTCFullYear,\n \"Z\": formatUTCZone,\n \"%\": formatLiteralPercent\n };\n\n var parses = {\n \"a\": parseShortWeekday,\n \"A\": parseWeekday,\n \"b\": parseShortMonth,\n \"B\": parseMonth,\n \"c\": parseLocaleDateTime,\n \"d\": parseDayOfMonth,\n \"e\": parseDayOfMonth,\n \"f\": parseMicroseconds,\n \"g\": parseYear,\n \"G\": parseFullYear,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"q\": parseQuarter,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\n \"W\": parseWeekNumberMonday,\n \"x\": parseLocaleDate,\n \"X\": parseLocaleTime,\n \"y\": parseYear,\n \"Y\": parseFullYear,\n \"Z\": parseZone,\n \"%\": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function(date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n if (!(date instanceof Date)) date = new Date(+date);\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join(\"\");\n };\n }\n\n function newParse(specifier, Z) {\n return function(string) {\n var d = newDate(1900, undefined, 1),\n i = parseSpecifier(d, specifier, string += \"\", 0),\n week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\n if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\n\n // If this is utcParse, never use the local timezone.\n if (Z && !(\"Z\" in d)) d.Z = 0;\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n // If the month was not specified, inherit from the quarter.\n if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\n\n // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = localDate(newDate(d.y, 0, 1)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if (\"Z\" in d) {\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return localDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatQuarter(d) {\n return 1 + ~~(d.getMonth() / 3);\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n function formatUTCQuarter(d) {\n return 1 + ~~(d.getUTCMonth() / 3);\n }\n\n return {\n format: function(specifier) {\n var f = newFormat(specifier += \"\", formats);\n f.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", false);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier += \"\", true);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\",\n string = (sign ? -value : value) + \"\",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n return new Map(names.map((name, i) => [name.toLowerCase(), i]));\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseQuarter(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.s = +n[0], i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction dISO(d) {\n var day = d.getDay();\n return (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n}\n\nfunction formatWeekNumberISO(d, p) {\n d = dISO(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatYearISO(d, p) {\n d = dISO(d);\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatFullYearISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n + pad(z / 60 | 0, \"0\", 2)\n + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction UTCdISO(d) {\n var day = d.getUTCDay();\n return (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n d = UTCdISO(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCYearISO(d, p) {\n d = UTCdISO(d);\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCFullYearISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n","import {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeTicks, timeTickInterval} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport nice from \"./nice.js\";\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format) {\n var scale = continuous(),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(Array.from(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], interval == null ? 10 : interval);\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval) {\n var d = domain();\n if (!interval || typeof interval.range !== \"function\") interval = tickInterval(d[0], d[d.length - 1], interval == null ? 10 : interval);\n return interval ? domain(nice(d, interval)) : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format));\n };\n\n return scale;\n}\n\nexport default function time() {\n return initRange.apply(calendar(timeTicks, timeTickInterval, timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);\n}\n","import {utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcTicks, utcTickInterval} from \"d3-time\";\nimport {utcFormat} from \"d3-time-format\";\nimport {calendar} from \"./time.js\";\nimport {initRange} from \"./init.js\";\n\nexport default function utcTime() {\n return initRange.apply(calendar(utcTicks, utcTickInterval, utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]), arguments);\n}\n","import {interpolate, interpolateRound} from \"d3-interpolate\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport {loggish} from \"./log.js\";\nimport {symlogish} from \"./symlog.js\";\nimport {powish} from \"./pow.js\";\n\nfunction transformer() {\n var x0 = 0,\n x1 = 1,\n t0,\n t1,\n k10,\n transform,\n interpolator = identity,\n clamp = false,\n unknown;\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : interpolator(k10 === 0 ? 0.5 : (x = (transform(x) - t0) * k10, clamp ? Math.max(0, Math.min(1, x)) : x));\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n function range(interpolate) {\n return function(_) {\n var r0, r1;\n return arguments.length ? ([r0, r1] = _, interpolator = interpolate(r0, r1), scale) : [interpolator(0), interpolator(1)];\n };\n }\n\n scale.range = range(interpolate);\n\n scale.rangeRound = range(interpolateRound);\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t) {\n transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0);\n return scale;\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .interpolator(source.interpolator())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport default function sequential() {\n var scale = linearish(transformer()(identity));\n\n scale.copy = function() {\n return copy(scale, sequential());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialLog() {\n var scale = loggish(transformer()).domain([1, 10]);\n\n scale.copy = function() {\n return copy(scale, sequentialLog()).base(scale.base());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSymlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, sequentialSymlog()).constant(scale.constant());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialPow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, sequentialPow()).exponent(scale.exponent());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSqrt() {\n return sequentialPow.apply(null, arguments).exponent(0.5);\n}\n","import { scaleOrdinal, scaleThreshold, scaleSequential } from '@mui/x-charts-vendor/d3-scale';\nexport function getSequentialColorScale(config) {\n if (config.type === 'piecewise') {\n return scaleThreshold(config.thresholds, config.colors);\n }\n return scaleSequential([config.min ?? 0, config.max ?? 100], config.color);\n}\nexport function getOrdinalColorScale(config) {\n if (config.values) {\n return scaleOrdinal(config.values, config.colors).unknown(config.unknownColor ?? null);\n }\n return scaleOrdinal(config.colors.map((_, index) => index), config.colors).unknown(config.unknownColor ?? null);\n}\nexport function getColorScale(config) {\n return config.type === 'ordinal' ? getOrdinalColorScale(config) : getSequentialColorScale(config);\n}","export function getTickNumber(params, domain, defaultTickNumber) {\n const {\n tickMaxStep,\n tickMinStep,\n tickNumber\n } = params;\n const maxTicks = tickMinStep === undefined ? 999 : Math.floor(Math.abs(domain[1] - domain[0]) / tickMinStep);\n const minTicks = tickMaxStep === undefined ? 2 : Math.ceil(Math.abs(domain[1] - domain[0]) / tickMaxStep);\n const defaultizedTickNumber = tickNumber ?? defaultTickNumber;\n return Math.min(maxTicks, Math.max(minTicks, defaultizedTickNumber));\n}\nexport function scaleTickNumberByRange(tickNumber, range) {\n const rangeGap = range[1] - range[0];\n\n /* If the range start and end are the same, `tickNumber` will become infinity, so we default to 1. */\n if (rangeGap === 0) {\n return 1;\n }\n return tickNumber / ((range[1] - range[0]) / 100);\n}\nexport function getDefaultTickNumber(dimension) {\n return Math.floor(Math.abs(dimension) / 50);\n}","/* eslint-disable func-names */\n// Adapted from d3-scale v4.0.2\n// https://github.com/d3/d3-scale/blob/d6904a4bde09e16005e0ad8ca3e25b10ce54fa0d/src/band.js\nimport { InternMap, range as sequence } from '@mui/x-charts-vendor/d3-array';\nexport function keyof(value) {\n if (Array.isArray(value)) {\n return JSON.stringify(value);\n }\n if (typeof value === 'object' && value !== null) {\n return value.valueOf();\n }\n return value;\n}\n\n/**\n * Constructs a new band scale with the specified range, no padding, no rounding and center alignment.\n * The domain defaults to the empty domain.\n * If range is not specified, it defaults to the unit range [0, 1].\n *\n * The generic corresponds to the data type of domain elements.\n *\n * @param range A two-element array of numeric values.\n */\n\n/**\n * Constructs a new band scale with the specified domain and range, no padding, no rounding and center alignment.\n *\n * The generic corresponds to the data type of domain elements.\n *\n * @param domain Array of domain values.\n * @param range A two-element array of numeric values.\n */\n\nexport function scaleBand(...args) {\n // @ts-expect-error, InternMap accepts two arguments, but its types are set as Map, which doesn't.\n let index = new InternMap(undefined, keyof);\n let domain = [];\n let ordinalRange = [];\n let r0 = 0;\n let r1 = 1;\n let step;\n let bandwidth;\n let isRound = false;\n let paddingInner = 0;\n let paddingOuter = 0;\n let align = 0.5;\n const scale = d => {\n const i = index.get(d);\n if (i === undefined) {\n return undefined;\n }\n return ordinalRange[i % ordinalRange.length];\n };\n const rescale = () => {\n const n = domain.length;\n const reverse = r1 < r0;\n const start = reverse ? r1 : r0;\n const stop = reverse ? r0 : r1;\n step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n if (isRound) {\n step = Math.floor(step);\n }\n const adjustedStart = start + (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n const finalStart = isRound ? Math.round(adjustedStart) : adjustedStart;\n const finalBandwidth = isRound ? Math.round(bandwidth) : bandwidth;\n bandwidth = finalBandwidth;\n const values = sequence(n).map(i => finalStart + step * i);\n ordinalRange = reverse ? values.reverse() : values;\n return scale;\n };\n scale.domain = function (_) {\n if (!arguments.length) {\n return domain.slice();\n }\n domain = [];\n // @ts-expect-error, InternMap accepts two arguments.\n index = new InternMap(undefined, keyof);\n for (const value of _) {\n if (index.has(value)) {\n continue;\n }\n index.set(value, domain.push(value) - 1);\n }\n return rescale();\n };\n scale.range = function (_) {\n if (!arguments.length) {\n return [r0, r1];\n }\n const [v0, v1] = _;\n r0 = +v0;\n r1 = +v1;\n return rescale();\n };\n scale.rangeRound = function (_) {\n const [v0, v1] = _;\n r0 = +v0;\n r1 = +v1;\n isRound = true;\n return rescale();\n };\n scale.bandwidth = function () {\n return bandwidth;\n };\n scale.step = function () {\n return step;\n };\n scale.round = function (_) {\n if (!arguments.length) {\n return isRound;\n }\n isRound = !!_;\n return rescale();\n };\n scale.padding = function (_) {\n if (!arguments.length) {\n return paddingInner;\n }\n paddingInner = Math.min(1, paddingOuter = +_);\n return rescale();\n };\n scale.paddingInner = function (_) {\n if (!arguments.length) {\n return paddingInner;\n }\n paddingInner = Math.min(1, _);\n return rescale();\n };\n scale.paddingOuter = function (_) {\n if (!arguments.length) {\n return paddingOuter;\n }\n paddingOuter = +_;\n return rescale();\n };\n scale.align = function (_) {\n if (!arguments.length) {\n return align;\n }\n align = Math.max(0, Math.min(1, _));\n return rescale();\n };\n scale.copy = () => {\n return scaleBand(domain, [r0, r1]).round(isRound).paddingInner(paddingInner).paddingOuter(paddingOuter).align(align);\n };\n\n // Initialize from arguments\n const [arg0, arg1] = args;\n if (args.length > 1) {\n scale.domain(arg0);\n scale.range(arg1);\n } else if (arg0) {\n scale.range(arg0);\n } else {\n rescale();\n }\n return scale;\n}","import { scaleBand } from \"./scaleBand.js\";\n\n/**\n * Constructs a new point scale with the specified range, no padding, no rounding and center alignment.\n * The domain defaults to the empty domain.\n * If range is not specified, it defaults to the unit range [0, 1].\n *\n * The generic corresponds to the data type of domain elements.\n *\n * @param range A two-element array of numeric values.\n */\n\n/**\n * Constructs a new point scale with the specified domain and range, no padding, no rounding and center alignment.\n * The domain defaults to the empty domain.\n *\n * The generic corresponds to the data type of domain elements.\n *\n * @param domain Array of domain values.\n * @param range A two-element array of numeric values.\n */\n\nexport function scalePoint(...args) {\n // ScalePoint is essentially ScaleBand with paddingInner(1)\n const scale = scaleBand(...args).paddingInner(1);\n\n // Remove paddingInner method and make padding alias to paddingOuter\n const originalCopy = scale.copy;\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n delete scale.paddingOuter;\n scale.copy = () => {\n const copied = originalCopy();\n copied.padding = copied.paddingOuter;\n delete copied.paddingInner;\n delete copied.paddingOuter;\n copied.copy = scale.copy;\n return copied;\n };\n return scale;\n}","import { scaleSymlog as originalScaleSymlog, scaleLog, scaleLinear } from '@mui/x-charts-vendor/d3-scale';\n\n/**\n * Constructs a new continuous scale with the specified range, the constant 1, the default interpolator and clamping disabled.\n * The domain defaults to [0, 1].\n * If range is not specified, it defaults to [0, 1].\n *\n * The first generic corresponds to the data type of the range elements.\n * The second generic corresponds to the data type of the output elements generated by the scale.\n * The third generic corresponds to the data type of the unknown value.\n *\n * If range element and output element type differ, the interpolator factory used with the scale must match this behavior and\n * convert the interpolated range element to a corresponding output element.\n *\n * The range must be set in accordance with the range element type.\n *\n * The interpolator factory may be set using the interpolate(...) method of the scale.\n *\n * @param range Array of range values.\n */\n\n/**\n * Constructs a new continuous scale with the specified domain and range, the constant 1, the default interpolator and clamping disabled.\n *\n * The first generic corresponds to the data type of the range elements.\n * The second generic corresponds to the data type of the output elements generated by the scale.\n * The third generic corresponds to the data type of the unknown value.\n *\n * If range element and output element type differ, the interpolator factory used with the scale must match this behavior and\n * convert the interpolated range element to a corresponding output element.\n *\n * The range must be set in accordance with the range element type.\n *\n * The interpolator factory may be set using the interpolate(...) method of the scale.\n *\n * @param domain Array of numeric domain values.\n * @param range Array of range values.\n */\n\nexport function scaleSymlog(...args) {\n const scale = originalScaleSymlog(...args);\n const originalTicks = scale.ticks;\n const {\n negativeScale,\n linearScale,\n positiveScale\n } = generateScales(scale);\n\n // Workaround for https://github.com/d3/d3-scale/issues/162\n scale.ticks = count => {\n const ticks = originalTicks(count);\n const constant = scale.constant();\n let negativeLogTickCount = 0;\n let linearTickCount = 0;\n let positiveLogTickCount = 0;\n ticks.forEach(tick => {\n if (tick > -constant && tick < constant) {\n linearTickCount += 1;\n }\n if (tick <= -constant) {\n negativeLogTickCount += 1;\n }\n if (tick >= constant) {\n positiveLogTickCount += 1;\n }\n });\n const finalTicks = [];\n if (negativeLogTickCount > 0) {\n finalTicks.push(...negativeScale.ticks(negativeLogTickCount));\n }\n if (linearTickCount > 0) {\n const linearTicks = linearScale.ticks(linearTickCount);\n if (finalTicks.at(-1) === linearTicks[0]) {\n finalTicks.push(...linearTicks.slice(1));\n } else {\n finalTicks.push(...linearTicks);\n }\n }\n if (positiveLogTickCount > 0) {\n const positiveTicks = positiveScale.ticks(positiveLogTickCount);\n if (finalTicks.at(-1) === positiveTicks[0]) {\n finalTicks.push(...positiveTicks.slice(1));\n } else {\n finalTicks.push(...positiveTicks);\n }\n }\n return finalTicks;\n };\n scale.tickFormat = (count = 10, specifier) => {\n // Calculates the proportion of the domain that each scale occupies, and use that ratio to determine the number of ticks for each scale.\n const constant = scale.constant();\n const [start, end] = scale.domain();\n const extent = end - start;\n const negativeScaleDomain = negativeScale.domain();\n const negativeScaleExtent = negativeScaleDomain[1] - negativeScaleDomain[0];\n const negativeScaleRatio = extent === 0 ? 0 : negativeScaleExtent / extent;\n const negativeScaleTickCount = negativeScaleRatio * count;\n const linearScaleDomain = linearScale.domain();\n const linearScaleExtent = linearScaleDomain[1] - linearScaleDomain[0];\n const linearScaleRatio = extent === 0 ? 0 : linearScaleExtent / extent;\n const linearScaleTickCount = linearScaleRatio * count;\n const positiveScaleDomain = positiveScale.domain();\n const positiveScaleExtent = positiveScaleDomain[1] - positiveScaleDomain[0];\n const positiveScaleRatio = extent === 0 ? 0 : positiveScaleExtent / extent;\n const positiveScaleTickCount = positiveScaleRatio * count;\n const negativeTickFormat = negativeScale.tickFormat(negativeScaleTickCount, specifier);\n const linearTickFormat = linearScale.tickFormat(linearScaleTickCount, specifier);\n const positiveTickFormat = positiveScale.tickFormat(positiveScaleTickCount, specifier);\n return tick => {\n const tickFormat =\n // eslint-disable-next-line no-nested-ternary\n tick.valueOf() <= -constant ? negativeTickFormat : tick.valueOf() >= constant ? positiveTickFormat : linearTickFormat;\n return tickFormat(tick);\n };\n };\n\n /* Adaptation of https://github.com/d3/d3-scale/blob/d6904a4bde09e16005e0ad8ca3e25b10ce54fa0d/src/symlog.js#L30 */\n scale.copy = () => {\n return scaleSymlog(scale.domain(), scale.range()).constant(scale.constant());\n };\n return scale;\n}\nfunction generateScales(scale) {\n const constant = scale.constant();\n const domain = scale.domain();\n const negativeDomain = [domain[0], Math.min(domain[1], -constant)];\n const negativeLogScale = scaleLog(negativeDomain, scale.range());\n const linearDomain = [Math.max(domain[0], -constant), Math.min(domain[1], constant)];\n const linearScale = scaleLinear(linearDomain, scale.range());\n const positiveDomain = [Math.max(domain[0], constant), domain[1]];\n const positiveLogScale = scaleLog(positiveDomain, scale.range());\n return {\n negativeScale: negativeLogScale,\n linearScale,\n positiveScale: positiveLogScale\n };\n}","import { scaleLog, scalePow, scaleSqrt, scaleTime, scaleUtc, scaleLinear } from '@mui/x-charts-vendor/d3-scale';\nimport { scaleSymlog } from \"./scales/index.js\";\nexport function getScale(scaleType, domain, range) {\n switch (scaleType) {\n case 'log':\n return scaleLog(domain, range);\n case 'pow':\n return scalePow(domain, range);\n case 'sqrt':\n return scaleSqrt(domain, range);\n case 'time':\n return scaleTime(domain, range);\n case 'utc':\n return scaleUtc(domain, range);\n case 'symlog':\n return scaleSymlog(domain, range);\n default:\n return scaleLinear(domain, range);\n }\n}","import { scaleTime } from '@mui/x-charts-vendor/d3-scale';\n/**\n * Checks if the provided data array contains Date objects.\n * @param data The data array to check.\n * @returns A type predicate indicating if the data is an array of Date objects.\n */\nexport const isDateData = data => data?.[0] instanceof Date;\n\n/**\n * Creates a formatter function for date values.\n * @param data The data array containing Date or NumberValue objects.\n * @param range The range for the time scale.\n * @param tickNumber (Optional) The number of ticks for formatting.\n * @returns A formatter function for date values.\n */\nexport function createDateFormatter(data, range, tickNumber) {\n const timeScale = scaleTime(data, range);\n return (v, {\n location\n }) => location === 'tick' ? timeScale.tickFormat(tickNumber)(v) : `${v.toLocaleString()}`;\n}","let cartesianInstance;\nlet polarInstance;\nclass CartesianSeriesTypes {\n types = (() => new Set())();\n constructor() {\n if (cartesianInstance) {\n throw new Error('You can only create one instance!');\n }\n cartesianInstance = this.types;\n }\n addType(value) {\n this.types.add(value);\n }\n getTypes() {\n return this.types;\n }\n}\nclass PolarSeriesTypes {\n types = (() => new Set())();\n constructor() {\n if (polarInstance) {\n throw new Error('You can only create one instance!');\n }\n polarInstance = this.types;\n }\n addType(value) {\n this.types.add(value);\n }\n getTypes() {\n return this.types;\n }\n}\nexport const cartesianSeriesTypes = new CartesianSeriesTypes();\ncartesianSeriesTypes.addType('bar');\ncartesianSeriesTypes.addType('line');\ncartesianSeriesTypes.addType('scatter');\nexport const polarSeriesTypes = new PolarSeriesTypes();\npolarSeriesTypes.addType('radar');","import { cartesianSeriesTypes } from \"./configInit.js\";\nexport function isCartesianSeriesType(seriesType) {\n return cartesianSeriesTypes.getTypes().has(seriesType);\n}\nexport function isCartesianSeries(series) {\n return isCartesianSeriesType(series.type);\n}","import { isCartesianSeriesType } from \"../../../isCartesian.js\";\nexport const getAxisTriggerTooltip = (axisDirection, seriesConfig, formattedSeries, defaultAxisId) => {\n const tooltipAxesIds = new Set();\n const chartTypes = Object.keys(seriesConfig).filter(isCartesianSeriesType);\n chartTypes.forEach(chartType => {\n const series = formattedSeries[chartType]?.series ?? {};\n const tooltipAxes = seriesConfig[chartType].axisTooltipGetter?.(series);\n if (tooltipAxes === undefined) {\n return;\n }\n tooltipAxes.forEach(({\n axisId,\n direction\n }) => {\n if (direction === axisDirection) {\n tooltipAxesIds.add(axisId ?? defaultAxisId);\n }\n });\n });\n return tooltipAxesIds;\n};","export function isOrdinalScale(scale) {\n return scale.bandwidth !== undefined;\n}\nexport function isBandScale(scale) {\n return isOrdinalScale(scale) && scale.paddingOuter !== undefined;\n}\nexport function isPointScale(scale) {\n return isOrdinalScale(scale) && !('paddingOuter' in scale);\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport { createScalarFormatter } from \"../../../defaultValueFormatters.js\";\nimport { isBandScaleConfig, isPointScaleConfig } from \"../../../../models/axis.js\";\nimport { getColorScale, getOrdinalColorScale, getSequentialColorScale } from \"../../../colorScale.js\";\nimport { scaleTickNumberByRange } from \"../../../ticks.js\";\nimport { getScale } from \"../../../getScale.js\";\nimport { isDateData, createDateFormatter } from \"../../../dateHelpers.js\";\nimport { getAxisTriggerTooltip } from \"./getAxisTriggerTooltip.js\";\nimport { isBandScale, isOrdinalScale } from \"../../../scaleGuards.js\";\nfunction getRange(drawingArea, axisDirection,\n// | 'rotation' | 'radius',\nreverse) {\n const range = axisDirection === 'x' ? [drawingArea.left, drawingArea.left + drawingArea.width] : [drawingArea.top + drawingArea.height, drawingArea.top];\n return reverse ? [range[1], range[0]] : range;\n}\nconst DEFAULT_CATEGORY_GAP_RATIO = 0.2;\nconst DEFAULT_BAR_GAP_RATIO = 0.1;\nexport function computeAxisValue({\n scales,\n drawingArea,\n formattedSeries,\n axis: allAxis,\n seriesConfig,\n axisDirection,\n zoomMap,\n domains\n}) {\n if (allAxis === undefined) {\n return {\n axis: {},\n axisIds: []\n };\n }\n const axisIdsTriggeringTooltip = getAxisTriggerTooltip(axisDirection, seriesConfig, formattedSeries, allAxis[0].id);\n const completeAxis = {};\n allAxis.forEach(eachAxis => {\n const axis = eachAxis;\n const scale = scales[axis.id];\n const zoom = zoomMap?.get(axis.id);\n const zoomRange = zoom ? [zoom.start, zoom.end] : [0, 100];\n const range = getRange(drawingArea, axisDirection, axis.reverse ?? false);\n const rawTickNumber = domains[axis.id].tickNumber;\n const triggerTooltip = !axis.ignoreTooltip && axisIdsTriggeringTooltip.has(axis.id);\n const tickNumber = scaleTickNumberByRange(rawTickNumber, zoomRange);\n const data = axis.data ?? [];\n if (isOrdinalScale(scale)) {\n // Reverse range because ordinal scales are presented from top to bottom on y-axis\n const scaleRange = axisDirection === 'y' ? [range[1], range[0]] : range;\n if (isBandScale(scale) && isBandScaleConfig(axis)) {\n const categoryGapRatio = axis.categoryGapRatio ?? DEFAULT_CATEGORY_GAP_RATIO;\n const barGapRatio = axis.barGapRatio ?? DEFAULT_BAR_GAP_RATIO;\n completeAxis[axis.id] = _extends({\n offset: 0,\n height: 0,\n categoryGapRatio,\n barGapRatio,\n triggerTooltip\n }, axis, {\n data,\n scale,\n tickNumber,\n colorScale: axis.colorMap && (axis.colorMap.type === 'ordinal' ? getOrdinalColorScale(_extends({\n values: axis.data\n }, axis.colorMap)) : getColorScale(axis.colorMap))\n });\n }\n if (isPointScaleConfig(axis)) {\n completeAxis[axis.id] = _extends({\n offset: 0,\n height: 0,\n triggerTooltip\n }, axis, {\n data,\n scale,\n tickNumber,\n colorScale: axis.colorMap && (axis.colorMap.type === 'ordinal' ? getOrdinalColorScale(_extends({\n values: axis.data\n }, axis.colorMap)) : getColorScale(axis.colorMap))\n });\n }\n if (isDateData(axis.data)) {\n const dateFormatter = createDateFormatter(axis.data, scaleRange, axis.tickNumber);\n completeAxis[axis.id].valueFormatter = axis.valueFormatter ?? dateFormatter;\n }\n return;\n }\n if (axis.scaleType === 'band' || axis.scaleType === 'point') {\n // Could be merged with the two previous \"if conditions\" but then TS does not get that `axis.scaleType` can't be `band` or `point`.\n return;\n }\n const continuousAxis = axis;\n const scaleType = continuousAxis.scaleType ?? 'linear';\n completeAxis[axis.id] = _extends({\n offset: 0,\n height: 0,\n triggerTooltip\n }, continuousAxis, {\n data,\n scaleType,\n scale,\n tickNumber,\n colorScale: continuousAxis.colorMap && getSequentialColorScale(continuousAxis.colorMap),\n valueFormatter: axis.valueFormatter ?? createScalarFormatter(tickNumber, getScale(scaleType, range.map(v => scale.invert(v)), range))\n });\n });\n return {\n axis: completeAxis,\n axisIds: allAxis.map(({\n id\n }) => id)\n };\n}","export function isDefined(value) {\n return value !== null && value !== undefined;\n}","import { isDefined } from \"../../../isDefined.js\";\nexport function createDiscreteScaleGetAxisFilter(axisData, zoomStart, zoomEnd, direction) {\n const maxIndex = axisData?.length ?? 0;\n const minVal = Math.floor(zoomStart * maxIndex / 100);\n const maxVal = Math.ceil(zoomEnd * maxIndex / 100);\n return function filterAxis(value, dataIndex) {\n const val = value[direction] ?? axisData?.[dataIndex];\n if (val == null) {\n // If the value does not exist because of missing data point, or out of range index, we just ignore.\n return true;\n }\n return dataIndex >= minVal && dataIndex < maxVal;\n };\n}\nexport function createContinuousScaleGetAxisFilter(domain, zoomStart, zoomEnd, direction, axisData) {\n const min = domain[0].valueOf();\n const max = domain[1].valueOf();\n const minVal = min + zoomStart * (max - min) / 100;\n const maxVal = min + zoomEnd * (max - min) / 100;\n return function filterAxis(value, dataIndex) {\n const val = value[direction] ?? axisData?.[dataIndex];\n if (val == null) {\n // If the value does not exist because of missing data point, or out of range index, we just ignore.\n return true;\n }\n return val >= minVal && val <= maxVal;\n };\n}\nexport const createGetAxisFilters = filters => ({\n currentAxisId,\n seriesXAxisId,\n seriesYAxisId,\n isDefaultAxis\n}) => {\n return (value, dataIndex) => {\n const axisId = currentAxisId === seriesXAxisId ? seriesYAxisId : seriesXAxisId;\n if (!axisId || isDefaultAxis) {\n return Object.values(filters ?? {})[0]?.(value, dataIndex) ?? true;\n }\n const data = [seriesYAxisId, seriesXAxisId].filter(id => id !== currentAxisId).map(id => filters[id ?? '']).filter(isDefined);\n return data.every(f => f(value, dataIndex));\n };\n};","import { defaultizeZoom } from \"./defaultizeZoom.js\";\nexport const createZoomLookup = axisDirection => (axes = []) => axes.reduce((acc, v) => {\n // @ts-ignore\n const {\n zoom,\n id: axisId,\n reverse\n } = v;\n const defaultizedZoom = defaultizeZoom(zoom, axisId, axisDirection, reverse);\n if (defaultizedZoom) {\n acc[axisId] = defaultizedZoom;\n }\n return acc;\n}, {});","import { isBandScaleConfig, isPointScaleConfig, isSymlogScaleConfig } from \"../../../../models/axis.js\";\nimport { getScale } from \"../../../getScale.js\";\nimport { scaleBand, scalePoint } from \"../../../scales/index.js\";\nconst DEFAULT_CATEGORY_GAP_RATIO = 0.2;\nexport function getRange(drawingArea, axisDirection, axis) {\n const range = axisDirection === 'x' ? [drawingArea.left, drawingArea.left + drawingArea.width] : [drawingArea.top + drawingArea.height, drawingArea.top];\n return axis.reverse ? [range[1], range[0]] : range;\n}\nexport function getNormalizedAxisScale(axis, domain) {\n const range = [0, 1];\n if (isBandScaleConfig(axis)) {\n const categoryGapRatio = axis.categoryGapRatio ?? DEFAULT_CATEGORY_GAP_RATIO;\n return scaleBand(domain, range).paddingInner(categoryGapRatio).paddingOuter(categoryGapRatio / 2);\n }\n if (isPointScaleConfig(axis)) {\n return scalePoint(domain, range);\n }\n const scaleType = axis.scaleType ?? 'linear';\n const scale = getScale(scaleType, domain, range);\n if (isSymlogScaleConfig(axis) && axis.constant != null) {\n scale.constant(axis.constant);\n }\n return scale;\n}","/**\n * Applies the zoom into the scale range.\n * It changes the screen coordinates that the scale covers.\n * Not the data that is displayed.\n *\n * @param scaleRange the original range in real screen coordinates.\n * @param zoomRange the zoom range in percentage.\n * @returns zoomed range in real screen coordinates.\n */\nexport const zoomScaleRange = (scaleRange, zoomRange) => {\n const rangeGap = scaleRange[1] - scaleRange[0];\n const zoomGap = zoomRange[1] - zoomRange[0];\n\n // If current zoom show the scale between p1 and p2 percents\n // The range should be extended by adding [0, p1] and [p2, 100] segments\n const min = scaleRange[0] - zoomRange[0] * rangeGap / zoomGap;\n const max = scaleRange[1] + (100 - zoomRange[1]) * rangeGap / zoomGap;\n return [min, max];\n};","import { isCartesianSeriesType } from \"../../../isCartesian.js\";\nconst axisExtremumCallback = (chartType, axis, axisDirection, seriesConfig, axisIndex, formattedSeries, getFilters) => {\n const getter = axisDirection === 'x' ? seriesConfig[chartType].xExtremumGetter : seriesConfig[chartType].yExtremumGetter;\n const series = formattedSeries[chartType]?.series ?? {};\n return getter?.({\n series,\n axis,\n axisIndex,\n isDefaultAxis: axisIndex === 0,\n getFilters\n }) ?? [Infinity, -Infinity];\n};\nexport function getAxisExtrema(axis, axisDirection, seriesConfig, axisIndex, formattedSeries, getFilters) {\n const cartesianChartTypes = Object.keys(seriesConfig).filter(isCartesianSeriesType);\n let extrema = [Infinity, -Infinity];\n for (const chartType of cartesianChartTypes) {\n const [min, max] = axisExtremumCallback(chartType, axis, axisDirection, seriesConfig, axisIndex, formattedSeries, getFilters);\n extrema = [Math.min(extrema[0], min), Math.max(extrema[1], max)];\n }\n if (Number.isNaN(extrema[0]) || Number.isNaN(extrema[1])) {\n return [Infinity, -Infinity];\n }\n return extrema;\n}","export const getAxisDomainLimit = (axis, axisDirection, axisIndex, formattedSeries) => {\n if (axis.domainLimit !== undefined) {\n return axis.domainLimit;\n }\n if (axisDirection === 'x') {\n for (const seriesId of formattedSeries.line?.seriesOrder ?? []) {\n const series = formattedSeries.line.series[seriesId];\n if (series.xAxisId === axis.id || series.xAxisId === undefined && axisIndex === 0) {\n return 'strict';\n }\n }\n }\n return 'nice';\n};","import { getScale } from \"../../../getScale.js\";\nimport { getAxisDomainLimit } from \"./getAxisDomainLimit.js\";\nimport { getTickNumber } from \"../../../ticks.js\";\nfunction niceDomain(scaleType, domain, tickNumber) {\n return getScale(scaleType ?? 'linear', domain, [0, 1]).nice(tickNumber).domain();\n}\n\n/**\n * Calculates the initial domain and tick number for a given axis.\n * The domain should still run through the zoom filterMode after this step.\n */\nexport function calculateInitialDomainAndTickNumber(axis, axisDirection, axisIndex, formattedSeries, [minData, maxData], defaultTickNumber, preferStrictDomainInLineCharts) {\n const domainLimit = getDomainLimit(axis, axisDirection, axisIndex, formattedSeries, preferStrictDomainInLineCharts);\n let axisExtrema = getActualAxisExtrema(axis, minData, maxData);\n if (typeof domainLimit === 'function') {\n const {\n min,\n max\n } = domainLimit(minData.valueOf(), maxData.valueOf());\n axisExtrema[0] = min;\n axisExtrema[1] = max;\n }\n const tickNumber = getTickNumber(axis, axisExtrema, defaultTickNumber);\n if (domainLimit === 'nice') {\n axisExtrema = niceDomain(axis.scaleType, axisExtrema, tickNumber);\n }\n axisExtrema = ['min' in axis ? axis.min ?? axisExtrema[0] : axisExtrema[0], 'max' in axis ? axis.max ?? axisExtrema[1] : axisExtrema[1]];\n return {\n domain: axisExtrema,\n tickNumber\n };\n}\n\n/**\n * Calculates the final domain for an axis.\n * After this step, the domain can be used to create the axis scale.\n */\nexport function calculateFinalDomain(axis, axisDirection, axisIndex, formattedSeries, [minData, maxData], tickNumber, preferStrictDomainInLineCharts) {\n const domainLimit = getDomainLimit(axis, axisDirection, axisIndex, formattedSeries, preferStrictDomainInLineCharts);\n let axisExtrema = getActualAxisExtrema(axis, minData, maxData);\n if (typeof domainLimit === 'function') {\n const {\n min,\n max\n } = domainLimit(minData.valueOf(), maxData.valueOf());\n axisExtrema[0] = min;\n axisExtrema[1] = max;\n }\n if (domainLimit === 'nice') {\n axisExtrema = niceDomain(axis.scaleType, axisExtrema, tickNumber);\n }\n return [axis.min ?? axisExtrema[0], axis.max ?? axisExtrema[1]];\n}\nfunction getDomainLimit(axis, axisDirection, axisIndex, formattedSeries, preferStrictDomainInLineCharts) {\n return preferStrictDomainInLineCharts ? getAxisDomainLimit(axis, axisDirection, axisIndex, formattedSeries) : axis.domainLimit ?? 'nice';\n}\n\n/**\n * Get the actual axis extrema considering the user defined min and max values.\n * @param axisExtrema User defined axis extrema.\n * @param minData Minimum value from the data.\n * @param maxData Maximum value from the data.\n */\nfunction getActualAxisExtrema(axisExtrema, minData, maxData) {\n let min = minData;\n let max = maxData;\n if ('max' in axisExtrema && axisExtrema.max != null && axisExtrema.max < minData) {\n min = axisExtrema.max;\n }\n if ('min' in axisExtrema && axisExtrema.min != null && axisExtrema.min > minData) {\n max = axisExtrema.min;\n }\n if (!('min' in axisExtrema) && !('max' in axisExtrema)) {\n return [min, max];\n }\n return [axisExtrema.min ?? min, axisExtrema.max ?? max];\n}","\n/** @template T */\nexport default class FlatQueue {\n\n constructor() {\n /** @type T[] */\n this.ids = [];\n\n /** @type number[] */\n this.values = [];\n\n /** Number of items in the queue. */\n this.length = 0;\n }\n\n /** Removes all items from the queue. */\n clear() {\n this.length = 0;\n }\n\n /**\n * Adds `item` to the queue with the specified `priority`.\n *\n * `priority` must be a number. Items are sorted and returned from low to high priority. Multiple items\n * with the same priority value can be added to the queue, but there is no guaranteed order between these items.\n *\n * @param {T} item\n * @param {number} priority\n */\n push(item, priority) {\n let pos = this.length++;\n\n while (pos > 0) {\n const parent = (pos - 1) >> 1;\n const parentValue = this.values[parent];\n if (priority >= parentValue) break;\n this.ids[pos] = this.ids[parent];\n this.values[pos] = parentValue;\n pos = parent;\n }\n\n this.ids[pos] = item;\n this.values[pos] = priority;\n }\n\n /**\n * Removes and returns the item from the head of this queue, which is one of\n * the items with the lowest priority. If this queue is empty, returns `undefined`.\n */\n pop() {\n if (this.length === 0) return undefined;\n\n const ids = this.ids,\n values = this.values,\n top = ids[0],\n last = --this.length;\n\n if (last > 0) {\n const id = ids[last];\n const value = values[last];\n let pos = 0;\n const halfLen = last >> 1;\n\n while (pos < halfLen) {\n const left = (pos << 1) + 1;\n const right = left + 1;\n const child = left + (+(right < last) & +(values[right] < values[left]));\n if (values[child] >= value) break;\n ids[pos] = ids[child];\n values[pos] = values[child];\n pos = child;\n }\n\n ids[pos] = id;\n values[pos] = value;\n }\n\n return top;\n }\n\n /** Returns the item from the head of this queue without removing it. If this queue is empty, returns `undefined`. */\n peek() {\n return this.length > 0 ? this.ids[0] : undefined;\n }\n\n /**\n * Returns the priority value of the item at the head of this queue without\n * removing it. If this queue is empty, returns `undefined`.\n */\n peekValue() {\n return this.length > 0 ? this.values[0] : undefined;\n }\n\n /**\n * Shrinks the internal arrays to `this.length`.\n *\n * `pop()` and `clear()` calls don't free memory automatically to avoid unnecessary resize operations.\n * This also means that items that have been added to the queue can't be garbage collected until\n * a new item is pushed in their place, or this method is called.\n */\n shrink() {\n this.ids.length = this.values.length = this.length;\n }\n}\n","// @ts-nocheck\n/* eslint-disable */\nimport FlatQueue from '@mui/x-charts-vendor/flatqueue';\nconst ARRAY_TYPES = [Int8Array, Uint8Array, Uint8ClampedArray, Int16Array, Uint16Array, Int32Array, Uint32Array, Float32Array, Float64Array];\nconst VERSION = 3; // serialized format version\n\nexport class Flatbush {\n /**\n * Recreate a Flatbush index from raw `ArrayBuffer` or `SharedArrayBuffer` data.\n * @param {ArrayBufferLike} data\n * @param {number} [byteOffset=0] byte offset to the start of the Flatbush buffer in the referenced ArrayBuffer.\n * @returns {Flatbush} index\n */\n static from(data, byteOffset = 0) {\n if (byteOffset % 8 !== 0) {\n throw new Error('byteOffset must be 8-byte aligned.');\n }\n\n // @ts-expect-error duck typing array buffers\n if (!data || data.byteLength === undefined || data.buffer) {\n throw new Error('Data must be an instance of ArrayBuffer or SharedArrayBuffer.');\n }\n const [magic, versionAndType] = new Uint8Array(data, byteOffset + 0, 2);\n if (magic !== 0xfb) {\n throw new Error('Data does not appear to be in a Flatbush format.');\n }\n const version = versionAndType >> 4;\n if (version !== VERSION) {\n throw new Error(`Got v${version} data when expected v${VERSION}.`);\n }\n const ArrayType = ARRAY_TYPES[versionAndType & 0x0f];\n if (!ArrayType) {\n throw new Error('Unrecognized array type.');\n }\n const [nodeSize] = new Uint16Array(data, byteOffset + 2, 1);\n const [numItems] = new Uint32Array(data, byteOffset + 4, 1);\n return new Flatbush(numItems, nodeSize, ArrayType, undefined, data, byteOffset);\n }\n\n /**\n * Create a Flatbush index that will hold a given number of items.\n * @param {number} numItems\n * @param {number} [nodeSize=16] Size of the tree node (16 by default).\n * @param {TypedArrayConstructor} [ArrayType=Float64Array] The array type used for coordinates storage (`Float64Array` by default).\n * @param {ArrayBufferConstructor | SharedArrayBufferConstructor} [ArrayBufferType=ArrayBuffer] The array buffer type used to store data (`ArrayBuffer` by default).\n * @param {ArrayBufferLike} [data] (Only used internally)\n * @param {number} [byteOffset=0] (Only used internally)\n */\n constructor(numItems, nodeSize = 16, ArrayType = Float64Array, ArrayBufferType = ArrayBuffer, data, byteOffset = 0) {\n if (numItems === undefined) {\n throw new Error('Missing required argument: numItems.');\n }\n if (isNaN(numItems) || numItems <= 0) {\n throw new Error(`Unexpected numItems value: ${numItems}.`);\n }\n this.numItems = +numItems;\n this.nodeSize = Math.min(Math.max(+nodeSize, 2), 65535);\n this.byteOffset = byteOffset;\n\n // calculate the total number of nodes in the R-tree to allocate space for\n // and the index of each tree level (used in search later)\n let n = numItems;\n let numNodes = n;\n this._levelBounds = [n * 4];\n do {\n n = Math.ceil(n / this.nodeSize);\n numNodes += n;\n this._levelBounds.push(numNodes * 4);\n } while (n !== 1);\n this.ArrayType = ArrayType;\n this.IndexArrayType = numNodes < 16384 ? Uint16Array : Uint32Array;\n const arrayTypeIndex = ARRAY_TYPES.indexOf(ArrayType);\n const nodesByteSize = numNodes * 4 * ArrayType.BYTES_PER_ELEMENT;\n if (arrayTypeIndex < 0) {\n throw new Error(`Unexpected typed array class: ${ArrayType}.`);\n }\n if (data) {\n this.data = data;\n this._boxes = new ArrayType(data, byteOffset + 8, numNodes * 4);\n this._indices = new this.IndexArrayType(data, byteOffset + 8 + nodesByteSize, numNodes);\n this._pos = numNodes * 4;\n this.minX = this._boxes[this._pos - 4];\n this.minY = this._boxes[this._pos - 3];\n this.maxX = this._boxes[this._pos - 2];\n this.maxY = this._boxes[this._pos - 1];\n } else {\n const data = this.data = new ArrayBufferType(8 + nodesByteSize + numNodes * this.IndexArrayType.BYTES_PER_ELEMENT);\n this._boxes = new ArrayType(data, 8, numNodes * 4);\n this._indices = new this.IndexArrayType(data, 8 + nodesByteSize, numNodes);\n this._pos = 0;\n this.minX = Infinity;\n this.minY = Infinity;\n this.maxX = -Infinity;\n this.maxY = -Infinity;\n new Uint8Array(data, 0, 2).set([0xfb, (VERSION << 4) + arrayTypeIndex]);\n new Uint16Array(data, 2, 1)[0] = nodeSize;\n new Uint32Array(data, 4, 1)[0] = numItems;\n }\n\n // a priority queue for k-nearest-neighbors queries\n /** @type FlatQueue<number> */\n this._queue = new FlatQueue();\n }\n\n /**\n * Add a given rectangle to the index.\n * @param {number} minX\n * @param {number} minY\n * @param {number} maxX\n * @param {number} maxY\n * @returns {number} A zero-based, incremental number that represents the newly added rectangle.\n */\n add(minX, minY, maxX = minX, maxY = minY) {\n const index = this._pos >> 2;\n const boxes = this._boxes;\n this._indices[index] = index;\n boxes[this._pos++] = minX;\n boxes[this._pos++] = minY;\n boxes[this._pos++] = maxX;\n boxes[this._pos++] = maxY;\n if (minX < this.minX) {\n this.minX = minX;\n }\n if (minY < this.minY) {\n this.minY = minY;\n }\n if (maxX > this.maxX) {\n this.maxX = maxX;\n }\n if (maxY > this.maxY) {\n this.maxY = maxY;\n }\n return index;\n }\n\n /** Perform indexing of the added rectangles. */\n finish() {\n if (this._pos >> 2 !== this.numItems) {\n throw new Error(`Added ${this._pos >> 2} items when expected ${this.numItems}.`);\n }\n const boxes = this._boxes;\n if (this.numItems <= this.nodeSize) {\n // only one node, skip sorting and just fill the root box\n boxes[this._pos++] = this.minX;\n boxes[this._pos++] = this.minY;\n boxes[this._pos++] = this.maxX;\n boxes[this._pos++] = this.maxY;\n return;\n }\n const width = this.maxX - this.minX || 1;\n const height = this.maxY - this.minY || 1;\n const hilbertValues = new Uint32Array(this.numItems);\n const hilbertMax = (1 << 16) - 1;\n\n // map item centers into Hilbert coordinate space and calculate Hilbert values\n for (let i = 0, pos = 0; i < this.numItems; i++) {\n const minX = boxes[pos++];\n const minY = boxes[pos++];\n const maxX = boxes[pos++];\n const maxY = boxes[pos++];\n const x = Math.floor(hilbertMax * ((minX + maxX) / 2 - this.minX) / width);\n const y = Math.floor(hilbertMax * ((minY + maxY) / 2 - this.minY) / height);\n hilbertValues[i] = hilbert(x, y);\n }\n\n // sort items by their Hilbert value (for packing later)\n sort(hilbertValues, boxes, this._indices, 0, this.numItems - 1, this.nodeSize);\n\n // generate nodes at each tree level, bottom-up\n for (let i = 0, pos = 0; i < this._levelBounds.length - 1; i++) {\n const end = this._levelBounds[i];\n\n // generate a parent node for each block of consecutive <nodeSize> nodes\n while (pos < end) {\n const nodeIndex = pos;\n\n // calculate bbox for the new node\n let nodeMinX = boxes[pos++];\n let nodeMinY = boxes[pos++];\n let nodeMaxX = boxes[pos++];\n let nodeMaxY = boxes[pos++];\n for (let j = 1; j < this.nodeSize && pos < end; j++) {\n nodeMinX = Math.min(nodeMinX, boxes[pos++]);\n nodeMinY = Math.min(nodeMinY, boxes[pos++]);\n nodeMaxX = Math.max(nodeMaxX, boxes[pos++]);\n nodeMaxY = Math.max(nodeMaxY, boxes[pos++]);\n }\n\n // add the new node to the tree data\n this._indices[this._pos >> 2] = nodeIndex;\n boxes[this._pos++] = nodeMinX;\n boxes[this._pos++] = nodeMinY;\n boxes[this._pos++] = nodeMaxX;\n boxes[this._pos++] = nodeMaxY;\n }\n }\n }\n\n /**\n * Search the index by a bounding box.\n * @param {number} minX\n * @param {number} minY\n * @param {number} maxX\n * @param {number} maxY\n * @param {(index: number) => boolean} [filterFn] An optional function for filtering the results.\n * @returns {number[]} An array containing the index, the x coordinate and the y coordinate of the points intersecting or touching the given bounding box.\n */\n search(minX, minY, maxX, maxY, filterFn) {\n if (this._pos !== this._boxes.length) {\n throw new Error('Data not yet indexed - call index.finish().');\n }\n\n /** @type number | undefined */\n let nodeIndex = this._boxes.length - 4;\n const queue = [];\n const results = [];\n while (nodeIndex !== undefined) {\n // find the end index of the node\n const end = Math.min(nodeIndex + this.nodeSize * 4, upperBound(nodeIndex, this._levelBounds));\n\n // search through child nodes\n for (let /** @type number */pos = nodeIndex; pos < end; pos += 4) {\n // check if node bbox intersects with query bbox\n if (maxX < this._boxes[pos]) {\n continue;\n } // maxX < nodeMinX\n if (maxY < this._boxes[pos + 1]) {\n continue;\n } // maxY < nodeMinY\n if (minX > this._boxes[pos + 2]) {\n continue;\n } // minX > nodeMaxX\n if (minY > this._boxes[pos + 3]) {\n continue;\n } // minY > nodeMaxY\n\n const index = this._indices[pos >> 2] | 0;\n if (nodeIndex >= this.numItems * 4) {\n queue.push(index); // node; add it to the search queue\n } else if (filterFn === undefined || filterFn(index)) {\n results.push(index);\n results.push(this._boxes[pos]); // leaf item\n results.push(this._boxes[pos + 1]);\n }\n }\n nodeIndex = queue.pop();\n }\n return results;\n }\n\n /**\n * Search items in order of distance from the given point.\n * @param x\n * @param y\n * @param [maxResults=Infinity]\n * @param maxDistSq\n * @param [filterFn] An optional function for filtering the results.\n * @param [sqDistFn] An optional function to calculate squared distance from the point to the item.\n * @returns {number[]} An array of indices of items found.\n */\n neighbors(x, y, maxResults = Infinity, maxDistSq = Infinity, filterFn, sqDistFn = sqDist) {\n if (this._pos !== this._boxes.length) {\n throw new Error('Data not yet indexed - call index.finish().');\n }\n\n /** @type number | undefined */\n let nodeIndex = this._boxes.length - 4;\n const q = this._queue;\n const results = [];\n\n /* eslint-disable no-labels */\n outer: while (nodeIndex !== undefined) {\n // find the end index of the node\n const end = Math.min(nodeIndex + this.nodeSize * 4, upperBound(nodeIndex, this._levelBounds));\n\n // add child nodes to the queue\n for (let pos = nodeIndex; pos < end; pos += 4) {\n const index = this._indices[pos >> 2] | 0;\n const minX = this._boxes[pos];\n const minY = this._boxes[pos + 1];\n const maxX = this._boxes[pos + 2];\n const maxY = this._boxes[pos + 3];\n const dx = x < minX ? minX - x : x > maxX ? x - maxX : 0;\n const dy = y < minY ? minY - y : y > maxY ? y - maxY : 0;\n const dist = sqDistFn(dx, dy);\n if (dist > maxDistSq) {\n continue;\n }\n if (nodeIndex >= this.numItems * 4) {\n q.push(index << 1, dist); // node (use even id)\n } else if (filterFn === undefined || filterFn(index)) {\n q.push((index << 1) + 1, dist); // leaf item (use odd id)\n }\n }\n\n // pop items from the queue\n // @ts-expect-error q.length check eliminates undefined values\n while (q.length && q.peek() & 1) {\n const dist = q.peekValue();\n\n // @ts-expect-error\n if (dist > maxDistSq) {\n break outer;\n }\n // @ts-expect-error\n results.push(q.pop() >> 1);\n if (results.length === maxResults) {\n break outer;\n }\n }\n\n // @ts-expect-error\n nodeIndex = q.length ? q.pop() >> 1 : undefined;\n }\n q.clear();\n return results;\n }\n}\nfunction sqDist(dx, dy) {\n return dx * dx + dy * dy;\n}\n\n/**\n * Binary search for the first value in the array bigger than the given.\n * @param {number} value\n * @param {number[]} arr\n */\nfunction upperBound(value, arr) {\n let i = 0;\n let j = arr.length - 1;\n while (i < j) {\n const m = i + j >> 1;\n if (arr[m] > value) {\n j = m;\n } else {\n i = m + 1;\n }\n }\n return arr[i];\n}\n\n/**\n * Custom quicksort that partially sorts bbox data alongside the hilbert values.\n * @param {Uint32Array} values\n * @param {InstanceType<TypedArrayConstructor>} boxes\n * @param {Uint16Array | Uint32Array} indices\n * @param {number} left\n * @param {number} right\n * @param {number} nodeSize\n */\nfunction sort(values, boxes, indices, left, right, nodeSize) {\n if (Math.floor(left / nodeSize) >= Math.floor(right / nodeSize)) {\n return;\n }\n\n // apply median of three method\n const start = values[left];\n const mid = values[left + right >> 1];\n const end = values[right];\n let pivot = end;\n const x = Math.max(start, mid);\n if (end > x) {\n pivot = x;\n } else if (x === start) {\n pivot = Math.max(mid, end);\n } else if (x === mid) {\n pivot = Math.max(start, end);\n }\n let i = left - 1;\n let j = right + 1;\n while (true) {\n do {\n i++;\n } while (values[i] < pivot);\n do {\n j--;\n } while (values[j] > pivot);\n if (i >= j) {\n break;\n }\n swap(values, boxes, indices, i, j);\n }\n sort(values, boxes, indices, left, j, nodeSize);\n sort(values, boxes, indices, j + 1, right, nodeSize);\n}\n\n/**\n * Swap two values and two corresponding boxes.\n * @param {Uint32Array} values\n * @param {InstanceType<TypedArrayConstructor>} boxes\n * @param {Uint16Array | Uint32Array} indices\n * @param {number} i\n * @param {number} j\n */\nfunction swap(values, boxes, indices, i, j) {\n const temp = values[i];\n values[i] = values[j];\n values[j] = temp;\n const k = 4 * i;\n const m = 4 * j;\n const a = boxes[k];\n const b = boxes[k + 1];\n const c = boxes[k + 2];\n const d = boxes[k + 3];\n boxes[k] = boxes[m];\n boxes[k + 1] = boxes[m + 1];\n boxes[k + 2] = boxes[m + 2];\n boxes[k + 3] = boxes[m + 3];\n boxes[m] = a;\n boxes[m + 1] = b;\n boxes[m + 2] = c;\n boxes[m + 3] = d;\n const e = indices[i];\n indices[i] = indices[j];\n indices[j] = e;\n}\n\n/**\n * Fast Hilbert curve algorithm by http://threadlocalmutex.com/\n * Ported from C++ https://github.com/rawrunprotected/hilbert_curves (public domain)\n * @param {number} x\n * @param {number} y\n */\nfunction hilbert(x, y) {\n let a = x ^ y;\n let b = 0xffff ^ a;\n let c = 0xffff ^ (x | y);\n let d = x & (y ^ 0xffff);\n let A = a | b >> 1;\n let B = a >> 1 ^ a;\n let C = c >> 1 ^ b & d >> 1 ^ c;\n let D = a & c >> 1 ^ d >> 1 ^ d;\n a = A;\n b = B;\n c = C;\n d = D;\n A = a & a >> 2 ^ b & b >> 2;\n B = a & b >> 2 ^ b & (a ^ b) >> 2;\n C ^= a & c >> 2 ^ b & d >> 2;\n D ^= b & c >> 2 ^ (a ^ b) & d >> 2;\n a = A;\n b = B;\n c = C;\n d = D;\n A = a & a >> 4 ^ b & b >> 4;\n B = a & b >> 4 ^ b & (a ^ b) >> 4;\n C ^= a & c >> 4 ^ b & d >> 4;\n D ^= b & c >> 4 ^ (a ^ b) & d >> 4;\n a = A;\n b = B;\n c = C;\n d = D;\n C ^= a & c >> 8 ^ b & d >> 8;\n D ^= b & c >> 8 ^ (a ^ b) & d >> 8;\n a = C ^ C >> 1;\n b = D ^ D >> 1;\n let i0 = x ^ y;\n let i1 = b | 0xffff ^ (i0 | a);\n i0 = (i0 | i0 << 8) & 0x00ff00ff;\n i0 = (i0 | i0 << 4) & 0x0f0f0f0f;\n i0 = (i0 | i0 << 2) & 0x33333333;\n i0 = (i0 | i0 << 1) & 0x55555555;\n i1 = (i1 | i1 << 8) & 0x00ff00ff;\n i1 = (i1 | i1 << 4) & 0x0f0f0f0f;\n i1 = (i1 | i1 << 2) & 0x33333333;\n i1 = (i1 | i1 << 1) & 0x55555555;\n return (i1 << 1 | i0) >>> 0;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport { createSelector, createSelectorMemoized } from '@mui/x-internals/store';\nimport { selectorChartDrawingArea } from \"../../corePlugins/useChartDimensions/index.js\";\nimport { selectorChartSeriesConfig, selectorChartSeriesProcessed } from \"../../corePlugins/useChartSeries/index.js\";\nimport { computeAxisValue } from \"./computeAxisValue.js\";\nimport { createContinuousScaleGetAxisFilter, createDiscreteScaleGetAxisFilter, createGetAxisFilters } from \"./createAxisFilterMapper.js\";\nimport { createZoomLookup } from \"./createZoomLookup.js\";\nimport { isBandScaleConfig, isPointScaleConfig } from \"../../../../models/axis.js\";\nimport { selectorChartRawXAxis, selectorChartRawYAxis } from \"./useChartCartesianAxisLayout.selectors.js\";\nimport { selectorPreferStrictDomainInLineCharts } from \"../../corePlugins/useChartExperimentalFeature/index.js\";\nimport { getDefaultTickNumber, getTickNumber } from \"../../../ticks.js\";\nimport { getNormalizedAxisScale, getRange } from \"./getAxisScale.js\";\nimport { isOrdinalScale } from \"../../../scaleGuards.js\";\nimport { zoomScaleRange } from \"./zoom.js\";\nimport { getAxisExtrema } from \"./getAxisExtrema.js\";\nimport { calculateFinalDomain, calculateInitialDomainAndTickNumber } from \"./domain.js\";\nimport { Flatbush } from \"../../../Flatbush.js\";\nexport const createZoomMap = zoom => {\n const zoomItemMap = new Map();\n zoom.forEach(zoomItem => {\n zoomItemMap.set(zoomItem.axisId, zoomItem);\n });\n return zoomItemMap;\n};\nconst selectorChartZoomState = state => state.zoom;\nexport const selectorChartHasZoom = createSelector(selectorChartRawXAxis, selectorChartRawYAxis, (xAxes, yAxes) => xAxes?.some(axis => Boolean(axis.zoom)) || yAxes?.some(axis => Boolean(axis.zoom)) || false);\n\n/**\n * Following selectors are not exported because they exist in the MIT chart only to ba able to reuse the Zoom state from the pro.\n */\n\nexport const selectorChartZoomIsInteracting = createSelector(selectorChartZoomState, zoom => zoom?.isInteracting);\nexport const selectorChartZoomMap = createSelectorMemoized(selectorChartZoomState, function selectorChartZoomMap(zoom) {\n return zoom?.zoomData && createZoomMap(zoom?.zoomData);\n});\nexport const selectorChartAxisZoomData = createSelector(selectorChartZoomMap, (zoomMap, axisId) => zoomMap?.get(axisId));\nexport const selectorChartZoomOptionsLookup = createSelectorMemoized(selectorChartRawXAxis, selectorChartRawYAxis, function selectorChartZoomOptionsLookup(xAxis, yAxis) {\n return _extends({}, createZoomLookup('x')(xAxis), createZoomLookup('y')(yAxis));\n});\nexport const selectorChartAxisZoomOptionsLookup = createSelector(selectorChartZoomOptionsLookup, (axisLookup, axisId) => axisLookup[axisId]);\nexport const selectorDefaultXAxisTickNumber = createSelector(selectorChartDrawingArea, function selectorDefaultXAxisTickNumber(drawingArea) {\n return getDefaultTickNumber(drawingArea.width);\n});\nexport const selectorDefaultYAxisTickNumber = createSelector(selectorChartDrawingArea, function selectorDefaultYAxisTickNumber(drawingArea) {\n return getDefaultTickNumber(drawingArea.height);\n});\nexport const selectorChartXAxisWithDomains = createSelectorMemoized(selectorChartRawXAxis, selectorChartSeriesProcessed, selectorChartSeriesConfig, selectorPreferStrictDomainInLineCharts, selectorDefaultXAxisTickNumber, function selectorChartXAxisWithDomains(axes, formattedSeries, seriesConfig, preferStrictDomainInLineCharts, defaultTickNumber) {\n const axisDirection = 'x';\n const domains = {};\n axes?.forEach((eachAxis, axisIndex) => {\n const axis = eachAxis;\n if (isBandScaleConfig(axis) || isPointScaleConfig(axis)) {\n domains[axis.id] = {\n domain: axis.data\n };\n if (axis.ordinalTimeTicks !== undefined) {\n domains[axis.id].tickNumber = getTickNumber(axis, [axis.data?.find(d => d !== null), axis.data?.findLast(d => d !== null)], defaultTickNumber);\n }\n return;\n }\n const axisExtrema = getAxisExtrema(axis, axisDirection, seriesConfig, axisIndex, formattedSeries);\n domains[axis.id] = calculateInitialDomainAndTickNumber(axis, 'x', axisIndex, formattedSeries, axisExtrema, defaultTickNumber, preferStrictDomainInLineCharts);\n });\n return {\n axes,\n domains\n };\n});\nexport const selectorChartYAxisWithDomains = createSelectorMemoized(selectorChartRawYAxis, selectorChartSeriesProcessed, selectorChartSeriesConfig, selectorPreferStrictDomainInLineCharts, selectorDefaultYAxisTickNumber, function selectorChartYAxisWithDomains(axes, formattedSeries, seriesConfig, preferStrictDomainInLineCharts, defaultTickNumber) {\n const axisDirection = 'y';\n const domains = {};\n axes?.forEach((eachAxis, axisIndex) => {\n const axis = eachAxis;\n if (isBandScaleConfig(axis) || isPointScaleConfig(axis)) {\n domains[axis.id] = {\n domain: axis.data\n };\n if (axis.ordinalTimeTicks !== undefined) {\n domains[axis.id].tickNumber = getTickNumber(axis, [axis.data?.find(d => d !== null), axis.data?.findLast(d => d !== null)], defaultTickNumber);\n }\n return;\n }\n const axisExtrema = getAxisExtrema(axis, axisDirection, seriesConfig, axisIndex, formattedSeries);\n domains[axis.id] = calculateInitialDomainAndTickNumber(axis, 'y', axisIndex, formattedSeries, axisExtrema, defaultTickNumber, preferStrictDomainInLineCharts);\n });\n return {\n axes,\n domains\n };\n});\nexport const selectorChartZoomAxisFilters = createSelectorMemoized(selectorChartZoomMap, selectorChartZoomOptionsLookup, selectorChartXAxisWithDomains, selectorChartYAxisWithDomains, function selectorChartZoomAxisFilters(zoomMap, zoomOptions, {\n axes: xAxis,\n domains: xDomains\n}, {\n axes: yAxis,\n domains: yDomains\n}) {\n if (!zoomMap || !zoomOptions) {\n return undefined;\n }\n let hasFilter = false;\n const filters = {};\n const axes = [...(xAxis ?? []), ...(yAxis ?? [])];\n for (let i = 0; i < axes.length; i += 1) {\n const axis = axes[i];\n if (!zoomOptions[axis.id] || zoomOptions[axis.id].filterMode !== 'discard') {\n continue;\n }\n const zoom = zoomMap.get(axis.id);\n if (zoom === undefined || zoom.start <= 0 && zoom.end >= 100) {\n // No zoom, or zoom with all data visible\n continue;\n }\n const axisDirection = i < (xAxis?.length ?? 0) ? 'x' : 'y';\n if (axis.scaleType === 'band' || axis.scaleType === 'point') {\n filters[axis.id] = createDiscreteScaleGetAxisFilter(axis.data, zoom.start, zoom.end, axisDirection);\n } else {\n const {\n domain\n } = axisDirection === 'x' ? xDomains[axis.id] : yDomains[axis.id];\n filters[axis.id] = createContinuousScaleGetAxisFilter(\n // For continuous scales, the domain is always a two-value array.\n domain, zoom.start, zoom.end, axisDirection, axis.data);\n }\n hasFilter = true;\n }\n if (!hasFilter) {\n return undefined;\n }\n return createGetAxisFilters(filters);\n});\nexport const selectorChartFilteredXDomains = createSelectorMemoized(selectorChartSeriesProcessed, selectorChartSeriesConfig, selectorChartZoomMap, selectorChartZoomOptionsLookup, selectorChartZoomAxisFilters, selectorPreferStrictDomainInLineCharts, selectorChartXAxisWithDomains, function selectorChartFilteredXDomains(formattedSeries, seriesConfig, zoomMap, zoomOptions, getFilters, preferStrictDomainInLineCharts, {\n axes,\n domains\n}) {\n const filteredDomains = {};\n axes?.forEach((axis, axisIndex) => {\n const domain = domains[axis.id].domain;\n if (isBandScaleConfig(axis) || isPointScaleConfig(axis)) {\n filteredDomains[axis.id] = domain;\n return;\n }\n const zoom = zoomMap?.get(axis.id);\n const zoomOption = zoomOptions?.[axis.id];\n const filter = zoom === undefined && !zoomOption ? getFilters : undefined; // Do not apply filtering if zoom is already defined.\n\n if (!filter) {\n filteredDomains[axis.id] = domain;\n return;\n }\n const rawTickNumber = domains[axis.id].tickNumber;\n const axisExtrema = getAxisExtrema(axis, 'x', seriesConfig, axisIndex, formattedSeries, filter);\n filteredDomains[axis.id] = calculateFinalDomain(axis, 'x', axisIndex, formattedSeries, axisExtrema, rawTickNumber, preferStrictDomainInLineCharts);\n });\n return filteredDomains;\n});\nexport const selectorChartFilteredYDomains = createSelectorMemoized(selectorChartSeriesProcessed, selectorChartSeriesConfig, selectorChartZoomMap, selectorChartZoomOptionsLookup, selectorChartZoomAxisFilters, selectorPreferStrictDomainInLineCharts, selectorChartYAxisWithDomains, function selectorChartFilteredYDomains(formattedSeries, seriesConfig, zoomMap, zoomOptions, getFilters, preferStrictDomainInLineCharts, {\n axes,\n domains\n}) {\n const filteredDomains = {};\n axes?.forEach((axis, axisIndex) => {\n const domain = domains[axis.id].domain;\n if (isBandScaleConfig(axis) || isPointScaleConfig(axis)) {\n filteredDomains[axis.id] = domain;\n return;\n }\n const zoom = zoomMap?.get(axis.id);\n const zoomOption = zoomOptions?.[axis.id];\n const filter = zoom === undefined && !zoomOption ? getFilters : undefined; // Do not apply filtering if zoom is already defined.\n\n if (!filter) {\n filteredDomains[axis.id] = domain;\n return;\n }\n const rawTickNumber = domains[axis.id].tickNumber;\n const axisExtrema = getAxisExtrema(axis, 'y', seriesConfig, axisIndex, formattedSeries, filter);\n filteredDomains[axis.id] = calculateFinalDomain(axis, 'y', axisIndex, formattedSeries, axisExtrema, rawTickNumber, preferStrictDomainInLineCharts);\n });\n return filteredDomains;\n});\nexport const selectorChartNormalizedXScales = createSelectorMemoized(selectorChartRawXAxis, selectorChartFilteredXDomains, function selectorChartNormalizedXScales(axes, filteredDomains) {\n const scales = {};\n axes?.forEach(eachAxis => {\n const axis = eachAxis;\n const domain = filteredDomains[axis.id];\n scales[axis.id] = getNormalizedAxisScale(axis, domain);\n });\n return scales;\n});\nexport const selectorChartNormalizedYScales = createSelectorMemoized(selectorChartRawYAxis, selectorChartFilteredYDomains, function selectorChartNormalizedYScales(axes, filteredDomains) {\n const scales = {};\n axes?.forEach(eachAxis => {\n const axis = eachAxis;\n const domain = filteredDomains[axis.id];\n scales[axis.id] = getNormalizedAxisScale(axis, domain);\n });\n return scales;\n});\nexport const selectorChartXScales = createSelectorMemoized(selectorChartRawXAxis, selectorChartNormalizedXScales, selectorChartDrawingArea, selectorChartZoomMap, function selectorChartXScales(axes, normalizedScales, drawingArea, zoomMap) {\n const scales = {};\n axes?.forEach(eachAxis => {\n const axis = eachAxis;\n const zoom = zoomMap?.get(axis.id);\n const zoomRange = zoom ? [zoom.start, zoom.end] : [0, 100];\n const range = getRange(drawingArea, 'x', axis);\n const scale = normalizedScales[axis.id].copy();\n const zoomedRange = zoomScaleRange(range, zoomRange);\n scale.range(zoomedRange);\n scales[axis.id] = scale;\n });\n return scales;\n});\nexport const selectorChartYScales = createSelectorMemoized(selectorChartRawYAxis, selectorChartNormalizedYScales, selectorChartDrawingArea, selectorChartZoomMap, function selectorChartYScales(axes, normalizedScales, drawingArea, zoomMap) {\n const scales = {};\n axes?.forEach(eachAxis => {\n const axis = eachAxis;\n const zoom = zoomMap?.get(axis.id);\n const zoomRange = zoom ? [zoom.start, zoom.end] : [0, 100];\n const range = getRange(drawingArea, 'y', axis);\n const scale = normalizedScales[axis.id].copy();\n const scaleRange = isOrdinalScale(scale) ? range.reverse() : range;\n const zoomedRange = zoomScaleRange(scaleRange, zoomRange);\n scale.range(zoomedRange);\n scales[axis.id] = scale;\n });\n return scales;\n});\n\n/**\n * The only interesting selectors that merge axis data and zoom if provided.\n */\n\nexport const selectorChartXAxis = createSelectorMemoized(selectorChartDrawingArea, selectorChartSeriesProcessed, selectorChartSeriesConfig, selectorChartZoomMap, selectorChartXAxisWithDomains, selectorChartXScales, function selectorChartXAxis(drawingArea, formattedSeries, seriesConfig, zoomMap, {\n axes,\n domains\n}, scales) {\n return computeAxisValue({\n scales,\n drawingArea,\n formattedSeries,\n axis: axes,\n seriesConfig,\n axisDirection: 'x',\n zoomMap,\n domains\n });\n});\nexport const selectorChartYAxis = createSelectorMemoized(selectorChartDrawingArea, selectorChartSeriesProcessed, selectorChartSeriesConfig, selectorChartZoomMap, selectorChartYAxisWithDomains, selectorChartYScales, function selectorChartYAxis(drawingArea, formattedSeries, seriesConfig, zoomMap, {\n axes,\n domains\n}, scales) {\n return computeAxisValue({\n scales,\n drawingArea,\n formattedSeries,\n axis: axes,\n seriesConfig,\n axisDirection: 'y',\n zoomMap,\n domains\n });\n});\nexport const selectorChartAxis = createSelector(selectorChartXAxis, selectorChartYAxis, (xAxes, yAxes, axisId) => xAxes?.axis[axisId] ?? yAxes?.axis[axisId]);\nexport const selectorChartRawAxis = createSelector(selectorChartRawXAxis, selectorChartRawYAxis, (xAxes, yAxes, axisId) => {\n const axis = xAxes?.find(a => a.id === axisId) ?? yAxes?.find(a => a.id === axisId) ?? null;\n if (!axis) {\n return undefined;\n }\n return axis;\n});\nexport const selectorChartDefaultXAxisId = createSelector(selectorChartRawXAxis, xAxes => xAxes[0].id);\nexport const selectorChartDefaultYAxisId = createSelector(selectorChartRawYAxis, yAxes => yAxes[0].id);\nconst EMPTY_MAP = new Map();\nexport const selectorChartSeriesEmptyFlatbushMap = () => EMPTY_MAP;\nexport const selectorChartSeriesFlatbushMap = createSelectorMemoized(selectorChartSeriesProcessed, selectorChartNormalizedXScales, selectorChartNormalizedYScales, selectorChartDefaultXAxisId, selectorChartDefaultYAxisId, function selectChartSeriesFlatbushMap(allSeries, xAxesScaleMap, yAxesScaleMap, defaultXAxisId, defaultYAxisId) {\n // FIXME: Do we want to support non-scatter series here?\n const validSeries = allSeries.scatter;\n const flatbushMap = new Map();\n if (!validSeries) {\n return flatbushMap;\n }\n validSeries.seriesOrder.forEach(seriesId => {\n const {\n data,\n xAxisId = defaultXAxisId,\n yAxisId = defaultYAxisId\n } = validSeries.series[seriesId];\n const flatbush = new Flatbush(data.length);\n const originalXScale = xAxesScaleMap[xAxisId];\n const originalYScale = yAxesScaleMap[yAxisId];\n for (const datum of data) {\n // Add the points using a [0, 1] range so that we don't need to recreate the Flatbush structure when zooming.\n // This doesn't happen in practice, though, because currently the scales depend on the drawing area.\n flatbush.add(originalXScale(datum.x), originalYScale(datum.y));\n }\n flatbush.finish();\n flatbushMap.set(seriesId, flatbush);\n });\n return flatbushMap;\n});","import { isOrdinalScale } from \"../../../scaleGuards.js\";\nfunction getAsANumber(value) {\n return value instanceof Date ? value.getTime() : value;\n}\n\n/**\n * For a pointer coordinate, this function returns the dataIndex associated.\n * Returns `-1` if no dataIndex matches.\n */\nexport function getAxisIndex(axisConfig, pointerValue) {\n const {\n scale,\n data: axisData,\n reverse\n } = axisConfig;\n if (!isOrdinalScale(scale)) {\n const value = scale.invert(pointerValue);\n if (axisData === undefined) {\n return -1;\n }\n const valueAsNumber = getAsANumber(value);\n const closestIndex = axisData?.findIndex((pointValue, index) => {\n const v = getAsANumber(pointValue);\n if (v > valueAsNumber) {\n if (index === 0 || Math.abs(valueAsNumber - v) <= Math.abs(valueAsNumber - getAsANumber(axisData[index - 1]))) {\n return true;\n }\n }\n if (v <= valueAsNumber) {\n if (index === axisData.length - 1 || Math.abs(getAsANumber(value) - v) < Math.abs(getAsANumber(value) - getAsANumber(axisData[index + 1]))) {\n return true;\n }\n }\n return false;\n });\n return closestIndex;\n }\n const dataIndex = scale.bandwidth() === 0 ? Math.floor((pointerValue - Math.min(...scale.range()) + scale.step() / 2) / scale.step()) : Math.floor((pointerValue - Math.min(...scale.range())) / scale.step());\n if (dataIndex < 0 || dataIndex >= axisData.length) {\n return -1;\n }\n return reverse ? axisData.length - 1 - dataIndex : dataIndex;\n}\n\n/**\n * For a pointer coordinate, this function returns the value associated.\n * Returns `null` if the coordinate has no value associated.\n */\nexport function getAxisValue(scale, axisData, pointerValue, dataIndex) {\n if (!isOrdinalScale(scale)) {\n if (dataIndex === null) {\n const invertedValue = scale.invert(pointerValue);\n return Number.isNaN(invertedValue) ? null : invertedValue;\n }\n return axisData[dataIndex];\n }\n if (dataIndex === null || dataIndex < 0 || dataIndex >= axisData.length) {\n return null;\n }\n return axisData[dataIndex];\n}","/**\n * Transform mouse event position to coordinates inside the SVG.\n * @param svg The SVG element\n * @param event The mouseEvent to transform\n */\nexport function getSVGPoint(svg, event) {\n const pt = svg.createSVGPoint();\n pt.x = event.clientX;\n pt.y = event.clientY;\n return pt.matrixTransform(svg.getScreenCTM().inverse());\n}","'use client';\n\nimport * as React from 'react';\nimport useEnhancedEffect from \"../useEnhancedEffect/index.js\";\n\n/**\n * Inspired by https://github.com/facebook/react/issues/14099#issuecomment-440013892\n * See RFC in https://github.com/reactjs/rfcs/pull/220\n */\n\nfunction useEventCallback(fn) {\n const ref = React.useRef(fn);\n useEnhancedEffect(() => {\n ref.current = fn;\n });\n return React.useRef((...args) =>\n // @ts-expect-error hide `this`\n (0, ref.current)(...args)).current;\n}\nexport default useEventCallback;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport useEventCallback from '@mui/utils/useEventCallback';\nexport const useChartInteraction = ({\n store\n}) => {\n const cleanInteraction = useEventCallback(function cleanInteraction() {\n store.update({\n interaction: _extends({}, store.state.interaction, {\n pointer: null\n })\n });\n });\n const setLastUpdateSource = useEventCallback(function setLastUpdateSource(interaction) {\n if (store.state.interaction.lastUpdate !== interaction) {\n store.set('interaction', _extends({}, store.state.interaction, {\n lastUpdate: interaction\n }));\n }\n });\n const setPointerCoordinate = useEventCallback(function setPointerCoordinate(coordinate) {\n store.set('interaction', _extends({}, store.state.interaction, {\n pointer: coordinate,\n lastUpdate: coordinate !== null ? 'pointer' : store.state.interaction.lastUpdate\n }));\n });\n return {\n instance: {\n cleanInteraction,\n setLastUpdateSource,\n setPointerCoordinate\n }\n };\n};\nuseChartInteraction.getInitialState = () => ({\n interaction: {\n item: null,\n pointer: null,\n lastUpdate: 'pointer'\n }\n});\nuseChartInteraction.params = {};","import { createSelector } from '@mui/x-internals/store';\nconst selectInteraction = state => state.interaction;\nexport const selectorChartsInteractionIsInitialized = createSelector(selectInteraction, interaction => interaction !== undefined);\nexport const selectorChartsInteractionPointer = createSelector(selectInteraction, interaction => interaction?.pointer ?? null);\nexport const selectorChartsInteractionPointerX = createSelector(selectorChartsInteractionPointer, pointer => pointer && pointer.x);\nexport const selectorChartsInteractionPointerY = createSelector(selectorChartsInteractionPointer, pointer => pointer && pointer.y);\nexport const selectorChartsLastInteraction = createSelector(selectInteraction, interaction => interaction?.lastUpdate);","/**\n * Based on `fast-deep-equal`\n *\n * MIT License\n *\n * Copyright (c) 2017 Evgeny Poberezkin\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n/**\n * Check if two values are deeply equal.\n */\n\nexport function isDeepEqual(a, b) {\n if (a === b) {\n return true;\n }\n if (a && b && typeof a === 'object' && typeof b === 'object') {\n if (a.constructor !== b.constructor) {\n return false;\n }\n if (Array.isArray(a)) {\n const length = a.length;\n if (length !== b.length) {\n return false;\n }\n for (let i = 0; i < length; i += 1) {\n if (!isDeepEqual(a[i], b[i])) {\n return false;\n }\n }\n return true;\n }\n if (a instanceof Map && b instanceof Map) {\n if (a.size !== b.size) {\n return false;\n }\n const entriesA = Array.from(a.entries());\n for (let i = 0; i < entriesA.length; i += 1) {\n if (!b.has(entriesA[i][0])) {\n return false;\n }\n }\n for (let i = 0; i < entriesA.length; i += 1) {\n const entryA = entriesA[i];\n if (!isDeepEqual(entryA[1], b.get(entryA[0]))) {\n return false;\n }\n }\n return true;\n }\n if (a instanceof Set && b instanceof Set) {\n if (a.size !== b.size) {\n return false;\n }\n const entries = Array.from(a.entries());\n for (let i = 0; i < entries.length; i += 1) {\n if (!b.has(entries[i][0])) {\n return false;\n }\n }\n return true;\n }\n if (ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {\n const length = a.length;\n if (length !== b.length) {\n return false;\n }\n for (let i = 0; i < length; i += 1) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n }\n if (a.constructor === RegExp) {\n return a.source === b.source && a.flags === b.flags;\n }\n if (a.valueOf !== Object.prototype.valueOf) {\n return a.valueOf() === b.valueOf();\n }\n if (a.toString !== Object.prototype.toString) {\n return a.toString() === b.toString();\n }\n const keys = Object.keys(a);\n const length = keys.length;\n if (length !== Object.keys(b).length) {\n return false;\n }\n for (let i = 0; i < length; i += 1) {\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) {\n return false;\n }\n }\n for (let i = 0; i < length; i += 1) {\n const key = keys[i];\n if (!isDeepEqual(a[key], b[key])) {\n return false;\n }\n }\n return true;\n }\n\n // true if both NaN, false otherwise\n // eslint-disable-next-line no-self-compare\n return a !== a && b !== b;\n}","import { isDeepEqual } from '@mui/x-internals/isDeepEqual';\nimport { createSelector, createSelectorMemoizedWithOptions } from '@mui/x-internals/store';\nimport { selectorChartsInteractionPointerX, selectorChartsInteractionPointerY } from \"../useChartInteraction/useChartInteraction.selectors.js\";\nimport { getAxisIndex, getAxisValue } from \"./getAxisValue.js\";\nimport { selectorChartXAxis, selectorChartYAxis } from \"./useChartCartesianAxisRendering.selectors.js\";\n\n/**\n * Get interaction indexes\n */\n\nfunction indexGetter(value, axes, ids = axes.axisIds[0]) {\n return Array.isArray(ids) ? ids.map(id => getAxisIndex(axes.axis[id], value)) : getAxisIndex(axes.axis[ids], value);\n}\nexport const selectChartsInteractionAxisIndex = (value, axes, id) => {\n if (value === null) {\n return null;\n }\n const index = indexGetter(value, axes, id);\n return index === -1 ? null : index;\n};\nexport const selectorChartsInteractionXAxisIndex = createSelector(selectorChartsInteractionPointerX, selectorChartXAxis, selectChartsInteractionAxisIndex);\nexport const selectorChartsInteractionYAxisIndex = createSelector(selectorChartsInteractionPointerY, selectorChartYAxis, selectChartsInteractionAxisIndex);\nexport const selectorChartAxisInteraction = createSelector(selectorChartsInteractionPointerX, selectorChartsInteractionPointerY, selectorChartXAxis, selectorChartYAxis, (x, y, xAxis, yAxis) => [...(x === null ? [] : xAxis.axisIds.map(axisId => ({\n axisId,\n dataIndex: indexGetter(x, xAxis, axisId)\n}))), ...(y === null ? [] : yAxis.axisIds.map(axisId => ({\n axisId,\n dataIndex: indexGetter(y, yAxis, axisId)\n})))].filter(item => item.dataIndex !== null && item.dataIndex >= 0));\n\n/**\n * Get interaction values\n */\n\nfunction valueGetter(value, axes, indexes, ids = axes.axisIds[0]) {\n return Array.isArray(ids) ? ids.map((id, axisIndex) => {\n const axis = axes.axis[id];\n return getAxisValue(axis.scale, axis.data, value, indexes[axisIndex]);\n }) : getAxisValue(axes.axis[ids].scale, axes.axis[ids].data, value, indexes);\n}\nexport const selectorChartsInteractionXAxisValue = createSelector(selectorChartsInteractionPointerX, selectorChartXAxis, selectorChartsInteractionXAxisIndex, (x, xAxes, xIndex, id) => {\n if (x === null || xAxes.axisIds.length === 0) {\n return null;\n }\n return valueGetter(x, xAxes, xIndex, id);\n});\nexport const selectorChartsInteractionYAxisValue = createSelector(selectorChartsInteractionPointerY, selectorChartYAxis, selectorChartsInteractionYAxisIndex, (y, yAxes, yIndex, id) => {\n if (y === null || yAxes.axisIds.length === 0) {\n return null;\n }\n return valueGetter(y, yAxes, yIndex, id);\n});\nconst EMPTY_ARRAY = [];\n\n/**\n * Get x-axis ids and corresponding data index that should be display in the tooltip.\n */\nexport const selectorChartsInteractionTooltipXAxes = createSelectorMemoizedWithOptions({\n memoizeOptions: {\n // Keep the same reference if array content is the same.\n // If possible, avoid this pattern by creating selectors that\n // uses string/number as arguments.\n resultEqualityCheck: isDeepEqual\n }\n})(selectorChartsInteractionPointerX, selectorChartXAxis, (value, axes) => {\n if (value === null) {\n return EMPTY_ARRAY;\n }\n return axes.axisIds.filter(id => axes.axis[id].triggerTooltip).map(axisId => ({\n axisId,\n dataIndex: getAxisIndex(axes.axis[axisId], value)\n })).filter(({\n dataIndex\n }) => dataIndex >= 0);\n});\n\n/**\n * Get y-axis ids and corresponding data index that should be display in the tooltip.\n */\nexport const selectorChartsInteractionTooltipYAxes = createSelectorMemoizedWithOptions({\n memoizeOptions: {\n // Keep the same reference if array content is the same.\n // If possible, avoid this pattern by creating selectors that\n // uses string/number as arguments.\n resultEqualityCheck: isDeepEqual\n }\n})(selectorChartsInteractionPointerY, selectorChartYAxis, (value, axes) => {\n if (value === null) {\n return EMPTY_ARRAY;\n }\n return axes.axisIds.filter(id => axes.axis[id].triggerTooltip).map(axisId => ({\n axisId,\n dataIndex: getAxisIndex(axes.axis[axisId], value)\n })).filter(({\n dataIndex\n }) => dataIndex >= 0);\n});\n\n/**\n * Return `true` if the axis tooltip has something to display.\n */\nexport const selectorChartsInteractionAxisTooltip = createSelector(selectorChartsInteractionTooltipXAxes, selectorChartsInteractionTooltipYAxes, (xTooltip, yTooltip) => xTooltip.length > 0 || yTooltip.length > 0);","export function checkHasInteractionPlugin(instance) {\n return instance.setPointerCoordinate !== undefined;\n}","'use client';\n\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport useEnhancedEffect from '@mui/utils/useEnhancedEffect';\nimport { useStoreEffect } from '@mui/x-internals/store';\nimport { useAssertModelConsistency } from '@mui/x-internals/useAssertModelConsistency';\nimport { warnOnce } from '@mui/x-internals/warning';\nimport { rainbowSurgePalette } from \"../../../../colorPalettes/index.js\";\nimport { useSelector } from \"../../../store/useSelector.js\";\nimport { selectorChartDrawingArea } from \"../../corePlugins/useChartDimensions/useChartDimensions.selectors.js\";\nimport { selectorChartSeriesProcessed } from \"../../corePlugins/useChartSeries/useChartSeries.selectors.js\";\nimport { defaultizeXAxis, defaultizeYAxis } from \"./defaultizeAxis.js\";\nimport { selectorChartXAxis, selectorChartYAxis } from \"./useChartCartesianAxisRendering.selectors.js\";\nimport { getAxisIndex } from \"./getAxisValue.js\";\nimport { getSVGPoint } from \"../../../getSVGPoint.js\";\nimport { selectorChartsInteractionIsInitialized } from \"../useChartInteraction/index.js\";\nimport { selectorChartAxisInteraction } from \"./useChartCartesianInteraction.selectors.js\";\nimport { checkHasInteractionPlugin } from \"../useChartInteraction/checkHasInteractionPlugin.js\";\nexport const useChartCartesianAxis = ({\n params,\n store,\n seriesConfig,\n svgRef,\n instance\n}) => {\n const {\n xAxis,\n yAxis,\n dataset,\n onHighlightedAxisChange\n } = params;\n if (process.env.NODE_ENV !== 'production') {\n const ids = [...(xAxis ?? []), ...(yAxis ?? [])].filter(axis => axis.id).map(axis => axis.id);\n const duplicates = new Set(ids.filter((id, index) => ids.indexOf(id) !== index));\n if (duplicates.size > 0) {\n warnOnce([`MUI X Charts: The following axis ids are duplicated: ${Array.from(duplicates).join(', ')}.`, `Please make sure that each axis has a unique id.`].join('\\n'), 'error');\n }\n }\n const drawingArea = useSelector(store, selectorChartDrawingArea);\n const processedSeries = useSelector(store, selectorChartSeriesProcessed);\n const isInteractionEnabled = useSelector(store, selectorChartsInteractionIsInitialized);\n const {\n axis: xAxisWithScale,\n axisIds: xAxisIds\n } = useSelector(store, selectorChartXAxis);\n const {\n axis: yAxisWithScale,\n axisIds: yAxisIds\n } = useSelector(store, selectorChartYAxis);\n useAssertModelConsistency({\n warningPrefix: 'MUI X Charts',\n componentName: 'Chart',\n propName: 'highlightedAxis',\n controlled: params.highlightedAxis,\n defaultValue: undefined\n });\n useEnhancedEffect(() => {\n if (params.highlightedAxis !== undefined) {\n store.set('controlledCartesianAxisHighlight', params.highlightedAxis);\n }\n }, [store, params.highlightedAxis]);\n\n // The effect do not track any value defined synchronously during the 1st render by hooks called after `useChartCartesianAxis`\n // As a consequence, the state generated by the 1st run of this useEffect will always be equal to the initialization one\n const isFirstRender = React.useRef(true);\n React.useEffect(() => {\n if (isFirstRender.current) {\n isFirstRender.current = false;\n return;\n }\n store.set('cartesianAxis', {\n x: defaultizeXAxis(xAxis, dataset),\n y: defaultizeYAxis(yAxis, dataset)\n });\n }, [seriesConfig, drawingArea, xAxis, yAxis, dataset, store]);\n const usedXAxis = xAxisIds[0];\n const usedYAxis = yAxisIds[0];\n useStoreEffect(store, selectorChartAxisInteraction, (prevAxisInteraction, nextAxisInteraction) => {\n if (!onHighlightedAxisChange) {\n return;\n }\n if (Object.is(prevAxisInteraction, nextAxisInteraction)) {\n return;\n }\n if (prevAxisInteraction.length !== nextAxisInteraction.length) {\n onHighlightedAxisChange(nextAxisInteraction);\n return;\n }\n if (prevAxisInteraction?.some(({\n axisId,\n dataIndex\n }, itemIndex) => nextAxisInteraction[itemIndex].axisId !== axisId || nextAxisInteraction[itemIndex].dataIndex !== dataIndex)) {\n onHighlightedAxisChange(nextAxisInteraction);\n }\n });\n const hasInteractionPlugin = checkHasInteractionPlugin(instance);\n React.useEffect(() => {\n const element = svgRef.current;\n if (!isInteractionEnabled || !hasInteractionPlugin || !element || params.disableAxisListener) {\n return () => {};\n }\n\n // Clean the interaction when the mouse leaves the chart.\n const moveEndHandler = instance.addInteractionListener('moveEnd', event => {\n if (!event.detail.activeGestures.pan) {\n instance.cleanInteraction();\n }\n });\n const panEndHandler = instance.addInteractionListener('panEnd', event => {\n if (!event.detail.activeGestures.move) {\n instance.cleanInteraction();\n }\n });\n const pressEndHandler = instance.addInteractionListener('quickPressEnd', event => {\n if (!event.detail.activeGestures.move && !event.detail.activeGestures.pan) {\n instance.cleanInteraction();\n }\n });\n const gestureHandler = event => {\n const srvEvent = event.detail.srcEvent;\n const target = event.detail.target;\n const svgPoint = getSVGPoint(element, srvEvent);\n\n // Release the pointer capture if we are panning, as this would cause the tooltip to\n // be locked to the first \"section\" it touches.\n if (event.detail.srcEvent.buttons >= 1 && target?.hasPointerCapture(event.detail.srcEvent.pointerId) && !target?.closest('[data-charts-zoom-slider]')) {\n target?.releasePointerCapture(event.detail.srcEvent.pointerId);\n }\n if (!instance.isPointInside(svgPoint.x, svgPoint.y, target)) {\n instance.cleanInteraction?.();\n return;\n }\n instance.setPointerCoordinate(svgPoint);\n };\n const moveHandler = instance.addInteractionListener('move', gestureHandler);\n const panHandler = instance.addInteractionListener('pan', gestureHandler);\n const pressHandler = instance.addInteractionListener('quickPress', gestureHandler);\n return () => {\n moveHandler.cleanup();\n moveEndHandler.cleanup();\n panHandler.cleanup();\n panEndHandler.cleanup();\n pressHandler.cleanup();\n pressEndHandler.cleanup();\n };\n }, [svgRef, store, xAxisWithScale, usedXAxis, yAxisWithScale, usedYAxis, instance, params.disableAxisListener, isInteractionEnabled, hasInteractionPlugin]);\n React.useEffect(() => {\n const element = svgRef.current;\n const onAxisClick = params.onAxisClick;\n if (element === null || !onAxisClick) {\n return () => {};\n }\n const axisClickHandler = instance.addInteractionListener('tap', event => {\n let dataIndex = null;\n let isXAxis = false;\n const svgPoint = getSVGPoint(element, event.detail.srcEvent);\n const xIndex = getAxisIndex(xAxisWithScale[usedXAxis], svgPoint.x);\n isXAxis = xIndex !== -1;\n dataIndex = isXAxis ? xIndex : getAxisIndex(yAxisWithScale[usedYAxis], svgPoint.y);\n const USED_AXIS_ID = isXAxis ? xAxisIds[0] : yAxisIds[0];\n if (dataIndex == null || dataIndex === -1) {\n return;\n }\n\n // The .data exist because otherwise the dataIndex would be null or -1.\n const axisValue = (isXAxis ? xAxisWithScale : yAxisWithScale)[USED_AXIS_ID].data[dataIndex];\n const seriesValues = {};\n Object.keys(processedSeries).filter(seriesType => ['bar', 'line'].includes(seriesType)).forEach(seriesType => {\n processedSeries[seriesType]?.seriesOrder.forEach(seriesId => {\n const seriesItem = processedSeries[seriesType].series[seriesId];\n const providedXAxisId = seriesItem.xAxisId;\n const providedYAxisId = seriesItem.yAxisId;\n const axisKey = isXAxis ? providedXAxisId : providedYAxisId;\n if (axisKey === undefined || axisKey === USED_AXIS_ID) {\n seriesValues[seriesId] = seriesItem.data[dataIndex];\n }\n });\n });\n onAxisClick(event.detail.srcEvent, {\n dataIndex,\n axisValue,\n seriesValues\n });\n });\n return () => {\n axisClickHandler.cleanup();\n };\n }, [params.onAxisClick, processedSeries, svgRef, xAxisWithScale, xAxisIds, yAxisWithScale, yAxisIds, usedXAxis, usedYAxis, instance]);\n return {};\n};\nuseChartCartesianAxis.params = {\n xAxis: true,\n yAxis: true,\n dataset: true,\n onAxisClick: true,\n disableAxisListener: true,\n onHighlightedAxisChange: true,\n highlightedAxis: true\n};\nuseChartCartesianAxis.getDefaultizedParams = ({\n params\n}) => {\n return _extends({}, params, {\n colors: params.colors ?? rainbowSurgePalette,\n theme: params.theme ?? 'light',\n defaultizedXAxis: defaultizeXAxis(params.xAxis, params.dataset),\n defaultizedYAxis: defaultizeYAxis(params.yAxis, params.dataset)\n });\n};\nuseChartCartesianAxis.getInitialState = params => _extends({\n cartesianAxis: {\n x: params.defaultizedXAxis,\n y: params.defaultizedYAxis\n }\n}, params.highlightedAxis === undefined ? {} : {\n controlledCartesianAxisHighlight: params.highlightedAxis\n});","import { createSelector } from '@mui/x-internals/store';\nimport { selectorChartSeriesProcessed } from \"../../corePlugins/useChartSeries/index.js\";\nimport { selectorChartXAxis, selectorChartYAxis } from \"../useChartCartesianAxis/useChartCartesianAxisRendering.selectors.js\";\nconst selectKeyboardNavigation = state => state.keyboardNavigation;\nexport const selectorChartsItemIsFocused = createSelector(selectKeyboardNavigation, (keyboardNavigationState, item) => {\n return keyboardNavigationState?.item != null && keyboardNavigationState.item.type === item.seriesType && keyboardNavigationState.item.seriesId === item.seriesId && keyboardNavigationState.item.dataIndex === item.dataIndex;\n});\nexport const selectorChartsHasFocusedItem = createSelector(selectKeyboardNavigation, keyboardNavigationState => keyboardNavigationState?.item != null);\nexport const selectorChartsFocusedSeriesType = createSelector(selectKeyboardNavigation, keyboardNavigationState => keyboardNavigationState?.item?.type);\nexport const selectorChartsFocusedSeriesId = createSelector(selectKeyboardNavigation, keyboardNavigationState => keyboardNavigationState?.item?.seriesId);\nexport const selectorChartsFocusedDataIndex = createSelector(selectKeyboardNavigation, keyboardNavigationState => keyboardNavigationState?.item?.dataIndex);\nexport const selectorChartsIsKeyboardNavigationEnabled = createSelector(selectKeyboardNavigation, keyboardNavigationState => !!keyboardNavigationState?.enableKeyboardNavigation);\n\n/**\n * Selectors to override highlight behavior.\n */\n\nconst createSelectAxisHighlight = direction => (type, seriesId, dataIndex, axis, series) => {\n if (type === undefined || seriesId === undefined || dataIndex === undefined) {\n return undefined;\n }\n const seriesConfig = series[type]?.series[seriesId];\n if (!seriesConfig) {\n return undefined;\n }\n let axisId = direction === 'x' ? 'xAxisId' in seriesConfig && seriesConfig.xAxisId : 'yAxisId' in seriesConfig && seriesConfig.yAxisId;\n if (axisId === undefined || axisId === false) {\n axisId = axis.axisIds[0];\n }\n return {\n axisId,\n dataIndex\n };\n};\nexport const selectorChartsKeyboardXAxisIndex = createSelector(selectorChartsFocusedSeriesType, selectorChartsFocusedSeriesId, selectorChartsFocusedDataIndex, selectorChartXAxis, selectorChartSeriesProcessed, createSelectAxisHighlight('x'));\nexport const selectorChartsKeyboardYAxisIndex = createSelector(selectorChartsFocusedSeriesType, selectorChartsFocusedSeriesId, selectorChartsFocusedDataIndex, selectorChartYAxis, selectorChartSeriesProcessed, createSelectAxisHighlight('y'));\nexport const selectorChartsKeyboardItem = createSelector(selectKeyboardNavigation, function selectorChartsKeyboardItem(keyboardState) {\n if (keyboardState?.item == null) {\n return null;\n }\n const {\n type,\n seriesId\n } = keyboardState.item;\n if (type === undefined || seriesId === undefined) {\n return null;\n }\n return keyboardState.item;\n});\nexport const selectorChartsKeyboardItemIsDefined = createSelector(selectorChartsFocusedSeriesType, selectorChartsFocusedSeriesId, selectorChartsFocusedDataIndex, function selectorChartsKeyboardItemIsDefined(seriesType, seriesId, dataIndex) {\n return seriesId !== undefined && dataIndex !== undefined;\n});","const is = Object.is;\n\n/**\n * Fast shallow compare for objects.\n * @returns true if objects are equal.\n */\nexport function fastObjectShallowCompare(a, b) {\n if (a === b) {\n return true;\n }\n if (!(a instanceof Object) || !(b instanceof Object)) {\n return false;\n }\n let aLength = 0;\n let bLength = 0;\n\n /* eslint-disable guard-for-in */\n for (const key in a) {\n aLength += 1;\n if (!is(a[key], b[key])) {\n return false;\n }\n if (!(key in b)) {\n return false;\n }\n }\n\n /* eslint-disable-next-line @typescript-eslint/naming-convention, @typescript-eslint/no-unused-vars */\n for (const _ in b) {\n bLength += 1;\n }\n return aLength === bLength;\n}","import useEventCallback from '@mui/utils/useEventCallback';\nimport { fastObjectShallowCompare } from '@mui/x-internals/fastObjectShallowCompare';\nexport const useChartTooltip = ({\n store\n}) => {\n const removeTooltipItem = useEventCallback(function removeTooltipItem(itemToRemove) {\n const prevItem = store.state.tooltip.item;\n if (!itemToRemove) {\n // Remove without taking care of the current item\n if (prevItem !== null) {\n store.set('tooltip', {\n item: null\n });\n }\n return;\n }\n if (prevItem === null || !fastObjectShallowCompare(prevItem, itemToRemove)) {\n // The current item is already different from the one to remove. No need to clean it.\n return;\n }\n store.set('tooltip', {\n item: null\n });\n });\n const setTooltipItem = useEventCallback(function setTooltipItem(newItem) {\n if (!fastObjectShallowCompare(store.state.tooltip.item, newItem)) {\n store.set('tooltip', {\n item: newItem\n });\n }\n });\n return {\n instance: {\n setTooltipItem,\n removeTooltipItem\n }\n };\n};\nuseChartTooltip.getInitialState = () => ({\n tooltip: {\n item: null\n }\n});\nuseChartTooltip.params = {};","export const deg2rad = (value, defaultRad) => {\n if (value === undefined) {\n return defaultRad;\n }\n return Math.PI * value / 180;\n};\nexport const rad2deg = (value, defaultDeg) => {\n if (value === undefined) {\n return defaultDeg;\n }\n return 180 * value / Math.PI;\n};","'use client';\n\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport { getColorScale, getOrdinalColorScale } from \"../../../colorScale.js\";\nfunction addDefaultId(axisConfig, defaultId) {\n if (axisConfig.id !== undefined) {\n return axisConfig;\n }\n return _extends({\n id: defaultId\n }, axisConfig);\n}\nfunction processColorMap(axisConfig) {\n if (!axisConfig.colorMap) {\n return axisConfig;\n }\n return _extends({}, axisConfig, {\n colorScale: axisConfig.colorMap.type === 'ordinal' && axisConfig.data ? getOrdinalColorScale(_extends({\n values: axisConfig.data\n }, axisConfig.colorMap)) : getColorScale(axisConfig.colorMap.type === 'continuous' ? _extends({\n min: axisConfig.min,\n max: axisConfig.max\n }, axisConfig.colorMap) : axisConfig.colorMap)\n });\n}\nfunction getZAxisState(zAxis, dataset) {\n if (!zAxis || zAxis.length === 0) {\n return {\n axis: {},\n axisIds: []\n };\n }\n const zAxisLookup = {};\n const axisIds = [];\n zAxis.forEach((axisConfig, index) => {\n const dataKey = axisConfig.dataKey;\n const defaultizedId = axisConfig.id ?? `defaultized-z-axis-${index}`;\n if (dataKey === undefined || axisConfig.data !== undefined) {\n zAxisLookup[defaultizedId] = processColorMap(addDefaultId(axisConfig, defaultizedId));\n axisIds.push(defaultizedId);\n return;\n }\n if (dataset === undefined) {\n throw new Error('MUI X Charts: z-axis uses `dataKey` but no `dataset` is provided.');\n }\n zAxisLookup[defaultizedId] = processColorMap(addDefaultId(_extends({}, axisConfig, {\n data: dataset.map(d => d[dataKey])\n }), defaultizedId));\n axisIds.push(defaultizedId);\n });\n return {\n axis: zAxisLookup,\n axisIds\n };\n}\nexport const useChartZAxis = ({\n params,\n store\n}) => {\n const {\n zAxis,\n dataset\n } = params;\n\n // The effect do not track any value defined synchronously during the 1st render by hooks called after `useChartZAxis`\n // As a consequence, the state generated by the 1st run of this useEffect will always be equal to the initialization one\n const isFirstRender = React.useRef(true);\n React.useEffect(() => {\n if (isFirstRender.current) {\n isFirstRender.current = false;\n return;\n }\n store.set('zAxis', getZAxisState(zAxis, dataset));\n }, [zAxis, dataset, store]);\n return {};\n};\nuseChartZAxis.params = {\n zAxis: true,\n dataset: true\n};\nuseChartZAxis.getInitialState = params => ({\n zAxis: getZAxisState(params.zAxis, params.dataset)\n});","import { createSelector } from '@mui/x-internals/store';\nconst selectRootState = state => state;\nexport const selectorChartZAxis = createSelector(selectRootState, state => state.zAxis);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport { warnOnce } from '@mui/x-internals/warning';\nimport { useAssertModelConsistency } from '@mui/x-internals/useAssertModelConsistency';\nimport useEventCallback from '@mui/utils/useEventCallback';\nimport useEnhancedEffect from '@mui/utils/useEnhancedEffect';\nimport { fastObjectShallowCompare } from '@mui/x-internals/fastObjectShallowCompare';\nexport const useChartHighlight = ({\n store,\n params\n}) => {\n useAssertModelConsistency({\n warningPrefix: 'MUI X Charts',\n componentName: 'Chart',\n propName: 'highlightedItem',\n controlled: params.highlightedItem,\n defaultValue: null\n });\n useEnhancedEffect(() => {\n if (store.state.highlight.item !== params.highlightedItem) {\n store.set('highlight', _extends({}, store.state.highlight, {\n item: params.highlightedItem\n }));\n }\n if (process.env.NODE_ENV !== 'production') {\n if (params.highlightedItem !== undefined && !store.state.highlight.isControlled) {\n warnOnce(['MUI X Charts: The `highlightedItem` switched between controlled and uncontrolled state.', 'To remove the highlight when using controlled state, you must provide `null` to the `highlightedItem` prop instead of `undefined`.'].join('\\n'));\n }\n }\n }, [store, params.highlightedItem]);\n const clearHighlight = useEventCallback(() => {\n params.onHighlightChange?.(null);\n const prevHighlight = store.state.highlight;\n if (prevHighlight.item === null || prevHighlight.isControlled) {\n return;\n }\n store.set('highlight', {\n item: null,\n lastUpdate: 'pointer',\n isControlled: false\n });\n });\n const setHighlight = useEventCallback(newItem => {\n const prevHighlight = store.state.highlight;\n if (prevHighlight.isControlled || fastObjectShallowCompare(prevHighlight.item, newItem)) {\n return;\n }\n params.onHighlightChange?.(newItem);\n store.set('highlight', {\n item: newItem,\n lastUpdate: 'pointer',\n isControlled: false\n });\n });\n return {\n instance: {\n clearHighlight,\n setHighlight\n }\n };\n};\nuseChartHighlight.getInitialState = params => ({\n highlight: {\n item: params.highlightedItem,\n lastUpdate: 'pointer',\n isControlled: params.highlightedItem !== undefined\n }\n});\nuseChartHighlight.params = {\n highlightedItem: true,\n onHighlightChange: true\n};","/**\n * Efficiently finds the minimum and maximum values in an array of numbers.\n * This functions helps preventing maximum call stack errors when dealing with large datasets.\n *\n * @param data The array of numbers to evaluate\n * @returns [min, max] as numbers\n */\nexport function findMinMax(data) {\n let min = Infinity;\n let max = -Infinity;\n for (const value of data ?? []) {\n if (value < min) {\n min = value;\n }\n if (value > max) {\n max = value;\n }\n }\n return [min, max];\n}","import { findMinMax } from \"../../../internals/findMinMax.js\";\nconst createResult = (data, direction) => {\n if (direction === 'x') {\n return {\n x: data,\n y: null\n };\n }\n return {\n x: null,\n y: data\n };\n};\nconst getBaseExtremum = params => {\n const {\n axis,\n getFilters,\n isDefaultAxis\n } = params;\n const filter = getFilters?.({\n currentAxisId: axis.id,\n isDefaultAxis\n });\n const data = filter ? axis.data?.filter((_, i) => filter({\n x: null,\n y: null\n }, i)) : axis.data;\n return findMinMax(data ?? []);\n};\nconst getValueExtremum = direction => params => {\n const {\n series,\n axis,\n getFilters,\n isDefaultAxis\n } = params;\n return Object.keys(series).filter(seriesId => {\n const axisId = direction === 'x' ? series[seriesId].xAxisId : series[seriesId].yAxisId;\n return axisId === axis.id || isDefaultAxis && axisId === undefined;\n }).reduce((acc, seriesId) => {\n const {\n stackedData\n } = series[seriesId];\n const filter = getFilters?.({\n currentAxisId: axis.id,\n isDefaultAxis,\n seriesXAxisId: series[seriesId].xAxisId,\n seriesYAxisId: series[seriesId].yAxisId\n });\n const [seriesMin, seriesMax] = stackedData?.reduce((seriesAcc, values, index) => {\n if (filter && (!filter(createResult(values[0], direction), index) || !filter(createResult(values[1], direction), index))) {\n return seriesAcc;\n }\n return [Math.min(...values, seriesAcc[0]), Math.max(...values, seriesAcc[1])];\n }, [Infinity, -Infinity]) ?? [Infinity, -Infinity];\n return [Math.min(seriesMin, acc[0]), Math.max(seriesMax, acc[1])];\n }, [Infinity, -Infinity]);\n};\nexport const getExtremumX = params => {\n // Notice that bar should be all horizontal or all vertical.\n // Don't think it's a problem for now\n const isHorizontal = Object.keys(params.series).some(seriesId => params.series[seriesId].layout === 'horizontal');\n if (isHorizontal) {\n return getValueExtremum('x')(params);\n }\n return getBaseExtremum(params);\n};\nexport const getExtremumY = params => {\n const isHorizontal = Object.keys(params.series).some(seriesId => params.series[seriesId].layout === 'horizontal');\n if (isHorizontal) {\n return getBaseExtremum(params);\n }\n return getValueExtremum('y')(params);\n};","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export const abs = Math.abs;\nexport const atan2 = Math.atan2;\nexport const cos = Math.cos;\nexport const max = Math.max;\nexport const min = Math.min;\nexport const sin = Math.sin;\nexport const sqrt = Math.sqrt;\n\nexport const epsilon = 1e-12;\nexport const pi = Math.PI;\nexport const halfPi = pi / 2;\nexport const tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\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 {Path} from \"d3-path\";\n\nexport function withPath(shape) {\n let digits = 3;\n\n shape.digits = function(_) {\n if (!arguments.length) return digits;\n if (_ == null) {\n digits = null;\n } else {\n const d = Math.floor(_);\n if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n digits = d;\n }\n return shape;\n };\n\n return () => new Path(digits);\n}\n","import constant from \"./constant.js\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math.js\";\nimport {withPath} from \"./path.js\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = y32 * x10 - x32 * y10;\n if (t * t < epsilon) return;\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null,\n path = withPath(arc);\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00),\n oc;\n\n // Restrict the corner radius according to the sector angle. If this\n // intersection fails, it’s probably because the arc is too small, so\n // disable the corner radius entirely.\n if (da < pi) {\n if (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10)) {\n var ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n } else {\n rc0 = rc1 = 0;\n }\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n","export var slice = Array.prototype.slice;\n\nexport default function(x) {\n return typeof x === \"object\" && \"length\" in x\n ? x // Array, TypedArray, NodeList, array-like\n : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n","export default function(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n","export default function(d) {\n return d;\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport descending from \"./descending.js\";\nimport identity from \"./identity.js\";\nimport {tau} from \"./math.js\";\n\nexport default function() {\n var value = identity,\n sortValues = descending,\n sort = null,\n startAngle = constant(0),\n endAngle = constant(tau),\n padAngle = constant(0);\n\n function pie(data) {\n var i,\n n = (data = array(data)).length,\n j,\n k,\n sum = 0,\n index = new Array(n),\n arcs = new Array(n),\n a0 = +startAngle.apply(this, arguments),\n da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),\n a1,\n p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n pa = p * (da < 0 ? -1 : 1),\n v;\n\n for (i = 0; i < n; ++i) {\n if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n sum += v;\n }\n }\n\n // Optionally sort the arcs by previously-computed values or by data.\n if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n // Compute the arcs! They are stored in the original data's order.\n for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n data: data[j],\n index: i,\n value: v,\n startAngle: a0,\n endAngle: a1,\n padAngle: p\n };\n }\n\n return arcs;\n }\n\n pie.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), pie) : value;\n };\n\n pie.sortValues = function(_) {\n return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n };\n\n pie.sort = function(_) {\n return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n };\n\n pie.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : startAngle;\n };\n\n pie.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : endAngle;\n };\n\n pie.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : padAngle;\n };\n\n return pie;\n}\n","export default function(series, order) {\n if (!((n = series.length) > 1)) return;\n for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {\n s0 = s1, s1 = series[order[i]];\n for (j = 0; j < m; ++j) {\n s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];\n }\n }\n}\n","export default function(series) {\n var n = series.length, o = new Array(n);\n while (--n >= 0) o[n] = n;\n return o;\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport offsetNone from \"./offset/none.js\";\nimport orderNone from \"./order/none.js\";\n\nfunction stackValue(d, key) {\n return d[key];\n}\n\nfunction stackSeries(key) {\n const series = [];\n series.key = key;\n return series;\n}\n\nexport default function() {\n var keys = constant([]),\n order = orderNone,\n offset = offsetNone,\n value = stackValue;\n\n function stack(data) {\n var sz = Array.from(keys.apply(this, arguments), stackSeries),\n i, n = sz.length, j = -1,\n oz;\n\n for (const d of data) {\n for (i = 0, ++j; i < n; ++i) {\n (sz[i][j] = [0, +value(d, sz[i].key, j, data)]).data = d;\n }\n }\n\n for (i = 0, oz = array(order(sz)); i < n; ++i) {\n sz[oz[i]].index = i;\n }\n\n offset(sz, oz);\n return sz;\n }\n\n stack.keys = function(_) {\n return arguments.length ? (keys = typeof _ === \"function\" ? _ : constant(Array.from(_)), stack) : keys;\n };\n\n stack.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), stack) : value;\n };\n\n stack.order = function(_) {\n return arguments.length ? (order = _ == null ? orderNone : typeof _ === \"function\" ? _ : constant(Array.from(_)), stack) : order;\n };\n\n stack.offset = function(_) {\n return arguments.length ? (offset = _ == null ? offsetNone : _, stack) : offset;\n };\n\n return stack;\n}\n","import none from \"./none.js\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0)) return;\n for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {\n for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;\n if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;\n }\n none(series, order);\n}\n","export default function(series, order) {\n if (!((n = series.length) > 0)) return;\n for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) {\n for (yp = yn = 0, i = 0; i < n; ++i) {\n if ((dy = (d = series[order[i]][j])[1] - d[0]) > 0) {\n d[0] = yp, d[1] = yp += dy;\n } else if (dy < 0) {\n d[1] = yn, d[0] = yn += dy;\n } else {\n d[0] = 0, d[1] = dy;\n }\n }\n }\n}\n","import none from \"./none.js\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0)) return;\n for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) {\n for (var i = 0, y = 0; i < n; ++i) y += series[i][j][1] || 0;\n s0[j][1] += s0[j][0] = -y / 2;\n }\n none(series, order);\n}\n","import none from \"./none.js\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;\n for (var y = 0, j = 1, s0, m, n; j < m; ++j) {\n for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {\n var si = series[order[i]],\n sij0 = si[j][1] || 0,\n sij1 = si[j - 1][1] || 0,\n s3 = (sij0 - sij1) / 2;\n for (var k = 0; k < i; ++k) {\n var sk = series[order[k]],\n skj0 = sk[j][1] || 0,\n skj1 = sk[j - 1][1] || 0;\n s3 += skj0 - skj1;\n }\n s1 += sij0, s2 += s3 * sij0;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n if (s1) y -= s2 / s1;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n none(series, order);\n}\n","import none from \"./none.js\";\n\nexport default function(series) {\n var peaks = series.map(peak);\n return none(series).sort(function(a, b) { return peaks[a] - peaks[b]; });\n}\n\nfunction peak(series) {\n var i = -1, j = 0, n = series.length, vi, vj = -Infinity;\n while (++i < n) if ((vi = +series[i][1]) > vj) vj = vi, j = i;\n return j;\n}\n","import none from \"./none.js\";\n\nexport default function(series) {\n var sums = series.map(sum);\n return none(series).sort(function(a, b) { return sums[a] - sums[b]; });\n}\n\nexport function sum(series) {\n var s = 0, i = -1, n = series.length, v;\n while (++i < n) if (v = +series[i][1]) s += v;\n return s;\n}\n","import ascending from \"./ascending.js\";\n\nexport default function(series) {\n return ascending(series).reverse();\n}\n","import appearance from \"./appearance.js\";\nimport {sum} from \"./ascending.js\";\n\nexport default function(series) {\n var n = series.length,\n i,\n j,\n sums = series.map(sum),\n order = appearance(series),\n top = 0,\n bottom = 0,\n tops = [],\n bottoms = [];\n\n for (i = 0; i < n; ++i) {\n j = order[i];\n if (top < bottom) {\n top += sums[j];\n tops.push(j);\n } else {\n bottom += sums[j];\n bottoms.push(j);\n }\n }\n\n return bottoms.reverse().concat(tops);\n}\n","import none from \"./none.js\";\n\nexport default function(series) {\n return none(series).reverse();\n}\n","import { stackOrderAppearance as d3StackOrderAppearance, stackOrderAscending as d3StackOrderAscending, stackOrderDescending as d3StackOrderDescending, stackOrderInsideOut as d3StackOrderInsideOut, stackOrderNone as d3StackOrderNone, stackOrderReverse as d3StackOrderReverse, stackOffsetExpand as d3StackOffsetExpand, stackOffsetDiverging as d3StackOffsetDiverging, stackOffsetNone as d3StackOffsetNone, stackOffsetSilhouette as d3StackOffsetSilhouette, stackOffsetWiggle as d3StackOffsetWiggle } from '@mui/x-charts-vendor/d3-shape';\nexport const StackOrder = {\n /**\n * Series order such that the earliest series (according to the maximum value) is at the bottom.\n * */\n appearance: d3StackOrderAppearance,\n /**\n * Series order such that the smallest series (according to the sum of values) is at the bottom.\n * */\n ascending: d3StackOrderAscending,\n /**\n * Series order such that the largest series (according to the sum of values) is at the bottom.\n */\n descending: d3StackOrderDescending,\n /**\n * Series order such that the earliest series (according to the maximum value) are on the inside and the later series are on the outside. This order is recommended for streamgraphs in conjunction with the wiggle offset. See Stacked Graphs—Geometry & Aesthetics by Byron & Wattenberg for more information.\n */\n insideOut: d3StackOrderInsideOut,\n /**\n * Given series order [0, 1, … n - 1] where n is the number of elements in series. Thus, the stack order is given by the key accessor.\n */\n none: d3StackOrderNone,\n /**\n * Reverse of the given series order [n - 1, n - 2, … 0] where n is the number of elements in series. Thus, the stack order is given by the reverse of the key accessor.\n */\n reverse: d3StackOrderReverse\n};\nexport const StackOffset = {\n /**\n * Applies a zero baseline and normalizes the values for each point such that the topline is always one.\n * */\n expand: d3StackOffsetExpand,\n /**\n * Positive values are stacked above zero, negative values are stacked below zero, and zero values are stacked at zero.\n * */\n diverging: d3StackOffsetDiverging,\n /**\n * Applies a zero baseline.\n * */\n none: d3StackOffsetNone,\n /**\n * Shifts the baseline down such that the center of the streamgraph is always at zero.\n * */\n silhouette: d3StackOffsetSilhouette,\n /**\n * Shifts the baseline so as to minimize the weighted wiggle of layers. This offset is recommended for streamgraphs in conjunction with the inside-out order. See Stacked Graphs—Geometry & Aesthetics by Bryon & Wattenberg for more information.\n * */\n wiggle: d3StackOffsetWiggle\n};\n\n/**\n * Takes a set of series and groups their ids\n * @param series the object of all bars series\n * @returns an array of groups, including the ids, the stacking order, and the stacking offset.\n */\nexport const getStackingGroups = params => {\n const {\n series,\n seriesOrder,\n defaultStrategy\n } = params;\n const stackingGroups = [];\n const stackIndex = {};\n seriesOrder.forEach(id => {\n const {\n stack,\n stackOrder,\n stackOffset\n } = series[id];\n if (stack === undefined) {\n stackingGroups.push({\n ids: [id],\n stackingOrder: StackOrder.none,\n stackingOffset: StackOffset.none\n });\n } else if (stackIndex[stack] === undefined) {\n stackIndex[stack] = stackingGroups.length;\n stackingGroups.push({\n ids: [id],\n stackingOrder: StackOrder[stackOrder ?? defaultStrategy?.stackOrder ?? 'none'],\n stackingOffset: StackOffset[stackOffset ?? defaultStrategy?.stackOffset ?? 'diverging']\n });\n } else {\n stackingGroups[stackIndex[stack]].ids.push(id);\n if (stackOrder !== undefined) {\n stackingGroups[stackIndex[stack]].stackingOrder = StackOrder[stackOrder];\n }\n if (stackOffset !== undefined) {\n stackingGroups[stackIndex[stack]].stackingOffset = StackOffset[stackOffset];\n }\n }\n });\n return stackingGroups;\n};","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport { stack as d3Stack } from '@mui/x-charts-vendor/d3-shape';\nimport { warnOnce } from '@mui/x-internals/warning';\nimport { getStackingGroups } from \"../../../internals/stackSeries.js\";\nconst barValueFormatter = v => v == null ? '' : v.toLocaleString();\nconst seriesProcessor = (params, dataset) => {\n const {\n seriesOrder,\n series\n } = params;\n const stackingGroups = getStackingGroups(params);\n\n // Create a data set with format adapted to d3\n const d3Dataset = dataset ?? [];\n seriesOrder.forEach(id => {\n const data = series[id].data;\n if (data !== undefined) {\n data.forEach((value, index) => {\n if (d3Dataset.length <= index) {\n d3Dataset.push({\n [id]: value\n });\n } else {\n d3Dataset[index][id] = value;\n }\n });\n } else if (dataset === undefined) {\n throw new Error([`MUI X Charts: bar series with id='${id}' has no data.`, 'Either provide a data property to the series or use the dataset prop.'].join('\\n'));\n }\n if (process.env.NODE_ENV !== 'production') {\n if (!data && dataset) {\n const dataKey = series[id].dataKey;\n if (!dataKey) {\n throw new Error([`MUI X Charts: bar series with id='${id}' has no data and no dataKey.`, 'You must provide a dataKey when using the dataset prop.'].join('\\n'));\n }\n dataset.forEach((entry, index) => {\n const value = entry[dataKey];\n if (value != null && typeof value !== 'number') {\n warnOnce([`MUI X Charts: your dataset key \"${dataKey}\" is used for plotting bars, but the dataset contains the non-null non-numerical element \"${value}\" at index ${index}.`, 'Bar plots only support numeric and null values.'].join('\\n'));\n }\n });\n }\n }\n });\n const completedSeries = {};\n stackingGroups.forEach(stackingGroup => {\n const {\n ids,\n stackingOffset,\n stackingOrder\n } = stackingGroup;\n // Get stacked values, and derive the domain\n const stackedSeries = d3Stack().keys(ids.map(id => {\n // Use dataKey if needed and available\n const dataKey = series[id].dataKey;\n return series[id].data === undefined && dataKey !== undefined ? dataKey : id;\n })).value((d, key) => d[key] ?? 0) // defaultize null value to 0\n .order(stackingOrder).offset(stackingOffset)(d3Dataset);\n ids.forEach((id, index) => {\n const dataKey = series[id].dataKey;\n completedSeries[id] = _extends({\n layout: 'vertical',\n labelMarkType: 'square',\n minBarSize: 0,\n valueFormatter: series[id].valueFormatter ?? barValueFormatter\n }, series[id], {\n data: dataKey ? dataset.map(data => {\n const value = data[dataKey];\n return typeof value === 'number' ? value : null;\n }) : series[id].data,\n stackedData: stackedSeries[index].map(([a, b]) => [a, b])\n });\n });\n });\n return {\n seriesOrder,\n stackingGroups,\n series: completedSeries\n };\n};\nexport default seriesProcessor;","export function getLabel(value, location) {\n return typeof value === 'function' ? value(location) : value;\n}","import { getLabel } from \"../../../internals/getLabel.js\";\nconst legendGetter = params => {\n const {\n seriesOrder,\n series\n } = params;\n return seriesOrder.reduce((acc, seriesId) => {\n const formattedLabel = getLabel(series[seriesId].label, 'legend');\n if (formattedLabel === undefined) {\n return acc;\n }\n acc.push({\n markType: series[seriesId].labelMarkType,\n id: seriesId,\n seriesId,\n color: series[seriesId].color,\n label: formattedLabel\n });\n return acc;\n }, []);\n};\nexport default legendGetter;","export function getSeriesColorFn(series) {\n return series.colorGetter ? series.colorGetter : () => series.color;\n}","import { getSeriesColorFn } from \"../../../internals/getSeriesColorFn.js\";\nconst getColor = (series, xAxis, yAxis) => {\n const verticalLayout = series.layout === 'vertical';\n const bandColorScale = verticalLayout ? xAxis?.colorScale : yAxis?.colorScale;\n const valueColorScale = verticalLayout ? yAxis?.colorScale : xAxis?.colorScale;\n const bandValues = verticalLayout ? xAxis?.data : yAxis?.data;\n const getSeriesColor = getSeriesColorFn(series);\n if (valueColorScale) {\n return dataIndex => {\n if (dataIndex === undefined) {\n return series.color;\n }\n const value = series.data[dataIndex];\n const color = value === null ? getSeriesColor({\n value,\n dataIndex\n }) : valueColorScale(value);\n if (color === null) {\n return getSeriesColor({\n value,\n dataIndex\n });\n }\n return color;\n };\n }\n if (bandColorScale && bandValues) {\n return dataIndex => {\n if (dataIndex === undefined) {\n return series.color;\n }\n const value = bandValues[dataIndex];\n const color = value === null ? getSeriesColor({\n value,\n dataIndex\n }) : bandColorScale(value);\n if (color === null) {\n return getSeriesColor({\n value,\n dataIndex\n });\n }\n return color;\n };\n }\n return dataIndex => {\n if (dataIndex === undefined) {\n return series.color;\n }\n const value = series.data[dataIndex];\n return getSeriesColor({\n value,\n dataIndex\n });\n };\n};\nexport default getColor;","import { getLabel } from \"../../../internals/getLabel.js\";\nconst tooltipGetter = params => {\n const {\n series,\n getColor,\n identifier\n } = params;\n if (!identifier || identifier.dataIndex === undefined) {\n return null;\n }\n const label = getLabel(series.label, 'tooltip');\n const value = series.data[identifier.dataIndex];\n if (value == null) {\n return null;\n }\n const formattedValue = series.valueFormatter(value, {\n dataIndex: identifier.dataIndex\n });\n return {\n identifier,\n color: getColor(identifier.dataIndex),\n label,\n value,\n formattedValue,\n markType: series.labelMarkType\n };\n};\nexport const axisTooltipGetter = series => {\n return Object.values(series).map(s => s.layout === 'horizontal' ? {\n direction: 'y',\n axisId: s.yAxisId\n } : {\n direction: 'x',\n axisId: s.xAxisId\n });\n};\nexport default tooltipGetter;","/**\n * Solution of the equations\n * W = barWidth * N + offset * (N-1)\n * offset / (offset + barWidth) = r\n * @param bandWidth (W) The width available to place bars.\n * @param groupCount (N) The number of bars to place in that space.\n * @param gapRatio (r) The ratio of the gap between bars over the bar width.\n * @returns The bar width and the offset between bars.\n */\nexport function getBandSize(bandWidth, groupCount, gapRatio) {\n if (gapRatio === 0) {\n return {\n barWidth: bandWidth / groupCount,\n offset: 0\n };\n }\n const barWidth = bandWidth / (groupCount + (groupCount - 1) * gapRatio);\n const offset = gapRatio * barWidth;\n return {\n barWidth,\n offset\n };\n}","import { getBandSize } from \"./getBandSize.js\";\nfunction shouldInvertStartCoordinate(verticalLayout, baseValue, reverse) {\n const isVerticalAndPositive = verticalLayout && baseValue > 0;\n const isHorizontalAndNegative = !verticalLayout && baseValue < 0;\n const invertStartCoordinate = isVerticalAndPositive || isHorizontalAndNegative;\n return reverse ? !invertStartCoordinate : invertStartCoordinate;\n}\nexport function getBarDimensions(params) {\n const {\n verticalLayout,\n xAxisConfig,\n yAxisConfig,\n series,\n dataIndex,\n numberOfGroups,\n groupIndex\n } = params;\n const baseScaleConfig = verticalLayout ? xAxisConfig : yAxisConfig;\n const reverse = (verticalLayout ? yAxisConfig.reverse : xAxisConfig.reverse) ?? false;\n const {\n barWidth,\n offset\n } = getBandSize(baseScaleConfig.scale.bandwidth(), numberOfGroups, baseScaleConfig.barGapRatio);\n const barOffset = groupIndex * (barWidth + offset);\n const xScale = xAxisConfig.scale;\n const yScale = yAxisConfig.scale;\n const baseValue = baseScaleConfig.data[dataIndex];\n const seriesValue = series.data[dataIndex];\n if (seriesValue == null) {\n return null;\n }\n const values = series.stackedData[dataIndex];\n const valueCoordinates = values.map(v => verticalLayout ? yScale(v) : xScale(v));\n const minValueCoord = Math.round(Math.min(...valueCoordinates));\n const maxValueCoord = Math.round(Math.max(...valueCoordinates));\n const barSize = seriesValue === 0 ? 0 : Math.max(series.minBarSize, maxValueCoord - minValueCoord);\n const startCoordinate = shouldInvertStartCoordinate(verticalLayout, seriesValue, reverse) ? maxValueCoord - barSize : minValueCoord;\n return {\n x: verticalLayout ? xScale(baseValue) + barOffset : startCoordinate,\n y: verticalLayout ? startCoordinate : yScale(baseValue) + barOffset,\n height: verticalLayout ? barSize : barWidth,\n width: verticalLayout ? barWidth : barSize\n };\n}","import { getBarDimensions } from \"../../../internals/getBarDimensions.js\";\nconst tooltipItemPositionGetter = params => {\n const {\n series,\n identifier,\n axesConfig,\n placement\n } = params;\n if (!identifier || identifier.dataIndex === undefined) {\n return null;\n }\n const itemSeries = series.bar?.series[identifier.seriesId];\n if (series.bar == null || itemSeries == null) {\n return null;\n }\n if (axesConfig.x === undefined || axesConfig.y === undefined) {\n return null;\n }\n const dimensions = getBarDimensions({\n verticalLayout: itemSeries.layout === 'vertical',\n xAxisConfig: axesConfig.x,\n yAxisConfig: axesConfig.y,\n series: itemSeries,\n dataIndex: identifier.dataIndex,\n numberOfGroups: series.bar.stackingGroups.length,\n groupIndex: series.bar.stackingGroups.findIndex(group => group.ids.includes(itemSeries.id))\n });\n if (dimensions == null) {\n return null;\n }\n const {\n x,\n y,\n width,\n height\n } = dimensions;\n switch (placement) {\n case 'right':\n return {\n x: x + width,\n y: y + height / 2\n };\n case 'bottom':\n return {\n x: x + width / 2,\n y: y + height\n };\n case 'left':\n return {\n x,\n y: y + height / 2\n };\n case 'top':\n default:\n return {\n x: x + width / 2,\n y\n };\n }\n};\nexport default tooltipItemPositionGetter;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nexport function getSeriesWithDefaultValues(seriesData, seriesIndex, colors) {\n return _extends({}, seriesData, {\n id: seriesData.id ?? `auto-generated-id-${seriesIndex}`,\n color: seriesData.color ?? colors[seriesIndex % colors.length]\n });\n}","import { getExtremumX, getExtremumY } from \"./bar/extremums.js\";\nimport seriesProcessor from \"./bar/seriesProcessor.js\";\nimport legendGetter from \"./bar/legend.js\";\nimport getColor from \"./bar/getColor.js\";\nimport tooltipGetter, { axisTooltipGetter } from \"./bar/tooltip.js\";\nimport tooltipItemPositionGetter from \"./bar/tooltipPosition.js\";\nimport { getSeriesWithDefaultValues } from \"./bar/getSeriesWithDefaultValues.js\";\nexport const barSeriesConfig = {\n seriesProcessor,\n colorProcessor: getColor,\n legendGetter,\n tooltipGetter,\n tooltipItemPositionGetter,\n axisTooltipGetter,\n xExtremumGetter: getExtremumX,\n yExtremumGetter: getExtremumY,\n getSeriesWithDefaultValues\n};","export const getExtremumX = params => {\n const {\n series,\n axis,\n isDefaultAxis,\n getFilters\n } = params;\n let min = Infinity;\n let max = -Infinity;\n for (const seriesId in series) {\n if (!Object.hasOwn(series, seriesId)) {\n continue;\n }\n const axisId = series[seriesId].xAxisId;\n if (!(axisId === axis.id || axisId === undefined && isDefaultAxis)) {\n continue;\n }\n const filter = getFilters?.({\n currentAxisId: axis.id,\n isDefaultAxis,\n seriesXAxisId: series[seriesId].xAxisId,\n seriesYAxisId: series[seriesId].yAxisId\n });\n const seriesData = series[seriesId].data ?? [];\n for (let i = 0; i < seriesData.length; i += 1) {\n const d = seriesData[i];\n if (filter && !filter(d, i)) {\n continue;\n }\n if (d.x !== null) {\n if (d.x < min) {\n min = d.x;\n }\n if (d.x > max) {\n max = d.x;\n }\n }\n }\n }\n return [min, max];\n};\nexport const getExtremumY = params => {\n const {\n series,\n axis,\n isDefaultAxis,\n getFilters\n } = params;\n let min = Infinity;\n let max = -Infinity;\n for (const seriesId in series) {\n if (!Object.hasOwn(series, seriesId)) {\n continue;\n }\n const axisId = series[seriesId].yAxisId;\n if (!(axisId === axis.id || axisId === undefined && isDefaultAxis)) {\n continue;\n }\n const filter = getFilters?.({\n currentAxisId: axis.id,\n isDefaultAxis,\n seriesXAxisId: series[seriesId].xAxisId,\n seriesYAxisId: series[seriesId].yAxisId\n });\n const seriesData = series[seriesId].data ?? [];\n for (let i = 0; i < seriesData.length; i += 1) {\n const d = seriesData[i];\n if (filter && !filter(d, i)) {\n continue;\n }\n if (d.y !== null) {\n if (d.y < min) {\n min = d.y;\n }\n if (d.y > max) {\n max = d.y;\n }\n }\n }\n }\n return [min, max];\n};","import _extends from \"@babel/runtime/helpers/esm/extends\";\nconst seriesProcessor = ({\n series,\n seriesOrder\n}, dataset) => {\n const completeSeries = Object.fromEntries(Object.entries(series).map(([seriesId, seriesData]) => {\n const datasetKeys = seriesData?.datasetKeys;\n const missingKeys = ['x', 'y'].filter(key => typeof datasetKeys?.[key] !== 'string');\n if (seriesData?.datasetKeys && missingKeys.length > 0) {\n throw new Error([`MUI X Charts: scatter series with id='${seriesId}' has incomplete datasetKeys.`, `Properties ${missingKeys.map(key => `\"${key}\"`).join(', ')} are missing.`].join('\\n'));\n }\n const data = !datasetKeys ? seriesData.data ?? [] : dataset?.map(d => {\n return {\n x: d[datasetKeys.x] ?? null,\n y: d[datasetKeys.y] ?? null,\n z: datasetKeys.z && d[datasetKeys.z],\n id: datasetKeys.id && d[datasetKeys.id]\n };\n }) ?? [];\n return [seriesId, _extends({\n labelMarkType: 'circle',\n markerSize: 4\n }, seriesData, {\n preview: _extends({\n markerSize: 1\n }, seriesData?.preview),\n data,\n valueFormatter: seriesData.valueFormatter ?? (v => v && `(${v.x}, ${v.y})`)\n })];\n }));\n return {\n series: completeSeries,\n seriesOrder\n };\n};\nexport default seriesProcessor;","import { getSeriesColorFn } from \"../../internals/getSeriesColorFn.js\";\nconst getColor = (series, xAxis, yAxis, zAxis) => {\n const zColorScale = zAxis?.colorScale;\n const yColorScale = yAxis?.colorScale;\n const xColorScale = xAxis?.colorScale;\n const getSeriesColor = getSeriesColorFn(series);\n if (zColorScale) {\n return dataIndex => {\n if (dataIndex === undefined) {\n return series.color;\n }\n if (zAxis?.data?.[dataIndex] !== undefined) {\n const color = zColorScale(zAxis?.data?.[dataIndex]);\n if (color !== null) {\n return color;\n }\n }\n const value = series.data[dataIndex];\n const color = value === null ? getSeriesColor({\n value,\n dataIndex\n }) : zColorScale(value.z);\n if (color === null) {\n return getSeriesColor({\n value,\n dataIndex\n });\n }\n return color;\n };\n }\n if (yColorScale) {\n return dataIndex => {\n if (dataIndex === undefined) {\n return series.color;\n }\n const value = series.data[dataIndex];\n const color = value === null ? getSeriesColor({\n value,\n dataIndex\n }) : yColorScale(value.y);\n if (color === null) {\n return getSeriesColor({\n value,\n dataIndex\n });\n }\n return color;\n };\n }\n if (xColorScale) {\n return dataIndex => {\n if (dataIndex === undefined) {\n return series.color;\n }\n const value = series.data[dataIndex];\n const color = value === null ? getSeriesColor({\n value,\n dataIndex\n }) : xColorScale(value.x);\n if (color === null) {\n return getSeriesColor({\n value,\n dataIndex\n });\n }\n return color;\n };\n }\n return dataIndex => {\n if (dataIndex === undefined) {\n return series.color;\n }\n const value = series.data[dataIndex];\n return getSeriesColor({\n value,\n dataIndex\n });\n };\n};\nexport default getColor;","import { getLabel } from \"../../internals/getLabel.js\";\nconst legendGetter = params => {\n const {\n seriesOrder,\n series\n } = params;\n return seriesOrder.reduce((acc, seriesId) => {\n const formattedLabel = getLabel(series[seriesId].label, 'legend');\n if (formattedLabel === undefined) {\n return acc;\n }\n acc.push({\n markType: series[seriesId].labelMarkType,\n id: seriesId,\n seriesId,\n color: series[seriesId].color,\n label: formattedLabel\n });\n return acc;\n }, []);\n};\nexport default legendGetter;","import { getLabel } from \"../../internals/getLabel.js\";\nconst tooltipGetter = params => {\n const {\n series,\n getColor,\n identifier\n } = params;\n if (!identifier || identifier.dataIndex === undefined) {\n return null;\n }\n const label = getLabel(series.label, 'tooltip');\n const value = series.data[identifier.dataIndex];\n const formattedValue = series.valueFormatter(value, {\n dataIndex: identifier.dataIndex\n });\n return {\n identifier,\n color: getColor(identifier.dataIndex),\n label,\n value,\n formattedValue,\n markType: series.labelMarkType\n };\n};\nexport default tooltipGetter;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nconst getSeriesWithDefaultValues = (seriesData, seriesIndex, colors) => {\n return _extends({}, seriesData, {\n id: seriesData.id ?? `auto-generated-id-${seriesIndex}`,\n color: seriesData.color ?? colors[seriesIndex % colors.length]\n });\n};\nexport default getSeriesWithDefaultValues;","const tooltipItemPositionGetter = params => {\n const {\n series,\n identifier,\n axesConfig\n } = params;\n if (!identifier || identifier.dataIndex === undefined) {\n return null;\n }\n const itemSeries = series.scatter?.series[identifier.seriesId];\n if (itemSeries == null) {\n return null;\n }\n if (axesConfig.x === undefined || axesConfig.y === undefined) {\n return null;\n }\n const xValue = itemSeries.data?.[identifier.dataIndex].x;\n const yValue = itemSeries.data?.[identifier.dataIndex].y;\n if (xValue == null || yValue == null) {\n return null;\n }\n return {\n x: axesConfig.x.scale(xValue),\n y: axesConfig.y.scale(yValue)\n };\n};\nexport default tooltipItemPositionGetter;","import { getExtremumX, getExtremumY } from \"./extremums.js\";\nimport seriesProcessor from \"./seriesProcessor.js\";\nimport getColor from \"./getColor.js\";\nimport legendGetter from \"./legend.js\";\nimport tooltipGetter from \"./tooltip.js\";\nimport getSeriesWithDefaultValues from \"./getSeriesWithDefaultValues.js\";\nimport tooltipItemPositionGetter from \"./tooltipPosition.js\";\nexport const scatterSeriesConfig = {\n seriesProcessor,\n colorProcessor: getColor,\n legendGetter,\n tooltipGetter,\n tooltipItemPositionGetter,\n xExtremumGetter: getExtremumX,\n yExtremumGetter: getExtremumY,\n getSeriesWithDefaultValues\n};","import { findMinMax } from \"../../internals/findMinMax.js\";\nexport const getExtremumX = params => {\n const {\n axis\n } = params;\n return findMinMax(axis.data ?? []);\n};\nfunction getSeriesExtremums(getValues, data, stackedData, filter) {\n return stackedData.reduce((seriesAcc, stackedValue, index) => {\n if (data[index] === null) {\n return seriesAcc;\n }\n const [base, value] = getValues(stackedValue);\n if (filter && (!filter({\n y: base,\n x: null\n }, index) || !filter({\n y: value,\n x: null\n }, index))) {\n return seriesAcc;\n }\n return [Math.min(base, value, seriesAcc[0]), Math.max(base, value, seriesAcc[1])];\n }, [Infinity, -Infinity]);\n}\nexport const getExtremumY = params => {\n const {\n series,\n axis,\n isDefaultAxis,\n getFilters\n } = params;\n return Object.keys(series).filter(seriesId => {\n const yAxisId = series[seriesId].yAxisId;\n return yAxisId === axis.id || isDefaultAxis && yAxisId === undefined;\n }).reduce((acc, seriesId) => {\n const {\n area,\n stackedData,\n data\n } = series[seriesId];\n const isArea = area !== undefined;\n const filter = getFilters?.({\n currentAxisId: axis.id,\n isDefaultAxis,\n seriesXAxisId: series[seriesId].xAxisId,\n seriesYAxisId: series[seriesId].yAxisId\n });\n\n // Since this series is not used to display an area, we do not consider the base (the d[0]).\n const getValues = isArea && axis.scaleType !== 'log' && typeof series[seriesId].baseline !== 'string' ? d => d : d => [d[1], d[1]];\n const seriesExtremums = getSeriesExtremums(getValues, data, stackedData, filter);\n const [seriesMin, seriesMax] = seriesExtremums;\n return [Math.min(seriesMin, acc[0]), Math.max(seriesMax, acc[1])];\n }, [Infinity, -Infinity]);\n};","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport { stack as d3Stack } from '@mui/x-charts-vendor/d3-shape';\nimport { warnOnce } from '@mui/x-internals/warning';\nimport { getStackingGroups } from \"../../internals/stackSeries.js\";\nconst seriesProcessor = (params, dataset) => {\n const {\n seriesOrder,\n series\n } = params;\n const stackingGroups = getStackingGroups(_extends({}, params, {\n defaultStrategy: {\n stackOffset: 'none'\n }\n }));\n\n // Create a data set with format adapted to d3\n const d3Dataset = dataset ?? [];\n seriesOrder.forEach(id => {\n const data = series[id].data;\n if (data !== undefined) {\n data.forEach((value, index) => {\n if (d3Dataset.length <= index) {\n d3Dataset.push({\n [id]: value\n });\n } else {\n d3Dataset[index][id] = value;\n }\n });\n } else if (dataset === undefined && process.env.NODE_ENV !== 'production') {\n throw new Error([`MUI X Charts: line series with id='${id}' has no data.`, 'Either provide a data property to the series or use the dataset prop.'].join('\\n'));\n }\n if (process.env.NODE_ENV !== 'production') {\n if (!data && dataset) {\n const dataKey = series[id].dataKey;\n if (!dataKey) {\n throw new Error([`MUI X Charts: line series with id='${id}' has no data and no dataKey.`, 'You must provide a dataKey when using the dataset prop.'].join('\\n'));\n }\n dataset.forEach((entry, index) => {\n const value = entry[dataKey];\n if (value != null && typeof value !== 'number') {\n warnOnce([`MUI X Charts: your dataset key \"${dataKey}\" is used for plotting lines, but the dataset contains the non-null non-numerical element \"${value}\" at index ${index}.`, 'Line plots only support numeric and null values.'].join('\\n'));\n }\n });\n }\n }\n });\n const completedSeries = {};\n stackingGroups.forEach(stackingGroup => {\n // Get stacked values, and derive the domain\n const {\n ids,\n stackingOrder,\n stackingOffset\n } = stackingGroup;\n const stackedSeries = d3Stack().keys(ids.map(id => {\n // Use dataKey if needed and available\n const dataKey = series[id].dataKey;\n return series[id].data === undefined && dataKey !== undefined ? dataKey : id;\n })).value((d, key) => d[key] ?? 0) // defaultize null value to 0\n .order(stackingOrder).offset(stackingOffset)(d3Dataset);\n ids.forEach((id, index) => {\n const dataKey = series[id].dataKey;\n completedSeries[id] = _extends({\n labelMarkType: 'line'\n }, series[id], {\n data: dataKey ? dataset.map(data => {\n const value = data[dataKey];\n return typeof value === 'number' ? value : null;\n }) : series[id].data,\n stackedData: stackedSeries[index].map(([a, b]) => [a, b]),\n valueFormatter: series[id]?.valueFormatter ?? (v => v == null ? '' : v.toLocaleString())\n });\n });\n });\n return {\n seriesOrder,\n stackingGroups,\n series: completedSeries\n };\n};\nexport default seriesProcessor;","import { getSeriesColorFn } from \"../../internals/getSeriesColorFn.js\";\nconst getColor = (series, xAxis, yAxis) => {\n const yColorScale = yAxis?.colorScale;\n const xColorScale = xAxis?.colorScale;\n const getSeriesColor = getSeriesColorFn(series);\n if (yColorScale) {\n return dataIndex => {\n if (dataIndex === undefined) {\n return series.color;\n }\n const value = series.data[dataIndex];\n const color = value === null ? getSeriesColor({\n value,\n dataIndex\n }) : yColorScale(value);\n if (color === null) {\n return getSeriesColor({\n value,\n dataIndex\n });\n }\n return color;\n };\n }\n if (xColorScale) {\n return dataIndex => {\n if (dataIndex === undefined) {\n return series.color;\n }\n const value = xAxis.data?.[dataIndex];\n const color = value === null ? getSeriesColor({\n value,\n dataIndex\n }) : xColorScale(value);\n if (color === null) {\n return getSeriesColor({\n value,\n dataIndex\n });\n }\n return color;\n };\n }\n return dataIndex => {\n if (dataIndex === undefined) {\n return series.color;\n }\n const value = series.data[dataIndex];\n return getSeriesColor({\n value,\n dataIndex\n });\n };\n};\nexport default getColor;","import { getLabel } from \"../../internals/getLabel.js\";\nconst legendGetter = params => {\n const {\n seriesOrder,\n series\n } = params;\n return seriesOrder.reduce((acc, seriesId) => {\n const formattedLabel = getLabel(series[seriesId].label, 'legend');\n if (formattedLabel === undefined) {\n return acc;\n }\n acc.push({\n markType: series[seriesId].labelMarkType,\n id: seriesId,\n seriesId,\n color: series[seriesId].color,\n label: formattedLabel\n });\n return acc;\n }, []);\n};\nexport default legendGetter;","import { getLabel } from \"../../internals/getLabel.js\";\nconst tooltipGetter = params => {\n const {\n series,\n getColor,\n identifier\n } = params;\n if (!identifier || identifier.dataIndex === undefined) {\n return null;\n }\n const label = getLabel(series.label, 'tooltip');\n const value = series.data[identifier.dataIndex];\n const formattedValue = series.valueFormatter(value, {\n dataIndex: identifier.dataIndex\n });\n return {\n identifier,\n color: getColor(identifier.dataIndex),\n label,\n value,\n formattedValue,\n markType: series.labelMarkType\n };\n};\nexport const axisTooltipGetter = series => {\n return Object.values(series).map(s => ({\n direction: 'x',\n axisId: s.xAxisId\n }));\n};\nexport default tooltipGetter;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nconst getSeriesWithDefaultValues = (seriesData, seriesIndex, colors) => {\n return _extends({}, seriesData, {\n id: seriesData.id ?? `auto-generated-id-${seriesIndex}`,\n color: seriesData.color ?? colors[seriesIndex % colors.length]\n });\n};\nexport default getSeriesWithDefaultValues;","const tooltipItemPositionGetter = params => {\n const {\n series,\n identifier,\n axesConfig\n } = params;\n if (!identifier || identifier.dataIndex === undefined) {\n return null;\n }\n const itemSeries = series.line?.series[identifier.seriesId];\n if (itemSeries == null) {\n return null;\n }\n if (axesConfig.x === undefined || axesConfig.y === undefined) {\n return null;\n }\n const xValue = axesConfig.x.data?.[identifier.dataIndex];\n const yValue = itemSeries.data[identifier.dataIndex];\n if (xValue == null || yValue == null) {\n return null;\n }\n return {\n x: axesConfig.x.scale(xValue),\n y: axesConfig.y.scale(yValue)\n };\n};\nexport default tooltipItemPositionGetter;","import { getExtremumX, getExtremumY } from \"./extremums.js\";\nimport seriesProcessor from \"./seriesProcessor.js\";\nimport getColor from \"./getColor.js\";\nimport legendGetter from \"./legend.js\";\nimport tooltipGetter, { axisTooltipGetter } from \"./tooltip.js\";\nimport getSeriesWithDefaultValues from \"./getSeriesWithDefaultValues.js\";\nimport tooltipItemPositionGetter from \"./tooltipPosition.js\";\nexport const lineSeriesConfig = {\n colorProcessor: getColor,\n seriesProcessor,\n legendGetter,\n tooltipGetter,\n tooltipItemPositionGetter,\n axisTooltipGetter,\n xExtremumGetter: getExtremumX,\n yExtremumGetter: getExtremumY,\n getSeriesWithDefaultValues\n};","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport { pie as d3Pie } from '@mui/x-charts-vendor/d3-shape';\nimport { getLabel } from \"../../internals/getLabel.js\";\nimport { deg2rad } from \"../../internals/angleConversion.js\";\nconst getSortingComparator = (comparator = 'none') => {\n if (typeof comparator === 'function') {\n return comparator;\n }\n switch (comparator) {\n case 'none':\n return null;\n case 'desc':\n return (a, b) => b - a;\n case 'asc':\n return (a, b) => a - b;\n default:\n return null;\n }\n};\nconst seriesProcessor = params => {\n const {\n seriesOrder,\n series\n } = params;\n const defaultizedSeries = {};\n seriesOrder.forEach(seriesId => {\n const arcs = d3Pie().startAngle(deg2rad(series[seriesId].startAngle ?? 0)).endAngle(deg2rad(series[seriesId].endAngle ?? 360)).padAngle(deg2rad(series[seriesId].paddingAngle ?? 0)).sortValues(getSortingComparator(series[seriesId].sortingValues ?? 'none'))(series[seriesId].data.map(piePoint => piePoint.value));\n defaultizedSeries[seriesId] = _extends({\n labelMarkType: 'circle',\n valueFormatter: item => item.value.toLocaleString()\n }, series[seriesId], {\n data: series[seriesId].data.map((item, index) => _extends({}, item, {\n id: item.id ?? `auto-generated-pie-id-${seriesId}-${index}`\n }, arcs[index])).map((item, index) => _extends({\n labelMarkType: 'circle'\n }, item, {\n formattedValue: series[seriesId].valueFormatter?.(_extends({}, item, {\n label: getLabel(item.label, 'arc')\n }), {\n dataIndex: index\n }) ?? item.value.toLocaleString()\n }))\n });\n });\n return {\n seriesOrder,\n series: defaultizedSeries\n };\n};\nexport default seriesProcessor;","const getColor = series => {\n return dataIndex => {\n return series.data[dataIndex].color;\n };\n};\nexport default getColor;","import { getLabel } from \"../../internals/getLabel.js\";\nconst legendGetter = params => {\n const {\n seriesOrder,\n series\n } = params;\n return seriesOrder.reduce((acc, seriesId) => {\n series[seriesId].data.forEach((item, dataIndex) => {\n const formattedLabel = getLabel(item.label, 'legend');\n if (formattedLabel === undefined) {\n return;\n }\n acc.push({\n markType: item.labelMarkType ?? series[seriesId].labelMarkType,\n id: item.id ?? dataIndex,\n seriesId,\n color: item.color,\n label: formattedLabel,\n itemId: item.id ?? dataIndex\n });\n });\n return acc;\n }, []);\n};\nexport default legendGetter;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport { getLabel } from \"../../internals/getLabel.js\";\nconst tooltipGetter = params => {\n const {\n series,\n getColor,\n identifier\n } = params;\n if (!identifier || identifier.dataIndex === undefined) {\n return null;\n }\n const point = series.data[identifier.dataIndex];\n if (point == null) {\n return null;\n }\n const label = getLabel(point.label, 'tooltip');\n const value = _extends({}, point, {\n label\n });\n const formattedValue = series.valueFormatter(value, {\n dataIndex: identifier.dataIndex\n });\n return {\n identifier,\n color: getColor(identifier.dataIndex),\n label,\n value,\n formattedValue,\n markType: point.labelMarkType ?? series.labelMarkType\n };\n};\nexport default tooltipGetter;","/**\n * Helper that converts values and percentages into values.\n * @param value The value provided by the developer. Can either be a number or a string with '%' or 'px'.\n * @param refValue The numerical value associated to 100%.\n * @returns The numerical value associated to the provided value.\n */\nexport function getPercentageValue(value, refValue) {\n if (typeof value === 'number') {\n return value;\n }\n if (value === '100%') {\n // Avoid potential rounding issues\n return refValue;\n }\n if (value.endsWith('%')) {\n const percentage = Number.parseFloat(value.slice(0, value.length - 1));\n if (!Number.isNaN(percentage)) {\n return percentage * refValue / 100;\n }\n }\n if (value.endsWith('px')) {\n const val = Number.parseFloat(value.slice(0, value.length - 2));\n if (!Number.isNaN(val)) {\n return val;\n }\n }\n throw new Error(`MUI X Charts: Received an unknown value \"${value}\". It should be a number, or a string with a percentage value.`);\n}","import { getPercentageValue } from \"../internals/getPercentageValue.js\";\nexport function getPieCoordinates(series, drawing) {\n const {\n height,\n width\n } = drawing;\n const {\n cx: cxParam,\n cy: cyParam\n } = series;\n const availableRadius = Math.min(width, height) / 2;\n const cx = getPercentageValue(cxParam ?? '50%', width);\n const cy = getPercentageValue(cyParam ?? '50%', height);\n return {\n cx,\n cy,\n availableRadius\n };\n}","import { getPercentageValue } from \"../../internals/getPercentageValue.js\";\nimport { getPieCoordinates } from \"../getPieCoordinates.js\";\nconst seriesLayout = (series, drawingArea) => {\n const seriesLayoutRecord = {};\n for (const seriesId of series.seriesOrder) {\n const {\n innerRadius,\n outerRadius,\n arcLabelRadius,\n cx: cxParam,\n cy: cyParam\n } = series.series[seriesId];\n const {\n cx,\n cy,\n availableRadius\n } = getPieCoordinates({\n cx: cxParam,\n cy: cyParam\n }, {\n width: drawingArea.width,\n height: drawingArea.height\n });\n const outer = getPercentageValue(outerRadius ?? availableRadius, availableRadius);\n const inner = getPercentageValue(innerRadius ?? 0, availableRadius);\n const label = arcLabelRadius === undefined ? (inner + outer) / 2 : getPercentageValue(arcLabelRadius, availableRadius);\n seriesLayoutRecord[seriesId] = {\n radius: {\n available: availableRadius,\n inner,\n outer,\n label\n },\n center: {\n x: drawingArea.left + cx,\n y: drawingArea.top + cy\n }\n };\n }\n return seriesLayoutRecord;\n};\nexport default seriesLayout;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nconst getSeriesWithDefaultValues = (seriesData, seriesIndex, colors) => {\n return _extends({}, seriesData, {\n id: seriesData.id ?? `auto-generated-id-${seriesIndex}`,\n data: seriesData.data.map((d, index) => _extends({}, d, {\n color: d.color ?? colors[index % colors.length]\n }))\n });\n};\nexport default getSeriesWithDefaultValues;","import { findMinMax } from \"../../internals/findMinMax.js\";\nimport { getPercentageValue } from \"../../internals/getPercentageValue.js\";\nimport { getPieCoordinates } from \"../getPieCoordinates.js\";\nconst tooltipItemPositionGetter = params => {\n const {\n series,\n drawingArea,\n identifier,\n placement\n } = params;\n if (!identifier || identifier.dataIndex === undefined) {\n return null;\n }\n const itemSeries = series.pie?.series[identifier.seriesId];\n if (itemSeries == null) {\n return null;\n }\n const {\n cx,\n cy,\n availableRadius\n } = getPieCoordinates({\n cx: itemSeries.cx,\n cy: itemSeries.cy\n }, drawingArea);\n const {\n data,\n innerRadius: baseInnerRadius = 0,\n outerRadius: baseOuterRadius\n } = itemSeries;\n const innerRadius = Math.max(0, getPercentageValue(baseInnerRadius ?? 0, availableRadius));\n const outerRadius = Math.max(0, getPercentageValue(baseOuterRadius ?? availableRadius, availableRadius));\n const dataItem = data[identifier.dataIndex];\n if (!dataItem) {\n return null;\n }\n\n // Compute the 4 corner points of the arc to get the bounding box.\n const points = [[innerRadius, dataItem.startAngle], [innerRadius, dataItem.endAngle], [outerRadius, dataItem.startAngle], [outerRadius, dataItem.endAngle]].map(([radius, angle]) => ({\n x: cx + radius * Math.sin(angle),\n y: cy - radius * Math.cos(angle)\n }));\n const [x0, x1] = findMinMax(points.map(p => p.x));\n const [y0, y1] = findMinMax(points.map(p => p.y));\n switch (placement) {\n case 'bottom':\n return {\n x: (x1 + x0) / 2,\n y: y1\n };\n case 'left':\n return {\n x: x0,\n y: (y1 + y0) / 2\n };\n case 'right':\n return {\n x: x1,\n y: (y1 + y0) / 2\n };\n case 'top':\n default:\n return {\n x: (x1 + x0) / 2,\n y: y0\n };\n }\n};\nexport default tooltipItemPositionGetter;","import seriesProcessor from \"./seriesProcessor.js\";\nimport getColor from \"./getColor.js\";\nimport legendGetter from \"./legend.js\";\nimport tooltipGetter from \"./tooltip.js\";\nimport seriesLayout from \"./seriesLayout.js\";\nimport getSeriesWithDefaultValues from \"./getSeriesWithDefaultValues.js\";\nimport tooltipItemPositionGetter from \"./tooltipPosition.js\";\nexport const pieSeriesConfig = {\n colorProcessor: getColor,\n seriesProcessor,\n seriesLayout,\n legendGetter,\n tooltipGetter,\n tooltipItemPositionGetter,\n getSeriesWithDefaultValues\n};","'use client';\n\nimport * as React from 'react';\nimport { useCharts } from \"../../internals/store/useCharts.js\";\nimport { ChartContext } from \"./ChartContext.js\";\nimport { useChartCartesianAxis } from \"../../internals/plugins/featurePlugins/useChartCartesianAxis/index.js\";\nimport { useChartTooltip } from \"../../internals/plugins/featurePlugins/useChartTooltip/index.js\";\nimport { useChartInteraction } from \"../../internals/plugins/featurePlugins/useChartInteraction/index.js\";\nimport { useChartZAxis } from \"../../internals/plugins/featurePlugins/useChartZAxis/index.js\";\nimport { useChartHighlight } from \"../../internals/plugins/featurePlugins/useChartHighlight/useChartHighlight.js\";\nimport { barSeriesConfig } from \"../../BarChart/seriesConfig/index.js\";\nimport { scatterSeriesConfig } from \"../../ScatterChart/seriesConfig/index.js\";\nimport { lineSeriesConfig } from \"../../LineChart/seriesConfig/index.js\";\nimport { pieSeriesConfig } from \"../../PieChart/seriesConfig/index.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport const defaultSeriesConfig = {\n bar: barSeriesConfig,\n scatter: scatterSeriesConfig,\n line: lineSeriesConfig,\n pie: pieSeriesConfig\n};\n\n// For consistency with the v7, the cartesian axes are set by default.\n// To remove them, you can provide a `plugins` props.\nconst defaultPlugins = [useChartZAxis, useChartTooltip, useChartInteraction, useChartCartesianAxis, useChartHighlight];\nfunction ChartProvider(props) {\n const {\n children,\n plugins = defaultPlugins,\n pluginParams = {},\n seriesConfig = defaultSeriesConfig\n } = props;\n const {\n contextValue\n } = useCharts(plugins, pluginParams, seriesConfig);\n return /*#__PURE__*/_jsx(ChartContext.Provider, {\n value: contextValue,\n children: children\n });\n}\nexport { ChartProvider };","'use client';\n\nimport * as React from 'react';\nimport { ChartContext } from \"./ChartContext.js\";\nexport const useChartContext = () => {\n const context = React.useContext(ChartContext);\n if (context == null) {\n throw new Error(['MUI X Charts: Could not find the Chart context.', 'It looks like you rendered your component outside of a ChartDataProvider.', 'This can also happen if you are bundling multiple versions of the library.'].join('\\n'));\n }\n return context;\n};","import { useChartContext } from \"../../context/ChartProvider/index.js\";\n// This hook should be removed because user and us should not interact with the store directly, but with public/private APIs\nexport function useStore() {\n const context = useChartContext();\n if (!context) {\n throw new Error(['MUI X Charts: Could not find the charts context.', 'It looks like you rendered your component outside of a ChartContainer parent component.'].join('\\n'));\n }\n return context.store;\n}","'use client';\n\nimport { useStore } from \"../internals/store/useStore.js\";\nimport { useSelector } from \"../internals/store/useSelector.js\";\nimport { selectorChartDrawingArea } from \"../internals/plugins/corePlugins/useChartDimensions/useChartDimensions.selectors.js\";\n/**\n * Get the drawing area dimensions and coordinates. The drawing area is the area where the chart is rendered.\n *\n * It includes the left, top, width, height, bottom, and right dimensions.\n *\n * @returns The drawing area dimensions.\n */\nexport function useDrawingArea() {\n const store = useStore();\n return useSelector(store, selectorChartDrawingArea);\n}","'use client';\n\nimport { useStore } from \"../internals/store/useStore.js\";\nimport { useSelector } from \"../internals/store/useSelector.js\";\nimport { selectorChartId } from \"../internals/plugins/corePlugins/useChartId/useChartId.selectors.js\";\n\n/**\n * Get the unique identifier of the chart.\n * @returns chartId if it exists.\n */\nexport function useChartId() {\n const store = useStore();\n return useSelector(store, selectorChartId);\n}","'use client';\n\nimport { selectorChartXAxis, selectorChartYAxis } from \"../internals/plugins/featurePlugins/useChartCartesianAxis/useChartCartesianAxisRendering.selectors.js\";\nimport { selectorChartRadiusAxis, selectorChartRotationAxis } from \"../internals/plugins/featurePlugins/useChartPolarAxis/index.js\";\nimport { useSelector } from \"../internals/store/useSelector.js\";\nimport { useStore } from \"../internals/store/useStore.js\";\n/**\n * Get all the x-axes.\n *\n * Returns all X axes configured in the chart along with their IDs.\n * This is useful when you need to iterate over multiple axes or access all axis configurations at once.\n *\n * @returns An object containing:\n * - `xAxis`: An object mapping axis IDs to their configurations `{ [axisId]: axis }`\n * - `xAxisIds`: An array of all X axis IDs in the chart\n *\n * @example\n * const { xAxis, xAxisIds } = useXAxes();\n *\n * @see `useXAxis` for accessing a single X axis\n */\nexport function useXAxes() {\n const store = useStore();\n const {\n axis: xAxis,\n axisIds: xAxisIds\n } = useSelector(store, selectorChartXAxis);\n return {\n xAxis,\n xAxisIds\n };\n}\n\n/**\n * Get all the y-axes.\n *\n * Returns all Y axes configured in the chart along with their IDs.\n * This is useful when you need to iterate over multiple axes or access all axis configurations at once.\n *\n * @returns An object containing:\n * - `yAxis`: An object mapping axis IDs to their configurations `{ [axisId]: axis }`\n * - `yAxisIds`: An array of all Y axis IDs in the chart\n *\n * @example\n * const { yAxis, yAxisIds } = useYAxes();\n *\n * @see `useYAxis` for accessing a single Y axis\n */\nexport function useYAxes() {\n const store = useStore();\n const {\n axis: yAxis,\n axisIds: yAxisIds\n } = useSelector(store, selectorChartYAxis);\n return {\n yAxis,\n yAxisIds\n };\n}\n\n/**\n * Get a specific X axis or the default X axis.\n *\n * @param {AxisId} [axisId] - The axis identifier. Can be:\n * - A string or number matching the axis ID defined in the chart's `xAxis` prop\n * - Undefined to get the default (first) X axis\n * @returns The configuration for a single X axis.\n *\n * @example\n * // Get the default X axis\n * const xAxis = useXAxis();\n *\n * @example\n * // Get a specific X axis by string ID\n * const xAxis = useXAxis('revenue');\n */\nexport function useXAxis(axisId) {\n const store = useStore();\n const {\n axis: xAxis,\n axisIds: xAxisIds\n } = useSelector(store, selectorChartXAxis);\n const id = axisId ?? xAxisIds[0];\n return xAxis[id];\n}\n\n/**\n * Get a specific Y axis or the default Y axis.\n *\n * @param {AxisId} [axisId] - The axis identifier. Can be:\n * - A string or number matching the axis ID defined in the chart's `yAxis` prop\n * - Undefined to get the default (first) Y axis\n * @returns The configuration for a single Y axis.\n *\n * @example\n * // Get the default Y axis\n * const yAxis = useYAxis();\n *\n * @example\n * // Get a specific Y axis by string ID\n * const yAxis = useYAxis('temperature');\n */\nexport function useYAxis(axisId) {\n const store = useStore();\n const {\n axis: yAxis,\n axisIds: yAxisIds\n } = useSelector(store, selectorChartYAxis);\n const id = axisId ?? yAxisIds[0];\n return yAxis[id];\n}\n\n/**\n * Get all the rotation axes for polar charts.\n *\n * Returns all rotation axes configured in polar charts along with their IDs.\n * Rotation axes are used in charts like `RadarChart` to define angular positioning.\n *\n * @returns An object containing:\n * - `rotationAxis`: An object mapping axis IDs to their configurations `{ [axisId]: axis }`\n * - `rotationAxisIds`: An array of all rotation axis IDs in the chart\n *\n * @example\n * const { rotationAxis, rotationAxisIds } = useRotationAxes();\n *\n * @see `useRotationAxis` for accessing a single rotation axis\n */\nexport function useRotationAxes() {\n const store = useStore();\n const {\n axis: rotationAxis,\n axisIds: rotationAxisIds\n } = useSelector(store, selectorChartRotationAxis);\n return {\n rotationAxis,\n rotationAxisIds\n };\n}\n\n/**\n * Get all the radius axes for polar charts.\n *\n * Returns all radial axes configured in polar charts along with their IDs.\n * Radius axes are used in charts like `RadarChart` to define radial positioning and scaling.\n *\n * @returns An object containing:\n * - `radiusAxis`: An object mapping axis IDs to their configurations `{ [axisId]: axis }`\n * - `radiusAxisIds`: An array of all radius axis IDs in the chart\n *\n * @example\n * const { radiusAxis, radiusAxisIds } = useRadiusAxes();\n *\n * @see `useRadiusAxis` for accessing a single radius axis\n */\nexport function useRadiusAxes() {\n const store = useStore();\n const {\n axis: radiusAxis,\n axisIds: radiusAxisIds\n } = useSelector(store, selectorChartRadiusAxis);\n return {\n radiusAxis,\n radiusAxisIds\n };\n}\n\n/**\n * Get a specific rotation axis or the default rotation axis for polar charts.\n *\n * Returns the configuration and scale for a rotation axis in polar charts.\n * The rotation axis controls the angular positioning of data points around the circle.\n *\n * @param {AxisId} [axisId] - The axis identifier. Can be:\n * - A string or number matching the axis ID defined in the chart's rotation axis configuration\n * - Undefined to get the default (first) rotation axis\n * @returns The rotation axis configuration, or undefined if not found\n *\n * @example\n * // Get the default rotation axis\n * const rotationAxis = useRotationAxis();\n *\n * @example\n * // Get a specific rotation axis by string ID\n * const rotationAxis = useRotationAxis('categories');\n */\nexport function useRotationAxis(axisId) {\n const store = useStore();\n const {\n axis: rotationAxis,\n axisIds: rotationAxisIds\n } = useSelector(store, selectorChartRotationAxis);\n const id = axisId ?? rotationAxisIds[0];\n return rotationAxis[id];\n}\n\n/**\n * Get a specific radius axis or the default radius axis for polar charts.\n *\n * Returns the configuration and scale for a radial axis in polar charts.\n * The radius axis controls the radial distance of data points from the center of the circle.\n *\n * @param {AxisId} [axisId] - The axis identifier. Can be:\n * - A string or number matching the axis ID defined in the chart's radius axis configuration\n * - Undefined to get the default (first) radius axis\n * @returns The radius axis configuration, or undefined if not found\n *\n * @example\n * // Get the default radius axis\n * const radiusAxis = useRadiusAxis();\n *\n * @example\n * // Get a specific radius axis by string ID\n * const radiusAxis = useRadiusAxis('magnitude');\n */\nexport function useRadiusAxis(axisId) {\n const store = useStore();\n const {\n axis: radiusAxis,\n axisIds: radiusAxisIds\n } = useSelector(store, selectorChartRadiusAxis);\n const id = axisId ?? radiusAxisIds[0];\n return radiusAxis[id];\n}","'use client';\n\nimport { useStore } from \"../internals/store/useStore.js\";\nimport { selectorChartZAxis } from \"../internals/plugins/featurePlugins/useChartZAxis/index.js\";\nimport { useSelector } from \"../internals/store/useSelector.js\";\nexport function useZAxes() {\n const store = useStore();\n const {\n axis: zAxis,\n axisIds: zAxisIds\n } = useSelector(store, selectorChartZAxis) ?? {\n axis: {},\n axisIds: []\n };\n return {\n zAxis,\n zAxisIds\n };\n}\nexport function useZAxis(identifier) {\n const {\n zAxis,\n zAxisIds\n } = useZAxes();\n const id = typeof identifier === 'string' ? identifier : zAxisIds[identifier ?? 0];\n return zAxis[id];\n}","'use client';\n\nimport { useChartContext } from \"../context/ChartProvider/index.js\";\n\n/**\n * Get the ref for the SVG element.\n * @returns The SVG ref.\n */\nexport function useSvgRef() {\n const context = useChartContext();\n if (!context) {\n throw new Error(['MUI X Charts: Could not find the svg ref context.', 'It looks like you rendered your component outside of a ChartContainer parent component.'].join('\\n'));\n }\n return context.svgRef;\n}","'use client';\n\nimport * as React from 'react';\nimport { useChartId } from \"./useChartId.js\";\n/**\n * Returns a function that generates a gradient id for the given axis id.\n */\nexport function useChartGradientIdBuilder() {\n const chartId = useChartId();\n return React.useCallback(axisId => `${chartId}-gradient-${axisId}`, [chartId]);\n}\n\n/**\n * Returns a function that generates a gradient id for the given axis id.\n */\nexport function useChartGradientIdObjectBoundBuilder() {\n const chartId = useChartId();\n return React.useCallback(axisId => `${chartId}-gradient-${axisId}-object-bound`, [chartId]);\n}\n\n/**\n * Returns a gradient id for the given axis id.\n *\n * Can be useful when reusing the same gradient on custom components.\n *\n * For a gradient that respects the coordinates of the object on which it is applied, use `useChartGradientIdObjectBound` instead.\n *\n * @param axisId the axis id\n * @returns the gradient id\n */\nexport function useChartGradientId(axisId) {\n return useChartGradientIdBuilder()(axisId);\n}\n\n/**\n * Returns a gradient id for the given axis id.\n *\n * Can be useful when reusing the same gradient on custom components.\n *\n * This gradient differs from `useChartGradientId` in that it respects the coordinates of the object on which it is applied.\n *\n * @param axisId the axis id\n * @returns the gradient id\n */\nexport function useChartGradientIdObjectBound(axisId) {\n return useChartGradientIdObjectBoundBuilder()(axisId);\n}","/**\n * https://github.com/gre/bezier-easing\n * BezierEasing - use bezier curve for transition easing function\n * by Gaëtan Renaudeau 2014 - 2015 – MIT License\n */\n\n// These values are established by empiricism with tests (tradeoff: performance VS precision)\nvar NEWTON_ITERATIONS = 4;\nvar NEWTON_MIN_SLOPE = 0.001;\nvar SUBDIVISION_PRECISION = 0.0000001;\nvar SUBDIVISION_MAX_ITERATIONS = 10;\n\nvar kSplineTableSize = 11;\nvar kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\n\nvar float32ArraySupported = typeof Float32Array === 'function';\n\nfunction A (aA1, aA2) { return 1.0 - 3.0 * aA2 + 3.0 * aA1; }\nfunction B (aA1, aA2) { return 3.0 * aA2 - 6.0 * aA1; }\nfunction C (aA1) { return 3.0 * aA1; }\n\n// Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\nfunction calcBezier (aT, aA1, aA2) { return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT; }\n\n// Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\nfunction getSlope (aT, aA1, aA2) { return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1); }\n\nfunction binarySubdivide (aX, aA, aB, mX1, mX2) {\n var currentX, currentT, i = 0;\n do {\n currentT = aA + (aB - aA) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - aX;\n if (currentX > 0.0) {\n aB = currentT;\n } else {\n aA = currentT;\n }\n } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n return currentT;\n}\n\nfunction newtonRaphsonIterate (aX, aGuessT, mX1, mX2) {\n for (var i = 0; i < NEWTON_ITERATIONS; ++i) {\n var currentSlope = getSlope(aGuessT, mX1, mX2);\n if (currentSlope === 0.0) {\n return aGuessT;\n }\n var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n aGuessT -= currentX / currentSlope;\n }\n return aGuessT;\n}\n\nfunction LinearEasing (x) {\n return x;\n}\n\nmodule.exports = function bezier (mX1, mY1, mX2, mY2) {\n if (!(0 <= mX1 && mX1 <= 1 && 0 <= mX2 && mX2 <= 1)) {\n throw new Error('bezier x values must be in [0, 1] range');\n }\n\n if (mX1 === mY1 && mX2 === mY2) {\n return LinearEasing;\n }\n\n // Precompute samples table\n var sampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\n for (var i = 0; i < kSplineTableSize; ++i) {\n sampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n }\n\n function getTForX (aX) {\n var intervalStart = 0.0;\n var currentSample = 1;\n var lastSample = kSplineTableSize - 1;\n\n for (; currentSample !== lastSample && sampleValues[currentSample] <= aX; ++currentSample) {\n intervalStart += kSampleStepSize;\n }\n --currentSample;\n\n // Interpolate to provide an initial guess for t\n var dist = (aX - sampleValues[currentSample]) / (sampleValues[currentSample + 1] - sampleValues[currentSample]);\n var guessForT = intervalStart + dist * kSampleStepSize;\n\n var initialSlope = getSlope(guessForT, mX1, mX2);\n if (initialSlope >= NEWTON_MIN_SLOPE) {\n return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n } else if (initialSlope === 0.0) {\n return guessForT;\n } else {\n return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\n }\n }\n\n return function BezierEasing (x) {\n // Because JavaScript number are imprecise, we should guarantee the extremes are right.\n if (x === 0) {\n return 0;\n }\n if (x === 1) {\n return 1;\n }\n return calcBezier(getTForX(x), mY1, mY2);\n };\n};\n","import BezierEasing from 'bezier-easing';\nexport const ANIMATION_DURATION_MS = 300;\nexport const ANIMATION_TIMING_FUNCTION = 'cubic-bezier(0.66, 0, 0.34, 1)';\nexport const ANIMATION_TIMING_FUNCTION_JS = BezierEasing(0.66, 0, 0.34, 1);","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(elapsed => {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n","import { timer, now, timeout } from '@mui/x-charts-vendor/d3-timer';\n\n/**\n * A resumable transition class inspired by d3-transition.\n * Allows for starting, and stopping and resuming transitions.\n *\n * The transition is started automatically.\n * A transition cannot be restarted after it has finished.\n * Resuming a transition will continue from the point it was stopped, i.e., easing will continue from the point it was\n * stopped.\n */\nexport class Transition {\n elapsed = 0;\n timer = null;\n /**\n * Create a new ResumableTransition.\n * @param duration Duration in milliseconds\n * @param easingFn The easing function\n * @param onTick Callback function called on each animation frame with the eased time in range [0, 1].\n */\n constructor(duration, easingFn, onTick) {\n this.duration = duration;\n this.easingFn = easingFn;\n this.onTickCallback = onTick;\n this.resume();\n }\n get running() {\n return this.timer !== null;\n }\n timerCallback(elapsed) {\n this.elapsed = Math.min(elapsed, this.duration);\n const t = this.duration === 0 ? 1 : this.elapsed / this.duration;\n const easedT = this.easingFn(t);\n\n // Call the tick callback with the current value\n this.onTickCallback(easedT);\n if (this.elapsed >= this.duration) {\n this.stop();\n }\n }\n\n /**\n * Resume the transition\n */\n resume() {\n if (this.running || this.elapsed >= this.duration) {\n return this;\n }\n\n /* If we're resuming the transition, then subtract elapsed to continue the easing. */\n const time = now() - this.elapsed;\n this.timer = timer(elapsed => this.timerCallback(elapsed), 0, time);\n return this;\n }\n\n /**\n * Stops the transition.\n */\n stop() {\n if (!this.running) {\n return this;\n }\n if (this.timer) {\n this.timer.stop();\n this.timer = null;\n }\n return this;\n }\n\n /**\n * Immediately finishes the transition and calls the tick callback with the final value.\n */\n finish() {\n this.stop();\n timeout(() => this.timerCallback(this.duration));\n return this;\n }\n}","/**\n * Performs equality by iterating through keys on an object and returning false\n * when any key has values which are not strictly equal between the arguments.\n * Returns true when the values of all keys are strictly equal.\n *\n * Source: https://github.com/facebook/react/blob/c2a196174763e0b4f16ed1c512ed4442b062395e/packages/shared/shallowEqual.js#L18\n */\nexport function shallowEqual(objA, objB) {\n if (Object.is(objA, objB)) {\n return true;\n }\n if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {\n return false;\n }\n const keysA = Object.keys(objA);\n const keysB = Object.keys(objB);\n if (keysA.length !== keysB.length) {\n return false;\n }\n\n // Test for A's keys different from B.\n for (let i = 0; i < keysA.length; i += 1) {\n const currentKey = keysA[i];\n if (!Object.prototype.hasOwnProperty.call(objB, currentKey) ||\n // @ts-ignore\n !Object.is(objA[currentKey], objB[currentKey])) {\n return false;\n }\n }\n return true;\n}","'use client';\n\nimport * as React from 'react';\nimport useEnhancedEffect from '@mui/utils/useEnhancedEffect';\nimport { ANIMATION_DURATION_MS, ANIMATION_TIMING_FUNCTION_JS } from \"./animation.js\";\nimport { Transition } from \"./Transition.js\";\nimport { shallowEqual } from \"../shallowEqual.js\";\n\n/** Animates a ref. The animation can be skipped by setting {@link skip} to true.\n *\n * If possible, prefer {@link useAnimate}.\n *\n * - If {@link skip} is false, a transition will be started.\n * - If {@link skip} is true and no transition is in progress, no transition will be started and {@link applyProps} will\n * never be called.\n * - If {@link skip} becomes true and a transition is in progress, the transition will immediately end and\n * {@link applyProps} be called with the final value.\n * */\nexport function useAnimateInternal(props, {\n createInterpolator,\n applyProps,\n skip,\n initialProps = props\n}) {\n const lastInterpolatedPropsRef = React.useRef(initialProps);\n const transitionRef = React.useRef(null);\n const elementRef = React.useRef(null);\n const lastPropsRef = React.useRef(props);\n useEnhancedEffect(() => {\n lastPropsRef.current = props;\n }, [props]);\n useEnhancedEffect(() => {\n if (skip) {\n transitionRef.current?.finish();\n transitionRef.current = null;\n elementRef.current = null;\n lastInterpolatedPropsRef.current = props;\n }\n }, [props, skip]);\n const animate = React.useCallback(element => {\n const lastInterpolatedProps = lastInterpolatedPropsRef.current;\n const interpolate = createInterpolator(lastInterpolatedProps, props);\n transitionRef.current = new Transition(ANIMATION_DURATION_MS, ANIMATION_TIMING_FUNCTION_JS, t => {\n const interpolatedProps = interpolate(t);\n lastInterpolatedPropsRef.current = interpolatedProps;\n applyProps(element, interpolatedProps);\n });\n }, [applyProps, createInterpolator, props]);\n const setRef = React.useCallback(element => {\n if (element === null) {\n transitionRef.current?.stop();\n return;\n }\n const lastElement = elementRef.current;\n if (lastElement === element) {\n // If it's the same element and same props, resume the transition.\n if (shallowEqual(lastPropsRef.current, props)) {\n transitionRef.current?.resume();\n return;\n }\n\n // If props aren't the same, stop the transition and start a new animation.\n transitionRef.current?.stop();\n }\n\n // If it's a different element, stop the transition of the last element and start a new animation.\n if (lastElement) {\n transitionRef.current?.stop();\n }\n elementRef.current = element;\n if (transitionRef.current || !skip) {\n animate(element);\n }\n }, [animate, props, skip]);\n return [setRef, lastInterpolatedPropsRef.current];\n}","'use client';\n\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport useForkRef from '@mui/utils/useForkRef';\nimport { useAnimateInternal } from \"../../internals/animation/useAnimateInternal.js\";\n/**\n * Hook to customize the animation of an element.\n * Animates a ref from `initialProps` to `props`.\n *\n * @param {object} props The props to animate to.\n *\n * @returns an object containing a ref that should be passed to the element to animate and the transformed props.\n * If `skip` is true, the transformed props are the `props` to animate to; if it is false, the transformed props are the\n * `initialProps`.\n *\n * The animated props are only accessible in `applyProps`. The props returned from this hook are not animated.\n *\n * When an animation starts, an interpolator is created using `createInterpolator`.\n * On every animation frame:\n * 1. The interpolator is called to get the interpolated props;\n * 2. `transformProps` is called to transform the interpolated props;\n * 3. `applyProps` is called to apply the transformed props to the element.\n *\n * If `props` change while an animation is progress, the animation will continue towards the new `props`.\n *\n * The animation can be skipped by setting `skip` to true. If a transition is in progress, it will immediately end\n * and `applyProps` be called with the final value. If there isn't a transition in progress, a new one won't be\n * started and `applyProps` will not be called.\n * */\nexport function useAnimate(props, {\n createInterpolator,\n transformProps,\n applyProps,\n skip,\n initialProps = props,\n ref\n}) {\n const transform = transformProps ?? (p => p);\n const [animateRef, lastInterpolatedProps] = useAnimateInternal(props, {\n initialProps,\n createInterpolator,\n applyProps: (element, animatedProps) => applyProps(element, transform(animatedProps)),\n skip\n });\n const usedProps = skip ? transformProps(props) : transformProps(lastInterpolatedProps);\n return _extends({}, usedProps, {\n ref: useForkRef(animateRef, ref)\n });\n}","import * as React from 'react';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport default function ChartsPiecewiseGradient(props) {\n const {\n isReversed,\n gradientId,\n size,\n direction,\n scale,\n colorMap\n } = props;\n if (size <= 0) {\n return null;\n }\n return /*#__PURE__*/_jsx(\"linearGradient\", {\n id: gradientId,\n x1: \"0\",\n x2: \"0\",\n y1: \"0\",\n y2: \"0\",\n [`${direction}${isReversed ? 1 : 2}`]: `${size}px`,\n gradientUnits: \"userSpaceOnUse\" // Use the SVG coordinate instead of the component ones.\n ,\n children: colorMap.thresholds.map((threshold, index) => {\n const x = scale(threshold);\n if (x === undefined) {\n return null;\n }\n const offset = isReversed ? 1 - x / size : x / size;\n if (Number.isNaN(offset)) {\n return null;\n }\n return /*#__PURE__*/_jsxs(React.Fragment, {\n children: [/*#__PURE__*/_jsx(\"stop\", {\n offset: offset,\n stopColor: colorMap.colors[index],\n stopOpacity: 1\n }), /*#__PURE__*/_jsx(\"stop\", {\n offset: offset,\n stopColor: colorMap.colors[index + 1],\n stopOpacity: 1\n })]\n }, threshold.toString() + index);\n })\n });\n}","import { interpolateDate, interpolateNumber } from '@mui/x-charts-vendor/d3-interpolate';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst PX_PRECISION = 10;\nexport default function ChartsContinuousGradient(props) {\n const {\n gradientUnits,\n isReversed,\n gradientId,\n size,\n direction,\n scale,\n colorScale,\n colorMap\n } = props;\n const extremumValues = [colorMap.min ?? 0, colorMap.max ?? 100];\n const extremumPositions = extremumValues.map(scale).filter(p => p !== undefined);\n if (extremumPositions.length !== 2) {\n return null;\n }\n const interpolator = typeof extremumValues[0] === 'number' ? interpolateNumber(extremumValues[0], extremumValues[1]) : interpolateDate(extremumValues[0], extremumValues[1]);\n const numberOfPoints = Math.round((Math.max(...extremumPositions) - Math.min(...extremumPositions)) / PX_PRECISION);\n const keyPrefix = `${extremumValues[0]}-${extremumValues[1]}-`;\n return /*#__PURE__*/_jsx(\"linearGradient\", {\n id: gradientId,\n x1: \"0\",\n x2: \"0\",\n y1: \"0\",\n y2: \"0\",\n [`${direction}${isReversed ? 1 : 2}`]: gradientUnits === 'objectBoundingBox' ? 1 : `${size}px`,\n gradientUnits: gradientUnits ?? 'userSpaceOnUse' // Use the SVG coordinate instead of the component ones.\n ,\n children: Array.from({\n length: numberOfPoints + 1\n }, (_, index) => {\n const value = interpolator(index / numberOfPoints);\n if (value === undefined) {\n return null;\n }\n const x = scale(value);\n if (x === undefined) {\n return null;\n }\n const offset = isReversed ? 1 - x / size : x / size;\n const color = colorScale(value);\n if (color === null) {\n return null;\n }\n return /*#__PURE__*/_jsx(\"stop\", {\n offset: offset,\n stopColor: color,\n stopOpacity: 1\n }, keyPrefix + index);\n })\n });\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport { interpolateDate, interpolateNumber } from '@mui/x-charts-vendor/d3-interpolate';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst PX_PRECISION = 10;\nconst getDirection = isReversed => {\n if (isReversed) {\n return {\n x1: '1',\n x2: '0',\n y1: '0',\n y2: '0'\n };\n }\n return {\n x1: '0',\n x2: '1',\n y1: '0',\n y2: '0'\n };\n};\n\n/**\n * Generates gradients to be used in tooltips and legends.\n */\nexport default function ChartsContinuousGradientObjectBound(props) {\n const {\n isReversed,\n gradientId,\n colorScale,\n colorMap\n } = props;\n const extremumValues = [colorMap.min ?? 0, colorMap.max ?? 100];\n const interpolator = typeof extremumValues[0] === 'number' ? interpolateNumber(extremumValues[0], extremumValues[1]) : interpolateDate(extremumValues[0], extremumValues[1]);\n const numberOfPoints = PX_PRECISION;\n const keyPrefix = `${extremumValues[0]}-${extremumValues[1]}-`;\n return /*#__PURE__*/_jsx(\"linearGradient\", _extends({\n id: gradientId\n }, getDirection(isReversed), {\n gradientUnits: 'objectBoundingBox' // Use the SVG coordinate instead of the component ones.\n ,\n children: Array.from({\n length: numberOfPoints + 1\n }, (_, index) => {\n const offset = index / numberOfPoints;\n const value = interpolator(offset);\n if (value === undefined) {\n return null;\n }\n const color = colorScale(value);\n if (color === null) {\n return null;\n }\n return /*#__PURE__*/_jsx(\"stop\", {\n offset: offset,\n stopColor: color,\n stopOpacity: 1\n }, keyPrefix + index);\n })\n }));\n}","import * as React from 'react';\nimport { useDrawingArea, useXAxes, useYAxes } from \"../../../hooks/index.js\";\nimport ChartsPiecewiseGradient from \"./ChartsPiecewiseGradient.js\";\nimport ChartsContinuousGradient from \"./ChartsContinuousGradient.js\";\nimport ChartsContinuousGradientObjectBound from \"./ChartsContinuousGradientObjectBound.js\";\nimport { useZAxes } from \"../../../hooks/useZAxis.js\";\nimport { useChartGradientIdBuilder, useChartGradientIdObjectBoundBuilder } from \"../../../hooks/useChartGradientId.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport function ChartsAxesGradients() {\n const {\n top,\n height,\n bottom,\n left,\n width,\n right\n } = useDrawingArea();\n const svgHeight = top + height + bottom;\n const svgWidth = left + width + right;\n const getGradientId = useChartGradientIdBuilder();\n const getObjectBoundGradientId = useChartGradientIdObjectBoundBuilder();\n const {\n xAxis,\n xAxisIds\n } = useXAxes();\n const {\n yAxis,\n yAxisIds\n } = useYAxes();\n const {\n zAxis,\n zAxisIds\n } = useZAxes();\n const filteredYAxisIds = yAxisIds.filter(axisId => yAxis[axisId].colorMap !== undefined);\n const filteredXAxisIds = xAxisIds.filter(axisId => xAxis[axisId].colorMap !== undefined);\n const filteredZAxisIds = zAxisIds.filter(axisId => zAxis[axisId].colorMap !== undefined);\n if (filteredYAxisIds.length === 0 && filteredXAxisIds.length === 0 && filteredZAxisIds.length === 0) {\n return null;\n }\n return /*#__PURE__*/_jsxs(\"defs\", {\n children: [filteredYAxisIds.map(axisId => {\n const gradientId = getGradientId(axisId);\n const objectBoundGradientId = getObjectBoundGradientId(axisId);\n const {\n colorMap,\n scale,\n colorScale,\n reverse\n } = yAxis[axisId];\n if (colorMap?.type === 'piecewise') {\n return /*#__PURE__*/_jsx(ChartsPiecewiseGradient, {\n isReversed: !reverse,\n scale: scale,\n colorMap: colorMap,\n size: svgHeight,\n gradientId: gradientId,\n direction: \"y\"\n }, gradientId);\n }\n if (colorMap?.type === 'continuous') {\n return /*#__PURE__*/_jsxs(React.Fragment, {\n children: [/*#__PURE__*/_jsx(ChartsContinuousGradient, {\n isReversed: !reverse,\n scale: scale,\n colorScale: colorScale,\n colorMap: colorMap,\n size: svgHeight,\n gradientId: gradientId,\n direction: \"y\"\n }), /*#__PURE__*/_jsx(ChartsContinuousGradientObjectBound, {\n isReversed: reverse,\n colorScale: colorScale,\n colorMap: colorMap,\n gradientId: objectBoundGradientId\n })]\n }, gradientId);\n }\n return null;\n }), filteredXAxisIds.map(axisId => {\n const gradientId = getGradientId(axisId);\n const objectBoundGradientId = getObjectBoundGradientId(axisId);\n const {\n colorMap,\n scale,\n reverse,\n colorScale\n } = xAxis[axisId];\n if (colorMap?.type === 'piecewise') {\n return /*#__PURE__*/_jsx(ChartsPiecewiseGradient, {\n isReversed: reverse,\n scale: scale,\n colorMap: colorMap,\n size: svgWidth,\n gradientId: gradientId,\n direction: \"x\"\n }, gradientId);\n }\n if (colorMap?.type === 'continuous') {\n return /*#__PURE__*/_jsxs(React.Fragment, {\n children: [/*#__PURE__*/_jsx(ChartsContinuousGradient, {\n isReversed: reverse,\n scale: scale,\n colorScale: colorScale,\n colorMap: colorMap,\n size: svgWidth,\n gradientId: gradientId,\n direction: \"x\"\n }), /*#__PURE__*/_jsx(ChartsContinuousGradientObjectBound, {\n isReversed: reverse,\n colorScale: colorScale,\n colorMap: colorMap,\n gradientId: objectBoundGradientId\n })]\n }, gradientId);\n }\n return null;\n }), filteredZAxisIds.map(axisId => {\n const objectBoundGradientId = getObjectBoundGradientId(axisId);\n const {\n colorMap,\n colorScale\n } = zAxis[axisId];\n if (colorMap?.type === 'continuous') {\n return /*#__PURE__*/_jsx(ChartsContinuousGradientObjectBound, {\n colorScale: colorScale,\n colorMap: colorMap,\n gradientId: objectBoundGradientId\n }, objectBoundGradientId);\n }\n return null;\n })]\n });\n}","import generateUtilityClass from '@mui/utils/generateUtilityClass';\nimport generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport composeClasses from '@mui/utils/composeClasses';\nfunction getSurfaceUtilityClass(slot) {\n return generateUtilityClass('MuiChartsSurface', slot);\n}\nexport const useUtilityClasses = () => {\n const slots = {\n root: ['root']\n };\n return composeClasses(slots, getSurfaceUtilityClass);\n};\nexport const chartsSurfaceClasses = generateUtilityClasses('MuiChartsSurface', ['root']);","'use client';\n\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"children\", \"className\", \"title\", \"desc\"];\nimport { styled, useThemeProps } from '@mui/material/styles';\nimport PropTypes from 'prop-types';\nimport * as React from 'react';\nimport useForkRef from '@mui/utils/useForkRef';\nimport clsx from 'clsx';\nimport { ChartsAxesGradients } from \"../internals/components/ChartsAxesGradients/index.js\";\nimport { useSvgRef } from \"../hooks/useSvgRef.js\";\nimport { useSelector } from \"../internals/store/useSelector.js\";\nimport { useStore } from \"../internals/store/useStore.js\";\nimport { selectorChartPropsHeight, selectorChartPropsWidth, selectorChartSvgWidth, selectorChartSvgHeight } from \"../internals/plugins/corePlugins/useChartDimensions/useChartDimensions.selectors.js\";\nimport { selectorChartsHasFocusedItem, selectorChartsIsKeyboardNavigationEnabled } from \"../internals/plugins/featurePlugins/useChartKeyboardNavigation/index.js\";\nimport { useUtilityClasses } from \"./chartsSurfaceClasses.js\";\nimport { selectorChartHasZoom } from \"../internals/plugins/featurePlugins/useChartCartesianAxis/useChartCartesianAxisRendering.selectors.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst ChartsSurfaceStyles = styled('svg', {\n name: 'MuiChartsSurface',\n slot: 'Root'\n})(({\n ownerState\n}) => ({\n width: ownerState.width ?? '100%',\n height: ownerState.height ?? '100%',\n display: 'flex',\n position: 'relative',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n overflow: 'hidden',\n // This prevents default touch actions when using the svg on mobile devices.\n // For example, prevent page scroll & zoom.\n touchAction: ownerState.hasZoom ? 'pan-y' : undefined,\n userSelect: 'none',\n gridArea: 'chart',\n '&:focus': {\n outline: 'none' // By default don't show focus on the SVG container\n }\n}));\n\n/**\n * It provides the drawing area for the chart elements.\n * It is the root `<svg>` of all the chart elements.\n *\n * It also provides the `title` and `desc` elements for the chart.\n *\n * Demos:\n *\n * - [Composition](https://mui.com/x/api/charts/composition/)\n *\n * API:\n *\n * - [ChartsSurface API](https://mui.com/x/api/charts/charts-surface/)\n */\nconst ChartsSurface = /*#__PURE__*/React.forwardRef(function ChartsSurface(inProps, ref) {\n const store = useStore();\n const svgWidth = useSelector(store, selectorChartSvgWidth);\n const svgHeight = useSelector(store, selectorChartSvgHeight);\n const propsWidth = useSelector(store, selectorChartPropsWidth);\n const propsHeight = useSelector(store, selectorChartPropsHeight);\n const isKeyboardNavigationEnabled = useSelector(store, selectorChartsIsKeyboardNavigationEnabled);\n const hasFocusedItem = useSelector(store, selectorChartsHasFocusedItem);\n const hasZoom = useSelector(store, selectorChartHasZoom);\n const svgRef = useSvgRef();\n const handleRef = useForkRef(svgRef, ref);\n const themeProps = useThemeProps({\n props: inProps,\n name: 'MuiChartsSurface'\n });\n const {\n children,\n className,\n title,\n desc\n } = themeProps,\n other = _objectWithoutPropertiesLoose(themeProps, _excluded);\n const classes = useUtilityClasses();\n const hasIntrinsicSize = svgHeight > 0 && svgWidth > 0;\n return /*#__PURE__*/_jsxs(ChartsSurfaceStyles, _extends({\n ownerState: {\n width: propsWidth,\n height: propsHeight,\n hasZoom\n },\n viewBox: `${0} ${0} ${svgWidth} ${svgHeight}`,\n className: clsx(classes.root, className),\n tabIndex: isKeyboardNavigationEnabled ? 0 : undefined,\n \"data-has-focused-item\": hasFocusedItem || undefined\n }, other, {\n ref: handleRef,\n children: [title && /*#__PURE__*/_jsx(\"title\", {\n children: title\n }), desc && /*#__PURE__*/_jsx(\"desc\", {\n children: desc\n }), /*#__PURE__*/_jsx(ChartsAxesGradients, {}), hasIntrinsicSize && children]\n }));\n});\nif (process.env.NODE_ENV !== \"production\") ChartsSurface.displayName = \"ChartsSurface\";\nprocess.env.NODE_ENV !== \"production\" ? ChartsSurface.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the TypeScript types and run \"pnpm proptypes\" |\n // ----------------------------------------------------------------------\n children: PropTypes.node,\n className: PropTypes.string,\n desc: PropTypes.string,\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n title: PropTypes.string\n} : void 0;\nexport { ChartsSurface };","import { deg2rad } from \"../internals/angleConversion.js\";\nfunction getPoint(angle) {\n const radAngle = deg2rad(angle);\n return [Math.sin(radAngle), -Math.cos(radAngle)];\n}\n\n/**\n * Returns the ratio of the arc bounding box and its center.\n * @param startAngle The start angle (in deg)\n * @param endAngle The end angle (in deg)\n */\nexport function getArcRatios(startAngle, endAngle) {\n // Set the start, end and center point.\n const points = [[0, 0], getPoint(startAngle), getPoint(endAngle)];\n\n // Add cardinal points included in the arc\n const minAngle = Math.min(startAngle, endAngle);\n const maxAngle = Math.max(startAngle, endAngle);\n const initialAngle = Math.floor(minAngle / 90) * 90;\n for (let step = 1; step <= 4; step += 1) {\n const cardinalAngle = initialAngle + step * 90;\n if (cardinalAngle < maxAngle) {\n points.push(getPoint(cardinalAngle));\n }\n }\n const minX = Math.min(...points.map(([x]) => x));\n const maxX = Math.max(...points.map(([x]) => x));\n const minY = Math.min(...points.map(([, y]) => y));\n const maxY = Math.max(...points.map(([, y]) => y));\n return {\n cx: -minX / (maxX - minX),\n cy: -minY / (maxY - minY),\n minX,\n maxX,\n minY,\n maxY\n };\n}\nexport function getAvailableRadius(cx, cy, width, height, {\n minX,\n maxX,\n minY,\n maxY\n}) {\n return Math.min(...[{\n ratio: Math.abs(minX),\n space: cx\n }, {\n ratio: Math.abs(maxX),\n space: width - cx\n }, {\n ratio: Math.abs(minY),\n space: cy\n }, {\n ratio: Math.abs(maxY),\n space: height - cy\n }].map(({\n ratio,\n space\n }) => {\n if (ratio < 0.00001) {\n return Infinity;\n }\n return space / ratio;\n }));\n}","// @ignore - do not document.\n'use client';\n\nimport * as React from 'react';\nimport { getPercentageValue } from \"../internals/getPercentageValue.js\";\nimport { getArcRatios, getAvailableRadius } from \"./utils.js\";\nimport { useDrawingArea } from \"../hooks/useDrawingArea.js\";\nimport { deg2rad } from \"../internals/angleConversion.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport const GaugeContext = /*#__PURE__*/React.createContext({\n value: null,\n valueMin: 0,\n valueMax: 0,\n startAngle: 0,\n endAngle: 0,\n innerRadius: 0,\n outerRadius: 0,\n cornerRadius: 0,\n cx: 0,\n cy: 0,\n maxRadius: 0,\n valueAngle: null\n});\nif (process.env.NODE_ENV !== \"production\") GaugeContext.displayName = \"GaugeContext\";\nexport function GaugeProvider(props) {\n const {\n value = null,\n valueMin = 0,\n valueMax = 100,\n startAngle = 0,\n endAngle = 360,\n outerRadius: outerRadiusParam,\n innerRadius: innerRadiusParam,\n cornerRadius: cornerRadiusParam,\n cx: cxParam,\n cy: cyParam,\n children\n } = props;\n const {\n left,\n top,\n width,\n height\n } = useDrawingArea();\n const ratios = getArcRatios(startAngle, endAngle);\n const innerCx = cxParam ? getPercentageValue(cxParam, width) : ratios.cx * width;\n const innerCy = cyParam ? getPercentageValue(cyParam, height) : ratios.cy * height;\n let cx = left + innerCx;\n let cy = top + innerCy;\n const maxRadius = getAvailableRadius(innerCx, innerCy, width, height, ratios);\n\n // If the center is not defined, after computation of the available radius, update the center to use the remaining space.\n if (cxParam === undefined) {\n const usedWidth = maxRadius * (ratios.maxX - ratios.minX);\n cx = left + (width - usedWidth) / 2 + ratios.cx * usedWidth;\n }\n if (cyParam === undefined) {\n const usedHeight = maxRadius * (ratios.maxY - ratios.minY);\n cy = top + (height - usedHeight) / 2 + ratios.cy * usedHeight;\n }\n const outerRadius = getPercentageValue(outerRadiusParam ?? maxRadius, maxRadius);\n const innerRadius = getPercentageValue(innerRadiusParam ?? '80%', maxRadius);\n const cornerRadius = getPercentageValue(cornerRadiusParam ?? 0, outerRadius - innerRadius);\n const contextValue = React.useMemo(() => {\n const startAngleRad = deg2rad(startAngle);\n const endAngleRad = deg2rad(endAngle);\n return {\n value,\n valueMin,\n valueMax,\n startAngle: startAngleRad,\n endAngle: endAngleRad,\n outerRadius,\n innerRadius,\n cornerRadius,\n cx,\n cy,\n maxRadius,\n valueAngle: value === null ? null : startAngleRad + (endAngleRad - startAngleRad) * (value - valueMin) / (valueMax - valueMin)\n };\n }, [value, valueMin, valueMax, startAngle, endAngle, outerRadius, innerRadius, cornerRadius, cx, cy, maxRadius]);\n return /*#__PURE__*/_jsx(GaugeContext.Provider, {\n value: contextValue,\n children: children\n });\n}\nexport function useGaugeState() {\n return React.useContext(GaugeContext);\n}","'use client';\n\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"width\", \"height\", \"margin\", \"title\", \"desc\", \"value\", \"valueMin\", \"valueMax\", \"startAngle\", \"endAngle\", \"outerRadius\", \"innerRadius\", \"cornerRadius\", \"cx\", \"cy\", \"children\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { styled } from '@mui/material/styles';\nimport { ChartsSurface } from \"../ChartsSurface/index.js\";\nimport { GaugeProvider } from \"./GaugeProvider.js\";\nimport { ChartProvider } from \"../context/ChartProvider/index.js\";\nimport { defaultizeMargin } from \"../internals/defaultizeMargin.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst GStyled = styled('g')(({\n theme\n}) => ({\n '& text': {\n fill: (theme.vars || theme).palette.text.primary\n }\n}));\nconst GaugeContainer = /*#__PURE__*/React.forwardRef(function GaugeContainer(props, ref) {\n const {\n width: inWidth,\n height: inHeight,\n margin,\n title,\n desc,\n value,\n valueMin = 0,\n valueMax = 100,\n startAngle,\n endAngle,\n outerRadius,\n innerRadius,\n cornerRadius,\n cx,\n cy,\n children\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n return /*#__PURE__*/_jsx(ChartProvider, {\n pluginParams: {\n width: inWidth,\n height: inHeight,\n margin: defaultizeMargin(margin, {\n left: 10,\n right: 10,\n top: 10,\n bottom: 10\n })\n },\n plugins: [],\n children: /*#__PURE__*/_jsx(GaugeProvider, {\n value: value,\n valueMin: valueMin,\n valueMax: valueMax,\n startAngle: startAngle,\n endAngle: endAngle,\n outerRadius: outerRadius,\n innerRadius: innerRadius,\n cornerRadius: cornerRadius,\n cx: cx,\n cy: cy,\n children: /*#__PURE__*/_jsx(ChartsSurface, _extends({\n title: title,\n desc: desc,\n role: \"meter\",\n \"aria-valuenow\": value === null ? undefined : value,\n \"aria-valuemin\": valueMin,\n \"aria-valuemax\": valueMax\n }, other, {\n ref: ref,\n children: /*#__PURE__*/_jsx(GStyled, {\n \"aria-hidden\": \"true\",\n children: children\n })\n }))\n })\n });\n});\nif (process.env.NODE_ENV !== \"production\") GaugeContainer.displayName = \"GaugeContainer\";\nprocess.env.NODE_ENV !== \"production\" ? GaugeContainer.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the TypeScript types and run \"pnpm proptypes\" |\n // ----------------------------------------------------------------------\n children: PropTypes.node,\n className: PropTypes.string,\n /**\n * The radius applied to arc corners (similar to border radius).\n * Set it to '50%' to get rounded arc.\n * @default 0\n */\n cornerRadius: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n /**\n * The x coordinate of the arc center.\n * Can be a number (in px) or a string with a percentage such as '50%'.\n * The '100%' is the width the drawing area.\n */\n cx: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n /**\n * The y coordinate of the arc center.\n * Can be a number (in px) or a string with a percentage such as '50%'.\n * The '100%' is the height the drawing area.\n */\n cy: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n desc: PropTypes.string,\n /**\n * The end angle (deg).\n * @default 360\n */\n endAngle: PropTypes.number,\n /**\n * The height of the chart in px. If not defined, it takes the height of the parent element.\n */\n height: PropTypes.number,\n /**\n * This prop is used to help implement the accessibility logic.\n * If you don't provide this prop. It falls back to a randomly generated id.\n */\n id: PropTypes.string,\n /**\n * The radius between circle center and the beginning of the arc.\n * Can be a number (in px) or a string with a percentage such as '50%'.\n * The '100%' is the maximal radius that fit into the drawing area.\n * @default '80%'\n */\n innerRadius: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n /**\n * The margin between the SVG and the drawing area.\n * It's used for leaving some space for extra information such as the x- and y-axis or legend.\n *\n * Accepts a `number` to be used on all sides or an object with the optional properties: `top`, `bottom`, `left`, and `right`.\n */\n margin: PropTypes.oneOfType([PropTypes.number, PropTypes.shape({\n bottom: PropTypes.number,\n left: PropTypes.number,\n right: PropTypes.number,\n top: PropTypes.number\n })]),\n /**\n * The radius between circle center and the end of the arc.\n * Can be a number (in px) or a string with a percentage such as '50%'.\n * The '100%' is the maximal radius that fit into the drawing area.\n * @default '100%'\n */\n outerRadius: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n /**\n * If `true`, animations are skipped.\n * If unset or `false`, the animations respects the user's `prefers-reduced-motion` setting.\n */\n skipAnimation: PropTypes.bool,\n /**\n * The start angle (deg).\n * @default 0\n */\n startAngle: PropTypes.number,\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n title: PropTypes.string,\n /**\n * The value of the gauge.\n * Set to `null` to not display a value.\n */\n value: PropTypes.number,\n /**\n * The maximal value of the gauge.\n * @default 100\n */\n valueMax: PropTypes.number,\n /**\n * The minimal value of the gauge.\n * @default 0\n */\n valueMin: PropTypes.number,\n /**\n * The width of the chart in px. If not defined, it takes the width of the parent element.\n */\n width: PropTypes.number\n} : void 0;\nexport { GaugeContainer };","'use client';\n\nimport { selectorChartSkipAnimation } from \"../internals/plugins/corePlugins/useChartAnimation/index.js\";\nimport { useStore } from \"../internals/store/useStore.js\";\nimport { useSelector } from \"../internals/store/useSelector.js\";\n\n/**\n * A hook to get if chart animations should be skipped.\n *\n * @returns {boolean} whether to skip animations\n */\nexport function useSkipAnimation(skipAnimation) {\n const store = useStore();\n const storeSkipAnimation = useSelector(store, selectorChartSkipAnimation);\n return skipAnimation || storeSkipAnimation;\n}","import { arc as d3Arc } from '@mui/x-charts-vendor/d3-shape';\nimport { interpolateNumber } from '@mui/x-charts-vendor/d3-interpolate';\nimport { useAnimate } from \"./useAnimate.js\";\nfunction gaugeValueArcPropsInterpolator(from, to) {\n const interpolateStartAngle = interpolateNumber(from.startAngle, to.startAngle);\n const interpolateEndAngle = interpolateNumber(from.endAngle, to.endAngle);\n const interpolateInnerRadius = interpolateNumber(from.innerRadius, to.innerRadius);\n const interpolateOuterRadius = interpolateNumber(from.outerRadius, to.outerRadius);\n const interpolateCornerRadius = interpolateNumber(from.cornerRadius, to.cornerRadius);\n return t => {\n return {\n startAngle: interpolateStartAngle(t),\n endAngle: interpolateEndAngle(t),\n innerRadius: interpolateInnerRadius(t),\n outerRadius: interpolateOuterRadius(t),\n cornerRadius: interpolateCornerRadius(t)\n };\n };\n}\n\n/** Animates a arc of a gauge chart by increasing the `endAngle` from the start angle to the end angle.\n * The props object also accepts a `ref` which will be merged with the ref returned from this hook. This means you can\n * pass the ref returned by this hook to the `path` element and the `ref` provided as argument will also be called. */\nexport function useAnimateGaugeValueArc(props) {\n return useAnimate({\n startAngle: props.startAngle,\n endAngle: props.endAngle,\n innerRadius: props.innerRadius,\n outerRadius: props.outerRadius,\n cornerRadius: props.cornerRadius\n }, {\n createInterpolator: gaugeValueArcPropsInterpolator,\n transformProps: p => ({\n d: d3Arc().cornerRadius(p.cornerRadius)({\n innerRadius: p.innerRadius,\n outerRadius: p.outerRadius,\n startAngle: p.startAngle,\n endAngle: p.endAngle\n })\n }),\n applyProps(element, p) {\n element.setAttribute('d', p.d);\n },\n initialProps: {\n startAngle: props.startAngle,\n endAngle: props.startAngle,\n innerRadius: props.innerRadius,\n outerRadius: props.outerRadius,\n cornerRadius: props.cornerRadius\n },\n skip: props.skipAnimation,\n ref: props.ref\n });\n}","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getGaugeUtilityClass(slot) {\n return generateUtilityClass('MuiGauge', slot);\n}\nexport const gaugeClasses = generateUtilityClasses('MuiGauge', ['root', 'valueArc', 'referenceArc', 'valueText']);","'use client';\n\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"className\"],\n _excluded2 = [\"cx\", \"cy\", \"startAngle\", \"endAngle\", \"cornerRadius\", \"innerRadius\", \"outerRadius\", \"skipAnimation\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { styled } from '@mui/material/styles';\nimport clsx from 'clsx';\nimport { useSkipAnimation } from \"../hooks/useSkipAnimation.js\";\nimport { useAnimateGaugeValueArc } from \"../hooks/animation/useAnimateGaugeValueArc.js\";\nimport { useGaugeState } from \"./GaugeProvider.js\";\nimport { gaugeClasses } from \"./gaugeClasses.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst StyledPath = styled('path', {\n name: 'MuiGauge',\n slot: 'ValueArc'\n})(({\n theme\n}) => ({\n fill: (theme.vars || theme).palette.primary.main\n}));\nfunction GaugeValueArc(_ref) {\n let {\n className\n } = _ref,\n other = _objectWithoutPropertiesLoose(_ref, _excluded);\n const {\n value,\n valueMin,\n valueMax,\n startAngle,\n endAngle,\n outerRadius,\n innerRadius,\n cornerRadius,\n cx,\n cy\n } = useGaugeState();\n if (value === null) {\n return null;\n }\n const valueAngle = startAngle + (value - valueMin) / (valueMax - valueMin) * (endAngle - startAngle);\n return /*#__PURE__*/_jsx(AnimatedGaugeValueArc, _extends({}, other, {\n className: clsx(gaugeClasses.valueArc, className),\n cx: cx,\n cy: cy,\n startAngle: startAngle,\n endAngle: valueAngle,\n cornerRadius: cornerRadius,\n innerRadius: innerRadius,\n outerRadius: outerRadius\n }));\n}\nprocess.env.NODE_ENV !== \"production\" ? GaugeValueArc.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the TypeScript types and run \"pnpm proptypes\" |\n // ----------------------------------------------------------------------\n skipAnimation: PropTypes.bool\n} : void 0;\nexport { GaugeValueArc };\nfunction AnimatedGaugeValueArc(_ref2) {\n let {\n cx,\n cy,\n startAngle,\n endAngle,\n cornerRadius,\n innerRadius,\n outerRadius,\n skipAnimation: inSkipAnimation\n } = _ref2,\n other = _objectWithoutPropertiesLoose(_ref2, _excluded2);\n const skipAnimation = useSkipAnimation(inSkipAnimation);\n const animatedProps = useAnimateGaugeValueArc({\n startAngle,\n endAngle,\n cornerRadius,\n innerRadius,\n outerRadius,\n skipAnimation\n });\n return /*#__PURE__*/_jsx(StyledPath, _extends({}, animatedProps, {\n transform: `translate(${cx}, ${cy})`\n }, other));\n}\nprocess.env.NODE_ENV !== \"production\" ? AnimatedGaugeValueArc.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the TypeScript types and run \"pnpm proptypes\" |\n // ----------------------------------------------------------------------\n cornerRadius: PropTypes.number.isRequired,\n cx: PropTypes.number.isRequired,\n cy: PropTypes.number.isRequired,\n endAngle: PropTypes.number.isRequired,\n innerRadius: PropTypes.number.isRequired,\n outerRadius: PropTypes.number.isRequired,\n skipAnimation: PropTypes.bool,\n startAngle: PropTypes.number.isRequired\n} : void 0;","'use client';\n\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"className\"];\nimport * as React from 'react';\nimport { arc as d3Arc } from '@mui/x-charts-vendor/d3-shape';\nimport { styled } from '@mui/material/styles';\nimport clsx from 'clsx';\nimport { useGaugeState } from \"./GaugeProvider.js\";\nimport { gaugeClasses } from \"./gaugeClasses.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst StyledPath = styled('path', {\n name: 'MuiGauge',\n slot: 'ReferenceArc'\n})(({\n theme\n}) => ({\n fill: (theme.vars || theme).palette.divider\n}));\nexport function GaugeReferenceArc(_ref) {\n let {\n className\n } = _ref,\n other = _objectWithoutPropertiesLoose(_ref, _excluded);\n const {\n startAngle,\n endAngle,\n outerRadius,\n innerRadius,\n cornerRadius,\n cx,\n cy\n } = useGaugeState();\n return /*#__PURE__*/_jsx(StyledPath, _extends({\n className: clsx(gaugeClasses.referenceArc, className),\n transform: `translate(${cx}, ${cy})`,\n d: d3Arc().cornerRadius(cornerRadius)({\n startAngle,\n endAngle,\n innerRadius,\n outerRadius\n })\n }, other));\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\n// DOM utils adapted from\n// https://github.com/recharts/recharts/blob/master/src/util/DOMUtils.ts\n\nfunction isSsr() {\n return typeof window === 'undefined';\n}\nconst stringCache = new Map();\nexport function clearStringMeasurementCache() {\n stringCache.clear();\n}\nconst MAX_CACHE_NUM = 2000;\nconst PIXEL_STYLES = new Set(['minWidth', 'maxWidth', 'width', 'minHeight', 'maxHeight', 'height', 'top', 'left', 'fontSize', 'padding', 'margin', 'paddingLeft', 'paddingRight', 'paddingTop', 'paddingBottom', 'marginLeft', 'marginRight', 'marginTop', 'marginBottom']);\n\n/**\n * Convert number value to pixel value for certain CSS properties\n * @param name CSS property name\n * @param value\n * @returns add 'px' for distance properties\n */\nfunction convertPixelValue(name, value) {\n if (PIXEL_STYLES.has(name) && value === +value) {\n return `${value}px`;\n }\n return value;\n}\n\n/**\n * Converts camelcase to dash-case\n * @param text camelcase css property\n */\nconst AZ = /([A-Z])/g;\nfunction camelCaseToDashCase(text) {\n return String(text).replace(AZ, match => `-${match.toLowerCase()}`);\n}\n\n/**\n * Converts a style object into a string to be used as a cache key\n * @param style React style object\n * @returns CSS styling string\n */\nexport function getStyleString(style) {\n let result = '';\n for (const key in style) {\n if (Object.hasOwn(style, key)) {\n const k = key;\n const value = style[k];\n if (value === undefined) {\n continue;\n }\n result += `${camelCaseToDashCase(k)}:${convertPixelValue(k, value)};`;\n }\n }\n return result;\n}\n\n/**\n *\n * @param text The string to estimate\n * @param style The style applied\n * @returns width and height of the text\n */\nexport const getStringSize = (text, style = {}) => {\n if (text === undefined || text === null || isSsr()) {\n return {\n width: 0,\n height: 0\n };\n }\n const str = String(text);\n const styleString = getStyleString(style);\n const cacheKey = `${str}-${styleString}`;\n const size = stringCache.get(cacheKey);\n if (size) {\n return size;\n }\n try {\n const measurementSpanContainer = getMeasurementContainer();\n const measurementElem = document.createElementNS('http://www.w3.org/2000/svg', 'text');\n\n // Need to use CSS Object Model (CSSOM) to be able to comply with Content Security Policy (CSP)\n // https://en.wikipedia.org/wiki/Content_Security_Policy\n Object.keys(style).map(styleKey => {\n measurementElem.style[camelCaseToDashCase(styleKey)] = convertPixelValue(styleKey, style[styleKey]);\n return styleKey;\n });\n measurementElem.textContent = str;\n measurementSpanContainer.replaceChildren(measurementElem);\n const result = measureSVGTextElement(measurementElem);\n stringCache.set(cacheKey, result);\n if (stringCache.size + 1 > MAX_CACHE_NUM) {\n stringCache.clear();\n }\n if (process.env.NODE_ENV === 'test') {\n // In test environment, we clean the measurement span immediately\n measurementSpanContainer.replaceChildren();\n }\n return result;\n } catch {\n return {\n width: 0,\n height: 0\n };\n }\n};\nexport function batchMeasureStrings(texts, style = {}) {\n if (isSsr()) {\n return new Map(Array.from(texts).map(text => [text, {\n width: 0,\n height: 0\n }]));\n }\n const sizeMap = new Map();\n const textToMeasure = [];\n const styleString = getStyleString(style);\n for (const text of texts) {\n const cacheKey = `${text}-${styleString}`;\n const size = stringCache.get(cacheKey);\n if (size) {\n sizeMap.set(text, size);\n } else {\n textToMeasure.push(text);\n }\n }\n const measurementContainer = getMeasurementContainer();\n // Need to use CSS Object Model (CSSOM) to be able to comply with Content Security Policy (CSP)\n // https://en.wikipedia.org/wiki/Content_Security_Policy\n const measurementSpanStyle = _extends({}, style);\n Object.keys(measurementSpanStyle).map(styleKey => {\n measurementContainer.style[camelCaseToDashCase(styleKey)] = convertPixelValue(styleKey, measurementSpanStyle[styleKey]);\n return styleKey;\n });\n const measurementElements = [];\n for (const string of textToMeasure) {\n const measurementElem = document.createElementNS('http://www.w3.org/2000/svg', 'text');\n measurementElem.textContent = `${string}`;\n measurementElements.push(measurementElem);\n }\n measurementContainer.replaceChildren(...measurementElements);\n for (let i = 0; i < textToMeasure.length; i += 1) {\n const text = textToMeasure[i];\n const measurementElem = measurementContainer.children[i];\n const result = measureSVGTextElement(measurementElem);\n const cacheKey = `${text}-${styleString}`;\n stringCache.set(cacheKey, result);\n sizeMap.set(text, result);\n }\n if (stringCache.size + 1 > MAX_CACHE_NUM) {\n stringCache.clear();\n }\n if (process.env.NODE_ENV === 'test') {\n // In test environment, we clean the measurement span immediately\n measurementContainer.replaceChildren();\n }\n return sizeMap;\n}\n\n/**\n * Measures an SVG text element using getBBox() with fallback to getBoundingClientRect()\n * @param element SVG text element to measure\n * @returns width and height of the text element\n */\nfunction measureSVGTextElement(element) {\n // getBBox() is more reliable across browsers for SVG elements\n try {\n const result = element.getBBox();\n return {\n width: result.width,\n height: result.height\n };\n } catch {\n // Fallback to getBoundingClientRect if getBBox fails\n // This can happen in tests\n const result = element.getBoundingClientRect();\n return {\n width: result.width,\n height: result.height\n };\n }\n}\nlet measurementContainer = null;\n\n/**\n * Get (or create) a hidden span element to measure text size.\n */\nfunction getMeasurementContainer() {\n if (measurementContainer === null) {\n measurementContainer = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n measurementContainer.setAttribute('aria-hidden', 'true');\n measurementContainer.style.position = 'absolute';\n measurementContainer.style.top = '-20000px';\n measurementContainer.style.left = '0';\n measurementContainer.style.padding = '0';\n measurementContainer.style.margin = '0';\n measurementContainer.style.border = 'none';\n measurementContainer.style.pointerEvents = 'none';\n measurementContainer.style.visibility = 'hidden';\n measurementContainer.style.contain = 'strict';\n document.body.appendChild(measurementContainer);\n }\n return measurementContainer;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport { getStringSize } from \"./domUtils.js\";\nexport function getWordsByLines({\n style,\n needsComputation,\n text\n}) {\n return text.split('\\n').map(subText => _extends({\n text: subText\n }, needsComputation ? getStringSize(subText, style) : {\n width: 0,\n height: 0\n }));\n}","'use client';\n\nimport * as React from 'react';\n\n/** Returns true after hydration is done on the client.\n *\n * Basically a implementation of Option 2 of this gist: https://gist.github.com/gaearon/e7d97cdf38a2907924ea12e4ebdf3c85#option-2-lazily-show-component-with-uselayouteffect. */\nexport function useIsHydrated() {\n const [isHydrated, setIsHydrated] = React.useState(false);\n React.useEffect(() => {\n setIsHydrated(true);\n }, []);\n return isHydrated;\n}","'use client';\n\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"x\", \"y\", \"style\", \"text\", \"ownerState\"],\n _excluded2 = [\"angle\", \"textAnchor\", \"dominantBaseline\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { getWordsByLines } from \"../internals/getWordsByLines.js\";\nimport { useIsHydrated } from \"../hooks/useIsHydrated.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * Helper component to manage multiline text in SVG\n */\nfunction ChartsText(props) {\n const {\n x,\n y,\n style: styleProps,\n text\n } = props,\n textProps = _objectWithoutPropertiesLoose(props, _excluded);\n const _ref = styleProps ?? {},\n {\n angle,\n textAnchor,\n dominantBaseline\n } = _ref,\n style = _objectWithoutPropertiesLoose(_ref, _excluded2);\n const isHydrated = useIsHydrated();\n const wordsByLines = React.useMemo(() => getWordsByLines({\n style,\n needsComputation: isHydrated && text.includes('\\n'),\n text\n }), [style, text, isHydrated]);\n let startDy;\n switch (dominantBaseline) {\n case 'hanging':\n case 'text-before-edge':\n startDy = 0;\n break;\n case 'central':\n startDy = (wordsByLines.length - 1) / 2 * -wordsByLines[0].height;\n break;\n default:\n startDy = (wordsByLines.length - 1) * -wordsByLines[0].height;\n break;\n }\n return /*#__PURE__*/_jsx(\"text\", _extends({}, textProps, {\n transform: angle ? `rotate(${angle}, ${x}, ${y})` : undefined,\n x: x,\n y: y,\n textAnchor: textAnchor,\n dominantBaseline: dominantBaseline,\n style: style,\n children: wordsByLines.map((line, index) => /*#__PURE__*/_jsx(\"tspan\", {\n x: x,\n dy: `${index === 0 ? startDy : wordsByLines[0].height}px`,\n dominantBaseline: dominantBaseline // Propagated to fix Safari issue: https://github.com/mui/mui-x/issues/10808\n ,\n children: line.text\n }, index))\n }));\n}\nprocess.env.NODE_ENV !== \"production\" ? ChartsText.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the TypeScript types and run \"pnpm proptypes\" |\n // ----------------------------------------------------------------------\n /**\n * Height of a text line (in `em`).\n */\n lineHeight: PropTypes.number,\n /**\n * If `true`, the line width is computed.\n * @default false\n */\n needsComputation: PropTypes.bool,\n ownerState: PropTypes.any,\n /**\n * Style applied to text elements.\n */\n style: PropTypes.object,\n /**\n * Text displayed.\n */\n text: PropTypes.string.isRequired\n} : void 0;\nexport { ChartsText };","'use client';\n\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"text\", \"className\"];\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { useGaugeState } from \"./GaugeProvider.js\";\nimport { ChartsText } from \"../ChartsText/index.js\";\nimport { gaugeClasses } from \"./gaugeClasses.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction defaultFormatter({\n value\n}) {\n return value === null ? null : value.toLocaleString();\n}\nfunction GaugeValueText(props) {\n const {\n text = defaultFormatter,\n className\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n const {\n value,\n valueMin,\n valueMax,\n cx,\n cy\n } = useGaugeState();\n const formattedText = typeof text === 'function' ? text({\n value,\n valueMin,\n valueMax\n }) : text;\n if (formattedText === null) {\n return null;\n }\n return /*#__PURE__*/_jsx(\"g\", {\n className: clsx(gaugeClasses.valueText, className),\n children: /*#__PURE__*/_jsx(ChartsText, _extends({\n x: cx,\n y: cy,\n text: formattedText,\n style: {\n textAnchor: 'middle',\n dominantBaseline: 'central'\n }\n }, other))\n });\n}\nprocess.env.NODE_ENV !== \"production\" ? GaugeValueText.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the TypeScript types and run \"pnpm proptypes\" |\n // ----------------------------------------------------------------------\n /**\n * Height of a text line (in `em`).\n */\n lineHeight: PropTypes.number,\n /**\n * If `true`, the line width is computed.\n * @default false\n */\n needsComputation: PropTypes.bool,\n ownerState: PropTypes.any,\n /**\n * Style applied to text elements.\n */\n style: PropTypes.object,\n text: PropTypes.oneOfType([PropTypes.func, PropTypes.string])\n} : void 0;\nexport { GaugeValueText };","'use client';\n\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"text\", \"children\", \"classes\", \"className\", \"skipAnimation\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport composeClasses from '@mui/utils/composeClasses';\nimport clsx from 'clsx';\nimport { GaugeContainer } from \"./GaugeContainer.js\";\nimport { GaugeValueArc } from \"./GaugeValueArc.js\";\nimport { GaugeReferenceArc } from \"./GaugeReferenceArc.js\";\nimport { getGaugeUtilityClass } from \"./gaugeClasses.js\";\nimport { GaugeValueText } from \"./GaugeValueText.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useUtilityClasses = props => {\n const {\n classes\n } = props;\n const slots = {\n root: ['root']\n };\n return composeClasses(slots, getGaugeUtilityClass, classes);\n};\nconst Gauge = /*#__PURE__*/React.forwardRef(function Gauge(props, ref) {\n const {\n text,\n children,\n className,\n skipAnimation\n } = props,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n const classes = useUtilityClasses(props);\n return /*#__PURE__*/_jsxs(GaugeContainer, _extends({}, other, {\n className: clsx(classes.root, className),\n ref: ref,\n children: [/*#__PURE__*/_jsx(GaugeReferenceArc, {}), /*#__PURE__*/_jsx(GaugeValueArc, {\n skipAnimation: skipAnimation\n }), /*#__PURE__*/_jsx(GaugeValueText, {\n text: text\n }), children]\n }));\n});\nif (process.env.NODE_ENV !== \"production\") Gauge.displayName = \"Gauge\";\nprocess.env.NODE_ENV !== \"production\" ? Gauge.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the TypeScript types and run \"pnpm proptypes\" |\n // ----------------------------------------------------------------------\n children: PropTypes.node,\n classes: PropTypes.object,\n className: PropTypes.string,\n /**\n * The radius applied to arc corners (similar to border radius).\n * Set it to '50%' to get rounded arc.\n * @default 0\n */\n cornerRadius: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n /**\n * The x coordinate of the arc center.\n * Can be a number (in px) or a string with a percentage such as '50%'.\n * The '100%' is the width the drawing area.\n */\n cx: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n /**\n * The y coordinate of the arc center.\n * Can be a number (in px) or a string with a percentage such as '50%'.\n * The '100%' is the height the drawing area.\n */\n cy: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n desc: PropTypes.string,\n /**\n * The end angle (deg).\n * @default 360\n */\n endAngle: PropTypes.number,\n /**\n * The height of the chart in px. If not defined, it takes the height of the parent element.\n */\n height: PropTypes.number,\n /**\n * This prop is used to help implement the accessibility logic.\n * If you don't provide this prop. It falls back to a randomly generated id.\n */\n id: PropTypes.string,\n /**\n * The radius between circle center and the beginning of the arc.\n * Can be a number (in px) or a string with a percentage such as '50%'.\n * The '100%' is the maximal radius that fit into the drawing area.\n * @default '80%'\n */\n innerRadius: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n /**\n * The margin between the SVG and the drawing area.\n * It's used for leaving some space for extra information such as the x- and y-axis or legend.\n *\n * Accepts a `number` to be used on all sides or an object with the optional properties: `top`, `bottom`, `left`, and `right`.\n */\n margin: PropTypes.oneOfType([PropTypes.number, PropTypes.shape({\n bottom: PropTypes.number,\n left: PropTypes.number,\n right: PropTypes.number,\n top: PropTypes.number\n })]),\n /**\n * The radius between circle center and the end of the arc.\n * Can be a number (in px) or a string with a percentage such as '50%'.\n * The '100%' is the maximal radius that fit into the drawing area.\n * @default '100%'\n */\n outerRadius: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n /**\n * If `true`, animations are skipped.\n * If unset or `false`, the animations respects the user's `prefers-reduced-motion` setting.\n */\n skipAnimation: PropTypes.bool,\n /**\n * The start angle (deg).\n * @default 0\n */\n startAngle: PropTypes.number,\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n text: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n title: PropTypes.string,\n /**\n * The value of the gauge.\n * Set to `null` to not display a value.\n */\n value: PropTypes.number,\n /**\n * The maximal value of the gauge.\n * @default 100\n */\n valueMax: PropTypes.number,\n /**\n * The minimal value of the gauge.\n * @default 0\n */\n valueMin: PropTypes.number,\n /**\n * The width of the chart in px. If not defined, it takes the width of the parent element.\n */\n width: PropTypes.number\n} : void 0;\nexport { Gauge };","/**\n * Formats time in seconds to D:HH:MM:SS, H:MM:SS or MM:SS format\n * Used for the default (large) timer variant\n * Automatically includes days and hours as needed for clarity\n */\nexport const formatTime = (seconds: number): string => {\n const days = Math.floor(seconds / 86400)\n const hours = Math.floor((seconds % 86400) / 3600)\n const minutes = Math.floor((seconds % 3600) / 60)\n const remainingSeconds = seconds % 60\n\n // Build time parts array\n const parts: string[] = []\n\n if (days > 0) {\n parts.push(days.toString())\n parts.push(hours.toString().padStart(2, \"0\"))\n parts.push(minutes.toString().padStart(2, \"0\"))\n parts.push(remainingSeconds.toString().padStart(2, \"0\"))\n } else if (hours > 0) {\n parts.push(hours.toString())\n parts.push(minutes.toString().padStart(2, \"0\"))\n parts.push(remainingSeconds.toString().padStart(2, \"0\"))\n } else {\n parts.push(minutes.toString())\n parts.push(remainingSeconds.toString().padStart(2, \"0\"))\n }\n\n return parts.join(\":\")\n}\n\n/**\n * Formats time in seconds to a localized human-readable format\n * Used for the small timer variant\n * Examples: \"2h 30m 15s\", \"45m 30s\", \"30s\"\n * Falls back to English units if Intl.DurationFormat is not available\n */\nexport const formatTimeLocalized = (\n seconds: number,\n locale?: string,\n): string => {\n const days = Math.floor(seconds / 86400)\n const hours = Math.floor((seconds % 86400) / 3600)\n const minutes = Math.floor((seconds % 3600) / 60)\n const remainingSeconds = seconds % 60\n\n // Try using Intl.DurationFormat if available (newer browsers)\n if (typeof Intl !== \"undefined\" && \"DurationFormat\" in Intl) {\n try {\n const duration: Record<string, number> = {}\n if (days > 0) duration.days = days\n if (hours > 0) duration.hours = hours\n if (minutes > 0) duration.minutes = minutes\n if (remainingSeconds > 0 || Object.keys(duration).length === 0) {\n duration.seconds = remainingSeconds\n }\n\n // @ts-expect-error - DurationFormat is not yet in TypeScript types\n const formatter = new Intl.DurationFormat(locale, { style: \"narrow\" })\n return formatter.format(duration)\n } catch {\n // Fall through to manual formatting\n }\n }\n\n // Manual formatting with compact units\n const parts: string[] = []\n\n if (days > 0) parts.push(`${days}d`)\n if (hours > 0) parts.push(`${hours}h`)\n if (minutes > 0) parts.push(`${minutes}m`)\n if (remainingSeconds > 0 || parts.length === 0) {\n parts.push(`${remainingSeconds}s`)\n }\n\n return parts.join(\" \")\n}\n\n/**\n * Calculates progress percentage for different timer states\n */\nexport const calculateProgress = (\n currentState: string,\n remainingTime: number,\n maxTime: number | null,\n): number => {\n if (currentState === \"idle\") {\n return 0\n }\n\n if (currentState === \"countdown\" && maxTime !== null) {\n // Count-down mode: progress based on elapsed time\n const elapsed = maxTime - remainingTime\n return Math.min(100, (elapsed / maxTime) * 100)\n }\n\n if (currentState === \"measuring\") {\n // Measuring mode: progress based on minute steps (0-100% per minute)\n return ((remainingTime / 60) % 1) * 100\n }\n\n return 0\n}\n\n/**\n * Calculates exact progress position based on elapsed time\n */\nexport const calculateExactProgress = (\n currentState: string,\n totalElapsed: number,\n maxTime: number | null,\n): number => {\n if (currentState === \"countdown\" && maxTime !== null) {\n return Math.min(100, (totalElapsed / maxTime) * 100)\n }\n\n if (currentState === \"measuring\") {\n return ((totalElapsed / 60) % 1) * 100\n }\n\n return 0\n}\n","import { Box, Fade, Typography, useTheme } from \"@mui/material\"\nimport { Gauge } from \"@mui/x-charts/Gauge\"\nimport { useTranslation } from \"react-i18next\"\nimport type { AnimationState, TimerState } from \"./types\"\nimport { formatTime, formatTimeLocalized } from \"./utils\"\n\ninterface DefaultVariantProps {\n timerState: TimerState\n animationState: AnimationState\n hasError: boolean\n className?: string\n}\n\nexport const DefaultVariant = ({\n timerState,\n animationState,\n hasError,\n className,\n}: DefaultVariantProps) => {\n const { t, i18n } = useTranslation()\n const theme = useTheme()\n const { currentState, remainingTime, maxTime, currentProgress } = timerState\n const {\n showErrorAnimation,\n showPauseAnimation,\n showPulsatingText,\n pulsatingFinished,\n showLabels,\n showMainText,\n showIdlePulsating,\n idleDotsCount,\n } = animationState\n\n return (\n <Box\n className={className}\n sx={{\n position: \"relative\",\n width: 264,\n height: 264,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n <Gauge\n width={264}\n height={264}\n value={currentState === \"idle\" ? 0 : currentProgress}\n valueMin={0}\n valueMax={100}\n innerRadius=\"85%\"\n outerRadius=\"100%\"\n margin={0}\n skipAnimation={true}\n text={() => \"\"}\n sx={{\n opacity: showPauseAnimation || showErrorAnimation ? 0.6 : 1,\n transition: \"opacity 0.5s ease-out\",\n [`& .MuiGauge-valueArc`]: {\n fill: hasError\n ? theme.palette.error.light\n : theme.palette.success.main,\n transition: \"fill 0.5s ease-out\",\n },\n [`& .MuiGauge-referenceArc`]: {\n fill: currentState === \"idle\" ? \"#171927\" : \"#171927\",\n stroke: \"transparent\",\n strokeWidth: 0,\n transition:\n \"fill 0.5s ease-out, stroke 0.5s ease-out, stroke-width 0.5s ease-out\",\n },\n [`& .MuiGauge-valueText`]: {\n display: \"none\",\n },\n [`& .MuiGauge-text`]: {\n display: \"none\",\n },\n }}\n />\n\n {/* Center content overlay */}\n <Box\n sx={{\n position: \"absolute\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n width: 225,\n height: 225,\n borderRadius: \"50%\",\n backgroundColor: \"#292B3F\",\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n textAlign: \"center\",\n gap: 1,\n transition: \"background-color 0.5s ease-out\",\n }}\n >\n {/* Top label */}\n <Box\n sx={{\n height: \"16px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n marginBottom: 1,\n }}\n >\n <Fade\n in={\n showLabels &&\n !hasError &&\n currentState !== \"idle\" &&\n currentState !== \"success\"\n }\n timeout={300}\n >\n <Typography\n variant=\"body2\"\n sx={{\n fontSize: \"12px\",\n color:\n currentState === \"measured\"\n ? showPulsatingText || pulsatingFinished\n ? theme.palette.success.main\n : theme.palette.text.secondary\n : theme.palette.text.secondary,\n transition: \"color 0.8s ease-in-out\",\n }}\n >\n <span\n style={{\n opacity:\n currentState === \"measured\" && pulsatingFinished\n ? showPulsatingText\n ? 1\n : 0.6\n : 1,\n transition: \"opacity 2s ease-in-out\",\n }}\n >\n {currentState === \"measuring\"\n ? t(\"CycleTimer.CycleTime.lb\", \"Cycle Time\")\n : currentState === \"measured\"\n ? t(\"CycleTimer.CycleTime.lb\", \"Cycle Time\")\n : currentState === \"countdown\"\n ? t(\"CycleTimer.RemainingTime.lb\", \"Remaining Time\")\n : \"\"}\n </span>\n </Typography>\n </Fade>\n </Box>\n\n {/* Main display */}\n <Box\n sx={{\n position: \"relative\",\n height: \"48px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n marginBottom: 0.5,\n }}\n >\n {/* Idle state text */}\n <Fade\n in={showMainText && currentState === \"idle\" && !hasError}\n timeout={200}\n >\n <Typography\n variant=\"body2\"\n sx={{\n position: \"absolute\",\n fontSize: \"12px\",\n fontWeight: 400,\n color: \"rgba(255, 255, 255, 0.7)\",\n lineHeight: \"166%\",\n letterSpacing: \"0.17px\",\n textAlign: \"center\",\n width: \"200px\",\n height: \"20px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n <span\n style={{\n opacity: showIdlePulsating ? 1 : 0.6,\n transition: \"opacity 2s ease-in-out\",\n }}\n >\n {t(\n \"CycleTimer.WaitingForCycle.lb\",\n \"Waiting for program cycle\",\n )}\n </span>\n <span\n style={{\n display: \"inline-block\",\n width: \"18px\",\n textAlign: \"left\",\n opacity: showIdlePulsating ? 1 : 0.6,\n transition: \"opacity 2s ease-in-out\",\n }}\n >\n {\".\".repeat(idleDotsCount)}\n </span>\n </Typography>\n </Fade>\n\n {/* Error text */}\n <Fade in={showMainText && hasError} timeout={200}>\n <Typography\n variant=\"h3\"\n sx={{\n position: \"absolute\",\n fontSize: \"40px\",\n fontWeight: 400,\n color: \"#FFFFFF\",\n lineHeight: \"116.7%\",\n }}\n >\n {t(\"CycleTimer.Error.lb\", \"Error\")}\n </Typography>\n </Fade>\n\n {/* Normal timer text */}\n <Fade\n in={\n showMainText &&\n !hasError &&\n currentState !== \"idle\" &&\n currentState !== \"success\"\n }\n timeout={300}\n >\n <Typography\n variant=\"h1\"\n sx={{\n position: \"absolute\",\n fontSize: \"48px\",\n fontWeight: 500,\n color: theme.palette.text.primary,\n lineHeight: 1,\n transition: \"color 0.8s ease-in-out\",\n }}\n >\n <span\n style={{\n opacity: 1,\n transition: \"opacity 2s ease-in-out\",\n }}\n >\n {formatTime(remainingTime)}\n </span>\n </Typography>\n </Fade>\n </Box>\n\n {/* Bottom label */}\n <Box\n sx={{\n height: \"16px\",\n display: \"flex\",\n marginTop: 0.5,\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n <Fade\n in={\n showLabels &&\n !hasError &&\n currentState !== \"idle\" &&\n currentState !== \"success\"\n }\n timeout={300}\n >\n <Typography\n variant=\"body2\"\n sx={{\n fontSize: \"12px\",\n color:\n currentState === \"measured\"\n ? showPulsatingText || pulsatingFinished\n ? theme.palette.success.main\n : theme.palette.text.secondary\n : theme.palette.text.secondary,\n transition: \"color 0.8s ease-in-out\",\n }}\n >\n <span\n style={{\n opacity:\n currentState === \"measured\" && pulsatingFinished\n ? showPulsatingText\n ? 1\n : 0.6\n : 1,\n transition: \"opacity 2s ease-in-out\",\n }}\n >\n {currentState === \"measuring\"\n ? t(\"CycleTimer.Measuring.lb\", \"measuring...\")\n : currentState === \"measured\"\n ? t(\"CycleTimer.Determined.lb\", \"determined\")\n : currentState === \"countdown\" && maxTime !== null\n ? t(\"CycleTimer.OfTime.lb\", {\n time: formatTimeLocalized(maxTime, i18n.language),\n })\n : \"\"}\n </span>\n </Typography>\n </Fade>\n </Box>\n </Box>\n </Box>\n )\n}\n","import { Box, Typography, useTheme } from \"@mui/material\"\nimport { useTranslation } from \"react-i18next\"\nimport type { AnimationState, TimerState } from \"./types\"\nimport { formatTimeLocalized } from \"./utils\"\n\ninterface SmallVariantProps {\n timerState: TimerState\n animationState: AnimationState\n hasError: boolean\n compact: boolean\n className?: string\n}\n\nexport const SmallVariant = ({\n timerState,\n animationState,\n hasError,\n compact,\n className,\n}: SmallVariantProps) => {\n const { t, i18n } = useTranslation()\n const theme = useTheme()\n const { currentState, remainingTime, maxTime } = timerState\n const {\n showErrorAnimation,\n showPauseAnimation,\n showPulsatingText,\n pulsatingFinished,\n showIdlePulsating,\n idleDotsCount,\n } = animationState\n\n // Simple text-only mode for compact variant in certain states\n if (compact && currentState === \"idle\") {\n return (\n <Box\n className={className}\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n m: 0,\n }}\n >\n <Typography\n variant=\"body2\"\n sx={{\n color: hasError\n ? theme.palette.error.light\n : theme.palette.text.primary,\n fontSize: \"14px\",\n transition: \"color 0.5s ease-out\",\n }}\n >\n {hasError\n ? t(\"CycleTimer.Error.lb\", \"Error\")\n : currentState === \"idle\"\n ? \"0s\"\n : formatTimeLocalized(remainingTime, i18n.language)}\n </Typography>\n </Box>\n )\n }\n\n return (\n <Box\n className={className}\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n m: 0,\n gap: 1,\n }}\n >\n {/* Animated progress ring icon */}\n {!(currentState === \"idle\" && compact) && (\n <Box\n sx={{\n width: 20,\n height: 20,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n opacity: showPauseAnimation || showErrorAnimation ? 0.6 : 1,\n transition: \"opacity 0.5s ease-out\",\n }}\n >\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n style={{ transform: \"rotate(-90deg)\" }}\n role=\"img\"\n aria-label=\"Timer progress\"\n >\n {/* Background ring */}\n <circle\n cx=\"10\"\n cy=\"10\"\n r=\"8\"\n fill=\"none\"\n stroke={\n hasError\n ? theme.palette.error.light\n : currentState === \"measured\"\n ? showPulsatingText || pulsatingFinished\n ? theme.palette.success.main\n : theme.palette.text.secondary\n : theme.palette.success.main\n }\n strokeWidth=\"2\"\n opacity={\n currentState === \"measured\" && pulsatingFinished\n ? showPulsatingText\n ? 1\n : 0.6\n : 0.3\n }\n style={{\n transition: \"stroke 0.8s ease-in-out, opacity 2s ease-in-out\",\n }}\n />\n {/* Progress ring */}\n <circle\n cx=\"10\"\n cy=\"10\"\n r=\"8\"\n fill=\"none\"\n stroke={\n hasError\n ? theme.palette.error.light\n : currentState === \"measured\"\n ? showPulsatingText || pulsatingFinished\n ? theme.palette.success.main\n : theme.palette.text.secondary\n : theme.palette.success.main\n }\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeDasharray={`${2 * Math.PI * 8}`}\n strokeDashoffset={`${2 * Math.PI * 8 * (1 - (currentState === \"idle\" ? 0 : timerState.currentProgress) / 100)}`}\n style={{\n opacity:\n currentState === \"measured\" && pulsatingFinished\n ? showPulsatingText\n ? 1\n : 0.6\n : 1,\n transition:\n \"stroke-dashoffset 0.1s ease-out, stroke 0.8s ease-in-out, opacity 2s ease-in-out\",\n }}\n />\n </svg>\n </Box>\n )}\n\n {/* Timer text display */}\n <Typography\n variant=\"body2\"\n sx={{\n color: hasError\n ? theme.palette.error.light\n : currentState === \"idle\"\n ? \"rgba(255, 255, 255, 0.7)\"\n : currentState === \"measured\"\n ? showPulsatingText || pulsatingFinished\n ? theme.palette.success.main\n : theme.palette.text.secondary\n : theme.palette.text.primary,\n fontSize: \"14px\",\n lineHeight: \"normal\",\n letterSpacing: \"normal\",\n opacity:\n currentState === \"idle\"\n ? showIdlePulsating\n ? 1\n : 0.6\n : currentState === \"measured\" && pulsatingFinished\n ? showPulsatingText\n ? 1\n : 0.6\n : 1,\n transition:\n \"color 0.8s ease-in-out, font-size 0.3s ease-out, opacity 2s ease-in-out\",\n }}\n >\n {hasError ? (\n t(\"CycleTimer.Error.lb\", \"Error\")\n ) : currentState === \"idle\" ? (\n <>\n <span>\n {t(\"CycleTimer.WaitingForCycle.lb\", \"Waiting for program cycle\")}\n </span>\n <span\n style={{\n display: \"inline-block\",\n width: \"18px\",\n textAlign: \"left\",\n }}\n >\n {\".\".repeat(idleDotsCount)}\n </span>\n </>\n ) : currentState === \"measuring\" ? (\n compact ? (\n formatTimeLocalized(remainingTime, i18n.language)\n ) : (\n `${formatTimeLocalized(remainingTime, i18n.language)} / ${t(\"CycleTimer.Measuring.lb\", \"measuring...\")}`\n )\n ) : currentState === \"measured\" ? (\n compact ? (\n formatTimeLocalized(remainingTime, i18n.language)\n ) : (\n `${formatTimeLocalized(remainingTime, i18n.language)} / ${t(\"CycleTimer.Determined.lb\", \"determined\")}`\n )\n ) : currentState === \"countdown\" && maxTime !== null ? (\n compact ? (\n formatTimeLocalized(remainingTime, i18n.language)\n ) : (\n `${formatTimeLocalized(remainingTime, i18n.language)} / ${t(\"CycleTimer.Time.lb\", { time: formatTimeLocalized(maxTime, i18n.language) })}`\n )\n ) : (\n formatTimeLocalized(remainingTime, i18n.language)\n )}\n </Typography>\n </Box>\n )\n}\n","import { useCallback, useRef, useState } from \"react\"\nimport type { AnimationState } from \"./types\"\n\nexport const useAnimations = () => {\n const [animationState, setAnimationState] = useState<AnimationState>({\n showPauseAnimation: false,\n showErrorAnimation: false,\n showPulsatingText: false,\n pulsatingFinished: false,\n showLabels: true,\n showMainText: true,\n showIdlePulsating: false,\n idleDotsCount: 0,\n })\n\n // Refs for managing timeouts and intervals\n const pauseAnimationTimeoutRef = useRef<NodeJS.Timeout | null>(null)\n const errorAnimationTimeoutRef = useRef<NodeJS.Timeout | null>(null)\n const pulsatingIntervalRef = useRef<NodeJS.Timeout | null>(null)\n const fadeTimeoutRef = useRef<NodeJS.Timeout | null>(null)\n const pulseCountRef = useRef<number>(0)\n const idlePulsatingIntervalRef = useRef<NodeJS.Timeout | null>(null)\n const idleDotsIntervalRef = useRef<NodeJS.Timeout | null>(null)\n\n const triggerPauseAnimation = useCallback(() => {\n setAnimationState((prev) => ({ ...prev, showPauseAnimation: true }))\n\n if (pauseAnimationTimeoutRef.current) {\n clearTimeout(pauseAnimationTimeoutRef.current)\n }\n\n pauseAnimationTimeoutRef.current = setTimeout(() => {\n setAnimationState((prev) => ({ ...prev, showPauseAnimation: false }))\n }, 800)\n }, [])\n\n const triggerErrorAnimation = useCallback(() => {\n setAnimationState((prev) => ({ ...prev, showErrorAnimation: true }))\n\n if (errorAnimationTimeoutRef.current) {\n clearTimeout(errorAnimationTimeoutRef.current)\n }\n\n errorAnimationTimeoutRef.current = setTimeout(() => {\n setAnimationState((prev) => ({ ...prev, showErrorAnimation: false }))\n }, 600)\n }, [])\n\n const clearErrorAnimation = useCallback(() => {\n setAnimationState((prev) => ({ ...prev, showErrorAnimation: false }))\n if (errorAnimationTimeoutRef.current) {\n clearTimeout(errorAnimationTimeoutRef.current)\n }\n }, [])\n\n const startPulsatingAnimation = useCallback((onComplete?: () => void) => {\n pulseCountRef.current = 0\n // Start with fade to success color\n setAnimationState((prev) => ({\n ...prev,\n showPulsatingText: true,\n pulsatingFinished: false,\n }))\n\n // After initial success color fade, start slow pulsating like idle\n setTimeout(() => {\n setAnimationState((prev) => ({\n ...prev,\n pulsatingFinished: true, // This will keep the success color and start slow pulsating\n }))\n\n // Start slow pulsating animation similar to idle\n pulsatingIntervalRef.current = setInterval(() => {\n setAnimationState((prev) => ({\n ...prev,\n showPulsatingText: !prev.showPulsatingText,\n }))\n }, 2000) // Same slow timing as idle pulsating\n\n if (onComplete) {\n onComplete()\n }\n }, 800) // Initial success color display duration\n }, [])\n\n const stopPulsatingAnimation = useCallback(() => {\n if (pulsatingIntervalRef.current) {\n clearInterval(pulsatingIntervalRef.current)\n pulsatingIntervalRef.current = null\n }\n // Reset all pulsating states to ensure colors are reset\n setAnimationState((prev) => ({\n ...prev,\n showPulsatingText: false,\n pulsatingFinished: false,\n }))\n pulseCountRef.current = 0\n }, [])\n\n const startIdleAnimations = useCallback(() => {\n // Start pulsating animation for the text\n setAnimationState((prev) => ({\n ...prev,\n showIdlePulsating: true,\n }))\n\n idlePulsatingIntervalRef.current = setInterval(() => {\n setAnimationState((prev) => ({\n ...prev,\n showIdlePulsating: !prev.showIdlePulsating,\n }))\n }, 2000) // Slower pulsate every 2 seconds\n\n // Start animated dots\n idleDotsIntervalRef.current = setInterval(() => {\n setAnimationState((prev) => ({\n ...prev,\n idleDotsCount: (prev.idleDotsCount + 1) % 4, // Cycle through 0, 1, 2, 3\n }))\n }, 800) // Change dots every 800ms\n }, [])\n\n const stopIdleAnimations = useCallback(() => {\n if (idlePulsatingIntervalRef.current) {\n clearInterval(idlePulsatingIntervalRef.current)\n idlePulsatingIntervalRef.current = null\n }\n if (idleDotsIntervalRef.current) {\n clearInterval(idleDotsIntervalRef.current)\n idleDotsIntervalRef.current = null\n }\n setAnimationState((prev) => ({\n ...prev,\n showIdlePulsating: false,\n idleDotsCount: 0,\n }))\n }, [])\n\n const triggerFadeTransition = useCallback(() => {\n setAnimationState((prev) => ({\n ...prev,\n showLabels: false,\n showMainText: false,\n }))\n\n if (fadeTimeoutRef.current) {\n clearTimeout(fadeTimeoutRef.current)\n }\n\n fadeTimeoutRef.current = setTimeout(() => {\n setAnimationState((prev) => ({\n ...prev,\n showLabels: true,\n showMainText: true,\n }))\n }, 200)\n }, [])\n\n const setInitialAnimationState = useCallback(() => {\n setAnimationState((prev) => ({\n ...prev,\n showLabels: true,\n showMainText: true,\n }))\n }, [])\n\n // Cleanup function\n const cleanup = useCallback(() => {\n if (pauseAnimationTimeoutRef.current) {\n clearTimeout(pauseAnimationTimeoutRef.current)\n }\n if (errorAnimationTimeoutRef.current) {\n clearTimeout(errorAnimationTimeoutRef.current)\n }\n if (fadeTimeoutRef.current) {\n clearTimeout(fadeTimeoutRef.current)\n }\n if (pulsatingIntervalRef.current) {\n clearInterval(pulsatingIntervalRef.current)\n }\n if (idlePulsatingIntervalRef.current) {\n clearInterval(idlePulsatingIntervalRef.current)\n }\n if (idleDotsIntervalRef.current) {\n clearInterval(idleDotsIntervalRef.current)\n }\n }, [])\n\n return {\n animationState,\n triggerPauseAnimation,\n triggerErrorAnimation,\n clearErrorAnimation,\n startPulsatingAnimation,\n stopPulsatingAnimation,\n startIdleAnimations,\n stopIdleAnimations,\n triggerFadeTransition,\n setInitialAnimationState,\n cleanup,\n }\n}\n","import { useCallback, useEffect, useRef, useState } from \"react\"\nimport { useInterpolation } from \"../utils/interpolation\"\nimport type { TimerState } from \"./types\"\nimport { calculateExactProgress } from \"./utils\"\n\ninterface UseTimerLogicProps {\n autoStart: boolean\n onCycleEnd?: () => void\n onMeasuringComplete?: () => void\n hasError: boolean\n onPauseAnimation: () => void\n onErrorAnimation: () => void\n onClearErrorAnimation: () => void\n onStartPulsating: (onComplete?: () => void) => void\n}\n\nexport const useTimerLogic = ({\n autoStart,\n onCycleEnd,\n onMeasuringComplete,\n hasError,\n onPauseAnimation,\n onErrorAnimation,\n onClearErrorAnimation,\n onStartPulsating,\n}: UseTimerLogicProps) => {\n const [timerState, setTimerState] = useState<TimerState>({\n currentState: \"idle\",\n remainingTime: 0,\n maxTime: null,\n isRunning: false,\n isPausedState: false,\n currentProgress: 0,\n wasRunningBeforeError: false,\n })\n\n // Timer-related refs\n const animationRef = useRef<number | null>(null)\n const startTimeRef = useRef<number | null>(null)\n const pausedTimeRef = useRef<number>(0)\n\n // Spring-based interpolator for smooth gauge progress animations\n const [progressInterpolator] = useInterpolation([0], {\n tension: 80,\n friction: 18,\n onChange: ([progress]) => {\n setTimerState((prev) => ({ ...prev, currentProgress: progress }))\n },\n })\n\n const setIdle = useCallback(() => {\n setTimerState((prev) => ({\n ...prev,\n currentState: \"idle\",\n maxTime: null,\n // Don't reset remainingTime - keep the last value\n isRunning: false,\n isPausedState: false,\n currentProgress: 0, // Reset progress to 0 for gauge\n }))\n pausedTimeRef.current = 0\n startTimeRef.current = null\n progressInterpolator.setImmediate([0]) // Use setImmediate for instant reset\n }, [progressInterpolator])\n\n const startMeasuring = useCallback(\n (elapsedSeconds: number = 0) => {\n const initialProgress = ((elapsedSeconds / 60) % 1) * 100\n setTimerState((prev) => ({\n ...prev,\n currentState: \"measuring\",\n maxTime: null,\n remainingTime: elapsedSeconds,\n isPausedState: false,\n currentProgress: initialProgress, // Immediately set progress\n }))\n pausedTimeRef.current = 0\n\n progressInterpolator.setImmediate([initialProgress]) // Use setImmediate for instant reset\n\n if (autoStart) {\n startTimeRef.current = Date.now() - elapsedSeconds * 1000\n setTimerState((prev) => ({ ...prev, isRunning: true }))\n } else {\n startTimeRef.current = null\n }\n },\n [autoStart, progressInterpolator],\n )\n\n const startNewCycle = useCallback(\n (maxTimeSeconds: number, elapsedSeconds: number = 0) => {\n // Stop any running timer first to prevent conflicts\n setTimerState((prev) => ({ ...prev, isRunning: false }))\n startTimeRef.current = null\n\n setTimerState((prev) => ({\n ...prev,\n currentState: \"countdown\",\n maxTime: maxTimeSeconds,\n isPausedState: false,\n }))\n pausedTimeRef.current = 0\n\n // Count-down mode\n const remainingSeconds = Math.max(0, maxTimeSeconds - elapsedSeconds)\n const initialProgress =\n elapsedSeconds > 0 ? (elapsedSeconds / maxTimeSeconds) * 100 : 0\n\n setTimerState((prev) => ({\n ...prev,\n remainingTime: remainingSeconds,\n currentProgress: initialProgress, // Immediately set progress\n }))\n\n progressInterpolator.setImmediate([initialProgress]) // Use setImmediate for instant reset\n\n if (remainingSeconds === 0) {\n setTimerState((prev) => ({ ...prev, isRunning: false }))\n startTimeRef.current = null\n if (onCycleEnd) {\n queueMicrotask(() => onCycleEnd())\n }\n } else if (autoStart) {\n setTimeout(() => {\n startTimeRef.current = Date.now() - elapsedSeconds * 1000\n setTimerState((prev) => ({ ...prev, isRunning: true }))\n }, 0)\n } else {\n startTimeRef.current = null\n }\n },\n [autoStart, onCycleEnd, progressInterpolator],\n )\n\n const completeMeasuring = useCallback(() => {\n // Always trigger completion regardless of current state\n setTimerState((prev) => ({\n ...prev,\n isRunning: false,\n currentState: \"measured\",\n }))\n startTimeRef.current = null\n\n onStartPulsating(() => {\n if (onMeasuringComplete) {\n onMeasuringComplete()\n }\n })\n }, [onStartPulsating, onMeasuringComplete])\n\n const pause = useCallback(() => {\n if (startTimeRef.current && timerState.isRunning) {\n const now = Date.now()\n const additionalElapsed = now - startTimeRef.current\n pausedTimeRef.current += additionalElapsed\n\n const totalElapsed = pausedTimeRef.current / 1000\n const exactProgress = calculateExactProgress(\n timerState.currentState,\n totalElapsed,\n timerState.maxTime,\n )\n progressInterpolator.setTarget([exactProgress])\n }\n\n setTimerState((prev) => ({\n ...prev,\n isRunning: false,\n isPausedState: true,\n }))\n onPauseAnimation()\n }, [\n timerState.isRunning,\n timerState.currentState,\n timerState.maxTime,\n progressInterpolator,\n onPauseAnimation,\n ])\n\n const resume = useCallback(() => {\n if (\n timerState.isPausedState &&\n (timerState.remainingTime > 0 || timerState.currentState !== \"countdown\")\n ) {\n startTimeRef.current = Date.now()\n setTimerState((prev) => ({\n ...prev,\n isRunning: true,\n isPausedState: false,\n }))\n }\n }, [\n timerState.isPausedState,\n timerState.remainingTime,\n timerState.currentState,\n ])\n\n const isPaused = useCallback(() => {\n return timerState.isPausedState\n }, [timerState.isPausedState])\n\n // Handle error state changes\n useEffect(() => {\n if (hasError) {\n if (timerState.isRunning && !timerState.isPausedState) {\n setTimerState((prev) => ({ ...prev, wasRunningBeforeError: true }))\n pause()\n }\n onErrorAnimation()\n } else {\n if (timerState.wasRunningBeforeError && timerState.isPausedState) {\n setTimerState((prev) => ({ ...prev, wasRunningBeforeError: false }))\n resume()\n }\n onClearErrorAnimation()\n }\n }, [\n hasError,\n timerState.isRunning,\n timerState.isPausedState,\n timerState.wasRunningBeforeError,\n pause,\n resume,\n onErrorAnimation,\n onClearErrorAnimation,\n ])\n\n // Main timer loop\n useEffect(() => {\n if (timerState.isRunning) {\n const updateTimer = () => {\n if (startTimeRef.current) {\n const now = Date.now()\n const elapsed =\n (now - startTimeRef.current + pausedTimeRef.current) / 1000\n\n if (\n timerState.currentState === \"countdown\" &&\n timerState.maxTime !== null\n ) {\n const remaining = Math.max(0, timerState.maxTime - elapsed)\n setTimerState((prev) => ({\n ...prev,\n remainingTime: Math.ceil(remaining),\n }))\n\n const progress = Math.min(100, (elapsed / timerState.maxTime) * 100)\n progressInterpolator.setTarget([progress])\n\n if (remaining <= 0) {\n setTimerState((prev) => ({\n ...prev,\n isRunning: false,\n remainingTime: 0,\n }))\n startTimeRef.current = null\n progressInterpolator.setTarget([100])\n if (onCycleEnd) {\n queueMicrotask(() => onCycleEnd())\n }\n return\n }\n } else if (timerState.currentState === \"measuring\") {\n setTimerState((prev) => ({\n ...prev,\n remainingTime: Math.floor(elapsed),\n }))\n const progress = ((elapsed / 60) % 1) * 100\n progressInterpolator.setTarget([progress])\n }\n\n if (timerState.isRunning) {\n animationRef.current = requestAnimationFrame(updateTimer)\n }\n }\n }\n\n animationRef.current = requestAnimationFrame(updateTimer)\n } else {\n if (animationRef.current) {\n cancelAnimationFrame(animationRef.current)\n animationRef.current = null\n }\n }\n\n return () => {\n if (animationRef.current) {\n cancelAnimationFrame(animationRef.current)\n }\n }\n }, [\n timerState.isRunning,\n onCycleEnd,\n timerState.currentState,\n timerState.maxTime,\n progressInterpolator,\n ])\n\n // Interpolation animation loop\n useEffect(() => {\n let interpolationAnimationId: number | null = null\n\n const animateInterpolation = () => {\n progressInterpolator.update(1 / 60)\n interpolationAnimationId = requestAnimationFrame(animateInterpolation)\n }\n\n interpolationAnimationId = requestAnimationFrame(animateInterpolation)\n\n return () => {\n if (interpolationAnimationId) {\n cancelAnimationFrame(interpolationAnimationId)\n }\n }\n }, [progressInterpolator])\n\n return {\n timerState,\n controls: {\n startNewCycle,\n startMeasuring,\n setIdle,\n completeMeasuring,\n pause,\n resume,\n isPaused,\n },\n }\n}\n","import { observer } from \"mobx-react-lite\"\nimport { useEffect, useRef } from \"react\"\nimport { externalizeComponent } from \"../../externalizeComponent\"\nimport { DefaultVariant } from \"./DefaultVariant\"\nimport { SmallVariant } from \"./SmallVariant\"\nimport type { CycleTimerProps } from \"./types\"\nimport { useAnimations } from \"./useAnimations\"\nimport { useTimerLogic } from \"./useTimerLogic\"\n\n/**\n * A circular gauge timer component for cycle-specific timing operations\n *\n * Features:\n * - Custom SVG circular gauge with 264px diameter and 40px thickness\n * - Multiple states: idle, measuring, measured, countdown, success\n * - Idle state: shows \"Waiting for program cycle\" with transparent inner circle\n * - Measuring state: counts up with \"Cycle Time\" / \"measuring...\" labels\n * - Measured state: shows final time with \"Cycle Time\" / \"determined\" labels in pulsating green\n * - Countdown mode: shows remaining time prominently, counts down to zero\n * - Success state: brief green flash after cycle completion\n * - Displays appropriate labels based on state\n * - Automatically counts down and triggers callback when reaching zero\n * - Full timer control: start, pause, resume functionality\n * - Support for starting with elapsed time (resume mid-cycle)\n * - Error state support: pauses timer and shows error styling (red color)\n * - Smooth fade transitions between different text states\n * - Pulsating text animation for completed measuring state\n * - Fully localized with i18next\n * - Material-UI theming integration\n * - Small variant with animated progress icon (gauge border only) next to text\n */\nexport const CycleTimer = externalizeComponent(\n observer(\n ({\n onCycleComplete,\n onCycleEnd,\n onMeasuringComplete,\n autoStart = true,\n variant = \"default\",\n compact = false,\n className,\n hasError = false,\n }: CycleTimerProps) => {\n const prevStateRef = useRef<string | undefined>(undefined)\n\n // Initialize animation hooks\n const {\n animationState,\n triggerPauseAnimation,\n triggerErrorAnimation,\n clearErrorAnimation,\n startPulsatingAnimation,\n stopPulsatingAnimation,\n startIdleAnimations,\n stopIdleAnimations,\n triggerFadeTransition,\n setInitialAnimationState,\n cleanup,\n } = useAnimations()\n\n // Initialize timer logic\n const { timerState, controls } = useTimerLogic({\n autoStart,\n onCycleEnd,\n onMeasuringComplete,\n hasError,\n onPauseAnimation: triggerPauseAnimation,\n onErrorAnimation: triggerErrorAnimation,\n onClearErrorAnimation: clearErrorAnimation,\n onStartPulsating: startPulsatingAnimation,\n })\n\n // Handle state changes with fade transitions\n useEffect(() => {\n const prevState = prevStateRef.current\n\n if (\n prevStateRef.current !== undefined &&\n prevState !== timerState.currentState\n ) {\n // Stop pulsating animation if leaving measured state\n if (prevState === \"measured\") {\n stopPulsatingAnimation()\n }\n\n // Stop idle animations if leaving idle state\n if (prevState === \"idle\") {\n stopIdleAnimations()\n }\n\n // Trigger fade transition\n triggerFadeTransition()\n } else {\n // No state change or first time - set initial state\n setInitialAnimationState()\n }\n\n // Start idle animations if entering idle state\n if (timerState.currentState === \"idle\") {\n startIdleAnimations()\n }\n\n prevStateRef.current = timerState.currentState\n }, [\n timerState.currentState,\n stopPulsatingAnimation,\n stopIdleAnimations,\n startIdleAnimations,\n triggerFadeTransition,\n setInitialAnimationState,\n ])\n\n // Provide controls to parent component\n useEffect(() => {\n let isMounted = true\n const timeoutId = setTimeout(() => {\n if (isMounted) {\n onCycleComplete(controls)\n }\n }, 0)\n\n return () => {\n isMounted = false\n clearTimeout(timeoutId)\n }\n }, [onCycleComplete, controls])\n\n // Cleanup on unmount\n useEffect(() => {\n return cleanup\n }, [cleanup])\n\n // Render appropriate variant\n if (variant === \"small\") {\n return (\n <SmallVariant\n timerState={timerState}\n animationState={animationState}\n hasError={hasError}\n compact={compact}\n className={className}\n />\n )\n }\n\n return (\n <DefaultVariant\n timerState={timerState}\n animationState={animationState}\n hasError={hasError}\n className={className}\n />\n )\n },\n ),\n)\n","import { unstable_memoTheme } from '@mui/system';\nconst memoTheme = unstable_memoTheme;\nexport default memoTheme;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport SystemDefaultPropsProvider, { useDefaultProps as useSystemDefaultProps } from '@mui/system/DefaultPropsProvider';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction DefaultPropsProvider(props) {\n return /*#__PURE__*/_jsx(SystemDefaultPropsProvider, {\n ...props\n });\n}\nprocess.env.NODE_ENV !== \"production\" ? DefaultPropsProvider.propTypes /* remove-proptypes */ = {\n // ┌────────────────────────────── Warning ──────────────────────────────┐\n // │ These PropTypes are generated from the TypeScript type definitions. │\n // │ To update them, edit the TypeScript types and run `pnpm proptypes`. │\n // └─────────────────────────────────────────────────────────────────────┘\n /**\n * @ignore\n */\n children: PropTypes.node,\n /**\n * @ignore\n */\n value: PropTypes.object.isRequired\n} : void 0;\nexport default DefaultPropsProvider;\nexport function useDefaultProps(params) {\n return useSystemDefaultProps(params);\n}","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getSvgIconUtilityClass(slot) {\n return generateUtilityClass('MuiSvgIcon', slot);\n}\nconst svgIconClasses = generateUtilityClasses('MuiSvgIcon', ['root', 'colorPrimary', 'colorSecondary', 'colorAction', 'colorError', 'colorDisabled', 'fontSizeInherit', 'fontSizeSmall', 'fontSizeMedium', 'fontSizeLarge']);\nexport default svgIconClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport capitalize from \"../utils/capitalize.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport { getSvgIconUtilityClass } from \"./svgIconClasses.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n const {\n color,\n fontSize,\n classes\n } = ownerState;\n const slots = {\n root: ['root', color !== 'inherit' && `color${capitalize(color)}`, `fontSize${capitalize(fontSize)}`]\n };\n return composeClasses(slots, getSvgIconUtilityClass, classes);\n};\nconst SvgIconRoot = styled('svg', {\n name: 'MuiSvgIcon',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.root, ownerState.color !== 'inherit' && styles[`color${capitalize(ownerState.color)}`], styles[`fontSize${capitalize(ownerState.fontSize)}`]];\n }\n})(memoTheme(({\n theme\n}) => ({\n userSelect: 'none',\n width: '1em',\n height: '1em',\n display: 'inline-block',\n flexShrink: 0,\n transition: theme.transitions?.create?.('fill', {\n duration: (theme.vars ?? theme).transitions?.duration?.shorter\n }),\n variants: [{\n props: props => !props.hasSvgAsChild,\n style: {\n // the <svg> will define the property that has `currentColor`\n // for example heroicons uses fill=\"none\" and stroke=\"currentColor\"\n fill: 'currentColor'\n }\n }, {\n props: {\n fontSize: 'inherit'\n },\n style: {\n fontSize: 'inherit'\n }\n }, {\n props: {\n fontSize: 'small'\n },\n style: {\n fontSize: theme.typography?.pxToRem?.(20) || '1.25rem'\n }\n }, {\n props: {\n fontSize: 'medium'\n },\n style: {\n fontSize: theme.typography?.pxToRem?.(24) || '1.5rem'\n }\n }, {\n props: {\n fontSize: 'large'\n },\n style: {\n fontSize: theme.typography?.pxToRem?.(35) || '2.1875rem'\n }\n },\n // TODO v5 deprecate color prop, v6 remove for sx\n ...Object.entries((theme.vars ?? theme).palette).filter(([, value]) => value && value.main).map(([color]) => ({\n props: {\n color\n },\n style: {\n color: (theme.vars ?? theme).palette?.[color]?.main\n }\n })), {\n props: {\n color: 'action'\n },\n style: {\n color: (theme.vars ?? theme).palette?.action?.active\n }\n }, {\n props: {\n color: 'disabled'\n },\n style: {\n color: (theme.vars ?? theme).palette?.action?.disabled\n }\n }, {\n props: {\n color: 'inherit'\n },\n style: {\n color: undefined\n }\n }]\n})));\nconst SvgIcon = /*#__PURE__*/React.forwardRef(function SvgIcon(inProps, ref) {\n const props = useDefaultProps({\n props: inProps,\n name: 'MuiSvgIcon'\n });\n const {\n children,\n className,\n color = 'inherit',\n component = 'svg',\n fontSize = 'medium',\n htmlColor,\n inheritViewBox = false,\n titleAccess,\n viewBox = '0 0 24 24',\n ...other\n } = props;\n const hasSvgAsChild = /*#__PURE__*/React.isValidElement(children) && children.type === 'svg';\n const ownerState = {\n ...props,\n color,\n component,\n fontSize,\n instanceFontSize: inProps.fontSize,\n inheritViewBox,\n viewBox,\n hasSvgAsChild\n };\n const more = {};\n if (!inheritViewBox) {\n more.viewBox = viewBox;\n }\n const classes = useUtilityClasses(ownerState);\n return /*#__PURE__*/_jsxs(SvgIconRoot, {\n as: component,\n className: clsx(classes.root, className),\n focusable: \"false\",\n color: htmlColor,\n \"aria-hidden\": titleAccess ? undefined : true,\n role: titleAccess ? 'img' : undefined,\n ref: ref,\n ...more,\n ...other,\n ...(hasSvgAsChild && children.props),\n ownerState: ownerState,\n children: [hasSvgAsChild ? children.props.children : children, titleAccess ? /*#__PURE__*/_jsx(\"title\", {\n children: titleAccess\n }) : null]\n });\n});\nprocess.env.NODE_ENV !== \"production\" ? SvgIcon.propTypes /* remove-proptypes */ = {\n // ┌────────────────────────────── Warning ──────────────────────────────┐\n // │ These PropTypes are generated from the TypeScript type definitions. │\n // │ To update them, edit the d.ts file and run `pnpm proptypes`. │\n // └─────────────────────────────────────────────────────────────────────┘\n /**\n * Node passed into the SVG element.\n */\n children: PropTypes.node,\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n /**\n * @ignore\n */\n className: PropTypes.string,\n /**\n * The color of the component.\n * It supports both default and custom theme colors, which can be added as shown in the\n * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).\n * You can use the `htmlColor` prop to apply a color attribute to the SVG element.\n * @default 'inherit'\n */\n color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['inherit', 'action', 'disabled', 'primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: PropTypes.elementType,\n /**\n * The fontSize applied to the icon. Defaults to 24px, but can be configure to inherit font size.\n * @default 'medium'\n */\n fontSize: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['inherit', 'large', 'medium', 'small']), PropTypes.string]),\n /**\n * Applies a color attribute to the SVG element.\n */\n htmlColor: PropTypes.string,\n /**\n * If `true`, the root node will inherit the custom `component`'s viewBox and the `viewBox`\n * prop will be ignored.\n * Useful when you want to reference a custom `component` and have `SvgIcon` pass that\n * `component`'s viewBox to the root node.\n * @default false\n */\n inheritViewBox: PropTypes.bool,\n /**\n * The shape-rendering attribute. The behavior of the different options is described on the\n * [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/SVG/Reference/Attribute/shape-rendering).\n * If you are having issues with blurry icons you should investigate this prop.\n */\n shapeRendering: PropTypes.string,\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n /**\n * Provides a human-readable title for the element that contains it.\n * https://www.w3.org/TR/SVG-access/#Equivalent\n */\n titleAccess: PropTypes.string,\n /**\n * Allows you to redefine what the coordinates without units mean inside an SVG element.\n * For example, if the SVG element is 500 (width) by 200 (height),\n * and you pass viewBox=\"0 0 50 20\",\n * this means that the coordinates inside the SVG will go from the top left corner (0,0)\n * to bottom right (50,20) and each unit will be worth 10px.\n * @default '0 0 24 24'\n */\n viewBox: PropTypes.string\n} : void 0;\nSvgIcon.muiName = 'SvgIcon';\nexport default SvgIcon;","'use client';\n\nimport * as React from 'react';\nimport SvgIcon from \"../SvgIcon/index.js\";\n\n/**\n * Private module reserved for @mui packages.\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default function createSvgIcon(path, displayName) {\n function Component(props, ref) {\n return /*#__PURE__*/_jsx(SvgIcon, {\n \"data-testid\": process.env.NODE_ENV !== 'production' ? `${displayName}Icon` : undefined,\n ref: ref,\n ...props,\n children: path\n });\n }\n if (process.env.NODE_ENV !== 'production') {\n // Need to set `displayName` on the inner component for React.memo.\n // React prior to 16.14 ignores `displayName` on the wrapper.\n Component.displayName = `${displayName}Icon`;\n }\n Component.muiName = SvgIcon.muiName;\n return /*#__PURE__*/React.memo(/*#__PURE__*/React.forwardRef(Component));\n}","'use client';\n\n// TODO: uncomment once we enable eslint-plugin-react-compiler // eslint-disable-next-line react-compiler/react-compiler -- process.env never changes, dependency arrays are intentionally ignored\n/* eslint-disable react-hooks/rules-of-hooks, react-hooks/exhaustive-deps */\nimport * as React from 'react';\nexport default function useControlled(props) {\n const {\n controlled,\n default: defaultProp,\n name,\n state = 'value'\n } = props;\n // isControlled is ignored in the hook dependency lists as it should never change.\n const {\n current: isControlled\n } = React.useRef(controlled !== undefined);\n const [valueState, setValue] = React.useState(defaultProp);\n const value = isControlled ? controlled : valueState;\n if (process.env.NODE_ENV !== 'production') {\n React.useEffect(() => {\n if (isControlled !== (controlled !== undefined)) {\n console.error([`MUI: A component is changing the ${isControlled ? '' : 'un'}controlled ${state} state of ${name} to be ${isControlled ? 'un' : ''}controlled.`, 'Elements should not switch from uncontrolled to controlled (or vice versa).', `Decide between using a controlled or uncontrolled ${name} ` + 'element for the lifetime of the component.', \"The nature of the state is determined during the first render. It's considered controlled if the value is not `undefined`.\", 'More info: https://fb.me/react-controlled-components'].join('\\n'));\n }\n }, [state, name, controlled]);\n const {\n current: defaultValue\n } = React.useRef(defaultProp);\n React.useEffect(() => {\n if (!isControlled && JSON.stringify(defaultProp) !== JSON.stringify(defaultValue)) {\n console.error([`MUI: A component is changing the default ${state} state of an uncontrolled ${name} after being initialized. ` + `To suppress this warning opt to use a controlled ${name}.`].join('\\n'));\n }\n }, [JSON.stringify(defaultProp)]);\n }\n const setValueIfUncontrolled = React.useCallback(newValue => {\n if (!isControlled) {\n setValue(newValue);\n }\n }, []);\n\n // TODO: provide overloads for the useControlled function to account for the case where either\n // controlled or default is not undefined.\n // In that case the return type should be [T, React.Dispatch<React.SetStateAction<T>>]\n // otherwise it should be [T | undefined, React.Dispatch<React.SetStateAction<T | undefined>>]\n return [value, setValueIfUncontrolled];\n}","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"\n}), 'Clear');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M10 18h4v-2h-4zM3 6v2h18V6zm3 7h12v-2H6z\"\n}), 'FilterList');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14\"\n}), 'Search');","import ClearIcon from \"@mui/icons-material/Clear\"\nimport FilterListIcon from \"@mui/icons-material/FilterList\"\nimport SearchIcon from \"@mui/icons-material/Search\"\nimport { Box, Divider, Typography, useTheme } from \"@mui/material\"\nimport {\n DataGrid,\n type DataGridProps,\n FilterPanelTrigger,\n type GridColDef,\n type GridRowParams,\n QuickFilter,\n QuickFilterClear,\n QuickFilterControl,\n QuickFilterTrigger,\n Toolbar,\n ToolbarButton,\n useGridApiRef,\n} from \"@mui/x-data-grid\"\nimport { observer } from \"mobx-react-lite\"\nimport { useEffect, useMemo, useRef, useState } from \"react\"\nimport { externalizeComponent } from \"../externalizeComponent\"\n\nexport interface WandelbotsDataGridProps<T = Record<string, unknown>> {\n /**\n * Array of data items to display in the grid\n */\n data: T[]\n\n /**\n * Column definitions for the DataGrid\n */\n columns: GridColDef[]\n\n /**\n * Function to transform data items into DataGrid rows\n * Should return an object with an 'id' field and other fields matching column definitions\n */\n getRowData: (item: T) => Record<string, unknown> & { id: string | number }\n\n /**\n * Callback when a row is clicked\n */\n onRowClick?: (item: T, params: GridRowParams) => void\n\n /**\n * Currently selected item (for highlighting)\n */\n selectedItem?: T | null\n\n /**\n * Function to get the ID of an item (used for selection highlighting)\n */\n getItemId?: (item: T) => string | number\n\n /**\n * Title displayed in the toolbar\n */\n title?: string\n\n /**\n * Show item count in title\n * @default true\n */\n showCount?: boolean\n\n /**\n * Placeholder text for the search input\n * @default \"Search programs\"\n */\n searchPlaceholder?: string\n\n /**\n * Additional DataGrid props to pass through\n */\n dataGridProps?: Partial<DataGridProps>\n\n /**\n * Custom toolbar component to replace the default one\n */\n CustomToolbar?: React.ComponentType\n\n /**\n * Select the first item by default\n * @default false\n */\n selectFirstByDefault?: boolean\n\n /**\n * Custom sx styles for the root container\n */\n sx?: React.ComponentProps<typeof Box>[\"sx\"]\n}\n\nexport const WandelbotsDataGrid = externalizeComponent(\n observer(\n <T,>({\n data,\n columns,\n getRowData,\n onRowClick,\n selectedItem,\n getItemId,\n title,\n showCount = true,\n searchPlaceholder = \"Search programs\",\n dataGridProps,\n CustomToolbar,\n selectFirstByDefault = false,\n sx,\n }: WandelbotsDataGridProps<T>) => {\n const theme = useTheme()\n const apiRef = useGridApiRef()\n const containerRef = useRef<HTMLDivElement>(null)\n\n // Internal state for selection when not controlled\n const [internalSelectedItem, setInternalSelectedItem] =\n useState<T | null>(null)\n\n // Prepare rows for the DataGrid\n const rows = useMemo(() => data.map(getRowData), [data, getRowData])\n\n // Auto-resize columns when data changes\n useEffect(() => {\n if (apiRef.current && rows.length > 0) {\n apiRef.current.autosizeColumns({\n includeOutliers: true,\n includeHeaders: true,\n expand: true,\n columns: columns.map((col) => col.field),\n })\n }\n }, [rows, columns, apiRef])\n\n // Auto-resize columns when the DataGrid container is resized\n useEffect(() => {\n if (!containerRef.current || !apiRef.current) return\n\n const resizeObserver = new ResizeObserver(() => {\n // Use a small timeout to ensure the DataGrid has processed the size change\n setTimeout(() => {\n if (apiRef.current && rows.length > 0) {\n apiRef.current.autosizeColumns({\n includeOutliers: true,\n includeHeaders: true,\n expand: true,\n columns: columns.map((col) => col.field),\n })\n }\n }, 100)\n })\n\n resizeObserver.observe(containerRef.current)\n\n return () => {\n resizeObserver.disconnect()\n }\n }, [apiRef, rows.length, columns])\n\n // Handle default selection - only use if no selectedItem is explicitly provided\n const effectiveSelectedItem = useMemo(() => {\n // If selectedItem is explicitly provided, use it (including null)\n if (selectedItem !== undefined) {\n return selectedItem\n }\n // If we have an internal selection, use it\n if (internalSelectedItem !== null) {\n return internalSelectedItem\n }\n // Otherwise, use first item if selectFirstByDefault is true\n if (selectFirstByDefault && data.length > 0) {\n const firstItem = data[0]\n // Set internal state to first item on initial load\n setInternalSelectedItem(firstItem)\n return firstItem\n }\n return null\n }, [selectFirstByDefault, data, selectedItem, internalSelectedItem])\n\n // Handle row click\n const handleRowClick = (params: GridRowParams) => {\n const item = data.find((item) => {\n const rowData = getRowData(item)\n return rowData.id === params.id\n })\n\n if (item) {\n // Update internal selection state if not controlled by props\n if (selectedItem === undefined) {\n setInternalSelectedItem(item)\n }\n\n // Call the user's onRowClick callback\n if (onRowClick) {\n onRowClick(item, params)\n }\n }\n }\n\n // Get selected row ID for highlighting\n const selectedRowId = useMemo(() => {\n if (!effectiveSelectedItem || !getItemId) return null\n return getItemId(effectiveSelectedItem)\n }, [effectiveSelectedItem, getItemId])\n\n // Default toolbar with filter and quick filter\n function DefaultToolbar() {\n return (\n <Toolbar>\n <Box\n sx={{\n display: \"flex\",\n width: \"100%\",\n gap: 1,\n p: 0.5,\n alignItems: \"center\",\n }}\n >\n {title && (\n <Typography\n variant=\"h6\"\n sx={{\n fontWeight: 500,\n color: \"white\",\n }}\n >\n {title}\n {showCount && ` (${data.length})`}\n </Typography>\n )}\n <Box\n sx={{\n ml: \"auto\",\n display: \"flex\",\n gap: 0.5,\n alignItems: \"center\",\n pr: 1,\n }}\n >\n <FilterPanelTrigger\n render={\n <ToolbarButton aria-label=\"Show filters\">\n <FilterListIcon fontSize=\"small\" />\n </ToolbarButton>\n }\n />\n <Divider\n orientation=\"vertical\"\n flexItem\n sx={{\n height: \"24px\",\n alignSelf: \"center\",\n }}\n />\n <QuickFilter\n render={(props, state) => (\n <Box\n {...props}\n sx={{\n display: \"flex\",\n overflow: \"hidden\",\n }}\n >\n {!state.expanded && (\n <QuickFilterTrigger\n render={\n <ToolbarButton aria-label=\"Search\">\n <SearchIcon fontSize=\"small\" />\n </ToolbarButton>\n }\n />\n )}\n <Box\n sx={{\n display: \"flex\",\n overflow: \"hidden\",\n transition: \"all 0.3s ease-in-out\",\n width: state.expanded ? \"200px\" : \"0px\",\n position: \"relative\",\n }}\n >\n <Box\n sx={{\n flex: 1,\n position: \"relative\",\n \"& .MuiInputBase-root\": {\n height: \"32px\",\n borderRadius: \"16px\",\n backgroundColor: \"#171927\",\n paddingLeft: \"40px\",\n paddingRight:\n state.expanded && state.value !== \"\"\n ? \"40px\"\n : \"12px\",\n color: \"white\",\n fontSize: \"14px\",\n border: \"none !important\",\n outline: \"none !important\",\n boxShadow: \"none !important\",\n \"&::before\": {\n display: \"none !important\",\n border: \"none !important\",\n },\n \"&::after\": {\n display: \"none !important\",\n border: \"none !important\",\n },\n \"&:hover\": {\n \"&::before\": {\n display: \"none !important\",\n border: \"none !important\",\n },\n \"&::after\": {\n display: \"none !important\",\n border: \"none !important\",\n },\n },\n \"&:focus-within\": {\n outline: \"none !important\",\n boxShadow: \"none !important\",\n \"&::before\": {\n display: \"none !important\",\n border: \"none !important\",\n },\n \"&::after\": {\n display: \"none !important\",\n border: \"none !important\",\n },\n },\n \"&.Mui-focused\": {\n outline: \"none !important\",\n boxShadow: \"none !important\",\n \"&::before\": {\n display: \"none !important\",\n border: \"none !important\",\n },\n \"&::after\": {\n display: \"none !important\",\n border: \"none !important\",\n },\n },\n \"& .MuiInputBase-input\": {\n padding: \"8px 0\",\n border: \"none !important\",\n outline: \"none !important\",\n boxShadow: \"none !important\",\n \"&:focus\": {\n outline: \"none !important\",\n boxShadow: \"none !important\",\n border: \"none !important\",\n },\n \"&::placeholder\": {\n color: \"rgba(255, 255, 255, 0.3)\",\n opacity: 1,\n },\n },\n \"& fieldset\": {\n border: \"none !important\",\n display: \"none !important\",\n },\n \"& .MuiOutlinedInput-notchedOutline\": {\n border: \"none !important\",\n display: \"none !important\",\n },\n },\n }}\n >\n {state.expanded && (\n <SearchIcon\n fontSize=\"small\"\n sx={{\n position: \"absolute\",\n left: \"12px\",\n top: \"50%\",\n transform: \"translateY(-50%)\",\n color: \"rgba(255, 255, 255, 0.6)\",\n zIndex: 1,\n pointerEvents: \"none\",\n }}\n />\n )}\n <QuickFilterControl placeholder={searchPlaceholder} />\n </Box>\n {state.expanded && state.value !== \"\" && (\n <QuickFilterClear\n render={\n <Box\n sx={{\n position: \"absolute\",\n right: \"8px\",\n top: \"50%\",\n transform: \"translateY(-50%)\",\n zIndex: 1,\n }}\n >\n <Box\n sx={{\n minWidth: \"24px\",\n width: \"24px\",\n height: \"24px\",\n padding: 0,\n color: \"rgba(255, 255, 255, 0.6)\",\n \"&:hover\": {\n backgroundColor:\n \"rgba(255, 255, 255, 0.1)\",\n },\n }}\n >\n <ToolbarButton aria-label=\"Clear\">\n <ClearIcon fontSize=\"small\" />\n </ToolbarButton>\n </Box>\n </Box>\n }\n />\n )}\n </Box>\n </Box>\n )}\n />\n </Box>\n </Box>\n </Toolbar>\n )\n }\n\n const ToolbarComponent = CustomToolbar || DefaultToolbar\n\n return (\n <Box\n ref={containerRef}\n sx={{\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n // Apply scrollbar styling like in the theme\n \"& *\": {\n scrollbarWidth: \"none\",\n msOverflowStyle: \"none\",\n \"&::-webkit-scrollbar\": {\n display: \"none\",\n },\n },\n \"&:hover *\": {\n scrollbarWidth: \"thin\",\n scrollbarColor: `${theme.palette.divider} transparent`,\n \"&::-webkit-scrollbar\": {\n display: \"block\",\n width: \"8px\",\n height: \"8px\",\n },\n \"&::-webkit-scrollbar-track\": {\n background: \"transparent\",\n },\n \"&::-webkit-scrollbar-thumb\": {\n background: theme.palette.divider,\n borderRadius: \"4px\",\n },\n \"&::-webkit-scrollbar-thumb:hover\": {\n background: theme.palette.action.hover,\n },\n },\n ...sx,\n }}\n >\n <DataGrid\n apiRef={apiRef}\n rows={rows}\n columns={columns}\n onRowClick={handleRowClick}\n disableColumnMenu={false}\n disableRowSelectionOnClick={true}\n disableMultipleRowSelection={true}\n hideFooterSelectedRowCount={true}\n filterMode=\"client\"\n sortingOrder={[\"desc\", \"asc\"]}\n hideFooter={false}\n showToolbar={true}\n slots={{\n toolbar: ToolbarComponent,\n }}\n initialState={{\n sorting: {\n sortModel: [],\n },\n filter: {\n filterModel: {\n items: [],\n },\n },\n ...dataGridProps?.initialState,\n }}\n {...dataGridProps}\n // Ensure autosize properties are always enabled and not overridden by dataGridProps\n autosizeOnMount={true}\n autosizeOptions={{\n // Merge any custom autosize options first\n ...(dataGridProps?.autosizeOptions || {}),\n // Force these key properties to always be true to maintain autosize behavior\n includeOutliers: true,\n includeHeaders: true,\n expand: true,\n // Auto-size all columns by default (can be overridden by dataGridProps)\n columns:\n dataGridProps?.autosizeOptions?.columns ||\n columns.map((col) => col.field),\n }}\n sx={{\n border: \"none\",\n\n width: \"100%\",\n // Remove any MUI overlays and elevation effects\n \"& .MuiPaper-root\": {\n boxShadow: \"none !important\",\n },\n \"& .MuiDataGrid-overlay\": {},\n \"& .MuiDataGrid-main\": {\n border: \"none\",\n\n // Remove any surface or paper overlays\n \"& .MuiPaper-root\": {},\n },\n \"& .MuiDataGrid-container--top [role=row]\": {},\n \"& .MuiDataGrid-topContainer\": {\n borderBottom: \"none !important\",\n },\n \"& .MuiDataGrid-columnHeaders\": {\n border: \"none\",\n borderBottom: \"none !important\",\n },\n \"& .MuiDataGrid-row\": {\n cursor: onRowClick ? \"pointer\" : \"default\",\n border: \"none\",\n margin: \"1px 0\",\n position: \"relative\",\n // Disable all default MUI hover effects\n backgroundColor: \"transparent !important\",\n \"&:hover\": {\n backgroundColor: \"transparent !important\",\n \"&::before\": {\n content: '\"\"',\n position: \"absolute\",\n top: 0,\n left: \"16px\",\n right: \"16px\",\n bottom: 0,\n backgroundColor: \"action.hover\",\n borderRadius: \"16px\",\n zIndex: 0,\n },\n },\n // Disable MUI's built-in selection styling completely\n \"&.Mui-selected\": {\n backgroundColor: \"transparent !important\",\n \"&:hover\": {\n backgroundColor: \"transparent !important\",\n },\n },\n // Highlight selected row with a distinct color using data attribute\n ...(selectedRowId !== null && {\n [`&[data-id=\"${selectedRowId}\"]`]: {\n backgroundColor: \"transparent !important\",\n \"&::before\": {\n content: '\"\"',\n position: \"absolute\",\n top: 0,\n left: \"16px\",\n right: \"16px\",\n bottom: 0,\n backgroundColor: \"rgba(255, 255, 255, 0.08) !important\",\n borderRadius: \"16px\",\n zIndex: 0,\n },\n \"&:hover\": {\n backgroundColor: \"transparent !important\",\n },\n \"&:hover::before\": {\n backgroundColor: \"rgba(255, 255, 255, 0.12) !important\",\n },\n },\n }),\n },\n \"& .MuiDataGrid-cell--textLeft\": {\n paddingLeft: \"40px\",\n },\n \"& .MuiDataGrid-cell\": {\n border: \"none\",\n position: \"relative\",\n zIndex: 1,\n \"&:focus\": {\n outline: \"none\",\n },\n \"&:focus-within\": {\n outline: \"none\",\n },\n \"&:hover\": {\n backgroundColor: \"transparent !important\",\n },\n },\n \"& .MuiDataGrid-columnHeader\": {\n border: \"none\",\n paddingLeft: \"40px\",\n paddingRight: \"40px\",\n\n \"& .MuiDataGrid-columnHeaderTitle\": {\n color: \"rgba(255, 255, 255, 0.6)\",\n },\n },\n \"& .MuiDataGrid-toolbarContainer\": {\n padding: \"8px\",\n border: \"none !important\",\n borderBottom: \"none !important\",\n\n \"& .MuiBox-root\": {},\n \"& .MuiFormControl-root\": {},\n \"& .MuiInputBase-root\": {},\n \"& .MuiPaper-root\": {\n boxShadow: \"none !important\",\n },\n \"& *\": {\n borderBottom: \"none !important\",\n },\n },\n \"& .MuiDataGrid-toolbar\": {\n borderBottom: \"none !important\",\n },\n \"& .MuiDataGrid-toolbarFilterList\": {\n border: \"none\",\n },\n \"& .MuiDataGrid-withBorderColor\": {\n borderColor: \"transparent !important\",\n },\n \"& .MuiDataGrid-columnSeparator\": {\n display: \"none\",\n },\n \"& .MuiDataGrid-footerContainer\": {\n display: \"none\",\n },\n \"& .MuiDataGrid-filler\": {\n border: \"none !important\",\n borderTop: \"none !important\",\n borderBottom: \"none !important\",\n borderLeft: \"none !important\",\n borderRight: \"none !important\",\n\n \"--rowBorderColor\": \"none !important\",\n },\n // Remove any remaining MUI background overlays\n \"& .MuiBackdrop-root\": {},\n \"& .MuiModal-backdrop\": {},\n ...dataGridProps?.sx,\n }}\n />\n </Box>\n )\n },\n ),\n)\n\nWandelbotsDataGrid.displayName = \"WandelbotsDataGrid\"\n","'use client';\n\nimport PropTypes from 'prop-types';\nimport { createStack } from '@mui/system';\nimport styled from \"../styles/styled.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nconst Stack = createStack({\n createStyledComponent: styled('div', {\n name: 'MuiStack',\n slot: 'Root'\n }),\n useThemeProps: inProps => useDefaultProps({\n props: inProps,\n name: 'MuiStack'\n })\n});\nprocess.env.NODE_ENV !== \"production\" ? Stack.propTypes /* remove-proptypes */ = {\n // ┌────────────────────────────── Warning ──────────────────────────────┐\n // │ These PropTypes are generated from the TypeScript type definitions. │\n // │ To update them, edit the d.ts file and run `pnpm proptypes`. │\n // └─────────────────────────────────────────────────────────────────────┘\n /**\n * The content of the component.\n */\n children: PropTypes.node,\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: PropTypes.elementType,\n /**\n * Defines the `flex-direction` style property.\n * It is applied for all screen sizes.\n * @default 'column'\n */\n direction: PropTypes.oneOfType([PropTypes.oneOf(['column-reverse', 'column', 'row-reverse', 'row']), PropTypes.arrayOf(PropTypes.oneOf(['column-reverse', 'column', 'row-reverse', 'row'])), PropTypes.object]),\n /**\n * Add an element between each child.\n */\n divider: PropTypes.node,\n /**\n * Defines the space between immediate children.\n * @default 0\n */\n spacing: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string])), PropTypes.number, PropTypes.object, PropTypes.string]),\n /**\n * The system prop, which allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n /**\n * If `true`, the CSS flexbox `gap` is used instead of applying `margin` to children.\n *\n * While CSS `gap` removes the [known limitations](https://mui.com/joy-ui/react-stack/#limitations),\n * it is not fully supported in some browsers. We recommend checking https://caniuse.com/?search=flex%20gap before using this flag.\n *\n * To enable this flag globally, follow the [theme's default props](https://mui.com/material-ui/customization/theme-components/#default-props) configuration.\n * @default false\n */\n useFlexGap: PropTypes.bool\n} : void 0;\nexport default Stack;","import * as React from \"react\";\nimport { forwardRef } from \"react\";\nconst SvgJogMinus = ({\n title,\n titleId,\n ...props\n}, ref) => /* @__PURE__ */ React.createElement(\"svg\", { width: 21, height: 21, viewBox: \"0 0 21 21\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ref, \"aria-labelledby\": titleId, ...props }, title ? /* @__PURE__ */ React.createElement(\"title\", { id: titleId }, title) : null, /* @__PURE__ */ React.createElement(\"g\", { id: \"JogMinus\" }, /* @__PURE__ */ React.createElement(\"path\", { id: \"Minus\", d: \"M0 13V8H21V13H0Z\", fill: \"white\" })));\nconst ForwardRef = forwardRef(SvgJogMinus);\nexport default ForwardRef;\n","import * as React from \"react\";\nimport { forwardRef } from \"react\";\nconst SvgJogPlus = ({\n title,\n titleId,\n ...props\n}, ref) => /* @__PURE__ */ React.createElement(\"svg\", { width: 21, height: 21, viewBox: \"0 0 21 21\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ref, \"aria-labelledby\": titleId, ...props }, title ? /* @__PURE__ */ React.createElement(\"title\", { id: titleId }, title) : null, /* @__PURE__ */ React.createElement(\"g\", { id: \"JogPlus\" }, /* @__PURE__ */ React.createElement(\"g\", { id: \"Plus\" }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M0 13V8H8V13H0Z\", fill: \"white\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M8 0L13 2.18557e-07L13 21H8L8 0Z\", fill: \"white\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M13 13V8H21V13H13Z\", fill: \"white\" }))));\nconst ForwardRef = forwardRef(SvgJogPlus);\nexport default ForwardRef;\n","import { IconButton, Typography, useTheme } from \"@mui/material\"\nimport Stack from \"@mui/material/Stack\"\nimport { observer } from \"mobx-react-lite\"\nimport React, { useEffect, useRef, useState, type ReactNode } from \"react\"\nimport { externalizeComponent } from \"../../externalizeComponent\"\nimport JogMinus from \"../../icons/jog-minus.svg\"\nimport JogPlus from \"../../icons/jog-plus.svg\"\nimport type { AxisControlComponentColors } from \"../../themes/themeTypes\"\nimport { useAnimationFrame } from \"../utils/hooks\"\nimport type { JoggingDirection } from \"./JoggingStore\"\n\ntype JoggingCartesianAxisControlProps = {\n colors?: AxisControlComponentColors\n label: ReactNode\n getDisplayedValue: () => string\n startJogging: (direction: JoggingDirection) => void\n stopJogging: () => void\n disabled?: boolean\n /** If set, the corresponding button will be rendered in the pressed state */\n activeJoggingDirection?: JoggingDirection\n} & React.ComponentProps<typeof Stack>\n\n/** A input widget to control an individual cartesian axis */\nexport const JoggingCartesianAxisControl = externalizeComponent(\n observer(\n ({\n colors,\n label,\n getDisplayedValue,\n startJogging,\n stopJogging,\n disabled,\n activeJoggingDirection,\n ...rest\n }: JoggingCartesianAxisControlProps) => {\n useAnimationFrame(() => {\n const displayValue = getDisplayedValue()\n const element = valueContainerRef.current\n if (!element) return\n\n element.textContent = displayValue\n })\n const theme = useTheme()\n\n const [localActiveJoggingDirection, setLocalActiveJoggingDirection] =\n useState<JoggingDirection | null>(null)\n\n // Trigger pointer \"release\" events because e.g. firefox does not trigger pointer events as soon as a component is disabled\n useEffect(() => {\n if (!disabled) {\n return\n }\n onPointerUpOrOut()\n }, [disabled])\n\n // Handle both controlled and uncontrolled states\n const showJoggingDirection =\n activeJoggingDirection || localActiveJoggingDirection\n\n const valueContainerRef = useRef<HTMLParagraphElement>(null)\n\n if (!colors) {\n colors = {\n color: \"#fff\",\n backgroundColor: \"#000\",\n borderColor: \"#000\",\n buttonBackgroundColor: {\n disabled: \"#000\",\n default: \"#000\",\n hovered: \"#000\",\n pressed: \"#000\",\n },\n labelColor: \"#000\",\n }\n }\n\n const borderColor = showJoggingDirection\n ? colors.buttonBackgroundColor?.pressed\n : colors.borderColor\n\n const sxAxisControlButtonBase = {\n width: \"55px\",\n color: colors.color,\n path: { fill: colors.color },\n alignContent: \"center\",\n fontSize: \"37px\",\n svg: {\n pointerEvents: \"none\",\n },\n }\n\n const sxAxisControlButtonDefault = {\n ...sxAxisControlButtonBase,\n backgroundColor: colors.buttonBackgroundColor?.default,\n \":hover\": {\n backgroundColor: colors.buttonBackgroundColor?.hovered,\n },\n \":active\": {\n backgroundColor: colors.buttonBackgroundColor?.pressed,\n color: colors.backgroundColor,\n path: { fill: colors.backgroundColor },\n },\n \":disabled\": {\n backgroundColor: colors.buttonBackgroundColor?.disabled,\n \"svg path\": { fill: theme.palette.action.disabled },\n },\n }\n\n const sxAxisControlButtonPressed = {\n ...sxAxisControlButtonBase,\n backgroundColor: colors.buttonBackgroundColor?.pressed,\n color: colors.backgroundColor,\n path: { fill: colors.backgroundColor },\n \":disabled\": {\n backgroundColor: colors.buttonBackgroundColor?.pressed,\n \"svg path\": { fill: theme.palette.action.disabled },\n },\n }\n\n function onPointerDown(\n ev: React.PointerEvent,\n direction: JoggingDirection,\n ) {\n if (disabled) {\n return\n }\n\n if (ev.button === 0) {\n setLocalActiveJoggingDirection(direction)\n startJogging(direction)\n }\n }\n\n function onPointerUpOrOut() {\n setLocalActiveJoggingDirection(null)\n stopJogging()\n }\n\n return (\n <Stack height=\"64px\" direction=\"row\" justifyContent=\"center\" {...rest}>\n <IconButton\n disabled={disabled}\n disableRipple\n onPointerDown={(ev: React.PointerEvent) => onPointerDown(ev, \"-\")}\n onPointerUp={onPointerUpOrOut}\n onPointerOut={onPointerUpOrOut}\n size=\"large\"\n sx={{\n ...(showJoggingDirection === \"-\"\n ? sxAxisControlButtonPressed\n : sxAxisControlButtonDefault),\n borderRadius: \"16px 0px 0px 16px\",\n borderLeft: `2px solid ${borderColor ?? \"#fff\"}`,\n borderBottom: `2px solid ${borderColor ?? \"#fff\"}`,\n borderTop: `2px solid ${borderColor ?? \"#fff\"}`,\n }}\n >\n <JogMinus />\n </IconButton>\n\n <Stack\n spacing=\"6px\"\n sx={{\n width: \"150px\",\n backgroundColor: colors.backgroundColor,\n alignItems: \"center\",\n justifyContent: \"center\",\n opacity: \"0.9\",\n borderBottom: `2px solid ${borderColor ?? \"#fff\"}`,\n borderTop: `2px solid ${borderColor ?? \"#fff\"}`,\n }}\n >\n <Stack\n height=\"22px\"\n direction=\"row\"\n alignItems=\"center\"\n justifyItems=\"center\"\n spacing={1}\n sx={{\n userSelect: \"none\",\n color: colors.color,\n \".MuiTypography-root\": {\n fontWeight: 700,\n ...(disabled ? { color: theme.palette.action.disabled } : {}),\n },\n ...(disabled\n ? { \"svg path\": { fill: theme.palette.action.disabled } }\n : {}),\n }}\n >\n {label}\n </Stack>\n <Typography\n height=\"22px\"\n sx={{\n fontSize: \"15px\",\n color: disabled ? theme.palette.action.disabled : colors.color,\n fontWeight: 700,\n }}\n ref={valueContainerRef}\n >\n {getDisplayedValue()}\n </Typography>\n </Stack>\n\n <IconButton\n disableRipple\n disabled={disabled}\n onPointerDown={(ev: React.PointerEvent) => onPointerDown(ev, \"+\")}\n onPointerUp={onPointerUpOrOut}\n onPointerOut={onPointerUpOrOut}\n size=\"large\"\n sx={{\n ...(showJoggingDirection === \"+\"\n ? sxAxisControlButtonPressed\n : sxAxisControlButtonDefault),\n borderRadius: \"0px 16px 16px 0px\",\n borderRight: `2px solid ${borderColor ?? \"#fff\"}`,\n borderBottom: `2px solid ${borderColor ?? \"#fff\"}`,\n borderTop: `2px solid ${borderColor ?? \"#fff\"}`,\n }}\n >\n <JogPlus />\n </IconButton>\n </Stack>\n )\n },\n ),\n)\n","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M15.41 7.41 14 6l-6 6 6 6 1.41-1.41L10.83 12z\"\n}), 'ChevronLeft');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M10 6 8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\"\n}), 'ChevronRight');","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nexport default now;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nexport default trimmedEndIndex;\n","import trimmedEndIndex from './_trimmedEndIndex.js';\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nexport default baseTrim;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","import baseTrim from './_baseTrim.js';\nimport isObject from './isObject.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nexport default toNumber;\n","import isObject from './isObject.js';\nimport now from './now.js';\nimport toNumber from './toNumber.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nexport default debounce;\n","import debounce from './debounce.js';\nimport isObject from './isObject.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\nexport default throttle;\n","import ChevronLeft from \"@mui/icons-material/ChevronLeft\"\nimport ChevronRight from \"@mui/icons-material/ChevronRight\"\nimport { IconButton, Slider, Typography, useTheme } from \"@mui/material\"\nimport Stack from \"@mui/material/Stack\"\nimport throttle from \"lodash-es/throttle\"\nimport { observer, useLocalObservable } from \"mobx-react-lite\"\nimport { useState } from \"react\"\nimport { useTranslation } from \"react-i18next\"\nimport { externalizeComponent } from \"../../externalizeComponent\"\nimport { useAnimationFrame } from \"../utils/hooks\"\n\ntype JoggingJointRotationControlProps = {\n startJogging: (direction: \"-\" | \"+\") => void\n stopJogging: () => void\n lowerLimitDegs?: number\n upperLimitDegs?: number\n getValueDegs: () => number | undefined\n\n disabled?: boolean\n} & React.ComponentProps<typeof Stack>\n\n/** A input widget to control an individual joint */\nexport const JoggingJointRotationControl = externalizeComponent(\n observer(\n ({\n startJogging,\n stopJogging,\n lowerLimitDegs,\n upperLimitDegs,\n getValueDegs,\n disabled,\n ...rest\n }: JoggingJointRotationControlProps) => {\n const { t } = useTranslation()\n const [currentValue, setCurrentValue] = useState<number | undefined>()\n const theme = useTheme()\n\n const pressedButtonStyle = {\n background: theme.palette.backgroundPaperElevation?.[4],\n color: theme.palette.backgroundPaperElevation?.[11],\n }\n\n const state = useLocalObservable(() => ({\n activeJoggingDir: null as \"-\" | \"+\" | null,\n\n startJogging(dir: \"-\" | \"+\") {\n this.activeJoggingDir = dir\n startJogging(dir)\n },\n\n stopJogging() {\n this.activeJoggingDir = null\n stopJogging()\n },\n }))\n\n const updateValue = throttle(() => {\n setCurrentValue(getValueDegs())\n }, 50)\n\n useAnimationFrame(updateValue)\n\n function onPointerDownMinus(ev: React.PointerEvent) {\n // Stop right click from triggering jog\n if (ev.button === 0) state.startJogging(\"-\")\n }\n\n function onPointerDownPlus(ev: React.PointerEvent) {\n if (ev.button === 0) state.startJogging(\"+\")\n }\n\n function onPointerUp(ev: React.PointerEvent) {\n state.stopJogging()\n }\n\n function onPointerOut(ev: React.PointerEvent) {\n state.stopJogging()\n }\n\n function formatDegrees(value: number | undefined, precision = 1) {\n if (value === undefined || isNaN(value)) return \"\"\n\n const output = t(\"General.degree.variable\", {\n amount: value.toFixed(precision),\n })\n\n if (value > 0 && precision === 0) {\n return `+${output}`\n } else {\n return output\n }\n }\n\n return (\n <Stack\n height=\"64px\"\n width=\"100%\"\n maxWidth=\"260px\"\n direction=\"row\"\n {...rest}\n sx={{\n \"& .MuiIconButton-root\": {\n width: \"52px\",\n color: theme.palette.text.primary,\n alignContent: \"center\",\n backgroundColor: theme.palette.backgroundPaperElevation?.[11],\n \"& svg\": {\n width: \"42px\",\n height: \"42px\",\n },\n\n \"&.Mui-disabled\": {\n backgroundColor: theme.palette.backgroundPaperElevation?.[11],\n color: theme.palette.action.disabled,\n opacity: 1,\n },\n \"&:hover\": {\n backgroundColor: theme.palette.backgroundPaperElevation?.[9],\n },\n \"&:active\": {\n ...pressedButtonStyle,\n },\n },\n }}\n >\n <IconButton\n onPointerDown={onPointerDownMinus}\n onPointerUp={onPointerUp}\n onPointerOut={onPointerOut}\n disabled={disabled}\n disableRipple\n sx={{\n borderRadius: \"16px 0px 0px 16px\",\n ...(state.activeJoggingDir === \"-\" ? pressedButtonStyle : {}),\n }}\n >\n <ChevronLeft\n sx={{\n pointerEvents: \"none\",\n color:\n theme.componentsExt?.JoggingPanel?.JoggingJoint?.Joint\n ?.arrowColor,\n }}\n />\n </IconButton>\n\n <Stack\n flexGrow={1}\n alignItems=\"center\"\n justifyContent=\"center\"\n sx={{\n borderStyle: \"solid\",\n borderLeftWidth: 0,\n borderRightWidth: 0,\n border: \"none\",\n backgroundColor: theme.palette.backgroundPaperElevation?.[11],\n paddingLeft: \"20px\",\n paddingRight: \"20px\",\n zIndex: 1,\n }}\n >\n <Typography\n sx={{\n fontSize: \"15px\",\n fontWeight: 700,\n position: \"relative\",\n top: \"5px\",\n\n color: disabled\n ? theme.palette.action.disabled\n : theme.palette.text.primary,\n }}\n >\n {formatDegrees(currentValue)}\n </Typography>\n\n <Slider\n disabled\n aria-label=\"Joint position\"\n min={lowerLimitDegs}\n max={upperLimitDegs}\n value={currentValue || 0}\n track={false}\n sx={{\n \"& .MuiSlider-mark\": {\n display: \"none\",\n },\n \"& .MuiSlider-thumb\": {\n width: \"5px\",\n height: \"12px\",\n borderRadius: \"2px\",\n color: disabled\n ? theme.palette.action.disabled\n : theme.palette.text.primary,\n },\n \"& .MuiSlider-markLabel\": {\n top: \"20px\",\n fontSize: \"12px\",\n color: disabled\n ? theme.palette.action.disabled\n : theme.palette.text.secondary,\n },\n \"& .MuiSlider-rail\": {\n backgroundColor: theme.palette.backgroundPaperElevation?.[5],\n opacity: 1,\n },\n }}\n marks={\n lowerLimitDegs !== undefined &&\n upperLimitDegs !== undefined && [\n {\n value: lowerLimitDegs,\n label: formatDegrees(lowerLimitDegs, 0),\n },\n {\n value: upperLimitDegs,\n label: formatDegrees(upperLimitDegs, 0),\n },\n ]\n }\n />\n </Stack>\n\n <IconButton\n onPointerDown={onPointerDownPlus}\n onPointerUp={onPointerUp}\n onPointerOut={onPointerOut}\n disabled={disabled}\n disableRipple\n sx={{\n borderRadius: \"0px 16px 16px 0px\",\n ...(state.activeJoggingDir === \"+\" ? pressedButtonStyle : {}),\n }}\n >\n <ChevronRight\n sx={{\n pointerEvents: \"none\",\n color:\n theme.componentsExt?.JoggingPanel?.JoggingJoint?.Joint\n ?.arrowColor,\n }}\n />\n </IconButton>\n </Stack>\n )\n },\n ),\n)\n","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M10 9h4V6h3l-5-5-5 5h3zm-1 1H6V7l-5 5 5 5v-3h3zm14 2-5-5v3h-3v4h3v3zm-9 3h-4v3H7l5 5 5-5h-3z\"\n}), 'OpenWith');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81 1.66 0 3-1.34 3-3s-1.34-3-3-3-3 1.34-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9c-1.66 0-3 1.34-3 3s1.34 3 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.16c-.05.21-.08.43-.08.65 0 1.61 1.31 2.92 2.92 2.92s2.92-1.31 2.92-2.92-1.31-2.92-2.92-2.92\"\n}), 'Share');","const _lut = [ '00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '0a', '0b', '0c', '0d', '0e', '0f', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '1a', '1b', '1c', '1d', '1e', '1f', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '2a', '2b', '2c', '2d', '2e', '2f', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '3a', '3b', '3c', '3d', '3e', '3f', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '4a', '4b', '4c', '4d', '4e', '4f', '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '5a', '5b', '5c', '5d', '5e', '5f', '60', '61', '62', '63', '64', '65', '66', '67', '68', '69', '6a', '6b', '6c', '6d', '6e', '6f', '70', '71', '72', '73', '74', '75', '76', '77', '78', '79', '7a', '7b', '7c', '7d', '7e', '7f', '80', '81', '82', '83', '84', '85', '86', '87', '88', '89', '8a', '8b', '8c', '8d', '8e', '8f', '90', '91', '92', '93', '94', '95', '96', '97', '98', '99', '9a', '9b', '9c', '9d', '9e', '9f', 'a0', 'a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7', 'a8', 'a9', 'aa', 'ab', 'ac', 'ad', 'ae', 'af', 'b0', 'b1', 'b2', 'b3', 'b4', 'b5', 'b6', 'b7', 'b8', 'b9', 'ba', 'bb', 'bc', 'bd', 'be', 'bf', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'c7', 'c8', 'c9', 'ca', 'cb', 'cc', 'cd', 'ce', 'cf', 'd0', 'd1', 'd2', 'd3', 'd4', 'd5', 'd6', 'd7', 'd8', 'd9', 'da', 'db', 'dc', 'dd', 'de', 'df', 'e0', 'e1', 'e2', 'e3', 'e4', 'e5', 'e6', 'e7', 'e8', 'e9', 'ea', 'eb', 'ec', 'ed', 'ee', 'ef', 'f0', 'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'fa', 'fb', 'fc', 'fd', 'fe', 'ff' ];\n\nlet _seed = 1234567;\n\n\nconst DEG2RAD = Math.PI / 180;\nconst RAD2DEG = 180 / Math.PI;\n\n/**\n * Generate a [UUID]{@link https://en.wikipedia.org/wiki/Universally_unique_identifier}\n * (universally unique identifier).\n *\n * @return {string} The UUID.\n */\nfunction generateUUID() {\n\n\t// http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136\n\n\tconst d0 = Math.random() * 0xffffffff | 0;\n\tconst d1 = Math.random() * 0xffffffff | 0;\n\tconst d2 = Math.random() * 0xffffffff | 0;\n\tconst d3 = Math.random() * 0xffffffff | 0;\n\tconst uuid = _lut[ d0 & 0xff ] + _lut[ d0 >> 8 & 0xff ] + _lut[ d0 >> 16 & 0xff ] + _lut[ d0 >> 24 & 0xff ] + '-' +\n\t\t\t_lut[ d1 & 0xff ] + _lut[ d1 >> 8 & 0xff ] + '-' + _lut[ d1 >> 16 & 0x0f | 0x40 ] + _lut[ d1 >> 24 & 0xff ] + '-' +\n\t\t\t_lut[ d2 & 0x3f | 0x80 ] + _lut[ d2 >> 8 & 0xff ] + '-' + _lut[ d2 >> 16 & 0xff ] + _lut[ d2 >> 24 & 0xff ] +\n\t\t\t_lut[ d3 & 0xff ] + _lut[ d3 >> 8 & 0xff ] + _lut[ d3 >> 16 & 0xff ] + _lut[ d3 >> 24 & 0xff ];\n\n\t// .toLowerCase() here flattens concatenated strings to save heap memory space.\n\treturn uuid.toLowerCase();\n\n}\n\n/**\n * Clamps the given value between min and max.\n *\n * @param {number} value - The value to clamp.\n * @param {number} min - The min value.\n * @param {number} max - The max value.\n * @return {number} The clamped value.\n */\nfunction clamp( value, min, max ) {\n\n\treturn Math.max( min, Math.min( max, value ) );\n\n}\n\n/**\n * Computes the Euclidean modulo of the given parameters that\n * is `( ( n % m ) + m ) % m`.\n *\n * @param {number} n - The first parameter.\n * @param {number} m - The second parameter.\n * @return {number} The Euclidean modulo.\n */\nfunction euclideanModulo( n, m ) {\n\n\t// https://en.wikipedia.org/wiki/Modulo_operation\n\n\treturn ( ( n % m ) + m ) % m;\n\n}\n\n/**\n * Performs a linear mapping from range `<a1, a2>` to range `<b1, b2>`\n * for the given value.\n *\n * @param {number} x - The value to be mapped.\n * @param {number} a1 - Minimum value for range A.\n * @param {number} a2 - Maximum value for range A.\n * @param {number} b1 - Minimum value for range B.\n * @param {number} b2 - Maximum value for range B.\n * @return {number} The mapped value.\n */\nfunction mapLinear( x, a1, a2, b1, b2 ) {\n\n\treturn b1 + ( x - a1 ) * ( b2 - b1 ) / ( a2 - a1 );\n\n}\n\n/**\n * Returns the percentage in the closed interval `[0, 1]` of the given value\n * between the start and end point.\n *\n * @param {number} x - The start point\n * @param {number} y - The end point.\n * @param {number} value - A value between start and end.\n * @return {number} The interpolation factor.\n */\nfunction inverseLerp( x, y, value ) {\n\n\t// https://www.gamedev.net/tutorials/programming/general-and-gameplay-programming/inverse-lerp-a-super-useful-yet-often-overlooked-function-r5230/\n\n\tif ( x !== y ) {\n\n\t\treturn ( value - x ) / ( y - x );\n\n\t} else {\n\n\t\treturn 0;\n\n\t}\n\n}\n\n/**\n * Returns a value linearly interpolated from two known points based on the given interval -\n * `t = 0` will return `x` and `t = 1` will return `y`.\n *\n * @param {number} x - The start point\n * @param {number} y - The end point.\n * @param {number} t - The interpolation factor in the closed interval `[0, 1]`.\n * @return {number} The interpolated value.\n */\nfunction lerp( x, y, t ) {\n\n\treturn ( 1 - t ) * x + t * y;\n\n}\n\n/**\n * Smoothly interpolate a number from `x` to `y` in a spring-like manner using a delta\n * time to maintain frame rate independent movement. For details, see\n * [Frame rate independent damping using lerp]{@link http://www.rorydriscoll.com/2016/03/07/frame-rate-independent-damping-using-lerp/}.\n *\n * @param {number} x - The current point.\n * @param {number} y - The target point.\n * @param {number} lambda - A higher lambda value will make the movement more sudden,\n * and a lower value will make the movement more gradual.\n * @param {number} dt - Delta time in seconds.\n * @return {number} The interpolated value.\n */\nfunction damp( x, y, lambda, dt ) {\n\n\treturn lerp( x, y, 1 - Math.exp( - lambda * dt ) );\n\n}\n\n/**\n * Returns a value that alternates between `0` and the given `length` parameter.\n *\n * @param {number} x - The value to pingpong.\n * @param {number} [length=1] - The positive value the function will pingpong to.\n * @return {number} The alternated value.\n */\nfunction pingpong( x, length = 1 ) {\n\n\t// https://www.desmos.com/calculator/vcsjnyz7x4\n\n\treturn length - Math.abs( euclideanModulo( x, length * 2 ) - length );\n\n}\n\n/**\n * Returns a value in the range `[0,1]` that represents the percentage that `x` has\n * moved between `min` and `max`, but smoothed or slowed down the closer `x` is to\n * the `min` and `max`.\n *\n * See [Smoothstep]{@link http://en.wikipedia.org/wiki/Smoothstep} for more details.\n *\n * @param {number} x - The value to evaluate based on its position between min and max.\n * @param {number} min - The min value. Any x value below min will be `0`.\n * @param {number} max - The max value. Any x value above max will be `1`.\n * @return {number} The alternated value.\n */\nfunction smoothstep( x, min, max ) {\n\n\tif ( x <= min ) return 0;\n\tif ( x >= max ) return 1;\n\n\tx = ( x - min ) / ( max - min );\n\n\treturn x * x * ( 3 - 2 * x );\n\n}\n\n/**\n * A [variation on smoothstep]{@link https://en.wikipedia.org/wiki/Smoothstep#Variations}\n * that has zero 1st and 2nd order derivatives at x=0 and x=1.\n *\n * @param {number} x - The value to evaluate based on its position between min and max.\n * @param {number} min - The min value. Any x value below min will be `0`.\n * @param {number} max - The max value. Any x value above max will be `1`.\n * @return {number} The alternated value.\n */\nfunction smootherstep( x, min, max ) {\n\n\tif ( x <= min ) return 0;\n\tif ( x >= max ) return 1;\n\n\tx = ( x - min ) / ( max - min );\n\n\treturn x * x * x * ( x * ( x * 6 - 15 ) + 10 );\n\n}\n\n/**\n * Returns a random integer from `<low, high>` interval.\n *\n * @param {number} low - The lower value boundary.\n * @param {number} high - The upper value boundary\n * @return {number} A random integer.\n */\nfunction randInt( low, high ) {\n\n\treturn low + Math.floor( Math.random() * ( high - low + 1 ) );\n\n}\n\n/**\n * Returns a random float from `<low, high>` interval.\n *\n * @param {number} low - The lower value boundary.\n * @param {number} high - The upper value boundary\n * @return {number} A random float.\n */\nfunction randFloat( low, high ) {\n\n\treturn low + Math.random() * ( high - low );\n\n}\n\n/**\n * Returns a random integer from `<-range/2, range/2>` interval.\n *\n * @param {number} range - Defines the value range.\n * @return {number} A random float.\n */\nfunction randFloatSpread( range ) {\n\n\treturn range * ( 0.5 - Math.random() );\n\n}\n\n/**\n * Returns a deterministic pseudo-random float in the interval `[0, 1]`.\n *\n * @param {number} [s] - The integer seed.\n * @return {number} A random float.\n */\nfunction seededRandom( s ) {\n\n\tif ( s !== undefined ) _seed = s;\n\n\t// Mulberry32 generator\n\n\tlet t = _seed += 0x6D2B79F5;\n\n\tt = Math.imul( t ^ t >>> 15, t | 1 );\n\n\tt ^= t + Math.imul( t ^ t >>> 7, t | 61 );\n\n\treturn ( ( t ^ t >>> 14 ) >>> 0 ) / 4294967296;\n\n}\n\n/**\n * Converts degrees to radians.\n *\n * @param {number} degrees - A value in degrees.\n * @return {number} The converted value in radians.\n */\nfunction degToRad( degrees ) {\n\n\treturn degrees * DEG2RAD;\n\n}\n\n/**\n * Converts radians to degrees.\n *\n * @param {number} radians - A value in radians.\n * @return {number} The converted value in degrees.\n */\nfunction radToDeg( radians ) {\n\n\treturn radians * RAD2DEG;\n\n}\n\n/**\n * Returns `true` if the given number is a power of two.\n *\n * @param {number} value - The value to check.\n * @return {boolean} Whether the given number is a power of two or not.\n */\nfunction isPowerOfTwo( value ) {\n\n\treturn ( value & ( value - 1 ) ) === 0 && value !== 0;\n\n}\n\n/**\n * Returns the smallest power of two that is greater than or equal to the given number.\n *\n * @param {number} value - The value to find a POT for.\n * @return {number} The smallest power of two that is greater than or equal to the given number.\n */\nfunction ceilPowerOfTwo( value ) {\n\n\treturn Math.pow( 2, Math.ceil( Math.log( value ) / Math.LN2 ) );\n\n}\n\n/**\n * Returns the largest power of two that is less than or equal to the given number.\n *\n * @param {number} value - The value to find a POT for.\n * @return {number} The largest power of two that is less than or equal to the given number.\n */\nfunction floorPowerOfTwo( value ) {\n\n\treturn Math.pow( 2, Math.floor( Math.log( value ) / Math.LN2 ) );\n\n}\n\n/**\n * Sets the given quaternion from the [Intrinsic Proper Euler Angles]{@link https://en.wikipedia.org/wiki/Euler_angles}\n * defined by the given angles and order.\n *\n * Rotations are applied to the axes in the order specified by order:\n * rotation by angle `a` is applied first, then by angle `b`, then by angle `c`.\n *\n * @param {Quaternion} q - The quaternion to set.\n * @param {number} a - The rotation applied to the first axis, in radians.\n * @param {number} b - The rotation applied to the second axis, in radians.\n * @param {number} c - The rotation applied to the third axis, in radians.\n * @param {('XYX'|'XZX'|'YXY'|'YZY'|'ZXZ'|'ZYZ')} order - A string specifying the axes order.\n */\nfunction setQuaternionFromProperEuler( q, a, b, c, order ) {\n\n\tconst cos = Math.cos;\n\tconst sin = Math.sin;\n\n\tconst c2 = cos( b / 2 );\n\tconst s2 = sin( b / 2 );\n\n\tconst c13 = cos( ( a + c ) / 2 );\n\tconst s13 = sin( ( a + c ) / 2 );\n\n\tconst c1_3 = cos( ( a - c ) / 2 );\n\tconst s1_3 = sin( ( a - c ) / 2 );\n\n\tconst c3_1 = cos( ( c - a ) / 2 );\n\tconst s3_1 = sin( ( c - a ) / 2 );\n\n\tswitch ( order ) {\n\n\t\tcase 'XYX':\n\t\t\tq.set( c2 * s13, s2 * c1_3, s2 * s1_3, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'YZY':\n\t\t\tq.set( s2 * s1_3, c2 * s13, s2 * c1_3, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'ZXZ':\n\t\t\tq.set( s2 * c1_3, s2 * s1_3, c2 * s13, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'XZX':\n\t\t\tq.set( c2 * s13, s2 * s3_1, s2 * c3_1, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'YXY':\n\t\t\tq.set( s2 * c3_1, c2 * s13, s2 * s3_1, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'ZYZ':\n\t\t\tq.set( s2 * s3_1, s2 * c3_1, c2 * s13, c2 * c13 );\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tconsole.warn( 'THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: ' + order );\n\n\t}\n\n}\n\n/**\n * Denormalizes the given value according to the given typed array.\n *\n * @param {number} value - The value to denormalize.\n * @param {TypedArray} array - The typed array that defines the data type of the value.\n * @return {number} The denormalize (float) value in the range `[0,1]`.\n */\nfunction denormalize( value, array ) {\n\n\tswitch ( array.constructor ) {\n\n\t\tcase Float32Array:\n\n\t\t\treturn value;\n\n\t\tcase Uint32Array:\n\n\t\t\treturn value / 4294967295.0;\n\n\t\tcase Uint16Array:\n\n\t\t\treturn value / 65535.0;\n\n\t\tcase Uint8Array:\n\n\t\t\treturn value / 255.0;\n\n\t\tcase Int32Array:\n\n\t\t\treturn Math.max( value / 2147483647.0, - 1.0 );\n\n\t\tcase Int16Array:\n\n\t\t\treturn Math.max( value / 32767.0, - 1.0 );\n\n\t\tcase Int8Array:\n\n\t\t\treturn Math.max( value / 127.0, - 1.0 );\n\n\t\tdefault:\n\n\t\t\tthrow new Error( 'Invalid component type.' );\n\n\t}\n\n}\n\n/**\n * Normalizes the given value according to the given typed array.\n *\n * @param {number} value - The float value in the range `[0,1]` to normalize.\n * @param {TypedArray} array - The typed array that defines the data type of the value.\n * @return {number} The normalize value.\n */\nfunction normalize( value, array ) {\n\n\tswitch ( array.constructor ) {\n\n\t\tcase Float32Array:\n\n\t\t\treturn value;\n\n\t\tcase Uint32Array:\n\n\t\t\treturn Math.round( value * 4294967295.0 );\n\n\t\tcase Uint16Array:\n\n\t\t\treturn Math.round( value * 65535.0 );\n\n\t\tcase Uint8Array:\n\n\t\t\treturn Math.round( value * 255.0 );\n\n\t\tcase Int32Array:\n\n\t\t\treturn Math.round( value * 2147483647.0 );\n\n\t\tcase Int16Array:\n\n\t\t\treturn Math.round( value * 32767.0 );\n\n\t\tcase Int8Array:\n\n\t\t\treturn Math.round( value * 127.0 );\n\n\t\tdefault:\n\n\t\t\tthrow new Error( 'Invalid component type.' );\n\n\t}\n\n}\n\nconst MathUtils = {\n\tDEG2RAD: DEG2RAD,\n\tRAD2DEG: RAD2DEG,\n\tgenerateUUID: generateUUID,\n\tclamp: clamp,\n\teuclideanModulo: euclideanModulo,\n\tmapLinear: mapLinear,\n\tinverseLerp: inverseLerp,\n\tlerp: lerp,\n\tdamp: damp,\n\tpingpong: pingpong,\n\tsmoothstep: smoothstep,\n\tsmootherstep: smootherstep,\n\trandInt: randInt,\n\trandFloat: randFloat,\n\trandFloatSpread: randFloatSpread,\n\tseededRandom: seededRandom,\n\tdegToRad: degToRad,\n\tradToDeg: radToDeg,\n\tisPowerOfTwo: isPowerOfTwo,\n\tceilPowerOfTwo: ceilPowerOfTwo,\n\tfloorPowerOfTwo: floorPowerOfTwo,\n\tsetQuaternionFromProperEuler: setQuaternionFromProperEuler,\n\tnormalize: normalize,\n\tdenormalize: denormalize\n};\n\nexport {\n\tDEG2RAD,\n\tRAD2DEG,\n\tgenerateUUID,\n\tclamp,\n\teuclideanModulo,\n\tmapLinear,\n\tinverseLerp,\n\tlerp,\n\tdamp,\n\tpingpong,\n\tsmoothstep,\n\tsmootherstep,\n\trandInt,\n\trandFloat,\n\trandFloatSpread,\n\tseededRandom,\n\tdegToRad,\n\tradToDeg,\n\tisPowerOfTwo,\n\tceilPowerOfTwo,\n\tfloorPowerOfTwo,\n\tsetQuaternionFromProperEuler,\n\tnormalize,\n\tdenormalize,\n\tMathUtils\n};\n","import { clamp } from './MathUtils.js';\n\n/**\n * Class for representing a Quaternion. Quaternions are used in three.js to represent rotations.\n *\n * Iterating through a vector instance will yield its components `(x, y, z, w)` in\n * the corresponding order.\n *\n * Note that three.js expects Quaternions to be normalized.\n * ```js\n * const quaternion = new THREE.Quaternion();\n * quaternion.setFromAxisAngle( new THREE.Vector3( 0, 1, 0 ), Math.PI / 2 );\n *\n * const vector = new THREE.Vector3( 1, 0, 0 );\n * vector.applyQuaternion( quaternion );\n * ```\n */\nclass Quaternion {\n\n\t/**\n\t * Constructs a new quaternion.\n\t *\n\t * @param {number} [x=0] - The x value of this quaternion.\n\t * @param {number} [y=0] - The y value of this quaternion.\n\t * @param {number} [z=0] - The z value of this quaternion.\n\t * @param {number} [w=1] - The w value of this quaternion.\n\t */\n\tconstructor( x = 0, y = 0, z = 0, w = 1 ) {\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isQuaternion = true;\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._w = w;\n\n\t}\n\n\t/**\n\t * Interpolates between two quaternions via SLERP. This implementation assumes the\n\t * quaternion data are managed in flat arrays.\n\t *\n\t * @param {Array<number>} dst - The destination array.\n\t * @param {number} dstOffset - An offset into the destination array.\n\t * @param {Array<number>} src0 - The source array of the first quaternion.\n\t * @param {number} srcOffset0 - An offset into the first source array.\n\t * @param {Array<number>} src1 - The source array of the second quaternion.\n\t * @param {number} srcOffset1 - An offset into the second source array.\n\t * @param {number} t - The interpolation factor in the range `[0,1]`.\n\t * @see {@link Quaternion#slerp}\n\t */\n\tstatic slerpFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t ) {\n\n\t\t// fuzz-free, array-based Quaternion SLERP operation\n\n\t\tlet x0 = src0[ srcOffset0 + 0 ],\n\t\t\ty0 = src0[ srcOffset0 + 1 ],\n\t\t\tz0 = src0[ srcOffset0 + 2 ],\n\t\t\tw0 = src0[ srcOffset0 + 3 ];\n\n\t\tconst x1 = src1[ srcOffset1 + 0 ],\n\t\t\ty1 = src1[ srcOffset1 + 1 ],\n\t\t\tz1 = src1[ srcOffset1 + 2 ],\n\t\t\tw1 = src1[ srcOffset1 + 3 ];\n\n\t\tif ( t === 0 ) {\n\n\t\t\tdst[ dstOffset + 0 ] = x0;\n\t\t\tdst[ dstOffset + 1 ] = y0;\n\t\t\tdst[ dstOffset + 2 ] = z0;\n\t\t\tdst[ dstOffset + 3 ] = w0;\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( t === 1 ) {\n\n\t\t\tdst[ dstOffset + 0 ] = x1;\n\t\t\tdst[ dstOffset + 1 ] = y1;\n\t\t\tdst[ dstOffset + 2 ] = z1;\n\t\t\tdst[ dstOffset + 3 ] = w1;\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1 ) {\n\n\t\t\tlet s = 1 - t;\n\t\t\tconst cos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1,\n\t\t\t\tdir = ( cos >= 0 ? 1 : - 1 ),\n\t\t\t\tsqrSin = 1 - cos * cos;\n\n\t\t\t// Skip the Slerp for tiny steps to avoid numeric problems:\n\t\t\tif ( sqrSin > Number.EPSILON ) {\n\n\t\t\t\tconst sin = Math.sqrt( sqrSin ),\n\t\t\t\t\tlen = Math.atan2( sin, cos * dir );\n\n\t\t\t\ts = Math.sin( s * len ) / sin;\n\t\t\t\tt = Math.sin( t * len ) / sin;\n\n\t\t\t}\n\n\t\t\tconst tDir = t * dir;\n\n\t\t\tx0 = x0 * s + x1 * tDir;\n\t\t\ty0 = y0 * s + y1 * tDir;\n\t\t\tz0 = z0 * s + z1 * tDir;\n\t\t\tw0 = w0 * s + w1 * tDir;\n\n\t\t\t// Normalize in case we just did a lerp:\n\t\t\tif ( s === 1 - t ) {\n\n\t\t\t\tconst f = 1 / Math.sqrt( x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0 );\n\n\t\t\t\tx0 *= f;\n\t\t\t\ty0 *= f;\n\t\t\t\tz0 *= f;\n\t\t\t\tw0 *= f;\n\n\t\t\t}\n\n\t\t}\n\n\t\tdst[ dstOffset ] = x0;\n\t\tdst[ dstOffset + 1 ] = y0;\n\t\tdst[ dstOffset + 2 ] = z0;\n\t\tdst[ dstOffset + 3 ] = w0;\n\n\t}\n\n\t/**\n\t * Multiplies two quaternions. This implementation assumes the quaternion data are managed\n\t * in flat arrays.\n\t *\n\t * @param {Array<number>} dst - The destination array.\n\t * @param {number} dstOffset - An offset into the destination array.\n\t * @param {Array<number>} src0 - The source array of the first quaternion.\n\t * @param {number} srcOffset0 - An offset into the first source array.\n\t * @param {Array<number>} src1 - The source array of the second quaternion.\n\t * @param {number} srcOffset1 - An offset into the second source array.\n\t * @return {Array<number>} The destination array.\n\t * @see {@link Quaternion#multiplyQuaternions}.\n\t */\n\tstatic multiplyQuaternionsFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1 ) {\n\n\t\tconst x0 = src0[ srcOffset0 ];\n\t\tconst y0 = src0[ srcOffset0 + 1 ];\n\t\tconst z0 = src0[ srcOffset0 + 2 ];\n\t\tconst w0 = src0[ srcOffset0 + 3 ];\n\n\t\tconst x1 = src1[ srcOffset1 ];\n\t\tconst y1 = src1[ srcOffset1 + 1 ];\n\t\tconst z1 = src1[ srcOffset1 + 2 ];\n\t\tconst w1 = src1[ srcOffset1 + 3 ];\n\n\t\tdst[ dstOffset ] = x0 * w1 + w0 * x1 + y0 * z1 - z0 * y1;\n\t\tdst[ dstOffset + 1 ] = y0 * w1 + w0 * y1 + z0 * x1 - x0 * z1;\n\t\tdst[ dstOffset + 2 ] = z0 * w1 + w0 * z1 + x0 * y1 - y0 * x1;\n\t\tdst[ dstOffset + 3 ] = w0 * w1 - x0 * x1 - y0 * y1 - z0 * z1;\n\n\t\treturn dst;\n\n\t}\n\n\t/**\n\t * The x value of this quaternion.\n\t *\n\t * @type {number}\n\t * @default 0\n\t */\n\tget x() {\n\n\t\treturn this._x;\n\n\t}\n\n\tset x( value ) {\n\n\t\tthis._x = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\t/**\n\t * The y value of this quaternion.\n\t *\n\t * @type {number}\n\t * @default 0\n\t */\n\tget y() {\n\n\t\treturn this._y;\n\n\t}\n\n\tset y( value ) {\n\n\t\tthis._y = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\t/**\n\t * The z value of this quaternion.\n\t *\n\t * @type {number}\n\t * @default 0\n\t */\n\tget z() {\n\n\t\treturn this._z;\n\n\t}\n\n\tset z( value ) {\n\n\t\tthis._z = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\t/**\n\t * The w value of this quaternion.\n\t *\n\t * @type {number}\n\t * @default 1\n\t */\n\tget w() {\n\n\t\treturn this._w;\n\n\t}\n\n\tset w( value ) {\n\n\t\tthis._w = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\t/**\n\t * Sets the quaternion components.\n\t *\n\t * @param {number} x - The x value of this quaternion.\n\t * @param {number} y - The y value of this quaternion.\n\t * @param {number} z - The z value of this quaternion.\n\t * @param {number} w - The w value of this quaternion.\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\tset( x, y, z, w ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._w = w;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns a new quaternion with copied values from this instance.\n\t *\n\t * @return {Quaternion} A clone of this instance.\n\t */\n\tclone() {\n\n\t\treturn new this.constructor( this._x, this._y, this._z, this._w );\n\n\t}\n\n\t/**\n\t * Copies the values of the given quaternion to this instance.\n\t *\n\t * @param {Quaternion} quaternion - The quaternion to copy.\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\tcopy( quaternion ) {\n\n\t\tthis._x = quaternion.x;\n\t\tthis._y = quaternion.y;\n\t\tthis._z = quaternion.z;\n\t\tthis._w = quaternion.w;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets this quaternion from the rotation specified by the given\n\t * Euler angles.\n\t *\n\t * @param {Euler} euler - The Euler angles.\n\t * @param {boolean} [update=true] - Whether the internal `onChange` callback should be executed or not.\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\tsetFromEuler( euler, update = true ) {\n\n\t\tconst x = euler._x, y = euler._y, z = euler._z, order = euler._order;\n\n\t\t// http://www.mathworks.com/matlabcentral/fileexchange/\n\t\t// \t20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/\n\t\t//\tcontent/SpinCalc.m\n\n\t\tconst cos = Math.cos;\n\t\tconst sin = Math.sin;\n\n\t\tconst c1 = cos( x / 2 );\n\t\tconst c2 = cos( y / 2 );\n\t\tconst c3 = cos( z / 2 );\n\n\t\tconst s1 = sin( x / 2 );\n\t\tconst s2 = sin( y / 2 );\n\t\tconst s3 = sin( z / 2 );\n\n\t\tswitch ( order ) {\n\n\t\t\tcase 'XYZ':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'YXZ':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZXY':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZYX':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'YZX':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'XZY':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.warn( 'THREE.Quaternion: .setFromEuler() encountered an unknown order: ' + order );\n\n\t\t}\n\n\t\tif ( update === true ) this._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets this quaternion from the given axis and angle.\n\t *\n\t * @param {Vector3} axis - The normalized axis.\n\t * @param {number} angle - The angle in radians.\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\tsetFromAxisAngle( axis, angle ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm\n\n\t\tconst halfAngle = angle / 2, s = Math.sin( halfAngle );\n\n\t\tthis._x = axis.x * s;\n\t\tthis._y = axis.y * s;\n\t\tthis._z = axis.z * s;\n\t\tthis._w = Math.cos( halfAngle );\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets this quaternion from the given rotation matrix.\n\t *\n\t * @param {Matrix4} m - A 4x4 matrix of which the upper 3x3 of matrix is a pure rotation matrix (i.e. unscaled).\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\tsetFromRotationMatrix( m ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tconst te = m.elements,\n\n\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\n\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\n\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ],\n\n\t\t\ttrace = m11 + m22 + m33;\n\n\t\tif ( trace > 0 ) {\n\n\t\t\tconst s = 0.5 / Math.sqrt( trace + 1.0 );\n\n\t\t\tthis._w = 0.25 / s;\n\t\t\tthis._x = ( m32 - m23 ) * s;\n\t\t\tthis._y = ( m13 - m31 ) * s;\n\t\t\tthis._z = ( m21 - m12 ) * s;\n\n\t\t} else if ( m11 > m22 && m11 > m33 ) {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m11 - m22 - m33 );\n\n\t\t\tthis._w = ( m32 - m23 ) / s;\n\t\t\tthis._x = 0.25 * s;\n\t\t\tthis._y = ( m12 + m21 ) / s;\n\t\t\tthis._z = ( m13 + m31 ) / s;\n\n\t\t} else if ( m22 > m33 ) {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m22 - m11 - m33 );\n\n\t\t\tthis._w = ( m13 - m31 ) / s;\n\t\t\tthis._x = ( m12 + m21 ) / s;\n\t\t\tthis._y = 0.25 * s;\n\t\t\tthis._z = ( m23 + m32 ) / s;\n\n\t\t} else {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m33 - m11 - m22 );\n\n\t\t\tthis._w = ( m21 - m12 ) / s;\n\t\t\tthis._x = ( m13 + m31 ) / s;\n\t\t\tthis._y = ( m23 + m32 ) / s;\n\t\t\tthis._z = 0.25 * s;\n\n\t\t}\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets this quaternion to the rotation required to rotate the direction vector\n\t * `vFrom` to the direction vector `vTo`.\n\t *\n\t * @param {Vector3} vFrom - The first (normalized) direction vector.\n\t * @param {Vector3} vTo - The second (normalized) direction vector.\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\tsetFromUnitVectors( vFrom, vTo ) {\n\n\t\t// assumes direction vectors vFrom and vTo are normalized\n\n\t\tlet r = vFrom.dot( vTo ) + 1;\n\n\t\tif ( r < Number.EPSILON ) {\n\n\t\t\t// vFrom and vTo point in opposite directions\n\n\t\t\tr = 0;\n\n\t\t\tif ( Math.abs( vFrom.x ) > Math.abs( vFrom.z ) ) {\n\n\t\t\t\tthis._x = - vFrom.y;\n\t\t\t\tthis._y = vFrom.x;\n\t\t\t\tthis._z = 0;\n\t\t\t\tthis._w = r;\n\n\t\t\t} else {\n\n\t\t\t\tthis._x = 0;\n\t\t\t\tthis._y = - vFrom.z;\n\t\t\t\tthis._z = vFrom.y;\n\t\t\t\tthis._w = r;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// crossVectors( vFrom, vTo ); // inlined to avoid cyclic dependency on Vector3\n\n\t\t\tthis._x = vFrom.y * vTo.z - vFrom.z * vTo.y;\n\t\t\tthis._y = vFrom.z * vTo.x - vFrom.x * vTo.z;\n\t\t\tthis._z = vFrom.x * vTo.y - vFrom.y * vTo.x;\n\t\t\tthis._w = r;\n\n\t\t}\n\n\t\treturn this.normalize();\n\n\t}\n\n\t/**\n\t * Returns the angle between this quaternion and the given one in radians.\n\t *\n\t * @param {Quaternion} q - The quaternion to compute the angle with.\n\t * @return {number} The angle in radians.\n\t */\n\tangleTo( q ) {\n\n\t\treturn 2 * Math.acos( Math.abs( clamp( this.dot( q ), - 1, 1 ) ) );\n\n\t}\n\n\t/**\n\t * Rotates this quaternion by a given angular step to the given quaternion.\n\t * The method ensures that the final quaternion will not overshoot `q`.\n\t *\n\t * @param {Quaternion} q - The target quaternion.\n\t * @param {number} step - The angular step in radians.\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\trotateTowards( q, step ) {\n\n\t\tconst angle = this.angleTo( q );\n\n\t\tif ( angle === 0 ) return this;\n\n\t\tconst t = Math.min( 1, step / angle );\n\n\t\tthis.slerp( q, t );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets this quaternion to the identity quaternion; that is, to the\n\t * quaternion that represents \"no rotation\".\n\t *\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\tidentity() {\n\n\t\treturn this.set( 0, 0, 0, 1 );\n\n\t}\n\n\t/**\n\t * Inverts this quaternion via {@link Quaternion#conjugate}. The\n\t * quaternion is assumed to have unit length.\n\t *\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\tinvert() {\n\n\t\treturn this.conjugate();\n\n\t}\n\n\t/**\n\t * Returns the rotational conjugate of this quaternion. The conjugate of a\n\t * quaternion represents the same rotation in the opposite direction about\n\t * the rotational axis.\n\t *\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\tconjugate() {\n\n\t\tthis._x *= - 1;\n\t\tthis._y *= - 1;\n\t\tthis._z *= - 1;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Calculates the dot product of this quaternion and the given one.\n\t *\n\t * @param {Quaternion} v - The quaternion to compute the dot product with.\n\t * @return {number} The result of the dot product.\n\t */\n\tdot( v ) {\n\n\t\treturn this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w;\n\n\t}\n\n\t/**\n\t * Computes the squared Euclidean length (straight-line length) of this quaternion,\n\t * considered as a 4 dimensional vector. This can be useful if you are comparing the\n\t * lengths of two quaternions, as this is a slightly more efficient calculation than\n\t * {@link Quaternion#length}.\n\t *\n\t * @return {number} The squared Euclidean length.\n\t */\n\tlengthSq() {\n\n\t\treturn this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w;\n\n\t}\n\n\t/**\n\t * Computes the Euclidean length (straight-line length) of this quaternion,\n\t * considered as a 4 dimensional vector.\n\t *\n\t * @return {number} The Euclidean length.\n\t */\n\tlength() {\n\n\t\treturn Math.sqrt( this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w );\n\n\t}\n\n\t/**\n\t * Normalizes this quaternion - that is, calculated the quaternion that performs\n\t * the same rotation as this one, but has a length equal to `1`.\n\t *\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\tnormalize() {\n\n\t\tlet l = this.length();\n\n\t\tif ( l === 0 ) {\n\n\t\t\tthis._x = 0;\n\t\t\tthis._y = 0;\n\t\t\tthis._z = 0;\n\t\t\tthis._w = 1;\n\n\t\t} else {\n\n\t\t\tl = 1 / l;\n\n\t\t\tthis._x = this._x * l;\n\t\t\tthis._y = this._y * l;\n\t\t\tthis._z = this._z * l;\n\t\t\tthis._w = this._w * l;\n\n\t\t}\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Multiplies this quaternion by the given one.\n\t *\n\t * @param {Quaternion} q - The quaternion.\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\tmultiply( q ) {\n\n\t\treturn this.multiplyQuaternions( this, q );\n\n\t}\n\n\t/**\n\t * Pre-multiplies this quaternion by the given one.\n\t *\n\t * @param {Quaternion} q - The quaternion.\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\tpremultiply( q ) {\n\n\t\treturn this.multiplyQuaternions( q, this );\n\n\t}\n\n\t/**\n\t * Multiplies the given quaternions and stores the result in this instance.\n\t *\n\t * @param {Quaternion} a - The first quaternion.\n\t * @param {Quaternion} b - The second quaternion.\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\tmultiplyQuaternions( a, b ) {\n\n\t\t// from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm\n\n\t\tconst qax = a._x, qay = a._y, qaz = a._z, qaw = a._w;\n\t\tconst qbx = b._x, qby = b._y, qbz = b._z, qbw = b._w;\n\n\t\tthis._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby;\n\t\tthis._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz;\n\t\tthis._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx;\n\t\tthis._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Performs a spherical linear interpolation between quaternions.\n\t *\n\t * @param {Quaternion} qb - The target quaternion.\n\t * @param {number} t - The interpolation factor in the closed interval `[0, 1]`.\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\tslerp( qb, t ) {\n\n\t\tif ( t === 0 ) return this;\n\t\tif ( t === 1 ) return this.copy( qb );\n\n\t\tconst x = this._x, y = this._y, z = this._z, w = this._w;\n\n\t\t// http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/\n\n\t\tlet cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z;\n\n\t\tif ( cosHalfTheta < 0 ) {\n\n\t\t\tthis._w = - qb._w;\n\t\t\tthis._x = - qb._x;\n\t\t\tthis._y = - qb._y;\n\t\t\tthis._z = - qb._z;\n\n\t\t\tcosHalfTheta = - cosHalfTheta;\n\n\t\t} else {\n\n\t\t\tthis.copy( qb );\n\n\t\t}\n\n\t\tif ( cosHalfTheta >= 1.0 ) {\n\n\t\t\tthis._w = w;\n\t\t\tthis._x = x;\n\t\t\tthis._y = y;\n\t\t\tthis._z = z;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst sqrSinHalfTheta = 1.0 - cosHalfTheta * cosHalfTheta;\n\n\t\tif ( sqrSinHalfTheta <= Number.EPSILON ) {\n\n\t\t\tconst s = 1 - t;\n\t\t\tthis._w = s * w + t * this._w;\n\t\t\tthis._x = s * x + t * this._x;\n\t\t\tthis._y = s * y + t * this._y;\n\t\t\tthis._z = s * z + t * this._z;\n\n\t\t\tthis.normalize(); // normalize calls _onChangeCallback()\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst sinHalfTheta = Math.sqrt( sqrSinHalfTheta );\n\t\tconst halfTheta = Math.atan2( sinHalfTheta, cosHalfTheta );\n\t\tconst ratioA = Math.sin( ( 1 - t ) * halfTheta ) / sinHalfTheta,\n\t\t\tratioB = Math.sin( t * halfTheta ) / sinHalfTheta;\n\n\t\tthis._w = ( w * ratioA + this._w * ratioB );\n\t\tthis._x = ( x * ratioA + this._x * ratioB );\n\t\tthis._y = ( y * ratioA + this._y * ratioB );\n\t\tthis._z = ( z * ratioA + this._z * ratioB );\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Performs a spherical linear interpolation between the given quaternions\n\t * and stores the result in this quaternion.\n\t *\n\t * @param {Quaternion} qa - The source quaternion.\n\t * @param {Quaternion} qb - The target quaternion.\n\t * @param {number} t - The interpolation factor in the closed interval `[0, 1]`.\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\tslerpQuaternions( qa, qb, t ) {\n\n\t\treturn this.copy( qa ).slerp( qb, t );\n\n\t}\n\n\t/**\n\t * Sets this quaternion to a uniformly random, normalized quaternion.\n\t *\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\trandom() {\n\n\t\t// Ken Shoemake\n\t\t// Uniform random rotations\n\t\t// D. Kirk, editor, Graphics Gems III, pages 124-132. Academic Press, New York, 1992.\n\n\t\tconst theta1 = 2 * Math.PI * Math.random();\n\t\tconst theta2 = 2 * Math.PI * Math.random();\n\n\t\tconst x0 = Math.random();\n\t\tconst r1 = Math.sqrt( 1 - x0 );\n\t\tconst r2 = Math.sqrt( x0 );\n\n\t\treturn this.set(\n\t\t\tr1 * Math.sin( theta1 ),\n\t\t\tr1 * Math.cos( theta1 ),\n\t\t\tr2 * Math.sin( theta2 ),\n\t\t\tr2 * Math.cos( theta2 ),\n\t\t);\n\n\t}\n\n\t/**\n\t * Returns `true` if this quaternion is equal with the given one.\n\t *\n\t * @param {Quaternion} quaternion - The quaternion to test for equality.\n\t * @return {boolean} Whether this quaternion is equal with the given one.\n\t */\n\tequals( quaternion ) {\n\n\t\treturn ( quaternion._x === this._x ) && ( quaternion._y === this._y ) && ( quaternion._z === this._z ) && ( quaternion._w === this._w );\n\n\t}\n\n\t/**\n\t * Sets this quaternion's components from the given array.\n\t *\n\t * @param {Array<number>} array - An array holding the quaternion component values.\n\t * @param {number} [offset=0] - The offset into the array.\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis._x = array[ offset ];\n\t\tthis._y = array[ offset + 1 ];\n\t\tthis._z = array[ offset + 2 ];\n\t\tthis._w = array[ offset + 3 ];\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Writes the components of this quaternion to the given array. If no array is provided,\n\t * the method returns a new instance.\n\t *\n\t * @param {Array<number>} [array=[]] - The target array holding the quaternion components.\n\t * @param {number} [offset=0] - Index of the first element in the array.\n\t * @return {Array<number>} The quaternion components.\n\t */\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this._x;\n\t\tarray[ offset + 1 ] = this._y;\n\t\tarray[ offset + 2 ] = this._z;\n\t\tarray[ offset + 3 ] = this._w;\n\n\t\treturn array;\n\n\t}\n\n\t/**\n\t * Sets the components of this quaternion from the given buffer attribute.\n\t *\n\t * @param {BufferAttribute} attribute - The buffer attribute holding quaternion data.\n\t * @param {number} index - The index into the attribute.\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis._x = attribute.getX( index );\n\t\tthis._y = attribute.getY( index );\n\t\tthis._z = attribute.getZ( index );\n\t\tthis._w = attribute.getW( index );\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * This methods defines the serialization result of this class. Returns the\n\t * numerical elements of this quaternion in an array of format `[x, y, z, w]`.\n\t *\n\t * @return {Array<number>} The serialized quaternion.\n\t */\n\ttoJSON() {\n\n\t\treturn this.toArray();\n\n\t}\n\n\t_onChange( callback ) {\n\n\t\tthis._onChangeCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\t_onChangeCallback() {}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this._x;\n\t\tyield this._y;\n\t\tyield this._z;\n\t\tyield this._w;\n\n\t}\n\n}\n\nexport { Quaternion };\n","import { clamp } from './MathUtils.js';\nimport { Quaternion } from './Quaternion.js';\n\n/**\n * Class representing a 3D vector. A 3D vector is an ordered triplet of numbers\n * (labeled x, y and z), which can be used to represent a number of things, such as:\n *\n * - A point in 3D space.\n * - A direction and length in 3D space. In three.js the length will\n * always be the Euclidean distance(straight-line distance) from `(0, 0, 0)` to `(x, y, z)`\n * and the direction is also measured from `(0, 0, 0)` towards `(x, y, z)`.\n * - Any arbitrary ordered triplet of numbers.\n *\n * There are other things a 3D vector can be used to represent, such as\n * momentum vectors and so on, however these are the most\n * common uses in three.js.\n *\n * Iterating through a vector instance will yield its components `(x, y, z)` in\n * the corresponding order.\n * ```js\n * const a = new THREE.Vector3( 0, 1, 0 );\n *\n * //no arguments; will be initialised to (0, 0, 0)\n * const b = new THREE.Vector3( );\n *\n * const d = a.distanceTo( b );\n * ```\n */\nclass Vector3 {\n\n\t/**\n\t * Constructs a new 3D vector.\n\t *\n\t * @param {number} [x=0] - The x value of this vector.\n\t * @param {number} [y=0] - The y value of this vector.\n\t * @param {number} [z=0] - The z value of this vector.\n\t */\n\tconstructor( x = 0, y = 0, z = 0 ) {\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tVector3.prototype.isVector3 = true;\n\n\t\t/**\n\t\t * The x value of this vector.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.x = x;\n\n\t\t/**\n\t\t * The y value of this vector.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.y = y;\n\n\t\t/**\n\t\t * The z value of this vector.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.z = z;\n\n\t}\n\n\t/**\n\t * Sets the vector components.\n\t *\n\t * @param {number} x - The value of the x component.\n\t * @param {number} y - The value of the y component.\n\t * @param {number} z - The value of the z component.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tset( x, y, z ) {\n\n\t\tif ( z === undefined ) z = this.z; // sprite.scale.set(x,y)\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the vector components to the same value.\n\t *\n\t * @param {number} scalar - The value to set for all vector components.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsetScalar( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\t\tthis.z = scalar;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the vector's x component to the given value\n\t *\n\t * @param {number} x - The value to set.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsetX( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the vector's y component to the given value\n\t *\n\t * @param {number} y - The value to set.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the vector's z component to the given value\n\t *\n\t * @param {number} z - The value to set.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsetZ( z ) {\n\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Allows to set a vector component with an index.\n\t *\n\t * @param {number} index - The component index. `0` equals to x, `1` equals to y, `2` equals to z.\n\t * @param {number} value - The value to set.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsetComponent( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tcase 2: this.z = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns the value of the vector component which matches the given index.\n\t *\n\t * @param {number} index - The component index. `0` equals to x, `1` equals to y, `2` equals to z.\n\t * @return {number} A vector component value.\n\t */\n\tgetComponent( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tcase 2: return this.z;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Returns a new vector with copied values from this instance.\n\t *\n\t * @return {Vector3} A clone of this instance.\n\t */\n\tclone() {\n\n\t\treturn new this.constructor( this.x, this.y, this.z );\n\n\t}\n\n\t/**\n\t * Copies the values of the given vector to this instance.\n\t *\n\t * @param {Vector3} v - The vector to copy.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tcopy( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\t\tthis.z = v.z;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Adds the given vector to this instance.\n\t *\n\t * @param {Vector3} v - The vector to add.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tadd( v ) {\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\t\tthis.z += v.z;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Adds the given scalar value to all components of this instance.\n\t *\n\t * @param {number} s - The scalar to add.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\taddScalar( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\t\tthis.z += s;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Adds the given vectors and stores the result in this instance.\n\t *\n\t * @param {Vector3} a - The first vector.\n\t * @param {Vector3} b - The second vector.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\taddVectors( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\t\tthis.z = a.z + b.z;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Adds the given vector scaled by the given factor to this instance.\n\t *\n\t * @param {Vector3|Vector4} v - The vector.\n\t * @param {number} s - The factor that scales `v`.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\taddScaledVector( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\t\tthis.z += v.z * s;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Subtracts the given vector from this instance.\n\t *\n\t * @param {Vector3} v - The vector to subtract.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsub( v ) {\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\t\tthis.z -= v.z;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Subtracts the given scalar value from all components of this instance.\n\t *\n\t * @param {number} s - The scalar to subtract.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsubScalar( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\t\tthis.z -= s;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Subtracts the given vectors and stores the result in this instance.\n\t *\n\t * @param {Vector3} a - The first vector.\n\t * @param {Vector3} b - The second vector.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsubVectors( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\t\tthis.z = a.z - b.z;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Multiplies the given vector with this instance.\n\t *\n\t * @param {Vector3} v - The vector to multiply.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tmultiply( v ) {\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\t\tthis.z *= v.z;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Multiplies the given scalar value with all components of this instance.\n\t *\n\t * @param {number} scalar - The scalar to multiply.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tmultiplyScalar( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\t\tthis.z *= scalar;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Multiplies the given vectors and stores the result in this instance.\n\t *\n\t * @param {Vector3} a - The first vector.\n\t * @param {Vector3} b - The second vector.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tmultiplyVectors( a, b ) {\n\n\t\tthis.x = a.x * b.x;\n\t\tthis.y = a.y * b.y;\n\t\tthis.z = a.z * b.z;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Applies the given Euler rotation to this vector.\n\t *\n\t * @param {Euler} euler - The Euler angles.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tapplyEuler( euler ) {\n\n\t\treturn this.applyQuaternion( _quaternion.setFromEuler( euler ) );\n\n\t}\n\n\t/**\n\t * Applies a rotation specified by an axis and an angle to this vector.\n\t *\n\t * @param {Vector3} axis - A normalized vector representing the rotation axis.\n\t * @param {number} angle - The angle in radians.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tapplyAxisAngle( axis, angle ) {\n\n\t\treturn this.applyQuaternion( _quaternion.setFromAxisAngle( axis, angle ) );\n\n\t}\n\n\t/**\n\t * Multiplies this vector with the given 3x3 matrix.\n\t *\n\t * @param {Matrix3} m - The 3x3 matrix.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tapplyMatrix3( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ] * z;\n\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ] * z;\n\t\tthis.z = e[ 2 ] * x + e[ 5 ] * y + e[ 8 ] * z;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Multiplies this vector by the given normal matrix and normalizes\n\t * the result.\n\t *\n\t * @param {Matrix3} m - The normal matrix.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tapplyNormalMatrix( m ) {\n\n\t\treturn this.applyMatrix3( m ).normalize();\n\n\t}\n\n\t/**\n\t * Multiplies this vector (with an implicit 1 in the 4th dimension) by m, and\n\t * divides by perspective.\n\t *\n\t * @param {Matrix4} m - The matrix to apply.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tapplyMatrix4( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tconst w = 1 / ( e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] );\n\n\t\tthis.x = ( e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] ) * w;\n\t\tthis.y = ( e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] ) * w;\n\t\tthis.z = ( e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] ) * w;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Applies the given Quaternion to this vector.\n\t *\n\t * @param {Quaternion} q - The Quaternion.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tapplyQuaternion( q ) {\n\n\t\t// quaternion q is assumed to have unit length\n\n\t\tconst vx = this.x, vy = this.y, vz = this.z;\n\t\tconst qx = q.x, qy = q.y, qz = q.z, qw = q.w;\n\n\t\t// t = 2 * cross( q.xyz, v );\n\t\tconst tx = 2 * ( qy * vz - qz * vy );\n\t\tconst ty = 2 * ( qz * vx - qx * vz );\n\t\tconst tz = 2 * ( qx * vy - qy * vx );\n\n\t\t// v + q.w * t + cross( q.xyz, t );\n\t\tthis.x = vx + qw * tx + qy * tz - qz * ty;\n\t\tthis.y = vy + qw * ty + qz * tx - qx * tz;\n\t\tthis.z = vz + qw * tz + qx * ty - qy * tx;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Projects this vector from world space into the camera's normalized\n\t * device coordinate (NDC) space.\n\t *\n\t * @param {Camera} camera - The camera.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tproject( camera ) {\n\n\t\treturn this.applyMatrix4( camera.matrixWorldInverse ).applyMatrix4( camera.projectionMatrix );\n\n\t}\n\n\t/**\n\t * Unprojects this vector from the camera's normalized device coordinate (NDC)\n\t * space into world space.\n\t *\n\t * @param {Camera} camera - The camera.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tunproject( camera ) {\n\n\t\treturn this.applyMatrix4( camera.projectionMatrixInverse ).applyMatrix4( camera.matrixWorld );\n\n\t}\n\n\t/**\n\t * Transforms the direction of this vector by a matrix (the upper left 3 x 3\n\t * subset of the given 4x4 matrix and then normalizes the result.\n\t *\n\t * @param {Matrix4} m - The matrix.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\ttransformDirection( m ) {\n\n\t\t// input: THREE.Matrix4 affine matrix\n\t\t// vector interpreted as a direction\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z;\n\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z;\n\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z;\n\n\t\treturn this.normalize();\n\n\t}\n\n\t/**\n\t * Divides this instance by the given vector.\n\t *\n\t * @param {Vector3} v - The vector to divide.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tdivide( v ) {\n\n\t\tthis.x /= v.x;\n\t\tthis.y /= v.y;\n\t\tthis.z /= v.z;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Divides this vector by the given scalar.\n\t *\n\t * @param {number} scalar - The scalar to divide.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tdivideScalar( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\t/**\n\t * If this vector's x, y or z value is greater than the given vector's x, y or z\n\t * value, replace that value with the corresponding min value.\n\t *\n\t * @param {Vector3} v - The vector.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tmin( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\t\tthis.z = Math.min( this.z, v.z );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * If this vector's x, y or z value is less than the given vector's x, y or z\n\t * value, replace that value with the corresponding max value.\n\t *\n\t * @param {Vector3} v - The vector.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tmax( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\t\tthis.z = Math.max( this.z, v.z );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * If this vector's x, y or z value is greater than the max vector's x, y or z\n\t * value, it is replaced by the corresponding value.\n\t * If this vector's x, y or z value is less than the min vector's x, y or z value,\n\t * it is replaced by the corresponding value.\n\t *\n\t * @param {Vector3} min - The minimum x, y and z values.\n\t * @param {Vector3} max - The maximum x, y and z values in the desired range.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tclamp( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = clamp( this.x, min.x, max.x );\n\t\tthis.y = clamp( this.y, min.y, max.y );\n\t\tthis.z = clamp( this.z, min.z, max.z );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * If this vector's x, y or z values are greater than the max value, they are\n\t * replaced by the max value.\n\t * If this vector's x, y or z values are less than the min value, they are\n\t * replaced by the min value.\n\t *\n\t * @param {number} minVal - The minimum value the components will be clamped to.\n\t * @param {number} maxVal - The maximum value the components will be clamped to.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tclampScalar( minVal, maxVal ) {\n\n\t\tthis.x = clamp( this.x, minVal, maxVal );\n\t\tthis.y = clamp( this.y, minVal, maxVal );\n\t\tthis.z = clamp( this.z, minVal, maxVal );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * If this vector's length is greater than the max value, it is replaced by\n\t * the max value.\n\t * If this vector's length is less than the min value, it is replaced by the\n\t * min value.\n\t *\n\t * @param {number} min - The minimum value the vector length will be clamped to.\n\t * @param {number} max - The maximum value the vector length will be clamped to.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tclampLength( min, max ) {\n\n\t\tconst length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( clamp( length, min, max ) );\n\n\t}\n\n\t/**\n\t * The components of this vector are rounded down to the nearest integer value.\n\t *\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tfloor() {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\t\tthis.z = Math.floor( this.z );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * The components of this vector are rounded up to the nearest integer value.\n\t *\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tceil() {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\t\tthis.z = Math.ceil( this.z );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * The components of this vector are rounded to the nearest integer value\n\t *\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tround() {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\t\tthis.z = Math.round( this.z );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * The components of this vector are rounded towards zero (up if negative,\n\t * down if positive) to an integer value.\n\t *\n\t * @return {Vector3} A reference to this vector.\n\t */\n\troundToZero() {\n\n\t\tthis.x = Math.trunc( this.x );\n\t\tthis.y = Math.trunc( this.y );\n\t\tthis.z = Math.trunc( this.z );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Inverts this vector - i.e. sets x = -x, y = -y and z = -z.\n\t *\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tnegate() {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\t\tthis.z = - this.z;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Calculates the dot product of the given vector with this instance.\n\t *\n\t * @param {Vector3} v - The vector to compute the dot product with.\n\t * @return {number} The result of the dot product.\n\t */\n\tdot( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y + this.z * v.z;\n\n\t}\n\n\t// TODO lengthSquared?\n\n\t/**\n\t * Computes the square of the Euclidean length (straight-line length) from\n\t * (0, 0, 0) to (x, y, z). If you are comparing the lengths of vectors, you should\n\t * compare the length squared instead as it is slightly more efficient to calculate.\n\t *\n\t * @return {number} The square length of this vector.\n\t */\n\tlengthSq() {\n\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z;\n\n\t}\n\n\t/**\n\t * Computes the Euclidean length (straight-line length) from (0, 0, 0) to (x, y, z).\n\t *\n\t * @return {number} The length of this vector.\n\t */\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z );\n\n\t}\n\n\t/**\n\t * Computes the Manhattan length of this vector.\n\t *\n\t * @return {number} The length of this vector.\n\t */\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z );\n\n\t}\n\n\t/**\n\t * Converts this vector to a unit vector - that is, sets it equal to a vector\n\t * with the same direction as this one, but with a vector length of `1`.\n\t *\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\t/**\n\t * Sets this vector to a vector with the same direction as this one, but\n\t * with the specified length.\n\t *\n\t * @param {number} length - The new length of this vector.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\t/**\n\t * Linearly interpolates between the given vector and this instance, where\n\t * alpha is the percent distance along the line - alpha = 0 will be this\n\t * vector, and alpha = 1 will be the given one.\n\t *\n\t * @param {Vector3} v - The vector to interpolate towards.\n\t * @param {number} alpha - The interpolation factor, typically in the closed interval `[0, 1]`.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tlerp( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\t\tthis.z += ( v.z - this.z ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Linearly interpolates between the given vectors, where alpha is the percent\n\t * distance along the line - alpha = 0 will be first vector, and alpha = 1 will\n\t * be the second one. The result is stored in this instance.\n\t *\n\t * @param {Vector3} v1 - The first vector.\n\t * @param {Vector3} v2 - The second vector.\n\t * @param {number} alpha - The interpolation factor, typically in the closed interval `[0, 1]`.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tlerpVectors( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\t\tthis.z = v1.z + ( v2.z - v1.z ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Calculates the cross product of the given vector with this instance.\n\t *\n\t * @param {Vector3} v - The vector to compute the cross product with.\n\t * @return {Vector3} The result of the cross product.\n\t */\n\tcross( v ) {\n\n\t\treturn this.crossVectors( this, v );\n\n\t}\n\n\t/**\n\t * Calculates the cross product of the given vectors and stores the result\n\t * in this instance.\n\t *\n\t * @param {Vector3} a - The first vector.\n\t * @param {Vector3} b - The second vector.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tcrossVectors( a, b ) {\n\n\t\tconst ax = a.x, ay = a.y, az = a.z;\n\t\tconst bx = b.x, by = b.y, bz = b.z;\n\n\t\tthis.x = ay * bz - az * by;\n\t\tthis.y = az * bx - ax * bz;\n\t\tthis.z = ax * by - ay * bx;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Projects this vector onto the given one.\n\t *\n\t * @param {Vector3} v - The vector to project to.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tprojectOnVector( v ) {\n\n\t\tconst denominator = v.lengthSq();\n\n\t\tif ( denominator === 0 ) return this.set( 0, 0, 0 );\n\n\t\tconst scalar = v.dot( this ) / denominator;\n\n\t\treturn this.copy( v ).multiplyScalar( scalar );\n\n\t}\n\n\t/**\n\t * Projects this vector onto a plane by subtracting this\n\t * vector projected onto the plane's normal from this vector.\n\t *\n\t * @param {Vector3} planeNormal - The plane normal.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tprojectOnPlane( planeNormal ) {\n\n\t\t_vector.copy( this ).projectOnVector( planeNormal );\n\n\t\treturn this.sub( _vector );\n\n\t}\n\n\t/**\n\t * Reflects this vector off a plane orthogonal to the given normal vector.\n\t *\n\t * @param {Vector3} normal - The (normalized) normal vector.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\treflect( normal ) {\n\n\t\treturn this.sub( _vector.copy( normal ).multiplyScalar( 2 * this.dot( normal ) ) );\n\n\t}\n\t/**\n\t * Returns the angle between the given vector and this instance in radians.\n\t *\n\t * @param {Vector3} v - The vector to compute the angle with.\n\t * @return {number} The angle in radians.\n\t */\n\tangleTo( v ) {\n\n\t\tconst denominator = Math.sqrt( this.lengthSq() * v.lengthSq() );\n\n\t\tif ( denominator === 0 ) return Math.PI / 2;\n\n\t\tconst theta = this.dot( v ) / denominator;\n\n\t\t// clamp, to handle numerical problems\n\n\t\treturn Math.acos( clamp( theta, - 1, 1 ) );\n\n\t}\n\n\t/**\n\t * Computes the distance from the given vector to this instance.\n\t *\n\t * @param {Vector3} v - The vector to compute the distance to.\n\t * @return {number} The distance.\n\t */\n\tdistanceTo( v ) {\n\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t}\n\n\t/**\n\t * Computes the squared distance from the given vector to this instance.\n\t * If you are just comparing the distance with another distance, you should compare\n\t * the distance squared instead as it is slightly more efficient to calculate.\n\t *\n\t * @param {Vector3} v - The vector to compute the squared distance to.\n\t * @return {number} The squared distance.\n\t */\n\tdistanceToSquared( v ) {\n\n\t\tconst dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z;\n\n\t\treturn dx * dx + dy * dy + dz * dz;\n\n\t}\n\n\t/**\n\t * Computes the Manhattan distance from the given vector to this instance.\n\t *\n\t * @param {Vector3} v - The vector to compute the Manhattan distance to.\n\t * @return {number} The Manhattan distance.\n\t */\n\tmanhattanDistanceTo( v ) {\n\n\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y ) + Math.abs( this.z - v.z );\n\n\t}\n\n\t/**\n\t * Sets the vector components from the given spherical coordinates.\n\t *\n\t * @param {Spherical} s - The spherical coordinates.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsetFromSpherical( s ) {\n\n\t\treturn this.setFromSphericalCoords( s.radius, s.phi, s.theta );\n\n\t}\n\n\t/**\n\t * Sets the vector components from the given spherical coordinates.\n\t *\n\t * @param {number} radius - The radius.\n\t * @param {number} phi - The phi angle in radians.\n\t * @param {number} theta - The theta angle in radians.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsetFromSphericalCoords( radius, phi, theta ) {\n\n\t\tconst sinPhiRadius = Math.sin( phi ) * radius;\n\n\t\tthis.x = sinPhiRadius * Math.sin( theta );\n\t\tthis.y = Math.cos( phi ) * radius;\n\t\tthis.z = sinPhiRadius * Math.cos( theta );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the vector components from the given cylindrical coordinates.\n\t *\n\t * @param {Cylindrical} c - The cylindrical coordinates.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsetFromCylindrical( c ) {\n\n\t\treturn this.setFromCylindricalCoords( c.radius, c.theta, c.y );\n\n\t}\n\n\t/**\n\t * Sets the vector components from the given cylindrical coordinates.\n\t *\n\t * @param {number} radius - The radius.\n\t * @param {number} theta - The theta angle in radians.\n\t * @param {number} y - The y value.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsetFromCylindricalCoords( radius, theta, y ) {\n\n\t\tthis.x = radius * Math.sin( theta );\n\t\tthis.y = y;\n\t\tthis.z = radius * Math.cos( theta );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the vector components to the position elements of the\n\t * given transformation matrix.\n\t *\n\t * @param {Matrix4} m - The 4x4 matrix.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsetFromMatrixPosition( m ) {\n\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 12 ];\n\t\tthis.y = e[ 13 ];\n\t\tthis.z = e[ 14 ];\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the vector components to the scale elements of the\n\t * given transformation matrix.\n\t *\n\t * @param {Matrix4} m - The 4x4 matrix.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsetFromMatrixScale( m ) {\n\n\t\tconst sx = this.setFromMatrixColumn( m, 0 ).length();\n\t\tconst sy = this.setFromMatrixColumn( m, 1 ).length();\n\t\tconst sz = this.setFromMatrixColumn( m, 2 ).length();\n\n\t\tthis.x = sx;\n\t\tthis.y = sy;\n\t\tthis.z = sz;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the vector components from the specified matrix column.\n\t *\n\t * @param {Matrix4} m - The 4x4 matrix.\n\t * @param {number} index - The column index.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsetFromMatrixColumn( m, index ) {\n\n\t\treturn this.fromArray( m.elements, index * 4 );\n\n\t}\n\n\t/**\n\t * Sets the vector components from the specified matrix column.\n\t *\n\t * @param {Matrix3} m - The 3x3 matrix.\n\t * @param {number} index - The column index.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsetFromMatrix3Column( m, index ) {\n\n\t\treturn this.fromArray( m.elements, index * 3 );\n\n\t}\n\n\t/**\n\t * Sets the vector components from the given Euler angles.\n\t *\n\t * @param {Euler} e - The Euler angles to set.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsetFromEuler( e ) {\n\n\t\tthis.x = e._x;\n\t\tthis.y = e._y;\n\t\tthis.z = e._z;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the vector components from the RGB components of the\n\t * given color.\n\t *\n\t * @param {Color} c - The color to set.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsetFromColor( c ) {\n\n\t\tthis.x = c.r;\n\t\tthis.y = c.g;\n\t\tthis.z = c.b;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns `true` if this vector is equal with the given one.\n\t *\n\t * @param {Vector3} v - The vector to test for equality.\n\t * @return {boolean} Whether this vector is equal with the given one.\n\t */\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) );\n\n\t}\n\n\t/**\n\t * Sets this vector's x value to be `array[ offset ]`, y value to be `array[ offset + 1 ]`\n\t * and z value to be `array[ offset + 2 ]`.\n\t *\n\t * @param {Array<number>} array - An array holding the vector component values.\n\t * @param {number} [offset=0] - The offset into the array.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\t\tthis.z = array[ offset + 2 ];\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Writes the components of this vector to the given array. If no array is provided,\n\t * the method returns a new instance.\n\t *\n\t * @param {Array<number>} [array=[]] - The target array holding the vector components.\n\t * @param {number} [offset=0] - Index of the first element in the array.\n\t * @return {Array<number>} The vector components.\n\t */\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\t\tarray[ offset + 2 ] = this.z;\n\n\t\treturn array;\n\n\t}\n\n\t/**\n\t * Sets the components of this vector from the given buffer attribute.\n\t *\n\t * @param {BufferAttribute} attribute - The buffer attribute holding vector data.\n\t * @param {number} index - The index into the attribute.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\t\tthis.z = attribute.getZ( index );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets each component of this vector to a pseudo-random value between `0` and\n\t * `1`, excluding `1`.\n\t *\n\t * @return {Vector3} A reference to this vector.\n\t */\n\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\t\tthis.z = Math.random();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets this vector to a uniformly random point on a unit sphere.\n\t *\n\t * @return {Vector3} A reference to this vector.\n\t */\n\trandomDirection() {\n\n\t\t// https://mathworld.wolfram.com/SpherePointPicking.html\n\n\t\tconst theta = Math.random() * Math.PI * 2;\n\t\tconst u = Math.random() * 2 - 1;\n\t\tconst c = Math.sqrt( 1 - u * u );\n\n\t\tthis.x = c * Math.cos( theta );\n\t\tthis.y = u;\n\t\tthis.z = c * Math.sin( theta );\n\n\t\treturn this;\n\n\t}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this.x;\n\t\tyield this.y;\n\t\tyield this.z;\n\n\t}\n\n}\n\nconst _vector = /*@__PURE__*/ new Vector3();\nconst _quaternion = /*@__PURE__*/ new Quaternion();\n\nexport { Vector3 };\n","import type { MotionGroupState, Pose } from \"@wandelbots/nova-js/v2\"\nimport type { Vector3Simple } from \"./JoggerConnection\"\nimport { Vector3 } from \"three\"\n\nexport function jointValuesEqual(\n oldJointValues: number[],\n newJointValues: number[],\n changeDeltaThreshold: number,\n): boolean {\n if (newJointValues.length !== oldJointValues.length) {\n return true\n }\n\n for (let jointIndex = 0; jointIndex < newJointValues.length; jointIndex++) {\n if (\n // biome-ignore lint/style/noNonNullAssertion: legacy code\n Math.abs(newJointValues[jointIndex]! - oldJointValues[jointIndex]!) >\n changeDeltaThreshold\n ) {\n return false\n }\n }\n\n return true\n}\n\nexport function poseEqual(\n oldTcp: Pose | undefined,\n newTcp: Pose | undefined,\n changeDeltaThreshold: number,\n): boolean {\n // undefined -> defined (+reverse) transition\n if ((oldTcp === undefined && newTcp) || (oldTcp && newTcp === undefined)) {\n return false\n }\n\n // Poses might be incomplete (missing orientation or position)\n if (\n oldTcp?.orientation === undefined ||\n newTcp?.orientation === undefined ||\n oldTcp?.position === undefined ||\n newTcp?.position === undefined\n ) {\n return false\n }\n\n // the typechecker cannot resolve states to \"!= undefined\" if \"&&\" is used\n if (oldTcp === undefined || newTcp === undefined) {\n return true\n }\n\n let changedDelta = 0\n changedDelta += Math.abs(oldTcp.orientation[0] - newTcp.orientation[0])\n changedDelta += Math.abs(oldTcp.orientation[1] - newTcp.orientation[1])\n changedDelta += Math.abs(oldTcp.orientation[2] - newTcp.orientation[2])\n changedDelta += Math.abs(oldTcp.position[0] - newTcp.position[0])\n changedDelta += Math.abs(oldTcp.position[1] - newTcp.position[1])\n changedDelta += Math.abs(oldTcp.position[2] - newTcp.position[2])\n\n return changedDelta <= changeDeltaThreshold\n}\n\n// Runs poseEqual check + coordinate system/tcp name equality\nexport function tcpMotionEqual(\n oldMotionState: MotionGroupState,\n newMotionState: MotionGroupState,\n changeDeltaThreshold: number,\n): boolean {\n return (\n oldMotionState.coordinate_system === newMotionState.coordinate_system &&\n oldMotionState.tcp === newMotionState.tcp &&\n poseEqual(\n oldMotionState.tcp_pose,\n newMotionState.tcp_pose,\n changeDeltaThreshold,\n )\n )\n}\n\nexport function unwrapRotationVector(\n newRotationVectorApi: Vector3Simple,\n currentRotationVectorApi: Vector3Simple,\n): Vector3Simple {\n const currentRotationVector = new Vector3(\n currentRotationVectorApi[0],\n currentRotationVectorApi[1],\n currentRotationVectorApi[2],\n )\n\n const newRotationVector = new Vector3(\n newRotationVectorApi[0],\n newRotationVectorApi[1],\n newRotationVectorApi[2],\n )\n\n const currentAngle = currentRotationVector.length()\n const currentAxis = currentRotationVector.normalize()\n\n let newAngle = newRotationVector.length()\n let newAxis = newRotationVector.normalize()\n\n // Align rotation axes\n if (newAxis.dot(currentAxis) < 0) {\n newAngle = -newAngle\n newAxis = newAxis.multiplyScalar(-1.0)\n }\n\n // Shift rotation angle close to previous one to extend domain of rotation angles beyond [0, pi]\n // - this simplifies interpolation and prevents abruptly changing signs of the rotation angles\n let angleDifference = newAngle - currentAngle\n angleDifference -=\n 2.0 * Math.PI * Math.floor((angleDifference + Math.PI) / (2.0 * Math.PI))\n\n newAngle = currentAngle + angleDifference\n\n return [...newAxis.multiplyScalar(newAngle)] as Vector3Simple\n}\n","import {\n type AutoReconnectingWebsocket,\n tryParseJson,\n} from \"@wandelbots/nova-js\"\nimport type {\n MotionGroupDescription,\n MotionGroupState,\n NovaClient,\n RobotControllerState,\n} from \"@wandelbots/nova-js/v2\"\nimport { makeAutoObservable, runInAction } from \"mobx\"\nimport type { Vector3Simple } from \"./JoggerConnection\"\nimport {\n jointValuesEqual,\n tcpMotionEqual,\n unwrapRotationVector,\n} from \"./motionStateUpdate\"\n\nconst MOTION_DELTA_THRESHOLD = 0.0001\n\n/**\n * Store representing the current state of a connected motion group.\n */\nexport class MotionStreamConnection {\n static async open(nova: NovaClient, motionGroupId: string) {\n const [_motionGroupIndex, controllerId] = motionGroupId.split(\"@\") as [\n string,\n string,\n ]\n\n const controller =\n await nova.api.controller.getCurrentRobotControllerState(controllerId)\n const motionGroup = controller?.motion_groups.find(\n (mg) => mg.motion_group === motionGroupId,\n )\n if (!controller || !motionGroup) {\n throw new Error(\n `Controller ${controllerId} or motion group ${motionGroupId} not found`,\n )\n }\n\n const motionStateSocket = nova.openReconnectingWebsocket(\n `/controllers/${controllerId}/motion-groups/${motionGroupId}/state-stream`,\n )\n\n // Wait for the first message to get the initial state\n const firstMessage = await motionStateSocket.firstMessage()\n const initialMotionState = tryParseJson(firstMessage.data)\n ?.result as MotionGroupState\n\n if (!initialMotionState) {\n throw new Error(\n `Unable to parse initial motion state message ${firstMessage.data}`,\n )\n }\n\n console.log(\n `Connected motion state websocket to motion group ${motionGroup.motion_group}. Initial state:\\n `,\n initialMotionState,\n )\n\n // Get the motion group description for later usage in jogging\n const description = await nova.api.motionGroup.getMotionGroupDescription(\n controllerId,\n motionGroup.motion_group,\n )\n\n return new MotionStreamConnection(\n nova,\n controller,\n motionGroup,\n description,\n initialMotionState,\n motionStateSocket,\n )\n }\n\n // Not mobx-observable as this changes very fast; should be observed\n // using animation frames\n rapidlyChangingMotionState: MotionGroupState\n\n constructor(\n readonly nova: NovaClient,\n readonly controller: RobotControllerState,\n readonly motionGroup: MotionGroupState,\n readonly description: MotionGroupDescription,\n readonly initialMotionState: MotionGroupState,\n readonly motionStateSocket: AutoReconnectingWebsocket,\n ) {\n this.rapidlyChangingMotionState = initialMotionState\n\n motionStateSocket.addEventListener(\"message\", (event) => {\n const latestMotionState = tryParseJson(event.data)?.result as\n | MotionGroupState\n | undefined\n\n if (!latestMotionState) {\n throw new Error(\n `Failed to get motion state for ${this.motionGroupId}: ${event.data}`,\n )\n }\n\n // handle joint position changes\n if (\n !jointValuesEqual(\n this.rapidlyChangingMotionState.joint_position,\n latestMotionState.joint_position,\n MOTION_DELTA_THRESHOLD,\n )\n ) {\n runInAction(() => {\n this.rapidlyChangingMotionState.joint_position =\n latestMotionState.joint_position\n })\n }\n\n // handle tcp pose changes\n if (\n !tcpMotionEqual(\n this.rapidlyChangingMotionState,\n latestMotionState,\n MOTION_DELTA_THRESHOLD,\n )\n ) {\n runInAction(() => {\n if (this.rapidlyChangingMotionState.tcp_pose == null) {\n this.rapidlyChangingMotionState.tcp_pose =\n latestMotionState.tcp_pose\n } else if (\n latestMotionState.tcp_pose?.orientation &&\n latestMotionState.tcp_pose?.position &&\n this.rapidlyChangingMotionState.tcp_pose?.orientation\n ) {\n this.rapidlyChangingMotionState.tcp_pose = {\n position: latestMotionState.tcp_pose.position,\n orientation: unwrapRotationVector(\n latestMotionState.tcp_pose.orientation as Vector3Simple,\n this.rapidlyChangingMotionState.tcp_pose\n .orientation as Vector3Simple,\n ),\n }\n } else {\n console.warn(\n \"Received incomplete tcp_pose, ignoring\",\n latestMotionState.tcp_pose,\n )\n }\n })\n }\n\n // handle standstill changes\n if (\n this.rapidlyChangingMotionState.standstill !==\n latestMotionState.standstill\n ) {\n runInAction(() => {\n this.rapidlyChangingMotionState.standstill =\n latestMotionState.standstill\n })\n }\n })\n makeAutoObservable(this)\n }\n\n get motionGroupId() {\n return this.motionGroup.motion_group\n }\n\n get controllerId() {\n return this.controller.controller\n }\n\n get wandelscriptIdentifier() {\n const num = this.motionGroupId.split(\"@\")[0]\n return `${this.controllerId.replace(/-/g, \"_\")}_${num}`\n }\n\n get joints() {\n return this.initialMotionState.joint_position.map((_, i) => {\n return {\n index: i,\n }\n })\n }\n\n dispose() {\n this.motionStateSocket.close()\n }\n}\n","import {\n type AutoReconnectingWebsocket,\n tryParseJson,\n XYZ_TO_VECTOR,\n} from \"@wandelbots/nova-js\"\nimport type {\n InitializeMovementResponse,\n MotionCommand,\n NovaClient,\n Pose,\n StartMovementResponse,\n} from \"@wandelbots/nova-js/v2\"\nimport { when } from \"mobx\"\nimport { Vector3 } from \"three/src/math/Vector3.js\"\nimport { MotionStreamConnection } from \"./MotionStreamConnection\"\n\nexport type Vector3Simple = [number, number, number]\n\nconst API_ERROR_CONNECTION_BLOCKED = `Movement request rejected. Another client is currently executing a 'Jogging' motion!`\n\nexport type JoggerConnectionOptions = {\n // The mode of the jogger connection - see type description of JoggerMode for details\n mode?: JoggerMode\n\n // Connection timeout in milliseconds to wait for jogging initialization to complete\n timeout?: number\n\n /**\n * When an error message is received from the jogging websocket, it\n * will be passed here. If this handler is not provided, the error will\n * instead be thrown as an unhandled error.\n */\n onError?: (err: unknown) => void\n\n // The TCP to use for jogging motions.\n tcp?: string\n\n // The coordinate system in which jogging takes place in\n // coordinateSystem?: string,\n\n // If set to \"tool\", jogging TcpVelocityRequest will use `use_tool_coordinate_system` option\n orientation?: JoggerOrientation\n}\n\n// Three modes are supported:\n// - \"jogging\": Continuous jogging mode, where joint velocities or TCP velocities can be commanded. Opens a single websocket connection to jogging endpoint\n// - \"trajectory\": Incremental jogging mode, where fixed distance motions are planned and executed. Opens a short lived websocket for each motion.\n// - \"off\": No jogging, all websockets are closed.\nexport type JoggerMode = \"jogging\" | \"trajectory\" | \"off\"\n\n// If set to \"tool\", will use `use_tool_coordinate_system` option in movement requests\nexport type JoggerOrientation = \"coordsys\" | \"tool\"\n\nexport class JoggerConnection {\n ENDPOINT_JOGGING = \"/execution/jogging\"\n ENDPOINT_TRAJECTORY = \"/execution/trajectory\"\n DEFAULT_MODE = \"off\" as JoggerMode\n DEFAULT_TCP = \"Flange\"\n // DEFAULT_COORDINATE_SYSTEM = \"world\"\n DEFAULT_INIT_TIMEOUT = 5000\n DEFAULT_ORIENTATION = \"coordsys\" as JoggerOrientation\n\n mode: JoggerMode = \"off\"\n joggingSocket: AutoReconnectingWebsocket | null = null\n trajectorySocket: AutoReconnectingWebsocket | null = null\n timeout: number = this.DEFAULT_INIT_TIMEOUT\n tcp: string\n // coordinateSystem?: string\n orientation: JoggerOrientation\n onError?: (err: unknown) => void\n onBlocked?: () => void\n\n /**\n * Initialize the jogging connection using jogging endpoint or trajectory endpoint depending on the selected mode.\n *\n * @param nova - The Nova client instance\n * @param motionGroupId - The ID of the motion group to connect to\n * @param options - Configuration options for the jogger connection\n * @param options.mode - The jogging mode to initialize:\n * - \"jogging\": Continuous jogging mode with persistent websocket for real-time velocity commands\n * - \"trajectory\": Incremental jogging mode for fixed-distance motions via trajectory planning\n * - \"off\": No jogging enabled, all websockets closed (default)\n * @param options.timeout - Timeout in milliseconds for websocket initialization (default: 5000ms)\n * @param options.tcp - TCP frame to use for motions (default: from motion group)\n * //param options.coordinateSystem - Coordinate system for jogging commands (default: \"world\"). Please note: Currently not implemented\n * @param options.orientation - If set to \"tool\", jogging TcpVelocityRequest will use `use_tool_coordinate_system` option (default: \"coordsys\")\n * @param options.onError - Error handler for websocket errors\n * @returns Promise resolving to initialized JoggerConnection instance\n */\n static async open(\n nova: NovaClient,\n motionGroupId: string,\n options: JoggerConnectionOptions = {},\n ) {\n // Get matching motion stream\n const motionStream = await MotionStreamConnection.open(nova, motionGroupId)\n\n // Initialize jogger with options\n const jogger = new JoggerConnection(motionStream, options)\n\n // Initialize the jogging websocket, if necessary (mode is \"jogging\")\n await jogger.setJoggingMode(jogger.mode)\n\n // Return the initialized jogger\n return jogger\n }\n\n constructor(\n readonly motionStream: MotionStreamConnection,\n readonly options: JoggerConnectionOptions | undefined = {},\n ) {\n this.tcp = options?.tcp || motionStream.motionGroup.tcp || this.DEFAULT_TCP\n // this.coordinateSystem = options?.coordinateSystem || this.DEFAULT_COORDINATE_SYSTEM\n this.orientation = options?.orientation || this.DEFAULT_ORIENTATION\n this.timeout = options?.timeout || this.DEFAULT_INIT_TIMEOUT\n this.mode = options?.mode || this.DEFAULT_MODE\n this.onError = options?.onError\n }\n\n // Set a new tcp or other options. If current mode is jogging, will reinitialize the jogging websocket\n async setOptions(options: Partial<JoggerConnectionOptions>) {\n if (options.tcp) {\n this.tcp = options.tcp\n }\n\n if (options.orientation) {\n this.orientation = options.orientation\n }\n\n // if (options.coordinateSystem) {\n // this.coordinateSystem = options.coordinateSystem\n // }\n\n if (options.timeout) {\n this.timeout = options.timeout\n }\n\n if (options.mode) {\n this.mode = options.mode\n }\n\n if (options.onError) {\n this.onError = options.onError\n }\n\n this.setJoggingMode(this.mode, false)\n }\n\n get motionGroupId() {\n return this.motionStream.motionGroupId\n }\n\n get nova() {\n return this.motionStream.nova\n }\n\n get numJoints() {\n return this.motionStream.joints.length\n }\n\n // get activeJoggingMode() {\n // return this.mode\n // }\n\n // get activeWebsocket() {\n // return this.mode === \"jogging\" ? this.joggingSocket : this.trajectorySocket;\n // }\n\n // Sends stop movement command to robot\n async stop() {\n if (this.joggingSocket) {\n const velocity = new Array(this.numJoints).fill(0)\n this.joggingSocket.sendJson({\n message_type: \"JointVelocityRequest\",\n velocity,\n })\n }\n\n if (this.trajectorySocket) {\n this.trajectorySocket.sendJson({\n message_type: \"PauseMovementRequest\",\n })\n }\n }\n\n // Dispose the jogger, closing all open websockets\n async dispose() {\n // Collect all initialized sockets\n const sockets = [this.joggingSocket, this.trajectorySocket].filter(\n (s) => s !== null,\n ) as AutoReconnectingWebsocket[]\n\n // Call them to dispose\n sockets.forEach((s) => {\n s.dispose()\n })\n\n // Remove references\n this.joggingSocket = null\n this.trajectorySocket = null\n\n // Return promise that resolves when all sockets are closed\n return Promise.all(sockets.map((s) => s.closed()))\n }\n\n // Activate jogger in one of the supported modes\n // Will iniitialize or close websockets as necessary\n // If mode is unchanged, does nothing (unless skipReinitializeIfSameMode is false)\n async setJoggingMode(mode: JoggerMode, skipReinitializeIfSameMode = true) {\n // If not changing mode, do nothing\n if (this.mode === mode && skipReinitializeIfSameMode) {\n return\n }\n\n // Close any previous websocket connection\n this.dispose()\n\n // Set the new mode\n this.mode = mode\n\n // Mode is \"jogging\" - open jogging websocket\n if (this.mode === \"jogging\") {\n return this.initializeJoggingWebsocket()\n }\n\n // Mode is \"trajectory\" or \"off\" - nothing more to do\n return\n }\n\n // Initializes continuous jogging websocket, called by setJoggingMode(\"jogging\")\n async initializeJoggingWebsocket() {\n // Wait for initialization with timeout\n return new Promise<void>((resolve, reject) => {\n const connectionFailedTimeout = setTimeout(() => {\n reject(\n new Error(\n `Jogging initialization timeout after ${this.timeout} seconds`,\n ),\n )\n }, this.timeout)\n\n this.joggingSocket = this.nova.openReconnectingWebsocket(\n this.ENDPOINT_JOGGING,\n )\n this.joggingSocket.addEventListener(\"message\", (ev: MessageEvent) => {\n const data = tryParseJson(ev.data)\n\n if (data?.result?.kind === \"INITIALIZE_RECEIVED\") {\n clearTimeout(connectionFailedTimeout)\n resolve()\n return\n }\n\n if (data?.result?.kind === \"MOTION_ERROR\") {\n clearTimeout(connectionFailedTimeout)\n if (\n this.onBlocked &&\n data?.result?.message.includes(API_ERROR_CONNECTION_BLOCKED)\n ) {\n this.joggingSocket?.dispose()\n this.onBlocked()\n return\n } else if (this.onError) {\n this.onError(ev.data)\n } else {\n reject(new Error(ev.data))\n }\n }\n })\n\n this.joggingSocket.sendJson({\n message_type: \"InitializeJoggingRequest\",\n motion_group: this.motionGroupId,\n tcp: this.tcp,\n })\n })\n }\n\n /**\n * Jogging: Start rotation of a single robot joint at the specified velocity\n */\n async rotateJoints({\n joint,\n direction,\n velocityRadsPerSec,\n }: {\n /** Index of the joint to rotate */\n joint: number\n /** Direction of rotation (\"+\" or \"-\") */\n direction: \"+\" | \"-\"\n /** Speed of the rotation in radians per second */\n velocityRadsPerSec: number\n }) {\n if (!this.joggingSocket || this.mode !== \"jogging\") {\n throw new Error(\n \"Joint jogging websocket not connected; create one by setting jogging mode to 'jogging'\",\n )\n }\n\n const velocity = new Array(this.numJoints).fill(0)\n\n velocity[joint] =\n direction === \"-\" ? -velocityRadsPerSec : velocityRadsPerSec\n\n this.joggingSocket.sendJson({\n message_type: \"JointVelocityRequest\",\n velocity,\n })\n }\n\n /**\n * Jogging: Start the TCP moving along a specified axis at a given velocity\n */\n async translateTCP({\n axis,\n direction,\n velocityMmPerSec,\n }: {\n axis: \"x\" | \"y\" | \"z\"\n direction: \"-\" | \"+\"\n velocityMmPerSec: number\n }) {\n if (!this.joggingSocket || this.mode !== \"jogging\") {\n throw new Error(\n \"Continuous jogging websocket not connected; create one by setting jogging mode to 'jogging'\",\n )\n }\n const rotation = [0, 0, 0]\n const translation = [0, 0, 0]\n translation[XYZ_TO_VECTOR[axis]] =\n direction === \"-\" ? -velocityMmPerSec : velocityMmPerSec\n\n this.joggingSocket.sendJson({\n message_type: \"TcpVelocityRequest\",\n translation,\n rotation,\n use_tool_coordinate_system: this.orientation === \"tool\",\n })\n }\n\n /**\n * Jogging: Start the TCP rotating around a specified axis at a given velocity\n */\n async rotateTCP({\n axis,\n direction,\n velocityRadsPerSec,\n }: {\n axis: \"x\" | \"y\" | \"z\"\n direction: \"-\" | \"+\"\n velocityRadsPerSec: number\n }) {\n if (!this.joggingSocket || this.mode !== \"jogging\") {\n throw new Error(\n \"Continuous jogging websocket not connected; create one by setting jogging mode to 'jogging'\",\n )\n }\n const rotation = [0, 0, 0]\n const translation = [0, 0, 0]\n rotation[XYZ_TO_VECTOR[axis]] =\n direction === \"-\" ? -velocityRadsPerSec : velocityRadsPerSec\n\n this.joggingSocket.sendJson({\n message_type: \"TcpVelocityRequest\",\n translation,\n rotation,\n })\n }\n\n /**\n * Trajectory jogging:\n *\n * Move the robot by a fixed distance in a single cartesian\n * axis, either rotating or translating relative to the TCP.\n * Promise resolves only after the motion has completed.\n */\n async runIncrementalCartesianMotion({\n currentTcpPose,\n currentJoints,\n // coordSystemId,\n velocityInRelevantUnits,\n axis,\n direction,\n motion,\n }: {\n currentTcpPose: Pose\n currentJoints: Vector3Simple\n coordSystemId: string\n velocityInRelevantUnits: number\n axis: \"x\" | \"y\" | \"z\"\n direction: \"-\" | \"+\"\n motion:\n | {\n type: \"rotate\"\n distanceRads: number\n }\n | {\n type: \"translate\"\n distanceMm: number\n }\n }) {\n const commands: MotionCommand[] = []\n\n if (this.mode !== \"trajectory\") {\n throw new Error(\n \"Set jogging mode to 'trajectory' to run incremental cartesian motions\",\n )\n }\n\n if (motion.type === \"translate\") {\n if (!currentTcpPose.position) {\n throw new Error(\n \"Current pose has no position, cannot perform translation\",\n )\n }\n\n const targetTcpPosition = [...currentTcpPose.position]\n targetTcpPosition[XYZ_TO_VECTOR[axis]] +=\n motion.distanceMm * (direction === \"-\" ? -1 : 1)\n\n commands.push({\n limits_override: {\n tcp_velocity_limit: velocityInRelevantUnits,\n },\n path: {\n path_definition_name: \"PathLine\",\n target_pose: {\n position: targetTcpPosition,\n orientation: currentTcpPose.orientation,\n },\n },\n })\n } else if (motion.type === \"rotate\") {\n // Concatenate rotations expressed by rotation vectors\n // Equations taken from https://physics.stackexchange.com/a/287819\n\n if (!currentTcpPose.orientation) {\n throw new Error(\n \"Current pose has no orientation, cannot perform rotation\",\n )\n }\n\n // Compute axis and angle of current rotation vector\n const currentRotationVector = new Vector3(\n currentTcpPose.orientation[0],\n currentTcpPose.orientation[1],\n currentTcpPose.orientation[2],\n )\n\n const currentRotationRad = currentRotationVector.length()\n const currentRotationDirection = currentRotationVector.clone().normalize()\n\n // Compute axis and angle of difference rotation vector\n const differenceRotationRad =\n motion.distanceRads * (direction === \"-\" ? -1 : 1)\n\n const differenceRotationDirection = new Vector3(0.0, 0.0, 0.0)\n differenceRotationDirection[axis] = 1.0\n\n // Some abbreviations to make the following equations more readable\n const f1 =\n Math.cos(0.5 * differenceRotationRad) *\n Math.cos(0.5 * currentRotationRad)\n const f2 =\n Math.sin(0.5 * differenceRotationRad) *\n Math.sin(0.5 * currentRotationRad)\n const f3 =\n Math.sin(0.5 * differenceRotationRad) *\n Math.cos(0.5 * currentRotationRad)\n const f4 =\n Math.cos(0.5 * differenceRotationRad) *\n Math.sin(0.5 * currentRotationRad)\n\n const dotProduct = differenceRotationDirection.dot(\n currentRotationDirection,\n )\n\n const crossProduct = differenceRotationDirection\n .clone()\n .cross(currentRotationDirection)\n\n // Compute angle of concatenated rotation\n const newRotationRad = 2.0 * Math.acos(f1 - f2 * dotProduct)\n\n // Compute rotation vector of concatenated rotation\n const f5 = newRotationRad / Math.sin(0.5 * newRotationRad)\n\n const targetTcpOrientation = new Vector3()\n .addScaledVector(crossProduct, f2)\n .addScaledVector(differenceRotationDirection, f3)\n .addScaledVector(currentRotationDirection, f4)\n .multiplyScalar(f5)\n\n commands.push({\n limits_override: {\n tcp_orientation_velocity_limit: velocityInRelevantUnits,\n },\n path: {\n path_definition_name: \"PathLine\",\n target_pose: {\n position: currentTcpPose.position,\n orientation: [...targetTcpOrientation],\n },\n },\n })\n }\n\n // Plan the motion https://portal.wandelbots.io/docs/api/v2/ui/#/operations/planTrajectory\n const description = this.motionStream.description\n if (description.cycle_time === undefined) {\n console.warn(\n \"Current motion group has no cycle time, cannot plan jogging motion\",\n )\n return\n }\n\n const motion_group_setup = {\n motion_group_model: description.motion_group_model,\n cycle_time: description.cycle_time,\n mounting: description.mounting,\n\n // tcp_offset: description.tcp_offset, TODO: implement tcp_offset handling\n // FIXME use proper mode's limits if set\n global: description.operation_limits.auto_limits,\n }\n\n const motionPlanRes = await this.nova.api.trajectoryPlanning.planTrajectory(\n {\n motion_group_setup,\n start_joint_position: currentJoints,\n motion_commands: commands,\n },\n )\n\n const trajectoryData = motionPlanRes.response\n if (!trajectoryData) {\n throw new Error(\n `Failed to plan jogging increment motion ${JSON.stringify(motionPlanRes)}`,\n )\n }\n\n if (this.trajectorySocket) {\n console.warn(\"Trajectory jogging websocket already open; will close\")\n this.trajectorySocket.dispose()\n }\n\n // Execute the planned motion https://portal.wandelbots.io/docs/api/v2/ui/#/operations/executeTrajectory\n this.trajectorySocket = this.nova.openReconnectingWebsocket(\n this.ENDPOINT_TRAJECTORY,\n )\n\n const messageInitializeMovementResponse = (\n result: InitializeMovementResponse | undefined,\n ) => {\n // Handle errorous response\n if (!result || result.add_trajectory_error || result.message) {\n if (this.onError) {\n this.onError(result)\n } else {\n throw new Error(\n result?.add_trajectory_error?.message ||\n result?.message ||\n \"Failed to execute trajectory, unknown error\",\n )\n }\n }\n\n // Handle socket gone\n if (!this.trajectorySocket) {\n throw new Error(\n `Failed to execute trajectory, websocket not available anymore`,\n )\n }\n\n // Trajectory locked, now start movement\n this.trajectorySocket.sendJson({\n message_type: \"StartMovementRequest\",\n direction: \"DIRECTION_FORWARD\",\n })\n }\n\n const waitForMovementToStartAndFinish = async () => {\n // Wait for robot to start moving (standstill becomes false)\n await when(() => !this.motionStream.rapidlyChangingMotionState.standstill)\n\n // Then wait for robot to stop moving (standstill becomes true)\n await when(() => this.motionStream.rapidlyChangingMotionState.standstill)\n\n // Close connection and free robot\n this.trajectorySocket?.dispose()\n this.trajectorySocket = null\n }\n\n const waitForMovementToFinish = async () => {\n // Wait for robot to stop moving (standstill becomes true)\n await when(() => this.motionStream.rapidlyChangingMotionState.standstill)\n\n // Close connection and free robot\n this.trajectorySocket?.dispose()\n this.trajectorySocket = null\n }\n\n const messageStartMovementResponse = async (\n data: StartMovementResponse,\n ) => {\n if (data?.message) {\n if (this.onError) {\n this.onError(data)\n return\n } else {\n throw new Error(\n data.message || \"Failed to execute trajectory, unknown error\",\n )\n }\n }\n\n // Movement started we now wait to verify the robot is moving\n // by observing changes to motion state\n if (this.motionStream.rapidlyChangingMotionState.standstill) {\n await waitForMovementToStartAndFinish()\n } else {\n await waitForMovementToFinish()\n }\n }\n\n this.trajectorySocket.addEventListener(\"message\", (ev: MessageEvent) => {\n const data = tryParseJson(ev.data)\n\n if (!data?.result?.kind) {\n throw new Error(\n `Failed to execute trajectory: Received invalid message ${ev.data}`,\n )\n }\n\n if (\n this.onBlocked &&\n data.result.message?.includes(API_ERROR_CONNECTION_BLOCKED)\n ) {\n this.onBlocked()\n return\n }\n\n if (data.result.kind === \"INITIALIZE_RECEIVED\") {\n messageInitializeMovementResponse(data.result)\n } else if (data.result.kind === \"START_RECEIVED\") {\n messageStartMovementResponse(data)\n } else if (data.result.kind === \"PAUSE_RECEIVED\") {\n // do nothing\n } else if (data.result.kind === \"MOTION_ERROR\" && data.result.message) {\n if (this.onError) {\n this.onError(data)\n return\n } else {\n throw new Error(data.result.message)\n }\n } else {\n throw new Error(\n `Failed to execute trajectory, cannot handle message type \"${data.result.kind}\"`,\n )\n }\n })\n\n // Send initialization/movement request\n this.trajectorySocket.sendJson({\n message_type: \"InitializeMovementRequest\",\n trajectory: {\n message_type: \"TrajectoryData\",\n motion_group: this.motionGroupId,\n data: trajectoryData,\n tcp: this.tcp,\n },\n })\n }\n}\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n","import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n","import coreJsData from './_coreJsData.js';\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nexport default isMasked;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nexport default toSource;\n","import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nexport default baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nexport default getValue;\n","import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nexport default getNative;\n","import getNative from './_getNative.js';\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nexport default defineProperty;\n","import defineProperty from './_defineProperty.js';\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nexport default baseAssignValue;\n","/**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\nfunction arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n return accumulator;\n}\n\nexport default arrayAggregator;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nexport default createBaseFor;\n","import createBaseFor from './_createBaseFor.js';\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nexport default baseFor;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nexport default baseTimes;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n","import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nexport default stubFalse;\n","import root from './_root.js';\nimport stubFalse from './stubFalse.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nexport default isBuffer;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nexport default isIndex;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n","import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nexport default baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nexport default baseUnary;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nexport default nodeUtil;\n","import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nexport default isTypedArray;\n","import baseTimes from './_baseTimes.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isIndex from './_isIndex.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default arrayLikeKeys;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nexport default isPrototype;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nexport default overArg;\n","import overArg from './_overArg.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nexport default nativeKeys;\n","import isPrototype from './_isPrototype.js';\nimport nativeKeys from './_nativeKeys.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeys;\n","import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nexport default isArrayLike;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeys from './_baseKeys.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nexport default keys;\n","import baseFor from './_baseFor.js';\nimport keys from './keys.js';\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n}\n\nexport default baseForOwn;\n","import isArrayLike from './isArrayLike.js';\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n}\n\nexport default createBaseEach;\n","import baseForOwn from './_baseForOwn.js';\nimport createBaseEach from './_createBaseEach.js';\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nexport default baseEach;\n","import baseEach from './_baseEach.js';\n\n/**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\nfunction baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach(collection, function(value, key, collection) {\n setter(accumulator, value, iteratee(value), collection);\n });\n return accumulator;\n}\n\nexport default baseAggregator;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nexport default listCacheClear;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nexport default eq;\n","import eq from './eq.js';\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nexport default assocIndexOf;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nexport default listCacheDelete;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nexport default listCacheGet;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nexport default listCacheHas;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nexport default listCacheSet;\n","import listCacheClear from './_listCacheClear.js';\nimport listCacheDelete from './_listCacheDelete.js';\nimport listCacheGet from './_listCacheGet.js';\nimport listCacheHas from './_listCacheHas.js';\nimport listCacheSet from './_listCacheSet.js';\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nexport default ListCache;\n","import ListCache from './_ListCache.js';\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nexport default stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nexport default stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nexport default stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nexport default stackHas;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n","import getNative from './_getNative.js';\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nexport default nativeCreate;\n","import nativeCreate from './_nativeCreate.js';\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nexport default hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default hashDelete;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nexport default hashGet;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nexport default hashHas;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nexport default hashSet;\n","import hashClear from './_hashClear.js';\nimport hashDelete from './_hashDelete.js';\nimport hashGet from './_hashGet.js';\nimport hashHas from './_hashHas.js';\nimport hashSet from './_hashSet.js';\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nexport default Hash;\n","import Hash from './_Hash.js';\nimport ListCache from './_ListCache.js';\nimport Map from './_Map.js';\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nexport default mapCacheClear;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nexport default isKeyable;\n","import isKeyable from './_isKeyable.js';\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nexport default getMapData;\n","import getMapData from './_getMapData.js';\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default mapCacheDelete;\n","import getMapData from './_getMapData.js';\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nexport default mapCacheGet;\n","import getMapData from './_getMapData.js';\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nexport default mapCacheHas;\n","import getMapData from './_getMapData.js';\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nexport default mapCacheSet;\n","import mapCacheClear from './_mapCacheClear.js';\nimport mapCacheDelete from './_mapCacheDelete.js';\nimport mapCacheGet from './_mapCacheGet.js';\nimport mapCacheHas from './_mapCacheHas.js';\nimport mapCacheSet from './_mapCacheSet.js';\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nexport default MapCache;\n","import ListCache from './_ListCache.js';\nimport Map from './_Map.js';\nimport MapCache from './_MapCache.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nexport default stackSet;\n","import ListCache from './_ListCache.js';\nimport stackClear from './_stackClear.js';\nimport stackDelete from './_stackDelete.js';\nimport stackGet from './_stackGet.js';\nimport stackHas from './_stackHas.js';\nimport stackSet from './_stackSet.js';\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nexport default Stack;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nexport default setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nexport default setCacheHas;\n","import MapCache from './_MapCache.js';\nimport setCacheAdd from './_setCacheAdd.js';\nimport setCacheHas from './_setCacheHas.js';\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nexport default SetCache;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nexport default arraySome;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nexport default cacheHas;\n","import SetCache from './_SetCache.js';\nimport arraySome from './_arraySome.js';\nimport cacheHas from './_cacheHas.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nexport default equalArrays;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nexport default Uint8Array;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nexport default mapToArray;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nexport default setToArray;\n","import Symbol from './_Symbol.js';\nimport Uint8Array from './_Uint8Array.js';\nimport eq from './eq.js';\nimport equalArrays from './_equalArrays.js';\nimport mapToArray from './_mapToArray.js';\nimport setToArray from './_setToArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nexport default equalByTag;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nexport default arrayPush;\n","import arrayPush from './_arrayPush.js';\nimport isArray from './isArray.js';\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nexport default baseGetAllKeys;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nexport default arrayFilter;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nexport default stubArray;\n","import arrayFilter from './_arrayFilter.js';\nimport stubArray from './stubArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nexport default getSymbols;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbols from './_getSymbols.js';\nimport keys from './keys.js';\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nexport default getAllKeys;\n","import getAllKeys from './_getAllKeys.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nexport default equalObjects;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nexport default DataView;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nexport default Promise;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nexport default Set;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nexport default WeakMap;\n","import DataView from './_DataView.js';\nimport Map from './_Map.js';\nimport Promise from './_Promise.js';\nimport Set from './_Set.js';\nimport WeakMap from './_WeakMap.js';\nimport baseGetTag from './_baseGetTag.js';\nimport toSource from './_toSource.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nexport default getTag;\n","import Stack from './_Stack.js';\nimport equalArrays from './_equalArrays.js';\nimport equalByTag from './_equalByTag.js';\nimport equalObjects from './_equalObjects.js';\nimport getTag from './_getTag.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nexport default baseIsEqualDeep;\n","import baseIsEqualDeep from './_baseIsEqualDeep.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nexport default baseIsEqual;\n","import Stack from './_Stack.js';\nimport baseIsEqual from './_baseIsEqual.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n}\n\nexport default baseIsMatch;\n","import isObject from './isObject.js';\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n return value === value && !isObject(value);\n}\n\nexport default isStrictComparable;\n","import isStrictComparable from './_isStrictComparable.js';\nimport keys from './keys.js';\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n}\n\nexport default getMatchData;\n","/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n}\n\nexport default matchesStrictComparable;\n","import baseIsMatch from './_baseIsMatch.js';\nimport getMatchData from './_getMatchData.js';\nimport matchesStrictComparable from './_matchesStrictComparable.js';\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n}\n\nexport default baseMatches;\n","import isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nexport default isKey;\n","import MapCache from './_MapCache.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nexport default memoize;\n","import memoize from './memoize.js';\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nexport default memoizeCapped;\n","import memoizeCapped from './_memoizeCapped.js';\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nexport default stringToPath;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nexport default arrayMap;\n","import Symbol from './_Symbol.js';\nimport arrayMap from './_arrayMap.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default baseToString;\n","import baseToString from './_baseToString.js';\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nexport default toString;\n","import isArray from './isArray.js';\nimport isKey from './_isKey.js';\nimport stringToPath from './_stringToPath.js';\nimport toString from './toString.js';\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nexport default castPath;\n","import isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default toKey;\n","import castPath from './_castPath.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nexport default baseGet;\n","import baseGet from './_baseGet.js';\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nexport default get;\n","/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\nexport default baseHasIn;\n","import castPath from './_castPath.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isIndex from './_isIndex.js';\nimport isLength from './isLength.js';\nimport toKey from './_toKey.js';\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n}\n\nexport default hasPath;\n","import baseHasIn from './_baseHasIn.js';\nimport hasPath from './_hasPath.js';\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\nexport default hasIn;\n","import baseIsEqual from './_baseIsEqual.js';\nimport get from './get.js';\nimport hasIn from './hasIn.js';\nimport isKey from './_isKey.js';\nimport isStrictComparable from './_isStrictComparable.js';\nimport matchesStrictComparable from './_matchesStrictComparable.js';\nimport toKey from './_toKey.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n}\n\nexport default baseMatchesProperty;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nexport default identity;\n","/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\nexport default baseProperty;\n","import baseGet from './_baseGet.js';\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n}\n\nexport default basePropertyDeep;\n","import baseProperty from './_baseProperty.js';\nimport basePropertyDeep from './_basePropertyDeep.js';\nimport isKey from './_isKey.js';\nimport toKey from './_toKey.js';\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nexport default property;\n","import baseMatches from './_baseMatches.js';\nimport baseMatchesProperty from './_baseMatchesProperty.js';\nimport identity from './identity.js';\nimport isArray from './isArray.js';\nimport property from './property.js';\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n}\n\nexport default baseIteratee;\n","import arrayAggregator from './_arrayAggregator.js';\nimport baseAggregator from './_baseAggregator.js';\nimport baseIteratee from './_baseIteratee.js';\nimport isArray from './isArray.js';\n\n/**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\nfunction createAggregator(setter, initializer) {\n return function(collection, iteratee) {\n var func = isArray(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {};\n\n return func(collection, setter, baseIteratee(iteratee, 2), accumulator);\n };\n}\n\nexport default createAggregator;\n","import baseAssignValue from './_baseAssignValue.js';\nimport createAggregator from './_createAggregator.js';\n\n/**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the last element responsible for generating the key. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * var array = [\n * { 'dir': 'left', 'code': 97 },\n * { 'dir': 'right', 'code': 100 }\n * ];\n *\n * _.keyBy(array, function(o) {\n * return String.fromCharCode(o.code);\n * });\n * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n *\n * _.keyBy(array, 'dir');\n * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n */\nvar keyBy = createAggregator(function(result, value, key) {\n baseAssignValue(result, key, value);\n});\n\nexport default keyBy;\n","import toString from './toString.js';\n\n/** Used to generate unique IDs. */\nvar idCounter = 0;\n\n/**\n * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {string} [prefix=''] The value to prefix the ID with.\n * @returns {string} Returns the unique ID.\n * @example\n *\n * _.uniqueId('contact_');\n * // => 'contact_104'\n *\n * _.uniqueId();\n * // => '105'\n */\nfunction uniqueId(prefix) {\n var id = ++idCounter;\n return toString(prefix) + id;\n}\n\nexport default uniqueId;\n","import { tryParseJson } from \"@wandelbots/nova-js\"\nimport type {\n CoordinateSystem,\n MotionGroupDescription,\n RobotTcp,\n} from \"@wandelbots/nova-js/v2\"\nimport { countBy } from \"lodash-es\"\nimport keyBy from \"lodash-es/keyBy\"\nimport uniqueId from \"lodash-es/uniqueId\"\nimport { autorun, makeAutoObservable, type IReactionDisposer } from \"mobx\"\nimport type {\n JoggerConnection,\n JoggerOrientation,\n Vector3Simple,\n} from \"../../lib/JoggerConnection\"\n\nconst discreteIncrementOptions = [\n { id: \"0.1\", mm: 0.1, degrees: 0.05 },\n { id: \"1\", mm: 1, degrees: 0.5 },\n { id: \"5\", mm: 5, degrees: 2.5 },\n { id: \"10\", mm: 10, degrees: 5 },\n]\n\nconst incrementOptions = [\n { id: \"continuous\" },\n ...discreteIncrementOptions,\n] as const\n\nexport type JoggingAxis = \"x\" | \"y\" | \"z\"\nexport type JoggingDirection = \"+\" | \"-\"\nexport type DiscreteIncrementOption = (typeof discreteIncrementOptions)[number]\nexport type IncrementOption = (typeof incrementOptions)[number]\nexport type IncrementOptionId = IncrementOption[\"id\"]\n\nexport const ORIENTATION_IDS = [\"coordsys\", \"tool\"]\nexport type OrientationId = (typeof ORIENTATION_IDS)[number]\n\nexport type IncrementJogInProgress = {\n direction: JoggingDirection\n axis: JoggingAxis\n}\n\nexport class JoggingStore {\n selectedTabId: \"cartesian\" | \"joint\" | \"debug\" = \"cartesian\"\n\n /**\n * State of the jogging panel. Starts as \"inactive\"\n */\n activationState: \"inactive\" | \"loading\" | \"active\" = \"inactive\"\n\n /**\n * If an error occurred connecting to the jogging websocket\n */\n activationError: unknown | null = null\n\n /** To avoid activation race conditions */\n activationCounter: number = 0\n\n /** Locks to prevent UI interactions during certain operations */\n locks = new Set<string>()\n\n /** Block jogging UI interactions when connection is taken by another jogger */\n blocked: boolean = false\n\n /**\n * Id of selected coordinate system from among those defined on the API side\n */\n selectedCoordSystemId: string = \"world\"\n\n /** Id of selected tool center point from among the options available on the robot */\n selectedTcpId: string = \"\"\n\n /**\n * Whether the user is jogging in the coordinate system or tool orientation.\n * When in tool orientation, the robot moves in a direction relative to the\n * attached tool rotation.\n */\n selectedOrientation: OrientationId = \"coordsys\"\n\n /**\n * Id of selected increment amount for jogging. Options are defined by robot pad.\n * When non-continuous, jogging moves the robot by a fixed number of mm or degrees\n * each time the button is pressed, for extra precision\n */\n selectedIncrementId: IncrementOptionId = \"continuous\"\n\n /**\n * When on the cartesian tab, jogging can be either translating or rotating\n * around the TCP.\n */\n selectedCartesianMotionType: \"translate\" | \"rotate\" = \"translate\"\n\n /**\n * If the jogger is busy running an incremental jog, this will be set\n * with the information about the motion\n */\n incrementJogInProgress: IncrementJogInProgress | null = null\n\n /** How fast the robot goes when doing cartesian translate jogging in mm/s */\n translationVelocityMmPerSec: number = 10\n /** How fast the robot goes when doing cartesian or joint rotation jogging in °/s */\n rotationVelocityDegPerSec: number = 1\n\n /** Minimum translation velocity user can choose on the velocity slider in °/s */\n minTranslationVelocityMmPerSec: number = 5\n /** Maximum translation velocity user can choose on the velocity slider in °/s */\n maxTranslationVelocityMmPerSec: number = 250\n\n /** Minimum rotation velocity user can choose on the velocity slider in °/s */\n minRotationVelocityDegPerSec: number = 1\n /** Maximum rotation velocity user can choose on the velocity slider in °/s */\n maxRotationVelocityDegPerSec: number = 60\n\n /** Whether to show the coordinate system select dropdown in the UI */\n showCoordSystemSelect: boolean = false\n\n /** Whether to show the TCP select dropdown in the UI */\n showTcpSelect: boolean = true\n\n /** Whether to show the orientation select dropdown in the UI */\n showOrientationSelect: boolean = true\n\n /** Whether to show the increment select dropdown in the UI */\n showIncrementSelect: boolean = true\n\n /** Whether to show icons in the jogging tabs */\n showTabIcons: boolean = false\n\n /** Whether to show the label to the right of the velocity slider */\n showVelocitySliderLabel: boolean = true\n\n /** Whether to show the legend before the slider */\n showVelocityLegend: boolean = false\n\n /** Whether to show the legend before the joints */\n showJointsLegend: boolean = false\n\n disposers: IReactionDisposer[] = []\n\n /**\n * Load a jogging store with the relevant data it needs\n * from the backend\n */\n static async loadFor(jogger: JoggerConnection) {\n const { nova } = jogger\n\n // Find out what TCPs this motion group has (we need it for jogging)\n const [coordinatesystems, description] = await Promise.all([\n // Fetch coord systems so user can select between them\n nova.api.controller.listCoordinateSystems(\n jogger.motionStream.controllerId,\n \"ROTATION_VECTOR\",\n ),\n\n // Same for TCPs and other info from description\n nova.api.motionGroup.getMotionGroupDescription(\n jogger.motionStream.controllerId,\n jogger.motionGroupId,\n ),\n ])\n\n const tcps = Object.entries(description.tcps || {}).map(([id, tcp]) => ({\n id,\n readable_name: tcp.name,\n position: tcp.pose.position as Vector3Simple,\n orientation: tcp.pose.orientation as Vector3Simple,\n }))\n\n return new JoggingStore(jogger, coordinatesystems || [], description, tcps)\n }\n\n constructor(\n readonly jogger: JoggerConnection,\n readonly coordSystems: CoordinateSystem[],\n readonly motionGroupDescription: MotionGroupDescription,\n readonly tcps: RobotTcp[],\n ) {\n // TODO workaround for default coord system on backend having a canonical id\n // of empty string. Can remove when fixed on API side\n for (const cs of coordSystems) {\n if (cs.coordinate_system === \"\") {\n cs.coordinate_system = \"world\"\n break\n }\n }\n this.selectedCoordSystemId = coordSystems[0]?.coordinate_system || \"world\"\n this.selectedTcpId = tcps[0]?.id || \"\"\n\n // Make all properties observable and actions auto-bound\n makeAutoObservable(this, {}, { autoBind: true })\n\n // Register blocked watching\n this.jogger.onBlocked = () => {\n this.block()\n }\n\n // Load user settings from local storage if available\n this.loadFromLocalStorage()\n\n // Automatically save user settings to local storage when save changes\n this.disposers.push(autorun(() => this.saveToLocalStorage()))\n\n // Assign joggingStore to window\n ;(window as any).joggingStore = this\n }\n\n dispose() {\n for (const dispose of this.disposers) {\n dispose()\n }\n this.jogger.dispose()\n }\n\n get coordSystemCountByName() {\n return countBy(this.coordSystems, (cs) => cs.name)\n }\n\n async deactivate() {\n if (this.jogger.mode === \"jogging\") {\n return this.jogger.stop()\n }\n }\n\n /** Activate the jogger with current settings */\n async activate() {\n if (this.currentTab.id === \"cartesian\") {\n if (\n this.jogger.tcp !== this.selectedTcpId ||\n this.jogger.orientation !== this.selectedOrientation\n ) {\n this.jogger.setOptions({\n tcp: this.selectedTcpId,\n orientation: this.selectedOrientation as JoggerOrientation,\n })\n }\n\n if (this.activeDiscreteIncrement) {\n this.jogger.setJoggingMode(\"trajectory\")\n } else {\n this.jogger.setJoggingMode(\"jogging\")\n }\n } else {\n this.jogger.setJoggingMode(\"jogging\")\n }\n\n return this.jogger\n }\n\n loadFromLocalStorage() {\n const save = tryParseJson(localStorage.getItem(\"joggingToolStore\"))\n if (!save) return\n\n if (this.tabsById[save.selectedTabId]) {\n this.selectedTabId = save.selectedTabId\n }\n\n if (this.coordSystemsById[save.selectedCoordSystemId]) {\n this.selectedCoordSystemId = save.selectedCoordSystemId\n }\n\n if (this.tcpsById[save.selectedTcpId]) {\n this.selectedTcpId = save.selectedTcpId\n }\n\n if (this.incrementOptionsById[save.selectedIncrementId]) {\n this.selectedIncrementId = save.selectedIncrementId\n }\n\n if ([\"translate\", \"rotate\"].includes(save.selectedCartesianMotionType)) {\n this.selectedCartesianMotionType = save.selectedCartesianMotionType\n }\n\n if ([\"coordsys\", \"tool\"].includes(save.selectedOrientation)) {\n this.selectedOrientation = save.selectedOrientation\n }\n }\n\n saveToLocalStorage() {\n localStorage.setItem(\n \"joggingToolStore\",\n JSON.stringify(this.localStorageSave),\n )\n }\n\n get isLocked() {\n return this.locks.size > 0\n }\n\n get localStorageSave() {\n return {\n selectedTabId: this.selectedTabId,\n selectedCoordSystemId: this.selectedCoordSystemId,\n selectedTcpId: this.selectedTcpId,\n selectedOrientation: this.selectedOrientation,\n selectedIncrementId: this.selectedIncrementId,\n selectedCartesianMotionType: this.selectedCartesianMotionType,\n }\n }\n\n get tabs() {\n return [\n {\n id: \"cartesian\",\n label: \"cartesian\",\n },\n {\n id: \"joint\",\n label: \"joint\",\n },\n ] as const\n }\n\n get incrementOptions() {\n return incrementOptions\n }\n\n get discreteIncrementOptions() {\n return discreteIncrementOptions\n }\n\n get incrementOptionsById() {\n return keyBy(this.incrementOptions, (o) => o.id)\n }\n\n get tabsById() {\n return keyBy(this.tabs, (t) => t.id)\n }\n\n get currentTab() {\n return this.tabsById[this.selectedTabId] || this.tabs[0]!\n }\n\n get tabIndex() {\n return this.tabs.indexOf(this.currentTab)\n }\n\n get coordSystemsById() {\n return keyBy(this.coordSystems, (cs) => cs.coordinate_system)\n }\n\n get selectedCoordSystem() {\n return this.coordSystemsById[this.selectedCoordSystemId]\n }\n\n /**\n * The id of the coordinate system to use for jogging.\n * If in tool orientation, this is set to \"tool\", not the\n * selected coordinate system.\n */\n get activeCoordSystemId() {\n return this.selectedOrientation === \"tool\"\n ? \"tool\"\n : this.selectedCoordSystemId\n }\n\n get tcpsById() {\n return keyBy(this.tcps, (tcp) => tcp.id)\n }\n\n get activeDiscreteIncrement() {\n return this.selectedOrientation === \"tool\"\n ? undefined\n : discreteIncrementOptions.find((d) => d.id === this.selectedIncrementId)\n }\n\n /** The selected rotation velocity converted to radians per second */\n get rotationVelocityRadsPerSec() {\n return (this.rotationVelocityDegPerSec * Math.PI) / 180\n }\n\n /** Selected velocity in mm/sec or deg/sec */\n get velocityInDisplayUnits() {\n return this.currentMotionType === \"translate\"\n ? this.translationVelocityMmPerSec\n : this.rotationVelocityDegPerSec\n }\n\n /** Minimum selectable velocity in mm/sec or deg/sec */\n get minVelocityInDisplayUnits() {\n return this.currentMotionType === \"translate\"\n ? this.minTranslationVelocityMmPerSec\n : this.minRotationVelocityDegPerSec\n }\n\n /** Maximum selectable velocity in mm/sec or deg/sec */\n get maxVelocityInDisplayUnits() {\n return this.currentMotionType === \"translate\"\n ? this.maxTranslationVelocityMmPerSec\n : this.maxRotationVelocityDegPerSec\n }\n\n /**\n * For velocity unit purposes, joint and cartesian rotation\n * are treated as the same type of motion\n */\n get currentMotionType() {\n if (\n this.selectedTabId === \"cartesian\" &&\n this.selectedCartesianMotionType === \"translate\"\n ) {\n return \"translate\"\n } else {\n return \"rotate\"\n }\n }\n\n onTabChange(_event: React.SyntheticEvent, newValue: number) {\n const tab = this.tabs[newValue] || this.tabs[0]!\n this.selectedTabId = tab.id\n }\n\n setSelectedCoordSystemId(id: string) {\n this.selectedCoordSystemId = id\n }\n\n setSelectedTcpId(id: string) {\n this.selectedTcpId = id\n }\n\n setSelectedOrientation(orientation: OrientationId) {\n this.selectedOrientation = orientation\n }\n\n setSelectedIncrementId(id: IncrementOptionId) {\n this.selectedIncrementId = id\n }\n\n setCurrentIncrementJog(incrementJog: IncrementJogInProgress | null) {\n this.incrementJogInProgress = incrementJog\n }\n\n setVelocityFromSlider(velocity: number) {\n if (this.currentMotionType === \"translate\") {\n this.translationVelocityMmPerSec = velocity\n } else {\n this.rotationVelocityDegPerSec = velocity\n }\n }\n\n setSelectedCartesianMotionType(type: \"translate\" | \"rotate\") {\n this.selectedCartesianMotionType = type\n }\n\n lock(id: string) {\n this.locks.add(id)\n }\n\n unlock(id: string) {\n this.locks.delete(id)\n }\n\n block() {\n this.blocked = true\n }\n\n unblock() {\n this.blocked = false\n if (this.jogger.mode === \"jogging\") {\n this.jogger.initializeJoggingWebsocket()\n }\n }\n\n /** Lock the UI until the given async callback resolves */\n async withMotionLock(fn: () => Promise<void>) {\n const lockId = uniqueId()\n this.lock(lockId)\n\n try {\n return await fn()\n } finally {\n this.unlock(lockId)\n }\n }\n}\n","import { Alert, AlertTitle, Backdrop, Button, Stack } from \"@mui/material\"\nimport { observer } from \"mobx-react-lite\"\nimport { useTranslation } from \"react-i18next\"\nimport { type JoggingStore } from \"./JoggingStore\"\n\nexport const JoggingBlocked = observer(({ store }: { store: JoggingStore }) => {\n const { t } = useTranslation()\n\n return (\n <Backdrop\n open={true}\n sx={{\n position: \"absolute\",\n zIndex: (theme) => theme.zIndex.drawer + 1,\n color: \"#fff\",\n background: \"rgba(15, 15, 15, 0.88)\",\n justifyContent: \"flex-start\",\n alignItems: \"flex-start\",\n }}\n >\n <Stack sx={{ m: 2, width: \"100%\" }}>\n <Alert severity=\"error\" sx={{ mb: 2 }}>\n <AlertTitle>{t(\"Jogging.Blocked.ti\")}</AlertTitle>\n {t(\"Jogging.Blocked.lb\")}\n </Alert>\n\n <Button\n variant=\"contained\"\n color=\"secondary\"\n onClick={() => store.unblock()}\n >\n {t(\"Jogging.Blocked.Reenable.bt\")}\n </Button>\n </Stack>\n </Backdrop>\n )\n})\n","import * as React from \"react\";\nimport { forwardRef } from \"react\";\nconst SvgAxisX = ({\n title,\n titleId,\n ...props\n}, ref) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 19, height: 10, fill: \"none\", ref, \"aria-labelledby\": titleId, ...props }, title ? /* @__PURE__ */ React.createElement(\"title\", { id: titleId }, title) : null, /* @__PURE__ */ React.createElement(\"path\", { fill: \"#fff\", fillRule: \"evenodd\", d: \"M5.131.312a.9.9 0 0 1 0 1.272L3.07 3.645h12.44l-2.06-2.061A.9.9 0 0 1 14.72.313l3.596 3.596a.9.9 0 0 1 0 1.271l-3.596 3.597a.9.9 0 0 1-1.271-1.272l2.061-2.062H3.07L5.13 7.505A.9.9 0 0 1 3.86 8.777L.263 5.18a.9.9 0 0 1 0-1.271L3.86.312a.9.9 0 0 1 1.271 0\", clipRule: \"evenodd\" }));\nconst ForwardRef = forwardRef(SvgAxisX);\nexport default ForwardRef;\n","import * as React from \"react\";\nimport { forwardRef } from \"react\";\nconst SvgAxisY = ({\n title,\n titleId,\n ...props\n}, ref) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 19, height: 10, fill: \"none\", ref, \"aria-labelledby\": titleId, ...props }, title ? /* @__PURE__ */ React.createElement(\"title\", { id: titleId }, title) : null, /* @__PURE__ */ React.createElement(\"path\", { fill: \"#fff\", fillRule: \"evenodd\", d: \"M5.131.312a.9.9 0 0 1 0 1.272L3.07 3.645h12.44l-2.06-2.061A.9.9 0 0 1 14.72.313l3.596 3.596a.9.9 0 0 1 0 1.271l-3.596 3.597a.9.9 0 0 1-1.271-1.272l2.061-2.062H3.07L5.13 7.505A.9.9 0 0 1 3.86 8.777L.263 5.18a.9.9 0 0 1 0-1.271L3.86.312a.9.9 0 0 1 1.271 0\", clipRule: \"evenodd\" }));\nconst ForwardRef = forwardRef(SvgAxisY);\nexport default ForwardRef;\n","import * as React from \"react\";\nimport { forwardRef } from \"react\";\nconst SvgAxisZ = ({\n title,\n titleId,\n ...props\n}, ref) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 10, height: 19, fill: \"none\", ref, \"aria-labelledby\": titleId, ...props }, title ? /* @__PURE__ */ React.createElement(\"title\", { id: titleId }, title) : null, /* @__PURE__ */ React.createElement(\"path\", { fill: \"#fff\", fillRule: \"evenodd\", d: \"M9.522 14.811A.899.899 0 1 0 8.25 13.54L6.19 15.601V3.16L8.25 5.221A.9.9 0 0 0 9.522 3.95L5.926.354a.9.9 0 0 0-1.272 0L1.058 3.95a.9.9 0 1 0 1.271 1.271L4.391 3.16v12.442L2.329 13.54a.899.899 0 1 0-1.271 1.271l3.596 3.597a.9.9 0 0 0 1.272 0z\", clipRule: \"evenodd\" }));\nconst ForwardRef = forwardRef(SvgAxisZ);\nexport default ForwardRef;\n","import * as React from \"react\";\nimport { forwardRef } from \"react\";\nconst SvgRotation = ({\n title,\n titleId,\n ...props\n}, ref) => /* @__PURE__ */ React.createElement(\"svg\", { width: 16, height: 16, viewBox: \"0 0 16 16\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ref, \"aria-labelledby\": titleId, ...props }, title ? /* @__PURE__ */ React.createElement(\"title\", { id: titleId }, title) : null, /* @__PURE__ */ React.createElement(\"path\", { d: \"M8 16C5.76667 16 3.875 15.225 2.325 13.675C0.775 12.125 0 10.2333 0 8C0 5.76667 0.775 3.875 2.325 2.325C3.875 0.775 5.76667 0 8 0C9.15 0 10.25 0.2375 11.3 0.7125C12.35 1.1875 13.25 1.86667 14 2.75V0H16V7H9V5H13.2C12.6667 4.06667 11.9375 3.33333 11.0125 2.8C10.0875 2.26667 9.08333 2 8 2C6.33333 2 4.91667 2.58333 3.75 3.75C2.58333 4.91667 2 6.33333 2 8C2 9.66667 2.58333 11.0833 3.75 12.25C4.91667 13.4167 6.33333 14 8 14C9.28333 14 10.4417 13.6333 11.475 12.9C11.0583 14.1 12.5083 12.1667 11.475 12.9L12.9 14.325C11.4667 15.4417 9.83333 16 8 16Z\", fill: \"white\" }));\nconst ForwardRef = forwardRef(SvgRotation);\nexport default ForwardRef;\n","import baseIsEqual from './_baseIsEqual.js';\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\nexport default isEqual;\n","import { Typography } from \"@mui/material\"\nimport isEqual from \"lodash-es/isEqual\"\nimport { useRef, useState } from \"react\"\nimport { useTranslation } from \"react-i18next\"\nimport { useAnimationFrame } from \"../utils/hooks\"\nimport type { JoggingStore } from \"./JoggingStore\"\n\n/**\n * Monitors the active robot motion state and displays a message if\n * any joint limits are reached.\n */\nexport const JoggingJointLimitDetector = ({\n store,\n}: {\n store: JoggingStore\n}) => {\n const { t } = useTranslation()\n\n const [jointLimitsReached, setJointLimitsReached] = useState(\n store.jogger.motionStream.rapidlyChangingMotionState\n .joint_limit_reached.limit_reached,\n )\n const jointLimitsReachedRef = useRef(jointLimitsReached)\n\n useAnimationFrame(() => {\n const newLimitsReached =\n store.jogger.motionStream.rapidlyChangingMotionState\n .joint_limit_reached.limit_reached\n\n if (!isEqual(jointLimitsReachedRef.current, newLimitsReached)) {\n jointLimitsReachedRef.current = newLimitsReached\n setJointLimitsReached(newLimitsReached)\n }\n })\n\n const jointLimitReachedIndices: number[] = []\n for (const [index, limitReached] of jointLimitsReached.entries()) {\n if (limitReached) jointLimitReachedIndices.push(index)\n }\n\n return (\n <Typography\n color=\"error\"\n sx={{\n margin: \"0.5rem 1rem\",\n textAlign: \"center\",\n minHeight: \"1.5rem\",\n visibility: jointLimitReachedIndices.length ? \"visible\" : \"hidden\",\n }}\n >\n {t(\"Jogging.JointLimitsReached.lb\", {\n jointNumbers: jointLimitReachedIndices.map((i) => i + 1).join(\", \"),\n })}\n </Typography>\n )\n}\n","import {\n FormControl,\n InputLabel,\n Select,\n styled,\n type SelectProps,\n} from \"@mui/material\"\n\nconst AdornedFormControl = styled(FormControl)(({ theme }) => ({\n \"&.MuiFormControl-root\": {\n \".MuiSelect-select\": {\n paddingTop: \"20px\",\n paddingLeft: \"12px\",\n },\n label: {\n pointerEvents: \"none\",\n fontSize: \"16px\",\n },\n \".MuiInputLabel-root\": {\n \"&.Mui-focused\": {\n color: theme.palette.text.primary,\n },\n },\n },\n}))\n\ntype AdornedSelectProps = {\n labelValue: string\n labelId: string\n} & SelectProps\n\nexport default function AdornedSelect({\n labelValue,\n ...props\n}: AdornedSelectProps) {\n return (\n <AdornedFormControl fullWidth variant=\"filled\">\n <InputLabel id={props.labelId}>{labelValue}</InputLabel>\n <Select {...props} />\n </AdornedFormControl>\n )\n}\n","import { Box, MenuItem } from \"@mui/material\"\nimport { observer } from \"mobx-react-lite\"\nimport { useId } from \"react\"\nimport { useTranslation } from \"react-i18next\"\nimport AdornedSelect from \"../experimental/utils/AdornedSelect\"\nimport {\n ORIENTATION_IDS,\n type IncrementOptionId,\n type JoggingStore,\n type OrientationId,\n} from \"./JoggingStore\"\n\nexport const JoggingOptions = observer(({ store }: { store: JoggingStore }) => {\n const { t } = useTranslation()\n const componentId = useId()\n const joggingOptions: React.ReactElement[] = []\n\n function translateOrientation(orientation: OrientationId): string {\n switch (orientation) {\n case \"coordsys\":\n return t(\"Jogging.Orientation.coordsys\")\n case \"tool\":\n return t(\"Jogging.Orientation.tool\")\n default:\n return orientation\n }\n }\n\n if (store.showCoordSystemSelect) {\n joggingOptions.push(\n <AdornedSelect\n key=\"coord\"\n labelId={`jogging-coord-select-${componentId}`}\n labelValue={t(\"Jogging.CoordinateSystem.hlb\")}\n value={store.selectedCoordSystemId}\n size=\"small\"\n variant=\"filled\"\n displayEmpty={true}\n onChange={(event) =>\n store.setSelectedCoordSystemId(event.target.value as string)\n }\n disabled={store.isLocked}\n >\n {store.coordSystems.map((cs) => (\n <MenuItem key={cs.coordinate_system} value={cs.coordinate_system}>\n {cs.name && store.coordSystemCountByName[cs.name] > 1\n ? `${cs.name} / ${cs.coordinate_system}`\n : cs.name || cs.coordinate_system}\n </MenuItem>\n ))}\n </AdornedSelect>,\n )\n }\n\n if (store.showTcpSelect) {\n joggingOptions.push(\n <AdornedSelect\n key=\"tcp\"\n labelId={`jogging-tcp-select-${componentId}`}\n labelValue=\"TCP\"\n value={store.selectedTcpId}\n size=\"small\"\n variant=\"filled\"\n onChange={(event) =>\n store.setSelectedTcpId(event.target.value as string)\n }\n disabled={store.isLocked}\n >\n {store.tcps.map((tcp) => (\n <MenuItem key={tcp.id} value={tcp.id}>\n {tcp.id}\n </MenuItem>\n ))}\n </AdornedSelect>,\n )\n }\n\n if (store.showOrientationSelect) {\n joggingOptions.push(\n <AdornedSelect\n key=\"orientation\"\n labelValue={t(\"Jogging.Cartesian.Orientation.lb\")}\n labelId={`orientation-select-${componentId}`}\n value={store.selectedOrientation}\n onChange={(event) =>\n store.setSelectedOrientation(event.target.value as OrientationId)\n }\n disabled={store.isLocked}\n >\n {ORIENTATION_IDS.map((orientationId) => (\n <MenuItem key={orientationId} value={orientationId}>\n {translateOrientation(orientationId)}\n </MenuItem>\n ))}\n </AdornedSelect>,\n )\n }\n\n if (store.showIncrementSelect) {\n joggingOptions.push(\n <AdornedSelect\n key=\"increment\"\n labelValue={t(\"Jogging.Increment.hlb\")}\n labelId={`jogging-increment-select-${componentId}`}\n size=\"small\"\n variant=\"filled\"\n value={store.activeDiscreteIncrement?.id || \"continuous\"}\n onChange={(event) =>\n store.setSelectedIncrementId(event.target.value as IncrementOptionId)\n }\n disabled={store.isLocked}\n >\n <MenuItem key=\"continuous\" value=\"continuous\">\n {t(\"Jogging.Increment.Continuous.dd\")}\n </MenuItem>\n\n {store.selectedOrientation === \"tool\"\n ? null\n : store.discreteIncrementOptions.map((inc) => (\n <MenuItem key={inc.id} value={inc.id}>\n {store.currentMotionType === \"translate\"\n ? `${inc.mm}mm`\n : `${inc.degrees}°`}\n </MenuItem>\n ))}\n </AdornedSelect>,\n )\n }\n\n return (\n <Box\n component=\"div\"\n sx={{\n display: \"grid\",\n gap: \"16px\",\n gridTemplateColumns: \"1fr 1fr\",\n gridAutoRows: \"min-content\",\n \"& label\": { opacity: 0.7, fontSize: \"12px\", marginBottom: \"4px\" },\n }}\n >\n {joggingOptions.map((select, idx) => (\n <Box\n key={idx}\n sx={{\n gridColumn:\n joggingOptions.length % 2 === 1 &&\n idx === joggingOptions.length - 1\n ? \"span 2\"\n : \"auto\",\n }}\n >\n {select}\n </Box>\n ))}\n </Box>\n )\n})\n","import type { ToggleButtonGroupProps } from \"@mui/material\"\nimport { styled, ToggleButtonGroup } from \"@mui/material\"\n\nexport const JoggingToggleButtonGroup: React.ComponentType<ToggleButtonGroupProps> =\n styled(ToggleButtonGroup)(({ theme }) => ({\n \"&.MuiToggleButtonGroup-root\": {\n background: theme.palette.backgroundPaperElevation?.[8],\n borderRadius: \"8px\",\n padding: \"4px\",\n gap: \"4px\",\n button: {\n border: \"none\",\n borderRadius: \"4px\",\n flex: \"1 1 0px\",\n minWidth: 0,\n \"&.MuiToggleButtonGroup-firstButton\": {\n borderRadius: \"8px 4px 4px 8px\",\n },\n\n \"&.MuiToggleButtonGroup-lastButton\": {\n borderRadius: \"4px 8px 8px 4px\",\n },\n },\n },\n }))\n","export default function chainPropTypes(propType1, propType2) {\n if (process.env.NODE_ENV === 'production') {\n return () => null;\n }\n return function validate(...args) {\n return propType1(...args) || propType2(...args);\n };\n}","/**\n * Determines if a given element is a DOM element name (i.e. not a React component).\n */\nfunction isHostComponent(element) {\n return typeof element === 'string';\n}\nexport default isHostComponent;","import isHostComponent from \"../isHostComponent/index.js\";\n\n/**\n * Type of the ownerState based on the type of an element it applies to.\n * This resolves to the provided OwnerState for React components and `undefined` for host components.\n * Falls back to `OwnerState | undefined` when the exact type can't be determined in development time.\n */\n\n/**\n * Appends the ownerState object to the props, merging with the existing one if necessary.\n *\n * @param elementType Type of the element that owns the `existingProps`. If the element is a DOM node or undefined, `ownerState` is not applied.\n * @param otherProps Props of the element.\n * @param ownerState\n */\nfunction appendOwnerState(elementType, otherProps, ownerState) {\n if (elementType === undefined || isHostComponent(elementType)) {\n return otherProps;\n }\n return {\n ...otherProps,\n ownerState: {\n ...otherProps.ownerState,\n ...ownerState\n }\n };\n}\nexport default appendOwnerState;","/**\n * Extracts event handlers from a given object.\n * A prop is considered an event handler if it is a function and its name starts with `on`.\n *\n * @param object An object to extract event handlers from.\n * @param excludeKeys An array of keys to exclude from the returned object.\n */\nfunction extractEventHandlers(object, excludeKeys = []) {\n if (object === undefined) {\n return {};\n }\n const result = {};\n Object.keys(object).filter(prop => prop.match(/^on[A-Z]/) && typeof object[prop] === 'function' && !excludeKeys.includes(prop)).forEach(prop => {\n result[prop] = object[prop];\n });\n return result;\n}\nexport default extractEventHandlers;","/**\n * Removes event handlers from the given object.\n * A field is considered an event handler if it is a function with a name beginning with `on`.\n *\n * @param object Object to remove event handlers from.\n * @returns Object with event handlers removed.\n */\nfunction omitEventHandlers(object) {\n if (object === undefined) {\n return {};\n }\n const result = {};\n Object.keys(object).filter(prop => !(prop.match(/^on[A-Z]/) && typeof object[prop] === 'function')).forEach(prop => {\n result[prop] = object[prop];\n });\n return result;\n}\nexport default omitEventHandlers;","import clsx from 'clsx';\nimport extractEventHandlers from \"../extractEventHandlers/index.js\";\nimport omitEventHandlers from \"../omitEventHandlers/index.js\";\n/**\n * Merges the slot component internal props (usually coming from a hook)\n * with the externally provided ones.\n *\n * The merge order is (the latter overrides the former):\n * 1. The internal props (specified as a getter function to work with get*Props hook result)\n * 2. Additional props (specified internally on a Base UI component)\n * 3. External props specified on the owner component. These should only be used on a root slot.\n * 4. External props specified in the `slotProps.*` prop.\n * 5. The `className` prop - combined from all the above.\n * @param parameters\n * @returns\n */\nfunction mergeSlotProps(parameters) {\n const {\n getSlotProps,\n additionalProps,\n externalSlotProps,\n externalForwardedProps,\n className\n } = parameters;\n if (!getSlotProps) {\n // The simpler case - getSlotProps is not defined, so no internal event handlers are defined,\n // so we can simply merge all the props without having to worry about extracting event handlers.\n const joinedClasses = clsx(additionalProps?.className, className, externalForwardedProps?.className, externalSlotProps?.className);\n const mergedStyle = {\n ...additionalProps?.style,\n ...externalForwardedProps?.style,\n ...externalSlotProps?.style\n };\n const props = {\n ...additionalProps,\n ...externalForwardedProps,\n ...externalSlotProps\n };\n if (joinedClasses.length > 0) {\n props.className = joinedClasses;\n }\n if (Object.keys(mergedStyle).length > 0) {\n props.style = mergedStyle;\n }\n return {\n props,\n internalRef: undefined\n };\n }\n\n // In this case, getSlotProps is responsible for calling the external event handlers.\n // We don't need to include them in the merged props because of this.\n\n const eventHandlers = extractEventHandlers({\n ...externalForwardedProps,\n ...externalSlotProps\n });\n const componentsPropsWithoutEventHandlers = omitEventHandlers(externalSlotProps);\n const otherPropsWithoutEventHandlers = omitEventHandlers(externalForwardedProps);\n const internalSlotProps = getSlotProps(eventHandlers);\n\n // The order of classes is important here.\n // Emotion (that we use in libraries consuming Base UI) depends on this order\n // to properly override style. It requires the most important classes to be last\n // (see https://github.com/mui/material-ui/pull/33205) for the related discussion.\n const joinedClasses = clsx(internalSlotProps?.className, additionalProps?.className, className, externalForwardedProps?.className, externalSlotProps?.className);\n const mergedStyle = {\n ...internalSlotProps?.style,\n ...additionalProps?.style,\n ...externalForwardedProps?.style,\n ...externalSlotProps?.style\n };\n const props = {\n ...internalSlotProps,\n ...additionalProps,\n ...otherPropsWithoutEventHandlers,\n ...componentsPropsWithoutEventHandlers\n };\n if (joinedClasses.length > 0) {\n props.className = joinedClasses;\n }\n if (Object.keys(mergedStyle).length > 0) {\n props.style = mergedStyle;\n }\n return {\n props,\n internalRef: internalSlotProps.ref\n };\n}\nexport default mergeSlotProps;","/**\n * If `componentProps` is a function, calls it with the provided `ownerState`.\n * Otherwise, just returns `componentProps`.\n */\nfunction resolveComponentProps(componentProps, ownerState, slotState) {\n if (typeof componentProps === 'function') {\n return componentProps(ownerState, slotState);\n }\n return componentProps;\n}\nexport default resolveComponentProps;","'use client';\n\nimport useForkRef from \"../useForkRef/index.js\";\nimport appendOwnerState from \"../appendOwnerState/index.js\";\nimport mergeSlotProps from \"../mergeSlotProps/index.js\";\nimport resolveComponentProps from \"../resolveComponentProps/index.js\";\n/**\n * @ignore - do not document.\n * Builds the props to be passed into the slot of an unstyled component.\n * It merges the internal props of the component with the ones supplied by the user, allowing to customize the behavior.\n * If the slot component is not a host component, it also merges in the `ownerState`.\n *\n * @param parameters.getSlotProps - A function that returns the props to be passed to the slot component.\n */\nfunction useSlotProps(parameters) {\n const {\n elementType,\n externalSlotProps,\n ownerState,\n skipResolvingSlotProps = false,\n ...other\n } = parameters;\n const resolvedComponentsProps = skipResolvingSlotProps ? {} : resolveComponentProps(externalSlotProps, ownerState);\n const {\n props: mergedProps,\n internalRef\n } = mergeSlotProps({\n ...other,\n externalSlotProps: resolvedComponentsProps\n });\n const ref = useForkRef(internalRef, resolvedComponentsProps?.ref, parameters.additionalProps?.ref);\n const props = appendOwnerState(elementType, {\n ...mergedProps,\n ref\n }, ownerState);\n return props;\n}\nexport default useSlotProps;","/**\n * Returns a boolean indicating if the event's target has :focus-visible\n */\nexport default function isFocusVisible(element) {\n try {\n return element.matches(':focus-visible');\n } catch (error) {\n // Do not warn on jsdom tests, otherwise all tests that rely on focus have to be skipped\n // Tests that rely on `:focus-visible` will still have to be skipped in jsdom\n if (process.env.NODE_ENV !== 'production' && !window.navigator.userAgent.includes('jsdom')) {\n console.warn(['MUI: The `:focus-visible` pseudo class is not supported in this browser.', 'Some components rely on this feature to work properly.'].join('\\n'));\n }\n }\n return false;\n}","const visuallyHidden = {\n border: 0,\n clip: 'rect(0 0 0 0)',\n height: '1px',\n margin: '-1px',\n overflow: 'hidden',\n padding: 0,\n position: 'absolute',\n whiteSpace: 'nowrap',\n width: '1px'\n};\nexport default visuallyHidden;","function areArraysEqual(array1, array2, itemComparer = (a, b) => a === b) {\n return array1.length === array2.length && array1.every((value, index) => itemComparer(value, array2[index]));\n}\nexport default areArraysEqual;","'use client';\n\nimport * as React from 'react';\nimport ownerDocument from '@mui/utils/ownerDocument';\nimport useControlled from '@mui/utils/useControlled';\nimport useEnhancedEffect from '@mui/utils/useEnhancedEffect';\nimport useEventCallback from '@mui/utils/useEventCallback';\nimport useForkRef from '@mui/utils/useForkRef';\nimport isFocusVisible from '@mui/utils/isFocusVisible';\nimport visuallyHidden from '@mui/utils/visuallyHidden';\nimport clamp from '@mui/utils/clamp';\nimport extractEventHandlers from '@mui/utils/extractEventHandlers';\nimport areArraysEqual from \"../utils/areArraysEqual.js\";\nconst INTENTIONAL_DRAG_COUNT_THRESHOLD = 2;\nfunction getNewValue(currentValue, step, direction, min, max) {\n return direction === 1 ? Math.min(currentValue + step, max) : Math.max(currentValue - step, min);\n}\nfunction asc(a, b) {\n return a - b;\n}\nfunction findClosest(values, currentValue) {\n const {\n index: closestIndex\n } = values.reduce((acc, value, index) => {\n const distance = Math.abs(currentValue - value);\n if (acc === null || distance < acc.distance || distance === acc.distance) {\n return {\n distance,\n index\n };\n }\n return acc;\n }, null) ?? {};\n return closestIndex;\n}\nfunction trackFinger(event, touchId) {\n // The event is TouchEvent\n if (touchId.current !== undefined && event.changedTouches) {\n const touchEvent = event;\n for (let i = 0; i < touchEvent.changedTouches.length; i += 1) {\n const touch = touchEvent.changedTouches[i];\n if (touch.identifier === touchId.current) {\n return {\n x: touch.clientX,\n y: touch.clientY\n };\n }\n }\n return false;\n }\n\n // The event is MouseEvent\n return {\n x: event.clientX,\n y: event.clientY\n };\n}\nexport function valueToPercent(value, min, max) {\n return (value - min) * 100 / (max - min);\n}\nfunction percentToValue(percent, min, max) {\n return (max - min) * percent + min;\n}\nfunction getDecimalPrecision(num) {\n // This handles the case when num is very small (0.00000001), js will turn this into 1e-8.\n // When num is bigger than 1 or less than -1 it won't get converted to this notation so it's fine.\n if (Math.abs(num) < 1) {\n const parts = num.toExponential().split('e-');\n const matissaDecimalPart = parts[0].split('.')[1];\n return (matissaDecimalPart ? matissaDecimalPart.length : 0) + parseInt(parts[1], 10);\n }\n const decimalPart = num.toString().split('.')[1];\n return decimalPart ? decimalPart.length : 0;\n}\nfunction roundValueToStep(value, step, min) {\n const nearest = Math.round((value - min) / step) * step + min;\n return Number(nearest.toFixed(getDecimalPrecision(step)));\n}\nfunction setValueIndex({\n values,\n newValue,\n index\n}) {\n const output = values.slice();\n output[index] = newValue;\n return output.sort(asc);\n}\nfunction focusThumb({\n sliderRef,\n activeIndex,\n setActive\n}) {\n const doc = ownerDocument(sliderRef.current);\n if (!sliderRef.current?.contains(doc.activeElement) || Number(doc?.activeElement?.getAttribute('data-index')) !== activeIndex) {\n sliderRef.current?.querySelector(`[type=\"range\"][data-index=\"${activeIndex}\"]`).focus();\n }\n if (setActive) {\n setActive(activeIndex);\n }\n}\nfunction areValuesEqual(newValue, oldValue) {\n if (typeof newValue === 'number' && typeof oldValue === 'number') {\n return newValue === oldValue;\n }\n if (typeof newValue === 'object' && typeof oldValue === 'object') {\n return areArraysEqual(newValue, oldValue);\n }\n return false;\n}\nconst axisProps = {\n horizontal: {\n offset: percent => ({\n left: `${percent}%`\n }),\n leap: percent => ({\n width: `${percent}%`\n })\n },\n 'horizontal-reverse': {\n offset: percent => ({\n right: `${percent}%`\n }),\n leap: percent => ({\n width: `${percent}%`\n })\n },\n vertical: {\n offset: percent => ({\n bottom: `${percent}%`\n }),\n leap: percent => ({\n height: `${percent}%`\n })\n }\n};\nexport const Identity = x => x;\n\n// TODO: remove support for Safari < 13.\n// https://caniuse.com/#search=touch-action\n//\n// Safari, on iOS, supports touch action since v13.\n// Over 80% of the iOS phones are compatible\n// in August 2020.\n// Utilizing the CSS.supports method to check if touch-action is supported.\n// Since CSS.supports is supported on all but Edge@12 and IE and touch-action\n// is supported on both Edge@12 and IE if CSS.supports is not available that means that\n// touch-action will be supported\nlet cachedSupportsTouchActionNone;\nfunction doesSupportTouchActionNone() {\n if (cachedSupportsTouchActionNone === undefined) {\n if (typeof CSS !== 'undefined' && typeof CSS.supports === 'function') {\n cachedSupportsTouchActionNone = CSS.supports('touch-action', 'none');\n } else {\n cachedSupportsTouchActionNone = true;\n }\n }\n return cachedSupportsTouchActionNone;\n}\nexport function useSlider(parameters) {\n const {\n 'aria-labelledby': ariaLabelledby,\n defaultValue,\n disabled = false,\n disableSwap = false,\n isRtl = false,\n marks: marksProp = false,\n max = 100,\n min = 0,\n name,\n onChange,\n onChangeCommitted,\n orientation = 'horizontal',\n rootRef: ref,\n scale = Identity,\n step = 1,\n shiftStep = 10,\n tabIndex,\n value: valueProp\n } = parameters;\n const touchId = React.useRef(undefined);\n // We can't use the :active browser pseudo-classes.\n // - The active state isn't triggered when clicking on the rail.\n // - The active state isn't transferred when inversing a range slider.\n const [active, setActive] = React.useState(-1);\n const [open, setOpen] = React.useState(-1);\n const [dragging, setDragging] = React.useState(false);\n const moveCount = React.useRef(0);\n // lastChangedValue is updated whenever onChange is triggered.\n const lastChangedValue = React.useRef(null);\n const [valueDerived, setValueState] = useControlled({\n controlled: valueProp,\n default: defaultValue ?? min,\n name: 'Slider'\n });\n const handleChange = onChange && ((event, value, thumbIndex) => {\n // Redefine target to allow name and value to be read.\n // This allows seamless integration with the most popular form libraries.\n // https://github.com/mui/material-ui/issues/13485#issuecomment-676048492\n // Clone the event to not override `target` of the original event.\n const nativeEvent = event.nativeEvent || event;\n // @ts-ignore The nativeEvent is function, not object\n const clonedEvent = new nativeEvent.constructor(nativeEvent.type, nativeEvent);\n Object.defineProperty(clonedEvent, 'target', {\n writable: true,\n value: {\n value,\n name\n }\n });\n lastChangedValue.current = value;\n onChange(clonedEvent, value, thumbIndex);\n });\n const range = Array.isArray(valueDerived);\n let values = range ? valueDerived.slice().sort(asc) : [valueDerived];\n values = values.map(value => value == null ? min : clamp(value, min, max));\n const marks = marksProp === true && step !== null ? [...Array(Math.floor((max - min) / step) + 1)].map((_, index) => ({\n value: min + step * index\n })) : marksProp || [];\n const marksValues = marks.map(mark => mark.value);\n const [focusedThumbIndex, setFocusedThumbIndex] = React.useState(-1);\n const sliderRef = React.useRef(null);\n const handleRef = useForkRef(ref, sliderRef);\n const createHandleHiddenInputFocus = otherHandlers => event => {\n const index = Number(event.currentTarget.getAttribute('data-index'));\n if (isFocusVisible(event.target)) {\n setFocusedThumbIndex(index);\n }\n setOpen(index);\n otherHandlers?.onFocus?.(event);\n };\n const createHandleHiddenInputBlur = otherHandlers => event => {\n if (!isFocusVisible(event.target)) {\n setFocusedThumbIndex(-1);\n }\n setOpen(-1);\n otherHandlers?.onBlur?.(event);\n };\n const changeValue = (event, valueInput) => {\n const index = Number(event.currentTarget.getAttribute('data-index'));\n const value = values[index];\n const marksIndex = marksValues.indexOf(value);\n let newValue = valueInput;\n if (marks && step == null) {\n const maxMarksValue = marksValues[marksValues.length - 1];\n if (newValue >= maxMarksValue) {\n newValue = maxMarksValue;\n } else if (newValue <= marksValues[0]) {\n newValue = marksValues[0];\n } else {\n newValue = newValue < value ? marksValues[marksIndex - 1] : marksValues[marksIndex + 1];\n }\n }\n newValue = clamp(newValue, min, max);\n if (range) {\n // Bound the new value to the thumb's neighbours.\n if (disableSwap) {\n newValue = clamp(newValue, values[index - 1] || -Infinity, values[index + 1] || Infinity);\n }\n const previousValue = newValue;\n newValue = setValueIndex({\n values,\n newValue,\n index\n });\n let activeIndex = index;\n\n // Potentially swap the index if needed.\n if (!disableSwap) {\n activeIndex = newValue.indexOf(previousValue);\n }\n focusThumb({\n sliderRef,\n activeIndex\n });\n }\n setValueState(newValue);\n setFocusedThumbIndex(index);\n if (handleChange && !areValuesEqual(newValue, valueDerived)) {\n handleChange(event, newValue, index);\n }\n if (onChangeCommitted) {\n onChangeCommitted(event, lastChangedValue.current ?? newValue);\n }\n };\n const createHandleHiddenInputKeyDown = otherHandlers => event => {\n if (['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight', 'PageUp', 'PageDown', 'Home', 'End'].includes(event.key)) {\n event.preventDefault();\n const index = Number(event.currentTarget.getAttribute('data-index'));\n const value = values[index];\n let newValue = null;\n // Keys actions that change the value by more than the most granular `step`\n // value are only applied if the step not `null`.\n // When step is `null`, the `marks` prop is used instead to define valid values.\n if (step != null) {\n const stepSize = event.shiftKey ? shiftStep : step;\n switch (event.key) {\n case 'ArrowUp':\n newValue = getNewValue(value, stepSize, 1, min, max);\n break;\n case 'ArrowRight':\n newValue = getNewValue(value, stepSize, isRtl ? -1 : 1, min, max);\n break;\n case 'ArrowDown':\n newValue = getNewValue(value, stepSize, -1, min, max);\n break;\n case 'ArrowLeft':\n newValue = getNewValue(value, stepSize, isRtl ? 1 : -1, min, max);\n break;\n case 'PageUp':\n newValue = getNewValue(value, shiftStep, 1, min, max);\n break;\n case 'PageDown':\n newValue = getNewValue(value, shiftStep, -1, min, max);\n break;\n case 'Home':\n newValue = min;\n break;\n case 'End':\n newValue = max;\n break;\n default:\n break;\n }\n } else if (marks) {\n const maxMarksValue = marksValues[marksValues.length - 1];\n const currentMarkIndex = marksValues.indexOf(value);\n const decrementKeys = [isRtl ? 'ArrowRight' : 'ArrowLeft', 'ArrowDown', 'PageDown', 'Home'];\n const incrementKeys = [isRtl ? 'ArrowLeft' : 'ArrowRight', 'ArrowUp', 'PageUp', 'End'];\n if (decrementKeys.includes(event.key)) {\n if (currentMarkIndex === 0) {\n newValue = marksValues[0];\n } else {\n newValue = marksValues[currentMarkIndex - 1];\n }\n } else if (incrementKeys.includes(event.key)) {\n if (currentMarkIndex === marksValues.length - 1) {\n newValue = maxMarksValue;\n } else {\n newValue = marksValues[currentMarkIndex + 1];\n }\n }\n }\n if (newValue != null) {\n changeValue(event, newValue);\n }\n }\n otherHandlers?.onKeyDown?.(event);\n };\n useEnhancedEffect(() => {\n if (disabled && sliderRef.current.contains(document.activeElement)) {\n // This is necessary because Firefox and Safari will keep focus\n // on a disabled element:\n // https://codesandbox.io/p/sandbox/mui-pr-22247-forked-h151h?file=/src/App.js\n // @ts-ignore\n document.activeElement?.blur();\n }\n }, [disabled]);\n if (disabled && active !== -1) {\n setActive(-1);\n }\n if (disabled && focusedThumbIndex !== -1) {\n setFocusedThumbIndex(-1);\n }\n const createHandleHiddenInputChange = otherHandlers => event => {\n otherHandlers.onChange?.(event);\n // this handles value change by Pointer or Touch events\n // @ts-ignore\n changeValue(event, event.target.valueAsNumber);\n };\n const previousIndex = React.useRef(undefined);\n let axis = orientation;\n if (isRtl && orientation === 'horizontal') {\n axis += '-reverse';\n }\n const getFingerNewValue = ({\n finger,\n move = false\n }) => {\n const {\n current: slider\n } = sliderRef;\n const {\n width,\n height,\n bottom,\n left\n } = slider.getBoundingClientRect();\n let percent;\n if (axis.startsWith('vertical')) {\n percent = (bottom - finger.y) / height;\n } else {\n percent = (finger.x - left) / width;\n }\n if (axis.includes('-reverse')) {\n percent = 1 - percent;\n }\n let newValue;\n newValue = percentToValue(percent, min, max);\n if (step) {\n newValue = roundValueToStep(newValue, step, min);\n } else {\n const closestIndex = findClosest(marksValues, newValue);\n newValue = marksValues[closestIndex];\n }\n newValue = clamp(newValue, min, max);\n let activeIndex = 0;\n if (range) {\n if (!move) {\n activeIndex = findClosest(values, newValue);\n } else {\n activeIndex = previousIndex.current;\n }\n\n // Bound the new value to the thumb's neighbours.\n if (disableSwap) {\n newValue = clamp(newValue, values[activeIndex - 1] || -Infinity, values[activeIndex + 1] || Infinity);\n }\n const previousValue = newValue;\n newValue = setValueIndex({\n values,\n newValue,\n index: activeIndex\n });\n\n // Potentially swap the index if needed.\n if (!(disableSwap && move)) {\n activeIndex = newValue.indexOf(previousValue);\n previousIndex.current = activeIndex;\n }\n }\n return {\n newValue,\n activeIndex\n };\n };\n const handleTouchMove = useEventCallback(nativeEvent => {\n const finger = trackFinger(nativeEvent, touchId);\n if (!finger) {\n return;\n }\n moveCount.current += 1;\n\n // Cancel move in case some other element consumed a mouseup event and it was not fired.\n // @ts-ignore buttons doesn't not exists on touch event\n if (nativeEvent.type === 'mousemove' && nativeEvent.buttons === 0) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n handleTouchEnd(nativeEvent);\n return;\n }\n const {\n newValue,\n activeIndex\n } = getFingerNewValue({\n finger,\n move: true\n });\n focusThumb({\n sliderRef,\n activeIndex,\n setActive\n });\n setValueState(newValue);\n if (!dragging && moveCount.current > INTENTIONAL_DRAG_COUNT_THRESHOLD) {\n setDragging(true);\n }\n if (handleChange && !areValuesEqual(newValue, valueDerived)) {\n handleChange(nativeEvent, newValue, activeIndex);\n }\n });\n const handleTouchEnd = useEventCallback(nativeEvent => {\n const finger = trackFinger(nativeEvent, touchId);\n setDragging(false);\n if (!finger) {\n return;\n }\n const {\n newValue\n } = getFingerNewValue({\n finger,\n move: true\n });\n setActive(-1);\n if (nativeEvent.type === 'touchend') {\n setOpen(-1);\n }\n if (onChangeCommitted) {\n onChangeCommitted(nativeEvent, lastChangedValue.current ?? newValue);\n }\n touchId.current = undefined;\n\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n stopListening();\n });\n const handleTouchStart = useEventCallback(nativeEvent => {\n if (disabled) {\n return;\n }\n // If touch-action: none; is not supported we need to prevent the scroll manually.\n if (!doesSupportTouchActionNone()) {\n nativeEvent.preventDefault();\n }\n const touch = nativeEvent.changedTouches[0];\n if (touch != null) {\n // A number that uniquely identifies the current finger in the touch session.\n touchId.current = touch.identifier;\n }\n const finger = trackFinger(nativeEvent, touchId);\n if (finger !== false) {\n const {\n newValue,\n activeIndex\n } = getFingerNewValue({\n finger\n });\n focusThumb({\n sliderRef,\n activeIndex,\n setActive\n });\n setValueState(newValue);\n if (handleChange && !areValuesEqual(newValue, valueDerived)) {\n handleChange(nativeEvent, newValue, activeIndex);\n }\n }\n moveCount.current = 0;\n const doc = ownerDocument(sliderRef.current);\n doc.addEventListener('touchmove', handleTouchMove, {\n passive: true\n });\n doc.addEventListener('touchend', handleTouchEnd, {\n passive: true\n });\n });\n const stopListening = React.useCallback(() => {\n const doc = ownerDocument(sliderRef.current);\n doc.removeEventListener('mousemove', handleTouchMove);\n doc.removeEventListener('mouseup', handleTouchEnd);\n doc.removeEventListener('touchmove', handleTouchMove);\n doc.removeEventListener('touchend', handleTouchEnd);\n }, [handleTouchEnd, handleTouchMove]);\n React.useEffect(() => {\n const {\n current: slider\n } = sliderRef;\n slider.addEventListener('touchstart', handleTouchStart, {\n passive: doesSupportTouchActionNone()\n });\n return () => {\n slider.removeEventListener('touchstart', handleTouchStart);\n stopListening();\n };\n }, [stopListening, handleTouchStart]);\n React.useEffect(() => {\n if (disabled) {\n stopListening();\n }\n }, [disabled, stopListening]);\n const createHandleMouseDown = otherHandlers => event => {\n otherHandlers.onMouseDown?.(event);\n if (disabled) {\n return;\n }\n if (event.defaultPrevented) {\n return;\n }\n\n // Only handle left clicks\n if (event.button !== 0) {\n return;\n }\n\n // Avoid text selection\n event.preventDefault();\n const finger = trackFinger(event, touchId);\n if (finger !== false) {\n const {\n newValue,\n activeIndex\n } = getFingerNewValue({\n finger\n });\n focusThumb({\n sliderRef,\n activeIndex,\n setActive\n });\n setValueState(newValue);\n if (handleChange && !areValuesEqual(newValue, valueDerived)) {\n handleChange(event, newValue, activeIndex);\n }\n }\n moveCount.current = 0;\n const doc = ownerDocument(sliderRef.current);\n doc.addEventListener('mousemove', handleTouchMove, {\n passive: true\n });\n doc.addEventListener('mouseup', handleTouchEnd);\n };\n const trackOffset = valueToPercent(range ? values[0] : min, min, max);\n const trackLeap = valueToPercent(values[values.length - 1], min, max) - trackOffset;\n const getRootProps = (externalProps = {}) => {\n const externalHandlers = extractEventHandlers(externalProps);\n const ownEventHandlers = {\n onMouseDown: createHandleMouseDown(externalHandlers || {})\n };\n const mergedEventHandlers = {\n ...externalHandlers,\n ...ownEventHandlers\n };\n return {\n ...externalProps,\n ref: handleRef,\n ...mergedEventHandlers\n };\n };\n const createHandleMouseOver = otherHandlers => event => {\n otherHandlers.onMouseOver?.(event);\n const index = Number(event.currentTarget.getAttribute('data-index'));\n setOpen(index);\n };\n const createHandleMouseLeave = otherHandlers => event => {\n otherHandlers.onMouseLeave?.(event);\n setOpen(-1);\n };\n const getThumbProps = (externalProps = {}) => {\n const externalHandlers = extractEventHandlers(externalProps);\n const ownEventHandlers = {\n onMouseOver: createHandleMouseOver(externalHandlers || {}),\n onMouseLeave: createHandleMouseLeave(externalHandlers || {})\n };\n return {\n ...externalProps,\n ...externalHandlers,\n ...ownEventHandlers\n };\n };\n const getThumbStyle = index => {\n return {\n // So the non active thumb doesn't show its label on hover.\n pointerEvents: active !== -1 && active !== index ? 'none' : undefined\n };\n };\n let cssWritingMode;\n if (orientation === 'vertical') {\n cssWritingMode = isRtl ? 'vertical-rl' : 'vertical-lr';\n }\n const getHiddenInputProps = (externalProps = {}) => {\n const externalHandlers = extractEventHandlers(externalProps);\n const ownEventHandlers = {\n onChange: createHandleHiddenInputChange(externalHandlers || {}),\n onFocus: createHandleHiddenInputFocus(externalHandlers || {}),\n onBlur: createHandleHiddenInputBlur(externalHandlers || {}),\n onKeyDown: createHandleHiddenInputKeyDown(externalHandlers || {})\n };\n const mergedEventHandlers = {\n ...externalHandlers,\n ...ownEventHandlers\n };\n return {\n tabIndex,\n 'aria-labelledby': ariaLabelledby,\n 'aria-orientation': orientation,\n 'aria-valuemax': scale(max),\n 'aria-valuemin': scale(min),\n name,\n type: 'range',\n min: parameters.min,\n max: parameters.max,\n step: parameters.step === null && parameters.marks ? 'any' : parameters.step ?? undefined,\n disabled,\n ...externalProps,\n ...mergedEventHandlers,\n style: {\n ...visuallyHidden,\n direction: isRtl ? 'rtl' : 'ltr',\n // So that VoiceOver's focus indicator matches the thumb's dimensions\n width: '100%',\n height: '100%',\n writingMode: cssWritingMode\n }\n };\n };\n return {\n active,\n axis: axis,\n axisProps,\n dragging,\n focusedThumbIndex,\n getHiddenInputProps,\n getRootProps,\n getThumbProps,\n marks: marks,\n open,\n range,\n rootRef: handleRef,\n trackLeap,\n trackOffset,\n values,\n getThumbStyle\n };\n}","import isHostComponent from '@mui/utils/isHostComponent';\nconst shouldSpreadAdditionalProps = Slot => {\n return !Slot || !isHostComponent(Slot);\n};\nexport default shouldSpreadAdditionalProps;","/**\n * Type guard to check if the object has a \"main\" property of type string.\n *\n * @param obj - the object to check\n * @returns boolean\n */\nfunction hasCorrectMainProperty(obj) {\n return typeof obj.main === 'string';\n}\n/**\n * Checks if the object conforms to the SimplePaletteColorOptions type.\n * The minimum requirement is that the object has a \"main\" property of type string, this is always checked.\n * Optionally, you can pass additional properties to check.\n *\n * @param obj - The object to check\n * @param additionalPropertiesToCheck - Array containing \"light\", \"dark\", and/or \"contrastText\"\n * @returns boolean\n */\nfunction checkSimplePaletteColorValues(obj, additionalPropertiesToCheck = []) {\n if (!hasCorrectMainProperty(obj)) {\n return false;\n }\n for (const value of additionalPropertiesToCheck) {\n if (!obj.hasOwnProperty(value) || typeof obj[value] !== 'string') {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Creates a filter function used to filter simple palette color options.\n * The minimum requirement is that the object has a \"main\" property of type string, this is always checked.\n * Optionally, you can pass additional properties to check.\n *\n * @param additionalPropertiesToCheck - Array containing \"light\", \"dark\", and/or \"contrastText\"\n * @returns ([, value]: [any, PaletteColorOptions]) => boolean\n */\nexport default function createSimplePaletteValueFilter(additionalPropertiesToCheck = []) {\n return ([, value]) => value && checkSimplePaletteColorValues(value, additionalPropertiesToCheck);\n}","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getSliderUtilityClass(slot) {\n return generateUtilityClass('MuiSlider', slot);\n}\nconst sliderClasses = generateUtilityClasses('MuiSlider', ['root', 'active', 'colorPrimary', 'colorSecondary', 'colorError', 'colorInfo', 'colorSuccess', 'colorWarning', 'disabled', 'dragging', 'focusVisible', 'mark', 'markActive', 'marked', 'markLabel', 'markLabelActive', 'rail', 'sizeSmall', 'thumb', 'thumbColorPrimary', 'thumbColorSecondary', 'thumbColorError', 'thumbColorSuccess', 'thumbColorInfo', 'thumbColorWarning', 'track', 'trackInverted', 'trackFalse', 'thumbSizeSmall', 'valueLabel', 'valueLabelOpen', 'valueLabelCircle', 'valueLabelLabel', 'vertical']);\nexport default sliderClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport sliderClasses from \"./sliderClasses.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useValueLabelClasses = props => {\n const {\n open\n } = props;\n const utilityClasses = {\n offset: clsx(open && sliderClasses.valueLabelOpen),\n circle: sliderClasses.valueLabelCircle,\n label: sliderClasses.valueLabelLabel\n };\n return utilityClasses;\n};\n\n/**\n * @ignore - internal component.\n */\nexport default function SliderValueLabel(props) {\n const {\n children,\n className,\n value\n } = props;\n const classes = useValueLabelClasses(props);\n if (!children) {\n return null;\n }\n return /*#__PURE__*/React.cloneElement(children, {\n className: children.props.className\n }, /*#__PURE__*/_jsxs(React.Fragment, {\n children: [children.props.children, /*#__PURE__*/_jsx(\"span\", {\n className: clsx(classes.offset, className),\n \"aria-hidden\": true,\n children: /*#__PURE__*/_jsx(\"span\", {\n className: classes.circle,\n children: /*#__PURE__*/_jsx(\"span\", {\n className: classes.label,\n children: value\n })\n })\n })]\n }));\n}\nprocess.env.NODE_ENV !== \"production\" ? SliderValueLabel.propTypes = {\n children: PropTypes.element.isRequired,\n className: PropTypes.string,\n value: PropTypes.node\n} : void 0;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport chainPropTypes from '@mui/utils/chainPropTypes';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { useRtl } from '@mui/system/RtlProvider';\nimport useSlotProps from '@mui/utils/useSlotProps';\nimport isHostComponent from '@mui/utils/isHostComponent';\nimport { useSlider, valueToPercent } from \"./useSlider.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport slotShouldForwardProp from \"../styles/slotShouldForwardProp.js\";\nimport shouldSpreadAdditionalProps from \"../utils/shouldSpreadAdditionalProps.js\";\nimport capitalize from \"../utils/capitalize.js\";\nimport createSimplePaletteValueFilter from \"../utils/createSimplePaletteValueFilter.js\";\nimport BaseSliderValueLabel from \"./SliderValueLabel.js\";\nimport sliderClasses, { getSliderUtilityClass } from \"./sliderClasses.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction Identity(x) {\n return x;\n}\nexport const SliderRoot = styled('span', {\n name: 'MuiSlider',\n slot: 'Root',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.root, styles[`color${capitalize(ownerState.color)}`], ownerState.size !== 'medium' && styles[`size${capitalize(ownerState.size)}`], ownerState.marked && styles.marked, ownerState.orientation === 'vertical' && styles.vertical, ownerState.track === 'inverted' && styles.trackInverted, ownerState.track === false && styles.trackFalse];\n }\n})(memoTheme(({\n theme\n}) => ({\n borderRadius: 12,\n boxSizing: 'content-box',\n display: 'inline-block',\n position: 'relative',\n cursor: 'pointer',\n touchAction: 'none',\n WebkitTapHighlightColor: 'transparent',\n '@media print': {\n colorAdjust: 'exact'\n },\n [`&.${sliderClasses.disabled}`]: {\n pointerEvents: 'none',\n cursor: 'default',\n color: (theme.vars || theme).palette.grey[400]\n },\n [`&.${sliderClasses.dragging}`]: {\n [`& .${sliderClasses.thumb}, & .${sliderClasses.track}`]: {\n transition: 'none'\n }\n },\n variants: [...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()).map(([color]) => ({\n props: {\n color\n },\n style: {\n color: (theme.vars || theme).palette[color].main\n }\n })), {\n props: {\n orientation: 'horizontal'\n },\n style: {\n height: 4,\n width: '100%',\n padding: '13px 0',\n // The primary input mechanism of the device includes a pointing device of limited accuracy.\n '@media (pointer: coarse)': {\n // Reach 42px touch target, about ~8mm on screen.\n padding: '20px 0'\n }\n }\n }, {\n props: {\n orientation: 'horizontal',\n size: 'small'\n },\n style: {\n height: 2\n }\n }, {\n props: {\n orientation: 'horizontal',\n marked: true\n },\n style: {\n marginBottom: 20\n }\n }, {\n props: {\n orientation: 'vertical'\n },\n style: {\n height: '100%',\n width: 4,\n padding: '0 13px',\n // The primary input mechanism of the device includes a pointing device of limited accuracy.\n '@media (pointer: coarse)': {\n // Reach 42px touch target, about ~8mm on screen.\n padding: '0 20px'\n }\n }\n }, {\n props: {\n orientation: 'vertical',\n size: 'small'\n },\n style: {\n width: 2\n }\n }, {\n props: {\n orientation: 'vertical',\n marked: true\n },\n style: {\n marginRight: 44\n }\n }]\n})));\nexport const SliderRail = styled('span', {\n name: 'MuiSlider',\n slot: 'Rail'\n})({\n display: 'block',\n position: 'absolute',\n borderRadius: 'inherit',\n backgroundColor: 'currentColor',\n opacity: 0.38,\n variants: [{\n props: {\n orientation: 'horizontal'\n },\n style: {\n width: '100%',\n height: 'inherit',\n top: '50%',\n transform: 'translateY(-50%)'\n }\n }, {\n props: {\n orientation: 'vertical'\n },\n style: {\n height: '100%',\n width: 'inherit',\n left: '50%',\n transform: 'translateX(-50%)'\n }\n }, {\n props: {\n track: 'inverted'\n },\n style: {\n opacity: 1\n }\n }]\n});\nexport const SliderTrack = styled('span', {\n name: 'MuiSlider',\n slot: 'Track'\n})(memoTheme(({\n theme\n}) => {\n return {\n display: 'block',\n position: 'absolute',\n borderRadius: 'inherit',\n border: '1px solid currentColor',\n backgroundColor: 'currentColor',\n transition: theme.transitions.create(['left', 'width', 'bottom', 'height'], {\n duration: theme.transitions.duration.shortest\n }),\n variants: [{\n props: {\n size: 'small'\n },\n style: {\n border: 'none'\n }\n }, {\n props: {\n orientation: 'horizontal'\n },\n style: {\n height: 'inherit',\n top: '50%',\n transform: 'translateY(-50%)'\n }\n }, {\n props: {\n orientation: 'vertical'\n },\n style: {\n width: 'inherit',\n left: '50%',\n transform: 'translateX(-50%)'\n }\n }, {\n props: {\n track: false\n },\n style: {\n display: 'none'\n }\n }, ...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()).map(([color]) => ({\n props: {\n color,\n track: 'inverted'\n },\n style: {\n ...(theme.vars ? {\n backgroundColor: theme.vars.palette.Slider[`${color}Track`],\n borderColor: theme.vars.palette.Slider[`${color}Track`]\n } : {\n backgroundColor: theme.lighten(theme.palette[color].main, 0.62),\n borderColor: theme.lighten(theme.palette[color].main, 0.62),\n ...theme.applyStyles('dark', {\n backgroundColor: theme.darken(theme.palette[color].main, 0.5)\n }),\n ...theme.applyStyles('dark', {\n borderColor: theme.darken(theme.palette[color].main, 0.5)\n })\n })\n }\n }))]\n };\n}));\nexport const SliderThumb = styled('span', {\n name: 'MuiSlider',\n slot: 'Thumb',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.thumb, styles[`thumbColor${capitalize(ownerState.color)}`], ownerState.size !== 'medium' && styles[`thumbSize${capitalize(ownerState.size)}`]];\n }\n})(memoTheme(({\n theme\n}) => ({\n position: 'absolute',\n width: 20,\n height: 20,\n boxSizing: 'border-box',\n borderRadius: '50%',\n outline: 0,\n backgroundColor: 'currentColor',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n transition: theme.transitions.create(['box-shadow', 'left', 'bottom'], {\n duration: theme.transitions.duration.shortest\n }),\n '&::before': {\n position: 'absolute',\n content: '\"\"',\n borderRadius: 'inherit',\n width: '100%',\n height: '100%',\n boxShadow: (theme.vars || theme).shadows[2]\n },\n '&::after': {\n position: 'absolute',\n content: '\"\"',\n borderRadius: '50%',\n // 42px is the hit target\n width: 42,\n height: 42,\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)'\n },\n [`&.${sliderClasses.disabled}`]: {\n '&:hover': {\n boxShadow: 'none'\n }\n },\n variants: [{\n props: {\n size: 'small'\n },\n style: {\n width: 12,\n height: 12,\n '&::before': {\n boxShadow: 'none'\n }\n }\n }, {\n props: {\n orientation: 'horizontal'\n },\n style: {\n top: '50%',\n transform: 'translate(-50%, -50%)'\n }\n }, {\n props: {\n orientation: 'vertical'\n },\n style: {\n left: '50%',\n transform: 'translate(-50%, 50%)'\n }\n }, ...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()).map(([color]) => ({\n props: {\n color\n },\n style: {\n [`&:hover, &.${sliderClasses.focusVisible}`]: {\n boxShadow: `0px 0px 0px 8px ${theme.alpha((theme.vars || theme).palette[color].main, 0.16)}`,\n '@media (hover: none)': {\n boxShadow: 'none'\n }\n },\n [`&.${sliderClasses.active}`]: {\n boxShadow: `0px 0px 0px 14px ${theme.alpha((theme.vars || theme).palette[color].main, 0.16)}`\n }\n }\n }))]\n})));\nconst SliderValueLabel = styled(BaseSliderValueLabel, {\n name: 'MuiSlider',\n slot: 'ValueLabel'\n})(memoTheme(({\n theme\n}) => ({\n zIndex: 1,\n whiteSpace: 'nowrap',\n ...theme.typography.body2,\n fontWeight: 500,\n transition: theme.transitions.create(['transform'], {\n duration: theme.transitions.duration.shortest\n }),\n position: 'absolute',\n backgroundColor: (theme.vars || theme).palette.grey[600],\n borderRadius: 2,\n color: (theme.vars || theme).palette.common.white,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '0.25rem 0.75rem',\n variants: [{\n props: {\n orientation: 'horizontal'\n },\n style: {\n transform: 'translateY(-100%) scale(0)',\n top: '-10px',\n transformOrigin: 'bottom center',\n '&::before': {\n position: 'absolute',\n content: '\"\"',\n width: 8,\n height: 8,\n transform: 'translate(-50%, 50%) rotate(45deg)',\n backgroundColor: 'inherit',\n bottom: 0,\n left: '50%'\n },\n [`&.${sliderClasses.valueLabelOpen}`]: {\n transform: 'translateY(-100%) scale(1)'\n }\n }\n }, {\n props: {\n orientation: 'vertical'\n },\n style: {\n transform: 'translateY(-50%) scale(0)',\n right: '30px',\n top: '50%',\n transformOrigin: 'right center',\n '&::before': {\n position: 'absolute',\n content: '\"\"',\n width: 8,\n height: 8,\n transform: 'translate(-50%, -50%) rotate(45deg)',\n backgroundColor: 'inherit',\n right: -8,\n top: '50%'\n },\n [`&.${sliderClasses.valueLabelOpen}`]: {\n transform: 'translateY(-50%) scale(1)'\n }\n }\n }, {\n props: {\n size: 'small'\n },\n style: {\n fontSize: theme.typography.pxToRem(12),\n padding: '0.25rem 0.5rem'\n }\n }, {\n props: {\n orientation: 'vertical',\n size: 'small'\n },\n style: {\n right: '20px'\n }\n }]\n})));\nprocess.env.NODE_ENV !== \"production\" ? SliderValueLabel.propTypes /* remove-proptypes */ = {\n // ┌────────────────────────────── Warning ──────────────────────────────┐\n // │ These PropTypes are generated from the TypeScript type definitions. │\n // │ To update them, edit the d.ts file and run `pnpm proptypes`. │\n // └─────────────────────────────────────────────────────────────────────┘\n /**\n * @ignore\n */\n children: PropTypes.element.isRequired,\n /**\n * @ignore\n */\n index: PropTypes.number.isRequired,\n /**\n * @ignore\n */\n open: PropTypes.bool.isRequired,\n /**\n * @ignore\n */\n value: PropTypes.node\n} : void 0;\nexport { SliderValueLabel };\nexport const SliderMark = styled('span', {\n name: 'MuiSlider',\n slot: 'Mark',\n shouldForwardProp: prop => slotShouldForwardProp(prop) && prop !== 'markActive',\n overridesResolver: (props, styles) => {\n const {\n markActive\n } = props;\n return [styles.mark, markActive && styles.markActive];\n }\n})(memoTheme(({\n theme\n}) => ({\n position: 'absolute',\n width: 2,\n height: 2,\n borderRadius: 1,\n backgroundColor: 'currentColor',\n variants: [{\n props: {\n orientation: 'horizontal'\n },\n style: {\n top: '50%',\n transform: 'translate(-1px, -50%)'\n }\n }, {\n props: {\n orientation: 'vertical'\n },\n style: {\n left: '50%',\n transform: 'translate(-50%, 1px)'\n }\n }, {\n props: {\n markActive: true\n },\n style: {\n backgroundColor: (theme.vars || theme).palette.background.paper,\n opacity: 0.8\n }\n }]\n})));\nexport const SliderMarkLabel = styled('span', {\n name: 'MuiSlider',\n slot: 'MarkLabel',\n shouldForwardProp: prop => slotShouldForwardProp(prop) && prop !== 'markLabelActive'\n})(memoTheme(({\n theme\n}) => ({\n ...theme.typography.body2,\n color: (theme.vars || theme).palette.text.secondary,\n position: 'absolute',\n whiteSpace: 'nowrap',\n variants: [{\n props: {\n orientation: 'horizontal'\n },\n style: {\n top: 30,\n transform: 'translateX(-50%)',\n '@media (pointer: coarse)': {\n top: 40\n }\n }\n }, {\n props: {\n orientation: 'vertical'\n },\n style: {\n left: 36,\n transform: 'translateY(50%)',\n '@media (pointer: coarse)': {\n left: 44\n }\n }\n }, {\n props: {\n markLabelActive: true\n },\n style: {\n color: (theme.vars || theme).palette.text.primary\n }\n }]\n})));\nconst useUtilityClasses = ownerState => {\n const {\n disabled,\n dragging,\n marked,\n orientation,\n track,\n classes,\n color,\n size\n } = ownerState;\n const slots = {\n root: ['root', disabled && 'disabled', dragging && 'dragging', marked && 'marked', orientation === 'vertical' && 'vertical', track === 'inverted' && 'trackInverted', track === false && 'trackFalse', color && `color${capitalize(color)}`, size && `size${capitalize(size)}`],\n rail: ['rail'],\n track: ['track'],\n mark: ['mark'],\n markActive: ['markActive'],\n markLabel: ['markLabel'],\n markLabelActive: ['markLabelActive'],\n valueLabel: ['valueLabel'],\n thumb: ['thumb', disabled && 'disabled', size && `thumbSize${capitalize(size)}`, color && `thumbColor${capitalize(color)}`],\n active: ['active'],\n disabled: ['disabled'],\n focusVisible: ['focusVisible']\n };\n return composeClasses(slots, getSliderUtilityClass, classes);\n};\nconst Forward = ({\n children\n}) => children;\nconst Slider = /*#__PURE__*/React.forwardRef(function Slider(inputProps, ref) {\n const props = useDefaultProps({\n props: inputProps,\n name: 'MuiSlider'\n });\n const isRtl = useRtl();\n const {\n 'aria-label': ariaLabel,\n 'aria-valuetext': ariaValuetext,\n 'aria-labelledby': ariaLabelledby,\n // eslint-disable-next-line react/prop-types\n component = 'span',\n components = {},\n componentsProps = {},\n color = 'primary',\n classes: classesProp,\n className,\n disableSwap = false,\n disabled = false,\n getAriaLabel,\n getAriaValueText,\n marks: marksProp = false,\n max = 100,\n min = 0,\n name,\n onChange,\n onChangeCommitted,\n orientation = 'horizontal',\n shiftStep = 10,\n size = 'medium',\n step = 1,\n scale = Identity,\n slotProps,\n slots,\n tabIndex,\n track = 'normal',\n value: valueProp,\n valueLabelDisplay = 'off',\n valueLabelFormat = Identity,\n ...other\n } = props;\n const ownerState = {\n ...props,\n isRtl,\n max,\n min,\n classes: classesProp,\n disabled,\n disableSwap,\n orientation,\n marks: marksProp,\n color,\n size,\n step,\n shiftStep,\n scale,\n track,\n valueLabelDisplay,\n valueLabelFormat\n };\n const {\n axisProps,\n getRootProps,\n getHiddenInputProps,\n getThumbProps,\n open,\n active,\n axis,\n focusedThumbIndex,\n range,\n dragging,\n marks,\n values,\n trackOffset,\n trackLeap,\n getThumbStyle\n } = useSlider({\n ...ownerState,\n rootRef: ref\n });\n ownerState.marked = marks.length > 0 && marks.some(mark => mark.label);\n ownerState.dragging = dragging;\n ownerState.focusedThumbIndex = focusedThumbIndex;\n const classes = useUtilityClasses(ownerState);\n\n // support both `slots` and `components` for backward compatibility\n const RootSlot = slots?.root ?? components.Root ?? SliderRoot;\n const RailSlot = slots?.rail ?? components.Rail ?? SliderRail;\n const TrackSlot = slots?.track ?? components.Track ?? SliderTrack;\n const ThumbSlot = slots?.thumb ?? components.Thumb ?? SliderThumb;\n const ValueLabelSlot = slots?.valueLabel ?? components.ValueLabel ?? SliderValueLabel;\n const MarkSlot = slots?.mark ?? components.Mark ?? SliderMark;\n const MarkLabelSlot = slots?.markLabel ?? components.MarkLabel ?? SliderMarkLabel;\n const InputSlot = slots?.input ?? components.Input ?? 'input';\n const rootSlotProps = slotProps?.root ?? componentsProps.root;\n const railSlotProps = slotProps?.rail ?? componentsProps.rail;\n const trackSlotProps = slotProps?.track ?? componentsProps.track;\n const thumbSlotProps = slotProps?.thumb ?? componentsProps.thumb;\n const valueLabelSlotProps = slotProps?.valueLabel ?? componentsProps.valueLabel;\n const markSlotProps = slotProps?.mark ?? componentsProps.mark;\n const markLabelSlotProps = slotProps?.markLabel ?? componentsProps.markLabel;\n const inputSlotProps = slotProps?.input ?? componentsProps.input;\n const rootProps = useSlotProps({\n elementType: RootSlot,\n getSlotProps: getRootProps,\n externalSlotProps: rootSlotProps,\n externalForwardedProps: other,\n additionalProps: {\n ...(shouldSpreadAdditionalProps(RootSlot) && {\n as: component\n })\n },\n ownerState: {\n ...ownerState,\n ...rootSlotProps?.ownerState\n },\n className: [classes.root, className]\n });\n const railProps = useSlotProps({\n elementType: RailSlot,\n externalSlotProps: railSlotProps,\n ownerState,\n className: classes.rail\n });\n const trackProps = useSlotProps({\n elementType: TrackSlot,\n externalSlotProps: trackSlotProps,\n additionalProps: {\n style: {\n ...axisProps[axis].offset(trackOffset),\n ...axisProps[axis].leap(trackLeap)\n }\n },\n ownerState: {\n ...ownerState,\n ...trackSlotProps?.ownerState\n },\n className: classes.track\n });\n const thumbProps = useSlotProps({\n elementType: ThumbSlot,\n getSlotProps: getThumbProps,\n externalSlotProps: thumbSlotProps,\n ownerState: {\n ...ownerState,\n ...thumbSlotProps?.ownerState\n },\n className: classes.thumb\n });\n const valueLabelProps = useSlotProps({\n elementType: ValueLabelSlot,\n externalSlotProps: valueLabelSlotProps,\n ownerState: {\n ...ownerState,\n ...valueLabelSlotProps?.ownerState\n },\n className: classes.valueLabel\n });\n const markProps = useSlotProps({\n elementType: MarkSlot,\n externalSlotProps: markSlotProps,\n ownerState,\n className: classes.mark\n });\n const markLabelProps = useSlotProps({\n elementType: MarkLabelSlot,\n externalSlotProps: markLabelSlotProps,\n ownerState,\n className: classes.markLabel\n });\n const inputSliderProps = useSlotProps({\n elementType: InputSlot,\n getSlotProps: getHiddenInputProps,\n externalSlotProps: inputSlotProps,\n ownerState\n });\n return /*#__PURE__*/_jsxs(RootSlot, {\n ...rootProps,\n children: [/*#__PURE__*/_jsx(RailSlot, {\n ...railProps\n }), /*#__PURE__*/_jsx(TrackSlot, {\n ...trackProps\n }), marks.filter(mark => mark.value >= min && mark.value <= max).map((mark, index) => {\n const percent = valueToPercent(mark.value, min, max);\n const style = axisProps[axis].offset(percent);\n let markActive;\n if (track === false) {\n markActive = values.includes(mark.value);\n } else {\n markActive = track === 'normal' && (range ? mark.value >= values[0] && mark.value <= values[values.length - 1] : mark.value <= values[0]) || track === 'inverted' && (range ? mark.value <= values[0] || mark.value >= values[values.length - 1] : mark.value >= values[0]);\n }\n return /*#__PURE__*/_jsxs(React.Fragment, {\n children: [/*#__PURE__*/_jsx(MarkSlot, {\n \"data-index\": index,\n ...markProps,\n ...(!isHostComponent(MarkSlot) && {\n markActive\n }),\n style: {\n ...style,\n ...markProps.style\n },\n className: clsx(markProps.className, markActive && classes.markActive)\n }), mark.label != null ? /*#__PURE__*/_jsx(MarkLabelSlot, {\n \"aria-hidden\": true,\n \"data-index\": index,\n ...markLabelProps,\n ...(!isHostComponent(MarkLabelSlot) && {\n markLabelActive: markActive\n }),\n style: {\n ...style,\n ...markLabelProps.style\n },\n className: clsx(classes.markLabel, markLabelProps.className, markActive && classes.markLabelActive),\n children: mark.label\n }) : null]\n }, index);\n }), values.map((value, index) => {\n const percent = valueToPercent(value, min, max);\n const style = axisProps[axis].offset(percent);\n const ValueLabelComponent = valueLabelDisplay === 'off' ? Forward : ValueLabelSlot;\n return /*#__PURE__*/ /* TODO v6: Change component structure. It will help in avoiding the complicated React.cloneElement API added in SliderValueLabel component. Should be: Thumb -> Input, ValueLabel. Follow Joy UI's Slider structure. */_jsx(ValueLabelComponent, {\n ...(!isHostComponent(ValueLabelComponent) && {\n valueLabelFormat,\n valueLabelDisplay,\n value: typeof valueLabelFormat === 'function' ? valueLabelFormat(scale(value), index) : valueLabelFormat,\n index,\n open: open === index || active === index || valueLabelDisplay === 'on',\n disabled\n }),\n ...valueLabelProps,\n children: /*#__PURE__*/_jsx(ThumbSlot, {\n \"data-index\": index,\n ...thumbProps,\n className: clsx(classes.thumb, thumbProps.className, active === index && classes.active, focusedThumbIndex === index && classes.focusVisible),\n style: {\n ...style,\n ...getThumbStyle(index),\n ...thumbProps.style\n },\n children: /*#__PURE__*/_jsx(InputSlot, {\n \"data-index\": index,\n \"aria-label\": getAriaLabel ? getAriaLabel(index) : ariaLabel,\n \"aria-valuenow\": scale(value),\n \"aria-labelledby\": ariaLabelledby,\n \"aria-valuetext\": getAriaValueText ? getAriaValueText(scale(value), index) : ariaValuetext,\n value: values[index],\n ...inputSliderProps\n })\n })\n }, index);\n })]\n });\n});\nprocess.env.NODE_ENV !== \"production\" ? Slider.propTypes /* remove-proptypes */ = {\n // ┌────────────────────────────── Warning ──────────────────────────────┐\n // │ These PropTypes are generated from the TypeScript type definitions. │\n // │ To update them, edit the d.ts file and run `pnpm proptypes`. │\n // └─────────────────────────────────────────────────────────────────────┘\n /**\n * The label of the slider.\n */\n 'aria-label': chainPropTypes(PropTypes.string, props => {\n const range = Array.isArray(props.value || props.defaultValue);\n if (range && props['aria-label'] != null) {\n return new Error('MUI: You need to use the `getAriaLabel` prop instead of `aria-label` when using a range slider.');\n }\n return null;\n }),\n /**\n * The id of the element containing a label for the slider.\n */\n 'aria-labelledby': PropTypes.string,\n /**\n * A string value that provides a user-friendly name for the current value of the slider.\n */\n 'aria-valuetext': chainPropTypes(PropTypes.string, props => {\n const range = Array.isArray(props.value || props.defaultValue);\n if (range && props['aria-valuetext'] != null) {\n return new Error('MUI: You need to use the `getAriaValueText` prop instead of `aria-valuetext` when using a range slider.');\n }\n return null;\n }),\n /**\n * @ignore\n */\n children: PropTypes.node,\n /**\n * Override or extend the styles applied to the component.\n */\n classes: PropTypes.object,\n /**\n * @ignore\n */\n className: PropTypes.string,\n /**\n * The color of the component.\n * It supports both default and custom theme colors, which can be added as shown in the\n * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).\n * @default 'primary'\n */\n color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),\n /**\n * The components used for each slot inside.\n *\n * @deprecated use the `slots` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n *\n * @default {}\n */\n components: PropTypes.shape({\n Input: PropTypes.elementType,\n Mark: PropTypes.elementType,\n MarkLabel: PropTypes.elementType,\n Rail: PropTypes.elementType,\n Root: PropTypes.elementType,\n Thumb: PropTypes.elementType,\n Track: PropTypes.elementType,\n ValueLabel: PropTypes.elementType\n }),\n /**\n * The extra props for the slot components.\n * You can override the existing props or add new ones.\n *\n * @deprecated use the `slotProps` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n *\n * @default {}\n */\n componentsProps: PropTypes.shape({\n input: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n mark: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n markLabel: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n rail: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n root: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n thumb: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n track: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n valueLabel: PropTypes.oneOfType([PropTypes.func, PropTypes.shape({\n children: PropTypes.element,\n className: PropTypes.string,\n open: PropTypes.bool,\n style: PropTypes.object,\n value: PropTypes.node,\n valueLabelDisplay: PropTypes.oneOf(['auto', 'off', 'on'])\n })])\n }),\n /**\n * The default value. Use when the component is not controlled.\n */\n defaultValue: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.number]),\n /**\n * If `true`, the component is disabled.\n * @default false\n */\n disabled: PropTypes.bool,\n /**\n * If `true`, the active thumb doesn't swap when moving pointer over a thumb while dragging another thumb.\n * @default false\n */\n disableSwap: PropTypes.bool,\n /**\n * Accepts a function which returns a string value that provides a user-friendly name for the thumb labels of the slider.\n * This is important for screen reader users.\n * @param {number} index The thumb label's index to format.\n * @returns {string}\n */\n getAriaLabel: PropTypes.func,\n /**\n * Accepts a function which returns a string value that provides a user-friendly name for the current value of the slider.\n * This is important for screen reader users.\n * @param {number} value The thumb label's value to format.\n * @param {number} index The thumb label's index to format.\n * @returns {string}\n */\n getAriaValueText: PropTypes.func,\n /**\n * Marks indicate predetermined values to which the user can move the slider.\n * If `true` the marks are spaced according the value of the `step` prop.\n * If an array, it should contain objects with `value` and an optional `label` keys.\n * @default false\n */\n marks: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.shape({\n label: PropTypes.node,\n value: PropTypes.number.isRequired\n })), PropTypes.bool]),\n /**\n * The maximum allowed value of the slider.\n * Should not be equal to min.\n * @default 100\n */\n max: PropTypes.number,\n /**\n * The minimum allowed value of the slider.\n * Should not be equal to max.\n * @default 0\n */\n min: PropTypes.number,\n /**\n * Name attribute of the hidden `input` element.\n */\n name: PropTypes.string,\n /**\n * Callback function that is fired when the slider's value changed.\n *\n * @param {Event} event The event source of the callback.\n * You can pull out the new value by accessing `event.target.value` (any).\n * **Warning**: This is a generic event not a change event.\n * @param {Value} value The new value.\n * @param {number} activeThumb Index of the currently moved thumb.\n */\n onChange: PropTypes.func,\n /**\n * Callback function that is fired when the `mouseup` is triggered.\n *\n * @param {React.SyntheticEvent | Event} event The event source of the callback. **Warning**: This is a generic event not a change event.\n * @param {Value} value The new value.\n */\n onChangeCommitted: PropTypes.func,\n /**\n * The component orientation.\n * @default 'horizontal'\n */\n orientation: PropTypes.oneOf(['horizontal', 'vertical']),\n /**\n * A transformation function, to change the scale of the slider.\n * @param {any} x\n * @returns {any}\n * @default function Identity(x) {\n * return x;\n * }\n */\n scale: PropTypes.func,\n /**\n * The granularity with which the slider can step through values when using Page Up/Page Down or Shift + Arrow Up/Arrow Down.\n * @default 10\n */\n shiftStep: PropTypes.number,\n /**\n * The size of the slider.\n * @default 'medium'\n */\n size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['small', 'medium']), PropTypes.string]),\n /**\n * The props used for each slot inside the Slider.\n * @default {}\n */\n slotProps: PropTypes.shape({\n input: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n mark: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n markLabel: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n rail: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n root: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n thumb: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n track: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n valueLabel: PropTypes.oneOfType([PropTypes.func, PropTypes.shape({\n children: PropTypes.element,\n className: PropTypes.string,\n open: PropTypes.bool,\n style: PropTypes.object,\n value: PropTypes.node,\n valueLabelDisplay: PropTypes.oneOf(['auto', 'off', 'on'])\n })])\n }),\n /**\n * The components used for each slot inside the Slider.\n * Either a string to use a HTML element or a component.\n * @default {}\n */\n slots: PropTypes.shape({\n input: PropTypes.elementType,\n mark: PropTypes.elementType,\n markLabel: PropTypes.elementType,\n rail: PropTypes.elementType,\n root: PropTypes.elementType,\n thumb: PropTypes.elementType,\n track: PropTypes.elementType,\n valueLabel: PropTypes.elementType\n }),\n /**\n * The granularity with which the slider can step through values. (A \"discrete\" slider.)\n * The `min` prop serves as the origin for the valid values.\n * We recommend (max - min) to be evenly divisible by the step.\n *\n * When step is `null`, the thumb can only be slid onto marks provided with the `marks` prop.\n * @default 1\n */\n step: PropTypes.number,\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n /**\n * Tab index attribute of the hidden `input` element.\n */\n tabIndex: PropTypes.number,\n /**\n * The track presentation:\n *\n * - `normal` the track will render a bar representing the slider value.\n * - `inverted` the track will render a bar representing the remaining slider value.\n * - `false` the track will render without a bar.\n * @default 'normal'\n */\n track: PropTypes.oneOf(['inverted', 'normal', false]),\n /**\n * The value of the slider.\n * For ranged sliders, provide an array with two values.\n */\n value: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.number]),\n /**\n * Controls when the value label is displayed:\n *\n * - `auto` the value label will display when the thumb is hovered or focused.\n * - `on` will display persistently.\n * - `off` will never display.\n * @default 'off'\n */\n valueLabelDisplay: PropTypes.oneOf(['auto', 'off', 'on']),\n /**\n * The format function the value label's value.\n *\n * When a function is provided, it should have the following signature:\n *\n * - {number} value The value label's value to format\n * - {number} index The value label's index to format\n * @param {any} x\n * @returns {any}\n * @default function Identity(x) {\n * return x;\n * }\n */\n valueLabelFormat: PropTypes.oneOfType([PropTypes.func, PropTypes.string])\n} : void 0;\nexport default Slider;","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar numberTag = '[object Number]';\n\n/**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\nfunction isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n}\n\nexport default isNumber;\n","import { Stack, Typography, useTheme, type SxProps } from \"@mui/material\"\nimport Slider from \"@mui/material/Slider\"\nimport isNumber from \"lodash-es/isNumber\"\nimport { observer } from \"mobx-react-lite\"\nimport type { ReactNode } from \"react\"\nimport { useTranslation } from \"react-i18next\"\nimport type { JoggingStore } from \"./jogging/JoggingStore\"\n\ntype VelocitySliderProps = {\n min: number\n max: number\n velocity: number\n onVelocityChange: (newVelocity: number) => void\n disabled?: boolean\n renderValue?: (value: number) => ReactNode\n store: JoggingStore\n}\n\n/** A slider for controlling the movement velocity of a robot */\nexport const VelocitySlider = observer((props: VelocitySliderProps) => {\n const theme = useTheme()\n const { store } = props\n const { t } = useTranslation()\n\n function onSliderChange(_event: Event, newVelocity: number | number[]) {\n if (newVelocity === props.velocity || !isNumber(newVelocity)) return\n\n props.onVelocityChange(newVelocity)\n }\n\n return (\n <Stack direction=\"row\" gap={2} alignItems=\"center\">\n {store.showVelocityLegend && (\n <Typography\n sx={{\n color:\n theme.componentsExt?.JoggingPanel?.VelocitySlider\n ?.sliderLegendColor,\n fontSize: \"14px\",\n }}\n >\n {t(\"Jogging.Velocity.bt\")}\n </Typography>\n )}\n <Slider\n value={props.velocity}\n color=\"secondary\"\n onChange={onSliderChange}\n min={props.min}\n max={props.max}\n aria-labelledby=\"input-slider\"\n disabled={props.disabled}\n sx={{\n \"& .MuiSlider-valueLabelOpen\": {\n zIndex: 100,\n backgroundColor: \"transparent\",\n top: \"0px\",\n },\n }}\n />\n {store.showVelocitySliderLabel &&\n (props.renderValue ? (\n props.renderValue(props.velocity)\n ) : (\n <VelocitySliderLabel value={props.velocity.toString()} />\n ))}\n </Stack>\n )\n})\n\ntype VelocitySliderLabelProps = {\n value: string\n sx?: SxProps\n}\n\nexport function VelocitySliderLabel({ value, sx }: VelocitySliderLabelProps) {\n const theme = useTheme()\n return (\n <Stack\n direction={\"row\"}\n justifyContent={\"center\"}\n alignItems={\"center\"}\n gap={\"5px\"}\n sx={{\n padding: \"6px 12px\",\n background: theme.palette.backgroundPaperElevation?.[8],\n borderRadius: \"10px\",\n minWidth: \"111px\",\n ...sx,\n }}\n >\n <Typography\n component=\"span\"\n sx={{\n textAlign: \"right\",\n fontSize: \"14px\",\n opacity: 0.8,\n color: theme.palette.text.primary,\n whiteSpace: \"nowrap\",\n }}\n >\n {value}\n </Typography>\n </Stack>\n )\n}\n","import { observer, useLocalObservable } from \"mobx-react-lite\"\nimport { useTranslation } from \"react-i18next\"\nimport { VelocitySlider, VelocitySliderLabel } from \"../VelocitySlider\"\nimport type { JoggingStore } from \"./JoggingStore\"\n\nexport const JoggingVelocitySlider = observer(\n ({ store }: { store: JoggingStore }) => {\n const { t } = useTranslation()\n\n const state = useLocalObservable(() => ({\n get valueLabelFormat() {\n if (store.currentMotionType === \"translate\") {\n return (value: number) =>\n `v = ${t(\"Jogging.Cartesian.Translation.velocityMmPerSec.lb\", { amount: value })}`\n } else {\n return (value: number) =>\n `ω = ${t(\"Jogging.Cartesian.Rotation.velocityDegPerSec.lb\", { amount: value })}`\n }\n },\n }))\n\n return (\n <VelocitySlider\n store={store}\n velocity={store.velocityInDisplayUnits}\n min={store.minVelocityInDisplayUnits}\n max={store.maxVelocityInDisplayUnits}\n onVelocityChange={store.setVelocityFromSlider}\n disabled={store.isLocked}\n renderValue={(value) => (\n <VelocitySliderLabel\n value={state.valueLabelFormat(value)}\n sx={{\n minWidth: \"111px\",\n span: {\n transform: \"translateY(-1.5px)\",\n },\n }}\n />\n )}\n />\n )\n },\n)\n","import {\n Divider,\n Stack,\n ToggleButton,\n Typography,\n useTheme,\n type Theme,\n} from \"@mui/material\"\nimport {\n degreesToRadians,\n radiansToDegrees,\n XYZ_TO_VECTOR,\n} from \"@wandelbots/nova-js\"\nimport { observer } from \"mobx-react-lite\"\nimport { useTranslation } from \"react-i18next\"\nimport XAxisIcon from \"../../icons/axis-x.svg\"\nimport YAxisIcon from \"../../icons/axis-y.svg\"\nimport ZAxisIcon from \"../../icons/axis-z.svg\"\nimport RotationIcon from \"../../icons/rotation.svg\"\nimport type { Vector3Simple } from \"../../lib/JoggerConnection\"\nimport { useReaction } from \"../utils/hooks\"\nimport { JoggingCartesianAxisControl } from \"./JoggingCartesianAxisControl\"\nimport { JoggingJointLimitDetector } from \"./JoggingJointLimitDetector\"\nimport { JoggingOptions } from \"./JoggingOptions\"\nimport type {\n DiscreteIncrementOption,\n JoggingAxis,\n JoggingDirection,\n JoggingStore,\n} from \"./JoggingStore\"\nimport { JoggingToggleButtonGroup } from \"./JoggingToggleButtonGroup\"\nimport { JoggingVelocitySlider } from \"./JoggingVelocitySlider\"\n\ntype JoggingCartesianOpts = {\n axis: JoggingAxis\n motionType: \"translate\" | \"rotate\"\n direction: JoggingDirection\n}\n\nexport const JoggingCartesianTab = observer(\n ({\n store,\n children,\n }: {\n store: JoggingStore\n children?: React.ReactNode\n }) => {\n const { t } = useTranslation()\n const theme = useTheme()\n\n function onMotionTypeChange(\n _event: React.MouseEvent<HTMLElement>,\n newMotionType: string,\n ) {\n if (newMotionType === \"translate\" || newMotionType === \"rotate\")\n store.setSelectedCartesianMotionType(newMotionType)\n }\n\n useReaction(\n () => [store.selectedCoordSystemId, store.selectedTcpId],\n () => {\n store.jogger.motionStream.motionStateSocket.changeUrl(\n store.jogger.nova.makeWebsocketURL(\n `/controllers/${store.jogger.motionStream.controllerId}/motion-groups/${store.jogger.motionGroupId}/state-stream?tcp=${store.selectedTcpId}`,\n ),\n )\n },\n { fireImmediately: true } as any,\n )\n\n async function runIncrementalCartesianJog(\n opts: JoggingCartesianOpts,\n increment: DiscreteIncrementOption,\n ) {\n const jogger = await store.activate()\n\n const tcpPose = jogger.motionStream.rapidlyChangingMotionState.tcp_pose\n const jointPosition = jogger.motionStream.rapidlyChangingMotionState\n .joint_position as Vector3Simple\n if (!tcpPose) return\n\n await store.withMotionLock(async () => {\n try {\n store.setCurrentIncrementJog({\n axis: opts.axis,\n direction: opts.direction,\n })\n await store.jogger.runIncrementalCartesianMotion({\n currentTcpPose: tcpPose,\n currentJoints: jointPosition,\n coordSystemId: store.activeCoordSystemId,\n velocityInRelevantUnits:\n store.selectedCartesianMotionType === \"translate\"\n ? store.translationVelocityMmPerSec\n : store.rotationVelocityRadsPerSec,\n axis: opts.axis,\n direction: opts.direction,\n motion:\n store.selectedCartesianMotionType === \"translate\"\n ? {\n type: \"translate\",\n distanceMm: increment.mm,\n }\n : {\n type: \"rotate\",\n distanceRads: degreesToRadians(increment.degrees),\n },\n })\n } finally {\n store.setCurrentIncrementJog(null)\n await store.deactivate()\n }\n })\n }\n\n async function startCartesianJogging(opts: JoggingCartesianOpts) {\n if (store.isLocked) return\n\n const jogger = await store.activate()\n if (store.activeDiscreteIncrement) {\n return runIncrementalCartesianJog(opts, store.activeDiscreteIncrement)\n }\n\n if (opts.motionType === \"translate\") {\n await store.jogger.translateTCP({\n axis: opts.axis,\n direction: opts.direction,\n velocityMmPerSec: store.translationVelocityMmPerSec,\n })\n } else {\n await store.jogger.rotateTCP({\n axis: opts.axis,\n direction: opts.direction,\n velocityRadsPerSec: store.rotationVelocityRadsPerSec,\n })\n }\n }\n\n async function stopJogging() {\n if (store.isLocked) return\n\n if (store.activeDiscreteIncrement) {\n return\n }\n\n await store.deactivate()\n }\n\n function getAxisColors(\n axisId: \"X\" | \"Y\" | \"Z\",\n motionType: \"translate\" | \"rotate\",\n theme: Theme,\n ) {\n const axisColors =\n theme.componentsExt?.JoggingPanel?.JoggingCartesian?.Axis\n\n if (!axisColors) return undefined\n\n if (motionType === \"translate\") {\n return axisColors[axisId]\n }\n\n return axisColors.CustomRotation ?? axisColors[axisId]\n }\n\n const axisList = [\n {\n id: \"x\",\n icon: <XAxisIcon />,\n colors: getAxisColors(\"X\", store.selectedCartesianMotionType, theme),\n },\n {\n id: \"y\",\n icon: <YAxisIcon />,\n colors: getAxisColors(\"Y\", store.selectedCartesianMotionType, theme),\n },\n {\n id: \"z\",\n icon: <ZAxisIcon />,\n colors: getAxisColors(\"Z\", store.selectedCartesianMotionType, theme),\n },\n ] as const\n\n function formatMM(value: number) {\n return t(\"General.mm.variable\", { amount: value.toFixed(1) })\n }\n\n function formatDegrees(value: number) {\n return t(\"General.degree.variable\", {\n amount: radiansToDegrees(value).toFixed(1),\n })\n }\n\n return (\n <Stack flexGrow={1} gap={2} sx={{ padding: \"18px 24px\" }}>\n <Stack gap={2}>\n <JoggingOptions store={store} />\n <JoggingVelocitySlider store={store} />\n <Divider />\n </Stack>\n\n <Stack\n //maxWidth=\"296px\"\n marginLeft=\"auto\"\n marginRight=\"auto\"\n gap=\"24px\"\n justifyContent=\"center\"\n sx={{ flexGrow: \"1\" }}\n >\n <Stack\n alignItems=\"center\"\n justifyContent=\"center\"\n gap=\"24px\"\n sx={{ flexGrow: 1 }}\n >\n {/* Translate or rotate toggle */}\n <JoggingToggleButtonGroup\n value={store.selectedCartesianMotionType}\n onChange={onMotionTypeChange}\n exclusive\n aria-label={t(\"Jogging.Cartesian.MotionType.lb\")}\n sx={{ justifyContent: \"center\" }}\n >\n <ToggleButton value=\"translate\">\n {t(\"Jogging.Cartesian.Translation.bt\")}\n </ToggleButton>\n <ToggleButton value=\"rotate\">\n {t(\"Jogging.Cartesian.Rotation.bt\")}\n </ToggleButton>\n </JoggingToggleButtonGroup>\n\n {/* Cartesian translate jogging */}\n {store.selectedCartesianMotionType === \"translate\" &&\n axisList.map((axis) => (\n <JoggingCartesianAxisControl\n key={axis.id}\n colors={axis.colors}\n disabled={store.isLocked}\n activeJoggingDirection={\n store.incrementJogInProgress?.axis === axis.id\n ? store.incrementJogInProgress.direction\n : undefined\n }\n label={\n <>\n {axis.icon}\n <Typography\n sx={{\n fontSize: \"24px\",\n color:\n axis.colors?.labelColor ??\n theme.palette.text.primary,\n }}\n >\n {axis.id.toUpperCase()}\n </Typography>\n </>\n }\n getDisplayedValue={() =>\n formatMM(\n store.jogger.motionStream.rapidlyChangingMotionState\n .tcp_pose?.position?.[XYZ_TO_VECTOR[axis.id]] || 0,\n )\n }\n startJogging={(direction: \"-\" | \"+\") =>\n startCartesianJogging({\n axis: axis.id,\n motionType: \"translate\",\n direction,\n })\n }\n stopJogging={stopJogging}\n />\n ))}\n\n {/* Cartesian rotate jogging */}\n {store.selectedCartesianMotionType === \"rotate\" &&\n axisList.map((axis) => (\n <JoggingCartesianAxisControl\n key={axis.id}\n colors={axis.colors}\n disabled={store.isLocked}\n activeJoggingDirection={\n store.incrementJogInProgress?.axis === axis.id\n ? store.incrementJogInProgress.direction\n : undefined\n }\n label={\n <>\n <RotationIcon />\n <Typography\n sx={{\n fontSize: \"24px\",\n color:\n axis.colors?.labelColor ??\n theme.palette.text.primary,\n }}\n >\n {axis.id.toUpperCase()}\n </Typography>\n </>\n }\n getDisplayedValue={() =>\n formatDegrees(\n store.jogger.motionStream.rapidlyChangingMotionState\n .tcp_pose?.orientation?.[XYZ_TO_VECTOR[axis.id]] || 0,\n )\n }\n startJogging={(direction: \"-\" | \"+\") =>\n startCartesianJogging({\n axis: axis.id,\n motionType: \"rotate\",\n direction,\n })\n }\n stopJogging={stopJogging}\n />\n ))}\n </Stack>\n </Stack>\n\n {/* Show message if joint limits reached */}\n <JoggingJointLimitDetector store={store} />\n\n {children && <Divider />}\n\n {/* Custom content */}\n\n {children}\n </Stack>\n )\n },\n)\n","import { Divider, Stack, Typography, useTheme } from \"@mui/material\"\nimport { radiansToDegrees } from \"@wandelbots/nova-js\"\nimport { observer } from \"mobx-react-lite\"\nimport type { ReactNode } from \"react\"\nimport { JoggingJointLimitDetector } from \"./JoggingJointLimitDetector\"\nimport { JoggingJointRotationControl } from \"./JoggingJointRotationControl\"\nimport type { JoggingStore } from \"./JoggingStore\"\nimport { JoggingVelocitySlider } from \"./JoggingVelocitySlider\"\n\nexport const JoggingJointTab = observer(\n ({ store, children }: { store: JoggingStore; children: ReactNode }) => {\n const theme = useTheme()\n async function startJointJogging(opts: {\n joint: number\n direction: \"-\" | \"+\"\n }) {\n await store.activate()\n\n await store.jogger.rotateJoints({\n joint: opts.joint,\n direction: opts.direction,\n velocityRadsPerSec: store.rotationVelocityRadsPerSec,\n })\n }\n\n async function stopJointJogging() {\n await store.jogger.stop()\n await store.deactivate()\n }\n\n return (\n <Stack flexGrow={1} gap={2} sx={{ padding: \"18px 24px\" }}>\n <JoggingVelocitySlider store={store} />\n <Divider />\n\n <Stack\n justifyContent=\"center\"\n alignItems=\"stretch\"\n sx={{ flexGrow: \"1\" }}\n >\n <Stack alignItems=\"center\" gap=\"24px\">\n {store.jogger.motionStream.joints.map((joint) => {\n const jointLimits =\n store.motionGroupDescription.operation_limits.auto_limits\n ?.joints?.[joint.index]?.position\n const lowerLimitDegs =\n jointLimits?.lower_limit !== undefined\n ? radiansToDegrees(jointLimits.lower_limit)\n : undefined\n const upperLimitDegs =\n jointLimits?.upper_limit !== undefined\n ? radiansToDegrees(jointLimits.upper_limit)\n : undefined\n\n return (\n <Stack\n key={`joint-${joint.index}`}\n direction=\"row\"\n alignItems=\"center\"\n justifyContent={\"center\"}\n spacing={1.5}\n width={\"100%\"}\n >\n {store.showJointsLegend && (\n <Typography\n color={\n store.isLocked\n ? theme.palette.text.disabled\n : theme.palette.text.secondary\n }\n >\n {`G${joint.index + 1}`}\n </Typography>\n )}\n\n <JoggingJointRotationControl\n disabled={store.isLocked}\n lowerLimitDegs={lowerLimitDegs}\n upperLimitDegs={upperLimitDegs}\n getValueDegs={() => {\n const value =\n store.jogger.motionStream.rapidlyChangingMotionState\n .joint_position[joint.index]\n return value !== undefined\n ? radiansToDegrees(value)\n : undefined\n }}\n startJogging={(direction: \"-\" | \"+\") =>\n startJointJogging({\n joint: joint.index,\n direction,\n })\n }\n stopJogging={stopJointJogging}\n />\n </Stack>\n )\n })}\n </Stack>\n </Stack>\n <JoggingJointLimitDetector store={store} />\n\n {children && <Divider />}\n\n {/* Custom content */}\n {children}\n </Stack>\n )\n },\n)\n","import MoveIcon from \"@mui/icons-material/OpenWith\"\nimport ShareIcon from \"@mui/icons-material/Share\"\nimport { Stack, Tab, Tabs, type SxProps } from \"@mui/material\"\nimport { NovaClient } from \"@wandelbots/nova-js/v2\"\nimport { isString } from \"lodash-es\"\nimport { runInAction } from \"mobx\"\nimport { observer, useLocalObservable } from \"mobx-react-lite\"\nimport { useEffect } from \"react\"\nimport { useTranslation } from \"react-i18next\"\nimport { externalizeComponent } from \"../../externalizeComponent\"\nimport { JoggerConnection } from \"../../lib/JoggerConnection\"\nimport { LoadingCover } from \"../LoadingCover\"\nimport { JoggingBlocked } from \"./JoggingBlocked\"\nimport { JoggingCartesianTab } from \"./JoggingCartesianTab\"\nimport { JoggingJointTab } from \"./JoggingJointTab\"\nimport { JoggingStore } from \"./JoggingStore\"\n\nexport type JoggingPanelTabId = \"cartesian\" | \"joint\"\n\nexport type JoggingPanelProps = {\n /** Either an existing NovaClient or the base url of a deployed Nova instance */\n nova: NovaClient | string\n /** Id of the motion group to move e.g. 0@ur5e */\n motionGroupId: string\n /** Callback with the jogging panel's state store for further customization/config */\n onSetup?: (store: JoggingStore) => void\n /** Any children will go at the bottom of the panel under the default contents */\n children?: React.ReactNode\n /** Set this to true to disable jogging UI temporarily e.g. when a program is executing */\n locked?: boolean\n sx?: SxProps\n\n /**\n * To preserve state while the jogging panel is hidden, you can create and pass a\n * JoggingStore here and it will be used instead of creating a new one.\n */\n store?: JoggingStore\n}\n\n/**\n * A high-level, opinionated UI panel for jogging a robot using the Wandelbots Platform API\n */\nexport const JoggingPanel = externalizeComponent(\n observer((props: JoggingPanelProps) => {\n const nova = isString(props.nova)\n ? new NovaClient({ instanceUrl: props.nova })\n : props.nova\n\n const state = useLocalObservable(() => ({\n joggingStore: null as JoggingStore | null,\n loadingError: null as unknown | null,\n }))\n\n async function init() {\n runInAction(() => {\n state.loadingError = null\n state.joggingStore = null\n })\n\n try {\n let joggingStore = props.store\n if (!joggingStore) {\n const jogger = await JoggerConnection.open(nova, props.motionGroupId)\n joggingStore = await JoggingStore.loadFor(jogger)\n }\n runInAction(() => {\n state.joggingStore = joggingStore\n })\n if (props.onSetup) {\n props.onSetup(joggingStore)\n }\n } catch (err) {\n state.loadingError = err\n }\n }\n\n useEffect(() => {\n init()\n return props.store\n ? () => null\n : () => {\n state.joggingStore?.dispose()\n }\n }, [props.store, props.nova, props.motionGroupId])\n\n useEffect(() => {\n const store = state.joggingStore\n if (!store) return\n\n if (props.locked) {\n store.lock(\"external\")\n } else {\n store.unlock(\"external\")\n }\n }, [state.joggingStore, props.locked])\n\n return (\n <Stack\n sx={{\n maxWidth: \"460px\",\n minWidth: \"320px\",\n position: \"relative\",\n ...props.sx,\n }}\n >\n {state.joggingStore ? (\n <JoggingPanelInner\n store={state.joggingStore}\n children={props.children}\n ></JoggingPanelInner>\n ) : (\n <LoadingCover message=\"Loading jogging\" error={state.loadingError} />\n )}\n </Stack>\n )\n }),\n)\n\nconst JoggingPanelInner = observer(\n ({\n store,\n children,\n }: {\n store: JoggingStore\n children?: React.ReactNode\n childrenJoint?: React.ReactNode\n }) => {\n const { t } = useTranslation()\n\n function renderTabContent() {\n if (store.currentTab.id === \"cartesian\") {\n return (\n <>\n <JoggingCartesianTab store={store}>{children}</JoggingCartesianTab>\n </>\n )\n } else if (store.currentTab.id === \"joint\") {\n return (\n <>\n <JoggingJointTab store={store}>{children}</JoggingJointTab>\n </>\n )\n }\n }\n\n return (\n <Stack flexGrow={1} sx={{ overflow: \"hidden\" }}>\n {/* Tab selection */}\n <Tabs\n value={store.tabIndex}\n onChange={store.onTabChange}\n variant=\"fullWidth\"\n >\n {store.tabs.map((tab) => {\n const label =\n tab.label === \"cartesian\"\n ? t(\"Jogging.Cartesian.bt\")\n : t(\"Jogging.Joints.bt\")\n\n const icon =\n tab.label === \"cartesian\" ? (\n <MoveIcon fontSize=\"small\" sx={{ mr: 1 }} />\n ) : (\n <ShareIcon fontSize=\"small\" sx={{ mr: 1 }} />\n )\n\n return (\n <Tab\n key={tab.id}\n label={\n store.showTabIcons ? (\n <Stack direction=\"row\" alignItems=\"center\">\n {icon}\n {label}\n </Stack>\n ) : (\n label\n )\n }\n id={`jogging-tab-${tab.id}`}\n aria-controls={`jogging-tab-${tab.id}`}\n />\n )\n })}\n </Tabs>\n {/* Current tab content */}\n <Stack\n flexGrow={1}\n position=\"relative\"\n sx={{ overflowY: \"auto\", overflowX: \"hidden\" }}\n >\n {renderTabContent()}\n </Stack>\n {/* Overlay when jogging connection is blocked */}\n {store.blocked && <JoggingBlocked store={store} />}\n </Stack>\n )\n },\n)\n","import { Stack, Tooltip, Typography, useTheme } from \"@mui/material\"\nimport { useEffect, useState } from \"react\"\n\nexport const CopyableText = (props: {\n label?: string\n value: string\n ref?: React.Ref<HTMLDivElement>\n}) => {\n const { value, ref } = props\n // Note: label prop is available but not currently used in the component\n const theme = useTheme()\n const [tooltipOpen, setTooltipOpen] = useState(false)\n\n async function onCopyText(): Promise<boolean> {\n if (!ref || !(\"current\" in ref)) {\n console.warn(\"No copy target found\")\n return false\n }\n try {\n await navigator.clipboard.writeText(value)\n console.log(\"Copied!\")\n setTooltipOpen(true)\n return true\n } catch (err) {\n // Direct clipboard copy is not available in non-secure contexts\n console.error(err)\n\n // Let's fall back to selecting the text so the user can manually copy easily\n const selection = window.getSelection()\n if (selection && ref && \"current\" in ref && ref.current) {\n const range = document.createRange()\n range.selectNodeContents(ref.current)\n selection.removeAllRanges()\n selection.addRange(range)\n }\n }\n return false\n }\n\n useEffect(() => {\n if (!tooltipOpen) {\n return\n }\n const timeoutId = setTimeout(() => setTooltipOpen(false), 3000)\n return () => {\n timeoutId ? clearTimeout(timeoutId) : {}\n }\n }, [tooltipOpen])\n\n return (\n <Tooltip open={tooltipOpen} title=\"Copied!\">\n <Stack\n justifyContent=\"center\"\n sx={{\n height: \"100%\",\n boxSizing: \"border-box\",\n padding: \"6px 12px\",\n background: theme.palette.backgroundPaperElevation?.[8],\n borderRadius: \"10px\",\n minWidth: \"0\",\n cursor: \"pointer\",\n }}\n onClick={() => onCopyText()}\n >\n <Typography\n ref={ref}\n align=\"center\"\n sx={{\n pointerEvents: \"none\",\n fontSize: \"12px\",\n color: theme.palette.text.primary,\n whiteSpace: \"nowrap\",\n minWidth: 0,\n textOverflow: \"ellipsis\",\n width: \"100%\",\n overflow: \"hidden\",\n }}\n >\n {value}\n </Typography>\n </Stack>\n </Tooltip>\n )\n}\n","import { Button, Stack } from \"@mui/material\"\nimport { poseToWandelscriptString, type Pose } from \"@wandelbots/nova-js/v2\"\nimport { observer } from \"mobx-react-lite\"\nimport { useState } from \"react\"\nimport { externalizeComponent } from \"../../externalizeComponent\"\nimport { CopyableText } from \"../CopyableText\"\n\nexport type PoseCartesianValuesProps = {\n tcpPose: Pose\n showCopyButton?: boolean\n}\n\nexport const PoseCartesianValues = externalizeComponent(\n observer(({ tcpPose, showCopyButton = false }: PoseCartesianValuesProps) => {\n const [copyMessage, setCopyMessage] = useState<string | null>(null)\n const poseString = poseToWandelscriptString(tcpPose)\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(poseString)\n setCopyMessage(\"Copied!\")\n setTimeout(() => setCopyMessage(null), 2000)\n } catch {\n setCopyMessage(\"Copy failed\")\n setTimeout(() => setCopyMessage(null), 2000)\n }\n }\n\n return (\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n spacing={1}\n sx={{ flexGrow: 1, minWidth: 0, overflow: \"hidden\" }}\n data-testid=\"pose-cartesian-values\"\n >\n <CopyableText value={poseString} />\n {showCopyButton && (\n <Button\n variant=\"contained\"\n color=\"secondary\"\n size=\"small\"\n onClick={handleCopy}\n sx={{ flexShrink: 0 }}\n >\n {copyMessage ? copyMessage : \"Copy\"}\n </Button>\n )}\n </Stack>\n )\n }),\n)\n","import { Button, Stack } from \"@mui/material\"\nimport { observer } from \"mobx-react-lite\"\nimport { useState } from \"react\"\nimport { externalizeComponent } from \"../../externalizeComponent\"\nimport { CopyableText } from \"../CopyableText\"\n\nexport type PoseJointValuesProps = {\n joints: Array<number>\n showCopyButton?: boolean\n}\n\nexport const PoseJointValues = externalizeComponent(\n observer(({ joints, showCopyButton = false }: PoseJointValuesProps) => {\n const [copyMessage, setCopyMessage] = useState<string | null>(null)\n const poseString = `[${joints.map((j: number) => parseFloat(j.toFixed(4))).join(\", \")}]`\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(poseString)\n setCopyMessage(\"Copied!\")\n setTimeout(() => setCopyMessage(null), 2000)\n } catch {\n setCopyMessage(\"Copy failed\")\n setTimeout(() => setCopyMessage(null), 2000)\n }\n }\n\n return (\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n spacing={1}\n sx={{ flexGrow: 1, minWidth: 0, overflow: \"hidden\" }}\n data-testid=\"pose-joint-values\"\n >\n <CopyableText value={poseString} />\n {showCopyButton && (\n <Button\n variant=\"contained\"\n color=\"secondary\"\n size=\"small\"\n onClick={handleCopy}\n sx={{ flexShrink: 0 }}\n >\n {copyMessage ? copyMessage : \"Copy\"}\n </Button>\n )}\n </Stack>\n )\n }),\n)\n","import { action, makeObservable, observable } from \"mobx\"\nimport type { LogLevel, LogMessage } from \"./LogViewer\"\n\nexport class LogStore {\n messages: LogMessage[] = []\n\n constructor() {\n makeObservable(this, {\n messages: observable,\n addMessage: action,\n clearMessages: action,\n })\n }\n\n addMessage = (message: string, level: LogLevel = \"info\") => {\n const logMessage: LogMessage = {\n id: Math.random().toString(36).substring(2, 11),\n timestamp: new Date(),\n message,\n level,\n }\n this.messages.push(logMessage)\n }\n\n clearMessages = () => {\n this.messages = []\n }\n\n addInfo = (message: string) => {\n this.addMessage(message, \"info\")\n }\n\n addWarning = (message: string) => {\n this.addMessage(message, \"warning\")\n }\n\n addError = (message: string) => {\n this.addMessage(message, \"error\")\n }\n\n addDebug = (message: string) => {\n this.addMessage(message, \"debug\")\n }\n}\n","import {\n ContentCopy,\n DescriptionOutlined as DocumentIcon,\n ExpandLess,\n ExpandMore,\n} from \"@mui/icons-material\"\nimport type { SxProps } from \"@mui/material\"\nimport {\n Box,\n Button,\n IconButton,\n Paper,\n Typography,\n useTheme,\n} from \"@mui/material\"\nimport { observer } from \"mobx-react-lite\"\nimport { useEffect, useRef, useState } from \"react\"\nimport { externalizeComponent } from \"../externalizeComponent\"\n\nexport type LogLevel = \"info\" | \"error\" | \"warning\" | \"debug\"\n\nexport type LogMessage = {\n id: string\n timestamp: Date\n message: string\n level: LogLevel\n}\n\nexport type LogViewerProps = {\n /** Log messages to display */\n messages: LogMessage[]\n /** Callback when clear button is clicked */\n onClear?: () => void\n /** Height of the component */\n height?: string | number\n /** Additional styles */\n sx?: SxProps\n}\n\n/**\n * Utility function to create a log message\n */\nexport const createLogMessage = (\n message: string,\n level: LogLevel,\n id?: string,\n): LogMessage => ({\n id: id || `${Date.now()}-${Math.random().toString(36).substring(2, 11)}`,\n timestamp: new Date(),\n message,\n level,\n})\n\n/**\n * Utility function to create a debug log message\n */\nexport const createDebugMessage = (message: string, id?: string): LogMessage =>\n createLogMessage(message, \"debug\", id)\n\n/**\n * Utility function to create an info log message\n */\nexport const createInfoMessage = (message: string, id?: string): LogMessage =>\n createLogMessage(message, \"info\", id)\n\n/**\n * Utility function to create a warning log message\n */\nexport const createWarningMessage = (\n message: string,\n id?: string,\n): LogMessage => createLogMessage(message, \"warning\", id)\n\n/**\n * Utility function to create an error log message\n */\nexport const createErrorMessage = (message: string, id?: string): LogMessage =>\n createLogMessage(message, \"error\", id)\n\n/**\n * A log viewer component that displays timestamped log messages with different levels.\n * Features a header with document icon and clear button, and scrollable message area.\n */\nexport const LogViewer = externalizeComponent(\n observer((props: LogViewerProps) => {\n const { messages = [], onClear, height = 400, sx } = props\n const theme = useTheme()\n const scrollContainerRef = useRef<HTMLDivElement>(null)\n\n // Auto-scroll to bottom when new messages are added\n useEffect(() => {\n if (messages.length === 0) return\n\n const scrollContainer = scrollContainerRef.current\n if (!scrollContainer) return\n\n // Use a timeout to scroll after the DOM updates\n const timeoutId = setTimeout(() => {\n // Scroll the container to the bottom, not the entire browser\n scrollContainer.scrollTop = scrollContainer.scrollHeight\n }, 10)\n\n return () => clearTimeout(timeoutId)\n }, [messages.length])\n\n const formatTimestamp = (timestamp: Date) => {\n return timestamp.toLocaleTimeString(\"en-US\", {\n hour12: false,\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n })\n }\n\n const getMessageColor = (level: LogLevel) => {\n switch (level) {\n case \"error\":\n return theme.palette.error.main\n case \"warning\":\n return theme.palette.warning.main\n case \"info\":\n return theme.palette.info.main\n case \"debug\":\n return theme.palette.text.disabled\n default:\n return theme.palette.text.secondary\n }\n }\n\n // Component for individual log messages with expand/copy functionality\n const LogMessage = ({ message }: { message: LogMessage }) => {\n const [isExpanded, setIsExpanded] = useState(false)\n const [copyTooltip, setCopyTooltip] = useState(false)\n const [isHovered, setIsHovered] = useState(false)\n const isLongMessage = message.message.length > 150\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(message.message)\n setCopyTooltip(true)\n setTimeout(() => setCopyTooltip(false), 2000)\n } catch (err) {\n console.error(\"Failed to copy message:\", err)\n }\n }\n\n const displayMessage =\n isLongMessage && !isExpanded\n ? message.message.substring(0, 150) + \"...\"\n : message.message\n\n return (\n <Box\n key={message.id}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n sx={{\n display: \"flex\",\n gap: 1,\n fontFamily: \"monospace\",\n flexDirection: \"column\",\n \"&:hover\": {\n backgroundColor: theme.palette.action.hover,\n },\n borderRadius: \"4px\",\n padding: \"2px 4px\",\n margin: \"-2px -4px\",\n }}\n >\n <Box sx={{ display: \"flex\", gap: 1 }}>\n {/* Timestamp */}\n <Typography\n component=\"span\"\n sx={{\n fontWeight: 400,\n fontSize: \"12px\",\n lineHeight: \"18px\",\n letterSpacing: \"0.4px\",\n color: theme.palette.text.disabled,\n whiteSpace: \"nowrap\",\n flexShrink: 0,\n }}\n >\n [{formatTimestamp(message.timestamp)}]\n </Typography>\n\n {/* Message */}\n <Typography\n component=\"span\"\n sx={{\n fontWeight: 400,\n fontSize: \"12px\",\n lineHeight: \"18px\",\n letterSpacing: \"0.4px\",\n color: getMessageColor(message.level),\n wordBreak: \"break-word\",\n overflowWrap: \"anywhere\",\n hyphens: \"auto\",\n flex: 1,\n whiteSpace: \"pre-wrap\",\n }}\n >\n {displayMessage}\n </Typography>\n\n {/* Action buttons - only visible on hover */}\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"flex-start\",\n gap: 0.5,\n opacity: isHovered ? 1 : 0,\n transition: \"opacity 0.2s ease-in-out\",\n visibility: isHovered ? \"visible\" : \"hidden\",\n }}\n >\n <IconButton\n size=\"small\"\n onClick={handleCopy}\n sx={{\n padding: \"2px\",\n color: theme.palette.text.secondary,\n \"&:hover\": {\n backgroundColor: theme.palette.action.hover,\n },\n }}\n title={copyTooltip ? \"Copied!\" : \"Copy message\"}\n >\n <ContentCopy sx={{ fontSize: 12 }} />\n </IconButton>\n\n {isLongMessage && (\n <IconButton\n size=\"small\"\n onClick={() => setIsExpanded(!isExpanded)}\n sx={{\n padding: \"2px\",\n color: theme.palette.text.secondary,\n \"&:hover\": {\n backgroundColor: theme.palette.action.hover,\n },\n }}\n title={isExpanded ? \"Collapse\" : \"Expand\"}\n >\n {isExpanded ? (\n <ExpandLess sx={{ fontSize: 12 }} />\n ) : (\n <ExpandMore sx={{ fontSize: 12 }} />\n )}\n </IconButton>\n )}\n </Box>\n </Box>\n </Box>\n )\n }\n\n return (\n <Paper\n sx={{\n backgroundColor:\n theme.palette.backgroundPaperElevation?.[2] || \"#171927\",\n backgroundImage: \"none\", // Override any gradient from elevation\n height,\n display: \"flex\",\n flexDirection: \"column\",\n overflow: \"hidden\",\n ...sx,\n }}\n >\n {/* Header */}\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: \"12px 16px\",\n }}\n >\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\n <DocumentIcon\n sx={{\n fontSize: 16,\n color: theme.palette.action.active,\n opacity: 0.56,\n }}\n />\n <Typography\n sx={{\n fontWeight: 500,\n fontSize: \"14px\",\n lineHeight: \"143%\",\n letterSpacing: \"0.17px\",\n color: theme.palette.text.primary,\n }}\n >\n Log\n </Typography>\n </Box>\n <Button\n onClick={onClear}\n variant=\"text\"\n sx={{\n fontWeight: 500,\n fontSize: \"13px\",\n lineHeight: \"22px\",\n letterSpacing: \"0.46px\",\n color: theme.palette.primary.main,\n textTransform: \"none\",\n minWidth: \"auto\",\n padding: \"4px 8px\",\n \"&:hover\": {\n backgroundColor: theme.palette.primary.main + \"14\", // 8% opacity\n },\n }}\n >\n Clear\n </Button>\n </Box>\n\n {/* Messages Container */}\n <Box\n ref={scrollContainerRef}\n sx={{\n flex: 1,\n overflow: \"auto\",\n padding: \"8px 16px\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"2px\",\n // Custom scrollbar styling to keep it consistently dark\n scrollbarWidth: \"thin\",\n scrollbarColor: `${theme.palette.divider} transparent`,\n \"&::-webkit-scrollbar\": {\n width: \"6px\",\n },\n \"&::-webkit-scrollbar-track\": {\n background: \"transparent\",\n },\n \"&::-webkit-scrollbar-thumb\": {\n backgroundColor: theme.palette.divider,\n borderRadius: \"3px\",\n \"&:hover\": {\n backgroundColor: theme.palette.divider,\n },\n },\n }}\n >\n {messages.length === 0 ? (\n <Typography\n sx={{\n color: theme.palette.text.disabled,\n fontSize: \"12px\",\n fontStyle: \"italic\",\n textAlign: \"center\",\n marginTop: 2,\n }}\n >\n No log messages\n </Typography>\n ) : (\n messages.map((message) => (\n <LogMessage key={message.id} message={message} />\n ))\n )}\n </Box>\n </Paper>\n )\n }),\n)\n","import type { SxProps } from \"@mui/material\"\nimport { observer } from \"mobx-react-lite\"\nimport { useEffect, useMemo, useRef } from \"react\"\nimport { externalizeComponent } from \"../externalizeComponent\"\nimport { LogStore } from \"./LogStore\"\nimport { LogViewer } from \"./LogViewer\"\n\nexport type LogPanelProps = {\n /** Log store instance to use, or create one automatically if not provided */\n store?: LogStore\n /** Height of the component */\n height?: string | number\n /** Additional styles */\n sx?: SxProps\n /** Ref to the log store for external access */\n onStoreReady?: (store: LogStore) => void\n}\n\n/**\n * A complete log panel component with built-in state management.\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const [logStore, setLogStore] = useState<LogStore>()\n *\n * return (\n * <LogPanel\n * height={400}\n * onStoreReady={setLogStore}\n * />\n * )\n * }\n *\n * // Then use the store to add messages\n * logStore?.addInfo(\"Operation completed successfully\")\n * logStore?.addError(\"Something went wrong\")\n * logStore?.addWarning(\"Warning message\")\n * ```\n */\nexport const LogPanel = externalizeComponent(\n observer((props: LogPanelProps) => {\n const { store: externalStore, onStoreReady, ...logViewerProps } = props\n const onStoreReadyRef = useRef(onStoreReady)\n\n // Update ref when callback changes\n useEffect(() => {\n onStoreReadyRef.current = onStoreReady\n }, [onStoreReady])\n\n const store = useMemo(() => {\n const logStore = externalStore || new LogStore()\n onStoreReadyRef.current?.(logStore)\n return logStore\n }, [externalStore])\n\n const handleClear = () => {\n store.clearMessages()\n }\n\n return (\n <LogViewer\n {...logViewerProps}\n messages={store.messages}\n onClear={handleClear}\n />\n )\n }),\n)\n","import {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Stack,\n Typography,\n} from \"@mui/material\"\n\nfunction getBaseUrl(): string {\n const currentUrl = window.location.href\n return currentUrl.substring(\n 0,\n currentUrl.indexOf(\"/\", currentUrl.indexOf(\"//\") + 2),\n )\n}\n\nexport type NoMotionGroupModalProps = {\n baseUrl: string\n}\n\nexport function NoMotionGroupModal({\n baseUrl = getBaseUrl(),\n ...props\n}: NoMotionGroupModalProps) {\n return (\n <Dialog\n aria-labelledby=\"no-motion-group-modal-title\"\n open={true}\n fullWidth\n sx={{\n \"& .MuiModal-backdrop\": {\n backdropFilter: \"blur(10px)\",\n },\n \"& .MuiDialog-paper\": {\n \"::before\": {\n content: '\"\"',\n height: \"8px\",\n width: \"100%\",\n background: \"linear-gradient(90deg, #FF0E65 0%, #47D3FF 100%)\",\n },\n background: \"#101629\",\n },\n }}\n >\n <DialogTitle id=\"no-motion-group-modal-title\">\n No motion group found\n </DialogTitle>\n\n <DialogContent\n sx={{\n marginTop: \"3rem\",\n marginBottom: \"1.5rem\",\n textAlign: \"center\",\n }}\n >\n <Typography color=\"#fff\">Found no devices to connect to.</Typography>\n <Typography color=\"#fff\">\n Please ensure a motion group has been created.\n </Typography>\n </DialogContent>\n\n <DialogActions>\n <Stack width=\"100%\" maxWidth=\"300px\" margin=\"auto\" marginBottom=\"2rem\">\n <Button\n href={`${baseUrl}/settings`}\n variant=\"contained\"\n sx={{\n borderRadius: \"8px\",\n width: \"100%\",\n }}\n >\n Go to settings app\n </Button>\n <Button\n href={`${baseUrl}`}\n variant=\"text\"\n sx={{\n marginTop: \"1rem\",\n color: \"#fff\",\n textDecoration: \"underline\",\n fontSize: \"0.75rem\",\n }}\n >\n Back to Homescreen\n </Button>\n </Stack>\n </DialogActions>\n </Dialog>\n )\n}\n","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m1 15h-2v-2h2zm0-4h-2V7h2z\"\n}), 'Error');","import * as React from \"react\";\nimport { forwardRef } from \"react\";\nconst SvgRobot = ({\n title,\n titleId,\n ...props\n}, ref) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 18, height: 18, fill: \"none\", ref, \"aria-labelledby\": titleId, ...props }, title ? /* @__PURE__ */ React.createElement(\"title\", { id: titleId }, title) : null, /* @__PURE__ */ React.createElement(\"path\", { fill: \"#38C6F4\", fillRule: \"evenodd\", d: \"M6.359 14.25v2.934h7.63v-3.521L10.196 9.87 9 8.674l.859-.859.337-.337.858-.858.565.565.631.63.565.565 1.196-1.195.543-.544 1.196-1.195-1.196-1.196-2.304-2.304L11.054.75 9.86 1.946 3.446 8.359 2.25 9.554l1.196 1.196 2.913 2.913zm1.69 0v1.244h4.249v-1.13L7.804 9.87 6.608 8.674l1.196-1.196L9.86 5.424l.007-.008-.543-.543-4.681 4.681 2.912 2.913.496.496v.113h2.124l1.174 1.174zm3.005-10.022-.294.294-.543-.543.837-.837 2.304 2.304-.543.543-.565-.565z\", clipRule: \"evenodd\" }));\nconst ForwardRef = forwardRef(SvgRobot);\nexport default ForwardRef;\n","import { Box, Chip, Typography, useTheme } from \"@mui/material\"\nimport { observer } from \"mobx-react-lite\"\nimport { useTranslation } from \"react-i18next\"\nimport { externalizeComponent } from \"../externalizeComponent\"\n\n/**\n * Enum representing the robot setup readiness state\n */\nexport enum RobotSetupReadinessState {\n /** Preconditions are not fulfilled for robot operation */\n PRECONDITION_NOT_FULFILLED = \"PRECONDITION_NOT_FULFILLED\",\n /** Robot is disconnected from the system */\n ROBOT_DISCONNECTED = \"ROBOT_DISCONNECTED\",\n /** Safety cell is open and robot cannot operate */\n CELL_OPEN = \"CELL_OPEN\",\n /** Emergency stop is active and robot cannot operate */\n E_STOP = \"E_STOP\",\n /** Robot is in manual mode and requires manual intervention */\n MANUAL_MODE = \"MANUAL_MODE\",\n /** Robot is ready for operation */\n READY = \"READY\",\n}\n\nexport interface RobotSetupReadinessIndicatorProps {\n /** The current setup readiness state of the robot */\n setupState: RobotSetupReadinessState\n /** Additional CSS class name */\n className?: string\n}\n\n/**\n * A state indicator component that displays the current robot setup readiness state.\n *\n * Features:\n * - Shows six states: Precondition not fulfilled, Robot disconnected, Cell open, E-Stop, Manual mode, Ready\n * - Color-coded based on state (ready: tertiary/main, others: error/main)\n * - Rendered as Material-UI filled chip with paper-elevation-11 background\n * - Includes colored circle indicator (8px width)\n * - Localization support via react-i18next\n */\nexport const RobotSetupReadinessIndicator = externalizeComponent(\n observer(({ setupState, className }: RobotSetupReadinessIndicatorProps) => {\n const theme = useTheme()\n const { t } = useTranslation()\n\n const getStateInfo = () => {\n switch (setupState) {\n case RobotSetupReadinessState.READY:\n return {\n label: t(\"RobotSetupReadinessIndicator.Ready.lb\"),\n indicatorColor:\n theme.palette.tertiary?.main || theme.palette.primary.main,\n backgroundColor:\n theme.palette.backgroundPaperElevation?.[11] ||\n theme.palette.background.paper,\n textColor: theme.palette.secondary.contrastText,\n }\n case RobotSetupReadinessState.ROBOT_DISCONNECTED:\n return {\n label: t(\"RobotSetupReadinessIndicator.RobotDisconnected.lb\"),\n indicatorColor: theme.palette.error.main,\n backgroundColor:\n theme.palette.backgroundPaperElevation?.[11] ||\n theme.palette.background.paper,\n textColor: theme.palette.secondary.contrastText,\n }\n case RobotSetupReadinessState.CELL_OPEN:\n return {\n label: t(\"RobotSetupReadinessIndicator.CellOpen.lb\"),\n indicatorColor: theme.palette.error.main,\n backgroundColor:\n theme.palette.backgroundPaperElevation?.[11] ||\n theme.palette.background.paper,\n textColor: theme.palette.secondary.contrastText,\n }\n case RobotSetupReadinessState.E_STOP:\n return {\n label: t(\"RobotSetupReadinessIndicator.EStop.lb\"),\n indicatorColor: theme.palette.error.main,\n backgroundColor:\n theme.palette.backgroundPaperElevation?.[11] ||\n theme.palette.background.paper,\n textColor: theme.palette.secondary.contrastText,\n }\n case RobotSetupReadinessState.MANUAL_MODE:\n return {\n label: t(\"RobotSetupReadinessIndicator.ManualMode.lb\"),\n indicatorColor: theme.palette.error.main,\n backgroundColor:\n theme.palette.backgroundPaperElevation?.[11] ||\n theme.palette.background.paper,\n textColor: theme.palette.secondary.contrastText,\n }\n case RobotSetupReadinessState.PRECONDITION_NOT_FULFILLED:\n default:\n return {\n label: t(\n \"RobotSetupReadinessIndicator.PreconditionNotFulfilled.lb\",\n ),\n indicatorColor: theme.palette.error.main,\n backgroundColor:\n theme.palette.backgroundPaperElevation?.[11] ||\n theme.palette.background.paper,\n textColor: theme.palette.secondary.contrastText,\n }\n }\n }\n\n const { label, indicatorColor, backgroundColor, textColor } = getStateInfo()\n\n return (\n <Chip\n className={className}\n label={\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 1,\n }}\n >\n <Box\n sx={{\n width: 8,\n height: 8,\n borderRadius: \"50%\",\n backgroundColor: indicatorColor,\n flexShrink: 0,\n }}\n />\n <Typography\n variant=\"body2\"\n sx={{\n color: textColor,\n fontSize: \"0.75rem\", // Smaller than body2\n lineHeight: 1.2,\n }}\n >\n {label}\n </Typography>\n </Box>\n }\n variant=\"filled\"\n sx={{\n backgroundColor,\n color: theme.palette.getContrastText(backgroundColor),\n fontWeight: 500,\n height: \"auto\",\n \"& .MuiChip-label\": {\n paddingX: 1.5,\n paddingY: 0.5,\n },\n }}\n />\n )\n }),\n)\n","import ErrorIcon from \"@mui/icons-material/Error\"\nimport { Box, Divider, Typography, useTheme } from \"@mui/material\"\nimport { observer } from \"mobx-react-lite\"\nimport type { ComponentType } from \"react\"\nimport { externalizeComponent } from \"../externalizeComponent\"\nimport { RobotIcon } from \"../icons\"\nimport {\n RobotSetupReadinessIndicator,\n RobotSetupReadinessState,\n} from \"./RobotSetupReadinessIndicator\"\n\nexport interface RobotListItemProps {\n /** The name of the robot */\n robotName: string\n /** The type/model of the robot (will try to derive from nova if not provided) */\n robotType?: string\n /** The current setup readiness state of the robot */\n setupState: RobotSetupReadinessState\n /**\n * Component to render for the precondition indicator.\n * Defaults to RobotSetupReadinessIndicator.\n * Pass null or undefined to hide the indicator.\n */\n PreconditionComponent?: ComponentType<{\n setupState: RobotSetupReadinessState\n }> | null\n /** Additional CSS class name */\n className?: string\n}\n\n/**\n * A list item component that displays robot information and setup readiness state.\n *\n * Features:\n * - Shows robot name, type, and customizable precondition component\n * - Color-coded icon based on readiness state (robot icon for ready, warning for issues)\n * - Styled with consistent border, background, and spacing\n * - Responsive layout with proper spacing and alignment\n * - Flexible precondition component that can be customized or hidden\n */\nexport const RobotListItem = externalizeComponent(\n observer(\n ({\n robotName,\n robotType,\n setupState,\n PreconditionComponent = RobotSetupReadinessIndicator,\n className,\n }: RobotListItemProps) => {\n const theme = useTheme()\n\n // Use provided robot type or default\n const displayRobotType = robotType || \"Robot\"\n\n const isReady = setupState === RobotSetupReadinessState.READY\n\n return (\n <Box\n className={className}\n sx={{\n border: `1px solid ${theme.palette.divider}`,\n background:\n theme.palette.backgroundPaperElevation?.[8] || \"#292B3F\",\n borderRadius: \"8px\",\n padding: \"20px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n opacity: 1,\n }}\n >\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 2,\n flex: 1,\n }}\n >\n {/* Robot/Warning Icon */}\n {isReady ? (\n <Box\n sx={{\n fontSize: 24,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: 24,\n height: 24,\n \"& svg\": {\n fill: `${theme.palette.primary.main} !important`,\n },\n \"& svg path\": {\n fill: `${theme.palette.primary.main} !important`,\n },\n }}\n >\n <RobotIcon />\n </Box>\n ) : (\n <ErrorIcon\n sx={{\n color: theme.palette.error.main,\n fontSize: 24,\n }}\n />\n )}\n\n {/* Robot Name */}\n <Typography\n variant=\"body1\"\n sx={{\n fontWeight: 500,\n color: theme.palette.text.primary,\n }}\n >\n {robotName}\n </Typography>\n\n {/* Divider */}\n <Divider\n orientation=\"vertical\"\n flexItem\n sx={{\n backgroundColor: theme.palette.text.secondary,\n opacity: 0.3,\n width: \"1px\",\n }}\n />\n\n {/* Robot Type */}\n <Typography\n variant=\"body2\"\n sx={{\n color: theme.palette.text.secondary,\n }}\n >\n {displayRobotType}\n </Typography>\n </Box>\n\n {/* Setup Readiness Indicator */}\n {PreconditionComponent && (\n <PreconditionComponent setupState={setupState} />\n )}\n </Box>\n )\n },\n ),\n)\n","import * as React from \"react\";\nimport { forwardRef } from \"react\";\nconst SvgControllerTypePhysical = ({\n title,\n titleId,\n ...props\n}, ref) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, xmlns: \"http://www.w3.org/2000/svg\", ref, \"aria-labelledby\": titleId, ...props }, title ? /* @__PURE__ */ React.createElement(\"title\", { id: titleId }, title) : null, /* @__PURE__ */ React.createElement(\"path\", { d: \"M5.248 21c-.334 0-.619-.116-.853-.35a1.153 1.153 0 0 1-.351-.848c0-.333.117-.616.351-.85.234-.233.519-.35.853-.35H7.24L4.558 9.87a2.881 2.881 0 0 1-1.126-1.042A2.77 2.77 0 0 1 3 7.317c0-.793.28-1.467.838-2.023a2.774 2.774 0 0 1 2.033-.834 2.71 2.71 0 0 1 1.728.585c.494.389.832.887 1.014 1.493h3.58V5.239c0-.22.076-.406.226-.555a.76.76 0 0 1 .558-.224c.136 0 .263.035.381.104.118.07.209.167.273.292v.14l1.835-1.702a.979.979 0 0 1 .52-.279.881.881 0 0 1 .58.091l4.01 1.85a.74.74 0 0 1 .36.364.537.537 0 0 1-.002.474.592.592 0 0 1-.366.323.657.657 0 0 1-.477-.039l-3.858-1.774L13.76 6.59v1.454l2.473 2.233 3.858-1.774a.648.648 0 0 1 .485-.03.571.571 0 0 1 .358.314.513.513 0 0 1 .01.482.79.79 0 0 1-.367.357l-4.011 1.882a.881.881 0 0 1-.58.09.979.979 0 0 1-.52-.278L13.63 9.638v.14a.92.92 0 0 1-.273.275.665.665 0 0 1-.381.12.76.76 0 0 1-.558-.224.752.752 0 0 1-.225-.555V8.096h-3.58a2.82 2.82 0 0 1-.215.54 2.552 2.552 0 0 1-.323.479l5.139 9.488h2.673c.335 0 .62.116.854.35.234.233.35.516.35.849 0 .332-.116.615-.35.849a1.167 1.167 0 0 1-.854.349H5.248Zm.623-12.385c.362 0 .67-.126.924-.378a1.25 1.25 0 0 0 .38-.92 1.25 1.25 0 0 0-.38-.92 1.261 1.261 0 0 0-.924-.379 1.26 1.26 0 0 0-.925.379 1.25 1.25 0 0 0-.38.92c0 .36.127.667.38.92.254.252.562.378.925.378Z\" }));\nconst ForwardRef = forwardRef(SvgControllerTypePhysical);\nexport default ForwardRef;\n","import * as React from \"react\";\nimport { forwardRef } from \"react\";\nconst SvgControllerTypeVirtual = ({\n title,\n titleId,\n ...props\n}, ref) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, xmlns: \"http://www.w3.org/2000/svg\", ref, \"aria-labelledby\": titleId, ...props }, title ? /* @__PURE__ */ React.createElement(\"title\", { id: titleId }, title) : null, /* @__PURE__ */ React.createElement(\"path\", { d: \"m13.37 9.12 1.69 1.69 2.99-2.99-3.73-3.73-.95-.95-7.66 7.66-.95.95 3.99 3.99v3.44h7.55v-3.55l-4.72-4.72 1.79-1.79Zm-.91-2.99.91-.91 2.6 2.6-.91.91-2.6-2.6Zm-2.25 10.24h3.74l-1.34-1.34-.04-.04h-2.5l-3.25-3.25 4.59-4.59.92.92L9.5 10.9l5.33 5.33v1.48H10.2v-1.35l.01.01ZM2 2v4.99h1.41V3.4h3.58V2H2ZM22.21 2h-4.98v1.41h3.59v3.58h1.4V2h-.01ZM20.81 20.65h-3.58v1.4h4.98v-4.99h-1.4v3.59ZM3.4 17.06H2v4.98h4.99v-1.4H3.4v-3.58Z\" }));\nconst ForwardRef = forwardRef(SvgControllerTypeVirtual);\nexport default ForwardRef;\n","import {\n Popover,\n Stack,\n SvgIcon,\n Typography,\n type PopoverOrigin,\n type TypographyProps,\n} from \"@mui/material\"\nimport { observer, useLocalObservable } from \"mobx-react-lite\"\nimport type { ElementType, ReactNode } from \"react\"\n\nexport type IndicatorWithExplanationProps = {\n id: string\n icon: ElementType\n color: TypographyProps[\"color\"]\n title?: ReactNode\n name: ReactNode\n label?: ReactNode\n explanation: ReactNode\n literalValue?: string\n anchorOrigin?: PopoverOrigin\n transformOrigin?: PopoverOrigin\n}\n\nexport const IndicatorWithExplanation = observer(\n ({\n id,\n icon,\n color,\n title,\n name,\n label,\n explanation,\n literalValue,\n anchorOrigin,\n transformOrigin,\n }: IndicatorWithExplanationProps) => {\n const state = useLocalObservable(() => ({\n anchorEl: null as HTMLElement | null,\n\n get isPopoverOpen() {\n return !!state.anchorEl\n },\n\n openPopover(event: React.MouseEvent<HTMLElement>) {\n state.anchorEl = event.currentTarget\n },\n\n closePopover() {\n state.anchorEl = null\n },\n }))\n\n return (\n <>\n <Stack\n aria-owns={state.isPopoverOpen ? id : undefined}\n aria-haspopup=\"true\"\n onMouseEnter={state.openPopover}\n onMouseLeave={state.closePopover}\n direction=\"row\"\n spacing={1}\n sx={{\n cursor: \"pointer\",\n }}\n >\n <SvgIcon\n component={icon}\n sx={{\n color,\n }}\n />\n {label && (<div style={{\n color,\n }}>{label}</div>)}\n </Stack>\n <Popover\n id={id}\n sx={{\n pointerEvents: \"none\",\n }}\n open={state.isPopoverOpen}\n anchorEl={state.anchorEl}\n anchorOrigin={\n anchorOrigin ?? {\n vertical: \"bottom\",\n horizontal: \"left\",\n }\n }\n transformOrigin={\n transformOrigin ?? {\n vertical: \"top\",\n horizontal: \"left\",\n }\n }\n onClose={state.closePopover}\n disableRestoreFocus\n >\n <Stack\n gap=\"1rem\"\n padding={2}\n maxWidth=\"450px\"\n sx={{\n wordWrap: \"break-word\",\n }}\n >\n <div>\n {title && (\n <Typography component=\"span\" fontSize=\"14px\">\n {`${title}: `}\n </Typography>\n )}\n <Typography\n component=\"span\"\n color={color}\n fontWeight=\"bold\"\n fontSize=\"14px\"\n >\n {name}\n </Typography>\n </div>\n\n <Typography fontSize=\"14px\">{explanation}</Typography>\n\n {literalValue && (\n <Typography fontSize=\"12px\">{literalValue}</Typography>\n )}\n </Stack>\n </Popover>\n </>\n )\n },\n)\n","import { useTheme, type PopoverOrigin } from \"@mui/material\"\nimport { observer } from \"mobx-react-lite\"\nimport { useId } from \"react\"\nimport { Trans, useTranslation } from \"react-i18next\"\nimport ControllerTypePhysicalIcon from \"./icons/controller-type-physical.svg\"\nimport ControllerTypeVirtualIcon from \"./icons/controller-type-virtual.svg\"\nimport { IndicatorWithExplanation } from \"./IndicatorWithExplanation\"\n\ninterface ControllerTypeIndicatorProps {\n isVirtual: boolean\n motionGroupId: string\n anchorOrigin?: PopoverOrigin\n transformOrigin?: PopoverOrigin\n compact: boolean\n}\n\nexport const ControllerTypeIndicator = observer(\n ({\n isVirtual,\n motionGroupId,\n anchorOrigin,\n transformOrigin,\n compact,\n }: ControllerTypeIndicatorProps) => {\n const theme = useTheme()\n const componentId = useId()\n const { t } = useTranslation()\n\n if (isVirtual) {\n return (\n <IndicatorWithExplanation\n id={`motion-group-virtual-${componentId}`}\n icon={ControllerTypeVirtualIcon}\n color={theme.palette.tertiary.main}\n name={t(\"SafetyBar.ControllerType.Virtual.lb\")}\n label={compact ? null : t(\"SafetyBar.ControllerType.Virtual.lb\")}\n explanation={\n <Trans\n i18nKey=\"SafetyBar.MotionGroup.Virtual.Explanation.lb\"\n values={{\n motionGroupId,\n }}\n >\n Motion group <code>{motionGroupId}</code> refers to a virtual\n robot with no physical counterpart. It can be freely manipulated\n without special safety precautions.\n </Trans>\n }\n anchorOrigin={anchorOrigin}\n transformOrigin={transformOrigin}\n />\n )\n }\n\n return (\n <IndicatorWithExplanation\n id={`motion-group-physical-${componentId}`}\n icon={ControllerTypePhysicalIcon}\n color={theme.palette.primary.main}\n name={t(\"SafetyBar.ControllerType.Physical.lb\")}\n label={compact ? null : t(\"SafetyBar.ControllerType.Physical.lb\")}\n explanation={\n <Trans\n i18nKey=\"SafetyBar.MotionGroup.Physical.Explanation.lb\"\n values={{\n motionGroupId,\n }}\n components={{ code: <code />, strong: <strong /> }}\n />\n }\n anchorOrigin={anchorOrigin}\n transformOrigin={transformOrigin}\n />\n )\n },\n)\n","import * as React from \"react\";\nimport { forwardRef } from \"react\";\nconst SvgOperationModeAutomatic = ({\n title,\n titleId,\n ...props\n}, ref) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, xmlns: \"http://www.w3.org/2000/svg\", ref, \"aria-labelledby\": titleId, ...props }, title ? /* @__PURE__ */ React.createElement(\"title\", { id: titleId }, title) : null, /* @__PURE__ */ React.createElement(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M15.306 2.768c0-.424.344-.768.768-.768h.406C19.53 2 22 4.551 22 7.699c0 3.237-2.51 5.587-5.31 5.703-.84 1.595-2.478 2.677-4.36 2.677a4.845 4.845 0 0 1-3.146-1.163c-.6 1.783 0 3.922 1.79 4.99 1.929 1.149 4.395.467 5.508-1.524l.212-.378a.75.75 0 1 1 1.308.732l-.231.414c-1.524 2.725-4.9 3.66-7.54 2.085-2.716-1.618-3.432-5.037-2.129-7.599a5.22 5.22 0 0 1-.73-2.677c0-2.192 1.335-4.063 3.212-4.793-1.195-1.427-3.29-1.96-5.08-.892-1.928 1.15-2.589 3.696-1.475 5.687l.231.413a.75.75 0 0 1-1.308.732l-.212-.377c-1.524-2.726-.62-6.211 2.02-7.785 2.716-1.619 5.943-.55 7.44 1.897l.13-.001c2.739 0 4.96 2.292 4.96 5.12 0 .284-.023.563-.066.834 1.795-.354 3.288-1.96 3.288-4.095 0-2.3-1.805-4.163-4.032-4.163h-.406a.768.768 0 0 1-.768-.768Zm.496 8.191c0 .286-.033.564-.094.831a3.62 3.62 0 0 1-.672 1.415 3.425 3.425 0 0 1-2.706 1.338 3.402 3.402 0 0 1-2.384-.98 3.598 3.598 0 0 1-.852-1.306 3.677 3.677 0 0 1-.235-1.298c0-1.623 1.046-2.994 2.48-3.435a3.37 3.37 0 0 1 1.522-.107c1.665.264 2.94 1.75 2.94 3.542Z\" }));\nconst ForwardRef = forwardRef(SvgOperationModeAutomatic);\nexport default ForwardRef;\n","import * as React from \"react\";\nimport { forwardRef } from \"react\";\nconst SvgOperationModeError = ({\n title,\n titleId,\n ...props\n}, ref) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ref, \"aria-labelledby\": titleId, ...props }, title ? /* @__PURE__ */ React.createElement(\"title\", { id: titleId }, title) : null, /* @__PURE__ */ React.createElement(\"path\", { d: \"M19.763 16.432 13.516 5.864c-.674-1.152-2.358-1.152-3.049 0l-6.23 10.568C3.563 17.567 4.405 19 5.753 19H18.23c1.364 0 2.206-1.432 1.532-2.568ZM12 8.498c.539 0 .96.428.96.938v.066l-.32 4.708a.639.639 0 0 1-.64.592.639.639 0 0 1-.64-.592l-.32-4.708A.953.953 0 0 1 12 8.498Zm0 8.79c-.556 0-1.01-.444-1.01-.987 0-.544.454-.988 1.01-.988s1.01.444 1.01.988c0 .542-.454.987-1.01.987Z\", fill: \"#fff\", fillOpacity: 0.56 }));\nconst ForwardRef = forwardRef(SvgOperationModeError);\nexport default ForwardRef;\n","import * as React from \"react\";\nimport { forwardRef } from \"react\";\nconst SvgOperationModeManual = ({\n title,\n titleId,\n ...props\n}, ref) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ref, \"aria-labelledby\": titleId, ...props }, title ? /* @__PURE__ */ React.createElement(\"title\", { id: titleId }, title) : null, /* @__PURE__ */ React.createElement(\"path\", { d: \"M12.953 5.09a1.497 1.497 0 0 0-1.653-.518l-1.35.43a1.504 1.504 0 0 0-1.726-.376L2.858 6.97c-.736.321-1.06 1.155-.726 1.862.334.707 1.202 1.02 1.937.698l4.27-1.865 1.466 1.973v.402c0 .873-.627 1.63-1.512 1.827l-2.56.567c-1.329.295-2.27 1.431-2.27 2.74v.107c0 .26.22.469.489.469h11.117c1.329 0 2.618.435 3.656 1.233l1.665 1.28A1 1 0 0 0 22 17.47V11.062c0-.312-.108-.616-.308-.863l-3.415-4.218a1.5 1.5 0 0 0-1.618-.471l-.378.12-.866-.475a1.516 1.516 0 0 0-1.188-.114l-1.06.338-.214-.289Z\" }));\nconst ForwardRef = forwardRef(SvgOperationModeManual);\nexport default ForwardRef;\n","import { useTheme, type PopoverOrigin } from \"@mui/material\"\nimport type { OperationMode } from \"@wandelbots/nova-js/v2\"\nimport { observer } from \"mobx-react-lite\"\nimport { useId } from \"react\"\nimport { Trans, useTranslation } from \"react-i18next\"\nimport OperationModeAutomaticIcon from \"./icons/operation-mode-automatic.svg\"\nimport OperationModeErrorIcon from \"./icons/operation-mode-error.svg\"\nimport OperationModeManualIcon from \"./icons/operation-mode-manual.svg\"\nimport { IndicatorWithExplanation } from \"./IndicatorWithExplanation\"\n\ninterface OperationModeIndicatorProps {\n operationMode: OperationMode\n anchorOrigin?: PopoverOrigin\n transformOrigin?: PopoverOrigin\n compact: boolean\n}\n\nexport const OperationModeIndicator = observer(\n ({\n operationMode,\n anchorOrigin,\n transformOrigin,\n compact,\n }: OperationModeIndicatorProps) => {\n const { t } = useTranslation()\n const theme = useTheme()\n const componentId = useId()\n\n switch (operationMode) {\n case \"OPERATION_MODE_AUTO\":\n return (\n <IndicatorWithExplanation\n id={`operation-mode-auto-${componentId}`}\n icon={OperationModeAutomaticIcon}\n title={t(\"SafetyBar.OperationMode.ti\")}\n name={t(\"SafetyBar.OperationMode.Automatic.ti\")}\n label={compact ? null : t(\"SafetyBar.OperationMode.Automatic.ti\")}\n color={theme.palette.text.secondary}\n explanation={\n <Trans i18nKey=\"SafetyBar.OperationMode.Auto.Explanation.lb\">\n The robot controller is in automatic operation mode. Automated\n movement without manual confirmation is possible in this mode.\n </Trans>\n }\n anchorOrigin={anchorOrigin}\n transformOrigin={transformOrigin}\n />\n )\n case \"OPERATION_MODE_MANUAL\":\n case \"OPERATION_MODE_MANUAL_T1\":\n case \"OPERATION_MODE_MANUAL_T2\": {\n return (\n <IndicatorWithExplanation\n id={`operation-mode-manual-${componentId}`}\n icon={OperationModeManualIcon}\n color={theme.palette.warning.main}\n title={t(\"SafetyBar.OperationMode.ti\")}\n name={t(\"SafetyBar.OperationMode.Manual.lb\")}\n label={compact ? null : t(\"SafetyBar.OperationMode.Manual.lb\")}\n explanation={\n <Trans i18nKey=\"SafetyBar.OperationMode.Manual.Explanation.lb\">\n The robot controller is in manual operation mode. On a physical\n robot, this generally indicates that an enabling switch must be\n held for the robot to move successfully.\n </Trans>\n }\n literalValue={operationMode}\n anchorOrigin={anchorOrigin}\n transformOrigin={transformOrigin}\n />\n )\n }\n default:\n return (\n <IndicatorWithExplanation\n id={`operation-mode-error-${componentId}`}\n icon={OperationModeErrorIcon}\n color={theme.palette.warning.main}\n title={t(\"SafetyBar.OperationMode.ti\")}\n name={t(\"SafetyBar.OperationMode.Error.lb\")}\n label={compact ? null : t(\"SafetyBar.OperationMode.Error.lb\")}\n explanation={\n <Trans i18nKey=\"SafetyBar.OperationMode.Error.Explanation.lb\">\n The robot controller has entered an unexpected operation mode.\n Motion group movement may not be possible.\n </Trans>\n }\n literalValue={operationMode}\n anchorOrigin={anchorOrigin}\n transformOrigin={transformOrigin}\n />\n )\n }\n },\n)\n","import * as React from \"react\";\nimport { forwardRef } from \"react\";\nconst SvgSafetyStateError = ({\n title,\n titleId,\n ...props\n}, ref) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, xmlns: \"http://www.w3.org/2000/svg\", ref, \"aria-labelledby\": titleId, ...props }, title ? /* @__PURE__ */ React.createElement(\"title\", { id: titleId }, title) : null, /* @__PURE__ */ React.createElement(\"path\", { d: \"M19.763 16.432 13.516 5.864c-.674-1.152-2.358-1.152-3.049 0l-6.23 10.568C3.563 17.567 4.405 19 5.753 19H18.23c1.364 0 2.206-1.432 1.532-2.568ZM12 8.498c.539 0 .96.428.96.938v.066l-.32 4.708a.639.639 0 0 1-.64.592.639.639 0 0 1-.64-.592l-.32-4.708A.953.953 0 0 1 12 8.498Zm0 8.79c-.556 0-1.01-.444-1.01-.987 0-.544.454-.988 1.01-.988s1.01.444 1.01.988c0 .542-.454.987-1.01.987Z\" }));\nconst ForwardRef = forwardRef(SvgSafetyStateError);\nexport default ForwardRef;\n","import * as React from \"react\";\nimport { forwardRef } from \"react\";\nconst SvgSafetyStateEstop = ({\n title,\n titleId,\n ...props\n}, ref) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, xmlns: \"http://www.w3.org/2000/svg\", ref, \"aria-labelledby\": titleId, ...props }, title ? /* @__PURE__ */ React.createElement(\"title\", { id: titleId }, title) : null, /* @__PURE__ */ React.createElement(\"path\", { d: \"M10.24 10.636 12 13.764l1.76-3.128h-3.52Z\" }), /* @__PURE__ */ React.createElement(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M18.364 12a6.364 6.364 0 1 1-12.728 0 6.364 6.364 0 0 1 12.728 0ZM7.909 9.273 12 16.546l4.09-7.273H7.91Z\" }), /* @__PURE__ */ React.createElement(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M22 12c0 5.523-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2s10 4.477 10 10Zm-1.364 0a8.636 8.636 0 1 1-17.273 0 8.636 8.636 0 0 1 17.273 0Z\" }));\nconst ForwardRef = forwardRef(SvgSafetyStateEstop);\nexport default ForwardRef;\n","import * as React from \"react\";\nimport { forwardRef } from \"react\";\nconst SvgSafetyStateManualActionRequired = ({\n title,\n titleId,\n ...props\n}, ref) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ref, \"aria-labelledby\": titleId, ...props }, title ? /* @__PURE__ */ React.createElement(\"title\", { id: titleId }, title) : null, /* @__PURE__ */ React.createElement(\"path\", { d: \"M9.057 15.115c-1.681 0-3.111-.59-4.29-1.768C3.59 12.17 3 10.74 3 9.057c0-.29.021-.582.064-.876a4.1 4.1 0 0 1 .214-.844.78.78 0 0 1 .273-.36c.115-.077.244-.133.389-.168a.857.857 0 0 1 .437.008c.146.04.28.12.4.24l2.806 2.787 2.26-2.261-2.775-2.786a.903.903 0 0 1-.241-.405.875.875 0 0 1-.008-.442 1.13 1.13 0 0 1 .174-.389.82.82 0 0 1 .355-.273c.268-.107.548-.182.838-.224.29-.043.581-.064.871-.064 1.682 0 3.112.59 4.29 1.768 1.179 1.178 1.768 2.608 1.768 4.29 0 .444-.042.858-.126 1.241-.084.384-.21.755-.377 1.113l5.726 5.692A2.2 2.2 0 0 1 21 18.721a2.2 2.2 0 0 1-.662 1.617A2.2 2.2 0 0 1 18.72 21a2.173 2.173 0 0 1-1.617-.679l-5.692-5.709c-.372.161-.75.285-1.133.372-.383.087-.79.13-1.222.13Z\", fill: \"#fff\", fillOpacity: 0.56 }));\nconst ForwardRef = forwardRef(SvgSafetyStateManualActionRequired);\nexport default ForwardRef;\n","import * as React from \"react\";\nimport { forwardRef } from \"react\";\nconst SvgSafetyStateNormal = ({\n title,\n titleId,\n ...props\n}, ref) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ref, \"aria-labelledby\": titleId, ...props }, title ? /* @__PURE__ */ React.createElement(\"title\", { id: titleId }, title) : null, /* @__PURE__ */ React.createElement(\"path\", { d: \"m10.6 13.8-2.15-2.15a.948.948 0 0 0-.7-.275.948.948 0 0 0-.7.275.948.948 0 0 0-.275.7c0 .283.092.517.275.7L9.9 15.9c.2.2.433.3.7.3.267 0 .5-.1.7-.3l5.65-5.65a.948.948 0 0 0 .275-.7.948.948 0 0 0-.275-.7.948.948 0 0 0-.7-.275.948.948 0 0 0-.7.275L10.6 13.8ZM12 22a9.738 9.738 0 0 1-3.9-.788 10.099 10.099 0 0 1-3.175-2.137c-.9-.9-1.612-1.958-2.137-3.175A9.738 9.738 0 0 1 2 12c0-1.383.263-2.683.788-3.9a10.099 10.099 0 0 1 2.137-3.175c.9-.9 1.958-1.612 3.175-2.137A9.738 9.738 0 0 1 12 2c1.383 0 2.683.263 3.9.788a10.098 10.098 0 0 1 3.175 2.137c.9.9 1.613 1.958 2.137 3.175A9.738 9.738 0 0 1 22 12a9.738 9.738 0 0 1-.788 3.9 10.098 10.098 0 0 1-2.137 3.175c-.9.9-1.958 1.613-3.175 2.137A9.738 9.738 0 0 1 12 22Zm0-2c2.233 0 4.125-.775 5.675-2.325C19.225 16.125 20 14.233 20 12c0-2.233-.775-4.125-2.325-5.675C16.125 4.775 14.233 4 12 4c-2.233 0-4.125.775-5.675 2.325C4.775 7.875 4 9.767 4 12c0 2.233.775 4.125 2.325 5.675C7.875 19.225 9.767 20 12 20Z\" }));\nconst ForwardRef = forwardRef(SvgSafetyStateNormal);\nexport default ForwardRef;\n","import * as React from \"react\";\nimport { forwardRef } from \"react\";\nconst SvgSafetyStateStop = ({\n title,\n titleId,\n ...props\n}, ref) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, xmlns: \"http://www.w3.org/2000/svg\", ref, \"aria-labelledby\": titleId, ...props }, title ? /* @__PURE__ */ React.createElement(\"title\", { id: titleId }, title) : null, /* @__PURE__ */ React.createElement(\"path\", { d: \"M9 16h6c.283 0 .52-.096.713-.287A.968.968 0 0 0 16 15V9a.967.967 0 0 0-.287-.713A.968.968 0 0 0 15 8H9a.968.968 0 0 0-.713.287A.968.968 0 0 0 8 9v6c0 .283.096.52.287.713.192.191.43.287.713.287Zm3 6a9.738 9.738 0 0 1-3.9-.788 10.099 10.099 0 0 1-3.175-2.137c-.9-.9-1.612-1.958-2.137-3.175A9.738 9.738 0 0 1 2 12c0-1.383.263-2.683.788-3.9a10.099 10.099 0 0 1 2.137-3.175c.9-.9 1.958-1.612 3.175-2.137A9.738 9.738 0 0 1 12 2c1.383 0 2.683.263 3.9.788a10.098 10.098 0 0 1 3.175 2.137c.9.9 1.613 1.958 2.137 3.175A9.738 9.738 0 0 1 22 12a9.738 9.738 0 0 1-.788 3.9 10.098 10.098 0 0 1-2.137 3.175c-.9.9-1.958 1.613-3.175 2.137A9.738 9.738 0 0 1 12 22Zm0-2c2.233 0 4.125-.775 5.675-2.325C19.225 16.125 20 14.233 20 12c0-2.233-.775-4.125-2.325-5.675C16.125 4.775 14.233 4 12 4c-2.233 0-4.125.775-5.675 2.325C4.775 7.875 4 9.767 4 12c0 2.233.775 4.125 2.325 5.675C7.875 19.225 9.767 20 12 20Z\" }));\nconst ForwardRef = forwardRef(SvgSafetyStateStop);\nexport default ForwardRef;\n","import { useTheme, type PopoverOrigin } from \"@mui/material\"\nimport type { SafetyStateType } from \"@wandelbots/nova-js/v2\"\nimport { observer } from \"mobx-react-lite\"\nimport { useId } from \"react\"\nimport { Trans, useTranslation } from \"react-i18next\"\nimport { assertUnreachable } from \"../utils/errorHandling\"\nimport SafetyStateErrorIcon from \"./icons/safety-state-error.svg\"\nimport SafetyStateEstopIcon from \"./icons/safety-state-estop.svg\"\nimport SafetyStateManualActionRequiredIcon from \"./icons/safety-state-manual-action-required.svg\"\nimport SafetyStateNormalIcon from \"./icons/safety-state-normal.svg\"\nimport SafetyStateStopIcon from \"./icons/safety-state-stop.svg\"\nimport { IndicatorWithExplanation } from \"./IndicatorWithExplanation\"\n\ninterface SafetyStateIndicatorProps {\n safetyState: SafetyStateType\n anchorOrigin?: PopoverOrigin\n transformOrigin?: PopoverOrigin\n compact: boolean\n}\n\nexport const SafetyStateIndicator = observer(\n ({\n safetyState,\n anchorOrigin,\n transformOrigin,\n compact,\n }: SafetyStateIndicatorProps) => {\n const { t } = useTranslation()\n const theme = useTheme()\n const componentId = useId()\n\n switch (safetyState) {\n // Normal state, robot can move\n case \"SAFETY_STATE_NORMAL\":\n return (\n <IndicatorWithExplanation\n id={`safety-state-normal-${componentId}`}\n title={t(\"SafetyBar.SafetyState.ti\")}\n name={t(\"SafetyBar.SafetyState.Normal.lb\")}\n label={compact ? null : t(\"SafetyBar.SafetyState.Normal.lb\")}\n icon={SafetyStateNormalIcon}\n color={theme.palette.text.secondary}\n explanation={\n <Trans i18nKey=\"SafetyBar.SafetyState.Normal.Explanation.lb\">\n The robot controller is in a normal safety state. Movement is\n not prevented by this state.\n </Trans>\n }\n anchorOrigin={anchorOrigin}\n transformOrigin={transformOrigin}\n />\n )\n\n // Estop\n case \"SAFETY_STATE_DEVICE_EMERGENCY_STOP\":\n case \"SAFETY_STATE_ROBOT_EMERGENCY_STOP\":\n return (\n <IndicatorWithExplanation\n id={`safety-state-estop-${componentId}`}\n title={t(\"SafetyBar.SafetyState.ti\")}\n name={t(\"SafetyBar.SafetyState.Estop.lb\")}\n label={compact ? null : t(\"SafetyBar.SafetyState.Estop.lb\")}\n icon={SafetyStateEstopIcon}\n color={theme.palette.error.main}\n explanation={\n <Trans i18nKey=\"SafetyBar.StopState.Estop.Explanation.lb\">\n An emergency stop of the robot controller has been triggered.\n Movement of the robot is no longer possible until the estop is\n released.\n </Trans>\n }\n literalValue={safetyState}\n anchorOrigin={anchorOrigin}\n transformOrigin={transformOrigin}\n />\n )\n\n // General stop\n case \"SAFETY_STATE_STOP_0\":\n case \"SAFETY_STATE_STOP_1\":\n case \"SAFETY_STATE_STOP_2\":\n case \"SAFETY_STATE_PROTECTIVE_STOP\":\n case \"SAFETY_STATE_STOP\":\n return (\n <IndicatorWithExplanation\n id={`safety-state-stop-${componentId}`}\n icon={SafetyStateStopIcon}\n title={t(\"SafetyBar.SafetyState.ti\")}\n name={t(\"SafetyBar.SafetyState.Stop.lb\")}\n label={compact ? null : t(\"SafetyBar.SafetyState.Stop.lb\")}\n color={theme.palette.warning.main}\n explanation={\n <Trans i18nKey=\"SafetyBar.SafetyState.Stop.Explanation.lb\">\n The robot controller has entered a stop state. Movement is no\n longer possible until the stop state is resolved.\n </Trans>\n }\n literalValue={safetyState}\n anchorOrigin={anchorOrigin}\n transformOrigin={transformOrigin}\n />\n )\n\n // Manual action required\n case \"SAFETY_STATE_REDUCED\":\n case \"SAFETY_STATE_MASTERING\":\n case \"SAFETY_STATE_CONFIRM_SAFETY\":\n case \"SAFETY_STATE_OPERATOR_SAFETY\":\n case \"SAFETY_STATE_RECOVERY\":\n case \"SAFETY_STATE_VIOLATION\":\n return (\n <IndicatorWithExplanation\n id={`safety-state-manual-action-required-${componentId}`}\n icon={SafetyStateManualActionRequiredIcon}\n color={theme.palette.warning.main}\n title={t(\"SafetyBar.SafetyState.ti\")}\n name={t(\"SafetyBar.SafetyState.ManualActionRequired.lb\")}\n label={\n compact\n ? null\n : t(\"SafetyBar.SafetyState.ManualActionRequired.lb\")\n }\n explanation={\n <Trans i18nKey=\"SafetyBar.SafetyState.ManualActionRequired.Explanation.lb\">\n The robot controller has entered a safety state requiring manual\n action to resolve.\n </Trans>\n }\n literalValue={safetyState}\n anchorOrigin={anchorOrigin}\n transformOrigin={transformOrigin}\n />\n )\n\n // Error\n case \"SAFETY_STATE_UNKNOWN\":\n case \"SAFETY_STATE_FAULT\":\n return (\n <IndicatorWithExplanation\n id={`safety-state-error-${componentId}`}\n icon={SafetyStateErrorIcon}\n color={theme.palette.error.main}\n title={t(\"SafetyBar.SafetyState.ti\")}\n name={t(\"SafetyBar.SafetyState.Error.lb\")}\n label={compact ? null : t(\"SafetyBar.SafetyState.Error.lb\")}\n explanation={\n <Trans i18nKey=\"SafetyBar.SafetyState.Error.Explanation.lb\">\n The robot controller has entered an unexpected safety state.\n </Trans>\n }\n literalValue={safetyState}\n anchorOrigin={anchorOrigin}\n transformOrigin={transformOrigin}\n />\n )\n default:\n assertUnreachable(safetyState, `Unknown safety state ${safetyState}`)\n }\n },\n)\n","import { Divider, Stack, type PopoverOrigin } from \"@mui/material\"\nimport type { OperationMode, SafetyStateType } from \"@wandelbots/nova-js/v2\"\nimport { observer } from \"mobx-react-lite\"\nimport { externalizeComponent } from \"../../externalizeComponent\"\nimport { ControllerTypeIndicator } from \"./ControllerTypeIndicator\"\nimport { OperationModeIndicator } from \"./OperationModeIndicator\"\nimport { SafetyStateIndicator } from \"./SafetyStateIndicator\"\n\nexport interface SafetyBarProps {\n isVirtual: boolean\n motionGroupId: string\n operationMode: OperationMode\n safetyState: SafetyStateType\n anchorOrigin?: PopoverOrigin\n transformOrigin?: PopoverOrigin\n compact?: boolean\n}\n\nexport const SafetyBar = externalizeComponent(\n observer(\n ({\n isVirtual,\n motionGroupId,\n operationMode,\n safetyState,\n anchorOrigin,\n transformOrigin,\n compact = true,\n }: SafetyBarProps) => {\n const gap = compact ? 1 : 2\n\n return (\n <Stack\n direction=\"row\"\n gap={gap}\n alignItems=\"center\"\n sx={{ height: \"24px\" }}\n >\n <SafetyStateIndicator\n safetyState={safetyState}\n anchorOrigin={anchorOrigin}\n transformOrigin={transformOrigin}\n compact={compact}\n />\n\n <Divider orientation=\"vertical\" flexItem />\n\n <OperationModeIndicator\n operationMode={operationMode}\n anchorOrigin={anchorOrigin}\n transformOrigin={transformOrigin}\n compact={compact}\n />\n\n <Divider orientation=\"vertical\" flexItem />\n\n <ControllerTypeIndicator\n isVirtual={isVirtual}\n motionGroupId={motionGroupId}\n anchorOrigin={anchorOrigin}\n transformOrigin={transformOrigin}\n compact={compact}\n />\n </Stack>\n )\n },\n ),\n)\n","import { Fab, type FabProps, styled } from \"@mui/material\"\n\nconst StyledSelectableFab = styled(Fab, {\n shouldForwardProp: (prop) => prop !== \"selected\",\n})<CodeFabProps>(({ theme }) => ({\n borderRadius: \"20px\",\n\n \"&:hover\": {\n background: theme.palette.backgroundPaperElevation?.[7],\n },\n\n variants: [\n {\n props: ({ selected }) => !selected,\n style: {\n background: theme.palette.backgroundPaperElevation?.[0],\n color: theme.palette.action.disabled,\n \"> img\": {\n opacity: 0.4,\n },\n },\n },\n {\n props: ({ selected }) => selected,\n style: {\n background: theme.palette.backgroundPaperElevation?.[11],\n border: `1px solid ${theme.palette.divider}`,\n color: theme.palette.primary.contrastText,\n },\n },\n ],\n}))\n\ntype CodeFabProps = {\n selected?: boolean\n ref?: React.Ref<HTMLButtonElement>\n} & Omit<FabProps, \"variant\" | \"color\">\n\nexport const SelectableFab = (props: CodeFabProps) => {\n const { ref, ...otherProps } = props\n return (\n <StyledSelectableFab\n ref={ref}\n selected={props.selected}\n {...otherProps}\n color={\"secondary\"}\n variant=\"circular\"\n />\n )\n}\n","import type { SxProps } from \"@mui/material\"\nimport { Badge, Box, Tab, Tabs } from \"@mui/material\"\nimport { observer } from \"mobx-react-lite\"\nimport { useEffect, useState } from \"react\"\nimport { externalizeComponent } from \"../externalizeComponent\"\n\nexport interface TabItem {\n /** Unique identifier for the tab */\n id: string\n /** Label text for the tab */\n label: string\n /** Content to display when tab is active */\n content: React.ReactNode\n /** Optional icon component to display with the tab */\n icon?: React.ReactElement\n /** Optional badge configuration */\n badge?: {\n /** Badge content (number or string) */\n content: React.ReactNode\n /** Badge color variant */\n color?:\n | \"default\"\n | \"primary\"\n | \"secondary\"\n | \"error\"\n | \"info\"\n | \"success\"\n | \"warning\"\n /** Maximum number to display (e.g., 99+) */\n max?: number\n /** Show badge even when content is zero */\n showZero?: boolean\n }\n}\n\nexport interface TabBarProps {\n /** Array of tab items to display */\n items: TabItem[]\n /** Controlled active tab index */\n activeTab?: number\n /** Default active tab index */\n defaultActiveTab?: number\n /** Callback when tab changes */\n onTabChange?: (index: number) => void\n /** Additional styling */\n sx?: SxProps\n /** Ref to the root container element */\n ref?: React.Ref<HTMLDivElement>\n}\n\ninterface TabPanelProps {\n children?: React.ReactNode\n index: number\n value: number\n}\n\nfunction TabPanel(props: TabPanelProps) {\n const { children, value, index, ...other } = props\n\n return (\n <div\n role=\"tabpanel\"\n hidden={value !== index}\n id={`tabpanel-${index}`}\n aria-labelledby={`tab-${index}`}\n {...other}\n >\n {value === index && <Box>{children}</Box>}\n </div>\n )\n}\n\n/**\n * Wrapper component that filters out MUI Tabs internal props\n * to prevent them from being passed to DOM elements\n */\ninterface TabWrapperProps {\n children: React.ReactNode\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any\n}\n\nfunction TabWrapper({ children, ...props }: TabWrapperProps) {\n // Filter out MUI Tabs internal props that shouldn't reach the DOM\n const {\n fullWidth,\n indicator,\n onChange,\n orientation,\n scrollButtons,\n selectionFollowsFocus,\n textColor,\n value,\n variant,\n ...cleanProps\n } = props\n\n return <Box {...cleanProps}>{children}</Box>\n}\n\n/**\n * A styled tab bar component with configurable tabs and content.\n * Features the same styling as the Wandelbots design system with rounded tabs\n * and smooth transitions.\n */\nexport const TabBar = externalizeComponent(\n observer((props: TabBarProps) => {\n const {\n items,\n activeTab,\n defaultActiveTab = 0,\n onTabChange,\n sx,\n ref,\n } = props\n const isControlled = activeTab !== undefined\n const [uncontrolledActiveTab, setUncontrolledActiveTab] =\n useState(defaultActiveTab)\n\n const currentValue = isControlled ? activeTab! : uncontrolledActiveTab\n\n // Keep uncontrolled state in range when items change\n useEffect(() => {\n if (isControlled) return\n if (items.length === 0) return\n if (\n uncontrolledActiveTab < 0 ||\n uncontrolledActiveTab > items.length - 1\n ) {\n setUncontrolledActiveTab(0)\n }\n }, [items.length, isControlled, uncontrolledActiveTab])\n\n const handleTabChange = (\n _event: React.SyntheticEvent,\n newValue: number,\n ) => {\n if (!isControlled) {\n setUncontrolledActiveTab(newValue)\n }\n onTabChange?.(newValue)\n }\n\n return (\n <Box\n ref={ref}\n sx={{ height: \"100%\", display: \"flex\", flexDirection: \"column\", ...sx }}\n >\n {/* Tabs */}\n <Box\n sx={{\n px: 0,\n py: 0,\n overflow: \"visible\",\n position: \"relative\",\n // Extra padding to prevent badge clipping\n // Top: accommodates badge positioned at top: -6px with 20px height\n // Right: accommodates badge positioned at right: -8px with 20px width\n paddingTop: (theme) => theme.spacing(2), // 16px\n paddingRight: (theme) => theme.spacing(2.5), // 20px\n }}\n >\n <Tabs\n value={currentValue}\n onChange={handleTabChange}\n sx={{\n minHeight: \"32px\",\n backgroundColor: \"transparent\",\n overflow: \"visible\",\n \"& .MuiTabs-indicator\": {\n display: \"none\", // Hide the default indicator\n },\n \"& .MuiTabs-flexContainer\": {\n gap: 2,\n overflow: \"visible\",\n paddingTop: 0,\n paddingBottom: 0,\n },\n \"& .MuiTabs-scroller\": {\n overflow: \"visible !important\",\n },\n \"& .MuiTab-root\": {\n overflow: \"visible\",\n },\n }}\n >\n {items.map((item, index) => {\n // Helper functions for badge logic\n const getBadgeContent = () => {\n if (!item.badge) return undefined\n const content = item.badge.content\n const max = item.badge.max\n\n // Handle numeric content with max limit\n if (typeof content === \"number\" && max && content > max) {\n return `${max}+`\n }\n\n return content\n }\n\n const shouldShowBadge = () => {\n if (!item.badge) return false\n const content = item.badge.content\n const showZero = item.badge.showZero\n\n // If content is 0 and showZero is false, hide badge\n if (content === 0 && !showZero) return false\n\n return true\n }\n\n const badgeContent = getBadgeContent()\n const showBadge = shouldShowBadge()\n\n const handleTabClick = () => {\n if (!isControlled) {\n setUncontrolledActiveTab(index)\n }\n onTabChange?.(index)\n }\n\n const tab = (\n <Tab\n key={item.id}\n label={item.label}\n icon={item.icon}\n iconPosition=\"start\"\n disableRipple\n onClick={handleTabClick}\n sx={{\n minHeight: \"32px\",\n height: \"32px\",\n padding: \"0px 10px\",\n borderRadius: \"12px\",\n backgroundColor: (theme) =>\n theme.palette.backgroundPaperElevation?.[11] || \"#32344B\",\n color: \"text.primary\",\n opacity: currentValue === index ? 1 : 0.38,\n fontSize: \"13px\",\n transition: \"all 0.2s ease-in-out\",\n position: \"relative\",\n overflow: \"visible\",\n \"&:hover\": {\n opacity: currentValue === index ? 1 : 0.6,\n },\n \"&.Mui-selected\": {\n opacity: 1,\n backgroundColor: (theme) =>\n theme.palette.backgroundPaperElevation?.[11] ||\n \"#32344B\",\n color: \"text.primary\",\n },\n \"&:focus\": {\n outline: \"none\",\n },\n \"&:active\": {\n transform: \"none\",\n },\n }}\n />\n )\n\n if (!showBadge) {\n return tab\n }\n\n return (\n <TabWrapper\n key={item.id}\n component=\"span\"\n sx={{ display: \"inline-flex\" }}\n >\n <Badge\n badgeContent={badgeContent}\n color={item.badge?.color || \"error\"}\n max={item.badge?.max}\n showZero={item.badge?.showZero}\n anchorOrigin={{\n vertical: \"top\",\n horizontal: \"right\",\n }}\n overlap=\"rectangular\"\n sx={{\n \"& .MuiBadge-badge\": {\n // Ensure badge doesn't inherit tab opacity\n opacity: \"1 !important\",\n },\n }}\n >\n {tab}\n </Badge>\n </TabWrapper>\n )\n })}\n </Tabs>\n </Box>\n\n {/* Border line */}\n <Box\n sx={{\n mt: (theme) => theme.spacing(2),\n borderBottom: 1,\n borderColor: \"divider\",\n }}\n />\n\n {/* Tab Content */}\n <Box sx={{ flex: 1, overflow: \"auto\" }}>\n {items.map((item, index) => (\n <TabPanel key={item.id} value={currentValue} index={index}>\n {item.content}\n </TabPanel>\n ))}\n </Box>\n </Box>\n )\n }),\n)\n","/**\n * Formats time in seconds to D:HH:MM:SS, H:MM:SS or MM:SS format\n * Used for the default (large) timer variant\n * Automatically includes days and hours as needed for clarity\n */\nexport const formatTime = (seconds: number): string => {\n const days = Math.floor(seconds / 86400)\n const hours = Math.floor((seconds % 86400) / 3600)\n const minutes = Math.floor((seconds % 3600) / 60)\n const remainingSeconds = seconds % 60\n\n // Build time parts array\n const parts: string[] = []\n\n if (days > 0) {\n parts.push(days.toString())\n parts.push(hours.toString().padStart(2, \"0\"))\n parts.push(minutes.toString().padStart(2, \"0\"))\n parts.push(remainingSeconds.toString().padStart(2, \"0\"))\n } else if (hours > 0) {\n parts.push(hours.toString())\n parts.push(minutes.toString().padStart(2, \"0\"))\n parts.push(remainingSeconds.toString().padStart(2, \"0\"))\n } else {\n parts.push(minutes.toString())\n parts.push(remainingSeconds.toString().padStart(2, \"0\"))\n }\n\n return parts.join(\":\")\n}\n\n/**\n * Formats time in seconds to a localized human-readable format\n * Used for the small timer variant\n * Examples: \"2h 30m 15s\", \"45m 30s\", \"30s\"\n * Falls back to English units if Intl.DurationFormat is not available\n */\nexport const formatTimeLocalized = (\n seconds: number,\n locale?: string,\n): string => {\n const days = Math.floor(seconds / 86400)\n const hours = Math.floor((seconds % 86400) / 3600)\n const minutes = Math.floor((seconds % 3600) / 60)\n const remainingSeconds = seconds % 60\n\n // Try using Intl.DurationFormat if available (newer browsers)\n if (typeof Intl !== \"undefined\" && \"DurationFormat\" in Intl) {\n try {\n const duration: Record<string, number> = {}\n if (days > 0) duration.days = days\n if (hours > 0) duration.hours = hours\n if (minutes > 0) duration.minutes = minutes\n if (remainingSeconds > 0 || Object.keys(duration).length === 0) {\n duration.seconds = remainingSeconds\n }\n\n // @ts-expect-error\n // TODO: Remove suppression once Intl.DurationFormat is supported in TypeScript types.\n // See: https://github.com/microsoft/TypeScript/issues/53971\n // DurationFormat is a proposed API and not yet available in TypeScript's standard library types.\n const formatter = new Intl.DurationFormat(locale, { style: \"narrow\" })\n return formatter.format(duration)\n } catch {\n // Fall through to manual formatting\n }\n }\n\n // Manual formatting with compact units\n const parts: string[] = []\n\n if (days > 0) parts.push(`${days}d`)\n if (hours > 0) parts.push(`${hours}h`)\n if (minutes > 0) parts.push(`${minutes}m`)\n if (remainingSeconds > 0 || parts.length === 0) {\n parts.push(`${remainingSeconds}s`)\n }\n\n return parts.join(\" \")\n}\n\n/**\n * Calculates progress percentage for timer (minute-based cycles)\n */\nexport const calculateTimerProgress = (elapsedTime: number): number => {\n return ((elapsedTime / 60) % 1) * 100\n}\n","import { Box, Fade, Typography } from \"@mui/material\"\nimport { Gauge } from \"@mui/x-charts\"\nimport { useTheme } from \"@mui/material/styles\"\nimport { useTranslation } from \"react-i18next\"\nimport type { TimerState, TimerAnimationState } from \"./types\"\nimport { formatTime } from \"./utils\"\n\ninterface TimerDefaultVariantProps {\n timerState: TimerState\n animationState: TimerAnimationState\n hasError: boolean\n className?: string\n}\n\nexport const TimerDefaultVariant = ({\n timerState,\n animationState,\n hasError,\n className,\n}: TimerDefaultVariantProps) => {\n const { t } = useTranslation()\n const theme = useTheme()\n const { elapsedTime, currentProgress } = timerState\n const { showErrorAnimation, showPauseAnimation, showMainText } = animationState\n\n return (\n <Box\n className={className}\n sx={{\n position: \"relative\",\n width: 264,\n height: 264,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n <Gauge\n width={264}\n height={264}\n value={currentProgress}\n valueMin={0}\n valueMax={100}\n innerRadius=\"85%\"\n outerRadius=\"100%\"\n margin={0}\n skipAnimation={true}\n text={() => \"\"}\n sx={{\n opacity: showPauseAnimation || showErrorAnimation ? 0.6 : 1,\n transition: \"opacity 0.5s ease-out\",\n [`& .MuiGauge-valueArc`]: {\n fill: hasError\n ? theme.palette.error.light\n : theme.palette.success.main,\n transition: \"fill 0.5s ease-out\",\n },\n [`& .MuiGauge-referenceArc`]: {\n fill: \"#171927\",\n stroke: \"transparent\",\n strokeWidth: 0,\n transition:\n \"fill 0.5s ease-out, stroke 0.5s ease-out, stroke-width 0.5s ease-out\",\n },\n [`& .MuiGauge-valueText`]: {\n display: \"none\",\n },\n [`& .MuiGauge-text`]: {\n display: \"none\",\n },\n }}\n />\n\n {/* Center content overlay */}\n <Box\n sx={{\n position: \"absolute\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n width: 225,\n height: 225,\n borderRadius: \"50%\",\n backgroundColor: \"#292B3F\",\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n textAlign: \"center\",\n gap: 1,\n transition: \"background-color 0.5s ease-out\",\n }}\n >\n {/* Main display */}\n <Box\n sx={{\n position: \"relative\",\n height: \"48px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n marginBottom: 0.5,\n }}\n >\n {/* Error text */}\n <Fade in={showMainText && hasError} timeout={200}>\n <Typography\n variant=\"h6\"\n sx={{\n position: \"absolute\",\n fontSize: \"16px\",\n fontWeight: 500,\n color: theme.palette.error.light,\n }}\n >\n {t(\"timer.error\")}\n </Typography>\n </Fade>\n\n {/* Timer display */}\n <Fade in={showMainText && !hasError} timeout={300}>\n <Typography\n variant=\"h1\"\n sx={{\n position: \"absolute\",\n fontSize: \"48px\",\n fontWeight: 500,\n color: theme.palette.text.primary,\n lineHeight: 1,\n letterSpacing: \"-0.5px\",\n }}\n >\n {formatTime(elapsedTime)}\n </Typography>\n </Fade>\n </Box>\n </Box>\n </Box>\n )\n}\n","import { Box, Typography } from \"@mui/material\"\nimport { useTheme } from \"@mui/material/styles\"\nimport { useTranslation } from \"react-i18next\"\nimport type { TimerAnimationState, TimerState } from \"./types\"\nimport { formatTimeLocalized } from \"./utils\"\n\ninterface TimerSmallVariantProps {\n timerState: TimerState\n animationState: TimerAnimationState\n hasError: boolean\n compact: boolean\n className?: string\n}\n\nexport const TimerSmallVariant = ({\n timerState,\n animationState,\n hasError,\n compact,\n className,\n}: TimerSmallVariantProps) => {\n const { t, i18n } = useTranslation()\n const theme = useTheme()\n const { elapsedTime, currentProgress } = timerState\n const { showErrorAnimation, showPauseAnimation } = animationState\n\n // Simple text-only mode for compact variant\n if (compact) {\n return (\n <Box\n className={className}\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n m: 0,\n }}\n >\n <Typography\n variant=\"body2\"\n sx={{\n color: hasError\n ? theme.palette.error.light\n : theme.palette.text.primary,\n fontSize: \"14px\",\n transition: \"color 0.5s ease-out\",\n }}\n >\n {hasError\n ? t(\"timer.error\")\n : formatTimeLocalized(elapsedTime, i18n.language)}\n </Typography>\n </Box>\n )\n }\n\n return (\n <Box\n className={className}\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n m: 0,\n gap: 1,\n }}\n >\n {/* Animated progress ring icon */}\n <Box\n sx={{\n width: 20,\n height: 20,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n opacity: showPauseAnimation || showErrorAnimation ? 0.6 : 1,\n transition: \"opacity 0.5s ease-out\",\n }}\n >\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n style={{ transform: \"rotate(-90deg)\" }}\n role=\"img\"\n aria-label=\"Timer progress\"\n >\n <circle\n cx=\"10\"\n cy=\"10\"\n r=\"8\"\n fill=\"none\"\n stroke={\n hasError ? theme.palette.error.light : theme.palette.success.main\n }\n strokeWidth=\"2\"\n opacity={0.3}\n style={{\n transition: \"stroke 0.8s ease-in-out, opacity 2s ease-in-out\",\n }}\n />\n <circle\n cx=\"10\"\n cy=\"10\"\n r=\"8\"\n fill=\"none\"\n stroke={\n hasError ? theme.palette.error.light : theme.palette.success.main\n }\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeDasharray={`${2 * Math.PI * 8}`}\n strokeDashoffset={`${2 * Math.PI * 8 * (1 - currentProgress / 100)}`}\n style={{\n transition:\n \"stroke-dashoffset 0.1s ease-out, stroke 0.8s ease-in-out, opacity 2s ease-in-out\",\n }}\n />\n </svg>\n </Box>\n\n {/* Timer text display */}\n <Typography\n variant=\"body2\"\n sx={{\n color: hasError\n ? theme.palette.error.light\n : theme.palette.text.primary,\n fontSize: \"14px\",\n lineHeight: \"normal\",\n letterSpacing: \"normal\",\n transition:\n \"color 0.8s ease-in-out, font-size 0.3s ease-out, opacity 2s ease-in-out\",\n }}\n >\n {hasError\n ? t(\"timer.error\")\n : formatTimeLocalized(elapsedTime, i18n.language)}\n </Typography>\n </Box>\n )\n}\n","import { useCallback, useRef, useState } from \"react\"\nimport type { TimerAnimationState } from \"./types\"\n\nexport const useTimerAnimations = () => {\n const [animationState, setAnimationState] = useState<TimerAnimationState>({\n showPauseAnimation: false,\n showErrorAnimation: false,\n showMainText: true,\n })\n\n // Refs for managing timeouts\n const pauseAnimationTimeoutRef = useRef<NodeJS.Timeout | null>(null)\n const errorAnimationTimeoutRef = useRef<NodeJS.Timeout | null>(null)\n const fadeTimeoutRef = useRef<NodeJS.Timeout | null>(null)\n\n const triggerPauseAnimation = useCallback(() => {\n setAnimationState((prev) => ({ ...prev, showPauseAnimation: true }))\n\n if (pauseAnimationTimeoutRef.current) {\n clearTimeout(pauseAnimationTimeoutRef.current)\n }\n\n pauseAnimationTimeoutRef.current = setTimeout(() => {\n setAnimationState((prev) => ({ ...prev, showPauseAnimation: false }))\n }, 800)\n }, [])\n\n const triggerErrorAnimation = useCallback(() => {\n setAnimationState((prev) => ({ ...prev, showErrorAnimation: true }))\n\n if (errorAnimationTimeoutRef.current) {\n clearTimeout(errorAnimationTimeoutRef.current)\n }\n\n errorAnimationTimeoutRef.current = setTimeout(() => {\n setAnimationState((prev) => ({ ...prev, showErrorAnimation: false }))\n }, 600)\n }, [])\n\n const clearErrorAnimation = useCallback(() => {\n setAnimationState((prev) => ({ ...prev, showErrorAnimation: false }))\n if (errorAnimationTimeoutRef.current) {\n clearTimeout(errorAnimationTimeoutRef.current)\n }\n }, [])\n\n const triggerFadeTransition = useCallback(() => {\n setAnimationState((prev) => ({\n ...prev,\n showMainText: false,\n }))\n\n if (fadeTimeoutRef.current) {\n clearTimeout(fadeTimeoutRef.current)\n }\n\n fadeTimeoutRef.current = setTimeout(() => {\n setAnimationState((prev) => ({\n ...prev,\n showMainText: true,\n }))\n }, 200)\n }, [])\n\n const setInitialAnimationState = useCallback(() => {\n setAnimationState((prev) => ({\n ...prev,\n showMainText: true,\n }))\n }, [])\n\n // Cleanup function\n const cleanup = useCallback(() => {\n if (pauseAnimationTimeoutRef.current) {\n clearTimeout(pauseAnimationTimeoutRef.current)\n }\n if (errorAnimationTimeoutRef.current) {\n clearTimeout(errorAnimationTimeoutRef.current)\n }\n if (fadeTimeoutRef.current) {\n clearTimeout(fadeTimeoutRef.current)\n }\n }, [])\n\n return {\n animationState,\n triggerPauseAnimation,\n triggerErrorAnimation,\n clearErrorAnimation,\n triggerFadeTransition,\n setInitialAnimationState,\n cleanup,\n }\n}\n","import { useCallback, useEffect, useRef, useState } from \"react\"\nimport { useInterpolation } from \"../utils/interpolation\"\nimport type { TimerState } from \"./types\"\n\ninterface UseTimerLogicProps {\n autoStart: boolean\n hasError: boolean\n onPauseAnimation: () => void\n onErrorAnimation: () => void\n onClearErrorAnimation: () => void\n}\n\nexport const useTimerLogic = ({\n autoStart,\n hasError,\n onPauseAnimation,\n onErrorAnimation,\n onClearErrorAnimation,\n}: UseTimerLogicProps) => {\n const [timerState, setTimerState] = useState<TimerState>({\n elapsedTime: 0,\n isRunning: false,\n isPausedState: false,\n currentProgress: 0,\n wasRunningBeforeError: false,\n })\n\n // Timer-related refs\n const animationRef = useRef<number | null>(null)\n const startTimeRef = useRef<number | null>(null)\n const pausedTimeRef = useRef<number>(0)\n const lastProgressRef = useRef<number>(0)\n\n // Spring-based interpolator for smooth gauge progress animations\n const [progressInterpolator] = useInterpolation([0], {\n tension: 80,\n friction: 18,\n onChange: ([progress]) => {\n setTimerState((prev) => ({ ...prev, currentProgress: progress }))\n },\n })\n\n const start = useCallback(\n (elapsedSeconds: number = 0) => {\n const initialProgress = ((elapsedSeconds / 60) % 1) * 100\n setTimerState((prev) => ({\n ...prev,\n elapsedTime: elapsedSeconds,\n isPausedState: false,\n currentProgress: initialProgress,\n }))\n pausedTimeRef.current = 0\n lastProgressRef.current = initialProgress\n\n progressInterpolator.setImmediate([initialProgress])\n\n if (autoStart) {\n startTimeRef.current = Date.now() - elapsedSeconds * 1000\n setTimerState((prev) => ({ ...prev, isRunning: true }))\n } else {\n startTimeRef.current = null\n }\n },\n [autoStart, progressInterpolator],\n )\n\n const pause = useCallback(() => {\n if (startTimeRef.current && timerState.isRunning) {\n const now = Date.now()\n const totalElapsed = (now - startTimeRef.current) / 1000 + pausedTimeRef.current\n const currentProgress = ((totalElapsed / 60) % 1) * 100\n progressInterpolator.setTarget([currentProgress])\n \n setTimerState((prev) => ({\n ...prev,\n elapsedTime: Math.floor(totalElapsed),\n }))\n }\n\n setTimerState((prev) => ({\n ...prev,\n isRunning: false,\n isPausedState: true,\n }))\n onPauseAnimation()\n }, [\n timerState.isRunning,\n progressInterpolator,\n onPauseAnimation,\n ])\n\n const resume = useCallback(() => {\n if (timerState.isPausedState) {\n pausedTimeRef.current = timerState.elapsedTime\n startTimeRef.current = Date.now()\n setTimerState((prev) => ({\n ...prev,\n isRunning: true,\n isPausedState: false,\n }))\n }\n }, [timerState.isPausedState, timerState.elapsedTime])\n\n const reset = useCallback(() => {\n setTimerState((prev) => ({\n ...prev,\n elapsedTime: 0,\n isRunning: false,\n isPausedState: false,\n currentProgress: 0,\n }))\n pausedTimeRef.current = 0\n startTimeRef.current = null\n lastProgressRef.current = 0\n progressInterpolator.setImmediate([0])\n }, [progressInterpolator])\n\n const isPaused = useCallback(() => {\n return timerState.isPausedState\n }, [timerState.isPausedState])\n\n // Handle error state changes\n useEffect(() => {\n if (hasError) {\n if (timerState.isRunning) {\n setTimerState((prev) => ({ ...prev, wasRunningBeforeError: true }))\n pause()\n }\n onErrorAnimation()\n } else {\n if (timerState.wasRunningBeforeError && !timerState.isRunning) {\n setTimerState((prev) => ({ ...prev, wasRunningBeforeError: false }))\n resume()\n }\n onClearErrorAnimation()\n }\n }, [\n hasError,\n timerState.isRunning,\n timerState.wasRunningBeforeError,\n pause,\n resume,\n onErrorAnimation,\n onClearErrorAnimation,\n ])\n\n // Main timer loop\n useEffect(() => {\n if (timerState.isRunning) {\n const updateTimer = () => {\n if (startTimeRef.current) {\n const now = Date.now()\n const totalElapsed = (now - startTimeRef.current) / 1000 + pausedTimeRef.current\n const currentProgress = ((totalElapsed / 60) % 1) * 100\n\n setTimerState((prev) => ({\n ...prev,\n elapsedTime: Math.floor(totalElapsed),\n }))\n\n // Only update progress interpolator if progress changed significantly\n const progressDiff = Math.abs(currentProgress - lastProgressRef.current)\n if (progressDiff > 0.1) {\n progressInterpolator.setTarget([currentProgress])\n lastProgressRef.current = currentProgress\n }\n }\n animationRef.current = requestAnimationFrame(updateTimer)\n }\n animationRef.current = requestAnimationFrame(updateTimer)\n } else {\n if (animationRef.current) {\n cancelAnimationFrame(animationRef.current)\n animationRef.current = null\n }\n }\n\n return () => {\n if (animationRef.current) {\n cancelAnimationFrame(animationRef.current)\n animationRef.current = null\n }\n }\n }, [timerState.isRunning, progressInterpolator])\n\n // Interpolation animation loop\n useEffect(() => {\n let interpolationAnimationId: number | null = null\n\n const animateInterpolation = () => {\n progressInterpolator.update()\n interpolationAnimationId = requestAnimationFrame(animateInterpolation)\n }\n\n interpolationAnimationId = requestAnimationFrame(animateInterpolation)\n\n return () => {\n if (interpolationAnimationId) {\n cancelAnimationFrame(interpolationAnimationId)\n }\n }\n }, [progressInterpolator])\n\n return {\n timerState,\n controls: {\n start,\n pause,\n resume,\n reset,\n isPaused,\n },\n }\n}\n","import { observer } from \"mobx-react-lite\"\nimport { useEffect } from \"react\"\nimport { externalizeComponent } from \"../../externalizeComponent\"\nimport { TimerDefaultVariant } from \"./TimerDefaultVariant\"\nimport { TimerSmallVariant } from \"./TimerSmallVariant\"\nimport type { TimerProps } from \"./types\"\nimport { useTimerAnimations } from \"./useTimerAnimations\"\nimport { useTimerLogic } from \"./useTimerLogic\"\n\n/**\n * A simple count-up timer component with visual progress indication\n *\n * Features:\n * - Count-up timer that tracks elapsed time\n * - Visual progress gauge that cycles every minute\n * - Two display variants: large circular gauge (default) or small icon with text\n * - Full timer control: start, pause, resume, reset functionality\n * - Support for starting with elapsed time (resume mid-session)\n * - Error state support: pauses timer and shows error styling\n * - Smooth progress animations with spring physics\n * - Fully localized with i18next\n * - Material-UI theming integration\n */\nexport const Timer = externalizeComponent(\n observer(\n ({\n onTimerReady,\n autoStart = true,\n variant = \"default\",\n compact = false,\n className,\n hasError = false,\n }: TimerProps) => {\n // Initialize animation hooks\n const {\n animationState,\n triggerPauseAnimation,\n triggerErrorAnimation,\n clearErrorAnimation,\n setInitialAnimationState,\n cleanup,\n } = useTimerAnimations()\n\n // Initialize timer logic\n const { timerState, controls } = useTimerLogic({\n autoStart,\n hasError,\n onPauseAnimation: triggerPauseAnimation,\n onErrorAnimation: triggerErrorAnimation,\n onClearErrorAnimation: clearErrorAnimation,\n })\n\n // Set initial animation state\n useEffect(() => {\n setInitialAnimationState()\n }, [setInitialAnimationState])\n\n // Provide controls to parent component\n useEffect(() => {\n let isMounted = true\n const timeoutId = setTimeout(() => {\n if (isMounted) {\n onTimerReady(controls)\n }\n }, 0)\n\n return () => {\n isMounted = false\n clearTimeout(timeoutId)\n }\n }, [onTimerReady, controls])\n\n // Cleanup on unmount\n useEffect(() => {\n return cleanup\n }, [cleanup])\n\n // Render appropriate variant\n if (variant === \"small\") {\n return (\n <TimerSmallVariant\n timerState={timerState}\n animationState={animationState}\n hasError={hasError}\n compact={compact}\n className={className}\n />\n )\n }\n\n return (\n <TimerDefaultVariant\n timerState={timerState}\n animationState={animationState}\n hasError={hasError}\n className={className}\n />\n )\n },\n ),\n)\n","import {\n tryParseJson,\n type AutoReconnectingWebsocket,\n} from \"@wandelbots/nova-js\"\nimport type {\n DHParameter,\n MotionGroupDescription,\n MotionGroupState,\n NovaClient,\n OperationMode,\n RobotControllerState,\n SafetyStateType,\n} from \"@wandelbots/nova-js/v2\"\nimport { makeAutoObservable, runInAction } from \"mobx\"\nimport * as THREE from \"three\"\nimport type { Vector3Simple } from \"./JoggerConnection\"\nimport { jointValuesEqual, tcpMotionEqual } from \"./motionStateUpdate\"\n\nconst MOTION_DELTA_THRESHOLD = 0.0001\n\nexport type RobotTcpLike = {\n id: string\n readable_name: string\n position: Vector3Simple\n orientation: Vector3Simple\n}\n\nexport type MotionGroupOption = {\n selectionId: string\n}\n\nconst EMPTY_DH_PARAMETER: DHParameter = {\n a: 0,\n d: 0,\n alpha: 0,\n theta: 0,\n reverse_rotation_direction: false,\n}\n\n/**\n * Store representing the current state of a connected motion group.\n * API v2 version, not used yet in the components.\n */\nexport class ConnectedMotionGroup {\n static async connectMultiple(nova: NovaClient, motionGroupIds: string[]) {\n return Promise.all(\n motionGroupIds.map((motionGroupId) =>\n ConnectedMotionGroup.connect(nova, motionGroupId),\n ),\n )\n }\n\n static async connect(nova: NovaClient, motionGroupId: string) {\n const [_motionGroupIndex, controllerId] = motionGroupId.split(\"@\") as [\n string,\n string,\n ]\n\n const controller =\n await nova.api.controller.getCurrentRobotControllerState(controllerId)\n const motionGroup = controller?.motion_groups.find(\n (mg) => mg.motion_group === motionGroupId,\n )\n if (!controller || !motionGroup) {\n throw new Error(\n `Controller ${controllerId} or motion group ${motionGroupId} not found`,\n )\n }\n\n const motionStateSocket = nova.openReconnectingWebsocket(\n `/controllers/${controllerId}/motion-groups/${motionGroupId}/state-stream`,\n )\n\n // Wait for the first message to get the initial state\n const firstMessage = await motionStateSocket.firstMessage()\n const initialMotionState = tryParseJson(firstMessage.data)\n ?.result as MotionGroupState\n\n if (!initialMotionState) {\n throw new Error(\n `Unable to parse initial motion state message ${firstMessage.data}`,\n )\n }\n\n console.log(\n `Connected motion state websocket to motion group ${motionGroup.motion_group}. Initial state:\\n `,\n initialMotionState,\n )\n\n // Check if robot is virtual or physical\n const config = await nova.api.controller.getRobotController(\n controller.controller,\n )\n const isVirtual = config.configuration.kind === \"VirtualController\"\n\n // If there's a configured mounting, we need it to show the right\n // position of the robot model\n const description = await nova.api.motionGroup.getMotionGroupDescription(\n controllerId,\n motionGroup.motion_group,\n )\n\n // Find out what TCPs this motion group has (we need it for jogging)\n // There are converted into a RobotTcpLike for easier use in the UI\n const tcps: RobotTcpLike[] = Object.entries(description.tcps || {}).map(\n ([id, tcp]) => ({\n id,\n readable_name: tcp.name,\n position: tcp.pose.position as Vector3Simple,\n orientation: tcp.pose.orientation as Vector3Simple,\n }),\n )\n\n // Open the websocket to monitor controller state for e.g. e-stop\n const controllerStateSocket = nova.openReconnectingWebsocket(\n `/controllers/${controller.controller}/state-stream?response_rate=1000`,\n )\n\n // Wait for the first message to get the initial state\n const firstControllerMessage = await controllerStateSocket.firstMessage()\n const initialControllerState = tryParseJson(firstControllerMessage.data)\n ?.result as RobotControllerState\n\n if (!initialControllerState) {\n throw new Error(\n `Unable to parse initial controller state message ${firstControllerMessage.data}`,\n )\n }\n\n console.log(\n `Connected controller state websocket to controller ${controller.controller}. Initial state:\\n `,\n initialControllerState,\n )\n\n return new ConnectedMotionGroup(\n nova,\n controller,\n motionGroup,\n initialMotionState,\n motionStateSocket,\n isVirtual,\n tcps,\n description,\n initialControllerState,\n controllerStateSocket,\n )\n }\n\n connectedJoggingSocket: WebSocket | null = null\n // biome-ignore lint/suspicious/noExplicitAny: legacy code\n planData: any | null // tmp\n joggingVelocity: number = 10\n\n // Not mobx-observable as this changes very fast; should be observed\n // using animation frames\n rapidlyChangingMotionState: MotionGroupState\n\n // Response rate on the websocket should be a bit slower on this one since\n // we don't use the motion data\n controllerState: RobotControllerState\n\n /**\n * Reflects activation state of the motion group / robot servos. The\n * movement controls in the UI should only be enabled in the \"active\" state\n */\n activationState: \"inactive\" | \"activating\" | \"deactivating\" | \"active\" =\n \"inactive\"\n\n constructor(\n readonly nova: NovaClient,\n readonly controller: RobotControllerState,\n readonly motionGroup: MotionGroupState,\n readonly initialMotionState: MotionGroupState,\n readonly motionStateSocket: AutoReconnectingWebsocket,\n readonly isVirtual: boolean,\n readonly tcps: RobotTcpLike[],\n readonly description: MotionGroupDescription,\n readonly initialControllerState: RobotControllerState,\n readonly controllerStateSocket: AutoReconnectingWebsocket,\n ) {\n this.rapidlyChangingMotionState = initialMotionState\n this.controllerState = initialControllerState\n\n // Track controller state updates (e.g. safety state and operation mode)\n controllerStateSocket.addEventListener(\"message\", (event) => {\n const data = tryParseJson(event.data)?.result\n\n if (!data) {\n return\n }\n\n runInAction(() => {\n this.controllerState = data\n })\n })\n\n motionStateSocket.addEventListener(\"message\", (event) => {\n const latestMotionState = tryParseJson(event.data)?.result as\n | MotionGroupState\n | undefined\n\n if (!latestMotionState) {\n throw new Error(\n `Failed to get motion state for ${this.motionGroupId}: ${event.data}`,\n )\n }\n\n // handle joint position changes\n if (\n !jointValuesEqual(\n this.rapidlyChangingMotionState.joint_position,\n latestMotionState.joint_position,\n MOTION_DELTA_THRESHOLD,\n )\n ) {\n runInAction(() => {\n this.rapidlyChangingMotionState.joint_position =\n latestMotionState.joint_position\n })\n }\n\n // handle tcp pose changes\n if (\n !tcpMotionEqual(\n this.rapidlyChangingMotionState,\n latestMotionState,\n MOTION_DELTA_THRESHOLD,\n )\n ) {\n runInAction(() => {\n this.rapidlyChangingMotionState.tcp_pose = latestMotionState.tcp_pose\n })\n }\n\n // handle standstill changes\n if (\n this.rapidlyChangingMotionState.standstill !==\n latestMotionState.standstill\n ) {\n runInAction(() => {\n this.rapidlyChangingMotionState.standstill =\n latestMotionState.standstill\n })\n }\n })\n makeAutoObservable(this)\n }\n\n get motionGroupId() {\n return this.motionGroup.motion_group\n }\n\n get controllerId() {\n return this.controller.controller\n }\n\n get modelFromController() {\n return this.description.motion_group_model\n }\n\n get wandelscriptIdentifier() {\n const num = this.motionGroupId.split(\"@\")[0]\n return `${this.controllerId.replace(/-/g, \"_\")}_${num}`\n }\n\n /** Jogging velocity in radians for rotation and joint movement */\n get joggingVelocityRads() {\n return (this.joggingVelocity * Math.PI) / 180\n }\n\n get joints() {\n return this.initialMotionState.joint_position.map((_, i) => {\n return {\n index: i,\n }\n })\n }\n\n // Please note that API v2 omits 0 values\n get dhParameters() {\n if (this.description.dh_parameters === undefined) {\n return undefined\n }\n\n return this.description.dh_parameters.map((dh_param) => ({\n ...EMPTY_DH_PARAMETER,\n ...dh_param,\n }))\n }\n\n get safetyZones() {\n return this.description.safety_zones\n }\n\n /** Gets the robot mounting position offset in 3D viz coordinates */\n get mountingPosition(): [number, number, number] {\n if (!this.description.mounting) {\n return [0, 0, 0]\n }\n\n return [\n (this.description.mounting.position?.[0] || 0) / 1000,\n (this.description.mounting.position?.[1] || 0) / 1000,\n (this.description.mounting.position?.[2] || 0) / 1000,\n ]\n }\n\n /** Gets the robot mounting position rotation in 3D viz coordinates */\n get mountingQuaternion() {\n const rotationVector = new THREE.Vector3(\n this.description.mounting?.orientation?.[0] || 0,\n this.description.mounting?.orientation?.[1] || 0,\n this.description.mounting?.orientation?.[2] || 0,\n )\n\n const magnitude = rotationVector.length()\n const axis = rotationVector.normalize()\n\n return new THREE.Quaternion().setFromAxisAngle(axis, magnitude)\n }\n\n /**\n * Whether the controller is currently in a safety state\n * corresponding to an emergency stop\n */\n get isEstopActive() {\n const estopStates: SafetyStateType[] = [\n \"SAFETY_STATE_ROBOT_EMERGENCY_STOP\",\n \"SAFETY_STATE_DEVICE_EMERGENCY_STOP\",\n ]\n\n return estopStates.includes(this.controllerState.safety_state)\n }\n\n /**\n * Whether the controller is in a safety state\n * that may be non-functional for robot pad purposes\n */\n get isMoveableSafetyState() {\n const goodSafetyStates: SafetyStateType[] = [\n \"SAFETY_STATE_NORMAL\",\n \"SAFETY_STATE_REDUCED\",\n ]\n\n return goodSafetyStates.includes(this.controllerState.safety_state)\n }\n\n /**\n * Whether the controller is in an operation mode that allows movement\n */\n get isMoveableOperationMode() {\n const goodOperationModes: OperationMode[] = [\n \"OPERATION_MODE_AUTO\",\n \"OPERATION_MODE_MANUAL\",\n \"OPERATION_MODE_MANUAL_T1\",\n \"OPERATION_MODE_MANUAL_T2\",\n ]\n\n return goodOperationModes.includes(this.controllerState.operation_mode)\n }\n\n /**\n * Whether the robot is currently active and can be moved, based on the\n * safety state, operation mode and servo toggle activation state.\n */\n get canBeMoved() {\n return (\n this.isMoveableSafetyState &&\n this.isMoveableOperationMode &&\n this.activationState === \"active\"\n )\n }\n\n async deactivate() {\n if (this.activationState !== \"active\") {\n console.error(\"Tried to deactivate while already deactivating\")\n return\n }\n\n runInAction(() => {\n this.activationState = \"deactivating\"\n })\n\n try {\n await this.nova.api.controller.setDefaultMode(\n this.controllerId,\n \"ROBOT_SYSTEM_MODE_MONITOR\",\n )\n\n runInAction(() => {\n this.activationState = \"inactive\"\n })\n } catch (err) {\n runInAction(() => {\n this.activationState = \"active\"\n })\n throw err\n }\n }\n\n async activate() {\n if (this.activationState !== \"inactive\") {\n console.error(\"Tried to activate while already activating\")\n return\n }\n\n runInAction(() => {\n this.activationState = \"activating\"\n })\n\n try {\n await this.nova.api.controller.setDefaultMode(\n this.controllerId,\n \"ROBOT_SYSTEM_MODE_CONTROL\",\n )\n\n runInAction(() => {\n this.activationState = \"active\"\n })\n } catch (err) {\n runInAction(() => {\n this.activationState = \"inactive\"\n })\n throw err\n }\n }\n\n toggleActivation() {\n if (this.activationState === \"inactive\") {\n this.activate()\n } else if (this.activationState === \"active\") {\n this.deactivate()\n }\n }\n\n dispose() {\n this.motionStateSocket.close()\n if (this.connectedJoggingSocket) this.connectedJoggingSocket.close()\n }\n\n setJoggingVelocity(velocity: number) {\n this.joggingVelocity = velocity\n }\n}\n","import { createTheme, rgbToHex, type Theme } from \"@mui/material\"\n\nexport function createDarkTheme(): Theme {\n const baseTheme = createTheme({\n palette: {\n mode: \"dark\",\n text: {\n primary: \"rgba(255, 255, 255, 1)\",\n secondary: \"rgba(255, 255, 255, 0.7)\",\n disabled: \"rgba(255, 255, 255, 0.38)\",\n },\n primary: {\n main: \"rgba(142, 86, 252, 1)\",\n dark: \"rgba(136, 58, 255, 1)\",\n light: \"rgba(157, 131, 246, 1)\",\n contrastText: \"rgba(255, 255, 255, 0.87)\",\n },\n secondary: {\n main: \"rgba(255, 255, 255, 1)\",\n dark: \"rgba(255, 255, 255, 0.06)\",\n contrastText: \"rgba(255, 255, 255, 0.87)\",\n },\n tertiary: {\n main: \"rgba(100, 255, 218, 1)\",\n dark: \"rgba(38, 166, 154, 1)\",\n light: \"rgba(167, 255, 235, 1)\",\n contrastText: \"rgba(0, 0, 0, 1)\",\n },\n error: {\n main: \"rgba(239, 83, 80, 1)\",\n dark: \"rgba(229, 57, 53, 1)\",\n light: \"rgba(239, 154, 154, 1)\",\n contrastText: \"rgba(255, 255, 255, 1)\",\n },\n warning: {\n main: \"rgba(255, 171, 64, 1)\",\n dark: \"rgba(255, 145, 0, 1)\",\n light: \"rgba(255, 209, 128, 1)\",\n contrastText: \"rgba(0, 0, 0, 0.87)\",\n },\n success: {\n main: \"rgba(38, 166, 154, 1)\",\n dark: \"rgba(0, 121, 107, 1)\",\n light: \"rgba(128, 203, 196, 1)\",\n contrastText: \"rgba(255, 255, 255, 0.87)\",\n },\n background: {\n default: \"rgba(2, 6, 23, 1)\",\n paper: \"rgba(17, 19, 31, 1)\",\n },\n action: {\n active: \"rgba(255, 255, 255, 0.56)\",\n hover: \"rgba(255, 255, 255, 0.08)\",\n selected: \"rgba(255, 255, 255, 0.16)\",\n disabledBackground: \"rgba(255, 255, 255, 0.12)\",\n focus: \"rgba(255, 255, 255, 0.12)\",\n disabled: \"rgba(255, 255, 255, 0.38)\",\n },\n common: {\n white: \"rgba(255, 255, 255, 1)\",\n black: \"rgba(0, 0, 0, 1)\",\n },\n divider: \"rgba(255, 255, 255, 0.12)\",\n backgroundPaperElevation: {\n 0: \"rgba(17,19,31,1.0)\",\n 1: \"rgba(20,22,35,1.0)\",\n 2: \"rgba(23,25,39,1.0)\",\n 3: \"rgba(26,28,43,1.0)\",\n 4: \"rgba(29,31,47,1.0)\",\n 5: \"rgba(32,34,51,1.0)\",\n 6: \"rgba(35,37,55,1.0)\",\n 7: \"rgba(38,40,59,1.0)\",\n 8: \"rgba(41,43,63,1.0)\",\n 9: \"rgba(44,46,67,1.0)\",\n 10: \"rgba(47,49,71,1.0)\",\n 11: \"rgba(50,52,75,1.0)\",\n 12: \"rgba(53,55,79,1.0)\",\n 13: \"rgba(56,58,83,1.0)\",\n 14: \"rgba(59,61,87,1.0)\",\n 15: \"rgba(62,64,91,1.0)\",\n 16: \"rgba(57,63,87,1.0)\",\n },\n },\n paletteExt: {\n primary: {\n hover: \"rgba(142, 86, 252, 0.08)\",\n selected: \"rgba(142, 86, 252, 0.16)\",\n focus: \"rgba(142, 86, 252, 0.12)\",\n focusVisible: \"rgba(142, 86, 252, 0.3)\",\n outlineBorder: \"rgba(142, 86, 252, 0.5)\",\n },\n secondary: {\n tonal: \"rgba(255,255,255,0.1)\",\n },\n },\n })\n\n return {\n ...baseTheme,\n components: {\n MuiCssBaseline: {\n styleOverrides: {\n \"html, body, *\": {\n scrollbarWidth: \"none\",\n msOverflowStyle: \"none\",\n },\n\n \"html:hover, body:hover, *:hover\": {\n scrollbarWidth: \"thin\",\n scrollbarColor: `${baseTheme.palette.divider} transparent`,\n },\n\n // Global styles for DataGrid filter popup\n \".MuiDataGrid-panelContent\": {\n borderRadius: \"16px !important\",\n \"& .MuiPaper-root\": {\n borderRadius: \"16px !important\",\n },\n },\n \".MuiDataGrid-filterForm\": {\n borderRadius: \"16px !important\",\n \"& .MuiInputBase-root\": {\n borderRadius: \"16px !important\",\n \"& fieldset\": {\n borderRadius: \"16px !important\",\n },\n \"& .MuiOutlinedInput-notchedOutline\": {\n borderRadius: \"16px !important\",\n },\n },\n \"& .MuiTextField-root\": {\n \"& .MuiInputBase-root\": {\n borderRadius: \"16px !important\",\n \"& fieldset\": {\n borderRadius: \"16px !important\",\n },\n \"& .MuiOutlinedInput-notchedOutline\": {\n borderRadius: \"16px !important\",\n },\n },\n },\n },\n \".MuiDataGrid-filterFormValueInput\": {\n \"& .MuiInputBase-root\": {\n borderRadius: \"16px !important\",\n \"& fieldset\": {\n borderRadius: \"16px !important\",\n },\n \"& .MuiOutlinedInput-notchedOutline\": {\n borderRadius: \"16px !important\",\n },\n },\n },\n },\n },\n MuiDataGrid: {\n styleOverrides: {\n root: {\n // Main DataGrid styling can go here if needed\n },\n panelContent: {\n borderRadius: \"16px !important\",\n },\n filterForm: {\n \"& .MuiInputBase-root\": {\n borderRadius: \"10px !important\",\n \"& fieldset\": {\n borderRadius: \"10px !important\",\n },\n \"& .MuiOutlinedInput-notchedOutline\": {\n borderRadius: \"10px !important\",\n },\n },\n },\n filterFormValueInput: {\n \"& .MuiInputBase-root\": {\n borderRadius: \"10px !important\",\n \"& fieldset\": {\n borderRadius: \"10px !important\",\n },\n \"& .MuiOutlinedInput-notchedOutline\": {\n borderRadius: \"10px !important\",\n },\n },\n },\n },\n },\n MuiButton: {\n styleOverrides: {\n root: {\n textTransform: \"none\",\n borderRadius: \"10px\",\n },\n },\n variants: [\n {\n props: { color: \"secondary\", variant: \"contained\" },\n style: {\n border: `1px solid ${baseTheme.palette.divider}`,\n background: baseTheme.paletteExt?.secondary?.tonal?.toString(),\n },\n },\n {\n props: { color: \"secondary\", variant: \"outlined\" },\n style: {\n border: `1px solid ${baseTheme.palette.divider}`,\n },\n },\n ],\n },\n MuiTab: {\n styleOverrides: {\n root: {\n textTransform: \"none\",\n color: baseTheme.palette.text.secondary,\n \"&.Mui-selected\": {\n color: baseTheme.palette.text.primary,\n },\n },\n },\n },\n MuiTabs: {\n styleOverrides: {\n root: {\n background: baseTheme.palette.backgroundPaperElevation?.[1],\n },\n },\n },\n MuiToggleButtonGroup: {\n styleOverrides: {\n root: {\n \".MuiToggleButtonGroup-firstButton\": {\n borderRadius: \"10px 0 0 10px\",\n },\n \".MuiToggleButtonGroup-lastButton\": {\n borderRadius: \"0 10px 10px 0\",\n },\n },\n },\n },\n MuiToggleButton: {\n styleOverrides: {\n root: {\n textTransform: \"none\",\n padding: \"6px 16px\",\n },\n },\n },\n MuiSelect: {\n variants: [\n {\n props: { variant: \"filled\" },\n style: {\n borderRadius: \"10px\",\n \"::before, ::after\": {\n visibility: \"collapse\",\n },\n \".MuiInputBase-input\": {\n padding: \"6px 16px\",\n borderRadius: \"10px\",\n },\n },\n },\n ],\n },\n MuiDrawer: {\n styleOverrides: {\n paper: {\n border: \"none\",\n boxShadow: \"4px 0 8px -4px rgba(0, 0, 0, 0.3)\",\n },\n },\n },\n MuiFab: {\n styleOverrides: {\n root: {\n background: baseTheme.paletteExt?.secondary?.tonal,\n },\n },\n variants: [\n {\n props: { color: \"primary\" },\n style: {\n background: baseTheme.palette.primary.main,\n },\n },\n ],\n },\n },\n\n componentsExt: {\n JoggingPanel: {\n JoggingCartesian: {\n Axis: {\n X: {\n backgroundColor: \"rgba(215, 66, 56, 1)\",\n borderColor: \"rgba(215, 66, 56, 1)\",\n buttonBackgroundColor: {\n default: \"rgba(241, 77, 66, 1)\",\n pressed: \"rgba(138, 41, 35, 1)\",\n hovered: \"rgba(241, 77, 66, 1)\",\n disabled: \"rgba(241, 77, 66, 1)\",\n },\n color: \"rgba(255, 198, 198, 1)\",\n labelColor: baseTheme.palette.text.primary,\n },\n Y: {\n backgroundColor: \"rgba(20, 151, 108, 1)\",\n borderColor: \"rgba(20, 151, 108, 1)\",\n buttonBackgroundColor: {\n default: \"rgba(28, 188, 135, 1)\",\n pressed: \"rgba(11, 89, 63, 1)\",\n disabled: \"rgba(28, 188, 135, 1)\",\n hovered: \"rgba(28, 188, 135, 1)\",\n },\n color: \"rgba(215, 255, 242, 1)\",\n labelColor: baseTheme.palette.text.primary,\n },\n Z: {\n backgroundColor: \"rgba(1, 87, 155, 1)\",\n borderColor: \"rgba(1, 87, 155, 1)\",\n buttonBackgroundColor: {\n default: \"rgba(2, 136, 209, 1)\",\n pressed: \"rgba(2, 64, 114, 1)\",\n disabled: \"rgba(2, 136, 209, 1)\",\n hovered: \"rgba(2, 136, 209, 1)\",\n },\n color: \"rgba(210, 239, 255, 1)\",\n labelColor: baseTheme.palette.text.primary,\n },\n },\n },\n JoggingJoint: {\n Joint: {\n arrowColor: baseTheme.palette.text.primary,\n },\n },\n VelocitySlider: {\n sliderLegendColor: baseTheme.palette.text.primary,\n },\n },\n WandelscriptEditor: {\n monacoTheme: {\n base: \"vs-dark\",\n inherit: true,\n rules: [\n {\n token: \"keyword\",\n foreground: \"#b349a9ff\",\n },\n ],\n colors: {\n \"editor.background\": rgbToHex(\n baseTheme.palette.backgroundPaperElevation?.[5] ?? \"\",\n ),\n \"editor.foreground\": \"#d4d4d4\",\n \"editorLineNumber.foreground\": \"#797979\",\n \"editorLineNumber.activeForeground\": \"#e9e9e9\",\n \"editor.lineHighlightBorder\": \"#e9e9e911\",\n },\n },\n },\n },\n } as Theme\n}\n","import { createDarkTheme } from \"./createDarkTheme\"\n\nexport function createLightTheme() {\n // Keep the dark theme until we support a light theme\n const theme = createDarkTheme()\n theme.palette.mode = \"light\"\n return theme\n}\n","\"use client\"\n\nimport {\n createTheme,\n type Theme,\n type ThemeOptions,\n} from \"@mui/material/styles\"\nimport { createDarkTheme } from \"./createDarkTheme\"\nimport { createLightTheme } from \"./createLightTheme\"\n\n/**\n * Create the default Wandelbots Nova Material UI theme, overriding\n * any defaults with the provided theme options.\n */\nexport function createNovaMuiTheme(opts: ThemeOptions): Theme {\n let isDark = true\n if (opts.palette?.mode === \"light\") {\n isDark = false\n } else if (opts.palette?.mode !== \"dark\") {\n const browserPrefersLight =\n typeof window !== \"undefined\" &&\n window.matchMedia?.(\"(prefers-color-scheme: light)\")?.matches\n isDark = !browserPrefersLight\n }\n\n const baseTheme = isDark ? createDarkTheme() : createLightTheme()\n\n return createTheme(baseTheme, opts)\n}\n"],"names":["splitProps","props","result","config","_a","defaultSxConfig","prop","extendSxProp","inSx","other","systemProps","otherProps","finalSx","args","isPlainObject","generateUtilityClasses","componentName","slots","globalStatePrefix","slot","generateUtilityClass","getFunctionComponentName","Component","fallback","getWrappedName","outerType","innerType","wrapperName","functionName","getDisplayName","ForwardRef","Memo","preprocessStyles","input","variants","style","internal_serializeStyles","variant","systemDefaultTheme","createTheme","shouldForwardProp","shallowLayer","serialized","layerName","defaultOverridesResolver","_props","styles","attachTheme","themeId","defaultTheme","isObjectEmpty","processStyle","resolvedStyle","subStyle","rootStyle","otherStyles","serializeStyles","processStyleVariants","results","mergedState","variantLoop","i","key","createStyled","rootShouldForwardProp","slotShouldForwardProp","styleAttachTheme","tag","inputOptions","mutateStyles","styleFunctionSx","componentSlot","inputSkipVariantsResolver","inputSkipSx","overridesResolver","lowercaseFirstLetter","options","skipVariantsResolver","skipSx","shouldForwardPropOption","isStringTag","defaultStyledResolver","styledEngineStyled","generateStyledLabel","transformStyle","muiStyledResolver","expressionsInput","expressionsHead","expressionsBody","expressionsTail","styleOverrides","_b","resolvedStyleOverrides","slotKey","theme","themeVariants","inputStrings","placeholdersHead","placeholdersTail","outputStrings","expressions","generateDisplayName","capitalize","label","object","_","string","styled","getThemeProps","params","name","resolveProps","useThemeProps","useTheme","arg","unstable_memoTheme","styleFn","lastValue","lastTheme","value","composeClasses","getUtilityClass","classes","output","slotName","buffer","start","defaultCreateStyledComponent","systemStyled","useThemePropsDefault","useThemePropsSystem","joinChildren","children","separator","childrenArray","React","child","index","getSideFromDirection","direction","ownerState","handleBreakpoints","resolveBreakpointValues","propValue","transformer","createUnarySpacing","base","acc","breakpoint","directionValues","spacingValues","breakpoints","previousDirectionValue","deepmerge","getValue","mergeBreakpointsInOrder","createStack","createStyledComponent","useUtilityClasses","StackRoot","Stack","inProps","ref","themeProps","component","spacing","divider","className","useFlexGap","_jsx","clsx","PropTypes","systemUseThemeProps","THEME_ID","extendStatics","d","b","p","__extends","__","__values","o","m","__read","n","r","ar","e","error","__spread","Event","type","target","ErrorEvent","_super","_this","CloseEvent","code","reason","getGlobalWebSocket","isWebSocket","w","DEFAULT","ReconnectingWebSocket","url","protocols","event","minUptime","message","listener","bytes","data","maxEnqueuedMessages","e_1","listeners","listeners_1","listeners_1_1","e_1_1","l","_i","reconnectionDelayGrowFactor","_c","minReconnectionDelay","_d","maxReconnectionDelay","delay","resolve","urlProvider","maxRetries","connectionTimeout","WebSocket","AutoReconnectingWebsocket","targetUrl","opts","ev","origReconnect","reject","onMessage","onError","AvailableStorage","obj","availableStorage","DOMAIN_SUFFIX","auth0ConfigMap","getAuth0Config","instanceUrl","loginWithAuth0","auth0Config","Auth0Client","auth0Client","appState","normalize","strArray","resultArray","first","str","parts","urlJoin","dist","parse","compile","match","pathToRegexp","stringify","DEFAULT_DELIMITER","NOOP_VALUE","ID_START","ID_CONTINUE","SIMPLE_TOKENS","escapeText","escape","TokenData","tokens","originalPath","PathError","text","encodePath","chars","pos","quoteStart","consumeUntil","endType","token","path","cur","encode","delimiter","fn","tokensToFunction","missing","encoders","tokenToFunction","encoder","extras","encodeValue","decode","regexp","keys","decoders","decoder","end","sensitive","trailing","flags","sources","pathsToArray","flatten","toRegExpSource","pattern","paths","init","seq","backtrack","isSafeSegmentParam","negate","stringifyTokens","isNameSafe","isNextNameSafe","rest","char","NovaCellAPIClient","cellId","SystemApi","CellApi","MotionGroupApi","MotionGroupModelsApi","ControllerApi","ControllerInputsOutputsApi","TrajectoryPlanningApi","TrajectoryExecutionApi","TrajectoryCachingApi","ApplicationApi","JoggingApi","KinematicsApi","BUSInputsOutputsApi","VirtualControllerApi","VirtualControllerBehaviorApi","VirtualControllerInputsOutputsApi","StoreObjectApi","StoreCollisionComponentsApi","StoreCollisionSetupsApi","ApiConstructor","apiClient","mime","axios","originalFunction","res","MockNovaInstance","apiHandlers","method","handler","pathToRegexp.match","json","AxiosError","socket","defaultMotionState","permissiveInstanceUrlParse","NovaClient","axiosInstance","request","isAxiosError","err","config$1","poseToWandelscriptString","pose","position","orientation","_e","_f","positionValues","v","rotationValues","DropdownArrowIcon","jsx","SvgIcon","AppHeader","externalizeComponent","observer","appIcon","appName","apps","onAppSelect","disabled","sx","anchorEl","setAnchorEl","useState","isMenuOpen","handleMenuOpen","handleMenuClose","handleAppSelect","app","jsxs","Fragment","AppBar","Toolbar","Box","Typography","IconButton","alpha","Backdrop","Menu","MenuItem","_extends","t","_objectWithoutPropertiesLoose","useForkRef","refs","cleanupRef","refEffect","instance","cleanups","refCallback","refCleanup","runIdentityFunctionCheck","resultFunc","inputSelectorsResults","outputSelectorResult","isInputSameAsOutput","emptyObject","stack","runInputStabilityCheck","inputSelectorResultsObject","inputSelectorArgs","memoize","memoizeOptions","inputSelectorResults","inputSelectorResultsCopy","createAnEmptyObject","globalDevModeChecks","NOT_FOUND","assertIsFunction","func","errorMessage","assertIsObject","assertIsArrayOfFunctions","array","item","itemTypes","ensureIsArray","getDependencies","createSelectorArgs","dependencies","collectInputSelectorResults","length","getDevModeChecksExecutionInfo","firstRun","devModeChecks","identityFunctionCheck","inputStabilityCheck","createSingletonCache","equals","entry","createLruCache","maxSize","entries","get","cacheIndex","put","getEntries","clear","referenceEqualityCheck","a","createCacheKeyComparator","equalityCheck","prev","next","lruMemoize","equalityCheckOrOptions","providedOptions","resultEqualityCheck","comparator","resultsCount","cache","memoized","matchingEntry","StrongRef","Ref","UNTERMINATED","TERMINATED","createCacheNode","weakMapMemoize","fnNode","lastResult","cacheNode","objectCache","objectNode","primitiveCache","primitiveNode","terminatedNode","lastResultValue","createSelectorCreator","memoizeOrOptions","memoizeOptionsFromArgs","createSelectorCreatorOptions","createSelector2","recomputations","dependencyRecomputations","directlyPassedOptions","combinedOptions","argsMemoize","argsMemoizeOptions","finalMemoizeOptions","finalArgsMemoizeOptions","memoizedResultFunc","selector","createSelector","createStructuredSelector","inputSelectorsObject","selectorCreator","inputSelectorKeys","composition","reselectCreateSelector","c","f","g","h","state","a1","a2","a3","va","vb","vc","vd","ve","vf","vg","createSelectorMemoizedWithOptions","inputs","nextCacheId","combiner","nSelectors","argsLength","cacheKey","selectors","x","reselectArgs","selectorArgs","createSelectorMemoized","require$$0","is","y","objectIs","useEffect","useLayoutEffect","useDebugValue","useSyncExternalStore$2","subscribe","getSnapshot","_useState","inst","forceUpdate","checkIfSnapshotChanged","latestGetSnapshot","nextValue","useSyncExternalStore$1","shim","useSyncExternalStoreShim_production","didWarnOld18Alpha","didWarnUncachedGetSnapshot","cachedValue","useSyncExternalStoreShim_development","shimModule","require$$1","useSyncExternalStore","useRef","useMemo","withSelector_production","getServerSnapshot","isEqual","instRef","memoizedSelector","nextSnapshot","hasMemo","memoizedSnapshot","currentSelection","memoizedSelection","nextSelection","maybeGetServerSnapshot","withSelector_development","withSelectorModule","reactMajor","canUseRawUseSyncExternalStore","useStoreImplementation","useStoreR19","useStoreLegacy","useStore","store","getSelection","useSyncExternalStoreWithSelector","UNINITIALIZED","useLazyRef","initArg","EMPTY","useOnMount","noop","useStoreEffect","effect","initialize","previousState","nextState","Store","__publicField","newState","currentTick","it","changes","useChartAnimation","disableAnimation","disableCalled","useEnhancedEffect","disableAnimationCleanup","handleMediaChange","mql","skipAnimation","isAnimationDisabledEnvironment","disableAnimations","selectorChartAnimationState","selectorChartSkipAnimation","useEffectAfterFirstRender","deps","isFirstRender","ownerDocument","node","ownerWindow","useSelector","useInternalStore","DEFAULT_X_AXIS_KEY","DEFAULT_Y_AXIS_KEY","DEFAULT_MARGINS","DEFAULT_AXIS_SIZE_WIDTH","DEFAULT_AXIS_SIZE_HEIGHT","AXIS_LABEL_DEFAULT_HEIGHT","selectorChartRawXAxis","selectorChartRawYAxis","selectorChartLeftAxisSize","yAxis","axis","selectorChartRightAxisSize","selectorChartTopAxisSize","xAxis","selectorChartBottomAxisSize","selectorChartAxisSizes","left","right","top","bottom","selectorChartDimensionsState","selectorChartMargin","selectorChartDrawingArea","width","height","marginTop","marginRight","marginBottom","marginLeft","axisSizeLeft","axisSizeRight","axisSizeTop","axisSizeBottom","selectorChartSvgWidth","dimensionsState","selectorChartSvgHeight","selectorChartPropsWidth","selectorChartPropsHeight","defaultizeMargin","defaultMargin","MAX_COMPUTE_RUN","useChartDimensions","svgRef","hasInSize","stateRef","innerWidth","setInnerWidth","innerHeight","setInnerHeight","computeSize","mainEl","computedStyle","newHeight","newWidth","computedSize","elementToObserve","animationFrame","drawingArea","isXInside","isYInside","targetElement","margin","useChartExperimentalFeatures","experimentalFeatures","selectorChartExperimentalFeaturesState","selectorPreferStrictDomainInLineCharts","features","globalChartDefaultId","createChartDefaultId","useChartId","id","selectorChartIdState","selectorChartId","idState","rainbowSurgePaletteLight","rainbowSurgePaletteDark","rainbowSurgePalette","mode","defaultizeSeries","series","colors","seriesConfig","seriesGroups","seriesData","seriesIndex","seriesWithDefaultValues","applySeriesProcessors","defaultizedSeries","dataset","processedSeries","group","applySeriesLayout","processingDetected","seriesLayout","processor","thisSeries","newValue","useChartSeries","EMPTY_ARRAY","selectorChartSeriesState","selectorChartDefaultizedSeries","seriesState","selectorChartSeriesConfig","selectorChartDataset","selectorChartSeriesProcessed","eventList","Gesture","element","pointerManager","gestureRegistry","keyboardManager","changeOptionsEventName","changeStateEventName","pointerType","baseConfig","pointerModeOverrides","stateChanges","isActive","effectiveConfig","activeGestures","gestureName","ActiveGesturesRegistry","gesture","elementGestures","KeyboardManager","PointerManager","cancelEvent","firstPointer","pointerId","pointer","updatedPointer","GestureManager","gestureNames","gestureOptions","gestureTemplate","gestureInstance","PointerGesture","pointers","pointerMode","calculatedTarget","getDistance","pointA","pointB","deltaX","deltaY","calculateAverageDistance","totalDistance","pairCount","j","calculateCentroid","sum","createEventName","phase","MAIN_THRESHOLD","ANGLE_THRESHOLD","SECONDARY_THRESHOLD","getDirection","previous","current","isDiagonal","isDiagonalMovement","mainMovement","horizontalThreshold","verticalThreshold","angle","isDirectionAllowed","allowedDirections","verticalAllowed","horizontalAllowed","DIRECTION_THRESHOLD","getPinchDirection","velocity","preventDefault","MoveGesture","pointersArray","currentPosition","overrides","customEventData","eventName","domEvent","PanGesture","relevantPointers","currentCentroid","distanceDeltaX","distanceDeltaY","distance","moveDirection","lastDeltaX","lastDeltaY","remainingPointers","timeElapsed","velocityX","velocityY","el","PinchGesture","initialDistance","currentDistance","distanceChange","scale","scaleChange","deltaTime","newDistance","centroid","PressGesture","lastPosition","currentDuration","PressAndDragGesture","TapGesture","TapAndDragGesture","TurnWheelGesture","useChartInteractionListener","gestureManagerRef","svg","gestureManager","addInteractionListener","interaction","callback","updateZoomInteractionListeners","CHART_CORE_PLUGINS","_excluded","extractPluginParamsFromProps","_ref","plugins","paramsLookup","plugin","pluginParams","propName","globalId","useCharts","inPlugins","chartId","useId","publicAPI","useChartApiInitialization","innerChartRootRef","innerSvgRef","storeRef","initialState","runPlugin","pluginResponse","initializeInputApiRef","inputApiRef","fallbackPublicApiRef","ChartContext","warnedOnceCache","warnOnce","gravity","cleanMessage","useAssertModelConsistencyOutsideOfProduction","parameters","controlled","defaultValue","warningPrefix","initialDefaultValue","isControlled","useAssertModelConsistency","ZOOM_SLIDER_MARGIN","DEFAULT_ZOOM_SLIDER_SIZE","DEFAULT_ZOOM_SLIDER_PREVIEW_SIZE","DEFAULT_ZOOM_SLIDER_SHOW_TOOLTIP","defaultZoomOptions","defaultizeZoom","zoom","axisId","axisDirection","reverse","defaultizeXAxis","inAxes","offsets","axisConfig","dataKey","defaultPosition","defaultHeight","sharedConfig","defaultizeYAxis","defaultWidth","createScalarFormatter","tickNumber","zoomScale","context","domain","isBandScaleConfig","scaleConfig","isPointScaleConfig","isSymlogScaleConfig","ascending","descending","bisector","compare1","compare2","delta","zero","lo","hi","mid","center","number","ascendingBisect","bisectRight","InternMap","keyof","intern_get","intern_set","intern_delete","_intern","_key","e10","e5","e2","tickSpec","stop","count","step","power","factor","i1","i2","inc","ticks","tickIncrement","tickStep","range","initRange","initInterpolator","interpolator","implicit","ordinal","unknown","define","constructor","factory","prototype","extend","parent","definition","Color","darker","brighter","reI","reN","reP","reHex","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","color","channels","color_formatHex","color_formatHex8","color_formatHsl","color_formatRgb","hslConvert","format","rgbn","Rgb","rgba","hsla","rgbConvert","rgb","opacity","k","clampi","clampa","rgb_formatHex","rgb_formatHex8","rgb_formatRgb","hex","s","Hsl","min","max","hsl","m2","m1","hsl2rgb","clamph","clampt","constant$1","linear","exponential","gamma","nogamma","constant","rgbGamma","colorRgb","numberArray","isNumberArray","genericArray","nb","na","interpolateDate","interpolateNumber","reA","reB","one","interpolateString","bi","am","bm","bs","q","interpolate","date","interpolateRound","constants","unit","identity","clamper","bimap","d0","d1","r0","r1","polymap","bisect","copy","source","interpolateValue","transform","untransform","clamp","piecewise","rescale","u","continuous","formatDecimal","formatDecimalParts","coefficient","exponent","formatGroup","grouping","thousands","formatNumerals","numerals","re","formatSpecifier","specifier","FormatSpecifier","formatTrim","out","i0","prefixExponent","formatPrefixAuto","formatRounded","formatTypes","identity$2","map","prefixes","formatLocale$1","locale","currencyPrefix","currencySuffix","decimal","percent","minus","nan","newFormat","fill","align","sign","symbol","comma","precision","trim","prefix","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","padding","formatPrefix","defaultLocale","formatLocale","precisionFixed","precisionPrefix","precisionRound","tickFormat","linearish","prestep","maxIter","nice","interval","x0","x1","transformLog","transformExp","transformLogn","transformExpn","pow10","powp","logp","reflect","loggish","logs","pows","z","log","transformSymlog","transformSymexp","symlogish","symlog","transformPow","transformSqrt","transformSquare","powish","pow","sqrt","threshold","t0","t1","timeInterval","floori","offseti","field","test","millisecond","durationSecond","durationMinute","durationHour","durationDay","durationWeek","durationMonth","durationYear","second","timeMinute","utcMinute","timeHour","utcHour","timeDay","utcDay","unixDay","timeWeekday","timeSunday","timeMonday","timeTuesday","timeWednesday","timeThursday","timeFriday","timeSaturday","utcWeekday","utcSunday","utcMonday","utcTuesday","utcWednesday","utcThursday","utcFriday","utcSaturday","timeMonth","utcMonth","timeYear","utcYear","ticker","year","month","week","day","hour","minute","tickIntervals","tickInterval","utcTicks","utcTickInterval","timeTicks","timeTickInterval","localDate","utcDate","newDate","locale_dateTime","locale_date","locale_time","locale_periods","locale_weekdays","locale_shortWeekdays","locale_months","locale_shortMonths","periodRe","formatRe","periodLookup","formatLookup","weekdayRe","weekdayLookup","shortWeekdayRe","shortWeekdayLookup","monthRe","monthLookup","shortMonthRe","shortMonthLookup","formats","formatShortWeekday","formatWeekday","formatShortMonth","formatMonth","formatDayOfMonth","formatMicroseconds","formatYearISO","formatFullYearISO","formatHour24","formatHour12","formatDayOfYear","formatMilliseconds","formatMonthNumber","formatMinutes","formatPeriod","formatQuarter","formatUnixTimestamp","formatUnixTimestampSeconds","formatSeconds","formatWeekdayNumberMonday","formatWeekNumberSunday","formatWeekNumberISO","formatWeekdayNumberSunday","formatWeekNumberMonday","formatYear","formatFullYear","formatZone","formatLiteralPercent","utcFormats","formatUTCShortWeekday","formatUTCWeekday","formatUTCShortMonth","formatUTCMonth","formatUTCDayOfMonth","formatUTCMicroseconds","formatUTCYearISO","formatUTCFullYearISO","formatUTCHour24","formatUTCHour12","formatUTCDayOfYear","formatUTCMilliseconds","formatUTCMonthNumber","formatUTCMinutes","formatUTCPeriod","formatUTCQuarter","formatUTCSeconds","formatUTCWeekdayNumberMonday","formatUTCWeekNumberSunday","formatUTCWeekNumberISO","formatUTCWeekdayNumberSunday","formatUTCWeekNumberMonday","formatUTCYear","formatUTCFullYear","formatUTCZone","parses","parseShortWeekday","parseWeekday","parseShortMonth","parseMonth","parseLocaleDateTime","parseDayOfMonth","parseMicroseconds","parseYear","parseFullYear","parseHour24","parseDayOfYear","parseMilliseconds","parseMonthNumber","parseMinutes","parsePeriod","parseQuarter","parseUnixTimestamp","parseUnixTimestampSeconds","parseSeconds","parseWeekdayNumberMonday","parseWeekNumberSunday","parseWeekNumberISO","parseWeekdayNumberSunday","parseWeekNumberMonday","parseLocaleDate","parseLocaleTime","parseZone","parseLiteralPercent","pad","pads","newParse","Z","parseSpecifier","numberRe","percentRe","requoteRe","requote","names","dISO","dow","UTCdISO","timeFormat","utcFormat","calendar","invert","formatMillisecond","formatSecond","formatMinute","formatHour","formatDay","formatWeek","time","timeWeek","timeSecond","utcTime","utcWeek","utcSecond","k10","sequential","getSequentialColorScale","scaleThreshold","scaleSequential","getOrdinalColorScale","scaleOrdinal","getColorScale","getTickNumber","defaultTickNumber","tickMaxStep","tickMinStep","maxTicks","minTicks","scaleTickNumberByRange","getDefaultTickNumber","dimension","scaleBand","ordinalRange","bandwidth","isRound","paddingInner","paddingOuter","adjustedStart","finalStart","values","sequence","v0","v1","arg0","arg1","scalePoint","originalCopy","copied","scaleSymlog","originalScaleSymlog","originalTicks","negativeScale","linearScale","positiveScale","generateScales","negativeLogTickCount","linearTickCount","positiveLogTickCount","tick","finalTicks","linearTicks","positiveTicks","extent","negativeScaleDomain","negativeScaleExtent","negativeScaleTickCount","linearScaleDomain","linearScaleExtent","linearScaleTickCount","positiveScaleDomain","positiveScaleExtent","positiveScaleTickCount","negativeTickFormat","linearTickFormat","positiveTickFormat","negativeDomain","negativeLogScale","scaleLog","linearDomain","scaleLinear","positiveDomain","positiveLogScale","getScale","scaleType","scalePow","scaleSqrt","scaleTime","scaleUtc","isDateData","createDateFormatter","timeScale","location","cartesianInstance","polarInstance","CartesianSeriesTypes","PolarSeriesTypes","cartesianSeriesTypes","polarSeriesTypes","isCartesianSeriesType","seriesType","getAxisTriggerTooltip","formattedSeries","defaultAxisId","tooltipAxesIds","chartType","tooltipAxes","isOrdinalScale","isBandScale","getRange","DEFAULT_CATEGORY_GAP_RATIO","DEFAULT_BAR_GAP_RATIO","computeAxisValue","scales","allAxis","zoomMap","domains","axisIdsTriggeringTooltip","completeAxis","eachAxis","zoomRange","rawTickNumber","triggerTooltip","scaleRange","categoryGapRatio","barGapRatio","dateFormatter","continuousAxis","isDefined","createDiscreteScaleGetAxisFilter","axisData","zoomStart","zoomEnd","maxIndex","minVal","maxVal","dataIndex","createContinuousScaleGetAxisFilter","val","createGetAxisFilters","filters","currentAxisId","seriesXAxisId","seriesYAxisId","isDefaultAxis","createZoomLookup","axes","defaultizedZoom","getNormalizedAxisScale","zoomScaleRange","rangeGap","zoomGap","axisExtremumCallback","axisIndex","getFilters","getter","getAxisExtrema","cartesianChartTypes","extrema","getAxisDomainLimit","seriesId","niceDomain","calculateInitialDomainAndTickNumber","minData","maxData","preferStrictDomainInLineCharts","domainLimit","getDomainLimit","axisExtrema","getActualAxisExtrema","calculateFinalDomain","FlatQueue","priority","parentValue","ids","last","halfLen","ARRAY_TYPES","VERSION","Flatbush","byteOffset","magic","versionAndType","version","ArrayType","nodeSize","numItems","ArrayBufferType","numNodes","arrayTypeIndex","nodesByteSize","minX","minY","maxX","maxY","boxes","hilbertValues","hilbertMax","hilbert","sort","nodeIndex","nodeMinX","nodeMinY","nodeMaxX","nodeMaxY","filterFn","queue","upperBound","maxResults","maxDistSq","sqDistFn","sqDist","outer","dx","dy","arr","indices","pivot","swap","temp","A","B","C","D","createZoomMap","zoomItemMap","zoomItem","selectorChartZoomState","selectorChartHasZoom","xAxes","yAxes","selectorChartZoomMap","selectorChartZoomOptionsLookup","axisLookup","selectorDefaultXAxisTickNumber","selectorDefaultYAxisTickNumber","selectorChartXAxisWithDomains","selectorChartYAxisWithDomains","selectorChartZoomAxisFilters","zoomOptions","xDomains","yDomains","hasFilter","selectorChartFilteredXDomains","filteredDomains","zoomOption","filter","selectorChartFilteredYDomains","selectorChartNormalizedXScales","selectorChartNormalizedYScales","selectorChartXScales","normalizedScales","zoomedRange","selectorChartYScales","selectorChartXAxis","selectorChartYAxis","selectorChartDefaultXAxisId","selectorChartDefaultYAxisId","allSeries","xAxesScaleMap","yAxesScaleMap","defaultXAxisId","defaultYAxisId","validSeries","flatbushMap","xAxisId","yAxisId","flatbush","originalXScale","originalYScale","datum","getAsANumber","getAxisIndex","pointerValue","valueAsNumber","pointValue","getAxisValue","invertedValue","getSVGPoint","pt","useEventCallback","useChartInteraction","cleanInteraction","setLastUpdateSource","setPointerCoordinate","coordinate","selectInteraction","selectorChartsInteractionIsInitialized","selectorChartsInteractionPointer","selectorChartsInteractionPointerX","selectorChartsInteractionPointerY","isDeepEqual","entriesA","entryA","indexGetter","selectChartsInteractionAxisIndex","selectorChartsInteractionXAxisIndex","selectorChartsInteractionYAxisIndex","selectorChartAxisInteraction","valueGetter","indexes","xIndex","yIndex","selectorChartsInteractionTooltipXAxes","selectorChartsInteractionTooltipYAxes","xTooltip","yTooltip","checkHasInteractionPlugin","useChartCartesianAxis","onHighlightedAxisChange","duplicates","isInteractionEnabled","xAxisWithScale","xAxisIds","yAxisWithScale","yAxisIds","usedXAxis","usedYAxis","prevAxisInteraction","nextAxisInteraction","itemIndex","hasInteractionPlugin","moveEndHandler","panEndHandler","pressEndHandler","gestureHandler","srvEvent","svgPoint","moveHandler","panHandler","pressHandler","onAxisClick","axisClickHandler","isXAxis","USED_AXIS_ID","axisValue","seriesValues","seriesItem","providedXAxisId","providedYAxisId","axisKey","selectKeyboardNavigation","keyboardNavigationState","selectorChartsHasFocusedItem","selectorChartsFocusedSeriesType","selectorChartsFocusedSeriesId","selectorChartsFocusedDataIndex","selectorChartsIsKeyboardNavigationEnabled","createSelectAxisHighlight","keyboardState","fastObjectShallowCompare","aLength","bLength","useChartTooltip","removeTooltipItem","itemToRemove","prevItem","newItem","deg2rad","defaultRad","addDefaultId","defaultId","processColorMap","getZAxisState","zAxis","zAxisLookup","axisIds","defaultizedId","useChartZAxis","selectRootState","selectorChartZAxis","useChartHighlight","clearHighlight","prevHighlight","setHighlight","findMinMax","createResult","getBaseExtremum","getValueExtremum","stackedData","seriesMin","seriesMax","seriesAcc","getExtremumX","getExtremumY","abs","atan2","cos","sin","epsilon","pi","halfPi","tau","acos","asin","tauEpsilon","append","strings","appendRound","digits","Path","y1","x2","y2","y0","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","t01","t21","a0","ccw","cw","da","withPath","shape","arcInnerRadius","arcOuterRadius","arcStartAngle","arcEndAngle","arcPadAngle","intersect","x3","y3","x10","y10","x32","y32","cornerTangents","rc","ox","oy","x11","y11","x00","y00","d2","cx0","cy0","cx1","cy1","dx0","dy0","dx1","dy1","d3Arc","innerRadius","outerRadius","cornerRadius","padRadius","startAngle","endAngle","padAngle","arc","a01","a11","a00","a10","da0","da1","ap","rp","rc0","rc1","p0","p1","oc","ax","ay","bx","by","kc","lc","identity$1","d3Pie","sortValues","pie","arcs","pa","d3StackOffsetNone","order","s0","s1","d3StackOrderNone","stackValue","stackSeries","d3Stack","orderNone","offset","offsetNone","sz","oz","d3StackOffsetExpand","none","d3StackOffsetDiverging","yp","yn","d3StackOffsetSilhouette","d3StackOffsetWiggle","s2","si","sij0","sij1","s3","sk","skj0","skj1","d3StackOrderAppearance","peaks","peak","vi","vj","d3StackOrderAscending","sums","d3StackOrderDescending","d3StackOrderInsideOut","appearance","tops","bottoms","d3StackOrderReverse","StackOrder","StackOffset","getStackingGroups","seriesOrder","defaultStrategy","stackingGroups","stackIndex","stackOrder","stackOffset","barValueFormatter","seriesProcessor","d3Dataset","completedSeries","stackingGroup","stackingOffset","stackingOrder","stackedSeries","getLabel","legendGetter","formattedLabel","getSeriesColorFn","getColor","verticalLayout","bandColorScale","valueColorScale","bandValues","getSeriesColor","tooltipGetter","identifier","formattedValue","axisTooltipGetter","getBandSize","bandWidth","groupCount","gapRatio","barWidth","shouldInvertStartCoordinate","baseValue","isVerticalAndPositive","isHorizontalAndNegative","invertStartCoordinate","getBarDimensions","xAxisConfig","yAxisConfig","numberOfGroups","groupIndex","baseScaleConfig","barOffset","xScale","yScale","seriesValue","valueCoordinates","minValueCoord","maxValueCoord","barSize","startCoordinate","tooltipItemPositionGetter","axesConfig","placement","itemSeries","dimensions","getSeriesWithDefaultValues","barSeriesConfig","datasetKeys","missingKeys","zColorScale","yColorScale","xColorScale","xValue","yValue","scatterSeriesConfig","getSeriesExtremums","getValues","stackedValue","area","isArea","seriesExtremums","lineSeriesConfig","getSortingComparator","piePoint","point","getPercentageValue","refValue","percentage","getPieCoordinates","drawing","cxParam","cyParam","availableRadius","cx","cy","seriesLayoutRecord","arcLabelRadius","inner","baseInnerRadius","baseOuterRadius","dataItem","points","radius","pieSeriesConfig","defaultSeriesConfig","defaultPlugins","ChartProvider","contextValue","useChartContext","useDrawingArea","useXAxes","useYAxes","useZAxes","zAxisIds","useSvgRef","useChartGradientIdBuilder","useChartGradientIdObjectBoundBuilder","NEWTON_ITERATIONS","NEWTON_MIN_SLOPE","SUBDIVISION_PRECISION","SUBDIVISION_MAX_ITERATIONS","kSplineTableSize","kSampleStepSize","float32ArraySupported","aA1","aA2","calcBezier","aT","getSlope","binarySubdivide","aX","aA","aB","mX1","mX2","currentX","currentT","newtonRaphsonIterate","aGuessT","currentSlope","LinearEasing","src","mY1","mY2","sampleValues","getTForX","intervalStart","currentSample","lastSample","guessForT","initialSlope","ANIMATION_DURATION_MS","ANIMATION_TIMING_FUNCTION_JS","BezierEasing","frame","timeout","pokeDelay","taskHead","taskTail","clockLast","clockNow","clockSkew","clock","setFrame","now","clearNow","Timer","timer","sleep","timerFlush","wake","nap","poke","t2","elapsed","Transition","duration","easingFn","onTick","easedT","shallowEqual","objA","objB","keysA","keysB","currentKey","useAnimateInternal","createInterpolator","applyProps","skip","initialProps","lastInterpolatedPropsRef","transitionRef","elementRef","lastPropsRef","animate","lastInterpolatedProps","interpolatedProps","lastElement","useAnimate","transformProps","animateRef","animatedProps","usedProps","ChartsPiecewiseGradient","isReversed","gradientId","size","colorMap","_jsxs","PX_PRECISION","ChartsContinuousGradient","gradientUnits","colorScale","extremumValues","extremumPositions","numberOfPoints","keyPrefix","ChartsContinuousGradientObjectBound","ChartsAxesGradients","svgHeight","svgWidth","getGradientId","getObjectBoundGradientId","filteredYAxisIds","filteredXAxisIds","filteredZAxisIds","objectBoundGradientId","getSurfaceUtilityClass","ChartsSurfaceStyles","ChartsSurface","propsWidth","propsHeight","isKeyboardNavigationEnabled","hasFocusedItem","hasZoom","handleRef","title","desc","hasIntrinsicSize","getPoint","radAngle","getArcRatios","minAngle","maxAngle","initialAngle","cardinalAngle","getAvailableRadius","ratio","space","GaugeContext","GaugeProvider","valueMin","valueMax","outerRadiusParam","innerRadiusParam","cornerRadiusParam","ratios","innerCx","innerCy","maxRadius","usedWidth","usedHeight","startAngleRad","endAngleRad","useGaugeState","GStyled","GaugeContainer","inWidth","inHeight","useSkipAnimation","storeSkipAnimation","gaugeValueArcPropsInterpolator","from","to","interpolateStartAngle","interpolateEndAngle","interpolateInnerRadius","interpolateOuterRadius","interpolateCornerRadius","useAnimateGaugeValueArc","getGaugeUtilityClass","gaugeClasses","_excluded2","StyledPath","GaugeValueArc","valueAngle","AnimatedGaugeValueArc","_ref2","inSkipAnimation","GaugeReferenceArc","isSsr","stringCache","MAX_CACHE_NUM","PIXEL_STYLES","convertPixelValue","AZ","camelCaseToDashCase","getStyleString","getStringSize","styleString","measurementSpanContainer","getMeasurementContainer","measurementElem","styleKey","measureSVGTextElement","measurementContainer","getWordsByLines","needsComputation","subText","useIsHydrated","isHydrated","setIsHydrated","ChartsText","styleProps","textProps","textAnchor","dominantBaseline","wordsByLines","startDy","line","defaultFormatter","GaugeValueText","formattedText","Gauge","formatTime","seconds","days","hours","minutes","remainingSeconds","formatTimeLocalized","calculateExactProgress","currentState","totalElapsed","maxTime","DefaultVariant","timerState","animationState","hasError","i18n","useTranslation","remainingTime","currentProgress","showErrorAnimation","showPauseAnimation","showPulsatingText","pulsatingFinished","showLabels","showMainText","showIdlePulsating","idleDotsCount","Fade","SmallVariant","compact","useAnimations","setAnimationState","pauseAnimationTimeoutRef","errorAnimationTimeoutRef","pulsatingIntervalRef","fadeTimeoutRef","pulseCountRef","idlePulsatingIntervalRef","idleDotsIntervalRef","triggerPauseAnimation","useCallback","triggerErrorAnimation","clearErrorAnimation","startPulsatingAnimation","onComplete","stopPulsatingAnimation","startIdleAnimations","stopIdleAnimations","triggerFadeTransition","setInitialAnimationState","cleanup","useTimerLogic","autoStart","onCycleEnd","onMeasuringComplete","onPauseAnimation","onErrorAnimation","onClearErrorAnimation","onStartPulsating","setTimerState","animationRef","startTimeRef","pausedTimeRef","progressInterpolator","useInterpolation","progress","setIdle","startMeasuring","elapsedSeconds","initialProgress","startNewCycle","maxTimeSeconds","completeMeasuring","pause","additionalElapsed","exactProgress","resume","isPaused","updateTimer","remaining","interpolationAnimationId","animateInterpolation","CycleTimer","onCycleComplete","prevStateRef","controls","prevState","isMounted","timeoutId","memoTheme","useDefaultProps","useSystemDefaultProps","getSvgIconUtilityClass","fontSize","SvgIconRoot","_h","_g","_j","_l","_k","_n","_m","htmlColor","inheritViewBox","titleAccess","viewBox","hasSvgAsChild","more","createSvgIcon","displayName","useControlled","defaultProp","valueState","setValue","setValueIfUncontrolled","ClearIcon","FilterListIcon","SearchIcon","WandelbotsDataGrid","columns","getRowData","onRowClick","selectedItem","getItemId","showCount","searchPlaceholder","dataGridProps","CustomToolbar","selectFirstByDefault","apiRef","useGridApiRef","containerRef","internalSelectedItem","setInternalSelectedItem","rows","col","resizeObserver","effectiveSelectedItem","firstItem","handleRowClick","selectedRowId","DefaultToolbar","FilterPanelTrigger","ToolbarButton","Divider","QuickFilter","QuickFilterTrigger","QuickFilterControl","QuickFilterClear","ToolbarComponent","DataGrid","SvgJogMinus","titleId","forwardRef","SvgJogPlus","JoggingCartesianAxisControl","getDisplayedValue","startJogging","stopJogging","activeJoggingDirection","useAnimationFrame","displayValue","valueContainerRef","localActiveJoggingDirection","setLocalActiveJoggingDirection","onPointerUpOrOut","showJoggingDirection","borderColor","sxAxisControlButtonBase","sxAxisControlButtonDefault","sxAxisControlButtonPressed","onPointerDown","JogMinus","JogPlus","ChevronLeft","ChevronRight","isObject","freeGlobal","freeSelf","root","reWhitespace","trimmedEndIndex","reTrimStart","baseTrim","Symbol","objectProto","hasOwnProperty","nativeObjectToString","symToStringTag","getRawTag","isOwn","unmasked","objectToString","nullTag","undefinedTag","baseGetTag","isObjectLike","symbolTag","isSymbol","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","toNumber","isBinary","FUNC_ERROR_TEXT","nativeMax","nativeMin","debounce","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","invokeFunc","thisArg","leadingEdge","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","timeWaiting","shouldInvoke","trailingEdge","cancel","flush","debounced","isInvoking","throttle","JoggingJointRotationControl","lowerLimitDegs","upperLimitDegs","getValueDegs","currentValue","setCurrentValue","pressedButtonStyle","useLocalObservable","dir","updateValue","onPointerDownMinus","onPointerDownPlus","onPointerUp","onPointerOut","formatDegrees","Slider","_o","MoveIcon","ShareIcon","Quaternion","dst","dstOffset","src0","srcOffset0","src1","srcOffset1","z0","w0","z1","w1","sqrSin","len","tDir","quaternion","euler","update","c1","c2","c3","halfAngle","te","m11","m12","m13","m21","m22","m23","m31","m32","m33","trace","vFrom","vTo","qax","qay","qaz","qaw","qbx","qby","qbz","qbw","qb","cosHalfTheta","sqrSinHalfTheta","sinHalfTheta","halfTheta","ratioA","ratioB","qa","theta1","theta2","r2","attribute","Vector3","scalar","_quaternion","vx","vy","vz","qx","qy","qz","qw","tx","ty","tz","camera","v2","az","bz","denominator","planeNormal","_vector","normal","theta","dz","phi","sinPhiRadius","sy","jointValuesEqual","oldJointValues","newJointValues","changeDeltaThreshold","jointIndex","poseEqual","oldTcp","newTcp","changedDelta","tcpMotionEqual","oldMotionState","newMotionState","unwrapRotationVector","newRotationVectorApi","currentRotationVectorApi","currentRotationVector","newRotationVector","currentAngle","currentAxis","newAngle","newAxis","angleDifference","MOTION_DELTA_THRESHOLD","MotionStreamConnection","nova","controller","motionGroup","description","initialMotionState","motionStateSocket","latestMotionState","tryParseJson","runInAction","makeAutoObservable","motionGroupId","_motionGroupIndex","controllerId","mg","firstMessage","num","API_ERROR_CONNECTION_BLOCKED","JoggerConnection","motionStream","jogger","sockets","skipReinitializeIfSameMode","connectionFailedTimeout","joint","velocityRadsPerSec","velocityMmPerSec","rotation","translation","XYZ_TO_VECTOR","currentTcpPose","currentJoints","velocityInRelevantUnits","motion","commands","targetTcpPosition","currentRotationRad","currentRotationDirection","differenceRotationRad","differenceRotationDirection","f1","f2","f3","f4","dotProduct","crossProduct","newRotationRad","f5","targetTcpOrientation","motion_group_setup","motionPlanRes","trajectoryData","messageInitializeMovementResponse","waitForMovementToStartAndFinish","when","waitForMovementToFinish","messageStartMovementResponse","asyncTag","funcTag","genTag","proxyTag","isFunction","coreJsData","maskSrcKey","uid","isMasked","funcProto","funcToString","toSource","reRegExpChar","reIsHostCtor","reIsNative","baseIsNative","getNative","defineProperty","baseAssignValue","arrayAggregator","setter","iteratee","accumulator","createBaseFor","fromRight","keysFunc","iterable","baseFor","baseTimes","argsTag","baseIsArguments","propertyIsEnumerable","isArguments","isArray","stubFalse","freeExports","freeModule","moduleExports","Buffer","nativeIsBuffer","isBuffer","MAX_SAFE_INTEGER","reIsUint","isIndex","isLength","arrayTag","boolTag","dateTag","errorTag","mapTag","numberTag","objectTag","regexpTag","setTag","stringTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","typedArrayTags","baseIsTypedArray","baseUnary","freeProcess","nodeUtil","types","nodeIsTypedArray","isTypedArray","arrayLikeKeys","inherited","isArr","isArg","isBuff","isType","skipIndexes","isPrototype","Ctor","proto","overArg","nativeKeys","baseKeys","isArrayLike","baseForOwn","createBaseEach","eachFunc","collection","baseEach","baseAggregator","listCacheClear","eq","assocIndexOf","arrayProto","splice","listCacheDelete","lastIndex","listCacheGet","listCacheHas","listCacheSet","ListCache","stackClear","stackDelete","stackGet","stackHas","Map","nativeCreate","hashClear","hashDelete","HASH_UNDEFINED","hashGet","hashHas","hashSet","Hash","mapCacheClear","isKeyable","getMapData","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","MapCache","LARGE_ARRAY_SIZE","stackSet","pairs","setCacheAdd","setCacheHas","SetCache","arraySome","predicate","cacheHas","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","equalArrays","bitmask","customizer","equalFunc","isPartial","arrLength","othLength","arrStacked","othStacked","seen","arrValue","othValue","compared","othIndex","Uint8Array","mapToArray","setToArray","set","symbolProto","symbolValueOf","equalByTag","convert","stacked","arrayPush","baseGetAllKeys","symbolsFunc","arrayFilter","resIndex","stubArray","nativeGetSymbols","getSymbols","getAllKeys","equalObjects","objProps","objLength","othProps","objStacked","skipCtor","objValue","objCtor","othCtor","DataView","Promise","Set","WeakMap","promiseTag","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","getTag","ctorString","baseIsEqualDeep","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","baseIsEqual","baseIsMatch","matchData","srcValue","isStrictComparable","getMatchData","matchesStrictComparable","baseMatches","reIsDeepProp","reIsPlainProp","isKey","resolver","MAX_MEMOIZE_SIZE","memoizeCapped","rePropName","reEscapeChar","stringToPath","quote","subString","arrayMap","symbolToString","baseToString","toString","castPath","toKey","baseGet","baseHasIn","hasPath","hasFunc","hasIn","baseMatchesProperty","baseProperty","basePropertyDeep","property","baseIteratee","createAggregator","initializer","keyBy","idCounter","uniqueId","discreteIncrementOptions","incrementOptions","ORIENTATION_IDS","JoggingStore","coordSystems","motionGroupDescription","tcps","cs","autorun","coordinatesystems","tcp","dispose","countBy","save","_event","tab","incrementJog","lockId","JoggingBlocked","Alert","AlertTitle","Button","SvgAxisX","SvgAxisY","SvgAxisZ","SvgRotation","JoggingJointLimitDetector","jointLimitsReached","setJointLimitsReached","jointLimitsReachedRef","newLimitsReached","jointLimitReachedIndices","limitReached","AdornedFormControl","FormControl","AdornedSelect","labelValue","InputLabel","Select","JoggingOptions","componentId","joggingOptions","translateOrientation","orientationId","select","idx","JoggingToggleButtonGroup","ToggleButtonGroup","chainPropTypes","propType1","propType2","isHostComponent","appendOwnerState","elementType","extractEventHandlers","excludeKeys","omitEventHandlers","mergeSlotProps","getSlotProps","additionalProps","externalSlotProps","externalForwardedProps","joinedClasses","mergedStyle","eventHandlers","componentsPropsWithoutEventHandlers","otherPropsWithoutEventHandlers","internalSlotProps","resolveComponentProps","componentProps","slotState","useSlotProps","skipResolvingSlotProps","resolvedComponentsProps","mergedProps","internalRef","isFocusVisible","visuallyHidden","areArraysEqual","array1","array2","itemComparer","INTENTIONAL_DRAG_COUNT_THRESHOLD","getNewValue","asc","findClosest","closestIndex","trackFinger","touchId","touchEvent","touch","valueToPercent","percentToValue","getDecimalPrecision","matissaDecimalPart","decimalPart","roundValueToStep","nearest","setValueIndex","focusThumb","sliderRef","activeIndex","setActive","doc","areValuesEqual","oldValue","axisProps","Identity","cachedSupportsTouchActionNone","doesSupportTouchActionNone","useSlider","ariaLabelledby","disableSwap","isRtl","marksProp","onChange","onChangeCommitted","shiftStep","tabIndex","valueProp","active","open","setOpen","dragging","setDragging","moveCount","lastChangedValue","valueDerived","setValueState","handleChange","thumbIndex","nativeEvent","clonedEvent","marks","marksValues","mark","focusedThumbIndex","setFocusedThumbIndex","createHandleHiddenInputFocus","otherHandlers","createHandleHiddenInputBlur","changeValue","valueInput","marksIndex","maxMarksValue","previousValue","createHandleHiddenInputKeyDown","stepSize","currentMarkIndex","decrementKeys","incrementKeys","createHandleHiddenInputChange","previousIndex","getFingerNewValue","finger","move","slider","handleTouchMove","handleTouchEnd","stopListening","handleTouchStart","createHandleMouseDown","trackOffset","trackLeap","getRootProps","externalProps","externalHandlers","ownEventHandlers","mergedEventHandlers","createHandleMouseOver","createHandleMouseLeave","getThumbProps","getThumbStyle","cssWritingMode","shouldSpreadAdditionalProps","Slot","hasCorrectMainProperty","checkSimplePaletteColorValues","additionalPropertiesToCheck","createSimplePaletteValueFilter","getSliderUtilityClass","sliderClasses","useValueLabelClasses","SliderValueLabel","SliderRoot","SliderRail","SliderTrack","SliderThumb","BaseSliderValueLabel","SliderMark","markActive","SliderMarkLabel","marked","track","Forward","inputProps","useRtl","ariaLabel","ariaValuetext","components","componentsProps","classesProp","getAriaLabel","getAriaValueText","slotProps","valueLabelDisplay","valueLabelFormat","getHiddenInputProps","RootSlot","RailSlot","TrackSlot","ThumbSlot","ValueLabelSlot","MarkSlot","MarkLabelSlot","InputSlot","rootSlotProps","railSlotProps","trackSlotProps","thumbSlotProps","valueLabelSlotProps","markSlotProps","markLabelSlotProps","inputSlotProps","rootProps","railProps","trackProps","thumbProps","valueLabelProps","markProps","markLabelProps","inputSliderProps","ValueLabelComponent","isNumber","VelocitySlider","onSliderChange","newVelocity","VelocitySliderLabel","JoggingVelocitySlider","JoggingCartesianTab","onMotionTypeChange","newMotionType","useReaction","runIncrementalCartesianJog","increment","tcpPose","jointPosition","degreesToRadians","startCartesianJogging","getAxisColors","motionType","axisColors","axisList","XAxisIcon","YAxisIcon","ZAxisIcon","formatMM","radiansToDegrees","ToggleButton","RotationIcon","JoggingJointTab","startJointJogging","stopJointJogging","jointLimits","JoggingPanel","isString","joggingStore","JoggingPanelInner","LoadingCover","renderTabContent","Tabs","icon","Tab","CopyableText","tooltipOpen","setTooltipOpen","onCopyText","selection","Tooltip","PoseCartesianValues","showCopyButton","copyMessage","setCopyMessage","poseString","handleCopy","PoseJointValues","joints","LogStore","level","logMessage","makeObservable","observable","action","createLogMessage","createDebugMessage","createInfoMessage","createWarningMessage","createErrorMessage","LogViewer","messages","onClear","scrollContainerRef","scrollContainer","formatTimestamp","timestamp","getMessageColor","LogMessage","isExpanded","setIsExpanded","copyTooltip","setCopyTooltip","isHovered","setIsHovered","isLongMessage","displayMessage","ContentCopy","ExpandLess","ExpandMore","Paper","DocumentIcon","LogPanel","externalStore","onStoreReady","logViewerProps","onStoreReadyRef","logStore","handleClear","getBaseUrl","currentUrl","NoMotionGroupModal","baseUrl","Dialog","DialogTitle","DialogContent","DialogActions","ErrorIcon","SvgRobot","RobotSetupReadinessState","RobotSetupReadinessIndicator","setupState","getStateInfo","indicatorColor","backgroundColor","textColor","Chip","RobotListItem","robotName","robotType","PreconditionComponent","displayRobotType","isReady","RobotIcon","SvgControllerTypePhysical","SvgControllerTypeVirtual","IndicatorWithExplanation","explanation","literalValue","anchorOrigin","transformOrigin","Popover","ControllerTypeIndicator","isVirtual","ControllerTypeVirtualIcon","Trans","ControllerTypePhysicalIcon","SvgOperationModeAutomatic","SvgOperationModeError","SvgOperationModeManual","OperationModeIndicator","operationMode","OperationModeAutomaticIcon","OperationModeManualIcon","OperationModeErrorIcon","SvgSafetyStateError","SvgSafetyStateEstop","SvgSafetyStateManualActionRequired","SvgSafetyStateNormal","SvgSafetyStateStop","SafetyStateIndicator","safetyState","SafetyStateNormalIcon","SafetyStateEstopIcon","SafetyStateStopIcon","SafetyStateManualActionRequiredIcon","SafetyStateErrorIcon","assertUnreachable","SafetyBar","gap","StyledSelectableFab","Fab","selected","SelectableFab","TabPanel","TabWrapper","fullWidth","indicator","scrollButtons","selectionFollowsFocus","cleanProps","TabBar","items","activeTab","defaultActiveTab","onTabChange","uncontrolledActiveTab","setUncontrolledActiveTab","handleTabChange","getBadgeContent","content","shouldShowBadge","showZero","badgeContent","showBadge","handleTabClick","Badge","TimerDefaultVariant","elapsedTime","TimerSmallVariant","useTimerAnimations","lastProgressRef","reset","onTimerReady","EMPTY_DH_PARAMETER","ConnectedMotionGroup","initialControllerState","controllerStateSocket","motionGroupIds","firstControllerMessage","dh_param","rotationVector","THREE","magnitude","createDarkTheme","baseTheme","rgbToHex","createLightTheme","createNovaMuiTheme","isDark"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,302,303,304,305,306,307,308,309,310,312,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,334,335,336,337,338,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,465,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,500]}