{"version":3,"file":"index.cjs","sources":["../node_modules/react/cjs/react-jsx-runtime.production.js","../node_modules/react/cjs/react-jsx-runtime.development.js","../node_modules/react/jsx-runtime.js","../src/components/3d-viewport/collider/colliderShapeToBufferGeometry.ts","../src/components/3d-viewport/collider/ColliderElement.tsx","../src/components/3d-viewport/collider/ColliderCollection.tsx","../src/components/3d-viewport/collider/CollisionSceneRenderer.tsx","../src/components/3d-viewport/PresetEnvironment.tsx","../src/components/3d-viewport/SafetyZonesRenderer.tsx","../src/components/3d-viewport/TrajectoryRenderer.tsx","../src/i18n/config.ts","../src/externalizeComponent.tsx","../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/composeClasses/composeClasses.js","../node_modules/clsx/dist/clsx.mjs","../node_modules/@mui/utils/esm/formatMuiErrorMessage/formatMuiErrorMessage.js","../node_modules/@mui/material/esm/styles/identifier.js","../node_modules/@emotion/hash/dist/emotion-hash.esm.js","../node_modules/@emotion/unitless/dist/emotion-unitless.esm.js","../node_modules/@emotion/memoize/dist/emotion-memoize.esm.js","../node_modules/@emotion/serialize/dist/emotion-serialize.esm.js","../node_modules/@mui/styled-engine/esm/index.js","../node_modules/react-is/cjs/react-is.production.js","../node_modules/react-is/cjs/react-is.development.js","../node_modules/react-is/index.js","../node_modules/@mui/utils/esm/deepmerge/deepmerge.js","../node_modules/@mui/system/esm/createBreakpoints/createBreakpoints.js","../node_modules/@mui/system/esm/cssContainerQueries/cssContainerQueries.js","../node_modules/@mui/system/esm/createTheme/shape.js","../node_modules/@mui/system/esm/responsivePropType/responsivePropType.js","../node_modules/@mui/system/esm/merge/merge.js","../node_modules/@mui/system/esm/breakpoints/breakpoints.js","../node_modules/@mui/utils/esm/capitalize/capitalize.js","../node_modules/@mui/system/esm/style/style.js","../node_modules/@mui/system/esm/memoize/memoize.js","../node_modules/@mui/system/esm/spacing/spacing.js","../node_modules/@mui/system/esm/createTheme/createSpacing.js","../node_modules/@mui/system/esm/compose/compose.js","../node_modules/@mui/system/esm/borders/borders.js","../node_modules/@mui/system/esm/cssGrid/cssGrid.js","../node_modules/@mui/system/esm/palette/palette.js","../node_modules/@mui/system/esm/sizing/sizing.js","../node_modules/@mui/system/esm/styleFunctionSx/defaultSxConfig.js","../node_modules/@mui/system/esm/styleFunctionSx/styleFunctionSx.js","../node_modules/@mui/system/esm/createTheme/applyStyles.js","../node_modules/@mui/system/esm/createTheme/createTheme.js","../node_modules/@mui/system/esm/useThemeWithoutDefault/useThemeWithoutDefault.js","../node_modules/@mui/system/esm/useTheme/useTheme.js","../node_modules/@mui/system/esm/styleFunctionSx/extendSxProp.js","../node_modules/@mui/utils/esm/ClassNameGenerator/ClassNameGenerator.js","../node_modules/@mui/utils/esm/generateUtilityClass/generateUtilityClass.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/utils/esm/resolveProps/resolveProps.js","../node_modules/@mui/system/esm/useThemeProps/getThemeProps.js","../node_modules/@mui/system/esm/useThemeProps/useThemeProps.js","../node_modules/@mui/utils/esm/useEnhancedEffect/useEnhancedEffect.js","../node_modules/@mui/utils/esm/clamp/clamp.js","../node_modules/@mui/system/esm/colorManipulator/colorManipulator.js","../node_modules/@mui/system/esm/RtlProvider/index.js","../node_modules/@mui/system/esm/DefaultPropsProvider/DefaultPropsProvider.js","../node_modules/@mui/system/esm/memoTheme.js","../node_modules/@mui/system/esm/cssVars/createGetCssVar.js","../node_modules/@mui/system/esm/cssVars/cssVarsParser.js","../node_modules/@mui/system/esm/cssVars/prepareCssVars.js","../node_modules/@mui/system/esm/cssVars/getColorSchemeSelector.js","../node_modules/@mui/system/esm/Stack/createStack.js","../node_modules/@mui/material/esm/colors/common.js","../node_modules/@mui/material/esm/colors/grey.js","../node_modules/@mui/material/esm/colors/purple.js","../node_modules/@mui/material/esm/colors/red.js","../node_modules/@mui/material/esm/colors/orange.js","../node_modules/@mui/material/esm/colors/blue.js","../node_modules/@mui/material/esm/colors/lightBlue.js","../node_modules/@mui/material/esm/colors/green.js","../node_modules/@mui/material/esm/styles/createPalette.js","../node_modules/@mui/system/esm/cssVars/prepareTypographyVars.js","../node_modules/@mui/material/esm/styles/createMixins.js","../node_modules/@mui/material/esm/styles/createTypography.js","../node_modules/@mui/material/esm/styles/shadows.js","../node_modules/@mui/material/esm/styles/createTransitions.js","../node_modules/@mui/material/esm/styles/zIndex.js","../node_modules/@mui/material/esm/styles/stringifyTheme.js","../node_modules/@mui/material/esm/styles/createThemeNoVars.js","../node_modules/@mui/material/esm/styles/getOverlayAlpha.js","../node_modules/@mui/material/esm/styles/createColorScheme.js","../node_modules/@mui/material/esm/styles/shouldSkipGeneratingVar.js","../node_modules/@mui/material/esm/styles/excludeVariablesFromRoot.js","../node_modules/@mui/material/esm/styles/createGetSelector.js","../node_modules/@mui/material/esm/styles/createThemeWithVars.js","../node_modules/@mui/material/esm/styles/createTheme.js","../node_modules/@mui/material/esm/styles/defaultTheme.js","../node_modules/@mui/material/esm/styles/useTheme.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/@mui/utils/esm/useForkRef/useForkRef.js","../node_modules/@mui/utils/esm/useId/useId.js","../node_modules/@mui/x-charts/esm/internals/plugins/utils/ChartStore.js","../node_modules/@mui/x-charts/esm/internals/plugins/corePlugins/useChartAnimation/useChartAnimation.js","../node_modules/reselect/dist/reselect.mjs","../node_modules/@mui/x-charts/esm/internals/plugins/utils/selectors.js","../node_modules/@mui/x-charts/esm/internals/plugins/corePlugins/useChartAnimation/useChartAnimation.selectors.js","../node_modules/@mui/utils/esm/ownerDocument/ownerDocument.js","../node_modules/@mui/utils/esm/ownerWindow/ownerWindow.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-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/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/TapGesture.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/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-scale/src/band.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/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/defaultValueFormatters.js","../node_modules/@mui/x-charts/esm/models/axis.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/getScale.js","../node_modules/@mui/x-charts/esm/internals/dateHelpers.js","../node_modules/@mui/x-charts/esm/internals/plugins/featurePlugins/useChartCartesianAxis/zoom.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/getAxisExtremum.js","../node_modules/@mui/x-charts/esm/internals/plugins/featurePlugins/useChartCartesianAxis/getAxisTriggerTooltip.js","../node_modules/@mui/x-charts/esm/internals/plugins/featurePlugins/useChartCartesianAxis/getAxisDomainLimit.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/useChartCartesianAxisRendering.selectors.js","../node_modules/@mui/x-charts/esm/internals/isBandScale.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-internals/esm/fastObjectShallowCompare/fastObjectShallowCompare.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/utils/esm/useLazyRef/useLazyRef.js","../node_modules/@mui/x-charts/esm/internals/plugins/utils/useLazySelectorEffect.js","../node_modules/@mui/x-charts/esm/internals/plugins/featurePlugins/useChartCartesianAxis/useChartCartesianAxis.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/BarChart/seriesConfig/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/seriesProcessor.js","../node_modules/@mui/x-charts/esm/internals/getLabel.js","../node_modules/@mui/x-charts/esm/BarChart/seriesConfig/legend.js","../node_modules/@mui/x-charts/esm/BarChart/seriesConfig/getColor.js","../node_modules/@mui/x-charts/esm/BarChart/seriesConfig/tooltip.js","../node_modules/@mui/x-charts/esm/BarChart/seriesConfig/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/index.js","../node_modules/@mui/x-charts/esm/LineChart/seriesConfig/extremums.js","../node_modules/@mui/x-charts/esm/internals/defaultizeValueFormatter.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/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/PieChart/seriesConfig/getSeriesWithDefaultValues.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/internals/angleConversion.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/ChartsSurface.js","../node_modules/@mui/x-charts/esm/internals/getPercentageValue.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/GaugeValueArc.js","../node_modules/@mui/x-charts/esm/Gauge/GaugeReferenceArc.js","../node_modules/@mui/x-charts/esm/Gauge/gaugeClasses.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/utils/interpolation.ts","../src/components/CycleTimer/useTimerLogic.ts","../src/components/CycleTimer/index.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","../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/utils/hooks.tsx","../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/@wandelbots/nova-js/dist/chunk-6WCKJOFL.js","../node_modules/reconnecting-websocket/dist/reconnecting-websocket-mjs.js","../node_modules/@wandelbots/nova-js/dist/chunk-V3NJLR6P.js","../node_modules/axios/lib/helpers/bind.js","../node_modules/axios/lib/utils.js","../node_modules/axios/lib/core/AxiosError.js","../node_modules/axios/lib/helpers/null.js","../node_modules/axios/lib/helpers/toFormData.js","../node_modules/axios/lib/helpers/AxiosURLSearchParams.js","../node_modules/axios/lib/helpers/buildURL.js","../node_modules/axios/lib/core/InterceptorManager.js","../node_modules/axios/lib/defaults/transitional.js","../node_modules/axios/lib/platform/browser/classes/URLSearchParams.js","../node_modules/axios/lib/platform/browser/classes/FormData.js","../node_modules/axios/lib/platform/browser/classes/Blob.js","../node_modules/axios/lib/platform/browser/index.js","../node_modules/axios/lib/platform/common/utils.js","../node_modules/axios/lib/platform/index.js","../node_modules/axios/lib/helpers/toURLEncodedForm.js","../node_modules/axios/lib/helpers/formDataToJSON.js","../node_modules/axios/lib/defaults/index.js","../node_modules/axios/lib/helpers/parseHeaders.js","../node_modules/axios/lib/core/AxiosHeaders.js","../node_modules/axios/lib/core/transformData.js","../node_modules/axios/lib/cancel/isCancel.js","../node_modules/axios/lib/cancel/CanceledError.js","../node_modules/axios/lib/core/settle.js","../node_modules/axios/lib/helpers/parseProtocol.js","../node_modules/axios/lib/helpers/speedometer.js","../node_modules/axios/lib/helpers/throttle.js","../node_modules/axios/lib/helpers/progressEventReducer.js","../node_modules/axios/lib/helpers/isURLSameOrigin.js","../node_modules/axios/lib/helpers/cookies.js","../node_modules/axios/lib/helpers/isAbsoluteURL.js","../node_modules/axios/lib/helpers/combineURLs.js","../node_modules/axios/lib/core/buildFullPath.js","../node_modules/axios/lib/core/mergeConfig.js","../node_modules/axios/lib/helpers/resolveConfig.js","../node_modules/axios/lib/adapters/xhr.js","../node_modules/axios/lib/helpers/composeSignals.js","../node_modules/axios/lib/helpers/trackStream.js","../node_modules/axios/lib/adapters/fetch.js","../node_modules/axios/lib/adapters/adapters.js","../node_modules/axios/lib/core/dispatchRequest.js","../node_modules/axios/lib/env/data.js","../node_modules/axios/lib/helpers/validator.js","../node_modules/axios/lib/core/Axios.js","../node_modules/axios/lib/cancel/CancelToken.js","../node_modules/axios/lib/helpers/spread.js","../node_modules/axios/lib/helpers/isAxiosError.js","../node_modules/axios/lib/helpers/HttpStatusCode.js","../node_modules/axios/lib/axios.js","../node_modules/axios/index.js","../node_modules/@wandelbots/nova-api/v1/base.js","../node_modules/@wandelbots/nova-api/v1/common.js","../node_modules/@wandelbots/nova-api/v1/api.js","../node_modules/three/src/math/MathUtils.js","../node_modules/three/src/math/Quaternion.js","../node_modules/three/src/math/Vector3.js","../node_modules/url-join/lib/url-join.js","../node_modules/path-to-regexp/dist/index.js","../node_modules/@wandelbots/nova-js/dist/lib/v1/index.js","../src/components/utils/converters.ts","../src/components/utils/errorHandling.ts","../src/components/LoadingCover.tsx","../src/icons/axis-x.svg","../src/icons/axis-y.svg","../src/icons/axis-z.svg","../src/icons/rotation.svg","../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/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/_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/isArray.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/_baseTimes.js","../node_modules/lodash-es/_baseIsArguments.js","../node_modules/lodash-es/isArguments.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/_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/isEqual.js","../src/components/jogging/JoggingJointLimitDetector.tsx","../src/components/experimental/utils/AdornedSelect.tsx","../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/_baseForOwn.js","../node_modules/lodash-es/_createBaseEach.js","../node_modules/lodash-es/_baseEach.js","../node_modules/lodash-es/_baseAggregator.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/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/isHostComponent.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","../src/components/ProgramControl.tsx","../src/components/ProgramStateIndicator.tsx","../src/components/robots/robotModelLogic.ts","../src/components/robots/RobotAnimator.tsx","../src/components/robots/DHRobot.tsx","../src/components/ConsoleFilter.tsx","../src/components/robots/GenericRobot.tsx","../src/components/robots/ghostStyle.ts","../src/components/robots/SupportedRobot.tsx","../src/components/robots/Robot.tsx","../src/components/RobotCard.tsx","../node_modules/@mui/icons-material/esm/Error.js","../src/icons/robot.svg","../src/components/RobotSetupReadinessIndicator.tsx","../src/components/RobotListItem.tsx","../src/components/robots/AxisConfig.ts","../src/components/robots/manufacturerHomePositions.ts","../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/wandelscript-editor/wandelscript.tmLanguage.ts","../src/components/wandelscript-editor/WandelscriptEditor.tsx","../src/themes/createDarkTheme.ts","../src/themes/createLightTheme.ts","../src/themes/theming.ts"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n  REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n  var key = null;\n  void 0 !== maybeKey && (key = \"\" + maybeKey);\n  void 0 !== config.key && (key = \"\" + config.key);\n  if (\"key\" in config) {\n    maybeKey = {};\n    for (var propName in config)\n      \"key\" !== propName && (maybeKey[propName] = config[propName]);\n  } else maybeKey = config;\n  config = maybeKey.ref;\n  return {\n    $$typeof: REACT_ELEMENT_TYPE,\n    type: type,\n    key: key,\n    ref: void 0 !== config ? config : null,\n    props: maybeKey\n  };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n  (function () {\n    function getComponentNameFromType(type) {\n      if (null == type) return null;\n      if (\"function\" === typeof type)\n        return type.$$typeof === REACT_CLIENT_REFERENCE\n          ? null\n          : type.displayName || type.name || null;\n      if (\"string\" === typeof type) return type;\n      switch (type) {\n        case REACT_FRAGMENT_TYPE:\n          return \"Fragment\";\n        case REACT_PROFILER_TYPE:\n          return \"Profiler\";\n        case REACT_STRICT_MODE_TYPE:\n          return \"StrictMode\";\n        case REACT_SUSPENSE_TYPE:\n          return \"Suspense\";\n        case REACT_SUSPENSE_LIST_TYPE:\n          return \"SuspenseList\";\n        case REACT_ACTIVITY_TYPE:\n          return \"Activity\";\n      }\n      if (\"object\" === typeof type)\n        switch (\n          (\"number\" === typeof type.tag &&\n            console.error(\n              \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n            ),\n          type.$$typeof)\n        ) {\n          case REACT_PORTAL_TYPE:\n            return \"Portal\";\n          case REACT_CONTEXT_TYPE:\n            return (type.displayName || \"Context\") + \".Provider\";\n          case REACT_CONSUMER_TYPE:\n            return (type._context.displayName || \"Context\") + \".Consumer\";\n          case REACT_FORWARD_REF_TYPE:\n            var innerType = type.render;\n            type = type.displayName;\n            type ||\n              ((type = innerType.displayName || innerType.name || \"\"),\n              (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n            return type;\n          case REACT_MEMO_TYPE:\n            return (\n              (innerType = type.displayName || null),\n              null !== innerType\n                ? innerType\n                : getComponentNameFromType(type.type) || \"Memo\"\n            );\n          case REACT_LAZY_TYPE:\n            innerType = type._payload;\n            type = type._init;\n            try {\n              return getComponentNameFromType(type(innerType));\n            } catch (x) {}\n        }\n      return null;\n    }\n    function testStringCoercion(value) {\n      return \"\" + value;\n    }\n    function checkKeyStringCoercion(value) {\n      try {\n        testStringCoercion(value);\n        var JSCompiler_inline_result = !1;\n      } catch (e) {\n        JSCompiler_inline_result = !0;\n      }\n      if (JSCompiler_inline_result) {\n        JSCompiler_inline_result = console;\n        var JSCompiler_temp_const = JSCompiler_inline_result.error;\n        var JSCompiler_inline_result$jscomp$0 =\n          (\"function\" === typeof Symbol &&\n            Symbol.toStringTag &&\n            value[Symbol.toStringTag]) ||\n          value.constructor.name ||\n          \"Object\";\n        JSCompiler_temp_const.call(\n          JSCompiler_inline_result,\n          \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n          JSCompiler_inline_result$jscomp$0\n        );\n        return testStringCoercion(value);\n      }\n    }\n    function getTaskName(type) {\n      if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n      if (\n        \"object\" === typeof type &&\n        null !== type &&\n        type.$$typeof === REACT_LAZY_TYPE\n      )\n        return \"<...>\";\n      try {\n        var name = getComponentNameFromType(type);\n        return name ? \"<\" + name + \">\" : \"<...>\";\n      } catch (x) {\n        return \"<...>\";\n      }\n    }\n    function getOwner() {\n      var dispatcher = ReactSharedInternals.A;\n      return null === dispatcher ? null : dispatcher.getOwner();\n    }\n    function UnknownOwner() {\n      return Error(\"react-stack-top-frame\");\n    }\n    function hasValidKey(config) {\n      if (hasOwnProperty.call(config, \"key\")) {\n        var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n        if (getter && getter.isReactWarning) return !1;\n      }\n      return void 0 !== config.key;\n    }\n    function defineKeyPropWarningGetter(props, displayName) {\n      function warnAboutAccessingKey() {\n        specialPropKeyWarningShown ||\n          ((specialPropKeyWarningShown = !0),\n          console.error(\n            \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n            displayName\n          ));\n      }\n      warnAboutAccessingKey.isReactWarning = !0;\n      Object.defineProperty(props, \"key\", {\n        get: warnAboutAccessingKey,\n        configurable: !0\n      });\n    }\n    function elementRefGetterWithDeprecationWarning() {\n      var componentName = getComponentNameFromType(this.type);\n      didWarnAboutElementRef[componentName] ||\n        ((didWarnAboutElementRef[componentName] = !0),\n        console.error(\n          \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n        ));\n      componentName = this.props.ref;\n      return void 0 !== componentName ? componentName : null;\n    }\n    function ReactElement(\n      type,\n      key,\n      self,\n      source,\n      owner,\n      props,\n      debugStack,\n      debugTask\n    ) {\n      self = props.ref;\n      type = {\n        $$typeof: REACT_ELEMENT_TYPE,\n        type: type,\n        key: key,\n        props: props,\n        _owner: owner\n      };\n      null !== (void 0 !== self ? self : null)\n        ? Object.defineProperty(type, \"ref\", {\n            enumerable: !1,\n            get: elementRefGetterWithDeprecationWarning\n          })\n        : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n      type._store = {};\n      Object.defineProperty(type._store, \"validated\", {\n        configurable: !1,\n        enumerable: !1,\n        writable: !0,\n        value: 0\n      });\n      Object.defineProperty(type, \"_debugInfo\", {\n        configurable: !1,\n        enumerable: !1,\n        writable: !0,\n        value: null\n      });\n      Object.defineProperty(type, \"_debugStack\", {\n        configurable: !1,\n        enumerable: !1,\n        writable: !0,\n        value: debugStack\n      });\n      Object.defineProperty(type, \"_debugTask\", {\n        configurable: !1,\n        enumerable: !1,\n        writable: !0,\n        value: debugTask\n      });\n      Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n      return type;\n    }\n    function jsxDEVImpl(\n      type,\n      config,\n      maybeKey,\n      isStaticChildren,\n      source,\n      self,\n      debugStack,\n      debugTask\n    ) {\n      var children = config.children;\n      if (void 0 !== children)\n        if (isStaticChildren)\n          if (isArrayImpl(children)) {\n            for (\n              isStaticChildren = 0;\n              isStaticChildren < children.length;\n              isStaticChildren++\n            )\n              validateChildKeys(children[isStaticChildren]);\n            Object.freeze && Object.freeze(children);\n          } else\n            console.error(\n              \"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.\"\n            );\n        else validateChildKeys(children);\n      if (hasOwnProperty.call(config, \"key\")) {\n        children = getComponentNameFromType(type);\n        var keys = Object.keys(config).filter(function (k) {\n          return \"key\" !== k;\n        });\n        isStaticChildren =\n          0 < keys.length\n            ? \"{key: someKey, \" + keys.join(\": ..., \") + \": ...}\"\n            : \"{key: someKey}\";\n        didWarnAboutKeySpread[children + isStaticChildren] ||\n          ((keys =\n            0 < keys.length ? \"{\" + keys.join(\": ..., \") + \": ...}\" : \"{}\"),\n          console.error(\n            'A props object containing a \"key\" prop is being spread into JSX:\\n  let props = %s;\\n  <%s {...props} />\\nReact keys must be passed directly to JSX without using spread:\\n  let props = %s;\\n  <%s key={someKey} {...props} />',\n            isStaticChildren,\n            children,\n            keys,\n            children\n          ),\n          (didWarnAboutKeySpread[children + isStaticChildren] = !0));\n      }\n      children = null;\n      void 0 !== maybeKey &&\n        (checkKeyStringCoercion(maybeKey), (children = \"\" + maybeKey));\n      hasValidKey(config) &&\n        (checkKeyStringCoercion(config.key), (children = \"\" + config.key));\n      if (\"key\" in config) {\n        maybeKey = {};\n        for (var propName in config)\n          \"key\" !== propName && (maybeKey[propName] = config[propName]);\n      } else maybeKey = config;\n      children &&\n        defineKeyPropWarningGetter(\n          maybeKey,\n          \"function\" === typeof type\n            ? type.displayName || type.name || \"Unknown\"\n            : type\n        );\n      return ReactElement(\n        type,\n        children,\n        self,\n        source,\n        getOwner(),\n        maybeKey,\n        debugStack,\n        debugTask\n      );\n    }\n    function validateChildKeys(node) {\n      \"object\" === typeof node &&\n        null !== node &&\n        node.$$typeof === REACT_ELEMENT_TYPE &&\n        node._store &&\n        (node._store.validated = 1);\n    }\n    var React = require(\"react\"),\n      REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n      REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n      REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n      REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n      REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\");\n    Symbol.for(\"react.provider\");\n    var REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n      REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n      REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n      REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n      REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n      REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n      REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n      REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n      REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n      ReactSharedInternals =\n        React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n      hasOwnProperty = Object.prototype.hasOwnProperty,\n      isArrayImpl = Array.isArray,\n      createTask = console.createTask\n        ? console.createTask\n        : function () {\n            return null;\n          };\n    React = {\n      \"react-stack-bottom-frame\": function (callStackForError) {\n        return callStackForError();\n      }\n    };\n    var specialPropKeyWarningShown;\n    var didWarnAboutElementRef = {};\n    var unknownOwnerDebugStack = React[\"react-stack-bottom-frame\"].bind(\n      React,\n      UnknownOwner\n    )();\n    var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));\n    var didWarnAboutKeySpread = {};\n    exports.Fragment = REACT_FRAGMENT_TYPE;\n    exports.jsx = function (type, config, maybeKey, source, self) {\n      var trackActualOwner =\n        1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n      return jsxDEVImpl(\n        type,\n        config,\n        maybeKey,\n        !1,\n        source,\n        self,\n        trackActualOwner\n          ? Error(\"react-stack-top-frame\")\n          : unknownOwnerDebugStack,\n        trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n      );\n    };\n    exports.jsxs = function (type, config, maybeKey, source, self) {\n      var trackActualOwner =\n        1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n      return jsxDEVImpl(\n        type,\n        config,\n        maybeKey,\n        !0,\n        source,\n        self,\n        trackActualOwner\n          ? Error(\"react-stack-top-frame\")\n          : unknownOwnerDebugStack,\n        trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n      );\n    };\n  })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n  module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","import type { ColliderShape } from \"@wandelbots/nova-api/v1\"\nimport * as THREE from \"three\"\nimport { ConvexGeometry } from \"three-stdlib\"\n\nexport function colliderShapeToBufferGeometry(\n  shape: ColliderShape,\n): THREE.BufferGeometry {\n  const shapeType = shape.shape_type\n  switch (shapeType) {\n    case \"convex_hull\":\n      return new ConvexGeometry(\n        shape.vertices.map(\n          (vertex) =>\n            new THREE.Vector3(\n              vertex[0] / 1000,\n              vertex[1] / 1000,\n              vertex[2] / 1000,\n            ),\n        ),\n      )\n    case \"box\":\n      return new THREE.BoxGeometry(\n        shape.size_x / 1000,\n        shape.size_y / 1000,\n        shape.size_z / 1000,\n      )\n    case \"sphere\":\n      return new THREE.SphereGeometry(shape.radius / 1000)\n    case \"capsule\":\n      return new THREE.CapsuleGeometry(\n        shape.radius / 1000,\n        shape.cylinder_height / 1000,\n      )\n    case \"cylinder\":\n      return new THREE.CylinderGeometry(\n        shape.radius / 1000,\n        shape.radius / 1000,\n        shape.height / 1000,\n      )\n    case \"rectangle\": {\n      return new THREE.BoxGeometry(shape.size_x / 1000, shape.size_y / 1000, 0)\n    }\n    default: {\n      console.warn(`${shape.shape_type} is not supported`)\n      return new THREE.BufferGeometry()\n    }\n  }\n}\n","import type { Collider } from \"@wandelbots/nova-api/v1\"\nimport type React from \"react\"\nimport * as THREE from \"three\"\nimport { colliderShapeToBufferGeometry } from \"./colliderShapeToBufferGeometry\"\n\ntype ColliderElementProps = {\n  name?: string\n  collider: Collider\n  children?: React.ReactNode\n}\n\nexport default function ColliderElement({\n  name,\n  collider,\n  children,\n}: ColliderElementProps) {\n  const position = collider.pose?.position ?? [0, 0, 0]\n  const rotation = collider.pose?.orientation ?? [0, 0, 0]\n  if (collider.margin) {\n    console.warn(`${name} margin is not supported`)\n  }\n  return (\n    <mesh\n      name={name}\n      position={new THREE.Vector3(\n        position[0],\n        position[1],\n        position[2],\n      ).divideScalar(1000)}\n      rotation={new THREE.Euler(rotation[0], rotation[1], rotation[2], \"XYZ\")}\n      geometry={colliderShapeToBufferGeometry(collider.shape)}\n    >\n      {children}\n    </mesh>\n  )\n}\n","import type { ThreeElements } from \"@react-three/fiber\"\nimport type { Collider } from \"@wandelbots/nova-api/v1\"\nimport ColliderElement from \"./ColliderElement\"\n\nexport type MeshChildrenProvider = (\n  key: string,\n  collider: Collider,\n) => React.ReactNode\n\ntype ColliderCollectionProps = {\n  name?: string\n  colliders: Record<string, Collider>\n  meshChildrenProvider: MeshChildrenProvider\n} & ThreeElements[\"group\"]\n\nexport default function ColliderCollection({\n  name,\n  colliders,\n  meshChildrenProvider,\n  ...props\n}: ColliderCollectionProps) {\n  return (\n    <group name={name} {...props}>\n      {Object.entries(colliders).map(([colliderKey, collider]) => (\n        <ColliderElement\n          key={colliderKey}\n          name={colliderKey}\n          collider={collider}\n          children={meshChildrenProvider(colliderKey, collider)}\n        />\n      ))}\n    </group>\n  )\n}\n","import type { CollisionScene } from \"@wandelbots/nova-api/v1\"\nimport ColliderCollection, {\n  type MeshChildrenProvider,\n} from \"./ColliderCollection\"\n\ntype CollisionSceneRendererProps = {\n  scene: CollisionScene\n  meshChildrenProvider: MeshChildrenProvider\n}\n\nexport default function CollisionSceneRenderer({\n  scene,\n  meshChildrenProvider,\n}: CollisionSceneRendererProps) {\n  const colliders = scene.colliders\n  return (\n    <group>\n      {colliders && (\n        <ColliderCollection\n          meshChildrenProvider={meshChildrenProvider}\n          colliders={colliders}\n        />\n      )}\n    </group>\n  )\n}\n","import { Environment, Lightformer } from \"@react-three/drei\"\n\n/**\n * Renders a preset environment for the 3D scene.\n * This component wraps the scene with an `Environment` component\n * and builds a lightmap build with `Lightformers`.\n */\nexport function PresetEnvironment() {\n  return (\n    <Environment>\n      <Lightformers />\n    </Environment>\n  )\n}\n\nfunction Lightformers({ positions = [2, 0, 2, 0, 2, 0, 2, 0] }) {\n  return (\n    <>\n      {/* Ceiling */}\n      <Lightformer\n        intensity={5}\n        rotation-x={Math.PI / 2}\n        position={[0, 5, -9]}\n        scale={[10, 10, 1]}\n      />\n      <group rotation={[0, 0.5, 0]}>\n        <group>\n          {positions.map((x, i) => (\n            <Lightformer\n              key={i}\n              form=\"circle\"\n              intensity={5}\n              rotation={[Math.PI / 2, 0, 0]}\n              position={[x, 4, i * 4]}\n              scale={[3, 1, 1]}\n            />\n          ))}\n        </group>\n      </group>\n      {/* Sides */}\n      <Lightformer\n        intensity={40}\n        rotation-y={Math.PI / 2}\n        position={[-5, 1, -1]}\n        scale={[20, 0.1, 1]}\n      />\n      <Lightformer\n        intensity={20}\n        rotation-y={-Math.PI}\n        position={[-5, -2, -1]}\n        scale={[20, 0.1, 1]}\n      />\n\n      <Lightformer\n        rotation-y={Math.PI / 2}\n        position={[-5, -1, -1]}\n        scale={[20, 0.5, 1]}\n        intensity={5}\n      />\n      <Lightformer\n        rotation-y={-Math.PI / 2}\n        position={[10, 1, 0]}\n        scale={[20, 1, 1]}\n        intensity={10}\n      />\n\n      {/* Key */}\n      <Lightformer\n        form=\"ring\"\n        color=\"white\"\n        intensity={5}\n        scale={10}\n        position={[-15, 4, -18]}\n        target={[0, 0, 0]}\n      />\n    </>\n  )\n}\n","import { type ThreeElements } from \"@react-three/fiber\"\nimport type { Geometry } from \"@wandelbots/nova-api/v1\"\nimport type { SafetySetupSafetyZone } from \"@wandelbots/nova-js/v1\"\nimport * as THREE from \"three\"\nimport { ConvexGeometry } from \"three-stdlib\"\n\nexport type SafetyZonesRendererProps = {\n  safetyZones: SafetySetupSafetyZone[]\n} & ThreeElements[\"group\"]\n\ninterface CoplanarityResult {\n  isCoplanar: boolean\n  normal?: THREE.Vector3\n}\n\nfunction areVerticesCoplanar(vertices: THREE.Vector3[]): CoplanarityResult {\n  if (vertices.length < 3) {\n    console.log(\"Not enough vertices to define a plane\")\n    return { isCoplanar: false }\n  }\n\n  // Convert Vector3d to THREE.Vector3\n  const v0 = new THREE.Vector3(vertices[0].x, vertices[0].y, vertices[0].z)\n  const v1 = new THREE.Vector3(vertices[1].x, vertices[1].y, vertices[1].z)\n  const v2 = new THREE.Vector3(vertices[2].x, vertices[2].y, vertices[2].z)\n\n  const vector1 = new THREE.Vector3().subVectors(v1, v0)\n  const vector2 = new THREE.Vector3().subVectors(v2, v0)\n  const normal = new THREE.Vector3().crossVectors(vector1, vector2).normalize()\n\n  // Check if all remaining vertices lie on the same plane\n  for (let i = 3; i < vertices.length; i++) {\n    const vi = new THREE.Vector3(vertices[i].x, vertices[i].y, vertices[i].z)\n    const vector = new THREE.Vector3().subVectors(vi, v0)\n    const dotProduct = normal.dot(vector)\n    if (Math.abs(dotProduct) > 1e-6) {\n      // Allowing a small tolerance\n      console.log(\"Vertices are not on the same plane\")\n      return { isCoplanar: false }\n    }\n  }\n\n  return { isCoplanar: true, normal }\n}\n\nexport function SafetyZonesRenderer({\n  safetyZones,\n  ...props\n}: SafetyZonesRendererProps) {\n  return (\n    <group {...props}>\n      {safetyZones.map((zone, index) => {\n        let geometries: Geometry[] = []\n        if (zone.geometry) {\n          if (zone.geometry.compound) {\n            geometries = zone.geometry.compound.child_geometries\n          } else if (zone.geometry.convex_hull) {\n            geometries = [zone.geometry]\n          }\n        }\n\n        return geometries.map((geometry, i) => {\n          if (!geometry.convex_hull) return null\n\n          const vertices = geometry.convex_hull.vertices.map(\n            (v) => new THREE.Vector3(v.x / 1000, v.y / 1000, v.z / 1000),\n          )\n\n          // Check if the vertices are on the same plane and only define a plane\n          // Algorithm has troubles with vertices that are on the same plane so we\n          // add a new vertex slightly moved along the normal direction\n          const coplanarityResult = areVerticesCoplanar(vertices)\n\n          if (coplanarityResult.isCoplanar && coplanarityResult.normal) {\n            // Add a new vertex slightly moved along the normal direction\n            const offset = 0.0001 // Adjust the offset as needed\n            const newVertex = new THREE.Vector3().addVectors(\n              vertices[0],\n              coplanarityResult.normal.multiplyScalar(offset),\n            )\n            vertices.push(newVertex)\n          }\n\n          let convexGeometry\n          try {\n            convexGeometry = new ConvexGeometry(vertices)\n          } catch (error) {\n            console.log(\"Error creating ConvexGeometry:\", error)\n            return null\n          }\n          return (\n            <mesh key={`${index}-${i}`} geometry={convexGeometry}>\n              <meshStandardMaterial\n                key={index}\n                attach=\"material\"\n                color=\"#009f4d\"\n                opacity={0.2}\n                depthTest={false}\n                depthWrite={false}\n                transparent\n                polygonOffset\n                polygonOffsetFactor={-i}\n              />\n            </mesh>\n          )\n        })\n      })}\n    </group>\n  )\n}\n","import { Line } from \"@react-three/drei\"\nimport type { GetTrajectoryResponse } from \"@wandelbots/nova-js/v1\"\nimport * as THREE from \"three\"\n\nexport type TrajectoryRendererProps = {\n  trajectory: GetTrajectoryResponse\n} & React.JSX.IntrinsicElements[\"group\"]\n\nexport function TrajectoryRenderer({\n  trajectory,\n  ...props\n}: TrajectoryRendererProps) {\n  const points =\n    trajectory.trajectory\n      ?.map((point) => {\n        if (point.tcp_pose) {\n          return new THREE.Vector3(\n            point.tcp_pose.position.x / 1000,\n            point.tcp_pose.position.z / 1000,\n            -point.tcp_pose.position.y / 1000,\n          )\n        }\n        return null\n      })\n      .filter((point): point is THREE.Vector3 => point !== null) || []\n\n  return (\n    <group {...props}>\n      {points.length > 0 && (\n        <Line\n          points={points}\n          lineWidth={3}\n          polygonOffset={true}\n          polygonOffsetFactor={10}\n          polygonOffsetUnits={10}\n        />\n      )}\n    </group>\n  )\n}\n","import type { i18n as I18NInstance } from \"i18next\"\nimport i18next from \"i18next\"\nimport LanguageDetector from \"i18next-browser-languagedetector\"\nimport deJSON from \"./locales/de/translations.json\"\nimport enJSON from \"./locales/en/translations.json\"\n\nconst i18n: I18NInstance = i18next.createInstance()\n\ni18n.use(LanguageDetector).init({\n  supportedLngs: [\"en\", \"de\"],\n  resources: {\n    en: {\n      translations: enJSON,\n    },\n    de: {\n      translations: deJSON,\n    },\n  },\n  ns: [\"translations\"],\n  defaultNS: \"translations\",\n  detection: {\n    order: [\"navigator\", \"htmlTag\"],\n  },\n})\n\nexport { i18n }\n","import { type FC } from \"react\"\nimport { I18nextProvider } from \"react-i18next\"\nimport { i18n } from \"./i18n/config\"\n\n/**\n * Our components require a certain context that may or may not\n * be provided by the user application; this wrapper ensures\n * they can be used either way.\n */\nexport function externalizeComponent<T extends React.JSX.ElementType>(\n  Component: T,\n): T {\n  const WrappedComponent = ((props: T) => (\n    <NovaComponentsProvider>\n      <Component {...(props as any)} />\n    </NovaComponentsProvider>\n  )) as any\n\n  return WrappedComponent\n}\n\nconst NovaComponentsProvider: FC<{ children: React.ReactNode }> = ({\n  children,\n}) => {\n  return <I18nextProvider i18n={i18n}>{children}</I18nextProvider>\n}\n","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 };","/* 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}","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","/**\n * WARNING: Don't import this directly. It's imported by the code generated by\n * `@mui/interal-babel-plugin-minify-errors`. Make sure to always use string literals in `Error`\n * constructors to ensure the plugin works as expected. Supported patterns include:\n *   throw new Error('My message');\n *   throw new Error(`My message: ${foo}`);\n *   throw new Error(`My message: ${foo}` + 'another string');\n *   ...\n * @param {number} code\n */\nexport default function formatMuiErrorMessage(code, ...args) {\n  const url = new URL(`https://mui.com/production-error/?code=${code}`);\n  args.forEach(arg => url.searchParams.append('args[]', arg));\n  return `Minified MUI error #${code}; visit ${url} for the full message.`;\n}","export default '$$material';","/* eslint-disable */\n// Inspired by https://github.com/garycourt/murmurhash-js\n// Ported from https://github.com/aappleby/smhasher/blob/61a0530f28277f2e850bfc39600ce61d02b518de/src/MurmurHash2.cpp#L37-L86\nfunction murmur2(str) {\n  // 'm' and 'r' are mixing constants generated offline.\n  // They're not really 'magic', they just happen to work well.\n  // const m = 0x5bd1e995;\n  // const r = 24;\n  // Initialize the hash\n  var h = 0; // Mix 4 bytes at a time into the hash\n\n  var k,\n      i = 0,\n      len = str.length;\n\n  for (; len >= 4; ++i, len -= 4) {\n    k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;\n    k =\n    /* Math.imul(k, m): */\n    (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16);\n    k ^=\n    /* k >>> r: */\n    k >>> 24;\n    h =\n    /* Math.imul(k, m): */\n    (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16) ^\n    /* Math.imul(h, m): */\n    (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n  } // Handle the last few bytes of the input array\n\n\n  switch (len) {\n    case 3:\n      h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n\n    case 2:\n      h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n\n    case 1:\n      h ^= str.charCodeAt(i) & 0xff;\n      h =\n      /* Math.imul(h, m): */\n      (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n  } // Do a few final mixes of the hash to ensure the last few\n  // bytes are well-incorporated.\n\n\n  h ^= h >>> 13;\n  h =\n  /* Math.imul(h, m): */\n  (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n  return ((h ^ h >>> 15) >>> 0).toString(36);\n}\n\nexport { murmur2 as default };\n","var unitlessKeys = {\n  animationIterationCount: 1,\n  aspectRatio: 1,\n  borderImageOutset: 1,\n  borderImageSlice: 1,\n  borderImageWidth: 1,\n  boxFlex: 1,\n  boxFlexGroup: 1,\n  boxOrdinalGroup: 1,\n  columnCount: 1,\n  columns: 1,\n  flex: 1,\n  flexGrow: 1,\n  flexPositive: 1,\n  flexShrink: 1,\n  flexNegative: 1,\n  flexOrder: 1,\n  gridRow: 1,\n  gridRowEnd: 1,\n  gridRowSpan: 1,\n  gridRowStart: 1,\n  gridColumn: 1,\n  gridColumnEnd: 1,\n  gridColumnSpan: 1,\n  gridColumnStart: 1,\n  msGridRow: 1,\n  msGridRowSpan: 1,\n  msGridColumn: 1,\n  msGridColumnSpan: 1,\n  fontWeight: 1,\n  lineHeight: 1,\n  opacity: 1,\n  order: 1,\n  orphans: 1,\n  scale: 1,\n  tabSize: 1,\n  widows: 1,\n  zIndex: 1,\n  zoom: 1,\n  WebkitLineClamp: 1,\n  // SVG-related properties\n  fillOpacity: 1,\n  floodOpacity: 1,\n  stopOpacity: 1,\n  strokeDasharray: 1,\n  strokeDashoffset: 1,\n  strokeMiterlimit: 1,\n  strokeOpacity: 1,\n  strokeWidth: 1\n};\n\nexport { unitlessKeys as default };\n","function memoize(fn) {\n  var cache = Object.create(null);\n  return function (arg) {\n    if (cache[arg] === undefined) cache[arg] = fn(arg);\n    return cache[arg];\n  };\n}\n\nexport { memoize as default };\n","import hashString from '@emotion/hash';\nimport unitless from '@emotion/unitless';\nimport memoize from '@emotion/memoize';\n\nvar isDevelopment = false;\n\nvar hyphenateRegex = /[A-Z]|^ms/g;\nvar animationRegex = /_EMO_([^_]+?)_([^]*?)_EMO_/g;\n\nvar isCustomProperty = function isCustomProperty(property) {\n  return property.charCodeAt(1) === 45;\n};\n\nvar isProcessableValue = function isProcessableValue(value) {\n  return value != null && typeof value !== 'boolean';\n};\n\nvar processStyleName = /* #__PURE__ */memoize(function (styleName) {\n  return isCustomProperty(styleName) ? styleName : styleName.replace(hyphenateRegex, '-$&').toLowerCase();\n});\n\nvar processStyleValue = function processStyleValue(key, value) {\n  switch (key) {\n    case 'animation':\n    case 'animationName':\n      {\n        if (typeof value === 'string') {\n          return value.replace(animationRegex, function (match, p1, p2) {\n            cursor = {\n              name: p1,\n              styles: p2,\n              next: cursor\n            };\n            return p1;\n          });\n        }\n      }\n  }\n\n  if (unitless[key] !== 1 && !isCustomProperty(key) && typeof value === 'number' && value !== 0) {\n    return value + 'px';\n  }\n\n  return value;\n};\n\nvar noComponentSelectorMessage = 'Component selectors can only be used in conjunction with ' + '@emotion/babel-plugin, the swc Emotion plugin, or another Emotion-aware ' + 'compiler transform.';\n\nfunction handleInterpolation(mergedProps, registered, interpolation) {\n  if (interpolation == null) {\n    return '';\n  }\n\n  var componentSelector = interpolation;\n\n  if (componentSelector.__emotion_styles !== undefined) {\n\n    return componentSelector;\n  }\n\n  switch (typeof interpolation) {\n    case 'boolean':\n      {\n        return '';\n      }\n\n    case 'object':\n      {\n        var keyframes = interpolation;\n\n        if (keyframes.anim === 1) {\n          cursor = {\n            name: keyframes.name,\n            styles: keyframes.styles,\n            next: cursor\n          };\n          return keyframes.name;\n        }\n\n        var serializedStyles = interpolation;\n\n        if (serializedStyles.styles !== undefined) {\n          var next = serializedStyles.next;\n\n          if (next !== undefined) {\n            // not the most efficient thing ever but this is a pretty rare case\n            // and there will be very few iterations of this generally\n            while (next !== undefined) {\n              cursor = {\n                name: next.name,\n                styles: next.styles,\n                next: cursor\n              };\n              next = next.next;\n            }\n          }\n\n          var styles = serializedStyles.styles + \";\";\n          return styles;\n        }\n\n        return createStringFromObject(mergedProps, registered, interpolation);\n      }\n\n    case 'function':\n      {\n        if (mergedProps !== undefined) {\n          var previousCursor = cursor;\n          var result = interpolation(mergedProps);\n          cursor = previousCursor;\n          return handleInterpolation(mergedProps, registered, result);\n        }\n\n        break;\n      }\n  } // finalize string values (regular strings and functions interpolated into css calls)\n\n\n  var asString = interpolation;\n\n  if (registered == null) {\n    return asString;\n  }\n\n  var cached = registered[asString];\n  return cached !== undefined ? cached : asString;\n}\n\nfunction createStringFromObject(mergedProps, registered, obj) {\n  var string = '';\n\n  if (Array.isArray(obj)) {\n    for (var i = 0; i < obj.length; i++) {\n      string += handleInterpolation(mergedProps, registered, obj[i]) + \";\";\n    }\n  } else {\n    for (var key in obj) {\n      var value = obj[key];\n\n      if (typeof value !== 'object') {\n        var asString = value;\n\n        if (registered != null && registered[asString] !== undefined) {\n          string += key + \"{\" + registered[asString] + \"}\";\n        } else if (isProcessableValue(asString)) {\n          string += processStyleName(key) + \":\" + processStyleValue(key, asString) + \";\";\n        }\n      } else {\n        if (key === 'NO_COMPONENT_SELECTOR' && isDevelopment) {\n          throw new Error(noComponentSelectorMessage);\n        }\n\n        if (Array.isArray(value) && typeof value[0] === 'string' && (registered == null || registered[value[0]] === undefined)) {\n          for (var _i = 0; _i < value.length; _i++) {\n            if (isProcessableValue(value[_i])) {\n              string += processStyleName(key) + \":\" + processStyleValue(key, value[_i]) + \";\";\n            }\n          }\n        } else {\n          var interpolated = handleInterpolation(mergedProps, registered, value);\n\n          switch (key) {\n            case 'animation':\n            case 'animationName':\n              {\n                string += processStyleName(key) + \":\" + interpolated + \";\";\n                break;\n              }\n\n            default:\n              {\n\n                string += key + \"{\" + interpolated + \"}\";\n              }\n          }\n        }\n      }\n    }\n  }\n\n  return string;\n}\n\nvar labelPattern = /label:\\s*([^\\s;{]+)\\s*(;|$)/g; // this is the cursor for keyframes\n// keyframes are stored on the SerializedStyles object as a linked list\n\nvar cursor;\nfunction serializeStyles(args, registered, mergedProps) {\n  if (args.length === 1 && typeof args[0] === 'object' && args[0] !== null && args[0].styles !== undefined) {\n    return args[0];\n  }\n\n  var stringMode = true;\n  var styles = '';\n  cursor = undefined;\n  var strings = args[0];\n\n  if (strings == null || strings.raw === undefined) {\n    stringMode = false;\n    styles += handleInterpolation(mergedProps, registered, strings);\n  } else {\n    var asTemplateStringsArr = strings;\n\n    styles += asTemplateStringsArr[0];\n  } // we start at 1 since we've already handled the first arg\n\n\n  for (var i = 1; i < args.length; i++) {\n    styles += handleInterpolation(mergedProps, registered, args[i]);\n\n    if (stringMode) {\n      var templateStringsArr = strings;\n\n      styles += templateStringsArr[i];\n    }\n  } // using a global regex with .exec is stateful so lastIndex has to be reset each time\n\n\n  labelPattern.lastIndex = 0;\n  var identifierName = '';\n  var match; // https://esbench.com/bench/5b809c2cf2949800a0f61fb5\n\n  while ((match = labelPattern.exec(styles)) !== null) {\n    identifierName += '-' + match[1];\n  }\n\n  var name = hashString(styles) + identifierName;\n\n  return {\n    name: name,\n    styles: styles,\n    next: cursor\n  };\n}\n\nexport { serializeStyles };\n","/**\n * @mui/styled-engine v7.1.1\n *\n * @license MIT\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use client';\n\n/* eslint-disable no-underscore-dangle */\nimport emStyled from '@emotion/styled';\nimport { serializeStyles as emSerializeStyles } from '@emotion/serialize';\nexport default function styled(tag, options) {\n  const stylesFactory = emStyled(tag, options);\n  if (process.env.NODE_ENV !== 'production') {\n    return (...styles) => {\n      const component = typeof tag === 'string' ? `\"${tag}\"` : 'component';\n      if (styles.length === 0) {\n        console.error([`MUI: Seems like you called \\`styled(${component})()\\` without a \\`style\\` argument.`, 'You must provide a `styles` argument: `styled(\"div\")(styleYouForgotToPass)`.'].join('\\n'));\n      } else if (styles.some(style => style === undefined)) {\n        console.error(`MUI: the styled(${component})(...args) API requires all its args to be defined.`);\n      }\n      return stylesFactory(...styles);\n    };\n  }\n  return stylesFactory;\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function internal_mutateStyles(tag, processor) {\n  // Emotion attaches all the styles as `__emotion_styles`.\n  // Ref: https://github.com/emotion-js/emotion/blob/16d971d0da229596d6bcc39d282ba9753c9ee7cf/packages/styled/src/base.js#L186\n  if (Array.isArray(tag.__emotion_styles)) {\n    tag.__emotion_styles = processor(tag.__emotion_styles);\n  }\n}\n\n// Emotion only accepts an array, but we want to avoid allocations\nconst wrapper = [];\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function internal_serializeStyles(styles) {\n  wrapper[0] = styles;\n  return emSerializeStyles(wrapper);\n}\nexport { ThemeContext, keyframes, css } from '@emotion/react';\nexport { default as StyledEngineProvider } from \"./StyledEngineProvider/index.js\";\nexport { default as GlobalStyles } from \"./GlobalStyles/index.js\";","/**\n * @license React\n * react-is.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n  REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n  REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n  REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n  REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\");\nSymbol.for(\"react.provider\");\nvar REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n  REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n  REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n  REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n  REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n  REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n  REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n  REACT_VIEW_TRANSITION_TYPE = Symbol.for(\"react.view_transition\"),\n  REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\");\nfunction typeOf(object) {\n  if (\"object\" === typeof object && null !== object) {\n    var $$typeof = object.$$typeof;\n    switch ($$typeof) {\n      case REACT_ELEMENT_TYPE:\n        switch (((object = object.type), object)) {\n          case REACT_FRAGMENT_TYPE:\n          case REACT_PROFILER_TYPE:\n          case REACT_STRICT_MODE_TYPE:\n          case REACT_SUSPENSE_TYPE:\n          case REACT_SUSPENSE_LIST_TYPE:\n          case REACT_VIEW_TRANSITION_TYPE:\n            return object;\n          default:\n            switch (((object = object && object.$$typeof), object)) {\n              case REACT_CONTEXT_TYPE:\n              case REACT_FORWARD_REF_TYPE:\n              case REACT_LAZY_TYPE:\n              case REACT_MEMO_TYPE:\n                return object;\n              case REACT_CONSUMER_TYPE:\n                return object;\n              default:\n                return $$typeof;\n            }\n        }\n      case REACT_PORTAL_TYPE:\n        return $$typeof;\n    }\n  }\n}\nexports.ContextConsumer = REACT_CONSUMER_TYPE;\nexports.ContextProvider = REACT_CONTEXT_TYPE;\nexports.Element = REACT_ELEMENT_TYPE;\nexports.ForwardRef = REACT_FORWARD_REF_TYPE;\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.Lazy = REACT_LAZY_TYPE;\nexports.Memo = REACT_MEMO_TYPE;\nexports.Portal = REACT_PORTAL_TYPE;\nexports.Profiler = REACT_PROFILER_TYPE;\nexports.StrictMode = REACT_STRICT_MODE_TYPE;\nexports.Suspense = REACT_SUSPENSE_TYPE;\nexports.SuspenseList = REACT_SUSPENSE_LIST_TYPE;\nexports.isContextConsumer = function (object) {\n  return typeOf(object) === REACT_CONSUMER_TYPE;\n};\nexports.isContextProvider = function (object) {\n  return typeOf(object) === REACT_CONTEXT_TYPE;\n};\nexports.isElement = function (object) {\n  return (\n    \"object\" === typeof object &&\n    null !== object &&\n    object.$$typeof === REACT_ELEMENT_TYPE\n  );\n};\nexports.isForwardRef = function (object) {\n  return typeOf(object) === REACT_FORWARD_REF_TYPE;\n};\nexports.isFragment = function (object) {\n  return typeOf(object) === REACT_FRAGMENT_TYPE;\n};\nexports.isLazy = function (object) {\n  return typeOf(object) === REACT_LAZY_TYPE;\n};\nexports.isMemo = function (object) {\n  return typeOf(object) === REACT_MEMO_TYPE;\n};\nexports.isPortal = function (object) {\n  return typeOf(object) === REACT_PORTAL_TYPE;\n};\nexports.isProfiler = function (object) {\n  return typeOf(object) === REACT_PROFILER_TYPE;\n};\nexports.isStrictMode = function (object) {\n  return typeOf(object) === REACT_STRICT_MODE_TYPE;\n};\nexports.isSuspense = function (object) {\n  return typeOf(object) === REACT_SUSPENSE_TYPE;\n};\nexports.isSuspenseList = function (object) {\n  return typeOf(object) === REACT_SUSPENSE_LIST_TYPE;\n};\nexports.isValidElementType = function (type) {\n  return \"string\" === typeof type ||\n    \"function\" === typeof type ||\n    type === REACT_FRAGMENT_TYPE ||\n    type === REACT_PROFILER_TYPE ||\n    type === REACT_STRICT_MODE_TYPE ||\n    type === REACT_SUSPENSE_TYPE ||\n    type === REACT_SUSPENSE_LIST_TYPE ||\n    (\"object\" === typeof type &&\n      null !== type &&\n      (type.$$typeof === REACT_LAZY_TYPE ||\n        type.$$typeof === REACT_MEMO_TYPE ||\n        type.$$typeof === REACT_CONTEXT_TYPE ||\n        type.$$typeof === REACT_CONSUMER_TYPE ||\n        type.$$typeof === REACT_FORWARD_REF_TYPE ||\n        type.$$typeof === REACT_CLIENT_REFERENCE ||\n        void 0 !== type.getModuleId))\n    ? !0\n    : !1;\n};\nexports.typeOf = typeOf;\n","/**\n * @license React\n * react-is.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 typeOf(object) {\n      if (\"object\" === typeof object && null !== object) {\n        var $$typeof = object.$$typeof;\n        switch ($$typeof) {\n          case REACT_ELEMENT_TYPE:\n            switch (((object = object.type), object)) {\n              case REACT_FRAGMENT_TYPE:\n              case REACT_PROFILER_TYPE:\n              case REACT_STRICT_MODE_TYPE:\n              case REACT_SUSPENSE_TYPE:\n              case REACT_SUSPENSE_LIST_TYPE:\n              case REACT_VIEW_TRANSITION_TYPE:\n                return object;\n              default:\n                switch (((object = object && object.$$typeof), object)) {\n                  case REACT_CONTEXT_TYPE:\n                  case REACT_FORWARD_REF_TYPE:\n                  case REACT_LAZY_TYPE:\n                  case REACT_MEMO_TYPE:\n                    return object;\n                  case REACT_CONSUMER_TYPE:\n                    return object;\n                  default:\n                    return $$typeof;\n                }\n            }\n          case REACT_PORTAL_TYPE:\n            return $$typeof;\n        }\n      }\n    }\n    var REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n      REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n      REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n      REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n      REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\");\n    Symbol.for(\"react.provider\");\n    var REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n      REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n      REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n      REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n      REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n      REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n      REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n      REACT_VIEW_TRANSITION_TYPE = Symbol.for(\"react.view_transition\"),\n      REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\");\n    exports.ContextConsumer = REACT_CONSUMER_TYPE;\n    exports.ContextProvider = REACT_CONTEXT_TYPE;\n    exports.Element = REACT_ELEMENT_TYPE;\n    exports.ForwardRef = REACT_FORWARD_REF_TYPE;\n    exports.Fragment = REACT_FRAGMENT_TYPE;\n    exports.Lazy = REACT_LAZY_TYPE;\n    exports.Memo = REACT_MEMO_TYPE;\n    exports.Portal = REACT_PORTAL_TYPE;\n    exports.Profiler = REACT_PROFILER_TYPE;\n    exports.StrictMode = REACT_STRICT_MODE_TYPE;\n    exports.Suspense = REACT_SUSPENSE_TYPE;\n    exports.SuspenseList = REACT_SUSPENSE_LIST_TYPE;\n    exports.isContextConsumer = function (object) {\n      return typeOf(object) === REACT_CONSUMER_TYPE;\n    };\n    exports.isContextProvider = function (object) {\n      return typeOf(object) === REACT_CONTEXT_TYPE;\n    };\n    exports.isElement = function (object) {\n      return (\n        \"object\" === typeof object &&\n        null !== object &&\n        object.$$typeof === REACT_ELEMENT_TYPE\n      );\n    };\n    exports.isForwardRef = function (object) {\n      return typeOf(object) === REACT_FORWARD_REF_TYPE;\n    };\n    exports.isFragment = function (object) {\n      return typeOf(object) === REACT_FRAGMENT_TYPE;\n    };\n    exports.isLazy = function (object) {\n      return typeOf(object) === REACT_LAZY_TYPE;\n    };\n    exports.isMemo = function (object) {\n      return typeOf(object) === REACT_MEMO_TYPE;\n    };\n    exports.isPortal = function (object) {\n      return typeOf(object) === REACT_PORTAL_TYPE;\n    };\n    exports.isProfiler = function (object) {\n      return typeOf(object) === REACT_PROFILER_TYPE;\n    };\n    exports.isStrictMode = function (object) {\n      return typeOf(object) === REACT_STRICT_MODE_TYPE;\n    };\n    exports.isSuspense = function (object) {\n      return typeOf(object) === REACT_SUSPENSE_TYPE;\n    };\n    exports.isSuspenseList = function (object) {\n      return typeOf(object) === REACT_SUSPENSE_LIST_TYPE;\n    };\n    exports.isValidElementType = function (type) {\n      return \"string\" === typeof type ||\n        \"function\" === typeof type ||\n        type === REACT_FRAGMENT_TYPE ||\n        type === REACT_PROFILER_TYPE ||\n        type === REACT_STRICT_MODE_TYPE ||\n        type === REACT_SUSPENSE_TYPE ||\n        type === REACT_SUSPENSE_LIST_TYPE ||\n        (\"object\" === typeof type &&\n          null !== type &&\n          (type.$$typeof === REACT_LAZY_TYPE ||\n            type.$$typeof === REACT_MEMO_TYPE ||\n            type.$$typeof === REACT_CONTEXT_TYPE ||\n            type.$$typeof === REACT_CONSUMER_TYPE ||\n            type.$$typeof === REACT_FORWARD_REF_TYPE ||\n            type.$$typeof === REACT_CLIENT_REFERENCE ||\n            void 0 !== type.getModuleId))\n        ? !0\n        : !1;\n    };\n    exports.typeOf = typeOf;\n  })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-is.production.js');\n} else {\n  module.exports = require('./cjs/react-is.development.js');\n}\n","import * as React from 'react';\nimport { isValidElementType } from 'react-is';\n\n// https://github.com/sindresorhus/is-plain-obj/blob/main/index.js\nexport function isPlainObject(item) {\n  if (typeof item !== 'object' || item === null) {\n    return false;\n  }\n  const prototype = Object.getPrototypeOf(item);\n  return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in item) && !(Symbol.iterator in item);\n}\nfunction deepClone(source) {\n  if (/*#__PURE__*/React.isValidElement(source) || isValidElementType(source) || !isPlainObject(source)) {\n    return source;\n  }\n  const output = {};\n  Object.keys(source).forEach(key => {\n    output[key] = deepClone(source[key]);\n  });\n  return output;\n}\n\n/**\n * Merge objects deeply.\n * It will shallow copy React elements.\n *\n * If `options.clone` is set to `false` the source object will be merged directly into the target object.\n *\n * @example\n * ```ts\n * deepmerge({ a: { b: 1 }, d: 2 }, { a: { c: 2 }, d: 4 });\n * // => { a: { b: 1, c: 2 }, d: 4 }\n * ````\n *\n * @param target The target object.\n * @param source The source object.\n * @param options The merge options.\n * @param options.clone Set to `false` to merge the source object directly into the target object.\n * @returns The merged object.\n */\nexport default function deepmerge(target, source, options = {\n  clone: true\n}) {\n  const output = options.clone ? {\n    ...target\n  } : target;\n  if (isPlainObject(target) && isPlainObject(source)) {\n    Object.keys(source).forEach(key => {\n      if (/*#__PURE__*/React.isValidElement(source[key]) || isValidElementType(source[key])) {\n        output[key] = source[key];\n      } else if (isPlainObject(source[key]) &&\n      // Avoid prototype pollution\n      Object.prototype.hasOwnProperty.call(target, key) && isPlainObject(target[key])) {\n        // Since `output` is a clone of `target` and we have narrowed `target` in this block we can cast to the same type.\n        output[key] = deepmerge(target[key], source[key], options);\n      } else if (options.clone) {\n        output[key] = isPlainObject(source[key]) ? deepClone(source[key]) : source[key];\n      } else {\n        output[key] = source[key];\n      }\n    });\n  }\n  return output;\n}","// Sorted ASC by size. That's important.\n// It can't be configured as it's used statically for propTypes.\nexport const breakpointKeys = ['xs', 'sm', 'md', 'lg', 'xl'];\nconst sortBreakpointsValues = values => {\n  const breakpointsAsArray = Object.keys(values).map(key => ({\n    key,\n    val: values[key]\n  })) || [];\n  // Sort in ascending order\n  breakpointsAsArray.sort((breakpoint1, breakpoint2) => breakpoint1.val - breakpoint2.val);\n  return breakpointsAsArray.reduce((acc, obj) => {\n    return {\n      ...acc,\n      [obj.key]: obj.val\n    };\n  }, {});\n};\n\n// Keep in mind that @media is inclusive by the CSS specification.\nexport default function createBreakpoints(breakpoints) {\n  const {\n    // The breakpoint **start** at this value.\n    // For instance with the first breakpoint xs: [xs, sm).\n    values = {\n      xs: 0,\n      // phone\n      sm: 600,\n      // tablet\n      md: 900,\n      // small laptop\n      lg: 1200,\n      // desktop\n      xl: 1536 // large screen\n    },\n    unit = 'px',\n    step = 5,\n    ...other\n  } = breakpoints;\n  const sortedValues = sortBreakpointsValues(values);\n  const keys = Object.keys(sortedValues);\n  function up(key) {\n    const value = typeof values[key] === 'number' ? values[key] : key;\n    return `@media (min-width:${value}${unit})`;\n  }\n  function down(key) {\n    const value = typeof values[key] === 'number' ? values[key] : key;\n    return `@media (max-width:${value - step / 100}${unit})`;\n  }\n  function between(start, end) {\n    const endIndex = keys.indexOf(end);\n    return `@media (min-width:${typeof values[start] === 'number' ? values[start] : start}${unit}) and ` + `(max-width:${(endIndex !== -1 && typeof values[keys[endIndex]] === 'number' ? values[keys[endIndex]] : end) - step / 100}${unit})`;\n  }\n  function only(key) {\n    if (keys.indexOf(key) + 1 < keys.length) {\n      return between(key, keys[keys.indexOf(key) + 1]);\n    }\n    return up(key);\n  }\n  function not(key) {\n    // handle first and last key separately, for better readability\n    const keyIndex = keys.indexOf(key);\n    if (keyIndex === 0) {\n      return up(keys[1]);\n    }\n    if (keyIndex === keys.length - 1) {\n      return down(keys[keyIndex]);\n    }\n    return between(key, keys[keys.indexOf(key) + 1]).replace('@media', '@media not all and');\n  }\n  return {\n    keys,\n    values: sortedValues,\n    up,\n    down,\n    between,\n    only,\n    not,\n    unit,\n    ...other\n  };\n}","import _formatErrorMessage from \"@mui/utils/formatMuiErrorMessage\";\n/**\n * For using in `sx` prop to sort the breakpoint from low to high.\n * Note: this function does not work and will not support multiple units.\n *       e.g. input: { '@container (min-width:300px)': '1rem', '@container (min-width:40rem)': '2rem' }\n *            output: { '@container (min-width:40rem)': '2rem', '@container (min-width:300px)': '1rem' } // since 40 < 300 eventhough 40rem > 300px\n */\nexport function sortContainerQueries(theme, css) {\n  if (!theme.containerQueries) {\n    return css;\n  }\n  const sorted = Object.keys(css).filter(key => key.startsWith('@container')).sort((a, b) => {\n    const regex = /min-width:\\s*([0-9.]+)/;\n    return +(a.match(regex)?.[1] || 0) - +(b.match(regex)?.[1] || 0);\n  });\n  if (!sorted.length) {\n    return css;\n  }\n  return sorted.reduce((acc, key) => {\n    const value = css[key];\n    delete acc[key];\n    acc[key] = value;\n    return acc;\n  }, {\n    ...css\n  });\n}\nexport function isCqShorthand(breakpointKeys, value) {\n  return value === '@' || value.startsWith('@') && (breakpointKeys.some(key => value.startsWith(`@${key}`)) || !!value.match(/^@\\d/));\n}\nexport function getContainerQuery(theme, shorthand) {\n  const matches = shorthand.match(/^@([^/]+)?\\/?(.+)?$/);\n  if (!matches) {\n    if (process.env.NODE_ENV !== 'production') {\n      throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: The provided shorthand ${`(${shorthand})`} is invalid. The format should be \\`@<breakpoint | number>\\` or \\`@<breakpoint | number>/<container>\\`.\\n` + 'For example, `@sm` or `@600` or `@40rem/sidebar`.' : _formatErrorMessage(18, `(${shorthand})`));\n    }\n    return null;\n  }\n  const [, containerQuery, containerName] = matches;\n  const value = Number.isNaN(+containerQuery) ? containerQuery || 0 : +containerQuery;\n  return theme.containerQueries(containerName).up(value);\n}\nexport default function cssContainerQueries(themeInput) {\n  const toContainerQuery = (mediaQuery, name) => mediaQuery.replace('@media', name ? `@container ${name}` : '@container');\n  function attachCq(node, name) {\n    node.up = (...args) => toContainerQuery(themeInput.breakpoints.up(...args), name);\n    node.down = (...args) => toContainerQuery(themeInput.breakpoints.down(...args), name);\n    node.between = (...args) => toContainerQuery(themeInput.breakpoints.between(...args), name);\n    node.only = (...args) => toContainerQuery(themeInput.breakpoints.only(...args), name);\n    node.not = (...args) => {\n      const result = toContainerQuery(themeInput.breakpoints.not(...args), name);\n      if (result.includes('not all and')) {\n        // `@container` does not work with `not all and`, so need to invert the logic\n        return result.replace('not all and ', '').replace('min-width:', 'width<').replace('max-width:', 'width>').replace('and', 'or');\n      }\n      return result;\n    };\n  }\n  const node = {};\n  const containerQueries = name => {\n    attachCq(node, name);\n    return node;\n  };\n  attachCq(containerQueries);\n  return {\n    ...themeInput,\n    containerQueries\n  };\n}","const shape = {\n  borderRadius: 4\n};\nexport default shape;","import PropTypes from 'prop-types';\nconst responsivePropType = process.env.NODE_ENV !== 'production' ? PropTypes.oneOfType([PropTypes.number, PropTypes.string, PropTypes.object, PropTypes.array]) : {};\nexport default responsivePropType;","import deepmerge from '@mui/utils/deepmerge';\nfunction merge(acc, item) {\n  if (!item) {\n    return acc;\n  }\n  return deepmerge(acc, item, {\n    clone: false // No need to clone deep, it's way faster.\n  });\n}\nexport default merge;","import PropTypes from 'prop-types';\nimport deepmerge from '@mui/utils/deepmerge';\nimport merge from \"../merge/index.js\";\nimport { isCqShorthand, getContainerQuery } from \"../cssContainerQueries/index.js\";\n\n// The breakpoint **start** at this value.\n// For instance with the first breakpoint xs: [xs, sm[.\nexport const values = {\n  xs: 0,\n  // phone\n  sm: 600,\n  // tablet\n  md: 900,\n  // small laptop\n  lg: 1200,\n  // desktop\n  xl: 1536 // large screen\n};\nconst defaultBreakpoints = {\n  // Sorted ASC by size. That's important.\n  // It can't be configured as it's used statically for propTypes.\n  keys: ['xs', 'sm', 'md', 'lg', 'xl'],\n  up: key => `@media (min-width:${values[key]}px)`\n};\nconst defaultContainerQueries = {\n  containerQueries: containerName => ({\n    up: key => {\n      let result = typeof key === 'number' ? key : values[key] || key;\n      if (typeof result === 'number') {\n        result = `${result}px`;\n      }\n      return containerName ? `@container ${containerName} (min-width:${result})` : `@container (min-width:${result})`;\n    }\n  })\n};\nexport function handleBreakpoints(props, propValue, styleFromPropValue) {\n  const theme = props.theme || {};\n  if (Array.isArray(propValue)) {\n    const themeBreakpoints = theme.breakpoints || defaultBreakpoints;\n    return propValue.reduce((acc, item, index) => {\n      acc[themeBreakpoints.up(themeBreakpoints.keys[index])] = styleFromPropValue(propValue[index]);\n      return acc;\n    }, {});\n  }\n  if (typeof propValue === 'object') {\n    const themeBreakpoints = theme.breakpoints || defaultBreakpoints;\n    return Object.keys(propValue).reduce((acc, breakpoint) => {\n      if (isCqShorthand(themeBreakpoints.keys, breakpoint)) {\n        const containerKey = getContainerQuery(theme.containerQueries ? theme : defaultContainerQueries, breakpoint);\n        if (containerKey) {\n          acc[containerKey] = styleFromPropValue(propValue[breakpoint], breakpoint);\n        }\n      }\n      // key is breakpoint\n      else if (Object.keys(themeBreakpoints.values || values).includes(breakpoint)) {\n        const mediaKey = themeBreakpoints.up(breakpoint);\n        acc[mediaKey] = styleFromPropValue(propValue[breakpoint], breakpoint);\n      } else {\n        const cssKey = breakpoint;\n        acc[cssKey] = propValue[cssKey];\n      }\n      return acc;\n    }, {});\n  }\n  const output = styleFromPropValue(propValue);\n  return output;\n}\nfunction breakpoints(styleFunction) {\n  // false positive\n  // eslint-disable-next-line react/function-component-definition\n  const newStyleFunction = props => {\n    const theme = props.theme || {};\n    const base = styleFunction(props);\n    const themeBreakpoints = theme.breakpoints || defaultBreakpoints;\n    const extended = themeBreakpoints.keys.reduce((acc, key) => {\n      if (props[key]) {\n        acc = acc || {};\n        acc[themeBreakpoints.up(key)] = styleFunction({\n          theme,\n          ...props[key]\n        });\n      }\n      return acc;\n    }, null);\n    return merge(base, extended);\n  };\n  newStyleFunction.propTypes = process.env.NODE_ENV !== 'production' ? {\n    ...styleFunction.propTypes,\n    xs: PropTypes.object,\n    sm: PropTypes.object,\n    md: PropTypes.object,\n    lg: PropTypes.object,\n    xl: PropTypes.object\n  } : {};\n  newStyleFunction.filterProps = ['xs', 'sm', 'md', 'lg', 'xl', ...styleFunction.filterProps];\n  return newStyleFunction;\n}\nexport function createEmptyBreakpointObject(breakpointsInput = {}) {\n  const breakpointsInOrder = breakpointsInput.keys?.reduce((acc, key) => {\n    const breakpointStyleKey = breakpointsInput.up(key);\n    acc[breakpointStyleKey] = {};\n    return acc;\n  }, {});\n  return breakpointsInOrder || {};\n}\nexport function removeUnusedBreakpoints(breakpointKeys, style) {\n  return breakpointKeys.reduce((acc, key) => {\n    const breakpointOutput = acc[key];\n    const isBreakpointUnused = !breakpointOutput || Object.keys(breakpointOutput).length === 0;\n    if (isBreakpointUnused) {\n      delete acc[key];\n    }\n    return acc;\n  }, style);\n}\nexport function mergeBreakpointsInOrder(breakpointsInput, ...styles) {\n  const emptyBreakpoints = createEmptyBreakpointObject(breakpointsInput);\n  const mergedOutput = [emptyBreakpoints, ...styles].reduce((prev, next) => deepmerge(prev, next), {});\n  return removeUnusedBreakpoints(Object.keys(emptyBreakpoints), mergedOutput);\n}\n\n// compute base for responsive values; e.g.,\n// [1,2,3] => {xs: true, sm: true, md: true}\n// {xs: 1, sm: 2, md: 3} => {xs: true, sm: true, md: true}\nexport function computeBreakpointsBase(breakpointValues, themeBreakpoints) {\n  // fixed value\n  if (typeof breakpointValues !== 'object') {\n    return {};\n  }\n  const base = {};\n  const breakpointsKeys = Object.keys(themeBreakpoints);\n  if (Array.isArray(breakpointValues)) {\n    breakpointsKeys.forEach((breakpoint, i) => {\n      if (i < breakpointValues.length) {\n        base[breakpoint] = true;\n      }\n    });\n  } else {\n    breakpointsKeys.forEach(breakpoint => {\n      if (breakpointValues[breakpoint] != null) {\n        base[breakpoint] = true;\n      }\n    });\n  }\n  return base;\n}\nexport function resolveBreakpointValues({\n  values: breakpointValues,\n  breakpoints: themeBreakpoints,\n  base: customBase\n}) {\n  const base = customBase || computeBreakpointsBase(breakpointValues, themeBreakpoints);\n  const keys = Object.keys(base);\n  if (keys.length === 0) {\n    return breakpointValues;\n  }\n  let previous;\n  return keys.reduce((acc, breakpoint, i) => {\n    if (Array.isArray(breakpointValues)) {\n      acc[breakpoint] = breakpointValues[i] != null ? breakpointValues[i] : breakpointValues[previous];\n      previous = i;\n    } else if (typeof breakpointValues === 'object') {\n      acc[breakpoint] = breakpointValues[breakpoint] != null ? breakpointValues[breakpoint] : breakpointValues[previous];\n      previous = breakpoint;\n    } else {\n      acc[breakpoint] = breakpointValues;\n    }\n    return acc;\n  }, {});\n}\nexport default breakpoints;","import _formatErrorMessage from \"@mui/utils/formatMuiErrorMessage\";\n// It should to be noted that this function isn't equivalent to `text-transform: capitalize`.\n//\n// A strict capitalization should uppercase the first letter of each word in the sentence.\n// We only handle the first word.\nexport default function capitalize(string) {\n  if (typeof string !== 'string') {\n    throw new Error(process.env.NODE_ENV !== \"production\" ? 'MUI: `capitalize(string)` expects a string argument.' : _formatErrorMessage(7));\n  }\n  return string.charAt(0).toUpperCase() + string.slice(1);\n}","import capitalize from '@mui/utils/capitalize';\nimport responsivePropType from \"../responsivePropType/index.js\";\nimport { handleBreakpoints } from \"../breakpoints/index.js\";\nexport function getPath(obj, path, checkVars = true) {\n  if (!path || typeof path !== 'string') {\n    return null;\n  }\n\n  // Check if CSS variables are used\n  if (obj && obj.vars && checkVars) {\n    const val = `vars.${path}`.split('.').reduce((acc, item) => acc && acc[item] ? acc[item] : null, obj);\n    if (val != null) {\n      return val;\n    }\n  }\n  return path.split('.').reduce((acc, item) => {\n    if (acc && acc[item] != null) {\n      return acc[item];\n    }\n    return null;\n  }, obj);\n}\nexport function getStyleValue(themeMapping, transform, propValueFinal, userValue = propValueFinal) {\n  let value;\n  if (typeof themeMapping === 'function') {\n    value = themeMapping(propValueFinal);\n  } else if (Array.isArray(themeMapping)) {\n    value = themeMapping[propValueFinal] || userValue;\n  } else {\n    value = getPath(themeMapping, propValueFinal) || userValue;\n  }\n  if (transform) {\n    value = transform(value, userValue, themeMapping);\n  }\n  return value;\n}\nfunction style(options) {\n  const {\n    prop,\n    cssProperty = options.prop,\n    themeKey,\n    transform\n  } = options;\n\n  // false positive\n  // eslint-disable-next-line react/function-component-definition\n  const fn = props => {\n    if (props[prop] == null) {\n      return null;\n    }\n    const propValue = props[prop];\n    const theme = props.theme;\n    const themeMapping = getPath(theme, themeKey) || {};\n    const styleFromPropValue = propValueFinal => {\n      let value = getStyleValue(themeMapping, transform, propValueFinal);\n      if (propValueFinal === value && typeof propValueFinal === 'string') {\n        // Haven't found value\n        value = getStyleValue(themeMapping, transform, `${prop}${propValueFinal === 'default' ? '' : capitalize(propValueFinal)}`, propValueFinal);\n      }\n      if (cssProperty === false) {\n        return value;\n      }\n      return {\n        [cssProperty]: value\n      };\n    };\n    return handleBreakpoints(props, propValue, styleFromPropValue);\n  };\n  fn.propTypes = process.env.NODE_ENV !== 'production' ? {\n    [prop]: responsivePropType\n  } : {};\n  fn.filterProps = [prop];\n  return fn;\n}\nexport default style;","export default function memoize(fn) {\n  const cache = {};\n  return arg => {\n    if (cache[arg] === undefined) {\n      cache[arg] = fn(arg);\n    }\n    return cache[arg];\n  };\n}","import responsivePropType from \"../responsivePropType/index.js\";\nimport { handleBreakpoints } from \"../breakpoints/index.js\";\nimport { getPath } from \"../style/index.js\";\nimport merge from \"../merge/index.js\";\nimport memoize from \"../memoize/index.js\";\nconst properties = {\n  m: 'margin',\n  p: 'padding'\n};\nconst directions = {\n  t: 'Top',\n  r: 'Right',\n  b: 'Bottom',\n  l: 'Left',\n  x: ['Left', 'Right'],\n  y: ['Top', 'Bottom']\n};\nconst aliases = {\n  marginX: 'mx',\n  marginY: 'my',\n  paddingX: 'px',\n  paddingY: 'py'\n};\n\n// memoize() impact:\n// From 300,000 ops/sec\n// To 350,000 ops/sec\nconst getCssProperties = memoize(prop => {\n  // It's not a shorthand notation.\n  if (prop.length > 2) {\n    if (aliases[prop]) {\n      prop = aliases[prop];\n    } else {\n      return [prop];\n    }\n  }\n  const [a, b] = prop.split('');\n  const property = properties[a];\n  const direction = directions[b] || '';\n  return Array.isArray(direction) ? direction.map(dir => property + dir) : [property + direction];\n});\nexport const marginKeys = ['m', 'mt', 'mr', 'mb', 'ml', 'mx', 'my', 'margin', 'marginTop', 'marginRight', 'marginBottom', 'marginLeft', 'marginX', 'marginY', 'marginInline', 'marginInlineStart', 'marginInlineEnd', 'marginBlock', 'marginBlockStart', 'marginBlockEnd'];\nexport const paddingKeys = ['p', 'pt', 'pr', 'pb', 'pl', 'px', 'py', 'padding', 'paddingTop', 'paddingRight', 'paddingBottom', 'paddingLeft', 'paddingX', 'paddingY', 'paddingInline', 'paddingInlineStart', 'paddingInlineEnd', 'paddingBlock', 'paddingBlockStart', 'paddingBlockEnd'];\nconst spacingKeys = [...marginKeys, ...paddingKeys];\nexport function createUnaryUnit(theme, themeKey, defaultValue, propName) {\n  const themeSpacing = getPath(theme, themeKey, true) ?? defaultValue;\n  if (typeof themeSpacing === 'number' || typeof themeSpacing === 'string') {\n    return val => {\n      if (typeof val === 'string') {\n        return val;\n      }\n      if (process.env.NODE_ENV !== 'production') {\n        if (typeof val !== 'number') {\n          console.error(`MUI: Expected ${propName} argument to be a number or a string, got ${val}.`);\n        }\n      }\n      if (typeof themeSpacing === 'string') {\n        if (themeSpacing.startsWith('var(') && val === 0) {\n          return 0;\n        }\n        if (themeSpacing.startsWith('var(') && val === 1) {\n          return themeSpacing;\n        }\n        return `calc(${val} * ${themeSpacing})`;\n      }\n      return themeSpacing * val;\n    };\n  }\n  if (Array.isArray(themeSpacing)) {\n    return val => {\n      if (typeof val === 'string') {\n        return val;\n      }\n      const abs = Math.abs(val);\n      if (process.env.NODE_ENV !== 'production') {\n        if (!Number.isInteger(abs)) {\n          console.error([`MUI: The \\`theme.${themeKey}\\` array type cannot be combined with non integer values.` + `You should either use an integer value that can be used as index, or define the \\`theme.${themeKey}\\` as a number.`].join('\\n'));\n        } else if (abs > themeSpacing.length - 1) {\n          console.error([`MUI: The value provided (${abs}) overflows.`, `The supported values are: ${JSON.stringify(themeSpacing)}.`, `${abs} > ${themeSpacing.length - 1}, you need to add the missing values.`].join('\\n'));\n        }\n      }\n      const transformed = themeSpacing[abs];\n      if (val >= 0) {\n        return transformed;\n      }\n      if (typeof transformed === 'number') {\n        return -transformed;\n      }\n      if (typeof transformed === 'string' && transformed.startsWith('var(')) {\n        return `calc(-1 * ${transformed})`;\n      }\n      return `-${transformed}`;\n    };\n  }\n  if (typeof themeSpacing === 'function') {\n    return themeSpacing;\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    console.error([`MUI: The \\`theme.${themeKey}\\` value (${themeSpacing}) is invalid.`, 'It should be a number, an array or a function.'].join('\\n'));\n  }\n  return () => undefined;\n}\nexport function createUnarySpacing(theme) {\n  return createUnaryUnit(theme, 'spacing', 8, 'spacing');\n}\nexport function getValue(transformer, propValue) {\n  if (typeof propValue === 'string' || propValue == null) {\n    return propValue;\n  }\n  return transformer(propValue);\n}\nexport function getStyleFromPropValue(cssProperties, transformer) {\n  return propValue => cssProperties.reduce((acc, cssProperty) => {\n    acc[cssProperty] = getValue(transformer, propValue);\n    return acc;\n  }, {});\n}\nfunction resolveCssProperty(props, keys, prop, transformer) {\n  // Using a hash computation over an array iteration could be faster, but with only 28 items,\n  // it's doesn't worth the bundle size.\n  if (!keys.includes(prop)) {\n    return null;\n  }\n  const cssProperties = getCssProperties(prop);\n  const styleFromPropValue = getStyleFromPropValue(cssProperties, transformer);\n  const propValue = props[prop];\n  return handleBreakpoints(props, propValue, styleFromPropValue);\n}\nfunction style(props, keys) {\n  const transformer = createUnarySpacing(props.theme);\n  return Object.keys(props).map(prop => resolveCssProperty(props, keys, prop, transformer)).reduce(merge, {});\n}\nexport function margin(props) {\n  return style(props, marginKeys);\n}\nmargin.propTypes = process.env.NODE_ENV !== 'production' ? marginKeys.reduce((obj, key) => {\n  obj[key] = responsivePropType;\n  return obj;\n}, {}) : {};\nmargin.filterProps = marginKeys;\nexport function padding(props) {\n  return style(props, paddingKeys);\n}\npadding.propTypes = process.env.NODE_ENV !== 'production' ? paddingKeys.reduce((obj, key) => {\n  obj[key] = responsivePropType;\n  return obj;\n}, {}) : {};\npadding.filterProps = paddingKeys;\nfunction spacing(props) {\n  return style(props, spacingKeys);\n}\nspacing.propTypes = process.env.NODE_ENV !== 'production' ? spacingKeys.reduce((obj, key) => {\n  obj[key] = responsivePropType;\n  return obj;\n}, {}) : {};\nspacing.filterProps = spacingKeys;\nexport default spacing;","import { createUnarySpacing } from \"../spacing/index.js\";\n\n// The different signatures imply different meaning for their arguments that can't be expressed structurally.\n// We express the difference with variable names.\n\nexport default function createSpacing(spacingInput = 8,\n// Material Design layouts are visually balanced. Most measurements align to an 8dp grid, which aligns both spacing and the overall layout.\n// Smaller components, such as icons, can align to a 4dp grid.\n// https://m2.material.io/design/layout/understanding-layout.html\ntransform = createUnarySpacing({\n  spacing: spacingInput\n})) {\n  // Already transformed.\n  if (spacingInput.mui) {\n    return spacingInput;\n  }\n  const spacing = (...argsInput) => {\n    if (process.env.NODE_ENV !== 'production') {\n      if (!(argsInput.length <= 4)) {\n        console.error(`MUI: Too many arguments provided, expected between 0 and 4, got ${argsInput.length}`);\n      }\n    }\n    const args = argsInput.length === 0 ? [1] : argsInput;\n    return args.map(argument => {\n      const output = transform(argument);\n      return typeof output === 'number' ? `${output}px` : output;\n    }).join(' ');\n  };\n  spacing.mui = true;\n  return spacing;\n}","import merge from \"../merge/index.js\";\nfunction compose(...styles) {\n  const handlers = styles.reduce((acc, style) => {\n    style.filterProps.forEach(prop => {\n      acc[prop] = style;\n    });\n    return acc;\n  }, {});\n\n  // false positive\n  // eslint-disable-next-line react/function-component-definition\n  const fn = props => {\n    return Object.keys(props).reduce((acc, prop) => {\n      if (handlers[prop]) {\n        return merge(acc, handlers[prop](props));\n      }\n      return acc;\n    }, {});\n  };\n  fn.propTypes = process.env.NODE_ENV !== 'production' ? styles.reduce((acc, style) => Object.assign(acc, style.propTypes), {}) : {};\n  fn.filterProps = styles.reduce((acc, style) => acc.concat(style.filterProps), []);\n  return fn;\n}\nexport default compose;","import responsivePropType from \"../responsivePropType/index.js\";\nimport style from \"../style/index.js\";\nimport compose from \"../compose/index.js\";\nimport { createUnaryUnit, getValue } from \"../spacing/index.js\";\nimport { handleBreakpoints } from \"../breakpoints/index.js\";\nexport function borderTransform(value) {\n  if (typeof value !== 'number') {\n    return value;\n  }\n  return `${value}px solid`;\n}\nfunction createBorderStyle(prop, transform) {\n  return style({\n    prop,\n    themeKey: 'borders',\n    transform\n  });\n}\nexport const border = createBorderStyle('border', borderTransform);\nexport const borderTop = createBorderStyle('borderTop', borderTransform);\nexport const borderRight = createBorderStyle('borderRight', borderTransform);\nexport const borderBottom = createBorderStyle('borderBottom', borderTransform);\nexport const borderLeft = createBorderStyle('borderLeft', borderTransform);\nexport const borderColor = createBorderStyle('borderColor');\nexport const borderTopColor = createBorderStyle('borderTopColor');\nexport const borderRightColor = createBorderStyle('borderRightColor');\nexport const borderBottomColor = createBorderStyle('borderBottomColor');\nexport const borderLeftColor = createBorderStyle('borderLeftColor');\nexport const outline = createBorderStyle('outline', borderTransform);\nexport const outlineColor = createBorderStyle('outlineColor');\n\n// false positive\n// eslint-disable-next-line react/function-component-definition\nexport const borderRadius = props => {\n  if (props.borderRadius !== undefined && props.borderRadius !== null) {\n    const transformer = createUnaryUnit(props.theme, 'shape.borderRadius', 4, 'borderRadius');\n    const styleFromPropValue = propValue => ({\n      borderRadius: getValue(transformer, propValue)\n    });\n    return handleBreakpoints(props, props.borderRadius, styleFromPropValue);\n  }\n  return null;\n};\nborderRadius.propTypes = process.env.NODE_ENV !== 'production' ? {\n  borderRadius: responsivePropType\n} : {};\nborderRadius.filterProps = ['borderRadius'];\nconst borders = compose(border, borderTop, borderRight, borderBottom, borderLeft, borderColor, borderTopColor, borderRightColor, borderBottomColor, borderLeftColor, borderRadius, outline, outlineColor);\nexport default borders;","import style from \"../style/index.js\";\nimport compose from \"../compose/index.js\";\nimport { createUnaryUnit, getValue } from \"../spacing/index.js\";\nimport { handleBreakpoints } from \"../breakpoints/index.js\";\nimport responsivePropType from \"../responsivePropType/index.js\";\n\n// false positive\n// eslint-disable-next-line react/function-component-definition\nexport const gap = props => {\n  if (props.gap !== undefined && props.gap !== null) {\n    const transformer = createUnaryUnit(props.theme, 'spacing', 8, 'gap');\n    const styleFromPropValue = propValue => ({\n      gap: getValue(transformer, propValue)\n    });\n    return handleBreakpoints(props, props.gap, styleFromPropValue);\n  }\n  return null;\n};\ngap.propTypes = process.env.NODE_ENV !== 'production' ? {\n  gap: responsivePropType\n} : {};\ngap.filterProps = ['gap'];\n\n// false positive\n// eslint-disable-next-line react/function-component-definition\nexport const columnGap = props => {\n  if (props.columnGap !== undefined && props.columnGap !== null) {\n    const transformer = createUnaryUnit(props.theme, 'spacing', 8, 'columnGap');\n    const styleFromPropValue = propValue => ({\n      columnGap: getValue(transformer, propValue)\n    });\n    return handleBreakpoints(props, props.columnGap, styleFromPropValue);\n  }\n  return null;\n};\ncolumnGap.propTypes = process.env.NODE_ENV !== 'production' ? {\n  columnGap: responsivePropType\n} : {};\ncolumnGap.filterProps = ['columnGap'];\n\n// false positive\n// eslint-disable-next-line react/function-component-definition\nexport const rowGap = props => {\n  if (props.rowGap !== undefined && props.rowGap !== null) {\n    const transformer = createUnaryUnit(props.theme, 'spacing', 8, 'rowGap');\n    const styleFromPropValue = propValue => ({\n      rowGap: getValue(transformer, propValue)\n    });\n    return handleBreakpoints(props, props.rowGap, styleFromPropValue);\n  }\n  return null;\n};\nrowGap.propTypes = process.env.NODE_ENV !== 'production' ? {\n  rowGap: responsivePropType\n} : {};\nrowGap.filterProps = ['rowGap'];\nexport const gridColumn = style({\n  prop: 'gridColumn'\n});\nexport const gridRow = style({\n  prop: 'gridRow'\n});\nexport const gridAutoFlow = style({\n  prop: 'gridAutoFlow'\n});\nexport const gridAutoColumns = style({\n  prop: 'gridAutoColumns'\n});\nexport const gridAutoRows = style({\n  prop: 'gridAutoRows'\n});\nexport const gridTemplateColumns = style({\n  prop: 'gridTemplateColumns'\n});\nexport const gridTemplateRows = style({\n  prop: 'gridTemplateRows'\n});\nexport const gridTemplateAreas = style({\n  prop: 'gridTemplateAreas'\n});\nexport const gridArea = style({\n  prop: 'gridArea'\n});\nconst grid = compose(gap, columnGap, rowGap, gridColumn, gridRow, gridAutoFlow, gridAutoColumns, gridAutoRows, gridTemplateColumns, gridTemplateRows, gridTemplateAreas, gridArea);\nexport default grid;","import style from \"../style/index.js\";\nimport compose from \"../compose/index.js\";\nexport function paletteTransform(value, userValue) {\n  if (userValue === 'grey') {\n    return userValue;\n  }\n  return value;\n}\nexport const color = style({\n  prop: 'color',\n  themeKey: 'palette',\n  transform: paletteTransform\n});\nexport const bgcolor = style({\n  prop: 'bgcolor',\n  cssProperty: 'backgroundColor',\n  themeKey: 'palette',\n  transform: paletteTransform\n});\nexport const backgroundColor = style({\n  prop: 'backgroundColor',\n  themeKey: 'palette',\n  transform: paletteTransform\n});\nconst palette = compose(color, bgcolor, backgroundColor);\nexport default palette;","import style from \"../style/index.js\";\nimport compose from \"../compose/index.js\";\nimport { handleBreakpoints, values as breakpointsValues } from \"../breakpoints/index.js\";\nexport function sizingTransform(value) {\n  return value <= 1 && value !== 0 ? `${value * 100}%` : value;\n}\nexport const width = style({\n  prop: 'width',\n  transform: sizingTransform\n});\nexport const maxWidth = props => {\n  if (props.maxWidth !== undefined && props.maxWidth !== null) {\n    const styleFromPropValue = propValue => {\n      const breakpoint = props.theme?.breakpoints?.values?.[propValue] || breakpointsValues[propValue];\n      if (!breakpoint) {\n        return {\n          maxWidth: sizingTransform(propValue)\n        };\n      }\n      if (props.theme?.breakpoints?.unit !== 'px') {\n        return {\n          maxWidth: `${breakpoint}${props.theme.breakpoints.unit}`\n        };\n      }\n      return {\n        maxWidth: breakpoint\n      };\n    };\n    return handleBreakpoints(props, props.maxWidth, styleFromPropValue);\n  }\n  return null;\n};\nmaxWidth.filterProps = ['maxWidth'];\nexport const minWidth = style({\n  prop: 'minWidth',\n  transform: sizingTransform\n});\nexport const height = style({\n  prop: 'height',\n  transform: sizingTransform\n});\nexport const maxHeight = style({\n  prop: 'maxHeight',\n  transform: sizingTransform\n});\nexport const minHeight = style({\n  prop: 'minHeight',\n  transform: sizingTransform\n});\nexport const sizeWidth = style({\n  prop: 'size',\n  cssProperty: 'width',\n  transform: sizingTransform\n});\nexport const sizeHeight = style({\n  prop: 'size',\n  cssProperty: 'height',\n  transform: sizingTransform\n});\nexport const boxSizing = style({\n  prop: 'boxSizing'\n});\nconst sizing = compose(width, maxWidth, minWidth, height, maxHeight, minHeight, boxSizing);\nexport default sizing;","import { padding, margin } from \"../spacing/index.js\";\nimport { borderRadius, borderTransform } from \"../borders/index.js\";\nimport { gap, rowGap, columnGap } from \"../cssGrid/index.js\";\nimport { paletteTransform } from \"../palette/index.js\";\nimport { maxWidth, sizingTransform } from \"../sizing/index.js\";\nconst defaultSxConfig = {\n  // borders\n  border: {\n    themeKey: 'borders',\n    transform: borderTransform\n  },\n  borderTop: {\n    themeKey: 'borders',\n    transform: borderTransform\n  },\n  borderRight: {\n    themeKey: 'borders',\n    transform: borderTransform\n  },\n  borderBottom: {\n    themeKey: 'borders',\n    transform: borderTransform\n  },\n  borderLeft: {\n    themeKey: 'borders',\n    transform: borderTransform\n  },\n  borderColor: {\n    themeKey: 'palette'\n  },\n  borderTopColor: {\n    themeKey: 'palette'\n  },\n  borderRightColor: {\n    themeKey: 'palette'\n  },\n  borderBottomColor: {\n    themeKey: 'palette'\n  },\n  borderLeftColor: {\n    themeKey: 'palette'\n  },\n  outline: {\n    themeKey: 'borders',\n    transform: borderTransform\n  },\n  outlineColor: {\n    themeKey: 'palette'\n  },\n  borderRadius: {\n    themeKey: 'shape.borderRadius',\n    style: borderRadius\n  },\n  // palette\n  color: {\n    themeKey: 'palette',\n    transform: paletteTransform\n  },\n  bgcolor: {\n    themeKey: 'palette',\n    cssProperty: 'backgroundColor',\n    transform: paletteTransform\n  },\n  backgroundColor: {\n    themeKey: 'palette',\n    transform: paletteTransform\n  },\n  // spacing\n  p: {\n    style: padding\n  },\n  pt: {\n    style: padding\n  },\n  pr: {\n    style: padding\n  },\n  pb: {\n    style: padding\n  },\n  pl: {\n    style: padding\n  },\n  px: {\n    style: padding\n  },\n  py: {\n    style: padding\n  },\n  padding: {\n    style: padding\n  },\n  paddingTop: {\n    style: padding\n  },\n  paddingRight: {\n    style: padding\n  },\n  paddingBottom: {\n    style: padding\n  },\n  paddingLeft: {\n    style: padding\n  },\n  paddingX: {\n    style: padding\n  },\n  paddingY: {\n    style: padding\n  },\n  paddingInline: {\n    style: padding\n  },\n  paddingInlineStart: {\n    style: padding\n  },\n  paddingInlineEnd: {\n    style: padding\n  },\n  paddingBlock: {\n    style: padding\n  },\n  paddingBlockStart: {\n    style: padding\n  },\n  paddingBlockEnd: {\n    style: padding\n  },\n  m: {\n    style: margin\n  },\n  mt: {\n    style: margin\n  },\n  mr: {\n    style: margin\n  },\n  mb: {\n    style: margin\n  },\n  ml: {\n    style: margin\n  },\n  mx: {\n    style: margin\n  },\n  my: {\n    style: margin\n  },\n  margin: {\n    style: margin\n  },\n  marginTop: {\n    style: margin\n  },\n  marginRight: {\n    style: margin\n  },\n  marginBottom: {\n    style: margin\n  },\n  marginLeft: {\n    style: margin\n  },\n  marginX: {\n    style: margin\n  },\n  marginY: {\n    style: margin\n  },\n  marginInline: {\n    style: margin\n  },\n  marginInlineStart: {\n    style: margin\n  },\n  marginInlineEnd: {\n    style: margin\n  },\n  marginBlock: {\n    style: margin\n  },\n  marginBlockStart: {\n    style: margin\n  },\n  marginBlockEnd: {\n    style: margin\n  },\n  // display\n  displayPrint: {\n    cssProperty: false,\n    transform: value => ({\n      '@media print': {\n        display: value\n      }\n    })\n  },\n  display: {},\n  overflow: {},\n  textOverflow: {},\n  visibility: {},\n  whiteSpace: {},\n  // flexbox\n  flexBasis: {},\n  flexDirection: {},\n  flexWrap: {},\n  justifyContent: {},\n  alignItems: {},\n  alignContent: {},\n  order: {},\n  flex: {},\n  flexGrow: {},\n  flexShrink: {},\n  alignSelf: {},\n  justifyItems: {},\n  justifySelf: {},\n  // grid\n  gap: {\n    style: gap\n  },\n  rowGap: {\n    style: rowGap\n  },\n  columnGap: {\n    style: columnGap\n  },\n  gridColumn: {},\n  gridRow: {},\n  gridAutoFlow: {},\n  gridAutoColumns: {},\n  gridAutoRows: {},\n  gridTemplateColumns: {},\n  gridTemplateRows: {},\n  gridTemplateAreas: {},\n  gridArea: {},\n  // positions\n  position: {},\n  zIndex: {\n    themeKey: 'zIndex'\n  },\n  top: {},\n  right: {},\n  bottom: {},\n  left: {},\n  // shadows\n  boxShadow: {\n    themeKey: 'shadows'\n  },\n  // sizing\n  width: {\n    transform: sizingTransform\n  },\n  maxWidth: {\n    style: maxWidth\n  },\n  minWidth: {\n    transform: sizingTransform\n  },\n  height: {\n    transform: sizingTransform\n  },\n  maxHeight: {\n    transform: sizingTransform\n  },\n  minHeight: {\n    transform: sizingTransform\n  },\n  boxSizing: {},\n  // typography\n  font: {\n    themeKey: 'font'\n  },\n  fontFamily: {\n    themeKey: 'typography'\n  },\n  fontSize: {\n    themeKey: 'typography'\n  },\n  fontStyle: {\n    themeKey: 'typography'\n  },\n  fontWeight: {\n    themeKey: 'typography'\n  },\n  letterSpacing: {},\n  textTransform: {},\n  lineHeight: {},\n  textAlign: {},\n  typography: {\n    cssProperty: false,\n    themeKey: 'typography'\n  }\n};\nexport default defaultSxConfig;","import capitalize from '@mui/utils/capitalize';\nimport merge from \"../merge/index.js\";\nimport { getPath, getStyleValue as getValue } from \"../style/index.js\";\nimport { handleBreakpoints, createEmptyBreakpointObject, removeUnusedBreakpoints } from \"../breakpoints/index.js\";\nimport { sortContainerQueries } from \"../cssContainerQueries/index.js\";\nimport defaultSxConfig from \"./defaultSxConfig.js\";\nfunction objectsHaveSameKeys(...objects) {\n  const allKeys = objects.reduce((keys, object) => keys.concat(Object.keys(object)), []);\n  const union = new Set(allKeys);\n  return objects.every(object => union.size === Object.keys(object).length);\n}\nfunction callIfFn(maybeFn, arg) {\n  return typeof maybeFn === 'function' ? maybeFn(arg) : maybeFn;\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function unstable_createStyleFunctionSx() {\n  function getThemeValue(prop, val, theme, config) {\n    const props = {\n      [prop]: val,\n      theme\n    };\n    const options = config[prop];\n    if (!options) {\n      return {\n        [prop]: val\n      };\n    }\n    const {\n      cssProperty = prop,\n      themeKey,\n      transform,\n      style\n    } = options;\n    if (val == null) {\n      return null;\n    }\n\n    // TODO v6: remove, see https://github.com/mui/material-ui/pull/38123\n    if (themeKey === 'typography' && val === 'inherit') {\n      return {\n        [prop]: val\n      };\n    }\n    const themeMapping = getPath(theme, themeKey) || {};\n    if (style) {\n      return style(props);\n    }\n    const styleFromPropValue = propValueFinal => {\n      let value = getValue(themeMapping, transform, propValueFinal);\n      if (propValueFinal === value && typeof propValueFinal === 'string') {\n        // Haven't found value\n        value = getValue(themeMapping, transform, `${prop}${propValueFinal === 'default' ? '' : capitalize(propValueFinal)}`, propValueFinal);\n      }\n      if (cssProperty === false) {\n        return value;\n      }\n      return {\n        [cssProperty]: value\n      };\n    };\n    return handleBreakpoints(props, val, styleFromPropValue);\n  }\n  function styleFunctionSx(props) {\n    const {\n      sx,\n      theme = {}\n    } = props || {};\n    if (!sx) {\n      return null; // Emotion & styled-components will neglect null\n    }\n    const config = theme.unstable_sxConfig ?? defaultSxConfig;\n\n    /*\n     * Receive `sxInput` as object or callback\n     * and then recursively check keys & values to create media query object styles.\n     * (the result will be used in `styled`)\n     */\n    function traverse(sxInput) {\n      let sxObject = sxInput;\n      if (typeof sxInput === 'function') {\n        sxObject = sxInput(theme);\n      } else if (typeof sxInput !== 'object') {\n        // value\n        return sxInput;\n      }\n      if (!sxObject) {\n        return null;\n      }\n      const emptyBreakpoints = createEmptyBreakpointObject(theme.breakpoints);\n      const breakpointsKeys = Object.keys(emptyBreakpoints);\n      let css = emptyBreakpoints;\n      Object.keys(sxObject).forEach(styleKey => {\n        const value = callIfFn(sxObject[styleKey], theme);\n        if (value !== null && value !== undefined) {\n          if (typeof value === 'object') {\n            if (config[styleKey]) {\n              css = merge(css, getThemeValue(styleKey, value, theme, config));\n            } else {\n              const breakpointsValues = handleBreakpoints({\n                theme\n              }, value, x => ({\n                [styleKey]: x\n              }));\n              if (objectsHaveSameKeys(breakpointsValues, value)) {\n                css[styleKey] = styleFunctionSx({\n                  sx: value,\n                  theme\n                });\n              } else {\n                css = merge(css, breakpointsValues);\n              }\n            }\n          } else {\n            css = merge(css, getThemeValue(styleKey, value, theme, config));\n          }\n        }\n      });\n      return sortContainerQueries(theme, removeUnusedBreakpoints(breakpointsKeys, css));\n    }\n    return Array.isArray(sx) ? sx.map(traverse) : traverse(sx);\n  }\n  return styleFunctionSx;\n}\nconst styleFunctionSx = unstable_createStyleFunctionSx();\nstyleFunctionSx.filterProps = ['sx'];\nexport default styleFunctionSx;","/**\n * A universal utility to style components with multiple color modes. Always use it from the theme object.\n * It works with:\n *  - [Basic theme](https://mui.com/material-ui/customization/dark-mode/)\n *  - [CSS theme variables](https://mui.com/material-ui/customization/css-theme-variables/overview/)\n *  - Zero-runtime engine\n *\n * Tips: Use an array over object spread and place `theme.applyStyles()` last.\n *\n * With the styled function:\n * ✅ [{ background: '#e5e5e5' }, theme.applyStyles('dark', { background: '#1c1c1c' })]\n * 🚫 { background: '#e5e5e5', ...theme.applyStyles('dark', { background: '#1c1c1c' })}\n *\n * With the sx prop:\n * ✅ [{ background: '#e5e5e5' }, theme => theme.applyStyles('dark', { background: '#1c1c1c' })]\n * 🚫 { background: '#e5e5e5', ...theme => theme.applyStyles('dark', { background: '#1c1c1c' })}\n *\n * @example\n * 1. using with `styled`:\n * ```jsx\n *   const Component = styled('div')(({ theme }) => [\n *     { background: '#e5e5e5' },\n *     theme.applyStyles('dark', {\n *       background: '#1c1c1c',\n *       color: '#fff',\n *     }),\n *   ]);\n * ```\n *\n * @example\n * 2. using with `sx` prop:\n * ```jsx\n *   <Box sx={[\n *     { background: '#e5e5e5' },\n *     theme => theme.applyStyles('dark', {\n *        background: '#1c1c1c',\n *        color: '#fff',\n *      }),\n *     ]}\n *   />\n * ```\n *\n * @example\n * 3. theming a component:\n * ```jsx\n *   extendTheme({\n *     components: {\n *       MuiButton: {\n *         styleOverrides: {\n *           root: ({ theme }) => [\n *             { background: '#e5e5e5' },\n *             theme.applyStyles('dark', {\n *               background: '#1c1c1c',\n *               color: '#fff',\n *             }),\n *           ],\n *         },\n *       }\n *     }\n *   })\n *```\n */\nexport default function applyStyles(key, styles) {\n  // @ts-expect-error this is 'any' type\n  const theme = this;\n  if (theme.vars) {\n    if (!theme.colorSchemes?.[key] || typeof theme.getColorSchemeSelector !== 'function') {\n      return {};\n    }\n    // If CssVarsProvider is used as a provider, returns '*:where({selector}) &'\n    let selector = theme.getColorSchemeSelector(key);\n    if (selector === '&') {\n      return styles;\n    }\n    if (selector.includes('data-') || selector.includes('.')) {\n      // '*' is required as a workaround for Emotion issue (https://github.com/emotion-js/emotion/issues/2836)\n      selector = `*:where(${selector.replace(/\\s*&$/, '')}) &`;\n    }\n    return {\n      [selector]: styles\n    };\n  }\n  if (theme.palette.mode === key) {\n    return styles;\n  }\n  return {};\n}","import deepmerge from '@mui/utils/deepmerge';\nimport createBreakpoints from \"../createBreakpoints/createBreakpoints.js\";\nimport cssContainerQueries from \"../cssContainerQueries/index.js\";\nimport shape from \"./shape.js\";\nimport createSpacing from \"./createSpacing.js\";\nimport styleFunctionSx from \"../styleFunctionSx/styleFunctionSx.js\";\nimport defaultSxConfig from \"../styleFunctionSx/defaultSxConfig.js\";\nimport applyStyles from \"./applyStyles.js\";\nfunction createTheme(options = {}, ...args) {\n  const {\n    breakpoints: breakpointsInput = {},\n    palette: paletteInput = {},\n    spacing: spacingInput,\n    shape: shapeInput = {},\n    ...other\n  } = options;\n  const breakpoints = createBreakpoints(breakpointsInput);\n  const spacing = createSpacing(spacingInput);\n  let muiTheme = deepmerge({\n    breakpoints,\n    direction: 'ltr',\n    components: {},\n    // Inject component definitions.\n    palette: {\n      mode: 'light',\n      ...paletteInput\n    },\n    spacing,\n    shape: {\n      ...shape,\n      ...shapeInput\n    }\n  }, other);\n  muiTheme = cssContainerQueries(muiTheme);\n  muiTheme.applyStyles = applyStyles;\n  muiTheme = args.reduce((acc, argument) => deepmerge(acc, argument), muiTheme);\n  muiTheme.unstable_sxConfig = {\n    ...defaultSxConfig,\n    ...other?.unstable_sxConfig\n  };\n  muiTheme.unstable_sx = function sx(props) {\n    return styleFunctionSx({\n      sx: props,\n      theme: this\n    });\n  };\n  return muiTheme;\n}\nexport default createTheme;","'use client';\n\nimport * as React from 'react';\nimport { ThemeContext } from '@mui/styled-engine';\nfunction isObjectEmpty(obj) {\n  return Object.keys(obj).length === 0;\n}\nfunction useTheme(defaultTheme = null) {\n  const contextTheme = React.useContext(ThemeContext);\n  return !contextTheme || isObjectEmpty(contextTheme) ? defaultTheme : contextTheme;\n}\nexport default useTheme;","'use client';\n\nimport createTheme from \"../createTheme/index.js\";\nimport useThemeWithoutDefault from \"../useThemeWithoutDefault/index.js\";\nexport const systemDefaultTheme = createTheme();\nfunction useTheme(defaultTheme = systemDefaultTheme) {\n  return useThemeWithoutDefault(defaultTheme);\n}\nexport default useTheme;","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}","const defaultGenerator = componentName => componentName;\nconst createClassNameGenerator = () => {\n  let generate = defaultGenerator;\n  return {\n    configure(generator) {\n      generate = generator;\n    },\n    generate(componentName) {\n      return generate(componentName);\n    },\n    reset() {\n      generate = defaultGenerator;\n    }\n  };\n};\nconst ClassNameGenerator = createClassNameGenerator();\nexport default ClassNameGenerator;","import ClassNameGenerator from \"../ClassNameGenerator/index.js\";\nexport const globalStateClasses = {\n  active: 'active',\n  checked: 'checked',\n  completed: 'completed',\n  disabled: 'disabled',\n  error: 'error',\n  expanded: 'expanded',\n  focused: 'focused',\n  focusVisible: 'focusVisible',\n  open: 'open',\n  readOnly: 'readOnly',\n  required: 'required',\n  selected: 'selected'\n};\nexport default function generateUtilityClass(componentName, slot, globalStatePrefix = 'Mui') {\n  const globalStateClass = globalStateClasses[slot];\n  return globalStateClass ? `${globalStatePrefix}-${globalStateClass}` : `${ClassNameGenerator.generate(componentName)}-${slot}`;\n}\nexport function isGlobalState(slot) {\n  return globalStateClasses[slot] !== undefined;\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 } 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 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) {\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));\n  }\n  if (Array.isArray(resolvedStyle?.variants)) {\n    let rootStyle;\n    if (resolvedStyle.isProcessed) {\n      rootStyle = resolvedStyle.style;\n    } else {\n      const {\n        variants,\n        ...otherStyles\n      } = resolvedStyle;\n      rootStyle = otherStyles;\n    }\n    return processStyleVariants(props, resolvedStyle.variants, [rootStyle]);\n  }\n  if (resolvedStyle?.isProcessed) {\n    return resolvedStyle.style;\n  }\n  return resolvedStyle;\n}\nfunction processStyleVariants(props, variants, results = []) {\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(variant.style(mergedState));\n    } else {\n      results.push(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\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);\n        };\n      }\n      if (isPlainObject(style)) {\n        const serialized = preprocessStyles(style);\n        if (!serialized.variants) {\n          return serialized.style;\n        }\n        return function styleObjectProcessor(props) {\n          return processStyle(props, serialized);\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]);\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);\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 clsx from 'clsx';\n\n/**\n * Add keys, values of `defaultProps` that does not exist in `props`\n * @param defaultProps\n * @param props\n * @param mergeClassNameAndStyle If `true`, merges `className` and `style` props instead of overriding them.\n *   When `false` (default), props override defaultProps. When `true`, `className` values are concatenated\n *   and `style` objects are merged with props taking precedence.\n * @returns resolved props\n */\nexport default function resolveProps(defaultProps, props, mergeClassNameAndStyle = false) {\n  const output = {\n    ...props\n  };\n  for (const key in defaultProps) {\n    if (Object.prototype.hasOwnProperty.call(defaultProps, key)) {\n      const propName = key;\n      if (propName === 'components' || propName === 'slots') {\n        output[propName] = {\n          ...defaultProps[propName],\n          ...output[propName]\n        };\n      } else if (propName === 'componentsProps' || propName === 'slotProps') {\n        const defaultSlotProps = defaultProps[propName];\n        const slotProps = props[propName];\n        if (!slotProps) {\n          output[propName] = defaultSlotProps || {};\n        } else if (!defaultSlotProps) {\n          output[propName] = slotProps;\n        } else {\n          output[propName] = {\n            ...slotProps\n          };\n          for (const slotKey in defaultSlotProps) {\n            if (Object.prototype.hasOwnProperty.call(defaultSlotProps, slotKey)) {\n              const slotPropName = slotKey;\n              output[propName][slotPropName] = resolveProps(defaultSlotProps[slotPropName], slotProps[slotPropName], mergeClassNameAndStyle);\n            }\n          }\n        }\n      } else if (propName === 'className' && mergeClassNameAndStyle && props.className) {\n        output.className = clsx(defaultProps?.className, props?.className);\n      } else if (propName === 'style' && mergeClassNameAndStyle && props.style) {\n        output.style = {\n          ...defaultProps?.style,\n          ...props?.style\n        };\n      } else if (output[propName] === undefined) {\n        output[propName] = defaultProps[propName];\n      }\n    }\n  }\n  return output;\n}","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}","'use client';\n\nimport * as React from 'react';\n\n/**\n * A version of `React.useLayoutEffect` that does not show a warning when server-side rendering.\n * This is useful for effects that are only needed for client-side rendering but not for SSR.\n *\n * Before you use this hook, make sure to read https://gist.github.com/gaearon/e7d97cdf38a2907924ea12e4ebdf3c85\n * and confirm it doesn't apply to your use-case.\n */\nconst useEnhancedEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\nexport default useEnhancedEffect;","function clamp(val, min = Number.MIN_SAFE_INTEGER, max = Number.MAX_SAFE_INTEGER) {\n  return Math.max(min, Math.min(val, max));\n}\nexport default clamp;","import _formatErrorMessage from \"@mui/utils/formatMuiErrorMessage\";\n/* eslint-disable @typescript-eslint/naming-convention */\nimport clamp from '@mui/utils/clamp';\n\n/**\n * Returns a number whose value is limited to the given range.\n * @param {number} value The value to be clamped\n * @param {number} min The lower boundary of the output range\n * @param {number} max The upper boundary of the output range\n * @returns {number} A number in the range [min, max]\n */\nfunction clampWrapper(value, min = 0, max = 1) {\n  if (process.env.NODE_ENV !== 'production') {\n    if (value < min || value > max) {\n      console.error(`MUI: The value provided ${value} is out of range [${min}, ${max}].`);\n    }\n  }\n  return clamp(value, min, max);\n}\n\n/**\n * Converts a color from CSS hex format to CSS rgb format.\n * @param {string} color - Hex color, i.e. #nnn or #nnnnnn\n * @returns {string} A CSS rgb color string\n */\nexport function hexToRgb(color) {\n  color = color.slice(1);\n  const re = new RegExp(`.{1,${color.length >= 6 ? 2 : 1}}`, 'g');\n  let colors = color.match(re);\n  if (colors && colors[0].length === 1) {\n    colors = colors.map(n => n + n);\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    if (color.length !== color.trim().length) {\n      console.error(`MUI: The color: \"${color}\" is invalid. Make sure the color input doesn't contain leading/trailing space.`);\n    }\n  }\n  return colors ? `rgb${colors.length === 4 ? 'a' : ''}(${colors.map((n, index) => {\n    return index < 3 ? parseInt(n, 16) : Math.round(parseInt(n, 16) / 255 * 1000) / 1000;\n  }).join(', ')})` : '';\n}\nfunction intToHex(int) {\n  const hex = int.toString(16);\n  return hex.length === 1 ? `0${hex}` : hex;\n}\n\n/**\n * Returns an object with the type and values of a color.\n *\n * Note: Does not support rgb % values.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @returns {object} - A MUI color object: {type: string, values: number[]}\n */\nexport function decomposeColor(color) {\n  // Idempotent\n  if (color.type) {\n    return color;\n  }\n  if (color.charAt(0) === '#') {\n    return decomposeColor(hexToRgb(color));\n  }\n  const marker = color.indexOf('(');\n  const type = color.substring(0, marker);\n  if (!['rgb', 'rgba', 'hsl', 'hsla', 'color'].includes(type)) {\n    throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: Unsupported \\`${color}\\` color.\\n` + 'The following formats are supported: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color().' : _formatErrorMessage(9, color));\n  }\n  let values = color.substring(marker + 1, color.length - 1);\n  let colorSpace;\n  if (type === 'color') {\n    values = values.split(' ');\n    colorSpace = values.shift();\n    if (values.length === 4 && values[3].charAt(0) === '/') {\n      values[3] = values[3].slice(1);\n    }\n    if (!['srgb', 'display-p3', 'a98-rgb', 'prophoto-rgb', 'rec-2020'].includes(colorSpace)) {\n      throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: unsupported \\`${colorSpace}\\` color space.\\n` + 'The following color spaces are supported: srgb, display-p3, a98-rgb, prophoto-rgb, rec-2020.' : _formatErrorMessage(10, colorSpace));\n    }\n  } else {\n    values = values.split(',');\n  }\n  values = values.map(value => parseFloat(value));\n  return {\n    type,\n    values,\n    colorSpace\n  };\n}\n\n/**\n * Returns a channel created from the input color.\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @returns {string} - The channel for the color, that can be used in rgba or hsla colors\n */\nexport const colorChannel = color => {\n  const decomposedColor = decomposeColor(color);\n  return decomposedColor.values.slice(0, 3).map((val, idx) => decomposedColor.type.includes('hsl') && idx !== 0 ? `${val}%` : val).join(' ');\n};\nexport const private_safeColorChannel = (color, warning) => {\n  try {\n    return colorChannel(color);\n  } catch (error) {\n    if (warning && process.env.NODE_ENV !== 'production') {\n      console.warn(warning);\n    }\n    return color;\n  }\n};\n\n/**\n * Converts a color object with type and values to a string.\n * @param {object} color - Decomposed color\n * @param {string} color.type - One of: 'rgb', 'rgba', 'hsl', 'hsla', 'color'\n * @param {array} color.values - [n,n,n] or [n,n,n,n]\n * @returns {string} A CSS color string\n */\nexport function recomposeColor(color) {\n  const {\n    type,\n    colorSpace\n  } = color;\n  let {\n    values\n  } = color;\n  if (type.includes('rgb')) {\n    // Only convert the first 3 values to int (i.e. not alpha)\n    values = values.map((n, i) => i < 3 ? parseInt(n, 10) : n);\n  } else if (type.includes('hsl')) {\n    values[1] = `${values[1]}%`;\n    values[2] = `${values[2]}%`;\n  }\n  if (type.includes('color')) {\n    values = `${colorSpace} ${values.join(' ')}`;\n  } else {\n    values = `${values.join(', ')}`;\n  }\n  return `${type}(${values})`;\n}\n\n/**\n * Converts a color from CSS rgb format to CSS hex format.\n * @param {string} color - RGB color, i.e. rgb(n, n, n)\n * @returns {string} A CSS rgb color string, i.e. #nnnnnn\n */\nexport function rgbToHex(color) {\n  // Idempotent\n  if (color.startsWith('#')) {\n    return color;\n  }\n  const {\n    values\n  } = decomposeColor(color);\n  return `#${values.map((n, i) => intToHex(i === 3 ? Math.round(255 * n) : n)).join('')}`;\n}\n\n/**\n * Converts a color from hsl format to rgb format.\n * @param {string} color - HSL color values\n * @returns {string} rgb color values\n */\nexport function hslToRgb(color) {\n  color = decomposeColor(color);\n  const {\n    values\n  } = color;\n  const h = values[0];\n  const s = values[1] / 100;\n  const l = values[2] / 100;\n  const a = s * Math.min(l, 1 - l);\n  const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n  let type = 'rgb';\n  const rgb = [Math.round(f(0) * 255), Math.round(f(8) * 255), Math.round(f(4) * 255)];\n  if (color.type === 'hsla') {\n    type += 'a';\n    rgb.push(values[3]);\n  }\n  return recomposeColor({\n    type,\n    values: rgb\n  });\n}\n/**\n * The relative brightness of any point in a color space,\n * normalized to 0 for darkest black and 1 for lightest white.\n *\n * Formula: https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-tests\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @returns {number} The relative brightness of the color in the range 0 - 1\n */\nexport function getLuminance(color) {\n  color = decomposeColor(color);\n  let rgb = color.type === 'hsl' || color.type === 'hsla' ? decomposeColor(hslToRgb(color)).values : color.values;\n  rgb = rgb.map(val => {\n    if (color.type !== 'color') {\n      val /= 255; // normalized\n    }\n    return val <= 0.03928 ? val / 12.92 : ((val + 0.055) / 1.055) ** 2.4;\n  });\n\n  // Truncate at 3 digits\n  return Number((0.2126 * rgb[0] + 0.7152 * rgb[1] + 0.0722 * rgb[2]).toFixed(3));\n}\n\n/**\n * Calculates the contrast ratio between two colors.\n *\n * Formula: https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-tests\n * @param {string} foreground - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @param {string} background - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @returns {number} A contrast ratio value in the range 0 - 21.\n */\nexport function getContrastRatio(foreground, background) {\n  const lumA = getLuminance(foreground);\n  const lumB = getLuminance(background);\n  return (Math.max(lumA, lumB) + 0.05) / (Math.min(lumA, lumB) + 0.05);\n}\n\n/**\n * Sets the absolute transparency of a color.\n * Any existing alpha values are overwritten.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param {number} value - value to set the alpha channel to in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\nexport function alpha(color, value) {\n  color = decomposeColor(color);\n  value = clampWrapper(value);\n  if (color.type === 'rgb' || color.type === 'hsl') {\n    color.type += 'a';\n  }\n  if (color.type === 'color') {\n    color.values[3] = `/${value}`;\n  } else {\n    color.values[3] = value;\n  }\n  return recomposeColor(color);\n}\nexport function private_safeAlpha(color, value, warning) {\n  try {\n    return alpha(color, value);\n  } catch (error) {\n    if (warning && process.env.NODE_ENV !== 'production') {\n      console.warn(warning);\n    }\n    return color;\n  }\n}\n\n/**\n * Darkens a color.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param {number} coefficient - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\nexport function darken(color, coefficient) {\n  color = decomposeColor(color);\n  coefficient = clampWrapper(coefficient);\n  if (color.type.includes('hsl')) {\n    color.values[2] *= 1 - coefficient;\n  } else if (color.type.includes('rgb') || color.type.includes('color')) {\n    for (let i = 0; i < 3; i += 1) {\n      color.values[i] *= 1 - coefficient;\n    }\n  }\n  return recomposeColor(color);\n}\nexport function private_safeDarken(color, coefficient, warning) {\n  try {\n    return darken(color, coefficient);\n  } catch (error) {\n    if (warning && process.env.NODE_ENV !== 'production') {\n      console.warn(warning);\n    }\n    return color;\n  }\n}\n\n/**\n * Lightens a color.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param {number} coefficient - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\nexport function lighten(color, coefficient) {\n  color = decomposeColor(color);\n  coefficient = clampWrapper(coefficient);\n  if (color.type.includes('hsl')) {\n    color.values[2] += (100 - color.values[2]) * coefficient;\n  } else if (color.type.includes('rgb')) {\n    for (let i = 0; i < 3; i += 1) {\n      color.values[i] += (255 - color.values[i]) * coefficient;\n    }\n  } else if (color.type.includes('color')) {\n    for (let i = 0; i < 3; i += 1) {\n      color.values[i] += (1 - color.values[i]) * coefficient;\n    }\n  }\n  return recomposeColor(color);\n}\nexport function private_safeLighten(color, coefficient, warning) {\n  try {\n    return lighten(color, coefficient);\n  } catch (error) {\n    if (warning && process.env.NODE_ENV !== 'production') {\n      console.warn(warning);\n    }\n    return color;\n  }\n}\n\n/**\n * Darken or lighten a color, depending on its luminance.\n * Light colors are darkened, dark colors are lightened.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param {number} coefficient=0.15 - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\nexport function emphasize(color, coefficient = 0.15) {\n  return getLuminance(color) > 0.5 ? darken(color, coefficient) : lighten(color, coefficient);\n}\nexport function private_safeEmphasize(color, coefficient, warning) {\n  try {\n    return emphasize(color, coefficient);\n  } catch (error) {\n    if (warning && process.env.NODE_ENV !== 'production') {\n      console.warn(warning);\n    }\n    return color;\n  }\n}\n\n/**\n * Blend a transparent overlay color with a background color, resulting in a single\n * RGB color.\n * @param {string} background - CSS color\n * @param {string} overlay - CSS color\n * @param {number} opacity - Opacity multiplier in the range 0 - 1\n * @param {number} [gamma=1.0] - Gamma correction factor. For gamma-correct blending, 2.2 is usual.\n */\nexport function blend(background, overlay, opacity, gamma = 1.0) {\n  const blendChannel = (b, o) => Math.round((b ** (1 / gamma) * (1 - opacity) + o ** (1 / gamma) * opacity) ** gamma);\n  const backgroundColor = decomposeColor(background);\n  const overlayColor = decomposeColor(overlay);\n  const rgb = [blendChannel(backgroundColor.values[0], overlayColor.values[0]), blendChannel(backgroundColor.values[1], overlayColor.values[1]), blendChannel(backgroundColor.values[2], overlayColor.values[2])];\n  return recomposeColor({\n    type: 'rgb',\n    values: rgb\n  });\n}","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst RtlContext = /*#__PURE__*/React.createContext();\nfunction RtlProvider({\n  value,\n  ...props\n}) {\n  return /*#__PURE__*/_jsx(RtlContext.Provider, {\n    value: value ?? true,\n    ...props\n  });\n}\nprocess.env.NODE_ENV !== \"production\" ? RtlProvider.propTypes = {\n  children: PropTypes.node,\n  value: PropTypes.bool\n} : void 0;\nexport const useRtl = () => {\n  const value = React.useContext(RtlContext);\n  return value ?? false;\n};\nexport default RtlProvider;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport resolveProps from '@mui/utils/resolveProps';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst PropsContext = /*#__PURE__*/React.createContext(undefined);\nfunction DefaultPropsProvider({\n  value,\n  children\n}) {\n  return /*#__PURE__*/_jsx(PropsContext.Provider, {\n    value: value,\n    children: children\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\n} : void 0;\nfunction getThemeProps(params) {\n  const {\n    theme,\n    name,\n    props\n  } = params;\n  if (!theme || !theme.components || !theme.components[name]) {\n    return props;\n  }\n  const config = theme.components[name];\n  if (config.defaultProps) {\n    // compatible with v5 signature\n    return resolveProps(config.defaultProps, props);\n  }\n  if (!config.styleOverrides && !config.variants) {\n    // v6 signature, no property 'defaultProps'\n    return resolveProps(config, props);\n  }\n  return props;\n}\nexport function useDefaultProps({\n  props,\n  name\n}) {\n  const ctx = React.useContext(PropsContext);\n  return getThemeProps({\n    props,\n    name,\n    theme: {\n      components: ctx\n    }\n  });\n}\nexport default DefaultPropsProvider;","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}","/**\n * The benefit of this function is to help developers get CSS var from theme without specifying the whole variable\n * and they does not need to remember the prefix (defined once).\n */\nexport default function createGetCssVar(prefix = '') {\n  function appendVar(...vars) {\n    if (!vars.length) {\n      return '';\n    }\n    const value = vars[0];\n    if (typeof value === 'string' && !value.match(/(#|\\(|\\)|(-?(\\d*\\.)?\\d+)(px|em|%|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc))|^(-?(\\d*\\.)?\\d+)$|(\\d+ \\d+ \\d+)/)) {\n      return `, var(--${prefix ? `${prefix}-` : ''}${value}${appendVar(...vars.slice(1))})`;\n    }\n    return `, ${value}`;\n  }\n\n  // AdditionalVars makes `getCssVar` less strict, so it can be use like this `getCssVar('non-mui-variable')` without type error.\n  const getCssVar = (field, ...fallbacks) => {\n    return `var(--${prefix ? `${prefix}-` : ''}${field}${appendVar(...fallbacks)})`;\n  };\n  return getCssVar;\n}","/**\n * This function create an object from keys, value and then assign to target\n *\n * @param {Object} obj : the target object to be assigned\n * @param {string[]} keys\n * @param {string | number} value\n *\n * @example\n * const source = {}\n * assignNestedKeys(source, ['palette', 'primary'], 'var(--palette-primary)')\n * console.log(source) // { palette: { primary: 'var(--palette-primary)' } }\n *\n * @example\n * const source = { palette: { primary: 'var(--palette-primary)' } }\n * assignNestedKeys(source, ['palette', 'secondary'], 'var(--palette-secondary)')\n * console.log(source) // { palette: { primary: 'var(--palette-primary)', secondary: 'var(--palette-secondary)' } }\n */\nexport const assignNestedKeys = (obj, keys, value, arrayKeys = []) => {\n  let temp = obj;\n  keys.forEach((k, index) => {\n    if (index === keys.length - 1) {\n      if (Array.isArray(temp)) {\n        temp[Number(k)] = value;\n      } else if (temp && typeof temp === 'object') {\n        temp[k] = value;\n      }\n    } else if (temp && typeof temp === 'object') {\n      if (!temp[k]) {\n        temp[k] = arrayKeys.includes(k) ? [] : {};\n      }\n      temp = temp[k];\n    }\n  });\n};\n\n/**\n *\n * @param {Object} obj : source object\n * @param {Function} callback : a function that will be called when\n *                   - the deepest key in source object is reached\n *                   - the value of the deepest key is NOT `undefined` | `null`\n *\n * @example\n * walkObjectDeep({ palette: { primary: { main: '#000000' } } }, console.log)\n * // ['palette', 'primary', 'main'] '#000000'\n */\nexport const walkObjectDeep = (obj, callback, shouldSkipPaths) => {\n  function recurse(object, parentKeys = [], arrayKeys = []) {\n    Object.entries(object).forEach(([key, value]) => {\n      if (!shouldSkipPaths || shouldSkipPaths && !shouldSkipPaths([...parentKeys, key])) {\n        if (value !== undefined && value !== null) {\n          if (typeof value === 'object' && Object.keys(value).length > 0) {\n            recurse(value, [...parentKeys, key], Array.isArray(value) ? [...arrayKeys, key] : arrayKeys);\n          } else {\n            callback([...parentKeys, key], value, arrayKeys);\n          }\n        }\n      }\n    });\n  }\n  recurse(obj);\n};\nconst getCssValue = (keys, value) => {\n  if (typeof value === 'number') {\n    if (['lineHeight', 'fontWeight', 'opacity', 'zIndex'].some(prop => keys.includes(prop))) {\n      // CSS property that are unitless\n      return value;\n    }\n    const lastKey = keys[keys.length - 1];\n    if (lastKey.toLowerCase().includes('opacity')) {\n      // opacity values are unitless\n      return value;\n    }\n    return `${value}px`;\n  }\n  return value;\n};\n\n/**\n * a function that parse theme and return { css, vars }\n *\n * @param {Object} theme\n * @param {{\n *  prefix?: string,\n *  shouldSkipGeneratingVar?: (objectPathKeys: Array<string>, value: string | number) => boolean\n * }} options.\n *  `prefix`: The prefix of the generated CSS variables. This function does not change the value.\n *\n * @returns {{ css: Object, vars: Object }} `css` is the stylesheet, `vars` is an object to get css variable (same structure as theme).\n *\n * @example\n * const { css, vars } = parser({\n *   fontSize: 12,\n *   lineHeight: 1.2,\n *   palette: { primary: { 500: 'var(--color)' } }\n * }, { prefix: 'foo' })\n *\n * console.log(css) // { '--foo-fontSize': '12px', '--foo-lineHeight': 1.2, '--foo-palette-primary-500': 'var(--color)' }\n * console.log(vars) // { fontSize: 'var(--foo-fontSize)', lineHeight: 'var(--foo-lineHeight)', palette: { primary: { 500: 'var(--foo-palette-primary-500)' } } }\n */\nexport default function cssVarsParser(theme, options) {\n  const {\n    prefix,\n    shouldSkipGeneratingVar\n  } = options || {};\n  const css = {};\n  const vars = {};\n  const varsWithDefaults = {};\n  walkObjectDeep(theme, (keys, value, arrayKeys) => {\n    if (typeof value === 'string' || typeof value === 'number') {\n      if (!shouldSkipGeneratingVar || !shouldSkipGeneratingVar(keys, value)) {\n        // only create css & var if `shouldSkipGeneratingVar` return false\n        const cssVar = `--${prefix ? `${prefix}-` : ''}${keys.join('-')}`;\n        const resolvedValue = getCssValue(keys, value);\n        Object.assign(css, {\n          [cssVar]: resolvedValue\n        });\n        assignNestedKeys(vars, keys, `var(${cssVar})`, arrayKeys);\n        assignNestedKeys(varsWithDefaults, keys, `var(${cssVar}, ${resolvedValue})`, arrayKeys);\n      }\n    }\n  }, keys => keys[0] === 'vars' // skip 'vars/*' paths\n  );\n  return {\n    css,\n    vars,\n    varsWithDefaults\n  };\n}","import deepmerge from '@mui/utils/deepmerge';\nimport cssVarsParser from \"./cssVarsParser.js\";\nfunction prepareCssVars(theme, parserConfig = {}) {\n  const {\n    getSelector = defaultGetSelector,\n    disableCssColorScheme,\n    colorSchemeSelector: selector\n  } = parserConfig;\n  // @ts-ignore - ignore components do not exist\n  const {\n    colorSchemes = {},\n    components,\n    defaultColorScheme = 'light',\n    ...otherTheme\n  } = theme;\n  const {\n    vars: rootVars,\n    css: rootCss,\n    varsWithDefaults: rootVarsWithDefaults\n  } = cssVarsParser(otherTheme, parserConfig);\n  let themeVars = rootVarsWithDefaults;\n  const colorSchemesMap = {};\n  const {\n    [defaultColorScheme]: defaultScheme,\n    ...otherColorSchemes\n  } = colorSchemes;\n  Object.entries(otherColorSchemes || {}).forEach(([key, scheme]) => {\n    const {\n      vars,\n      css,\n      varsWithDefaults\n    } = cssVarsParser(scheme, parserConfig);\n    themeVars = deepmerge(themeVars, varsWithDefaults);\n    colorSchemesMap[key] = {\n      css,\n      vars\n    };\n  });\n  if (defaultScheme) {\n    // default color scheme vars should be merged last to set as default\n    const {\n      css,\n      vars,\n      varsWithDefaults\n    } = cssVarsParser(defaultScheme, parserConfig);\n    themeVars = deepmerge(themeVars, varsWithDefaults);\n    colorSchemesMap[defaultColorScheme] = {\n      css,\n      vars\n    };\n  }\n  function defaultGetSelector(colorScheme, cssObject) {\n    let rule = selector;\n    if (selector === 'class') {\n      rule = '.%s';\n    }\n    if (selector === 'data') {\n      rule = '[data-%s]';\n    }\n    if (selector?.startsWith('data-') && !selector.includes('%s')) {\n      // 'data-joy-color-scheme' -> '[data-joy-color-scheme=\"%s\"]'\n      rule = `[${selector}=\"%s\"]`;\n    }\n    if (colorScheme) {\n      if (rule === 'media') {\n        if (theme.defaultColorScheme === colorScheme) {\n          return ':root';\n        }\n        const mode = colorSchemes[colorScheme]?.palette?.mode || colorScheme;\n        return {\n          [`@media (prefers-color-scheme: ${mode})`]: {\n            ':root': cssObject\n          }\n        };\n      }\n      if (rule) {\n        if (theme.defaultColorScheme === colorScheme) {\n          return `:root, ${rule.replace('%s', String(colorScheme))}`;\n        }\n        return rule.replace('%s', String(colorScheme));\n      }\n    }\n    return ':root';\n  }\n  const generateThemeVars = () => {\n    let vars = {\n      ...rootVars\n    };\n    Object.entries(colorSchemesMap).forEach(([, {\n      vars: schemeVars\n    }]) => {\n      vars = deepmerge(vars, schemeVars);\n    });\n    return vars;\n  };\n  const generateStyleSheets = () => {\n    const stylesheets = [];\n    const colorScheme = theme.defaultColorScheme || 'light';\n    function insertStyleSheet(key, css) {\n      if (Object.keys(css).length) {\n        stylesheets.push(typeof key === 'string' ? {\n          [key]: {\n            ...css\n          }\n        } : key);\n      }\n    }\n    insertStyleSheet(getSelector(undefined, {\n      ...rootCss\n    }), rootCss);\n    const {\n      [colorScheme]: defaultSchemeVal,\n      ...other\n    } = colorSchemesMap;\n    if (defaultSchemeVal) {\n      // default color scheme has to come before other color schemes\n      const {\n        css\n      } = defaultSchemeVal;\n      const cssColorSheme = colorSchemes[colorScheme]?.palette?.mode;\n      const finalCss = !disableCssColorScheme && cssColorSheme ? {\n        colorScheme: cssColorSheme,\n        ...css\n      } : {\n        ...css\n      };\n      insertStyleSheet(getSelector(colorScheme, {\n        ...finalCss\n      }), finalCss);\n    }\n    Object.entries(other).forEach(([key, {\n      css\n    }]) => {\n      const cssColorSheme = colorSchemes[key]?.palette?.mode;\n      const finalCss = !disableCssColorScheme && cssColorSheme ? {\n        colorScheme: cssColorSheme,\n        ...css\n      } : {\n        ...css\n      };\n      insertStyleSheet(getSelector(key, {\n        ...finalCss\n      }), finalCss);\n    });\n    return stylesheets;\n  };\n  return {\n    vars: themeVars,\n    generateThemeVars,\n    generateStyleSheets\n  };\n}\nexport default prepareCssVars;","/* eslint-disable import/prefer-default-export */\nexport function createGetColorSchemeSelector(selector) {\n  return function getColorSchemeSelector(colorScheme) {\n    if (selector === 'media') {\n      if (process.env.NODE_ENV !== 'production') {\n        if (colorScheme !== 'light' && colorScheme !== 'dark') {\n          console.error(`MUI: @media (prefers-color-scheme) supports only 'light' or 'dark', but receive '${colorScheme}'.`);\n        }\n      }\n      return `@media (prefers-color-scheme: ${colorScheme})`;\n    }\n    if (selector) {\n      if (selector.startsWith('data-') && !selector.includes('%s')) {\n        return `[${selector}=\"${colorScheme}\"] &`;\n      }\n      if (selector === 'class') {\n        return `.${colorScheme} &`;\n      }\n      if (selector === 'data') {\n        return `[data-${colorScheme}] &`;\n      }\n      return `${selector.replace('%s', colorScheme)} &`;\n    }\n    return '&';\n  };\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}","const common = {\n  black: '#000',\n  white: '#fff'\n};\nexport default common;","const grey = {\n  50: '#fafafa',\n  100: '#f5f5f5',\n  200: '#eeeeee',\n  300: '#e0e0e0',\n  400: '#bdbdbd',\n  500: '#9e9e9e',\n  600: '#757575',\n  700: '#616161',\n  800: '#424242',\n  900: '#212121',\n  A100: '#f5f5f5',\n  A200: '#eeeeee',\n  A400: '#bdbdbd',\n  A700: '#616161'\n};\nexport default grey;","const purple = {\n  50: '#f3e5f5',\n  100: '#e1bee7',\n  200: '#ce93d8',\n  300: '#ba68c8',\n  400: '#ab47bc',\n  500: '#9c27b0',\n  600: '#8e24aa',\n  700: '#7b1fa2',\n  800: '#6a1b9a',\n  900: '#4a148c',\n  A100: '#ea80fc',\n  A200: '#e040fb',\n  A400: '#d500f9',\n  A700: '#aa00ff'\n};\nexport default purple;","const red = {\n  50: '#ffebee',\n  100: '#ffcdd2',\n  200: '#ef9a9a',\n  300: '#e57373',\n  400: '#ef5350',\n  500: '#f44336',\n  600: '#e53935',\n  700: '#d32f2f',\n  800: '#c62828',\n  900: '#b71c1c',\n  A100: '#ff8a80',\n  A200: '#ff5252',\n  A400: '#ff1744',\n  A700: '#d50000'\n};\nexport default red;","const orange = {\n  50: '#fff3e0',\n  100: '#ffe0b2',\n  200: '#ffcc80',\n  300: '#ffb74d',\n  400: '#ffa726',\n  500: '#ff9800',\n  600: '#fb8c00',\n  700: '#f57c00',\n  800: '#ef6c00',\n  900: '#e65100',\n  A100: '#ffd180',\n  A200: '#ffab40',\n  A400: '#ff9100',\n  A700: '#ff6d00'\n};\nexport default orange;","const blue = {\n  50: '#e3f2fd',\n  100: '#bbdefb',\n  200: '#90caf9',\n  300: '#64b5f6',\n  400: '#42a5f5',\n  500: '#2196f3',\n  600: '#1e88e5',\n  700: '#1976d2',\n  800: '#1565c0',\n  900: '#0d47a1',\n  A100: '#82b1ff',\n  A200: '#448aff',\n  A400: '#2979ff',\n  A700: '#2962ff'\n};\nexport default blue;","const lightBlue = {\n  50: '#e1f5fe',\n  100: '#b3e5fc',\n  200: '#81d4fa',\n  300: '#4fc3f7',\n  400: '#29b6f6',\n  500: '#03a9f4',\n  600: '#039be5',\n  700: '#0288d1',\n  800: '#0277bd',\n  900: '#01579b',\n  A100: '#80d8ff',\n  A200: '#40c4ff',\n  A400: '#00b0ff',\n  A700: '#0091ea'\n};\nexport default lightBlue;","const green = {\n  50: '#e8f5e9',\n  100: '#c8e6c9',\n  200: '#a5d6a7',\n  300: '#81c784',\n  400: '#66bb6a',\n  500: '#4caf50',\n  600: '#43a047',\n  700: '#388e3c',\n  800: '#2e7d32',\n  900: '#1b5e20',\n  A100: '#b9f6ca',\n  A200: '#69f0ae',\n  A400: '#00e676',\n  A700: '#00c853'\n};\nexport default green;","import _formatErrorMessage from \"@mui/utils/formatMuiErrorMessage\";\nimport deepmerge from '@mui/utils/deepmerge';\nimport { darken, getContrastRatio, lighten } from '@mui/system/colorManipulator';\nimport common from \"../colors/common.js\";\nimport grey from \"../colors/grey.js\";\nimport purple from \"../colors/purple.js\";\nimport red from \"../colors/red.js\";\nimport orange from \"../colors/orange.js\";\nimport blue from \"../colors/blue.js\";\nimport lightBlue from \"../colors/lightBlue.js\";\nimport green from \"../colors/green.js\";\nfunction getLight() {\n  return {\n    // The colors used to style the text.\n    text: {\n      // The most important text.\n      primary: 'rgba(0, 0, 0, 0.87)',\n      // Secondary text.\n      secondary: 'rgba(0, 0, 0, 0.6)',\n      // Disabled text have even lower visual prominence.\n      disabled: 'rgba(0, 0, 0, 0.38)'\n    },\n    // The color used to divide different elements.\n    divider: 'rgba(0, 0, 0, 0.12)',\n    // The background colors used to style the surfaces.\n    // Consistency between these values is important.\n    background: {\n      paper: common.white,\n      default: common.white\n    },\n    // The colors used to style the action elements.\n    action: {\n      // The color of an active action like an icon button.\n      active: 'rgba(0, 0, 0, 0.54)',\n      // The color of an hovered action.\n      hover: 'rgba(0, 0, 0, 0.04)',\n      hoverOpacity: 0.04,\n      // The color of a selected action.\n      selected: 'rgba(0, 0, 0, 0.08)',\n      selectedOpacity: 0.08,\n      // The color of a disabled action.\n      disabled: 'rgba(0, 0, 0, 0.26)',\n      // The background color of a disabled action.\n      disabledBackground: 'rgba(0, 0, 0, 0.12)',\n      disabledOpacity: 0.38,\n      focus: 'rgba(0, 0, 0, 0.12)',\n      focusOpacity: 0.12,\n      activatedOpacity: 0.12\n    }\n  };\n}\nexport const light = getLight();\nfunction getDark() {\n  return {\n    text: {\n      primary: common.white,\n      secondary: 'rgba(255, 255, 255, 0.7)',\n      disabled: 'rgba(255, 255, 255, 0.5)',\n      icon: 'rgba(255, 255, 255, 0.5)'\n    },\n    divider: 'rgba(255, 255, 255, 0.12)',\n    background: {\n      paper: '#121212',\n      default: '#121212'\n    },\n    action: {\n      active: common.white,\n      hover: 'rgba(255, 255, 255, 0.08)',\n      hoverOpacity: 0.08,\n      selected: 'rgba(255, 255, 255, 0.16)',\n      selectedOpacity: 0.16,\n      disabled: 'rgba(255, 255, 255, 0.3)',\n      disabledBackground: 'rgba(255, 255, 255, 0.12)',\n      disabledOpacity: 0.38,\n      focus: 'rgba(255, 255, 255, 0.12)',\n      focusOpacity: 0.12,\n      activatedOpacity: 0.24\n    }\n  };\n}\nexport const dark = getDark();\nfunction addLightOrDark(intent, direction, shade, tonalOffset) {\n  const tonalOffsetLight = tonalOffset.light || tonalOffset;\n  const tonalOffsetDark = tonalOffset.dark || tonalOffset * 1.5;\n  if (!intent[direction]) {\n    if (intent.hasOwnProperty(shade)) {\n      intent[direction] = intent[shade];\n    } else if (direction === 'light') {\n      intent.light = lighten(intent.main, tonalOffsetLight);\n    } else if (direction === 'dark') {\n      intent.dark = darken(intent.main, tonalOffsetDark);\n    }\n  }\n}\nfunction getDefaultPrimary(mode = 'light') {\n  if (mode === 'dark') {\n    return {\n      main: blue[200],\n      light: blue[50],\n      dark: blue[400]\n    };\n  }\n  return {\n    main: blue[700],\n    light: blue[400],\n    dark: blue[800]\n  };\n}\nfunction getDefaultSecondary(mode = 'light') {\n  if (mode === 'dark') {\n    return {\n      main: purple[200],\n      light: purple[50],\n      dark: purple[400]\n    };\n  }\n  return {\n    main: purple[500],\n    light: purple[300],\n    dark: purple[700]\n  };\n}\nfunction getDefaultError(mode = 'light') {\n  if (mode === 'dark') {\n    return {\n      main: red[500],\n      light: red[300],\n      dark: red[700]\n    };\n  }\n  return {\n    main: red[700],\n    light: red[400],\n    dark: red[800]\n  };\n}\nfunction getDefaultInfo(mode = 'light') {\n  if (mode === 'dark') {\n    return {\n      main: lightBlue[400],\n      light: lightBlue[300],\n      dark: lightBlue[700]\n    };\n  }\n  return {\n    main: lightBlue[700],\n    light: lightBlue[500],\n    dark: lightBlue[900]\n  };\n}\nfunction getDefaultSuccess(mode = 'light') {\n  if (mode === 'dark') {\n    return {\n      main: green[400],\n      light: green[300],\n      dark: green[700]\n    };\n  }\n  return {\n    main: green[800],\n    light: green[500],\n    dark: green[900]\n  };\n}\nfunction getDefaultWarning(mode = 'light') {\n  if (mode === 'dark') {\n    return {\n      main: orange[400],\n      light: orange[300],\n      dark: orange[700]\n    };\n  }\n  return {\n    main: '#ed6c02',\n    // closest to orange[800] that pass 3:1.\n    light: orange[500],\n    dark: orange[900]\n  };\n}\nexport default function createPalette(palette) {\n  const {\n    mode = 'light',\n    contrastThreshold = 3,\n    tonalOffset = 0.2,\n    ...other\n  } = palette;\n  const primary = palette.primary || getDefaultPrimary(mode);\n  const secondary = palette.secondary || getDefaultSecondary(mode);\n  const error = palette.error || getDefaultError(mode);\n  const info = palette.info || getDefaultInfo(mode);\n  const success = palette.success || getDefaultSuccess(mode);\n  const warning = palette.warning || getDefaultWarning(mode);\n\n  // Use the same logic as\n  // Bootstrap: https://github.com/twbs/bootstrap/blob/1d6e3710dd447de1a200f29e8fa521f8a0908f70/scss/_functions.scss#L59\n  // and material-components-web https://github.com/material-components/material-components-web/blob/ac46b8863c4dab9fc22c4c662dc6bd1b65dd652f/packages/mdc-theme/_functions.scss#L54\n  function getContrastText(background) {\n    const contrastText = getContrastRatio(background, dark.text.primary) >= contrastThreshold ? dark.text.primary : light.text.primary;\n    if (process.env.NODE_ENV !== 'production') {\n      const contrast = getContrastRatio(background, contrastText);\n      if (contrast < 3) {\n        console.error([`MUI: The contrast ratio of ${contrast}:1 for ${contrastText} on ${background}`, 'falls below the WCAG recommended absolute minimum contrast ratio of 3:1.', 'https://www.w3.org/TR/2008/REC-WCAG20-20081211/#visual-audio-contrast-contrast'].join('\\n'));\n      }\n    }\n    return contrastText;\n  }\n  const augmentColor = ({\n    color,\n    name,\n    mainShade = 500,\n    lightShade = 300,\n    darkShade = 700\n  }) => {\n    color = {\n      ...color\n    };\n    if (!color.main && color[mainShade]) {\n      color.main = color[mainShade];\n    }\n    if (!color.hasOwnProperty('main')) {\n      throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: The color${name ? ` (${name})` : ''} provided to augmentColor(color) is invalid.\\n` + `The color object needs to have a \\`main\\` property or a \\`${mainShade}\\` property.` : _formatErrorMessage(11, name ? ` (${name})` : '', mainShade));\n    }\n    if (typeof color.main !== 'string') {\n      throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: The color${name ? ` (${name})` : ''} provided to augmentColor(color) is invalid.\\n` + `\\`color.main\\` should be a string, but \\`${JSON.stringify(color.main)}\\` was provided instead.\\n` + '\\n' + 'Did you intend to use one of the following approaches?\\n' + '\\n' + 'import { green } from \"@mui/material/colors\";\\n' + '\\n' + 'const theme1 = createTheme({ palette: {\\n' + '  primary: green,\\n' + '} });\\n' + '\\n' + 'const theme2 = createTheme({ palette: {\\n' + '  primary: { main: green[500] },\\n' + '} });' : _formatErrorMessage(12, name ? ` (${name})` : '', JSON.stringify(color.main)));\n    }\n    addLightOrDark(color, 'light', lightShade, tonalOffset);\n    addLightOrDark(color, 'dark', darkShade, tonalOffset);\n    if (!color.contrastText) {\n      color.contrastText = getContrastText(color.main);\n    }\n    return color;\n  };\n  let modeHydrated;\n  if (mode === 'light') {\n    modeHydrated = getLight();\n  } else if (mode === 'dark') {\n    modeHydrated = getDark();\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    if (!modeHydrated) {\n      console.error(`MUI: The palette mode \\`${mode}\\` is not supported.`);\n    }\n  }\n  const paletteOutput = deepmerge({\n    // A collection of common colors.\n    common: {\n      ...common\n    },\n    // prevent mutable object.\n    // The palette mode, can be light or dark.\n    mode,\n    // The colors used to represent primary interface elements for a user.\n    primary: augmentColor({\n      color: primary,\n      name: 'primary'\n    }),\n    // The colors used to represent secondary interface elements for a user.\n    secondary: augmentColor({\n      color: secondary,\n      name: 'secondary',\n      mainShade: 'A400',\n      lightShade: 'A200',\n      darkShade: 'A700'\n    }),\n    // The colors used to represent interface elements that the user should be made aware of.\n    error: augmentColor({\n      color: error,\n      name: 'error'\n    }),\n    // The colors used to represent potentially dangerous actions or important messages.\n    warning: augmentColor({\n      color: warning,\n      name: 'warning'\n    }),\n    // The colors used to present information to the user that is neutral and not necessarily important.\n    info: augmentColor({\n      color: info,\n      name: 'info'\n    }),\n    // The colors used to indicate the successful completion of an action that user triggered.\n    success: augmentColor({\n      color: success,\n      name: 'success'\n    }),\n    // The grey colors.\n    grey,\n    // Used by `getContrastText()` to maximize the contrast between\n    // the background and the text.\n    contrastThreshold,\n    // Takes a background color and returns the text color that maximizes the contrast.\n    getContrastText,\n    // Generate a rich color object.\n    augmentColor,\n    // Used by the functions below to shift a color's luminance by approximately\n    // two indexes within its tonal palette.\n    // E.g., shift from Red 500 to Red 300 or Red 700.\n    tonalOffset,\n    // The light and dark mode object.\n    ...modeHydrated\n  }, other);\n  return paletteOutput;\n}","export default function prepareTypographyVars(typography) {\n  const vars = {};\n  const entries = Object.entries(typography);\n  entries.forEach(entry => {\n    const [key, value] = entry;\n    if (typeof value === 'object') {\n      vars[key] = `${value.fontStyle ? `${value.fontStyle} ` : ''}${value.fontVariant ? `${value.fontVariant} ` : ''}${value.fontWeight ? `${value.fontWeight} ` : ''}${value.fontStretch ? `${value.fontStretch} ` : ''}${value.fontSize || ''}${value.lineHeight ? `/${value.lineHeight} ` : ''}${value.fontFamily || ''}`;\n    }\n  });\n  return vars;\n}","export default function createMixins(breakpoints, mixins) {\n  return {\n    toolbar: {\n      minHeight: 56,\n      [breakpoints.up('xs')]: {\n        '@media (orientation: landscape)': {\n          minHeight: 48\n        }\n      },\n      [breakpoints.up('sm')]: {\n        minHeight: 64\n      }\n    },\n    ...mixins\n  };\n}","import deepmerge from '@mui/utils/deepmerge';\nfunction round(value) {\n  return Math.round(value * 1e5) / 1e5;\n}\nconst caseAllCaps = {\n  textTransform: 'uppercase'\n};\nconst defaultFontFamily = '\"Roboto\", \"Helvetica\", \"Arial\", sans-serif';\n\n/**\n * @see @link{https://m2.material.io/design/typography/the-type-system.html}\n * @see @link{https://m2.material.io/design/typography/understanding-typography.html}\n */\nexport default function createTypography(palette, typography) {\n  const {\n    fontFamily = defaultFontFamily,\n    // The default font size of the Material Specification.\n    fontSize = 14,\n    // px\n    fontWeightLight = 300,\n    fontWeightRegular = 400,\n    fontWeightMedium = 500,\n    fontWeightBold = 700,\n    // Tell MUI what's the font-size on the html element.\n    // 16px is the default font-size used by browsers.\n    htmlFontSize = 16,\n    // Apply the CSS properties to all the variants.\n    allVariants,\n    pxToRem: pxToRem2,\n    ...other\n  } = typeof typography === 'function' ? typography(palette) : typography;\n  if (process.env.NODE_ENV !== 'production') {\n    if (typeof fontSize !== 'number') {\n      console.error('MUI: `fontSize` is required to be a number.');\n    }\n    if (typeof htmlFontSize !== 'number') {\n      console.error('MUI: `htmlFontSize` is required to be a number.');\n    }\n  }\n  const coef = fontSize / 14;\n  const pxToRem = pxToRem2 || (size => `${size / htmlFontSize * coef}rem`);\n  const buildVariant = (fontWeight, size, lineHeight, letterSpacing, casing) => ({\n    fontFamily,\n    fontWeight,\n    fontSize: pxToRem(size),\n    // Unitless following https://meyerweb.com/eric/thoughts/2006/02/08/unitless-line-heights/\n    lineHeight,\n    // The letter spacing was designed for the Roboto font-family. Using the same letter-spacing\n    // across font-families can cause issues with the kerning.\n    ...(fontFamily === defaultFontFamily ? {\n      letterSpacing: `${round(letterSpacing / size)}em`\n    } : {}),\n    ...casing,\n    ...allVariants\n  });\n  const variants = {\n    h1: buildVariant(fontWeightLight, 96, 1.167, -1.5),\n    h2: buildVariant(fontWeightLight, 60, 1.2, -0.5),\n    h3: buildVariant(fontWeightRegular, 48, 1.167, 0),\n    h4: buildVariant(fontWeightRegular, 34, 1.235, 0.25),\n    h5: buildVariant(fontWeightRegular, 24, 1.334, 0),\n    h6: buildVariant(fontWeightMedium, 20, 1.6, 0.15),\n    subtitle1: buildVariant(fontWeightRegular, 16, 1.75, 0.15),\n    subtitle2: buildVariant(fontWeightMedium, 14, 1.57, 0.1),\n    body1: buildVariant(fontWeightRegular, 16, 1.5, 0.15),\n    body2: buildVariant(fontWeightRegular, 14, 1.43, 0.15),\n    button: buildVariant(fontWeightMedium, 14, 1.75, 0.4, caseAllCaps),\n    caption: buildVariant(fontWeightRegular, 12, 1.66, 0.4),\n    overline: buildVariant(fontWeightRegular, 12, 2.66, 1, caseAllCaps),\n    // TODO v6: Remove handling of 'inherit' variant from the theme as it is already handled in Material UI's Typography component. Also, remember to remove the associated types.\n    inherit: {\n      fontFamily: 'inherit',\n      fontWeight: 'inherit',\n      fontSize: 'inherit',\n      lineHeight: 'inherit',\n      letterSpacing: 'inherit'\n    }\n  };\n  return deepmerge({\n    htmlFontSize,\n    pxToRem,\n    fontFamily,\n    fontSize,\n    fontWeightLight,\n    fontWeightRegular,\n    fontWeightMedium,\n    fontWeightBold,\n    ...variants\n  }, other, {\n    clone: false // No need to clone deep\n  });\n}","const shadowKeyUmbraOpacity = 0.2;\nconst shadowKeyPenumbraOpacity = 0.14;\nconst shadowAmbientShadowOpacity = 0.12;\nfunction createShadow(...px) {\n  return [`${px[0]}px ${px[1]}px ${px[2]}px ${px[3]}px rgba(0,0,0,${shadowKeyUmbraOpacity})`, `${px[4]}px ${px[5]}px ${px[6]}px ${px[7]}px rgba(0,0,0,${shadowKeyPenumbraOpacity})`, `${px[8]}px ${px[9]}px ${px[10]}px ${px[11]}px rgba(0,0,0,${shadowAmbientShadowOpacity})`].join(',');\n}\n\n// Values from https://github.com/material-components/material-components-web/blob/be8747f94574669cb5e7add1a7c54fa41a89cec7/packages/mdc-elevation/_variables.scss\nconst shadows = ['none', createShadow(0, 2, 1, -1, 0, 1, 1, 0, 0, 1, 3, 0), createShadow(0, 3, 1, -2, 0, 2, 2, 0, 0, 1, 5, 0), createShadow(0, 3, 3, -2, 0, 3, 4, 0, 0, 1, 8, 0), createShadow(0, 2, 4, -1, 0, 4, 5, 0, 0, 1, 10, 0), createShadow(0, 3, 5, -1, 0, 5, 8, 0, 0, 1, 14, 0), createShadow(0, 3, 5, -1, 0, 6, 10, 0, 0, 1, 18, 0), createShadow(0, 4, 5, -2, 0, 7, 10, 1, 0, 2, 16, 1), createShadow(0, 5, 5, -3, 0, 8, 10, 1, 0, 3, 14, 2), createShadow(0, 5, 6, -3, 0, 9, 12, 1, 0, 3, 16, 2), createShadow(0, 6, 6, -3, 0, 10, 14, 1, 0, 4, 18, 3), createShadow(0, 6, 7, -4, 0, 11, 15, 1, 0, 4, 20, 3), createShadow(0, 7, 8, -4, 0, 12, 17, 2, 0, 5, 22, 4), createShadow(0, 7, 8, -4, 0, 13, 19, 2, 0, 5, 24, 4), createShadow(0, 7, 9, -4, 0, 14, 21, 2, 0, 5, 26, 4), createShadow(0, 8, 9, -5, 0, 15, 22, 2, 0, 6, 28, 5), createShadow(0, 8, 10, -5, 0, 16, 24, 2, 0, 6, 30, 5), createShadow(0, 8, 11, -5, 0, 17, 26, 2, 0, 6, 32, 5), createShadow(0, 9, 11, -5, 0, 18, 28, 2, 0, 7, 34, 6), createShadow(0, 9, 12, -6, 0, 19, 29, 2, 0, 7, 36, 6), createShadow(0, 10, 13, -6, 0, 20, 31, 3, 0, 8, 38, 7), createShadow(0, 10, 13, -6, 0, 21, 33, 3, 0, 8, 40, 7), createShadow(0, 10, 14, -6, 0, 22, 35, 3, 0, 8, 42, 7), createShadow(0, 11, 14, -7, 0, 23, 36, 3, 0, 9, 44, 8), createShadow(0, 11, 15, -7, 0, 24, 38, 3, 0, 9, 46, 8)];\nexport default shadows;","// Follow https://material.google.com/motion/duration-easing.html#duration-easing-natural-easing-curves\n// to learn the context in which each easing should be used.\nexport const easing = {\n  // This is the most common easing curve.\n  easeInOut: 'cubic-bezier(0.4, 0, 0.2, 1)',\n  // Objects enter the screen at full velocity from off-screen and\n  // slowly decelerate to a resting point.\n  easeOut: 'cubic-bezier(0.0, 0, 0.2, 1)',\n  // Objects leave the screen at full velocity. They do not decelerate when off-screen.\n  easeIn: 'cubic-bezier(0.4, 0, 1, 1)',\n  // The sharp curve is used by objects that may return to the screen at any time.\n  sharp: 'cubic-bezier(0.4, 0, 0.6, 1)'\n};\n\n// Follow https://m2.material.io/guidelines/motion/duration-easing.html#duration-easing-common-durations\n// to learn when use what timing\nexport const duration = {\n  shortest: 150,\n  shorter: 200,\n  short: 250,\n  // most basic recommended timing\n  standard: 300,\n  // this is to be used in complex animations\n  complex: 375,\n  // recommended when something is entering screen\n  enteringScreen: 225,\n  // recommended when something is leaving screen\n  leavingScreen: 195\n};\nfunction formatMs(milliseconds) {\n  return `${Math.round(milliseconds)}ms`;\n}\nfunction getAutoHeightDuration(height) {\n  if (!height) {\n    return 0;\n  }\n  const constant = height / 36;\n\n  // https://www.desmos.com/calculator/vbrp3ggqet\n  return Math.min(Math.round((4 + 15 * constant ** 0.25 + constant / 5) * 10), 3000);\n}\nexport default function createTransitions(inputTransitions) {\n  const mergedEasing = {\n    ...easing,\n    ...inputTransitions.easing\n  };\n  const mergedDuration = {\n    ...duration,\n    ...inputTransitions.duration\n  };\n  const create = (props = ['all'], options = {}) => {\n    const {\n      duration: durationOption = mergedDuration.standard,\n      easing: easingOption = mergedEasing.easeInOut,\n      delay = 0,\n      ...other\n    } = options;\n    if (process.env.NODE_ENV !== 'production') {\n      const isString = value => typeof value === 'string';\n      const isNumber = value => !Number.isNaN(parseFloat(value));\n      if (!isString(props) && !Array.isArray(props)) {\n        console.error('MUI: Argument \"props\" must be a string or Array.');\n      }\n      if (!isNumber(durationOption) && !isString(durationOption)) {\n        console.error(`MUI: Argument \"duration\" must be a number or a string but found ${durationOption}.`);\n      }\n      if (!isString(easingOption)) {\n        console.error('MUI: Argument \"easing\" must be a string.');\n      }\n      if (!isNumber(delay) && !isString(delay)) {\n        console.error('MUI: Argument \"delay\" must be a number or a string.');\n      }\n      if (typeof options !== 'object') {\n        console.error(['MUI: Secong argument of transition.create must be an object.', \"Arguments should be either `create('prop1', options)` or `create(['prop1', 'prop2'], options)`\"].join('\\n'));\n      }\n      if (Object.keys(other).length !== 0) {\n        console.error(`MUI: Unrecognized argument(s) [${Object.keys(other).join(',')}].`);\n      }\n    }\n    return (Array.isArray(props) ? props : [props]).map(animatedProp => `${animatedProp} ${typeof durationOption === 'string' ? durationOption : formatMs(durationOption)} ${easingOption} ${typeof delay === 'string' ? delay : formatMs(delay)}`).join(',');\n  };\n  return {\n    getAutoHeightDuration,\n    create,\n    ...inputTransitions,\n    easing: mergedEasing,\n    duration: mergedDuration\n  };\n}","// We need to centralize the zIndex definitions as they work\n// like global values in the browser.\nconst zIndex = {\n  mobileStepper: 1000,\n  fab: 1050,\n  speedDial: 1050,\n  appBar: 1100,\n  drawer: 1200,\n  modal: 1300,\n  snackbar: 1400,\n  tooltip: 1500\n};\nexport default zIndex;","/* eslint-disable import/prefer-default-export */\nimport { isPlainObject } from '@mui/utils/deepmerge';\nfunction isSerializable(val) {\n  return isPlainObject(val) || typeof val === 'undefined' || typeof val === 'string' || typeof val === 'boolean' || typeof val === 'number' || Array.isArray(val);\n}\n\n/**\n * `baseTheme` usually comes from `createTheme()` or `extendTheme()`.\n *\n * This function is intended to be used with zero-runtime CSS-in-JS like Pigment CSS\n * For example, in a Next.js project:\n *\n * ```js\n * // next.config.js\n * const { extendTheme } = require('@mui/material/styles');\n *\n * const theme = extendTheme();\n * // `.toRuntimeSource` is Pigment CSS specific to create a theme that is available at runtime.\n * theme.toRuntimeSource = stringifyTheme;\n *\n * module.exports = withPigment({\n *  theme,\n * });\n * ```\n */\nexport function stringifyTheme(baseTheme = {}) {\n  const serializableTheme = {\n    ...baseTheme\n  };\n  function serializeTheme(object) {\n    const array = Object.entries(object);\n    // eslint-disable-next-line no-plusplus\n    for (let index = 0; index < array.length; index++) {\n      const [key, value] = array[index];\n      if (!isSerializable(value) || key.startsWith('unstable_')) {\n        delete object[key];\n      } else if (isPlainObject(value)) {\n        object[key] = {\n          ...value\n        };\n        serializeTheme(object[key]);\n      }\n    }\n  }\n  serializeTheme(serializableTheme);\n  return `import { unstable_createBreakpoints as createBreakpoints, createTransitions } from '@mui/material/styles';\n\nconst theme = ${JSON.stringify(serializableTheme, null, 2)};\n\ntheme.breakpoints = createBreakpoints(theme.breakpoints || {});\ntheme.transitions = createTransitions(theme.transitions || {});\n\nexport default theme;`;\n}","import _formatErrorMessage from \"@mui/utils/formatMuiErrorMessage\";\nimport deepmerge from '@mui/utils/deepmerge';\nimport styleFunctionSx, { unstable_defaultSxConfig as defaultSxConfig } from '@mui/system/styleFunctionSx';\nimport systemCreateTheme from '@mui/system/createTheme';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nimport createMixins from \"./createMixins.js\";\nimport createPalette from \"./createPalette.js\";\nimport createTypography from \"./createTypography.js\";\nimport shadows from \"./shadows.js\";\nimport createTransitions from \"./createTransitions.js\";\nimport zIndex from \"./zIndex.js\";\nimport { stringifyTheme } from \"./stringifyTheme.js\";\nfunction createThemeNoVars(options = {}, ...args) {\n  const {\n    breakpoints: breakpointsInput,\n    mixins: mixinsInput = {},\n    spacing: spacingInput,\n    palette: paletteInput = {},\n    transitions: transitionsInput = {},\n    typography: typographyInput = {},\n    shape: shapeInput,\n    ...other\n  } = options;\n  if (options.vars &&\n  // The error should throw only for the root theme creation because user is not allowed to use a custom node `vars`.\n  // `generateThemeVars` is the closest identifier for checking that the `options` is a result of `createTheme` with CSS variables so that user can create new theme for nested ThemeProvider.\n  options.generateThemeVars === undefined) {\n    throw new Error(process.env.NODE_ENV !== \"production\" ? 'MUI: `vars` is a private field used for CSS variables support.\\n' +\n    // #host-reference\n    'Please use another name or follow the [docs](https://mui.com/material-ui/customization/css-theme-variables/usage/) to enable the feature.' : _formatErrorMessage(20));\n  }\n  const palette = createPalette(paletteInput);\n  const systemTheme = systemCreateTheme(options);\n  let muiTheme = deepmerge(systemTheme, {\n    mixins: createMixins(systemTheme.breakpoints, mixinsInput),\n    palette,\n    // Don't use [...shadows] until you've verified its transpiled code is not invoking the iterator protocol.\n    shadows: shadows.slice(),\n    typography: createTypography(palette, typographyInput),\n    transitions: createTransitions(transitionsInput),\n    zIndex: {\n      ...zIndex\n    }\n  });\n  muiTheme = deepmerge(muiTheme, other);\n  muiTheme = args.reduce((acc, argument) => deepmerge(acc, argument), muiTheme);\n  if (process.env.NODE_ENV !== 'production') {\n    // TODO v6: Refactor to use globalStateClassesMapping from @mui/utils once `readOnly` state class is used in Rating component.\n    const stateClasses = ['active', 'checked', 'completed', 'disabled', 'error', 'expanded', 'focused', 'focusVisible', 'required', 'selected'];\n    const traverse = (node, component) => {\n      let key;\n\n      // eslint-disable-next-line guard-for-in\n      for (key in node) {\n        const child = node[key];\n        if (stateClasses.includes(key) && Object.keys(child).length > 0) {\n          if (process.env.NODE_ENV !== 'production') {\n            const stateClass = generateUtilityClass('', key);\n            console.error([`MUI: The \\`${component}\\` component increases ` + `the CSS specificity of the \\`${key}\\` internal state.`, 'You can not override it like this: ', JSON.stringify(node, null, 2), '', `Instead, you need to use the '&.${stateClass}' syntax:`, JSON.stringify({\n              root: {\n                [`&.${stateClass}`]: child\n              }\n            }, null, 2), '', 'https://mui.com/r/state-classes-guide'].join('\\n'));\n          }\n          // Remove the style to prevent global conflicts.\n          node[key] = {};\n        }\n      }\n    };\n    Object.keys(muiTheme.components).forEach(component => {\n      const styleOverrides = muiTheme.components[component].styleOverrides;\n      if (styleOverrides && component.startsWith('Mui')) {\n        traverse(styleOverrides, component);\n      }\n    });\n  }\n  muiTheme.unstable_sxConfig = {\n    ...defaultSxConfig,\n    ...other?.unstable_sxConfig\n  };\n  muiTheme.unstable_sx = function sx(props) {\n    return styleFunctionSx({\n      sx: props,\n      theme: this\n    });\n  };\n  muiTheme.toRuntimeSource = stringifyTheme; // for Pigment CSS integration\n\n  return muiTheme;\n}\nexport default createThemeNoVars;","// Inspired by https://github.com/material-components/material-components-ios/blob/bca36107405594d5b7b16265a5b0ed698f85a5ee/components/Elevation/src/UIColor%2BMaterialElevation.m#L61\nexport default function getOverlayAlpha(elevation) {\n  let alphaValue;\n  if (elevation < 1) {\n    alphaValue = 5.11916 * elevation ** 2;\n  } else {\n    alphaValue = 4.5 * Math.log(elevation + 1) + 2;\n  }\n  return Math.round(alphaValue * 10) / 1000;\n}","import createPalette from \"./createPalette.js\";\nimport getOverlayAlpha from \"./getOverlayAlpha.js\";\nconst defaultDarkOverlays = [...Array(25)].map((_, index) => {\n  if (index === 0) {\n    return 'none';\n  }\n  const overlay = getOverlayAlpha(index);\n  return `linear-gradient(rgba(255 255 255 / ${overlay}), rgba(255 255 255 / ${overlay}))`;\n});\nexport function getOpacity(mode) {\n  return {\n    inputPlaceholder: mode === 'dark' ? 0.5 : 0.42,\n    inputUnderline: mode === 'dark' ? 0.7 : 0.42,\n    switchTrackDisabled: mode === 'dark' ? 0.2 : 0.12,\n    switchTrack: mode === 'dark' ? 0.3 : 0.38\n  };\n}\nexport function getOverlays(mode) {\n  return mode === 'dark' ? defaultDarkOverlays : [];\n}\nexport default function createColorScheme(options) {\n  const {\n    palette: paletteInput = {\n      mode: 'light'\n    },\n    // need to cast to avoid module augmentation test\n    opacity,\n    overlays,\n    ...rest\n  } = options;\n  const palette = createPalette(paletteInput);\n  return {\n    palette,\n    opacity: {\n      ...getOpacity(palette.mode),\n      ...opacity\n    },\n    overlays: overlays || getOverlays(palette.mode),\n    ...rest\n  };\n}","export default function shouldSkipGeneratingVar(keys) {\n  return !!keys[0].match(/(cssVarPrefix|colorSchemeSelector|rootSelector|typography|mixins|breakpoints|direction|transitions)/) || !!keys[0].match(/sxConfig$/) ||\n  // ends with sxConfig\n  keys[0] === 'palette' && !!keys[1]?.match(/(mode|contrastThreshold|tonalOffset)/);\n}","/**\n * @internal These variables should not appear in the :root stylesheet when the `defaultColorScheme=\"dark\"`\n */\nconst excludeVariablesFromRoot = cssVarPrefix => [...[...Array(25)].map((_, index) => `--${cssVarPrefix ? `${cssVarPrefix}-` : ''}overlays-${index}`), `--${cssVarPrefix ? `${cssVarPrefix}-` : ''}palette-AppBar-darkBg`, `--${cssVarPrefix ? `${cssVarPrefix}-` : ''}palette-AppBar-darkColor`];\nexport default excludeVariablesFromRoot;","import excludeVariablesFromRoot from \"./excludeVariablesFromRoot.js\";\nexport default theme => (colorScheme, css) => {\n  const root = theme.rootSelector || ':root';\n  const selector = theme.colorSchemeSelector;\n  let rule = selector;\n  if (selector === 'class') {\n    rule = '.%s';\n  }\n  if (selector === 'data') {\n    rule = '[data-%s]';\n  }\n  if (selector?.startsWith('data-') && !selector.includes('%s')) {\n    // 'data-mui-color-scheme' -> '[data-mui-color-scheme=\"%s\"]'\n    rule = `[${selector}=\"%s\"]`;\n  }\n  if (theme.defaultColorScheme === colorScheme) {\n    if (colorScheme === 'dark') {\n      const excludedVariables = {};\n      excludeVariablesFromRoot(theme.cssVarPrefix).forEach(cssVar => {\n        excludedVariables[cssVar] = css[cssVar];\n        delete css[cssVar];\n      });\n      if (rule === 'media') {\n        return {\n          [root]: css,\n          [`@media (prefers-color-scheme: dark)`]: {\n            [root]: excludedVariables\n          }\n        };\n      }\n      if (rule) {\n        return {\n          [rule.replace('%s', colorScheme)]: excludedVariables,\n          [`${root}, ${rule.replace('%s', colorScheme)}`]: css\n        };\n      }\n      return {\n        [root]: {\n          ...css,\n          ...excludedVariables\n        }\n      };\n    }\n    if (rule && rule !== 'media') {\n      return `${root}, ${rule.replace('%s', String(colorScheme))}`;\n    }\n  } else if (colorScheme) {\n    if (rule === 'media') {\n      return {\n        [`@media (prefers-color-scheme: ${String(colorScheme)})`]: {\n          [root]: css\n        }\n      };\n    }\n    if (rule) {\n      return rule.replace('%s', String(colorScheme));\n    }\n  }\n  return root;\n};","import _formatErrorMessage from \"@mui/utils/formatMuiErrorMessage\";\nimport deepmerge from '@mui/utils/deepmerge';\nimport { unstable_createGetCssVar as systemCreateGetCssVar, createSpacing } from '@mui/system';\nimport { createUnarySpacing } from '@mui/system/spacing';\nimport { prepareCssVars, prepareTypographyVars, createGetColorSchemeSelector } from '@mui/system/cssVars';\nimport styleFunctionSx, { unstable_defaultSxConfig as defaultSxConfig } from '@mui/system/styleFunctionSx';\nimport { private_safeColorChannel as safeColorChannel, private_safeAlpha as safeAlpha, private_safeDarken as safeDarken, private_safeLighten as safeLighten, private_safeEmphasize as safeEmphasize, hslToRgb } from '@mui/system/colorManipulator';\nimport createThemeNoVars from \"./createThemeNoVars.js\";\nimport createColorScheme, { getOpacity, getOverlays } from \"./createColorScheme.js\";\nimport defaultShouldSkipGeneratingVar from \"./shouldSkipGeneratingVar.js\";\nimport defaultGetSelector from \"./createGetSelector.js\";\nimport { stringifyTheme } from \"./stringifyTheme.js\";\nfunction assignNode(obj, keys) {\n  keys.forEach(k => {\n    if (!obj[k]) {\n      obj[k] = {};\n    }\n  });\n}\nfunction setColor(obj, key, defaultValue) {\n  if (!obj[key] && defaultValue) {\n    obj[key] = defaultValue;\n  }\n}\nfunction toRgb(color) {\n  if (typeof color !== 'string' || !color.startsWith('hsl')) {\n    return color;\n  }\n  return hslToRgb(color);\n}\nfunction setColorChannel(obj, key) {\n  if (!(`${key}Channel` in obj)) {\n    // custom channel token is not provided, generate one.\n    // if channel token can't be generated, show a warning.\n    obj[`${key}Channel`] = safeColorChannel(toRgb(obj[key]), `MUI: Can't create \\`palette.${key}Channel\\` because \\`palette.${key}\\` is not one of these formats: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color().` + '\\n' + `To suppress this warning, you need to explicitly provide the \\`palette.${key}Channel\\` as a string (in rgb format, for example \"12 12 12\") or undefined if you want to remove the channel token.`);\n  }\n}\nfunction getSpacingVal(spacingInput) {\n  if (typeof spacingInput === 'number') {\n    return `${spacingInput}px`;\n  }\n  if (typeof spacingInput === 'string' || typeof spacingInput === 'function' || Array.isArray(spacingInput)) {\n    return spacingInput;\n  }\n  return '8px';\n}\nconst silent = fn => {\n  try {\n    return fn();\n  } catch (error) {\n    // ignore error\n  }\n  return undefined;\n};\nexport const createGetCssVar = (cssVarPrefix = 'mui') => systemCreateGetCssVar(cssVarPrefix);\nfunction attachColorScheme(colorSchemes, scheme, restTheme, colorScheme) {\n  if (!scheme) {\n    return undefined;\n  }\n  scheme = scheme === true ? {} : scheme;\n  const mode = colorScheme === 'dark' ? 'dark' : 'light';\n  if (!restTheme) {\n    colorSchemes[colorScheme] = createColorScheme({\n      ...scheme,\n      palette: {\n        mode,\n        ...scheme?.palette\n      }\n    });\n    return undefined;\n  }\n  const {\n    palette,\n    ...muiTheme\n  } = createThemeNoVars({\n    ...restTheme,\n    palette: {\n      mode,\n      ...scheme?.palette\n    }\n  });\n  colorSchemes[colorScheme] = {\n    ...scheme,\n    palette,\n    opacity: {\n      ...getOpacity(mode),\n      ...scheme?.opacity\n    },\n    overlays: scheme?.overlays || getOverlays(mode)\n  };\n  return muiTheme;\n}\n\n/**\n * A default `createThemeWithVars` comes with a single color scheme, either `light` or `dark` based on the `defaultColorScheme`.\n * This is better suited for apps that only need a single color scheme.\n *\n * To enable built-in `light` and `dark` color schemes, either:\n * 1. provide a `colorSchemeSelector` to define how the color schemes will change.\n * 2. provide `colorSchemes.dark` will set `colorSchemeSelector: 'media'` by default.\n */\nexport default function createThemeWithVars(options = {}, ...args) {\n  const {\n    colorSchemes: colorSchemesInput = {\n      light: true\n    },\n    defaultColorScheme: defaultColorSchemeInput,\n    disableCssColorScheme = false,\n    cssVarPrefix = 'mui',\n    shouldSkipGeneratingVar = defaultShouldSkipGeneratingVar,\n    colorSchemeSelector: selector = colorSchemesInput.light && colorSchemesInput.dark ? 'media' : undefined,\n    rootSelector = ':root',\n    ...input\n  } = options;\n  const firstColorScheme = Object.keys(colorSchemesInput)[0];\n  const defaultColorScheme = defaultColorSchemeInput || (colorSchemesInput.light && firstColorScheme !== 'light' ? 'light' : firstColorScheme);\n  const getCssVar = createGetCssVar(cssVarPrefix);\n  const {\n    [defaultColorScheme]: defaultSchemeInput,\n    light: builtInLight,\n    dark: builtInDark,\n    ...customColorSchemes\n  } = colorSchemesInput;\n  const colorSchemes = {\n    ...customColorSchemes\n  };\n  let defaultScheme = defaultSchemeInput;\n\n  // For built-in light and dark color schemes, ensure that the value is valid if they are the default color scheme.\n  if (defaultColorScheme === 'dark' && !('dark' in colorSchemesInput) || defaultColorScheme === 'light' && !('light' in colorSchemesInput)) {\n    defaultScheme = true;\n  }\n  if (!defaultScheme) {\n    throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: The \\`colorSchemes.${defaultColorScheme}\\` option is either missing or invalid.` : _formatErrorMessage(21, defaultColorScheme));\n  }\n\n  // Create the palette for the default color scheme, either `light`, `dark`, or custom color scheme.\n  const muiTheme = attachColorScheme(colorSchemes, defaultScheme, input, defaultColorScheme);\n  if (builtInLight && !colorSchemes.light) {\n    attachColorScheme(colorSchemes, builtInLight, undefined, 'light');\n  }\n  if (builtInDark && !colorSchemes.dark) {\n    attachColorScheme(colorSchemes, builtInDark, undefined, 'dark');\n  }\n  let theme = {\n    defaultColorScheme,\n    ...muiTheme,\n    cssVarPrefix,\n    colorSchemeSelector: selector,\n    rootSelector,\n    getCssVar,\n    colorSchemes,\n    font: {\n      ...prepareTypographyVars(muiTheme.typography),\n      ...muiTheme.font\n    },\n    spacing: getSpacingVal(input.spacing)\n  };\n  Object.keys(theme.colorSchemes).forEach(key => {\n    const palette = theme.colorSchemes[key].palette;\n    const setCssVarColor = cssVar => {\n      const tokens = cssVar.split('-');\n      const color = tokens[1];\n      const colorToken = tokens[2];\n      return getCssVar(cssVar, palette[color][colorToken]);\n    };\n\n    // attach black & white channels to common node\n    if (palette.mode === 'light') {\n      setColor(palette.common, 'background', '#fff');\n      setColor(palette.common, 'onBackground', '#000');\n    }\n    if (palette.mode === 'dark') {\n      setColor(palette.common, 'background', '#000');\n      setColor(palette.common, 'onBackground', '#fff');\n    }\n\n    // assign component variables\n    assignNode(palette, ['Alert', 'AppBar', 'Avatar', 'Button', 'Chip', 'FilledInput', 'LinearProgress', 'Skeleton', 'Slider', 'SnackbarContent', 'SpeedDialAction', 'StepConnector', 'StepContent', 'Switch', 'TableCell', 'Tooltip']);\n    if (palette.mode === 'light') {\n      setColor(palette.Alert, 'errorColor', safeDarken(palette.error.light, 0.6));\n      setColor(palette.Alert, 'infoColor', safeDarken(palette.info.light, 0.6));\n      setColor(palette.Alert, 'successColor', safeDarken(palette.success.light, 0.6));\n      setColor(palette.Alert, 'warningColor', safeDarken(palette.warning.light, 0.6));\n      setColor(palette.Alert, 'errorFilledBg', setCssVarColor('palette-error-main'));\n      setColor(palette.Alert, 'infoFilledBg', setCssVarColor('palette-info-main'));\n      setColor(palette.Alert, 'successFilledBg', setCssVarColor('palette-success-main'));\n      setColor(palette.Alert, 'warningFilledBg', setCssVarColor('palette-warning-main'));\n      setColor(palette.Alert, 'errorFilledColor', silent(() => palette.getContrastText(palette.error.main)));\n      setColor(palette.Alert, 'infoFilledColor', silent(() => palette.getContrastText(palette.info.main)));\n      setColor(palette.Alert, 'successFilledColor', silent(() => palette.getContrastText(palette.success.main)));\n      setColor(palette.Alert, 'warningFilledColor', silent(() => palette.getContrastText(palette.warning.main)));\n      setColor(palette.Alert, 'errorStandardBg', safeLighten(palette.error.light, 0.9));\n      setColor(palette.Alert, 'infoStandardBg', safeLighten(palette.info.light, 0.9));\n      setColor(palette.Alert, 'successStandardBg', safeLighten(palette.success.light, 0.9));\n      setColor(palette.Alert, 'warningStandardBg', safeLighten(palette.warning.light, 0.9));\n      setColor(palette.Alert, 'errorIconColor', setCssVarColor('palette-error-main'));\n      setColor(palette.Alert, 'infoIconColor', setCssVarColor('palette-info-main'));\n      setColor(palette.Alert, 'successIconColor', setCssVarColor('palette-success-main'));\n      setColor(palette.Alert, 'warningIconColor', setCssVarColor('palette-warning-main'));\n      setColor(palette.AppBar, 'defaultBg', setCssVarColor('palette-grey-100'));\n      setColor(palette.Avatar, 'defaultBg', setCssVarColor('palette-grey-400'));\n      setColor(palette.Button, 'inheritContainedBg', setCssVarColor('palette-grey-300'));\n      setColor(palette.Button, 'inheritContainedHoverBg', setCssVarColor('palette-grey-A100'));\n      setColor(palette.Chip, 'defaultBorder', setCssVarColor('palette-grey-400'));\n      setColor(palette.Chip, 'defaultAvatarColor', setCssVarColor('palette-grey-700'));\n      setColor(palette.Chip, 'defaultIconColor', setCssVarColor('palette-grey-700'));\n      setColor(palette.FilledInput, 'bg', 'rgba(0, 0, 0, 0.06)');\n      setColor(palette.FilledInput, 'hoverBg', 'rgba(0, 0, 0, 0.09)');\n      setColor(palette.FilledInput, 'disabledBg', 'rgba(0, 0, 0, 0.12)');\n      setColor(palette.LinearProgress, 'primaryBg', safeLighten(palette.primary.main, 0.62));\n      setColor(palette.LinearProgress, 'secondaryBg', safeLighten(palette.secondary.main, 0.62));\n      setColor(palette.LinearProgress, 'errorBg', safeLighten(palette.error.main, 0.62));\n      setColor(palette.LinearProgress, 'infoBg', safeLighten(palette.info.main, 0.62));\n      setColor(palette.LinearProgress, 'successBg', safeLighten(palette.success.main, 0.62));\n      setColor(palette.LinearProgress, 'warningBg', safeLighten(palette.warning.main, 0.62));\n      setColor(palette.Skeleton, 'bg', `rgba(${setCssVarColor('palette-text-primaryChannel')} / 0.11)`);\n      setColor(palette.Slider, 'primaryTrack', safeLighten(palette.primary.main, 0.62));\n      setColor(palette.Slider, 'secondaryTrack', safeLighten(palette.secondary.main, 0.62));\n      setColor(palette.Slider, 'errorTrack', safeLighten(palette.error.main, 0.62));\n      setColor(palette.Slider, 'infoTrack', safeLighten(palette.info.main, 0.62));\n      setColor(palette.Slider, 'successTrack', safeLighten(palette.success.main, 0.62));\n      setColor(palette.Slider, 'warningTrack', safeLighten(palette.warning.main, 0.62));\n      const snackbarContentBackground = safeEmphasize(palette.background.default, 0.8);\n      setColor(palette.SnackbarContent, 'bg', snackbarContentBackground);\n      setColor(palette.SnackbarContent, 'color', silent(() => palette.getContrastText(snackbarContentBackground)));\n      setColor(palette.SpeedDialAction, 'fabHoverBg', safeEmphasize(palette.background.paper, 0.15));\n      setColor(palette.StepConnector, 'border', setCssVarColor('palette-grey-400'));\n      setColor(palette.StepContent, 'border', setCssVarColor('palette-grey-400'));\n      setColor(palette.Switch, 'defaultColor', setCssVarColor('palette-common-white'));\n      setColor(palette.Switch, 'defaultDisabledColor', setCssVarColor('palette-grey-100'));\n      setColor(palette.Switch, 'primaryDisabledColor', safeLighten(palette.primary.main, 0.62));\n      setColor(palette.Switch, 'secondaryDisabledColor', safeLighten(palette.secondary.main, 0.62));\n      setColor(palette.Switch, 'errorDisabledColor', safeLighten(palette.error.main, 0.62));\n      setColor(palette.Switch, 'infoDisabledColor', safeLighten(palette.info.main, 0.62));\n      setColor(palette.Switch, 'successDisabledColor', safeLighten(palette.success.main, 0.62));\n      setColor(palette.Switch, 'warningDisabledColor', safeLighten(palette.warning.main, 0.62));\n      setColor(palette.TableCell, 'border', safeLighten(safeAlpha(palette.divider, 1), 0.88));\n      setColor(palette.Tooltip, 'bg', safeAlpha(palette.grey[700], 0.92));\n    }\n    if (palette.mode === 'dark') {\n      setColor(palette.Alert, 'errorColor', safeLighten(palette.error.light, 0.6));\n      setColor(palette.Alert, 'infoColor', safeLighten(palette.info.light, 0.6));\n      setColor(palette.Alert, 'successColor', safeLighten(palette.success.light, 0.6));\n      setColor(palette.Alert, 'warningColor', safeLighten(palette.warning.light, 0.6));\n      setColor(palette.Alert, 'errorFilledBg', setCssVarColor('palette-error-dark'));\n      setColor(palette.Alert, 'infoFilledBg', setCssVarColor('palette-info-dark'));\n      setColor(palette.Alert, 'successFilledBg', setCssVarColor('palette-success-dark'));\n      setColor(palette.Alert, 'warningFilledBg', setCssVarColor('palette-warning-dark'));\n      setColor(palette.Alert, 'errorFilledColor', silent(() => palette.getContrastText(palette.error.dark)));\n      setColor(palette.Alert, 'infoFilledColor', silent(() => palette.getContrastText(palette.info.dark)));\n      setColor(palette.Alert, 'successFilledColor', silent(() => palette.getContrastText(palette.success.dark)));\n      setColor(palette.Alert, 'warningFilledColor', silent(() => palette.getContrastText(palette.warning.dark)));\n      setColor(palette.Alert, 'errorStandardBg', safeDarken(palette.error.light, 0.9));\n      setColor(palette.Alert, 'infoStandardBg', safeDarken(palette.info.light, 0.9));\n      setColor(palette.Alert, 'successStandardBg', safeDarken(palette.success.light, 0.9));\n      setColor(palette.Alert, 'warningStandardBg', safeDarken(palette.warning.light, 0.9));\n      setColor(palette.Alert, 'errorIconColor', setCssVarColor('palette-error-main'));\n      setColor(palette.Alert, 'infoIconColor', setCssVarColor('palette-info-main'));\n      setColor(palette.Alert, 'successIconColor', setCssVarColor('palette-success-main'));\n      setColor(palette.Alert, 'warningIconColor', setCssVarColor('palette-warning-main'));\n      setColor(palette.AppBar, 'defaultBg', setCssVarColor('palette-grey-900'));\n      setColor(palette.AppBar, 'darkBg', setCssVarColor('palette-background-paper')); // specific for dark mode\n      setColor(palette.AppBar, 'darkColor', setCssVarColor('palette-text-primary')); // specific for dark mode\n      setColor(palette.Avatar, 'defaultBg', setCssVarColor('palette-grey-600'));\n      setColor(palette.Button, 'inheritContainedBg', setCssVarColor('palette-grey-800'));\n      setColor(palette.Button, 'inheritContainedHoverBg', setCssVarColor('palette-grey-700'));\n      setColor(palette.Chip, 'defaultBorder', setCssVarColor('palette-grey-700'));\n      setColor(palette.Chip, 'defaultAvatarColor', setCssVarColor('palette-grey-300'));\n      setColor(palette.Chip, 'defaultIconColor', setCssVarColor('palette-grey-300'));\n      setColor(palette.FilledInput, 'bg', 'rgba(255, 255, 255, 0.09)');\n      setColor(palette.FilledInput, 'hoverBg', 'rgba(255, 255, 255, 0.13)');\n      setColor(palette.FilledInput, 'disabledBg', 'rgba(255, 255, 255, 0.12)');\n      setColor(palette.LinearProgress, 'primaryBg', safeDarken(palette.primary.main, 0.5));\n      setColor(palette.LinearProgress, 'secondaryBg', safeDarken(palette.secondary.main, 0.5));\n      setColor(palette.LinearProgress, 'errorBg', safeDarken(palette.error.main, 0.5));\n      setColor(palette.LinearProgress, 'infoBg', safeDarken(palette.info.main, 0.5));\n      setColor(palette.LinearProgress, 'successBg', safeDarken(palette.success.main, 0.5));\n      setColor(palette.LinearProgress, 'warningBg', safeDarken(palette.warning.main, 0.5));\n      setColor(palette.Skeleton, 'bg', `rgba(${setCssVarColor('palette-text-primaryChannel')} / 0.13)`);\n      setColor(palette.Slider, 'primaryTrack', safeDarken(palette.primary.main, 0.5));\n      setColor(palette.Slider, 'secondaryTrack', safeDarken(palette.secondary.main, 0.5));\n      setColor(palette.Slider, 'errorTrack', safeDarken(palette.error.main, 0.5));\n      setColor(palette.Slider, 'infoTrack', safeDarken(palette.info.main, 0.5));\n      setColor(palette.Slider, 'successTrack', safeDarken(palette.success.main, 0.5));\n      setColor(palette.Slider, 'warningTrack', safeDarken(palette.warning.main, 0.5));\n      const snackbarContentBackground = safeEmphasize(palette.background.default, 0.98);\n      setColor(palette.SnackbarContent, 'bg', snackbarContentBackground);\n      setColor(palette.SnackbarContent, 'color', silent(() => palette.getContrastText(snackbarContentBackground)));\n      setColor(palette.SpeedDialAction, 'fabHoverBg', safeEmphasize(palette.background.paper, 0.15));\n      setColor(palette.StepConnector, 'border', setCssVarColor('palette-grey-600'));\n      setColor(palette.StepContent, 'border', setCssVarColor('palette-grey-600'));\n      setColor(palette.Switch, 'defaultColor', setCssVarColor('palette-grey-300'));\n      setColor(palette.Switch, 'defaultDisabledColor', setCssVarColor('palette-grey-600'));\n      setColor(palette.Switch, 'primaryDisabledColor', safeDarken(palette.primary.main, 0.55));\n      setColor(palette.Switch, 'secondaryDisabledColor', safeDarken(palette.secondary.main, 0.55));\n      setColor(palette.Switch, 'errorDisabledColor', safeDarken(palette.error.main, 0.55));\n      setColor(palette.Switch, 'infoDisabledColor', safeDarken(palette.info.main, 0.55));\n      setColor(palette.Switch, 'successDisabledColor', safeDarken(palette.success.main, 0.55));\n      setColor(palette.Switch, 'warningDisabledColor', safeDarken(palette.warning.main, 0.55));\n      setColor(palette.TableCell, 'border', safeDarken(safeAlpha(palette.divider, 1), 0.68));\n      setColor(palette.Tooltip, 'bg', safeAlpha(palette.grey[700], 0.92));\n    }\n\n    // MUI X - DataGrid needs this token.\n    setColorChannel(palette.background, 'default');\n\n    // added for consistency with the `background.default` token\n    setColorChannel(palette.background, 'paper');\n    setColorChannel(palette.common, 'background');\n    setColorChannel(palette.common, 'onBackground');\n    setColorChannel(palette, 'divider');\n    Object.keys(palette).forEach(color => {\n      const colors = palette[color];\n\n      // The default palettes (primary, secondary, error, info, success, and warning) errors are handled by the above `createTheme(...)`.\n\n      if (color !== 'tonalOffset' && colors && typeof colors === 'object') {\n        // Silent the error for custom palettes.\n        if (colors.main) {\n          setColor(palette[color], 'mainChannel', safeColorChannel(toRgb(colors.main)));\n        }\n        if (colors.light) {\n          setColor(palette[color], 'lightChannel', safeColorChannel(toRgb(colors.light)));\n        }\n        if (colors.dark) {\n          setColor(palette[color], 'darkChannel', safeColorChannel(toRgb(colors.dark)));\n        }\n        if (colors.contrastText) {\n          setColor(palette[color], 'contrastTextChannel', safeColorChannel(toRgb(colors.contrastText)));\n        }\n        if (color === 'text') {\n          // Text colors: text.primary, text.secondary\n          setColorChannel(palette[color], 'primary');\n          setColorChannel(palette[color], 'secondary');\n        }\n        if (color === 'action') {\n          // Action colors: action.active, action.selected\n          if (colors.active) {\n            setColorChannel(palette[color], 'active');\n          }\n          if (colors.selected) {\n            setColorChannel(palette[color], 'selected');\n          }\n        }\n      }\n    });\n  });\n  theme = args.reduce((acc, argument) => deepmerge(acc, argument), theme);\n  const parserConfig = {\n    prefix: cssVarPrefix,\n    disableCssColorScheme,\n    shouldSkipGeneratingVar,\n    getSelector: defaultGetSelector(theme)\n  };\n  const {\n    vars,\n    generateThemeVars,\n    generateStyleSheets\n  } = prepareCssVars(theme, parserConfig);\n  theme.vars = vars;\n  Object.entries(theme.colorSchemes[theme.defaultColorScheme]).forEach(([key, value]) => {\n    theme[key] = value;\n  });\n  theme.generateThemeVars = generateThemeVars;\n  theme.generateStyleSheets = generateStyleSheets;\n  theme.generateSpacing = function generateSpacing() {\n    return createSpacing(input.spacing, createUnarySpacing(this));\n  };\n  theme.getColorSchemeSelector = createGetColorSchemeSelector(selector);\n  theme.spacing = theme.generateSpacing();\n  theme.shouldSkipGeneratingVar = shouldSkipGeneratingVar;\n  theme.unstable_sxConfig = {\n    ...defaultSxConfig,\n    ...input?.unstable_sxConfig\n  };\n  theme.unstable_sx = function sx(props) {\n    return styleFunctionSx({\n      sx: props,\n      theme: this\n    });\n  };\n  theme.toRuntimeSource = stringifyTheme; // for Pigment CSS integration\n\n  return theme;\n}","import createPalette from \"./createPalette.js\";\nimport createThemeWithVars from \"./createThemeWithVars.js\";\nimport createThemeNoVars from \"./createThemeNoVars.js\";\n// eslint-disable-next-line consistent-return\nfunction attachColorScheme(theme, scheme, colorScheme) {\n  if (!theme.colorSchemes) {\n    return undefined;\n  }\n  if (colorScheme) {\n    theme.colorSchemes[scheme] = {\n      ...(colorScheme !== true && colorScheme),\n      palette: createPalette({\n        ...(colorScheme === true ? {} : colorScheme.palette),\n        mode: scheme\n      }) // cast type to skip module augmentation test\n    };\n  }\n}\n\n/**\n * Generate a theme base on the options received.\n * @param options Takes an incomplete theme object and adds the missing parts.\n * @param args Deep merge the arguments with the about to be returned theme.\n * @returns A complete, ready-to-use theme object.\n */\nexport default function createTheme(options = {},\n// cast type to skip module augmentation test\n...args) {\n  const {\n    palette,\n    cssVariables = false,\n    colorSchemes: initialColorSchemes = !palette ? {\n      light: true\n    } : undefined,\n    defaultColorScheme: initialDefaultColorScheme = palette?.mode,\n    ...rest\n  } = options;\n  const defaultColorSchemeInput = initialDefaultColorScheme || 'light';\n  const defaultScheme = initialColorSchemes?.[defaultColorSchemeInput];\n  const colorSchemesInput = {\n    ...initialColorSchemes,\n    ...(palette ? {\n      [defaultColorSchemeInput]: {\n        ...(typeof defaultScheme !== 'boolean' && defaultScheme),\n        palette\n      }\n    } : undefined)\n  };\n  if (cssVariables === false) {\n    if (!('colorSchemes' in options)) {\n      // Behaves exactly as v5\n      return createThemeNoVars(options, ...args);\n    }\n    let paletteOptions = palette;\n    if (!('palette' in options)) {\n      if (colorSchemesInput[defaultColorSchemeInput]) {\n        if (colorSchemesInput[defaultColorSchemeInput] !== true) {\n          paletteOptions = colorSchemesInput[defaultColorSchemeInput].palette;\n        } else if (defaultColorSchemeInput === 'dark') {\n          // @ts-ignore to prevent the module augmentation test from failing\n          paletteOptions = {\n            mode: 'dark'\n          };\n        }\n      }\n    }\n    const theme = createThemeNoVars({\n      ...options,\n      palette: paletteOptions\n    }, ...args);\n    theme.defaultColorScheme = defaultColorSchemeInput;\n    theme.colorSchemes = colorSchemesInput;\n    if (theme.palette.mode === 'light') {\n      theme.colorSchemes.light = {\n        ...(colorSchemesInput.light !== true && colorSchemesInput.light),\n        palette: theme.palette\n      };\n      attachColorScheme(theme, 'dark', colorSchemesInput.dark);\n    }\n    if (theme.palette.mode === 'dark') {\n      theme.colorSchemes.dark = {\n        ...(colorSchemesInput.dark !== true && colorSchemesInput.dark),\n        palette: theme.palette\n      };\n      attachColorScheme(theme, 'light', colorSchemesInput.light);\n    }\n    return theme;\n  }\n  if (!palette && !('light' in colorSchemesInput) && defaultColorSchemeInput === 'light') {\n    colorSchemesInput.light = true;\n  }\n  return createThemeWithVars({\n    ...rest,\n    colorSchemes: colorSchemesInput,\n    defaultColorScheme: defaultColorSchemeInput,\n    ...(typeof cssVariables !== 'boolean' && cssVariables)\n  }, ...args);\n}","'use client';\n\nimport createTheme from \"./createTheme.js\";\nconst defaultTheme = createTheme();\nexport default defaultTheme;","'use client';\n\nimport * as React from 'react';\nimport { useTheme as useThemeSystem } from '@mui/system';\nimport defaultTheme from \"./defaultTheme.js\";\nimport THEME_ID from \"./identifier.js\";\nexport default function useTheme() {\n  const theme = useThemeSystem(defaultTheme);\n  if (process.env.NODE_ENV !== 'production') {\n    // TODO: uncomment once we enable eslint-plugin-react-compiler // eslint-disable-next-line react-compiler/react-compiler\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    React.useDebugValue(theme);\n  }\n  return theme[THEME_ID] || theme;\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;","'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}","'use client';\n\nimport * as React from 'react';\nlet globalId = 0;\n\n// TODO React 17: Remove `useGlobalId` once React 17 support is removed\nfunction useGlobalId(idOverride) {\n  const [defaultId, setDefaultId] = React.useState(idOverride);\n  const id = idOverride || defaultId;\n  React.useEffect(() => {\n    if (defaultId == null) {\n      // Fallback to this default id when possible.\n      // Use the incrementing value for client-side rendering only.\n      // We can't use it server-side.\n      // If you want to use random values please consider the Birthday Problem: https://en.wikipedia.org/wiki/Birthday_problem\n      globalId += 1;\n      setDefaultId(`mui-${globalId}`);\n    }\n  }, [defaultId]);\n  return id;\n}\n\n// See https://github.com/mui/material-ui/issues/41190#issuecomment-2040873379 for why\nconst safeReact = {\n  ...React\n};\nconst maybeReactUseId = safeReact.useId;\n\n/**\n *\n * @example <div id={useId()} />\n * @param idOverride\n * @returns {string}\n */\nexport default function useId(idOverride) {\n  // React.useId() is only available from React 17.0.0.\n  if (maybeReactUseId !== undefined) {\n    const reactId = maybeReactUseId();\n    return idOverride ?? reactId;\n  }\n\n  // TODO: uncomment once we enable eslint-plugin-react-compiler // eslint-disable-next-line react-compiler/react-compiler\n  // eslint-disable-next-line react-hooks/rules-of-hooks -- `React.useId` is invariant at runtime.\n  return useGlobalId(idOverride);\n}","export class ChartStore {\n  constructor(value) {\n    this.value = void 0;\n    this.listeners = void 0;\n    this.subscribe = fn => {\n      this.listeners.add(fn);\n      return () => {\n        this.listeners.delete(fn);\n      };\n    };\n    this.getSnapshot = () => {\n      return this.value;\n    };\n    this.update = updater => {\n      const newState = updater(this.value);\n      if (newState !== this.value) {\n        this.value = newState;\n        this.listeners.forEach(l => l(newState));\n      }\n    };\n    this.value = value;\n    this.listeners = new Set();\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.update(prevState => {\n      return _extends({}, prevState, {\n        animation: _extends({}, prevState.animation, {\n          skip: params.skipAnimation\n        })\n      });\n    });\n  }, [store, params.skipAnimation]);\n  const disableAnimation = React.useCallback(() => {\n    let disableCalled = false;\n    store.update(prevState => _extends({}, prevState, {\n      animation: _extends({}, prevState.animation, {\n        skipAnimationRequests: prevState.animation.skipAnimationRequests + 1\n      })\n    }));\n    return () => {\n      if (disableCalled) {\n        return;\n      }\n      disableCalled = true;\n      store.update(prevState => _extends({}, prevState, {\n        animation: _extends({}, prevState.animation, {\n          skipAnimationRequests: prevState.animation.skipAnimationRequests - 1\n        })\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};","// 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';\nconst reselectCreateSelector = createSelectorCreator({\n  memoize: lruMemoize,\n  memoizeOptions: {\n    maxSize: 1,\n    equalityCheck: Object.is\n  }\n});\nconst cache = new WeakMap();\n/**\n * Method wrapping reselect's createSelector to provide caching for chart instances.\n *\n */\nexport const createSelector = (...createSelectorArgs) => {\n  const selector = (state, ...selectorArgs) => {\n    const cacheKey = state.cacheKey;\n\n    // If there is no cache for the current chart instance, create one.\n    let cacheForCurrentChartInstance = cache.get(cacheKey);\n    if (!cacheForCurrentChartInstance) {\n      cacheForCurrentChartInstance = new Map();\n      cache.set(cacheKey, cacheForCurrentChartInstance);\n    }\n\n    // If there is a cached selector, execute it.\n    const cachedSelector = cacheForCurrentChartInstance.get(createSelectorArgs);\n    if (cachedSelector) {\n      return cachedSelector(state, ...selectorArgs);\n    }\n\n    // Otherwise, create a new selector and cache it and execute it.\n    const fn = reselectCreateSelector(...createSelectorArgs);\n    cacheForCurrentChartInstance.set(createSelectorArgs, fn);\n    return fn(state, ...selectorArgs);\n  };\n  return selector;\n};","import { createSelector } from \"../../utils/selectors.js\";\nconst selectorChartAnimationState = state => state.animation;\nexport const selectorChartSkipAnimation = createSelector([selectorChartAnimationState], state => state.skip || state.skipAnimationRequests > 0);","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}","/**\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","/* 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 { useSyncExternalStoreWithSelector } from 'use-sync-external-store/shim/with-selector';\nconst defaultCompare = Object.is;\nexport const useSelector = (store, selector, args = [], equals = defaultCompare) => {\n  const selectorWithArgs = state => selector(state, ...args);\n  return useSyncExternalStoreWithSelector(store.subscribe, store.getSnapshot, store.getSnapshot, selectorWithArgs, equals);\n};","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 { selectorChartRawXAxis, selectorChartRawYAxis } from \"./useChartCartesianAxisLayout.selectors.js\";\nimport { createSelector } from \"../../utils/selectors.js\";\nexport const selectorChartLeftAxisSize = createSelector([selectorChartRawYAxis], yAxis => (yAxis ?? []).reduce((acc, axis) => axis.position === 'left' ? acc + (axis.width || 0) + (axis.zoom?.slider.enabled ? axis.zoom.slider.size : 0) : acc, 0));\nexport const selectorChartRightAxisSize = createSelector([selectorChartRawYAxis], yAxis => (yAxis ?? []).reduce((acc, axis) => axis.position === 'right' ? acc + (axis.width || 0) + (axis.zoom?.slider.enabled ? axis.zoom.slider.size : 0) : acc, 0));\nexport const selectorChartTopAxisSize = createSelector([selectorChartRawXAxis], xAxis => (xAxis ?? []).reduce((acc, axis) => axis.position === 'top' ? acc + (axis.height || 0) + (axis.zoom?.slider.enabled ? axis.zoom.slider.size : 0) : acc, 0));\nexport const selectorChartBottomAxisSize = createSelector([selectorChartRawXAxis], xAxis => (xAxis ?? []).reduce((acc, axis) => axis.position === 'bottom' ? acc + (axis.height || 0) + (axis.zoom?.slider.enabled ? axis.zoom.slider.size : 0) : acc, 0));","import { createSelector } from \"../../utils/selectors.js\";\nimport { selectorChartBottomAxisSize, selectorChartLeftAxisSize, selectorChartRightAxisSize, selectorChartTopAxisSize } from \"../../featurePlugins/useChartCartesianAxis/useChartAxisSize.selectors.js\";\nexport const selectorChartDimensionsState = state => state.dimensions;\nexport const selectorChartMargin = state => state.dimensions.margin;\nconst selectorChartWidth = state => state.dimensions.width;\nconst selectorChartHeight = state => state.dimensions.height;\nconst selectorChartTopMargin = state => state.dimensions.margin.top;\nconst selectorChartRightMargin = state => state.dimensions.margin.right;\nconst selectorChartBottomMargin = state => state.dimensions.margin.bottom;\nconst selectorChartLeftMargin = state => state.dimensions.margin.left;\nexport const selectorChartDrawingArea = createSelector([selectorChartWidth, selectorChartHeight, selectorChartTopMargin, selectorChartRightMargin, selectorChartBottomMargin, selectorChartLeftMargin, selectorChartTopAxisSize, selectorChartRightAxisSize, selectorChartBottomAxisSize, selectorChartLeftAxisSize], (width, height, marginTop, marginRight, marginBottom, marginLeft, axisSizeTop, axisSizeRight, axisSizeBottom, axisSizeLeft) => ({\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}));\nexport const selectorChartPropsSize = createSelector([selectorChartDimensionsState], dimensionsState => ({\n  width: dimensionsState.propsWidth,\n  height: dimensionsState.propsHeight\n}));\nexport const selectorChartContainerSize = createSelector([selectorChartWidth, selectorChartHeight], (width, height) => ({\n  width,\n  height\n}));","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 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    store.update(prev => {\n      if (prev.dimensions.width === newWidth && prev.dimensions.height === newHeight) {\n        return prev;\n      }\n      return _extends({}, prev, {\n        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    });\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  React.useEffect(() => {\n    store.update(prev => {\n      const width = params.width ?? prev.dimensions.width;\n      const height = params.height ?? prev.dimensions.height;\n      return _extends({}, prev, {\n        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      });\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 _extends from \"@babel/runtime/helpers/esm/extends\";\nimport useEnhancedEffect from '@mui/utils/useEnhancedEffect';\nexport const useChartExperimentalFeatures = ({\n  params,\n  store\n}) => {\n  useEnhancedEffect(() => {\n    store.update(prevState => {\n      return _extends({}, prevState, {\n        experimentalFeatures: params.experimentalFeatures\n      });\n    });\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 \"../../utils/selectors.js\";\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    store.update(prevState => {\n      if (params.id === undefined || params.id === prevState.id.providedChartId && prevState.id.chartId !== undefined) {\n        return prevState;\n      }\n      return _extends({}, prevState, {\n        id: _extends({}, prevState.id, {\n          chartId: params.id ?? createChartDefaultId()\n        })\n      });\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 \"../../utils/selectors.js\";\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 methods is the interface between what the developer is providing and what components receives\n * To simplify the components behaviors, it groups series by type, such that LinePlots props are not updated if some line data are modified\n * It also add defaultized values such as the ids, colors\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.\n */\nexport const preprocessSeries = ({\n  series,\n  colors,\n  seriesConfig,\n  dataset\n}) => {\n  // Group series by type\n  const seriesGroups = {};\n  // Notice the line about uses `ChartSeriesType` instead of TSeriesType.\n  // That's probably because the series.type is not propagated from the generic but hardcoded in the config.\n\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  const processedSeries = {};\n  // Apply formatter on a type group\n  Object.keys(seriesConfig).forEach(type => {\n    const group = seriesGroups[type];\n    if (group !== undefined) {\n      processedSeries[type] = seriesConfig[type]?.seriesProcessor?.(group, dataset) ?? seriesGroups[type];\n    }\n  });\n  return processedSeries;\n};","'use client';\n\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport { rainbowSurgePalette } from \"../../../../colorPalettes/index.js\";\nimport { preprocessSeries } 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  const isFirstRender = React.useRef(true);\n  React.useEffect(() => {\n    if (isFirstRender.current) {\n      isFirstRender.current = false;\n      return;\n    }\n    store.update(prev => _extends({}, prev, {\n      series: _extends({}, prev.series, {\n        processedSeries: preprocessSeries({\n          series,\n          colors: typeof colors === 'function' ? colors(theme) : colors,\n          seriesConfig,\n          dataset\n        })\n      })\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      processedSeries: preprocessSeries({\n        series,\n        colors: typeof colors === 'function' ? colors(theme) : colors,\n        seriesConfig,\n        dataset\n      })\n    }\n  };\n};","import { createSelector } from \"../../utils/selectors.js\";\nexport const selectorChartSeriesState = state => state.series;\nexport const selectorChartSeriesProcessed = createSelector([selectorChartSeriesState], seriesState => seriesState.processedSeries);\nexport const selectorChartSeriesConfig = createSelector([selectorChartSeriesState], seriesState => seriesState.seriesConfig);","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};","/**\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 * 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  /**\n   * Create a new gesture instance with the specified options\n   *\n   * @param options - Configuration options for this gesture\n   */\n  constructor(options) {\n    /** Unique name identifying this gesture type */\n    this.name = void 0;\n    /** Whether to prevent default browser action for gesture events */\n    this.preventDefault = void 0;\n    /** Whether to stop propagation of gesture events */\n    this.stopPropagation = void 0;\n    /**\n     * List of gesture names that should prevent this gesture from activating when they are active.\n     */\n    this.preventIf = void 0;\n    /**\n     * Array of keyboard keys that must be pressed for the gesture to be recognized.\n     */\n    this.requiredKeys = void 0;\n    /**\n     * KeyboardManager instance for tracking key presses\n     */\n    this.keyboardManager = void 0;\n    /**\n     * List of pointer types that can trigger this gesture.\n     * If undefined, all pointer types are allowed.\n     */\n    this.pointerMode = void 0;\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    this.customData = {};\n    /** Reference to the singleton PointerManager instance */\n    this.pointerManager = void 0;\n    /** Reference to the singleton ActiveGesturesRegistry instance */\n    this.gesturesRegistry = void 0;\n    /** The DOM element this gesture is attached to */\n    this.element = void 0;\n    /** Stores the active gesture state */\n    this.state = void 0;\n    /** @internal For types. If false enables phases (xStart, x, xEnd) */\n    this.isSinglePhase = void 0;\n    /** @internal For types. The event type this gesture is associated with */\n    this.eventType = void 0;\n    /** @internal For types. The options type for this gesture */\n    this.optionsType = void 0;\n    /** @internal For types. The options that can be changed at runtime */\n    this.mutableOptionsType = void 0;\n    /** @internal For types. The state that can be changed at runtime */\n    this.mutableStateType = void 0;\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  }\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.bind(this));\n    const changeStateEventName = `${this.name}ChangeState`;\n    this.element.addEventListener(changeStateEventName, this.handleStateChange.bind(this));\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  }\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 || this.element.contains(event.target)) {\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   * @returns true if the gesture should be prevented, false otherwise\n   */\n  shouldPreventGesture(element) {\n    // First check if required keyboard keys are pressed\n    if (!this.keyboardManager.areKeysPressed(this.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.bind(this));\n    const changeStateEventName = `${this.name}ChangeState`;\n    this.element.removeEventListener(changeStateEventName, this.handleStateChange.bind(this));\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  constructor() {\n    /** Map of elements to their active gestures */\n    this.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  /**\n   * Create a new KeyboardManager instance\n   */\n  constructor() {\n    this.pressedKeys = new Set();\n    /**\n     * Handle keydown events\n     */\n    this.handleKeyDown = event => {\n      this.pressedKeys.add(event.key);\n    };\n    /**\n     * Handle keyup events\n     */\n    this.handleKeyUp = event => {\n      this.pressedKeys.delete(event.key);\n    };\n    /**\n     * Clear all pressed keys\n     */\n    this.clearKeys = () => {\n      this.pressedKeys.clear();\n    };\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   * 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        return this.pressedKeys.has('Control') || this.pressedKeys.has('Meta');\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  constructor(options) {\n    /** Root element where pointer events are captured */\n    this.root = void 0;\n    /** CSS touch-action property value applied to the root element */\n    this.touchAction = void 0;\n    /** Whether to use passive event listeners */\n    this.passive = void 0;\n    /** Whether to prevent interrupt events like blur or contextmenu */\n    this.preventEventInterruption = true;\n    /** Map of all currently active pointers by their pointerId */\n    this.pointers = new Map();\n    /** Set of registered gesture handlers that receive pointer events */\n    this.gestureHandlers = new Set();\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    this.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     * 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    this.handlePointerEvent = event => {\n      const {\n        type,\n        pointerId\n      } = event;\n\n      // Create or update pointer data\n      if (type === 'pointerdown') {\n        this.pointers.set(pointerId, this.createPointerData(event));\n        // Capture the pointer to track it even when it leaves the element\n        if (event.target instanceof Element) {\n          try {\n            event.target.setPointerCapture(pointerId);\n          } catch (_) {\n            // The target may not support pointer capture\n          }\n        }\n      } else if (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        // Release pointer capture on up or cancel\n        if (event.target instanceof Element) {\n          try {\n            event.target.releasePointerCapture(pointerId);\n          } catch (_) {\n            // The target may not support pointer capture\n          }\n        }\n\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    this.root = options.root ?? document.documentElement;\n    this.touchAction = options.touchAction || 'auto';\n    this.passive = options.passive !== false;\n    this.preventEventInterruption = options.preventEventInterruption !== false;\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   * 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  // eslint-disable-next-line class-methods-use-this\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  /**\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    /** Repository of gesture templates that can be cloned for specific elements */\n    this.gestureTemplates = new Map();\n    /** Maps DOM elements to their active gesture instances */\n    this.elementGestureMap = new Map();\n    this.activeGesturesRegistry = new ActiveGesturesRegistry();\n    this.pointerManager = void 0;\n    this.keyboardManager = new KeyboardManager();\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    });\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    });\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.forEach(name => {\n        const gestureOptions = options?.[name];\n        this.registerSingleGesture(name, element, gestureOptions);\n      });\n      return element;\n    }\n\n    // Handle single gesture name\n    const gestureOptions = options?.[gestureNames];\n    this.registerSingleGesture(gestureNames, element, gestureOptions);\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  }\n}","import { Gesture } from \"./Gesture.js\";\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  constructor(options) {\n    super(options);\n    /** Function to unregister from the PointerManager when destroying this gesture */\n    this.unregisterHandler = null;\n    /** The original target element when the gesture began, used to prevent limbo state if target is removed */\n    this.originalTarget = null;\n    this.optionsType = void 0;\n    this.mutableOptionsType = void 0;\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    this.minPointers = void 0;\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    this.maxPointers = void 0;\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((pointers, event) => this.handlePointerEvent(pointers, event));\n  }\n  updateOptions(options) {\n    super.updateOptions(options);\n    this.minPointers = options.minPointers ?? this.minPointers;\n    this.maxPointers = options.maxPointers ?? this.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 || calculatedTarget.contains(pointer.target)));\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};","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  constructor(options) {\n    super(options);\n    // Pre-bind handlers to this instance to maintain reference equality\n    this.state = {\n      lastPosition: null\n    };\n    this.isSinglePhase = void 0;\n    this.eventType = void 0;\n    this.optionsType = void 0;\n    this.mutableOptionsType = void 0;\n    this.mutableStateType = void 0;\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    this.threshold = void 0;\n    // Store bound event handlers to properly remove them\n    this.handleElementEnterBound = void 0;\n    this.handleElementLeaveBound = void 0;\n    this.handleElementEnterBound = this.handleElementEnter.bind(this);\n    this.handleElementLeaveBound = this.handleElementLeave.bind(this);\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    }, 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.handleElementEnterBound);\n    // @ts-expect-error, PointerEvent is correct.\n    this.element.addEventListener('pointerleave', this.handleElementLeaveBound);\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.handleElementEnterBound);\n    // @ts-expect-error, PointerEvent is correct.\n    this.element.removeEventListener('pointerleave', this.handleElementLeaveBound);\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 (pointersArray.length >= this.minPointers && pointersArray.length <= this.maxPointers) {\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\n    // Make sure we're still within pointer count constraints\n    if (pointersArray.length < this.minPointers || pointersArray.length > this.maxPointers) {\n      return;\n    }\n    if (this.shouldPreventGesture(targetElement)) {\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      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 * The direction of movement for the pan gesture\n * This type defines the detected directions based on the vertical and horizontal components\n * The values can be 'up', 'down', 'left', 'right' or null if not applicable.\n *\n * The null values indicate that the gesture is not moving in that direction.\n */\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  constructor(options) {\n    super(options);\n    this.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    this.isSinglePhase = void 0;\n    this.eventType = void 0;\n    this.optionsType = void 0;\n    this.mutableOptionsType = void 0;\n    this.mutableStateType = void 0;\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    this.threshold = void 0;\n    /**\n     * Allowed directions for the pan gesture\n     * Default allows all directions\n     */\n    this.direction = void 0;\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    }, 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  }\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)) {\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\n    // Check if we have enough pointers and not too many\n    if (relevantPointers.length < this.minPointers || relevantPointers.length > this.maxPointers) {\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 && relevantPointers.length >= this.minPointers) {\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          // If we have less than the minimum required pointers, end the gesture\n          if (relevantPointers.filter(p => p.type !== 'pointerup' && p.type !== 'pointercancel').length < this.minPointers) {\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      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  constructor(options) {\n    super(_extends({}, options, {\n      minPointers: options.minPointers ?? 2\n    }));\n    this.state = {\n      startDistance: 0,\n      lastDistance: 0,\n      lastScale: 1,\n      lastTime: 0,\n      velocity: 0,\n      totalScale: 1,\n      deltaScale: 0\n    };\n    this.isSinglePhase = void 0;\n    this.eventType = void 0;\n    this.optionsType = void 0;\n    this.mutableOptionsType = void 0;\n    this.mutableStateType = void 0;\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    this.threshold = void 0;\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    }, 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)) {\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 && relevantPointers.length >= this.minPointers) {\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 have less than the minimum required pointers, end the gesture\n          if (remainingPointers.length < this.minPointers) {\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      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  constructor(options) {\n    super(options);\n    this.state = {\n      startCentroid: null,\n      lastPosition: null,\n      timerId: null,\n      startTime: 0,\n      pressThresholdReached: false\n    };\n    this.isSinglePhase = void 0;\n    this.eventType = void 0;\n    this.optionsType = void 0;\n    this.mutableOptionsType = void 0;\n    this.mutableStateType = void 0;\n    /**\n     * Duration in milliseconds required to hold before the press gesture is recognized\n     */\n    this.duration = void 0;\n    /**\n     * Maximum distance a pointer can move for a gesture to still be considered a press\n     */\n    this.maxDistance = void 0;\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    }, 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)) {\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\n    // Check if we have enough pointers and not too many\n    if (relevantPointers.length < this.minPointers || relevantPointers.length > this.maxPointers) {\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      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 * 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  constructor(options) {\n    super(options);\n    this.state = {\n      startCentroid: null,\n      currentTapCount: 0,\n      lastTapTime: 0,\n      lastPosition: null\n    };\n    this.isSinglePhase = void 0;\n    this.eventType = void 0;\n    this.optionsType = void 0;\n    this.mutableOptionsType = void 0;\n    this.mutableStateType = void 0;\n    /**\n     * Maximum distance a pointer can move for a gesture to still be considered a tap\n     */\n    this.maxDistance = void 0;\n    /**\n     * Number of consecutive taps to detect\n     */\n    this.taps = void 0;\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    }, 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\n    // Check if we have enough pointers and not too many\n    if (this.shouldPreventGesture(targetElement) || relevantPointers.length < this.minPointers || relevantPointers.length > this.maxPointers) {\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      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        detail: customEventData\n      });\n      element.dispatchEvent(domEvent);\n    }\n    this.resetState();\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  constructor(options) {\n    super(options);\n    this.state = {\n      totalDeltaX: 0,\n      totalDeltaY: 0,\n      totalDeltaZ: 0\n    };\n    this.isSinglePhase = void 0;\n    this.eventType = void 0;\n    this.optionsType = void 0;\n    this.mutableOptionsType = void 0;\n    this.mutableStateType = void 0;\n    /**\n     * Scaling factor for delta values\n     * Values > 1 increase sensitivity, values < 1 decrease sensitivity\n     */\n    this.sensitivity = void 0;\n    /**\n     * Maximum value for totalDelta values\n     * Limits how large the accumulated wheel deltas can be\n     */\n    this.max = void 0;\n    /**\n     * Minimum value for totalDelta values\n     * Sets a lower bound for accumulated wheel deltas\n     */\n    this.min = void 0;\n    /**\n     * Initial value for totalDelta values\n     * Sets the starting value for delta trackers\n     */\n    this.initialDelta = void 0;\n    /**\n     * Whether to invert the direction of delta changes\n     * When true, reverses the sign of deltaX, deltaY, and deltaZ values\n     */\n    this.invert = void 0;\n    // Store bound event handlers to properly remove them\n    this.handleWheelEventBound = void 0;\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    this.handleWheelEventBound = this.handleWheelEvent.bind(this);\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      pointerMode: [...this.pointerMode],\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.handleWheelEventBound);\n  }\n  destroy() {\n    // Remove the element-specific event listener\n    // @ts-expect-error, WheelEvent is correct.\n    this.element.removeEventListener('wheel', this.handleWheelEventBound);\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)) {\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      detail: customEventData\n    });\n    this.element.dispatchEvent(domEvent);\n  }\n}","'use client';\n\nimport * as React from 'react';\nimport { GestureManager, MoveGesture, PanGesture, PinchGesture, PressGesture, TapGesture, TurnWheelGesture } from '@mui/x-internal-gestures/core';\nconst preventDefault = event => event.preventDefault();\nexport const useChartInteractionListener = ({\n  svgRef\n}) => {\n  React.useEffect(() => {\n    const svg = svgRef.current;\n    if (!svg) {\n      return undefined;\n    }\n    const gestureManager = new GestureManager({\n      gestures: [new PanGesture({\n        name: 'pan',\n        threshold: 0,\n        maxPointers: 1\n      }), new MoveGesture({\n        name: 'move',\n        preventIf: ['pan', 'pinch'] // Prevent move gesture when pan is active\n      }), new PinchGesture({\n        name: 'pinch',\n        threshold: 5,\n        preventIf: ['pan']\n      }), new TurnWheelGesture({\n        name: 'turnWheel',\n        sensitivity: 0.01,\n        initialDelta: 1\n      }), new TapGesture({\n        name: 'tap',\n        maxDistance: 10,\n        preventIf: ['pan', 'pinch']\n      }), new PressGesture({\n        name: 'quickPress',\n        duration: 50,\n        maxDistance: 10\n      })]\n    });\n    gestureManager.registerElement(['pan', 'move', 'pinch', 'turnWheel', 'tap', 'quickPress'], svg);\n    return () => {\n      // Cleanup gesture manager\n      gestureManager.destroy();\n    };\n  }, [svgRef]);\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  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    }\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 { ChartStore } from \"../plugins/utils/ChartStore.js\";\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 ChartStore(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  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) => {\n  if (!zoom) {\n    return undefined;\n  }\n  if (zoom === true) {\n    return _extends({\n      axisId,\n      axisDirection\n    }, defaultZoomOptions);\n  }\n  return _extends({\n    axisId,\n    axisDirection\n  }, defaultZoomOptions, 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')\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')\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}","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","import {range as sequence} from \"d3-array\";\nimport {initRange} from \"./init.js\";\nimport ordinal from \"./ordinal.js\";\n\nexport default function band() {\n  var scale = ordinal().unknown(undefined),\n      domain = scale.domain,\n      ordinalRange = scale.range,\n      r0 = 0,\n      r1 = 1,\n      step,\n      bandwidth,\n      round = false,\n      paddingInner = 0,\n      paddingOuter = 0,\n      align = 0.5;\n\n  delete scale.unknown;\n\n  function rescale() {\n    var n = domain().length,\n        reverse = r1 < r0,\n        start = reverse ? r1 : r0,\n        stop = reverse ? r0 : r1;\n    step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n    if (round) step = Math.floor(step);\n    start += (stop - start - step * (n - paddingInner)) * align;\n    bandwidth = step * (1 - paddingInner);\n    if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n    var values = sequence(n).map(function(i) { return start + step * i; });\n    return ordinalRange(reverse ? values.reverse() : values);\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain(_), rescale()) : domain();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? ([r0, r1] = _, r0 = +r0, r1 = +r1, rescale()) : [r0, r1];\n  };\n\n  scale.rangeRound = function(_) {\n    return [r0, r1] = _, r0 = +r0, r1 = +r1, round = true, rescale();\n  };\n\n  scale.bandwidth = function() {\n    return bandwidth;\n  };\n\n  scale.step = function() {\n    return step;\n  };\n\n  scale.round = function(_) {\n    return arguments.length ? (round = !!_, rescale()) : round;\n  };\n\n  scale.padding = function(_) {\n    return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner;\n  };\n\n  scale.paddingInner = function(_) {\n    return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner;\n  };\n\n  scale.paddingOuter = function(_) {\n    return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter;\n  };\n\n  scale.align = function(_) {\n    return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n  };\n\n  scale.copy = function() {\n    return band(domain(), [r0, r1])\n        .round(round)\n        .paddingInner(paddingInner)\n        .paddingOuter(paddingOuter)\n        .align(align);\n  };\n\n  return initRange.apply(rescale(), arguments);\n}\n\nfunction pointish(scale) {\n  var copy = scale.copy;\n\n  scale.padding = scale.paddingOuter;\n  delete scale.paddingInner;\n  delete scale.paddingOuter;\n\n  scale.copy = function() {\n    return pointish(copy());\n  };\n\n  return scale;\n}\n\nexport function point() {\n  return pointish(band.apply(null, arguments).paddingInner(1));\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, 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","/**\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      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}\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 */","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) {\n  const {\n    tickMaxStep,\n    tickMinStep,\n    tickNumber,\n    range,\n    domain\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 ?? Math.floor(Math.abs(range[1] - range[0]) / 50);\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}","import { scaleLog, scalePow, scaleSqrt, scaleTime, scaleUtc, scaleLinear } from '@mui/x-charts-vendor/d3-scale';\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    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 axis The axis configuration.\n * @param range The range for the time scale.\n * @returns A formatter function for date values.\n */\nexport function createDateFormatter(axis, range) {\n  const timeScale = scaleTime(axis.data, range);\n  return (v, {\n    location\n  }) => location === 'tick' ? timeScale.tickFormat(axis.tickNumber)(v) : `${v.toLocaleString()}`;\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};","let cartesianInstance;\nlet polarInstance;\nclass CartesianSeriesTypes {\n  constructor() {\n    this.types = new Set();\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  constructor() {\n    this.types = new Set();\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}","import { isCartesianSeriesType } from \"../../../isCartesian.js\";\nconst axisExtremumCallback = (acc, 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  const [minChartTypeData, maxChartTypeData] = getter?.({\n    series,\n    axis,\n    axisIndex,\n    isDefaultAxis: axisIndex === 0,\n    getFilters\n  }) ?? [Infinity, -Infinity];\n  const [minData, maxData] = acc;\n  return [Math.min(minChartTypeData, minData), Math.max(maxChartTypeData, maxData)];\n};\nexport const getAxisExtremum = (axis, axisDirection, seriesConfig, axisIndex, formattedSeries, getFilters) => {\n  const charTypes = Object.keys(seriesConfig).filter(isCartesianSeriesType);\n  const extremums = charTypes.reduce((acc, charType) => axisExtremumCallback(acc, charType, axis, axisDirection, seriesConfig, axisIndex, formattedSeries, getFilters), [Infinity, -Infinity]);\n  if (Number.isNaN(extremums[0]) || Number.isNaN(extremums[1])) {\n    return [Infinity, -Infinity];\n  }\n  return extremums;\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 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 _extends from \"@babel/runtime/helpers/esm/extends\";\nimport { scaleBand, scalePoint } from '@mui/x-charts-vendor/d3-scale';\nimport { createScalarFormatter } from \"../../../defaultValueFormatters.js\";\nimport { isBandScaleConfig, isPointScaleConfig } from \"../../../../models/axis.js\";\nimport { getColorScale, getOrdinalColorScale } from \"../../../colorScale.js\";\nimport { getTickNumber, scaleTickNumberByRange } from \"../../../ticks.js\";\nimport { getScale } from \"../../../getScale.js\";\nimport { isDateData, createDateFormatter } from \"../../../dateHelpers.js\";\nimport { zoomScaleRange } from \"./zoom.js\";\nimport { getAxisExtremum } from \"./getAxisExtremum.js\";\nimport { getAxisTriggerTooltip } from \"./getAxisTriggerTooltip.js\";\nimport { getAxisDomainLimit } from \"./getAxisDomainLimit.js\";\nfunction getRange(drawingArea, axisDirection,\n// | 'rotation' | 'radius',\naxis) {\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}\nconst DEFAULT_CATEGORY_GAP_RATIO = 0.2;\nconst DEFAULT_BAR_GAP_RATIO = 0.1;\nexport function computeAxisValue({\n  drawingArea,\n  formattedSeries,\n  axis: allAxis,\n  seriesConfig,\n  axisDirection,\n  zoomMap,\n  zoomOptions,\n  getFilters,\n  preferStrictDomainInLineCharts\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, axisIndex) => {\n    const axis = eachAxis;\n    const zoomOption = zoomOptions?.[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);\n    const [minData, maxData] = getAxisExtremum(axis, axisDirection, seriesConfig, axisIndex, formattedSeries, zoom === undefined && !zoomOption ? getFilters : undefined // Do not apply filtering if zoom is already defined.\n    );\n    const triggerTooltip = !axis.ignoreTooltip && axisIdsTriggeringTooltip.has(axis.id);\n    const data = axis.data ?? [];\n    if (isBandScaleConfig(axis)) {\n      const categoryGapRatio = axis.categoryGapRatio ?? DEFAULT_CATEGORY_GAP_RATIO;\n      const barGapRatio = axis.barGapRatio ?? DEFAULT_BAR_GAP_RATIO;\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      const zoomedRange = zoomScaleRange(scaleRange, zoomRange);\n      completeAxis[axis.id] = _extends({\n        offset: 0,\n        height: 0,\n        categoryGapRatio,\n        barGapRatio,\n        triggerTooltip\n      }, axis, {\n        data,\n        scale: scaleBand(axis.data, zoomedRange).paddingInner(categoryGapRatio).paddingOuter(categoryGapRatio / 2),\n        tickNumber: axis.data.length,\n        colorScale: axis.colorMap && (axis.colorMap.type === 'ordinal' ? getOrdinalColorScale(_extends({\n          values: axis.data\n        }, axis.colorMap)) : getColorScale(axis.colorMap))\n      });\n      if (isDateData(axis.data)) {\n        const dateFormatter = createDateFormatter(axis, scaleRange);\n        completeAxis[axis.id].valueFormatter = axis.valueFormatter ?? dateFormatter;\n      }\n    }\n    if (isPointScaleConfig(axis)) {\n      const scaleRange = axisDirection === 'y' ? [...range].reverse() : range;\n      const zoomedRange = zoomScaleRange(scaleRange, zoomRange);\n      completeAxis[axis.id] = _extends({\n        offset: 0,\n        height: 0,\n        triggerTooltip\n      }, axis, {\n        data,\n        scale: scalePoint(axis.data, zoomedRange),\n        tickNumber: axis.data.length,\n        colorScale: axis.colorMap && (axis.colorMap.type === 'ordinal' ? getOrdinalColorScale(_extends({\n          values: axis.data\n        }, axis.colorMap)) : getColorScale(axis.colorMap))\n      });\n      if (isDateData(axis.data)) {\n        const dateFormatter = createDateFormatter(axis, scaleRange);\n        completeAxis[axis.id].valueFormatter = axis.valueFormatter ?? dateFormatter;\n      }\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 scaleType = axis.scaleType ?? 'linear';\n    const domainLimit = preferStrictDomainInLineCharts ? getAxisDomainLimit(axis, axisDirection, axisIndex, formattedSeries) : axis.domainLimit ?? 'nice';\n    const axisExtremums = [axis.min ?? minData, axis.max ?? maxData];\n    if (typeof domainLimit === 'function') {\n      const {\n        min,\n        max\n      } = domainLimit(minData, maxData);\n      axisExtremums[0] = min;\n      axisExtremums[1] = max;\n    }\n    const rawTickNumber = getTickNumber(_extends({}, axis, {\n      range,\n      domain: axisExtremums\n    }));\n    const tickNumber = scaleTickNumberByRange(rawTickNumber, zoomRange);\n    const zoomedRange = zoomScaleRange(range, zoomRange);\n    const scale = getScale(scaleType, axisExtremums, zoomedRange);\n    const finalScale = domainLimit === 'nice' ? scale.nice(rawTickNumber) : scale;\n    const [minDomain, maxDomain] = finalScale.domain();\n    const domain = [axis.min ?? minDomain, axis.max ?? maxDomain];\n    completeAxis[axis.id] = _extends({\n      offset: 0,\n      height: 0,\n      triggerTooltip\n    }, axis, {\n      data,\n      scaleType: scaleType,\n      scale: finalScale.domain(domain),\n      tickNumber,\n      colorScale: axis.colorMap && getColorScale(axis.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\";\nimport { getAxisExtremum } from \"./getAxisExtremum.js\";\nimport { getScale } from \"../../../getScale.js\";\nexport function createAxisFilterMapper({\n  zoomMap,\n  zoomOptions,\n  seriesConfig,\n  formattedSeries,\n  direction\n}) {\n  return (axis, axisIndex) => {\n    const zoomOption = zoomOptions[axis.id];\n    if (!zoomOption || zoomOption.filterMode !== 'discard') {\n      return null;\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      return null;\n    }\n    let extremums = [];\n    const scaleType = axis.scaleType;\n    if (scaleType === 'point' || scaleType === 'band') {\n      extremums = [0, (axis.data?.length ?? 1) - 1];\n    } else {\n      extremums = getAxisExtremum(axis, direction, seriesConfig, axisIndex, formattedSeries);\n    }\n    let min;\n    let max;\n    const continuousScaleType = !scaleType || scaleType === 'band' || scaleType === 'point' ? 'linear' : scaleType;\n    [min, max] = getScale(continuousScaleType, extremums, [0, 100]).nice().domain();\n    min = min instanceof Date ? min.getTime() : min;\n    max = max instanceof Date ? max.getTime() : max;\n    const minVal = min + zoom.start * (max - min) / 100;\n    const maxVal = min + zoom.end * (max - min) / 100;\n    return (value, dataIndex) => {\n      const val = value[direction] ?? axis.data?.[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      if (axis.scaleType === 'point' || axis.scaleType === 'band' || typeof val === 'string') {\n        return dataIndex >= minVal && dataIndex <= maxVal;\n      }\n      return val >= minVal && val <= maxVal;\n    };\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  } = v;\n  const defaultizedZoom = defaultizeZoom(zoom, axisId, axisDirection);\n  if (defaultizedZoom) {\n    acc[axisId] = defaultizedZoom;\n  }\n  return acc;\n}, {});","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport { selectorChartDrawingArea } from \"../../corePlugins/useChartDimensions/index.js\";\nimport { selectorChartSeriesConfig, selectorChartSeriesProcessed } from \"../../corePlugins/useChartSeries/index.js\";\nimport { createSelector } from \"../../utils/selectors.js\";\nimport { computeAxisValue } from \"./computeAxisValue.js\";\nimport { createAxisFilterMapper, createGetAxisFilters } from \"./createAxisFilterMapper.js\";\nimport { createZoomLookup } from \"./createZoomLookup.js\";\nimport { selectorChartRawXAxis, selectorChartRawYAxis } from \"./useChartCartesianAxisLayout.selectors.js\";\nimport { selectorPreferStrictDomainInLineCharts } from \"../../corePlugins/useChartExperimentalFeature/index.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;\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 = createSelector([selectorChartZoomState], zoom => zoom?.zoomData && createZoomMap(zoom?.zoomData));\nexport const selectorChartZoomOptionsLookup = createSelector([selectorChartRawXAxis, selectorChartRawYAxis], (xAxis, yAxis) => _extends({}, createZoomLookup('x')(xAxis), createZoomLookup('y')(yAxis)));\nexport const selectorChartAxisZoomOptionsLookup = createSelector([selectorChartZoomOptionsLookup, (_, axisId) => axisId], (axisLookup, axisId) => axisLookup[axisId]);\nconst selectorChartXFilter = createSelector([selectorChartZoomMap, selectorChartZoomOptionsLookup, selectorChartSeriesConfig, selectorChartSeriesProcessed], (zoomMap, zoomOptions, seriesConfig, formattedSeries) => zoomMap && zoomOptions && createAxisFilterMapper({\n  zoomMap,\n  zoomOptions,\n  seriesConfig,\n  formattedSeries,\n  direction: 'x'\n}));\nconst selectorChartYFilter = createSelector([selectorChartZoomMap, selectorChartZoomOptionsLookup, selectorChartSeriesConfig, selectorChartSeriesProcessed], (zoomMap, zoomOptions, seriesConfig, formattedSeries) => zoomMap && zoomOptions && createAxisFilterMapper({\n  zoomMap,\n  zoomOptions,\n  seriesConfig,\n  formattedSeries,\n  direction: 'y'\n}));\nexport const selectorChartZoomAxisFilters = createSelector([selectorChartXFilter, selectorChartYFilter, selectorChartRawXAxis, selectorChartRawYAxis], (xMapper, yMapper, xAxis, yAxis) => {\n  if (xMapper === undefined || yMapper === undefined) {\n    // Early return if there is no zoom.\n    return undefined;\n  }\n  const xFilters = xAxis?.reduce((acc, axis, index) => {\n    const filter = xMapper(axis, index);\n    if (filter !== null) {\n      acc[axis.id] = filter;\n    }\n    return acc;\n  }, {});\n  const yFilters = yAxis?.reduce((acc, axis, index) => {\n    const filter = yMapper(axis, index);\n    if (filter !== null) {\n      acc[axis.id] = filter;\n    }\n    return acc;\n  }, {});\n  if (Object.keys(xFilters ?? {}).length === 0 && Object.keys(yFilters ?? {}).length === 0) {\n    return undefined;\n  }\n  return createGetAxisFilters(_extends({}, xFilters, yFilters));\n});\n\n/**\n * The only interesting selectors that merge axis data and zoom if provided.\n */\n\nexport const selectorChartXAxis = createSelector([selectorChartRawXAxis, selectorChartDrawingArea, selectorChartSeriesProcessed, selectorChartSeriesConfig, selectorChartZoomMap, selectorChartZoomOptionsLookup, selectorChartZoomAxisFilters, selectorPreferStrictDomainInLineCharts], (axis, drawingArea, formattedSeries, seriesConfig, zoomMap, zoomOptions, getFilters, preferStrictDomainInLineCharts) => computeAxisValue({\n  drawingArea,\n  formattedSeries,\n  axis,\n  seriesConfig,\n  axisDirection: 'x',\n  zoomMap,\n  zoomOptions,\n  getFilters,\n  preferStrictDomainInLineCharts\n}));\nexport const selectorChartYAxis = createSelector([selectorChartRawYAxis, selectorChartDrawingArea, selectorChartSeriesProcessed, selectorChartSeriesConfig, selectorChartZoomMap, selectorChartZoomOptionsLookup, selectorChartZoomAxisFilters, selectorPreferStrictDomainInLineCharts], (axis, drawingArea, formattedSeries, seriesConfig, zoomMap, zoomOptions, getFilters, preferStrictDomainInLineCharts) => computeAxisValue({\n  drawingArea,\n  formattedSeries,\n  axis,\n  seriesConfig,\n  axisDirection: 'y',\n  zoomMap,\n  zoomOptions,\n  getFilters,\n  preferStrictDomainInLineCharts\n}));\nexport const selectorChartAxis = createSelector([selectorChartXAxis, selectorChartYAxis, (_, axisId) => axisId], (xAxes, yAxes, axisId) => xAxes?.axis[axisId] ?? yAxes?.axis[axisId]);\nexport const selectorChartRawAxis = createSelector([selectorChartRawXAxis, selectorChartRawYAxis, (state, axisId) => axisId], (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});","export function isBandScale(scale) {\n  return scale.bandwidth !== undefined;\n}","import { isBandScale } from \"../../../isBandScale.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 (!isBandScale(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(axisConfig, pointerValue, dataIndex) {\n  const {\n    scale,\n    data: axisData\n  } = axisConfig;\n  if (!isBandScale(scale)) {\n    const value = scale.invert(pointerValue);\n    if (dataIndex < 0) {\n      return value;\n    }\n    return axisData[dataIndex];\n  }\n  if (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;","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 _extends from \"@babel/runtime/helpers/esm/extends\";\nimport useEventCallback from '@mui/utils/useEventCallback';\nimport { fastObjectShallowCompare } from '@mui/x-internals/fastObjectShallowCompare';\nexport const useChartInteraction = ({\n  store\n}) => {\n  const cleanInteraction = useEventCallback(function cleanInteraction() {\n    store.update(prev => {\n      return _extends({}, prev, {\n        interaction: {\n          pointer: null,\n          item: null\n        }\n      });\n    });\n  });\n  const removeItemInteraction = useEventCallback(function removeItemInteraction(itemToRemove) {\n    store.update(prev => {\n      const prevItem = prev.interaction.item;\n      if (!itemToRemove) {\n        // Remove without taking care of the current item\n        return prevItem === null ? prev : _extends({}, prev, {\n          interaction: _extends({}, prev.interaction, {\n            item: null\n          })\n        });\n      }\n      if (prevItem === null || Object.keys(itemToRemove).some(key => itemToRemove[key] !== prevItem[key])) {\n        // The current item is already different from the one to remove. No need to clean it.\n        return prev;\n      }\n      return _extends({}, prev, {\n        interaction: _extends({}, prev.interaction, {\n          item: null\n        })\n      });\n    });\n  });\n  const setItemInteraction = useEventCallback(function setItemInteraction(newItem) {\n    store.update(prev => {\n      if (fastObjectShallowCompare(prev.interaction.item, newItem)) {\n        return prev;\n      }\n      return _extends({}, prev, {\n        interaction: _extends({}, prev.interaction, {\n          item: newItem\n        })\n      });\n    });\n  });\n  const setPointerCoordinate = useEventCallback(function setPointerCoordinate(coordinate) {\n    store.update(prev => _extends({}, prev, {\n      interaction: _extends({}, prev.interaction, {\n        pointer: coordinate\n      })\n    }));\n  });\n  return {\n    instance: {\n      cleanInteraction,\n      setItemInteraction,\n      removeItemInteraction,\n      setPointerCoordinate\n    }\n  };\n};\nuseChartInteraction.getInitialState = () => ({\n  interaction: {\n    item: null,\n    pointer: null\n  }\n});\nuseChartInteraction.params = {};","import { createSelector } from \"../../utils/selectors.js\";\nconst selectInteraction = state => state.interaction;\nexport const selectorChartsInteractionIsInitialized = createSelector([selectInteraction], interaction => interaction !== undefined);\nexport const selectorChartsInteractionItem = createSelector([selectInteraction], interaction => interaction?.item ?? null);\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 selectorChartsInteractionItemIsDefined = createSelector([selectorChartsInteractionItem], item => item !== null);","/**\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 } from \"../../utils/selectors.js\";\nimport { selectorChartsInteractionPointerX, selectorChartsInteractionPointerY } from \"../useChartInteraction/useChartInteraction.selectors.js\";\nimport { getAxisIndex, getAxisValue } from \"./getAxisValue.js\";\nimport { selectorChartXAxis, selectorChartYAxis } from \"./useChartCartesianAxisRendering.selectors.js\";\nconst optionalGetAxisId = (_, id) => id;\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, optionalGetAxisId], selectChartsInteractionAxisIndex);\nexport const selectorChartsInteractionYAxisIndex = createSelector([selectorChartsInteractionPointerY, selectorChartYAxis, optionalGetAxisId], 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) => getAxisValue(axes.axis[id], value, indexes[axisIndex])) : getAxisValue(axes.axis[ids], value, indexes);\n}\nexport const selectorChartsInteractionXAxisValue = createSelector([selectorChartsInteractionPointerX, selectorChartXAxis, selectorChartsInteractionXAxisIndex, optionalGetAxisId], (x, xAxes, xIndex, id) => {\n  if (x === null || xIndex === null || xAxes.axisIds.length === 0) {\n    return null;\n  }\n  return valueGetter(x, xAxes, xIndex, id);\n});\nexport const selectorChartsInteractionYAxisValue = createSelector([selectorChartsInteractionPointerY, selectorChartYAxis, selectorChartsInteractionYAxisIndex, optionalGetAxisId], (y, yAxes, yIndex, id) => {\n  if (y === null || yIndex === null || yAxes.axisIds.length === 0) {\n    return null;\n  }\n  return valueGetter(y, yAxes, yIndex, id);\n});\n\n/**\n * Get x-axis ids and corresponding data index that should be display in the tooltip.\n */\nexport const selectorChartsInteractionTooltipXAxes = createSelector([selectorChartsInteractionPointerX, selectorChartXAxis], (value, axes) => {\n  if (value === null) {\n    return [];\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  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});\n\n/**\n * Get y-axis ids and corresponding data index that should be display in the tooltip.\n */\nexport const selectorChartsInteractionTooltipYAxes = createSelector([selectorChartsInteractionPointerY, selectorChartYAxis], (value, axes) => {\n  if (value === null) {\n    return [];\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  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});\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);","'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\n/* eslint-disable react-compiler/react-compiler */\nimport * as React from 'react';\nimport useLazyRef from '@mui/utils/useLazyRef';\nconst noop = () => {};\nexport function useLazySelectorEffect(store, selector, effect,\n/**\n * If true, the selector will be ignored.\n */\nskip) {\n  const instance = useLazyRef(initialize, {\n    store,\n    selector,\n    skip\n  }).current;\n  instance.effect = effect;\n  // eslint-disable-next-line react-hooks/exhaustive-deps\n  React.useEffect(instance.onMount(skip), [skip]);\n}\n\n// `useLazyRef` typings are incorrect, `params` should not be optional\nfunction initialize(params) {\n  const {\n    store,\n    selector,\n    skip: initialSkip\n  } = params;\n  let isRunning = false;\n  let previousState;\n\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  const subscribe = () => {\n    // eslint-disable-next-line @typescript-eslint/no-use-before-define\n    instance.dispose ??= store.subscribe(state => {\n      const nextState = selector(state);\n      // eslint-disable-next-line @typescript-eslint/no-use-before-define\n      instance.effect(previousState, nextState);\n      previousState = nextState;\n    });\n  };\n  const instance = {\n    effect: noop,\n    dispose: null,\n    onMount: skip => () => {\n      if (skip) {\n        return undefined;\n      }\n      if (!isRunning) {\n        // Initialize values\n        isRunning = true;\n        previousState = selector(store.value);\n      }\n      subscribe();\n      return () => {\n        instance.dispose?.();\n        instance.dispose = null;\n      };\n    }\n  };\n  if (!initialSkip) {\n    // Initialize values\n    isRunning = true;\n    previousState = selector(store.value);\n    subscribe();\n  }\n  return instance;\n}","'use client';\n\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport useEnhancedEffect from '@mui/utils/useEnhancedEffect';\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 { useLazySelectorEffect } from \"../../utils/useLazySelectorEffect.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.update(prevState => {\n        if (prevState.controlledCartesianAxisHighlight === params.highlightedAxis) {\n          return prevState;\n        }\n        return _extends({}, prevState, {\n          controlledCartesianAxisHighlight: params.highlightedAxis\n        });\n      });\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.update(prev => _extends({}, prev, {\n      cartesianAxis: _extends({}, prev.cartesianAxis, {\n        x: defaultizeXAxis(xAxis, dataset),\n        y: defaultizeYAxis(yAxis, dataset)\n      })\n    }));\n  }, [seriesConfig, drawingArea, xAxis, yAxis, dataset, store]);\n  const usedXAxis = xAxisIds[0];\n  const usedYAxis = yAxisIds[0];\n  useLazySelectorEffect(store, selectorChartAxisInteraction, (prevAxisInteraction, nextAxisInteraction) => {\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  }, !onHighlightedAxisChange);\n  React.useEffect(() => {\n    const element = svgRef.current;\n    if (!isInteractionEnabled || !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]);\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});","'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.update(prev => _extends({}, prev, {\n      zAxis: getZAxisState(zAxis, dataset)\n    }));\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 \"../../utils/selectors.js\";\nconst selectRootState = state => state;\nexport const selectorChartZAxis = createSelector([selectRootState], state => state.zAxis);","import _extends from \"@babel/runtime/helpers/esm/extends\";\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    store.update(prevState => prevState.highlight.item === params.highlightedItem ? prevState : _extends({}, prevState, {\n      highlight: _extends({}, prevState.highlight, {\n        item: params.highlightedItem\n      })\n    }));\n  }, [store, params.highlightedItem]);\n  const clearHighlight = useEventCallback(() => {\n    params.onHighlightChange?.(null);\n    store.update(prev => _extends({}, prev, {\n      highlight: {\n        item: null\n      }\n    }));\n  });\n  const setHighlight = useEventCallback(newItem => {\n    const prevItem = store.getSnapshot().highlight.item;\n    if (fastObjectShallowCompare(prevItem, newItem)) {\n      return;\n    }\n    params.onHighlightChange?.(newItem);\n    store.update(prev => _extends({}, prev, {\n      highlight: {\n        item: newItem\n      }\n    }));\n  });\n  return {\n    instance: {\n      clearHighlight,\n      setHighlight\n    }\n  };\n};\nuseChartHighlight.getDefaultizedParams = ({\n  params\n}) => _extends({}, params, {\n  highlightedItem: params.highlightedItem ?? null\n});\nuseChartHighlight.getInitialState = params => ({\n  highlight: {\n    item: params.highlightedItem\n  }\n});\nuseChartHighlight.params = {\n  highlightedItem: true,\n  onHighlightChange: true\n};","const 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  const minX = Math.min(...(data ?? []));\n  const maxX = Math.max(...(data ?? []));\n  return [minX, maxX];\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  });\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          if (typeof value !== 'number') {\n            if (process.env.NODE_ENV !== 'production') {\n              if (value !== null) {\n                warnOnce([`MUI X Charts: your dataset key \"${dataKey}\" is used for plotting bars, but contains nonnumerical elements.`, 'Bar plots only support numbers and null values.']);\n              }\n            }\n            return null;\n          }\n          return value;\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;","const 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  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 ? series.color : valueColorScale(value);\n      if (color === null) {\n        return series.color;\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 ? series.color : bandColorScale(value);\n      if (color === null) {\n        return series.color;\n      }\n      return color;\n    };\n  }\n  return () => series.color;\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;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nconst getSeriesWithDefaultValues = (seriesData, seriesIndex, colors) => {\n  return _extends({\n    id: seriesData.id ?? `auto-generated-id-${seriesIndex}`,\n    color: colors[seriesIndex % colors.length]\n  }, seriesData);\n};\nexport default getSeriesWithDefaultValues;","import { getExtremumX, getExtremumY } from \"./extremums.js\";\nimport seriesProcessor from \"./seriesProcessor.js\";\nimport legendGetter from \"./legend.js\";\nimport getColor from \"./getColor.js\";\nimport tooltipGetter, { axisTooltipGetter } from \"./tooltip.js\";\nimport getSeriesWithDefaultValues from \"./getSeriesWithDefaultValues.js\";\nexport const seriesConfig = {\n  seriesProcessor,\n  colorProcessor: getColor,\n  legendGetter,\n  tooltipGetter,\n  axisTooltipGetter,\n  xExtremumGetter: getExtremumX,\n  yExtremumGetter: getExtremumY,\n  getSeriesWithDefaultValues\n};","const mergeMinMax = (acc, val) => {\n  return [val[0] === null ? acc[0] : Math.min(acc[0], val[0]), val[1] === null ? acc[1] : Math.max(acc[1], val[1])];\n};\nexport const getExtremumX = params => {\n  const {\n    series,\n    axis,\n    isDefaultAxis,\n    getFilters\n  } = params;\n  return Object.keys(series).filter(seriesId => {\n    const axisId = series[seriesId].xAxisId;\n    return axisId === axis.id || axisId === undefined && isDefaultAxis;\n  }).reduce((acc, seriesId) => {\n    const filter = getFilters?.({\n      currentAxisId: axis.id,\n      isDefaultAxis,\n      seriesXAxisId: series[seriesId].xAxisId,\n      seriesYAxisId: series[seriesId].yAxisId\n    });\n    const seriesMinMax = series[seriesId].data?.reduce((accSeries, d, dataIndex) => {\n      if (filter && !filter(d, dataIndex)) {\n        return accSeries;\n      }\n      return mergeMinMax(accSeries, [d.x, d.x]);\n    }, [Infinity, -Infinity]);\n    return mergeMinMax(acc, seriesMinMax ?? [Infinity, -Infinity]);\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 axisId = series[seriesId].yAxisId;\n    return axisId === axis.id || axisId === undefined && isDefaultAxis;\n  }).reduce((acc, seriesId) => {\n    const filter = getFilters?.({\n      currentAxisId: axis.id,\n      isDefaultAxis,\n      seriesXAxisId: series[seriesId].xAxisId,\n      seriesYAxisId: series[seriesId].yAxisId\n    });\n    const seriesMinMax = series[seriesId].data?.reduce((accSeries, d, dataIndex) => {\n      if (filter && !filter(d, dataIndex)) {\n        return accSeries;\n      }\n      return mergeMinMax(accSeries, [d.y, d.y]);\n    }, [Infinity, -Infinity]);\n    return mergeMinMax(acc, seriesMinMax ?? [Infinity, -Infinity]);\n  }, [Infinity, -Infinity]);\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', 'id'].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;","const getColor = (series, xAxis, yAxis, zAxis) => {\n  const zColorScale = zAxis?.colorScale;\n  const yColorScale = yAxis?.colorScale;\n  const xColorScale = xAxis?.colorScale;\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 ? series.color : zColorScale(value.z);\n      if (color === null) {\n        return series.color;\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 ? series.color : yColorScale(value.y);\n      if (color === null) {\n        return series.color;\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 ? series.color : xColorScale(value.x);\n      if (color === null) {\n        return series.color;\n      }\n      return color;\n    };\n  }\n  return () => series.color;\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({\n    id: seriesData.id ?? `auto-generated-id-${seriesIndex}`,\n    color: colors[seriesIndex % colors.length]\n  }, seriesData);\n};\nexport default getSeriesWithDefaultValues;","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\";\nexport const seriesConfig = {\n  seriesProcessor,\n  colorProcessor: getColor,\n  legendGetter,\n  tooltipGetter,\n  xExtremumGetter: getExtremumX,\n  yExtremumGetter: getExtremumY,\n  getSeriesWithDefaultValues\n};","export const getExtremumX = params => {\n  const {\n    axis\n  } = params;\n  const minX = Math.min(...(axis.data ?? []));\n  const maxX = Math.max(...(axis.data ?? []));\n  return [minX, maxX];\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\";\nexport function defaultizeValueFormatter(series, defaultValueFormatter) {\n  const defaultizedSeries = {};\n  Object.keys(series).forEach(seriesId => {\n    defaultizedSeries[seriesId] = _extends({}, series[seriesId], {\n      valueFormatter: series[seriesId].valueFormatter ?? defaultValueFormatter\n    });\n  });\n  return defaultizedSeries;\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\";\nimport { defaultizeValueFormatter } from \"../../internals/defaultizeValueFormatter.js\";\n// For now it's a copy past of bar charts formatter, but maybe will diverge later\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  });\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          if (typeof value !== 'number') {\n            if (process.env.NODE_ENV !== 'production') {\n              if (value !== null) {\n                warnOnce([`MUI X Charts: Your dataset key \"${dataKey}\" is used for plotting line, but contains nonnumerical elements.`, 'Line plots only support numbers and null values.']);\n              }\n            }\n            return null;\n          }\n          return value;\n        }) : series[id].data,\n        stackedData: stackedSeries[index].map(([a, b]) => [a, b])\n      });\n    });\n  });\n  return {\n    seriesOrder,\n    stackingGroups,\n    series: defaultizeValueFormatter(completedSeries, v => v == null ? '' : v.toLocaleString())\n  };\n};\nexport default seriesProcessor;","const getColor = (series, xAxis, yAxis) => {\n  const yColorScale = yAxis?.colorScale;\n  const xColorScale = xAxis?.colorScale;\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 ? series.color : yColorScale(value);\n      if (color === null) {\n        return series.color;\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 ? series.color : xColorScale(value);\n      if (color === null) {\n        return series.color;\n      }\n      return color;\n    };\n  }\n  return () => series.color;\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({\n    id: seriesData.id ?? `auto-generated-id-${seriesIndex}`,\n    color: colors[seriesIndex % colors.length]\n  }, seriesData);\n};\nexport default getSeriesWithDefaultValues;","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\";\nexport const seriesConfig = {\n  colorProcessor: getColor,\n  seriesProcessor,\n  legendGetter,\n  tooltipGetter,\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\";\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(2 * Math.PI * (series[seriesId].startAngle ?? 0) / 360).endAngle(2 * Math.PI * (series[seriesId].endAngle ?? 360) / 360).padAngle(2 * Math.PI * (series[seriesId].paddingAngle ?? 0) / 360).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;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nconst getSeriesWithDefaultValues = (seriesData, seriesIndex, colors) => {\n  return _extends({\n    id: seriesData.id ?? `auto-generated-id-${seriesIndex}`\n  }, seriesData, {\n    data: seriesData.data.map((d, index) => _extends({\n      color: colors[index % colors.length]\n    }, d))\n  });\n};\nexport default getSeriesWithDefaultValues;","import seriesProcessor from \"./seriesProcessor.js\";\nimport getColor from \"./getColor.js\";\nimport legendGetter from \"./legend.js\";\nimport tooltipGetter from \"./tooltip.js\";\nimport getSeriesWithDefaultValues from \"./getSeriesWithDefaultValues.js\";\nexport const seriesConfig = {\n  colorProcessor: getColor,\n  seriesProcessor,\n  legendGetter,\n  tooltipGetter,\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 { 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 { seriesConfig as barSeriesConfig } from \"../../BarChart/seriesConfig/index.js\";\nimport { seriesConfig as scatterSeriesConfig } from \"../../ScatterChart/seriesConfig/index.js\";\nimport { seriesConfig as lineSeriesConfig } from \"../../LineChart/seriesConfig/index.js\";\nimport { seriesConfig as 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, useChartCartesianAxis, useChartInteraction, 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}","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 { 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 * - `xAxis` is an object with the shape `{ [axisId]: axis }`.\n * - `xAxisIds` is an array of axis IDs.\n *\n * If access to a specific X axis is needed, use the `useXAxis` hook instead.\n *\n * @returns `{ xAxis, xAxisIds }` - The x-axes and their IDs.\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 * - `yAxis` is an object with the shape `{ [axisId]: axis }`.\n * - `yAxisIds` is an array of axis IDs.\n *\n * If access to a specific Y axis is needed, use the `useYAxis` hook instead.\n *\n * @returns `{ yAxis, yAxisIds }` - The y-axes and their IDs.\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 the X axis.\n * @param {AxisId | undefined} axisId - If provided returns the x axis with axisId, else returns the values for the default x axis.\n * @returns The X axis.\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 the Y axis.\n * @param {AxisId | undefined} axisId - If provided returns the y axis with axisId, else returns the values for the default y axis.\n * @returns The Y axis.\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}\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}\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}\nexport function useRotationAxis(identifier) {\n  const store = useStore();\n  const {\n    axis: rotationAxis,\n    axisIds: rotationAxisIds\n  } = useSelector(store, selectorChartRotationAxis);\n  const id = typeof identifier === 'string' ? identifier : rotationAxisIds[identifier ?? 0];\n  return rotationAxis[id];\n}\nexport function useRadiusAxis(identifier) {\n  const store = useStore();\n  const {\n    axis: radiusAxis,\n    axisIds: radiusAxisIds\n  } = useSelector(store, selectorChartRadiusAxis);\n  const id = typeof identifier === 'string' ? identifier : radiusAxisIds[identifier ?? 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, timerFlush } 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  /**\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 = void 0;\n    this.elapsed = 0;\n    this.easingFn = void 0;\n    this.timer = null;\n    this.onTickCallback = void 0;\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    timerFlush();\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    timerFlush();\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;\n}","import _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 = useAnimateInternal(props, {\n    initialProps,\n    createInterpolator,\n    applyProps: (element, animatedProps) => applyProps(element, transform(animatedProps)),\n    skip\n  });\n  const usedProps = skip ? props : initialProps;\n  return _extends({}, transformProps(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 * as React from 'react';\nimport { 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 * as React from 'react';\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}","'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 { 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 { selectorChartContainerSize, selectorChartPropsSize } from \"../internals/plugins/corePlugins/useChartDimensions/useChartDimensions.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: 'pan-y',\n  userSelect: 'none'\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 {\n    width: svgWidth,\n    height: svgHeight\n  } = useSelector(store, selectorChartContainerSize);\n  const {\n    width: propsWidth,\n    height: propsHeight\n  } = useSelector(store, selectorChartPropsSize);\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 hasIntrinsicSize = svgHeight > 0 && svgWidth > 0;\n  return /*#__PURE__*/_jsxs(ChartsSurfaceStyles, _extends({\n    ownerState: {\n      width: propsWidth,\n      height: propsHeight\n    },\n    viewBox: `${0} ${0} ${svgWidth} ${svgHeight}`,\n    className: className\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 };","/**\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 { 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}","'use client';\n\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"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 { useSkipAnimation } from \"../hooks/useSkipAnimation.js\";\nimport { useAnimateGaugeValueArc } from \"../hooks/animation/useAnimateGaugeValueArc.js\";\nimport { useGaugeState } from \"./GaugeProvider.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.primary.main\n}));\nfunction GaugeValueArc(props) {\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({}, props, {\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(_ref) {\n  let {\n      cx,\n      cy,\n      startAngle,\n      endAngle,\n      cornerRadius,\n      innerRadius,\n      outerRadius,\n      skipAnimation: inSkipAnimation\n    } = _ref,\n    other = _objectWithoutPropertiesLoose(_ref, _excluded);\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 * as React from 'react';\nimport { arc as d3Arc } from '@mui/x-charts-vendor/d3-shape';\nimport { styled } from '@mui/material/styles';\nimport { useGaugeState } from \"./GaugeProvider.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(props) {\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    transform: `translate(${cx}, ${cy})`,\n    d: d3Arc().cornerRadius(cornerRadius)({\n      startAngle,\n      endAngle,\n      innerRadius,\n      outerRadius\n    })\n  }, props));\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']);","import _extends from \"@babel/runtime/helpers/esm/extends\";\n// DOM utils taken 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();\nconst MAX_CACHE_NUM = 2000;\nconst SPAN_STYLE = {\n  position: 'absolute',\n  top: '-20000px',\n  left: 0,\n  padding: 0,\n  margin: 0,\n  border: 'none',\n  whiteSpace: 'pre'\n};\nconst STYLE_LIST = ['minWidth', 'maxWidth', 'width', 'minHeight', 'maxHeight', 'height', 'top', 'left', 'fontSize', 'padding', 'margin', 'paddingLeft', 'paddingRight', 'paddingTop', 'paddingBottom', 'marginLeft', 'marginRight', 'marginTop', 'marginBottom'];\nexport const MEASUREMENT_SPAN_ID = 'mui_measurement_span';\n\n/**\n *\n * @param name CSS property name\n * @param value\n * @returns add 'px' for distance properties\n */\nfunction autoCompleteStyle(name, value) {\n  if (STYLE_LIST.indexOf(name) >= 0 && value === +value) {\n    return `${value}px`;\n  }\n  return value;\n}\n\n/**\n *\n * @param text camelcase css property\n * @returns css property\n */\nfunction camelToMiddleLine(text) {\n  const strs = text.split('');\n  const formatStrs = strs.reduce((result, entry) => {\n    if (entry === entry.toUpperCase()) {\n      return [...result, '-', entry.toLowerCase()];\n    }\n    return [...result, entry];\n  }, []);\n  return formatStrs.join('');\n}\n\n/**\n *\n * @param style React style object\n * @returns CSS styling string\n */\nexport const getStyleString = style => Object.keys(style).sort().reduce((result, s) => `${result}${camelToMiddleLine(s)}:${autoCompleteStyle(s, style[s])};`, '');\nlet domCleanTimeout;\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 = `${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    let measurementSpan = document.getElementById(MEASUREMENT_SPAN_ID);\n    if (measurementSpan === null) {\n      measurementSpan = document.createElement('span');\n      measurementSpan.setAttribute('id', MEASUREMENT_SPAN_ID);\n      measurementSpan.setAttribute('aria-hidden', 'true');\n      document.body.appendChild(measurementSpan);\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    const measurementSpanStyle = _extends({}, SPAN_STYLE, style);\n    Object.keys(measurementSpanStyle).map(styleKey => {\n      measurementSpan.style[camelToMiddleLine(styleKey)] = autoCompleteStyle(styleKey, measurementSpanStyle[styleKey]);\n      return styleKey;\n    });\n    measurementSpan.textContent = str;\n    const rect = measurementSpan.getBoundingClientRect();\n    const result = {\n      width: rect.width,\n      height: rect.height\n    };\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      measurementSpan.textContent = '';\n    } else {\n      if (domCleanTimeout) {\n        clearTimeout(domCleanTimeout);\n      }\n      domCleanTimeout = setTimeout(() => {\n        // Limit node cleaning to once per render cycle\n        measurementSpan.textContent = '';\n      }, 0);\n    }\n    return result;\n  } catch {\n    return {\n      width: 0,\n      height: 0\n    };\n  }\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(typeof window !== 'undefined' || process.env.NODE_ENV === 'test');\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 * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { useGaugeState } from \"./GaugeProvider.js\";\nimport { ChartsText } from \"../ChartsText/index.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: 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    valueArc: ['valueArc'],\n    referenceArc: ['referenceArc'],\n    valueText: ['valueText']\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, {\n      className: classes.referenceArc\n    }), /*#__PURE__*/_jsx(GaugeValueArc, {\n      className: classes.valueArc,\n      skipAnimation: skipAnimation\n    }), /*#__PURE__*/_jsx(GaugeValueText, {\n      className: classes.valueText,\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 React from \"react\"\n\n/**\n * Smooth value interpolation utility using spring physics with tension and friction.\n * Designed for React Three Fiber applications with smooth, natural animations.\n *\n * Features:\n * - Spring physics with configurable tension and friction\n * - Frame-rate independent using delta timing\n * - Handles irregular frame timing and rapid target updates\n * - Manual update() calls for useFrame integration (no automatic RAF loop)\n * - Direct mutation for performance\n *\n * @example\n * ```tsx\n * // Basic spring animation\n * const interpolator = new ValueInterpolator([0, 0, 0], {\n *   tension: 120, // Higher = faster, stiffer spring (default: 120)\n *   friction: 20, // Higher = more damping, less oscillation (default: 20)\n *   onChange: (values) => {\n *     robot.joints.forEach((joint, i) => {\n *       joint.rotation.y = values[i]\n *     })\n *   }\n * })\n *\n * interpolator.setTarget([1.5, -0.8, 2.1])\n *\n * // React Three Fiber usage\n * function MyComponent() {\n *   const [interpolator] = useInterpolation([0, 0, 0])\n *\n *   useFrame((state, delta) => {\n *     interpolator.update(delta)\n *   })\n *\n *   useEffect(() => {\n *     interpolator.setTarget([1, 2, 3])\n *   }, [])\n *\n *   return <mesh position={interpolator.getCurrentValues()} />\n * }\n * ```\n */\n\nexport interface InterpolationOptions {\n  /** Spring tension (higher = faster, stiffer spring) - default: 120 */\n  tension?: number\n  /** Spring friction (higher = more damping, less oscillation) - default: 20 */\n  friction?: number\n  /** Minimum threshold to consider interpolation complete - default: 0.001 */\n  threshold?: number\n  /** Callback when values change during interpolation */\n  onChange?: (values: number[]) => void\n  /** Callback when interpolation reaches target values */\n  onComplete?: (values: number[]) => void\n}\n\nexport class ValueInterpolator {\n  private currentValues: number[] = []\n  private targetValues: number[] = []\n  private previousTargetValues: number[] = []\n  private targetUpdateTime: number = 0\n  private animationId: number | null = null\n  private options: Required<InterpolationOptions>\n  private updateCount: number = 0 // Track how many updates have occurred\n\n  // Spring physics state\n  private velocities: number[] = []\n\n  constructor(\n    initialValues: number[] = [],\n    options: InterpolationOptions = {},\n  ) {\n    this.options = {\n      tension: 120,\n      friction: 20,\n      threshold: 0.001,\n      onChange: () => {},\n      onComplete: () => {},\n      ...options,\n    }\n\n    this.currentValues = [...initialValues]\n    this.targetValues = [...initialValues]\n    this.previousTargetValues = [...initialValues]\n    this.velocities = new Array(initialValues.length).fill(0)\n    this.targetUpdateTime = performance.now()\n    this.updateCount = 0\n  }\n\n  /**\n   * Update interpolation using spring physics\n   *\n   * Call this method every frame for smooth animation. In React Three Fiber,\n   * call from within useFrame callback with the provided delta time.\n   *\n   * @param delta - Time elapsed since last update in seconds (e.g., 1/60 ≈ 0.0167 for 60fps)\n   * @returns true when interpolation is complete (all values reached their targets)\n   */\n  update(delta: number = 1 / 60): boolean {\n    let hasChanges = false\n    let isComplete = true\n\n    // Increment update counter for initialization smoothing\n    this.updateCount++\n\n    // Limit delta to prevent physics instability during large frame drops\n    const clampedDelta = Math.min(delta, 1 / 15) // Maximum 66ms frame time allowed\n\n    // Apply gentle ramp-up for the first few frames to prevent initial jumpiness\n    // Only apply reduced force for the very first frame to prevent jarring starts\n    const initializationFactor =\n      this.updateCount === 1\n        ? 0.7 // Slightly reduced force only on the very first frame\n        : 1\n\n    for (let i = 0; i < this.currentValues.length; i++) {\n      const current = this.currentValues[i]\n      const target = this.targetValues[i]\n      const velocity = this.velocities[i]\n\n      // Calculate spring physics forces\n      const displacement = target - current\n      const springForce =\n        displacement * this.options.tension * initializationFactor\n      const dampingForce = velocity * this.options.friction\n\n      // Calculate acceleration from net force (F = ma, assuming mass = 1)\n      const acceleration = springForce - dampingForce\n\n      // Integrate physics using Verlet method for numerical stability\n      const newVelocity = velocity + acceleration * clampedDelta\n      const newValue = current + newVelocity * clampedDelta\n\n      // Determine if this value has settled (close to target with low velocity)\n      const isValueComplete =\n        Math.abs(displacement) < this.options.threshold &&\n        Math.abs(newVelocity) < this.options.threshold * 10\n\n      if (!isValueComplete) {\n        isComplete = false\n        // Continue spring animation\n        this.currentValues[i] = newValue\n        this.velocities[i] = newVelocity\n        hasChanges = true\n      } else {\n        // Snap exactly to target when close enough (prevents endless micro-movements)\n        if (this.currentValues[i] !== target) {\n          this.currentValues[i] = target\n          this.velocities[i] = 0\n          hasChanges = true\n        }\n      }\n    }\n\n    if (hasChanges) {\n      this.options.onChange(this.currentValues)\n    }\n\n    if (isComplete) {\n      this.options.onComplete(this.currentValues)\n    }\n\n    return isComplete\n  }\n\n  /**\n   * Set new target values for the interpolation to move towards\n   *\n   * Includes smart blending for very rapid target updates (faster than 120fps)\n   * to prevent jarring movements when targets change frequently.\n   */\n  setTarget(newValues: number[]): void {\n    const now = performance.now()\n    const timeSinceLastUpdate = now - this.targetUpdateTime\n\n    // Store previous target for smooth transitions\n    this.previousTargetValues = [...this.targetValues]\n    this.targetValues = [...newValues]\n    this.targetUpdateTime = now\n\n    // Reset update counter for smooth initialization when target changes\n    this.updateCount = 0\n\n    // Apply target blending for extremely rapid updates to prevent jarring jumps\n    // Only activates when targets change faster than 120fps (< 8ms between updates)\n    // AND this is not the first target being set (avoid blending initial target with initial values)\n    const isInitialTargetSet = this.previousTargetValues.every(\n      (val, i) => val === this.currentValues[i],\n    )\n\n    if (\n      timeSinceLastUpdate < 8 &&\n      timeSinceLastUpdate > 0 &&\n      this.previousTargetValues.length > 0 &&\n      !isInitialTargetSet // Don't blend if this is the first meaningful target change\n    ) {\n      // Blend between previous and new target based on time elapsed\n      const blendFactor = Math.min(timeSinceLastUpdate / 8, 1) // 0 to 1 over 8ms\n\n      for (let i = 0; i < this.targetValues.length; i++) {\n        const prev = this.previousTargetValues[i] || 0\n        const next = newValues[i] || 0\n\n        // Only blend significant changes to avoid unnecessary smoothing\n        const change = Math.abs(next - prev)\n        if (change > 0.1) {\n          this.targetValues[i] = prev + (next - prev) * blendFactor\n        }\n      }\n    }\n\n    // Ensure value and velocity arrays have matching lengths\n    while (this.currentValues.length < newValues.length) {\n      this.currentValues.push(newValues[this.currentValues.length])\n      this.velocities.push(0) // New values start with zero velocity\n    }\n    if (this.currentValues.length > newValues.length) {\n      this.currentValues = this.currentValues.slice(0, newValues.length)\n      this.velocities = this.velocities.slice(0, newValues.length)\n    }\n\n    // Does not start automatic interpolation - requires manual update() calls\n    // This design prevents conflicts when using with React Three Fiber's useFrame\n  }\n\n  /**\n   * Get a copy of all current interpolated values\n   */\n  getCurrentValues(): number[] {\n    return [...this.currentValues]\n  }\n\n  /**\n   * Get a single interpolated value by its array index\n   */\n  getValue(index: number): number {\n    return this.currentValues[index] ?? 0\n  }\n\n  /**\n   * Check if automatic interpolation is currently running\n   *\n   * This only tracks auto-interpolation started with startAutoInterpolation().\n   * Manual update() calls are not tracked by this method.\n   */\n  isInterpolating(): boolean {\n    return this.animationId !== null\n  }\n\n  /**\n   * Stop automatic interpolation if it's running\n   *\n   * This cancels the internal animation frame loop but does not affect\n   * manual update() calls.\n   */\n  stop(): void {\n    if (this.animationId !== null) {\n      cancelAnimationFrame(this.animationId)\n      this.animationId = null\n    }\n  }\n\n  /**\n   * Instantly set values without interpolation\n   */\n  setImmediate(values: number[]): void {\n    this.stop()\n    this.currentValues = [...values]\n    this.targetValues = [...values]\n    this.previousTargetValues = [...values]\n    this.velocities = new Array(values.length).fill(0) // Reset velocities\n    this.targetUpdateTime = performance.now()\n    this.updateCount = 0 // Reset update counter\n    this.options.onChange(this.currentValues)\n  }\n\n  /**\n   * Update interpolation options\n   */\n  updateOptions(newOptions: Partial<InterpolationOptions>): void {\n    this.options = { ...this.options, ...newOptions }\n  }\n\n  /**\n   * Start automatic interpolation with an animation loop\n   *\n   * This begins a requestAnimationFrame loop that calls update() automatically.\n   * For React Three Fiber components, prefer using manual update() calls\n   * within useFrame hooks instead.\n   */\n  startAutoInterpolation(): void {\n    this.startInterpolation()\n  }\n\n  /**\n   * Clean up all resources and stop any running animations\n   *\n   * This cancels any active animation frames and resets internal state.\n   * Call this when the component unmounts or is no longer needed.\n   */\n  destroy(): void {\n    this.stop()\n  }\n\n  private startInterpolation(): void {\n    if (this.animationId !== null) {\n      return // Already interpolating\n    }\n\n    this.animate()\n  }\n\n  private animate = (): void => {\n    // Use delta timing with a fallback for consistent automatic animations\n    const isComplete = this.update(1 / 60) // Simulate 60fps for auto-interpolation\n\n    if (!isComplete) {\n      this.animationId = requestAnimationFrame(this.animate)\n    } else {\n      this.animationId = null\n    }\n  }\n}\n\n/**\n * React hook for using the ValueInterpolator with useFrame\n *\n * This hook creates a ValueInterpolator that uses spring physics for smooth,\n * natural animations. Call interpolator.update(delta) in your useFrame callback.\n *\n * @example\n * ```tsx\n * function AnimatedMesh() {\n *   const [interpolator] = useInterpolation([0, 0, 0], {\n *     tension: 120, // Higher = faster spring\n *     friction: 20  // Higher = more damping\n *   })\n *   const meshRef = useRef()\n *\n *   useFrame((state, delta) => {\n *     if (interpolator.update(delta)) {\n *       // Animation complete\n *     }\n *     // Apply current values directly to mesh\n *     const [x, y, z] = interpolator.getCurrentValues()\n *     meshRef.current.position.set(x, y, z)\n *   })\n *\n *   return <mesh ref={meshRef} />\n * }\n * ```\n */\nexport function useInterpolation(\n  initialValues: number[] = [],\n  options: InterpolationOptions = {},\n): [ValueInterpolator] {\n  const interpolatorRef = React.useRef<ValueInterpolator | null>(null)\n\n  // Initialize interpolator\n  if (!interpolatorRef.current) {\n    interpolatorRef.current = new ValueInterpolator(initialValues, options)\n  }\n\n  // Update options when they change\n  React.useEffect(() => {\n    interpolatorRef.current?.updateOptions(options)\n  }, [options])\n\n  // Cleanup on unmount\n  React.useEffect(() => {\n    return () => {\n      interpolatorRef.current?.destroy()\n    }\n  }, [])\n\n  return [interpolatorRef.current!]\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","/**\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 { 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      // Object.is() is not equivalent to the === operator.\n      // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is for more details.\n      if (!isControlled && !Object.is(defaultValue, defaultProp)) {\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 undefiend.\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 { autorun, reaction } from \"mobx\"\nimport { useEffect, type EffectCallback } from \"react\"\n\n/**\n * Run code once on component mount. Shorthand for useEffect(effect, []).\n */\nexport function useMounted(effect: EffectCallback) {\n  useEffect(effect, [])\n}\n\n/**\n * Initialize a mobx autorun watcher on component mount, and\n * clean it up when the component unmounts.\n */\nexport function useAutorun(view: Parameters<typeof autorun>[0]) {\n  useMounted(() => {\n    return autorun(view)\n  })\n}\n\n/**\n * Initialize a mobx reaction watcher on component mount, and\n * clean it up when the component unmounts.\n */\nexport function useReaction<T>(\n  expression: Parameters<typeof reaction<T>>[0],\n  effect: Parameters<typeof reaction<T>>[1],\n  opts?: Parameters<typeof reaction<T>>[2],\n) {\n  useMounted(() => {\n    return reaction(expression, effect, opts)\n  })\n}\n\n/**\n * Run a callback on every animation frame. Cleans up\n * after component unmount.\n */\nexport function useAnimationFrame(callback: () => void) {\n  return useMounted(() => {\n    let frameId: number\n\n    function frame() {\n      callback()\n      frameId = requestAnimationFrame(frame)\n    }\n\n    frameId = requestAnimationFrame(frame)\n\n    return () => {\n      cancelAnimationFrame(frameId)\n    }\n  })\n}\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');","// node_modules/lodash-es/isObject.js\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == \"object\" || type == \"function\");\n}\nvar isObject_default = isObject;\n\n// node_modules/lodash-es/_listCacheClear.js\nfunction listCacheClear() {\n  this.__data__ = [];\n  this.size = 0;\n}\nvar listCacheClear_default = listCacheClear;\n\n// node_modules/lodash-es/eq.js\nfunction eq(value, other) {\n  return value === other || value !== value && other !== other;\n}\nvar eq_default = eq;\n\n// node_modules/lodash-es/_assocIndexOf.js\nfunction assocIndexOf(array, key) {\n  var length = array.length;\n  while (length--) {\n    if (eq_default(array[length][0], key)) {\n      return length;\n    }\n  }\n  return -1;\n}\nvar assocIndexOf_default = assocIndexOf;\n\n// node_modules/lodash-es/_listCacheDelete.js\nvar arrayProto = Array.prototype;\nvar splice = arrayProto.splice;\nfunction listCacheDelete(key) {\n  var data = this.__data__, index = assocIndexOf_default(data, key);\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}\nvar listCacheDelete_default = listCacheDelete;\n\n// node_modules/lodash-es/_listCacheGet.js\nfunction listCacheGet(key) {\n  var data = this.__data__, index = assocIndexOf_default(data, key);\n  return index < 0 ? void 0 : data[index][1];\n}\nvar listCacheGet_default = listCacheGet;\n\n// node_modules/lodash-es/_listCacheHas.js\nfunction listCacheHas(key) {\n  return assocIndexOf_default(this.__data__, key) > -1;\n}\nvar listCacheHas_default = listCacheHas;\n\n// node_modules/lodash-es/_listCacheSet.js\nfunction listCacheSet(key, value) {\n  var data = this.__data__, index = assocIndexOf_default(data, key);\n  if (index < 0) {\n    ++this.size;\n    data.push([key, value]);\n  } else {\n    data[index][1] = value;\n  }\n  return this;\n}\nvar listCacheSet_default = listCacheSet;\n\n// node_modules/lodash-es/_ListCache.js\nfunction ListCache(entries) {\n  var index = -1, length = entries == null ? 0 : entries.length;\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\nListCache.prototype.clear = listCacheClear_default;\nListCache.prototype[\"delete\"] = listCacheDelete_default;\nListCache.prototype.get = listCacheGet_default;\nListCache.prototype.has = listCacheHas_default;\nListCache.prototype.set = listCacheSet_default;\nvar ListCache_default = ListCache;\n\n// node_modules/lodash-es/_stackClear.js\nfunction stackClear() {\n  this.__data__ = new ListCache_default();\n  this.size = 0;\n}\nvar stackClear_default = stackClear;\n\n// node_modules/lodash-es/_stackDelete.js\nfunction stackDelete(key) {\n  var data = this.__data__, result = data[\"delete\"](key);\n  this.size = data.size;\n  return result;\n}\nvar stackDelete_default = stackDelete;\n\n// node_modules/lodash-es/_stackGet.js\nfunction stackGet(key) {\n  return this.__data__.get(key);\n}\nvar stackGet_default = stackGet;\n\n// node_modules/lodash-es/_stackHas.js\nfunction stackHas(key) {\n  return this.__data__.has(key);\n}\nvar stackHas_default = stackHas;\n\n// node_modules/lodash-es/_freeGlobal.js\nvar freeGlobal = typeof global == \"object\" && global && global.Object === Object && global;\nvar freeGlobal_default = freeGlobal;\n\n// node_modules/lodash-es/_root.js\nvar freeSelf = typeof self == \"object\" && self && self.Object === Object && self;\nvar root = freeGlobal_default || freeSelf || Function(\"return this\")();\nvar root_default = root;\n\n// node_modules/lodash-es/_Symbol.js\nvar Symbol = root_default.Symbol;\nvar Symbol_default = Symbol;\n\n// node_modules/lodash-es/_getRawTag.js\nvar objectProto = Object.prototype;\nvar hasOwnProperty = objectProto.hasOwnProperty;\nvar nativeObjectToString = objectProto.toString;\nvar symToStringTag = Symbol_default ? Symbol_default.toStringTag : void 0;\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag), tag = value[symToStringTag];\n  try {\n    value[symToStringTag] = void 0;\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}\nvar getRawTag_default = getRawTag;\n\n// node_modules/lodash-es/_objectToString.js\nvar objectProto2 = Object.prototype;\nvar nativeObjectToString2 = objectProto2.toString;\nfunction objectToString(value) {\n  return nativeObjectToString2.call(value);\n}\nvar objectToString_default = objectToString;\n\n// node_modules/lodash-es/_baseGetTag.js\nvar nullTag = \"[object Null]\";\nvar undefinedTag = \"[object Undefined]\";\nvar symToStringTag2 = Symbol_default ? Symbol_default.toStringTag : void 0;\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === void 0 ? undefinedTag : nullTag;\n  }\n  return symToStringTag2 && symToStringTag2 in Object(value) ? getRawTag_default(value) : objectToString_default(value);\n}\nvar baseGetTag_default = baseGetTag;\n\n// node_modules/lodash-es/isFunction.js\nvar asyncTag = \"[object AsyncFunction]\";\nvar funcTag = \"[object Function]\";\nvar genTag = \"[object GeneratorFunction]\";\nvar proxyTag = \"[object Proxy]\";\nfunction isFunction(value) {\n  if (!isObject_default(value)) {\n    return false;\n  }\n  var tag = baseGetTag_default(value);\n  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\nvar isFunction_default = isFunction;\n\n// node_modules/lodash-es/_coreJsData.js\nvar coreJsData = root_default[\"__core-js_shared__\"];\nvar coreJsData_default = coreJsData;\n\n// node_modules/lodash-es/_isMasked.js\nvar maskSrcKey = function() {\n  var uid = /[^.]+$/.exec(coreJsData_default && coreJsData_default.keys && coreJsData_default.keys.IE_PROTO || \"\");\n  return uid ? \"Symbol(src)_1.\" + uid : \"\";\n}();\nfunction isMasked(func) {\n  return !!maskSrcKey && maskSrcKey in func;\n}\nvar isMasked_default = isMasked;\n\n// node_modules/lodash-es/_toSource.js\nvar funcProto = Function.prototype;\nvar funcToString = funcProto.toString;\nfunction toSource(func) {\n  if (func != null) {\n    try {\n      return funcToString.call(func);\n    } catch (e) {\n    }\n    try {\n      return func + \"\";\n    } catch (e) {\n    }\n  }\n  return \"\";\n}\nvar toSource_default = toSource;\n\n// node_modules/lodash-es/_baseIsNative.js\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\nvar funcProto2 = Function.prototype;\nvar objectProto3 = Object.prototype;\nvar funcToString2 = funcProto2.toString;\nvar hasOwnProperty2 = objectProto3.hasOwnProperty;\nvar reIsNative = RegExp(\n  \"^\" + funcToString2.call(hasOwnProperty2).replace(reRegExpChar, \"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, \"$1.*?\") + \"$\"\n);\nfunction baseIsNative(value) {\n  if (!isObject_default(value) || isMasked_default(value)) {\n    return false;\n  }\n  var pattern = isFunction_default(value) ? reIsNative : reIsHostCtor;\n  return pattern.test(toSource_default(value));\n}\nvar baseIsNative_default = baseIsNative;\n\n// node_modules/lodash-es/_getValue.js\nfunction getValue(object, key) {\n  return object == null ? void 0 : object[key];\n}\nvar getValue_default = getValue;\n\n// node_modules/lodash-es/_getNative.js\nfunction getNative(object, key) {\n  var value = getValue_default(object, key);\n  return baseIsNative_default(value) ? value : void 0;\n}\nvar getNative_default = getNative;\n\n// node_modules/lodash-es/_Map.js\nvar Map = getNative_default(root_default, \"Map\");\nvar Map_default = Map;\n\n// node_modules/lodash-es/_nativeCreate.js\nvar nativeCreate = getNative_default(Object, \"create\");\nvar nativeCreate_default = nativeCreate;\n\n// node_modules/lodash-es/_hashClear.js\nfunction hashClear() {\n  this.__data__ = nativeCreate_default ? nativeCreate_default(null) : {};\n  this.size = 0;\n}\nvar hashClear_default = hashClear;\n\n// node_modules/lodash-es/_hashDelete.js\nfunction hashDelete(key) {\n  var result = this.has(key) && delete this.__data__[key];\n  this.size -= result ? 1 : 0;\n  return result;\n}\nvar hashDelete_default = hashDelete;\n\n// node_modules/lodash-es/_hashGet.js\nvar HASH_UNDEFINED = \"__lodash_hash_undefined__\";\nvar objectProto4 = Object.prototype;\nvar hasOwnProperty3 = objectProto4.hasOwnProperty;\nfunction hashGet(key) {\n  var data = this.__data__;\n  if (nativeCreate_default) {\n    var result = data[key];\n    return result === HASH_UNDEFINED ? void 0 : result;\n  }\n  return hasOwnProperty3.call(data, key) ? data[key] : void 0;\n}\nvar hashGet_default = hashGet;\n\n// node_modules/lodash-es/_hashHas.js\nvar objectProto5 = Object.prototype;\nvar hasOwnProperty4 = objectProto5.hasOwnProperty;\nfunction hashHas(key) {\n  var data = this.__data__;\n  return nativeCreate_default ? data[key] !== void 0 : hasOwnProperty4.call(data, key);\n}\nvar hashHas_default = hashHas;\n\n// node_modules/lodash-es/_hashSet.js\nvar HASH_UNDEFINED2 = \"__lodash_hash_undefined__\";\nfunction hashSet(key, value) {\n  var data = this.__data__;\n  this.size += this.has(key) ? 0 : 1;\n  data[key] = nativeCreate_default && value === void 0 ? HASH_UNDEFINED2 : value;\n  return this;\n}\nvar hashSet_default = hashSet;\n\n// node_modules/lodash-es/_Hash.js\nfunction Hash(entries) {\n  var index = -1, length = entries == null ? 0 : entries.length;\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\nHash.prototype.clear = hashClear_default;\nHash.prototype[\"delete\"] = hashDelete_default;\nHash.prototype.get = hashGet_default;\nHash.prototype.has = hashHas_default;\nHash.prototype.set = hashSet_default;\nvar Hash_default = Hash;\n\n// node_modules/lodash-es/_mapCacheClear.js\nfunction mapCacheClear() {\n  this.size = 0;\n  this.__data__ = {\n    \"hash\": new Hash_default(),\n    \"map\": new (Map_default || ListCache_default)(),\n    \"string\": new Hash_default()\n  };\n}\nvar mapCacheClear_default = mapCacheClear;\n\n// node_modules/lodash-es/_isKeyable.js\nfunction isKeyable(value) {\n  var type = typeof value;\n  return type == \"string\" || type == \"number\" || type == \"symbol\" || type == \"boolean\" ? value !== \"__proto__\" : value === null;\n}\nvar isKeyable_default = isKeyable;\n\n// node_modules/lodash-es/_getMapData.js\nfunction getMapData(map, key) {\n  var data = map.__data__;\n  return isKeyable_default(key) ? data[typeof key == \"string\" ? \"string\" : \"hash\"] : data.map;\n}\nvar getMapData_default = getMapData;\n\n// node_modules/lodash-es/_mapCacheDelete.js\nfunction mapCacheDelete(key) {\n  var result = getMapData_default(this, key)[\"delete\"](key);\n  this.size -= result ? 1 : 0;\n  return result;\n}\nvar mapCacheDelete_default = mapCacheDelete;\n\n// node_modules/lodash-es/_mapCacheGet.js\nfunction mapCacheGet(key) {\n  return getMapData_default(this, key).get(key);\n}\nvar mapCacheGet_default = mapCacheGet;\n\n// node_modules/lodash-es/_mapCacheHas.js\nfunction mapCacheHas(key) {\n  return getMapData_default(this, key).has(key);\n}\nvar mapCacheHas_default = mapCacheHas;\n\n// node_modules/lodash-es/_mapCacheSet.js\nfunction mapCacheSet(key, value) {\n  var data = getMapData_default(this, key), size = data.size;\n  data.set(key, value);\n  this.size += data.size == size ? 0 : 1;\n  return this;\n}\nvar mapCacheSet_default = mapCacheSet;\n\n// node_modules/lodash-es/_MapCache.js\nfunction MapCache(entries) {\n  var index = -1, length = entries == null ? 0 : entries.length;\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\nMapCache.prototype.clear = mapCacheClear_default;\nMapCache.prototype[\"delete\"] = mapCacheDelete_default;\nMapCache.prototype.get = mapCacheGet_default;\nMapCache.prototype.has = mapCacheHas_default;\nMapCache.prototype.set = mapCacheSet_default;\nvar MapCache_default = MapCache;\n\n// node_modules/lodash-es/_stackSet.js\nvar LARGE_ARRAY_SIZE = 200;\nfunction stackSet(key, value) {\n  var data = this.__data__;\n  if (data instanceof ListCache_default) {\n    var pairs = data.__data__;\n    if (!Map_default || 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_default(pairs);\n  }\n  data.set(key, value);\n  this.size = data.size;\n  return this;\n}\nvar stackSet_default = stackSet;\n\n// node_modules/lodash-es/_Stack.js\nfunction Stack(entries) {\n  var data = this.__data__ = new ListCache_default(entries);\n  this.size = data.size;\n}\nStack.prototype.clear = stackClear_default;\nStack.prototype[\"delete\"] = stackDelete_default;\nStack.prototype.get = stackGet_default;\nStack.prototype.has = stackHas_default;\nStack.prototype.set = stackSet_default;\nvar Stack_default = Stack;\n\n// node_modules/lodash-es/_setCacheAdd.js\nvar HASH_UNDEFINED3 = \"__lodash_hash_undefined__\";\nfunction setCacheAdd(value) {\n  this.__data__.set(value, HASH_UNDEFINED3);\n  return this;\n}\nvar setCacheAdd_default = setCacheAdd;\n\n// node_modules/lodash-es/_setCacheHas.js\nfunction setCacheHas(value) {\n  return this.__data__.has(value);\n}\nvar setCacheHas_default = setCacheHas;\n\n// node_modules/lodash-es/_SetCache.js\nfunction SetCache(values) {\n  var index = -1, length = values == null ? 0 : values.length;\n  this.__data__ = new MapCache_default();\n  while (++index < length) {\n    this.add(values[index]);\n  }\n}\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd_default;\nSetCache.prototype.has = setCacheHas_default;\nvar SetCache_default = SetCache;\n\n// node_modules/lodash-es/_arraySome.js\nfunction arraySome(array, predicate) {\n  var index = -1, length = array == null ? 0 : array.length;\n  while (++index < length) {\n    if (predicate(array[index], index, array)) {\n      return true;\n    }\n  }\n  return false;\n}\nvar arraySome_default = arraySome;\n\n// node_modules/lodash-es/_cacheHas.js\nfunction cacheHas(cache, key) {\n  return cache.has(key);\n}\nvar cacheHas_default = cacheHas;\n\n// node_modules/lodash-es/_equalArrays.js\nvar COMPARE_PARTIAL_FLAG = 1;\nvar COMPARE_UNORDERED_FLAG = 2;\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG, arrLength = array.length, othLength = other.length;\n  if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n    return false;\n  }\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, result = true, seen = bitmask & COMPARE_UNORDERED_FLAG ? new SetCache_default() : void 0;\n  stack.set(array, other);\n  stack.set(other, array);\n  while (++index < arrLength) {\n    var arrValue = array[index], othValue = other[index];\n    if (customizer) {\n      var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) : customizer(arrValue, othValue, index, array, other, stack);\n    }\n    if (compared !== void 0) {\n      if (compared) {\n        continue;\n      }\n      result = false;\n      break;\n    }\n    if (seen) {\n      if (!arraySome_default(other, function(othValue2, othIndex) {\n        if (!cacheHas_default(seen, othIndex) && (arrValue === othValue2 || equalFunc(arrValue, othValue2, bitmask, customizer, stack))) {\n          return seen.push(othIndex);\n        }\n      })) {\n        result = false;\n        break;\n      }\n    } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n      result = false;\n      break;\n    }\n  }\n  stack[\"delete\"](array);\n  stack[\"delete\"](other);\n  return result;\n}\nvar equalArrays_default = equalArrays;\n\n// node_modules/lodash-es/_Uint8Array.js\nvar Uint8Array = root_default.Uint8Array;\nvar Uint8Array_default = Uint8Array;\n\n// node_modules/lodash-es/_mapToArray.js\nfunction mapToArray(map) {\n  var index = -1, result = Array(map.size);\n  map.forEach(function(value, key) {\n    result[++index] = [key, value];\n  });\n  return result;\n}\nvar mapToArray_default = mapToArray;\n\n// node_modules/lodash-es/_setToArray.js\nfunction setToArray(set) {\n  var index = -1, result = Array(set.size);\n  set.forEach(function(value) {\n    result[++index] = value;\n  });\n  return result;\n}\nvar setToArray_default = setToArray;\n\n// node_modules/lodash-es/_equalByTag.js\nvar COMPARE_PARTIAL_FLAG2 = 1;\nvar COMPARE_UNORDERED_FLAG2 = 2;\nvar boolTag = \"[object Boolean]\";\nvar dateTag = \"[object Date]\";\nvar errorTag = \"[object Error]\";\nvar mapTag = \"[object Map]\";\nvar numberTag = \"[object Number]\";\nvar regexpTag = \"[object RegExp]\";\nvar setTag = \"[object Set]\";\nvar stringTag = \"[object String]\";\nvar symbolTag = \"[object Symbol]\";\nvar arrayBufferTag = \"[object ArrayBuffer]\";\nvar dataViewTag = \"[object DataView]\";\nvar symbolProto = Symbol_default ? Symbol_default.prototype : void 0;\nvar symbolValueOf = symbolProto ? symbolProto.valueOf : void 0;\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n  switch (tag) {\n    case dataViewTag:\n      if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) {\n        return false;\n      }\n      object = object.buffer;\n      other = other.buffer;\n    case arrayBufferTag:\n      if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array_default(object), new Uint8Array_default(other))) {\n        return false;\n      }\n      return true;\n    case boolTag:\n    case dateTag:\n    case numberTag:\n      return eq_default(+object, +other);\n    case errorTag:\n      return object.name == other.name && object.message == other.message;\n    case regexpTag:\n    case stringTag:\n      return object == other + \"\";\n    case mapTag:\n      var convert = mapToArray_default;\n    case setTag:\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG2;\n      convert || (convert = setToArray_default);\n      if (object.size != other.size && !isPartial) {\n        return false;\n      }\n      var stacked = stack.get(object);\n      if (stacked) {\n        return stacked == other;\n      }\n      bitmask |= COMPARE_UNORDERED_FLAG2;\n      stack.set(object, other);\n      var result = equalArrays_default(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n      stack[\"delete\"](object);\n      return result;\n    case symbolTag:\n      if (symbolValueOf) {\n        return symbolValueOf.call(object) == symbolValueOf.call(other);\n      }\n  }\n  return false;\n}\nvar equalByTag_default = equalByTag;\n\n// node_modules/lodash-es/_arrayPush.js\nfunction arrayPush(array, values) {\n  var index = -1, length = values.length, offset = array.length;\n  while (++index < length) {\n    array[offset + index] = values[index];\n  }\n  return array;\n}\nvar arrayPush_default = arrayPush;\n\n// node_modules/lodash-es/isArray.js\nvar isArray = Array.isArray;\nvar isArray_default = isArray;\n\n// node_modules/lodash-es/_baseGetAllKeys.js\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n  var result = keysFunc(object);\n  return isArray_default(object) ? result : arrayPush_default(result, symbolsFunc(object));\n}\nvar baseGetAllKeys_default = baseGetAllKeys;\n\n// node_modules/lodash-es/_arrayFilter.js\nfunction arrayFilter(array, predicate) {\n  var index = -1, length = array == null ? 0 : array.length, resIndex = 0, result = [];\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}\nvar arrayFilter_default = arrayFilter;\n\n// node_modules/lodash-es/stubArray.js\nfunction stubArray() {\n  return [];\n}\nvar stubArray_default = stubArray;\n\n// node_modules/lodash-es/_getSymbols.js\nvar objectProto6 = Object.prototype;\nvar propertyIsEnumerable = objectProto6.propertyIsEnumerable;\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\nvar getSymbols = !nativeGetSymbols ? stubArray_default : function(object) {\n  if (object == null) {\n    return [];\n  }\n  object = Object(object);\n  return arrayFilter_default(nativeGetSymbols(object), function(symbol) {\n    return propertyIsEnumerable.call(object, symbol);\n  });\n};\nvar getSymbols_default = getSymbols;\n\n// node_modules/lodash-es/_baseTimes.js\nfunction baseTimes(n, iteratee) {\n  var index = -1, result = Array(n);\n  while (++index < n) {\n    result[index] = iteratee(index);\n  }\n  return result;\n}\nvar baseTimes_default = baseTimes;\n\n// node_modules/lodash-es/isObjectLike.js\nfunction isObjectLike(value) {\n  return value != null && typeof value == \"object\";\n}\nvar isObjectLike_default = isObjectLike;\n\n// node_modules/lodash-es/_baseIsArguments.js\nvar argsTag = \"[object Arguments]\";\nfunction baseIsArguments(value) {\n  return isObjectLike_default(value) && baseGetTag_default(value) == argsTag;\n}\nvar baseIsArguments_default = baseIsArguments;\n\n// node_modules/lodash-es/isArguments.js\nvar objectProto7 = Object.prototype;\nvar hasOwnProperty5 = objectProto7.hasOwnProperty;\nvar propertyIsEnumerable2 = objectProto7.propertyIsEnumerable;\nvar isArguments = baseIsArguments_default(/* @__PURE__ */ function() {\n  return arguments;\n}()) ? baseIsArguments_default : function(value) {\n  return isObjectLike_default(value) && hasOwnProperty5.call(value, \"callee\") && !propertyIsEnumerable2.call(value, \"callee\");\n};\nvar isArguments_default = isArguments;\n\n// node_modules/lodash-es/stubFalse.js\nfunction stubFalse() {\n  return false;\n}\nvar stubFalse_default = stubFalse;\n\n// node_modules/lodash-es/isBuffer.js\nvar freeExports = typeof exports == \"object\" && exports && !exports.nodeType && exports;\nvar freeModule = freeExports && typeof module == \"object\" && module && !module.nodeType && module;\nvar moduleExports = freeModule && freeModule.exports === freeExports;\nvar Buffer = moduleExports ? root_default.Buffer : void 0;\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : void 0;\nvar isBuffer = nativeIsBuffer || stubFalse_default;\nvar isBuffer_default = isBuffer;\n\n// node_modules/lodash-es/_isIndex.js\nvar MAX_SAFE_INTEGER = 9007199254740991;\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\nfunction isIndex(value, length) {\n  var type = typeof value;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n  return !!length && (type == \"number\" || type != \"symbol\" && reIsUint.test(value)) && (value > -1 && value % 1 == 0 && value < length);\n}\nvar isIndex_default = isIndex;\n\n// node_modules/lodash-es/isLength.js\nvar MAX_SAFE_INTEGER2 = 9007199254740991;\nfunction isLength(value) {\n  return typeof value == \"number\" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER2;\n}\nvar isLength_default = isLength;\n\n// node_modules/lodash-es/_baseIsTypedArray.js\nvar argsTag2 = \"[object Arguments]\";\nvar arrayTag = \"[object Array]\";\nvar boolTag2 = \"[object Boolean]\";\nvar dateTag2 = \"[object Date]\";\nvar errorTag2 = \"[object Error]\";\nvar funcTag2 = \"[object Function]\";\nvar mapTag2 = \"[object Map]\";\nvar numberTag2 = \"[object Number]\";\nvar objectTag = \"[object Object]\";\nvar regexpTag2 = \"[object RegExp]\";\nvar setTag2 = \"[object Set]\";\nvar stringTag2 = \"[object String]\";\nvar weakMapTag = \"[object WeakMap]\";\nvar arrayBufferTag2 = \"[object ArrayBuffer]\";\nvar dataViewTag2 = \"[object DataView]\";\nvar float32Tag = \"[object Float32Array]\";\nvar float64Tag = \"[object Float64Array]\";\nvar int8Tag = \"[object Int8Array]\";\nvar int16Tag = \"[object Int16Array]\";\nvar int32Tag = \"[object Int32Array]\";\nvar uint8Tag = \"[object Uint8Array]\";\nvar uint8ClampedTag = \"[object Uint8ClampedArray]\";\nvar uint16Tag = \"[object Uint16Array]\";\nvar uint32Tag = \"[object Uint32Array]\";\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag2] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag2] = typedArrayTags[boolTag2] = typedArrayTags[dataViewTag2] = typedArrayTags[dateTag2] = typedArrayTags[errorTag2] = typedArrayTags[funcTag2] = typedArrayTags[mapTag2] = typedArrayTags[numberTag2] = typedArrayTags[objectTag] = typedArrayTags[regexpTag2] = typedArrayTags[setTag2] = typedArrayTags[stringTag2] = typedArrayTags[weakMapTag] = false;\nfunction baseIsTypedArray(value) {\n  return isObjectLike_default(value) && isLength_default(value.length) && !!typedArrayTags[baseGetTag_default(value)];\n}\nvar baseIsTypedArray_default = baseIsTypedArray;\n\n// node_modules/lodash-es/_baseUnary.js\nfunction baseUnary(func) {\n  return function(value) {\n    return func(value);\n  };\n}\nvar baseUnary_default = baseUnary;\n\n// node_modules/lodash-es/_nodeUtil.js\nvar freeExports2 = typeof exports == \"object\" && exports && !exports.nodeType && exports;\nvar freeModule2 = freeExports2 && typeof module == \"object\" && module && !module.nodeType && module;\nvar moduleExports2 = freeModule2 && freeModule2.exports === freeExports2;\nvar freeProcess = moduleExports2 && freeGlobal_default.process;\nvar nodeUtil = function() {\n  try {\n    var types = freeModule2 && freeModule2.require && freeModule2.require(\"util\").types;\n    if (types) {\n      return types;\n    }\n    return freeProcess && freeProcess.binding && freeProcess.binding(\"util\");\n  } catch (e) {\n  }\n}();\nvar nodeUtil_default = nodeUtil;\n\n// node_modules/lodash-es/isTypedArray.js\nvar nodeIsTypedArray = nodeUtil_default && nodeUtil_default.isTypedArray;\nvar isTypedArray = nodeIsTypedArray ? baseUnary_default(nodeIsTypedArray) : baseIsTypedArray_default;\nvar isTypedArray_default = isTypedArray;\n\n// node_modules/lodash-es/_arrayLikeKeys.js\nvar objectProto8 = Object.prototype;\nvar hasOwnProperty6 = objectProto8.hasOwnProperty;\nfunction arrayLikeKeys(value, inherited) {\n  var isArr = isArray_default(value), isArg = !isArr && isArguments_default(value), isBuff = !isArr && !isArg && isBuffer_default(value), isType = !isArr && !isArg && !isBuff && isTypedArray_default(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes_default(value.length, String) : [], length = result.length;\n  for (var key in value) {\n    if ((inherited || hasOwnProperty6.call(value, key)) && !(skipIndexes && // Safari 9 has enumerable `arguments.length` in strict mode.\n    (key == \"length\" || // Node.js 0.10 has enumerable non-index properties on buffers.\n    isBuff && (key == \"offset\" || key == \"parent\") || // PhantomJS 2 has enumerable non-index properties on typed arrays.\n    isType && (key == \"buffer\" || key == \"byteLength\" || key == \"byteOffset\") || // Skip index properties.\n    isIndex_default(key, length)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\nvar arrayLikeKeys_default = arrayLikeKeys;\n\n// node_modules/lodash-es/_isPrototype.js\nvar objectProto9 = Object.prototype;\nfunction isPrototype(value) {\n  var Ctor = value && value.constructor, proto = typeof Ctor == \"function\" && Ctor.prototype || objectProto9;\n  return value === proto;\n}\nvar isPrototype_default = isPrototype;\n\n// node_modules/lodash-es/_overArg.js\nfunction overArg(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\nvar overArg_default = overArg;\n\n// node_modules/lodash-es/_nativeKeys.js\nvar nativeKeys = overArg_default(Object.keys, Object);\nvar nativeKeys_default = nativeKeys;\n\n// node_modules/lodash-es/_baseKeys.js\nvar objectProto10 = Object.prototype;\nvar hasOwnProperty7 = objectProto10.hasOwnProperty;\nfunction baseKeys(object) {\n  if (!isPrototype_default(object)) {\n    return nativeKeys_default(object);\n  }\n  var result = [];\n  for (var key in Object(object)) {\n    if (hasOwnProperty7.call(object, key) && key != \"constructor\") {\n      result.push(key);\n    }\n  }\n  return result;\n}\nvar baseKeys_default = baseKeys;\n\n// node_modules/lodash-es/isArrayLike.js\nfunction isArrayLike(value) {\n  return value != null && isLength_default(value.length) && !isFunction_default(value);\n}\nvar isArrayLike_default = isArrayLike;\n\n// node_modules/lodash-es/keys.js\nfunction keys(object) {\n  return isArrayLike_default(object) ? arrayLikeKeys_default(object) : baseKeys_default(object);\n}\nvar keys_default = keys;\n\n// node_modules/lodash-es/_getAllKeys.js\nfunction getAllKeys(object) {\n  return baseGetAllKeys_default(object, keys_default, getSymbols_default);\n}\nvar getAllKeys_default = getAllKeys;\n\n// node_modules/lodash-es/_equalObjects.js\nvar COMPARE_PARTIAL_FLAG3 = 1;\nvar objectProto11 = Object.prototype;\nvar hasOwnProperty8 = objectProto11.hasOwnProperty;\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG3, objProps = getAllKeys_default(object), objLength = objProps.length, othProps = getAllKeys_default(other), othLength = othProps.length;\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 : hasOwnProperty8.call(other, key))) {\n      return false;\n    }\n  }\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  var skipCtor = isPartial;\n  while (++index < objLength) {\n    key = objProps[index];\n    var objValue = object[key], othValue = other[key];\n    if (customizer) {\n      var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack);\n    }\n    if (!(compared === void 0 ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) {\n      result = false;\n      break;\n    }\n    skipCtor || (skipCtor = key == \"constructor\");\n  }\n  if (result && !skipCtor) {\n    var objCtor = object.constructor, othCtor = other.constructor;\n    if (objCtor != othCtor && (\"constructor\" in object && \"constructor\" in other) && !(typeof objCtor == \"function\" && objCtor instanceof objCtor && typeof othCtor == \"function\" && othCtor instanceof othCtor)) {\n      result = false;\n    }\n  }\n  stack[\"delete\"](object);\n  stack[\"delete\"](other);\n  return result;\n}\nvar equalObjects_default = equalObjects;\n\n// node_modules/lodash-es/_DataView.js\nvar DataView = getNative_default(root_default, \"DataView\");\nvar DataView_default = DataView;\n\n// node_modules/lodash-es/_Promise.js\nvar Promise2 = getNative_default(root_default, \"Promise\");\nvar Promise_default = Promise2;\n\n// node_modules/lodash-es/_Set.js\nvar Set = getNative_default(root_default, \"Set\");\nvar Set_default = Set;\n\n// node_modules/lodash-es/_WeakMap.js\nvar WeakMap = getNative_default(root_default, \"WeakMap\");\nvar WeakMap_default = WeakMap;\n\n// node_modules/lodash-es/_getTag.js\nvar mapTag3 = \"[object Map]\";\nvar objectTag2 = \"[object Object]\";\nvar promiseTag = \"[object Promise]\";\nvar setTag3 = \"[object Set]\";\nvar weakMapTag2 = \"[object WeakMap]\";\nvar dataViewTag3 = \"[object DataView]\";\nvar dataViewCtorString = toSource_default(DataView_default);\nvar mapCtorString = toSource_default(Map_default);\nvar promiseCtorString = toSource_default(Promise_default);\nvar setCtorString = toSource_default(Set_default);\nvar weakMapCtorString = toSource_default(WeakMap_default);\nvar getTag = baseGetTag_default;\nif (DataView_default && getTag(new DataView_default(new ArrayBuffer(1))) != dataViewTag3 || Map_default && getTag(new Map_default()) != mapTag3 || Promise_default && getTag(Promise_default.resolve()) != promiseTag || Set_default && getTag(new Set_default()) != setTag3 || WeakMap_default && getTag(new WeakMap_default()) != weakMapTag2) {\n  getTag = function(value) {\n    var result = baseGetTag_default(value), Ctor = result == objectTag2 ? value.constructor : void 0, ctorString = Ctor ? toSource_default(Ctor) : \"\";\n    if (ctorString) {\n      switch (ctorString) {\n        case dataViewCtorString:\n          return dataViewTag3;\n        case mapCtorString:\n          return mapTag3;\n        case promiseCtorString:\n          return promiseTag;\n        case setCtorString:\n          return setTag3;\n        case weakMapCtorString:\n          return weakMapTag2;\n      }\n    }\n    return result;\n  };\n}\nvar getTag_default = getTag;\n\n// node_modules/lodash-es/_baseIsEqualDeep.js\nvar COMPARE_PARTIAL_FLAG4 = 1;\nvar argsTag3 = \"[object Arguments]\";\nvar arrayTag2 = \"[object Array]\";\nvar objectTag3 = \"[object Object]\";\nvar objectProto12 = Object.prototype;\nvar hasOwnProperty9 = objectProto12.hasOwnProperty;\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n  var objIsArr = isArray_default(object), othIsArr = isArray_default(other), objTag = objIsArr ? arrayTag2 : getTag_default(object), othTag = othIsArr ? arrayTag2 : getTag_default(other);\n  objTag = objTag == argsTag3 ? objectTag3 : objTag;\n  othTag = othTag == argsTag3 ? objectTag3 : othTag;\n  var objIsObj = objTag == objectTag3, othIsObj = othTag == objectTag3, isSameTag = objTag == othTag;\n  if (isSameTag && isBuffer_default(object)) {\n    if (!isBuffer_default(other)) {\n      return false;\n    }\n    objIsArr = true;\n    objIsObj = false;\n  }\n  if (isSameTag && !objIsObj) {\n    stack || (stack = new Stack_default());\n    return objIsArr || isTypedArray_default(object) ? equalArrays_default(object, other, bitmask, customizer, equalFunc, stack) : equalByTag_default(object, other, objTag, bitmask, customizer, equalFunc, stack);\n  }\n  if (!(bitmask & COMPARE_PARTIAL_FLAG4)) {\n    var objIsWrapped = objIsObj && hasOwnProperty9.call(object, \"__wrapped__\"), othIsWrapped = othIsObj && hasOwnProperty9.call(other, \"__wrapped__\");\n    if (objIsWrapped || othIsWrapped) {\n      var objUnwrapped = objIsWrapped ? object.value() : object, othUnwrapped = othIsWrapped ? other.value() : other;\n      stack || (stack = new Stack_default());\n      return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n    }\n  }\n  if (!isSameTag) {\n    return false;\n  }\n  stack || (stack = new Stack_default());\n  return equalObjects_default(object, other, bitmask, customizer, equalFunc, stack);\n}\nvar baseIsEqualDeep_default = baseIsEqualDeep;\n\n// node_modules/lodash-es/_baseIsEqual.js\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n  if (value === other) {\n    return true;\n  }\n  if (value == null || other == null || !isObjectLike_default(value) && !isObjectLike_default(other)) {\n    return value !== value && other !== other;\n  }\n  return baseIsEqualDeep_default(value, other, bitmask, customizer, baseIsEqual, stack);\n}\nvar baseIsEqual_default = baseIsEqual;\n\n// node_modules/lodash-es/isEqual.js\nfunction isEqual(value, other) {\n  return baseIsEqual_default(value, other);\n}\nvar isEqual_default = isEqual;\n\nexport {\n  baseGetTag_default,\n  isObjectLike_default,\n  isArray_default,\n  isObject_default,\n  isEqual_default\n};\n//# sourceMappingURL=chunk-6WCKJOFL.js.map","/*! *****************************************************************************\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","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp.call(b, prop))\n      __defNormalProp(a, prop, b[prop]);\n  if (__getOwnPropSymbols)\n    for (var prop of __getOwnPropSymbols(b)) {\n      if (__propIsEnum.call(b, prop))\n        __defNormalProp(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nvar __async = (__this, __arguments, generator) => {\n  return new Promise((resolve, reject) => {\n    var fulfilled = (value) => {\n      try {\n        step(generator.next(value));\n      } catch (e) {\n        reject(e);\n      }\n    };\n    var rejected = (value) => {\n      try {\n        step(generator.throw(value));\n      } catch (e) {\n        reject(e);\n      }\n    };\n    var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);\n    step((generator = generator.apply(__this, __arguments)).next());\n  });\n};\n\n// src/lib/AutoReconnectingWebsocket.ts\nimport ReconnectingWebSocket from \"reconnecting-websocket\";\nvar AutoReconnectingWebsocket = class extends ReconnectingWebSocket {\n  constructor(targetUrl, opts = {}) {\n    console.log(\"Opening websocket to\", targetUrl);\n    super(() => this.targetUrl || targetUrl, void 0, {\n      startClosed: true\n    });\n    this.opts = opts;\n    this.disposed = false;\n    Object.defineProperty(this, \"url\", {\n      get() {\n        return this.targetUrl;\n      }\n    });\n    this.targetUrl = targetUrl;\n    this.addEventListener(\"open\", () => {\n      console.log(`Websocket to ${this.url} opened`);\n    });\n    this.addEventListener(\"message\", (ev) => {\n      if (!this.receivedFirstMessage) {\n        this.receivedFirstMessage = ev;\n      }\n    });\n    this.addEventListener(\"close\", () => {\n      console.log(`Websocket to ${this.url} closed`);\n    });\n    const origReconnect = this.reconnect;\n    this.reconnect = () => {\n      if (this.opts.mock) {\n        this.opts.mock.handleWebsocketConnection(this);\n      } else {\n        origReconnect.apply(this);\n      }\n    };\n    this.reconnect();\n  }\n  changeUrl(targetUrl) {\n    this.receivedFirstMessage = void 0;\n    this.targetUrl = targetUrl;\n    this.reconnect();\n  }\n  sendJson(data) {\n    if (this.opts.mock) {\n      this.opts.mock.handleWebsocketMessage(this, JSON.stringify(data));\n    } else {\n      this.send(JSON.stringify(data));\n    }\n  }\n  /**\n   * Permanently close this websocket and indicate that\n   * this object should not be used again.\n   **/\n  dispose() {\n    this.close();\n    this.disposed = true;\n    if (this.opts.onDispose) {\n      this.opts.onDispose();\n    }\n  }\n  /**\n   * Returns a promise that resolves once the websocket\n   * is in the OPEN state. */\n  opened() {\n    return __async(this, null, function* () {\n      return new Promise((resolve, reject) => {\n        if (this.readyState === WebSocket.OPEN) {\n          resolve();\n        } else {\n          this.addEventListener(\"open\", () => resolve());\n          this.addEventListener(\"error\", reject);\n        }\n      });\n    });\n  }\n  /**\n   * Returns a promise that resolves once the websocket\n   * is in the CLOSED state. */\n  closed() {\n    return __async(this, null, function* () {\n      return new Promise((resolve, reject) => {\n        if (this.readyState === WebSocket.CLOSED) {\n          resolve();\n        } else {\n          this.addEventListener(\"close\", () => resolve());\n          this.addEventListener(\"error\", reject);\n        }\n      });\n    });\n  }\n  /**\n   * Returns a promise that resolves when the first message\n   * is received from the websocket. Resolves immediately if\n   * the first message has already been received.\n   */\n  firstMessage() {\n    return __async(this, null, function* () {\n      if (this.receivedFirstMessage) {\n        return this.receivedFirstMessage;\n      }\n      return new Promise((resolve, reject) => {\n        const onMessage = (ev) => {\n          this.receivedFirstMessage = ev;\n          this.removeEventListener(\"message\", onMessage);\n          this.removeEventListener(\"error\", onError);\n          resolve(ev);\n        };\n        const onError = (ev) => {\n          this.removeEventListener(\"message\", onMessage);\n          this.removeEventListener(\"error\", onError);\n          reject(ev);\n        };\n        this.addEventListener(\"message\", onMessage);\n        this.addEventListener(\"error\", onError);\n      });\n    });\n  }\n  /**\n   * Returns a promise that resolves when the next message\n   * is received from the websocket.\n   */\n  nextMessage() {\n    return __async(this, null, function* () {\n      return new Promise((resolve, reject) => {\n        const onMessage = (ev) => {\n          this.removeEventListener(\"message\", onMessage);\n          this.removeEventListener(\"error\", onError);\n          resolve(ev);\n        };\n        const onError = (ev) => {\n          this.removeEventListener(\"message\", onMessage);\n          this.removeEventListener(\"error\", onError);\n          reject(ev);\n        };\n        this.addEventListener(\"message\", onMessage);\n        this.addEventListener(\"error\", onError);\n      });\n    });\n  }\n};\n\n// src/lib/availableStorage.ts\nvar AvailableStorage = class {\n  constructor() {\n    this.available = typeof window !== \"undefined\" && !!window.localStorage;\n  }\n  getJSON(key) {\n    if (!this.available) return null;\n    const result = window.localStorage.getItem(key);\n    if (result === null) return null;\n    try {\n      return JSON.parse(result);\n    } catch (err) {\n      return null;\n    }\n  }\n  setJSON(key, obj) {\n    if (!this.available) return null;\n    window.localStorage.setItem(key, JSON.stringify(obj));\n  }\n  delete(key) {\n    if (!this.available) return null;\n    window.localStorage.removeItem(key);\n  }\n  setString(key, value) {\n    if (!this.available) return null;\n    window.localStorage.setItem(key, value);\n  }\n  getString(key) {\n    if (!this.available) return null;\n    return window.localStorage.getItem(key);\n  }\n};\nvar availableStorage = new AvailableStorage();\n\n// src/lib/converters.ts\nfunction tryParseJson(json) {\n  try {\n    return JSON.parse(json);\n  } catch (e) {\n    return void 0;\n  }\n}\nfunction tryStringifyJson(json) {\n  try {\n    return JSON.stringify(json);\n  } catch (e) {\n    return void 0;\n  }\n}\nfunction makeUrlQueryString(obj) {\n  const str = new URLSearchParams(obj).toString();\n  return str ? `?${str}` : \"\";\n}\nfunction radiansToDegrees(radians) {\n  return radians * (180 / Math.PI);\n}\nfunction degreesToRadians(degrees) {\n  return degrees * (Math.PI / 180);\n}\nfunction poseToWandelscriptString(pose) {\n  var _a, _b, _c, _d, _e, _f;\n  const position = [pose.position.x, pose.position.y, pose.position.z];\n  const orientation = [\n    (_b = (_a = pose.orientation) == null ? void 0 : _a.x) != null ? _b : 0,\n    (_d = (_c = pose.orientation) == null ? void 0 : _c.y) != null ? _d : 0,\n    (_f = (_e = pose.orientation) == null ? void 0 : _e.z) != null ? _f : 0\n  ];\n  const positionValues = position.map((v) => v.toFixed(1));\n  const rotationValues = orientation.map((v) => v.toFixed(4));\n  return `(${positionValues.concat(rotationValues).join(\", \")})`;\n}\nfunction isSameCoordinateSystem(firstCoordSystem, secondCoordSystem) {\n  if (!firstCoordSystem) firstCoordSystem = \"world\";\n  if (!secondCoordSystem) secondCoordSystem = \"world\";\n  return firstCoordSystem === secondCoordSystem;\n}\n\n// src/LoginWithAuth0.ts\nvar DOMAIN_SUFFIX = \"wandelbots.io\";\nvar auth0ConfigMap = {\n  dev: {\n    domain: `https://auth.portal.dev.${DOMAIN_SUFFIX}`,\n    clientId: \"fLbJD0RLp5r2Dpucm5j8BjwMR6Hunfha\"\n  },\n  stg: {\n    domain: `https://auth.portal.stg.${DOMAIN_SUFFIX}`,\n    clientId: \"joVDeD9e786WzFNSGCqoVq7HNkWt5j6s\"\n  },\n  prod: {\n    domain: `https://auth.portal.${DOMAIN_SUFFIX}`,\n    clientId: \"J7WJUi38xVQdJAEBNRT9Xw1b0fXDb4J2\"\n  }\n};\nvar getAuth0Config = (instanceUrl) => {\n  if (instanceUrl.includes(`dev.${DOMAIN_SUFFIX}`)) return auth0ConfigMap.dev;\n  if (instanceUrl.includes(`stg.${DOMAIN_SUFFIX}`)) return auth0ConfigMap.stg;\n  if (instanceUrl.includes(DOMAIN_SUFFIX)) return auth0ConfigMap.prod;\n  throw new Error(\n    \"Unsupported instance URL. Cannot determine Auth0 configuration.\"\n  );\n};\nvar loginWithAuth0 = (instanceUrl) => __async(void 0, null, function* () {\n  var _a;\n  if (typeof window === \"undefined\") {\n    throw new Error(\n      `Access token must be set to use NovaClient when not in a browser environment.`\n    );\n  }\n  const auth0Config = getAuth0Config(instanceUrl);\n  if (new URL(instanceUrl).origin === window.location.origin) {\n    window.location.reload();\n    throw new Error(\n      \"Failed to reload page to get auth details, please refresh manually\"\n    );\n  }\n  const { Auth0Client } = yield import(\"@auth0/auth0-spa-js\");\n  const auth0Client = new Auth0Client({\n    domain: auth0Config.domain,\n    clientId: (_a = auth0Config.clientId) != null ? _a : \"\",\n    useRefreshTokens: false,\n    authorizationParams: {\n      audience: \"nova-api\",\n      redirect_uri: window.location.origin\n    }\n  });\n  if (window.location.search.includes(\"code=\") && window.location.search.includes(\"state=\")) {\n    const { appState } = yield auth0Client.handleRedirectCallback();\n    window.history.replaceState(\n      {},\n      document.title,\n      (appState == null ? void 0 : appState.returnTo) || window.location.pathname\n    );\n  } else {\n    yield auth0Client.loginWithRedirect();\n  }\n  const accessToken = yield auth0Client.getTokenSilently();\n  return accessToken;\n});\n\nexport {\n  __spreadValues,\n  __spreadProps,\n  __async,\n  AutoReconnectingWebsocket,\n  availableStorage,\n  tryParseJson,\n  tryStringifyJson,\n  makeUrlQueryString,\n  radiansToDegrees,\n  degreesToRadians,\n  poseToWandelscriptString,\n  isSameCoordinateSystem,\n  loginWithAuth0\n};\n//# sourceMappingURL=chunk-V3NJLR6P.js.map","'use strict';\n\nexport default function bind(fn, thisArg) {\n  return function wrap() {\n    return fn.apply(thisArg, arguments);\n  };\n}\n","'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\n\nconst kindOf = (cache => thing => {\n    const str = toString.call(thing);\n    return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n  type = type.toLowerCase();\n  return (thing) => kindOf(thing) === type\n}\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n  return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n    && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n  let result;\n  if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n    result = ArrayBuffer.isView(val);\n  } else {\n    result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n  }\n  return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n  if (kindOf(val) !== 'object') {\n    return false;\n  }\n\n  const prototype = getPrototypeOf(val);\n  return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in val) && !(Symbol.iterator in val);\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n  let kind;\n  return thing && (\n    (typeof FormData === 'function' && thing instanceof FormData) || (\n      isFunction(thing.append) && (\n        (kind = kindOf(thing)) === 'formdata' ||\n        // detect form-data instance\n        (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n      )\n    )\n  )\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n  str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n  // Don't bother if no value provided\n  if (obj === null || typeof obj === 'undefined') {\n    return;\n  }\n\n  let i;\n  let l;\n\n  // Force an array if not already something iterable\n  if (typeof obj !== 'object') {\n    /*eslint no-param-reassign:0*/\n    obj = [obj];\n  }\n\n  if (isArray(obj)) {\n    // Iterate over array values\n    for (i = 0, l = obj.length; i < l; i++) {\n      fn.call(null, obj[i], i, obj);\n    }\n  } else {\n    // Iterate over object keys\n    const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n    const len = keys.length;\n    let key;\n\n    for (i = 0; i < len; i++) {\n      key = keys[i];\n      fn.call(null, obj[key], key, obj);\n    }\n  }\n}\n\nfunction findKey(obj, key) {\n  key = key.toLowerCase();\n  const keys = Object.keys(obj);\n  let i = keys.length;\n  let _key;\n  while (i-- > 0) {\n    _key = keys[i];\n    if (key === _key.toLowerCase()) {\n      return _key;\n    }\n  }\n  return null;\n}\n\nconst _global = (() => {\n  /*eslint no-undef:0*/\n  if (typeof globalThis !== \"undefined\") return globalThis;\n  return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n  const {caseless} = isContextDefined(this) && this || {};\n  const result = {};\n  const assignValue = (val, key) => {\n    const targetKey = caseless && findKey(result, key) || key;\n    if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n      result[targetKey] = merge(result[targetKey], val);\n    } else if (isPlainObject(val)) {\n      result[targetKey] = merge({}, val);\n    } else if (isArray(val)) {\n      result[targetKey] = val.slice();\n    } else {\n      result[targetKey] = val;\n    }\n  }\n\n  for (let i = 0, l = arguments.length; i < l; i++) {\n    arguments[i] && forEach(arguments[i], assignValue);\n  }\n  return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n  forEach(b, (val, key) => {\n    if (thisArg && isFunction(val)) {\n      a[key] = bind(val, thisArg);\n    } else {\n      a[key] = val;\n    }\n  }, {allOwnKeys});\n  return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n  if (content.charCodeAt(0) === 0xFEFF) {\n    content = content.slice(1);\n  }\n  return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n  constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n  constructor.prototype.constructor = constructor;\n  Object.defineProperty(constructor, 'super', {\n    value: superConstructor.prototype\n  });\n  props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n  let props;\n  let i;\n  let prop;\n  const merged = {};\n\n  destObj = destObj || {};\n  // eslint-disable-next-line no-eq-null,eqeqeq\n  if (sourceObj == null) return destObj;\n\n  do {\n    props = Object.getOwnPropertyNames(sourceObj);\n    i = props.length;\n    while (i-- > 0) {\n      prop = props[i];\n      if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n        destObj[prop] = sourceObj[prop];\n        merged[prop] = true;\n      }\n    }\n    sourceObj = filter !== false && getPrototypeOf(sourceObj);\n  } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n  return destObj;\n}\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n  str = String(str);\n  if (position === undefined || position > str.length) {\n    position = str.length;\n  }\n  position -= searchString.length;\n  const lastIndex = str.indexOf(searchString, position);\n  return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n  if (!thing) return null;\n  if (isArray(thing)) return thing;\n  let i = thing.length;\n  if (!isNumber(i)) return null;\n  const arr = new Array(i);\n  while (i-- > 0) {\n    arr[i] = thing[i];\n  }\n  return arr;\n}\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n  // eslint-disable-next-line func-names\n  return thing => {\n    return TypedArray && thing instanceof TypedArray;\n  };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object<any, any>} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n  const generator = obj && obj[Symbol.iterator];\n\n  const iterator = generator.call(obj);\n\n  let result;\n\n  while ((result = iterator.next()) && !result.done) {\n    const pair = result.value;\n    fn.call(obj, pair[0], pair[1]);\n  }\n}\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array<boolean>}\n */\nconst matchAll = (regExp, str) => {\n  let matches;\n  const arr = [];\n\n  while ((matches = regExp.exec(str)) !== null) {\n    arr.push(matches);\n  }\n\n  return arr;\n}\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n  return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,\n    function replacer(m, p1, p2) {\n      return p1.toUpperCase() + p2;\n    }\n  );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n  const descriptors = Object.getOwnPropertyDescriptors(obj);\n  const reducedDescriptors = {};\n\n  forEach(descriptors, (descriptor, name) => {\n    let ret;\n    if ((ret = reducer(descriptor, name, obj)) !== false) {\n      reducedDescriptors[name] = ret || descriptor;\n    }\n  });\n\n  Object.defineProperties(obj, reducedDescriptors);\n}\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n  reduceDescriptors(obj, (descriptor, name) => {\n    // skip restricted props in strict mode\n    if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n      return false;\n    }\n\n    const value = obj[name];\n\n    if (!isFunction(value)) return;\n\n    descriptor.enumerable = false;\n\n    if ('writable' in descriptor) {\n      descriptor.writable = false;\n      return;\n    }\n\n    if (!descriptor.set) {\n      descriptor.set = () => {\n        throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n      };\n    }\n  });\n}\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n  const obj = {};\n\n  const define = (arr) => {\n    arr.forEach(value => {\n      obj[value] = true;\n    });\n  }\n\n  isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n  return obj;\n}\n\nconst noop = () => {}\n\nconst toFiniteNumber = (value, defaultValue) => {\n  return value != null && Number.isFinite(value = +value) ? value : defaultValue;\n}\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n  return !!(thing && isFunction(thing.append) && thing[Symbol.toStringTag] === 'FormData' && thing[Symbol.iterator]);\n}\n\nconst toJSONObject = (obj) => {\n  const stack = new Array(10);\n\n  const visit = (source, i) => {\n\n    if (isObject(source)) {\n      if (stack.indexOf(source) >= 0) {\n        return;\n      }\n\n      if(!('toJSON' in source)) {\n        stack[i] = source;\n        const target = isArray(source) ? [] : {};\n\n        forEach(source, (value, key) => {\n          const reducedValue = visit(value, i + 1);\n          !isUndefined(reducedValue) && (target[key] = reducedValue);\n        });\n\n        stack[i] = undefined;\n\n        return target;\n      }\n    }\n\n    return source;\n  }\n\n  return visit(obj, 0);\n}\n\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\nconst isThenable = (thing) =>\n  thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n  if (setImmediateSupported) {\n    return setImmediate;\n  }\n\n  return postMessageSupported ? ((token, callbacks) => {\n    _global.addEventListener(\"message\", ({source, data}) => {\n      if (source === _global && data === token) {\n        callbacks.length && callbacks.shift()();\n      }\n    }, false);\n\n    return (cb) => {\n      callbacks.push(cb);\n      _global.postMessage(token, \"*\");\n    }\n  })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb);\n})(\n  typeof setImmediate === 'function',\n  isFunction(_global.postMessage)\n);\n\nconst asap = typeof queueMicrotask !== 'undefined' ?\n  queueMicrotask.bind(_global) : ( typeof process !== 'undefined' && process.nextTick || _setImmediate);\n\n// *********************\n\nexport default {\n  isArray,\n  isArrayBuffer,\n  isBuffer,\n  isFormData,\n  isArrayBufferView,\n  isString,\n  isNumber,\n  isBoolean,\n  isObject,\n  isPlainObject,\n  isReadableStream,\n  isRequest,\n  isResponse,\n  isHeaders,\n  isUndefined,\n  isDate,\n  isFile,\n  isBlob,\n  isRegExp,\n  isFunction,\n  isStream,\n  isURLSearchParams,\n  isTypedArray,\n  isFileList,\n  forEach,\n  merge,\n  extend,\n  trim,\n  stripBOM,\n  inherits,\n  toFlatObject,\n  kindOf,\n  kindOfTest,\n  endsWith,\n  toArray,\n  forEachEntry,\n  matchAll,\n  isHTMLForm,\n  hasOwnProperty,\n  hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n  reduceDescriptors,\n  freezeMethods,\n  toObjectSet,\n  toCamelCase,\n  noop,\n  toFiniteNumber,\n  findKey,\n  global: _global,\n  isContextDefined,\n  isSpecCompliantForm,\n  toJSONObject,\n  isAsyncFn,\n  isThenable,\n  setImmediate: _setImmediate,\n  asap\n};\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n  Error.call(this);\n\n  if (Error.captureStackTrace) {\n    Error.captureStackTrace(this, this.constructor);\n  } else {\n    this.stack = (new Error()).stack;\n  }\n\n  this.message = message;\n  this.name = 'AxiosError';\n  code && (this.code = code);\n  config && (this.config = config);\n  request && (this.request = request);\n  if (response) {\n    this.response = response;\n    this.status = response.status ? response.status : null;\n  }\n}\n\nutils.inherits(AxiosError, Error, {\n  toJSON: function toJSON() {\n    return {\n      // Standard\n      message: this.message,\n      name: this.name,\n      // Microsoft\n      description: this.description,\n      number: this.number,\n      // Mozilla\n      fileName: this.fileName,\n      lineNumber: this.lineNumber,\n      columnNumber: this.columnNumber,\n      stack: this.stack,\n      // Axios\n      config: utils.toJSONObject(this.config),\n      code: this.code,\n      status: this.status\n    };\n  }\n});\n\nconst prototype = AxiosError.prototype;\nconst descriptors = {};\n\n[\n  'ERR_BAD_OPTION_VALUE',\n  'ERR_BAD_OPTION',\n  'ECONNABORTED',\n  'ETIMEDOUT',\n  'ERR_NETWORK',\n  'ERR_FR_TOO_MANY_REDIRECTS',\n  'ERR_DEPRECATED',\n  'ERR_BAD_RESPONSE',\n  'ERR_BAD_REQUEST',\n  'ERR_CANCELED',\n  'ERR_NOT_SUPPORT',\n  'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n  descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n  const axiosError = Object.create(prototype);\n\n  utils.toFlatObject(error, axiosError, function filter(obj) {\n    return obj !== Error.prototype;\n  }, prop => {\n    return prop !== 'isAxiosError';\n  });\n\n  AxiosError.call(axiosError, error.message, code, config, request, response);\n\n  axiosError.cause = error;\n\n  axiosError.name = error.name;\n\n  customProps && Object.assign(axiosError, customProps);\n\n  return axiosError;\n};\n\nexport default AxiosError;\n","// eslint-disable-next-line strict\nexport default null;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n  return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n  return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n  if (!path) return key;\n  return path.concat(key).map(function each(token, i) {\n    // eslint-disable-next-line no-param-reassign\n    token = removeBrackets(token);\n    return !dots && i ? '[' + token + ']' : token;\n  }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array<any>} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n  return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n  return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object<any, any>} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object<string, any>} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n  if (!utils.isObject(obj)) {\n    throw new TypeError('target must be an object');\n  }\n\n  // eslint-disable-next-line no-param-reassign\n  formData = formData || new (PlatformFormData || FormData)();\n\n  // eslint-disable-next-line no-param-reassign\n  options = utils.toFlatObject(options, {\n    metaTokens: true,\n    dots: false,\n    indexes: false\n  }, false, function defined(option, source) {\n    // eslint-disable-next-line no-eq-null,eqeqeq\n    return !utils.isUndefined(source[option]);\n  });\n\n  const metaTokens = options.metaTokens;\n  // eslint-disable-next-line no-use-before-define\n  const visitor = options.visitor || defaultVisitor;\n  const dots = options.dots;\n  const indexes = options.indexes;\n  const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n  const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n  if (!utils.isFunction(visitor)) {\n    throw new TypeError('visitor must be a function');\n  }\n\n  function convertValue(value) {\n    if (value === null) return '';\n\n    if (utils.isDate(value)) {\n      return value.toISOString();\n    }\n\n    if (!useBlob && utils.isBlob(value)) {\n      throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n    }\n\n    if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n      return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n    }\n\n    return value;\n  }\n\n  /**\n   * Default visitor.\n   *\n   * @param {*} value\n   * @param {String|Number} key\n   * @param {Array<String|Number>} path\n   * @this {FormData}\n   *\n   * @returns {boolean} return true to visit the each prop of the value recursively\n   */\n  function defaultVisitor(value, key, path) {\n    let arr = value;\n\n    if (value && !path && typeof value === 'object') {\n      if (utils.endsWith(key, '{}')) {\n        // eslint-disable-next-line no-param-reassign\n        key = metaTokens ? key : key.slice(0, -2);\n        // eslint-disable-next-line no-param-reassign\n        value = JSON.stringify(value);\n      } else if (\n        (utils.isArray(value) && isFlatArray(value)) ||\n        ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n        )) {\n        // eslint-disable-next-line no-param-reassign\n        key = removeBrackets(key);\n\n        arr.forEach(function each(el, index) {\n          !(utils.isUndefined(el) || el === null) && formData.append(\n            // eslint-disable-next-line no-nested-ternary\n            indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n            convertValue(el)\n          );\n        });\n        return false;\n      }\n    }\n\n    if (isVisitable(value)) {\n      return true;\n    }\n\n    formData.append(renderKey(path, key, dots), convertValue(value));\n\n    return false;\n  }\n\n  const stack = [];\n\n  const exposedHelpers = Object.assign(predicates, {\n    defaultVisitor,\n    convertValue,\n    isVisitable\n  });\n\n  function build(value, path) {\n    if (utils.isUndefined(value)) return;\n\n    if (stack.indexOf(value) !== -1) {\n      throw Error('Circular reference detected in ' + path.join('.'));\n    }\n\n    stack.push(value);\n\n    utils.forEach(value, function each(el, key) {\n      const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n        formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n      );\n\n      if (result === true) {\n        build(el, path ? path.concat(key) : [key]);\n      }\n    });\n\n    stack.pop();\n  }\n\n  if (!utils.isObject(obj)) {\n    throw new TypeError('data must be an object');\n  }\n\n  build(obj);\n\n  return formData;\n}\n\nexport default toFormData;\n","'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n  const charMap = {\n    '!': '%21',\n    \"'\": '%27',\n    '(': '%28',\n    ')': '%29',\n    '~': '%7E',\n    '%20': '+',\n    '%00': '\\x00'\n  };\n  return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n    return charMap[match];\n  });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object<string, any>} params - The parameters to be converted to a FormData object.\n * @param {Object<string, any>} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n  this._pairs = [];\n\n  params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n  this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n  const _encode = encoder ? function(value) {\n    return encoder.call(this, value, encode);\n  } : encode;\n\n  return this._pairs.map(function each(pair) {\n    return _encode(pair[0]) + '=' + _encode(pair[1]);\n  }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n  return encodeURIComponent(val).\n    replace(/%3A/gi, ':').\n    replace(/%24/g, '$').\n    replace(/%2C/gi, ',').\n    replace(/%20/g, '+').\n    replace(/%5B/gi, '[').\n    replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?(object|Function)} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n  /*eslint no-param-reassign:0*/\n  if (!params) {\n    return url;\n  }\n  \n  const _encode = options && options.encode || encode;\n\n  if (utils.isFunction(options)) {\n    options = {\n      serialize: options\n    };\n  } \n\n  const serializeFn = options && options.serialize;\n\n  let serializedParams;\n\n  if (serializeFn) {\n    serializedParams = serializeFn(params, options);\n  } else {\n    serializedParams = utils.isURLSearchParams(params) ?\n      params.toString() :\n      new AxiosURLSearchParams(params, options).toString(_encode);\n  }\n\n  if (serializedParams) {\n    const hashmarkIndex = url.indexOf(\"#\");\n\n    if (hashmarkIndex !== -1) {\n      url = url.slice(0, hashmarkIndex);\n    }\n    url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n  }\n\n  return url;\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\nclass InterceptorManager {\n  constructor() {\n    this.handlers = [];\n  }\n\n  /**\n   * Add a new interceptor to the stack\n   *\n   * @param {Function} fulfilled The function to handle `then` for a `Promise`\n   * @param {Function} rejected The function to handle `reject` for a `Promise`\n   *\n   * @return {Number} An ID used to remove interceptor later\n   */\n  use(fulfilled, rejected, options) {\n    this.handlers.push({\n      fulfilled,\n      rejected,\n      synchronous: options ? options.synchronous : false,\n      runWhen: options ? options.runWhen : null\n    });\n    return this.handlers.length - 1;\n  }\n\n  /**\n   * Remove an interceptor from the stack\n   *\n   * @param {Number} id The ID that was returned by `use`\n   *\n   * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n   */\n  eject(id) {\n    if (this.handlers[id]) {\n      this.handlers[id] = null;\n    }\n  }\n\n  /**\n   * Clear all interceptors from the stack\n   *\n   * @returns {void}\n   */\n  clear() {\n    if (this.handlers) {\n      this.handlers = [];\n    }\n  }\n\n  /**\n   * Iterate over all the registered interceptors\n   *\n   * This method is particularly useful for skipping over any\n   * interceptors that may have become `null` calling `eject`.\n   *\n   * @param {Function} fn The function to call for each interceptor\n   *\n   * @returns {void}\n   */\n  forEach(fn) {\n    utils.forEach(this.handlers, function forEachHandler(h) {\n      if (h !== null) {\n        fn(h);\n      }\n    });\n  }\n}\n\nexport default InterceptorManager;\n","'use strict';\n\nexport default {\n  silentJSONParsing: true,\n  forcedJSONParsing: true,\n  clarifyTimeoutError: false\n};\n","'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n","'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n","'use strict'\n\nexport default typeof Blob !== 'undefined' ? Blob : null\n","import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\nimport Blob from './classes/Blob.js'\n\nexport default {\n  isBrowser: true,\n  classes: {\n    URLSearchParams,\n    FormData,\n    Blob\n  },\n  protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n","const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst _navigator = typeof navigator === 'object' && navigator || undefined;\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n *  typeof window -> undefined\n *  typeof document -> undefined\n *\n * react-native:\n *  navigator.product -> 'ReactNative'\n * nativescript\n *  navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = hasBrowserEnv &&\n  (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n  return (\n    typeof WorkerGlobalScope !== 'undefined' &&\n    // eslint-disable-next-line no-undef\n    self instanceof WorkerGlobalScope &&\n    typeof self.importScripts === 'function'\n  );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nexport {\n  hasBrowserEnv,\n  hasStandardBrowserWebWorkerEnv,\n  hasStandardBrowserEnv,\n  _navigator as navigator,\n  origin\n}\n","import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n  ...utils,\n  ...platform\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n  return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({\n    visitor: function(value, key, path, helpers) {\n      if (platform.isNode && utils.isBuffer(value)) {\n        this.append(key, value.toString('base64'));\n        return false;\n      }\n\n      return helpers.defaultVisitor.apply(this, arguments);\n    }\n  }, options));\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n  // foo[x][y][z]\n  // foo.x.y.z\n  // foo-x-y-z\n  // foo x y z\n  return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n    return match[0] === '[]' ? '' : match[1] || match[0];\n  });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array<any>} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n  const obj = {};\n  const keys = Object.keys(arr);\n  let i;\n  const len = keys.length;\n  let key;\n  for (i = 0; i < len; i++) {\n    key = keys[i];\n    obj[key] = arr[key];\n  }\n  return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object<string, any> | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n  function buildPath(path, value, target, index) {\n    let name = path[index++];\n\n    if (name === '__proto__') return true;\n\n    const isNumericKey = Number.isFinite(+name);\n    const isLast = index >= path.length;\n    name = !name && utils.isArray(target) ? target.length : name;\n\n    if (isLast) {\n      if (utils.hasOwnProp(target, name)) {\n        target[name] = [target[name], value];\n      } else {\n        target[name] = value;\n      }\n\n      return !isNumericKey;\n    }\n\n    if (!target[name] || !utils.isObject(target[name])) {\n      target[name] = [];\n    }\n\n    const result = buildPath(path, value, target[name], index);\n\n    if (result && utils.isArray(target[name])) {\n      target[name] = arrayToObject(target[name]);\n    }\n\n    return !isNumericKey;\n  }\n\n  if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n    const obj = {};\n\n    utils.forEachEntry(formData, (name, value) => {\n      buildPath(parsePropPath(name), value, obj, 0);\n    });\n\n    return obj;\n  }\n\n  return null;\n}\n\nexport default formDataToJSON;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n  if (utils.isString(rawValue)) {\n    try {\n      (parser || JSON.parse)(rawValue);\n      return utils.trim(rawValue);\n    } catch (e) {\n      if (e.name !== 'SyntaxError') {\n        throw e;\n      }\n    }\n  }\n\n  return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n  transitional: transitionalDefaults,\n\n  adapter: ['xhr', 'http', 'fetch'],\n\n  transformRequest: [function transformRequest(data, headers) {\n    const contentType = headers.getContentType() || '';\n    const hasJSONContentType = contentType.indexOf('application/json') > -1;\n    const isObjectPayload = utils.isObject(data);\n\n    if (isObjectPayload && utils.isHTMLForm(data)) {\n      data = new FormData(data);\n    }\n\n    const isFormData = utils.isFormData(data);\n\n    if (isFormData) {\n      return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n    }\n\n    if (utils.isArrayBuffer(data) ||\n      utils.isBuffer(data) ||\n      utils.isStream(data) ||\n      utils.isFile(data) ||\n      utils.isBlob(data) ||\n      utils.isReadableStream(data)\n    ) {\n      return data;\n    }\n    if (utils.isArrayBufferView(data)) {\n      return data.buffer;\n    }\n    if (utils.isURLSearchParams(data)) {\n      headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n      return data.toString();\n    }\n\n    let isFileList;\n\n    if (isObjectPayload) {\n      if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n        return toURLEncodedForm(data, this.formSerializer).toString();\n      }\n\n      if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n        const _FormData = this.env && this.env.FormData;\n\n        return toFormData(\n          isFileList ? {'files[]': data} : data,\n          _FormData && new _FormData(),\n          this.formSerializer\n        );\n      }\n    }\n\n    if (isObjectPayload || hasJSONContentType ) {\n      headers.setContentType('application/json', false);\n      return stringifySafely(data);\n    }\n\n    return data;\n  }],\n\n  transformResponse: [function transformResponse(data) {\n    const transitional = this.transitional || defaults.transitional;\n    const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n    const JSONRequested = this.responseType === 'json';\n\n    if (utils.isResponse(data) || utils.isReadableStream(data)) {\n      return data;\n    }\n\n    if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n      const silentJSONParsing = transitional && transitional.silentJSONParsing;\n      const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n      try {\n        return JSON.parse(data);\n      } catch (e) {\n        if (strictJSONParsing) {\n          if (e.name === 'SyntaxError') {\n            throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n          }\n          throw e;\n        }\n      }\n    }\n\n    return data;\n  }],\n\n  /**\n   * A timeout in milliseconds to abort a request. If set to 0 (default) a\n   * timeout is not created.\n   */\n  timeout: 0,\n\n  xsrfCookieName: 'XSRF-TOKEN',\n  xsrfHeaderName: 'X-XSRF-TOKEN',\n\n  maxContentLength: -1,\n  maxBodyLength: -1,\n\n  env: {\n    FormData: platform.classes.FormData,\n    Blob: platform.classes.Blob\n  },\n\n  validateStatus: function validateStatus(status) {\n    return status >= 200 && status < 300;\n  },\n\n  headers: {\n    common: {\n      'Accept': 'application/json, text/plain, */*',\n      'Content-Type': undefined\n    }\n  }\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n  defaults.headers[method] = {};\n});\n\nexport default defaults;\n","'use strict';\n\nimport utils from './../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n  'age', 'authorization', 'content-length', 'content-type', 'etag',\n  'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n  'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n  'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n  const parsed = {};\n  let key;\n  let val;\n  let i;\n\n  rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n    i = line.indexOf(':');\n    key = line.substring(0, i).trim().toLowerCase();\n    val = line.substring(i + 1).trim();\n\n    if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n      return;\n    }\n\n    if (key === 'set-cookie') {\n      if (parsed[key]) {\n        parsed[key].push(val);\n      } else {\n        parsed[key] = [val];\n      }\n    } else {\n      parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n    }\n  });\n\n  return parsed;\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n  return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n  if (value === false || value == null) {\n    return value;\n  }\n\n  return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n  const tokens = Object.create(null);\n  const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n  let match;\n\n  while ((match = tokensRE.exec(str))) {\n    tokens[match[1]] = match[2];\n  }\n\n  return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n  if (utils.isFunction(filter)) {\n    return filter.call(this, value, header);\n  }\n\n  if (isHeaderNameFilter) {\n    value = header;\n  }\n\n  if (!utils.isString(value)) return;\n\n  if (utils.isString(filter)) {\n    return value.indexOf(filter) !== -1;\n  }\n\n  if (utils.isRegExp(filter)) {\n    return filter.test(value);\n  }\n}\n\nfunction formatHeader(header) {\n  return header.trim()\n    .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n      return char.toUpperCase() + str;\n    });\n}\n\nfunction buildAccessors(obj, header) {\n  const accessorName = utils.toCamelCase(' ' + header);\n\n  ['get', 'set', 'has'].forEach(methodName => {\n    Object.defineProperty(obj, methodName + accessorName, {\n      value: function(arg1, arg2, arg3) {\n        return this[methodName].call(this, header, arg1, arg2, arg3);\n      },\n      configurable: true\n    });\n  });\n}\n\nclass AxiosHeaders {\n  constructor(headers) {\n    headers && this.set(headers);\n  }\n\n  set(header, valueOrRewrite, rewrite) {\n    const self = this;\n\n    function setHeader(_value, _header, _rewrite) {\n      const lHeader = normalizeHeader(_header);\n\n      if (!lHeader) {\n        throw new Error('header name must be a non-empty string');\n      }\n\n      const key = utils.findKey(self, lHeader);\n\n      if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n        self[key || _header] = normalizeValue(_value);\n      }\n    }\n\n    const setHeaders = (headers, _rewrite) =>\n      utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n    if (utils.isPlainObject(header) || header instanceof this.constructor) {\n      setHeaders(header, valueOrRewrite)\n    } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n      setHeaders(parseHeaders(header), valueOrRewrite);\n    } else if (utils.isHeaders(header)) {\n      for (const [key, value] of header.entries()) {\n        setHeader(value, key, rewrite);\n      }\n    } else {\n      header != null && setHeader(valueOrRewrite, header, rewrite);\n    }\n\n    return this;\n  }\n\n  get(header, parser) {\n    header = normalizeHeader(header);\n\n    if (header) {\n      const key = utils.findKey(this, header);\n\n      if (key) {\n        const value = this[key];\n\n        if (!parser) {\n          return value;\n        }\n\n        if (parser === true) {\n          return parseTokens(value);\n        }\n\n        if (utils.isFunction(parser)) {\n          return parser.call(this, value, key);\n        }\n\n        if (utils.isRegExp(parser)) {\n          return parser.exec(value);\n        }\n\n        throw new TypeError('parser must be boolean|regexp|function');\n      }\n    }\n  }\n\n  has(header, matcher) {\n    header = normalizeHeader(header);\n\n    if (header) {\n      const key = utils.findKey(this, header);\n\n      return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n    }\n\n    return false;\n  }\n\n  delete(header, matcher) {\n    const self = this;\n    let deleted = false;\n\n    function deleteHeader(_header) {\n      _header = normalizeHeader(_header);\n\n      if (_header) {\n        const key = utils.findKey(self, _header);\n\n        if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n          delete self[key];\n\n          deleted = true;\n        }\n      }\n    }\n\n    if (utils.isArray(header)) {\n      header.forEach(deleteHeader);\n    } else {\n      deleteHeader(header);\n    }\n\n    return deleted;\n  }\n\n  clear(matcher) {\n    const keys = Object.keys(this);\n    let i = keys.length;\n    let deleted = false;\n\n    while (i--) {\n      const key = keys[i];\n      if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n        delete this[key];\n        deleted = true;\n      }\n    }\n\n    return deleted;\n  }\n\n  normalize(format) {\n    const self = this;\n    const headers = {};\n\n    utils.forEach(this, (value, header) => {\n      const key = utils.findKey(headers, header);\n\n      if (key) {\n        self[key] = normalizeValue(value);\n        delete self[header];\n        return;\n      }\n\n      const normalized = format ? formatHeader(header) : String(header).trim();\n\n      if (normalized !== header) {\n        delete self[header];\n      }\n\n      self[normalized] = normalizeValue(value);\n\n      headers[normalized] = true;\n    });\n\n    return this;\n  }\n\n  concat(...targets) {\n    return this.constructor.concat(this, ...targets);\n  }\n\n  toJSON(asStrings) {\n    const obj = Object.create(null);\n\n    utils.forEach(this, (value, header) => {\n      value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n    });\n\n    return obj;\n  }\n\n  [Symbol.iterator]() {\n    return Object.entries(this.toJSON())[Symbol.iterator]();\n  }\n\n  toString() {\n    return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'AxiosHeaders';\n  }\n\n  static from(thing) {\n    return thing instanceof this ? thing : new this(thing);\n  }\n\n  static concat(first, ...targets) {\n    const computed = new this(first);\n\n    targets.forEach((target) => computed.set(target));\n\n    return computed;\n  }\n\n  static accessor(header) {\n    const internals = this[$internals] = (this[$internals] = {\n      accessors: {}\n    });\n\n    const accessors = internals.accessors;\n    const prototype = this.prototype;\n\n    function defineAccessor(_header) {\n      const lHeader = normalizeHeader(_header);\n\n      if (!accessors[lHeader]) {\n        buildAccessors(prototype, _header);\n        accessors[lHeader] = true;\n      }\n    }\n\n    utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n    return this;\n  }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n  let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n  return {\n    get: () => value,\n    set(headerValue) {\n      this[mapped] = headerValue;\n    }\n  }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n","'use strict';\n\nimport utils from './../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n  const config = this || defaults;\n  const context = response || config;\n  const headers = AxiosHeaders.from(context.headers);\n  let data = context.data;\n\n  utils.forEach(fns, function transform(fn) {\n    data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n  });\n\n  headers.normalize();\n\n  return data;\n}\n","'use strict';\n\nexport default function isCancel(value) {\n  return !!(value && value.__CANCEL__);\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n  // eslint-disable-next-line no-eq-null,eqeqeq\n  AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n  this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n  __CANCEL__: true\n});\n\nexport default CanceledError;\n","'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n  const validateStatus = response.config.validateStatus;\n  if (!response.status || !validateStatus || validateStatus(response.status)) {\n    resolve(response);\n  } else {\n    reject(new AxiosError(\n      'Request failed with status code ' + response.status,\n      [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n      response.config,\n      response.request,\n      response\n    ));\n  }\n}\n","'use strict';\n\nexport default function parseProtocol(url) {\n  const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n  return match && match[1] || '';\n}\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n  samplesCount = samplesCount || 10;\n  const bytes = new Array(samplesCount);\n  const timestamps = new Array(samplesCount);\n  let head = 0;\n  let tail = 0;\n  let firstSampleTS;\n\n  min = min !== undefined ? min : 1000;\n\n  return function push(chunkLength) {\n    const now = Date.now();\n\n    const startedAt = timestamps[tail];\n\n    if (!firstSampleTS) {\n      firstSampleTS = now;\n    }\n\n    bytes[head] = chunkLength;\n    timestamps[head] = now;\n\n    let i = tail;\n    let bytesCount = 0;\n\n    while (i !== head) {\n      bytesCount += bytes[i++];\n      i = i % samplesCount;\n    }\n\n    head = (head + 1) % samplesCount;\n\n    if (head === tail) {\n      tail = (tail + 1) % samplesCount;\n    }\n\n    if (now - firstSampleTS < min) {\n      return;\n    }\n\n    const passed = startedAt && now - startedAt;\n\n    return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n  };\n}\n\nexport default speedometer;\n","/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n  let timestamp = 0;\n  let threshold = 1000 / freq;\n  let lastArgs;\n  let timer;\n\n  const invoke = (args, now = Date.now()) => {\n    timestamp = now;\n    lastArgs = null;\n    if (timer) {\n      clearTimeout(timer);\n      timer = null;\n    }\n    fn.apply(null, args);\n  }\n\n  const throttled = (...args) => {\n    const now = Date.now();\n    const passed = now - timestamp;\n    if ( passed >= threshold) {\n      invoke(args, now);\n    } else {\n      lastArgs = args;\n      if (!timer) {\n        timer = setTimeout(() => {\n          timer = null;\n          invoke(lastArgs)\n        }, threshold - passed);\n      }\n    }\n  }\n\n  const flush = () => lastArgs && invoke(lastArgs);\n\n  return [throttled, flush];\n}\n\nexport default throttle;\n","import speedometer from \"./speedometer.js\";\nimport throttle from \"./throttle.js\";\nimport utils from \"../utils.js\";\n\nexport const progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n  let bytesNotified = 0;\n  const _speedometer = speedometer(50, 250);\n\n  return throttle(e => {\n    const loaded = e.loaded;\n    const total = e.lengthComputable ? e.total : undefined;\n    const progressBytes = loaded - bytesNotified;\n    const rate = _speedometer(progressBytes);\n    const inRange = loaded <= total;\n\n    bytesNotified = loaded;\n\n    const data = {\n      loaded,\n      total,\n      progress: total ? (loaded / total) : undefined,\n      bytes: progressBytes,\n      rate: rate ? rate : undefined,\n      estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n      event: e,\n      lengthComputable: total != null,\n      [isDownloadStream ? 'download' : 'upload']: true\n    };\n\n    listener(data);\n  }, freq);\n}\n\nexport const progressEventDecorator = (total, throttled) => {\n  const lengthComputable = total != null;\n\n  return [(loaded) => throttled[0]({\n    lengthComputable,\n    total,\n    loaded\n  }), throttled[1]];\n}\n\nexport const asyncDecorator = (fn) => (...args) => utils.asap(() => fn(...args));\n","import platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => {\n  url = new URL(url, platform.origin);\n\n  return (\n    origin.protocol === url.protocol &&\n    origin.host === url.host &&\n    (isMSIE || origin.port === url.port)\n  );\n})(\n  new URL(platform.origin),\n  platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent)\n) : () => true;\n","import utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n  // Standard browser envs support document.cookie\n  {\n    write(name, value, expires, path, domain, secure) {\n      const cookie = [name + '=' + encodeURIComponent(value)];\n\n      utils.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString());\n\n      utils.isString(path) && cookie.push('path=' + path);\n\n      utils.isString(domain) && cookie.push('domain=' + domain);\n\n      secure === true && cookie.push('secure');\n\n      document.cookie = cookie.join('; ');\n    },\n\n    read(name) {\n      const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n      return (match ? decodeURIComponent(match[3]) : null);\n    },\n\n    remove(name) {\n      this.write(name, '', Date.now() - 86400000);\n    }\n  }\n\n  :\n\n  // Non-standard browser env (web workers, react-native) lack needed support.\n  {\n    write() {},\n    read() {\n      return null;\n    },\n    remove() {}\n  };\n\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n  // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n  // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n  // by any combination of letters, digits, plus, period, or hyphen.\n  return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n  return relativeURL\n    ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n    : baseURL;\n}\n","'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) {\n  let isRelativeUrl = !isAbsoluteURL(requestedURL);\n  if (baseURL && isRelativeUrl || allowAbsoluteUrls == false) {\n    return combineURLs(baseURL, requestedURL);\n  }\n  return requestedURL;\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? { ...thing } : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n  // eslint-disable-next-line no-param-reassign\n  config2 = config2 || {};\n  const config = {};\n\n  function getMergedValue(target, source, prop, caseless) {\n    if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n      return utils.merge.call({caseless}, target, source);\n    } else if (utils.isPlainObject(source)) {\n      return utils.merge({}, source);\n    } else if (utils.isArray(source)) {\n      return source.slice();\n    }\n    return source;\n  }\n\n  // eslint-disable-next-line consistent-return\n  function mergeDeepProperties(a, b, prop , caseless) {\n    if (!utils.isUndefined(b)) {\n      return getMergedValue(a, b, prop , caseless);\n    } else if (!utils.isUndefined(a)) {\n      return getMergedValue(undefined, a, prop , caseless);\n    }\n  }\n\n  // eslint-disable-next-line consistent-return\n  function valueFromConfig2(a, b) {\n    if (!utils.isUndefined(b)) {\n      return getMergedValue(undefined, b);\n    }\n  }\n\n  // eslint-disable-next-line consistent-return\n  function defaultToConfig2(a, b) {\n    if (!utils.isUndefined(b)) {\n      return getMergedValue(undefined, b);\n    } else if (!utils.isUndefined(a)) {\n      return getMergedValue(undefined, a);\n    }\n  }\n\n  // eslint-disable-next-line consistent-return\n  function mergeDirectKeys(a, b, prop) {\n    if (prop in config2) {\n      return getMergedValue(a, b);\n    } else if (prop in config1) {\n      return getMergedValue(undefined, a);\n    }\n  }\n\n  const mergeMap = {\n    url: valueFromConfig2,\n    method: valueFromConfig2,\n    data: valueFromConfig2,\n    baseURL: defaultToConfig2,\n    transformRequest: defaultToConfig2,\n    transformResponse: defaultToConfig2,\n    paramsSerializer: defaultToConfig2,\n    timeout: defaultToConfig2,\n    timeoutMessage: defaultToConfig2,\n    withCredentials: defaultToConfig2,\n    withXSRFToken: defaultToConfig2,\n    adapter: defaultToConfig2,\n    responseType: defaultToConfig2,\n    xsrfCookieName: defaultToConfig2,\n    xsrfHeaderName: defaultToConfig2,\n    onUploadProgress: defaultToConfig2,\n    onDownloadProgress: defaultToConfig2,\n    decompress: defaultToConfig2,\n    maxContentLength: defaultToConfig2,\n    maxBodyLength: defaultToConfig2,\n    beforeRedirect: defaultToConfig2,\n    transport: defaultToConfig2,\n    httpAgent: defaultToConfig2,\n    httpsAgent: defaultToConfig2,\n    cancelToken: defaultToConfig2,\n    socketPath: defaultToConfig2,\n    responseEncoding: defaultToConfig2,\n    validateStatus: mergeDirectKeys,\n    headers: (a, b , prop) => mergeDeepProperties(headersToObject(a), headersToObject(b),prop, true)\n  };\n\n  utils.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) {\n    const merge = mergeMap[prop] || mergeDeepProperties;\n    const configValue = merge(config1[prop], config2[prop], prop);\n    (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n  });\n\n  return config;\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport isURLSameOrigin from \"./isURLSameOrigin.js\";\nimport cookies from \"./cookies.js\";\nimport buildFullPath from \"../core/buildFullPath.js\";\nimport mergeConfig from \"../core/mergeConfig.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport buildURL from \"./buildURL.js\";\n\nexport default (config) => {\n  const newConfig = mergeConfig({}, config);\n\n  let {data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth} = newConfig;\n\n  newConfig.headers = headers = AxiosHeaders.from(headers);\n\n  newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer);\n\n  // HTTP basic authentication\n  if (auth) {\n    headers.set('Authorization', 'Basic ' +\n      btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n    );\n  }\n\n  let contentType;\n\n  if (utils.isFormData(data)) {\n    if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n      headers.setContentType(undefined); // Let the browser set it\n    } else if ((contentType = headers.getContentType()) !== false) {\n      // fix semicolon duplication issue for ReactNative FormData implementation\n      const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : [];\n      headers.setContentType([type || 'multipart/form-data', ...tokens].join('; '));\n    }\n  }\n\n  // Add xsrf header\n  // This is only done if running in a standard browser environment.\n  // Specifically not if we're in a web worker, or react-native.\n\n  if (platform.hasStandardBrowserEnv) {\n    withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n    if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n      // Add xsrf header\n      const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n      if (xsrfValue) {\n        headers.set(xsrfHeaderName, xsrfValue);\n      }\n    }\n  }\n\n  return newConfig;\n}\n\n","import utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport {progressEventReducer} from '../helpers/progressEventReducer.js';\nimport resolveConfig from \"../helpers/resolveConfig.js\";\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n  return new Promise(function dispatchXhrRequest(resolve, reject) {\n    const _config = resolveConfig(config);\n    let requestData = _config.data;\n    const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n    let {responseType, onUploadProgress, onDownloadProgress} = _config;\n    let onCanceled;\n    let uploadThrottled, downloadThrottled;\n    let flushUpload, flushDownload;\n\n    function done() {\n      flushUpload && flushUpload(); // flush events\n      flushDownload && flushDownload(); // flush events\n\n      _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n      _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n    }\n\n    let request = new XMLHttpRequest();\n\n    request.open(_config.method.toUpperCase(), _config.url, true);\n\n    // Set the request timeout in MS\n    request.timeout = _config.timeout;\n\n    function onloadend() {\n      if (!request) {\n        return;\n      }\n      // Prepare the response\n      const responseHeaders = AxiosHeaders.from(\n        'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n      );\n      const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n        request.responseText : request.response;\n      const response = {\n        data: responseData,\n        status: request.status,\n        statusText: request.statusText,\n        headers: responseHeaders,\n        config,\n        request\n      };\n\n      settle(function _resolve(value) {\n        resolve(value);\n        done();\n      }, function _reject(err) {\n        reject(err);\n        done();\n      }, response);\n\n      // Clean up request\n      request = null;\n    }\n\n    if ('onloadend' in request) {\n      // Use onloadend if available\n      request.onloadend = onloadend;\n    } else {\n      // Listen for ready state to emulate onloadend\n      request.onreadystatechange = function handleLoad() {\n        if (!request || request.readyState !== 4) {\n          return;\n        }\n\n        // The request errored out and we didn't get a response, this will be\n        // handled by onerror instead\n        // With one exception: request that using file: protocol, most browsers\n        // will return status as 0 even though it's a successful request\n        if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n          return;\n        }\n        // readystate handler is calling before onerror or ontimeout handlers,\n        // so we should call onloadend on the next 'tick'\n        setTimeout(onloadend);\n      };\n    }\n\n    // Handle browser request cancellation (as opposed to a manual cancellation)\n    request.onabort = function handleAbort() {\n      if (!request) {\n        return;\n      }\n\n      reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Handle low level network errors\n    request.onerror = function handleError() {\n      // Real errors are hidden from us by the browser\n      // onerror should only fire if it's a network error\n      reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Handle timeout\n    request.ontimeout = function handleTimeout() {\n      let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n      const transitional = _config.transitional || transitionalDefaults;\n      if (_config.timeoutErrorMessage) {\n        timeoutErrorMessage = _config.timeoutErrorMessage;\n      }\n      reject(new AxiosError(\n        timeoutErrorMessage,\n        transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n        config,\n        request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Remove Content-Type if data is undefined\n    requestData === undefined && requestHeaders.setContentType(null);\n\n    // Add headers to the request\n    if ('setRequestHeader' in request) {\n      utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n        request.setRequestHeader(key, val);\n      });\n    }\n\n    // Add withCredentials to request if needed\n    if (!utils.isUndefined(_config.withCredentials)) {\n      request.withCredentials = !!_config.withCredentials;\n    }\n\n    // Add responseType to request if needed\n    if (responseType && responseType !== 'json') {\n      request.responseType = _config.responseType;\n    }\n\n    // Handle progress if needed\n    if (onDownloadProgress) {\n      ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true));\n      request.addEventListener('progress', downloadThrottled);\n    }\n\n    // Not all browsers support upload events\n    if (onUploadProgress && request.upload) {\n      ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress));\n\n      request.upload.addEventListener('progress', uploadThrottled);\n\n      request.upload.addEventListener('loadend', flushUpload);\n    }\n\n    if (_config.cancelToken || _config.signal) {\n      // Handle cancellation\n      // eslint-disable-next-line func-names\n      onCanceled = cancel => {\n        if (!request) {\n          return;\n        }\n        reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n        request.abort();\n        request = null;\n      };\n\n      _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n      if (_config.signal) {\n        _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n      }\n    }\n\n    const protocol = parseProtocol(_config.url);\n\n    if (protocol && platform.protocols.indexOf(protocol) === -1) {\n      reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n      return;\n    }\n\n\n    // Send the request\n    request.send(requestData || null);\n  });\n}\n","import CanceledError from \"../cancel/CanceledError.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport utils from '../utils.js';\n\nconst composeSignals = (signals, timeout) => {\n  const {length} = (signals = signals ? signals.filter(Boolean) : []);\n\n  if (timeout || length) {\n    let controller = new AbortController();\n\n    let aborted;\n\n    const onabort = function (reason) {\n      if (!aborted) {\n        aborted = true;\n        unsubscribe();\n        const err = reason instanceof Error ? reason : this.reason;\n        controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n      }\n    }\n\n    let timer = timeout && setTimeout(() => {\n      timer = null;\n      onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT))\n    }, timeout)\n\n    const unsubscribe = () => {\n      if (signals) {\n        timer && clearTimeout(timer);\n        timer = null;\n        signals.forEach(signal => {\n          signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);\n        });\n        signals = null;\n      }\n    }\n\n    signals.forEach((signal) => signal.addEventListener('abort', onabort));\n\n    const {signal} = controller;\n\n    signal.unsubscribe = () => utils.asap(unsubscribe);\n\n    return signal;\n  }\n}\n\nexport default composeSignals;\n","\nexport const streamChunk = function* (chunk, chunkSize) {\n  let len = chunk.byteLength;\n\n  if (!chunkSize || len < chunkSize) {\n    yield chunk;\n    return;\n  }\n\n  let pos = 0;\n  let end;\n\n  while (pos < len) {\n    end = pos + chunkSize;\n    yield chunk.slice(pos, end);\n    pos = end;\n  }\n}\n\nexport const readBytes = async function* (iterable, chunkSize) {\n  for await (const chunk of readStream(iterable)) {\n    yield* streamChunk(chunk, chunkSize);\n  }\n}\n\nconst readStream = async function* (stream) {\n  if (stream[Symbol.asyncIterator]) {\n    yield* stream;\n    return;\n  }\n\n  const reader = stream.getReader();\n  try {\n    for (;;) {\n      const {done, value} = await reader.read();\n      if (done) {\n        break;\n      }\n      yield value;\n    }\n  } finally {\n    await reader.cancel();\n  }\n}\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish) => {\n  const iterator = readBytes(stream, chunkSize);\n\n  let bytes = 0;\n  let done;\n  let _onFinish = (e) => {\n    if (!done) {\n      done = true;\n      onFinish && onFinish(e);\n    }\n  }\n\n  return new ReadableStream({\n    async pull(controller) {\n      try {\n        const {done, value} = await iterator.next();\n\n        if (done) {\n         _onFinish();\n          controller.close();\n          return;\n        }\n\n        let len = value.byteLength;\n        if (onProgress) {\n          let loadedBytes = bytes += len;\n          onProgress(loadedBytes);\n        }\n        controller.enqueue(new Uint8Array(value));\n      } catch (err) {\n        _onFinish(err);\n        throw err;\n      }\n    },\n    cancel(reason) {\n      _onFinish(reason);\n      return iterator.return();\n    }\n  }, {\n    highWaterMark: 2\n  })\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport composeSignals from \"../helpers/composeSignals.js\";\nimport {trackStream} from \"../helpers/trackStream.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport {progressEventReducer, progressEventDecorator, asyncDecorator} from \"../helpers/progressEventReducer.js\";\nimport resolveConfig from \"../helpers/resolveConfig.js\";\nimport settle from \"../core/settle.js\";\n\nconst isFetchSupported = typeof fetch === 'function' && typeof Request === 'function' && typeof Response === 'function';\nconst isReadableStreamSupported = isFetchSupported && typeof ReadableStream === 'function';\n\n// used only inside the fetch adapter\nconst encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n    ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n    async (str) => new Uint8Array(await new Response(str).arrayBuffer())\n);\n\nconst test = (fn, ...args) => {\n  try {\n    return !!fn(...args);\n  } catch (e) {\n    return false\n  }\n}\n\nconst supportsRequestStream = isReadableStreamSupported && test(() => {\n  let duplexAccessed = false;\n\n  const hasContentType = new Request(platform.origin, {\n    body: new ReadableStream(),\n    method: 'POST',\n    get duplex() {\n      duplexAccessed = true;\n      return 'half';\n    },\n  }).headers.has('Content-Type');\n\n  return duplexAccessed && !hasContentType;\n});\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst supportsResponseStream = isReadableStreamSupported &&\n  test(() => utils.isReadableStream(new Response('').body));\n\n\nconst resolvers = {\n  stream: supportsResponseStream && ((res) => res.body)\n};\n\nisFetchSupported && (((res) => {\n  ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n    !resolvers[type] && (resolvers[type] = utils.isFunction(res[type]) ? (res) => res[type]() :\n      (_, config) => {\n        throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\n      })\n  });\n})(new Response));\n\nconst getBodyLength = async (body) => {\n  if (body == null) {\n    return 0;\n  }\n\n  if(utils.isBlob(body)) {\n    return body.size;\n  }\n\n  if(utils.isSpecCompliantForm(body)) {\n    const _request = new Request(platform.origin, {\n      method: 'POST',\n      body,\n    });\n    return (await _request.arrayBuffer()).byteLength;\n  }\n\n  if(utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\n    return body.byteLength;\n  }\n\n  if(utils.isURLSearchParams(body)) {\n    body = body + '';\n  }\n\n  if(utils.isString(body)) {\n    return (await encodeText(body)).byteLength;\n  }\n}\n\nconst resolveBodyLength = async (headers, body) => {\n  const length = utils.toFiniteNumber(headers.getContentLength());\n\n  return length == null ? getBodyLength(body) : length;\n}\n\nexport default isFetchSupported && (async (config) => {\n  let {\n    url,\n    method,\n    data,\n    signal,\n    cancelToken,\n    timeout,\n    onDownloadProgress,\n    onUploadProgress,\n    responseType,\n    headers,\n    withCredentials = 'same-origin',\n    fetchOptions\n  } = resolveConfig(config);\n\n  responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n  let composedSignal = composeSignals([signal, cancelToken && cancelToken.toAbortSignal()], timeout);\n\n  let request;\n\n  const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {\n      composedSignal.unsubscribe();\n  });\n\n  let requestContentLength;\n\n  try {\n    if (\n      onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n      (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n    ) {\n      let _request = new Request(url, {\n        method: 'POST',\n        body: data,\n        duplex: \"half\"\n      });\n\n      let contentTypeHeader;\n\n      if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n        headers.setContentType(contentTypeHeader)\n      }\n\n      if (_request.body) {\n        const [onProgress, flush] = progressEventDecorator(\n          requestContentLength,\n          progressEventReducer(asyncDecorator(onUploadProgress))\n        );\n\n        data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);\n      }\n    }\n\n    if (!utils.isString(withCredentials)) {\n      withCredentials = withCredentials ? 'include' : 'omit';\n    }\n\n    // Cloudflare Workers throws when credentials are defined\n    // see https://github.com/cloudflare/workerd/issues/902\n    const isCredentialsSupported = \"credentials\" in Request.prototype;\n    request = new Request(url, {\n      ...fetchOptions,\n      signal: composedSignal,\n      method: method.toUpperCase(),\n      headers: headers.normalize().toJSON(),\n      body: data,\n      duplex: \"half\",\n      credentials: isCredentialsSupported ? withCredentials : undefined\n    });\n\n    let response = await fetch(request);\n\n    const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n    if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {\n      const options = {};\n\n      ['status', 'statusText', 'headers'].forEach(prop => {\n        options[prop] = response[prop];\n      });\n\n      const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n      const [onProgress, flush] = onDownloadProgress && progressEventDecorator(\n        responseContentLength,\n        progressEventReducer(asyncDecorator(onDownloadProgress), true)\n      ) || [];\n\n      response = new Response(\n        trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n          flush && flush();\n          unsubscribe && unsubscribe();\n        }),\n        options\n      );\n    }\n\n    responseType = responseType || 'text';\n\n    let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n\n    !isStreamResponse && unsubscribe && unsubscribe();\n\n    return await new Promise((resolve, reject) => {\n      settle(resolve, reject, {\n        data: responseData,\n        headers: AxiosHeaders.from(response.headers),\n        status: response.status,\n        statusText: response.statusText,\n        config,\n        request\n      })\n    })\n  } catch (err) {\n    unsubscribe && unsubscribe();\n\n    if (err && err.name === 'TypeError' && /fetch/i.test(err.message)) {\n      throw Object.assign(\n        new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request),\n        {\n          cause: err.cause || err\n        }\n      )\n    }\n\n    throw AxiosError.from(err, err && err.code, config, request);\n  }\n});\n\n\n","import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport fetchAdapter from './fetch.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\nconst knownAdapters = {\n  http: httpAdapter,\n  xhr: xhrAdapter,\n  fetch: fetchAdapter\n}\n\nutils.forEach(knownAdapters, (fn, value) => {\n  if (fn) {\n    try {\n      Object.defineProperty(fn, 'name', {value});\n    } catch (e) {\n      // eslint-disable-next-line no-empty\n    }\n    Object.defineProperty(fn, 'adapterName', {value});\n  }\n});\n\nconst renderReason = (reason) => `- ${reason}`;\n\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\nexport default {\n  getAdapter: (adapters) => {\n    adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n    const {length} = adapters;\n    let nameOrAdapter;\n    let adapter;\n\n    const rejectedReasons = {};\n\n    for (let i = 0; i < length; i++) {\n      nameOrAdapter = adapters[i];\n      let id;\n\n      adapter = nameOrAdapter;\n\n      if (!isResolvedHandle(nameOrAdapter)) {\n        adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n        if (adapter === undefined) {\n          throw new AxiosError(`Unknown adapter '${id}'`);\n        }\n      }\n\n      if (adapter) {\n        break;\n      }\n\n      rejectedReasons[id || '#' + i] = adapter;\n    }\n\n    if (!adapter) {\n\n      const reasons = Object.entries(rejectedReasons)\n        .map(([id, state]) => `adapter ${id} ` +\n          (state === false ? 'is not supported by the environment' : 'is not available in the build')\n        );\n\n      let s = length ?\n        (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n        'as no adapter specified';\n\n      throw new AxiosError(\n        `There is no suitable adapter to dispatch the request ` + s,\n        'ERR_NOT_SUPPORT'\n      );\n    }\n\n    return adapter;\n  },\n  adapters: knownAdapters\n}\n","'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n  if (config.cancelToken) {\n    config.cancelToken.throwIfRequested();\n  }\n\n  if (config.signal && config.signal.aborted) {\n    throw new CanceledError(null, config);\n  }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n  throwIfCancellationRequested(config);\n\n  config.headers = AxiosHeaders.from(config.headers);\n\n  // Transform request data\n  config.data = transformData.call(\n    config,\n    config.transformRequest\n  );\n\n  if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n    config.headers.setContentType('application/x-www-form-urlencoded', false);\n  }\n\n  const adapter = adapters.getAdapter(config.adapter || defaults.adapter);\n\n  return adapter(config).then(function onAdapterResolution(response) {\n    throwIfCancellationRequested(config);\n\n    // Transform response data\n    response.data = transformData.call(\n      config,\n      config.transformResponse,\n      response\n    );\n\n    response.headers = AxiosHeaders.from(response.headers);\n\n    return response;\n  }, function onAdapterRejection(reason) {\n    if (!isCancel(reason)) {\n      throwIfCancellationRequested(config);\n\n      // Transform response data\n      if (reason && reason.response) {\n        reason.response.data = transformData.call(\n          config,\n          config.transformResponse,\n          reason.response\n        );\n        reason.response.headers = AxiosHeaders.from(reason.response.headers);\n      }\n    }\n\n    return Promise.reject(reason);\n  });\n}\n","export const VERSION = \"1.8.3\";","'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n  validators[type] = function validator(thing) {\n    return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n  };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n  function formatMessage(opt, desc) {\n    return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n  }\n\n  // eslint-disable-next-line func-names\n  return (value, opt, opts) => {\n    if (validator === false) {\n      throw new AxiosError(\n        formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n        AxiosError.ERR_DEPRECATED\n      );\n    }\n\n    if (version && !deprecatedWarnings[opt]) {\n      deprecatedWarnings[opt] = true;\n      // eslint-disable-next-line no-console\n      console.warn(\n        formatMessage(\n          opt,\n          ' has been deprecated since v' + version + ' and will be removed in the near future'\n        )\n      );\n    }\n\n    return validator ? validator(value, opt, opts) : true;\n  };\n};\n\nvalidators.spelling = function spelling(correctSpelling) {\n  return (value, opt) => {\n    // eslint-disable-next-line no-console\n    console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);\n    return true;\n  }\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n  if (typeof options !== 'object') {\n    throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n  }\n  const keys = Object.keys(options);\n  let i = keys.length;\n  while (i-- > 0) {\n    const opt = keys[i];\n    const validator = schema[opt];\n    if (validator) {\n      const value = options[opt];\n      const result = value === undefined || validator(value, opt, options);\n      if (result !== true) {\n        throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n      }\n      continue;\n    }\n    if (allowUnknown !== true) {\n      throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n    }\n  }\n}\n\nexport default {\n  assertOptions,\n  validators\n};\n","'use strict';\n\nimport utils from './../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n  constructor(instanceConfig) {\n    this.defaults = instanceConfig;\n    this.interceptors = {\n      request: new InterceptorManager(),\n      response: new InterceptorManager()\n    };\n  }\n\n  /**\n   * Dispatch a request\n   *\n   * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n   * @param {?Object} config\n   *\n   * @returns {Promise} The Promise to be fulfilled\n   */\n  async request(configOrUrl, config) {\n    try {\n      return await this._request(configOrUrl, config);\n    } catch (err) {\n      if (err instanceof Error) {\n        let dummy = {};\n\n        Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error());\n\n        // slice off the Error: ... line\n        const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n        try {\n          if (!err.stack) {\n            err.stack = stack;\n            // match without the 2 top stack lines\n          } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n            err.stack += '\\n' + stack\n          }\n        } catch (e) {\n          // ignore the case where \"stack\" is an un-writable property\n        }\n      }\n\n      throw err;\n    }\n  }\n\n  _request(configOrUrl, config) {\n    /*eslint no-param-reassign:0*/\n    // Allow for axios('example/url'[, config]) a la fetch API\n    if (typeof configOrUrl === 'string') {\n      config = config || {};\n      config.url = configOrUrl;\n    } else {\n      config = configOrUrl || {};\n    }\n\n    config = mergeConfig(this.defaults, config);\n\n    const {transitional, paramsSerializer, headers} = config;\n\n    if (transitional !== undefined) {\n      validator.assertOptions(transitional, {\n        silentJSONParsing: validators.transitional(validators.boolean),\n        forcedJSONParsing: validators.transitional(validators.boolean),\n        clarifyTimeoutError: validators.transitional(validators.boolean)\n      }, false);\n    }\n\n    if (paramsSerializer != null) {\n      if (utils.isFunction(paramsSerializer)) {\n        config.paramsSerializer = {\n          serialize: paramsSerializer\n        }\n      } else {\n        validator.assertOptions(paramsSerializer, {\n          encode: validators.function,\n          serialize: validators.function\n        }, true);\n      }\n    }\n\n    // Set config.allowAbsoluteUrls\n    if (config.allowAbsoluteUrls !== undefined) {\n      // do nothing\n    } else if (this.defaults.allowAbsoluteUrls !== undefined) {\n      config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls;\n    } else {\n      config.allowAbsoluteUrls = true;\n    }\n\n    validator.assertOptions(config, {\n      baseUrl: validators.spelling('baseURL'),\n      withXsrfToken: validators.spelling('withXSRFToken')\n    }, true);\n\n    // Set config.method\n    config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n    // Flatten headers\n    let contextHeaders = headers && utils.merge(\n      headers.common,\n      headers[config.method]\n    );\n\n    headers && utils.forEach(\n      ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n      (method) => {\n        delete headers[method];\n      }\n    );\n\n    config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n    // filter out skipped interceptors\n    const requestInterceptorChain = [];\n    let synchronousRequestInterceptors = true;\n    this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n      if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n        return;\n      }\n\n      synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n      requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n    });\n\n    const responseInterceptorChain = [];\n    this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n      responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n    });\n\n    let promise;\n    let i = 0;\n    let len;\n\n    if (!synchronousRequestInterceptors) {\n      const chain = [dispatchRequest.bind(this), undefined];\n      chain.unshift.apply(chain, requestInterceptorChain);\n      chain.push.apply(chain, responseInterceptorChain);\n      len = chain.length;\n\n      promise = Promise.resolve(config);\n\n      while (i < len) {\n        promise = promise.then(chain[i++], chain[i++]);\n      }\n\n      return promise;\n    }\n\n    len = requestInterceptorChain.length;\n\n    let newConfig = config;\n\n    i = 0;\n\n    while (i < len) {\n      const onFulfilled = requestInterceptorChain[i++];\n      const onRejected = requestInterceptorChain[i++];\n      try {\n        newConfig = onFulfilled(newConfig);\n      } catch (error) {\n        onRejected.call(this, error);\n        break;\n      }\n    }\n\n    try {\n      promise = dispatchRequest.call(this, newConfig);\n    } catch (error) {\n      return Promise.reject(error);\n    }\n\n    i = 0;\n    len = responseInterceptorChain.length;\n\n    while (i < len) {\n      promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n    }\n\n    return promise;\n  }\n\n  getUri(config) {\n    config = mergeConfig(this.defaults, config);\n    const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);\n    return buildURL(fullPath, config.params, config.paramsSerializer);\n  }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n  /*eslint func-names:0*/\n  Axios.prototype[method] = function(url, config) {\n    return this.request(mergeConfig(config || {}, {\n      method,\n      url,\n      data: (config || {}).data\n    }));\n  };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n  /*eslint func-names:0*/\n\n  function generateHTTPMethod(isForm) {\n    return function httpMethod(url, data, config) {\n      return this.request(mergeConfig(config || {}, {\n        method,\n        headers: isForm ? {\n          'Content-Type': 'multipart/form-data'\n        } : {},\n        url,\n        data\n      }));\n    };\n  }\n\n  Axios.prototype[method] = generateHTTPMethod();\n\n  Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n","'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n  constructor(executor) {\n    if (typeof executor !== 'function') {\n      throw new TypeError('executor must be a function.');\n    }\n\n    let resolvePromise;\n\n    this.promise = new Promise(function promiseExecutor(resolve) {\n      resolvePromise = resolve;\n    });\n\n    const token = this;\n\n    // eslint-disable-next-line func-names\n    this.promise.then(cancel => {\n      if (!token._listeners) return;\n\n      let i = token._listeners.length;\n\n      while (i-- > 0) {\n        token._listeners[i](cancel);\n      }\n      token._listeners = null;\n    });\n\n    // eslint-disable-next-line func-names\n    this.promise.then = onfulfilled => {\n      let _resolve;\n      // eslint-disable-next-line func-names\n      const promise = new Promise(resolve => {\n        token.subscribe(resolve);\n        _resolve = resolve;\n      }).then(onfulfilled);\n\n      promise.cancel = function reject() {\n        token.unsubscribe(_resolve);\n      };\n\n      return promise;\n    };\n\n    executor(function cancel(message, config, request) {\n      if (token.reason) {\n        // Cancellation has already been requested\n        return;\n      }\n\n      token.reason = new CanceledError(message, config, request);\n      resolvePromise(token.reason);\n    });\n  }\n\n  /**\n   * Throws a `CanceledError` if cancellation has been requested.\n   */\n  throwIfRequested() {\n    if (this.reason) {\n      throw this.reason;\n    }\n  }\n\n  /**\n   * Subscribe to the cancel signal\n   */\n\n  subscribe(listener) {\n    if (this.reason) {\n      listener(this.reason);\n      return;\n    }\n\n    if (this._listeners) {\n      this._listeners.push(listener);\n    } else {\n      this._listeners = [listener];\n    }\n  }\n\n  /**\n   * Unsubscribe from the cancel signal\n   */\n\n  unsubscribe(listener) {\n    if (!this._listeners) {\n      return;\n    }\n    const index = this._listeners.indexOf(listener);\n    if (index !== -1) {\n      this._listeners.splice(index, 1);\n    }\n  }\n\n  toAbortSignal() {\n    const controller = new AbortController();\n\n    const abort = (err) => {\n      controller.abort(err);\n    };\n\n    this.subscribe(abort);\n\n    controller.signal.unsubscribe = () => this.unsubscribe(abort);\n\n    return controller.signal;\n  }\n\n  /**\n   * Returns an object that contains a new `CancelToken` and a function that, when called,\n   * cancels the `CancelToken`.\n   */\n  static source() {\n    let cancel;\n    const token = new CancelToken(function executor(c) {\n      cancel = c;\n    });\n    return {\n      token,\n      cancel\n    };\n  }\n}\n\nexport default CancelToken;\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n *  ```js\n *  function f(x, y, z) {}\n *  var args = [1, 2, 3];\n *  f.apply(null, args);\n *  ```\n *\n * With `spread` this example can be re-written.\n *\n *  ```js\n *  spread(function(x, y, z) {})([1, 2, 3]);\n *  ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n  return function wrap(arr) {\n    return callback.apply(null, arr);\n  };\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n  return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n","const HttpStatusCode = {\n  Continue: 100,\n  SwitchingProtocols: 101,\n  Processing: 102,\n  EarlyHints: 103,\n  Ok: 200,\n  Created: 201,\n  Accepted: 202,\n  NonAuthoritativeInformation: 203,\n  NoContent: 204,\n  ResetContent: 205,\n  PartialContent: 206,\n  MultiStatus: 207,\n  AlreadyReported: 208,\n  ImUsed: 226,\n  MultipleChoices: 300,\n  MovedPermanently: 301,\n  Found: 302,\n  SeeOther: 303,\n  NotModified: 304,\n  UseProxy: 305,\n  Unused: 306,\n  TemporaryRedirect: 307,\n  PermanentRedirect: 308,\n  BadRequest: 400,\n  Unauthorized: 401,\n  PaymentRequired: 402,\n  Forbidden: 403,\n  NotFound: 404,\n  MethodNotAllowed: 405,\n  NotAcceptable: 406,\n  ProxyAuthenticationRequired: 407,\n  RequestTimeout: 408,\n  Conflict: 409,\n  Gone: 410,\n  LengthRequired: 411,\n  PreconditionFailed: 412,\n  PayloadTooLarge: 413,\n  UriTooLong: 414,\n  UnsupportedMediaType: 415,\n  RangeNotSatisfiable: 416,\n  ExpectationFailed: 417,\n  ImATeapot: 418,\n  MisdirectedRequest: 421,\n  UnprocessableEntity: 422,\n  Locked: 423,\n  FailedDependency: 424,\n  TooEarly: 425,\n  UpgradeRequired: 426,\n  PreconditionRequired: 428,\n  TooManyRequests: 429,\n  RequestHeaderFieldsTooLarge: 431,\n  UnavailableForLegalReasons: 451,\n  InternalServerError: 500,\n  NotImplemented: 501,\n  BadGateway: 502,\n  ServiceUnavailable: 503,\n  GatewayTimeout: 504,\n  HttpVersionNotSupported: 505,\n  VariantAlsoNegotiates: 506,\n  InsufficientStorage: 507,\n  LoopDetected: 508,\n  NotExtended: 510,\n  NetworkAuthenticationRequired: 511,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n  HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n","'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n  const context = new Axios(defaultConfig);\n  const instance = bind(Axios.prototype.request, context);\n\n  // Copy axios.prototype to instance\n  utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n  // Copy context to instance\n  utils.extend(instance, context, null, {allOwnKeys: true});\n\n  // Factory for creating new instances\n  instance.create = function create(instanceConfig) {\n    return createInstance(mergeConfig(defaultConfig, instanceConfig));\n  };\n\n  return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n  return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n","import axios from './lib/axios.js';\n\n// This module is intended to unwrap Axios default export as named.\n// Keep top-level export same with static properties\n// so that it can keep same with es module or cjs\nconst {\n  Axios,\n  AxiosError,\n  CanceledError,\n  isCancel,\n  CancelToken,\n  VERSION,\n  all,\n  Cancel,\n  isAxiosError,\n  spread,\n  toFormData,\n  AxiosHeaders,\n  HttpStatusCode,\n  formToJSON,\n  getAdapter,\n  mergeConfig\n} = axios;\n\nexport {\n  axios as default,\n  Axios,\n  AxiosError,\n  CanceledError,\n  isCancel,\n  CancelToken,\n  VERSION,\n  all,\n  Cancel,\n  isAxiosError,\n  spread,\n  toFormData,\n  AxiosHeaders,\n  HttpStatusCode,\n  formToJSON,\n  getAdapter,\n  mergeConfig\n}\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Wandelbots NOVA API\n * Interact with robots in an easy and intuitive way.\n *\n * The version of the OpenAPI document: 1.0.0 beta\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport globalAxios from 'axios';\nexport const BASE_PATH = \"/api/v1\".replace(/\\/+$/, \"\");\n/**\n *\n * @export\n */\nexport const COLLECTION_FORMATS = {\n    csv: \",\",\n    ssv: \" \",\n    tsv: \"\\t\",\n    pipes: \"|\",\n};\n/**\n *\n * @export\n * @class BaseAPI\n */\nexport class BaseAPI {\n    basePath;\n    axios;\n    configuration;\n    constructor(configuration, basePath = BASE_PATH, axios = globalAxios) {\n        this.basePath = basePath;\n        this.axios = axios;\n        if (configuration) {\n            this.configuration = configuration;\n            this.basePath = configuration.basePath ?? basePath;\n        }\n    }\n}\n;\n/**\n *\n * @export\n * @class RequiredError\n * @extends {Error}\n */\nexport class RequiredError extends Error {\n    field;\n    constructor(field, msg) {\n        super(msg);\n        this.field = field;\n        this.name = \"RequiredError\";\n    }\n}\n/**\n *\n * @export\n */\nexport const operationServerMap = {};\n//# sourceMappingURL=base.js.map","/* tslint:disable */\n/* eslint-disable */\n/**\n * Wandelbots NOVA API\n * Interact with robots in an easy and intuitive way.\n *\n * The version of the OpenAPI document: 1.0.0 beta\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport { RequiredError } from \"./base\";\n/**\n *\n * @export\n */\nexport const DUMMY_BASE_URL = 'https://example.com';\n/**\n *\n * @throws {RequiredError}\n * @export\n */\nexport const assertParamExists = function (functionName, paramName, paramValue) {\n    if (paramValue === null || paramValue === undefined) {\n        throw new RequiredError(paramName, `Required parameter ${paramName} was null or undefined when calling ${functionName}.`);\n    }\n};\n/**\n *\n * @export\n */\nexport const setApiKeyToObject = async function (object, keyParamName, configuration) {\n    if (configuration && configuration.apiKey) {\n        const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n            ? await configuration.apiKey(keyParamName)\n            : await configuration.apiKey;\n        object[keyParamName] = localVarApiKeyValue;\n    }\n};\n/**\n *\n * @export\n */\nexport const setBasicAuthToObject = function (object, configuration) {\n    if (configuration && (configuration.username || configuration.password)) {\n        object[\"auth\"] = { username: configuration.username, password: configuration.password };\n    }\n};\n/**\n *\n * @export\n */\nexport const setBearerAuthToObject = async function (object, configuration) {\n    if (configuration && configuration.accessToken) {\n        const accessToken = typeof configuration.accessToken === 'function'\n            ? await configuration.accessToken()\n            : await configuration.accessToken;\n        object[\"Authorization\"] = \"Bearer \" + accessToken;\n    }\n};\n/**\n *\n * @export\n */\nexport const setOAuthToObject = async function (object, name, scopes, configuration) {\n    if (configuration && configuration.accessToken) {\n        const localVarAccessTokenValue = typeof configuration.accessToken === 'function'\n            ? await configuration.accessToken(name, scopes)\n            : await configuration.accessToken;\n        object[\"Authorization\"] = \"Bearer \" + localVarAccessTokenValue;\n    }\n};\nfunction setFlattenedQueryParams(urlSearchParams, parameter, key = \"\") {\n    if (parameter == null)\n        return;\n    if (typeof parameter === \"object\") {\n        if (Array.isArray(parameter)) {\n            parameter.forEach(item => setFlattenedQueryParams(urlSearchParams, item, key));\n        }\n        else {\n            Object.keys(parameter).forEach(currentKey => setFlattenedQueryParams(urlSearchParams, parameter[currentKey], `${key}${key !== '' ? '.' : ''}${currentKey}`));\n        }\n    }\n    else {\n        if (urlSearchParams.has(key)) {\n            urlSearchParams.append(key, parameter);\n        }\n        else {\n            urlSearchParams.set(key, parameter);\n        }\n    }\n}\n/**\n *\n * @export\n */\nexport const setSearchParams = function (url, ...objects) {\n    const searchParams = new URLSearchParams(url.search);\n    setFlattenedQueryParams(searchParams, objects);\n    url.search = searchParams.toString();\n};\n/**\n *\n * @export\n */\nexport const serializeDataIfNeeded = function (value, requestOptions, configuration) {\n    const nonString = typeof value !== 'string';\n    const needsSerialization = nonString && configuration && configuration.isJsonMime\n        ? configuration.isJsonMime(requestOptions.headers['Content-Type'])\n        : nonString;\n    return needsSerialization\n        ? JSON.stringify(value !== undefined ? value : {})\n        : (value || \"\");\n};\n/**\n *\n * @export\n */\nexport const toPathString = function (url) {\n    return url.pathname + url.search + url.hash;\n};\n/**\n *\n * @export\n */\nexport const createRequestFunction = function (axiosArgs, globalAxios, BASE_PATH, configuration) {\n    return (axios = globalAxios, basePath = BASE_PATH) => {\n        const axiosRequestArgs = { ...axiosArgs.options, url: (axios.defaults.baseURL ? '' : configuration?.basePath ?? basePath) + axiosArgs.url };\n        return axios.request(axiosRequestArgs);\n    };\n};\n//# sourceMappingURL=common.js.map","/* tslint:disable */\n/* eslint-disable */\n/**\n * Wandelbots NOVA API\n * Interact with robots in an easy and intuitive way.\n *\n * The version of the OpenAPI document: 1.0.0 beta\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\nimport globalAxios from 'axios';\n// Some imports not used depending on template conditions\n// @ts-ignore\nimport { DUMMY_BASE_URL, assertParamExists, setBasicAuthToObject, setBearerAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from './common';\n// @ts-ignore\nimport { BASE_PATH, BaseAPI, operationServerMap } from './base';\nexport const AbbControllerKindEnum = {\n    AbbController: 'AbbController'\n};\n/**\n * ## BEHAVIOR_AUTOMATIC This is the default behavior. The motion group instantly takes any commanded joint configuration as actual joint state. Configures the compliance of the virtual robot with the normal ControllerState cycle time. If set, the virtual robot will act like a physical one, e.g. with a cycle time of 8ms to respond to a new joint state command. ## BEHAVIOR_AUTOMATIC_NOT_COMPLY_WITH_CYCLETIME Configures the compliance of the virtual robot with the normal ControllerState cycle time. If set, the robot will respond as fast as possible, limited only by software execution speed. Because of that the execution of a movement requires less time than with BEHAVIOR_AUTOMATIC. ## BEHAVIOR_EXTERNAL_SOURCE The external client is the only source of actual joint state changes. This mode is used to enable third party software indicating the current joint state via [externalJointsStream](externalJointsStream).\n * @export\n * @enum {string}\n */\nexport const Behavior = {\n    BehaviorAutomatic: 'BEHAVIOR_AUTOMATIC',\n    BehaviorAutomaticNotComplyWithCycletime: 'BEHAVIOR_AUTOMATIC_NOT_COMPLY_WITH_CYCLETIME',\n    BehaviorExternalSource: 'BEHAVIOR_EXTERNAL_SOURCE'\n};\nexport const BlendingAutoBlendingNameEnum = {\n    BlendingAuto: 'BlendingAuto'\n};\nexport const BlendingPositionBlendingNameEnum = {\n    BlendingPosition: 'BlendingPosition'\n};\nexport const BoxTypeEnum = {\n    TypeHollow: 'TYPE_HOLLOW',\n    TypeFull: 'TYPE_FULL'\n};\nexport const Box2ShapeTypeEnum = {\n    Box: 'box'\n};\nexport const Box2BoxTypeEnum = {\n    Hollow: 'HOLLOW',\n    Full: 'FULL'\n};\nexport const Box3ShapeTypeEnum = {\n    Box: 'box'\n};\nexport const Box3TypeEnum = {\n    Hollow: 'HOLLOW',\n    Full: 'FULL'\n};\nexport const Capsule2ShapeTypeEnum = {\n    Capsule: 'capsule'\n};\nexport const Capsule3ShapeTypeEnum = {\n    Capsule: 'capsule'\n};\n/**\n * Comparator for the comparison of two values. The comparator is used to compare two values and return a boolean result. The default comparator is unknown.\n * @export\n * @enum {string}\n */\nexport const Comparator = {\n    ComparatorUnknown: 'COMPARATOR_UNKNOWN',\n    ComparatorEquals: 'COMPARATOR_EQUALS',\n    ComparatorNotEquals: 'COMPARATOR_NOT_EQUALS',\n    ComparatorGreater: 'COMPARATOR_GREATER',\n    ComparatorGreaterEqual: 'COMPARATOR_GREATER_EQUAL',\n    ComparatorLess: 'COMPARATOR_LESS',\n    ComparatorLessEqual: 'COMPARATOR_LESS_EQUAL'\n};\nexport const ConvexHull2ShapeTypeEnum = {\n    ConvexHull: 'convex_hull'\n};\nexport const ConvexHull3ShapeTypeEnum = {\n    ConvexHull: 'convex_hull'\n};\nexport const Cylinder2ShapeTypeEnum = {\n    Cylinder: 'cylinder'\n};\nexport const Cylinder3ShapeTypeEnum = {\n    Cylinder: 'cylinder'\n};\n/**\n * The direction in which the trajectory is executed. Default: Forward.\n * @export\n * @enum {string}\n */\nexport const Direction = {\n    DirectionForward: 'DIRECTION_FORWARD',\n    DirectionBackward: 'DIRECTION_BACKWARD'\n};\nexport const FanucControllerKindEnum = {\n    FanucController: 'FanucController'\n};\nexport const FeedbackCollisionErrorFeedbackNameEnum = {\n    FeedbackCollision: 'FeedbackCollision'\n};\nexport const FeedbackJointLimitExceededErrorFeedbackNameEnum = {\n    FeedbackJointLimitExceeded: 'FeedbackJointLimitExceeded'\n};\nexport const FeedbackOutOfWorkspaceErrorFeedbackNameEnum = {\n    FeedbackOutOfWorkspace: 'FeedbackOutOfWorkspace'\n};\nexport const FeedbackSingularityErrorFeedbackNameEnum = {\n    FeedbackSingularity: 'FeedbackSingularity'\n};\nexport const IODirectionEnum = {\n    ControllerIn: 'ControllerIn',\n    ControllerOut: 'ControllerOut'\n};\nexport const IODescriptionTypeEnum = {\n    IoTypeInput: 'IO_TYPE_INPUT',\n    IoTypeOutput: 'IO_TYPE_OUTPUT'\n};\nexport const IODescriptionValueTypeEnum = {\n    IoValueDigital: 'IO_VALUE_DIGITAL',\n    IoValueAnalogFloating: 'IO_VALUE_ANALOG_FLOATING',\n    IoValueAnalogInteger: 'IO_VALUE_ANALOG_INTEGER'\n};\nexport const IODescriptionUnitEnum = {\n    UnitNone: 'UNIT_NONE',\n    UnitKilogram: 'UNIT_KILOGRAM',\n    UnitAmpere: 'UNIT_AMPERE',\n    UnitKelvin: 'UNIT_KELVIN',\n    UnitHertz: 'UNIT_HERTZ',\n    UnitNewton: 'UNIT_NEWTON',\n    UnitVolt: 'UNIT_VOLT',\n    UnitCelsius: 'UNIT_CELSIUS',\n    UnitNewtonMeter: 'UNIT_NEWTON_METER',\n    UnitMeter: 'UNIT_METER'\n};\nexport const JoggingResponseMovementStateEnum = {\n    MovementStateUnknown: 'MOVEMENT_STATE_UNKNOWN',\n    MovementStateError: 'MOVEMENT_STATE_ERROR',\n    MovementStateMoving: 'MOVEMENT_STATE_MOVING',\n    MovementStateStopByRequest: 'MOVEMENT_STATE_STOP_BY_REQUEST',\n    MovementStateJointLimitReached: 'MOVEMENT_STATE_JOINT_LIMIT_REACHED',\n    MovementStateStopForIo: 'MOVEMENT_STATE_STOP_FOR_IO',\n    MovementStateStopForForceLimit: 'MOVEMENT_STATE_STOP_FOR_FORCE_LIMIT'\n};\nexport const JointLimitJointEnum = {\n    JointnameAxisInvalid: 'JOINTNAME_AXIS_INVALID',\n    JointnameAxis1: 'JOINTNAME_AXIS_1',\n    JointnameAxis2: 'JOINTNAME_AXIS_2',\n    JointnameAxis3: 'JOINTNAME_AXIS_3',\n    JointnameAxis4: 'JOINTNAME_AXIS_4',\n    JointnameAxis5: 'JOINTNAME_AXIS_5',\n    JointnameAxis6: 'JOINTNAME_AXIS_6',\n    JointnameAxis7: 'JOINTNAME_AXIS_7',\n    JointnameAxis8: 'JOINTNAME_AXIS_8',\n    JointnameAxis9: 'JOINTNAME_AXIS_9',\n    JointnameAxis10: 'JOINTNAME_AXIS_10',\n    JointnameAxis11: 'JOINTNAME_AXIS_11',\n    JointnameAxis12: 'JOINTNAME_AXIS_12'\n};\nexport const KukaControllerKindEnum = {\n    KukaController: 'KukaController'\n};\n/**\n *\n * @export\n * @enum {string}\n */\nexport const LicenseStatusEnum = {\n    Ok: 'OK',\n    Expired: 'EXPIRED',\n    Suspended: 'SUSPENDED',\n    GracePeriodOver: 'GRACE_PERIOD_OVER',\n    NotFound: 'NOT_FOUND'\n};\n/**\n *\n * @export\n * @enum {string}\n */\nexport const Manufacturer = {\n    Abb: 'abb',\n    Fanuc: 'fanuc',\n    Kuka: 'kuka',\n    Universalrobots: 'universalrobots',\n    Yaskawa: 'yaskawa'\n};\nexport const OpModeModeEnum = {\n    OperationModeManual: 'OPERATION_MODE_MANUAL',\n    OperationModeAuto: 'OPERATION_MODE_AUTO'\n};\nexport const PathCartesianPTPPathDefinitionNameEnum = {\n    PathCartesianPtp: 'PathCartesianPTP'\n};\nexport const PathCirclePathDefinitionNameEnum = {\n    PathCircle: 'PathCircle'\n};\nexport const PathCubicSplinePathDefinitionNameEnum = {\n    PathCubicSpline: 'PathCubicSpline'\n};\nexport const PathJointPTPPathDefinitionNameEnum = {\n    PathJointPtp: 'PathJointPTP'\n};\nexport const PathLinePathDefinitionNameEnum = {\n    PathLine: 'PathLine'\n};\nexport const Plane2ShapeTypeEnum = {\n    Plane: 'plane'\n};\nexport const Plane3ShapeTypeEnum = {\n    Plane: 'plane'\n};\n/**\n *\n * @export\n * @enum {string}\n */\nexport const ProgramRunState = {\n    NotStarted: 'not started',\n    Running: 'running',\n    Completed: 'completed',\n    Failed: 'failed',\n    Stopped: 'stopped'\n};\nexport const PyripheryPyraeRobotRobotConfigurationTypeEnum = {\n    Robot: 'robot',\n    RobotPlanner: 'robot_planner'\n};\nexport const PyripheryRoboticsRobotcellTimerConfigurationTypeEnum = {\n    Timer: 'timer',\n    SimulatedTimer: 'simulated_timer'\n};\nexport const Rectangle2ShapeTypeEnum = {\n    Rectangle: 'rectangle'\n};\nexport const Rectangle3ShapeTypeEnum = {\n    Rectangle: 'rectangle'\n};\nexport const RectangularCapsule2ShapeTypeEnum = {\n    RectangularCapsule: 'rectangular_capsule'\n};\nexport const RectangularCapsule3ShapeTypeEnum = {\n    RectangularCapsule: 'rectangular_capsule'\n};\n/**\n * The channel that defines what a new Wandelbots NOVA version is.    * `next` the over all latest version   * `stable` newes patch of the current version\n * @export\n * @enum {string}\n */\nexport const ReleaseChannel = {\n    Stable: 'stable',\n    Next: 'next'\n};\nexport const RobotControllerStateOperationModeEnum = {\n    OperationModeUnknown: 'OPERATION_MODE_UNKNOWN',\n    OperationModeNoController: 'OPERATION_MODE_NO_CONTROLLER',\n    OperationModeDisconnected: 'OPERATION_MODE_DISCONNECTED',\n    OperationModePowerOn: 'OPERATION_MODE_POWER_ON',\n    OperationModePending: 'OPERATION_MODE_PENDING',\n    OperationModeManual: 'OPERATION_MODE_MANUAL',\n    OperationModeManualT1: 'OPERATION_MODE_MANUAL_T1',\n    OperationModeManualT2: 'OPERATION_MODE_MANUAL_T2',\n    OperationModeAuto: 'OPERATION_MODE_AUTO',\n    OperationModeRecovery: 'OPERATION_MODE_RECOVERY'\n};\nexport const RobotControllerStateSafetyStateEnum = {\n    SafetyStateUnknown: 'SAFETY_STATE_UNKNOWN',\n    SafetyStateFault: 'SAFETY_STATE_FAULT',\n    SafetyStateNormal: 'SAFETY_STATE_NORMAL',\n    SafetyStateMastering: 'SAFETY_STATE_MASTERING',\n    SafetyStateConfirmSafety: 'SAFETY_STATE_CONFIRM_SAFETY',\n    SafetyStateOperatorSafety: 'SAFETY_STATE_OPERATOR_SAFETY',\n    SafetyStateProtectiveStop: 'SAFETY_STATE_PROTECTIVE_STOP',\n    SafetyStateReduced: 'SAFETY_STATE_REDUCED',\n    SafetyStateStop: 'SAFETY_STATE_STOP',\n    SafetyStateStop0: 'SAFETY_STATE_STOP_0',\n    SafetyStateStop1: 'SAFETY_STATE_STOP_1',\n    SafetyStateStop2: 'SAFETY_STATE_STOP_2',\n    SafetyStateRecovery: 'SAFETY_STATE_RECOVERY',\n    SafetyStateDeviceEmergencyStop: 'SAFETY_STATE_DEVICE_EMERGENCY_STOP',\n    SafetyStateRobotEmergencyStop: 'SAFETY_STATE_ROBOT_EMERGENCY_STOP',\n    SafetyStateViolation: 'SAFETY_STATE_VIOLATION'\n};\n/**\n * The system mode of the robot system.  ### ROBOT_SYSTEM_MODE_UNDEFINED  Indicates that the robot controller is currently performing a mode transition.  ### ROBOT_SYSTEM_MODE_DISCONNECT  There is no communication with the robot controller at all. All connections are closed. No command is sent to the robot controller while in this mode. No IO interaction is possible in this mode! All move requests will be rejected in this mode!  ### ROBOT_SYSTEM_MODE_MONITOR  A connection to the robot controller is established to only read the robot controller state. No command is sent to the robot controller while in this mode. It is possible to receive IO information. All move requests will be rejected in this mode!  ### ROBOT_SYSTEM_MODE_CONTROL  An active connection is established with the robot controller and the robot system is cyclic commanded to stay in its actual position. The robot controller state is received in the cycle time of the robot controller. Requests via the MotionService and JoggingService will be processed and executed in this mode. IO interaction is possible in this mode! **In this mode the robot system can be commanded to move.**  ### ROBOT_SYSTEM_MODE_FREE_DRIVE  Like ROBOT_SYSTEM_MODE_MONITOR a connection to the robot controller is established to only read the robot controller state. The difference is that the motion groups can be moved by the user (Free Drive). Thus, the servo motors are turned on. All move requests will be rejected in this mode! **This mode is not supported by every robot!** Use [getSupportedModes](getSupportedModes) to evaluate if the device support free drive.\n * @export\n * @enum {string}\n */\nexport const RobotSystemMode = {\n    RobotSystemModeUndefined: 'ROBOT_SYSTEM_MODE_UNDEFINED',\n    RobotSystemModeDisconnect: 'ROBOT_SYSTEM_MODE_DISCONNECT',\n    RobotSystemModeMonitor: 'ROBOT_SYSTEM_MODE_MONITOR',\n    RobotSystemModeControl: 'ROBOT_SYSTEM_MODE_CONTROL',\n    RobotSystemModeFreeDrive: 'ROBOT_SYSTEM_MODE_FREE_DRIVE'\n};\n/**\n * The type of rotation description that is used to specify the rotation.  **Quaternion notation**  * The rotation is represented using a quaternion: [x, y, z, w]. * The vector part [x, y, z] is the imaginary part of the quaternion, and the scalar part [w] is the real part.  **Rotation Vector notation**  * The rotation is represented using an axis-angle representation: > axis = Vector[0:2] > angle = |axis| in [rad] > axis.normalized * angle  **Euler notation**  * *extrinsic* fixed external reference system * *intrinsic* reference system fixed to rotation body > angles = Vector[0:2] in [rad]. * ZYX, ZXZ,...   - mapping of the given angles values to the (either intrinsic     or extrinsic) axes in the stated order.  > Example ZYX: Z = Vector[0], Y = Vector[1], X = Vector[2].\n * @export\n * @enum {string}\n */\nexport const RotationAngleTypes = {\n    Quaternion: 'QUATERNION',\n    RotationVector: 'ROTATION_VECTOR',\n    EulerAnglesIntrinsicZxz: 'EULER_ANGLES_INTRINSIC_ZXZ',\n    EulerAnglesIntrinsicXyx: 'EULER_ANGLES_INTRINSIC_XYX',\n    EulerAnglesIntrinsicYzy: 'EULER_ANGLES_INTRINSIC_YZY',\n    EulerAnglesIntrinsicZyz: 'EULER_ANGLES_INTRINSIC_ZYZ',\n    EulerAnglesIntrinsicXzx: 'EULER_ANGLES_INTRINSIC_XZX',\n    EulerAnglesIntrinsicYxy: 'EULER_ANGLES_INTRINSIC_YXY',\n    EulerAnglesIntrinsicXyz: 'EULER_ANGLES_INTRINSIC_XYZ',\n    EulerAnglesIntrinsicYzx: 'EULER_ANGLES_INTRINSIC_YZX',\n    EulerAnglesIntrinsicZxy: 'EULER_ANGLES_INTRINSIC_ZXY',\n    EulerAnglesIntrinsicXzy: 'EULER_ANGLES_INTRINSIC_XZY',\n    EulerAnglesIntrinsicZyx: 'EULER_ANGLES_INTRINSIC_ZYX',\n    EulerAnglesIntrinsicYxz: 'EULER_ANGLES_INTRINSIC_YXZ',\n    EulerAnglesExtrinsicZxz: 'EULER_ANGLES_EXTRINSIC_ZXZ',\n    EulerAnglesExtrinsicXyx: 'EULER_ANGLES_EXTRINSIC_XYX',\n    EulerAnglesExtrinsicYzy: 'EULER_ANGLES_EXTRINSIC_YZY',\n    EulerAnglesExtrinsicZyz: 'EULER_ANGLES_EXTRINSIC_ZYZ',\n    EulerAnglesExtrinsicXzx: 'EULER_ANGLES_EXTRINSIC_XZX',\n    EulerAnglesExtrinsicYxy: 'EULER_ANGLES_EXTRINSIC_YXY',\n    EulerAnglesExtrinsicZyx: 'EULER_ANGLES_EXTRINSIC_ZYX',\n    EulerAnglesExtrinsicXzy: 'EULER_ANGLES_EXTRINSIC_XZY',\n    EulerAnglesExtrinsicYxz: 'EULER_ANGLES_EXTRINSIC_YXZ',\n    EulerAnglesExtrinsicYzx: 'EULER_ANGLES_EXTRINSIC_YZX',\n    EulerAnglesExtrinsicXyz: 'EULER_ANGLES_EXTRINSIC_XYZ',\n    EulerAnglesExtrinsicZxy: 'EULER_ANGLES_EXTRINSIC_ZXY'\n};\nexport const SafetySetupSafetySettingsSafetyStateEnum = {\n    SafetyInvalid: 'SAFETY_INVALID',\n    SafetyNormal: 'SAFETY_NORMAL',\n    SafetyReduced: 'SAFETY_REDUCED'\n};\n/**\n *\n * @export\n * @enum {string}\n */\nexport const ServiceStatusPhase = {\n    Terminating: 'Terminating',\n    Initialized: 'Initialized',\n    Running: 'Running',\n    NoReady: 'NoReady',\n    Completed: 'Completed',\n    ContainerCreating: 'ContainerCreating',\n    PodInitializing: 'PodInitializing',\n    Unknown: 'Unknown',\n    CrashLoopBackOff: 'CrashLoopBackOff',\n    Error: 'Error',\n    ImagePullBackOff: 'ImagePullBackOff',\n    OomKilled: 'OOMKilled',\n    Pending: 'Pending',\n    Evicted: 'Evicted'\n};\n/**\n *\n * @export\n * @enum {string}\n */\nexport const ServiceStatusSeverity = {\n    Info: 'INFO',\n    Warning: 'WARNING',\n    Error: 'ERROR'\n};\nexport const SingleJointLimitJointEnum = {\n    JointnameAxisInvalid: 'JOINTNAME_AXIS_INVALID',\n    JointnameAxis1: 'JOINTNAME_AXIS_1',\n    JointnameAxis2: 'JOINTNAME_AXIS_2',\n    JointnameAxis3: 'JOINTNAME_AXIS_3',\n    JointnameAxis4: 'JOINTNAME_AXIS_4',\n    JointnameAxis5: 'JOINTNAME_AXIS_5',\n    JointnameAxis6: 'JOINTNAME_AXIS_6',\n    JointnameAxis7: 'JOINTNAME_AXIS_7',\n    JointnameAxis8: 'JOINTNAME_AXIS_8',\n    JointnameAxis9: 'JOINTNAME_AXIS_9',\n    JointnameAxis10: 'JOINTNAME_AXIS_10',\n    JointnameAxis11: 'JOINTNAME_AXIS_11',\n    JointnameAxis12: 'JOINTNAME_AXIS_12'\n};\nexport const SingularitySingularityTypeEnum = {\n    SingularityTypeUnknown: 'SINGULARITY_TYPE_UNKNOWN',\n    SingularityTypeWrist: 'SINGULARITY_TYPE_WRIST',\n    SingularityTypeElbow: 'SINGULARITY_TYPE_ELBOW',\n    SingularityTypeShoulder: 'SINGULARITY_TYPE_SHOULDER'\n};\n/**\n *\n * @export\n * @enum {string}\n */\nexport const SingularityTypeEnum = {\n    Wrist: 'WRIST',\n    Elbow: 'ELBOW',\n    Shoulder: 'SHOULDER'\n};\nexport const Sphere2ShapeTypeEnum = {\n    Sphere: 'sphere'\n};\nexport const Sphere3ShapeTypeEnum = {\n    Sphere: 'sphere'\n};\n/**\n * The reason why the movement is paused.\n * @export\n * @enum {string}\n */\nexport const StandstillReason = {\n    ReasonMotionEnded: 'REASON_MOTION_ENDED',\n    ReasonUserPausedMotion: 'REASON_USER_PAUSED_MOTION',\n    ReasonWaitingForIo: 'REASON_WAITING_FOR_IO',\n    ReasonPausedOnIo: 'REASON_PAUSED_ON_IO'\n};\nexport const StopResponseStopCodeEnum = {\n    StopCodeUnknown: 'STOP_CODE_UNKNOWN',\n    StopCodeUserRequest: 'STOP_CODE_USER_REQUEST',\n    StopCodePathEnd: 'STOP_CODE_PATH_END',\n    StopCodeJointLimitReached: 'STOP_CODE_JOINT_LIMIT_REACHED',\n    StopCodeIo: 'STOP_CODE_IO',\n    StopCodeForceLimit: 'STOP_CODE_FORCE_LIMIT',\n    StopCodeError: 'STOP_CODE_ERROR'\n};\n/**\n * The type of the trigger.\n * @export\n * @enum {string}\n */\nexport const TriggerType = {\n    OpcuaNodeValue: 'opcua_node_value'\n};\nexport const UniversalrobotsControllerKindEnum = {\n    UniversalrobotsController: 'UniversalrobotsController'\n};\nexport const VirtualControllerKindEnum = {\n    VirtualController: 'VirtualController'\n};\n/**\n *\n * @export\n * @enum {string}\n */\nexport const VirtualControllerTypes = {\n    AbbIrb101003715: 'abb-irb1010_037_15',\n    AbbIrb110004754: 'abb-irb1100_0475_4',\n    AbbIrb11000584: 'abb-irb1100_058_4',\n    AbbIrb12007: 'abb-irb1200_7',\n    AbbIrb13000911: 'abb-irb1300_09_11',\n    AbbIrb130011510: 'abb-irb1300_115_10',\n    AbbIrb13001412: 'abb-irb1300_14_12',\n    AbbIrb1300147: 'abb-irb1300_14_7',\n    AbbIrb16001210: 'abb-irb1600_12_10',\n    AbbIrb1600126: 'abb-irb1600_12_6',\n    AbbIrb160014510: 'abb-irb1600_145_10',\n    AbbIrb16001456: 'abb-irb1600_145_6',\n    AbbIrb2600Id18515: 'abb-irb2600ID_185_15',\n    AbbIrb2600Id2008: 'abb-irb2600ID_200_8',\n    AbbIrb260016512: 'abb-irb2600_165_12',\n    AbbIrb260016520: 'abb-irb2600_165_20',\n    AbbIrb260018512: 'abb-irb2600_185_12',\n    AbbIrb460020545: 'abb-irb4600_205_45',\n    AbbIrb460020560: 'abb-irb4600_205_60',\n    AbbIrb460025020: 'abb-irb4600_250_20',\n    AbbIrb460025540: 'abb-irb4600_255_40',\n    FanucArcMate100iD: 'fanuc-arc_mate_100iD',\n    FanucArcMate100iD16S: 'fanuc-arc_mate_100iD16S',\n    FanucArcMate120iD: 'fanuc-arc_mate_120iD',\n    FanucArcMate120iD12L: 'fanuc-arc_mate_120iD12L',\n    FanucArcMate120iD35: 'fanuc-arc_mate_120iD35',\n    FanucCr35ib: 'fanuc-cr35ib',\n    FanucCr7ia: 'fanuc-cr7ia',\n    FanucCr7ial: 'fanuc-cr7ial',\n    FanucCrx10ia: 'fanuc-crx10ia',\n    FanucCrx10ial: 'fanuc-crx10ial',\n    FanucCrx20ial: 'fanuc-crx20ial',\n    FanucCrx25ia: 'fanuc-crx25ia',\n    FanucCrx30ia: 'fanuc-crx30ia',\n    FanucLrMate200iD: 'fanuc-lr_mate_200iD',\n    FanucLrMate200iD4S: 'fanuc-lr_mate_200iD4S',\n    FanucLrMate200iD7L: 'fanuc-lr_mate_200iD7L',\n    FanucM10iD12: 'fanuc-m10iD12',\n    FanucM10iD16S: 'fanuc-m10iD16S',\n    FanucM20iD25: 'fanuc-m20iD25',\n    FanucM20iD35: 'fanuc-m20iD35',\n    FanucM900iB280L: 'fanuc-m900iB280L',\n    FanucM900iB360E: 'fanuc-m900iB360E',\n    FanucR2000ic125l: 'fanuc-r2000ic125l',\n    FanucR2000ic210f: 'fanuc-r2000ic210f',\n    KukaKr10R1100: 'kuka-kr10_r1100',\n    KukaKr10R11002: 'kuka-kr10_r1100_2',\n    KukaKr10R900: 'kuka-kr10_r900',\n    KukaKr10R9002: 'kuka-kr10_r900_2',\n    KukaKr120R27002: 'kuka-kr120_r2700_2',\n    KukaKr12R18102: 'kuka-kr12_r1810_2',\n    KukaKr150R2: 'kuka-kr150_r2',\n    KukaKr16R16102: 'kuka-kr16_r1610_2',\n    KukaKr16R20102: 'kuka-kr16_r2010_2',\n    KukaKr20R1810: 'kuka-kr20_r1810',\n    KukaKr20R18102: 'kuka-kr20_r1810_2',\n    KukaKr210R27002: 'kuka-kr210_r2700_2',\n    KukaKr210R31002: 'kuka-kr210_r3100_2',\n    KukaKr210R33002: 'kuka-kr210_r3300_2',\n    KukaKr240R2700: 'kuka-kr240_r2700',\n    KukaKr250R27002: 'kuka-kr250_r2700_2',\n    KukaKr30R2100: 'kuka-kr30_r2100',\n    KukaKr30R3: 'kuka-kr30_r3',\n    KukaKr360L2403: 'kuka-kr360_l240_3',\n    KukaKr3R540: 'kuka-kr3_r540',\n    KukaKr4R600: 'kuka-kr4_r600',\n    KukaKr500L3403: 'kuka-kr500_l340_3',\n    KukaKr50R2500: 'kuka-kr50_r2500',\n    KukaKr6R1820: 'kuka-kr6_r1820',\n    KukaKr6R7002: 'kuka-kr6_r700_2',\n    KukaKr6R700Sixx: 'kuka-kr6_r700_sixx',\n    KukaKr6R900: 'kuka-kr6_r900',\n    KukaKr6R9002: 'kuka-kr6_r900_2',\n    KukaLbrIisy11R1300: 'kuka-lbr_iisy_11_r1300',\n    UniversalrobotsUr10cb: 'universalrobots-ur10cb',\n    UniversalrobotsUr10e: 'universalrobots-ur10e',\n    UniversalrobotsUr16e: 'universalrobots-ur16e',\n    UniversalrobotsUr20e: 'universalrobots-ur20e',\n    UniversalrobotsUr3e: 'universalrobots-ur3e',\n    UniversalrobotsUr5cb: 'universalrobots-ur5cb',\n    UniversalrobotsUr5e: 'universalrobots-ur5e',\n    YaskawaAr1440: 'yaskawa-ar1440',\n    YaskawaAr1730: 'yaskawa-ar1730',\n    YaskawaAr2010: 'yaskawa-ar2010',\n    YaskawaAr3120: 'yaskawa-ar3120',\n    YaskawaAr700: 'yaskawa-ar700',\n    YaskawaAr900: 'yaskawa-ar900',\n    YaskawaGp110: 'yaskawa-gp110',\n    YaskawaGp12: 'yaskawa-gp12',\n    YaskawaGp180: 'yaskawa-gp180',\n    YaskawaGp180120: 'yaskawa-gp180-120',\n    YaskawaGp20hl: 'yaskawa-gp20hl',\n    YaskawaGp215: 'yaskawa-gp215',\n    YaskawaGp225: 'yaskawa-gp225',\n    YaskawaGp25: 'yaskawa-gp25',\n    YaskawaGp250: 'yaskawa-gp250',\n    YaskawaGp2512: 'yaskawa-gp25_12',\n    YaskawaGp280: 'yaskawa-gp280',\n    YaskawaGp35L: 'yaskawa-gp35L',\n    YaskawaGp400: 'yaskawa-gp400',\n    YaskawaGp50: 'yaskawa-gp50',\n    YaskawaGp600: 'yaskawa-gp600',\n    YaskawaGp7: 'yaskawa-gp7',\n    YaskawaGp8: 'yaskawa-gp8',\n    YaskawaGp88: 'yaskawa-gp88',\n    YaskawaHc10dtp: 'yaskawa-hc10dtp',\n    YaskawaHc20dtp: 'yaskawa-hc20dtp'\n};\nexport const YaskawaControllerKindEnum = {\n    YaskawaController: 'YaskawaController'\n};\n/**\n * ApplicationApi - axios parameter creator\n * @export\n */\nexport const ApplicationApiAxiosParamCreator = function (configuration) {\n    return {\n        /**\n         * Install a basic, containerized web application to the cell to control robots with a customized frontend.  Prerequisites: A Docker hub account or similar container registry account, with valid credentials.  After adding the application to the cell, open the application on the Wandelbots NOVA home screen.  Read [build your application](/docs/docs/development/) for more information.  <!-- theme: none --> > #### Predefined Environment Variables > - `NOVA_API`: The endpoint where the API is reachable from the container serving the Application. > - `BASE_PATH`: The root path of the deployed Application. It will be reachable via: http://$host/$BASE_PATH > - `CELL_NAME`: The name of the cell where the application is deployed.\n         * @summary Add Application\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {App} app\n         * @param {number} [completionTimeout]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        addApp: async (cell, app, completionTimeout, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('addApp', 'cell', cell);\n            // verify required parameter 'app' is not null or undefined\n            assertParamExists('addApp', 'app', app);\n            const localVarPath = `/cells/{cell}/apps`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (completionTimeout !== undefined) {\n                localVarQueryParameter['completionTimeout'] = completionTimeout;\n            }\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            localVarRequestOptions.data = serializeDataIfNeeded(app, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Delete all GUI applications from the cell.\n         * @summary Clear Applications\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {number} [completionTimeout]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        clearApps: async (cell, completionTimeout, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('clearApps', 'cell', cell);\n            const localVarPath = `/cells/{cell}/apps`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (completionTimeout !== undefined) {\n                localVarQueryParameter['completionTimeout'] = completionTimeout;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Delete a GUI application from the cell.\n         * @summary Delete Application\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} app\n         * @param {number} [completionTimeout]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteApp: async (cell, app, completionTimeout, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('deleteApp', 'cell', cell);\n            // verify required parameter 'app' is not null or undefined\n            assertParamExists('deleteApp', 'app', app);\n            const localVarPath = `/cells/{cell}/apps/{app}`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"app\"}}`, encodeURIComponent(String(app)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (completionTimeout !== undefined) {\n                localVarQueryParameter['completionTimeout'] = completionTimeout;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Get the configuration for an active GUI application in the cell. To update the configuration of a GUI application in the cell, use this configuration with the \\'Update Configuration\\' endpoint.\n         * @summary Configuration\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} app\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getApp: async (cell, app, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('getApp', 'cell', cell);\n            // verify required parameter 'app' is not null or undefined\n            assertParamExists('getApp', 'app', app);\n            const localVarPath = `/cells/{cell}/apps/{app}`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"app\"}}`, encodeURIComponent(String(app)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * List all GUI applications that have been added to a cell. with the \\'Add Application\\' endpoint. If the cell does not contain GUI applications, the list is returned empty.\n         * @summary List Applications\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listApps: async (cell, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('listApps', 'cell', cell);\n            const localVarPath = `/cells/{cell}/apps`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Update the configuration of a GUI application in the cell.\n         * @summary Update Configuration\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} app\n         * @param {App} app2\n         * @param {number} [completionTimeout]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateApp: async (cell, app, app2, completionTimeout, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('updateApp', 'cell', cell);\n            // verify required parameter 'app' is not null or undefined\n            assertParamExists('updateApp', 'app', app);\n            // verify required parameter 'app2' is not null or undefined\n            assertParamExists('updateApp', 'app2', app2);\n            const localVarPath = `/cells/{cell}/apps/{app}`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"app\"}}`, encodeURIComponent(String(app)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (completionTimeout !== undefined) {\n                localVarQueryParameter['completionTimeout'] = completionTimeout;\n            }\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            localVarRequestOptions.data = serializeDataIfNeeded(app2, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n    };\n};\n/**\n * ApplicationApi - functional programming interface\n * @export\n */\nexport const ApplicationApiFp = function (configuration) {\n    const localVarAxiosParamCreator = ApplicationApiAxiosParamCreator(configuration);\n    return {\n        /**\n         * Install a basic, containerized web application to the cell to control robots with a customized frontend.  Prerequisites: A Docker hub account or similar container registry account, with valid credentials.  After adding the application to the cell, open the application on the Wandelbots NOVA home screen.  Read [build your application](/docs/docs/development/) for more information.  <!-- theme: none --> > #### Predefined Environment Variables > - `NOVA_API`: The endpoint where the API is reachable from the container serving the Application. > - `BASE_PATH`: The root path of the deployed Application. It will be reachable via: http://$host/$BASE_PATH > - `CELL_NAME`: The name of the cell where the application is deployed.\n         * @summary Add Application\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {App} app\n         * @param {number} [completionTimeout]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async addApp(cell, app, completionTimeout, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.addApp(cell, app, completionTimeout, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['ApplicationApi.addApp']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Delete all GUI applications from the cell.\n         * @summary Clear Applications\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {number} [completionTimeout]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async clearApps(cell, completionTimeout, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.clearApps(cell, completionTimeout, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['ApplicationApi.clearApps']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Delete a GUI application from the cell.\n         * @summary Delete Application\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} app\n         * @param {number} [completionTimeout]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async deleteApp(cell, app, completionTimeout, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.deleteApp(cell, app, completionTimeout, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['ApplicationApi.deleteApp']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Get the configuration for an active GUI application in the cell. To update the configuration of a GUI application in the cell, use this configuration with the \\'Update Configuration\\' endpoint.\n         * @summary Configuration\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} app\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getApp(cell, app, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getApp(cell, app, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['ApplicationApi.getApp']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * List all GUI applications that have been added to a cell. with the \\'Add Application\\' endpoint. If the cell does not contain GUI applications, the list is returned empty.\n         * @summary List Applications\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async listApps(cell, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.listApps(cell, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['ApplicationApi.listApps']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Update the configuration of a GUI application in the cell.\n         * @summary Update Configuration\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} app\n         * @param {App} app2\n         * @param {number} [completionTimeout]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async updateApp(cell, app, app2, completionTimeout, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.updateApp(cell, app, app2, completionTimeout, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['ApplicationApi.updateApp']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n    };\n};\n/**\n * ApplicationApi - factory interface\n * @export\n */\nexport const ApplicationApiFactory = function (configuration, basePath, axios) {\n    const localVarFp = ApplicationApiFp(configuration);\n    return {\n        /**\n         * Install a basic, containerized web application to the cell to control robots with a customized frontend.  Prerequisites: A Docker hub account or similar container registry account, with valid credentials.  After adding the application to the cell, open the application on the Wandelbots NOVA home screen.  Read [build your application](/docs/docs/development/) for more information.  <!-- theme: none --> > #### Predefined Environment Variables > - `NOVA_API`: The endpoint where the API is reachable from the container serving the Application. > - `BASE_PATH`: The root path of the deployed Application. It will be reachable via: http://$host/$BASE_PATH > - `CELL_NAME`: The name of the cell where the application is deployed.\n         * @summary Add Application\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {App} app\n         * @param {number} [completionTimeout]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        addApp(cell, app, completionTimeout, options) {\n            return localVarFp.addApp(cell, app, completionTimeout, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Delete all GUI applications from the cell.\n         * @summary Clear Applications\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {number} [completionTimeout]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        clearApps(cell, completionTimeout, options) {\n            return localVarFp.clearApps(cell, completionTimeout, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Delete a GUI application from the cell.\n         * @summary Delete Application\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} app\n         * @param {number} [completionTimeout]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteApp(cell, app, completionTimeout, options) {\n            return localVarFp.deleteApp(cell, app, completionTimeout, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Get the configuration for an active GUI application in the cell. To update the configuration of a GUI application in the cell, use this configuration with the \\'Update Configuration\\' endpoint.\n         * @summary Configuration\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} app\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getApp(cell, app, options) {\n            return localVarFp.getApp(cell, app, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * List all GUI applications that have been added to a cell. with the \\'Add Application\\' endpoint. If the cell does not contain GUI applications, the list is returned empty.\n         * @summary List Applications\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listApps(cell, options) {\n            return localVarFp.listApps(cell, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Update the configuration of a GUI application in the cell.\n         * @summary Update Configuration\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} app\n         * @param {App} app2\n         * @param {number} [completionTimeout]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateApp(cell, app, app2, completionTimeout, options) {\n            return localVarFp.updateApp(cell, app, app2, completionTimeout, options).then((request) => request(axios, basePath));\n        },\n    };\n};\n/**\n * ApplicationApi - object-oriented interface\n * @export\n * @class ApplicationApi\n * @extends {BaseAPI}\n */\nexport class ApplicationApi extends BaseAPI {\n    /**\n     * Install a basic, containerized web application to the cell to control robots with a customized frontend.  Prerequisites: A Docker hub account or similar container registry account, with valid credentials.  After adding the application to the cell, open the application on the Wandelbots NOVA home screen.  Read [build your application](/docs/docs/development/) for more information.  <!-- theme: none --> > #### Predefined Environment Variables > - `NOVA_API`: The endpoint where the API is reachable from the container serving the Application. > - `BASE_PATH`: The root path of the deployed Application. It will be reachable via: http://$host/$BASE_PATH > - `CELL_NAME`: The name of the cell where the application is deployed.\n     * @summary Add Application\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {App} app\n     * @param {number} [completionTimeout]\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ApplicationApi\n     */\n    addApp(cell, app, completionTimeout, options) {\n        return ApplicationApiFp(this.configuration).addApp(cell, app, completionTimeout, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Delete all GUI applications from the cell.\n     * @summary Clear Applications\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {number} [completionTimeout]\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ApplicationApi\n     */\n    clearApps(cell, completionTimeout, options) {\n        return ApplicationApiFp(this.configuration).clearApps(cell, completionTimeout, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Delete a GUI application from the cell.\n     * @summary Delete Application\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} app\n     * @param {number} [completionTimeout]\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ApplicationApi\n     */\n    deleteApp(cell, app, completionTimeout, options) {\n        return ApplicationApiFp(this.configuration).deleteApp(cell, app, completionTimeout, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Get the configuration for an active GUI application in the cell. To update the configuration of a GUI application in the cell, use this configuration with the \\'Update Configuration\\' endpoint.\n     * @summary Configuration\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} app\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ApplicationApi\n     */\n    getApp(cell, app, options) {\n        return ApplicationApiFp(this.configuration).getApp(cell, app, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * List all GUI applications that have been added to a cell. with the \\'Add Application\\' endpoint. If the cell does not contain GUI applications, the list is returned empty.\n     * @summary List Applications\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ApplicationApi\n     */\n    listApps(cell, options) {\n        return ApplicationApiFp(this.configuration).listApps(cell, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Update the configuration of a GUI application in the cell.\n     * @summary Update Configuration\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} app\n     * @param {App} app2\n     * @param {number} [completionTimeout]\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ApplicationApi\n     */\n    updateApp(cell, app, app2, completionTimeout, options) {\n        return ApplicationApiFp(this.configuration).updateApp(cell, app, app2, completionTimeout, options).then((request) => request(this.axios, this.basePath));\n    }\n}\n/**\n * CellApi - axios parameter creator\n * @export\n */\nexport const CellApiAxiosParamCreator = function (configuration) {\n    return {\n        /**\n         * Delete an entire cell.\n         * @summary Delete Cell\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {number} [completionTimeout]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteCell: async (cell, completionTimeout, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('deleteCell', 'cell', cell);\n            const localVarPath = `/cells/{cell}`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (completionTimeout !== undefined) {\n                localVarQueryParameter['completionTimeout'] = completionTimeout;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Deploy an entire cell with all its resources.  A cell can be used to deploy a robot controller, one or more robots, as well as custom applications.  Refer to the [Wandelbots NOVA documentation](docs/wandelbots-nova-api/#create-a-cell) for more information.\n         * @summary Add Cell\n         * @param {Cell} cell\n         * @param {number} [completionTimeout]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deployCell: async (cell, completionTimeout, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('deployCell', 'cell', cell);\n            const localVarPath = `/cells`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (completionTimeout !== undefined) {\n                localVarQueryParameter['completionTimeout'] = completionTimeout;\n            }\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            localVarRequestOptions.data = serializeDataIfNeeded(cell, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * List all cell resources.  > **NOTE** > > The output generated by this endpoint can be too large for the site to handle, and may produce an error or incorrect output. > Use `curl` in combination with `> output.json` to capture the output, or use an API client like Postman.\n         * @summary Configuration\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getCell: async (cell, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('getCell', 'cell', cell);\n            const localVarPath = `/cells/{cell}`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * List the status of all cell resources.\n         * @summary Service Status\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getCellStatus: async (cell, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('getCellStatus', 'cell', cell);\n            const localVarPath = `/cells/{cell}/status`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * List all deployed cell names. If no cells are deployed, an empty list is returned.\n         * @summary List Cells\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listCells: async (options = {}) => {\n            const localVarPath = `/cells`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Update the definition of the entire Cell.\n         * @summary Update Configuration\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {Cell} cell2\n         * @param {number} [completionTimeout]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateCell: async (cell, cell2, completionTimeout, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('updateCell', 'cell', cell);\n            // verify required parameter 'cell2' is not null or undefined\n            assertParamExists('updateCell', 'cell2', cell2);\n            const localVarPath = `/cells/{cell}`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (completionTimeout !== undefined) {\n                localVarQueryParameter['completionTimeout'] = completionTimeout;\n            }\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            localVarRequestOptions.data = serializeDataIfNeeded(cell2, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n    };\n};\n/**\n * CellApi - functional programming interface\n * @export\n */\nexport const CellApiFp = function (configuration) {\n    const localVarAxiosParamCreator = CellApiAxiosParamCreator(configuration);\n    return {\n        /**\n         * Delete an entire cell.\n         * @summary Delete Cell\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {number} [completionTimeout]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async deleteCell(cell, completionTimeout, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.deleteCell(cell, completionTimeout, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['CellApi.deleteCell']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Deploy an entire cell with all its resources.  A cell can be used to deploy a robot controller, one or more robots, as well as custom applications.  Refer to the [Wandelbots NOVA documentation](docs/wandelbots-nova-api/#create-a-cell) for more information.\n         * @summary Add Cell\n         * @param {Cell} cell\n         * @param {number} [completionTimeout]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async deployCell(cell, completionTimeout, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.deployCell(cell, completionTimeout, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['CellApi.deployCell']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * List all cell resources.  > **NOTE** > > The output generated by this endpoint can be too large for the site to handle, and may produce an error or incorrect output. > Use `curl` in combination with `> output.json` to capture the output, or use an API client like Postman.\n         * @summary Configuration\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getCell(cell, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getCell(cell, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['CellApi.getCell']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * List the status of all cell resources.\n         * @summary Service Status\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getCellStatus(cell, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getCellStatus(cell, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['CellApi.getCellStatus']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * List all deployed cell names. If no cells are deployed, an empty list is returned.\n         * @summary List Cells\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async listCells(options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.listCells(options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['CellApi.listCells']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Update the definition of the entire Cell.\n         * @summary Update Configuration\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {Cell} cell2\n         * @param {number} [completionTimeout]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async updateCell(cell, cell2, completionTimeout, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.updateCell(cell, cell2, completionTimeout, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['CellApi.updateCell']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n    };\n};\n/**\n * CellApi - factory interface\n * @export\n */\nexport const CellApiFactory = function (configuration, basePath, axios) {\n    const localVarFp = CellApiFp(configuration);\n    return {\n        /**\n         * Delete an entire cell.\n         * @summary Delete Cell\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {number} [completionTimeout]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteCell(cell, completionTimeout, options) {\n            return localVarFp.deleteCell(cell, completionTimeout, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Deploy an entire cell with all its resources.  A cell can be used to deploy a robot controller, one or more robots, as well as custom applications.  Refer to the [Wandelbots NOVA documentation](docs/wandelbots-nova-api/#create-a-cell) for more information.\n         * @summary Add Cell\n         * @param {Cell} cell\n         * @param {number} [completionTimeout]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deployCell(cell, completionTimeout, options) {\n            return localVarFp.deployCell(cell, completionTimeout, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * List all cell resources.  > **NOTE** > > The output generated by this endpoint can be too large for the site to handle, and may produce an error or incorrect output. > Use `curl` in combination with `> output.json` to capture the output, or use an API client like Postman.\n         * @summary Configuration\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getCell(cell, options) {\n            return localVarFp.getCell(cell, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * List the status of all cell resources.\n         * @summary Service Status\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getCellStatus(cell, options) {\n            return localVarFp.getCellStatus(cell, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * List all deployed cell names. If no cells are deployed, an empty list is returned.\n         * @summary List Cells\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listCells(options) {\n            return localVarFp.listCells(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Update the definition of the entire Cell.\n         * @summary Update Configuration\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {Cell} cell2\n         * @param {number} [completionTimeout]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateCell(cell, cell2, completionTimeout, options) {\n            return localVarFp.updateCell(cell, cell2, completionTimeout, options).then((request) => request(axios, basePath));\n        },\n    };\n};\n/**\n * CellApi - object-oriented interface\n * @export\n * @class CellApi\n * @extends {BaseAPI}\n */\nexport class CellApi extends BaseAPI {\n    /**\n     * Delete an entire cell.\n     * @summary Delete Cell\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {number} [completionTimeout]\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof CellApi\n     */\n    deleteCell(cell, completionTimeout, options) {\n        return CellApiFp(this.configuration).deleteCell(cell, completionTimeout, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Deploy an entire cell with all its resources.  A cell can be used to deploy a robot controller, one or more robots, as well as custom applications.  Refer to the [Wandelbots NOVA documentation](docs/wandelbots-nova-api/#create-a-cell) for more information.\n     * @summary Add Cell\n     * @param {Cell} cell\n     * @param {number} [completionTimeout]\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof CellApi\n     */\n    deployCell(cell, completionTimeout, options) {\n        return CellApiFp(this.configuration).deployCell(cell, completionTimeout, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * List all cell resources.  > **NOTE** > > The output generated by this endpoint can be too large for the site to handle, and may produce an error or incorrect output. > Use `curl` in combination with `> output.json` to capture the output, or use an API client like Postman.\n     * @summary Configuration\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof CellApi\n     */\n    getCell(cell, options) {\n        return CellApiFp(this.configuration).getCell(cell, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * List the status of all cell resources.\n     * @summary Service Status\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof CellApi\n     */\n    getCellStatus(cell, options) {\n        return CellApiFp(this.configuration).getCellStatus(cell, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * List all deployed cell names. If no cells are deployed, an empty list is returned.\n     * @summary List Cells\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof CellApi\n     */\n    listCells(options) {\n        return CellApiFp(this.configuration).listCells(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Update the definition of the entire Cell.\n     * @summary Update Configuration\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {Cell} cell2\n     * @param {number} [completionTimeout]\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof CellApi\n     */\n    updateCell(cell, cell2, completionTimeout, options) {\n        return CellApiFp(this.configuration).updateCell(cell, cell2, completionTimeout, options).then((request) => request(this.axios, this.basePath));\n    }\n}\n/**\n * ControllerApi - axios parameter creator\n * @export\n */\nexport const ControllerApiAxiosParamCreator = function (configuration) {\n    return {\n        /**\n         * Add a robot controller to the cell.  <!-- theme: warning --> > **WARNING** > > Using it in conjunction with the settings app may lead to unpredictable behavior.\n         * @summary Add Robot Controller\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {RobotController} robotController\n         * @param {number} [completionTimeout]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        addRobotController: async (cell, robotController, completionTimeout, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('addRobotController', 'cell', cell);\n            // verify required parameter 'robotController' is not null or undefined\n            assertParamExists('addRobotController', 'robotController', robotController);\n            const localVarPath = `/cells/{cell}/controllers`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (completionTimeout !== undefined) {\n                localVarQueryParameter['completionTimeout'] = completionTimeout;\n            }\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            localVarRequestOptions.data = serializeDataIfNeeded(robotController, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Delete all robot controllers from the cell.  To replace all robot controllers in a cell, use this endpoint in combination with the \\'Add Robot Controller\\' endpoint.  <!-- theme: warning --> > **WARNING** > > Using it in conjunction with the settings app may lead to unpredictable behavior.\n         * @summary Clear Robot Controllers\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {number} [completionTimeout]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        clearRobotControllers: async (cell, completionTimeout, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('clearRobotControllers', 'cell', cell);\n            const localVarPath = `/cells/{cell}/controllers`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (completionTimeout !== undefined) {\n                localVarQueryParameter['completionTimeout'] = completionTimeout;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Delete a robot controller from the cell.  <!-- theme: warning --> > **WARNING** > > Using it in conjunction with the settings app may lead to unpredictable behavior.\n         * @summary Delete Robot Controller\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {number} [completionTimeout]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteRobotController: async (cell, controller, completionTimeout, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('deleteRobotController', 'cell', cell);\n            // verify required parameter 'controller' is not null or undefined\n            assertParamExists('deleteRobotController', 'controller', controller);\n            const localVarPath = `/cells/{cell}/controllers/{controller}`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"controller\"}}`, encodeURIComponent(String(controller)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (completionTimeout !== undefined) {\n                localVarQueryParameter['completionTimeout'] = completionTimeout;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Get the current state of a robot controller.\n         * @summary State of Device\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getCurrentRobotControllerState: async (cell, controller, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('getCurrentRobotControllerState', 'cell', cell);\n            // verify required parameter 'controller' is not null or undefined\n            assertParamExists('getCurrentRobotControllerState', 'controller', controller);\n            const localVarPath = `/cells/{cell}/controllers/{controller}/state`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"controller\"}}`, encodeURIComponent(String(controller)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Get the current robot system mode of a registered robot controller. The robot system mode indicates if a robot controller can be used. See [setDefaultMode](setDefaultMode) for more information about the different modes. The mode is influenced by the operating mode of the robot controller. The operating mode can be changed via [setDefaultMode](setDefaultMode). Request the current operating mode of the robot controller via [getCurrentRobotControllerState](getCurrentRobotControllerState).\n         * @summary Current Mode\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getMode: async (cell, controller, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('getMode', 'cell', cell);\n            // verify required parameter 'controller' is not null or undefined\n            assertParamExists('getMode', 'controller', controller);\n            const localVarPath = `/cells/{cell}/controllers/{controller}/mode`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"controller\"}}`, encodeURIComponent(String(controller)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Get the configuration for a robot controller.\n         * @summary Robot Controller Configuration\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getRobotController: async (cell, controller, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('getRobotController', 'cell', cell);\n            // verify required parameter 'controller' is not null or undefined\n            assertParamExists('getRobotController', 'controller', controller);\n            const localVarPath = `/cells/{cell}/controllers/{controller}`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"controller\"}}`, encodeURIComponent(String(controller)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Lists supported operating modes. Usually cobots support free drive and control, industrial robots only support control.\n         * @summary Supported Motion Modes\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getSupportedModes: async (cell, controller, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('getSupportedModes', 'cell', cell);\n            // verify required parameter 'controller' is not null or undefined\n            assertParamExists('getSupportedModes', 'controller', controller);\n            const localVarPath = `/cells/{cell}/controllers/{controller}/controller-capabilities`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"controller\"}}`, encodeURIComponent(String(controller)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Receive the configuration for a virtual robot controller. Used to configure a virtual robot controller via [addRobotController](addRobotController).  > **NOTE** > > The output generated by this endpoint can be too large for the site to handle, and may produce an error or incorrect output. > Use `curl` in combination with `> output.json` to capture the output, or use an API client like Postman.\n         * @summary Virtual Robot Configuration\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getVirtualRobotConfiguration: async (cell, controller, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('getVirtualRobotConfiguration', 'cell', cell);\n            // verify required parameter 'controller' is not null or undefined\n            assertParamExists('getVirtualRobotConfiguration', 'controller', controller);\n            const localVarPath = `/cells/{cell}/controllers/{controller}/virtual-robot-configuration`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"controller\"}}`, encodeURIComponent(String(controller)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * List all configured robot controllers.\n         * @summary List Robot Controllers\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listControllers: async (cell, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('listControllers', 'cell', cell);\n            const localVarPath = `/cells/{cell}/controllers`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Switch between monitor and control usage as default for a robot controller. Monitoring mode is used to read information from the robot controller and control mode is used to command the robot system. As long as the robot controller is connected via network monitoring mode is always possible. To switch to control mode the robot controller must be in `automatic` or `manual` operating mode and safety state \\'normal\\' or \\'reduced\\'. If the robot controller is in `manual` operating mode, you have manually confirm the control usage activation on the robot control panel. This manual confirmation can\\'t be replaced with this API. Without manual confirmation the robot controller will stay in monitor mode.  The robot system will try to activate the required operation mode for the requested usage unless no active call requires a different mode.  > **NOTE** > > Some robot controllers prevent the external activation of automatic operating mode. In this case, changing the operating mode manually at the robot controller is mandatory.  > **NOTE** > > The current operation mode and safety state can be requested via [getCurrentRobotControllerState](getCurrentRobotControllerState).  If a mode change is not possible, the response lists reasons for the failed change.\n         * @summary Set Default Mode\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {SetDefaultModeModeEnum} mode\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        setDefaultMode: async (cell, controller, mode, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('setDefaultMode', 'cell', cell);\n            // verify required parameter 'controller' is not null or undefined\n            assertParamExists('setDefaultMode', 'controller', controller);\n            // verify required parameter 'mode' is not null or undefined\n            assertParamExists('setDefaultMode', 'mode', mode);\n            const localVarPath = `/cells/{cell}/controllers/{controller}/mode`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"controller\"}}`, encodeURIComponent(String(controller)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (mode !== undefined) {\n                localVarQueryParameter['mode'] = mode;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Sets the robot controller into freedrive mode and stays in freedrive until the websocket connection is closed by the client. In freedrive mode, it is possible to move the attached motion groups by hand. This is a blocking call. As long as the websocket connection is open, no other endpoint can control or move the robot. <!-- theme: danger --> > **DANGER** > Danger caused by robot. Improper assessment by the integrator of the application-specific hazards can result in people being crushed, > drawn in or caught due to the robot\\'s complex movement sequences. Before opening the websocket, ensure that > - The robot is in a safe state, > - The right payload is set (e.g by using the (getActivePayload)[getActivePayload] endpoint), > - No humans or object are within the robot\\'s reach or within the cell. As long as the websocket connection is open you will get the current state of the robot system in the response in the specified response_rate. If the activation failed, the returned status will return possible reasons for the failure. Free drive mode is only available for robot controllers that support it, in particular Collobarative Robots (\\\"Cobots\\\"). Use the (getSupportedModes)[getSupportedModes] endpoint to check if the robot controller supports free drive mode.\n         * @summary Stream Free Drive Mode\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {number} [responseRate]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        streamFreeDrive: async (cell, controller, responseRate, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('streamFreeDrive', 'cell', cell);\n            // verify required parameter 'controller' is not null or undefined\n            assertParamExists('streamFreeDrive', 'controller', controller);\n            const localVarPath = `/cells/{cell}/controllers/{controller}/free-drive-stream`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"controller\"}}`, encodeURIComponent(String(controller)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (responseRate !== undefined) {\n                localVarQueryParameter['response_rate'] = responseRate;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Receive updates of the current robot system mode of a robot controller via websocket upon robot system mode change. See [setDefaultMode](setDefaultMode) for more information about the different modes.\n         * @summary Stream Mode Change\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        streamModeChange: async (cell, controller, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('streamModeChange', 'cell', cell);\n            // verify required parameter 'controller' is not null or undefined\n            assertParamExists('streamModeChange', 'controller', controller);\n            const localVarPath = `/cells/{cell}/controllers/{controller}/mode-stream`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"controller\"}}`, encodeURIComponent(String(controller)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Receive updates of the state of a robot controller.\n         * @summary Stream State of Device\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {number} [responseRate]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        streamRobotControllerState: async (cell, controller, responseRate, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('streamRobotControllerState', 'cell', cell);\n            // verify required parameter 'controller' is not null or undefined\n            assertParamExists('streamRobotControllerState', 'controller', controller);\n            const localVarPath = `/cells/{cell}/controllers/{controller}/state-stream`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"controller\"}}`, encodeURIComponent(String(controller)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (responseRate !== undefined) {\n                localVarQueryParameter['response_rate'] = responseRate;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Update the configuration of a robot controller.  Reconfigure certain options of a robot controller, or deploy a specific container image of a robot controller.  <!-- theme: warning --> > **WARNING** > > Using it in conjunction with the settings app may lead to unpredictable behavior.\n         * @summary Update Robot Controller Configuration\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {RobotController} robotController\n         * @param {number} [completionTimeout]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateRobotController: async (cell, controller, robotController, completionTimeout, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('updateRobotController', 'cell', cell);\n            // verify required parameter 'controller' is not null or undefined\n            assertParamExists('updateRobotController', 'controller', controller);\n            // verify required parameter 'robotController' is not null or undefined\n            assertParamExists('updateRobotController', 'robotController', robotController);\n            const localVarPath = `/cells/{cell}/controllers/{controller}`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"controller\"}}`, encodeURIComponent(String(controller)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (completionTimeout !== undefined) {\n                localVarQueryParameter['completionTimeout'] = completionTimeout;\n            }\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            localVarRequestOptions.data = serializeDataIfNeeded(robotController, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n    };\n};\n/**\n * ControllerApi - functional programming interface\n * @export\n */\nexport const ControllerApiFp = function (configuration) {\n    const localVarAxiosParamCreator = ControllerApiAxiosParamCreator(configuration);\n    return {\n        /**\n         * Add a robot controller to the cell.  <!-- theme: warning --> > **WARNING** > > Using it in conjunction with the settings app may lead to unpredictable behavior.\n         * @summary Add Robot Controller\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {RobotController} robotController\n         * @param {number} [completionTimeout]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async addRobotController(cell, robotController, completionTimeout, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.addRobotController(cell, robotController, completionTimeout, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['ControllerApi.addRobotController']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Delete all robot controllers from the cell.  To replace all robot controllers in a cell, use this endpoint in combination with the \\'Add Robot Controller\\' endpoint.  <!-- theme: warning --> > **WARNING** > > Using it in conjunction with the settings app may lead to unpredictable behavior.\n         * @summary Clear Robot Controllers\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {number} [completionTimeout]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async clearRobotControllers(cell, completionTimeout, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.clearRobotControllers(cell, completionTimeout, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['ControllerApi.clearRobotControllers']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Delete a robot controller from the cell.  <!-- theme: warning --> > **WARNING** > > Using it in conjunction with the settings app may lead to unpredictable behavior.\n         * @summary Delete Robot Controller\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {number} [completionTimeout]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async deleteRobotController(cell, controller, completionTimeout, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.deleteRobotController(cell, controller, completionTimeout, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['ControllerApi.deleteRobotController']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Get the current state of a robot controller.\n         * @summary State of Device\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getCurrentRobotControllerState(cell, controller, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getCurrentRobotControllerState(cell, controller, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['ControllerApi.getCurrentRobotControllerState']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Get the current robot system mode of a registered robot controller. The robot system mode indicates if a robot controller can be used. See [setDefaultMode](setDefaultMode) for more information about the different modes. The mode is influenced by the operating mode of the robot controller. The operating mode can be changed via [setDefaultMode](setDefaultMode). Request the current operating mode of the robot controller via [getCurrentRobotControllerState](getCurrentRobotControllerState).\n         * @summary Current Mode\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getMode(cell, controller, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getMode(cell, controller, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['ControllerApi.getMode']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Get the configuration for a robot controller.\n         * @summary Robot Controller Configuration\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getRobotController(cell, controller, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getRobotController(cell, controller, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['ControllerApi.getRobotController']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Lists supported operating modes. Usually cobots support free drive and control, industrial robots only support control.\n         * @summary Supported Motion Modes\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getSupportedModes(cell, controller, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getSupportedModes(cell, controller, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['ControllerApi.getSupportedModes']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Receive the configuration for a virtual robot controller. Used to configure a virtual robot controller via [addRobotController](addRobotController).  > **NOTE** > > The output generated by this endpoint can be too large for the site to handle, and may produce an error or incorrect output. > Use `curl` in combination with `> output.json` to capture the output, or use an API client like Postman.\n         * @summary Virtual Robot Configuration\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getVirtualRobotConfiguration(cell, controller, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getVirtualRobotConfiguration(cell, controller, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['ControllerApi.getVirtualRobotConfiguration']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * List all configured robot controllers.\n         * @summary List Robot Controllers\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async listControllers(cell, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.listControllers(cell, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['ControllerApi.listControllers']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Switch between monitor and control usage as default for a robot controller. Monitoring mode is used to read information from the robot controller and control mode is used to command the robot system. As long as the robot controller is connected via network monitoring mode is always possible. To switch to control mode the robot controller must be in `automatic` or `manual` operating mode and safety state \\'normal\\' or \\'reduced\\'. If the robot controller is in `manual` operating mode, you have manually confirm the control usage activation on the robot control panel. This manual confirmation can\\'t be replaced with this API. Without manual confirmation the robot controller will stay in monitor mode.  The robot system will try to activate the required operation mode for the requested usage unless no active call requires a different mode.  > **NOTE** > > Some robot controllers prevent the external activation of automatic operating mode. In this case, changing the operating mode manually at the robot controller is mandatory.  > **NOTE** > > The current operation mode and safety state can be requested via [getCurrentRobotControllerState](getCurrentRobotControllerState).  If a mode change is not possible, the response lists reasons for the failed change.\n         * @summary Set Default Mode\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {SetDefaultModeModeEnum} mode\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async setDefaultMode(cell, controller, mode, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.setDefaultMode(cell, controller, mode, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['ControllerApi.setDefaultMode']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Sets the robot controller into freedrive mode and stays in freedrive until the websocket connection is closed by the client. In freedrive mode, it is possible to move the attached motion groups by hand. This is a blocking call. As long as the websocket connection is open, no other endpoint can control or move the robot. <!-- theme: danger --> > **DANGER** > Danger caused by robot. Improper assessment by the integrator of the application-specific hazards can result in people being crushed, > drawn in or caught due to the robot\\'s complex movement sequences. Before opening the websocket, ensure that > - The robot is in a safe state, > - The right payload is set (e.g by using the (getActivePayload)[getActivePayload] endpoint), > - No humans or object are within the robot\\'s reach or within the cell. As long as the websocket connection is open you will get the current state of the robot system in the response in the specified response_rate. If the activation failed, the returned status will return possible reasons for the failure. Free drive mode is only available for robot controllers that support it, in particular Collobarative Robots (\\\"Cobots\\\"). Use the (getSupportedModes)[getSupportedModes] endpoint to check if the robot controller supports free drive mode.\n         * @summary Stream Free Drive Mode\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {number} [responseRate]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async streamFreeDrive(cell, controller, responseRate, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.streamFreeDrive(cell, controller, responseRate, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['ControllerApi.streamFreeDrive']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Receive updates of the current robot system mode of a robot controller via websocket upon robot system mode change. See [setDefaultMode](setDefaultMode) for more information about the different modes.\n         * @summary Stream Mode Change\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async streamModeChange(cell, controller, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.streamModeChange(cell, controller, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['ControllerApi.streamModeChange']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Receive updates of the state of a robot controller.\n         * @summary Stream State of Device\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {number} [responseRate]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async streamRobotControllerState(cell, controller, responseRate, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.streamRobotControllerState(cell, controller, responseRate, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['ControllerApi.streamRobotControllerState']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Update the configuration of a robot controller.  Reconfigure certain options of a robot controller, or deploy a specific container image of a robot controller.  <!-- theme: warning --> > **WARNING** > > Using it in conjunction with the settings app may lead to unpredictable behavior.\n         * @summary Update Robot Controller Configuration\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {RobotController} robotController\n         * @param {number} [completionTimeout]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async updateRobotController(cell, controller, robotController, completionTimeout, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.updateRobotController(cell, controller, robotController, completionTimeout, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['ControllerApi.updateRobotController']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n    };\n};\n/**\n * ControllerApi - factory interface\n * @export\n */\nexport const ControllerApiFactory = function (configuration, basePath, axios) {\n    const localVarFp = ControllerApiFp(configuration);\n    return {\n        /**\n         * Add a robot controller to the cell.  <!-- theme: warning --> > **WARNING** > > Using it in conjunction with the settings app may lead to unpredictable behavior.\n         * @summary Add Robot Controller\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {RobotController} robotController\n         * @param {number} [completionTimeout]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        addRobotController(cell, robotController, completionTimeout, options) {\n            return localVarFp.addRobotController(cell, robotController, completionTimeout, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Delete all robot controllers from the cell.  To replace all robot controllers in a cell, use this endpoint in combination with the \\'Add Robot Controller\\' endpoint.  <!-- theme: warning --> > **WARNING** > > Using it in conjunction with the settings app may lead to unpredictable behavior.\n         * @summary Clear Robot Controllers\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {number} [completionTimeout]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        clearRobotControllers(cell, completionTimeout, options) {\n            return localVarFp.clearRobotControllers(cell, completionTimeout, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Delete a robot controller from the cell.  <!-- theme: warning --> > **WARNING** > > Using it in conjunction with the settings app may lead to unpredictable behavior.\n         * @summary Delete Robot Controller\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {number} [completionTimeout]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteRobotController(cell, controller, completionTimeout, options) {\n            return localVarFp.deleteRobotController(cell, controller, completionTimeout, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Get the current state of a robot controller.\n         * @summary State of Device\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getCurrentRobotControllerState(cell, controller, options) {\n            return localVarFp.getCurrentRobotControllerState(cell, controller, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Get the current robot system mode of a registered robot controller. The robot system mode indicates if a robot controller can be used. See [setDefaultMode](setDefaultMode) for more information about the different modes. The mode is influenced by the operating mode of the robot controller. The operating mode can be changed via [setDefaultMode](setDefaultMode). Request the current operating mode of the robot controller via [getCurrentRobotControllerState](getCurrentRobotControllerState).\n         * @summary Current Mode\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getMode(cell, controller, options) {\n            return localVarFp.getMode(cell, controller, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Get the configuration for a robot controller.\n         * @summary Robot Controller Configuration\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getRobotController(cell, controller, options) {\n            return localVarFp.getRobotController(cell, controller, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Lists supported operating modes. Usually cobots support free drive and control, industrial robots only support control.\n         * @summary Supported Motion Modes\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getSupportedModes(cell, controller, options) {\n            return localVarFp.getSupportedModes(cell, controller, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Receive the configuration for a virtual robot controller. Used to configure a virtual robot controller via [addRobotController](addRobotController).  > **NOTE** > > The output generated by this endpoint can be too large for the site to handle, and may produce an error or incorrect output. > Use `curl` in combination with `> output.json` to capture the output, or use an API client like Postman.\n         * @summary Virtual Robot Configuration\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getVirtualRobotConfiguration(cell, controller, options) {\n            return localVarFp.getVirtualRobotConfiguration(cell, controller, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * List all configured robot controllers.\n         * @summary List Robot Controllers\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listControllers(cell, options) {\n            return localVarFp.listControllers(cell, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Switch between monitor and control usage as default for a robot controller. Monitoring mode is used to read information from the robot controller and control mode is used to command the robot system. As long as the robot controller is connected via network monitoring mode is always possible. To switch to control mode the robot controller must be in `automatic` or `manual` operating mode and safety state \\'normal\\' or \\'reduced\\'. If the robot controller is in `manual` operating mode, you have manually confirm the control usage activation on the robot control panel. This manual confirmation can\\'t be replaced with this API. Without manual confirmation the robot controller will stay in monitor mode.  The robot system will try to activate the required operation mode for the requested usage unless no active call requires a different mode.  > **NOTE** > > Some robot controllers prevent the external activation of automatic operating mode. In this case, changing the operating mode manually at the robot controller is mandatory.  > **NOTE** > > The current operation mode and safety state can be requested via [getCurrentRobotControllerState](getCurrentRobotControllerState).  If a mode change is not possible, the response lists reasons for the failed change.\n         * @summary Set Default Mode\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {SetDefaultModeModeEnum} mode\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        setDefaultMode(cell, controller, mode, options) {\n            return localVarFp.setDefaultMode(cell, controller, mode, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Sets the robot controller into freedrive mode and stays in freedrive until the websocket connection is closed by the client. In freedrive mode, it is possible to move the attached motion groups by hand. This is a blocking call. As long as the websocket connection is open, no other endpoint can control or move the robot. <!-- theme: danger --> > **DANGER** > Danger caused by robot. Improper assessment by the integrator of the application-specific hazards can result in people being crushed, > drawn in or caught due to the robot\\'s complex movement sequences. Before opening the websocket, ensure that > - The robot is in a safe state, > - The right payload is set (e.g by using the (getActivePayload)[getActivePayload] endpoint), > - No humans or object are within the robot\\'s reach or within the cell. As long as the websocket connection is open you will get the current state of the robot system in the response in the specified response_rate. If the activation failed, the returned status will return possible reasons for the failure. Free drive mode is only available for robot controllers that support it, in particular Collobarative Robots (\\\"Cobots\\\"). Use the (getSupportedModes)[getSupportedModes] endpoint to check if the robot controller supports free drive mode.\n         * @summary Stream Free Drive Mode\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {number} [responseRate]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        streamFreeDrive(cell, controller, responseRate, options) {\n            return localVarFp.streamFreeDrive(cell, controller, responseRate, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Receive updates of the current robot system mode of a robot controller via websocket upon robot system mode change. See [setDefaultMode](setDefaultMode) for more information about the different modes.\n         * @summary Stream Mode Change\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        streamModeChange(cell, controller, options) {\n            return localVarFp.streamModeChange(cell, controller, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Receive updates of the state of a robot controller.\n         * @summary Stream State of Device\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {number} [responseRate]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        streamRobotControllerState(cell, controller, responseRate, options) {\n            return localVarFp.streamRobotControllerState(cell, controller, responseRate, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Update the configuration of a robot controller.  Reconfigure certain options of a robot controller, or deploy a specific container image of a robot controller.  <!-- theme: warning --> > **WARNING** > > Using it in conjunction with the settings app may lead to unpredictable behavior.\n         * @summary Update Robot Controller Configuration\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {RobotController} robotController\n         * @param {number} [completionTimeout]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateRobotController(cell, controller, robotController, completionTimeout, options) {\n            return localVarFp.updateRobotController(cell, controller, robotController, completionTimeout, options).then((request) => request(axios, basePath));\n        },\n    };\n};\n/**\n * ControllerApi - object-oriented interface\n * @export\n * @class ControllerApi\n * @extends {BaseAPI}\n */\nexport class ControllerApi extends BaseAPI {\n    /**\n     * Add a robot controller to the cell.  <!-- theme: warning --> > **WARNING** > > Using it in conjunction with the settings app may lead to unpredictable behavior.\n     * @summary Add Robot Controller\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {RobotController} robotController\n     * @param {number} [completionTimeout]\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ControllerApi\n     */\n    addRobotController(cell, robotController, completionTimeout, options) {\n        return ControllerApiFp(this.configuration).addRobotController(cell, robotController, completionTimeout, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Delete all robot controllers from the cell.  To replace all robot controllers in a cell, use this endpoint in combination with the \\'Add Robot Controller\\' endpoint.  <!-- theme: warning --> > **WARNING** > > Using it in conjunction with the settings app may lead to unpredictable behavior.\n     * @summary Clear Robot Controllers\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {number} [completionTimeout]\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ControllerApi\n     */\n    clearRobotControllers(cell, completionTimeout, options) {\n        return ControllerApiFp(this.configuration).clearRobotControllers(cell, completionTimeout, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Delete a robot controller from the cell.  <!-- theme: warning --> > **WARNING** > > Using it in conjunction with the settings app may lead to unpredictable behavior.\n     * @summary Delete Robot Controller\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} controller Unique identifier to address a controller in the cell.\n     * @param {number} [completionTimeout]\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ControllerApi\n     */\n    deleteRobotController(cell, controller, completionTimeout, options) {\n        return ControllerApiFp(this.configuration).deleteRobotController(cell, controller, completionTimeout, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Get the current state of a robot controller.\n     * @summary State of Device\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} controller Unique identifier to address a controller in the cell.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ControllerApi\n     */\n    getCurrentRobotControllerState(cell, controller, options) {\n        return ControllerApiFp(this.configuration).getCurrentRobotControllerState(cell, controller, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Get the current robot system mode of a registered robot controller. The robot system mode indicates if a robot controller can be used. See [setDefaultMode](setDefaultMode) for more information about the different modes. The mode is influenced by the operating mode of the robot controller. The operating mode can be changed via [setDefaultMode](setDefaultMode). Request the current operating mode of the robot controller via [getCurrentRobotControllerState](getCurrentRobotControllerState).\n     * @summary Current Mode\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} controller Unique identifier to address a controller in the cell.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ControllerApi\n     */\n    getMode(cell, controller, options) {\n        return ControllerApiFp(this.configuration).getMode(cell, controller, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Get the configuration for a robot controller.\n     * @summary Robot Controller Configuration\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} controller Unique identifier to address a controller in the cell.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ControllerApi\n     */\n    getRobotController(cell, controller, options) {\n        return ControllerApiFp(this.configuration).getRobotController(cell, controller, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Lists supported operating modes. Usually cobots support free drive and control, industrial robots only support control.\n     * @summary Supported Motion Modes\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} controller Unique identifier to address a controller in the cell.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ControllerApi\n     */\n    getSupportedModes(cell, controller, options) {\n        return ControllerApiFp(this.configuration).getSupportedModes(cell, controller, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Receive the configuration for a virtual robot controller. Used to configure a virtual robot controller via [addRobotController](addRobotController).  > **NOTE** > > The output generated by this endpoint can be too large for the site to handle, and may produce an error or incorrect output. > Use `curl` in combination with `> output.json` to capture the output, or use an API client like Postman.\n     * @summary Virtual Robot Configuration\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} controller Unique identifier to address a controller in the cell.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ControllerApi\n     */\n    getVirtualRobotConfiguration(cell, controller, options) {\n        return ControllerApiFp(this.configuration).getVirtualRobotConfiguration(cell, controller, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * List all configured robot controllers.\n     * @summary List Robot Controllers\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ControllerApi\n     */\n    listControllers(cell, options) {\n        return ControllerApiFp(this.configuration).listControllers(cell, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Switch between monitor and control usage as default for a robot controller. Monitoring mode is used to read information from the robot controller and control mode is used to command the robot system. As long as the robot controller is connected via network monitoring mode is always possible. To switch to control mode the robot controller must be in `automatic` or `manual` operating mode and safety state \\'normal\\' or \\'reduced\\'. If the robot controller is in `manual` operating mode, you have manually confirm the control usage activation on the robot control panel. This manual confirmation can\\'t be replaced with this API. Without manual confirmation the robot controller will stay in monitor mode.  The robot system will try to activate the required operation mode for the requested usage unless no active call requires a different mode.  > **NOTE** > > Some robot controllers prevent the external activation of automatic operating mode. In this case, changing the operating mode manually at the robot controller is mandatory.  > **NOTE** > > The current operation mode and safety state can be requested via [getCurrentRobotControllerState](getCurrentRobotControllerState).  If a mode change is not possible, the response lists reasons for the failed change.\n     * @summary Set Default Mode\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} controller Unique identifier to address a controller in the cell.\n     * @param {SetDefaultModeModeEnum} mode\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ControllerApi\n     */\n    setDefaultMode(cell, controller, mode, options) {\n        return ControllerApiFp(this.configuration).setDefaultMode(cell, controller, mode, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Sets the robot controller into freedrive mode and stays in freedrive until the websocket connection is closed by the client. In freedrive mode, it is possible to move the attached motion groups by hand. This is a blocking call. As long as the websocket connection is open, no other endpoint can control or move the robot. <!-- theme: danger --> > **DANGER** > Danger caused by robot. Improper assessment by the integrator of the application-specific hazards can result in people being crushed, > drawn in or caught due to the robot\\'s complex movement sequences. Before opening the websocket, ensure that > - The robot is in a safe state, > - The right payload is set (e.g by using the (getActivePayload)[getActivePayload] endpoint), > - No humans or object are within the robot\\'s reach or within the cell. As long as the websocket connection is open you will get the current state of the robot system in the response in the specified response_rate. If the activation failed, the returned status will return possible reasons for the failure. Free drive mode is only available for robot controllers that support it, in particular Collobarative Robots (\\\"Cobots\\\"). Use the (getSupportedModes)[getSupportedModes] endpoint to check if the robot controller supports free drive mode.\n     * @summary Stream Free Drive Mode\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} controller Unique identifier to address a controller in the cell.\n     * @param {number} [responseRate]\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ControllerApi\n     */\n    streamFreeDrive(cell, controller, responseRate, options) {\n        return ControllerApiFp(this.configuration).streamFreeDrive(cell, controller, responseRate, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Receive updates of the current robot system mode of a robot controller via websocket upon robot system mode change. See [setDefaultMode](setDefaultMode) for more information about the different modes.\n     * @summary Stream Mode Change\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} controller Unique identifier to address a controller in the cell.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ControllerApi\n     */\n    streamModeChange(cell, controller, options) {\n        return ControllerApiFp(this.configuration).streamModeChange(cell, controller, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Receive updates of the state of a robot controller.\n     * @summary Stream State of Device\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} controller Unique identifier to address a controller in the cell.\n     * @param {number} [responseRate]\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ControllerApi\n     */\n    streamRobotControllerState(cell, controller, responseRate, options) {\n        return ControllerApiFp(this.configuration).streamRobotControllerState(cell, controller, responseRate, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Update the configuration of a robot controller.  Reconfigure certain options of a robot controller, or deploy a specific container image of a robot controller.  <!-- theme: warning --> > **WARNING** > > Using it in conjunction with the settings app may lead to unpredictable behavior.\n     * @summary Update Robot Controller Configuration\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} controller Unique identifier to address a controller in the cell.\n     * @param {RobotController} robotController\n     * @param {number} [completionTimeout]\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ControllerApi\n     */\n    updateRobotController(cell, controller, robotController, completionTimeout, options) {\n        return ControllerApiFp(this.configuration).updateRobotController(cell, controller, robotController, completionTimeout, options).then((request) => request(this.axios, this.basePath));\n    }\n}\n/**\n * @export\n */\nexport const SetDefaultModeModeEnum = {\n    ModeMonitor: 'MODE_MONITOR',\n    ModeControl: 'MODE_CONTROL'\n};\n/**\n * ControllerIOsApi - axios parameter creator\n * @export\n */\nexport const ControllerIOsApiAxiosParamCreator = function (configuration) {\n    return {\n        /**\n         * Lists the I/O descriptions of the robot controller. The I/O descriptions contain information such as the name of the I/O, the I/O type and the I/O unit. The set of available I/Os is defined by the robot controller. Each I/O has a unique identifier. If no identifiers are specified in the request, retrieve the full list of available I/Os in this endpoint.\n         * @summary List Descriptions\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {Array<string>} [ios]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listIODescriptions: async (cell, controller, ios, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('listIODescriptions', 'cell', cell);\n            // verify required parameter 'controller' is not null or undefined\n            assertParamExists('listIODescriptions', 'controller', controller);\n            const localVarPath = `/cells/{cell}/controllers/{controller}/ios/description`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"controller\"}}`, encodeURIComponent(String(controller)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (ios) {\n                localVarQueryParameter['ios'] = ios;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Retrieves the current values of I/Os. The identifiers of the I/Os must be provided in the request. Request all available I/O identifiers via [listIODescriptions](listIODescriptions).\n         * @summary Values\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {Array<string>} [ios]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listIOValues: async (cell, controller, ios, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('listIOValues', 'cell', cell);\n            // verify required parameter 'controller' is not null or undefined\n            assertParamExists('listIOValues', 'controller', controller);\n            const localVarPath = `/cells/{cell}/controllers/{controller}/ios/values`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"controller\"}}`, encodeURIComponent(String(controller)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (ios) {\n                localVarQueryParameter['ios'] = ios;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Set the values of outputs. All available I/O identifiers and possible value ranges can be requested via [listIODescriptions](listIODescriptions). The call will return once the values have been set on and accepted by the robot. This might take up to 200 milliseconds. > **NOTE** > > Do not call this endpoint while another request is still in progress. The second call will fail.\n         * @summary Set Values\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {Array<IOValue>} iOValue\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        setOutputValues: async (cell, controller, iOValue, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('setOutputValues', 'cell', cell);\n            // verify required parameter 'controller' is not null or undefined\n            assertParamExists('setOutputValues', 'controller', controller);\n            // verify required parameter 'iOValue' is not null or undefined\n            assertParamExists('setOutputValues', 'iOValue', iOValue);\n            const localVarPath = `/cells/{cell}/controllers/{controller}/ios/values`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"controller\"}}`, encodeURIComponent(String(controller)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            localVarRequestOptions.data = serializeDataIfNeeded(iOValue, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Continuously receive updates of I/O values via websocket. Updates are sent in the update rate of the controller.  > **NOTE** > > Do not request too many values simultaneously as the request is then likely to fail. The amount of values that can be streamed simultaneously depends on the specific robot controller.  > **NOTE** > > The inputs and outputs are sent in the update rate of the controller to prevent losing any values. Consider that this might lead to a high amount of data transmitted.\n         * @summary Stream Values\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {Array<string>} [ios]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        streamIOValues: async (cell, controller, ios, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('streamIOValues', 'cell', cell);\n            // verify required parameter 'controller' is not null or undefined\n            assertParamExists('streamIOValues', 'controller', controller);\n            const localVarPath = `/cells/{cell}/controllers/{controller}/ios/stream`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"controller\"}}`, encodeURIComponent(String(controller)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (ios) {\n                localVarQueryParameter['ios'] = ios;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Wait until an I/O reaches a certain value. This call returns as soon as the condition is met or the request fails. The comparison_type value is used to define how the current value of the I/O is compared with given value. Only set the value that corresponds to the value_type of the I/O, see (listIODescriptions)[listIODescriptions] for more information. Examples: If you want to wait until an analog input (\\\"AI_1\\\") is less than 10, you would set io to \\\"AI_1\\\" comparison_type to COMPARISON_LESS and only integer_value to 10. If you want to wait until an analog input (\\\"AI_2\\\") is greater than 5.0, you would set io to \\\"AI_2\\\" comparison_type to COMPARISON_GREATER and only floating_value to 5.0. If you want to wait until a digital input (\\\"DI_3\\\") is true, you would set io to \\\"DI_3\\\" comparison_type to COMPARISON_EQUAL and only boolean_value to true.\n         * @summary Wait For\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {string} io\n         * @param {WaitForIOEventComparisonTypeEnum} comparisonType\n         * @param {boolean} [booleanValue]\n         * @param {string} [integerValue]\n         * @param {number} [floatingValue]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        waitForIOEvent: async (cell, controller, io, comparisonType, booleanValue, integerValue, floatingValue, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('waitForIOEvent', 'cell', cell);\n            // verify required parameter 'controller' is not null or undefined\n            assertParamExists('waitForIOEvent', 'controller', controller);\n            // verify required parameter 'io' is not null or undefined\n            assertParamExists('waitForIOEvent', 'io', io);\n            // verify required parameter 'comparisonType' is not null or undefined\n            assertParamExists('waitForIOEvent', 'comparisonType', comparisonType);\n            const localVarPath = `/cells/{cell}/controllers/{controller}/ios/wait-for`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"controller\"}}`, encodeURIComponent(String(controller)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (io !== undefined) {\n                localVarQueryParameter['io'] = io;\n            }\n            if (comparisonType !== undefined) {\n                localVarQueryParameter['comparison_type'] = comparisonType;\n            }\n            if (booleanValue !== undefined) {\n                localVarQueryParameter['boolean_value'] = booleanValue;\n            }\n            if (integerValue !== undefined) {\n                localVarQueryParameter['integer_value'] = integerValue;\n            }\n            if (floatingValue !== undefined) {\n                localVarQueryParameter['floating_value'] = floatingValue;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n    };\n};\n/**\n * ControllerIOsApi - functional programming interface\n * @export\n */\nexport const ControllerIOsApiFp = function (configuration) {\n    const localVarAxiosParamCreator = ControllerIOsApiAxiosParamCreator(configuration);\n    return {\n        /**\n         * Lists the I/O descriptions of the robot controller. The I/O descriptions contain information such as the name of the I/O, the I/O type and the I/O unit. The set of available I/Os is defined by the robot controller. Each I/O has a unique identifier. If no identifiers are specified in the request, retrieve the full list of available I/Os in this endpoint.\n         * @summary List Descriptions\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {Array<string>} [ios]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async listIODescriptions(cell, controller, ios, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.listIODescriptions(cell, controller, ios, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['ControllerIOsApi.listIODescriptions']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Retrieves the current values of I/Os. The identifiers of the I/Os must be provided in the request. Request all available I/O identifiers via [listIODescriptions](listIODescriptions).\n         * @summary Values\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {Array<string>} [ios]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async listIOValues(cell, controller, ios, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.listIOValues(cell, controller, ios, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['ControllerIOsApi.listIOValues']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Set the values of outputs. All available I/O identifiers and possible value ranges can be requested via [listIODescriptions](listIODescriptions). The call will return once the values have been set on and accepted by the robot. This might take up to 200 milliseconds. > **NOTE** > > Do not call this endpoint while another request is still in progress. The second call will fail.\n         * @summary Set Values\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {Array<IOValue>} iOValue\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async setOutputValues(cell, controller, iOValue, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.setOutputValues(cell, controller, iOValue, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['ControllerIOsApi.setOutputValues']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Continuously receive updates of I/O values via websocket. Updates are sent in the update rate of the controller.  > **NOTE** > > Do not request too many values simultaneously as the request is then likely to fail. The amount of values that can be streamed simultaneously depends on the specific robot controller.  > **NOTE** > > The inputs and outputs are sent in the update rate of the controller to prevent losing any values. Consider that this might lead to a high amount of data transmitted.\n         * @summary Stream Values\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {Array<string>} [ios]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async streamIOValues(cell, controller, ios, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.streamIOValues(cell, controller, ios, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['ControllerIOsApi.streamIOValues']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Wait until an I/O reaches a certain value. This call returns as soon as the condition is met or the request fails. The comparison_type value is used to define how the current value of the I/O is compared with given value. Only set the value that corresponds to the value_type of the I/O, see (listIODescriptions)[listIODescriptions] for more information. Examples: If you want to wait until an analog input (\\\"AI_1\\\") is less than 10, you would set io to \\\"AI_1\\\" comparison_type to COMPARISON_LESS and only integer_value to 10. If you want to wait until an analog input (\\\"AI_2\\\") is greater than 5.0, you would set io to \\\"AI_2\\\" comparison_type to COMPARISON_GREATER and only floating_value to 5.0. If you want to wait until a digital input (\\\"DI_3\\\") is true, you would set io to \\\"DI_3\\\" comparison_type to COMPARISON_EQUAL and only boolean_value to true.\n         * @summary Wait For\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {string} io\n         * @param {WaitForIOEventComparisonTypeEnum} comparisonType\n         * @param {boolean} [booleanValue]\n         * @param {string} [integerValue]\n         * @param {number} [floatingValue]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async waitForIOEvent(cell, controller, io, comparisonType, booleanValue, integerValue, floatingValue, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.waitForIOEvent(cell, controller, io, comparisonType, booleanValue, integerValue, floatingValue, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['ControllerIOsApi.waitForIOEvent']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n    };\n};\n/**\n * ControllerIOsApi - factory interface\n * @export\n */\nexport const ControllerIOsApiFactory = function (configuration, basePath, axios) {\n    const localVarFp = ControllerIOsApiFp(configuration);\n    return {\n        /**\n         * Lists the I/O descriptions of the robot controller. The I/O descriptions contain information such as the name of the I/O, the I/O type and the I/O unit. The set of available I/Os is defined by the robot controller. Each I/O has a unique identifier. If no identifiers are specified in the request, retrieve the full list of available I/Os in this endpoint.\n         * @summary List Descriptions\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {Array<string>} [ios]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listIODescriptions(cell, controller, ios, options) {\n            return localVarFp.listIODescriptions(cell, controller, ios, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Retrieves the current values of I/Os. The identifiers of the I/Os must be provided in the request. Request all available I/O identifiers via [listIODescriptions](listIODescriptions).\n         * @summary Values\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {Array<string>} [ios]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listIOValues(cell, controller, ios, options) {\n            return localVarFp.listIOValues(cell, controller, ios, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Set the values of outputs. All available I/O identifiers and possible value ranges can be requested via [listIODescriptions](listIODescriptions). The call will return once the values have been set on and accepted by the robot. This might take up to 200 milliseconds. > **NOTE** > > Do not call this endpoint while another request is still in progress. The second call will fail.\n         * @summary Set Values\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {Array<IOValue>} iOValue\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        setOutputValues(cell, controller, iOValue, options) {\n            return localVarFp.setOutputValues(cell, controller, iOValue, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Continuously receive updates of I/O values via websocket. Updates are sent in the update rate of the controller.  > **NOTE** > > Do not request too many values simultaneously as the request is then likely to fail. The amount of values that can be streamed simultaneously depends on the specific robot controller.  > **NOTE** > > The inputs and outputs are sent in the update rate of the controller to prevent losing any values. Consider that this might lead to a high amount of data transmitted.\n         * @summary Stream Values\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {Array<string>} [ios]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        streamIOValues(cell, controller, ios, options) {\n            return localVarFp.streamIOValues(cell, controller, ios, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Wait until an I/O reaches a certain value. This call returns as soon as the condition is met or the request fails. The comparison_type value is used to define how the current value of the I/O is compared with given value. Only set the value that corresponds to the value_type of the I/O, see (listIODescriptions)[listIODescriptions] for more information. Examples: If you want to wait until an analog input (\\\"AI_1\\\") is less than 10, you would set io to \\\"AI_1\\\" comparison_type to COMPARISON_LESS and only integer_value to 10. If you want to wait until an analog input (\\\"AI_2\\\") is greater than 5.0, you would set io to \\\"AI_2\\\" comparison_type to COMPARISON_GREATER and only floating_value to 5.0. If you want to wait until a digital input (\\\"DI_3\\\") is true, you would set io to \\\"DI_3\\\" comparison_type to COMPARISON_EQUAL and only boolean_value to true.\n         * @summary Wait For\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {string} io\n         * @param {WaitForIOEventComparisonTypeEnum} comparisonType\n         * @param {boolean} [booleanValue]\n         * @param {string} [integerValue]\n         * @param {number} [floatingValue]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        waitForIOEvent(cell, controller, io, comparisonType, booleanValue, integerValue, floatingValue, options) {\n            return localVarFp.waitForIOEvent(cell, controller, io, comparisonType, booleanValue, integerValue, floatingValue, options).then((request) => request(axios, basePath));\n        },\n    };\n};\n/**\n * ControllerIOsApi - object-oriented interface\n * @export\n * @class ControllerIOsApi\n * @extends {BaseAPI}\n */\nexport class ControllerIOsApi extends BaseAPI {\n    /**\n     * Lists the I/O descriptions of the robot controller. The I/O descriptions contain information such as the name of the I/O, the I/O type and the I/O unit. The set of available I/Os is defined by the robot controller. Each I/O has a unique identifier. If no identifiers are specified in the request, retrieve the full list of available I/Os in this endpoint.\n     * @summary List Descriptions\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} controller Unique identifier to address a controller in the cell.\n     * @param {Array<string>} [ios]\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ControllerIOsApi\n     */\n    listIODescriptions(cell, controller, ios, options) {\n        return ControllerIOsApiFp(this.configuration).listIODescriptions(cell, controller, ios, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Retrieves the current values of I/Os. The identifiers of the I/Os must be provided in the request. Request all available I/O identifiers via [listIODescriptions](listIODescriptions).\n     * @summary Values\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} controller Unique identifier to address a controller in the cell.\n     * @param {Array<string>} [ios]\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ControllerIOsApi\n     */\n    listIOValues(cell, controller, ios, options) {\n        return ControllerIOsApiFp(this.configuration).listIOValues(cell, controller, ios, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Set the values of outputs. All available I/O identifiers and possible value ranges can be requested via [listIODescriptions](listIODescriptions). The call will return once the values have been set on and accepted by the robot. This might take up to 200 milliseconds. > **NOTE** > > Do not call this endpoint while another request is still in progress. The second call will fail.\n     * @summary Set Values\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} controller Unique identifier to address a controller in the cell.\n     * @param {Array<IOValue>} iOValue\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ControllerIOsApi\n     */\n    setOutputValues(cell, controller, iOValue, options) {\n        return ControllerIOsApiFp(this.configuration).setOutputValues(cell, controller, iOValue, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Continuously receive updates of I/O values via websocket. Updates are sent in the update rate of the controller.  > **NOTE** > > Do not request too many values simultaneously as the request is then likely to fail. The amount of values that can be streamed simultaneously depends on the specific robot controller.  > **NOTE** > > The inputs and outputs are sent in the update rate of the controller to prevent losing any values. Consider that this might lead to a high amount of data transmitted.\n     * @summary Stream Values\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} controller Unique identifier to address a controller in the cell.\n     * @param {Array<string>} [ios]\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ControllerIOsApi\n     */\n    streamIOValues(cell, controller, ios, options) {\n        return ControllerIOsApiFp(this.configuration).streamIOValues(cell, controller, ios, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Wait until an I/O reaches a certain value. This call returns as soon as the condition is met or the request fails. The comparison_type value is used to define how the current value of the I/O is compared with given value. Only set the value that corresponds to the value_type of the I/O, see (listIODescriptions)[listIODescriptions] for more information. Examples: If you want to wait until an analog input (\\\"AI_1\\\") is less than 10, you would set io to \\\"AI_1\\\" comparison_type to COMPARISON_LESS and only integer_value to 10. If you want to wait until an analog input (\\\"AI_2\\\") is greater than 5.0, you would set io to \\\"AI_2\\\" comparison_type to COMPARISON_GREATER and only floating_value to 5.0. If you want to wait until a digital input (\\\"DI_3\\\") is true, you would set io to \\\"DI_3\\\" comparison_type to COMPARISON_EQUAL and only boolean_value to true.\n     * @summary Wait For\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} controller Unique identifier to address a controller in the cell.\n     * @param {string} io\n     * @param {WaitForIOEventComparisonTypeEnum} comparisonType\n     * @param {boolean} [booleanValue]\n     * @param {string} [integerValue]\n     * @param {number} [floatingValue]\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ControllerIOsApi\n     */\n    waitForIOEvent(cell, controller, io, comparisonType, booleanValue, integerValue, floatingValue, options) {\n        return ControllerIOsApiFp(this.configuration).waitForIOEvent(cell, controller, io, comparisonType, booleanValue, integerValue, floatingValue, options).then((request) => request(this.axios, this.basePath));\n    }\n}\n/**\n * @export\n */\nexport const WaitForIOEventComparisonTypeEnum = {\n    ComparisonTypeEqual: 'COMPARISON_TYPE_EQUAL',\n    ComparisonTypeGreater: 'COMPARISON_TYPE_GREATER',\n    ComparisonTypeLess: 'COMPARISON_TYPE_LESS'\n};\n/**\n * CoordinateSystemsApi - axios parameter creator\n * @export\n */\nexport const CoordinateSystemsApiAxiosParamCreator = function (configuration) {\n    return {\n        /**\n         * Add a user coordinate system to the list of coordinate systems but not on a robot controller.  The coordinate system is defined by a name and an offset in another coordinate system referenced by the unique identifier of the reference coordinate system.  Will return the specification of the added coordinate systems which includes the unique identifier of the added coordinate system.  All available coordinate systems can be listed via the [listCoordinateSystems](listCoordinateSystems) endpoint.\n         * @summary Add\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {AddRequest} addRequest\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        addCoordinateSystem: async (cell, addRequest, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('addCoordinateSystem', 'cell', cell);\n            // verify required parameter 'addRequest' is not null or undefined\n            assertParamExists('addCoordinateSystem', 'addRequest', addRequest);\n            const localVarPath = `/cells/{cell}/coordinate-systems`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            localVarRequestOptions.data = serializeDataIfNeeded(addRequest, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Removes a user coordinate system specified by the given identifier.  > **NOTE** > > If the coordinate system has originally been configured on the robot controller, it will remain on the controller even after this endpoint has been executed successfully..  This will remove the user coordinate system from the list of user coordinate systems but keep all dependent coordinate systems which use the deleted coordinate system as reference. Coordinate systems on the robot controller are not affected by this operation. They can be removed via the robot control panel only and will be removed in NOVA when the controller is removed. On virtual controllers, use the [deleteVirtualRobotCoordinateSystem](deleteVirtualRobotCoordinateSystem) endpoint to remove coordinate systems from NOVA and the virtual controller.  All available coordinate systems can be listed via the [listCoordinateSystems](listCoordinateSystems) endpoint.\n         * @summary Delete\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} coordinateSystem Unique identifier addressing a coordinate system.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteCoordinateSystem: async (cell, coordinateSystem, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('deleteCoordinateSystem', 'cell', cell);\n            // verify required parameter 'coordinateSystem' is not null or undefined\n            assertParamExists('deleteCoordinateSystem', 'coordinateSystem', coordinateSystem);\n            const localVarPath = `/cells/{cell}/coordinate-systems/{coordinate-system}`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"coordinate-system\"}}`, encodeURIComponent(String(coordinateSystem)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Request a coordinate system specification for a given identifier.  Use parameter rotation_type to get the orientation part of the transformation offset of the coordinate system returned in the requested rotation angle type. If parameter rotation_type is not set, the orientation part of the transformation offset of the coordinate system is returned in the rotation angle type used on the robot controller. This can be useful for visualization purposes in the client application due to equivalent numbers with robot control panel visualization.  User coordinate systems can be configured on a robot controller during setup or added to the system via the [addCoordinateSystem](addCoordinateSystem) endpoint.  Updating the robot controller\\'s configuration either requires credentials or is not possible. With the endpoint [addCoordinateSystem](addCoordinateSystem) you can create a coordinate system without changing the robot controller\\'s configuration.\n         * @summary Description\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} coordinateSystem Unique identifier addressing a coordinate system.\n         * @param {RotationAngleTypes} [rotationType]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getCoordinateSystem: async (cell, coordinateSystem, rotationType, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('getCoordinateSystem', 'cell', cell);\n            // verify required parameter 'coordinateSystem' is not null or undefined\n            assertParamExists('getCoordinateSystem', 'coordinateSystem', coordinateSystem);\n            const localVarPath = `/cells/{cell}/coordinate-systems/{coordinate-system}`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"coordinate-system\"}}`, encodeURIComponent(String(coordinateSystem)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (rotationType !== undefined) {\n                localVarQueryParameter['rotation_type'] = rotationType;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Lists all specifications of coordinate systems from robot controllers and user coordinate systems added to the system via the [addCoordinateSystem](addCoordinateSystem) endpoint. Use parameter rotation_type to get the orientation part of the transformation offset of the coordinate system returned in the requested rotation angle type. If parameter rotation_type is not set, the orientation part of the transformation offset of the coordinate system is returned in the rotation angle type used on the robot controller. This can be useful for visualization purposes in the client application due to equivalent numbers with robot control panel visualization.  The coordinate systems from the robot controller are loaded when the motion group associated with the coordinate system is activated. With deactivation of the motion group, the associated coordinate systems are removed from NOVA. The unique identifier of the coordinate systems from the robot controllers are suffixed with \\\"On\\\" + the unique identifier of the robot controller.  Updating the robot controller\\'s configuration either requires credentials or is not possible. With the endpoint [addCoordinateSystem](addCoordinateSystem) you can create a coordinate system without changing the robot controller\\'s configuration.\n         * @summary List\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {RotationAngleTypes} [rotationType]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listCoordinateSystems: async (cell, rotationType, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('listCoordinateSystems', 'cell', cell);\n            const localVarPath = `/cells/{cell}/coordinate-systems`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (rotationType !== undefined) {\n                localVarQueryParameter['rotation_type'] = rotationType;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Transform a pose to another base.\n         * @summary Transform\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} coordinateSystem Unique identifier addressing a coordinate system.\n         * @param {Pose} pose\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        transformInCoordinateSystem: async (cell, coordinateSystem, pose, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('transformInCoordinateSystem', 'cell', cell);\n            // verify required parameter 'coordinateSystem' is not null or undefined\n            assertParamExists('transformInCoordinateSystem', 'coordinateSystem', coordinateSystem);\n            // verify required parameter 'pose' is not null or undefined\n            assertParamExists('transformInCoordinateSystem', 'pose', pose);\n            const localVarPath = `/cells/{cell}/coordinate-systems/{coordinate-system}/transform`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"coordinate-system\"}}`, encodeURIComponent(String(coordinateSystem)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            localVarRequestOptions.data = serializeDataIfNeeded(pose, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n    };\n};\n/**\n * CoordinateSystemsApi - functional programming interface\n * @export\n */\nexport const CoordinateSystemsApiFp = function (configuration) {\n    const localVarAxiosParamCreator = CoordinateSystemsApiAxiosParamCreator(configuration);\n    return {\n        /**\n         * Add a user coordinate system to the list of coordinate systems but not on a robot controller.  The coordinate system is defined by a name and an offset in another coordinate system referenced by the unique identifier of the reference coordinate system.  Will return the specification of the added coordinate systems which includes the unique identifier of the added coordinate system.  All available coordinate systems can be listed via the [listCoordinateSystems](listCoordinateSystems) endpoint.\n         * @summary Add\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {AddRequest} addRequest\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async addCoordinateSystem(cell, addRequest, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.addCoordinateSystem(cell, addRequest, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['CoordinateSystemsApi.addCoordinateSystem']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Removes a user coordinate system specified by the given identifier.  > **NOTE** > > If the coordinate system has originally been configured on the robot controller, it will remain on the controller even after this endpoint has been executed successfully..  This will remove the user coordinate system from the list of user coordinate systems but keep all dependent coordinate systems which use the deleted coordinate system as reference. Coordinate systems on the robot controller are not affected by this operation. They can be removed via the robot control panel only and will be removed in NOVA when the controller is removed. On virtual controllers, use the [deleteVirtualRobotCoordinateSystem](deleteVirtualRobotCoordinateSystem) endpoint to remove coordinate systems from NOVA and the virtual controller.  All available coordinate systems can be listed via the [listCoordinateSystems](listCoordinateSystems) endpoint.\n         * @summary Delete\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} coordinateSystem Unique identifier addressing a coordinate system.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async deleteCoordinateSystem(cell, coordinateSystem, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.deleteCoordinateSystem(cell, coordinateSystem, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['CoordinateSystemsApi.deleteCoordinateSystem']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Request a coordinate system specification for a given identifier.  Use parameter rotation_type to get the orientation part of the transformation offset of the coordinate system returned in the requested rotation angle type. If parameter rotation_type is not set, the orientation part of the transformation offset of the coordinate system is returned in the rotation angle type used on the robot controller. This can be useful for visualization purposes in the client application due to equivalent numbers with robot control panel visualization.  User coordinate systems can be configured on a robot controller during setup or added to the system via the [addCoordinateSystem](addCoordinateSystem) endpoint.  Updating the robot controller\\'s configuration either requires credentials or is not possible. With the endpoint [addCoordinateSystem](addCoordinateSystem) you can create a coordinate system without changing the robot controller\\'s configuration.\n         * @summary Description\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} coordinateSystem Unique identifier addressing a coordinate system.\n         * @param {RotationAngleTypes} [rotationType]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getCoordinateSystem(cell, coordinateSystem, rotationType, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getCoordinateSystem(cell, coordinateSystem, rotationType, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['CoordinateSystemsApi.getCoordinateSystem']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Lists all specifications of coordinate systems from robot controllers and user coordinate systems added to the system via the [addCoordinateSystem](addCoordinateSystem) endpoint. Use parameter rotation_type to get the orientation part of the transformation offset of the coordinate system returned in the requested rotation angle type. If parameter rotation_type is not set, the orientation part of the transformation offset of the coordinate system is returned in the rotation angle type used on the robot controller. This can be useful for visualization purposes in the client application due to equivalent numbers with robot control panel visualization.  The coordinate systems from the robot controller are loaded when the motion group associated with the coordinate system is activated. With deactivation of the motion group, the associated coordinate systems are removed from NOVA. The unique identifier of the coordinate systems from the robot controllers are suffixed with \\\"On\\\" + the unique identifier of the robot controller.  Updating the robot controller\\'s configuration either requires credentials or is not possible. With the endpoint [addCoordinateSystem](addCoordinateSystem) you can create a coordinate system without changing the robot controller\\'s configuration.\n         * @summary List\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {RotationAngleTypes} [rotationType]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async listCoordinateSystems(cell, rotationType, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.listCoordinateSystems(cell, rotationType, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['CoordinateSystemsApi.listCoordinateSystems']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Transform a pose to another base.\n         * @summary Transform\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} coordinateSystem Unique identifier addressing a coordinate system.\n         * @param {Pose} pose\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async transformInCoordinateSystem(cell, coordinateSystem, pose, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.transformInCoordinateSystem(cell, coordinateSystem, pose, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['CoordinateSystemsApi.transformInCoordinateSystem']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n    };\n};\n/**\n * CoordinateSystemsApi - factory interface\n * @export\n */\nexport const CoordinateSystemsApiFactory = function (configuration, basePath, axios) {\n    const localVarFp = CoordinateSystemsApiFp(configuration);\n    return {\n        /**\n         * Add a user coordinate system to the list of coordinate systems but not on a robot controller.  The coordinate system is defined by a name and an offset in another coordinate system referenced by the unique identifier of the reference coordinate system.  Will return the specification of the added coordinate systems which includes the unique identifier of the added coordinate system.  All available coordinate systems can be listed via the [listCoordinateSystems](listCoordinateSystems) endpoint.\n         * @summary Add\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {AddRequest} addRequest\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        addCoordinateSystem(cell, addRequest, options) {\n            return localVarFp.addCoordinateSystem(cell, addRequest, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Removes a user coordinate system specified by the given identifier.  > **NOTE** > > If the coordinate system has originally been configured on the robot controller, it will remain on the controller even after this endpoint has been executed successfully..  This will remove the user coordinate system from the list of user coordinate systems but keep all dependent coordinate systems which use the deleted coordinate system as reference. Coordinate systems on the robot controller are not affected by this operation. They can be removed via the robot control panel only and will be removed in NOVA when the controller is removed. On virtual controllers, use the [deleteVirtualRobotCoordinateSystem](deleteVirtualRobotCoordinateSystem) endpoint to remove coordinate systems from NOVA and the virtual controller.  All available coordinate systems can be listed via the [listCoordinateSystems](listCoordinateSystems) endpoint.\n         * @summary Delete\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} coordinateSystem Unique identifier addressing a coordinate system.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteCoordinateSystem(cell, coordinateSystem, options) {\n            return localVarFp.deleteCoordinateSystem(cell, coordinateSystem, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Request a coordinate system specification for a given identifier.  Use parameter rotation_type to get the orientation part of the transformation offset of the coordinate system returned in the requested rotation angle type. If parameter rotation_type is not set, the orientation part of the transformation offset of the coordinate system is returned in the rotation angle type used on the robot controller. This can be useful for visualization purposes in the client application due to equivalent numbers with robot control panel visualization.  User coordinate systems can be configured on a robot controller during setup or added to the system via the [addCoordinateSystem](addCoordinateSystem) endpoint.  Updating the robot controller\\'s configuration either requires credentials or is not possible. With the endpoint [addCoordinateSystem](addCoordinateSystem) you can create a coordinate system without changing the robot controller\\'s configuration.\n         * @summary Description\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} coordinateSystem Unique identifier addressing a coordinate system.\n         * @param {RotationAngleTypes} [rotationType]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getCoordinateSystem(cell, coordinateSystem, rotationType, options) {\n            return localVarFp.getCoordinateSystem(cell, coordinateSystem, rotationType, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Lists all specifications of coordinate systems from robot controllers and user coordinate systems added to the system via the [addCoordinateSystem](addCoordinateSystem) endpoint. Use parameter rotation_type to get the orientation part of the transformation offset of the coordinate system returned in the requested rotation angle type. If parameter rotation_type is not set, the orientation part of the transformation offset of the coordinate system is returned in the rotation angle type used on the robot controller. This can be useful for visualization purposes in the client application due to equivalent numbers with robot control panel visualization.  The coordinate systems from the robot controller are loaded when the motion group associated with the coordinate system is activated. With deactivation of the motion group, the associated coordinate systems are removed from NOVA. The unique identifier of the coordinate systems from the robot controllers are suffixed with \\\"On\\\" + the unique identifier of the robot controller.  Updating the robot controller\\'s configuration either requires credentials or is not possible. With the endpoint [addCoordinateSystem](addCoordinateSystem) you can create a coordinate system without changing the robot controller\\'s configuration.\n         * @summary List\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {RotationAngleTypes} [rotationType]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listCoordinateSystems(cell, rotationType, options) {\n            return localVarFp.listCoordinateSystems(cell, rotationType, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Transform a pose to another base.\n         * @summary Transform\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} coordinateSystem Unique identifier addressing a coordinate system.\n         * @param {Pose} pose\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        transformInCoordinateSystem(cell, coordinateSystem, pose, options) {\n            return localVarFp.transformInCoordinateSystem(cell, coordinateSystem, pose, options).then((request) => request(axios, basePath));\n        },\n    };\n};\n/**\n * CoordinateSystemsApi - object-oriented interface\n * @export\n * @class CoordinateSystemsApi\n * @extends {BaseAPI}\n */\nexport class CoordinateSystemsApi extends BaseAPI {\n    /**\n     * Add a user coordinate system to the list of coordinate systems but not on a robot controller.  The coordinate system is defined by a name and an offset in another coordinate system referenced by the unique identifier of the reference coordinate system.  Will return the specification of the added coordinate systems which includes the unique identifier of the added coordinate system.  All available coordinate systems can be listed via the [listCoordinateSystems](listCoordinateSystems) endpoint.\n     * @summary Add\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {AddRequest} addRequest\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof CoordinateSystemsApi\n     */\n    addCoordinateSystem(cell, addRequest, options) {\n        return CoordinateSystemsApiFp(this.configuration).addCoordinateSystem(cell, addRequest, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Removes a user coordinate system specified by the given identifier.  > **NOTE** > > If the coordinate system has originally been configured on the robot controller, it will remain on the controller even after this endpoint has been executed successfully..  This will remove the user coordinate system from the list of user coordinate systems but keep all dependent coordinate systems which use the deleted coordinate system as reference. Coordinate systems on the robot controller are not affected by this operation. They can be removed via the robot control panel only and will be removed in NOVA when the controller is removed. On virtual controllers, use the [deleteVirtualRobotCoordinateSystem](deleteVirtualRobotCoordinateSystem) endpoint to remove coordinate systems from NOVA and the virtual controller.  All available coordinate systems can be listed via the [listCoordinateSystems](listCoordinateSystems) endpoint.\n     * @summary Delete\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} coordinateSystem Unique identifier addressing a coordinate system.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof CoordinateSystemsApi\n     */\n    deleteCoordinateSystem(cell, coordinateSystem, options) {\n        return CoordinateSystemsApiFp(this.configuration).deleteCoordinateSystem(cell, coordinateSystem, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Request a coordinate system specification for a given identifier.  Use parameter rotation_type to get the orientation part of the transformation offset of the coordinate system returned in the requested rotation angle type. If parameter rotation_type is not set, the orientation part of the transformation offset of the coordinate system is returned in the rotation angle type used on the robot controller. This can be useful for visualization purposes in the client application due to equivalent numbers with robot control panel visualization.  User coordinate systems can be configured on a robot controller during setup or added to the system via the [addCoordinateSystem](addCoordinateSystem) endpoint.  Updating the robot controller\\'s configuration either requires credentials or is not possible. With the endpoint [addCoordinateSystem](addCoordinateSystem) you can create a coordinate system without changing the robot controller\\'s configuration.\n     * @summary Description\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} coordinateSystem Unique identifier addressing a coordinate system.\n     * @param {RotationAngleTypes} [rotationType]\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof CoordinateSystemsApi\n     */\n    getCoordinateSystem(cell, coordinateSystem, rotationType, options) {\n        return CoordinateSystemsApiFp(this.configuration).getCoordinateSystem(cell, coordinateSystem, rotationType, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Lists all specifications of coordinate systems from robot controllers and user coordinate systems added to the system via the [addCoordinateSystem](addCoordinateSystem) endpoint. Use parameter rotation_type to get the orientation part of the transformation offset of the coordinate system returned in the requested rotation angle type. If parameter rotation_type is not set, the orientation part of the transformation offset of the coordinate system is returned in the rotation angle type used on the robot controller. This can be useful for visualization purposes in the client application due to equivalent numbers with robot control panel visualization.  The coordinate systems from the robot controller are loaded when the motion group associated with the coordinate system is activated. With deactivation of the motion group, the associated coordinate systems are removed from NOVA. The unique identifier of the coordinate systems from the robot controllers are suffixed with \\\"On\\\" + the unique identifier of the robot controller.  Updating the robot controller\\'s configuration either requires credentials or is not possible. With the endpoint [addCoordinateSystem](addCoordinateSystem) you can create a coordinate system without changing the robot controller\\'s configuration.\n     * @summary List\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {RotationAngleTypes} [rotationType]\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof CoordinateSystemsApi\n     */\n    listCoordinateSystems(cell, rotationType, options) {\n        return CoordinateSystemsApiFp(this.configuration).listCoordinateSystems(cell, rotationType, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Transform a pose to another base.\n     * @summary Transform\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} coordinateSystem Unique identifier addressing a coordinate system.\n     * @param {Pose} pose\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof CoordinateSystemsApi\n     */\n    transformInCoordinateSystem(cell, coordinateSystem, pose, options) {\n        return CoordinateSystemsApiFp(this.configuration).transformInCoordinateSystem(cell, coordinateSystem, pose, options).then((request) => request(this.axios, this.basePath));\n    }\n}\n/**\n * DeviceConfigurationApi - axios parameter creator\n * @export\n */\nexport const DeviceConfigurationApiAxiosParamCreator = function (configuration) {\n    return {\n        /**\n         * Deprecated endpoint. Deletes **all** devices from the cell\n         * @summary Delete Devices\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @deprecated\n         * @throws {RequiredError}\n         */\n        clearDevices: async (cell, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('clearDevices', 'cell', cell);\n            const localVarPath = `/cells/{cell}/devices`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Deprecated endpoint.  Overwrite existing devices in an existing robot cell. The devices are added to the robot cell in the order they are specified in the request body.  Each device needs to have a unique identifier which is used to reference the device in Wandelscript.  Devices which can be configured in the cell:  - Robots - OPC UA devices  ## Parameters  - For more information about the available device configurations have a look at the **Schema** tab or in the  provided examples.\n         * @summary Create Devices\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {Array<CreateDeviceRequestInner>} createDeviceRequestInner\n         * @param {*} [options] Override http request option.\n         * @deprecated\n         * @throws {RequiredError}\n         */\n        createDevice: async (cell, createDeviceRequestInner, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('createDevice', 'cell', cell);\n            // verify required parameter 'createDeviceRequestInner' is not null or undefined\n            assertParamExists('createDevice', 'createDeviceRequestInner', createDeviceRequestInner);\n            const localVarPath = `/cells/{cell}/devices`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            localVarRequestOptions.data = serializeDataIfNeeded(createDeviceRequestInner, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Deprecated endpoint. Deletes a specific device from the cell.\n         * @summary Delete Device\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} identifier\n         * @param {*} [options] Override http request option.\n         * @deprecated\n         * @throws {RequiredError}\n         */\n        deleteDevice: async (cell, identifier, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('deleteDevice', 'cell', cell);\n            // verify required parameter 'identifier' is not null or undefined\n            assertParamExists('deleteDevice', 'identifier', identifier);\n            const localVarPath = `/cells/{cell}/devices/{identifier}`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"identifier\"}}`, encodeURIComponent(String(identifier)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Deprecated endpoint. Returns information about a device.\n         * @summary Device Information\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} identifier\n         * @param {*} [options] Override http request option.\n         * @deprecated\n         * @throws {RequiredError}\n         */\n        getDevice: async (cell, identifier, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('getDevice', 'cell', cell);\n            // verify required parameter 'identifier' is not null or undefined\n            assertParamExists('getDevice', 'identifier', identifier);\n            const localVarPath = `/cells/{cell}/devices/{identifier}`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"identifier\"}}`, encodeURIComponent(String(identifier)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Deprecated endpoint.  Lists all devices which are configured in the cell: - Robots - Databases - OPC UA devices\n         * @summary List All Devices\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @deprecated\n         * @throws {RequiredError}\n         */\n        listDevices: async (cell, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('listDevices', 'cell', cell);\n            const localVarPath = `/cells/{cell}/devices`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n    };\n};\n/**\n * DeviceConfigurationApi - functional programming interface\n * @export\n */\nexport const DeviceConfigurationApiFp = function (configuration) {\n    const localVarAxiosParamCreator = DeviceConfigurationApiAxiosParamCreator(configuration);\n    return {\n        /**\n         * Deprecated endpoint. Deletes **all** devices from the cell\n         * @summary Delete Devices\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @deprecated\n         * @throws {RequiredError}\n         */\n        async clearDevices(cell, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.clearDevices(cell, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['DeviceConfigurationApi.clearDevices']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Deprecated endpoint.  Overwrite existing devices in an existing robot cell. The devices are added to the robot cell in the order they are specified in the request body.  Each device needs to have a unique identifier which is used to reference the device in Wandelscript.  Devices which can be configured in the cell:  - Robots - OPC UA devices  ## Parameters  - For more information about the available device configurations have a look at the **Schema** tab or in the  provided examples.\n         * @summary Create Devices\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {Array<CreateDeviceRequestInner>} createDeviceRequestInner\n         * @param {*} [options] Override http request option.\n         * @deprecated\n         * @throws {RequiredError}\n         */\n        async createDevice(cell, createDeviceRequestInner, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.createDevice(cell, createDeviceRequestInner, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['DeviceConfigurationApi.createDevice']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Deprecated endpoint. Deletes a specific device from the cell.\n         * @summary Delete Device\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} identifier\n         * @param {*} [options] Override http request option.\n         * @deprecated\n         * @throws {RequiredError}\n         */\n        async deleteDevice(cell, identifier, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.deleteDevice(cell, identifier, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['DeviceConfigurationApi.deleteDevice']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Deprecated endpoint. Returns information about a device.\n         * @summary Device Information\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} identifier\n         * @param {*} [options] Override http request option.\n         * @deprecated\n         * @throws {RequiredError}\n         */\n        async getDevice(cell, identifier, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getDevice(cell, identifier, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['DeviceConfigurationApi.getDevice']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Deprecated endpoint.  Lists all devices which are configured in the cell: - Robots - Databases - OPC UA devices\n         * @summary List All Devices\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @deprecated\n         * @throws {RequiredError}\n         */\n        async listDevices(cell, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.listDevices(cell, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['DeviceConfigurationApi.listDevices']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n    };\n};\n/**\n * DeviceConfigurationApi - factory interface\n * @export\n */\nexport const DeviceConfigurationApiFactory = function (configuration, basePath, axios) {\n    const localVarFp = DeviceConfigurationApiFp(configuration);\n    return {\n        /**\n         * Deprecated endpoint. Deletes **all** devices from the cell\n         * @summary Delete Devices\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @deprecated\n         * @throws {RequiredError}\n         */\n        clearDevices(cell, options) {\n            return localVarFp.clearDevices(cell, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Deprecated endpoint.  Overwrite existing devices in an existing robot cell. The devices are added to the robot cell in the order they are specified in the request body.  Each device needs to have a unique identifier which is used to reference the device in Wandelscript.  Devices which can be configured in the cell:  - Robots - OPC UA devices  ## Parameters  - For more information about the available device configurations have a look at the **Schema** tab or in the  provided examples.\n         * @summary Create Devices\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {Array<CreateDeviceRequestInner>} createDeviceRequestInner\n         * @param {*} [options] Override http request option.\n         * @deprecated\n         * @throws {RequiredError}\n         */\n        createDevice(cell, createDeviceRequestInner, options) {\n            return localVarFp.createDevice(cell, createDeviceRequestInner, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Deprecated endpoint. Deletes a specific device from the cell.\n         * @summary Delete Device\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} identifier\n         * @param {*} [options] Override http request option.\n         * @deprecated\n         * @throws {RequiredError}\n         */\n        deleteDevice(cell, identifier, options) {\n            return localVarFp.deleteDevice(cell, identifier, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Deprecated endpoint. Returns information about a device.\n         * @summary Device Information\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} identifier\n         * @param {*} [options] Override http request option.\n         * @deprecated\n         * @throws {RequiredError}\n         */\n        getDevice(cell, identifier, options) {\n            return localVarFp.getDevice(cell, identifier, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Deprecated endpoint.  Lists all devices which are configured in the cell: - Robots - Databases - OPC UA devices\n         * @summary List All Devices\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @deprecated\n         * @throws {RequiredError}\n         */\n        listDevices(cell, options) {\n            return localVarFp.listDevices(cell, options).then((request) => request(axios, basePath));\n        },\n    };\n};\n/**\n * DeviceConfigurationApi - object-oriented interface\n * @export\n * @class DeviceConfigurationApi\n * @extends {BaseAPI}\n */\nexport class DeviceConfigurationApi extends BaseAPI {\n    /**\n     * Deprecated endpoint. Deletes **all** devices from the cell\n     * @summary Delete Devices\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {*} [options] Override http request option.\n     * @deprecated\n     * @throws {RequiredError}\n     * @memberof DeviceConfigurationApi\n     */\n    clearDevices(cell, options) {\n        return DeviceConfigurationApiFp(this.configuration).clearDevices(cell, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Deprecated endpoint.  Overwrite existing devices in an existing robot cell. The devices are added to the robot cell in the order they are specified in the request body.  Each device needs to have a unique identifier which is used to reference the device in Wandelscript.  Devices which can be configured in the cell:  - Robots - OPC UA devices  ## Parameters  - For more information about the available device configurations have a look at the **Schema** tab or in the  provided examples.\n     * @summary Create Devices\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {Array<CreateDeviceRequestInner>} createDeviceRequestInner\n     * @param {*} [options] Override http request option.\n     * @deprecated\n     * @throws {RequiredError}\n     * @memberof DeviceConfigurationApi\n     */\n    createDevice(cell, createDeviceRequestInner, options) {\n        return DeviceConfigurationApiFp(this.configuration).createDevice(cell, createDeviceRequestInner, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Deprecated endpoint. Deletes a specific device from the cell.\n     * @summary Delete Device\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} identifier\n     * @param {*} [options] Override http request option.\n     * @deprecated\n     * @throws {RequiredError}\n     * @memberof DeviceConfigurationApi\n     */\n    deleteDevice(cell, identifier, options) {\n        return DeviceConfigurationApiFp(this.configuration).deleteDevice(cell, identifier, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Deprecated endpoint. Returns information about a device.\n     * @summary Device Information\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} identifier\n     * @param {*} [options] Override http request option.\n     * @deprecated\n     * @throws {RequiredError}\n     * @memberof DeviceConfigurationApi\n     */\n    getDevice(cell, identifier, options) {\n        return DeviceConfigurationApiFp(this.configuration).getDevice(cell, identifier, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Deprecated endpoint.  Lists all devices which are configured in the cell: - Robots - Databases - OPC UA devices\n     * @summary List All Devices\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {*} [options] Override http request option.\n     * @deprecated\n     * @throws {RequiredError}\n     * @memberof DeviceConfigurationApi\n     */\n    listDevices(cell, options) {\n        return DeviceConfigurationApiFp(this.configuration).listDevices(cell, options).then((request) => request(this.axios, this.basePath));\n    }\n}\n/**\n * LibraryProgramApi - axios parameter creator\n * @export\n */\nexport const LibraryProgramApiAxiosParamCreator = function (configuration) {\n    return {\n        /**\n         * <!-- theme: danger --> > **Experimental**  Creates a new program. The corresponding metadata is created as well.  ## Examples  ``` move via p2p() to [0, 0, 0, 0, 0, 0] move frame(\\\"flange\\\") to [1, 2, 0] move via line() to [1, 1, 0] a := planned_pose() ```  ``` {% from \\'schneider_conveyor_v1.j2\\' import schneider_conveyor_library -%}  {{ schneider_conveyor_library() }}  def start_main():     conveyor_speed_percentage = {{ conveyor_speed_percentage | round(4) }}     conveyer_speed = conveyor_speed_percentage*1500     schneider_conveyor_start(conveyer_speed) end ```\n         * @summary Create Program\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} body\n         * @param {string} [name]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createProgram: async (cell, body, name, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('createProgram', 'cell', cell);\n            // verify required parameter 'body' is not null or undefined\n            assertParamExists('createProgram', 'body', body);\n            const localVarPath = `/cells/{cell}/store/programs`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (name !== undefined) {\n                localVarQueryParameter['name'] = name;\n            }\n            localVarHeaderParameter['Content-Type'] = 'text/plain';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            localVarRequestOptions.data = serializeDataIfNeeded(body, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Deletes the program with the corresponding metadata. This action is irreversible. Does not delete the associated recipes.\n         * @summary Delete Program\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} program Recieved from [listProgramMetadata](listProgramMetadata) or from the response of [createProgram](createProgram).\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteProgram: async (cell, program, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('deleteProgram', 'cell', cell);\n            // verify required parameter 'program' is not null or undefined\n            assertParamExists('deleteProgram', 'program', program);\n            const localVarPath = `/cells/{cell}/store/programs/{program}`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"program\"}}`, encodeURIComponent(String(program)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Deletes the provided list of programs with the corresponding metadata. This action is irreversible. Does not delete the associated recipes.\n         * @summary Delete Program List\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {Array<string>} programIds Recieved from [listProgramMetadata](listProgramMetadata) or from the response of [createProgram](createProgram).\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteProgramList: async (cell, programIds, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('deleteProgramList', 'cell', cell);\n            // verify required parameter 'programIds' is not null or undefined\n            assertParamExists('deleteProgramList', 'programIds', programIds);\n            const localVarPath = `/cells/{cell}/store/programs`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (programIds) {\n                localVarQueryParameter['program_ids'] = programIds;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Returns the content of the program. The identifier of the program is received upon creation or from the metadata list of all the programs.\n         * @summary Get Program\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} program Recieved from [listProgramMetadata](listProgramMetadata) or from the response of [createProgram](createProgram).\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getProgram: async (cell, program, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('getProgram', 'cell', cell);\n            // verify required parameter 'program' is not null or undefined\n            assertParamExists('getProgram', 'program', program);\n            const localVarPath = `/cells/{cell}/store/programs/{program}`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"program\"}}`, encodeURIComponent(String(program)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Updates the content of the program. The update overwrites the existing content. The metadata is updated in correspondence.  ## Examples  ``` move via p2p() to [0, 0, 0, 0, 0, 0]  move frame(\\\"flange\\\") to [1, 2, 0]  move via line() to [1, 1, 0]  a := planned_pose()  ```  ``` {% from \\'schneider_conveyor_v1.j2\\' import schneider_conveyor_library -%}  {{ schneider_conveyor_library() }}  def start_main():     conveyor_speed_percentage = {{ conveyor_speed_percentage | round(4) }}     conveyer_speed = conveyor_speed_percentage*1500     schneider_conveyor_start(conveyer_speed) end ```\n         * @summary Update Program\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} program Recieved from [listProgramMetadata](listProgramMetadata) or from the response of [createProgram](createProgram).\n         * @param {string} body\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateProgram: async (cell, program, body, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('updateProgram', 'cell', cell);\n            // verify required parameter 'program' is not null or undefined\n            assertParamExists('updateProgram', 'program', program);\n            // verify required parameter 'body' is not null or undefined\n            assertParamExists('updateProgram', 'body', body);\n            const localVarPath = `/cells/{cell}/store/programs/{program}`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"program\"}}`, encodeURIComponent(String(program)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'text/plain';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            localVarRequestOptions.data = serializeDataIfNeeded(body, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n    };\n};\n/**\n * LibraryProgramApi - functional programming interface\n * @export\n */\nexport const LibraryProgramApiFp = function (configuration) {\n    const localVarAxiosParamCreator = LibraryProgramApiAxiosParamCreator(configuration);\n    return {\n        /**\n         * <!-- theme: danger --> > **Experimental**  Creates a new program. The corresponding metadata is created as well.  ## Examples  ``` move via p2p() to [0, 0, 0, 0, 0, 0] move frame(\\\"flange\\\") to [1, 2, 0] move via line() to [1, 1, 0] a := planned_pose() ```  ``` {% from \\'schneider_conveyor_v1.j2\\' import schneider_conveyor_library -%}  {{ schneider_conveyor_library() }}  def start_main():     conveyor_speed_percentage = {{ conveyor_speed_percentage | round(4) }}     conveyer_speed = conveyor_speed_percentage*1500     schneider_conveyor_start(conveyer_speed) end ```\n         * @summary Create Program\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} body\n         * @param {string} [name]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async createProgram(cell, body, name, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.createProgram(cell, body, name, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['LibraryProgramApi.createProgram']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Deletes the program with the corresponding metadata. This action is irreversible. Does not delete the associated recipes.\n         * @summary Delete Program\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} program Recieved from [listProgramMetadata](listProgramMetadata) or from the response of [createProgram](createProgram).\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async deleteProgram(cell, program, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.deleteProgram(cell, program, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['LibraryProgramApi.deleteProgram']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Deletes the provided list of programs with the corresponding metadata. This action is irreversible. Does not delete the associated recipes.\n         * @summary Delete Program List\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {Array<string>} programIds Recieved from [listProgramMetadata](listProgramMetadata) or from the response of [createProgram](createProgram).\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async deleteProgramList(cell, programIds, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.deleteProgramList(cell, programIds, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['LibraryProgramApi.deleteProgramList']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Returns the content of the program. The identifier of the program is received upon creation or from the metadata list of all the programs.\n         * @summary Get Program\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} program Recieved from [listProgramMetadata](listProgramMetadata) or from the response of [createProgram](createProgram).\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getProgram(cell, program, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getProgram(cell, program, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['LibraryProgramApi.getProgram']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Updates the content of the program. The update overwrites the existing content. The metadata is updated in correspondence.  ## Examples  ``` move via p2p() to [0, 0, 0, 0, 0, 0]  move frame(\\\"flange\\\") to [1, 2, 0]  move via line() to [1, 1, 0]  a := planned_pose()  ```  ``` {% from \\'schneider_conveyor_v1.j2\\' import schneider_conveyor_library -%}  {{ schneider_conveyor_library() }}  def start_main():     conveyor_speed_percentage = {{ conveyor_speed_percentage | round(4) }}     conveyer_speed = conveyor_speed_percentage*1500     schneider_conveyor_start(conveyer_speed) end ```\n         * @summary Update Program\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} program Recieved from [listProgramMetadata](listProgramMetadata) or from the response of [createProgram](createProgram).\n         * @param {string} body\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async updateProgram(cell, program, body, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.updateProgram(cell, program, body, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['LibraryProgramApi.updateProgram']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n    };\n};\n/**\n * LibraryProgramApi - factory interface\n * @export\n */\nexport const LibraryProgramApiFactory = function (configuration, basePath, axios) {\n    const localVarFp = LibraryProgramApiFp(configuration);\n    return {\n        /**\n         * <!-- theme: danger --> > **Experimental**  Creates a new program. The corresponding metadata is created as well.  ## Examples  ``` move via p2p() to [0, 0, 0, 0, 0, 0] move frame(\\\"flange\\\") to [1, 2, 0] move via line() to [1, 1, 0] a := planned_pose() ```  ``` {% from \\'schneider_conveyor_v1.j2\\' import schneider_conveyor_library -%}  {{ schneider_conveyor_library() }}  def start_main():     conveyor_speed_percentage = {{ conveyor_speed_percentage | round(4) }}     conveyer_speed = conveyor_speed_percentage*1500     schneider_conveyor_start(conveyer_speed) end ```\n         * @summary Create Program\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} body\n         * @param {string} [name]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createProgram(cell, body, name, options) {\n            return localVarFp.createProgram(cell, body, name, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Deletes the program with the corresponding metadata. This action is irreversible. Does not delete the associated recipes.\n         * @summary Delete Program\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} program Recieved from [listProgramMetadata](listProgramMetadata) or from the response of [createProgram](createProgram).\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteProgram(cell, program, options) {\n            return localVarFp.deleteProgram(cell, program, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Deletes the provided list of programs with the corresponding metadata. This action is irreversible. Does not delete the associated recipes.\n         * @summary Delete Program List\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {Array<string>} programIds Recieved from [listProgramMetadata](listProgramMetadata) or from the response of [createProgram](createProgram).\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteProgramList(cell, programIds, options) {\n            return localVarFp.deleteProgramList(cell, programIds, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Returns the content of the program. The identifier of the program is received upon creation or from the metadata list of all the programs.\n         * @summary Get Program\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} program Recieved from [listProgramMetadata](listProgramMetadata) or from the response of [createProgram](createProgram).\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getProgram(cell, program, options) {\n            return localVarFp.getProgram(cell, program, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Updates the content of the program. The update overwrites the existing content. The metadata is updated in correspondence.  ## Examples  ``` move via p2p() to [0, 0, 0, 0, 0, 0]  move frame(\\\"flange\\\") to [1, 2, 0]  move via line() to [1, 1, 0]  a := planned_pose()  ```  ``` {% from \\'schneider_conveyor_v1.j2\\' import schneider_conveyor_library -%}  {{ schneider_conveyor_library() }}  def start_main():     conveyor_speed_percentage = {{ conveyor_speed_percentage | round(4) }}     conveyer_speed = conveyor_speed_percentage*1500     schneider_conveyor_start(conveyer_speed) end ```\n         * @summary Update Program\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} program Recieved from [listProgramMetadata](listProgramMetadata) or from the response of [createProgram](createProgram).\n         * @param {string} body\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateProgram(cell, program, body, options) {\n            return localVarFp.updateProgram(cell, program, body, options).then((request) => request(axios, basePath));\n        },\n    };\n};\n/**\n * LibraryProgramApi - object-oriented interface\n * @export\n * @class LibraryProgramApi\n * @extends {BaseAPI}\n */\nexport class LibraryProgramApi extends BaseAPI {\n    /**\n     * <!-- theme: danger --> > **Experimental**  Creates a new program. The corresponding metadata is created as well.  ## Examples  ``` move via p2p() to [0, 0, 0, 0, 0, 0] move frame(\\\"flange\\\") to [1, 2, 0] move via line() to [1, 1, 0] a := planned_pose() ```  ``` {% from \\'schneider_conveyor_v1.j2\\' import schneider_conveyor_library -%}  {{ schneider_conveyor_library() }}  def start_main():     conveyor_speed_percentage = {{ conveyor_speed_percentage | round(4) }}     conveyer_speed = conveyor_speed_percentage*1500     schneider_conveyor_start(conveyer_speed) end ```\n     * @summary Create Program\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} body\n     * @param {string} [name]\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof LibraryProgramApi\n     */\n    createProgram(cell, body, name, options) {\n        return LibraryProgramApiFp(this.configuration).createProgram(cell, body, name, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * <!-- theme: danger --> > **Experimental** Deletes the program with the corresponding metadata. This action is irreversible. Does not delete the associated recipes.\n     * @summary Delete Program\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} program Recieved from [listProgramMetadata](listProgramMetadata) or from the response of [createProgram](createProgram).\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof LibraryProgramApi\n     */\n    deleteProgram(cell, program, options) {\n        return LibraryProgramApiFp(this.configuration).deleteProgram(cell, program, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * <!-- theme: danger --> > **Experimental** Deletes the provided list of programs with the corresponding metadata. This action is irreversible. Does not delete the associated recipes.\n     * @summary Delete Program List\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {Array<string>} programIds Recieved from [listProgramMetadata](listProgramMetadata) or from the response of [createProgram](createProgram).\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof LibraryProgramApi\n     */\n    deleteProgramList(cell, programIds, options) {\n        return LibraryProgramApiFp(this.configuration).deleteProgramList(cell, programIds, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * <!-- theme: danger --> > **Experimental** Returns the content of the program. The identifier of the program is received upon creation or from the metadata list of all the programs.\n     * @summary Get Program\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} program Recieved from [listProgramMetadata](listProgramMetadata) or from the response of [createProgram](createProgram).\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof LibraryProgramApi\n     */\n    getProgram(cell, program, options) {\n        return LibraryProgramApiFp(this.configuration).getProgram(cell, program, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * <!-- theme: danger --> > **Experimental** Updates the content of the program. The update overwrites the existing content. The metadata is updated in correspondence.  ## Examples  ``` move via p2p() to [0, 0, 0, 0, 0, 0]  move frame(\\\"flange\\\") to [1, 2, 0]  move via line() to [1, 1, 0]  a := planned_pose()  ```  ``` {% from \\'schneider_conveyor_v1.j2\\' import schneider_conveyor_library -%}  {{ schneider_conveyor_library() }}  def start_main():     conveyor_speed_percentage = {{ conveyor_speed_percentage | round(4) }}     conveyer_speed = conveyor_speed_percentage*1500     schneider_conveyor_start(conveyer_speed) end ```\n     * @summary Update Program\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} program Recieved from [listProgramMetadata](listProgramMetadata) or from the response of [createProgram](createProgram).\n     * @param {string} body\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof LibraryProgramApi\n     */\n    updateProgram(cell, program, body, options) {\n        return LibraryProgramApiFp(this.configuration).updateProgram(cell, program, body, options).then((request) => request(this.axios, this.basePath));\n    }\n}\n/**\n * LibraryProgramMetadataApi - axios parameter creator\n * @export\n */\nexport const LibraryProgramMetadataApiAxiosParamCreator = function (configuration) {\n    return {\n        /**\n         * <!-- theme: danger --> > **Experimental** Returns metadata of the corresponding program.\n         * @summary Get Program Metadata\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} program Recieved from [listProgramMetadata](listProgramMetadata) or from the response of [createProgram](createProgram).\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getProgramMetadata: async (cell, program, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('getProgramMetadata', 'cell', cell);\n            // verify required parameter 'program' is not null or undefined\n            assertParamExists('getProgramMetadata', 'program', program);\n            const localVarPath = `/cells/{cell}/store/programs/{program}/metadata`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"program\"}}`, encodeURIComponent(String(program)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Returns a list of all the stored programs, represented by their metadata.\n         * @summary List Program Metadata\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {boolean} [showHidden] If true, hidden programs, where the &#x60;is_hidden&#x60; flag is active, are included in the list.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listProgramMetadata: async (cell, showHidden, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('listProgramMetadata', 'cell', cell);\n            const localVarPath = `/cells/{cell}/store/programs`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (showHidden !== undefined) {\n                localVarQueryParameter['show_hidden'] = showHidden;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Updates the metadata of the corresponding program. The update is partial, only the set fields get updated.\n         * @summary Update Program Metadata\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} program Recieved from [listProgramMetadata](listProgramMetadata) or from the response of [createProgram](createProgram).\n         * @param {UpdateProgramMetadataRequest} updateProgramMetadataRequest\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateProgramMetadata: async (cell, program, updateProgramMetadataRequest, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('updateProgramMetadata', 'cell', cell);\n            // verify required parameter 'program' is not null or undefined\n            assertParamExists('updateProgramMetadata', 'program', program);\n            // verify required parameter 'updateProgramMetadataRequest' is not null or undefined\n            assertParamExists('updateProgramMetadata', 'updateProgramMetadataRequest', updateProgramMetadataRequest);\n            const localVarPath = `/cells/{cell}/store/programs/{program}/metadata`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"program\"}}`, encodeURIComponent(String(program)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            localVarRequestOptions.data = serializeDataIfNeeded(updateProgramMetadataRequest, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Uploads an image for the corresponding program. The image is served as a static file. The path to the image is stored in the metadata.\n         * @summary Upload Program Metadata Image\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} program Recieved from [listProgramMetadata](listProgramMetadata) or from the response of [createProgram](createProgram).\n         * @param {File} file\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        uploadProgramMetadataImage: async (cell, program, file, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('uploadProgramMetadataImage', 'cell', cell);\n            // verify required parameter 'program' is not null or undefined\n            assertParamExists('uploadProgramMetadataImage', 'program', program);\n            // verify required parameter 'file' is not null or undefined\n            assertParamExists('uploadProgramMetadataImage', 'file', file);\n            const localVarPath = `/cells/{cell}/store/programs/{program}/metadata/image`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"program\"}}`, encodeURIComponent(String(program)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            const localVarFormParams = new ((configuration && configuration.formDataCtor) || FormData)();\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (file !== undefined) {\n                localVarFormParams.append('file', file);\n            }\n            localVarHeaderParameter['Content-Type'] = 'multipart/form-data';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            localVarRequestOptions.data = localVarFormParams;\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n    };\n};\n/**\n * LibraryProgramMetadataApi - functional programming interface\n * @export\n */\nexport const LibraryProgramMetadataApiFp = function (configuration) {\n    const localVarAxiosParamCreator = LibraryProgramMetadataApiAxiosParamCreator(configuration);\n    return {\n        /**\n         * <!-- theme: danger --> > **Experimental** Returns metadata of the corresponding program.\n         * @summary Get Program Metadata\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} program Recieved from [listProgramMetadata](listProgramMetadata) or from the response of [createProgram](createProgram).\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getProgramMetadata(cell, program, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getProgramMetadata(cell, program, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['LibraryProgramMetadataApi.getProgramMetadata']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Returns a list of all the stored programs, represented by their metadata.\n         * @summary List Program Metadata\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {boolean} [showHidden] If true, hidden programs, where the &#x60;is_hidden&#x60; flag is active, are included in the list.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async listProgramMetadata(cell, showHidden, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.listProgramMetadata(cell, showHidden, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['LibraryProgramMetadataApi.listProgramMetadata']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Updates the metadata of the corresponding program. The update is partial, only the set fields get updated.\n         * @summary Update Program Metadata\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} program Recieved from [listProgramMetadata](listProgramMetadata) or from the response of [createProgram](createProgram).\n         * @param {UpdateProgramMetadataRequest} updateProgramMetadataRequest\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async updateProgramMetadata(cell, program, updateProgramMetadataRequest, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.updateProgramMetadata(cell, program, updateProgramMetadataRequest, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['LibraryProgramMetadataApi.updateProgramMetadata']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Uploads an image for the corresponding program. The image is served as a static file. The path to the image is stored in the metadata.\n         * @summary Upload Program Metadata Image\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} program Recieved from [listProgramMetadata](listProgramMetadata) or from the response of [createProgram](createProgram).\n         * @param {File} file\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async uploadProgramMetadataImage(cell, program, file, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.uploadProgramMetadataImage(cell, program, file, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['LibraryProgramMetadataApi.uploadProgramMetadataImage']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n    };\n};\n/**\n * LibraryProgramMetadataApi - factory interface\n * @export\n */\nexport const LibraryProgramMetadataApiFactory = function (configuration, basePath, axios) {\n    const localVarFp = LibraryProgramMetadataApiFp(configuration);\n    return {\n        /**\n         * <!-- theme: danger --> > **Experimental** Returns metadata of the corresponding program.\n         * @summary Get Program Metadata\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} program Recieved from [listProgramMetadata](listProgramMetadata) or from the response of [createProgram](createProgram).\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getProgramMetadata(cell, program, options) {\n            return localVarFp.getProgramMetadata(cell, program, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Returns a list of all the stored programs, represented by their metadata.\n         * @summary List Program Metadata\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {boolean} [showHidden] If true, hidden programs, where the &#x60;is_hidden&#x60; flag is active, are included in the list.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listProgramMetadata(cell, showHidden, options) {\n            return localVarFp.listProgramMetadata(cell, showHidden, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Updates the metadata of the corresponding program. The update is partial, only the set fields get updated.\n         * @summary Update Program Metadata\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} program Recieved from [listProgramMetadata](listProgramMetadata) or from the response of [createProgram](createProgram).\n         * @param {UpdateProgramMetadataRequest} updateProgramMetadataRequest\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateProgramMetadata(cell, program, updateProgramMetadataRequest, options) {\n            return localVarFp.updateProgramMetadata(cell, program, updateProgramMetadataRequest, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Uploads an image for the corresponding program. The image is served as a static file. The path to the image is stored in the metadata.\n         * @summary Upload Program Metadata Image\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} program Recieved from [listProgramMetadata](listProgramMetadata) or from the response of [createProgram](createProgram).\n         * @param {File} file\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        uploadProgramMetadataImage(cell, program, file, options) {\n            return localVarFp.uploadProgramMetadataImage(cell, program, file, options).then((request) => request(axios, basePath));\n        },\n    };\n};\n/**\n * LibraryProgramMetadataApi - object-oriented interface\n * @export\n * @class LibraryProgramMetadataApi\n * @extends {BaseAPI}\n */\nexport class LibraryProgramMetadataApi extends BaseAPI {\n    /**\n     * <!-- theme: danger --> > **Experimental** Returns metadata of the corresponding program.\n     * @summary Get Program Metadata\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} program Recieved from [listProgramMetadata](listProgramMetadata) or from the response of [createProgram](createProgram).\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof LibraryProgramMetadataApi\n     */\n    getProgramMetadata(cell, program, options) {\n        return LibraryProgramMetadataApiFp(this.configuration).getProgramMetadata(cell, program, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * <!-- theme: danger --> > **Experimental** Returns a list of all the stored programs, represented by their metadata.\n     * @summary List Program Metadata\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {boolean} [showHidden] If true, hidden programs, where the &#x60;is_hidden&#x60; flag is active, are included in the list.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof LibraryProgramMetadataApi\n     */\n    listProgramMetadata(cell, showHidden, options) {\n        return LibraryProgramMetadataApiFp(this.configuration).listProgramMetadata(cell, showHidden, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * <!-- theme: danger --> > **Experimental** Updates the metadata of the corresponding program. The update is partial, only the set fields get updated.\n     * @summary Update Program Metadata\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} program Recieved from [listProgramMetadata](listProgramMetadata) or from the response of [createProgram](createProgram).\n     * @param {UpdateProgramMetadataRequest} updateProgramMetadataRequest\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof LibraryProgramMetadataApi\n     */\n    updateProgramMetadata(cell, program, updateProgramMetadataRequest, options) {\n        return LibraryProgramMetadataApiFp(this.configuration).updateProgramMetadata(cell, program, updateProgramMetadataRequest, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * <!-- theme: danger --> > **Experimental** Uploads an image for the corresponding program. The image is served as a static file. The path to the image is stored in the metadata.\n     * @summary Upload Program Metadata Image\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} program Recieved from [listProgramMetadata](listProgramMetadata) or from the response of [createProgram](createProgram).\n     * @param {File} file\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof LibraryProgramMetadataApi\n     */\n    uploadProgramMetadataImage(cell, program, file, options) {\n        return LibraryProgramMetadataApiFp(this.configuration).uploadProgramMetadataImage(cell, program, file, options).then((request) => request(this.axios, this.basePath));\n    }\n}\n/**\n * LibraryRecipeApi - axios parameter creator\n * @export\n */\nexport const LibraryRecipeApiAxiosParamCreator = function (configuration) {\n    return {\n        /**\n         * <!-- theme: danger --> > **Experimental** Creates a new recipe. The corresponding metadata is created as well.\n         * @summary Create Recipe\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} programId The identifier of the program the recipe will be associated with.\n         * @param {object} body\n         * @param {string} [name] If no inital name is set a default name based on the program and timestamp is created.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createRecipe: async (cell, programId, body, name, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('createRecipe', 'cell', cell);\n            // verify required parameter 'programId' is not null or undefined\n            assertParamExists('createRecipe', 'programId', programId);\n            // verify required parameter 'body' is not null or undefined\n            assertParamExists('createRecipe', 'body', body);\n            const localVarPath = `/cells/{cell}/store/recipes`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (programId !== undefined) {\n                localVarQueryParameter['program_id'] = programId;\n            }\n            if (name !== undefined) {\n                localVarQueryParameter['name'] = name;\n            }\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            localVarRequestOptions.data = serializeDataIfNeeded(body, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * # EXPERIMENTAL  > **Note:** This endpoint is experimental and might experience functional changes in the future.  Deletes a recipe. This action is irreversible.\n         * @summary Delete Recipe\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} recipe Recieved from [listRecipeMetadata](listRecipeMetadata) or from the response of [createRecipe](createRecipe).\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteRecipe: async (cell, recipe, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('deleteRecipe', 'cell', cell);\n            // verify required parameter 'recipe' is not null or undefined\n            assertParamExists('deleteRecipe', 'recipe', recipe);\n            const localVarPath = `/cells/{cell}/store/recipes/{recipe}`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"recipe\"}}`, encodeURIComponent(String(recipe)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Deletes the provided list of recipes. This action is irreversible.\n         * @summary Delete Recipe List\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {Array<string>} recipeIds Recieved from [listRecipeMetadata](listRecipeMetadata) or from the response of [createRecipe](createRecipe)\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteRecipeList: async (cell, recipeIds, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('deleteRecipeList', 'cell', cell);\n            // verify required parameter 'recipeIds' is not null or undefined\n            assertParamExists('deleteRecipeList', 'recipeIds', recipeIds);\n            const localVarPath = `/cells/{cell}/store/recipes`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (recipeIds) {\n                localVarQueryParameter['recipe_ids'] = recipeIds;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Returns the content of a recipe. The identifier of the recipe is recieved on creation or from the metadata list of all the recipes.\n         * @summary Get Recipe\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} recipe Recieved from [listRecipeMetadata](listRecipeMetadata) or from the response of [createRecipe](createRecipe).\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getRecipe: async (cell, recipe, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('getRecipe', 'cell', cell);\n            // verify required parameter 'recipe' is not null or undefined\n            assertParamExists('getRecipe', 'recipe', recipe);\n            const localVarPath = `/cells/{cell}/store/recipes/{recipe}`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"recipe\"}}`, encodeURIComponent(String(recipe)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Updates an existing recipe. The update is partial, only the set fields get updated.\n         * @summary Update Recipe\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} recipe Recieved from [listRecipeMetadata](listRecipeMetadata) or from the response of [createRecipe](createRecipe).\n         * @param {object} body\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateRecipe: async (cell, recipe, body, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('updateRecipe', 'cell', cell);\n            // verify required parameter 'recipe' is not null or undefined\n            assertParamExists('updateRecipe', 'recipe', recipe);\n            // verify required parameter 'body' is not null or undefined\n            assertParamExists('updateRecipe', 'body', body);\n            const localVarPath = `/cells/{cell}/store/recipes/{recipe}`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"recipe\"}}`, encodeURIComponent(String(recipe)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            localVarRequestOptions.data = serializeDataIfNeeded(body, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n    };\n};\n/**\n * LibraryRecipeApi - functional programming interface\n * @export\n */\nexport const LibraryRecipeApiFp = function (configuration) {\n    const localVarAxiosParamCreator = LibraryRecipeApiAxiosParamCreator(configuration);\n    return {\n        /**\n         * <!-- theme: danger --> > **Experimental** Creates a new recipe. The corresponding metadata is created as well.\n         * @summary Create Recipe\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} programId The identifier of the program the recipe will be associated with.\n         * @param {object} body\n         * @param {string} [name] If no inital name is set a default name based on the program and timestamp is created.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async createRecipe(cell, programId, body, name, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.createRecipe(cell, programId, body, name, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['LibraryRecipeApi.createRecipe']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * # EXPERIMENTAL  > **Note:** This endpoint is experimental and might experience functional changes in the future.  Deletes a recipe. This action is irreversible.\n         * @summary Delete Recipe\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} recipe Recieved from [listRecipeMetadata](listRecipeMetadata) or from the response of [createRecipe](createRecipe).\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async deleteRecipe(cell, recipe, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.deleteRecipe(cell, recipe, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['LibraryRecipeApi.deleteRecipe']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Deletes the provided list of recipes. This action is irreversible.\n         * @summary Delete Recipe List\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {Array<string>} recipeIds Recieved from [listRecipeMetadata](listRecipeMetadata) or from the response of [createRecipe](createRecipe)\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async deleteRecipeList(cell, recipeIds, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.deleteRecipeList(cell, recipeIds, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['LibraryRecipeApi.deleteRecipeList']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Returns the content of a recipe. The identifier of the recipe is recieved on creation or from the metadata list of all the recipes.\n         * @summary Get Recipe\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} recipe Recieved from [listRecipeMetadata](listRecipeMetadata) or from the response of [createRecipe](createRecipe).\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getRecipe(cell, recipe, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getRecipe(cell, recipe, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['LibraryRecipeApi.getRecipe']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Updates an existing recipe. The update is partial, only the set fields get updated.\n         * @summary Update Recipe\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} recipe Recieved from [listRecipeMetadata](listRecipeMetadata) or from the response of [createRecipe](createRecipe).\n         * @param {object} body\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async updateRecipe(cell, recipe, body, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.updateRecipe(cell, recipe, body, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['LibraryRecipeApi.updateRecipe']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n    };\n};\n/**\n * LibraryRecipeApi - factory interface\n * @export\n */\nexport const LibraryRecipeApiFactory = function (configuration, basePath, axios) {\n    const localVarFp = LibraryRecipeApiFp(configuration);\n    return {\n        /**\n         * <!-- theme: danger --> > **Experimental** Creates a new recipe. The corresponding metadata is created as well.\n         * @summary Create Recipe\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} programId The identifier of the program the recipe will be associated with.\n         * @param {object} body\n         * @param {string} [name] If no inital name is set a default name based on the program and timestamp is created.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createRecipe(cell, programId, body, name, options) {\n            return localVarFp.createRecipe(cell, programId, body, name, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * # EXPERIMENTAL  > **Note:** This endpoint is experimental and might experience functional changes in the future.  Deletes a recipe. This action is irreversible.\n         * @summary Delete Recipe\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} recipe Recieved from [listRecipeMetadata](listRecipeMetadata) or from the response of [createRecipe](createRecipe).\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteRecipe(cell, recipe, options) {\n            return localVarFp.deleteRecipe(cell, recipe, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Deletes the provided list of recipes. This action is irreversible.\n         * @summary Delete Recipe List\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {Array<string>} recipeIds Recieved from [listRecipeMetadata](listRecipeMetadata) or from the response of [createRecipe](createRecipe)\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteRecipeList(cell, recipeIds, options) {\n            return localVarFp.deleteRecipeList(cell, recipeIds, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Returns the content of a recipe. The identifier of the recipe is recieved on creation or from the metadata list of all the recipes.\n         * @summary Get Recipe\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} recipe Recieved from [listRecipeMetadata](listRecipeMetadata) or from the response of [createRecipe](createRecipe).\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getRecipe(cell, recipe, options) {\n            return localVarFp.getRecipe(cell, recipe, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Updates an existing recipe. The update is partial, only the set fields get updated.\n         * @summary Update Recipe\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} recipe Recieved from [listRecipeMetadata](listRecipeMetadata) or from the response of [createRecipe](createRecipe).\n         * @param {object} body\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateRecipe(cell, recipe, body, options) {\n            return localVarFp.updateRecipe(cell, recipe, body, options).then((request) => request(axios, basePath));\n        },\n    };\n};\n/**\n * LibraryRecipeApi - object-oriented interface\n * @export\n * @class LibraryRecipeApi\n * @extends {BaseAPI}\n */\nexport class LibraryRecipeApi extends BaseAPI {\n    /**\n     * <!-- theme: danger --> > **Experimental** Creates a new recipe. The corresponding metadata is created as well.\n     * @summary Create Recipe\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} programId The identifier of the program the recipe will be associated with.\n     * @param {object} body\n     * @param {string} [name] If no inital name is set a default name based on the program and timestamp is created.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof LibraryRecipeApi\n     */\n    createRecipe(cell, programId, body, name, options) {\n        return LibraryRecipeApiFp(this.configuration).createRecipe(cell, programId, body, name, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * # EXPERIMENTAL  > **Note:** This endpoint is experimental and might experience functional changes in the future.  Deletes a recipe. This action is irreversible.\n     * @summary Delete Recipe\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} recipe Recieved from [listRecipeMetadata](listRecipeMetadata) or from the response of [createRecipe](createRecipe).\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof LibraryRecipeApi\n     */\n    deleteRecipe(cell, recipe, options) {\n        return LibraryRecipeApiFp(this.configuration).deleteRecipe(cell, recipe, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * <!-- theme: danger --> > **Experimental** Deletes the provided list of recipes. This action is irreversible.\n     * @summary Delete Recipe List\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {Array<string>} recipeIds Recieved from [listRecipeMetadata](listRecipeMetadata) or from the response of [createRecipe](createRecipe)\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof LibraryRecipeApi\n     */\n    deleteRecipeList(cell, recipeIds, options) {\n        return LibraryRecipeApiFp(this.configuration).deleteRecipeList(cell, recipeIds, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * <!-- theme: danger --> > **Experimental** Returns the content of a recipe. The identifier of the recipe is recieved on creation or from the metadata list of all the recipes.\n     * @summary Get Recipe\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} recipe Recieved from [listRecipeMetadata](listRecipeMetadata) or from the response of [createRecipe](createRecipe).\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof LibraryRecipeApi\n     */\n    getRecipe(cell, recipe, options) {\n        return LibraryRecipeApiFp(this.configuration).getRecipe(cell, recipe, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * <!-- theme: danger --> > **Experimental** Updates an existing recipe. The update is partial, only the set fields get updated.\n     * @summary Update Recipe\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} recipe Recieved from [listRecipeMetadata](listRecipeMetadata) or from the response of [createRecipe](createRecipe).\n     * @param {object} body\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof LibraryRecipeApi\n     */\n    updateRecipe(cell, recipe, body, options) {\n        return LibraryRecipeApiFp(this.configuration).updateRecipe(cell, recipe, body, options).then((request) => request(this.axios, this.basePath));\n    }\n}\n/**\n * LibraryRecipeMetadataApi - axios parameter creator\n * @export\n */\nexport const LibraryRecipeMetadataApiAxiosParamCreator = function (configuration) {\n    return {\n        /**\n         * <!-- theme: danger --> > **Experimental** Returns the metadata of the recipe.\n         * @summary Get Recipe Metadata\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} recipe Recieved from [listRecipeMetadata](listRecipeMetadata) or from the response of [createRecipe](createRecipe).\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getRecipeMetadata: async (cell, recipe, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('getRecipeMetadata', 'cell', cell);\n            // verify required parameter 'recipe' is not null or undefined\n            assertParamExists('getRecipeMetadata', 'recipe', recipe);\n            const localVarPath = `/cells/{cell}/store/recipes/{recipe}/metadata`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"recipe\"}}`, encodeURIComponent(String(recipe)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** List of all the stored recipes, represented by their metadata.\n         * @summary List Recipe Metadata\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listRecipeMetadata: async (cell, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('listRecipeMetadata', 'cell', cell);\n            const localVarPath = `/cells/{cell}/store/recipes`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Updates the metadata of a recipe. The update is partial, only the set fields get updated.\n         * @summary Update Recipe Metadata\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} recipe Recieved from [listRecipeMetadata](listRecipeMetadata) or from the response of [createRecipe](createRecipe).\n         * @param {UpdateRecipeMetadataRequest} updateRecipeMetadataRequest\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateRecipeMetadata: async (cell, recipe, updateRecipeMetadataRequest, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('updateRecipeMetadata', 'cell', cell);\n            // verify required parameter 'recipe' is not null or undefined\n            assertParamExists('updateRecipeMetadata', 'recipe', recipe);\n            // verify required parameter 'updateRecipeMetadataRequest' is not null or undefined\n            assertParamExists('updateRecipeMetadata', 'updateRecipeMetadataRequest', updateRecipeMetadataRequest);\n            const localVarPath = `/cells/{cell}/store/recipes/{recipe}/metadata`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"recipe\"}}`, encodeURIComponent(String(recipe)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            localVarRequestOptions.data = serializeDataIfNeeded(updateRecipeMetadataRequest, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Uploads an image for a recipe. The image is served as a static file and the path is stored in the metadata.\n         * @summary Upload Recipe Metadata Image\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} recipe Recieved from [listRecipeMetadata](listRecipeMetadata) or from the response of [createRecipe](createRecipe).\n         * @param {File} file\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        uploadRecipeMetadataImage: async (cell, recipe, file, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('uploadRecipeMetadataImage', 'cell', cell);\n            // verify required parameter 'recipe' is not null or undefined\n            assertParamExists('uploadRecipeMetadataImage', 'recipe', recipe);\n            // verify required parameter 'file' is not null or undefined\n            assertParamExists('uploadRecipeMetadataImage', 'file', file);\n            const localVarPath = `/cells/{cell}/store/recipes/{recipe}/metadata/image`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"recipe\"}}`, encodeURIComponent(String(recipe)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            const localVarFormParams = new ((configuration && configuration.formDataCtor) || FormData)();\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (file !== undefined) {\n                localVarFormParams.append('file', file);\n            }\n            localVarHeaderParameter['Content-Type'] = 'multipart/form-data';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            localVarRequestOptions.data = localVarFormParams;\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n    };\n};\n/**\n * LibraryRecipeMetadataApi - functional programming interface\n * @export\n */\nexport const LibraryRecipeMetadataApiFp = function (configuration) {\n    const localVarAxiosParamCreator = LibraryRecipeMetadataApiAxiosParamCreator(configuration);\n    return {\n        /**\n         * <!-- theme: danger --> > **Experimental** Returns the metadata of the recipe.\n         * @summary Get Recipe Metadata\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} recipe Recieved from [listRecipeMetadata](listRecipeMetadata) or from the response of [createRecipe](createRecipe).\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getRecipeMetadata(cell, recipe, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getRecipeMetadata(cell, recipe, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['LibraryRecipeMetadataApi.getRecipeMetadata']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** List of all the stored recipes, represented by their metadata.\n         * @summary List Recipe Metadata\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async listRecipeMetadata(cell, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.listRecipeMetadata(cell, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['LibraryRecipeMetadataApi.listRecipeMetadata']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Updates the metadata of a recipe. The update is partial, only the set fields get updated.\n         * @summary Update Recipe Metadata\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} recipe Recieved from [listRecipeMetadata](listRecipeMetadata) or from the response of [createRecipe](createRecipe).\n         * @param {UpdateRecipeMetadataRequest} updateRecipeMetadataRequest\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async updateRecipeMetadata(cell, recipe, updateRecipeMetadataRequest, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.updateRecipeMetadata(cell, recipe, updateRecipeMetadataRequest, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['LibraryRecipeMetadataApi.updateRecipeMetadata']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Uploads an image for a recipe. The image is served as a static file and the path is stored in the metadata.\n         * @summary Upload Recipe Metadata Image\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} recipe Recieved from [listRecipeMetadata](listRecipeMetadata) or from the response of [createRecipe](createRecipe).\n         * @param {File} file\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async uploadRecipeMetadataImage(cell, recipe, file, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.uploadRecipeMetadataImage(cell, recipe, file, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['LibraryRecipeMetadataApi.uploadRecipeMetadataImage']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n    };\n};\n/**\n * LibraryRecipeMetadataApi - factory interface\n * @export\n */\nexport const LibraryRecipeMetadataApiFactory = function (configuration, basePath, axios) {\n    const localVarFp = LibraryRecipeMetadataApiFp(configuration);\n    return {\n        /**\n         * <!-- theme: danger --> > **Experimental** Returns the metadata of the recipe.\n         * @summary Get Recipe Metadata\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} recipe Recieved from [listRecipeMetadata](listRecipeMetadata) or from the response of [createRecipe](createRecipe).\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getRecipeMetadata(cell, recipe, options) {\n            return localVarFp.getRecipeMetadata(cell, recipe, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** List of all the stored recipes, represented by their metadata.\n         * @summary List Recipe Metadata\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listRecipeMetadata(cell, options) {\n            return localVarFp.listRecipeMetadata(cell, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Updates the metadata of a recipe. The update is partial, only the set fields get updated.\n         * @summary Update Recipe Metadata\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} recipe Recieved from [listRecipeMetadata](listRecipeMetadata) or from the response of [createRecipe](createRecipe).\n         * @param {UpdateRecipeMetadataRequest} updateRecipeMetadataRequest\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateRecipeMetadata(cell, recipe, updateRecipeMetadataRequest, options) {\n            return localVarFp.updateRecipeMetadata(cell, recipe, updateRecipeMetadataRequest, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Uploads an image for a recipe. The image is served as a static file and the path is stored in the metadata.\n         * @summary Upload Recipe Metadata Image\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} recipe Recieved from [listRecipeMetadata](listRecipeMetadata) or from the response of [createRecipe](createRecipe).\n         * @param {File} file\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        uploadRecipeMetadataImage(cell, recipe, file, options) {\n            return localVarFp.uploadRecipeMetadataImage(cell, recipe, file, options).then((request) => request(axios, basePath));\n        },\n    };\n};\n/**\n * LibraryRecipeMetadataApi - object-oriented interface\n * @export\n * @class LibraryRecipeMetadataApi\n * @extends {BaseAPI}\n */\nexport class LibraryRecipeMetadataApi extends BaseAPI {\n    /**\n     * <!-- theme: danger --> > **Experimental** Returns the metadata of the recipe.\n     * @summary Get Recipe Metadata\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} recipe Recieved from [listRecipeMetadata](listRecipeMetadata) or from the response of [createRecipe](createRecipe).\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof LibraryRecipeMetadataApi\n     */\n    getRecipeMetadata(cell, recipe, options) {\n        return LibraryRecipeMetadataApiFp(this.configuration).getRecipeMetadata(cell, recipe, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * <!-- theme: danger --> > **Experimental** List of all the stored recipes, represented by their metadata.\n     * @summary List Recipe Metadata\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof LibraryRecipeMetadataApi\n     */\n    listRecipeMetadata(cell, options) {\n        return LibraryRecipeMetadataApiFp(this.configuration).listRecipeMetadata(cell, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * <!-- theme: danger --> > **Experimental** Updates the metadata of a recipe. The update is partial, only the set fields get updated.\n     * @summary Update Recipe Metadata\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} recipe Recieved from [listRecipeMetadata](listRecipeMetadata) or from the response of [createRecipe](createRecipe).\n     * @param {UpdateRecipeMetadataRequest} updateRecipeMetadataRequest\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof LibraryRecipeMetadataApi\n     */\n    updateRecipeMetadata(cell, recipe, updateRecipeMetadataRequest, options) {\n        return LibraryRecipeMetadataApiFp(this.configuration).updateRecipeMetadata(cell, recipe, updateRecipeMetadataRequest, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * <!-- theme: danger --> > **Experimental** Uploads an image for a recipe. The image is served as a static file and the path is stored in the metadata.\n     * @summary Upload Recipe Metadata Image\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} recipe Recieved from [listRecipeMetadata](listRecipeMetadata) or from the response of [createRecipe](createRecipe).\n     * @param {File} file\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof LibraryRecipeMetadataApi\n     */\n    uploadRecipeMetadataImage(cell, recipe, file, options) {\n        return LibraryRecipeMetadataApiFp(this.configuration).uploadRecipeMetadataImage(cell, recipe, file, options).then((request) => request(this.axios, this.basePath));\n    }\n}\n/**\n * LicenseApi - axios parameter creator\n * @export\n */\nexport const LicenseApiAxiosParamCreator = function (configuration) {\n    return {\n        /**\n         * Activates a license using the provided license owner authentication token.  The refresh token is used to enable communication with the license provider without requiring user interaction.\n         * @summary Activate license\n         * @param {ActivateLicenseRequest} activateLicenseRequest\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        activateLicense: async (activateLicenseRequest, options = {}) => {\n            // verify required parameter 'activateLicenseRequest' is not null or undefined\n            assertParamExists('activateLicense', 'activateLicenseRequest', activateLicenseRequest);\n            const localVarPath = `/license`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            localVarRequestOptions.data = serializeDataIfNeeded(activateLicenseRequest, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Deactivates active license.\n         * @summary Deactivate license\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deactivateLicense: async (options = {}) => {\n            const localVarPath = `/license`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Get information on the license used with the Wandelbots NOVA instance, e.g. licensed product, expiration date, license status.\n         * @summary Get license\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getLicense: async (options = {}) => {\n            const localVarPath = `/license`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Get the license status. If `valid`, Wandelbots NOVA can be used. If `expired`, the license has to be renewed in order to use Wandelbots NOVA.\n         * @summary Get license status\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getLicenseStatus: async (options = {}) => {\n            const localVarPath = `/license/status`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n    };\n};\n/**\n * LicenseApi - functional programming interface\n * @export\n */\nexport const LicenseApiFp = function (configuration) {\n    const localVarAxiosParamCreator = LicenseApiAxiosParamCreator(configuration);\n    return {\n        /**\n         * Activates a license using the provided license owner authentication token.  The refresh token is used to enable communication with the license provider without requiring user interaction.\n         * @summary Activate license\n         * @param {ActivateLicenseRequest} activateLicenseRequest\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async activateLicense(activateLicenseRequest, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.activateLicense(activateLicenseRequest, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['LicenseApi.activateLicense']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Deactivates active license.\n         * @summary Deactivate license\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async deactivateLicense(options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.deactivateLicense(options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['LicenseApi.deactivateLicense']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Get information on the license used with the Wandelbots NOVA instance, e.g. licensed product, expiration date, license status.\n         * @summary Get license\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getLicense(options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getLicense(options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['LicenseApi.getLicense']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Get the license status. If `valid`, Wandelbots NOVA can be used. If `expired`, the license has to be renewed in order to use Wandelbots NOVA.\n         * @summary Get license status\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getLicenseStatus(options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getLicenseStatus(options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['LicenseApi.getLicenseStatus']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n    };\n};\n/**\n * LicenseApi - factory interface\n * @export\n */\nexport const LicenseApiFactory = function (configuration, basePath, axios) {\n    const localVarFp = LicenseApiFp(configuration);\n    return {\n        /**\n         * Activates a license using the provided license owner authentication token.  The refresh token is used to enable communication with the license provider without requiring user interaction.\n         * @summary Activate license\n         * @param {ActivateLicenseRequest} activateLicenseRequest\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        activateLicense(activateLicenseRequest, options) {\n            return localVarFp.activateLicense(activateLicenseRequest, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Deactivates active license.\n         * @summary Deactivate license\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deactivateLicense(options) {\n            return localVarFp.deactivateLicense(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Get information on the license used with the Wandelbots NOVA instance, e.g. licensed product, expiration date, license status.\n         * @summary Get license\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getLicense(options) {\n            return localVarFp.getLicense(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Get the license status. If `valid`, Wandelbots NOVA can be used. If `expired`, the license has to be renewed in order to use Wandelbots NOVA.\n         * @summary Get license status\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getLicenseStatus(options) {\n            return localVarFp.getLicenseStatus(options).then((request) => request(axios, basePath));\n        },\n    };\n};\n/**\n * LicenseApi - object-oriented interface\n * @export\n * @class LicenseApi\n * @extends {BaseAPI}\n */\nexport class LicenseApi extends BaseAPI {\n    /**\n     * Activates a license using the provided license owner authentication token.  The refresh token is used to enable communication with the license provider without requiring user interaction.\n     * @summary Activate license\n     * @param {ActivateLicenseRequest} activateLicenseRequest\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof LicenseApi\n     */\n    activateLicense(activateLicenseRequest, options) {\n        return LicenseApiFp(this.configuration).activateLicense(activateLicenseRequest, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Deactivates active license.\n     * @summary Deactivate license\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof LicenseApi\n     */\n    deactivateLicense(options) {\n        return LicenseApiFp(this.configuration).deactivateLicense(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Get information on the license used with the Wandelbots NOVA instance, e.g. licensed product, expiration date, license status.\n     * @summary Get license\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof LicenseApi\n     */\n    getLicense(options) {\n        return LicenseApiFp(this.configuration).getLicense(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Get the license status. If `valid`, Wandelbots NOVA can be used. If `expired`, the license has to be renewed in order to use Wandelbots NOVA.\n     * @summary Get license status\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof LicenseApi\n     */\n    getLicenseStatus(options) {\n        return LicenseApiFp(this.configuration).getLicenseStatus(options).then((request) => request(this.axios, this.basePath));\n    }\n}\n/**\n * MotionApi - axios parameter creator\n * @export\n */\nexport const MotionApiAxiosParamCreator = function (configuration) {\n    return {\n        /**\n         * Delete all registered motions.\n         * @summary All Motions\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteAllMotions: async (cell, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('deleteAllMotions', 'cell', cell);\n            const localVarPath = `/cells/{cell}/motions`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Remove a previously created motion from cache. Use [listMotions](listMotions) to list all available motions. Motions are removed automatically if the motion group or the corresponding controller is disconnected.\n         * @summary Remove\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motion This represents the UUID of a motion. Every executable or partially executable motion is cached and an UUID is returned. Indicate the UUID to execute the motion or retrieve information on the motion.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteMotion: async (cell, motion, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('deleteMotion', 'cell', cell);\n            // verify required parameter 'motion' is not null or undefined\n            assertParamExists('deleteMotion', 'motion', motion);\n            const localVarPath = `/cells/{cell}/motions/{motion}/delete`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"motion\"}}`, encodeURIComponent(String(motion)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * <!-- theme: danger -->  > Websocket endpoint  Provides execution control over a previously planned trajectory. Enables the caller to attach I/O actions to the trajectory.  Understanding the concept of location:   The location or path parameter specifies the exact position along a trajectory.   The location is a scalar value that ranges from 0 to `n`,   where `n` denotes the number of motion commands, or trajectory segments, e.g. line, p2p, etc. See [planMotion](planMotion).   Each integer value of the location corresponds to one motion command, e.g. 3.0 to 3.999 could be a line.  ### Preconditions  - The motion group\\'s control mode is not claimed by any other endpoint. - The motion group\\'s joint position are at start location specified with InitializeMovementRequest.  ### Requests  #### 1. Send InitializeMovementRequest to lock the trajectory to this connection   The following actions are executed:   - Sets robot controller mode to control mode,   - Sets start location of the execution    Keep in mind that only a single trajectory can be locked to a websocket connection at a time and not unlocked anymore.   To execute another trajectory, a new connection must be established.  #### 2. Send StartMovementRequest to start the movement  Sets direction of movement, default is forward.  #### **Optional**  - To pause, send PauseMovementRequest before the movement has reached its end location. - Change the movement\\'s velocity with PlaybackSpeedRequest after initializing the movement with InitializeMovementRequest.  ### Responses  - InitializeMovementResponse is sent to signal the success or failure of the InitializeMovementRequest. - Movement responses are streamed after a StartMovementRequest successfully started the movement.   Movement responses are streamed in a rate that is defined as the multiple of the controller step-rate closest to   but not exceeding the rate configured by InitializeMovementRequest. - Standstill reponse  is sent once the movement has finished or has come to a standstill due to a pause. - PauseMovementResponse is sent to signal the success of the PauseMovementRequest. It does not signal the end of the movement.   End of movement is signaled by Standstill reponse . - PlaybackSpeedResponse is sent to signal the success of the PlaybackSpeedRequest. - MovementError with error details is sent in case of an unexpected error, e.g. controller disconnects during movement.  ### Tips and Tricks  - A movement can be paused and resumed by sending PauseMovementRequest and StartMovementRequest. - Send PlaybackSpeedRequest before StartMovementRequest to reduce the velocity of the movement before it starts. - Send PlaybackSpeedRequest repeatedly to implement a slider. The velocity of the motion group can be adjusted with each controller step. Therefore, if your app needs a slider-like UI to alter the velocity of a currently running movement, you can send PlaybackSpeedRequest with different speed values repeatedly during the movement. - A closed trajectory (end and start joint position are equal) can be repeated by sending StartMovementRequest after the movement has finished.\n         * @summary Execute Trajectory\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {ExecuteTrajectoryRequest} executeTrajectoryRequest\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        executeTrajectory: async (cell, executeTrajectoryRequest, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('executeTrajectory', 'cell', cell);\n            // verify required parameter 'executeTrajectoryRequest' is not null or undefined\n            assertParamExists('executeTrajectory', 'executeTrajectoryRequest', executeTrajectoryRequest);\n            const localVarPath = `/cells/{cell}/motions/executetrajectory`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            localVarRequestOptions.data = serializeDataIfNeeded(executeTrajectoryRequest, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Get the trajectory of a planned motion with defined `sample_time` in milliseconds (ms). The trajectory is a list of points containing cartesian and joint data. The cartesian data is in the requested coordinate system. To get a single point of the trajectory, please use the [getMotionTrajectorySample](getMotionTrajectorySample) endpoint.\n         * @summary Get Trajectory\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motion This represents the UUID of a motion. Every executable or partially executable motion is cached and an UUID is returned. Indicate the UUID to execute the motion or retrieve information on the motion.\n         * @param {number} sampleTime The value of &#x60;sample_time&#x60; is the time in milliseconds (ms) between each point in the trajectory.\n         * @param {string} [responsesCoordinateSystem] Unique identifier addressing a coordinate system to which the cartesian data of the responses should be converted. Default: world coordinate system.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getMotionTrajectory: async (cell, motion, sampleTime, responsesCoordinateSystem, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('getMotionTrajectory', 'cell', cell);\n            // verify required parameter 'motion' is not null or undefined\n            assertParamExists('getMotionTrajectory', 'motion', motion);\n            // verify required parameter 'sampleTime' is not null or undefined\n            assertParamExists('getMotionTrajectory', 'sampleTime', sampleTime);\n            const localVarPath = `/cells/{cell}/motions/{motion}/trajectory`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"motion\"}}`, encodeURIComponent(String(motion)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (sampleTime !== undefined) {\n                localVarQueryParameter['sample_time'] = sampleTime;\n            }\n            if (responsesCoordinateSystem !== undefined) {\n                localVarQueryParameter['responses_coordinate_system'] = responsesCoordinateSystem;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Get a single point at a certain location of a planned motion.  To get the whole trajectory, use the [getMotionTrajectory](getMotionTrajectory) endpoint.\n         * @summary Get Trajectory Sample\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motion This represents the UUID of a motion. Every executable or partially executable motion is cached and an UUID is returned. Indicate the UUID to execute the motion or retrieve information on the motion.\n         * @param {number} [locationOnTrajectory]\n         * @param {string} [responseCoordinateSystem] Unique identifier addressing a coordinate system in which the cartesian data of the response should be converted to. Default is the world coordinate system.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getMotionTrajectorySample: async (cell, motion, locationOnTrajectory, responseCoordinateSystem, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('getMotionTrajectorySample', 'cell', cell);\n            // verify required parameter 'motion' is not null or undefined\n            assertParamExists('getMotionTrajectorySample', 'motion', motion);\n            const localVarPath = `/cells/{cell}/motions/{motion}/trajectorysample`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"motion\"}}`, encodeURIComponent(String(motion)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (locationOnTrajectory !== undefined) {\n                localVarQueryParameter['location_on_trajectory'] = locationOnTrajectory;\n            }\n            if (responseCoordinateSystem !== undefined) {\n                localVarQueryParameter['response_coordinate_system'] = responseCoordinateSystem;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Get the joint data of a planned motion. The planned motion contains only the joint information, to persistently store and reload it later. The data will be sampled equidistantly with defined `sample_time` in milliseconds (ms). If not provided, the data is returned as it is stored on Wandelbots NOVA system.  To request cartesian data for visualization purposes, use the [getMotionTrajectory](getMotionTrajectory) endpoint. To get a single point of the planned motion, use the [getMotionTrajectorySample](getMotionTrajectorySample) endpoint.\n         * @summary Get Planned Motion\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motion This represents the UUID of a motion. Every executable or partially executable motion is cached and an UUID is returned. Indicate the UUID to execute the motion or retrieve information on the motion.\n         * @param {number} [sampleTime] -| The value of &#x60;sample_time&#x60; is the time in milliseconds (ms) between each datapoint of the planned motion. Optional. If not provided, the data is returned as it is stored internally and equidistant sampling is not guaranteed.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getPlannedMotion: async (cell, motion, sampleTime, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('getPlannedMotion', 'cell', cell);\n            // verify required parameter 'motion' is not null or undefined\n            assertParamExists('getPlannedMotion', 'motion', motion);\n            const localVarPath = `/cells/{cell}/motions/{motion}/planned-motion`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"motion\"}}`, encodeURIComponent(String(motion)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (sampleTime !== undefined) {\n                localVarQueryParameter['sample_time'] = sampleTime;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Returns motion group models that are supported for planning.\n         * @summary Motion Group Models for Planning\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getPlanningMotionGroupModels: async (cell, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('getPlanningMotionGroupModels', 'cell', cell);\n            const localVarPath = `/cells/{cell}/motion-planning/motion-group-models`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * List all currently planned and available motions. Use [planMotion](planMotion) to plan a new motion. Motions are removed if the corresponding motion group or controller disconnects.\n         * @summary List All Motions\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listMotions: async (cell, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('listMotions', 'cell', cell);\n            const localVarPath = `/cells/{cell}/motions`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Loads and validates the data of a planned motion into a motion session. The response contains information about the validated motion.  Validation can lead to three different results: - Fully valid: The whole planned motion can be executed from start to end. The response will contain the session to move the robot. - Partially valid: Only parts of the planned motion can be executed. The response will contain the session to move the robot and information about the failure for the part that is not executable. - Invalid: The planned motion can not be executed. The response will tell you, which information about the reason of failure.  If the motion is at least partially valid, the parts of the motion that are valid can be executed using the [streamMoveForward](streamMoveForward) endpoint.  You can use the following workflows:   - Plan motions using the [planMotion](planMotion) endpoint,   - Store the planned motion persistently,   - Use this endpoint to reload the stored motion and get a motion session for it.   - Execute the loaded motion using the [streamMoveForward](streamMoveForward) endpoint.  OR:   - Generate a planned motion with [planTrajectory](planTrajectory) or your own motion planner,   - Send the planned motion to this endpoint to validate it and get a motion session for it,   - Execute your motion using the [streamMoveForward](streamMoveForward) endpoint.  Once a planned motion is validated, it is treated like a motion session and will appear in the list of available motions, see [listMotions](listMotions) endpoint. You can then execute a motion session with the [streamMoveForward](streamMoveForward) endpoint.\n         * @summary Load Planned Motion\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {PlannedMotion} plannedMotion\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        loadPlannedMotion: async (cell, plannedMotion, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('loadPlannedMotion', 'cell', cell);\n            // verify required parameter 'plannedMotion' is not null or undefined\n            assertParamExists('loadPlannedMotion', 'plannedMotion', plannedMotion);\n            const localVarPath = `/cells/{cell}/planned-motions`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            localVarRequestOptions.data = serializeDataIfNeeded(plannedMotion, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * <!-- theme: danger -->  > **Experimental**  Plans a collision-free PTP motion for a single motion group.  Use the following workflow to execute a planned trajectory: 1. Plan collision-free movement/motion. 2. Validate and load the planned trajectory using the [loadPlannedMotion](loadPlannedMotion) endpoint. 3. Execute the loaded trajectory using the [streamMove](streamMove) endpoint.\n         * @summary Plan Collision Free PTP\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {PlanCollisionFreePTPRequest} [planCollisionFreePTPRequest]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        planCollisionFreePTP: async (cell, planCollisionFreePTPRequest, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('planCollisionFreePTP', 'cell', cell);\n            const localVarPath = `/cells/{cell}/motion-planning/plan-collision-free-ptp`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            localVarRequestOptions.data = serializeDataIfNeeded(planCollisionFreePTPRequest, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Deprecated endpoint. Use [planTrajectory](planTrajectory) and [loadPlannedMotion](loadPlannedMotion) instead.  Plans a new motion for a single previously configured [motion group](listMotionGroups). Motions are described by a sequence of motion commands starting with start joints. A motion is planned from standstill to standstill. A single motion has constant TCP and payload. Currently, I/O actions can\\'t be attached to a motion to execute the action in realtime while a motion is executed. If an I/O is needed at a specific point, multiple motions need to be planned. If an I/O is needed to be set while a motion is executed, the endpoint [setOutputValues](setOutputValues) could be used.\n         * @summary Plan Motion\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {PlanRequest} planRequest\n         * @param {*} [options] Override http request option.\n         * @deprecated\n         * @throws {RequiredError}\n         */\n        planMotion: async (cell, planRequest, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('planMotion', 'cell', cell);\n            // verify required parameter 'planRequest' is not null or undefined\n            assertParamExists('planMotion', 'planRequest', planRequest);\n            const localVarPath = `/cells/{cell}/motions`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            localVarRequestOptions.data = serializeDataIfNeeded(planRequest, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Plans a new trajectory for a single motion group.  Describe the trajectory as a sequence of motion commands that the robots TCP should follow.  Use the following workflow to execute a planned trajectory: 1. Plan a trajectory. 2. Validate and load the planned trajectory using the [loadPlannedMotion](loadPlannedMotion) endpoint. 3. Execute the loaded trajectory using the [streamMove](streamMove) endpoint.  If the trajectory is not executable, the [PlanTrajectoryResponse](PlanTrajectoryResponse) will contain the joint trajectory up until the error, e.g. all samples until a collision occurs. EXCEPTION: If a CartesianPTP or JointPTP motion command has an invalid target, the response will contain the trajectory up until the start of the invalid PTP motion.\n         * @summary Plan Trajectory\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {PlanTrajectoryRequest} [planTrajectoryRequest]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        planTrajectory: async (cell, planTrajectoryRequest, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('planTrajectory', 'cell', cell);\n            const localVarPath = `/cells/{cell}/motion-planning/plan-trajectory`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            localVarRequestOptions.data = serializeDataIfNeeded(planTrajectoryRequest, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Stops an active motion gracefully with deceleration until standstill while staying on the planned trajectory. When an active movement is stopped any further update request will be rejected. The active movement request returns until the robot has reached standstill. Currently it is not possible to restart the motion. Please send in a feature request if you need to restart/continue the motion.\n         * @summary Stop\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motion This represents the UUID of a motion. Every executable or partially executable motion is cached and an UUID is returned. Indicate the UUID to execute the motion or retrieve information on the motion.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        stopExecution: async (cell, motion, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('stopExecution', 'cell', cell);\n            // verify required parameter 'motion' is not null or undefined\n            assertParamExists('stopExecution', 'motion', motion);\n            const localVarPath = `/cells/{cell}/motions/{motion}/stop`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"motion\"}}`, encodeURIComponent(String(motion)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Deprecated endpoint. Use `executeTrajectory` instead.  Moves the motion group forward or backward along a previously planned motion. Or request to move the motion group via joint point-to-point to a given location on a planned motion. Or set the playback speed of the motion. Or stop the motion execution.\n         * @summary Stream Move\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {StreamMoveRequest} streamMoveRequest\n         * @param {*} [options] Override http request option.\n         * @deprecated\n         * @throws {RequiredError}\n         */\n        streamMove: async (cell, streamMoveRequest, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('streamMove', 'cell', cell);\n            // verify required parameter 'streamMoveRequest' is not null or undefined\n            assertParamExists('streamMove', 'streamMoveRequest', streamMoveRequest);\n            const localVarPath = `/cells/{cell}/motions/streammove`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            localVarRequestOptions.data = serializeDataIfNeeded(streamMoveRequest, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Deprecated endpoint. Use the [executeTrajectory](executeTrajectory) endpoint instead. Request to move the motion group backward along a previously planned motion. Once started, you can stop a motion using the [stopExecution](stopExecution) endpoint. Prerequisites, before starting the motion execution:  - The motion group is currently at the endpoint of the planned motion. OR  - The motion was stopped using [stopExecution](stopExecution) endpoint. Then it is possible to resume the motion execution from where it stopped. OR  - The motion group was moved onto the motion using the [streamMoveToTrajectoryViaJointP2P](streamMoveToTrajectoryViaJointP2P) endpoint.\n         * @summary Stream Backward\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motion This represents the UUID of a motion. Every executable or partially executable motion is cached and an UUID is returned. Indicate the UUID to execute the motion or retrieve information on the motion.\n         * @param {number} playbackSpeedInPercent Set the velocity for executed movements of the motion in percent. A percentage of 100% means that the robot moves as fast as possible without violating the limits. Setting this value does not affect the overall shape of the velocity profile. Everything is slowed down by the same factor. Therefore, this should only be used for teaching and trajectory evaluation purposes. If the process requires a certain velocity, the respective limits should be set when planning the motion. This will not change the velocity override of the controller. The controller velocity override value shall be 100% to ensure controllability of the motion group.\n         * @param {number} [responseRate] Update rate for the response message in milliseconds (ms). Default is 200 ms. We recommend to use the step rate of the controller or a multiple of the step rate as NOVA updates the state in the controller\\&#39;s step rate as well. Minimal response rate is the step rate of controller.\n         * @param {string} [responseCoordinateSystem] Unique identifier addressing a coordinate system to which the cartesian data of the responses should be converted. Default is the world coordinate system.\n         * @param {number} [startLocationOnTrajectory] Location the motion is requested to start at. The default value is the end of the trajectory. The location is a scalar value that defines a position along a path, typically ranging from 0 to &#x60;n&#x60;, where &#x60;n&#x60; denotes the number of motion commands. Each integer value of the location corresponds to a specific motion command, while non-integer values interpolate positions within the segments. The location is calculated from the joint path.\n         * @param {*} [options] Override http request option.\n         * @deprecated\n         * @throws {RequiredError}\n         */\n        streamMoveBackward: async (cell, motion, playbackSpeedInPercent, responseRate, responseCoordinateSystem, startLocationOnTrajectory, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('streamMoveBackward', 'cell', cell);\n            // verify required parameter 'motion' is not null or undefined\n            assertParamExists('streamMoveBackward', 'motion', motion);\n            // verify required parameter 'playbackSpeedInPercent' is not null or undefined\n            assertParamExists('streamMoveBackward', 'playbackSpeedInPercent', playbackSpeedInPercent);\n            const localVarPath = `/cells/{cell}/motions/{motion}/executebackward`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"motion\"}}`, encodeURIComponent(String(motion)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (playbackSpeedInPercent !== undefined) {\n                localVarQueryParameter['playback_speed_in_percent'] = playbackSpeedInPercent;\n            }\n            if (responseRate !== undefined) {\n                localVarQueryParameter['response_rate'] = responseRate;\n            }\n            if (responseCoordinateSystem !== undefined) {\n                localVarQueryParameter['response_coordinate_system'] = responseCoordinateSystem;\n            }\n            if (startLocationOnTrajectory !== undefined) {\n                localVarQueryParameter['start_location_on_trajectory'] = startLocationOnTrajectory;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Deprecated endpoint. Use the [executeTrajectory](executeTrajectory) endpoint instead. Moves the motion group forward along a previously planned motion. Once started, you can stop a motion using the [stopExecution](stopExecution) endpoint. Prerequisites, before starting the motion execution:  - The motion group is currently at the start point of the planned motion. OR  - The motion was stopped using [stopExecution](stopExecution) endpoint. Then it is possible to resume the motion execution from where it stopped. OR  - The motion group was moved onto the motion using the [streamMoveToTrajectoryViaJointP2P](streamMoveToTrajectoryViaJointP2P) endpoint.\n         * @summary Stream Forward\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motion This represents the UUID of a motion. Every executable or partially executable motion is cached and an UUID is returned. Indicate the UUID to execute the motion or retrieve information on the motion.\n         * @param {number} playbackSpeedInPercent Set the velocity for executed movements of the motion in percent. A percentage of 100% means that the robot moves as fast as possible without violating the limits. Setting this value does not affect the overall shape of the velocity profile. Everything is slowed down by the same factor. Therefore, this should only be used for teaching and trajectory evaluation purposes. If the process requires a certain velocity, the respective limits should be set when planning the motion. This will not change the velocity override of the controller. The controller velocity override value shall be 100% to ensure controllability of the motion group.\n         * @param {number} [responseRate] Update rate for the response message in milliseconds (ms). Default is 200 ms. We recommend to use the step rate of the controller or a multiple of the step rate as NOVA updates the state in the controller\\&#39;s step rate as well. Minimal response rate is the step rate of controller.\n         * @param {string} [responseCoordinateSystem] Unique identifier addressing a coordinate system to which the cartesian data of the responses should be converted. Default is the world coordinate system.\n         * @param {number} [startLocationOnTrajectory] Location the motion is requested to start at. The default value is the begin of the trajectory. The location is a scalar value that defines a position along a path, typically ranging from 0 to &#x60;n&#x60;, where &#x60;n&#x60; denotes the number of motion commands. Each integer value of the location corresponds to a specific motion command, while non-integer values interpolate positions within the segments. The location is calculated from the joint path.\n         * @param {*} [options] Override http request option.\n         * @deprecated\n         * @throws {RequiredError}\n         */\n        streamMoveForward: async (cell, motion, playbackSpeedInPercent, responseRate, responseCoordinateSystem, startLocationOnTrajectory, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('streamMoveForward', 'cell', cell);\n            // verify required parameter 'motion' is not null or undefined\n            assertParamExists('streamMoveForward', 'motion', motion);\n            // verify required parameter 'playbackSpeedInPercent' is not null or undefined\n            assertParamExists('streamMoveForward', 'playbackSpeedInPercent', playbackSpeedInPercent);\n            const localVarPath = `/cells/{cell}/motions/{motion}/executeforward`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"motion\"}}`, encodeURIComponent(String(motion)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (playbackSpeedInPercent !== undefined) {\n                localVarQueryParameter['playback_speed_in_percent'] = playbackSpeedInPercent;\n            }\n            if (responseRate !== undefined) {\n                localVarQueryParameter['response_rate'] = responseRate;\n            }\n            if (responseCoordinateSystem !== undefined) {\n                localVarQueryParameter['response_coordinate_system'] = responseCoordinateSystem;\n            }\n            if (startLocationOnTrajectory !== undefined) {\n                localVarQueryParameter['start_location_on_trajectory'] = startLocationOnTrajectory;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Request to move the motion group via joint point-to-point to a given location on a planned motion. You must use this endpoint in order to start moving from an arbritrary location of the trajectory. Afterwards, you are able to call [streamMoveForward](streamMoveForward) or [streamMoveBackward](streamMoveBackward) to move along planned motion. Use the [stopExecution](stopExecution) endpoint to stop the motion gracefully.\n         * @summary Stream to Trajectory\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motion This represents the UUID of a motion. Every executable or partially executable motion is cached and an UUID is returned. Indicate the UUID to execute the motion or retrieve information on the motion.\n         * @param {number} locationOnTrajectory\n         * @param {Array<number>} [limitOverrideJointVelocityLimitsJoints] The joint velocity limits for the p2p motion to a previously planned motion.\n         * @param {Array<number>} [limitOverrideJointAccelerationLimitsJoints] The joint acceleration limits for the p2p motion to a previously planned motion.\n         * @param {number} [limitOverrideTcpVelocityLimit] Maximum allowed TCP velocity in [mm/s].\n         * @param {number} [limitOverrideTcpAccelerationLimit] Maximum allowed TCP acceleration in [mm/s^2].\n         * @param {number} [limitOverrideTcpOrientationVelocityLimit] Maximum allowed TCP rotation velocity in [rad/s].\n         * @param {number} [limitOverrideTcpOrientationAccelerationLimit] Maximum allowed TCP rotation acceleration in [rad/s^2].\n         * @param {string} [responsesCoordinateSystem]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        streamMoveToTrajectoryViaJointPTP: async (cell, motion, locationOnTrajectory, limitOverrideJointVelocityLimitsJoints, limitOverrideJointAccelerationLimitsJoints, limitOverrideTcpVelocityLimit, limitOverrideTcpAccelerationLimit, limitOverrideTcpOrientationVelocityLimit, limitOverrideTcpOrientationAccelerationLimit, responsesCoordinateSystem, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('streamMoveToTrajectoryViaJointPTP', 'cell', cell);\n            // verify required parameter 'motion' is not null or undefined\n            assertParamExists('streamMoveToTrajectoryViaJointPTP', 'motion', motion);\n            // verify required parameter 'locationOnTrajectory' is not null or undefined\n            assertParamExists('streamMoveToTrajectoryViaJointPTP', 'locationOnTrajectory', locationOnTrajectory);\n            const localVarPath = `/cells/{cell}/motions/{motion}/executetotrajectory`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"motion\"}}`, encodeURIComponent(String(motion)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (locationOnTrajectory !== undefined) {\n                localVarQueryParameter['location_on_trajectory'] = locationOnTrajectory;\n            }\n            if (limitOverrideJointVelocityLimitsJoints) {\n                localVarQueryParameter['limit_override.joint_velocity_limits.joints'] = limitOverrideJointVelocityLimitsJoints;\n            }\n            if (limitOverrideJointAccelerationLimitsJoints) {\n                localVarQueryParameter['limit_override.joint_acceleration_limits.joints'] = limitOverrideJointAccelerationLimitsJoints;\n            }\n            if (limitOverrideTcpVelocityLimit !== undefined) {\n                localVarQueryParameter['limit_override.tcp_velocity_limit'] = limitOverrideTcpVelocityLimit;\n            }\n            if (limitOverrideTcpAccelerationLimit !== undefined) {\n                localVarQueryParameter['limit_override.tcp_acceleration_limit'] = limitOverrideTcpAccelerationLimit;\n            }\n            if (limitOverrideTcpOrientationVelocityLimit !== undefined) {\n                localVarQueryParameter['limit_override.tcp_orientation_velocity_limit'] = limitOverrideTcpOrientationVelocityLimit;\n            }\n            if (limitOverrideTcpOrientationAccelerationLimit !== undefined) {\n                localVarQueryParameter['limit_override.tcp_orientation_acceleration_limit'] = limitOverrideTcpOrientationAccelerationLimit;\n            }\n            if (responsesCoordinateSystem !== undefined) {\n                localVarQueryParameter['responses_coordinate_system'] = responsesCoordinateSystem;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n    };\n};\n/**\n * MotionApi - functional programming interface\n * @export\n */\nexport const MotionApiFp = function (configuration) {\n    const localVarAxiosParamCreator = MotionApiAxiosParamCreator(configuration);\n    return {\n        /**\n         * Delete all registered motions.\n         * @summary All Motions\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async deleteAllMotions(cell, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.deleteAllMotions(cell, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['MotionApi.deleteAllMotions']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Remove a previously created motion from cache. Use [listMotions](listMotions) to list all available motions. Motions are removed automatically if the motion group or the corresponding controller is disconnected.\n         * @summary Remove\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motion This represents the UUID of a motion. Every executable or partially executable motion is cached and an UUID is returned. Indicate the UUID to execute the motion or retrieve information on the motion.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async deleteMotion(cell, motion, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.deleteMotion(cell, motion, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['MotionApi.deleteMotion']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * <!-- theme: danger -->  > Websocket endpoint  Provides execution control over a previously planned trajectory. Enables the caller to attach I/O actions to the trajectory.  Understanding the concept of location:   The location or path parameter specifies the exact position along a trajectory.   The location is a scalar value that ranges from 0 to `n`,   where `n` denotes the number of motion commands, or trajectory segments, e.g. line, p2p, etc. See [planMotion](planMotion).   Each integer value of the location corresponds to one motion command, e.g. 3.0 to 3.999 could be a line.  ### Preconditions  - The motion group\\'s control mode is not claimed by any other endpoint. - The motion group\\'s joint position are at start location specified with InitializeMovementRequest.  ### Requests  #### 1. Send InitializeMovementRequest to lock the trajectory to this connection   The following actions are executed:   - Sets robot controller mode to control mode,   - Sets start location of the execution    Keep in mind that only a single trajectory can be locked to a websocket connection at a time and not unlocked anymore.   To execute another trajectory, a new connection must be established.  #### 2. Send StartMovementRequest to start the movement  Sets direction of movement, default is forward.  #### **Optional**  - To pause, send PauseMovementRequest before the movement has reached its end location. - Change the movement\\'s velocity with PlaybackSpeedRequest after initializing the movement with InitializeMovementRequest.  ### Responses  - InitializeMovementResponse is sent to signal the success or failure of the InitializeMovementRequest. - Movement responses are streamed after a StartMovementRequest successfully started the movement.   Movement responses are streamed in a rate that is defined as the multiple of the controller step-rate closest to   but not exceeding the rate configured by InitializeMovementRequest. - Standstill reponse  is sent once the movement has finished or has come to a standstill due to a pause. - PauseMovementResponse is sent to signal the success of the PauseMovementRequest. It does not signal the end of the movement.   End of movement is signaled by Standstill reponse . - PlaybackSpeedResponse is sent to signal the success of the PlaybackSpeedRequest. - MovementError with error details is sent in case of an unexpected error, e.g. controller disconnects during movement.  ### Tips and Tricks  - A movement can be paused and resumed by sending PauseMovementRequest and StartMovementRequest. - Send PlaybackSpeedRequest before StartMovementRequest to reduce the velocity of the movement before it starts. - Send PlaybackSpeedRequest repeatedly to implement a slider. The velocity of the motion group can be adjusted with each controller step. Therefore, if your app needs a slider-like UI to alter the velocity of a currently running movement, you can send PlaybackSpeedRequest with different speed values repeatedly during the movement. - A closed trajectory (end and start joint position are equal) can be repeated by sending StartMovementRequest after the movement has finished.\n         * @summary Execute Trajectory\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {ExecuteTrajectoryRequest} executeTrajectoryRequest\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async executeTrajectory(cell, executeTrajectoryRequest, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.executeTrajectory(cell, executeTrajectoryRequest, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['MotionApi.executeTrajectory']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Get the trajectory of a planned motion with defined `sample_time` in milliseconds (ms). The trajectory is a list of points containing cartesian and joint data. The cartesian data is in the requested coordinate system. To get a single point of the trajectory, please use the [getMotionTrajectorySample](getMotionTrajectorySample) endpoint.\n         * @summary Get Trajectory\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motion This represents the UUID of a motion. Every executable or partially executable motion is cached and an UUID is returned. Indicate the UUID to execute the motion or retrieve information on the motion.\n         * @param {number} sampleTime The value of &#x60;sample_time&#x60; is the time in milliseconds (ms) between each point in the trajectory.\n         * @param {string} [responsesCoordinateSystem] Unique identifier addressing a coordinate system to which the cartesian data of the responses should be converted. Default: world coordinate system.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getMotionTrajectory(cell, motion, sampleTime, responsesCoordinateSystem, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getMotionTrajectory(cell, motion, sampleTime, responsesCoordinateSystem, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['MotionApi.getMotionTrajectory']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Get a single point at a certain location of a planned motion.  To get the whole trajectory, use the [getMotionTrajectory](getMotionTrajectory) endpoint.\n         * @summary Get Trajectory Sample\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motion This represents the UUID of a motion. Every executable or partially executable motion is cached and an UUID is returned. Indicate the UUID to execute the motion or retrieve information on the motion.\n         * @param {number} [locationOnTrajectory]\n         * @param {string} [responseCoordinateSystem] Unique identifier addressing a coordinate system in which the cartesian data of the response should be converted to. Default is the world coordinate system.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getMotionTrajectorySample(cell, motion, locationOnTrajectory, responseCoordinateSystem, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getMotionTrajectorySample(cell, motion, locationOnTrajectory, responseCoordinateSystem, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['MotionApi.getMotionTrajectorySample']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Get the joint data of a planned motion. The planned motion contains only the joint information, to persistently store and reload it later. The data will be sampled equidistantly with defined `sample_time` in milliseconds (ms). If not provided, the data is returned as it is stored on Wandelbots NOVA system.  To request cartesian data for visualization purposes, use the [getMotionTrajectory](getMotionTrajectory) endpoint. To get a single point of the planned motion, use the [getMotionTrajectorySample](getMotionTrajectorySample) endpoint.\n         * @summary Get Planned Motion\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motion This represents the UUID of a motion. Every executable or partially executable motion is cached and an UUID is returned. Indicate the UUID to execute the motion or retrieve information on the motion.\n         * @param {number} [sampleTime] -| The value of &#x60;sample_time&#x60; is the time in milliseconds (ms) between each datapoint of the planned motion. Optional. If not provided, the data is returned as it is stored internally and equidistant sampling is not guaranteed.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getPlannedMotion(cell, motion, sampleTime, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getPlannedMotion(cell, motion, sampleTime, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['MotionApi.getPlannedMotion']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Returns motion group models that are supported for planning.\n         * @summary Motion Group Models for Planning\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getPlanningMotionGroupModels(cell, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getPlanningMotionGroupModels(cell, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['MotionApi.getPlanningMotionGroupModels']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * List all currently planned and available motions. Use [planMotion](planMotion) to plan a new motion. Motions are removed if the corresponding motion group or controller disconnects.\n         * @summary List All Motions\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async listMotions(cell, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.listMotions(cell, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['MotionApi.listMotions']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Loads and validates the data of a planned motion into a motion session. The response contains information about the validated motion.  Validation can lead to three different results: - Fully valid: The whole planned motion can be executed from start to end. The response will contain the session to move the robot. - Partially valid: Only parts of the planned motion can be executed. The response will contain the session to move the robot and information about the failure for the part that is not executable. - Invalid: The planned motion can not be executed. The response will tell you, which information about the reason of failure.  If the motion is at least partially valid, the parts of the motion that are valid can be executed using the [streamMoveForward](streamMoveForward) endpoint.  You can use the following workflows:   - Plan motions using the [planMotion](planMotion) endpoint,   - Store the planned motion persistently,   - Use this endpoint to reload the stored motion and get a motion session for it.   - Execute the loaded motion using the [streamMoveForward](streamMoveForward) endpoint.  OR:   - Generate a planned motion with [planTrajectory](planTrajectory) or your own motion planner,   - Send the planned motion to this endpoint to validate it and get a motion session for it,   - Execute your motion using the [streamMoveForward](streamMoveForward) endpoint.  Once a planned motion is validated, it is treated like a motion session and will appear in the list of available motions, see [listMotions](listMotions) endpoint. You can then execute a motion session with the [streamMoveForward](streamMoveForward) endpoint.\n         * @summary Load Planned Motion\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {PlannedMotion} plannedMotion\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async loadPlannedMotion(cell, plannedMotion, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.loadPlannedMotion(cell, plannedMotion, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['MotionApi.loadPlannedMotion']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * <!-- theme: danger -->  > **Experimental**  Plans a collision-free PTP motion for a single motion group.  Use the following workflow to execute a planned trajectory: 1. Plan collision-free movement/motion. 2. Validate and load the planned trajectory using the [loadPlannedMotion](loadPlannedMotion) endpoint. 3. Execute the loaded trajectory using the [streamMove](streamMove) endpoint.\n         * @summary Plan Collision Free PTP\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {PlanCollisionFreePTPRequest} [planCollisionFreePTPRequest]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async planCollisionFreePTP(cell, planCollisionFreePTPRequest, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.planCollisionFreePTP(cell, planCollisionFreePTPRequest, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['MotionApi.planCollisionFreePTP']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Deprecated endpoint. Use [planTrajectory](planTrajectory) and [loadPlannedMotion](loadPlannedMotion) instead.  Plans a new motion for a single previously configured [motion group](listMotionGroups). Motions are described by a sequence of motion commands starting with start joints. A motion is planned from standstill to standstill. A single motion has constant TCP and payload. Currently, I/O actions can\\'t be attached to a motion to execute the action in realtime while a motion is executed. If an I/O is needed at a specific point, multiple motions need to be planned. If an I/O is needed to be set while a motion is executed, the endpoint [setOutputValues](setOutputValues) could be used.\n         * @summary Plan Motion\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {PlanRequest} planRequest\n         * @param {*} [options] Override http request option.\n         * @deprecated\n         * @throws {RequiredError}\n         */\n        async planMotion(cell, planRequest, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.planMotion(cell, planRequest, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['MotionApi.planMotion']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Plans a new trajectory for a single motion group.  Describe the trajectory as a sequence of motion commands that the robots TCP should follow.  Use the following workflow to execute a planned trajectory: 1. Plan a trajectory. 2. Validate and load the planned trajectory using the [loadPlannedMotion](loadPlannedMotion) endpoint. 3. Execute the loaded trajectory using the [streamMove](streamMove) endpoint.  If the trajectory is not executable, the [PlanTrajectoryResponse](PlanTrajectoryResponse) will contain the joint trajectory up until the error, e.g. all samples until a collision occurs. EXCEPTION: If a CartesianPTP or JointPTP motion command has an invalid target, the response will contain the trajectory up until the start of the invalid PTP motion.\n         * @summary Plan Trajectory\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {PlanTrajectoryRequest} [planTrajectoryRequest]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async planTrajectory(cell, planTrajectoryRequest, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.planTrajectory(cell, planTrajectoryRequest, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['MotionApi.planTrajectory']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Stops an active motion gracefully with deceleration until standstill while staying on the planned trajectory. When an active movement is stopped any further update request will be rejected. The active movement request returns until the robot has reached standstill. Currently it is not possible to restart the motion. Please send in a feature request if you need to restart/continue the motion.\n         * @summary Stop\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motion This represents the UUID of a motion. Every executable or partially executable motion is cached and an UUID is returned. Indicate the UUID to execute the motion or retrieve information on the motion.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async stopExecution(cell, motion, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.stopExecution(cell, motion, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['MotionApi.stopExecution']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Deprecated endpoint. Use `executeTrajectory` instead.  Moves the motion group forward or backward along a previously planned motion. Or request to move the motion group via joint point-to-point to a given location on a planned motion. Or set the playback speed of the motion. Or stop the motion execution.\n         * @summary Stream Move\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {StreamMoveRequest} streamMoveRequest\n         * @param {*} [options] Override http request option.\n         * @deprecated\n         * @throws {RequiredError}\n         */\n        async streamMove(cell, streamMoveRequest, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.streamMove(cell, streamMoveRequest, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['MotionApi.streamMove']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Deprecated endpoint. Use the [executeTrajectory](executeTrajectory) endpoint instead. Request to move the motion group backward along a previously planned motion. Once started, you can stop a motion using the [stopExecution](stopExecution) endpoint. Prerequisites, before starting the motion execution:  - The motion group is currently at the endpoint of the planned motion. OR  - The motion was stopped using [stopExecution](stopExecution) endpoint. Then it is possible to resume the motion execution from where it stopped. OR  - The motion group was moved onto the motion using the [streamMoveToTrajectoryViaJointP2P](streamMoveToTrajectoryViaJointP2P) endpoint.\n         * @summary Stream Backward\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motion This represents the UUID of a motion. Every executable or partially executable motion is cached and an UUID is returned. Indicate the UUID to execute the motion or retrieve information on the motion.\n         * @param {number} playbackSpeedInPercent Set the velocity for executed movements of the motion in percent. A percentage of 100% means that the robot moves as fast as possible without violating the limits. Setting this value does not affect the overall shape of the velocity profile. Everything is slowed down by the same factor. Therefore, this should only be used for teaching and trajectory evaluation purposes. If the process requires a certain velocity, the respective limits should be set when planning the motion. This will not change the velocity override of the controller. The controller velocity override value shall be 100% to ensure controllability of the motion group.\n         * @param {number} [responseRate] Update rate for the response message in milliseconds (ms). Default is 200 ms. We recommend to use the step rate of the controller or a multiple of the step rate as NOVA updates the state in the controller\\&#39;s step rate as well. Minimal response rate is the step rate of controller.\n         * @param {string} [responseCoordinateSystem] Unique identifier addressing a coordinate system to which the cartesian data of the responses should be converted. Default is the world coordinate system.\n         * @param {number} [startLocationOnTrajectory] Location the motion is requested to start at. The default value is the end of the trajectory. The location is a scalar value that defines a position along a path, typically ranging from 0 to &#x60;n&#x60;, where &#x60;n&#x60; denotes the number of motion commands. Each integer value of the location corresponds to a specific motion command, while non-integer values interpolate positions within the segments. The location is calculated from the joint path.\n         * @param {*} [options] Override http request option.\n         * @deprecated\n         * @throws {RequiredError}\n         */\n        async streamMoveBackward(cell, motion, playbackSpeedInPercent, responseRate, responseCoordinateSystem, startLocationOnTrajectory, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.streamMoveBackward(cell, motion, playbackSpeedInPercent, responseRate, responseCoordinateSystem, startLocationOnTrajectory, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['MotionApi.streamMoveBackward']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Deprecated endpoint. Use the [executeTrajectory](executeTrajectory) endpoint instead. Moves the motion group forward along a previously planned motion. Once started, you can stop a motion using the [stopExecution](stopExecution) endpoint. Prerequisites, before starting the motion execution:  - The motion group is currently at the start point of the planned motion. OR  - The motion was stopped using [stopExecution](stopExecution) endpoint. Then it is possible to resume the motion execution from where it stopped. OR  - The motion group was moved onto the motion using the [streamMoveToTrajectoryViaJointP2P](streamMoveToTrajectoryViaJointP2P) endpoint.\n         * @summary Stream Forward\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motion This represents the UUID of a motion. Every executable or partially executable motion is cached and an UUID is returned. Indicate the UUID to execute the motion or retrieve information on the motion.\n         * @param {number} playbackSpeedInPercent Set the velocity for executed movements of the motion in percent. A percentage of 100% means that the robot moves as fast as possible without violating the limits. Setting this value does not affect the overall shape of the velocity profile. Everything is slowed down by the same factor. Therefore, this should only be used for teaching and trajectory evaluation purposes. If the process requires a certain velocity, the respective limits should be set when planning the motion. This will not change the velocity override of the controller. The controller velocity override value shall be 100% to ensure controllability of the motion group.\n         * @param {number} [responseRate] Update rate for the response message in milliseconds (ms). Default is 200 ms. We recommend to use the step rate of the controller or a multiple of the step rate as NOVA updates the state in the controller\\&#39;s step rate as well. Minimal response rate is the step rate of controller.\n         * @param {string} [responseCoordinateSystem] Unique identifier addressing a coordinate system to which the cartesian data of the responses should be converted. Default is the world coordinate system.\n         * @param {number} [startLocationOnTrajectory] Location the motion is requested to start at. The default value is the begin of the trajectory. The location is a scalar value that defines a position along a path, typically ranging from 0 to &#x60;n&#x60;, where &#x60;n&#x60; denotes the number of motion commands. Each integer value of the location corresponds to a specific motion command, while non-integer values interpolate positions within the segments. The location is calculated from the joint path.\n         * @param {*} [options] Override http request option.\n         * @deprecated\n         * @throws {RequiredError}\n         */\n        async streamMoveForward(cell, motion, playbackSpeedInPercent, responseRate, responseCoordinateSystem, startLocationOnTrajectory, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.streamMoveForward(cell, motion, playbackSpeedInPercent, responseRate, responseCoordinateSystem, startLocationOnTrajectory, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['MotionApi.streamMoveForward']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Request to move the motion group via joint point-to-point to a given location on a planned motion. You must use this endpoint in order to start moving from an arbritrary location of the trajectory. Afterwards, you are able to call [streamMoveForward](streamMoveForward) or [streamMoveBackward](streamMoveBackward) to move along planned motion. Use the [stopExecution](stopExecution) endpoint to stop the motion gracefully.\n         * @summary Stream to Trajectory\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motion This represents the UUID of a motion. Every executable or partially executable motion is cached and an UUID is returned. Indicate the UUID to execute the motion or retrieve information on the motion.\n         * @param {number} locationOnTrajectory\n         * @param {Array<number>} [limitOverrideJointVelocityLimitsJoints] The joint velocity limits for the p2p motion to a previously planned motion.\n         * @param {Array<number>} [limitOverrideJointAccelerationLimitsJoints] The joint acceleration limits for the p2p motion to a previously planned motion.\n         * @param {number} [limitOverrideTcpVelocityLimit] Maximum allowed TCP velocity in [mm/s].\n         * @param {number} [limitOverrideTcpAccelerationLimit] Maximum allowed TCP acceleration in [mm/s^2].\n         * @param {number} [limitOverrideTcpOrientationVelocityLimit] Maximum allowed TCP rotation velocity in [rad/s].\n         * @param {number} [limitOverrideTcpOrientationAccelerationLimit] Maximum allowed TCP rotation acceleration in [rad/s^2].\n         * @param {string} [responsesCoordinateSystem]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async streamMoveToTrajectoryViaJointPTP(cell, motion, locationOnTrajectory, limitOverrideJointVelocityLimitsJoints, limitOverrideJointAccelerationLimitsJoints, limitOverrideTcpVelocityLimit, limitOverrideTcpAccelerationLimit, limitOverrideTcpOrientationVelocityLimit, limitOverrideTcpOrientationAccelerationLimit, responsesCoordinateSystem, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.streamMoveToTrajectoryViaJointPTP(cell, motion, locationOnTrajectory, limitOverrideJointVelocityLimitsJoints, limitOverrideJointAccelerationLimitsJoints, limitOverrideTcpVelocityLimit, limitOverrideTcpAccelerationLimit, limitOverrideTcpOrientationVelocityLimit, limitOverrideTcpOrientationAccelerationLimit, responsesCoordinateSystem, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['MotionApi.streamMoveToTrajectoryViaJointPTP']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n    };\n};\n/**\n * MotionApi - factory interface\n * @export\n */\nexport const MotionApiFactory = function (configuration, basePath, axios) {\n    const localVarFp = MotionApiFp(configuration);\n    return {\n        /**\n         * Delete all registered motions.\n         * @summary All Motions\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteAllMotions(cell, options) {\n            return localVarFp.deleteAllMotions(cell, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Remove a previously created motion from cache. Use [listMotions](listMotions) to list all available motions. Motions are removed automatically if the motion group or the corresponding controller is disconnected.\n         * @summary Remove\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motion This represents the UUID of a motion. Every executable or partially executable motion is cached and an UUID is returned. Indicate the UUID to execute the motion or retrieve information on the motion.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteMotion(cell, motion, options) {\n            return localVarFp.deleteMotion(cell, motion, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * <!-- theme: danger -->  > Websocket endpoint  Provides execution control over a previously planned trajectory. Enables the caller to attach I/O actions to the trajectory.  Understanding the concept of location:   The location or path parameter specifies the exact position along a trajectory.   The location is a scalar value that ranges from 0 to `n`,   where `n` denotes the number of motion commands, or trajectory segments, e.g. line, p2p, etc. See [planMotion](planMotion).   Each integer value of the location corresponds to one motion command, e.g. 3.0 to 3.999 could be a line.  ### Preconditions  - The motion group\\'s control mode is not claimed by any other endpoint. - The motion group\\'s joint position are at start location specified with InitializeMovementRequest.  ### Requests  #### 1. Send InitializeMovementRequest to lock the trajectory to this connection   The following actions are executed:   - Sets robot controller mode to control mode,   - Sets start location of the execution    Keep in mind that only a single trajectory can be locked to a websocket connection at a time and not unlocked anymore.   To execute another trajectory, a new connection must be established.  #### 2. Send StartMovementRequest to start the movement  Sets direction of movement, default is forward.  #### **Optional**  - To pause, send PauseMovementRequest before the movement has reached its end location. - Change the movement\\'s velocity with PlaybackSpeedRequest after initializing the movement with InitializeMovementRequest.  ### Responses  - InitializeMovementResponse is sent to signal the success or failure of the InitializeMovementRequest. - Movement responses are streamed after a StartMovementRequest successfully started the movement.   Movement responses are streamed in a rate that is defined as the multiple of the controller step-rate closest to   but not exceeding the rate configured by InitializeMovementRequest. - Standstill reponse  is sent once the movement has finished or has come to a standstill due to a pause. - PauseMovementResponse is sent to signal the success of the PauseMovementRequest. It does not signal the end of the movement.   End of movement is signaled by Standstill reponse . - PlaybackSpeedResponse is sent to signal the success of the PlaybackSpeedRequest. - MovementError with error details is sent in case of an unexpected error, e.g. controller disconnects during movement.  ### Tips and Tricks  - A movement can be paused and resumed by sending PauseMovementRequest and StartMovementRequest. - Send PlaybackSpeedRequest before StartMovementRequest to reduce the velocity of the movement before it starts. - Send PlaybackSpeedRequest repeatedly to implement a slider. The velocity of the motion group can be adjusted with each controller step. Therefore, if your app needs a slider-like UI to alter the velocity of a currently running movement, you can send PlaybackSpeedRequest with different speed values repeatedly during the movement. - A closed trajectory (end and start joint position are equal) can be repeated by sending StartMovementRequest after the movement has finished.\n         * @summary Execute Trajectory\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {ExecuteTrajectoryRequest} executeTrajectoryRequest\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        executeTrajectory(cell, executeTrajectoryRequest, options) {\n            return localVarFp.executeTrajectory(cell, executeTrajectoryRequest, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Get the trajectory of a planned motion with defined `sample_time` in milliseconds (ms). The trajectory is a list of points containing cartesian and joint data. The cartesian data is in the requested coordinate system. To get a single point of the trajectory, please use the [getMotionTrajectorySample](getMotionTrajectorySample) endpoint.\n         * @summary Get Trajectory\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motion This represents the UUID of a motion. Every executable or partially executable motion is cached and an UUID is returned. Indicate the UUID to execute the motion or retrieve information on the motion.\n         * @param {number} sampleTime The value of &#x60;sample_time&#x60; is the time in milliseconds (ms) between each point in the trajectory.\n         * @param {string} [responsesCoordinateSystem] Unique identifier addressing a coordinate system to which the cartesian data of the responses should be converted. Default: world coordinate system.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getMotionTrajectory(cell, motion, sampleTime, responsesCoordinateSystem, options) {\n            return localVarFp.getMotionTrajectory(cell, motion, sampleTime, responsesCoordinateSystem, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Get a single point at a certain location of a planned motion.  To get the whole trajectory, use the [getMotionTrajectory](getMotionTrajectory) endpoint.\n         * @summary Get Trajectory Sample\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motion This represents the UUID of a motion. Every executable or partially executable motion is cached and an UUID is returned. Indicate the UUID to execute the motion or retrieve information on the motion.\n         * @param {number} [locationOnTrajectory]\n         * @param {string} [responseCoordinateSystem] Unique identifier addressing a coordinate system in which the cartesian data of the response should be converted to. Default is the world coordinate system.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getMotionTrajectorySample(cell, motion, locationOnTrajectory, responseCoordinateSystem, options) {\n            return localVarFp.getMotionTrajectorySample(cell, motion, locationOnTrajectory, responseCoordinateSystem, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Get the joint data of a planned motion. The planned motion contains only the joint information, to persistently store and reload it later. The data will be sampled equidistantly with defined `sample_time` in milliseconds (ms). If not provided, the data is returned as it is stored on Wandelbots NOVA system.  To request cartesian data for visualization purposes, use the [getMotionTrajectory](getMotionTrajectory) endpoint. To get a single point of the planned motion, use the [getMotionTrajectorySample](getMotionTrajectorySample) endpoint.\n         * @summary Get Planned Motion\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motion This represents the UUID of a motion. Every executable or partially executable motion is cached and an UUID is returned. Indicate the UUID to execute the motion or retrieve information on the motion.\n         * @param {number} [sampleTime] -| The value of &#x60;sample_time&#x60; is the time in milliseconds (ms) between each datapoint of the planned motion. Optional. If not provided, the data is returned as it is stored internally and equidistant sampling is not guaranteed.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getPlannedMotion(cell, motion, sampleTime, options) {\n            return localVarFp.getPlannedMotion(cell, motion, sampleTime, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Returns motion group models that are supported for planning.\n         * @summary Motion Group Models for Planning\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getPlanningMotionGroupModels(cell, options) {\n            return localVarFp.getPlanningMotionGroupModels(cell, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * List all currently planned and available motions. Use [planMotion](planMotion) to plan a new motion. Motions are removed if the corresponding motion group or controller disconnects.\n         * @summary List All Motions\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listMotions(cell, options) {\n            return localVarFp.listMotions(cell, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Loads and validates the data of a planned motion into a motion session. The response contains information about the validated motion.  Validation can lead to three different results: - Fully valid: The whole planned motion can be executed from start to end. The response will contain the session to move the robot. - Partially valid: Only parts of the planned motion can be executed. The response will contain the session to move the robot and information about the failure for the part that is not executable. - Invalid: The planned motion can not be executed. The response will tell you, which information about the reason of failure.  If the motion is at least partially valid, the parts of the motion that are valid can be executed using the [streamMoveForward](streamMoveForward) endpoint.  You can use the following workflows:   - Plan motions using the [planMotion](planMotion) endpoint,   - Store the planned motion persistently,   - Use this endpoint to reload the stored motion and get a motion session for it.   - Execute the loaded motion using the [streamMoveForward](streamMoveForward) endpoint.  OR:   - Generate a planned motion with [planTrajectory](planTrajectory) or your own motion planner,   - Send the planned motion to this endpoint to validate it and get a motion session for it,   - Execute your motion using the [streamMoveForward](streamMoveForward) endpoint.  Once a planned motion is validated, it is treated like a motion session and will appear in the list of available motions, see [listMotions](listMotions) endpoint. You can then execute a motion session with the [streamMoveForward](streamMoveForward) endpoint.\n         * @summary Load Planned Motion\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {PlannedMotion} plannedMotion\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        loadPlannedMotion(cell, plannedMotion, options) {\n            return localVarFp.loadPlannedMotion(cell, plannedMotion, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * <!-- theme: danger -->  > **Experimental**  Plans a collision-free PTP motion for a single motion group.  Use the following workflow to execute a planned trajectory: 1. Plan collision-free movement/motion. 2. Validate and load the planned trajectory using the [loadPlannedMotion](loadPlannedMotion) endpoint. 3. Execute the loaded trajectory using the [streamMove](streamMove) endpoint.\n         * @summary Plan Collision Free PTP\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {PlanCollisionFreePTPRequest} [planCollisionFreePTPRequest]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        planCollisionFreePTP(cell, planCollisionFreePTPRequest, options) {\n            return localVarFp.planCollisionFreePTP(cell, planCollisionFreePTPRequest, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Deprecated endpoint. Use [planTrajectory](planTrajectory) and [loadPlannedMotion](loadPlannedMotion) instead.  Plans a new motion for a single previously configured [motion group](listMotionGroups). Motions are described by a sequence of motion commands starting with start joints. A motion is planned from standstill to standstill. A single motion has constant TCP and payload. Currently, I/O actions can\\'t be attached to a motion to execute the action in realtime while a motion is executed. If an I/O is needed at a specific point, multiple motions need to be planned. If an I/O is needed to be set while a motion is executed, the endpoint [setOutputValues](setOutputValues) could be used.\n         * @summary Plan Motion\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {PlanRequest} planRequest\n         * @param {*} [options] Override http request option.\n         * @deprecated\n         * @throws {RequiredError}\n         */\n        planMotion(cell, planRequest, options) {\n            return localVarFp.planMotion(cell, planRequest, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Plans a new trajectory for a single motion group.  Describe the trajectory as a sequence of motion commands that the robots TCP should follow.  Use the following workflow to execute a planned trajectory: 1. Plan a trajectory. 2. Validate and load the planned trajectory using the [loadPlannedMotion](loadPlannedMotion) endpoint. 3. Execute the loaded trajectory using the [streamMove](streamMove) endpoint.  If the trajectory is not executable, the [PlanTrajectoryResponse](PlanTrajectoryResponse) will contain the joint trajectory up until the error, e.g. all samples until a collision occurs. EXCEPTION: If a CartesianPTP or JointPTP motion command has an invalid target, the response will contain the trajectory up until the start of the invalid PTP motion.\n         * @summary Plan Trajectory\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {PlanTrajectoryRequest} [planTrajectoryRequest]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        planTrajectory(cell, planTrajectoryRequest, options) {\n            return localVarFp.planTrajectory(cell, planTrajectoryRequest, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Stops an active motion gracefully with deceleration until standstill while staying on the planned trajectory. When an active movement is stopped any further update request will be rejected. The active movement request returns until the robot has reached standstill. Currently it is not possible to restart the motion. Please send in a feature request if you need to restart/continue the motion.\n         * @summary Stop\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motion This represents the UUID of a motion. Every executable or partially executable motion is cached and an UUID is returned. Indicate the UUID to execute the motion or retrieve information on the motion.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        stopExecution(cell, motion, options) {\n            return localVarFp.stopExecution(cell, motion, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Deprecated endpoint. Use `executeTrajectory` instead.  Moves the motion group forward or backward along a previously planned motion. Or request to move the motion group via joint point-to-point to a given location on a planned motion. Or set the playback speed of the motion. Or stop the motion execution.\n         * @summary Stream Move\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {StreamMoveRequest} streamMoveRequest\n         * @param {*} [options] Override http request option.\n         * @deprecated\n         * @throws {RequiredError}\n         */\n        streamMove(cell, streamMoveRequest, options) {\n            return localVarFp.streamMove(cell, streamMoveRequest, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Deprecated endpoint. Use the [executeTrajectory](executeTrajectory) endpoint instead. Request to move the motion group backward along a previously planned motion. Once started, you can stop a motion using the [stopExecution](stopExecution) endpoint. Prerequisites, before starting the motion execution:  - The motion group is currently at the endpoint of the planned motion. OR  - The motion was stopped using [stopExecution](stopExecution) endpoint. Then it is possible to resume the motion execution from where it stopped. OR  - The motion group was moved onto the motion using the [streamMoveToTrajectoryViaJointP2P](streamMoveToTrajectoryViaJointP2P) endpoint.\n         * @summary Stream Backward\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motion This represents the UUID of a motion. Every executable or partially executable motion is cached and an UUID is returned. Indicate the UUID to execute the motion or retrieve information on the motion.\n         * @param {number} playbackSpeedInPercent Set the velocity for executed movements of the motion in percent. A percentage of 100% means that the robot moves as fast as possible without violating the limits. Setting this value does not affect the overall shape of the velocity profile. Everything is slowed down by the same factor. Therefore, this should only be used for teaching and trajectory evaluation purposes. If the process requires a certain velocity, the respective limits should be set when planning the motion. This will not change the velocity override of the controller. The controller velocity override value shall be 100% to ensure controllability of the motion group.\n         * @param {number} [responseRate] Update rate for the response message in milliseconds (ms). Default is 200 ms. We recommend to use the step rate of the controller or a multiple of the step rate as NOVA updates the state in the controller\\&#39;s step rate as well. Minimal response rate is the step rate of controller.\n         * @param {string} [responseCoordinateSystem] Unique identifier addressing a coordinate system to which the cartesian data of the responses should be converted. Default is the world coordinate system.\n         * @param {number} [startLocationOnTrajectory] Location the motion is requested to start at. The default value is the end of the trajectory. The location is a scalar value that defines a position along a path, typically ranging from 0 to &#x60;n&#x60;, where &#x60;n&#x60; denotes the number of motion commands. Each integer value of the location corresponds to a specific motion command, while non-integer values interpolate positions within the segments. The location is calculated from the joint path.\n         * @param {*} [options] Override http request option.\n         * @deprecated\n         * @throws {RequiredError}\n         */\n        streamMoveBackward(cell, motion, playbackSpeedInPercent, responseRate, responseCoordinateSystem, startLocationOnTrajectory, options) {\n            return localVarFp.streamMoveBackward(cell, motion, playbackSpeedInPercent, responseRate, responseCoordinateSystem, startLocationOnTrajectory, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Deprecated endpoint. Use the [executeTrajectory](executeTrajectory) endpoint instead. Moves the motion group forward along a previously planned motion. Once started, you can stop a motion using the [stopExecution](stopExecution) endpoint. Prerequisites, before starting the motion execution:  - The motion group is currently at the start point of the planned motion. OR  - The motion was stopped using [stopExecution](stopExecution) endpoint. Then it is possible to resume the motion execution from where it stopped. OR  - The motion group was moved onto the motion using the [streamMoveToTrajectoryViaJointP2P](streamMoveToTrajectoryViaJointP2P) endpoint.\n         * @summary Stream Forward\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motion This represents the UUID of a motion. Every executable or partially executable motion is cached and an UUID is returned. Indicate the UUID to execute the motion or retrieve information on the motion.\n         * @param {number} playbackSpeedInPercent Set the velocity for executed movements of the motion in percent. A percentage of 100% means that the robot moves as fast as possible without violating the limits. Setting this value does not affect the overall shape of the velocity profile. Everything is slowed down by the same factor. Therefore, this should only be used for teaching and trajectory evaluation purposes. If the process requires a certain velocity, the respective limits should be set when planning the motion. This will not change the velocity override of the controller. The controller velocity override value shall be 100% to ensure controllability of the motion group.\n         * @param {number} [responseRate] Update rate for the response message in milliseconds (ms). Default is 200 ms. We recommend to use the step rate of the controller or a multiple of the step rate as NOVA updates the state in the controller\\&#39;s step rate as well. Minimal response rate is the step rate of controller.\n         * @param {string} [responseCoordinateSystem] Unique identifier addressing a coordinate system to which the cartesian data of the responses should be converted. Default is the world coordinate system.\n         * @param {number} [startLocationOnTrajectory] Location the motion is requested to start at. The default value is the begin of the trajectory. The location is a scalar value that defines a position along a path, typically ranging from 0 to &#x60;n&#x60;, where &#x60;n&#x60; denotes the number of motion commands. Each integer value of the location corresponds to a specific motion command, while non-integer values interpolate positions within the segments. The location is calculated from the joint path.\n         * @param {*} [options] Override http request option.\n         * @deprecated\n         * @throws {RequiredError}\n         */\n        streamMoveForward(cell, motion, playbackSpeedInPercent, responseRate, responseCoordinateSystem, startLocationOnTrajectory, options) {\n            return localVarFp.streamMoveForward(cell, motion, playbackSpeedInPercent, responseRate, responseCoordinateSystem, startLocationOnTrajectory, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Request to move the motion group via joint point-to-point to a given location on a planned motion. You must use this endpoint in order to start moving from an arbritrary location of the trajectory. Afterwards, you are able to call [streamMoveForward](streamMoveForward) or [streamMoveBackward](streamMoveBackward) to move along planned motion. Use the [stopExecution](stopExecution) endpoint to stop the motion gracefully.\n         * @summary Stream to Trajectory\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motion This represents the UUID of a motion. Every executable or partially executable motion is cached and an UUID is returned. Indicate the UUID to execute the motion or retrieve information on the motion.\n         * @param {number} locationOnTrajectory\n         * @param {Array<number>} [limitOverrideJointVelocityLimitsJoints] The joint velocity limits for the p2p motion to a previously planned motion.\n         * @param {Array<number>} [limitOverrideJointAccelerationLimitsJoints] The joint acceleration limits for the p2p motion to a previously planned motion.\n         * @param {number} [limitOverrideTcpVelocityLimit] Maximum allowed TCP velocity in [mm/s].\n         * @param {number} [limitOverrideTcpAccelerationLimit] Maximum allowed TCP acceleration in [mm/s^2].\n         * @param {number} [limitOverrideTcpOrientationVelocityLimit] Maximum allowed TCP rotation velocity in [rad/s].\n         * @param {number} [limitOverrideTcpOrientationAccelerationLimit] Maximum allowed TCP rotation acceleration in [rad/s^2].\n         * @param {string} [responsesCoordinateSystem]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        streamMoveToTrajectoryViaJointPTP(cell, motion, locationOnTrajectory, limitOverrideJointVelocityLimitsJoints, limitOverrideJointAccelerationLimitsJoints, limitOverrideTcpVelocityLimit, limitOverrideTcpAccelerationLimit, limitOverrideTcpOrientationVelocityLimit, limitOverrideTcpOrientationAccelerationLimit, responsesCoordinateSystem, options) {\n            return localVarFp.streamMoveToTrajectoryViaJointPTP(cell, motion, locationOnTrajectory, limitOverrideJointVelocityLimitsJoints, limitOverrideJointAccelerationLimitsJoints, limitOverrideTcpVelocityLimit, limitOverrideTcpAccelerationLimit, limitOverrideTcpOrientationVelocityLimit, limitOverrideTcpOrientationAccelerationLimit, responsesCoordinateSystem, options).then((request) => request(axios, basePath));\n        },\n    };\n};\n/**\n * MotionApi - object-oriented interface\n * @export\n * @class MotionApi\n * @extends {BaseAPI}\n */\nexport class MotionApi extends BaseAPI {\n    /**\n     * Delete all registered motions.\n     * @summary All Motions\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof MotionApi\n     */\n    deleteAllMotions(cell, options) {\n        return MotionApiFp(this.configuration).deleteAllMotions(cell, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Remove a previously created motion from cache. Use [listMotions](listMotions) to list all available motions. Motions are removed automatically if the motion group or the corresponding controller is disconnected.\n     * @summary Remove\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} motion This represents the UUID of a motion. Every executable or partially executable motion is cached and an UUID is returned. Indicate the UUID to execute the motion or retrieve information on the motion.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof MotionApi\n     */\n    deleteMotion(cell, motion, options) {\n        return MotionApiFp(this.configuration).deleteMotion(cell, motion, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * <!-- theme: danger -->  > Websocket endpoint  Provides execution control over a previously planned trajectory. Enables the caller to attach I/O actions to the trajectory.  Understanding the concept of location:   The location or path parameter specifies the exact position along a trajectory.   The location is a scalar value that ranges from 0 to `n`,   where `n` denotes the number of motion commands, or trajectory segments, e.g. line, p2p, etc. See [planMotion](planMotion).   Each integer value of the location corresponds to one motion command, e.g. 3.0 to 3.999 could be a line.  ### Preconditions  - The motion group\\'s control mode is not claimed by any other endpoint. - The motion group\\'s joint position are at start location specified with InitializeMovementRequest.  ### Requests  #### 1. Send InitializeMovementRequest to lock the trajectory to this connection   The following actions are executed:   - Sets robot controller mode to control mode,   - Sets start location of the execution    Keep in mind that only a single trajectory can be locked to a websocket connection at a time and not unlocked anymore.   To execute another trajectory, a new connection must be established.  #### 2. Send StartMovementRequest to start the movement  Sets direction of movement, default is forward.  #### **Optional**  - To pause, send PauseMovementRequest before the movement has reached its end location. - Change the movement\\'s velocity with PlaybackSpeedRequest after initializing the movement with InitializeMovementRequest.  ### Responses  - InitializeMovementResponse is sent to signal the success or failure of the InitializeMovementRequest. - Movement responses are streamed after a StartMovementRequest successfully started the movement.   Movement responses are streamed in a rate that is defined as the multiple of the controller step-rate closest to   but not exceeding the rate configured by InitializeMovementRequest. - Standstill reponse  is sent once the movement has finished or has come to a standstill due to a pause. - PauseMovementResponse is sent to signal the success of the PauseMovementRequest. It does not signal the end of the movement.   End of movement is signaled by Standstill reponse . - PlaybackSpeedResponse is sent to signal the success of the PlaybackSpeedRequest. - MovementError with error details is sent in case of an unexpected error, e.g. controller disconnects during movement.  ### Tips and Tricks  - A movement can be paused and resumed by sending PauseMovementRequest and StartMovementRequest. - Send PlaybackSpeedRequest before StartMovementRequest to reduce the velocity of the movement before it starts. - Send PlaybackSpeedRequest repeatedly to implement a slider. The velocity of the motion group can be adjusted with each controller step. Therefore, if your app needs a slider-like UI to alter the velocity of a currently running movement, you can send PlaybackSpeedRequest with different speed values repeatedly during the movement. - A closed trajectory (end and start joint position are equal) can be repeated by sending StartMovementRequest after the movement has finished.\n     * @summary Execute Trajectory\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {ExecuteTrajectoryRequest} executeTrajectoryRequest\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof MotionApi\n     */\n    executeTrajectory(cell, executeTrajectoryRequest, options) {\n        return MotionApiFp(this.configuration).executeTrajectory(cell, executeTrajectoryRequest, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Get the trajectory of a planned motion with defined `sample_time` in milliseconds (ms). The trajectory is a list of points containing cartesian and joint data. The cartesian data is in the requested coordinate system. To get a single point of the trajectory, please use the [getMotionTrajectorySample](getMotionTrajectorySample) endpoint.\n     * @summary Get Trajectory\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} motion This represents the UUID of a motion. Every executable or partially executable motion is cached and an UUID is returned. Indicate the UUID to execute the motion or retrieve information on the motion.\n     * @param {number} sampleTime The value of &#x60;sample_time&#x60; is the time in milliseconds (ms) between each point in the trajectory.\n     * @param {string} [responsesCoordinateSystem] Unique identifier addressing a coordinate system to which the cartesian data of the responses should be converted. Default: world coordinate system.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof MotionApi\n     */\n    getMotionTrajectory(cell, motion, sampleTime, responsesCoordinateSystem, options) {\n        return MotionApiFp(this.configuration).getMotionTrajectory(cell, motion, sampleTime, responsesCoordinateSystem, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Get a single point at a certain location of a planned motion.  To get the whole trajectory, use the [getMotionTrajectory](getMotionTrajectory) endpoint.\n     * @summary Get Trajectory Sample\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} motion This represents the UUID of a motion. Every executable or partially executable motion is cached and an UUID is returned. Indicate the UUID to execute the motion or retrieve information on the motion.\n     * @param {number} [locationOnTrajectory]\n     * @param {string} [responseCoordinateSystem] Unique identifier addressing a coordinate system in which the cartesian data of the response should be converted to. Default is the world coordinate system.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof MotionApi\n     */\n    getMotionTrajectorySample(cell, motion, locationOnTrajectory, responseCoordinateSystem, options) {\n        return MotionApiFp(this.configuration).getMotionTrajectorySample(cell, motion, locationOnTrajectory, responseCoordinateSystem, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Get the joint data of a planned motion. The planned motion contains only the joint information, to persistently store and reload it later. The data will be sampled equidistantly with defined `sample_time` in milliseconds (ms). If not provided, the data is returned as it is stored on Wandelbots NOVA system.  To request cartesian data for visualization purposes, use the [getMotionTrajectory](getMotionTrajectory) endpoint. To get a single point of the planned motion, use the [getMotionTrajectorySample](getMotionTrajectorySample) endpoint.\n     * @summary Get Planned Motion\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} motion This represents the UUID of a motion. Every executable or partially executable motion is cached and an UUID is returned. Indicate the UUID to execute the motion or retrieve information on the motion.\n     * @param {number} [sampleTime] -| The value of &#x60;sample_time&#x60; is the time in milliseconds (ms) between each datapoint of the planned motion. Optional. If not provided, the data is returned as it is stored internally and equidistant sampling is not guaranteed.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof MotionApi\n     */\n    getPlannedMotion(cell, motion, sampleTime, options) {\n        return MotionApiFp(this.configuration).getPlannedMotion(cell, motion, sampleTime, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Returns motion group models that are supported for planning.\n     * @summary Motion Group Models for Planning\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof MotionApi\n     */\n    getPlanningMotionGroupModels(cell, options) {\n        return MotionApiFp(this.configuration).getPlanningMotionGroupModels(cell, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * List all currently planned and available motions. Use [planMotion](planMotion) to plan a new motion. Motions are removed if the corresponding motion group or controller disconnects.\n     * @summary List All Motions\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof MotionApi\n     */\n    listMotions(cell, options) {\n        return MotionApiFp(this.configuration).listMotions(cell, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Loads and validates the data of a planned motion into a motion session. The response contains information about the validated motion.  Validation can lead to three different results: - Fully valid: The whole planned motion can be executed from start to end. The response will contain the session to move the robot. - Partially valid: Only parts of the planned motion can be executed. The response will contain the session to move the robot and information about the failure for the part that is not executable. - Invalid: The planned motion can not be executed. The response will tell you, which information about the reason of failure.  If the motion is at least partially valid, the parts of the motion that are valid can be executed using the [streamMoveForward](streamMoveForward) endpoint.  You can use the following workflows:   - Plan motions using the [planMotion](planMotion) endpoint,   - Store the planned motion persistently,   - Use this endpoint to reload the stored motion and get a motion session for it.   - Execute the loaded motion using the [streamMoveForward](streamMoveForward) endpoint.  OR:   - Generate a planned motion with [planTrajectory](planTrajectory) or your own motion planner,   - Send the planned motion to this endpoint to validate it and get a motion session for it,   - Execute your motion using the [streamMoveForward](streamMoveForward) endpoint.  Once a planned motion is validated, it is treated like a motion session and will appear in the list of available motions, see [listMotions](listMotions) endpoint. You can then execute a motion session with the [streamMoveForward](streamMoveForward) endpoint.\n     * @summary Load Planned Motion\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {PlannedMotion} plannedMotion\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof MotionApi\n     */\n    loadPlannedMotion(cell, plannedMotion, options) {\n        return MotionApiFp(this.configuration).loadPlannedMotion(cell, plannedMotion, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * <!-- theme: danger -->  > **Experimental**  Plans a collision-free PTP motion for a single motion group.  Use the following workflow to execute a planned trajectory: 1. Plan collision-free movement/motion. 2. Validate and load the planned trajectory using the [loadPlannedMotion](loadPlannedMotion) endpoint. 3. Execute the loaded trajectory using the [streamMove](streamMove) endpoint.\n     * @summary Plan Collision Free PTP\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {PlanCollisionFreePTPRequest} [planCollisionFreePTPRequest]\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof MotionApi\n     */\n    planCollisionFreePTP(cell, planCollisionFreePTPRequest, options) {\n        return MotionApiFp(this.configuration).planCollisionFreePTP(cell, planCollisionFreePTPRequest, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Deprecated endpoint. Use [planTrajectory](planTrajectory) and [loadPlannedMotion](loadPlannedMotion) instead.  Plans a new motion for a single previously configured [motion group](listMotionGroups). Motions are described by a sequence of motion commands starting with start joints. A motion is planned from standstill to standstill. A single motion has constant TCP and payload. Currently, I/O actions can\\'t be attached to a motion to execute the action in realtime while a motion is executed. If an I/O is needed at a specific point, multiple motions need to be planned. If an I/O is needed to be set while a motion is executed, the endpoint [setOutputValues](setOutputValues) could be used.\n     * @summary Plan Motion\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {PlanRequest} planRequest\n     * @param {*} [options] Override http request option.\n     * @deprecated\n     * @throws {RequiredError}\n     * @memberof MotionApi\n     */\n    planMotion(cell, planRequest, options) {\n        return MotionApiFp(this.configuration).planMotion(cell, planRequest, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Plans a new trajectory for a single motion group.  Describe the trajectory as a sequence of motion commands that the robots TCP should follow.  Use the following workflow to execute a planned trajectory: 1. Plan a trajectory. 2. Validate and load the planned trajectory using the [loadPlannedMotion](loadPlannedMotion) endpoint. 3. Execute the loaded trajectory using the [streamMove](streamMove) endpoint.  If the trajectory is not executable, the [PlanTrajectoryResponse](PlanTrajectoryResponse) will contain the joint trajectory up until the error, e.g. all samples until a collision occurs. EXCEPTION: If a CartesianPTP or JointPTP motion command has an invalid target, the response will contain the trajectory up until the start of the invalid PTP motion.\n     * @summary Plan Trajectory\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {PlanTrajectoryRequest} [planTrajectoryRequest]\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof MotionApi\n     */\n    planTrajectory(cell, planTrajectoryRequest, options) {\n        return MotionApiFp(this.configuration).planTrajectory(cell, planTrajectoryRequest, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Stops an active motion gracefully with deceleration until standstill while staying on the planned trajectory. When an active movement is stopped any further update request will be rejected. The active movement request returns until the robot has reached standstill. Currently it is not possible to restart the motion. Please send in a feature request if you need to restart/continue the motion.\n     * @summary Stop\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} motion This represents the UUID of a motion. Every executable or partially executable motion is cached and an UUID is returned. Indicate the UUID to execute the motion or retrieve information on the motion.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof MotionApi\n     */\n    stopExecution(cell, motion, options) {\n        return MotionApiFp(this.configuration).stopExecution(cell, motion, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Deprecated endpoint. Use `executeTrajectory` instead.  Moves the motion group forward or backward along a previously planned motion. Or request to move the motion group via joint point-to-point to a given location on a planned motion. Or set the playback speed of the motion. Or stop the motion execution.\n     * @summary Stream Move\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {StreamMoveRequest} streamMoveRequest\n     * @param {*} [options] Override http request option.\n     * @deprecated\n     * @throws {RequiredError}\n     * @memberof MotionApi\n     */\n    streamMove(cell, streamMoveRequest, options) {\n        return MotionApiFp(this.configuration).streamMove(cell, streamMoveRequest, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Deprecated endpoint. Use the [executeTrajectory](executeTrajectory) endpoint instead. Request to move the motion group backward along a previously planned motion. Once started, you can stop a motion using the [stopExecution](stopExecution) endpoint. Prerequisites, before starting the motion execution:  - The motion group is currently at the endpoint of the planned motion. OR  - The motion was stopped using [stopExecution](stopExecution) endpoint. Then it is possible to resume the motion execution from where it stopped. OR  - The motion group was moved onto the motion using the [streamMoveToTrajectoryViaJointP2P](streamMoveToTrajectoryViaJointP2P) endpoint.\n     * @summary Stream Backward\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} motion This represents the UUID of a motion. Every executable or partially executable motion is cached and an UUID is returned. Indicate the UUID to execute the motion or retrieve information on the motion.\n     * @param {number} playbackSpeedInPercent Set the velocity for executed movements of the motion in percent. A percentage of 100% means that the robot moves as fast as possible without violating the limits. Setting this value does not affect the overall shape of the velocity profile. Everything is slowed down by the same factor. Therefore, this should only be used for teaching and trajectory evaluation purposes. If the process requires a certain velocity, the respective limits should be set when planning the motion. This will not change the velocity override of the controller. The controller velocity override value shall be 100% to ensure controllability of the motion group.\n     * @param {number} [responseRate] Update rate for the response message in milliseconds (ms). Default is 200 ms. We recommend to use the step rate of the controller or a multiple of the step rate as NOVA updates the state in the controller\\&#39;s step rate as well. Minimal response rate is the step rate of controller.\n     * @param {string} [responseCoordinateSystem] Unique identifier addressing a coordinate system to which the cartesian data of the responses should be converted. Default is the world coordinate system.\n     * @param {number} [startLocationOnTrajectory] Location the motion is requested to start at. The default value is the end of the trajectory. The location is a scalar value that defines a position along a path, typically ranging from 0 to &#x60;n&#x60;, where &#x60;n&#x60; denotes the number of motion commands. Each integer value of the location corresponds to a specific motion command, while non-integer values interpolate positions within the segments. The location is calculated from the joint path.\n     * @param {*} [options] Override http request option.\n     * @deprecated\n     * @throws {RequiredError}\n     * @memberof MotionApi\n     */\n    streamMoveBackward(cell, motion, playbackSpeedInPercent, responseRate, responseCoordinateSystem, startLocationOnTrajectory, options) {\n        return MotionApiFp(this.configuration).streamMoveBackward(cell, motion, playbackSpeedInPercent, responseRate, responseCoordinateSystem, startLocationOnTrajectory, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Deprecated endpoint. Use the [executeTrajectory](executeTrajectory) endpoint instead. Moves the motion group forward along a previously planned motion. Once started, you can stop a motion using the [stopExecution](stopExecution) endpoint. Prerequisites, before starting the motion execution:  - The motion group is currently at the start point of the planned motion. OR  - The motion was stopped using [stopExecution](stopExecution) endpoint. Then it is possible to resume the motion execution from where it stopped. OR  - The motion group was moved onto the motion using the [streamMoveToTrajectoryViaJointP2P](streamMoveToTrajectoryViaJointP2P) endpoint.\n     * @summary Stream Forward\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} motion This represents the UUID of a motion. Every executable or partially executable motion is cached and an UUID is returned. Indicate the UUID to execute the motion or retrieve information on the motion.\n     * @param {number} playbackSpeedInPercent Set the velocity for executed movements of the motion in percent. A percentage of 100% means that the robot moves as fast as possible without violating the limits. Setting this value does not affect the overall shape of the velocity profile. Everything is slowed down by the same factor. Therefore, this should only be used for teaching and trajectory evaluation purposes. If the process requires a certain velocity, the respective limits should be set when planning the motion. This will not change the velocity override of the controller. The controller velocity override value shall be 100% to ensure controllability of the motion group.\n     * @param {number} [responseRate] Update rate for the response message in milliseconds (ms). Default is 200 ms. We recommend to use the step rate of the controller or a multiple of the step rate as NOVA updates the state in the controller\\&#39;s step rate as well. Minimal response rate is the step rate of controller.\n     * @param {string} [responseCoordinateSystem] Unique identifier addressing a coordinate system to which the cartesian data of the responses should be converted. Default is the world coordinate system.\n     * @param {number} [startLocationOnTrajectory] Location the motion is requested to start at. The default value is the begin of the trajectory. The location is a scalar value that defines a position along a path, typically ranging from 0 to &#x60;n&#x60;, where &#x60;n&#x60; denotes the number of motion commands. Each integer value of the location corresponds to a specific motion command, while non-integer values interpolate positions within the segments. The location is calculated from the joint path.\n     * @param {*} [options] Override http request option.\n     * @deprecated\n     * @throws {RequiredError}\n     * @memberof MotionApi\n     */\n    streamMoveForward(cell, motion, playbackSpeedInPercent, responseRate, responseCoordinateSystem, startLocationOnTrajectory, options) {\n        return MotionApiFp(this.configuration).streamMoveForward(cell, motion, playbackSpeedInPercent, responseRate, responseCoordinateSystem, startLocationOnTrajectory, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Request to move the motion group via joint point-to-point to a given location on a planned motion. You must use this endpoint in order to start moving from an arbritrary location of the trajectory. Afterwards, you are able to call [streamMoveForward](streamMoveForward) or [streamMoveBackward](streamMoveBackward) to move along planned motion. Use the [stopExecution](stopExecution) endpoint to stop the motion gracefully.\n     * @summary Stream to Trajectory\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} motion This represents the UUID of a motion. Every executable or partially executable motion is cached and an UUID is returned. Indicate the UUID to execute the motion or retrieve information on the motion.\n     * @param {number} locationOnTrajectory\n     * @param {Array<number>} [limitOverrideJointVelocityLimitsJoints] The joint velocity limits for the p2p motion to a previously planned motion.\n     * @param {Array<number>} [limitOverrideJointAccelerationLimitsJoints] The joint acceleration limits for the p2p motion to a previously planned motion.\n     * @param {number} [limitOverrideTcpVelocityLimit] Maximum allowed TCP velocity in [mm/s].\n     * @param {number} [limitOverrideTcpAccelerationLimit] Maximum allowed TCP acceleration in [mm/s^2].\n     * @param {number} [limitOverrideTcpOrientationVelocityLimit] Maximum allowed TCP rotation velocity in [rad/s].\n     * @param {number} [limitOverrideTcpOrientationAccelerationLimit] Maximum allowed TCP rotation acceleration in [rad/s^2].\n     * @param {string} [responsesCoordinateSystem]\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof MotionApi\n     */\n    streamMoveToTrajectoryViaJointPTP(cell, motion, locationOnTrajectory, limitOverrideJointVelocityLimitsJoints, limitOverrideJointAccelerationLimitsJoints, limitOverrideTcpVelocityLimit, limitOverrideTcpAccelerationLimit, limitOverrideTcpOrientationVelocityLimit, limitOverrideTcpOrientationAccelerationLimit, responsesCoordinateSystem, options) {\n        return MotionApiFp(this.configuration).streamMoveToTrajectoryViaJointPTP(cell, motion, locationOnTrajectory, limitOverrideJointVelocityLimitsJoints, limitOverrideJointAccelerationLimitsJoints, limitOverrideTcpVelocityLimit, limitOverrideTcpAccelerationLimit, limitOverrideTcpOrientationVelocityLimit, limitOverrideTcpOrientationAccelerationLimit, responsesCoordinateSystem, options).then((request) => request(this.axios, this.basePath));\n    }\n}\n/**\n * MotionGroupApi - axios parameter creator\n * @export\n */\nexport const MotionGroupApiAxiosParamCreator = function (configuration) {\n    return {\n        /**\n         * Activate the motion group and keeps the motion group in an active status. To activate all motion groups of a robot controller, use this endpoint. It will return all activated motion groups of that controller.  When activating motion groups, it is not possible to interact with the controller in any other way.  To deactivate a motion group, use [deactivateMotionGroup](deactivateMotionGroup).\n         * @summary Activate All\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        activateAllMotionGroups: async (cell, controller, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('activateAllMotionGroups', 'cell', cell);\n            // verify required parameter 'controller' is not null or undefined\n            assertParamExists('activateAllMotionGroups', 'controller', controller);\n            const localVarPath = `/cells/{cell}/motion-groups/all`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (controller !== undefined) {\n                localVarQueryParameter['controller'] = controller;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Activate the motion group and keeps the motion group in an active status. To manually activate a motion group, use this endpoint.  When activating a motion group, interacting with the controller in other ways is not possible.  To deactivate a motion group, use [deactivateMotionGroup](deactivateMotionGroup).\n         * @summary Activate\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        activateMotionGroup: async (cell, motionGroup, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('activateMotionGroup', 'cell', cell);\n            // verify required parameter 'motionGroup' is not null or undefined\n            assertParamExists('activateMotionGroup', 'motionGroup', motionGroup);\n            const localVarPath = `/cells/{cell}/motion-groups`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (motionGroup !== undefined) {\n                localVarQueryParameter['motion_group'] = motionGroup;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Deactivate a motion group. Activate the motion group and keeps the motion group in an active status.  The robot controller streams information about all active motion groups. Deactivate motion groups that you no longer use.  When deactivating motion groups, it is not possible to interact with the controller in any other way.\n         * @summary Deactivate\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deactivateMotionGroup: async (cell, motionGroup, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('deactivateMotionGroup', 'cell', cell);\n            // verify required parameter 'motionGroup' is not null or undefined\n            assertParamExists('deactivateMotionGroup', 'motionGroup', motionGroup);\n            const localVarPath = `/cells/{cell}/motion-groups/{motion-group}`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"motion-group\"}}`, encodeURIComponent(String(motionGroup)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * List all active motion groups. A motion group is active if it is currently used by a controller.\n         * @summary List Active\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listMotionGroups: async (cell, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('listMotionGroups', 'cell', cell);\n            const localVarPath = `/cells/{cell}/motion-groups`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n    };\n};\n/**\n * MotionGroupApi - functional programming interface\n * @export\n */\nexport const MotionGroupApiFp = function (configuration) {\n    const localVarAxiosParamCreator = MotionGroupApiAxiosParamCreator(configuration);\n    return {\n        /**\n         * Activate the motion group and keeps the motion group in an active status. To activate all motion groups of a robot controller, use this endpoint. It will return all activated motion groups of that controller.  When activating motion groups, it is not possible to interact with the controller in any other way.  To deactivate a motion group, use [deactivateMotionGroup](deactivateMotionGroup).\n         * @summary Activate All\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async activateAllMotionGroups(cell, controller, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.activateAllMotionGroups(cell, controller, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['MotionGroupApi.activateAllMotionGroups']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Activate the motion group and keeps the motion group in an active status. To manually activate a motion group, use this endpoint.  When activating a motion group, interacting with the controller in other ways is not possible.  To deactivate a motion group, use [deactivateMotionGroup](deactivateMotionGroup).\n         * @summary Activate\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async activateMotionGroup(cell, motionGroup, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.activateMotionGroup(cell, motionGroup, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['MotionGroupApi.activateMotionGroup']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Deactivate a motion group. Activate the motion group and keeps the motion group in an active status.  The robot controller streams information about all active motion groups. Deactivate motion groups that you no longer use.  When deactivating motion groups, it is not possible to interact with the controller in any other way.\n         * @summary Deactivate\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async deactivateMotionGroup(cell, motionGroup, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.deactivateMotionGroup(cell, motionGroup, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['MotionGroupApi.deactivateMotionGroup']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * List all active motion groups. A motion group is active if it is currently used by a controller.\n         * @summary List Active\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async listMotionGroups(cell, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.listMotionGroups(cell, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['MotionGroupApi.listMotionGroups']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n    };\n};\n/**\n * MotionGroupApi - factory interface\n * @export\n */\nexport const MotionGroupApiFactory = function (configuration, basePath, axios) {\n    const localVarFp = MotionGroupApiFp(configuration);\n    return {\n        /**\n         * Activate the motion group and keeps the motion group in an active status. To activate all motion groups of a robot controller, use this endpoint. It will return all activated motion groups of that controller.  When activating motion groups, it is not possible to interact with the controller in any other way.  To deactivate a motion group, use [deactivateMotionGroup](deactivateMotionGroup).\n         * @summary Activate All\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        activateAllMotionGroups(cell, controller, options) {\n            return localVarFp.activateAllMotionGroups(cell, controller, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Activate the motion group and keeps the motion group in an active status. To manually activate a motion group, use this endpoint.  When activating a motion group, interacting with the controller in other ways is not possible.  To deactivate a motion group, use [deactivateMotionGroup](deactivateMotionGroup).\n         * @summary Activate\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        activateMotionGroup(cell, motionGroup, options) {\n            return localVarFp.activateMotionGroup(cell, motionGroup, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Deactivate a motion group. Activate the motion group and keeps the motion group in an active status.  The robot controller streams information about all active motion groups. Deactivate motion groups that you no longer use.  When deactivating motion groups, it is not possible to interact with the controller in any other way.\n         * @summary Deactivate\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deactivateMotionGroup(cell, motionGroup, options) {\n            return localVarFp.deactivateMotionGroup(cell, motionGroup, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * List all active motion groups. A motion group is active if it is currently used by a controller.\n         * @summary List Active\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listMotionGroups(cell, options) {\n            return localVarFp.listMotionGroups(cell, options).then((request) => request(axios, basePath));\n        },\n    };\n};\n/**\n * MotionGroupApi - object-oriented interface\n * @export\n * @class MotionGroupApi\n * @extends {BaseAPI}\n */\nexport class MotionGroupApi extends BaseAPI {\n    /**\n     * Activate the motion group and keeps the motion group in an active status. To activate all motion groups of a robot controller, use this endpoint. It will return all activated motion groups of that controller.  When activating motion groups, it is not possible to interact with the controller in any other way.  To deactivate a motion group, use [deactivateMotionGroup](deactivateMotionGroup).\n     * @summary Activate All\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} controller\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof MotionGroupApi\n     */\n    activateAllMotionGroups(cell, controller, options) {\n        return MotionGroupApiFp(this.configuration).activateAllMotionGroups(cell, controller, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Activate the motion group and keeps the motion group in an active status. To manually activate a motion group, use this endpoint.  When activating a motion group, interacting with the controller in other ways is not possible.  To deactivate a motion group, use [deactivateMotionGroup](deactivateMotionGroup).\n     * @summary Activate\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} motionGroup\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof MotionGroupApi\n     */\n    activateMotionGroup(cell, motionGroup, options) {\n        return MotionGroupApiFp(this.configuration).activateMotionGroup(cell, motionGroup, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Deactivate a motion group. Activate the motion group and keeps the motion group in an active status.  The robot controller streams information about all active motion groups. Deactivate motion groups that you no longer use.  When deactivating motion groups, it is not possible to interact with the controller in any other way.\n     * @summary Deactivate\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} motionGroup The motion-group id.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof MotionGroupApi\n     */\n    deactivateMotionGroup(cell, motionGroup, options) {\n        return MotionGroupApiFp(this.configuration).deactivateMotionGroup(cell, motionGroup, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * List all active motion groups. A motion group is active if it is currently used by a controller.\n     * @summary List Active\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof MotionGroupApi\n     */\n    listMotionGroups(cell, options) {\n        return MotionGroupApiFp(this.configuration).listMotionGroups(cell, options).then((request) => request(this.axios, this.basePath));\n    }\n}\n/**\n * MotionGroupInfosApi - axios parameter creator\n * @export\n */\nexport const MotionGroupInfosApiAxiosParamCreator = function (configuration) {\n    return {\n        /**\n         * Gets the currently selected payload of the motion group. The payload is defined as the sum of all weights attached to the flange/endpoint of the motion group, e.g. sum of the tools and workpiece weight that are currently attached.\n         * @summary Selected Payload\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getActivePayload: async (cell, motionGroup, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('getActivePayload', 'cell', cell);\n            // verify required parameter 'motionGroup' is not null or undefined\n            assertParamExists('getActivePayload', 'motionGroup', motionGroup);\n            const localVarPath = `/cells/{cell}/motion-groups/{motion-group}/payloads/current`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"motion-group\"}}`, encodeURIComponent(String(motionGroup)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Get the internal selected TCP of a connected device.\n         * @summary Selected TCP\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {RotationAngleTypes} [rotationType]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getActiveTcp: async (cell, motionGroup, rotationType, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('getActiveTcp', 'cell', cell);\n            // verify required parameter 'motionGroup' is not null or undefined\n            assertParamExists('getActiveTcp', 'motionGroup', motionGroup);\n            const localVarPath = `/cells/{cell}/motion-groups/{motion-group}/tcps/current`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"motion-group\"}}`, encodeURIComponent(String(motionGroup)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (rotationType !== undefined) {\n                localVarQueryParameter['rotation_type'] = rotationType;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Returns the current state of the selected motion group including the current joint position, velocity, pose, and more.\n         * @summary State of Device\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {string} [tcp] The identifier of the tool center point (TCP) to be used for tcp_pose in response. If not set, the flange pose is returned as tcp_pose.\n         * @param {string} [responseCoordinateSystem] Unique identifier addressing a coordinate system to which the responses should be converted. If not set, world coordinate system is used.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getCurrentMotionGroupState: async (cell, motionGroup, tcp, responseCoordinateSystem, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('getCurrentMotionGroupState', 'cell', cell);\n            // verify required parameter 'motionGroup' is not null or undefined\n            assertParamExists('getCurrentMotionGroupState', 'motionGroup', motionGroup);\n            const localVarPath = `/cells/{cell}/motion-groups/{motion-group}/state`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"motion-group\"}}`, encodeURIComponent(String(motionGroup)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (tcp !== undefined) {\n                localVarQueryParameter['tcp'] = tcp;\n            }\n            if (responseCoordinateSystem !== undefined) {\n                localVarQueryParameter['response_coordinate_system'] = responseCoordinateSystem;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Shows the options the motion group offers in regard to the information service.  Some motion groups may not provide all information services, e.g. some manufacturers don\\'t have a blending zone concept.\n         * @summary Capabilities\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getInfoCapabilities: async (cell, motionGroup, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('getInfoCapabilities', 'cell', cell);\n            // verify required parameter 'motionGroup' is not null or undefined\n            assertParamExists('getInfoCapabilities', 'motionGroup', motionGroup);\n            const localVarPath = `/cells/{cell}/motion-groups/{motion-group}/info-capabilities`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"motion-group\"}}`, encodeURIComponent(String(motionGroup)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Get static properties of the motion group. Those properties are used internally for motion group plannning. Only supported motion groups will return a valid response.\n         * @summary Get Static Properties\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getMotionGroupSpecification: async (cell, motionGroup, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('getMotionGroupSpecification', 'cell', cell);\n            // verify required parameter 'motionGroup' is not null or undefined\n            assertParamExists('getMotionGroupSpecification', 'motionGroup', motionGroup);\n            const localVarPath = `/cells/{cell}/motion-groups/{motion-group}/specification`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"motion-group\"}}`, encodeURIComponent(String(motionGroup)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Returns the configured mounting pose offset in relation to world coordinate system and the motion groups coordinate system.\n         * @summary Device Mounting\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getMounting: async (cell, motionGroup, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('getMounting', 'cell', cell);\n            // verify required parameter 'motionGroup' is not null or undefined\n            assertParamExists('getMounting', 'motionGroup', motionGroup);\n            const localVarPath = `/cells/{cell}/motion-groups/{motion-group}/mounting`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"motion-group\"}}`, encodeURIComponent(String(motionGroup)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * <!-- theme: danger -->  > **Experimental**  Get the complete configuration which can be passed to the planner-optimizer (incl. motion group description, limits etc.)\n         * @summary Optimizer Configuration\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {string} [tcp]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getOptimizerConfiguration: async (cell, motionGroup, tcp, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('getOptimizerConfiguration', 'cell', cell);\n            // verify required parameter 'motionGroup' is not null or undefined\n            assertParamExists('getOptimizerConfiguration', 'motionGroup', motionGroup);\n            const localVarPath = `/cells/{cell}/motion-groups/{motion-group}/optimizer-setup`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"motion-group\"}}`, encodeURIComponent(String(motionGroup)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (tcp !== undefined) {\n                localVarQueryParameter['tcp'] = tcp;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Get the safety setup and limitations of a connected device, which restricts the device. Safety settings are configured globally on the robot controller and are valid for all the connected devices (like robots).\n         * @summary Safety Setup and Limitations\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getSafetySetup: async (cell, motionGroup, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('getSafetySetup', 'cell', cell);\n            // verify required parameter 'motionGroup' is not null or undefined\n            assertParamExists('getSafetySetup', 'motionGroup', motionGroup);\n            const localVarPath = `/cells/{cell}/motion-groups/{motion-group}/safety-setup`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"motion-group\"}}`, encodeURIComponent(String(motionGroup)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Lists all defined payloads of the motion group. The payload is defined as the sum of all weights attached to the flange/endpoint of the motion group, e.g. sum of the tools and workpiece weight that are currently attached.\n         * @summary List Payloads\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listPayloads: async (cell, motionGroup, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('listPayloads', 'cell', cell);\n            // verify required parameter 'motionGroup' is not null or undefined\n            assertParamExists('listPayloads', 'motionGroup', motionGroup);\n            const localVarPath = `/cells/{cell}/motion-groups/{motion-group}/payloads`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"motion-group\"}}`, encodeURIComponent(String(motionGroup)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Get all internal configured TCPs of a connected device.\n         * @summary List TCPs\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {RotationAngleTypes} [rotationType]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listTcps: async (cell, motionGroup, rotationType, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('listTcps', 'cell', cell);\n            // verify required parameter 'motionGroup' is not null or undefined\n            assertParamExists('listTcps', 'motionGroup', motionGroup);\n            const localVarPath = `/cells/{cell}/motion-groups/{motion-group}/tcps`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"motion-group\"}}`, encodeURIComponent(String(motionGroup)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (rotationType !== undefined) {\n                localVarQueryParameter['rotation_type'] = rotationType;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Receive updates of the motion group state. The stream will be closed from the server if the controller is disconnected.\n         * @summary Stream State of Device\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {number} [responseRate] Update rate for the response message in milliseconds (ms). Default is 200 ms. We recommend to use the step rate of the controller or a multiple of the step rate as NOVA updates the state in the controller\\&#39;s step rate as well. Minimal response rate is the step rate of controller.\n         * @param {string} [responseCoordinateSystem] Unique identifier addressing a coordinate system to which the cartesian data of the responses should be converted. Default is the world coordinate system.\n         * @param {string} [tcp] The identifier of the tool center point (TCP) to be used for tcp_pose in response. If not set, the flange pose is returned as tcp_pose.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        streamMotionGroupState: async (cell, motionGroup, responseRate, responseCoordinateSystem, tcp, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('streamMotionGroupState', 'cell', cell);\n            // verify required parameter 'motionGroup' is not null or undefined\n            assertParamExists('streamMotionGroupState', 'motionGroup', motionGroup);\n            const localVarPath = `/cells/{cell}/motion-groups/{motion-group}/state-stream`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"motion-group\"}}`, encodeURIComponent(String(motionGroup)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (responseRate !== undefined) {\n                localVarQueryParameter['response_rate'] = responseRate;\n            }\n            if (responseCoordinateSystem !== undefined) {\n                localVarQueryParameter['response_coordinate_system'] = responseCoordinateSystem;\n            }\n            if (tcp !== undefined) {\n                localVarQueryParameter['tcp'] = tcp;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n    };\n};\n/**\n * MotionGroupInfosApi - functional programming interface\n * @export\n */\nexport const MotionGroupInfosApiFp = function (configuration) {\n    const localVarAxiosParamCreator = MotionGroupInfosApiAxiosParamCreator(configuration);\n    return {\n        /**\n         * Gets the currently selected payload of the motion group. The payload is defined as the sum of all weights attached to the flange/endpoint of the motion group, e.g. sum of the tools and workpiece weight that are currently attached.\n         * @summary Selected Payload\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getActivePayload(cell, motionGroup, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getActivePayload(cell, motionGroup, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['MotionGroupInfosApi.getActivePayload']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Get the internal selected TCP of a connected device.\n         * @summary Selected TCP\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {RotationAngleTypes} [rotationType]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getActiveTcp(cell, motionGroup, rotationType, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getActiveTcp(cell, motionGroup, rotationType, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['MotionGroupInfosApi.getActiveTcp']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Returns the current state of the selected motion group including the current joint position, velocity, pose, and more.\n         * @summary State of Device\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {string} [tcp] The identifier of the tool center point (TCP) to be used for tcp_pose in response. If not set, the flange pose is returned as tcp_pose.\n         * @param {string} [responseCoordinateSystem] Unique identifier addressing a coordinate system to which the responses should be converted. If not set, world coordinate system is used.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getCurrentMotionGroupState(cell, motionGroup, tcp, responseCoordinateSystem, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getCurrentMotionGroupState(cell, motionGroup, tcp, responseCoordinateSystem, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['MotionGroupInfosApi.getCurrentMotionGroupState']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Shows the options the motion group offers in regard to the information service.  Some motion groups may not provide all information services, e.g. some manufacturers don\\'t have a blending zone concept.\n         * @summary Capabilities\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getInfoCapabilities(cell, motionGroup, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getInfoCapabilities(cell, motionGroup, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['MotionGroupInfosApi.getInfoCapabilities']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Get static properties of the motion group. Those properties are used internally for motion group plannning. Only supported motion groups will return a valid response.\n         * @summary Get Static Properties\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getMotionGroupSpecification(cell, motionGroup, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getMotionGroupSpecification(cell, motionGroup, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['MotionGroupInfosApi.getMotionGroupSpecification']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Returns the configured mounting pose offset in relation to world coordinate system and the motion groups coordinate system.\n         * @summary Device Mounting\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getMounting(cell, motionGroup, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getMounting(cell, motionGroup, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['MotionGroupInfosApi.getMounting']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * <!-- theme: danger -->  > **Experimental**  Get the complete configuration which can be passed to the planner-optimizer (incl. motion group description, limits etc.)\n         * @summary Optimizer Configuration\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {string} [tcp]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getOptimizerConfiguration(cell, motionGroup, tcp, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getOptimizerConfiguration(cell, motionGroup, tcp, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['MotionGroupInfosApi.getOptimizerConfiguration']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Get the safety setup and limitations of a connected device, which restricts the device. Safety settings are configured globally on the robot controller and are valid for all the connected devices (like robots).\n         * @summary Safety Setup and Limitations\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getSafetySetup(cell, motionGroup, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getSafetySetup(cell, motionGroup, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['MotionGroupInfosApi.getSafetySetup']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Lists all defined payloads of the motion group. The payload is defined as the sum of all weights attached to the flange/endpoint of the motion group, e.g. sum of the tools and workpiece weight that are currently attached.\n         * @summary List Payloads\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async listPayloads(cell, motionGroup, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.listPayloads(cell, motionGroup, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['MotionGroupInfosApi.listPayloads']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Get all internal configured TCPs of a connected device.\n         * @summary List TCPs\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {RotationAngleTypes} [rotationType]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async listTcps(cell, motionGroup, rotationType, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.listTcps(cell, motionGroup, rotationType, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['MotionGroupInfosApi.listTcps']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Receive updates of the motion group state. The stream will be closed from the server if the controller is disconnected.\n         * @summary Stream State of Device\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {number} [responseRate] Update rate for the response message in milliseconds (ms). Default is 200 ms. We recommend to use the step rate of the controller or a multiple of the step rate as NOVA updates the state in the controller\\&#39;s step rate as well. Minimal response rate is the step rate of controller.\n         * @param {string} [responseCoordinateSystem] Unique identifier addressing a coordinate system to which the cartesian data of the responses should be converted. Default is the world coordinate system.\n         * @param {string} [tcp] The identifier of the tool center point (TCP) to be used for tcp_pose in response. If not set, the flange pose is returned as tcp_pose.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async streamMotionGroupState(cell, motionGroup, responseRate, responseCoordinateSystem, tcp, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.streamMotionGroupState(cell, motionGroup, responseRate, responseCoordinateSystem, tcp, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['MotionGroupInfosApi.streamMotionGroupState']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n    };\n};\n/**\n * MotionGroupInfosApi - factory interface\n * @export\n */\nexport const MotionGroupInfosApiFactory = function (configuration, basePath, axios) {\n    const localVarFp = MotionGroupInfosApiFp(configuration);\n    return {\n        /**\n         * Gets the currently selected payload of the motion group. The payload is defined as the sum of all weights attached to the flange/endpoint of the motion group, e.g. sum of the tools and workpiece weight that are currently attached.\n         * @summary Selected Payload\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getActivePayload(cell, motionGroup, options) {\n            return localVarFp.getActivePayload(cell, motionGroup, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Get the internal selected TCP of a connected device.\n         * @summary Selected TCP\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {RotationAngleTypes} [rotationType]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getActiveTcp(cell, motionGroup, rotationType, options) {\n            return localVarFp.getActiveTcp(cell, motionGroup, rotationType, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Returns the current state of the selected motion group including the current joint position, velocity, pose, and more.\n         * @summary State of Device\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {string} [tcp] The identifier of the tool center point (TCP) to be used for tcp_pose in response. If not set, the flange pose is returned as tcp_pose.\n         * @param {string} [responseCoordinateSystem] Unique identifier addressing a coordinate system to which the responses should be converted. If not set, world coordinate system is used.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getCurrentMotionGroupState(cell, motionGroup, tcp, responseCoordinateSystem, options) {\n            return localVarFp.getCurrentMotionGroupState(cell, motionGroup, tcp, responseCoordinateSystem, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Shows the options the motion group offers in regard to the information service.  Some motion groups may not provide all information services, e.g. some manufacturers don\\'t have a blending zone concept.\n         * @summary Capabilities\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getInfoCapabilities(cell, motionGroup, options) {\n            return localVarFp.getInfoCapabilities(cell, motionGroup, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Get static properties of the motion group. Those properties are used internally for motion group plannning. Only supported motion groups will return a valid response.\n         * @summary Get Static Properties\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getMotionGroupSpecification(cell, motionGroup, options) {\n            return localVarFp.getMotionGroupSpecification(cell, motionGroup, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Returns the configured mounting pose offset in relation to world coordinate system and the motion groups coordinate system.\n         * @summary Device Mounting\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getMounting(cell, motionGroup, options) {\n            return localVarFp.getMounting(cell, motionGroup, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * <!-- theme: danger -->  > **Experimental**  Get the complete configuration which can be passed to the planner-optimizer (incl. motion group description, limits etc.)\n         * @summary Optimizer Configuration\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {string} [tcp]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getOptimizerConfiguration(cell, motionGroup, tcp, options) {\n            return localVarFp.getOptimizerConfiguration(cell, motionGroup, tcp, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Get the safety setup and limitations of a connected device, which restricts the device. Safety settings are configured globally on the robot controller and are valid for all the connected devices (like robots).\n         * @summary Safety Setup and Limitations\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getSafetySetup(cell, motionGroup, options) {\n            return localVarFp.getSafetySetup(cell, motionGroup, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Lists all defined payloads of the motion group. The payload is defined as the sum of all weights attached to the flange/endpoint of the motion group, e.g. sum of the tools and workpiece weight that are currently attached.\n         * @summary List Payloads\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listPayloads(cell, motionGroup, options) {\n            return localVarFp.listPayloads(cell, motionGroup, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Get all internal configured TCPs of a connected device.\n         * @summary List TCPs\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {RotationAngleTypes} [rotationType]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listTcps(cell, motionGroup, rotationType, options) {\n            return localVarFp.listTcps(cell, motionGroup, rotationType, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Receive updates of the motion group state. The stream will be closed from the server if the controller is disconnected.\n         * @summary Stream State of Device\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {number} [responseRate] Update rate for the response message in milliseconds (ms). Default is 200 ms. We recommend to use the step rate of the controller or a multiple of the step rate as NOVA updates the state in the controller\\&#39;s step rate as well. Minimal response rate is the step rate of controller.\n         * @param {string} [responseCoordinateSystem] Unique identifier addressing a coordinate system to which the cartesian data of the responses should be converted. Default is the world coordinate system.\n         * @param {string} [tcp] The identifier of the tool center point (TCP) to be used for tcp_pose in response. If not set, the flange pose is returned as tcp_pose.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        streamMotionGroupState(cell, motionGroup, responseRate, responseCoordinateSystem, tcp, options) {\n            return localVarFp.streamMotionGroupState(cell, motionGroup, responseRate, responseCoordinateSystem, tcp, options).then((request) => request(axios, basePath));\n        },\n    };\n};\n/**\n * MotionGroupInfosApi - object-oriented interface\n * @export\n * @class MotionGroupInfosApi\n * @extends {BaseAPI}\n */\nexport class MotionGroupInfosApi extends BaseAPI {\n    /**\n     * Gets the currently selected payload of the motion group. The payload is defined as the sum of all weights attached to the flange/endpoint of the motion group, e.g. sum of the tools and workpiece weight that are currently attached.\n     * @summary Selected Payload\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} motionGroup The motion-group id.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof MotionGroupInfosApi\n     */\n    getActivePayload(cell, motionGroup, options) {\n        return MotionGroupInfosApiFp(this.configuration).getActivePayload(cell, motionGroup, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Get the internal selected TCP of a connected device.\n     * @summary Selected TCP\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} motionGroup The motion-group id.\n     * @param {RotationAngleTypes} [rotationType]\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof MotionGroupInfosApi\n     */\n    getActiveTcp(cell, motionGroup, rotationType, options) {\n        return MotionGroupInfosApiFp(this.configuration).getActiveTcp(cell, motionGroup, rotationType, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Returns the current state of the selected motion group including the current joint position, velocity, pose, and more.\n     * @summary State of Device\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} motionGroup The motion-group id.\n     * @param {string} [tcp] The identifier of the tool center point (TCP) to be used for tcp_pose in response. If not set, the flange pose is returned as tcp_pose.\n     * @param {string} [responseCoordinateSystem] Unique identifier addressing a coordinate system to which the responses should be converted. If not set, world coordinate system is used.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof MotionGroupInfosApi\n     */\n    getCurrentMotionGroupState(cell, motionGroup, tcp, responseCoordinateSystem, options) {\n        return MotionGroupInfosApiFp(this.configuration).getCurrentMotionGroupState(cell, motionGroup, tcp, responseCoordinateSystem, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Shows the options the motion group offers in regard to the information service.  Some motion groups may not provide all information services, e.g. some manufacturers don\\'t have a blending zone concept.\n     * @summary Capabilities\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} motionGroup The motion-group id.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof MotionGroupInfosApi\n     */\n    getInfoCapabilities(cell, motionGroup, options) {\n        return MotionGroupInfosApiFp(this.configuration).getInfoCapabilities(cell, motionGroup, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Get static properties of the motion group. Those properties are used internally for motion group plannning. Only supported motion groups will return a valid response.\n     * @summary Get Static Properties\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} motionGroup The motion-group id.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof MotionGroupInfosApi\n     */\n    getMotionGroupSpecification(cell, motionGroup, options) {\n        return MotionGroupInfosApiFp(this.configuration).getMotionGroupSpecification(cell, motionGroup, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Returns the configured mounting pose offset in relation to world coordinate system and the motion groups coordinate system.\n     * @summary Device Mounting\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} motionGroup The motion-group id.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof MotionGroupInfosApi\n     */\n    getMounting(cell, motionGroup, options) {\n        return MotionGroupInfosApiFp(this.configuration).getMounting(cell, motionGroup, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * <!-- theme: danger -->  > **Experimental**  Get the complete configuration which can be passed to the planner-optimizer (incl. motion group description, limits etc.)\n     * @summary Optimizer Configuration\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} motionGroup The motion-group id.\n     * @param {string} [tcp]\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof MotionGroupInfosApi\n     */\n    getOptimizerConfiguration(cell, motionGroup, tcp, options) {\n        return MotionGroupInfosApiFp(this.configuration).getOptimizerConfiguration(cell, motionGroup, tcp, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Get the safety setup and limitations of a connected device, which restricts the device. Safety settings are configured globally on the robot controller and are valid for all the connected devices (like robots).\n     * @summary Safety Setup and Limitations\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} motionGroup The motion-group id.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof MotionGroupInfosApi\n     */\n    getSafetySetup(cell, motionGroup, options) {\n        return MotionGroupInfosApiFp(this.configuration).getSafetySetup(cell, motionGroup, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Lists all defined payloads of the motion group. The payload is defined as the sum of all weights attached to the flange/endpoint of the motion group, e.g. sum of the tools and workpiece weight that are currently attached.\n     * @summary List Payloads\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} motionGroup The motion-group id.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof MotionGroupInfosApi\n     */\n    listPayloads(cell, motionGroup, options) {\n        return MotionGroupInfosApiFp(this.configuration).listPayloads(cell, motionGroup, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Get all internal configured TCPs of a connected device.\n     * @summary List TCPs\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} motionGroup The motion-group id.\n     * @param {RotationAngleTypes} [rotationType]\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof MotionGroupInfosApi\n     */\n    listTcps(cell, motionGroup, rotationType, options) {\n        return MotionGroupInfosApiFp(this.configuration).listTcps(cell, motionGroup, rotationType, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Receive updates of the motion group state. The stream will be closed from the server if the controller is disconnected.\n     * @summary Stream State of Device\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} motionGroup The motion-group id.\n     * @param {number} [responseRate] Update rate for the response message in milliseconds (ms). Default is 200 ms. We recommend to use the step rate of the controller or a multiple of the step rate as NOVA updates the state in the controller\\&#39;s step rate as well. Minimal response rate is the step rate of controller.\n     * @param {string} [responseCoordinateSystem] Unique identifier addressing a coordinate system to which the cartesian data of the responses should be converted. Default is the world coordinate system.\n     * @param {string} [tcp] The identifier of the tool center point (TCP) to be used for tcp_pose in response. If not set, the flange pose is returned as tcp_pose.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof MotionGroupInfosApi\n     */\n    streamMotionGroupState(cell, motionGroup, responseRate, responseCoordinateSystem, tcp, options) {\n        return MotionGroupInfosApiFp(this.configuration).streamMotionGroupState(cell, motionGroup, responseRate, responseCoordinateSystem, tcp, options).then((request) => request(this.axios, this.basePath));\n    }\n}\n/**\n * MotionGroupJoggingApi - axios parameter creator\n * @export\n */\nexport const MotionGroupJoggingApiAxiosParamCreator = function (configuration) {\n    return {\n        /**\n         * Move TCP along/around a specified direction vector with a specified velocity via a websocket.  The purpose of a direction jogging motion is to move a device in exactly one direction with a specified maximum velocity. The sign of the velocity determines the direction of the movement: Positive [+] or Negative [-]. The velocity is given in [mm/s]. In contrast to a planned motion, a jogging motion can be changed dynamically while the motion group is in motion.  Only one single client at a time can jog a particular motion group. If another client tries to jog the same motion group at the same time, the second call will fail.  The movement of the motion group will start as soon as: * the motion group is not in motion * the websocket connection is established * the first request has been sent  As long as the jogging motion is ongoing, responses will be sent continuously and contain the current state of the motion group. The responses will be sent with the specified rate according to the *response_rate* parameter of the initial websocket request. While in motion, the desired direction and velocity can be changed by sending a new request to the same websocket. The motion and sending of the replies will stop when: * a [stopJogging](stopJogging) request was received, processed, and the movement stopped   The motion group state will be published in the original command stream until the motion group has stopped. * the client cancels the stream (not recommended, because final stopping position will not be returned from the stream)  When a physical limit (e.g. workspace boundary) is reached, the motion group will stop moving in the desired direction. The stream, howewer, will continue to send the state until the client cancels the stream or sends the [stopJogging](stopJogging) request.  Singularities are avoided during a jogging motion. This avoidance can result in deviations from the specified direction. The amount of deviation depends on the robot type and current velocity. These mechanisms can lead to a small deviation from the specified direction. The size of deviation is depending on robot type and current velocity.   **Usage example:**  1. Open a websocket via python and start the jogging motion: ```bash > python -m websockets \\\"ws://<IP of Wandelbots NOVA API>/api/v1/cells/<your cell id>/motion-groups/move-tcp\\\" ``` 2. Send the following message to the server to move current TCP 2 parts up in z direction and one part in negative y direction with 0.2 mm/s along the specified direction vector: ```json {   \\\"motion_group\\\": \\\"<your motion group id>\\\",   \\\"position_direction\\\": {     \\\"y\\\": -0.5,     \\\"z\\\": 1   },   \\\"rotation_direction\\\": {},   \\\"position_velocity\\\": 0.2,   \\\"response_rate\\\": 500 } ``` The NOVA API clients support jogging motions without the need to manually open a websocket.  > **NOTE** > > If the jogging movement is stopped immediately, ensure that > > - A websocket connection is established. Websockets can be kept open until the robot\\'s movement is done as opposed to a simple HTTP GET request. > > - The motion group is not in motion by another jogging movement or a planned movement.   > **NOTE** > > If the robot does not move, ensure that > > - The joint velocity values are not zero, > > - The motion group is not in a state where it cannot move further (e.g. joint limit reached).  > **NOTE** > > If the specified velocities are higher than the maximum allowed by the robot controller, the motion group will move with the maximum allowed velocities.\n         * @summary Stream Cartesian\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {DirectionJoggingRequest} directionJoggingRequest\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        directionJogging: async (cell, directionJoggingRequest, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('directionJogging', 'cell', cell);\n            // verify required parameter 'directionJoggingRequest' is not null or undefined\n            assertParamExists('directionJogging', 'directionJoggingRequest', directionJoggingRequest);\n            const localVarPath = `/cells/{cell}/motion-groups/move-tcp`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            localVarRequestOptions.data = serializeDataIfNeeded(directionJoggingRequest, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Shows the options the motion group offers in regard to jogging. Some motion groups may not provide all information services, e.g. it is physically not possible to move a one-axis-turntable in a linear way.\n         * @summary Capabilities\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getJoggingCapabilities: async (cell, motionGroup, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('getJoggingCapabilities', 'cell', cell);\n            // verify required parameter 'motionGroup' is not null or undefined\n            assertParamExists('getJoggingCapabilities', 'motionGroup', motionGroup);\n            const localVarPath = `/cells/{cell}/motion-groups/{motion-group}/jogging-capabilities`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"motion-group\"}}`, encodeURIComponent(String(motionGroup)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Move one or more joints of a motion group with specified velocities via a websocket.  The purpose of a joint jogging motion is to maneuver a motion group in one or more joints with a specified velocity for each joint. The sign of the velocity determines the direction of the joint movement. The velocity is given in [rad/s]. In contrast to a planned motion, a jogging motion can be changed dynamically while the motion group is in motion.  Only one single client at a time can jog a particular motion group. If another client tries to jog the same motion group at the same time, the second call will fail.  The movement of the motion group will start as soon as: * the motion group is not in motion * the websocket connection is established * the first request has been sent  As long as the jogging motion is ongoing, responses will be sent continuously and contain the current state of the motion group. The responses will be sent with the specified rate according to the *response_rate* parameter of the initial websocket request. While in motion, the desired joint velocity can be changed by sending a new request to the same websocket. The motion and sending of the replies will stop when: * a [stopJogging](stopJogging) request was received, processed, and the movement stopped   Motion group state will be published in the original command stream until the motion group has fully stopped. * the client cancels the stream (not recommended, because final stopping position will not be returned from the stream)  When a physical limit (e.g. joint limit) is reached, the motion group will stop moving in the desired direction. The stream, howewer, will continue to send the state until the client cancels the stream or sends the [stopJogging](stopJogging) request.  **Usage example:**  1. Open a websocket via python and start the jogging motion: ```bash > python -m websockets \\\"ws://<IP of Wandelbots NOVA API>/api/v1/cells/<your cell id>/motion-groups/move-joint\\\" ``` 2. Send the following message to move with a velocity of 0.1 rad/s (negative) for joint 5 and 0.2 rad/s for joint 6: ```json {   \\\"motion_group\\\": \\\"<your motion group id>\\\",   \\\"joint_velocities\\\": [0, 0, 0, 0, -0.1, 0.2],   \\\"response_rate\\\": 500 } ``` The provided NOVA API clients also natively support jogging motions, without the need to manually open a websocket.  > **NOTE** > > If the jogging movement is stopped immediately, ensure that > > - A websocket connection is established. Websockets can be kept open until the robot\\'s movement is done as opposed to a simple HTTP GET request. > > - The motion group is not in motion by another jogging movement or a planned movement.   > **NOTE** > > If the robot does not move, ensure that > > - The joint velocity values are not zero, > > - The motion group is not in a state where it cannot move further (e.g. joint limit reached).  > **NOTE** > > If the specified velocities are higher than the maximum allowed by the robot controller, the motion group will move with the maximum allowed velocities.\n         * @summary Stream Joints\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {JointJoggingRequest} jointJoggingRequest\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        jointJogging: async (cell, jointJoggingRequest, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('jointJogging', 'cell', cell);\n            // verify required parameter 'jointJoggingRequest' is not null or undefined\n            assertParamExists('jointJogging', 'jointJoggingRequest', jointJoggingRequest);\n            const localVarPath = `/cells/{cell}/motion-groups/move-joint`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            localVarRequestOptions.data = serializeDataIfNeeded(jointJoggingRequest, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Stops an ongoing jogging movement as fast as possible. Until the motion group reaches standstill, it decelerates and keeps the last specified direction.  This call will immediately return even if the deceleration is still in progress. After a stop request has been received, no further updates to the ongoing jogging movement are possible.  State responses will be sent via the jogging stream until the motion group reaches standstill.\n         * @summary Stop\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        stopJogging: async (cell, motionGroup, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('stopJogging', 'cell', cell);\n            // verify required parameter 'motionGroup' is not null or undefined\n            assertParamExists('stopJogging', 'motionGroup', motionGroup);\n            const localVarPath = `/cells/{cell}/motion-groups/{motion-group}/stop`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"motion-group\"}}`, encodeURIComponent(String(motionGroup)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n    };\n};\n/**\n * MotionGroupJoggingApi - functional programming interface\n * @export\n */\nexport const MotionGroupJoggingApiFp = function (configuration) {\n    const localVarAxiosParamCreator = MotionGroupJoggingApiAxiosParamCreator(configuration);\n    return {\n        /**\n         * Move TCP along/around a specified direction vector with a specified velocity via a websocket.  The purpose of a direction jogging motion is to move a device in exactly one direction with a specified maximum velocity. The sign of the velocity determines the direction of the movement: Positive [+] or Negative [-]. The velocity is given in [mm/s]. In contrast to a planned motion, a jogging motion can be changed dynamically while the motion group is in motion.  Only one single client at a time can jog a particular motion group. If another client tries to jog the same motion group at the same time, the second call will fail.  The movement of the motion group will start as soon as: * the motion group is not in motion * the websocket connection is established * the first request has been sent  As long as the jogging motion is ongoing, responses will be sent continuously and contain the current state of the motion group. The responses will be sent with the specified rate according to the *response_rate* parameter of the initial websocket request. While in motion, the desired direction and velocity can be changed by sending a new request to the same websocket. The motion and sending of the replies will stop when: * a [stopJogging](stopJogging) request was received, processed, and the movement stopped   The motion group state will be published in the original command stream until the motion group has stopped. * the client cancels the stream (not recommended, because final stopping position will not be returned from the stream)  When a physical limit (e.g. workspace boundary) is reached, the motion group will stop moving in the desired direction. The stream, howewer, will continue to send the state until the client cancels the stream or sends the [stopJogging](stopJogging) request.  Singularities are avoided during a jogging motion. This avoidance can result in deviations from the specified direction. The amount of deviation depends on the robot type and current velocity. These mechanisms can lead to a small deviation from the specified direction. The size of deviation is depending on robot type and current velocity.   **Usage example:**  1. Open a websocket via python and start the jogging motion: ```bash > python -m websockets \\\"ws://<IP of Wandelbots NOVA API>/api/v1/cells/<your cell id>/motion-groups/move-tcp\\\" ``` 2. Send the following message to the server to move current TCP 2 parts up in z direction and one part in negative y direction with 0.2 mm/s along the specified direction vector: ```json {   \\\"motion_group\\\": \\\"<your motion group id>\\\",   \\\"position_direction\\\": {     \\\"y\\\": -0.5,     \\\"z\\\": 1   },   \\\"rotation_direction\\\": {},   \\\"position_velocity\\\": 0.2,   \\\"response_rate\\\": 500 } ``` The NOVA API clients support jogging motions without the need to manually open a websocket.  > **NOTE** > > If the jogging movement is stopped immediately, ensure that > > - A websocket connection is established. Websockets can be kept open until the robot\\'s movement is done as opposed to a simple HTTP GET request. > > - The motion group is not in motion by another jogging movement or a planned movement.   > **NOTE** > > If the robot does not move, ensure that > > - The joint velocity values are not zero, > > - The motion group is not in a state where it cannot move further (e.g. joint limit reached).  > **NOTE** > > If the specified velocities are higher than the maximum allowed by the robot controller, the motion group will move with the maximum allowed velocities.\n         * @summary Stream Cartesian\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {DirectionJoggingRequest} directionJoggingRequest\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async directionJogging(cell, directionJoggingRequest, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.directionJogging(cell, directionJoggingRequest, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['MotionGroupJoggingApi.directionJogging']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Shows the options the motion group offers in regard to jogging. Some motion groups may not provide all information services, e.g. it is physically not possible to move a one-axis-turntable in a linear way.\n         * @summary Capabilities\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getJoggingCapabilities(cell, motionGroup, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getJoggingCapabilities(cell, motionGroup, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['MotionGroupJoggingApi.getJoggingCapabilities']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Move one or more joints of a motion group with specified velocities via a websocket.  The purpose of a joint jogging motion is to maneuver a motion group in one or more joints with a specified velocity for each joint. The sign of the velocity determines the direction of the joint movement. The velocity is given in [rad/s]. In contrast to a planned motion, a jogging motion can be changed dynamically while the motion group is in motion.  Only one single client at a time can jog a particular motion group. If another client tries to jog the same motion group at the same time, the second call will fail.  The movement of the motion group will start as soon as: * the motion group is not in motion * the websocket connection is established * the first request has been sent  As long as the jogging motion is ongoing, responses will be sent continuously and contain the current state of the motion group. The responses will be sent with the specified rate according to the *response_rate* parameter of the initial websocket request. While in motion, the desired joint velocity can be changed by sending a new request to the same websocket. The motion and sending of the replies will stop when: * a [stopJogging](stopJogging) request was received, processed, and the movement stopped   Motion group state will be published in the original command stream until the motion group has fully stopped. * the client cancels the stream (not recommended, because final stopping position will not be returned from the stream)  When a physical limit (e.g. joint limit) is reached, the motion group will stop moving in the desired direction. The stream, howewer, will continue to send the state until the client cancels the stream or sends the [stopJogging](stopJogging) request.  **Usage example:**  1. Open a websocket via python and start the jogging motion: ```bash > python -m websockets \\\"ws://<IP of Wandelbots NOVA API>/api/v1/cells/<your cell id>/motion-groups/move-joint\\\" ``` 2. Send the following message to move with a velocity of 0.1 rad/s (negative) for joint 5 and 0.2 rad/s for joint 6: ```json {   \\\"motion_group\\\": \\\"<your motion group id>\\\",   \\\"joint_velocities\\\": [0, 0, 0, 0, -0.1, 0.2],   \\\"response_rate\\\": 500 } ``` The provided NOVA API clients also natively support jogging motions, without the need to manually open a websocket.  > **NOTE** > > If the jogging movement is stopped immediately, ensure that > > - A websocket connection is established. Websockets can be kept open until the robot\\'s movement is done as opposed to a simple HTTP GET request. > > - The motion group is not in motion by another jogging movement or a planned movement.   > **NOTE** > > If the robot does not move, ensure that > > - The joint velocity values are not zero, > > - The motion group is not in a state where it cannot move further (e.g. joint limit reached).  > **NOTE** > > If the specified velocities are higher than the maximum allowed by the robot controller, the motion group will move with the maximum allowed velocities.\n         * @summary Stream Joints\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {JointJoggingRequest} jointJoggingRequest\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async jointJogging(cell, jointJoggingRequest, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.jointJogging(cell, jointJoggingRequest, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['MotionGroupJoggingApi.jointJogging']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Stops an ongoing jogging movement as fast as possible. Until the motion group reaches standstill, it decelerates and keeps the last specified direction.  This call will immediately return even if the deceleration is still in progress. After a stop request has been received, no further updates to the ongoing jogging movement are possible.  State responses will be sent via the jogging stream until the motion group reaches standstill.\n         * @summary Stop\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async stopJogging(cell, motionGroup, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.stopJogging(cell, motionGroup, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['MotionGroupJoggingApi.stopJogging']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n    };\n};\n/**\n * MotionGroupJoggingApi - factory interface\n * @export\n */\nexport const MotionGroupJoggingApiFactory = function (configuration, basePath, axios) {\n    const localVarFp = MotionGroupJoggingApiFp(configuration);\n    return {\n        /**\n         * Move TCP along/around a specified direction vector with a specified velocity via a websocket.  The purpose of a direction jogging motion is to move a device in exactly one direction with a specified maximum velocity. The sign of the velocity determines the direction of the movement: Positive [+] or Negative [-]. The velocity is given in [mm/s]. In contrast to a planned motion, a jogging motion can be changed dynamically while the motion group is in motion.  Only one single client at a time can jog a particular motion group. If another client tries to jog the same motion group at the same time, the second call will fail.  The movement of the motion group will start as soon as: * the motion group is not in motion * the websocket connection is established * the first request has been sent  As long as the jogging motion is ongoing, responses will be sent continuously and contain the current state of the motion group. The responses will be sent with the specified rate according to the *response_rate* parameter of the initial websocket request. While in motion, the desired direction and velocity can be changed by sending a new request to the same websocket. The motion and sending of the replies will stop when: * a [stopJogging](stopJogging) request was received, processed, and the movement stopped   The motion group state will be published in the original command stream until the motion group has stopped. * the client cancels the stream (not recommended, because final stopping position will not be returned from the stream)  When a physical limit (e.g. workspace boundary) is reached, the motion group will stop moving in the desired direction. The stream, howewer, will continue to send the state until the client cancels the stream or sends the [stopJogging](stopJogging) request.  Singularities are avoided during a jogging motion. This avoidance can result in deviations from the specified direction. The amount of deviation depends on the robot type and current velocity. These mechanisms can lead to a small deviation from the specified direction. The size of deviation is depending on robot type and current velocity.   **Usage example:**  1. Open a websocket via python and start the jogging motion: ```bash > python -m websockets \\\"ws://<IP of Wandelbots NOVA API>/api/v1/cells/<your cell id>/motion-groups/move-tcp\\\" ``` 2. Send the following message to the server to move current TCP 2 parts up in z direction and one part in negative y direction with 0.2 mm/s along the specified direction vector: ```json {   \\\"motion_group\\\": \\\"<your motion group id>\\\",   \\\"position_direction\\\": {     \\\"y\\\": -0.5,     \\\"z\\\": 1   },   \\\"rotation_direction\\\": {},   \\\"position_velocity\\\": 0.2,   \\\"response_rate\\\": 500 } ``` The NOVA API clients support jogging motions without the need to manually open a websocket.  > **NOTE** > > If the jogging movement is stopped immediately, ensure that > > - A websocket connection is established. Websockets can be kept open until the robot\\'s movement is done as opposed to a simple HTTP GET request. > > - The motion group is not in motion by another jogging movement or a planned movement.   > **NOTE** > > If the robot does not move, ensure that > > - The joint velocity values are not zero, > > - The motion group is not in a state where it cannot move further (e.g. joint limit reached).  > **NOTE** > > If the specified velocities are higher than the maximum allowed by the robot controller, the motion group will move with the maximum allowed velocities.\n         * @summary Stream Cartesian\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {DirectionJoggingRequest} directionJoggingRequest\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        directionJogging(cell, directionJoggingRequest, options) {\n            return localVarFp.directionJogging(cell, directionJoggingRequest, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Shows the options the motion group offers in regard to jogging. Some motion groups may not provide all information services, e.g. it is physically not possible to move a one-axis-turntable in a linear way.\n         * @summary Capabilities\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getJoggingCapabilities(cell, motionGroup, options) {\n            return localVarFp.getJoggingCapabilities(cell, motionGroup, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Move one or more joints of a motion group with specified velocities via a websocket.  The purpose of a joint jogging motion is to maneuver a motion group in one or more joints with a specified velocity for each joint. The sign of the velocity determines the direction of the joint movement. The velocity is given in [rad/s]. In contrast to a planned motion, a jogging motion can be changed dynamically while the motion group is in motion.  Only one single client at a time can jog a particular motion group. If another client tries to jog the same motion group at the same time, the second call will fail.  The movement of the motion group will start as soon as: * the motion group is not in motion * the websocket connection is established * the first request has been sent  As long as the jogging motion is ongoing, responses will be sent continuously and contain the current state of the motion group. The responses will be sent with the specified rate according to the *response_rate* parameter of the initial websocket request. While in motion, the desired joint velocity can be changed by sending a new request to the same websocket. The motion and sending of the replies will stop when: * a [stopJogging](stopJogging) request was received, processed, and the movement stopped   Motion group state will be published in the original command stream until the motion group has fully stopped. * the client cancels the stream (not recommended, because final stopping position will not be returned from the stream)  When a physical limit (e.g. joint limit) is reached, the motion group will stop moving in the desired direction. The stream, howewer, will continue to send the state until the client cancels the stream or sends the [stopJogging](stopJogging) request.  **Usage example:**  1. Open a websocket via python and start the jogging motion: ```bash > python -m websockets \\\"ws://<IP of Wandelbots NOVA API>/api/v1/cells/<your cell id>/motion-groups/move-joint\\\" ``` 2. Send the following message to move with a velocity of 0.1 rad/s (negative) for joint 5 and 0.2 rad/s for joint 6: ```json {   \\\"motion_group\\\": \\\"<your motion group id>\\\",   \\\"joint_velocities\\\": [0, 0, 0, 0, -0.1, 0.2],   \\\"response_rate\\\": 500 } ``` The provided NOVA API clients also natively support jogging motions, without the need to manually open a websocket.  > **NOTE** > > If the jogging movement is stopped immediately, ensure that > > - A websocket connection is established. Websockets can be kept open until the robot\\'s movement is done as opposed to a simple HTTP GET request. > > - The motion group is not in motion by another jogging movement or a planned movement.   > **NOTE** > > If the robot does not move, ensure that > > - The joint velocity values are not zero, > > - The motion group is not in a state where it cannot move further (e.g. joint limit reached).  > **NOTE** > > If the specified velocities are higher than the maximum allowed by the robot controller, the motion group will move with the maximum allowed velocities.\n         * @summary Stream Joints\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {JointJoggingRequest} jointJoggingRequest\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        jointJogging(cell, jointJoggingRequest, options) {\n            return localVarFp.jointJogging(cell, jointJoggingRequest, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Stops an ongoing jogging movement as fast as possible. Until the motion group reaches standstill, it decelerates and keeps the last specified direction.  This call will immediately return even if the deceleration is still in progress. After a stop request has been received, no further updates to the ongoing jogging movement are possible.  State responses will be sent via the jogging stream until the motion group reaches standstill.\n         * @summary Stop\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        stopJogging(cell, motionGroup, options) {\n            return localVarFp.stopJogging(cell, motionGroup, options).then((request) => request(axios, basePath));\n        },\n    };\n};\n/**\n * MotionGroupJoggingApi - object-oriented interface\n * @export\n * @class MotionGroupJoggingApi\n * @extends {BaseAPI}\n */\nexport class MotionGroupJoggingApi extends BaseAPI {\n    /**\n     * Move TCP along/around a specified direction vector with a specified velocity via a websocket.  The purpose of a direction jogging motion is to move a device in exactly one direction with a specified maximum velocity. The sign of the velocity determines the direction of the movement: Positive [+] or Negative [-]. The velocity is given in [mm/s]. In contrast to a planned motion, a jogging motion can be changed dynamically while the motion group is in motion.  Only one single client at a time can jog a particular motion group. If another client tries to jog the same motion group at the same time, the second call will fail.  The movement of the motion group will start as soon as: * the motion group is not in motion * the websocket connection is established * the first request has been sent  As long as the jogging motion is ongoing, responses will be sent continuously and contain the current state of the motion group. The responses will be sent with the specified rate according to the *response_rate* parameter of the initial websocket request. While in motion, the desired direction and velocity can be changed by sending a new request to the same websocket. The motion and sending of the replies will stop when: * a [stopJogging](stopJogging) request was received, processed, and the movement stopped   The motion group state will be published in the original command stream until the motion group has stopped. * the client cancels the stream (not recommended, because final stopping position will not be returned from the stream)  When a physical limit (e.g. workspace boundary) is reached, the motion group will stop moving in the desired direction. The stream, howewer, will continue to send the state until the client cancels the stream or sends the [stopJogging](stopJogging) request.  Singularities are avoided during a jogging motion. This avoidance can result in deviations from the specified direction. The amount of deviation depends on the robot type and current velocity. These mechanisms can lead to a small deviation from the specified direction. The size of deviation is depending on robot type and current velocity.   **Usage example:**  1. Open a websocket via python and start the jogging motion: ```bash > python -m websockets \\\"ws://<IP of Wandelbots NOVA API>/api/v1/cells/<your cell id>/motion-groups/move-tcp\\\" ``` 2. Send the following message to the server to move current TCP 2 parts up in z direction and one part in negative y direction with 0.2 mm/s along the specified direction vector: ```json {   \\\"motion_group\\\": \\\"<your motion group id>\\\",   \\\"position_direction\\\": {     \\\"y\\\": -0.5,     \\\"z\\\": 1   },   \\\"rotation_direction\\\": {},   \\\"position_velocity\\\": 0.2,   \\\"response_rate\\\": 500 } ``` The NOVA API clients support jogging motions without the need to manually open a websocket.  > **NOTE** > > If the jogging movement is stopped immediately, ensure that > > - A websocket connection is established. Websockets can be kept open until the robot\\'s movement is done as opposed to a simple HTTP GET request. > > - The motion group is not in motion by another jogging movement or a planned movement.   > **NOTE** > > If the robot does not move, ensure that > > - The joint velocity values are not zero, > > - The motion group is not in a state where it cannot move further (e.g. joint limit reached).  > **NOTE** > > If the specified velocities are higher than the maximum allowed by the robot controller, the motion group will move with the maximum allowed velocities.\n     * @summary Stream Cartesian\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {DirectionJoggingRequest} directionJoggingRequest\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof MotionGroupJoggingApi\n     */\n    directionJogging(cell, directionJoggingRequest, options) {\n        return MotionGroupJoggingApiFp(this.configuration).directionJogging(cell, directionJoggingRequest, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Shows the options the motion group offers in regard to jogging. Some motion groups may not provide all information services, e.g. it is physically not possible to move a one-axis-turntable in a linear way.\n     * @summary Capabilities\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} motionGroup The motion-group id.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof MotionGroupJoggingApi\n     */\n    getJoggingCapabilities(cell, motionGroup, options) {\n        return MotionGroupJoggingApiFp(this.configuration).getJoggingCapabilities(cell, motionGroup, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Move one or more joints of a motion group with specified velocities via a websocket.  The purpose of a joint jogging motion is to maneuver a motion group in one or more joints with a specified velocity for each joint. The sign of the velocity determines the direction of the joint movement. The velocity is given in [rad/s]. In contrast to a planned motion, a jogging motion can be changed dynamically while the motion group is in motion.  Only one single client at a time can jog a particular motion group. If another client tries to jog the same motion group at the same time, the second call will fail.  The movement of the motion group will start as soon as: * the motion group is not in motion * the websocket connection is established * the first request has been sent  As long as the jogging motion is ongoing, responses will be sent continuously and contain the current state of the motion group. The responses will be sent with the specified rate according to the *response_rate* parameter of the initial websocket request. While in motion, the desired joint velocity can be changed by sending a new request to the same websocket. The motion and sending of the replies will stop when: * a [stopJogging](stopJogging) request was received, processed, and the movement stopped   Motion group state will be published in the original command stream until the motion group has fully stopped. * the client cancels the stream (not recommended, because final stopping position will not be returned from the stream)  When a physical limit (e.g. joint limit) is reached, the motion group will stop moving in the desired direction. The stream, howewer, will continue to send the state until the client cancels the stream or sends the [stopJogging](stopJogging) request.  **Usage example:**  1. Open a websocket via python and start the jogging motion: ```bash > python -m websockets \\\"ws://<IP of Wandelbots NOVA API>/api/v1/cells/<your cell id>/motion-groups/move-joint\\\" ``` 2. Send the following message to move with a velocity of 0.1 rad/s (negative) for joint 5 and 0.2 rad/s for joint 6: ```json {   \\\"motion_group\\\": \\\"<your motion group id>\\\",   \\\"joint_velocities\\\": [0, 0, 0, 0, -0.1, 0.2],   \\\"response_rate\\\": 500 } ``` The provided NOVA API clients also natively support jogging motions, without the need to manually open a websocket.  > **NOTE** > > If the jogging movement is stopped immediately, ensure that > > - A websocket connection is established. Websockets can be kept open until the robot\\'s movement is done as opposed to a simple HTTP GET request. > > - The motion group is not in motion by another jogging movement or a planned movement.   > **NOTE** > > If the robot does not move, ensure that > > - The joint velocity values are not zero, > > - The motion group is not in a state where it cannot move further (e.g. joint limit reached).  > **NOTE** > > If the specified velocities are higher than the maximum allowed by the robot controller, the motion group will move with the maximum allowed velocities.\n     * @summary Stream Joints\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {JointJoggingRequest} jointJoggingRequest\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof MotionGroupJoggingApi\n     */\n    jointJogging(cell, jointJoggingRequest, options) {\n        return MotionGroupJoggingApiFp(this.configuration).jointJogging(cell, jointJoggingRequest, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Stops an ongoing jogging movement as fast as possible. Until the motion group reaches standstill, it decelerates and keeps the last specified direction.  This call will immediately return even if the deceleration is still in progress. After a stop request has been received, no further updates to the ongoing jogging movement are possible.  State responses will be sent via the jogging stream until the motion group reaches standstill.\n     * @summary Stop\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} motionGroup The motion-group id.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof MotionGroupJoggingApi\n     */\n    stopJogging(cell, motionGroup, options) {\n        return MotionGroupJoggingApiFp(this.configuration).stopJogging(cell, motionGroup, options).then((request) => request(this.axios, this.basePath));\n    }\n}\n/**\n * MotionGroupKinematicApi - axios parameter creator\n * @export\n */\nexport const MotionGroupKinematicApiAxiosParamCreator = function (configuration) {\n    return {\n        /**\n         * Calculate the joint positions of a motion group in order to move its TCP to a specific pose (Inverse Kinematic Solutions). All solutions are within the configured joint limits of the robot and not in a singular position of the robot.  Return all joint positions as list of distinct joint positions in [rad] with their respective inverse feedback.  Will be empty when unreachable, e.g. outside joint position limits, singular.  Does not include multiple solutions where the robot links are in the same postition. Those can occur when single joints are allowed to move in a range larger than 360 degrees.\n         * @summary All Joint Positions from TCP Pose\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {AllJointPositionsRequest} allJointPositionsRequest\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        calculateAllInverseKinematic: async (cell, motionGroup, allJointPositionsRequest, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('calculateAllInverseKinematic', 'cell', cell);\n            // verify required parameter 'motionGroup' is not null or undefined\n            assertParamExists('calculateAllInverseKinematic', 'motionGroup', motionGroup);\n            // verify required parameter 'allJointPositionsRequest' is not null or undefined\n            assertParamExists('calculateAllInverseKinematic', 'allJointPositionsRequest', allJointPositionsRequest);\n            const localVarPath = `/cells/{cell}/motion-groups/{motion-group}/kinematic/calculate-all-joint-positions`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"motion-group\"}}`, encodeURIComponent(String(motionGroup)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            localVarRequestOptions.data = serializeDataIfNeeded(allJointPositionsRequest, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Calculates the TCP pose from a joint position sample using the forward kinematics of the motion-group.\n         * @summary TcpPose from JointPosition\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {TcpPoseRequest} tcpPoseRequest\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        calculateForwardKinematic: async (cell, motionGroup, tcpPoseRequest, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('calculateForwardKinematic', 'cell', cell);\n            // verify required parameter 'motionGroup' is not null or undefined\n            assertParamExists('calculateForwardKinematic', 'motionGroup', motionGroup);\n            // verify required parameter 'tcpPoseRequest' is not null or undefined\n            assertParamExists('calculateForwardKinematic', 'tcpPoseRequest', tcpPoseRequest);\n            const localVarPath = `/cells/{cell}/motion-groups/{motion-group}/kinematic/calculate-tcp-pose`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"motion-group\"}}`, encodeURIComponent(String(motionGroup)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            localVarRequestOptions.data = serializeDataIfNeeded(tcpPoseRequest, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Calculate the joint positions the motion-group needs to apply for its TCP to be in a specified pose (Inverse Kinematic Solution).  If multiple solutions are found, the one nearest to the given specified joint position is picked. * For all supported robot models, except the Fanuc CRX line, the returned joint position is guaranteed to have the same configuration (often referred to as ELBOW_UP, WRIST_DOWN, SHOULDER_RIGHT, f.e.) as the specified reference joint position. If the position limit of any single joint allows it to be in a range larger than 2 PI, the respective joint value in the result will be as close as possible to its reference value. * For the Fanuc CRX line the solution is selected to have the smallest distance measured by the norm of its difference to the reference joint position.  The returned joint position is guaranteed to be within the joint limits and not in a singular position of the robot.\n         * @summary Nearest JointPosition from TcpPose\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {JointPositionRequest} jointPositionRequest\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        calculateInverseKinematic: async (cell, motionGroup, jointPositionRequest, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('calculateInverseKinematic', 'cell', cell);\n            // verify required parameter 'motionGroup' is not null or undefined\n            assertParamExists('calculateInverseKinematic', 'motionGroup', motionGroup);\n            // verify required parameter 'jointPositionRequest' is not null or undefined\n            assertParamExists('calculateInverseKinematic', 'jointPositionRequest', jointPositionRequest);\n            const localVarPath = `/cells/{cell}/motion-groups/{motion-group}/kinematic/calculate-joint-position`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"motion-group\"}}`, encodeURIComponent(String(motionGroup)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            localVarRequestOptions.data = serializeDataIfNeeded(jointPositionRequest, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Get the kinematic endpoints provided for the specified motion-group.\n         * @summary Capabilities\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getKinematicCapabilities: async (cell, motionGroup, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('getKinematicCapabilities', 'cell', cell);\n            // verify required parameter 'motionGroup' is not null or undefined\n            assertParamExists('getKinematicCapabilities', 'motionGroup', motionGroup);\n            const localVarPath = `/cells/{cell}/motion-groups/{motion-group}/kinematic-capabilities`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"motion-group\"}}`, encodeURIComponent(String(motionGroup)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n    };\n};\n/**\n * MotionGroupKinematicApi - functional programming interface\n * @export\n */\nexport const MotionGroupKinematicApiFp = function (configuration) {\n    const localVarAxiosParamCreator = MotionGroupKinematicApiAxiosParamCreator(configuration);\n    return {\n        /**\n         * Calculate the joint positions of a motion group in order to move its TCP to a specific pose (Inverse Kinematic Solutions). All solutions are within the configured joint limits of the robot and not in a singular position of the robot.  Return all joint positions as list of distinct joint positions in [rad] with their respective inverse feedback.  Will be empty when unreachable, e.g. outside joint position limits, singular.  Does not include multiple solutions where the robot links are in the same postition. Those can occur when single joints are allowed to move in a range larger than 360 degrees.\n         * @summary All Joint Positions from TCP Pose\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {AllJointPositionsRequest} allJointPositionsRequest\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async calculateAllInverseKinematic(cell, motionGroup, allJointPositionsRequest, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.calculateAllInverseKinematic(cell, motionGroup, allJointPositionsRequest, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['MotionGroupKinematicApi.calculateAllInverseKinematic']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Calculates the TCP pose from a joint position sample using the forward kinematics of the motion-group.\n         * @summary TcpPose from JointPosition\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {TcpPoseRequest} tcpPoseRequest\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async calculateForwardKinematic(cell, motionGroup, tcpPoseRequest, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.calculateForwardKinematic(cell, motionGroup, tcpPoseRequest, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['MotionGroupKinematicApi.calculateForwardKinematic']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Calculate the joint positions the motion-group needs to apply for its TCP to be in a specified pose (Inverse Kinematic Solution).  If multiple solutions are found, the one nearest to the given specified joint position is picked. * For all supported robot models, except the Fanuc CRX line, the returned joint position is guaranteed to have the same configuration (often referred to as ELBOW_UP, WRIST_DOWN, SHOULDER_RIGHT, f.e.) as the specified reference joint position. If the position limit of any single joint allows it to be in a range larger than 2 PI, the respective joint value in the result will be as close as possible to its reference value. * For the Fanuc CRX line the solution is selected to have the smallest distance measured by the norm of its difference to the reference joint position.  The returned joint position is guaranteed to be within the joint limits and not in a singular position of the robot.\n         * @summary Nearest JointPosition from TcpPose\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {JointPositionRequest} jointPositionRequest\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async calculateInverseKinematic(cell, motionGroup, jointPositionRequest, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.calculateInverseKinematic(cell, motionGroup, jointPositionRequest, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['MotionGroupKinematicApi.calculateInverseKinematic']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Get the kinematic endpoints provided for the specified motion-group.\n         * @summary Capabilities\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getKinematicCapabilities(cell, motionGroup, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getKinematicCapabilities(cell, motionGroup, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['MotionGroupKinematicApi.getKinematicCapabilities']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n    };\n};\n/**\n * MotionGroupKinematicApi - factory interface\n * @export\n */\nexport const MotionGroupKinematicApiFactory = function (configuration, basePath, axios) {\n    const localVarFp = MotionGroupKinematicApiFp(configuration);\n    return {\n        /**\n         * Calculate the joint positions of a motion group in order to move its TCP to a specific pose (Inverse Kinematic Solutions). All solutions are within the configured joint limits of the robot and not in a singular position of the robot.  Return all joint positions as list of distinct joint positions in [rad] with their respective inverse feedback.  Will be empty when unreachable, e.g. outside joint position limits, singular.  Does not include multiple solutions where the robot links are in the same postition. Those can occur when single joints are allowed to move in a range larger than 360 degrees.\n         * @summary All Joint Positions from TCP Pose\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {AllJointPositionsRequest} allJointPositionsRequest\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        calculateAllInverseKinematic(cell, motionGroup, allJointPositionsRequest, options) {\n            return localVarFp.calculateAllInverseKinematic(cell, motionGroup, allJointPositionsRequest, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Calculates the TCP pose from a joint position sample using the forward kinematics of the motion-group.\n         * @summary TcpPose from JointPosition\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {TcpPoseRequest} tcpPoseRequest\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        calculateForwardKinematic(cell, motionGroup, tcpPoseRequest, options) {\n            return localVarFp.calculateForwardKinematic(cell, motionGroup, tcpPoseRequest, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Calculate the joint positions the motion-group needs to apply for its TCP to be in a specified pose (Inverse Kinematic Solution).  If multiple solutions are found, the one nearest to the given specified joint position is picked. * For all supported robot models, except the Fanuc CRX line, the returned joint position is guaranteed to have the same configuration (often referred to as ELBOW_UP, WRIST_DOWN, SHOULDER_RIGHT, f.e.) as the specified reference joint position. If the position limit of any single joint allows it to be in a range larger than 2 PI, the respective joint value in the result will be as close as possible to its reference value. * For the Fanuc CRX line the solution is selected to have the smallest distance measured by the norm of its difference to the reference joint position.  The returned joint position is guaranteed to be within the joint limits and not in a singular position of the robot.\n         * @summary Nearest JointPosition from TcpPose\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {JointPositionRequest} jointPositionRequest\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        calculateInverseKinematic(cell, motionGroup, jointPositionRequest, options) {\n            return localVarFp.calculateInverseKinematic(cell, motionGroup, jointPositionRequest, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Get the kinematic endpoints provided for the specified motion-group.\n         * @summary Capabilities\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} motionGroup The motion-group id.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getKinematicCapabilities(cell, motionGroup, options) {\n            return localVarFp.getKinematicCapabilities(cell, motionGroup, options).then((request) => request(axios, basePath));\n        },\n    };\n};\n/**\n * MotionGroupKinematicApi - object-oriented interface\n * @export\n * @class MotionGroupKinematicApi\n * @extends {BaseAPI}\n */\nexport class MotionGroupKinematicApi extends BaseAPI {\n    /**\n     * Calculate the joint positions of a motion group in order to move its TCP to a specific pose (Inverse Kinematic Solutions). All solutions are within the configured joint limits of the robot and not in a singular position of the robot.  Return all joint positions as list of distinct joint positions in [rad] with their respective inverse feedback.  Will be empty when unreachable, e.g. outside joint position limits, singular.  Does not include multiple solutions where the robot links are in the same postition. Those can occur when single joints are allowed to move in a range larger than 360 degrees.\n     * @summary All Joint Positions from TCP Pose\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} motionGroup The motion-group id.\n     * @param {AllJointPositionsRequest} allJointPositionsRequest\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof MotionGroupKinematicApi\n     */\n    calculateAllInverseKinematic(cell, motionGroup, allJointPositionsRequest, options) {\n        return MotionGroupKinematicApiFp(this.configuration).calculateAllInverseKinematic(cell, motionGroup, allJointPositionsRequest, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Calculates the TCP pose from a joint position sample using the forward kinematics of the motion-group.\n     * @summary TcpPose from JointPosition\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} motionGroup The motion-group id.\n     * @param {TcpPoseRequest} tcpPoseRequest\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof MotionGroupKinematicApi\n     */\n    calculateForwardKinematic(cell, motionGroup, tcpPoseRequest, options) {\n        return MotionGroupKinematicApiFp(this.configuration).calculateForwardKinematic(cell, motionGroup, tcpPoseRequest, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Calculate the joint positions the motion-group needs to apply for its TCP to be in a specified pose (Inverse Kinematic Solution).  If multiple solutions are found, the one nearest to the given specified joint position is picked. * For all supported robot models, except the Fanuc CRX line, the returned joint position is guaranteed to have the same configuration (often referred to as ELBOW_UP, WRIST_DOWN, SHOULDER_RIGHT, f.e.) as the specified reference joint position. If the position limit of any single joint allows it to be in a range larger than 2 PI, the respective joint value in the result will be as close as possible to its reference value. * For the Fanuc CRX line the solution is selected to have the smallest distance measured by the norm of its difference to the reference joint position.  The returned joint position is guaranteed to be within the joint limits and not in a singular position of the robot.\n     * @summary Nearest JointPosition from TcpPose\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} motionGroup The motion-group id.\n     * @param {JointPositionRequest} jointPositionRequest\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof MotionGroupKinematicApi\n     */\n    calculateInverseKinematic(cell, motionGroup, jointPositionRequest, options) {\n        return MotionGroupKinematicApiFp(this.configuration).calculateInverseKinematic(cell, motionGroup, jointPositionRequest, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Get the kinematic endpoints provided for the specified motion-group.\n     * @summary Capabilities\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} motionGroup The motion-group id.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof MotionGroupKinematicApi\n     */\n    getKinematicCapabilities(cell, motionGroup, options) {\n        return MotionGroupKinematicApiFp(this.configuration).getKinematicCapabilities(cell, motionGroup, options).then((request) => request(this.axios, this.basePath));\n    }\n}\n/**\n * ProgramApi - axios parameter creator\n * @export\n */\nexport const ProgramApiAxiosParamCreator = function (configuration) {\n    return {\n        /**\n         * This endpoint accepts a program written in Wandelscript and if desired, initial arguments (in the form of a dict). It will then execute this Wandelscript asynchronously. It returns a program runner reference which can be used to query the state of the program runner.  ## Parameters See the **Schema** tab for information about the request body.  ## Returns A program runner reference which can be used to query the state of the program runner.  ## Receiving state updates Receive state updates of the program runner via polling the `/programs/runners/{runner_id}/`  ### Via polling You can receive updates about the state of the program runner by polling the `/programs/runners/{runner_id}/` endpoint. ```\n         * @summary Create Program Runner\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {Request} request\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createProgramRunner: async (cell, request, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('createProgramRunner', 'cell', cell);\n            // verify required parameter 'request' is not null or undefined\n            assertParamExists('createProgramRunner', 'request', request);\n            const localVarPath = `/cells/{cell}/programs/runners`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'text/plain';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            localVarRequestOptions.data = serializeDataIfNeeded(request, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Execute a program in Wandelscript. The Wandelscript can also move multiple robots by using the \\'do with\\' syntax.  The execute operation will be started from the current joint configuration of any addressed robot(s).  Addressed robots have to be in control mode for the execute operation to succeed.  A request to this endpoint will block this endpoint until the program has been executed, or until an error occurs.  The executed movement is returned in case of a succesful execution. Otherwise an error (e.g. out of reach, singularity), is returned.  The Wandelscript can either be submitted as is, using Content-type text/plain, or as content-type application/json with the Wandelscript under \\\"code\\\" alongside a set of values provided under \\\"initial_state\\\".  * [WandelEngine & Wandelscript Documentation](/docs/docs/wandelscript)\n         * @summary Execute Program\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {CodeWithArguments} codeWithArguments\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        executeProgram: async (cell, codeWithArguments, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('executeProgram', 'cell', cell);\n            // verify required parameter 'codeWithArguments' is not null or undefined\n            assertParamExists('executeProgram', 'codeWithArguments', codeWithArguments);\n            const localVarPath = `/cells/{cell}/programs/execute`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            localVarRequestOptions.data = serializeDataIfNeeded(codeWithArguments, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Returns information about a program currently executed.  When a program is finished: Program response, result, collected Wandelscript logs, etc.  When a program is running: Running status, current executed line, etc.  ## Parameters - **runner_id**: The id of the program runner\n         * @summary Get Program Runner\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} runner\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getProgramRunner: async (cell, runner, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('getProgramRunner', 'cell', cell);\n            // verify required parameter 'runner' is not null or undefined\n            assertParamExists('getProgramRunner', 'runner', runner);\n            const localVarPath = `/cells/{cell}/programs/runners/{runner}`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"runner\"}}`, encodeURIComponent(String(runner)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Get details about all existing program runners.\n         * @summary List Program Runners\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listProgramRunners: async (cell, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('listProgramRunners', 'cell', cell);\n            const localVarPath = `/cells/{cell}/programs/runners`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Migrate a program  ## Parameters See the **Schema** tab for information about the request body\n         * @summary Migrate Program\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {Request1} request1\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        migrateProgram: async (cell, request1, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('migrateProgram', 'cell', cell);\n            // verify required parameter 'request1' is not null or undefined\n            assertParamExists('migrateProgram', 'request1', request1);\n            const localVarPath = `/cells/{cell}/programs/migrate`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'text/plain';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            localVarRequestOptions.data = serializeDataIfNeeded(request1, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Plan a program based on the specified robot type.  The plan operation can be used to check if a Wandelscript is executable, given the current joint configuration of the robot.  If the Wandelscript is executable, the result contains the motion path. If the Wandelscript is not executable, e.g. points that are out of reach, or the joints encounter a singularity, the reason is returned.  The plan operation can be used in other operating modes besides control mode.  The Wandelscript can either be submitted as is, using Content-type text/plain, or as content-type application/json with the Wandelscript under \\\"code\\\" alongside a set of values provided under \\\"initial_state\\\".  The plan operation can be used in other operating modes besides control mode.  The Wandelscript can either be submitted as is, using Content-type text/plain, or as Content-type application/json with the Wandelscript under \\\"code\\\" alongside a set of values provided under \\\"initial_state\\\".  * [WandelEngine & Wandelscript Documentation](/docs/docs/wandelscript)\n         * @summary Plan Program\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {Request} request\n         * @param {string} [identifier]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        planProgram: async (cell, request, identifier, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('planProgram', 'cell', cell);\n            // verify required parameter 'request' is not null or undefined\n            assertParamExists('planProgram', 'request', request);\n            const localVarPath = `/cells/{cell}/programs/plan`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (identifier !== undefined) {\n                localVarQueryParameter['identifier'] = identifier;\n            }\n            localVarHeaderParameter['Content-Type'] = 'text/plain';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            localVarRequestOptions.data = serializeDataIfNeeded(request, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Stop all runners.\n         * @summary Stop All Program Runners\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        stopAllProgramRunner: async (cell, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('stopAllProgramRunner', 'cell', cell);\n            const localVarPath = `/cells/{cell}/programs/runners/stop`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Stop a specific program runner. If the indicated runner was not running, an error will be returned.  ## Parameters - **runner_id**: The id of the program runner\n         * @summary Stop Program Runner\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} runner\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        stopProgramRunner: async (cell, runner, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('stopProgramRunner', 'cell', cell);\n            // verify required parameter 'runner' is not null or undefined\n            assertParamExists('stopProgramRunner', 'runner', runner);\n            const localVarPath = `/cells/{cell}/programs/runners/{runner}/stop`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"runner\"}}`, encodeURIComponent(String(runner)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n    };\n};\n/**\n * ProgramApi - functional programming interface\n * @export\n */\nexport const ProgramApiFp = function (configuration) {\n    const localVarAxiosParamCreator = ProgramApiAxiosParamCreator(configuration);\n    return {\n        /**\n         * This endpoint accepts a program written in Wandelscript and if desired, initial arguments (in the form of a dict). It will then execute this Wandelscript asynchronously. It returns a program runner reference which can be used to query the state of the program runner.  ## Parameters See the **Schema** tab for information about the request body.  ## Returns A program runner reference which can be used to query the state of the program runner.  ## Receiving state updates Receive state updates of the program runner via polling the `/programs/runners/{runner_id}/`  ### Via polling You can receive updates about the state of the program runner by polling the `/programs/runners/{runner_id}/` endpoint. ```\n         * @summary Create Program Runner\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {Request} request\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async createProgramRunner(cell, request, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.createProgramRunner(cell, request, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['ProgramApi.createProgramRunner']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Execute a program in Wandelscript. The Wandelscript can also move multiple robots by using the \\'do with\\' syntax.  The execute operation will be started from the current joint configuration of any addressed robot(s).  Addressed robots have to be in control mode for the execute operation to succeed.  A request to this endpoint will block this endpoint until the program has been executed, or until an error occurs.  The executed movement is returned in case of a succesful execution. Otherwise an error (e.g. out of reach, singularity), is returned.  The Wandelscript can either be submitted as is, using Content-type text/plain, or as content-type application/json with the Wandelscript under \\\"code\\\" alongside a set of values provided under \\\"initial_state\\\".  * [WandelEngine & Wandelscript Documentation](/docs/docs/wandelscript)\n         * @summary Execute Program\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {CodeWithArguments} codeWithArguments\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async executeProgram(cell, codeWithArguments, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.executeProgram(cell, codeWithArguments, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['ProgramApi.executeProgram']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Returns information about a program currently executed.  When a program is finished: Program response, result, collected Wandelscript logs, etc.  When a program is running: Running status, current executed line, etc.  ## Parameters - **runner_id**: The id of the program runner\n         * @summary Get Program Runner\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} runner\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getProgramRunner(cell, runner, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getProgramRunner(cell, runner, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['ProgramApi.getProgramRunner']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Get details about all existing program runners.\n         * @summary List Program Runners\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async listProgramRunners(cell, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.listProgramRunners(cell, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['ProgramApi.listProgramRunners']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Migrate a program  ## Parameters See the **Schema** tab for information about the request body\n         * @summary Migrate Program\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {Request1} request1\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async migrateProgram(cell, request1, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.migrateProgram(cell, request1, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['ProgramApi.migrateProgram']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Plan a program based on the specified robot type.  The plan operation can be used to check if a Wandelscript is executable, given the current joint configuration of the robot.  If the Wandelscript is executable, the result contains the motion path. If the Wandelscript is not executable, e.g. points that are out of reach, or the joints encounter a singularity, the reason is returned.  The plan operation can be used in other operating modes besides control mode.  The Wandelscript can either be submitted as is, using Content-type text/plain, or as content-type application/json with the Wandelscript under \\\"code\\\" alongside a set of values provided under \\\"initial_state\\\".  The plan operation can be used in other operating modes besides control mode.  The Wandelscript can either be submitted as is, using Content-type text/plain, or as Content-type application/json with the Wandelscript under \\\"code\\\" alongside a set of values provided under \\\"initial_state\\\".  * [WandelEngine & Wandelscript Documentation](/docs/docs/wandelscript)\n         * @summary Plan Program\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {Request} request\n         * @param {string} [identifier]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async planProgram(cell, request, identifier, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.planProgram(cell, request, identifier, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['ProgramApi.planProgram']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Stop all runners.\n         * @summary Stop All Program Runners\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async stopAllProgramRunner(cell, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.stopAllProgramRunner(cell, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['ProgramApi.stopAllProgramRunner']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Stop a specific program runner. If the indicated runner was not running, an error will be returned.  ## Parameters - **runner_id**: The id of the program runner\n         * @summary Stop Program Runner\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} runner\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async stopProgramRunner(cell, runner, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.stopProgramRunner(cell, runner, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['ProgramApi.stopProgramRunner']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n    };\n};\n/**\n * ProgramApi - factory interface\n * @export\n */\nexport const ProgramApiFactory = function (configuration, basePath, axios) {\n    const localVarFp = ProgramApiFp(configuration);\n    return {\n        /**\n         * This endpoint accepts a program written in Wandelscript and if desired, initial arguments (in the form of a dict). It will then execute this Wandelscript asynchronously. It returns a program runner reference which can be used to query the state of the program runner.  ## Parameters See the **Schema** tab for information about the request body.  ## Returns A program runner reference which can be used to query the state of the program runner.  ## Receiving state updates Receive state updates of the program runner via polling the `/programs/runners/{runner_id}/`  ### Via polling You can receive updates about the state of the program runner by polling the `/programs/runners/{runner_id}/` endpoint. ```\n         * @summary Create Program Runner\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {Request} request\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createProgramRunner(cell, request, options) {\n            return localVarFp.createProgramRunner(cell, request, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Execute a program in Wandelscript. The Wandelscript can also move multiple robots by using the \\'do with\\' syntax.  The execute operation will be started from the current joint configuration of any addressed robot(s).  Addressed robots have to be in control mode for the execute operation to succeed.  A request to this endpoint will block this endpoint until the program has been executed, or until an error occurs.  The executed movement is returned in case of a succesful execution. Otherwise an error (e.g. out of reach, singularity), is returned.  The Wandelscript can either be submitted as is, using Content-type text/plain, or as content-type application/json with the Wandelscript under \\\"code\\\" alongside a set of values provided under \\\"initial_state\\\".  * [WandelEngine & Wandelscript Documentation](/docs/docs/wandelscript)\n         * @summary Execute Program\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {CodeWithArguments} codeWithArguments\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        executeProgram(cell, codeWithArguments, options) {\n            return localVarFp.executeProgram(cell, codeWithArguments, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Returns information about a program currently executed.  When a program is finished: Program response, result, collected Wandelscript logs, etc.  When a program is running: Running status, current executed line, etc.  ## Parameters - **runner_id**: The id of the program runner\n         * @summary Get Program Runner\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} runner\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getProgramRunner(cell, runner, options) {\n            return localVarFp.getProgramRunner(cell, runner, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Get details about all existing program runners.\n         * @summary List Program Runners\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listProgramRunners(cell, options) {\n            return localVarFp.listProgramRunners(cell, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Migrate a program  ## Parameters See the **Schema** tab for information about the request body\n         * @summary Migrate Program\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {Request1} request1\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        migrateProgram(cell, request1, options) {\n            return localVarFp.migrateProgram(cell, request1, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Plan a program based on the specified robot type.  The plan operation can be used to check if a Wandelscript is executable, given the current joint configuration of the robot.  If the Wandelscript is executable, the result contains the motion path. If the Wandelscript is not executable, e.g. points that are out of reach, or the joints encounter a singularity, the reason is returned.  The plan operation can be used in other operating modes besides control mode.  The Wandelscript can either be submitted as is, using Content-type text/plain, or as content-type application/json with the Wandelscript under \\\"code\\\" alongside a set of values provided under \\\"initial_state\\\".  The plan operation can be used in other operating modes besides control mode.  The Wandelscript can either be submitted as is, using Content-type text/plain, or as Content-type application/json with the Wandelscript under \\\"code\\\" alongside a set of values provided under \\\"initial_state\\\".  * [WandelEngine & Wandelscript Documentation](/docs/docs/wandelscript)\n         * @summary Plan Program\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {Request} request\n         * @param {string} [identifier]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        planProgram(cell, request, identifier, options) {\n            return localVarFp.planProgram(cell, request, identifier, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Stop all runners.\n         * @summary Stop All Program Runners\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        stopAllProgramRunner(cell, options) {\n            return localVarFp.stopAllProgramRunner(cell, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Stop a specific program runner. If the indicated runner was not running, an error will be returned.  ## Parameters - **runner_id**: The id of the program runner\n         * @summary Stop Program Runner\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} runner\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        stopProgramRunner(cell, runner, options) {\n            return localVarFp.stopProgramRunner(cell, runner, options).then((request) => request(axios, basePath));\n        },\n    };\n};\n/**\n * ProgramApi - object-oriented interface\n * @export\n * @class ProgramApi\n * @extends {BaseAPI}\n */\nexport class ProgramApi extends BaseAPI {\n    /**\n     * This endpoint accepts a program written in Wandelscript and if desired, initial arguments (in the form of a dict). It will then execute this Wandelscript asynchronously. It returns a program runner reference which can be used to query the state of the program runner.  ## Parameters See the **Schema** tab for information about the request body.  ## Returns A program runner reference which can be used to query the state of the program runner.  ## Receiving state updates Receive state updates of the program runner via polling the `/programs/runners/{runner_id}/`  ### Via polling You can receive updates about the state of the program runner by polling the `/programs/runners/{runner_id}/` endpoint. ```\n     * @summary Create Program Runner\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {Request} request\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProgramApi\n     */\n    createProgramRunner(cell, request, options) {\n        return ProgramApiFp(this.configuration).createProgramRunner(cell, request, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Execute a program in Wandelscript. The Wandelscript can also move multiple robots by using the \\'do with\\' syntax.  The execute operation will be started from the current joint configuration of any addressed robot(s).  Addressed robots have to be in control mode for the execute operation to succeed.  A request to this endpoint will block this endpoint until the program has been executed, or until an error occurs.  The executed movement is returned in case of a succesful execution. Otherwise an error (e.g. out of reach, singularity), is returned.  The Wandelscript can either be submitted as is, using Content-type text/plain, or as content-type application/json with the Wandelscript under \\\"code\\\" alongside a set of values provided under \\\"initial_state\\\".  * [WandelEngine & Wandelscript Documentation](/docs/docs/wandelscript)\n     * @summary Execute Program\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {CodeWithArguments} codeWithArguments\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProgramApi\n     */\n    executeProgram(cell, codeWithArguments, options) {\n        return ProgramApiFp(this.configuration).executeProgram(cell, codeWithArguments, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Returns information about a program currently executed.  When a program is finished: Program response, result, collected Wandelscript logs, etc.  When a program is running: Running status, current executed line, etc.  ## Parameters - **runner_id**: The id of the program runner\n     * @summary Get Program Runner\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} runner\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProgramApi\n     */\n    getProgramRunner(cell, runner, options) {\n        return ProgramApiFp(this.configuration).getProgramRunner(cell, runner, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Get details about all existing program runners.\n     * @summary List Program Runners\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProgramApi\n     */\n    listProgramRunners(cell, options) {\n        return ProgramApiFp(this.configuration).listProgramRunners(cell, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Migrate a program  ## Parameters See the **Schema** tab for information about the request body\n     * @summary Migrate Program\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {Request1} request1\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProgramApi\n     */\n    migrateProgram(cell, request1, options) {\n        return ProgramApiFp(this.configuration).migrateProgram(cell, request1, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Plan a program based on the specified robot type.  The plan operation can be used to check if a Wandelscript is executable, given the current joint configuration of the robot.  If the Wandelscript is executable, the result contains the motion path. If the Wandelscript is not executable, e.g. points that are out of reach, or the joints encounter a singularity, the reason is returned.  The plan operation can be used in other operating modes besides control mode.  The Wandelscript can either be submitted as is, using Content-type text/plain, or as content-type application/json with the Wandelscript under \\\"code\\\" alongside a set of values provided under \\\"initial_state\\\".  The plan operation can be used in other operating modes besides control mode.  The Wandelscript can either be submitted as is, using Content-type text/plain, or as Content-type application/json with the Wandelscript under \\\"code\\\" alongside a set of values provided under \\\"initial_state\\\".  * [WandelEngine & Wandelscript Documentation](/docs/docs/wandelscript)\n     * @summary Plan Program\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {Request} request\n     * @param {string} [identifier]\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProgramApi\n     */\n    planProgram(cell, request, identifier, options) {\n        return ProgramApiFp(this.configuration).planProgram(cell, request, identifier, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Stop all runners.\n     * @summary Stop All Program Runners\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProgramApi\n     */\n    stopAllProgramRunner(cell, options) {\n        return ProgramApiFp(this.configuration).stopAllProgramRunner(cell, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Stop a specific program runner. If the indicated runner was not running, an error will be returned.  ## Parameters - **runner_id**: The id of the program runner\n     * @summary Stop Program Runner\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} runner\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProgramApi\n     */\n    stopProgramRunner(cell, runner, options) {\n        return ProgramApiFp(this.configuration).stopProgramRunner(cell, runner, options).then((request) => request(this.axios, this.basePath));\n    }\n}\n/**\n * ProgramOperatorApi - axios parameter creator\n * @export\n */\nexport const ProgramOperatorApiAxiosParamCreator = function (configuration) {\n    return {\n        /**\n         * <!-- theme: danger --> > **Experimental** This endpoint initiates the execution of a program stored in the program library. A program is started with the a specific program id that exists in the program library.\n         * @summary Run Program from Library\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {CreateProgramRunRequest} createProgramRunRequest\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createProgramRun: async (cell, createProgramRunRequest, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('createProgramRun', 'cell', cell);\n            // verify required parameter 'createProgramRunRequest' is not null or undefined\n            assertParamExists('createProgramRun', 'createProgramRunRequest', createProgramRunRequest);\n            const localVarPath = `/cells/{cell}/operator/programs/runs`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            localVarRequestOptions.data = serializeDataIfNeeded(createProgramRunRequest, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Creates a new trigger that automatically runs a program when certain conditions are met. Each trigger has a different configuration, and the configuration must be valid for the provided trigger type.\n         * @summary Create Trigger\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {CreateTriggerRequest} createTriggerRequest\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createTrigger: async (cell, createTriggerRequest, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('createTrigger', 'cell', cell);\n            // verify required parameter 'createTriggerRequest' is not null or undefined\n            assertParamExists('createTrigger', 'createTriggerRequest', createTriggerRequest);\n            const localVarPath = `/cells/{cell}/operator/triggers`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            localVarRequestOptions.data = serializeDataIfNeeded(createTriggerRequest, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Delete an existing trigger.\n         * @summary Delete Trigger\n         * @param {string} trigger The identifier of the trigger.\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteTrigger: async (trigger, cell, options = {}) => {\n            // verify required parameter 'trigger' is not null or undefined\n            assertParamExists('deleteTrigger', 'trigger', trigger);\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('deleteTrigger', 'cell', cell);\n            const localVarPath = `/cells/{cell}/operator/triggers/{trigger}`\n                .replace(`{${\"trigger\"}}`, encodeURIComponent(String(trigger)))\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Retrieves all program runs, including past and current executions. Use the optional `state` parameter to filter the results by their status.\n         * @summary Get All Program Runs\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} [state]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getAllProgramRuns: async (cell, state, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('getAllProgramRuns', 'cell', cell);\n            const localVarPath = `/cells/{cell}/operator/programs/runs`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (state !== undefined) {\n                localVarQueryParameter['state'] = state;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Returns all triggers in the system with the program runs caused by each trigger. You can use the program run id to get more details about a specific program run.\n         * @summary Get All Triggers\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getAllTriggers: async (cell, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('getAllTriggers', 'cell', cell);\n            const localVarPath = `/cells/{cell}/operator/triggers`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Retrieves detailed information about a specific program run.\n         * @summary Get Program Run\n         * @param {string} run\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getProgramRun: async (run, cell, options = {}) => {\n            // verify required parameter 'run' is not null or undefined\n            assertParamExists('getProgramRun', 'run', run);\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('getProgramRun', 'cell', cell);\n            const localVarPath = `/cells/{cell}/operator/programs/runs/{run}`\n                .replace(`{${\"run\"}}`, encodeURIComponent(String(run)))\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Retrieves detailed information about a specific trigger.\n         * @summary Get Trigger\n         * @param {string} trigger The identifier of the trigger.\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getTrigger: async (trigger, cell, options = {}) => {\n            // verify required parameter 'trigger' is not null or undefined\n            assertParamExists('getTrigger', 'trigger', trigger);\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('getTrigger', 'cell', cell);\n            const localVarPath = `/cells/{cell}/operator/triggers/{trigger}`\n                .replace(`{${\"trigger\"}}`, encodeURIComponent(String(trigger)))\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Updates the details of an existing trigger The exact behavior of switching a trigger from active to inactive or vice versa is not defined yet.\n         * @summary Update Trigger\n         * @param {string} trigger the id of the trigger\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {UpdateTriggerRequest} updateTriggerRequest\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateTrigger: async (trigger, cell, updateTriggerRequest, options = {}) => {\n            // verify required parameter 'trigger' is not null or undefined\n            assertParamExists('updateTrigger', 'trigger', trigger);\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('updateTrigger', 'cell', cell);\n            // verify required parameter 'updateTriggerRequest' is not null or undefined\n            assertParamExists('updateTrigger', 'updateTriggerRequest', updateTriggerRequest);\n            const localVarPath = `/cells/{cell}/operator/triggers/{trigger}`\n                .replace(`{${\"trigger\"}}`, encodeURIComponent(String(trigger)))\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            localVarRequestOptions.data = serializeDataIfNeeded(updateTriggerRequest, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n    };\n};\n/**\n * ProgramOperatorApi - functional programming interface\n * @export\n */\nexport const ProgramOperatorApiFp = function (configuration) {\n    const localVarAxiosParamCreator = ProgramOperatorApiAxiosParamCreator(configuration);\n    return {\n        /**\n         * <!-- theme: danger --> > **Experimental** This endpoint initiates the execution of a program stored in the program library. A program is started with the a specific program id that exists in the program library.\n         * @summary Run Program from Library\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {CreateProgramRunRequest} createProgramRunRequest\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async createProgramRun(cell, createProgramRunRequest, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.createProgramRun(cell, createProgramRunRequest, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['ProgramOperatorApi.createProgramRun']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Creates a new trigger that automatically runs a program when certain conditions are met. Each trigger has a different configuration, and the configuration must be valid for the provided trigger type.\n         * @summary Create Trigger\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {CreateTriggerRequest} createTriggerRequest\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async createTrigger(cell, createTriggerRequest, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.createTrigger(cell, createTriggerRequest, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['ProgramOperatorApi.createTrigger']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Delete an existing trigger.\n         * @summary Delete Trigger\n         * @param {string} trigger The identifier of the trigger.\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async deleteTrigger(trigger, cell, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.deleteTrigger(trigger, cell, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['ProgramOperatorApi.deleteTrigger']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Retrieves all program runs, including past and current executions. Use the optional `state` parameter to filter the results by their status.\n         * @summary Get All Program Runs\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} [state]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getAllProgramRuns(cell, state, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getAllProgramRuns(cell, state, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['ProgramOperatorApi.getAllProgramRuns']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Returns all triggers in the system with the program runs caused by each trigger. You can use the program run id to get more details about a specific program run.\n         * @summary Get All Triggers\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getAllTriggers(cell, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getAllTriggers(cell, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['ProgramOperatorApi.getAllTriggers']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Retrieves detailed information about a specific program run.\n         * @summary Get Program Run\n         * @param {string} run\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getProgramRun(run, cell, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getProgramRun(run, cell, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['ProgramOperatorApi.getProgramRun']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Retrieves detailed information about a specific trigger.\n         * @summary Get Trigger\n         * @param {string} trigger The identifier of the trigger.\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getTrigger(trigger, cell, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getTrigger(trigger, cell, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['ProgramOperatorApi.getTrigger']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Updates the details of an existing trigger The exact behavior of switching a trigger from active to inactive or vice versa is not defined yet.\n         * @summary Update Trigger\n         * @param {string} trigger the id of the trigger\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {UpdateTriggerRequest} updateTriggerRequest\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async updateTrigger(trigger, cell, updateTriggerRequest, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.updateTrigger(trigger, cell, updateTriggerRequest, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['ProgramOperatorApi.updateTrigger']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n    };\n};\n/**\n * ProgramOperatorApi - factory interface\n * @export\n */\nexport const ProgramOperatorApiFactory = function (configuration, basePath, axios) {\n    const localVarFp = ProgramOperatorApiFp(configuration);\n    return {\n        /**\n         * <!-- theme: danger --> > **Experimental** This endpoint initiates the execution of a program stored in the program library. A program is started with the a specific program id that exists in the program library.\n         * @summary Run Program from Library\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {CreateProgramRunRequest} createProgramRunRequest\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createProgramRun(cell, createProgramRunRequest, options) {\n            return localVarFp.createProgramRun(cell, createProgramRunRequest, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Creates a new trigger that automatically runs a program when certain conditions are met. Each trigger has a different configuration, and the configuration must be valid for the provided trigger type.\n         * @summary Create Trigger\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {CreateTriggerRequest} createTriggerRequest\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createTrigger(cell, createTriggerRequest, options) {\n            return localVarFp.createTrigger(cell, createTriggerRequest, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Delete an existing trigger.\n         * @summary Delete Trigger\n         * @param {string} trigger The identifier of the trigger.\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteTrigger(trigger, cell, options) {\n            return localVarFp.deleteTrigger(trigger, cell, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Retrieves all program runs, including past and current executions. Use the optional `state` parameter to filter the results by their status.\n         * @summary Get All Program Runs\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} [state]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getAllProgramRuns(cell, state, options) {\n            return localVarFp.getAllProgramRuns(cell, state, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Returns all triggers in the system with the program runs caused by each trigger. You can use the program run id to get more details about a specific program run.\n         * @summary Get All Triggers\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getAllTriggers(cell, options) {\n            return localVarFp.getAllTriggers(cell, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Retrieves detailed information about a specific program run.\n         * @summary Get Program Run\n         * @param {string} run\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getProgramRun(run, cell, options) {\n            return localVarFp.getProgramRun(run, cell, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Retrieves detailed information about a specific trigger.\n         * @summary Get Trigger\n         * @param {string} trigger The identifier of the trigger.\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getTrigger(trigger, cell, options) {\n            return localVarFp.getTrigger(trigger, cell, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * <!-- theme: danger --> > **Experimental** Updates the details of an existing trigger The exact behavior of switching a trigger from active to inactive or vice versa is not defined yet.\n         * @summary Update Trigger\n         * @param {string} trigger the id of the trigger\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {UpdateTriggerRequest} updateTriggerRequest\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateTrigger(trigger, cell, updateTriggerRequest, options) {\n            return localVarFp.updateTrigger(trigger, cell, updateTriggerRequest, options).then((request) => request(axios, basePath));\n        },\n    };\n};\n/**\n * ProgramOperatorApi - object-oriented interface\n * @export\n * @class ProgramOperatorApi\n * @extends {BaseAPI}\n */\nexport class ProgramOperatorApi extends BaseAPI {\n    /**\n     * <!-- theme: danger --> > **Experimental** This endpoint initiates the execution of a program stored in the program library. A program is started with the a specific program id that exists in the program library.\n     * @summary Run Program from Library\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {CreateProgramRunRequest} createProgramRunRequest\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProgramOperatorApi\n     */\n    createProgramRun(cell, createProgramRunRequest, options) {\n        return ProgramOperatorApiFp(this.configuration).createProgramRun(cell, createProgramRunRequest, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * <!-- theme: danger --> > **Experimental** Creates a new trigger that automatically runs a program when certain conditions are met. Each trigger has a different configuration, and the configuration must be valid for the provided trigger type.\n     * @summary Create Trigger\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {CreateTriggerRequest} createTriggerRequest\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProgramOperatorApi\n     */\n    createTrigger(cell, createTriggerRequest, options) {\n        return ProgramOperatorApiFp(this.configuration).createTrigger(cell, createTriggerRequest, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * <!-- theme: danger --> > **Experimental** Delete an existing trigger.\n     * @summary Delete Trigger\n     * @param {string} trigger The identifier of the trigger.\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProgramOperatorApi\n     */\n    deleteTrigger(trigger, cell, options) {\n        return ProgramOperatorApiFp(this.configuration).deleteTrigger(trigger, cell, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * <!-- theme: danger --> > **Experimental** Retrieves all program runs, including past and current executions. Use the optional `state` parameter to filter the results by their status.\n     * @summary Get All Program Runs\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} [state]\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProgramOperatorApi\n     */\n    getAllProgramRuns(cell, state, options) {\n        return ProgramOperatorApiFp(this.configuration).getAllProgramRuns(cell, state, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * <!-- theme: danger --> > **Experimental** Returns all triggers in the system with the program runs caused by each trigger. You can use the program run id to get more details about a specific program run.\n     * @summary Get All Triggers\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProgramOperatorApi\n     */\n    getAllTriggers(cell, options) {\n        return ProgramOperatorApiFp(this.configuration).getAllTriggers(cell, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * <!-- theme: danger --> > **Experimental** Retrieves detailed information about a specific program run.\n     * @summary Get Program Run\n     * @param {string} run\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProgramOperatorApi\n     */\n    getProgramRun(run, cell, options) {\n        return ProgramOperatorApiFp(this.configuration).getProgramRun(run, cell, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * <!-- theme: danger --> > **Experimental** Retrieves detailed information about a specific trigger.\n     * @summary Get Trigger\n     * @param {string} trigger The identifier of the trigger.\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProgramOperatorApi\n     */\n    getTrigger(trigger, cell, options) {\n        return ProgramOperatorApiFp(this.configuration).getTrigger(trigger, cell, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * <!-- theme: danger --> > **Experimental** Updates the details of an existing trigger The exact behavior of switching a trigger from active to inactive or vice versa is not defined yet.\n     * @summary Update Trigger\n     * @param {string} trigger the id of the trigger\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {UpdateTriggerRequest} updateTriggerRequest\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProgramOperatorApi\n     */\n    updateTrigger(trigger, cell, updateTriggerRequest, options) {\n        return ProgramOperatorApiFp(this.configuration).updateTrigger(trigger, cell, updateTriggerRequest, options).then((request) => request(this.axios, this.basePath));\n    }\n}\n/**\n * ProgramValuesApi - axios parameter creator\n * @export\n */\nexport const ProgramValuesApiAxiosParamCreator = function (configuration) {\n    return {\n        /**\n         * Deprecated endpoint. Delete all values from the database.\n         * @summary Delete All Values\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @deprecated\n         * @throws {RequiredError}\n         */\n        clearProgramsValues: async (cell, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('clearProgramsValues', 'cell', cell);\n            const localVarPath = `/cells/{cell}/programs/values`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Deprecated endpoint.  Add or overwrite one or more values in the database.  PREREQUISITE: The database has been added as a device. Add the database with [createDevice](createDevice).  The database itself is a key-value store.  For reference of possible data types see:  * [Documentation for elementary data types](/docs/docs/wandelscript/data-types/#elementary-types)\n         * @summary Add Value(s)\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {{ [key: string]: CollectionValue; }} requestBody\n         * @param {*} [options] Override http request option.\n         * @deprecated\n         * @throws {RequiredError}\n         */\n        createProgramsValue: async (cell, requestBody, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('createProgramsValue', 'cell', cell);\n            // verify required parameter 'requestBody' is not null or undefined\n            assertParamExists('createProgramsValue', 'requestBody', requestBody);\n            const localVarPath = `/cells/{cell}/programs/values`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            localVarRequestOptions.data = serializeDataIfNeeded(requestBody, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Delete a value from the database.\n         * @summary Delete Value\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} key\n         * @param {*} [options] Override http request option.\n         * @deprecated\n         * @throws {RequiredError}\n         */\n        deleteProgramValue: async (cell, key, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('deleteProgramValue', 'cell', cell);\n            // verify required parameter 'key' is not null or undefined\n            assertParamExists('deleteProgramValue', 'key', key);\n            const localVarPath = `/cells/{cell}/programs/values/{key}`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"key\"}}`, encodeURIComponent(String(key)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Deprecated endpoint.  Return a value stored in the database.  PREREQUISITE: The database has been added as a device. Add the database with [createDevice](createDevice).  The database itself is a key-value store.  For reference of possible data types see:  * [Documentation for elementary data types](/docs/docs/wandelscript/data-types/#elementary-types)\n         * @summary Get Value\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} key\n         * @param {*} [options] Override http request option.\n         * @deprecated\n         * @throws {RequiredError}\n         */\n        getProgramValue: async (cell, key, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('getProgramValue', 'cell', cell);\n            // verify required parameter 'key' is not null or undefined\n            assertParamExists('getProgramValue', 'key', key);\n            const localVarPath = `/cells/{cell}/programs/values/{key}`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"key\"}}`, encodeURIComponent(String(key)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Deprecated endpoint.  Gets all values that are stored in the database.  PREREQUISITE: The database has been added as a device. Add the database with [createDevice](createDevice).  The database itself is a key-value storage. For reference of possible data types see:  * [Documentation for elementary data types](/docs/docs/wandelscript/data-types/#elementary-types)\n         * @summary Get Values\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @deprecated\n         * @throws {RequiredError}\n         */\n        listProgramsValues: async (cell, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('listProgramsValues', 'cell', cell);\n            const localVarPath = `/cells/{cell}/programs/values`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Deprecated endpoint.  Creates or updates a value in the database.  PREREQUISITE: The database has been added as a device. Add the database with [createDevice](createDevice).  The database itself is a key-value store.  For reference of possible data types see:  * [Documentation for elementary data types](/docs/docs/wandelscript/data-types/#elementary-types)\n         * @summary Create or Update Value\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} key\n         * @param {Value} value\n         * @param {*} [options] Override http request option.\n         * @deprecated\n         * @throws {RequiredError}\n         */\n        updateProgramValue: async (cell, key, value, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('updateProgramValue', 'cell', cell);\n            // verify required parameter 'key' is not null or undefined\n            assertParamExists('updateProgramValue', 'key', key);\n            // verify required parameter 'value' is not null or undefined\n            assertParamExists('updateProgramValue', 'value', value);\n            const localVarPath = `/cells/{cell}/programs/values/{key}`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"key\"}}`, encodeURIComponent(String(key)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            localVarRequestOptions.data = serializeDataIfNeeded(value, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n    };\n};\n/**\n * ProgramValuesApi - functional programming interface\n * @export\n */\nexport const ProgramValuesApiFp = function (configuration) {\n    const localVarAxiosParamCreator = ProgramValuesApiAxiosParamCreator(configuration);\n    return {\n        /**\n         * Deprecated endpoint. Delete all values from the database.\n         * @summary Delete All Values\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @deprecated\n         * @throws {RequiredError}\n         */\n        async clearProgramsValues(cell, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.clearProgramsValues(cell, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['ProgramValuesApi.clearProgramsValues']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Deprecated endpoint.  Add or overwrite one or more values in the database.  PREREQUISITE: The database has been added as a device. Add the database with [createDevice](createDevice).  The database itself is a key-value store.  For reference of possible data types see:  * [Documentation for elementary data types](/docs/docs/wandelscript/data-types/#elementary-types)\n         * @summary Add Value(s)\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {{ [key: string]: CollectionValue; }} requestBody\n         * @param {*} [options] Override http request option.\n         * @deprecated\n         * @throws {RequiredError}\n         */\n        async createProgramsValue(cell, requestBody, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.createProgramsValue(cell, requestBody, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['ProgramValuesApi.createProgramsValue']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Delete a value from the database.\n         * @summary Delete Value\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} key\n         * @param {*} [options] Override http request option.\n         * @deprecated\n         * @throws {RequiredError}\n         */\n        async deleteProgramValue(cell, key, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.deleteProgramValue(cell, key, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['ProgramValuesApi.deleteProgramValue']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Deprecated endpoint.  Return a value stored in the database.  PREREQUISITE: The database has been added as a device. Add the database with [createDevice](createDevice).  The database itself is a key-value store.  For reference of possible data types see:  * [Documentation for elementary data types](/docs/docs/wandelscript/data-types/#elementary-types)\n         * @summary Get Value\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} key\n         * @param {*} [options] Override http request option.\n         * @deprecated\n         * @throws {RequiredError}\n         */\n        async getProgramValue(cell, key, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getProgramValue(cell, key, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['ProgramValuesApi.getProgramValue']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Deprecated endpoint.  Gets all values that are stored in the database.  PREREQUISITE: The database has been added as a device. Add the database with [createDevice](createDevice).  The database itself is a key-value storage. For reference of possible data types see:  * [Documentation for elementary data types](/docs/docs/wandelscript/data-types/#elementary-types)\n         * @summary Get Values\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @deprecated\n         * @throws {RequiredError}\n         */\n        async listProgramsValues(cell, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.listProgramsValues(cell, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['ProgramValuesApi.listProgramsValues']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Deprecated endpoint.  Creates or updates a value in the database.  PREREQUISITE: The database has been added as a device. Add the database with [createDevice](createDevice).  The database itself is a key-value store.  For reference of possible data types see:  * [Documentation for elementary data types](/docs/docs/wandelscript/data-types/#elementary-types)\n         * @summary Create or Update Value\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} key\n         * @param {Value} value\n         * @param {*} [options] Override http request option.\n         * @deprecated\n         * @throws {RequiredError}\n         */\n        async updateProgramValue(cell, key, value, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.updateProgramValue(cell, key, value, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['ProgramValuesApi.updateProgramValue']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n    };\n};\n/**\n * ProgramValuesApi - factory interface\n * @export\n */\nexport const ProgramValuesApiFactory = function (configuration, basePath, axios) {\n    const localVarFp = ProgramValuesApiFp(configuration);\n    return {\n        /**\n         * Deprecated endpoint. Delete all values from the database.\n         * @summary Delete All Values\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @deprecated\n         * @throws {RequiredError}\n         */\n        clearProgramsValues(cell, options) {\n            return localVarFp.clearProgramsValues(cell, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Deprecated endpoint.  Add or overwrite one or more values in the database.  PREREQUISITE: The database has been added as a device. Add the database with [createDevice](createDevice).  The database itself is a key-value store.  For reference of possible data types see:  * [Documentation for elementary data types](/docs/docs/wandelscript/data-types/#elementary-types)\n         * @summary Add Value(s)\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {{ [key: string]: CollectionValue; }} requestBody\n         * @param {*} [options] Override http request option.\n         * @deprecated\n         * @throws {RequiredError}\n         */\n        createProgramsValue(cell, requestBody, options) {\n            return localVarFp.createProgramsValue(cell, requestBody, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Delete a value from the database.\n         * @summary Delete Value\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} key\n         * @param {*} [options] Override http request option.\n         * @deprecated\n         * @throws {RequiredError}\n         */\n        deleteProgramValue(cell, key, options) {\n            return localVarFp.deleteProgramValue(cell, key, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Deprecated endpoint.  Return a value stored in the database.  PREREQUISITE: The database has been added as a device. Add the database with [createDevice](createDevice).  The database itself is a key-value store.  For reference of possible data types see:  * [Documentation for elementary data types](/docs/docs/wandelscript/data-types/#elementary-types)\n         * @summary Get Value\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} key\n         * @param {*} [options] Override http request option.\n         * @deprecated\n         * @throws {RequiredError}\n         */\n        getProgramValue(cell, key, options) {\n            return localVarFp.getProgramValue(cell, key, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Deprecated endpoint.  Gets all values that are stored in the database.  PREREQUISITE: The database has been added as a device. Add the database with [createDevice](createDevice).  The database itself is a key-value storage. For reference of possible data types see:  * [Documentation for elementary data types](/docs/docs/wandelscript/data-types/#elementary-types)\n         * @summary Get Values\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @deprecated\n         * @throws {RequiredError}\n         */\n        listProgramsValues(cell, options) {\n            return localVarFp.listProgramsValues(cell, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Deprecated endpoint.  Creates or updates a value in the database.  PREREQUISITE: The database has been added as a device. Add the database with [createDevice](createDevice).  The database itself is a key-value store.  For reference of possible data types see:  * [Documentation for elementary data types](/docs/docs/wandelscript/data-types/#elementary-types)\n         * @summary Create or Update Value\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} key\n         * @param {Value} value\n         * @param {*} [options] Override http request option.\n         * @deprecated\n         * @throws {RequiredError}\n         */\n        updateProgramValue(cell, key, value, options) {\n            return localVarFp.updateProgramValue(cell, key, value, options).then((request) => request(axios, basePath));\n        },\n    };\n};\n/**\n * ProgramValuesApi - object-oriented interface\n * @export\n * @class ProgramValuesApi\n * @extends {BaseAPI}\n */\nexport class ProgramValuesApi extends BaseAPI {\n    /**\n     * Deprecated endpoint. Delete all values from the database.\n     * @summary Delete All Values\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {*} [options] Override http request option.\n     * @deprecated\n     * @throws {RequiredError}\n     * @memberof ProgramValuesApi\n     */\n    clearProgramsValues(cell, options) {\n        return ProgramValuesApiFp(this.configuration).clearProgramsValues(cell, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Deprecated endpoint.  Add or overwrite one or more values in the database.  PREREQUISITE: The database has been added as a device. Add the database with [createDevice](createDevice).  The database itself is a key-value store.  For reference of possible data types see:  * [Documentation for elementary data types](/docs/docs/wandelscript/data-types/#elementary-types)\n     * @summary Add Value(s)\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {{ [key: string]: CollectionValue; }} requestBody\n     * @param {*} [options] Override http request option.\n     * @deprecated\n     * @throws {RequiredError}\n     * @memberof ProgramValuesApi\n     */\n    createProgramsValue(cell, requestBody, options) {\n        return ProgramValuesApiFp(this.configuration).createProgramsValue(cell, requestBody, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Delete a value from the database.\n     * @summary Delete Value\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} key\n     * @param {*} [options] Override http request option.\n     * @deprecated\n     * @throws {RequiredError}\n     * @memberof ProgramValuesApi\n     */\n    deleteProgramValue(cell, key, options) {\n        return ProgramValuesApiFp(this.configuration).deleteProgramValue(cell, key, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Deprecated endpoint.  Return a value stored in the database.  PREREQUISITE: The database has been added as a device. Add the database with [createDevice](createDevice).  The database itself is a key-value store.  For reference of possible data types see:  * [Documentation for elementary data types](/docs/docs/wandelscript/data-types/#elementary-types)\n     * @summary Get Value\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} key\n     * @param {*} [options] Override http request option.\n     * @deprecated\n     * @throws {RequiredError}\n     * @memberof ProgramValuesApi\n     */\n    getProgramValue(cell, key, options) {\n        return ProgramValuesApiFp(this.configuration).getProgramValue(cell, key, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Deprecated endpoint.  Gets all values that are stored in the database.  PREREQUISITE: The database has been added as a device. Add the database with [createDevice](createDevice).  The database itself is a key-value storage. For reference of possible data types see:  * [Documentation for elementary data types](/docs/docs/wandelscript/data-types/#elementary-types)\n     * @summary Get Values\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {*} [options] Override http request option.\n     * @deprecated\n     * @throws {RequiredError}\n     * @memberof ProgramValuesApi\n     */\n    listProgramsValues(cell, options) {\n        return ProgramValuesApiFp(this.configuration).listProgramsValues(cell, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Deprecated endpoint.  Creates or updates a value in the database.  PREREQUISITE: The database has been added as a device. Add the database with [createDevice](createDevice).  The database itself is a key-value store.  For reference of possible data types see:  * [Documentation for elementary data types](/docs/docs/wandelscript/data-types/#elementary-types)\n     * @summary Create or Update Value\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} key\n     * @param {Value} value\n     * @param {*} [options] Override http request option.\n     * @deprecated\n     * @throws {RequiredError}\n     * @memberof ProgramValuesApi\n     */\n    updateProgramValue(cell, key, value, options) {\n        return ProgramValuesApiFp(this.configuration).updateProgramValue(cell, key, value, options).then((request) => request(this.axios, this.basePath));\n    }\n}\n/**\n * StoreCollisionComponentsApi - axios parameter creator\n * @export\n */\nexport const StoreCollisionComponentsApiAxiosParamCreator = function (configuration) {\n    return {\n        /**\n         * Deletes the stored collider.  <!-- theme: danger --> > This will delete persistently stored data.\n         * @summary Delete Collider\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} collider Unique identifier addressing a collider.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteStoredCollider: async (cell, collider, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('deleteStoredCollider', 'cell', cell);\n            // verify required parameter 'collider' is not null or undefined\n            assertParamExists('deleteStoredCollider', 'collider', collider);\n            const localVarPath = `/cells/{cell}/store/collision/colliders/{collider}`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"collider\"}}`, encodeURIComponent(String(collider)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Deletes the stored link chain.  <!-- theme: danger --> > This will delete persistently stored data.\n         * @summary Delete Link Chain\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} linkChain Unique identifier addressing a collision link chain.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteStoredCollisionLinkChain: async (cell, linkChain, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('deleteStoredCollisionLinkChain', 'cell', cell);\n            // verify required parameter 'linkChain' is not null or undefined\n            assertParamExists('deleteStoredCollisionLinkChain', 'linkChain', linkChain);\n            const localVarPath = `/cells/{cell}/store/collision/link-chains/{link-chain}`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"link-chain\"}}`, encodeURIComponent(String(linkChain)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Deletes the stored tool.  <!-- theme: danger --> > This will delete persistently stored data.\n         * @summary Delete Tool\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} tool Unique identifier addressing a collision tool.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteStoredCollisionTool: async (cell, tool, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('deleteStoredCollisionTool', 'cell', cell);\n            // verify required parameter 'tool' is not null or undefined\n            assertParamExists('deleteStoredCollisionTool', 'tool', tool);\n            const localVarPath = `/cells/{cell}/store/collision/tools/{tool}`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"tool\"}}`, encodeURIComponent(String(tool)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Returns the default collision link chain for a given motion group model.  See [getPlanningMotionGroupModels](getPlanningMotionGroupModels) for supported motion group models.  The default link chain is derived from 3D models and optimized for collision detection within NOVA.  The default link chain includes link shapes only. It does not include any attached components like wire feeders or sensors.  Use the `stored_link_chain` or `link_chain` field in [storeCollisionScene](storeCollisionScene) to attach additional shapes to the link reference frames. Additional shapes may overlap each other per link and may also overlap the respective link\\'s default shape.\n         * @summary Get Default Link Chain\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {GetDefaultLinkChainMotionGroupModelEnum} motionGroupModel Unique identifier for the type of a motion group (robot model).  Get the model name for a configured motion group from [getOptimizerConfiguration](getOptimizerConfiguration).\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getDefaultLinkChain: async (cell, motionGroupModel, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('getDefaultLinkChain', 'cell', cell);\n            // verify required parameter 'motionGroupModel' is not null or undefined\n            assertParamExists('getDefaultLinkChain', 'motionGroupModel', motionGroupModel);\n            const localVarPath = `/cells/{cell}/store/collision/default-link-chains/{motion-group-model}`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"motion-group-model\"}}`, encodeURIComponent(String(motionGroupModel)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Returns the collider.\n         * @summary Get Collider\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} collider Unique identifier addressing a collider.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getStoredCollider: async (cell, collider, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('getStoredCollider', 'cell', cell);\n            // verify required parameter 'collider' is not null or undefined\n            assertParamExists('getStoredCollider', 'collider', collider);\n            const localVarPath = `/cells/{cell}/store/collision/colliders/{collider}`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"collider\"}}`, encodeURIComponent(String(collider)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Returns the collision link chain.\n         * @summary Get Link Chain\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} linkChain Unique identifier addressing a collision link chain.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getStoredCollisionLinkChain: async (cell, linkChain, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('getStoredCollisionLinkChain', 'cell', cell);\n            // verify required parameter 'linkChain' is not null or undefined\n            assertParamExists('getStoredCollisionLinkChain', 'linkChain', linkChain);\n            const localVarPath = `/cells/{cell}/store/collision/link-chains/{link-chain}`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"link-chain\"}}`, encodeURIComponent(String(linkChain)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Returns the stored tool.\n         * @summary Get Tool\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} tool Unique identifier addressing a collision tool.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getStoredCollisionTool: async (cell, tool, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('getStoredCollisionTool', 'cell', cell);\n            // verify required parameter 'tool' is not null or undefined\n            assertParamExists('getStoredCollisionTool', 'tool', tool);\n            const localVarPath = `/cells/{cell}/store/collision/tools/{tool}`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"tool\"}}`, encodeURIComponent(String(tool)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Returns the stored link chains.\n         * @summary List Link Chains\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listCollisionLinkChains: async (cell, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('listCollisionLinkChains', 'cell', cell);\n            const localVarPath = `/cells/{cell}/store/collision/link-chains`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Returns a list of colliders in a scene. This excludes colliders that are part of a motion group.\n         * @summary List Colliders\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listStoredColliders: async (cell, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('listStoredColliders', 'cell', cell);\n            const localVarPath = `/cells/{cell}/store/collision/colliders`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Returns the list of stored tools.\n         * @summary List Tools\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listStoredCollisionTools: async (cell, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('listStoredCollisionTools', 'cell', cell);\n            const localVarPath = `/cells/{cell}/store/collision/tools`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Stores collider.  If the collider does not exist, it will be created. If the collider exists, it will be updated.\n         * @summary Store Collider\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} collider Unique identifier addressing a collider.\n         * @param {Collider} collider2\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        storeCollider: async (cell, collider, collider2, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('storeCollider', 'cell', cell);\n            // verify required parameter 'collider' is not null or undefined\n            assertParamExists('storeCollider', 'collider', collider);\n            // verify required parameter 'collider2' is not null or undefined\n            assertParamExists('storeCollider', 'collider2', collider2);\n            const localVarPath = `/cells/{cell}/store/collision/colliders/{collider}`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"collider\"}}`, encodeURIComponent(String(collider)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            localVarRequestOptions.data = serializeDataIfNeeded(collider2, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Stores link chain.  If the link chain does not exist, it will be created. If the link chain exists, it will be updated.\n         * @summary Store Link Chain\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} linkChain Unique identifier addressing a collision link chain.\n         * @param {Array<{ [key: string]: Collider; }>} collider\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        storeCollisionLinkChain: async (cell, linkChain, collider, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('storeCollisionLinkChain', 'cell', cell);\n            // verify required parameter 'linkChain' is not null or undefined\n            assertParamExists('storeCollisionLinkChain', 'linkChain', linkChain);\n            // verify required parameter 'collider' is not null or undefined\n            assertParamExists('storeCollisionLinkChain', 'collider', collider);\n            const localVarPath = `/cells/{cell}/store/collision/link-chains/{link-chain}`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"link-chain\"}}`, encodeURIComponent(String(linkChain)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            localVarRequestOptions.data = serializeDataIfNeeded(collider, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Stores the tool.  If the tool does not exist, it will be created. If the tool exists, it will be updated.\n         * @summary Store Tool\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} tool Unique identifier addressing a collision tool.\n         * @param {{ [key: string]: Collider; }} requestBody\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        storeCollisionTool: async (cell, tool, requestBody, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('storeCollisionTool', 'cell', cell);\n            // verify required parameter 'tool' is not null or undefined\n            assertParamExists('storeCollisionTool', 'tool', tool);\n            // verify required parameter 'requestBody' is not null or undefined\n            assertParamExists('storeCollisionTool', 'requestBody', requestBody);\n            const localVarPath = `/cells/{cell}/store/collision/tools/{tool}`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"tool\"}}`, encodeURIComponent(String(tool)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            localVarRequestOptions.data = serializeDataIfNeeded(requestBody, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n    };\n};\n/**\n * StoreCollisionComponentsApi - functional programming interface\n * @export\n */\nexport const StoreCollisionComponentsApiFp = function (configuration) {\n    const localVarAxiosParamCreator = StoreCollisionComponentsApiAxiosParamCreator(configuration);\n    return {\n        /**\n         * Deletes the stored collider.  <!-- theme: danger --> > This will delete persistently stored data.\n         * @summary Delete Collider\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} collider Unique identifier addressing a collider.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async deleteStoredCollider(cell, collider, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.deleteStoredCollider(cell, collider, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['StoreCollisionComponentsApi.deleteStoredCollider']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Deletes the stored link chain.  <!-- theme: danger --> > This will delete persistently stored data.\n         * @summary Delete Link Chain\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} linkChain Unique identifier addressing a collision link chain.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async deleteStoredCollisionLinkChain(cell, linkChain, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.deleteStoredCollisionLinkChain(cell, linkChain, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['StoreCollisionComponentsApi.deleteStoredCollisionLinkChain']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Deletes the stored tool.  <!-- theme: danger --> > This will delete persistently stored data.\n         * @summary Delete Tool\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} tool Unique identifier addressing a collision tool.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async deleteStoredCollisionTool(cell, tool, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.deleteStoredCollisionTool(cell, tool, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['StoreCollisionComponentsApi.deleteStoredCollisionTool']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Returns the default collision link chain for a given motion group model.  See [getPlanningMotionGroupModels](getPlanningMotionGroupModels) for supported motion group models.  The default link chain is derived from 3D models and optimized for collision detection within NOVA.  The default link chain includes link shapes only. It does not include any attached components like wire feeders or sensors.  Use the `stored_link_chain` or `link_chain` field in [storeCollisionScene](storeCollisionScene) to attach additional shapes to the link reference frames. Additional shapes may overlap each other per link and may also overlap the respective link\\'s default shape.\n         * @summary Get Default Link Chain\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {GetDefaultLinkChainMotionGroupModelEnum} motionGroupModel Unique identifier for the type of a motion group (robot model).  Get the model name for a configured motion group from [getOptimizerConfiguration](getOptimizerConfiguration).\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getDefaultLinkChain(cell, motionGroupModel, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getDefaultLinkChain(cell, motionGroupModel, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['StoreCollisionComponentsApi.getDefaultLinkChain']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Returns the collider.\n         * @summary Get Collider\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} collider Unique identifier addressing a collider.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getStoredCollider(cell, collider, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getStoredCollider(cell, collider, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['StoreCollisionComponentsApi.getStoredCollider']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Returns the collision link chain.\n         * @summary Get Link Chain\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} linkChain Unique identifier addressing a collision link chain.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getStoredCollisionLinkChain(cell, linkChain, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getStoredCollisionLinkChain(cell, linkChain, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['StoreCollisionComponentsApi.getStoredCollisionLinkChain']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Returns the stored tool.\n         * @summary Get Tool\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} tool Unique identifier addressing a collision tool.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getStoredCollisionTool(cell, tool, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getStoredCollisionTool(cell, tool, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['StoreCollisionComponentsApi.getStoredCollisionTool']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Returns the stored link chains.\n         * @summary List Link Chains\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async listCollisionLinkChains(cell, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.listCollisionLinkChains(cell, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['StoreCollisionComponentsApi.listCollisionLinkChains']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Returns a list of colliders in a scene. This excludes colliders that are part of a motion group.\n         * @summary List Colliders\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async listStoredColliders(cell, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.listStoredColliders(cell, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['StoreCollisionComponentsApi.listStoredColliders']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Returns the list of stored tools.\n         * @summary List Tools\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async listStoredCollisionTools(cell, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.listStoredCollisionTools(cell, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['StoreCollisionComponentsApi.listStoredCollisionTools']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Stores collider.  If the collider does not exist, it will be created. If the collider exists, it will be updated.\n         * @summary Store Collider\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} collider Unique identifier addressing a collider.\n         * @param {Collider} collider2\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async storeCollider(cell, collider, collider2, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.storeCollider(cell, collider, collider2, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['StoreCollisionComponentsApi.storeCollider']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Stores link chain.  If the link chain does not exist, it will be created. If the link chain exists, it will be updated.\n         * @summary Store Link Chain\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} linkChain Unique identifier addressing a collision link chain.\n         * @param {Array<{ [key: string]: Collider; }>} collider\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async storeCollisionLinkChain(cell, linkChain, collider, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.storeCollisionLinkChain(cell, linkChain, collider, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['StoreCollisionComponentsApi.storeCollisionLinkChain']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Stores the tool.  If the tool does not exist, it will be created. If the tool exists, it will be updated.\n         * @summary Store Tool\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} tool Unique identifier addressing a collision tool.\n         * @param {{ [key: string]: Collider; }} requestBody\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async storeCollisionTool(cell, tool, requestBody, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.storeCollisionTool(cell, tool, requestBody, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['StoreCollisionComponentsApi.storeCollisionTool']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n    };\n};\n/**\n * StoreCollisionComponentsApi - factory interface\n * @export\n */\nexport const StoreCollisionComponentsApiFactory = function (configuration, basePath, axios) {\n    const localVarFp = StoreCollisionComponentsApiFp(configuration);\n    return {\n        /**\n         * Deletes the stored collider.  <!-- theme: danger --> > This will delete persistently stored data.\n         * @summary Delete Collider\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} collider Unique identifier addressing a collider.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteStoredCollider(cell, collider, options) {\n            return localVarFp.deleteStoredCollider(cell, collider, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Deletes the stored link chain.  <!-- theme: danger --> > This will delete persistently stored data.\n         * @summary Delete Link Chain\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} linkChain Unique identifier addressing a collision link chain.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteStoredCollisionLinkChain(cell, linkChain, options) {\n            return localVarFp.deleteStoredCollisionLinkChain(cell, linkChain, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Deletes the stored tool.  <!-- theme: danger --> > This will delete persistently stored data.\n         * @summary Delete Tool\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} tool Unique identifier addressing a collision tool.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteStoredCollisionTool(cell, tool, options) {\n            return localVarFp.deleteStoredCollisionTool(cell, tool, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Returns the default collision link chain for a given motion group model.  See [getPlanningMotionGroupModels](getPlanningMotionGroupModels) for supported motion group models.  The default link chain is derived from 3D models and optimized for collision detection within NOVA.  The default link chain includes link shapes only. It does not include any attached components like wire feeders or sensors.  Use the `stored_link_chain` or `link_chain` field in [storeCollisionScene](storeCollisionScene) to attach additional shapes to the link reference frames. Additional shapes may overlap each other per link and may also overlap the respective link\\'s default shape.\n         * @summary Get Default Link Chain\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {GetDefaultLinkChainMotionGroupModelEnum} motionGroupModel Unique identifier for the type of a motion group (robot model).  Get the model name for a configured motion group from [getOptimizerConfiguration](getOptimizerConfiguration).\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getDefaultLinkChain(cell, motionGroupModel, options) {\n            return localVarFp.getDefaultLinkChain(cell, motionGroupModel, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Returns the collider.\n         * @summary Get Collider\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} collider Unique identifier addressing a collider.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getStoredCollider(cell, collider, options) {\n            return localVarFp.getStoredCollider(cell, collider, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Returns the collision link chain.\n         * @summary Get Link Chain\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} linkChain Unique identifier addressing a collision link chain.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getStoredCollisionLinkChain(cell, linkChain, options) {\n            return localVarFp.getStoredCollisionLinkChain(cell, linkChain, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Returns the stored tool.\n         * @summary Get Tool\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} tool Unique identifier addressing a collision tool.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getStoredCollisionTool(cell, tool, options) {\n            return localVarFp.getStoredCollisionTool(cell, tool, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Returns the stored link chains.\n         * @summary List Link Chains\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listCollisionLinkChains(cell, options) {\n            return localVarFp.listCollisionLinkChains(cell, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Returns a list of colliders in a scene. This excludes colliders that are part of a motion group.\n         * @summary List Colliders\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listStoredColliders(cell, options) {\n            return localVarFp.listStoredColliders(cell, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Returns the list of stored tools.\n         * @summary List Tools\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listStoredCollisionTools(cell, options) {\n            return localVarFp.listStoredCollisionTools(cell, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Stores collider.  If the collider does not exist, it will be created. If the collider exists, it will be updated.\n         * @summary Store Collider\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} collider Unique identifier addressing a collider.\n         * @param {Collider} collider2\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        storeCollider(cell, collider, collider2, options) {\n            return localVarFp.storeCollider(cell, collider, collider2, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Stores link chain.  If the link chain does not exist, it will be created. If the link chain exists, it will be updated.\n         * @summary Store Link Chain\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} linkChain Unique identifier addressing a collision link chain.\n         * @param {Array<{ [key: string]: Collider; }>} collider\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        storeCollisionLinkChain(cell, linkChain, collider, options) {\n            return localVarFp.storeCollisionLinkChain(cell, linkChain, collider, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Stores the tool.  If the tool does not exist, it will be created. If the tool exists, it will be updated.\n         * @summary Store Tool\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} tool Unique identifier addressing a collision tool.\n         * @param {{ [key: string]: Collider; }} requestBody\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        storeCollisionTool(cell, tool, requestBody, options) {\n            return localVarFp.storeCollisionTool(cell, tool, requestBody, options).then((request) => request(axios, basePath));\n        },\n    };\n};\n/**\n * StoreCollisionComponentsApi - object-oriented interface\n * @export\n * @class StoreCollisionComponentsApi\n * @extends {BaseAPI}\n */\nexport class StoreCollisionComponentsApi extends BaseAPI {\n    /**\n     * Deletes the stored collider.  <!-- theme: danger --> > This will delete persistently stored data.\n     * @summary Delete Collider\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} collider Unique identifier addressing a collider.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof StoreCollisionComponentsApi\n     */\n    deleteStoredCollider(cell, collider, options) {\n        return StoreCollisionComponentsApiFp(this.configuration).deleteStoredCollider(cell, collider, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Deletes the stored link chain.  <!-- theme: danger --> > This will delete persistently stored data.\n     * @summary Delete Link Chain\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} linkChain Unique identifier addressing a collision link chain.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof StoreCollisionComponentsApi\n     */\n    deleteStoredCollisionLinkChain(cell, linkChain, options) {\n        return StoreCollisionComponentsApiFp(this.configuration).deleteStoredCollisionLinkChain(cell, linkChain, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Deletes the stored tool.  <!-- theme: danger --> > This will delete persistently stored data.\n     * @summary Delete Tool\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} tool Unique identifier addressing a collision tool.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof StoreCollisionComponentsApi\n     */\n    deleteStoredCollisionTool(cell, tool, options) {\n        return StoreCollisionComponentsApiFp(this.configuration).deleteStoredCollisionTool(cell, tool, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Returns the default collision link chain for a given motion group model.  See [getPlanningMotionGroupModels](getPlanningMotionGroupModels) for supported motion group models.  The default link chain is derived from 3D models and optimized for collision detection within NOVA.  The default link chain includes link shapes only. It does not include any attached components like wire feeders or sensors.  Use the `stored_link_chain` or `link_chain` field in [storeCollisionScene](storeCollisionScene) to attach additional shapes to the link reference frames. Additional shapes may overlap each other per link and may also overlap the respective link\\'s default shape.\n     * @summary Get Default Link Chain\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {GetDefaultLinkChainMotionGroupModelEnum} motionGroupModel Unique identifier for the type of a motion group (robot model).  Get the model name for a configured motion group from [getOptimizerConfiguration](getOptimizerConfiguration).\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof StoreCollisionComponentsApi\n     */\n    getDefaultLinkChain(cell, motionGroupModel, options) {\n        return StoreCollisionComponentsApiFp(this.configuration).getDefaultLinkChain(cell, motionGroupModel, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Returns the collider.\n     * @summary Get Collider\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} collider Unique identifier addressing a collider.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof StoreCollisionComponentsApi\n     */\n    getStoredCollider(cell, collider, options) {\n        return StoreCollisionComponentsApiFp(this.configuration).getStoredCollider(cell, collider, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Returns the collision link chain.\n     * @summary Get Link Chain\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} linkChain Unique identifier addressing a collision link chain.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof StoreCollisionComponentsApi\n     */\n    getStoredCollisionLinkChain(cell, linkChain, options) {\n        return StoreCollisionComponentsApiFp(this.configuration).getStoredCollisionLinkChain(cell, linkChain, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Returns the stored tool.\n     * @summary Get Tool\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} tool Unique identifier addressing a collision tool.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof StoreCollisionComponentsApi\n     */\n    getStoredCollisionTool(cell, tool, options) {\n        return StoreCollisionComponentsApiFp(this.configuration).getStoredCollisionTool(cell, tool, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Returns the stored link chains.\n     * @summary List Link Chains\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof StoreCollisionComponentsApi\n     */\n    listCollisionLinkChains(cell, options) {\n        return StoreCollisionComponentsApiFp(this.configuration).listCollisionLinkChains(cell, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Returns a list of colliders in a scene. This excludes colliders that are part of a motion group.\n     * @summary List Colliders\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof StoreCollisionComponentsApi\n     */\n    listStoredColliders(cell, options) {\n        return StoreCollisionComponentsApiFp(this.configuration).listStoredColliders(cell, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Returns the list of stored tools.\n     * @summary List Tools\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof StoreCollisionComponentsApi\n     */\n    listStoredCollisionTools(cell, options) {\n        return StoreCollisionComponentsApiFp(this.configuration).listStoredCollisionTools(cell, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Stores collider.  If the collider does not exist, it will be created. If the collider exists, it will be updated.\n     * @summary Store Collider\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} collider Unique identifier addressing a collider.\n     * @param {Collider} collider2\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof StoreCollisionComponentsApi\n     */\n    storeCollider(cell, collider, collider2, options) {\n        return StoreCollisionComponentsApiFp(this.configuration).storeCollider(cell, collider, collider2, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Stores link chain.  If the link chain does not exist, it will be created. If the link chain exists, it will be updated.\n     * @summary Store Link Chain\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} linkChain Unique identifier addressing a collision link chain.\n     * @param {Array<{ [key: string]: Collider; }>} collider\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof StoreCollisionComponentsApi\n     */\n    storeCollisionLinkChain(cell, linkChain, collider, options) {\n        return StoreCollisionComponentsApiFp(this.configuration).storeCollisionLinkChain(cell, linkChain, collider, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Stores the tool.  If the tool does not exist, it will be created. If the tool exists, it will be updated.\n     * @summary Store Tool\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} tool Unique identifier addressing a collision tool.\n     * @param {{ [key: string]: Collider; }} requestBody\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof StoreCollisionComponentsApi\n     */\n    storeCollisionTool(cell, tool, requestBody, options) {\n        return StoreCollisionComponentsApiFp(this.configuration).storeCollisionTool(cell, tool, requestBody, options).then((request) => request(this.axios, this.basePath));\n    }\n}\n/**\n * @export\n */\nexport const GetDefaultLinkChainMotionGroupModelEnum = {\n    Abb101003715: 'ABB_1010_037_15',\n    Abb110004754: 'ABB_1100_0475_4',\n    Abb11000584: 'ABB_1100_058_4',\n    Abb1200077: 'ABB_1200_07_7',\n    Abb1200583: 'ABB_120_058_3',\n    Abb13000911: 'ABB_1300_09_11',\n    Abb130011510: 'ABB_1300_115_10',\n    Abb13001412: 'ABB_1300_14_12',\n    Abb1300147: 'ABB_1300_14_7',\n    Abb14001445: 'ABB_1400_144_5',\n    Abb1400816: 'ABB_140_081_6',\n    Abb1520Id154: 'ABB_1520ID_15_4',\n    Abb16001210: 'ABB_1600_12_10',\n    Abb1600126: 'ABB_1600_12_6',\n    Abb160014510: 'ABB_1600_145_10',\n    Abb16001456: 'ABB_1600_145_6',\n    Abb1660Id1554: 'ABB_1660ID_155_4',\n    Abb2600Id18515: 'ABB_2600ID_185_15',\n    Abb2600Id2008: 'ABB_2600ID_200_8',\n    Abb260016512: 'ABB_2600_165_12',\n    Abb260016520: 'ABB_2600_165_20',\n    Abb260018512: 'ABB_2600_185_12',\n    Abb460020545: 'ABB_4600_205_45',\n    Abb460020560: 'ABB_4600_205_60',\n    Abb460025020: 'ABB_4600_250_20',\n    Abb460025540: 'ABB_4600_255_40',\n    FanucArcMate100iD: 'FANUC_ARC_Mate_100iD',\n    FanucArcMate100iD10L: 'FANUC_ARC_Mate_100iD10L',\n    FanucArcMate100iD16S: 'FANUC_ARC_Mate_100iD16S',\n    FanucArcMate100iD8L: 'FANUC_ARC_Mate_100iD8L',\n    FanucArcMate120iD: 'FANUC_ARC_Mate_120iD',\n    FanucArcMate120iD12L: 'FANUC_ARC_Mate_120iD12L',\n    FanucArcMate50iD: 'FANUC_ARC_Mate_50iD',\n    FanucArcMate50iD7L: 'FANUC_ARC_Mate_50iD7L',\n    FanucCr14iAl: 'FANUC_CR14iAL',\n    FanucCr15iA: 'FANUC_CR15iA',\n    FanucCr35iA: 'FANUC_CR35iA',\n    FanucCr35iB: 'FANUC_CR35iB',\n    FanucCr4iA: 'FANUC_CR4iA',\n    FanucCr7iA: 'FANUC_CR7iA',\n    FanucCr7iAl: 'FANUC_CR7iAL',\n    FanucCrx10iA: 'FANUC_CRX10iA',\n    FanucCrx10iAl: 'FANUC_CRX10iAL',\n    FanucCrx20iAl: 'FANUC_CRX20iAL',\n    FanucCrx25iA: 'FANUC_CRX25iA',\n    FanucCrx5iA: 'FANUC_CRX5iA',\n    FanucLrMate200iD: 'FANUC_LR_Mate_200iD',\n    FanucLrMate200iD4S: 'FANUC_LR_Mate_200iD4S',\n    FanucLrMate200iD7L: 'FANUC_LR_Mate_200iD7L',\n    FanucM10iD10L: 'FANUC_M10iD10L',\n    FanucM10iD12: 'FANUC_M10iD12',\n    FanucM10iD16S: 'FANUC_M10iD16S',\n    FanucM10iD8L: 'FANUC_M10iD8L',\n    FanucM20iB25: 'FANUC_M20iB25',\n    FanucM20iB25C: 'FANUC_M20iB25C',\n    FanucM20iB35S: 'FANUC_M20iB35S',\n    FanucM20iD12L: 'FANUC_M20iD12L',\n    FanucM20iD25: 'FANUC_M20iD25',\n    FanucM20iD35: 'FANUC_M20iD35',\n    FanucM900iB280L: 'FANUC_M900iB280L',\n    FanucM900iB360E: 'FANUC_M900iB360E',\n    FanucR2000iC125L: 'FANUC_R2000iC125L',\n    FanucR2000iC210F: 'FANUC_R2000iC210F',\n    KukaKr10R1100: 'KUKA_KR10_R1100',\n    KukaKr10R11002: 'KUKA_KR10_R1100_2',\n    KukaKr10R900: 'KUKA_KR10_R900',\n    KukaKr10R9002: 'KUKA_KR10_R900_2',\n    KukaKr120R2700: 'KUKA_KR120_R2700',\n    KukaKr120R27002: 'KUKA_KR120_R2700_2',\n    KukaKr120R31002: 'KUKA_KR120_R3100_2',\n    KukaKr12R18102: 'KUKA_KR12_R1810_2',\n    KukaKr150R2: 'KUKA_KR150_R2',\n    KukaKr16R1610: 'KUKA_KR16_R1610',\n    KukaKr16R16102: 'KUKA_KR16_R1610_2',\n    KukaKr16R2010: 'KUKA_KR16_R2010',\n    KukaKr16R20102: 'KUKA_KR16_R2010_2',\n    KukaKr20R1810: 'KUKA_KR20_R1810',\n    KukaKr20R18102: 'KUKA_KR20_R1810_2',\n    KukaKr210R2700: 'KUKA_KR210_R2700',\n    KukaKr210R27002: 'KUKA_KR210_R2700_2',\n    KukaKr210R3100: 'KUKA_KR210_R3100',\n    KukaKr210R31002: 'KUKA_KR210_R3100_2',\n    KukaKr210R3300: 'KUKA_KR210_R3300',\n    KukaKr210R33002: 'KUKA_KR210_R3300_2',\n    KukaKr240R2700: 'KUKA_KR240_R2700',\n    KukaKr250R27002: 'KUKA_KR250_R2700_2',\n    KukaKr270R2700: 'KUKA_KR270_R2700',\n    KukaKr270R3100: 'KUKA_KR270_R3100',\n    KukaKr270R31002: 'KUKA_KR270_R3100_2',\n    KukaKr30R2100: 'KUKA_KR30_R2100',\n    KukaKr30R3: 'KUKA_KR30_R3',\n    KukaKr360L2403: 'KUKA_KR360_L240_3',\n    KukaKr360R2830: 'KUKA_KR360_R2830',\n    KukaKr3R540: 'KUKA_KR3_R540',\n    KukaKr4R600: 'KUKA_KR4_R600',\n    KukaKr50R2500: 'KUKA_KR50_R2500',\n    KukaKr6R1820: 'KUKA_KR6_R1820',\n    KukaKr6R700: 'KUKA_KR6_R700',\n    KukaKr6R7002: 'KUKA_KR6_R700_2',\n    KukaKr6R900: 'KUKA_KR6_R900',\n    KukaKr6R9002: 'KUKA_KR6_R900_2',\n    KukaLbrIisy11R1300: 'KUKA_LBR_IISY_11_R1300',\n    UniversalRobotsUr10: 'UniversalRobots_UR10',\n    UniversalRobotsUr10e: 'UniversalRobots_UR10e',\n    UniversalRobotsUr16e: 'UniversalRobots_UR16e',\n    UniversalRobotsUr20e: 'UniversalRobots_UR20e',\n    UniversalRobotsUr3: 'UniversalRobots_UR3',\n    UniversalRobotsUr3e: 'UniversalRobots_UR3e',\n    UniversalRobotsUr5: 'UniversalRobots_UR5',\n    UniversalRobotsUr5e: 'UniversalRobots_UR5e',\n    YaskawaAr1440: 'Yaskawa_AR1440',\n    YaskawaAr1440E: 'Yaskawa_AR1440E',\n    YaskawaAr1730: 'Yaskawa_AR1730',\n    YaskawaAr2010: 'Yaskawa_AR2010',\n    YaskawaAr3120: 'Yaskawa_AR3120',\n    YaskawaAr700: 'Yaskawa_AR700',\n    YaskawaAr900: 'Yaskawa_AR900',\n    YaskawaGp110: 'Yaskawa_GP110',\n    YaskawaGp110B: 'Yaskawa_GP110B',\n    YaskawaGp110H: 'Yaskawa_GP110H',\n    YaskawaGp12: 'Yaskawa_GP12',\n    YaskawaGp165R: 'Yaskawa_GP165R',\n    YaskawaGp180: 'Yaskawa_GP180',\n    YaskawaGp180H: 'Yaskawa_GP180H',\n    YaskawaGp180120: 'Yaskawa_GP180_120',\n    YaskawaGp200R: 'Yaskawa_GP200R',\n    YaskawaGp200S: 'Yaskawa_GP200S',\n    YaskawaGp20Hl: 'Yaskawa_GP20HL',\n    YaskawaGp215: 'Yaskawa_GP215',\n    YaskawaGp225: 'Yaskawa_GP225',\n    YaskawaGp225H: 'Yaskawa_GP225H',\n    YaskawaGp25: 'Yaskawa_GP25',\n    YaskawaGp250: 'Yaskawa_GP250',\n    YaskawaGp25Sv: 'Yaskawa_GP25SV',\n    YaskawaGp2512: 'Yaskawa_GP25_12',\n    YaskawaGp280: 'Yaskawa_GP280',\n    YaskawaGp280L: 'Yaskawa_GP280L',\n    YaskawaGp300R: 'Yaskawa_GP300R',\n    YaskawaGp35L: 'Yaskawa_GP35L',\n    YaskawaGp4: 'Yaskawa_GP4',\n    YaskawaGp400: 'Yaskawa_GP400',\n    YaskawaGp400R: 'Yaskawa_GP400R',\n    YaskawaGp50: 'Yaskawa_GP50',\n    YaskawaGp600: 'Yaskawa_GP600',\n    YaskawaGp7: 'Yaskawa_GP7',\n    YaskawaGp70L: 'Yaskawa_GP70L',\n    YaskawaGp8: 'Yaskawa_GP8',\n    YaskawaGp88: 'Yaskawa_GP88',\n    YaskawaGp8L: 'Yaskawa_GP8L',\n    YaskawaHc10: 'Yaskawa_HC10',\n    YaskawaHc10Dtp: 'Yaskawa_HC10DTP',\n    YaskawaHc20Dtp: 'Yaskawa_HC20DTP',\n    YaskawaHc30Pl: 'Yaskawa_HC30PL',\n    YaskawaTurn1: 'Yaskawa_TURN1',\n    YaskawaTurn2: 'Yaskawa_TURN2',\n    YaskawaTurn3: 'Yaskawa_TURN3'\n};\n/**\n * StoreCollisionScenesApi - axios parameter creator\n * @export\n */\nexport const StoreCollisionScenesApiAxiosParamCreator = function (configuration) {\n    return {\n        /**\n         * Deletes the stored scene.  <!-- theme: danger --> > This will delete persistently stored data.\n         * @summary Delete Scene\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} scene Unique identifier addressing a collision scene.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteStoredCollisionScene: async (cell, scene, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('deleteStoredCollisionScene', 'cell', cell);\n            // verify required parameter 'scene' is not null or undefined\n            assertParamExists('deleteStoredCollisionScene', 'scene', scene);\n            const localVarPath = `/cells/{cell}/store/collision/scenes/{scene}`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"scene\"}}`, encodeURIComponent(String(scene)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Returns the stored scene.\n         * @summary Get Scene\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} scene Unique identifier addressing a collision scene.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getStoredCollisionScene: async (cell, scene, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('getStoredCollisionScene', 'cell', cell);\n            // verify required parameter 'scene' is not null or undefined\n            assertParamExists('getStoredCollisionScene', 'scene', scene);\n            const localVarPath = `/cells/{cell}/store/collision/scenes/{scene}`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"scene\"}}`, encodeURIComponent(String(scene)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Returns a list of stored scenes.\n         * @summary List Scenes\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listStoredCollisionScenes: async (cell, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('listStoredCollisionScenes', 'cell', cell);\n            const localVarPath = `/cells/{cell}/store/collision/scenes`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Creates or replaces the stored collision scene.  The scene is assembled from components as defined in the request body.  An error is returned if a stored object does not exist.\n         * @summary Store Scene\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} scene Unique identifier addressing a collision scene.\n         * @param {CollisionSceneAssembly} collisionSceneAssembly\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        storeCollisionScene: async (cell, scene, collisionSceneAssembly, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('storeCollisionScene', 'cell', cell);\n            // verify required parameter 'scene' is not null or undefined\n            assertParamExists('storeCollisionScene', 'scene', scene);\n            // verify required parameter 'collisionSceneAssembly' is not null or undefined\n            assertParamExists('storeCollisionScene', 'collisionSceneAssembly', collisionSceneAssembly);\n            const localVarPath = `/cells/{cell}/store/collision/scenes/{scene}`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"scene\"}}`, encodeURIComponent(String(scene)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            localVarRequestOptions.data = serializeDataIfNeeded(collisionSceneAssembly, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n    };\n};\n/**\n * StoreCollisionScenesApi - functional programming interface\n * @export\n */\nexport const StoreCollisionScenesApiFp = function (configuration) {\n    const localVarAxiosParamCreator = StoreCollisionScenesApiAxiosParamCreator(configuration);\n    return {\n        /**\n         * Deletes the stored scene.  <!-- theme: danger --> > This will delete persistently stored data.\n         * @summary Delete Scene\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} scene Unique identifier addressing a collision scene.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async deleteStoredCollisionScene(cell, scene, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.deleteStoredCollisionScene(cell, scene, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['StoreCollisionScenesApi.deleteStoredCollisionScene']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Returns the stored scene.\n         * @summary Get Scene\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} scene Unique identifier addressing a collision scene.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getStoredCollisionScene(cell, scene, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getStoredCollisionScene(cell, scene, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['StoreCollisionScenesApi.getStoredCollisionScene']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Returns a list of stored scenes.\n         * @summary List Scenes\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async listStoredCollisionScenes(cell, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.listStoredCollisionScenes(cell, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['StoreCollisionScenesApi.listStoredCollisionScenes']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Creates or replaces the stored collision scene.  The scene is assembled from components as defined in the request body.  An error is returned if a stored object does not exist.\n         * @summary Store Scene\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} scene Unique identifier addressing a collision scene.\n         * @param {CollisionSceneAssembly} collisionSceneAssembly\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async storeCollisionScene(cell, scene, collisionSceneAssembly, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.storeCollisionScene(cell, scene, collisionSceneAssembly, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['StoreCollisionScenesApi.storeCollisionScene']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n    };\n};\n/**\n * StoreCollisionScenesApi - factory interface\n * @export\n */\nexport const StoreCollisionScenesApiFactory = function (configuration, basePath, axios) {\n    const localVarFp = StoreCollisionScenesApiFp(configuration);\n    return {\n        /**\n         * Deletes the stored scene.  <!-- theme: danger --> > This will delete persistently stored data.\n         * @summary Delete Scene\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} scene Unique identifier addressing a collision scene.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteStoredCollisionScene(cell, scene, options) {\n            return localVarFp.deleteStoredCollisionScene(cell, scene, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Returns the stored scene.\n         * @summary Get Scene\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} scene Unique identifier addressing a collision scene.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getStoredCollisionScene(cell, scene, options) {\n            return localVarFp.getStoredCollisionScene(cell, scene, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Returns a list of stored scenes.\n         * @summary List Scenes\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listStoredCollisionScenes(cell, options) {\n            return localVarFp.listStoredCollisionScenes(cell, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Creates or replaces the stored collision scene.  The scene is assembled from components as defined in the request body.  An error is returned if a stored object does not exist.\n         * @summary Store Scene\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} scene Unique identifier addressing a collision scene.\n         * @param {CollisionSceneAssembly} collisionSceneAssembly\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        storeCollisionScene(cell, scene, collisionSceneAssembly, options) {\n            return localVarFp.storeCollisionScene(cell, scene, collisionSceneAssembly, options).then((request) => request(axios, basePath));\n        },\n    };\n};\n/**\n * StoreCollisionScenesApi - object-oriented interface\n * @export\n * @class StoreCollisionScenesApi\n * @extends {BaseAPI}\n */\nexport class StoreCollisionScenesApi extends BaseAPI {\n    /**\n     * Deletes the stored scene.  <!-- theme: danger --> > This will delete persistently stored data.\n     * @summary Delete Scene\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} scene Unique identifier addressing a collision scene.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof StoreCollisionScenesApi\n     */\n    deleteStoredCollisionScene(cell, scene, options) {\n        return StoreCollisionScenesApiFp(this.configuration).deleteStoredCollisionScene(cell, scene, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Returns the stored scene.\n     * @summary Get Scene\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} scene Unique identifier addressing a collision scene.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof StoreCollisionScenesApi\n     */\n    getStoredCollisionScene(cell, scene, options) {\n        return StoreCollisionScenesApiFp(this.configuration).getStoredCollisionScene(cell, scene, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Returns a list of stored scenes.\n     * @summary List Scenes\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof StoreCollisionScenesApi\n     */\n    listStoredCollisionScenes(cell, options) {\n        return StoreCollisionScenesApiFp(this.configuration).listStoredCollisionScenes(cell, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Creates or replaces the stored collision scene.  The scene is assembled from components as defined in the request body.  An error is returned if a stored object does not exist.\n     * @summary Store Scene\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} scene Unique identifier addressing a collision scene.\n     * @param {CollisionSceneAssembly} collisionSceneAssembly\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof StoreCollisionScenesApi\n     */\n    storeCollisionScene(cell, scene, collisionSceneAssembly, options) {\n        return StoreCollisionScenesApiFp(this.configuration).storeCollisionScene(cell, scene, collisionSceneAssembly, options).then((request) => request(this.axios, this.basePath));\n    }\n}\n/**\n * StoreObjectApi - axios parameter creator\n * @export\n */\nexport const StoreObjectApiAxiosParamCreator = function (configuration) {\n    return {\n        /**\n         * Delete all objects.  <!-- theme: danger --> > This will delete ALL your persistently stored data.\n         * @summary Clear all Objects\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        clearAllObjects: async (cell, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('clearAllObjects', 'cell', cell);\n            const localVarPath = `/cells/{cell}/store/objects`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Delete an object  <!-- theme: danger --> > This will delete persistently stored data.\n         * @summary Delete Object\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} key\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteObject: async (cell, key, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('deleteObject', 'cell', cell);\n            // verify required parameter 'key' is not null or undefined\n            assertParamExists('deleteObject', 'key', key);\n            const localVarPath = `/cells/{cell}/store/objects/{key}`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"key\"}}`, encodeURIComponent(String(key)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Get the object.  This request returns the object and any metadata attached to it.\n         * @summary Get Object\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} key\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getObject: async (cell, key, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('getObject', 'cell', cell);\n            // verify required parameter 'key' is not null or undefined\n            assertParamExists('getObject', 'key', key);\n            const localVarPath = `/cells/{cell}/store/objects/{key}`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"key\"}}`, encodeURIComponent(String(key)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Get object metadata.  Objects can be large. Therefore this request only returns metadata without fetching the object\\'s content.\n         * @summary Get Object Metadata\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} key\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getObjectMetadata: async (cell, key, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('getObjectMetadata', 'cell', cell);\n            // verify required parameter 'key' is not null or undefined\n            assertParamExists('getObjectMetadata', 'key', key);\n            const localVarPath = `/cells/{cell}/store/objects/{key}`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"key\"}}`, encodeURIComponent(String(key)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'HEAD', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * List the keys for all objects.\n         * @summary List all Object Keys\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listAllObjectKeys: async (cell, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('listAllObjectKeys', 'cell', cell);\n            const localVarPath = `/cells/{cell}/store/objects`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Store any data as an object.  Using a key which already contains an object will override the previously stored object. Use [getObjectMetadata](getObjectMetadata) to verify that the key does not contain objects.  Optional: Specify metadata as a dictionary with names and values.\n         * @summary Store Object\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} key\n         * @param {{ [key: string]: string; }} [xMetadata]\n         * @param {any} [anyValue]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        storeObject: async (cell, key, xMetadata, anyValue, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('storeObject', 'cell', cell);\n            // verify required parameter 'key' is not null or undefined\n            assertParamExists('storeObject', 'key', key);\n            const localVarPath = `/cells/{cell}/store/objects/{key}`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"key\"}}`, encodeURIComponent(String(key)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            const localVarFormParams = new ((configuration && configuration.formDataCtor) || FormData)();\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (anyValue !== undefined) {\n                localVarFormParams.append('AnyValue', new Blob([JSON.stringify(anyValue)], { type: \"application/json\", }));\n            }\n            localVarHeaderParameter['Content-Type'] = 'multipart/form-data';\n            if (xMetadata != null) {\n                localVarHeaderParameter['X-Metadata'] = typeof xMetadata === 'string'\n                    ? xMetadata\n                    : JSON.stringify(xMetadata);\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            localVarRequestOptions.data = localVarFormParams;\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n    };\n};\n/**\n * StoreObjectApi - functional programming interface\n * @export\n */\nexport const StoreObjectApiFp = function (configuration) {\n    const localVarAxiosParamCreator = StoreObjectApiAxiosParamCreator(configuration);\n    return {\n        /**\n         * Delete all objects.  <!-- theme: danger --> > This will delete ALL your persistently stored data.\n         * @summary Clear all Objects\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async clearAllObjects(cell, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.clearAllObjects(cell, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['StoreObjectApi.clearAllObjects']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Delete an object  <!-- theme: danger --> > This will delete persistently stored data.\n         * @summary Delete Object\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} key\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async deleteObject(cell, key, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.deleteObject(cell, key, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['StoreObjectApi.deleteObject']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Get the object.  This request returns the object and any metadata attached to it.\n         * @summary Get Object\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} key\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getObject(cell, key, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getObject(cell, key, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['StoreObjectApi.getObject']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Get object metadata.  Objects can be large. Therefore this request only returns metadata without fetching the object\\'s content.\n         * @summary Get Object Metadata\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} key\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getObjectMetadata(cell, key, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getObjectMetadata(cell, key, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['StoreObjectApi.getObjectMetadata']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * List the keys for all objects.\n         * @summary List all Object Keys\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async listAllObjectKeys(cell, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.listAllObjectKeys(cell, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['StoreObjectApi.listAllObjectKeys']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Store any data as an object.  Using a key which already contains an object will override the previously stored object. Use [getObjectMetadata](getObjectMetadata) to verify that the key does not contain objects.  Optional: Specify metadata as a dictionary with names and values.\n         * @summary Store Object\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} key\n         * @param {{ [key: string]: string; }} [xMetadata]\n         * @param {any} [anyValue]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async storeObject(cell, key, xMetadata, anyValue, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.storeObject(cell, key, xMetadata, anyValue, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['StoreObjectApi.storeObject']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n    };\n};\n/**\n * StoreObjectApi - factory interface\n * @export\n */\nexport const StoreObjectApiFactory = function (configuration, basePath, axios) {\n    const localVarFp = StoreObjectApiFp(configuration);\n    return {\n        /**\n         * Delete all objects.  <!-- theme: danger --> > This will delete ALL your persistently stored data.\n         * @summary Clear all Objects\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        clearAllObjects(cell, options) {\n            return localVarFp.clearAllObjects(cell, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Delete an object  <!-- theme: danger --> > This will delete persistently stored data.\n         * @summary Delete Object\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} key\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteObject(cell, key, options) {\n            return localVarFp.deleteObject(cell, key, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Get the object.  This request returns the object and any metadata attached to it.\n         * @summary Get Object\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} key\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getObject(cell, key, options) {\n            return localVarFp.getObject(cell, key, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Get object metadata.  Objects can be large. Therefore this request only returns metadata without fetching the object\\'s content.\n         * @summary Get Object Metadata\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} key\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getObjectMetadata(cell, key, options) {\n            return localVarFp.getObjectMetadata(cell, key, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * List the keys for all objects.\n         * @summary List all Object Keys\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listAllObjectKeys(cell, options) {\n            return localVarFp.listAllObjectKeys(cell, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Store any data as an object.  Using a key which already contains an object will override the previously stored object. Use [getObjectMetadata](getObjectMetadata) to verify that the key does not contain objects.  Optional: Specify metadata as a dictionary with names and values.\n         * @summary Store Object\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} key\n         * @param {{ [key: string]: string; }} [xMetadata]\n         * @param {any} [anyValue]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        storeObject(cell, key, xMetadata, anyValue, options) {\n            return localVarFp.storeObject(cell, key, xMetadata, anyValue, options).then((request) => request(axios, basePath));\n        },\n    };\n};\n/**\n * StoreObjectApi - object-oriented interface\n * @export\n * @class StoreObjectApi\n * @extends {BaseAPI}\n */\nexport class StoreObjectApi extends BaseAPI {\n    /**\n     * Delete all objects.  <!-- theme: danger --> > This will delete ALL your persistently stored data.\n     * @summary Clear all Objects\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof StoreObjectApi\n     */\n    clearAllObjects(cell, options) {\n        return StoreObjectApiFp(this.configuration).clearAllObjects(cell, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Delete an object  <!-- theme: danger --> > This will delete persistently stored data.\n     * @summary Delete Object\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} key\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof StoreObjectApi\n     */\n    deleteObject(cell, key, options) {\n        return StoreObjectApiFp(this.configuration).deleteObject(cell, key, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Get the object.  This request returns the object and any metadata attached to it.\n     * @summary Get Object\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} key\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof StoreObjectApi\n     */\n    getObject(cell, key, options) {\n        return StoreObjectApiFp(this.configuration).getObject(cell, key, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Get object metadata.  Objects can be large. Therefore this request only returns metadata without fetching the object\\'s content.\n     * @summary Get Object Metadata\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} key\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof StoreObjectApi\n     */\n    getObjectMetadata(cell, key, options) {\n        return StoreObjectApiFp(this.configuration).getObjectMetadata(cell, key, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * List the keys for all objects.\n     * @summary List all Object Keys\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof StoreObjectApi\n     */\n    listAllObjectKeys(cell, options) {\n        return StoreObjectApiFp(this.configuration).listAllObjectKeys(cell, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Store any data as an object.  Using a key which already contains an object will override the previously stored object. Use [getObjectMetadata](getObjectMetadata) to verify that the key does not contain objects.  Optional: Specify metadata as a dictionary with names and values.\n     * @summary Store Object\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} key\n     * @param {{ [key: string]: string; }} [xMetadata]\n     * @param {any} [anyValue]\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof StoreObjectApi\n     */\n    storeObject(cell, key, xMetadata, anyValue, options) {\n        return StoreObjectApiFp(this.configuration).storeObject(cell, key, xMetadata, anyValue, options).then((request) => request(this.axios, this.basePath));\n    }\n}\n/**\n * SystemApi - axios parameter creator\n * @export\n */\nexport const SystemApiAxiosParamCreator = function (configuration) {\n    return {\n        /**\n         * Check if a more recent Wandelbots NOVA Version is available.\n         * @summary Check update\n         * @param {ReleaseChannel} channel\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        checkNovaVersionUpdate: async (channel, options = {}) => {\n            // verify required parameter 'channel' is not null or undefined\n            assertParamExists('checkNovaVersionUpdate', 'channel', channel);\n            const localVarPath = `/system/update`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (channel !== undefined) {\n                localVarQueryParameter['channel'] = channel;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Collects information on the current status of all NOVA services and exports them as a .zip file.  Includes information on all cells on the instance such as the service logs and virtual robot controllers. From each cell the logs of all services are included, as well as the configuration of each connected controller to start virtual robots.\n         * @summary Download Diagnosis Package\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getDiagnosePackage: async (options = {}) => {\n            const localVarPath = `/system/diagnosis-package/zip`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Get the status of all system services.\n         * @summary Wandelbots NOVA status\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getSystemStatus: async (options = {}) => {\n            const localVarPath = `/system/status`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Get the current Wandelbots NOVA version.\n         * @summary Wandelbots NOVA Version\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getSystemVersion: async (options = {}) => {\n            const localVarPath = `/system/version`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Update the Wandelbots NOVA version and all attached services.  Sending this API Request will trigger an update of all NOVA services that are part of a cell. Previous cells and cell configurations will remain on the instance.  If an error occurs, the API Request is sent 3 times. If the error persists, the old Wandelbots NOVA version is restored.\n         * @summary Update Wandelbots NOVA version\n         * @param {UpdateNovaVersionRequest} updateNovaVersionRequest\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateNovaVersion: async (updateNovaVersionRequest, options = {}) => {\n            // verify required parameter 'updateNovaVersionRequest' is not null or undefined\n            assertParamExists('updateNovaVersion', 'updateNovaVersionRequest', updateNovaVersionRequest);\n            const localVarPath = `/system/update`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            localVarRequestOptions.data = serializeDataIfNeeded(updateNovaVersionRequest, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n    };\n};\n/**\n * SystemApi - functional programming interface\n * @export\n */\nexport const SystemApiFp = function (configuration) {\n    const localVarAxiosParamCreator = SystemApiAxiosParamCreator(configuration);\n    return {\n        /**\n         * Check if a more recent Wandelbots NOVA Version is available.\n         * @summary Check update\n         * @param {ReleaseChannel} channel\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async checkNovaVersionUpdate(channel, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.checkNovaVersionUpdate(channel, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['SystemApi.checkNovaVersionUpdate']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Collects information on the current status of all NOVA services and exports them as a .zip file.  Includes information on all cells on the instance such as the service logs and virtual robot controllers. From each cell the logs of all services are included, as well as the configuration of each connected controller to start virtual robots.\n         * @summary Download Diagnosis Package\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getDiagnosePackage(options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getDiagnosePackage(options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['SystemApi.getDiagnosePackage']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Get the status of all system services.\n         * @summary Wandelbots NOVA status\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getSystemStatus(options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getSystemStatus(options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['SystemApi.getSystemStatus']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Get the current Wandelbots NOVA version.\n         * @summary Wandelbots NOVA Version\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getSystemVersion(options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getSystemVersion(options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['SystemApi.getSystemVersion']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Update the Wandelbots NOVA version and all attached services.  Sending this API Request will trigger an update of all NOVA services that are part of a cell. Previous cells and cell configurations will remain on the instance.  If an error occurs, the API Request is sent 3 times. If the error persists, the old Wandelbots NOVA version is restored.\n         * @summary Update Wandelbots NOVA version\n         * @param {UpdateNovaVersionRequest} updateNovaVersionRequest\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async updateNovaVersion(updateNovaVersionRequest, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.updateNovaVersion(updateNovaVersionRequest, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['SystemApi.updateNovaVersion']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n    };\n};\n/**\n * SystemApi - factory interface\n * @export\n */\nexport const SystemApiFactory = function (configuration, basePath, axios) {\n    const localVarFp = SystemApiFp(configuration);\n    return {\n        /**\n         * Check if a more recent Wandelbots NOVA Version is available.\n         * @summary Check update\n         * @param {ReleaseChannel} channel\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        checkNovaVersionUpdate(channel, options) {\n            return localVarFp.checkNovaVersionUpdate(channel, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Collects information on the current status of all NOVA services and exports them as a .zip file.  Includes information on all cells on the instance such as the service logs and virtual robot controllers. From each cell the logs of all services are included, as well as the configuration of each connected controller to start virtual robots.\n         * @summary Download Diagnosis Package\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getDiagnosePackage(options) {\n            return localVarFp.getDiagnosePackage(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Get the status of all system services.\n         * @summary Wandelbots NOVA status\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getSystemStatus(options) {\n            return localVarFp.getSystemStatus(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Get the current Wandelbots NOVA version.\n         * @summary Wandelbots NOVA Version\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getSystemVersion(options) {\n            return localVarFp.getSystemVersion(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Update the Wandelbots NOVA version and all attached services.  Sending this API Request will trigger an update of all NOVA services that are part of a cell. Previous cells and cell configurations will remain on the instance.  If an error occurs, the API Request is sent 3 times. If the error persists, the old Wandelbots NOVA version is restored.\n         * @summary Update Wandelbots NOVA version\n         * @param {UpdateNovaVersionRequest} updateNovaVersionRequest\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateNovaVersion(updateNovaVersionRequest, options) {\n            return localVarFp.updateNovaVersion(updateNovaVersionRequest, options).then((request) => request(axios, basePath));\n        },\n    };\n};\n/**\n * SystemApi - object-oriented interface\n * @export\n * @class SystemApi\n * @extends {BaseAPI}\n */\nexport class SystemApi extends BaseAPI {\n    /**\n     * Check if a more recent Wandelbots NOVA Version is available.\n     * @summary Check update\n     * @param {ReleaseChannel} channel\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof SystemApi\n     */\n    checkNovaVersionUpdate(channel, options) {\n        return SystemApiFp(this.configuration).checkNovaVersionUpdate(channel, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Collects information on the current status of all NOVA services and exports them as a .zip file.  Includes information on all cells on the instance such as the service logs and virtual robot controllers. From each cell the logs of all services are included, as well as the configuration of each connected controller to start virtual robots.\n     * @summary Download Diagnosis Package\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof SystemApi\n     */\n    getDiagnosePackage(options) {\n        return SystemApiFp(this.configuration).getDiagnosePackage(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Get the status of all system services.\n     * @summary Wandelbots NOVA status\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof SystemApi\n     */\n    getSystemStatus(options) {\n        return SystemApiFp(this.configuration).getSystemStatus(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Get the current Wandelbots NOVA version.\n     * @summary Wandelbots NOVA Version\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof SystemApi\n     */\n    getSystemVersion(options) {\n        return SystemApiFp(this.configuration).getSystemVersion(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Update the Wandelbots NOVA version and all attached services.  Sending this API Request will trigger an update of all NOVA services that are part of a cell. Previous cells and cell configurations will remain on the instance.  If an error occurs, the API Request is sent 3 times. If the error persists, the old Wandelbots NOVA version is restored.\n     * @summary Update Wandelbots NOVA version\n     * @param {UpdateNovaVersionRequest} updateNovaVersionRequest\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof SystemApi\n     */\n    updateNovaVersion(updateNovaVersionRequest, options) {\n        return SystemApiFp(this.configuration).updateNovaVersion(updateNovaVersionRequest, options).then((request) => request(this.axios, this.basePath));\n    }\n}\n/**\n * VirtualRobotApi - axios parameter creator\n * @export\n */\nexport const VirtualRobotApiAxiosParamCreator = function (configuration) {\n    return {\n        /**\n         * Get the current motion group state which provides values for the joints\\' position, velocity and acceleration.\n         * @summary Get Motion Group State\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {number} id The controller specific motion-group id.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getMotionGroupState: async (cell, controller, id, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('getMotionGroupState', 'cell', cell);\n            // verify required parameter 'controller' is not null or undefined\n            assertParamExists('getMotionGroupState', 'controller', controller);\n            // verify required parameter 'id' is not null or undefined\n            assertParamExists('getMotionGroupState', 'id', id);\n            const localVarPath = `/cells/{cell}/controllers/{controller}/teach-pendant/motion-groups/{id}`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"controller\"}}`, encodeURIComponent(String(controller)))\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Gets information on the motion group.\n         * @summary Motion Group Description\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getMotionGroups: async (cell, controller, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('getMotionGroups', 'cell', cell);\n            // verify required parameter 'controller' is not null or undefined\n            assertParamExists('getMotionGroups', 'controller', controller);\n            const localVarPath = `/cells/{cell}/controllers/{controller}/teach-pendant/motiongroups`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"controller\"}}`, encodeURIComponent(String(controller)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Gets the description and value of a virtual controller I/O.\n         * @summary Get I/O\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {string} io The io id.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getVirtualRobotIOValue: async (cell, controller, io, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('getVirtualRobotIOValue', 'cell', cell);\n            // verify required parameter 'controller' is not null or undefined\n            assertParamExists('getVirtualRobotIOValue', 'controller', controller);\n            // verify required parameter 'io' is not null or undefined\n            assertParamExists('getVirtualRobotIOValue', 'io', io);\n            const localVarPath = `/cells/{cell}/controllers/{controller}/teach-pendant/ios/{io}`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"controller\"}}`, encodeURIComponent(String(controller)))\n                .replace(`{${\"io\"}}`, encodeURIComponent(String(io)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Lists all inputs/outputs of the virtual controller. Every input/output contains the description and the value.  As a virtual robot can have up to thousand inputs/outputs, be ready to handle a large response. Use [List Descriptions](List Descriptions) to get a detailed description of an input/output.\n         * @summary List Inputs/Outputs\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listIOs: async (cell, controller, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('listIOs', 'cell', cell);\n            // verify required parameter 'controller' is not null or undefined\n            assertParamExists('listIOs', 'controller', controller);\n            const localVarPath = `/cells/{cell}/controllers/{controller}/teach-pendant/ios`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"controller\"}}`, encodeURIComponent(String(controller)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Sets the values for joint position, joint velocity or joint acceleration of a motion group state. The values are immediately applied to the joints of the motion group. We recommend to only use the endpoint when the motion group is in monitor mode. In case the motion group is controlled, currently jogging or planning motions, the values are overridden by the controller or an error may occur.\n         * @summary Set Motion Group State\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {number} id The controller specific motion-group id.\n         * @param {MotionGroupJoints} motionGroupJoints\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        setMotionGroupState: async (cell, controller, id, motionGroupJoints, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('setMotionGroupState', 'cell', cell);\n            // verify required parameter 'controller' is not null or undefined\n            assertParamExists('setMotionGroupState', 'controller', controller);\n            // verify required parameter 'id' is not null or undefined\n            assertParamExists('setMotionGroupState', 'id', id);\n            // verify required parameter 'motionGroupJoints' is not null or undefined\n            assertParamExists('setMotionGroupState', 'motionGroupJoints', motionGroupJoints);\n            const localVarPath = `/cells/{cell}/controllers/{controller}/teach-pendant/motion-groups/{id}`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"controller\"}}`, encodeURIComponent(String(controller)))\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            localVarRequestOptions.data = serializeDataIfNeeded(motionGroupJoints, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Sets the value of a virtual controller I/O.\n         * @summary Set I/O\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {string} io The io id.\n         * @param {boolean} [bool]\n         * @param {string} [integer]\n         * @param {number} [_double]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        setVirtualRobotIOValue: async (cell, controller, io, bool, integer, _double, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('setVirtualRobotIOValue', 'cell', cell);\n            // verify required parameter 'controller' is not null or undefined\n            assertParamExists('setVirtualRobotIOValue', 'controller', controller);\n            // verify required parameter 'io' is not null or undefined\n            assertParamExists('setVirtualRobotIOValue', 'io', io);\n            const localVarPath = `/cells/{cell}/controllers/{controller}/teach-pendant/ios/{io}`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"controller\"}}`, encodeURIComponent(String(controller)))\n                .replace(`{${\"io\"}}`, encodeURIComponent(String(io)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (bool !== undefined) {\n                localVarQueryParameter['bool'] = bool;\n            }\n            if (integer !== undefined) {\n                localVarQueryParameter['integer'] = integer;\n            }\n            if (_double !== undefined) {\n                localVarQueryParameter['double'] = _double;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n    };\n};\n/**\n * VirtualRobotApi - functional programming interface\n * @export\n */\nexport const VirtualRobotApiFp = function (configuration) {\n    const localVarAxiosParamCreator = VirtualRobotApiAxiosParamCreator(configuration);\n    return {\n        /**\n         * Get the current motion group state which provides values for the joints\\' position, velocity and acceleration.\n         * @summary Get Motion Group State\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {number} id The controller specific motion-group id.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getMotionGroupState(cell, controller, id, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getMotionGroupState(cell, controller, id, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['VirtualRobotApi.getMotionGroupState']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Gets information on the motion group.\n         * @summary Motion Group Description\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getMotionGroups(cell, controller, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getMotionGroups(cell, controller, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['VirtualRobotApi.getMotionGroups']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Gets the description and value of a virtual controller I/O.\n         * @summary Get I/O\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {string} io The io id.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getVirtualRobotIOValue(cell, controller, io, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getVirtualRobotIOValue(cell, controller, io, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['VirtualRobotApi.getVirtualRobotIOValue']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Lists all inputs/outputs of the virtual controller. Every input/output contains the description and the value.  As a virtual robot can have up to thousand inputs/outputs, be ready to handle a large response. Use [List Descriptions](List Descriptions) to get a detailed description of an input/output.\n         * @summary List Inputs/Outputs\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async listIOs(cell, controller, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.listIOs(cell, controller, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['VirtualRobotApi.listIOs']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Sets the values for joint position, joint velocity or joint acceleration of a motion group state. The values are immediately applied to the joints of the motion group. We recommend to only use the endpoint when the motion group is in monitor mode. In case the motion group is controlled, currently jogging or planning motions, the values are overridden by the controller or an error may occur.\n         * @summary Set Motion Group State\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {number} id The controller specific motion-group id.\n         * @param {MotionGroupJoints} motionGroupJoints\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async setMotionGroupState(cell, controller, id, motionGroupJoints, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.setMotionGroupState(cell, controller, id, motionGroupJoints, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['VirtualRobotApi.setMotionGroupState']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Sets the value of a virtual controller I/O.\n         * @summary Set I/O\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {string} io The io id.\n         * @param {boolean} [bool]\n         * @param {string} [integer]\n         * @param {number} [_double]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async setVirtualRobotIOValue(cell, controller, io, bool, integer, _double, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.setVirtualRobotIOValue(cell, controller, io, bool, integer, _double, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['VirtualRobotApi.setVirtualRobotIOValue']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n    };\n};\n/**\n * VirtualRobotApi - factory interface\n * @export\n */\nexport const VirtualRobotApiFactory = function (configuration, basePath, axios) {\n    const localVarFp = VirtualRobotApiFp(configuration);\n    return {\n        /**\n         * Get the current motion group state which provides values for the joints\\' position, velocity and acceleration.\n         * @summary Get Motion Group State\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {number} id The controller specific motion-group id.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getMotionGroupState(cell, controller, id, options) {\n            return localVarFp.getMotionGroupState(cell, controller, id, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Gets information on the motion group.\n         * @summary Motion Group Description\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getMotionGroups(cell, controller, options) {\n            return localVarFp.getMotionGroups(cell, controller, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Gets the description and value of a virtual controller I/O.\n         * @summary Get I/O\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {string} io The io id.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getVirtualRobotIOValue(cell, controller, io, options) {\n            return localVarFp.getVirtualRobotIOValue(cell, controller, io, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Lists all inputs/outputs of the virtual controller. Every input/output contains the description and the value.  As a virtual robot can have up to thousand inputs/outputs, be ready to handle a large response. Use [List Descriptions](List Descriptions) to get a detailed description of an input/output.\n         * @summary List Inputs/Outputs\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listIOs(cell, controller, options) {\n            return localVarFp.listIOs(cell, controller, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Sets the values for joint position, joint velocity or joint acceleration of a motion group state. The values are immediately applied to the joints of the motion group. We recommend to only use the endpoint when the motion group is in monitor mode. In case the motion group is controlled, currently jogging or planning motions, the values are overridden by the controller or an error may occur.\n         * @summary Set Motion Group State\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {number} id The controller specific motion-group id.\n         * @param {MotionGroupJoints} motionGroupJoints\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        setMotionGroupState(cell, controller, id, motionGroupJoints, options) {\n            return localVarFp.setMotionGroupState(cell, controller, id, motionGroupJoints, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Sets the value of a virtual controller I/O.\n         * @summary Set I/O\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {string} io The io id.\n         * @param {boolean} [bool]\n         * @param {string} [integer]\n         * @param {number} [_double]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        setVirtualRobotIOValue(cell, controller, io, bool, integer, _double, options) {\n            return localVarFp.setVirtualRobotIOValue(cell, controller, io, bool, integer, _double, options).then((request) => request(axios, basePath));\n        },\n    };\n};\n/**\n * VirtualRobotApi - object-oriented interface\n * @export\n * @class VirtualRobotApi\n * @extends {BaseAPI}\n */\nexport class VirtualRobotApi extends BaseAPI {\n    /**\n     * Get the current motion group state which provides values for the joints\\' position, velocity and acceleration.\n     * @summary Get Motion Group State\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} controller Unique identifier to address a controller in the cell.\n     * @param {number} id The controller specific motion-group id.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof VirtualRobotApi\n     */\n    getMotionGroupState(cell, controller, id, options) {\n        return VirtualRobotApiFp(this.configuration).getMotionGroupState(cell, controller, id, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Gets information on the motion group.\n     * @summary Motion Group Description\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} controller Unique identifier to address a controller in the cell.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof VirtualRobotApi\n     */\n    getMotionGroups(cell, controller, options) {\n        return VirtualRobotApiFp(this.configuration).getMotionGroups(cell, controller, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Gets the description and value of a virtual controller I/O.\n     * @summary Get I/O\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} controller Unique identifier to address a controller in the cell.\n     * @param {string} io The io id.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof VirtualRobotApi\n     */\n    getVirtualRobotIOValue(cell, controller, io, options) {\n        return VirtualRobotApiFp(this.configuration).getVirtualRobotIOValue(cell, controller, io, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Lists all inputs/outputs of the virtual controller. Every input/output contains the description and the value.  As a virtual robot can have up to thousand inputs/outputs, be ready to handle a large response. Use [List Descriptions](List Descriptions) to get a detailed description of an input/output.\n     * @summary List Inputs/Outputs\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} controller Unique identifier to address a controller in the cell.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof VirtualRobotApi\n     */\n    listIOs(cell, controller, options) {\n        return VirtualRobotApiFp(this.configuration).listIOs(cell, controller, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Sets the values for joint position, joint velocity or joint acceleration of a motion group state. The values are immediately applied to the joints of the motion group. We recommend to only use the endpoint when the motion group is in monitor mode. In case the motion group is controlled, currently jogging or planning motions, the values are overridden by the controller or an error may occur.\n     * @summary Set Motion Group State\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} controller Unique identifier to address a controller in the cell.\n     * @param {number} id The controller specific motion-group id.\n     * @param {MotionGroupJoints} motionGroupJoints\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof VirtualRobotApi\n     */\n    setMotionGroupState(cell, controller, id, motionGroupJoints, options) {\n        return VirtualRobotApiFp(this.configuration).setMotionGroupState(cell, controller, id, motionGroupJoints, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Sets the value of a virtual controller I/O.\n     * @summary Set I/O\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} controller Unique identifier to address a controller in the cell.\n     * @param {string} io The io id.\n     * @param {boolean} [bool]\n     * @param {string} [integer]\n     * @param {number} [_double]\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof VirtualRobotApi\n     */\n    setVirtualRobotIOValue(cell, controller, io, bool, integer, _double, options) {\n        return VirtualRobotApiFp(this.configuration).setVirtualRobotIOValue(cell, controller, io, bool, integer, _double, options).then((request) => request(this.axios, this.basePath));\n    }\n}\n/**\n * VirtualRobotBehaviorApi - axios parameter creator\n * @export\n */\nexport const VirtualRobotBehaviorApiAxiosParamCreator = function (configuration) {\n    return {\n        /**\n         * This stream provides the commanded joint state and sets a motion groups joint configuration, e.g. to move a motion group. The concept is that an application is using the Motion Service to move a motion group. The Motion Service is commanding the desired joint configuration of a motion group.  Physical motion groups move to this joint configuration.  With physical motion groups, this takes some time and only works if possible.  And you have the *actual* joint state - the current real motion group configuration.  Again, this stream is providing *commanded* joint state! It is __not__ providing the *actual* joint state! (Please file a request - if you need a stream of the *actual* joint state)  When the virtual controller receives joint commands the joint configuration is immediately adapted to match the incoming joint configurations. CAUTION: Incoming joint configurations are not visualized and their velocity limits are not checked. we don\\'t even check limits!  Possible use cases are: 1. Creating a robotic application that dynamically adapts to the configured joints on the robot controller, using this stream to feed new joint configurations back to the motion group.  The stream only sends data to the robot controller if a motion is executed.  If the robot controller\\'s joint configuration differs too much from the incoming joint configuration, a following error occurs. Joint configurations that result in following errors are executed only for motions with a low velocity.  2. Mimic Freedrive motions.  <!-- theme: danger -->  > **DANGER** > > If the incoming joint configuration is set to maximum velocity, the movement to reach this incoming joint configuration will be executed with maximum speed regardless > of safety zones and mechanical limits.\n         * @summary Stream Joint Configuration\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {ExternalJointStreamDatapoint} externalJointStreamDatapoint\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        externalJointsStream: async (cell, controller, externalJointStreamDatapoint, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('externalJointsStream', 'cell', cell);\n            // verify required parameter 'controller' is not null or undefined\n            assertParamExists('externalJointsStream', 'controller', controller);\n            // verify required parameter 'externalJointStreamDatapoint' is not null or undefined\n            assertParamExists('externalJointsStream', 'externalJointStreamDatapoint', externalJointStreamDatapoint);\n            const localVarPath = `/cells/{cell}/controllers/{controller}/teach-pendant/motion-groups/externalJointsStream`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"controller\"}}`, encodeURIComponent(String(controller)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            localVarRequestOptions.data = serializeDataIfNeeded(externalJointStreamDatapoint, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Get the current robot motion group behavior - please see the setter [setMotionGroupBehavior](setMotionGroupBehavior) and the enum for details.\n         * @summary Behavior\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {number} id The controller specific motion-group id.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getMotionGroupBehavior: async (cell, controller, id, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('getMotionGroupBehavior', 'cell', cell);\n            // verify required parameter 'controller' is not null or undefined\n            assertParamExists('getMotionGroupBehavior', 'controller', controller);\n            // verify required parameter 'id' is not null or undefined\n            assertParamExists('getMotionGroupBehavior', 'id', id);\n            const localVarPath = `/cells/{cell}/controllers/{controller}/teach-pendant/motion-groups/{id}/behavior`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"controller\"}}`, encodeURIComponent(String(controller)))\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Switch robot motion group behavior.\n         * @summary Switch Behavior\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {number} id The controller specific motion-group id.\n         * @param {Behavior} [behavior]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        setMotionGroupBehavior: async (cell, controller, id, behavior, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('setMotionGroupBehavior', 'cell', cell);\n            // verify required parameter 'controller' is not null or undefined\n            assertParamExists('setMotionGroupBehavior', 'controller', controller);\n            // verify required parameter 'id' is not null or undefined\n            assertParamExists('setMotionGroupBehavior', 'id', id);\n            const localVarPath = `/cells/{cell}/controllers/{controller}/teach-pendant/motion-groups/{id}/behavior`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"controller\"}}`, encodeURIComponent(String(controller)))\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (behavior !== undefined) {\n                localVarQueryParameter['behavior'] = behavior;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n    };\n};\n/**\n * VirtualRobotBehaviorApi - functional programming interface\n * @export\n */\nexport const VirtualRobotBehaviorApiFp = function (configuration) {\n    const localVarAxiosParamCreator = VirtualRobotBehaviorApiAxiosParamCreator(configuration);\n    return {\n        /**\n         * This stream provides the commanded joint state and sets a motion groups joint configuration, e.g. to move a motion group. The concept is that an application is using the Motion Service to move a motion group. The Motion Service is commanding the desired joint configuration of a motion group.  Physical motion groups move to this joint configuration.  With physical motion groups, this takes some time and only works if possible.  And you have the *actual* joint state - the current real motion group configuration.  Again, this stream is providing *commanded* joint state! It is __not__ providing the *actual* joint state! (Please file a request - if you need a stream of the *actual* joint state)  When the virtual controller receives joint commands the joint configuration is immediately adapted to match the incoming joint configurations. CAUTION: Incoming joint configurations are not visualized and their velocity limits are not checked. we don\\'t even check limits!  Possible use cases are: 1. Creating a robotic application that dynamically adapts to the configured joints on the robot controller, using this stream to feed new joint configurations back to the motion group.  The stream only sends data to the robot controller if a motion is executed.  If the robot controller\\'s joint configuration differs too much from the incoming joint configuration, a following error occurs. Joint configurations that result in following errors are executed only for motions with a low velocity.  2. Mimic Freedrive motions.  <!-- theme: danger -->  > **DANGER** > > If the incoming joint configuration is set to maximum velocity, the movement to reach this incoming joint configuration will be executed with maximum speed regardless > of safety zones and mechanical limits.\n         * @summary Stream Joint Configuration\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {ExternalJointStreamDatapoint} externalJointStreamDatapoint\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async externalJointsStream(cell, controller, externalJointStreamDatapoint, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.externalJointsStream(cell, controller, externalJointStreamDatapoint, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['VirtualRobotBehaviorApi.externalJointsStream']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Get the current robot motion group behavior - please see the setter [setMotionGroupBehavior](setMotionGroupBehavior) and the enum for details.\n         * @summary Behavior\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {number} id The controller specific motion-group id.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getMotionGroupBehavior(cell, controller, id, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getMotionGroupBehavior(cell, controller, id, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['VirtualRobotBehaviorApi.getMotionGroupBehavior']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Switch robot motion group behavior.\n         * @summary Switch Behavior\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {number} id The controller specific motion-group id.\n         * @param {Behavior} [behavior]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async setMotionGroupBehavior(cell, controller, id, behavior, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.setMotionGroupBehavior(cell, controller, id, behavior, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['VirtualRobotBehaviorApi.setMotionGroupBehavior']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n    };\n};\n/**\n * VirtualRobotBehaviorApi - factory interface\n * @export\n */\nexport const VirtualRobotBehaviorApiFactory = function (configuration, basePath, axios) {\n    const localVarFp = VirtualRobotBehaviorApiFp(configuration);\n    return {\n        /**\n         * This stream provides the commanded joint state and sets a motion groups joint configuration, e.g. to move a motion group. The concept is that an application is using the Motion Service to move a motion group. The Motion Service is commanding the desired joint configuration of a motion group.  Physical motion groups move to this joint configuration.  With physical motion groups, this takes some time and only works if possible.  And you have the *actual* joint state - the current real motion group configuration.  Again, this stream is providing *commanded* joint state! It is __not__ providing the *actual* joint state! (Please file a request - if you need a stream of the *actual* joint state)  When the virtual controller receives joint commands the joint configuration is immediately adapted to match the incoming joint configurations. CAUTION: Incoming joint configurations are not visualized and their velocity limits are not checked. we don\\'t even check limits!  Possible use cases are: 1. Creating a robotic application that dynamically adapts to the configured joints on the robot controller, using this stream to feed new joint configurations back to the motion group.  The stream only sends data to the robot controller if a motion is executed.  If the robot controller\\'s joint configuration differs too much from the incoming joint configuration, a following error occurs. Joint configurations that result in following errors are executed only for motions with a low velocity.  2. Mimic Freedrive motions.  <!-- theme: danger -->  > **DANGER** > > If the incoming joint configuration is set to maximum velocity, the movement to reach this incoming joint configuration will be executed with maximum speed regardless > of safety zones and mechanical limits.\n         * @summary Stream Joint Configuration\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {ExternalJointStreamDatapoint} externalJointStreamDatapoint\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        externalJointsStream(cell, controller, externalJointStreamDatapoint, options) {\n            return localVarFp.externalJointsStream(cell, controller, externalJointStreamDatapoint, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Get the current robot motion group behavior - please see the setter [setMotionGroupBehavior](setMotionGroupBehavior) and the enum for details.\n         * @summary Behavior\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {number} id The controller specific motion-group id.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getMotionGroupBehavior(cell, controller, id, options) {\n            return localVarFp.getMotionGroupBehavior(cell, controller, id, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Switch robot motion group behavior.\n         * @summary Switch Behavior\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {number} id The controller specific motion-group id.\n         * @param {Behavior} [behavior]\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        setMotionGroupBehavior(cell, controller, id, behavior, options) {\n            return localVarFp.setMotionGroupBehavior(cell, controller, id, behavior, options).then((request) => request(axios, basePath));\n        },\n    };\n};\n/**\n * VirtualRobotBehaviorApi - object-oriented interface\n * @export\n * @class VirtualRobotBehaviorApi\n * @extends {BaseAPI}\n */\nexport class VirtualRobotBehaviorApi extends BaseAPI {\n    /**\n     * This stream provides the commanded joint state and sets a motion groups joint configuration, e.g. to move a motion group. The concept is that an application is using the Motion Service to move a motion group. The Motion Service is commanding the desired joint configuration of a motion group.  Physical motion groups move to this joint configuration.  With physical motion groups, this takes some time and only works if possible.  And you have the *actual* joint state - the current real motion group configuration.  Again, this stream is providing *commanded* joint state! It is __not__ providing the *actual* joint state! (Please file a request - if you need a stream of the *actual* joint state)  When the virtual controller receives joint commands the joint configuration is immediately adapted to match the incoming joint configurations. CAUTION: Incoming joint configurations are not visualized and their velocity limits are not checked. we don\\'t even check limits!  Possible use cases are: 1. Creating a robotic application that dynamically adapts to the configured joints on the robot controller, using this stream to feed new joint configurations back to the motion group.  The stream only sends data to the robot controller if a motion is executed.  If the robot controller\\'s joint configuration differs too much from the incoming joint configuration, a following error occurs. Joint configurations that result in following errors are executed only for motions with a low velocity.  2. Mimic Freedrive motions.  <!-- theme: danger -->  > **DANGER** > > If the incoming joint configuration is set to maximum velocity, the movement to reach this incoming joint configuration will be executed with maximum speed regardless > of safety zones and mechanical limits.\n     * @summary Stream Joint Configuration\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} controller Unique identifier to address a controller in the cell.\n     * @param {ExternalJointStreamDatapoint} externalJointStreamDatapoint\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof VirtualRobotBehaviorApi\n     */\n    externalJointsStream(cell, controller, externalJointStreamDatapoint, options) {\n        return VirtualRobotBehaviorApiFp(this.configuration).externalJointsStream(cell, controller, externalJointStreamDatapoint, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Get the current robot motion group behavior - please see the setter [setMotionGroupBehavior](setMotionGroupBehavior) and the enum for details.\n     * @summary Behavior\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} controller Unique identifier to address a controller in the cell.\n     * @param {number} id The controller specific motion-group id.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof VirtualRobotBehaviorApi\n     */\n    getMotionGroupBehavior(cell, controller, id, options) {\n        return VirtualRobotBehaviorApiFp(this.configuration).getMotionGroupBehavior(cell, controller, id, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Switch robot motion group behavior.\n     * @summary Switch Behavior\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} controller Unique identifier to address a controller in the cell.\n     * @param {number} id The controller specific motion-group id.\n     * @param {Behavior} [behavior]\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof VirtualRobotBehaviorApi\n     */\n    setMotionGroupBehavior(cell, controller, id, behavior, options) {\n        return VirtualRobotBehaviorApiFp(this.configuration).setMotionGroupBehavior(cell, controller, id, behavior, options).then((request) => request(this.axios, this.basePath));\n    }\n}\n/**\n * VirtualRobotModeApi - axios parameter creator\n * @export\n */\nexport const VirtualRobotModeApiAxiosParamCreator = function (configuration) {\n    return {\n        /**\n         * Get the cycle time of controller communication in [ms].\n         * @summary Cycle Time\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getCycleTime: async (cell, controller, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('getCycleTime', 'cell', cell);\n            // verify required parameter 'controller' is not null or undefined\n            assertParamExists('getCycleTime', 'controller', controller);\n            const localVarPath = `/cells/{cell}/controllers/{controller}/teach-pendant/cycle-time`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"controller\"}}`, encodeURIComponent(String(controller)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Requests the Emergency Stop state of the virtual robot controller.  Use [getCurrentMotionGroupState](getCurrentMotionGroupState) to get the Emergency Stop state regardless of the controller type. There the Emergency Stop state is visible as the `safety_state`.  > **NOTE** > > The Emergency Stop state can only be changed when using virtual robot controllers.\n         * @summary Get E-Stop State\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getEStop: async (cell, controller, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('getEStop', 'cell', cell);\n            // verify required parameter 'controller' is not null or undefined\n            assertParamExists('getEStop', 'controller', controller);\n            const localVarPath = `/cells/{cell}/controllers/{controller}/teach-pendant/estop`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"controller\"}}`, encodeURIComponent(String(controller)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Requests the Operation Mode of the virtual robot controller.  To get the Operation Mode regardless of the controller type use [getCurrentMotionGroupState](getCurrentMotionGroupState).  > **NOTE** > > The Operating Mode can only change be changed via API when using virtual robot controllers.\n         * @summary Get Operation Mode\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getOperationMode: async (cell, controller, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('getOperationMode', 'cell', cell);\n            // verify required parameter 'controller' is not null or undefined\n            assertParamExists('getOperationMode', 'controller', controller);\n            const localVarPath = `/cells/{cell}/controllers/{controller}/teach-pendant/operationmode`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"controller\"}}`, encodeURIComponent(String(controller)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Activates the Emergency Stop on the virtual robot controller.  Activating the Emergency Stop stops the execution of all motions on virtual and physical robot controllers. To return to normal operation the Emergency Stop needs to be released.  Use [getCurrentMotionGroupState](getCurrentMotionGroupState) to get the Emergency Stop state regardless of the controller type. There the Emergency Stop state is visible as the `safety_state`.  > **NOTE** > > The Emergency Stop state can only be changed via API when using virtual robot controllers.\n         * @summary Push E-Stop\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        pushEStop: async (cell, controller, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('pushEStop', 'cell', cell);\n            // verify required parameter 'controller' is not null or undefined\n            assertParamExists('pushEStop', 'controller', controller);\n            const localVarPath = `/cells/{cell}/controllers/{controller}/teach-pendant/estop/push`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"controller\"}}`, encodeURIComponent(String(controller)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Releases the Emergency Stop on the virtual robot controller.   Activating the Emergency Stop stops the execution of all motions on virtual and physical robot controllers. To return to normal operation the Emergency Stop needs to be released.  Use [getCurrentMotionGroupState](getCurrentMotionGroupState) to get the Emergency Stop state regardless of the controller type. There the Emergency Stop state is visible as the `safety_state`.  > **NOTE** > > The Emergency Stop state can only be changed via API when using virtual robot controllers.\n         * @summary Release E-Stop\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        releaseEStop: async (cell, controller, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('releaseEStop', 'cell', cell);\n            // verify required parameter 'controller' is not null or undefined\n            assertParamExists('releaseEStop', 'controller', controller);\n            const localVarPath = `/cells/{cell}/controllers/{controller}/teach-pendant/estop/release`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"controller\"}}`, encodeURIComponent(String(controller)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Changes the Operation Mode of the virtual robot controller to the specified value.  To get the Operation Mode regardless of the controller type use [getCurrentMotionGroupState](getCurrentMotionGroupState).  > **NOTE** > > The Operating Mode can only change be changed via API when using virtual robot controllers.\n         * @summary Set Operation Mode\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {SetOperationModeModeEnum} mode\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        setOperationMode: async (cell, controller, mode, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('setOperationMode', 'cell', cell);\n            // verify required parameter 'controller' is not null or undefined\n            assertParamExists('setOperationMode', 'controller', controller);\n            // verify required parameter 'mode' is not null or undefined\n            assertParamExists('setOperationMode', 'mode', mode);\n            const localVarPath = `/cells/{cell}/controllers/{controller}/teach-pendant/operationmode`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"controller\"}}`, encodeURIComponent(String(controller)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (mode !== undefined) {\n                localVarQueryParameter['mode'] = mode;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n    };\n};\n/**\n * VirtualRobotModeApi - functional programming interface\n * @export\n */\nexport const VirtualRobotModeApiFp = function (configuration) {\n    const localVarAxiosParamCreator = VirtualRobotModeApiAxiosParamCreator(configuration);\n    return {\n        /**\n         * Get the cycle time of controller communication in [ms].\n         * @summary Cycle Time\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getCycleTime(cell, controller, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getCycleTime(cell, controller, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['VirtualRobotModeApi.getCycleTime']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Requests the Emergency Stop state of the virtual robot controller.  Use [getCurrentMotionGroupState](getCurrentMotionGroupState) to get the Emergency Stop state regardless of the controller type. There the Emergency Stop state is visible as the `safety_state`.  > **NOTE** > > The Emergency Stop state can only be changed when using virtual robot controllers.\n         * @summary Get E-Stop State\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getEStop(cell, controller, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getEStop(cell, controller, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['VirtualRobotModeApi.getEStop']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Requests the Operation Mode of the virtual robot controller.  To get the Operation Mode regardless of the controller type use [getCurrentMotionGroupState](getCurrentMotionGroupState).  > **NOTE** > > The Operating Mode can only change be changed via API when using virtual robot controllers.\n         * @summary Get Operation Mode\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getOperationMode(cell, controller, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getOperationMode(cell, controller, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['VirtualRobotModeApi.getOperationMode']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Activates the Emergency Stop on the virtual robot controller.  Activating the Emergency Stop stops the execution of all motions on virtual and physical robot controllers. To return to normal operation the Emergency Stop needs to be released.  Use [getCurrentMotionGroupState](getCurrentMotionGroupState) to get the Emergency Stop state regardless of the controller type. There the Emergency Stop state is visible as the `safety_state`.  > **NOTE** > > The Emergency Stop state can only be changed via API when using virtual robot controllers.\n         * @summary Push E-Stop\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async pushEStop(cell, controller, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.pushEStop(cell, controller, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['VirtualRobotModeApi.pushEStop']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Releases the Emergency Stop on the virtual robot controller.   Activating the Emergency Stop stops the execution of all motions on virtual and physical robot controllers. To return to normal operation the Emergency Stop needs to be released.  Use [getCurrentMotionGroupState](getCurrentMotionGroupState) to get the Emergency Stop state regardless of the controller type. There the Emergency Stop state is visible as the `safety_state`.  > **NOTE** > > The Emergency Stop state can only be changed via API when using virtual robot controllers.\n         * @summary Release E-Stop\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async releaseEStop(cell, controller, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.releaseEStop(cell, controller, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['VirtualRobotModeApi.releaseEStop']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Changes the Operation Mode of the virtual robot controller to the specified value.  To get the Operation Mode regardless of the controller type use [getCurrentMotionGroupState](getCurrentMotionGroupState).  > **NOTE** > > The Operating Mode can only change be changed via API when using virtual robot controllers.\n         * @summary Set Operation Mode\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {SetOperationModeModeEnum} mode\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async setOperationMode(cell, controller, mode, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.setOperationMode(cell, controller, mode, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['VirtualRobotModeApi.setOperationMode']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n    };\n};\n/**\n * VirtualRobotModeApi - factory interface\n * @export\n */\nexport const VirtualRobotModeApiFactory = function (configuration, basePath, axios) {\n    const localVarFp = VirtualRobotModeApiFp(configuration);\n    return {\n        /**\n         * Get the cycle time of controller communication in [ms].\n         * @summary Cycle Time\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getCycleTime(cell, controller, options) {\n            return localVarFp.getCycleTime(cell, controller, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Requests the Emergency Stop state of the virtual robot controller.  Use [getCurrentMotionGroupState](getCurrentMotionGroupState) to get the Emergency Stop state regardless of the controller type. There the Emergency Stop state is visible as the `safety_state`.  > **NOTE** > > The Emergency Stop state can only be changed when using virtual robot controllers.\n         * @summary Get E-Stop State\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getEStop(cell, controller, options) {\n            return localVarFp.getEStop(cell, controller, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Requests the Operation Mode of the virtual robot controller.  To get the Operation Mode regardless of the controller type use [getCurrentMotionGroupState](getCurrentMotionGroupState).  > **NOTE** > > The Operating Mode can only change be changed via API when using virtual robot controllers.\n         * @summary Get Operation Mode\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getOperationMode(cell, controller, options) {\n            return localVarFp.getOperationMode(cell, controller, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Activates the Emergency Stop on the virtual robot controller.  Activating the Emergency Stop stops the execution of all motions on virtual and physical robot controllers. To return to normal operation the Emergency Stop needs to be released.  Use [getCurrentMotionGroupState](getCurrentMotionGroupState) to get the Emergency Stop state regardless of the controller type. There the Emergency Stop state is visible as the `safety_state`.  > **NOTE** > > The Emergency Stop state can only be changed via API when using virtual robot controllers.\n         * @summary Push E-Stop\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        pushEStop(cell, controller, options) {\n            return localVarFp.pushEStop(cell, controller, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Releases the Emergency Stop on the virtual robot controller.   Activating the Emergency Stop stops the execution of all motions on virtual and physical robot controllers. To return to normal operation the Emergency Stop needs to be released.  Use [getCurrentMotionGroupState](getCurrentMotionGroupState) to get the Emergency Stop state regardless of the controller type. There the Emergency Stop state is visible as the `safety_state`.  > **NOTE** > > The Emergency Stop state can only be changed via API when using virtual robot controllers.\n         * @summary Release E-Stop\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        releaseEStop(cell, controller, options) {\n            return localVarFp.releaseEStop(cell, controller, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Changes the Operation Mode of the virtual robot controller to the specified value.  To get the Operation Mode regardless of the controller type use [getCurrentMotionGroupState](getCurrentMotionGroupState).  > **NOTE** > > The Operating Mode can only change be changed via API when using virtual robot controllers.\n         * @summary Set Operation Mode\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {SetOperationModeModeEnum} mode\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        setOperationMode(cell, controller, mode, options) {\n            return localVarFp.setOperationMode(cell, controller, mode, options).then((request) => request(axios, basePath));\n        },\n    };\n};\n/**\n * VirtualRobotModeApi - object-oriented interface\n * @export\n * @class VirtualRobotModeApi\n * @extends {BaseAPI}\n */\nexport class VirtualRobotModeApi extends BaseAPI {\n    /**\n     * Get the cycle time of controller communication in [ms].\n     * @summary Cycle Time\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} controller Unique identifier to address a controller in the cell.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof VirtualRobotModeApi\n     */\n    getCycleTime(cell, controller, options) {\n        return VirtualRobotModeApiFp(this.configuration).getCycleTime(cell, controller, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Requests the Emergency Stop state of the virtual robot controller.  Use [getCurrentMotionGroupState](getCurrentMotionGroupState) to get the Emergency Stop state regardless of the controller type. There the Emergency Stop state is visible as the `safety_state`.  > **NOTE** > > The Emergency Stop state can only be changed when using virtual robot controllers.\n     * @summary Get E-Stop State\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} controller Unique identifier to address a controller in the cell.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof VirtualRobotModeApi\n     */\n    getEStop(cell, controller, options) {\n        return VirtualRobotModeApiFp(this.configuration).getEStop(cell, controller, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Requests the Operation Mode of the virtual robot controller.  To get the Operation Mode regardless of the controller type use [getCurrentMotionGroupState](getCurrentMotionGroupState).  > **NOTE** > > The Operating Mode can only change be changed via API when using virtual robot controllers.\n     * @summary Get Operation Mode\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} controller Unique identifier to address a controller in the cell.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof VirtualRobotModeApi\n     */\n    getOperationMode(cell, controller, options) {\n        return VirtualRobotModeApiFp(this.configuration).getOperationMode(cell, controller, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Activates the Emergency Stop on the virtual robot controller.  Activating the Emergency Stop stops the execution of all motions on virtual and physical robot controllers. To return to normal operation the Emergency Stop needs to be released.  Use [getCurrentMotionGroupState](getCurrentMotionGroupState) to get the Emergency Stop state regardless of the controller type. There the Emergency Stop state is visible as the `safety_state`.  > **NOTE** > > The Emergency Stop state can only be changed via API when using virtual robot controllers.\n     * @summary Push E-Stop\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} controller Unique identifier to address a controller in the cell.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof VirtualRobotModeApi\n     */\n    pushEStop(cell, controller, options) {\n        return VirtualRobotModeApiFp(this.configuration).pushEStop(cell, controller, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Releases the Emergency Stop on the virtual robot controller.   Activating the Emergency Stop stops the execution of all motions on virtual and physical robot controllers. To return to normal operation the Emergency Stop needs to be released.  Use [getCurrentMotionGroupState](getCurrentMotionGroupState) to get the Emergency Stop state regardless of the controller type. There the Emergency Stop state is visible as the `safety_state`.  > **NOTE** > > The Emergency Stop state can only be changed via API when using virtual robot controllers.\n     * @summary Release E-Stop\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} controller Unique identifier to address a controller in the cell.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof VirtualRobotModeApi\n     */\n    releaseEStop(cell, controller, options) {\n        return VirtualRobotModeApiFp(this.configuration).releaseEStop(cell, controller, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Changes the Operation Mode of the virtual robot controller to the specified value.  To get the Operation Mode regardless of the controller type use [getCurrentMotionGroupState](getCurrentMotionGroupState).  > **NOTE** > > The Operating Mode can only change be changed via API when using virtual robot controllers.\n     * @summary Set Operation Mode\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} controller Unique identifier to address a controller in the cell.\n     * @param {SetOperationModeModeEnum} mode\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof VirtualRobotModeApi\n     */\n    setOperationMode(cell, controller, mode, options) {\n        return VirtualRobotModeApiFp(this.configuration).setOperationMode(cell, controller, mode, options).then((request) => request(this.axios, this.basePath));\n    }\n}\n/**\n * @export\n */\nexport const SetOperationModeModeEnum = {\n    OperationModeManual: 'OPERATION_MODE_MANUAL',\n    OperationModeAuto: 'OPERATION_MODE_AUTO'\n};\n/**\n * VirtualRobotSetupApi - axios parameter creator\n * @export\n */\nexport const VirtualRobotSetupApiAxiosParamCreator = function (configuration) {\n    return {\n        /**\n         * Adds a coordinate system to the robot controller.\n         * @summary Add Coordinate Systems\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {CoordinateSystem} coordinateSystem\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        addVirtualRobotCoordinateSystem: async (cell, controller, coordinateSystem, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('addVirtualRobotCoordinateSystem', 'cell', cell);\n            // verify required parameter 'controller' is not null or undefined\n            assertParamExists('addVirtualRobotCoordinateSystem', 'controller', controller);\n            // verify required parameter 'coordinateSystem' is not null or undefined\n            assertParamExists('addVirtualRobotCoordinateSystem', 'coordinateSystem', coordinateSystem);\n            const localVarPath = `/cells/{cell}/controllers/{controller}/teach-pendant/coordinate-systems`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"controller\"}}`, encodeURIComponent(String(controller)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            localVarRequestOptions.data = serializeDataIfNeeded(coordinateSystem, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Adds a new TCP or updates an existing TCP in the motion group.  The position and rotation values in the request body are defined within the flange’s coordinate system.  > **NOTE** > > Ensure the TCP\\'s position is within the robot\\'s reach. Refer to the robot’s documentation or data sheet for details like joint limits or reach.\n         * @summary Add TCP\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {number} id The controller specific motion-group id.\n         * @param {RobotTcp} robotTcp\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        addVirtualRobotTcp: async (cell, controller, id, robotTcp, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('addVirtualRobotTcp', 'cell', cell);\n            // verify required parameter 'controller' is not null or undefined\n            assertParamExists('addVirtualRobotTcp', 'controller', controller);\n            // verify required parameter 'id' is not null or undefined\n            assertParamExists('addVirtualRobotTcp', 'id', id);\n            // verify required parameter 'robotTcp' is not null or undefined\n            assertParamExists('addVirtualRobotTcp', 'robotTcp', robotTcp);\n            const localVarPath = `/cells/{cell}/controllers/{controller}/teach-pendant/motion-groups/{id}/tcps`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"controller\"}}`, encodeURIComponent(String(controller)))\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            localVarRequestOptions.data = serializeDataIfNeeded(robotTcp, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Deletes a coordinate system from the virtual controller. This will remove the coordinate system from the list of coordinate systems and remove all dependent coordinate systems which use the deleted coordinate system as reference.\n         * @summary Remove Coordinate System\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {string} coordinateSystem Unique identifier addressing a coordinate system.\n         * @param {boolean} [deleteDependent] If true, all dependent coordinate systems will be deleted as well.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteVirtualRobotCoordinateSystem: async (cell, controller, coordinateSystem, deleteDependent, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('deleteVirtualRobotCoordinateSystem', 'cell', cell);\n            // verify required parameter 'controller' is not null or undefined\n            assertParamExists('deleteVirtualRobotCoordinateSystem', 'controller', controller);\n            // verify required parameter 'coordinateSystem' is not null or undefined\n            assertParamExists('deleteVirtualRobotCoordinateSystem', 'coordinateSystem', coordinateSystem);\n            const localVarPath = `/cells/{cell}/controllers/{controller}/teach-pendant/coordinate-systems/{coordinate-system}`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"controller\"}}`, encodeURIComponent(String(controller)))\n                .replace(`{${\"coordinate-system\"}}`, encodeURIComponent(String(coordinateSystem)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            if (deleteDependent !== undefined) {\n                localVarQueryParameter['delete_dependent'] = deleteDependent;\n            }\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Removes the TCP from the motion group. An unknown TCP is a valid input.\n         * @summary Remove TCP\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {number} id The controller specific motion-group id.\n         * @param {string} tcp The unique identifier of a TCP.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteVirtualRobotTcp: async (cell, controller, id, tcp, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('deleteVirtualRobotTcp', 'cell', cell);\n            // verify required parameter 'controller' is not null or undefined\n            assertParamExists('deleteVirtualRobotTcp', 'controller', controller);\n            // verify required parameter 'id' is not null or undefined\n            assertParamExists('deleteVirtualRobotTcp', 'id', id);\n            // verify required parameter 'tcp' is not null or undefined\n            assertParamExists('deleteVirtualRobotTcp', 'tcp', tcp);\n            const localVarPath = `/cells/{cell}/controllers/{controller}/teach-pendant/motion-groups/{id}/tcps/{tcp}`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"controller\"}}`, encodeURIComponent(String(controller)))\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)))\n                .replace(`{${\"tcp\"}}`, encodeURIComponent(String(tcp)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Gets motion group mounting. The motion group is based on the origin of the returned coordinate system.\n         * @summary Get Mounting\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {number} id The controller specific motion-group id.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getVirtualRobotMounting: async (cell, controller, id, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('getVirtualRobotMounting', 'cell', cell);\n            // verify required parameter 'controller' is not null or undefined\n            assertParamExists('getVirtualRobotMounting', 'controller', controller);\n            // verify required parameter 'id' is not null or undefined\n            assertParamExists('getVirtualRobotMounting', 'id', id);\n            const localVarPath = `/cells/{cell}/controllers/{controller}/teach-pendant/motion-groups/{id}/mounting`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"controller\"}}`, encodeURIComponent(String(controller)))\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Lists all coordinate systems on the robot controller.\n         * @summary List Coordinate Systems\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listVirtualRobotCoordinateSystems: async (cell, controller, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('listVirtualRobotCoordinateSystems', 'cell', cell);\n            // verify required parameter 'controller' is not null or undefined\n            assertParamExists('listVirtualRobotCoordinateSystems', 'controller', controller);\n            const localVarPath = `/cells/{cell}/controllers/{controller}/teach-pendant/coordinate-systems`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"controller\"}}`, encodeURIComponent(String(controller)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Lists TCPs of the motion group. An empty TCP list is valid, for example for external axes.\n         * @summary List TCPs\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {number} id The controller specific motion-group id.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listVirtualRobotTcps: async (cell, controller, id, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('listVirtualRobotTcps', 'cell', cell);\n            // verify required parameter 'controller' is not null or undefined\n            assertParamExists('listVirtualRobotTcps', 'controller', controller);\n            // verify required parameter 'id' is not null or undefined\n            assertParamExists('listVirtualRobotTcps', 'id', id);\n            const localVarPath = `/cells/{cell}/controllers/{controller}/teach-pendant/motion-groups/{id}/tcps`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"controller\"}}`, encodeURIComponent(String(controller)))\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Sets motion group mounting by specifying a coordinate system. The motion group will be based on the coordinate system\\'s origin. The coordinate system defines a transformation offset. The transformation offset is defined by a unique identifier, a name for front end usage and an offset in another coordinate system referenced by the unique identifier of the reference coordinate system.\n         * @summary Set Mounting\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {number} id The controller specific motion-group id.\n         * @param {CoordinateSystem} coordinateSystem\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        setVirtualRobotMounting: async (cell, controller, id, coordinateSystem, options = {}) => {\n            // verify required parameter 'cell' is not null or undefined\n            assertParamExists('setVirtualRobotMounting', 'cell', cell);\n            // verify required parameter 'controller' is not null or undefined\n            assertParamExists('setVirtualRobotMounting', 'controller', controller);\n            // verify required parameter 'id' is not null or undefined\n            assertParamExists('setVirtualRobotMounting', 'id', id);\n            // verify required parameter 'coordinateSystem' is not null or undefined\n            assertParamExists('setVirtualRobotMounting', 'coordinateSystem', coordinateSystem);\n            const localVarPath = `/cells/{cell}/controllers/{controller}/teach-pendant/motion-groups/{id}/mounting`\n                .replace(`{${\"cell\"}}`, encodeURIComponent(String(cell)))\n                .replace(`{${\"controller\"}}`, encodeURIComponent(String(controller)))\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options };\n            const localVarHeaderParameter = {};\n            const localVarQueryParameter = {};\n            // authentication BasicAuth required\n            // http basic authentication required\n            setBasicAuthToObject(localVarRequestOptions, configuration);\n            // authentication BearerAuth required\n            // http bearer authentication required\n            await setBearerAuthToObject(localVarHeaderParameter, configuration);\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n            setSearchParams(localVarUrlObj, localVarQueryParameter);\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };\n            localVarRequestOptions.data = serializeDataIfNeeded(coordinateSystem, localVarRequestOptions, configuration);\n            return {\n                url: toPathString(localVarUrlObj),\n                options: localVarRequestOptions,\n            };\n        },\n    };\n};\n/**\n * VirtualRobotSetupApi - functional programming interface\n * @export\n */\nexport const VirtualRobotSetupApiFp = function (configuration) {\n    const localVarAxiosParamCreator = VirtualRobotSetupApiAxiosParamCreator(configuration);\n    return {\n        /**\n         * Adds a coordinate system to the robot controller.\n         * @summary Add Coordinate Systems\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {CoordinateSystem} coordinateSystem\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async addVirtualRobotCoordinateSystem(cell, controller, coordinateSystem, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.addVirtualRobotCoordinateSystem(cell, controller, coordinateSystem, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['VirtualRobotSetupApi.addVirtualRobotCoordinateSystem']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Adds a new TCP or updates an existing TCP in the motion group.  The position and rotation values in the request body are defined within the flange’s coordinate system.  > **NOTE** > > Ensure the TCP\\'s position is within the robot\\'s reach. Refer to the robot’s documentation or data sheet for details like joint limits or reach.\n         * @summary Add TCP\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {number} id The controller specific motion-group id.\n         * @param {RobotTcp} robotTcp\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async addVirtualRobotTcp(cell, controller, id, robotTcp, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.addVirtualRobotTcp(cell, controller, id, robotTcp, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['VirtualRobotSetupApi.addVirtualRobotTcp']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Deletes a coordinate system from the virtual controller. This will remove the coordinate system from the list of coordinate systems and remove all dependent coordinate systems which use the deleted coordinate system as reference.\n         * @summary Remove Coordinate System\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {string} coordinateSystem Unique identifier addressing a coordinate system.\n         * @param {boolean} [deleteDependent] If true, all dependent coordinate systems will be deleted as well.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async deleteVirtualRobotCoordinateSystem(cell, controller, coordinateSystem, deleteDependent, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.deleteVirtualRobotCoordinateSystem(cell, controller, coordinateSystem, deleteDependent, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['VirtualRobotSetupApi.deleteVirtualRobotCoordinateSystem']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Removes the TCP from the motion group. An unknown TCP is a valid input.\n         * @summary Remove TCP\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {number} id The controller specific motion-group id.\n         * @param {string} tcp The unique identifier of a TCP.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async deleteVirtualRobotTcp(cell, controller, id, tcp, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.deleteVirtualRobotTcp(cell, controller, id, tcp, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['VirtualRobotSetupApi.deleteVirtualRobotTcp']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Gets motion group mounting. The motion group is based on the origin of the returned coordinate system.\n         * @summary Get Mounting\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {number} id The controller specific motion-group id.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getVirtualRobotMounting(cell, controller, id, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.getVirtualRobotMounting(cell, controller, id, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['VirtualRobotSetupApi.getVirtualRobotMounting']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Lists all coordinate systems on the robot controller.\n         * @summary List Coordinate Systems\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async listVirtualRobotCoordinateSystems(cell, controller, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.listVirtualRobotCoordinateSystems(cell, controller, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['VirtualRobotSetupApi.listVirtualRobotCoordinateSystems']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Lists TCPs of the motion group. An empty TCP list is valid, for example for external axes.\n         * @summary List TCPs\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {number} id The controller specific motion-group id.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async listVirtualRobotTcps(cell, controller, id, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.listVirtualRobotTcps(cell, controller, id, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['VirtualRobotSetupApi.listVirtualRobotTcps']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n        /**\n         * Sets motion group mounting by specifying a coordinate system. The motion group will be based on the coordinate system\\'s origin. The coordinate system defines a transformation offset. The transformation offset is defined by a unique identifier, a name for front end usage and an offset in another coordinate system referenced by the unique identifier of the reference coordinate system.\n         * @summary Set Mounting\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {number} id The controller specific motion-group id.\n         * @param {CoordinateSystem} coordinateSystem\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async setVirtualRobotMounting(cell, controller, id, coordinateSystem, options) {\n            const localVarAxiosArgs = await localVarAxiosParamCreator.setVirtualRobotMounting(cell, controller, id, coordinateSystem, options);\n            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n            const localVarOperationServerBasePath = operationServerMap['VirtualRobotSetupApi.setVirtualRobotMounting']?.[localVarOperationServerIndex]?.url;\n            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);\n        },\n    };\n};\n/**\n * VirtualRobotSetupApi - factory interface\n * @export\n */\nexport const VirtualRobotSetupApiFactory = function (configuration, basePath, axios) {\n    const localVarFp = VirtualRobotSetupApiFp(configuration);\n    return {\n        /**\n         * Adds a coordinate system to the robot controller.\n         * @summary Add Coordinate Systems\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {CoordinateSystem} coordinateSystem\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        addVirtualRobotCoordinateSystem(cell, controller, coordinateSystem, options) {\n            return localVarFp.addVirtualRobotCoordinateSystem(cell, controller, coordinateSystem, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Adds a new TCP or updates an existing TCP in the motion group.  The position and rotation values in the request body are defined within the flange’s coordinate system.  > **NOTE** > > Ensure the TCP\\'s position is within the robot\\'s reach. Refer to the robot’s documentation or data sheet for details like joint limits or reach.\n         * @summary Add TCP\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {number} id The controller specific motion-group id.\n         * @param {RobotTcp} robotTcp\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        addVirtualRobotTcp(cell, controller, id, robotTcp, options) {\n            return localVarFp.addVirtualRobotTcp(cell, controller, id, robotTcp, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Deletes a coordinate system from the virtual controller. This will remove the coordinate system from the list of coordinate systems and remove all dependent coordinate systems which use the deleted coordinate system as reference.\n         * @summary Remove Coordinate System\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {string} coordinateSystem Unique identifier addressing a coordinate system.\n         * @param {boolean} [deleteDependent] If true, all dependent coordinate systems will be deleted as well.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteVirtualRobotCoordinateSystem(cell, controller, coordinateSystem, deleteDependent, options) {\n            return localVarFp.deleteVirtualRobotCoordinateSystem(cell, controller, coordinateSystem, deleteDependent, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Removes the TCP from the motion group. An unknown TCP is a valid input.\n         * @summary Remove TCP\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {number} id The controller specific motion-group id.\n         * @param {string} tcp The unique identifier of a TCP.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteVirtualRobotTcp(cell, controller, id, tcp, options) {\n            return localVarFp.deleteVirtualRobotTcp(cell, controller, id, tcp, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Gets motion group mounting. The motion group is based on the origin of the returned coordinate system.\n         * @summary Get Mounting\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {number} id The controller specific motion-group id.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getVirtualRobotMounting(cell, controller, id, options) {\n            return localVarFp.getVirtualRobotMounting(cell, controller, id, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Lists all coordinate systems on the robot controller.\n         * @summary List Coordinate Systems\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listVirtualRobotCoordinateSystems(cell, controller, options) {\n            return localVarFp.listVirtualRobotCoordinateSystems(cell, controller, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Lists TCPs of the motion group. An empty TCP list is valid, for example for external axes.\n         * @summary List TCPs\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {number} id The controller specific motion-group id.\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        listVirtualRobotTcps(cell, controller, id, options) {\n            return localVarFp.listVirtualRobotTcps(cell, controller, id, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Sets motion group mounting by specifying a coordinate system. The motion group will be based on the coordinate system\\'s origin. The coordinate system defines a transformation offset. The transformation offset is defined by a unique identifier, a name for front end usage and an offset in another coordinate system referenced by the unique identifier of the reference coordinate system.\n         * @summary Set Mounting\n         * @param {string} cell Unique identifier addressing a cell in all API calls.\n         * @param {string} controller Unique identifier to address a controller in the cell.\n         * @param {number} id The controller specific motion-group id.\n         * @param {CoordinateSystem} coordinateSystem\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        setVirtualRobotMounting(cell, controller, id, coordinateSystem, options) {\n            return localVarFp.setVirtualRobotMounting(cell, controller, id, coordinateSystem, options).then((request) => request(axios, basePath));\n        },\n    };\n};\n/**\n * VirtualRobotSetupApi - object-oriented interface\n * @export\n * @class VirtualRobotSetupApi\n * @extends {BaseAPI}\n */\nexport class VirtualRobotSetupApi extends BaseAPI {\n    /**\n     * Adds a coordinate system to the robot controller.\n     * @summary Add Coordinate Systems\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} controller Unique identifier to address a controller in the cell.\n     * @param {CoordinateSystem} coordinateSystem\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof VirtualRobotSetupApi\n     */\n    addVirtualRobotCoordinateSystem(cell, controller, coordinateSystem, options) {\n        return VirtualRobotSetupApiFp(this.configuration).addVirtualRobotCoordinateSystem(cell, controller, coordinateSystem, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Adds a new TCP or updates an existing TCP in the motion group.  The position and rotation values in the request body are defined within the flange’s coordinate system.  > **NOTE** > > Ensure the TCP\\'s position is within the robot\\'s reach. Refer to the robot’s documentation or data sheet for details like joint limits or reach.\n     * @summary Add TCP\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} controller Unique identifier to address a controller in the cell.\n     * @param {number} id The controller specific motion-group id.\n     * @param {RobotTcp} robotTcp\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof VirtualRobotSetupApi\n     */\n    addVirtualRobotTcp(cell, controller, id, robotTcp, options) {\n        return VirtualRobotSetupApiFp(this.configuration).addVirtualRobotTcp(cell, controller, id, robotTcp, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Deletes a coordinate system from the virtual controller. This will remove the coordinate system from the list of coordinate systems and remove all dependent coordinate systems which use the deleted coordinate system as reference.\n     * @summary Remove Coordinate System\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} controller Unique identifier to address a controller in the cell.\n     * @param {string} coordinateSystem Unique identifier addressing a coordinate system.\n     * @param {boolean} [deleteDependent] If true, all dependent coordinate systems will be deleted as well.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof VirtualRobotSetupApi\n     */\n    deleteVirtualRobotCoordinateSystem(cell, controller, coordinateSystem, deleteDependent, options) {\n        return VirtualRobotSetupApiFp(this.configuration).deleteVirtualRobotCoordinateSystem(cell, controller, coordinateSystem, deleteDependent, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Removes the TCP from the motion group. An unknown TCP is a valid input.\n     * @summary Remove TCP\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} controller Unique identifier to address a controller in the cell.\n     * @param {number} id The controller specific motion-group id.\n     * @param {string} tcp The unique identifier of a TCP.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof VirtualRobotSetupApi\n     */\n    deleteVirtualRobotTcp(cell, controller, id, tcp, options) {\n        return VirtualRobotSetupApiFp(this.configuration).deleteVirtualRobotTcp(cell, controller, id, tcp, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Gets motion group mounting. The motion group is based on the origin of the returned coordinate system.\n     * @summary Get Mounting\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} controller Unique identifier to address a controller in the cell.\n     * @param {number} id The controller specific motion-group id.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof VirtualRobotSetupApi\n     */\n    getVirtualRobotMounting(cell, controller, id, options) {\n        return VirtualRobotSetupApiFp(this.configuration).getVirtualRobotMounting(cell, controller, id, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Lists all coordinate systems on the robot controller.\n     * @summary List Coordinate Systems\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} controller Unique identifier to address a controller in the cell.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof VirtualRobotSetupApi\n     */\n    listVirtualRobotCoordinateSystems(cell, controller, options) {\n        return VirtualRobotSetupApiFp(this.configuration).listVirtualRobotCoordinateSystems(cell, controller, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Lists TCPs of the motion group. An empty TCP list is valid, for example for external axes.\n     * @summary List TCPs\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} controller Unique identifier to address a controller in the cell.\n     * @param {number} id The controller specific motion-group id.\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof VirtualRobotSetupApi\n     */\n    listVirtualRobotTcps(cell, controller, id, options) {\n        return VirtualRobotSetupApiFp(this.configuration).listVirtualRobotTcps(cell, controller, id, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Sets motion group mounting by specifying a coordinate system. The motion group will be based on the coordinate system\\'s origin. The coordinate system defines a transformation offset. The transformation offset is defined by a unique identifier, a name for front end usage and an offset in another coordinate system referenced by the unique identifier of the reference coordinate system.\n     * @summary Set Mounting\n     * @param {string} cell Unique identifier addressing a cell in all API calls.\n     * @param {string} controller Unique identifier to address a controller in the cell.\n     * @param {number} id The controller specific motion-group id.\n     * @param {CoordinateSystem} coordinateSystem\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof VirtualRobotSetupApi\n     */\n    setVirtualRobotMounting(cell, controller, id, coordinateSystem, options) {\n        return VirtualRobotSetupApiFp(this.configuration).setVirtualRobotMounting(cell, controller, id, coordinateSystem, options).then((request) => request(this.axios, this.basePath));\n    }\n}\n//# sourceMappingURL=api.js.map","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","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.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 DEBUG_URL = \"https://git.new/pathToRegexpError\";\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 * Tokenize input string.\n */\nfunction* lexer(str) {\n    const chars = [...str];\n    let i = 0;\n    function name() {\n        let value = \"\";\n        if (ID_START.test(chars[++i])) {\n            value += chars[i];\n            while (ID_CONTINUE.test(chars[++i])) {\n                value += chars[i];\n            }\n        }\n        else if (chars[i] === '\"') {\n            let pos = i;\n            while (i < chars.length) {\n                if (chars[++i] === '\"') {\n                    i++;\n                    pos = 0;\n                    break;\n                }\n                if (chars[i] === \"\\\\\") {\n                    value += chars[++i];\n                }\n                else {\n                    value += chars[i];\n                }\n            }\n            if (pos) {\n                throw new TypeError(`Unterminated quote at ${pos}: ${DEBUG_URL}`);\n            }\n        }\n        if (!value) {\n            throw new TypeError(`Missing parameter name at ${i}: ${DEBUG_URL}`);\n        }\n        return value;\n    }\n    while (i < chars.length) {\n        const value = chars[i];\n        const type = SIMPLE_TOKENS[value];\n        if (type) {\n            yield { type, index: i++, value };\n        }\n        else if (value === \"\\\\\") {\n            yield { type: \"ESCAPED\", index: i++, value: chars[i++] };\n        }\n        else if (value === \":\") {\n            const value = name();\n            yield { type: \"PARAM\", index: i, value };\n        }\n        else if (value === \"*\") {\n            const value = name();\n            yield { type: \"WILDCARD\", index: i, value };\n        }\n        else {\n            yield { type: \"CHAR\", index: i, value: chars[i++] };\n        }\n    }\n    return { type: \"END\", index: i, value: \"\" };\n}\nclass Iter {\n    constructor(tokens) {\n        this.tokens = tokens;\n    }\n    peek() {\n        if (!this._peek) {\n            const next = this.tokens.next();\n            this._peek = next.value;\n        }\n        return this._peek;\n    }\n    tryConsume(type) {\n        const token = this.peek();\n        if (token.type !== type)\n            return;\n        this._peek = undefined; // Reset after consumed.\n        return token.value;\n    }\n    consume(type) {\n        const value = this.tryConsume(type);\n        if (value !== undefined)\n            return value;\n        const { type: nextType, index } = this.peek();\n        throw new TypeError(`Unexpected ${nextType} at ${index}, expected ${type}: ${DEBUG_URL}`);\n    }\n    text() {\n        let result = \"\";\n        let value;\n        while ((value = this.tryConsume(\"CHAR\") || this.tryConsume(\"ESCAPED\"))) {\n            result += value;\n        }\n        return result;\n    }\n}\n/**\n * Tokenized path instance.\n */\nclass TokenData {\n    constructor(tokens) {\n        this.tokens = tokens;\n    }\n}\nexports.TokenData = TokenData;\n/**\n * Parse a string for the raw tokens.\n */\nfunction parse(str, options = {}) {\n    const { encodePath = NOOP_VALUE } = options;\n    const it = new Iter(lexer(str));\n    function consume(endType) {\n        const tokens = [];\n        while (true) {\n            const path = it.text();\n            if (path)\n                tokens.push({ type: \"text\", value: encodePath(path) });\n            const param = it.tryConsume(\"PARAM\");\n            if (param) {\n                tokens.push({\n                    type: \"param\",\n                    name: param,\n                });\n                continue;\n            }\n            const wildcard = it.tryConsume(\"WILDCARD\");\n            if (wildcard) {\n                tokens.push({\n                    type: \"wildcard\",\n                    name: wildcard,\n                });\n                continue;\n            }\n            const open = it.tryConsume(\"{\");\n            if (open) {\n                tokens.push({\n                    type: \"group\",\n                    tokens: consume(\"}\"),\n                });\n                continue;\n            }\n            it.consume(endType);\n            return tokens;\n        }\n    }\n    const tokens = consume(\"END\");\n    return new TokenData(tokens);\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 = path instanceof TokenData ? path : parse(path, options);\n    const fn = tokensToFunction(data.tokens, delimiter, encode);\n    return function path(data = {}) {\n        const [path, ...missing] = fn(data);\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 sources = [];\n    const flags = sensitive ? \"\" : \"i\";\n    const paths = Array.isArray(path) ? path : [path];\n    const items = paths.map((path) => path instanceof TokenData ? path : parse(path, options));\n    for (const { tokens } of items) {\n        for (const seq of flatten(tokens, 0, [])) {\n            const regexp = sequenceToRegExp(seq, delimiter, keys);\n            sources.push(regexp);\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 * 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        const fork = init.slice();\n        for (const seq of flatten(token.tokens, 0, fork)) {\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 sequenceToRegExp(tokens, delimiter, keys) {\n    let result = \"\";\n    let backtrack = \"\";\n    let isSafeSegmentParam = true;\n    for (let i = 0; i < tokens.length; i++) {\n        const token = tokens[i];\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 TypeError(`Missing text after \"${token.name}\": ${DEBUG_URL}`);\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}\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 token data into a path string.\n */\nfunction stringify(data) {\n    return data.tokens\n        .map(function stringifyToken(token, index, tokens) {\n        if (token.type === \"text\")\n            return escapeText(token.value);\n        if (token.type === \"group\") {\n            return `{${token.tokens.map(stringifyToken).join(\"\")}}`;\n        }\n        const isSafe = isNameSafe(token.name) && isNextNameSafe(tokens[index + 1]);\n        const key = isSafe ? token.name : JSON.stringify(token.name);\n        if (token.type === \"param\")\n            return `:${key}`;\n        if (token.type === \"wildcard\")\n            return `*${key}`;\n        throw new TypeError(`Unexpected token: ${token}`);\n    })\n        .join(\"\");\n}\nfunction isNameSafe(name) {\n    const [first, ...rest] = name;\n    if (!ID_START.test(first))\n        return false;\n    return rest.every((char) => ID_CONTINUE.test(char));\n}\nfunction isNextNameSafe(token) {\n    if ((token === null || token === void 0 ? void 0 : token.type) !== \"text\")\n        return true;\n    return !ID_CONTINUE.test(token.value[0]);\n}\n//# sourceMappingURL=index.js.map","import {\n  isEqual_default\n} from \"../../chunk-6WCKJOFL.js\";\nimport {\n  AutoReconnectingWebsocket,\n  __async,\n  __spreadProps,\n  __spreadValues,\n  availableStorage,\n  isSameCoordinateSystem,\n  loginWithAuth0,\n  tryParseJson\n} from \"../../chunk-V3NJLR6P.js\";\n\n// src/lib/v1/index.ts\nexport * from \"@wandelbots/nova-api/v1\";\n\n// src/lib/v1/ConnectedMotionGroup.ts\nimport { makeAutoObservable, runInAction } from \"mobx\";\nimport * as THREE from \"three\";\n\n// src/lib/v1/motionStateUpdate.ts\nfunction jointValuesEqual(oldJointValues, newJointValues, changeDeltaThreshold) {\n  if (newJointValues.length !== oldJointValues.length) {\n    return true;\n  }\n  for (let jointIndex = 0; jointIndex < newJointValues.length; jointIndex++) {\n    if (Math.abs(newJointValues[jointIndex] - oldJointValues[jointIndex]) > changeDeltaThreshold) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction tcpPoseEqual(oldTcp, newTcp, changeDeltaThreshold) {\n  if (oldTcp === void 0 && newTcp || oldTcp && newTcp === void 0) {\n    return false;\n  }\n  if (oldTcp === void 0 || newTcp === void 0) {\n    return true;\n  }\n  let changedDelta = 0;\n  changedDelta += Math.abs(oldTcp.orientation.x - newTcp.orientation.x);\n  changedDelta += Math.abs(oldTcp.orientation.y - newTcp.orientation.y);\n  changedDelta += Math.abs(oldTcp.orientation.z - newTcp.orientation.z);\n  changedDelta += Math.abs(oldTcp.position.x - newTcp.position.x);\n  changedDelta += Math.abs(oldTcp.position.y - newTcp.position.y);\n  changedDelta += Math.abs(oldTcp.position.z - newTcp.position.z);\n  if (changedDelta > changeDeltaThreshold) {\n    return false;\n  }\n  return oldTcp.coordinate_system === newTcp.coordinate_system && oldTcp.tcp === newTcp.tcp;\n}\n\n// src/lib/v1/ConnectedMotionGroup.ts\nvar MOTION_DELTA_THRESHOLD = 1e-4;\nvar ConnectedMotionGroup = class _ConnectedMotionGroup {\n  constructor(nova, controller, motionGroup, initialMotionState, motionStateSocket, isVirtual, tcps, motionGroupSpecification, safetySetup, mounting, initialControllerState, controllerStateSocket) {\n    this.nova = nova;\n    this.controller = controller;\n    this.motionGroup = motionGroup;\n    this.initialMotionState = initialMotionState;\n    this.motionStateSocket = motionStateSocket;\n    this.isVirtual = isVirtual;\n    this.tcps = tcps;\n    this.motionGroupSpecification = motionGroupSpecification;\n    this.safetySetup = safetySetup;\n    this.mounting = mounting;\n    this.initialControllerState = initialControllerState;\n    this.controllerStateSocket = controllerStateSocket;\n    this.connectedJoggingCartesianSocket = null;\n    this.connectedJoggingJointsSocket = null;\n    // tmp\n    this.joggingVelocity = 10;\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    this.activationState = \"inactive\";\n    this.rapidlyChangingMotionState = initialMotionState;\n    this.controllerState = initialControllerState;\n    controllerStateSocket.addEventListener(\"message\", (event) => {\n      var _a;\n      const data = (_a = tryParseJson(event.data)) == null ? void 0 : _a.result;\n      if (!data) {\n        return;\n      }\n      runInAction(() => {\n        this.controllerState = data;\n      });\n    });\n    motionStateSocket.addEventListener(\"message\", (event) => {\n      var _a;\n      const motionStateResponse = (_a = tryParseJson(event.data)) == null ? void 0 : _a.result;\n      if (!motionStateResponse) {\n        throw new Error(\n          `Failed to get motion state for ${this.motionGroupId}: ${event.data}`\n        );\n      }\n      if (!jointValuesEqual(\n        this.rapidlyChangingMotionState.state.joint_position.joints,\n        motionStateResponse.state.joint_position.joints,\n        MOTION_DELTA_THRESHOLD\n      )) {\n        runInAction(() => {\n          this.rapidlyChangingMotionState.state = motionStateResponse.state;\n        });\n      }\n      if (!tcpPoseEqual(\n        this.rapidlyChangingMotionState.tcp_pose,\n        motionStateResponse.tcp_pose,\n        MOTION_DELTA_THRESHOLD\n      )) {\n        runInAction(() => {\n          this.rapidlyChangingMotionState.tcp_pose = motionStateResponse.tcp_pose;\n        });\n      }\n    });\n    makeAutoObservable(this);\n  }\n  static connect(nova, motionGroupId, controllers) {\n    return __async(this, null, function* () {\n      var _a, _b;\n      const [_motionGroupIndex, controllerId] = motionGroupId.split(\"@\");\n      const controller = controllers.find((c) => c.controller === controllerId);\n      const motionGroup = controller == null ? void 0 : controller.physical_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      const motionStateSocket = nova.openReconnectingWebsocket(\n        `/motion-groups/${motionGroupId}/state-stream`\n      );\n      const firstMessage = yield motionStateSocket.firstMessage();\n      const initialMotionState = (_a = tryParseJson(firstMessage.data)) == null ? void 0 : _a.result;\n      if (!initialMotionState) {\n        throw new Error(\n          `Unable to parse initial motion state message ${firstMessage.data}`\n        );\n      }\n      console.log(\n        `Connected motion state websocket to motion group ${motionGroup.motion_group}. Initial state:\n  `,\n        initialMotionState\n      );\n      const config = yield nova.api.controller.getRobotController(\n        controller.controller\n      );\n      const isVirtual = config.configuration.kind === \"VirtualController\";\n      const mounting = yield (() => __async(this, null, function* () {\n        try {\n          const mounting2 = yield nova.api.motionGroupInfos.getMounting(\n            motionGroup.motion_group\n          );\n          return mounting2;\n        } catch (err) {\n          console.error(\n            `Error fetching mounting for ${motionGroup.motion_group}`,\n            err\n          );\n          return null;\n        }\n      }))();\n      const controllerStateSocket = nova.openReconnectingWebsocket(\n        `/controllers/${controller.controller}/state-stream?response_rate=1000`\n      );\n      const firstControllerMessage = yield controllerStateSocket.firstMessage();\n      const initialControllerState = (_b = tryParseJson(firstControllerMessage.data)) == null ? void 0 : _b.result;\n      if (!initialControllerState) {\n        throw new Error(\n          `Unable to parse initial controller state message ${firstControllerMessage.data}`\n        );\n      }\n      console.log(\n        `Connected controller state websocket to controller ${controller.controller}. Initial state:\n  `,\n        initialControllerState\n      );\n      const { tcps } = yield nova.api.motionGroupInfos.listTcps(motionGroupId);\n      const motionGroupSpecification = yield nova.api.motionGroupInfos.getMotionGroupSpecification(motionGroupId);\n      const safetySetup = yield nova.api.motionGroupInfos.getSafetySetup(motionGroupId);\n      return new _ConnectedMotionGroup(\n        nova,\n        controller,\n        motionGroup,\n        initialMotionState,\n        motionStateSocket,\n        isVirtual,\n        tcps,\n        motionGroupSpecification,\n        safetySetup,\n        mounting,\n        initialControllerState,\n        controllerStateSocket\n      );\n    });\n  }\n  get motionGroupId() {\n    return this.motionGroup.motion_group;\n  }\n  get controllerId() {\n    return this.controller.controller;\n  }\n  get modelFromController() {\n    return this.motionGroup.model_from_controller;\n  }\n  get wandelscriptIdentifier() {\n    const num = this.motionGroupId.split(\"@\")[0];\n    return `${this.controllerId.replaceAll(\"-\", \"_\")}_${num}`;\n  }\n  /** Jogging velocity in radians for rotation and joint movement */\n  get joggingVelocityRads() {\n    return this.joggingVelocity * Math.PI / 180;\n  }\n  get joints() {\n    return this.initialMotionState.state.joint_position.joints.map((_, i) => {\n      return {\n        index: i\n      };\n    });\n  }\n  get dhParameters() {\n    return this.motionGroupSpecification.dh_parameters;\n  }\n  get safetyZones() {\n    return this.safetySetup.safety_zones;\n  }\n  /** Gets the robot mounting position offset in 3D viz coordinates */\n  get mountingPosition() {\n    if (!this.mounting) {\n      return [0, 0, 0];\n    }\n    return [\n      this.mounting.pose.position.x / 1e3,\n      this.mounting.pose.position.y / 1e3,\n      this.mounting.pose.position.z / 1e3\n    ];\n  }\n  /** Gets the robot mounting position rotation in 3D viz coordinates */\n  get mountingQuaternion() {\n    var _a, _b, _c, _d, _e, _f;\n    const rotationVector = new THREE.Vector3(\n      ((_b = (_a = this.mounting) == null ? void 0 : _a.pose.orientation) == null ? void 0 : _b.x) || 0,\n      ((_d = (_c = this.mounting) == null ? void 0 : _c.pose.orientation) == null ? void 0 : _d.y) || 0,\n      ((_f = (_e = this.mounting) == null ? void 0 : _e.pose.orientation) == null ? void 0 : _f.z) || 0\n    );\n    const magnitude = rotationVector.length();\n    const axis = rotationVector.normalize();\n    return new THREE.Quaternion().setFromAxisAngle(axis, magnitude);\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 = [\n      \"SAFETY_STATE_ROBOT_EMERGENCY_STOP\",\n      \"SAFETY_STATE_DEVICE_EMERGENCY_STOP\"\n    ];\n    return estopStates.includes(this.controllerState.safety_state);\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 = [\n      \"SAFETY_STATE_NORMAL\",\n      \"SAFETY_STATE_REDUCED\"\n    ];\n    return goodSafetyStates.includes(this.controllerState.safety_state);\n  }\n  /**\n   * Whether the controller is in an operation mode that allows movement\n   */\n  get isMoveableOperationMode() {\n    const goodOperationModes = [\n      \"OPERATION_MODE_AUTO\",\n      \"OPERATION_MODE_MANUAL\",\n      \"OPERATION_MODE_MANUAL_T1\",\n      \"OPERATION_MODE_MANUAL_T2\"\n    ];\n    return goodOperationModes.includes(this.controllerState.operation_mode);\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 this.isMoveableSafetyState && this.isMoveableOperationMode && this.activationState === \"active\";\n  }\n  deactivate() {\n    return __async(this, null, function* () {\n      if (this.activationState !== \"active\") {\n        console.error(\"Tried to deactivate while already deactivating\");\n        return;\n      }\n      runInAction(() => {\n        this.activationState = \"deactivating\";\n      });\n      try {\n        yield this.nova.api.controller.setDefaultMode(\n          this.controllerId,\n          \"MODE_MONITOR\"\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  activate() {\n    return __async(this, null, function* () {\n      if (this.activationState !== \"inactive\") {\n        console.error(\"Tried to activate while already activating\");\n        return;\n      }\n      runInAction(() => {\n        this.activationState = \"activating\";\n      });\n      try {\n        yield this.nova.api.controller.setDefaultMode(\n          this.controllerId,\n          \"MODE_CONTROL\"\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  dispose() {\n    this.motionStateSocket.close();\n    if (this.connectedJoggingCartesianSocket)\n      this.connectedJoggingCartesianSocket.close();\n    if (this.connectedJoggingJointsSocket)\n      this.connectedJoggingJointsSocket.close();\n  }\n  setJoggingVelocity(velocity) {\n    this.joggingVelocity = velocity;\n  }\n};\n\n// src/lib/v1/getLatestTrajectories.ts\nvar lastMotionIds = /* @__PURE__ */ new Set();\nfunction getLatestTrajectories(apiClient, sampleTime = 50, responsesCoordinateSystem) {\n  return __async(this, null, function* () {\n    const newTrajectories = [];\n    try {\n      const motions = yield apiClient.motion.listMotions();\n      const currentMotionIds = new Set(motions.motions);\n      const newMotionIds = Array.from(currentMotionIds).filter(\n        (id) => !lastMotionIds.has(id)\n      );\n      for (const motionId of newMotionIds) {\n        const trajectory = yield apiClient.motion.getMotionTrajectory(\n          motionId,\n          sampleTime,\n          responsesCoordinateSystem\n        );\n        newTrajectories.push(trajectory);\n      }\n      lastMotionIds = currentMotionIds;\n    } catch (error) {\n      console.error(\"Failed to get latest trajectories:\", error);\n    }\n    return newTrajectories;\n  });\n}\n\n// src/lib/v1/JoggerConnection.ts\nimport { Vector3 as Vector32 } from \"three/src/math/Vector3.js\";\nvar JoggerConnection = class _JoggerConnection {\n  constructor(motionStream, opts = {}) {\n    this.motionStream = motionStream;\n    this.opts = opts;\n    // Currently a separate websocket is needed for each mode, pester API people\n    // to merge these for simplicity\n    this.cartesianWebsocket = null;\n    this.jointWebsocket = null;\n    this.cartesianJoggingOpts = {};\n  }\n  static open(_0, _1) {\n    return __async(this, arguments, function* (nova, motionGroupId, opts = {}) {\n      const motionStream = yield nova.connectMotionStream(motionGroupId);\n      return new _JoggerConnection(motionStream, opts);\n    });\n  }\n  get motionGroupId() {\n    return this.motionStream.motionGroupId;\n  }\n  get nova() {\n    return this.motionStream.nova;\n  }\n  get numJoints() {\n    return this.motionStream.joints.length;\n  }\n  get activeJoggingMode() {\n    if (this.cartesianWebsocket) return \"cartesian\";\n    if (this.jointWebsocket) return \"joint\";\n    return \"increment\";\n  }\n  get activeWebsocket() {\n    return this.cartesianWebsocket || this.jointWebsocket;\n  }\n  stop() {\n    return __async(this, null, function* () {\n      if (this.cartesianWebsocket) {\n        this.cartesianWebsocket.sendJson({\n          motion_group: this.motionGroupId,\n          position_direction: { x: 0, y: 0, z: 0 },\n          rotation_direction: { x: 0, y: 0, z: 0 },\n          position_velocity: 0,\n          rotation_velocity: 0,\n          tcp: this.cartesianJoggingOpts.tcpId,\n          coordinate_system: this.cartesianJoggingOpts.coordSystemId\n        });\n      }\n      if (this.jointWebsocket) {\n        this.jointWebsocket.sendJson({\n          motion_group: this.motionGroupId,\n          joint_velocities: new Array(this.numJoints).fill(0)\n        });\n      }\n    });\n  }\n  dispose() {\n    if (this.cartesianWebsocket) {\n      this.cartesianWebsocket.dispose();\n    }\n    if (this.jointWebsocket) {\n      this.jointWebsocket.dispose();\n    }\n  }\n  setJoggingMode(mode, cartesianJoggingOpts) {\n    console.log(\"Setting jogging mode to\", mode);\n    if (cartesianJoggingOpts) {\n      if (!isEqual_default(this.cartesianJoggingOpts, cartesianJoggingOpts)) {\n        if (this.cartesianWebsocket) {\n          this.cartesianWebsocket.dispose();\n          this.cartesianWebsocket = null;\n        }\n      }\n      this.cartesianJoggingOpts = cartesianJoggingOpts;\n    }\n    if (mode !== \"cartesian\" && this.cartesianWebsocket) {\n      this.cartesianWebsocket.dispose();\n      this.cartesianWebsocket = null;\n    }\n    if (mode !== \"joint\" && this.jointWebsocket) {\n      this.jointWebsocket.dispose();\n      this.jointWebsocket = null;\n    }\n    if (mode === \"cartesian\" && !this.cartesianWebsocket) {\n      this.cartesianWebsocket = this.nova.openReconnectingWebsocket(\n        `/motion-groups/move-tcp`\n      );\n      this.cartesianWebsocket.addEventListener(\n        \"message\",\n        (ev) => {\n          const data = tryParseJson(ev.data);\n          if (data && \"error\" in data) {\n            if (this.opts.onError) {\n              this.opts.onError(ev.data);\n            } else {\n              throw new Error(ev.data);\n            }\n          }\n        }\n      );\n    }\n    if (mode === \"joint\" && !this.jointWebsocket) {\n      this.jointWebsocket = this.nova.openReconnectingWebsocket(\n        `/motion-groups/move-joint`\n      );\n      this.jointWebsocket.addEventListener(\"message\", (ev) => {\n        const data = tryParseJson(ev.data);\n        if (data && \"error\" in data) {\n          if (this.opts.onError) {\n            this.opts.onError(ev.data);\n          } else {\n            throw new Error(ev.data);\n          }\n        }\n      });\n    }\n  }\n  /**\n   * Start rotation of a single robot joint at the specified velocity\n   */\n  startJointRotation(_0) {\n    return __async(this, arguments, function* ({\n      joint,\n      direction,\n      velocityRadsPerSec\n    }) {\n      if (!this.jointWebsocket) {\n        throw new Error(\n          \"Joint jogging websocket not connected; call setJoggingMode first\"\n        );\n      }\n      const jointVelocities = new Array(this.numJoints).fill(0);\n      jointVelocities[joint] = direction === \"-\" ? -velocityRadsPerSec : velocityRadsPerSec;\n      this.jointWebsocket.sendJson({\n        motion_group: this.motionGroupId,\n        joint_velocities: jointVelocities\n      });\n    });\n  }\n  /**\n   * Start the TCP moving along a specified axis at a given velocity\n   */\n  startTCPTranslation(_0) {\n    return __async(this, arguments, function* ({\n      axis,\n      direction,\n      velocityMmPerSec\n    }) {\n      if (!this.cartesianWebsocket) {\n        throw new Error(\n          \"Cartesian jogging websocket not connected; call setJoggingMode first\"\n        );\n      }\n      const zeroVector = { x: 0, y: 0, z: 0 };\n      const joggingVector = Object.assign({}, zeroVector);\n      joggingVector[axis] = direction === \"-\" ? -1 : 1;\n      this.cartesianWebsocket.sendJson({\n        motion_group: this.motionGroupId,\n        position_direction: joggingVector,\n        rotation_direction: zeroVector,\n        position_velocity: velocityMmPerSec,\n        rotation_velocity: 0,\n        tcp: this.cartesianJoggingOpts.tcpId,\n        coordinate_system: this.cartesianJoggingOpts.coordSystemId\n      });\n    });\n  }\n  /**\n   * Start the TCP rotating around a specified axis at a given velocity\n   */\n  startTCPRotation(_0) {\n    return __async(this, arguments, function* ({\n      axis,\n      direction,\n      velocityRadsPerSec\n    }) {\n      if (!this.cartesianWebsocket) {\n        throw new Error(\n          \"Cartesian jogging websocket not connected; call setJoggingMode first\"\n        );\n      }\n      const zeroVector = { x: 0, y: 0, z: 0 };\n      const joggingVector = Object.assign({}, zeroVector);\n      joggingVector[axis] = direction === \"-\" ? -1 : 1;\n      this.cartesianWebsocket.sendJson({\n        motion_group: this.motionGroupId,\n        position_direction: zeroVector,\n        rotation_direction: joggingVector,\n        position_velocity: 0,\n        rotation_velocity: velocityRadsPerSec,\n        tcp: this.cartesianJoggingOpts.tcpId,\n        coordinate_system: this.cartesianJoggingOpts.coordSystemId\n      });\n    });\n  }\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  runIncrementalCartesianMotion(_0) {\n    return __async(this, arguments, function* ({\n      currentTcpPose,\n      currentJoints,\n      coordSystemId,\n      velocityInRelevantUnits,\n      axis,\n      direction,\n      motion\n    }) {\n      var _a;\n      const commands = [];\n      if (!isSameCoordinateSystem(currentTcpPose.coordinate_system, coordSystemId)) {\n        throw new Error(\n          `Current TCP pose coordinate system ${currentTcpPose.coordinate_system} does not match target coordinate system ${coordSystemId}`\n        );\n      }\n      if (motion.type === \"translate\") {\n        const targetTcpPosition = Object.assign({}, currentTcpPose.position);\n        targetTcpPosition[axis] += motion.distanceMm * (direction === \"-\" ? -1 : 1);\n        commands.push({\n          settings: {\n            limits_override: {\n              tcp_velocity_limit: velocityInRelevantUnits\n            }\n          },\n          line: {\n            position: targetTcpPosition,\n            orientation: currentTcpPose.orientation,\n            coordinate_system: coordSystemId\n          }\n        });\n      } else if (motion.type === \"rotate\") {\n        const currentRotationVector = new Vector32(\n          currentTcpPose.orientation[\"x\"],\n          currentTcpPose.orientation[\"y\"],\n          currentTcpPose.orientation[\"z\"]\n        );\n        const currentRotationRad = currentRotationVector.length();\n        const currentRotationDirection = currentRotationVector.clone().normalize();\n        const differenceRotationRad = motion.distanceRads * (direction === \"-\" ? -1 : 1);\n        const differenceRotationDirection = new Vector32(0, 0, 0);\n        differenceRotationDirection[axis] = 1;\n        const f1 = Math.cos(0.5 * differenceRotationRad) * Math.cos(0.5 * currentRotationRad);\n        const f2 = Math.sin(0.5 * differenceRotationRad) * Math.sin(0.5 * currentRotationRad);\n        const f3 = Math.sin(0.5 * differenceRotationRad) * Math.cos(0.5 * currentRotationRad);\n        const f4 = Math.cos(0.5 * differenceRotationRad) * Math.sin(0.5 * currentRotationRad);\n        const dotProduct = differenceRotationDirection.dot(\n          currentRotationDirection\n        );\n        const crossProduct = differenceRotationDirection.clone().cross(currentRotationDirection);\n        const newRotationRad = 2 * Math.acos(f1 - f2 * dotProduct);\n        const f5 = newRotationRad / Math.sin(0.5 * newRotationRad);\n        const targetTcpOrientation = new Vector32().addScaledVector(crossProduct, f2).addScaledVector(differenceRotationDirection, f3).addScaledVector(currentRotationDirection, f4).multiplyScalar(f5);\n        commands.push({\n          settings: {\n            limits_override: {\n              tcp_orientation_velocity_limit: velocityInRelevantUnits\n            }\n          },\n          line: {\n            position: currentTcpPose.position,\n            orientation: targetTcpOrientation,\n            coordinate_system: coordSystemId\n          }\n        });\n      }\n      const motionPlanRes = yield this.nova.api.motion.planMotion({\n        motion_group: this.motionGroupId,\n        start_joint_position: currentJoints,\n        tcp: this.cartesianJoggingOpts.tcpId,\n        commands\n      });\n      const plannedMotion = (_a = motionPlanRes.plan_successful_response) == null ? void 0 : _a.motion;\n      if (!plannedMotion) {\n        throw new Error(\n          `Failed to plan jogging increment motion ${JSON.stringify(motionPlanRes)}`\n        );\n      }\n      yield this.nova.api.motion.streamMoveForward(\n        plannedMotion,\n        100,\n        void 0,\n        void 0,\n        void 0,\n        {\n          // Might take a while at low velocity\n          timeout: 1e3 * 60\n        }\n      );\n    });\n  }\n  /**\n   * Rotate a single robot joint by a fixed number of radians\n   * Promise resolves only after the motion has completed.\n   */\n  runIncrementalJointRotation(_0) {\n    return __async(this, arguments, function* ({\n      joint,\n      currentJoints,\n      velocityRadsPerSec,\n      direction,\n      distanceRads\n    }) {\n      var _a;\n      const targetJoints = [...currentJoints.joints];\n      targetJoints[joint] += distanceRads * (direction === \"-\" ? -1 : 1);\n      const jointVelocityLimits = new Array(\n        currentJoints.joints.length\n      ).fill(velocityRadsPerSec);\n      const motionPlanRes = yield this.nova.api.motion.planMotion({\n        motion_group: this.motionGroupId,\n        start_joint_position: currentJoints,\n        commands: [\n          {\n            settings: {\n              limits_override: {\n                joint_velocity_limits: {\n                  joints: jointVelocityLimits\n                }\n              }\n            },\n            joint_ptp: {\n              joints: targetJoints\n            }\n          }\n        ]\n      });\n      const plannedMotion = (_a = motionPlanRes.plan_successful_response) == null ? void 0 : _a.motion;\n      if (!plannedMotion) {\n        console.error(\"Failed to plan jogging increment motion\", motionPlanRes);\n        return;\n      }\n      yield this.nova.api.motion.streamMoveForward(\n        plannedMotion,\n        100,\n        void 0,\n        void 0,\n        void 0,\n        {\n          // Might take a while at low velocity\n          timeout: 1e3 * 60\n        }\n      );\n    });\n  }\n};\n\n// src/lib/v1/MotionStreamConnection.ts\nimport { makeAutoObservable as makeAutoObservable2, runInAction as runInAction2 } from \"mobx\";\nimport { Vector3 as Vector33 } from \"three\";\nvar MOTION_DELTA_THRESHOLD2 = 1e-4;\nfunction unwrapRotationVector(newRotationVectorApi, currentRotationVectorApi) {\n  const currentRotationVector = new Vector33(\n    currentRotationVectorApi.x,\n    currentRotationVectorApi.y,\n    currentRotationVectorApi.z\n  );\n  const newRotationVector = new Vector33(\n    newRotationVectorApi.x,\n    newRotationVectorApi.y,\n    newRotationVectorApi.z\n  );\n  const currentAngle = currentRotationVector.length();\n  const currentAxis = currentRotationVector.normalize();\n  let newAngle = newRotationVector.length();\n  let newAxis = newRotationVector.normalize();\n  if (newAxis.dot(currentAxis) < 0) {\n    newAngle = -newAngle;\n    newAxis = newAxis.multiplyScalar(-1);\n  }\n  let angleDifference = newAngle - currentAngle;\n  angleDifference -= 2 * Math.PI * Math.floor((angleDifference + Math.PI) / (2 * Math.PI));\n  newAngle = currentAngle + angleDifference;\n  return newAxis.multiplyScalar(newAngle);\n}\nvar MotionStreamConnection = class _MotionStreamConnection {\n  constructor(nova, controller, motionGroup, initialMotionState, motionStateSocket) {\n    this.nova = nova;\n    this.controller = controller;\n    this.motionGroup = motionGroup;\n    this.initialMotionState = initialMotionState;\n    this.motionStateSocket = motionStateSocket;\n    this.rapidlyChangingMotionState = initialMotionState;\n    motionStateSocket.addEventListener(\"message\", (event) => {\n      var _a;\n      const motionStateResponse = (_a = tryParseJson(event.data)) == null ? void 0 : _a.result;\n      if (!motionStateResponse) {\n        throw new Error(\n          `Failed to get motion state for ${this.motionGroupId}: ${event.data}`\n        );\n      }\n      if (!jointValuesEqual(\n        this.rapidlyChangingMotionState.state.joint_position.joints,\n        motionStateResponse.state.joint_position.joints,\n        MOTION_DELTA_THRESHOLD2\n      )) {\n        runInAction2(() => {\n          this.rapidlyChangingMotionState.state = motionStateResponse.state;\n        });\n      }\n      if (!tcpPoseEqual(\n        this.rapidlyChangingMotionState.tcp_pose,\n        motionStateResponse.tcp_pose,\n        MOTION_DELTA_THRESHOLD2\n      )) {\n        runInAction2(() => {\n          if (this.rapidlyChangingMotionState.tcp_pose == void 0) {\n            this.rapidlyChangingMotionState.tcp_pose = motionStateResponse.tcp_pose;\n          } else {\n            this.rapidlyChangingMotionState.tcp_pose = {\n              position: motionStateResponse.tcp_pose.position,\n              orientation: unwrapRotationVector(\n                motionStateResponse.tcp_pose.orientation,\n                this.rapidlyChangingMotionState.tcp_pose.orientation\n              ),\n              tcp: motionStateResponse.tcp_pose.tcp,\n              coordinate_system: motionStateResponse.tcp_pose.coordinate_system\n            };\n          }\n        });\n      }\n    });\n    makeAutoObservable2(this);\n  }\n  static open(nova, motionGroupId) {\n    return __async(this, null, function* () {\n      var _a;\n      const { instances: controllers } = yield nova.api.controller.listControllers();\n      const [_motionGroupIndex, controllerId] = motionGroupId.split(\"@\");\n      const controller = controllers.find((c) => c.controller === controllerId);\n      const motionGroup = controller == null ? void 0 : controller.physical_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      const motionStateSocket = nova.openReconnectingWebsocket(\n        `/motion-groups/${motionGroupId}/state-stream`\n      );\n      const firstMessage = yield motionStateSocket.firstMessage();\n      console.log(\"got first message\", firstMessage);\n      const initialMotionState = (_a = tryParseJson(firstMessage.data)) == null ? void 0 : _a.result;\n      if (!initialMotionState) {\n        throw new Error(\n          `Unable to parse initial motion state message ${firstMessage.data}`\n        );\n      }\n      console.log(\n        `Connected motion state websocket to motion group ${motionGroup.motion_group}. Initial state:\n  `,\n        initialMotionState\n      );\n      return new _MotionStreamConnection(\n        nova,\n        controller,\n        motionGroup,\n        initialMotionState,\n        motionStateSocket\n      );\n    });\n  }\n  get motionGroupId() {\n    return this.motionGroup.motion_group;\n  }\n  get controllerId() {\n    return this.controller.controller;\n  }\n  get modelFromController() {\n    return this.motionGroup.model_from_controller;\n  }\n  get wandelscriptIdentifier() {\n    const num = this.motionGroupId.split(\"@\")[0];\n    return `${this.controllerId.replaceAll(\"-\", \"_\")}_${num}`;\n  }\n  get joints() {\n    return this.initialMotionState.state.joint_position.joints.map((_, i) => {\n      return {\n        index: i\n      };\n    });\n  }\n  dispose() {\n    this.motionStateSocket.close();\n  }\n};\n\n// src/lib/v1/NovaCellAPIClient.ts\nimport {\n  ApplicationApi,\n  CellApi,\n  ControllerApi,\n  ControllerIOsApi,\n  CoordinateSystemsApi,\n  DeviceConfigurationApi,\n  LibraryProgramApi,\n  LibraryProgramMetadataApi,\n  LibraryRecipeApi,\n  LibraryRecipeMetadataApi,\n  MotionApi,\n  MotionGroupApi,\n  MotionGroupInfosApi,\n  MotionGroupJoggingApi,\n  MotionGroupKinematicApi,\n  ProgramApi,\n  ProgramValuesApi,\n  StoreCollisionComponentsApi,\n  StoreCollisionScenesApi,\n  StoreObjectApi,\n  SystemApi,\n  VirtualRobotApi,\n  VirtualRobotBehaviorApi,\n  VirtualRobotModeApi,\n  VirtualRobotSetupApi\n} from \"@wandelbots/nova-api/v1\";\nimport axios from \"axios\";\nvar NovaCellAPIClient = class {\n  constructor(cellId, opts) {\n    this.cellId = cellId;\n    this.opts = opts;\n    this.system = this.withUnwrappedResponsesOnly(SystemApi);\n    this.cell = this.withUnwrappedResponsesOnly(CellApi);\n    this.deviceConfig = this.withCellId(DeviceConfigurationApi);\n    this.motionGroup = this.withCellId(MotionGroupApi);\n    this.motionGroupInfos = this.withCellId(MotionGroupInfosApi);\n    this.controller = this.withCellId(ControllerApi);\n    this.program = this.withCellId(ProgramApi);\n    this.programValues = this.withCellId(ProgramValuesApi);\n    this.controllerIOs = this.withCellId(ControllerIOsApi);\n    this.motionGroupKinematic = this.withCellId(MotionGroupKinematicApi);\n    this.motion = this.withCellId(MotionApi);\n    this.coordinateSystems = this.withCellId(CoordinateSystemsApi);\n    this.application = this.withCellId(ApplicationApi);\n    this.applicationGlobal = this.withUnwrappedResponsesOnly(ApplicationApi);\n    this.motionGroupJogging = this.withCellId(MotionGroupJoggingApi);\n    this.virtualRobot = this.withCellId(VirtualRobotApi);\n    this.virtualRobotSetup = this.withCellId(VirtualRobotSetupApi);\n    this.virtualRobotMode = this.withCellId(VirtualRobotModeApi);\n    this.virtualRobotBehavior = this.withCellId(VirtualRobotBehaviorApi);\n    this.libraryProgramMetadata = this.withCellId(LibraryProgramMetadataApi);\n    this.libraryProgram = this.withCellId(LibraryProgramApi);\n    this.libraryRecipeMetadata = this.withCellId(LibraryRecipeMetadataApi);\n    this.libraryRecipe = this.withCellId(LibraryRecipeApi);\n    this.storeObject = this.withCellId(StoreObjectApi);\n    this.storeCollisionComponents = this.withCellId(\n      StoreCollisionComponentsApi\n    );\n    this.storeCollisionScenes = this.withCellId(StoreCollisionScenesApi);\n  }\n  /**\n   * Some TypeScript sorcery which alters the API class methods so you don't\n   * have to pass the cell id to every single one, and de-encapsulates the\n   * response data\n   */\n  withCellId(ApiConstructor) {\n    var _a, _b;\n    const apiClient = new ApiConstructor(\n      __spreadProps(__spreadValues({}, this.opts), {\n        isJsonMime: (mime) => {\n          return mime === \"application/json\";\n        }\n      }),\n      (_a = this.opts.basePath) != null ? _a : \"\",\n      (_b = this.opts.axiosInstance) != null ? _b : axios.create()\n    );\n    for (const key of Reflect.ownKeys(Reflect.getPrototypeOf(apiClient))) {\n      if (key !== \"constructor\" && typeof apiClient[key] === \"function\") {\n        const originalFunction = apiClient[key];\n        apiClient[key] = (...args) => {\n          return originalFunction.apply(apiClient, [this.cellId, ...args]).then((res) => res.data);\n        };\n      }\n    }\n    return apiClient;\n  }\n  /**\n   * As withCellId, but only does the response unwrapping\n   */\n  withUnwrappedResponsesOnly(ApiConstructor) {\n    var _a, _b;\n    const apiClient = new ApiConstructor(\n      __spreadProps(__spreadValues({}, this.opts), {\n        isJsonMime: (mime) => {\n          return mime === \"application/json\";\n        }\n      }),\n      (_a = this.opts.basePath) != null ? _a : \"\",\n      (_b = this.opts.axiosInstance) != null ? _b : axios.create()\n    );\n    for (const key of Reflect.ownKeys(Reflect.getPrototypeOf(apiClient))) {\n      if (key !== \"constructor\" && typeof apiClient[key] === \"function\") {\n        const originalFunction = apiClient[key];\n        apiClient[key] = (...args) => {\n          return originalFunction.apply(apiClient, args).then((res) => res.data);\n        };\n      }\n    }\n    return apiClient;\n  }\n};\n\n// src/lib/v1/NovaClient.ts\nimport axios2, { isAxiosError } from \"axios\";\nimport urlJoin from \"url-join\";\n\n// src/lib/v1/mock/MockNovaInstance.ts\nimport { AxiosError } from \"axios\";\nimport * as pathToRegexp from \"path-to-regexp\";\nvar MockNovaInstance = class {\n  constructor() {\n    this.connections = [];\n  }\n  handleAPIRequest(config) {\n    return __async(this, null, function* () {\n      var _a, _b, _c;\n      const apiHandlers = [\n        {\n          method: \"GET\",\n          path: \"/cells/:cellId/controllers\",\n          handle() {\n            return {\n              instances: [\n                {\n                  controller: \"mock-ur5e\",\n                  model_name: \"UniversalRobots::Controller\",\n                  host: \"mock-ur5e\",\n                  allow_software_install_on_controller: true,\n                  physical_motion_groups: [\n                    {\n                      motion_group: \"0@mock-ur5e\",\n                      name_from_controller: \"UR5e\",\n                      active: false,\n                      model_from_controller: \"UniversalRobots_UR5e\"\n                    }\n                  ],\n                  has_error: false,\n                  error_details: \"\"\n                }\n              ]\n            };\n          }\n        },\n        {\n          method: \"GET\",\n          path: \"/cells/:cellId/controllers/:controllerId\",\n          handle() {\n            return {\n              configuration: {\n                kind: \"VirtualController\",\n                manufacturer: \"universalrobots\",\n                position: \"[0,-1.571,-1.571,-1.571,1.571,-1.571,0]\",\n                type: \"universalrobots-ur5e\"\n              },\n              name: \"mock-ur5\"\n            };\n          }\n        },\n        {\n          method: \"GET\",\n          path: \"/cells/:cellId/motion-groups/:motionGroupId/specification\",\n          handle() {\n            return {\n              dh_parameters: [\n                {\n                  alpha: 1.5707963267948966,\n                  theta: 0,\n                  a: 0,\n                  d: 162.25,\n                  reverse_rotation_direction: false\n                },\n                {\n                  alpha: 0,\n                  theta: 0,\n                  a: -425,\n                  d: 0,\n                  reverse_rotation_direction: false\n                },\n                {\n                  alpha: 0,\n                  theta: 0,\n                  a: -392.2,\n                  d: 0,\n                  reverse_rotation_direction: false\n                },\n                {\n                  alpha: 1.5707963267948966,\n                  theta: 0,\n                  a: 0,\n                  d: 133.3,\n                  reverse_rotation_direction: false\n                },\n                {\n                  alpha: -1.5707963267948966,\n                  theta: 0,\n                  a: 0,\n                  d: 99.7,\n                  reverse_rotation_direction: false\n                },\n                {\n                  alpha: 0,\n                  theta: 0,\n                  a: 0,\n                  d: 99.6,\n                  reverse_rotation_direction: false\n                }\n              ],\n              mechanical_joint_limits: [\n                {\n                  joint: \"JOINTNAME_AXIS_1\",\n                  lower_limit: -6.335545063018799,\n                  upper_limit: 6.335545063018799,\n                  unlimited: false\n                },\n                {\n                  joint: \"JOINTNAME_AXIS_2\",\n                  lower_limit: -6.335545063018799,\n                  upper_limit: 6.335545063018799,\n                  unlimited: false\n                },\n                {\n                  joint: \"JOINTNAME_AXIS_3\",\n                  lower_limit: -6.335545063018799,\n                  upper_limit: 6.335545063018799,\n                  unlimited: false\n                },\n                {\n                  joint: \"JOINTNAME_AXIS_4\",\n                  lower_limit: -6.335545063018799,\n                  upper_limit: 6.335545063018799,\n                  unlimited: false\n                },\n                {\n                  joint: \"JOINTNAME_AXIS_5\",\n                  lower_limit: -6.335545063018799,\n                  upper_limit: 6.335545063018799,\n                  unlimited: false\n                },\n                {\n                  joint: \"JOINTNAME_AXIS_6\",\n                  lower_limit: -6.335545063018799,\n                  upper_limit: 6.335545063018799,\n                  unlimited: false\n                }\n              ]\n            };\n          }\n        },\n        {\n          method: \"GET\",\n          path: \"/cells/:cellId/motion-groups/:motionGroupId/safety-setup\",\n          handle() {\n            return {\n              safety_settings: [\n                {\n                  safety_state: \"SAFETY_NORMAL\",\n                  settings: {\n                    joint_position_limits: [\n                      {\n                        joint: \"JOINTNAME_AXIS_1\",\n                        lower_limit: -2.96705961227417,\n                        upper_limit: 2.96705961227417,\n                        unlimited: false\n                      },\n                      {\n                        joint: \"JOINTNAME_AXIS_2\",\n                        lower_limit: -1.7453292608261108,\n                        upper_limit: 2.7925267219543457,\n                        unlimited: false\n                      },\n                      {\n                        joint: \"JOINTNAME_AXIS_3\",\n                        lower_limit: -3.3161256313323975,\n                        upper_limit: 0.40142571926116943,\n                        unlimited: false\n                      },\n                      {\n                        joint: \"JOINTNAME_AXIS_4\",\n                        lower_limit: -3.4906585216522217,\n                        upper_limit: 3.4906585216522217,\n                        unlimited: false\n                      },\n                      {\n                        joint: \"JOINTNAME_AXIS_5\",\n                        lower_limit: -2.4434609413146973,\n                        upper_limit: 2.4434609413146973,\n                        unlimited: false\n                      },\n                      {\n                        joint: \"JOINTNAME_AXIS_6\",\n                        lower_limit: -4.71238899230957,\n                        upper_limit: 4.71238899230957,\n                        unlimited: false\n                      }\n                    ],\n                    joint_velocity_limits: [\n                      {\n                        joint: \"JOINTNAME_AXIS_1\",\n                        limit: 3.1415927410125732\n                      },\n                      {\n                        joint: \"JOINTNAME_AXIS_2\",\n                        limit: 3.1415927410125732\n                      },\n                      {\n                        joint: \"JOINTNAME_AXIS_3\",\n                        limit: 3.4906585216522217\n                      },\n                      {\n                        joint: \"JOINTNAME_AXIS_4\",\n                        limit: 6.108652591705322\n                      },\n                      {\n                        joint: \"JOINTNAME_AXIS_5\",\n                        limit: 6.108652591705322\n                      },\n                      {\n                        joint: \"JOINTNAME_AXIS_6\",\n                        limit: 6.981317043304443\n                      }\n                    ],\n                    joint_acceleration_limits: [],\n                    joint_torque_limits: [],\n                    tcp_velocity_limit: 1800\n                  }\n                }\n              ],\n              safety_zones: [\n                {\n                  id: 1,\n                  priority: 0,\n                  geometry: {\n                    compound: {\n                      child_geometries: [\n                        {\n                          convex_hull: {\n                            vertices: [\n                              {\n                                x: -800,\n                                y: -1330,\n                                z: -1820\n                              },\n                              {\n                                x: 1650,\n                                y: -1330,\n                                z: -1820\n                              },\n                              {\n                                x: 1650,\n                                y: 1330,\n                                z: -1820\n                              },\n                              {\n                                x: -800,\n                                y: 1330,\n                                z: -1820\n                              }\n                            ]\n                          },\n                          init_pose: {\n                            position: {\n                              x: 0,\n                              y: 0,\n                              z: 0\n                            },\n                            orientation: {\n                              x: 0,\n                              y: 0,\n                              z: 0,\n                              w: 1\n                            }\n                          },\n                          id: \"box\"\n                        },\n                        {\n                          convex_hull: {\n                            vertices: [\n                              {\n                                x: -800,\n                                y: -1330,\n                                z: -1820\n                              },\n                              {\n                                x: 1650,\n                                y: -1330,\n                                z: -1820\n                              },\n                              {\n                                x: 1650,\n                                y: -1330,\n                                z: 1500\n                              },\n                              {\n                                x: -800,\n                                y: -1330,\n                                z: 1500\n                              }\n                            ]\n                          },\n                          init_pose: {\n                            position: {\n                              x: 0,\n                              y: 0,\n                              z: 0\n                            },\n                            orientation: {\n                              x: 0,\n                              y: 0,\n                              z: 0,\n                              w: 1\n                            }\n                          },\n                          id: \"box\"\n                        },\n                        {\n                          convex_hull: {\n                            vertices: [\n                              {\n                                x: -800,\n                                y: -1330,\n                                z: -1820\n                              },\n                              {\n                                x: -800,\n                                y: 1330,\n                                z: -1820\n                              },\n                              {\n                                x: -800,\n                                y: 1330,\n                                z: 1500\n                              },\n                              {\n                                x: -800,\n                                y: -1330,\n                                z: 1500\n                              }\n                            ]\n                          },\n                          init_pose: {\n                            position: {\n                              x: 0,\n                              y: 0,\n                              z: 0\n                            },\n                            orientation: {\n                              x: 0,\n                              y: 0,\n                              z: 0,\n                              w: 1\n                            }\n                          },\n                          id: \"box\"\n                        },\n                        {\n                          convex_hull: {\n                            vertices: [\n                              {\n                                x: 1650,\n                                y: 1330,\n                                z: 1500\n                              },\n                              {\n                                x: -800,\n                                y: 1330,\n                                z: 1500\n                              },\n                              {\n                                x: -800,\n                                y: -1330,\n                                z: 1500\n                              },\n                              {\n                                x: 1650,\n                                y: -1330,\n                                z: 1500\n                              }\n                            ]\n                          },\n                          init_pose: {\n                            position: {\n                              x: 0,\n                              y: 0,\n                              z: 0\n                            },\n                            orientation: {\n                              x: 0,\n                              y: 0,\n                              z: 0,\n                              w: 1\n                            }\n                          },\n                          id: \"box\"\n                        },\n                        {\n                          convex_hull: {\n                            vertices: [\n                              {\n                                x: 1650,\n                                y: 1330,\n                                z: 1500\n                              },\n                              {\n                                x: -800,\n                                y: 1330,\n                                z: 1500\n                              },\n                              {\n                                x: -800,\n                                y: 1330,\n                                z: -1820\n                              },\n                              {\n                                x: 1650,\n                                y: 1330,\n                                z: -1820\n                              }\n                            ]\n                          },\n                          init_pose: {\n                            position: {\n                              x: 0,\n                              y: 0,\n                              z: 0\n                            },\n                            orientation: {\n                              x: 0,\n                              y: 0,\n                              z: 0,\n                              w: 1\n                            }\n                          },\n                          id: \"box\"\n                        },\n                        {\n                          convex_hull: {\n                            vertices: [\n                              {\n                                x: 1650,\n                                y: 1330,\n                                z: 1500\n                              },\n                              {\n                                x: 1650,\n                                y: -1330,\n                                z: 1500\n                              },\n                              {\n                                x: 1650,\n                                y: -1330,\n                                z: -1820\n                              },\n                              {\n                                x: 1650,\n                                y: 1330,\n                                z: -1820\n                              }\n                            ]\n                          },\n                          init_pose: {\n                            position: {\n                              x: 0,\n                              y: 0,\n                              z: 0\n                            },\n                            orientation: {\n                              x: 0,\n                              y: 0,\n                              z: 0,\n                              w: 1\n                            }\n                          },\n                          id: \"box\"\n                        }\n                      ]\n                    },\n                    init_pose: {\n                      position: {\n                        x: 0,\n                        y: 0,\n                        z: 0\n                      },\n                      orientation: {\n                        x: 0,\n                        y: 0,\n                        z: 0,\n                        w: 1\n                      }\n                    },\n                    id: \"Cell workzone\"\n                  },\n                  motion_group_uid: 1\n                },\n                {\n                  id: 2,\n                  priority: 0,\n                  geometry: {\n                    convex_hull: {\n                      vertices: [\n                        {\n                          x: 1650,\n                          y: 1330,\n                          z: -1850\n                        },\n                        {\n                          x: 865,\n                          y: 1330,\n                          z: -1850\n                        },\n                        {\n                          x: 865,\n                          y: -720,\n                          z: -1850\n                        },\n                        {\n                          x: 1650,\n                          y: -720,\n                          z: -1850\n                        },\n                        {\n                          x: 1650,\n                          y: 1330,\n                          z: -920\n                        },\n                        {\n                          x: 865,\n                          y: 1330,\n                          z: -920\n                        },\n                        {\n                          x: 865,\n                          y: -720,\n                          z: -920\n                        },\n                        {\n                          x: 1650,\n                          y: -720,\n                          z: -920\n                        }\n                      ]\n                    },\n                    init_pose: {\n                      position: {\n                        x: 0,\n                        y: 0,\n                        z: 0\n                      },\n                      orientation: {\n                        x: 0,\n                        y: 0,\n                        z: 0,\n                        w: 1\n                      }\n                    },\n                    id: \"Transport\"\n                  },\n                  motion_group_uid: 1\n                },\n                {\n                  id: 3,\n                  priority: 0,\n                  geometry: {\n                    convex_hull: {\n                      vertices: [\n                        {\n                          x: 1650,\n                          y: 1330,\n                          z: -600\n                        },\n                        {\n                          x: 865,\n                          y: 1330,\n                          z: -600\n                        },\n                        {\n                          x: 865,\n                          y: 430,\n                          z: -600\n                        },\n                        {\n                          x: 1650,\n                          y: 430,\n                          z: -600\n                        },\n                        {\n                          x: 1650,\n                          y: 1330,\n                          z: -1250\n                        },\n                        {\n                          x: 865,\n                          y: 1330,\n                          z: -1250\n                        },\n                        {\n                          x: 865,\n                          y: 430,\n                          z: -1250\n                        },\n                        {\n                          x: 1650,\n                          y: 430,\n                          z: -1250\n                        }\n                      ]\n                    },\n                    init_pose: {\n                      position: {\n                        x: 0,\n                        y: 0,\n                        z: 0\n                      },\n                      orientation: {\n                        x: 0,\n                        y: 0,\n                        z: 0,\n                        w: 1\n                      }\n                    },\n                    id: \"Tunel\"\n                  },\n                  motion_group_uid: 1\n                },\n                {\n                  id: 4,\n                  priority: 0,\n                  geometry: {\n                    convex_hull: {\n                      vertices: [\n                        {\n                          x: 1650,\n                          y: -760,\n                          z: -440\n                        },\n                        {\n                          x: 900,\n                          y: -760,\n                          z: -440\n                        },\n                        {\n                          x: 900,\n                          y: -1330,\n                          z: -440\n                        },\n                        {\n                          x: 1650,\n                          y: -1330,\n                          z: -440\n                        },\n                        {\n                          x: 1650,\n                          y: -760,\n                          z: -1800\n                        },\n                        {\n                          x: 900,\n                          y: -760,\n                          z: -1800\n                        },\n                        {\n                          x: 900,\n                          y: -1330,\n                          z: -1800\n                        },\n                        {\n                          x: 1650,\n                          y: -1330,\n                          z: -1800\n                        }\n                      ]\n                    },\n                    init_pose: {\n                      position: {\n                        x: 0,\n                        y: 0,\n                        z: 0\n                      },\n                      orientation: {\n                        x: 0,\n                        y: 0,\n                        z: 0,\n                        w: 1\n                      }\n                    },\n                    id: \"Fanuc controller\"\n                  },\n                  motion_group_uid: 1\n                },\n                {\n                  id: 6,\n                  priority: 0,\n                  geometry: {\n                    convex_hull: {\n                      vertices: [\n                        {\n                          x: -200,\n                          y: -200,\n                          z: -1900\n                        },\n                        {\n                          x: 200,\n                          y: -200,\n                          z: -1900\n                        },\n                        {\n                          x: 200,\n                          y: 200,\n                          z: -1900\n                        },\n                        {\n                          x: -200,\n                          y: 200,\n                          z: -1900\n                        },\n                        {\n                          x: -200,\n                          y: -200,\n                          z: -350\n                        },\n                        {\n                          x: 200,\n                          y: -200,\n                          z: -350\n                        },\n                        {\n                          x: 200,\n                          y: 200,\n                          z: -350\n                        },\n                        {\n                          x: -200,\n                          y: 200,\n                          z: -350\n                        }\n                      ]\n                    },\n                    init_pose: {\n                      position: {\n                        x: 0,\n                        y: 0,\n                        z: 0\n                      },\n                      orientation: {\n                        x: 0,\n                        y: 0,\n                        z: 0,\n                        w: 1\n                      }\n                    },\n                    id: \"Robot base\"\n                  },\n                  motion_group_uid: 1\n                }\n              ],\n              robot_model_geometries: [\n                {\n                  link_index: 1,\n                  geometry: {\n                    sphere: {\n                      radius: 270\n                    },\n                    init_pose: {\n                      position: {\n                        x: -70,\n                        y: -70,\n                        z: -50\n                      },\n                      orientation: {\n                        x: 0,\n                        y: 0,\n                        z: 0,\n                        w: 1\n                      }\n                    },\n                    id: \"link1_sphere\"\n                  }\n                },\n                {\n                  link_index: 2,\n                  geometry: {\n                    capsule: {\n                      radius: 160,\n                      cylinder_height: 800\n                    },\n                    init_pose: {\n                      position: {\n                        x: -450,\n                        y: 40,\n                        z: 170\n                      },\n                      orientation: {\n                        x: 0,\n                        y: -0.7071067811865475,\n                        z: 0,\n                        w: 0.7071067811865476\n                      }\n                    },\n                    id: \"link2_capsule\"\n                  }\n                },\n                {\n                  link_index: 3,\n                  geometry: {\n                    sphere: {\n                      radius: 270\n                    },\n                    init_pose: {\n                      position: {\n                        x: -110,\n                        y: 10,\n                        z: -100\n                      },\n                      orientation: {\n                        x: 0,\n                        y: 0,\n                        z: 0,\n                        w: 1\n                      }\n                    },\n                    id: \"link3_sphere\"\n                  }\n                },\n                {\n                  link_index: 4,\n                  geometry: {\n                    capsule: {\n                      radius: 110,\n                      cylinder_height: 600\n                    },\n                    init_pose: {\n                      position: {\n                        x: 0,\n                        y: 300,\n                        z: 40\n                      },\n                      orientation: {\n                        x: -0.7071067811865475,\n                        y: 0,\n                        z: 0,\n                        w: 0.7071067811865476\n                      }\n                    },\n                    id: \"link4_capsule\"\n                  }\n                },\n                {\n                  link_index: 5,\n                  geometry: {\n                    sphere: {\n                      radius: 75\n                    },\n                    init_pose: {\n                      position: {\n                        x: 0,\n                        y: 0,\n                        z: -50\n                      },\n                      orientation: {\n                        x: 0,\n                        y: 0,\n                        z: 0,\n                        w: 1\n                      }\n                    },\n                    id: \"link5_sphere\"\n                  }\n                }\n              ],\n              tool_geometries: []\n            };\n          }\n        },\n        {\n          method: \"GET\",\n          path: \"/cells/:cellId/coordinate-systems\",\n          handle() {\n            return {\n              coordinatesystems: [\n                {\n                  coordinate_system: \"\",\n                  name: \"world\",\n                  reference_uid: \"\",\n                  position: {\n                    x: 0,\n                    y: 0,\n                    z: 0\n                  },\n                  rotation: {\n                    angles: [0, 0, 0],\n                    type: \"ROTATION_VECTOR\"\n                  }\n                }\n              ]\n            };\n          }\n        },\n        {\n          method: \"GET\",\n          path: \"/cells/:cellId/motion-groups/:motionGroupId/tcps\",\n          handle() {\n            return {\n              tcps: [\n                {\n                  id: \"Flange\",\n                  readable_name: \"Default-Flange\",\n                  position: {\n                    x: 0,\n                    y: 0,\n                    z: 0\n                  },\n                  rotation: {\n                    angles: [0, 0, 0, 0],\n                    type: \"ROTATION_VECTOR\"\n                  }\n                },\n                {\n                  id: \"complex-tcp-position\",\n                  readable_name: \"Complex TCP Position\",\n                  position: {\n                    x: -200,\n                    y: 300,\n                    z: 150\n                  },\n                  rotation: {\n                    angles: [\n                      -0.12139440409113832,\n                      -0.06356210998212003,\n                      -0.2023240068185639,\n                      0\n                    ],\n                    type: \"ROTATION_VECTOR\"\n                  }\n                }\n              ]\n            };\n          }\n        }\n      ];\n      const method = ((_a = config.method) == null ? void 0 : _a.toUpperCase()) || \"GET\";\n      const path = \"/cells\" + ((_c = (_b = config.url) == null ? void 0 : _b.split(\"/cells\")[1]) == null ? void 0 : _c.split(\"?\")[0]);\n      for (const handler of apiHandlers) {\n        const match2 = pathToRegexp.match(handler.path)(path || \"\");\n        if (method === handler.method && match2) {\n          const json = handler.handle();\n          return {\n            status: 200,\n            statusText: \"Success\",\n            data: JSON.stringify(json),\n            headers: {},\n            config,\n            request: {\n              responseURL: config.url\n            }\n          };\n        }\n      }\n      throw new AxiosError(\n        `No mock handler matched this request: ${method} ${path}`,\n        \"404\",\n        config\n      );\n    });\n  }\n  handleWebsocketConnection(socket) {\n    this.connections.push(socket);\n    setTimeout(() => {\n      socket.dispatchEvent(new Event(\"open\"));\n      console.log(\"Websocket connection opened from\", socket.url);\n      if (socket.url.includes(\"/state-stream\")) {\n        socket.dispatchEvent(\n          new MessageEvent(\"message\", {\n            data: JSON.stringify(defaultMotionState)\n          })\n        );\n      }\n      if (socket.url.includes(\"/move-joint\")) {\n        socket.dispatchEvent(\n          new MessageEvent(\"message\", {\n            data: JSON.stringify({\n              result: {\n                motion_group: \"0@ur\",\n                state: {\n                  controller: \"ur\",\n                  operation_mode: \"OPERATION_MODE_AUTO\",\n                  safety_state: \"SAFETY_STATE_NORMAL\",\n                  timestamp: \"2024-09-18T12:48:26.096266444Z\",\n                  velocity_override: 100,\n                  motion_groups: [\n                    {\n                      motion_group: \"0@ur\",\n                      controller: \"ur\",\n                      joint_position: {\n                        joints: [\n                          1.3492152690887451,\n                          -1.5659207105636597,\n                          1.6653711795806885,\n                          -1.0991662740707397,\n                          -1.829018235206604,\n                          1.264623761177063\n                        ]\n                      },\n                      joint_velocity: {\n                        joints: [0, 0, 0, 0, 0, 0]\n                      },\n                      flange_pose: {\n                        position: {\n                          x: 6.437331889439328,\n                          y: -628.4123774830913,\n                          z: 577.0569957147832\n                        },\n                        orientation: {\n                          x: -1.683333649797158,\n                          y: -1.9783363827298732,\n                          z: -0.4928031860165713\n                        },\n                        coordinate_system: \"\"\n                      },\n                      tcp_pose: {\n                        position: {\n                          x: 6.437331889439328,\n                          y: -628.4123774830913,\n                          z: 577.0569957147832\n                        },\n                        orientation: {\n                          x: -1.683333649797158,\n                          y: -1.9783363827298732,\n                          z: -0.4928031860165713\n                        },\n                        coordinate_system: \"\",\n                        tcp: \"Flange\"\n                      },\n                      velocity: {\n                        linear: {\n                          x: 0,\n                          y: 0,\n                          z: 0\n                        },\n                        angular: {\n                          x: -0,\n                          y: 0,\n                          z: 0\n                        },\n                        coordinate_system: \"\"\n                      },\n                      force: {\n                        force: {\n                          x: 0,\n                          y: 0,\n                          z: 0\n                        },\n                        moment: {\n                          x: 0,\n                          y: 0,\n                          z: 0\n                        },\n                        coordinate_system: \"\"\n                      },\n                      joint_limit_reached: {\n                        limit_reached: [\n                          false,\n                          false,\n                          false,\n                          false,\n                          false,\n                          false\n                        ]\n                      },\n                      joint_current: {\n                        joints: [0, 0, 0, 0, 0, 0]\n                      },\n                      sequence_number: \"671259\"\n                    }\n                  ],\n                  sequence_number: \"671259\"\n                },\n                movement_state: \"MOVEMENT_STATE_MOVING\"\n              }\n            })\n          })\n        );\n      }\n      if (socket.url.includes(\"/move-tcp\")) {\n        socket.dispatchEvent(\n          new MessageEvent(\"message\", {\n            data: JSON.stringify({\n              result: {\n                motion_group: \"0@ur\",\n                state: {\n                  controller: \"ur\",\n                  operation_mode: \"OPERATION_MODE_AUTO\",\n                  safety_state: \"SAFETY_STATE_NORMAL\",\n                  timestamp: \"2024-09-18T12:43:12.188335774Z\",\n                  velocity_override: 100,\n                  motion_groups: [\n                    {\n                      motion_group: \"0@ur\",\n                      controller: \"ur\",\n                      joint_position: {\n                        joints: [\n                          1.3352527618408203,\n                          -1.5659207105636597,\n                          1.6653711795806885,\n                          -1.110615611076355,\n                          -1.829018235206604,\n                          1.264623761177063\n                        ]\n                      },\n                      joint_velocity: {\n                        joints: [0, 0, 0, 0, 0, 0]\n                      },\n                      flange_pose: {\n                        position: {\n                          x: -2.763015284002938,\n                          y: -630.2151479701106,\n                          z: 577.524509114342\n                        },\n                        orientation: {\n                          x: -1.704794877102097,\n                          y: -1.9722372952861567,\n                          z: -0.4852079204210754\n                        },\n                        coordinate_system: \"\"\n                      },\n                      tcp_pose: {\n                        position: {\n                          x: -2.763015284002938,\n                          y: -630.2151479701106,\n                          z: 577.524509114342\n                        },\n                        orientation: {\n                          x: -1.704794877102097,\n                          y: -1.9722372952861567,\n                          z: -0.4852079204210754\n                        },\n                        coordinate_system: \"\",\n                        tcp: \"Flange\"\n                      },\n                      velocity: {\n                        linear: {\n                          x: 0,\n                          y: 0,\n                          z: 0\n                        },\n                        angular: {\n                          x: -0,\n                          y: 0,\n                          z: 0\n                        },\n                        coordinate_system: \"\"\n                      },\n                      force: {\n                        force: {\n                          x: 0,\n                          y: 0,\n                          z: 0\n                        },\n                        moment: {\n                          x: 0,\n                          y: 0,\n                          z: 0\n                        },\n                        coordinate_system: \"\"\n                      },\n                      joint_limit_reached: {\n                        limit_reached: [\n                          false,\n                          false,\n                          false,\n                          false,\n                          false,\n                          false\n                        ]\n                      },\n                      joint_current: {\n                        joints: [0, 0, 0, 0, 0, 0]\n                      },\n                      sequence_number: \"627897\"\n                    }\n                  ],\n                  sequence_number: \"627897\"\n                },\n                movement_state: \"MOVEMENT_STATE_MOVING\"\n              }\n            })\n          })\n        );\n      }\n    }, 10);\n  }\n  handleWebsocketMessage(socket, message) {\n    console.log(`Received message on ${socket.url}`, message);\n  }\n};\nvar defaultMotionState = {\n  result: {\n    state: {\n      motion_group: \"0@universalrobots-ur5e\",\n      controller: \"universalrobots-ur5e\",\n      joint_position: {\n        joints: [\n          1.1699999570846558,\n          -1.5700000524520874,\n          1.3600000143051147,\n          1.0299999713897705,\n          1.2899999618530273,\n          1.2799999713897705\n        ]\n      },\n      joint_velocity: {\n        joints: [0, 0, 0, 0, 0, 0]\n      },\n      flange_pose: {\n        position: {\n          x: 1.3300010259703043,\n          y: -409.2680714682808,\n          z: 531.0203477065281\n        },\n        orientation: {\n          x: 1.7564919306270736,\n          y: -1.7542521568325058,\n          z: 0.7326972590614671\n        },\n        coordinate_system: \"\"\n      },\n      tcp_pose: {\n        position: {\n          x: 1.3300010259703043,\n          y: -409.2680714682808,\n          z: 531.0203477065281\n        },\n        orientation: {\n          x: 1.7564919306270736,\n          y: -1.7542521568325058,\n          z: 0.7326972590614671\n        },\n        coordinate_system: \"\",\n        tcp: \"Flange\"\n      },\n      velocity: {\n        linear: {\n          x: 0,\n          y: 0,\n          z: 0\n        },\n        angular: {\n          x: 0,\n          y: 0,\n          z: 0\n        },\n        coordinate_system: \"\"\n      },\n      force: {\n        force: {\n          x: 0,\n          y: 0,\n          z: 0\n        },\n        moment: {\n          x: 0,\n          y: 0,\n          z: 0\n        },\n        coordinate_system: \"\"\n      },\n      joint_limit_reached: {\n        limit_reached: [false, false, false, false, false, false]\n      },\n      joint_current: {\n        joints: [0, 0, 0, 0, 0, 0]\n      },\n      sequence_number: \"1\"\n    },\n    tcp_pose: {\n      position: {\n        x: 302.90748476115556,\n        y: -152.87065869452337,\n        z: 424.0454619321661\n      },\n      orientation: {\n        x: 2.3403056115045353,\n        y: -1.1706836379431356,\n        z: 0.9772511964246311\n      },\n      coordinate_system: \"\",\n      tcp: \"Flange\"\n    }\n  }\n};\n\n// src/lib/v1/NovaClient.ts\nvar NovaClient = class {\n  constructor(config) {\n    this.authPromise = null;\n    this.accessToken = null;\n    var _a;\n    const cellId = (_a = config.cellId) != null ? _a : \"cell\";\n    this.config = __spreadValues({\n      cellId\n    }, config);\n    this.accessToken = config.accessToken || availableStorage.getString(\"wbjs.access_token\") || null;\n    if (this.config.instanceUrl === \"https://mock.example.com\") {\n      this.mock = new MockNovaInstance();\n    }\n    const axiosInstance = axios2.create({\n      baseURL: urlJoin(this.config.instanceUrl, \"/api/v1\"),\n      headers: {\n        \"User-Agent\": `Wandelbots-Nova-JS-SDK`\n      }\n    });\n    axiosInstance.interceptors.request.use((request) => __async(this, null, function* () {\n      if (!request.headers.Authorization) {\n        if (this.accessToken) {\n          request.headers.Authorization = `Bearer ${this.accessToken}`;\n        } else if (this.config.username && this.config.password) {\n          request.headers.Authorization = `Basic ${btoa(config.username + \":\" + config.password)}`;\n        }\n      }\n      return request;\n    }));\n    if (typeof window !== \"undefined\") {\n      axiosInstance.interceptors.response.use(\n        (r) => r,\n        (error) => __async(this, null, function* () {\n          var _a2, _b;\n          if (isAxiosError(error)) {\n            if (((_a2 = error.response) == null ? void 0 : _a2.status) === 401) {\n              try {\n                yield this.renewAuthentication();\n                if (error.config) {\n                  if (this.accessToken) {\n                    error.config.headers.Authorization = `Bearer ${this.accessToken}`;\n                  } else {\n                    delete error.config.headers.Authorization;\n                  }\n                  return axiosInstance.request(error.config);\n                }\n              } catch (err) {\n                return Promise.reject(err);\n              }\n            } else if (((_b = error.response) == null ? void 0 : _b.status) === 503) {\n              const res = yield fetch(window.location.href);\n              if (res.status === 503) {\n                window.location.reload();\n              }\n            }\n          }\n          return Promise.reject(error);\n        })\n      );\n    }\n    this.api = new NovaCellAPIClient(cellId, __spreadProps(__spreadValues({}, config), {\n      basePath: urlJoin(this.config.instanceUrl, \"/api/v1\"),\n      isJsonMime: (mime) => {\n        return mime === \"application/json\";\n      },\n      baseOptions: __spreadValues(__spreadValues({}, this.mock ? {\n        adapter: (config2) => {\n          return this.mock.handleAPIRequest(config2);\n        }\n      } : {}), config.baseOptions),\n      axiosInstance\n    }));\n  }\n  renewAuthentication() {\n    return __async(this, null, function* () {\n      if (this.authPromise) {\n        return;\n      }\n      this.authPromise = loginWithAuth0(this.config.instanceUrl);\n      try {\n        this.accessToken = yield this.authPromise;\n        if (this.accessToken) {\n          availableStorage.setString(\"wbjs.access_token\", this.accessToken);\n        } else {\n          availableStorage.delete(\"wbjs.access_token\");\n        }\n      } finally {\n        this.authPromise = null;\n      }\n    });\n  }\n  makeWebsocketURL(path) {\n    const url = new URL(\n      urlJoin(\n        this.config.instanceUrl,\n        `/api/v1/cells/${this.config.cellId}`,\n        path\n      )\n    );\n    url.protocol = url.protocol.replace(\"http\", \"ws\");\n    url.protocol = url.protocol.replace(\"https\", \"wss\");\n    if (this.accessToken) {\n      url.searchParams.append(\"token\", this.accessToken);\n    } else if (this.config.username && this.config.password) {\n      url.username = this.config.username;\n      url.password = this.config.password;\n    }\n    return url.toString();\n  }\n  /**\n   * Retrieve an AutoReconnectingWebsocket to the given path on the Nova instance.\n   * If you explicitly want to reconnect an existing websocket, call `reconnect`\n   * on the returned object.\n   */\n  openReconnectingWebsocket(path) {\n    return new AutoReconnectingWebsocket(this.makeWebsocketURL(path), {\n      mock: this.mock\n    });\n  }\n  /**\n   * Connect to the motion state websocket(s) for a given motion group\n   */\n  connectMotionStream(motionGroupId) {\n    return __async(this, null, function* () {\n      return yield MotionStreamConnection.open(this, motionGroupId);\n    });\n  }\n  /**\n   * Connect to the jogging websocket(s) for a given motion group\n   */\n  connectJogger(motionGroupId) {\n    return __async(this, null, function* () {\n      return yield JoggerConnection.open(this, motionGroupId);\n    });\n  }\n  connectMotionGroups(motionGroupIds) {\n    return __async(this, null, function* () {\n      const { instances } = yield this.api.controller.listControllers();\n      return Promise.all(\n        motionGroupIds.map(\n          (motionGroupId) => ConnectedMotionGroup.connect(this, motionGroupId, instances)\n        )\n      );\n    });\n  }\n  connectMotionGroup(motionGroupId) {\n    return __async(this, null, function* () {\n      const motionGroups = yield this.connectMotionGroups([motionGroupId]);\n      return motionGroups[0];\n    });\n  }\n};\n\n// src/lib/v1/ProgramStateConnection.ts\nimport { AxiosError as AxiosError2 } from \"axios\";\nimport { makeAutoObservable as makeAutoObservable3, runInAction as runInAction3 } from \"mobx\";\nvar ProgramState = /* @__PURE__ */ ((ProgramState2) => {\n  ProgramState2[\"NotStarted\"] = \"not started\";\n  ProgramState2[\"Running\"] = \"running\";\n  ProgramState2[\"Stopped\"] = \"stopped\";\n  ProgramState2[\"Failed\"] = \"failed\";\n  ProgramState2[\"Completed\"] = \"completed\";\n  return ProgramState2;\n})(ProgramState || {});\nvar ProgramStateConnection = class {\n  constructor(nova) {\n    this.nova = nova;\n    this.currentProgram = {};\n    this.logs = [];\n    this.executionState = \"idle\";\n    this.currentlyExecutingProgramRunnerId = null;\n    makeAutoObservable3(this, {}, { autoBind: true });\n    this.programStateSocket = nova.openReconnectingWebsocket(`/programs/state`);\n    this.programStateSocket.addEventListener(\"message\", (ev) => {\n      const msg = tryParseJson(ev.data);\n      if (!msg) {\n        console.error(\"Failed to parse program state message\", ev.data);\n        return;\n      }\n      if (msg.type === \"update\") {\n        this.handleProgramStateMessage(msg);\n      }\n    });\n  }\n  /** Handle a program state update from the backend */\n  handleProgramStateMessage(msg) {\n    return __async(this, null, function* () {\n      var _a;\n      const { runner } = msg;\n      if (runner.id !== this.currentlyExecutingProgramRunnerId) return;\n      if (runner.state === \"failed\" /* Failed */) {\n        try {\n          const runnerState = yield this.nova.api.program.getProgramRunner(\n            runner.id\n          );\n          const stdout = runnerState.stdout;\n          if (stdout) {\n            this.log(stdout);\n          }\n          this.logError(\n            `Program runner ${runner.id} failed with error: ${runnerState.error}\n${runnerState.traceback}`\n          );\n        } catch (err) {\n          this.logError(\n            `Failed to retrieve results for program ${runner.id}: ${err}`\n          );\n        }\n        this.currentProgram.state = \"failed\" /* Failed */;\n        this.gotoIdleState();\n      } else if (runner.state === \"stopped\" /* Stopped */) {\n        try {\n          const runnerState = yield this.nova.api.program.getProgramRunner(\n            runner.id\n          );\n          const stdout = runnerState.stdout;\n          if (stdout) {\n            this.log(stdout);\n          }\n          this.currentProgram.state = \"stopped\" /* Stopped */;\n          this.log(`Program runner ${runner.id} stopped`);\n        } catch (err) {\n          this.logError(\n            `Failed to retrieve results for program ${runner.id}: ${err}`\n          );\n        }\n        this.gotoIdleState();\n      } else if (runner.state === \"completed\" /* Completed */) {\n        try {\n          const runnerState = yield this.nova.api.program.getProgramRunner(\n            runner.id\n          );\n          const stdout = runnerState.stdout;\n          if (stdout) {\n            this.log(stdout);\n          }\n          this.log(\n            `Program runner ${runner.id} finished successfully in ${(_a = runner.execution_time) == null ? void 0 : _a.toFixed(2)} seconds`\n          );\n          this.currentProgram.state = \"completed\" /* Completed */;\n        } catch (err) {\n          this.logError(\n            `Failed to retrieve results for program ${runner.id}: ${err}`\n          );\n        }\n        this.gotoIdleState();\n      } else if (runner.state === \"running\" /* Running */) {\n        this.currentProgram.state = \"running\" /* Running */;\n        this.log(`Program runner ${runner.id} now running`);\n      } else if (runner.state !== \"not started\" /* NotStarted */) {\n        console.error(runner);\n        this.logError(\n          `Program runner ${runner.id} entered unexpected state: ${runner.state}`\n        );\n        this.currentProgram.state = \"not started\" /* NotStarted */;\n        this.gotoIdleState();\n      }\n    });\n  }\n  /** Call when a program is no longer executing */\n  gotoIdleState() {\n    runInAction3(() => {\n      this.executionState = \"idle\";\n    });\n    this.currentlyExecutingProgramRunnerId = null;\n  }\n  executeProgram(wandelscript, initial_state, activeRobot) {\n    return __async(this, null, function* () {\n      this.currentProgram = {\n        wandelscript,\n        state: \"not started\" /* NotStarted */\n      };\n      const { currentProgram: openProgram } = this;\n      if (!openProgram) return;\n      runInAction3(() => {\n        this.executionState = \"starting\";\n      });\n      if (activeRobot) {\n        try {\n          yield this.nova.api.motionGroupJogging.stopJogging(\n            activeRobot.motionGroupId\n          );\n        } catch (err) {\n          console.error(err);\n        }\n      }\n      const trimmedCode = openProgram.wandelscript.replaceAll(/^\\s*$/gm, \"\");\n      try {\n        const programRunnerRef = yield this.nova.api.program.createProgramRunner(\n          {\n            code: trimmedCode,\n            initial_state,\n            default_robot: activeRobot == null ? void 0 : activeRobot.wandelscriptIdentifier\n          },\n          {\n            headers: {\n              \"Content-Type\": \"application/json\"\n            }\n          }\n        );\n        this.log(`Created program runner ${programRunnerRef.id}\"`);\n        runInAction3(() => {\n          this.executionState = \"executing\";\n        });\n        this.currentlyExecutingProgramRunnerId = programRunnerRef.id;\n      } catch (error) {\n        if (error instanceof AxiosError2 && error.response && error.request) {\n          this.logError(\n            `${error.response.status} ${error.response.statusText} from ${error.response.config.url} ${JSON.stringify(error.response.data)}`\n          );\n        } else {\n          this.logError(JSON.stringify(error));\n        }\n        runInAction3(() => {\n          this.executionState = \"idle\";\n        });\n      }\n    });\n  }\n  stopProgram() {\n    return __async(this, null, function* () {\n      if (!this.currentlyExecutingProgramRunnerId) return;\n      runInAction3(() => {\n        this.executionState = \"stopping\";\n      });\n      try {\n        yield this.nova.api.program.stopProgramRunner(\n          this.currentlyExecutingProgramRunnerId\n        );\n      } catch (err) {\n        runInAction3(() => {\n          this.executionState = \"executing\";\n        });\n        throw err;\n      }\n    });\n  }\n  reset() {\n    this.currentProgram = {};\n  }\n  log(message) {\n    console.log(message);\n    this.logs.push({\n      timestamp: Date.now(),\n      message\n    });\n  }\n  logError(message) {\n    console.log(message);\n    this.logs.push({\n      timestamp: Date.now(),\n      message,\n      level: \"error\"\n    });\n  }\n};\nexport {\n  ConnectedMotionGroup,\n  JoggerConnection,\n  MotionStreamConnection,\n  NovaCellAPIClient,\n  NovaClient,\n  ProgramState,\n  ProgramStateConnection,\n  getLatestTrajectories\n};\n//# sourceMappingURL=index.js.map","export function radiansToDegree(radians: number): number {\n  return radians * (180 / Math.PI)\n}\n\nexport function degreesToRadians(degrees: number): number {\n  return degrees * (Math.PI / 180)\n}\n\nexport function tryParseJson(json: unknown): any {\n  try {\n    return JSON.parse(json as string)\n  } catch {\n    return undefined\n  }\n}\n\nexport function tryStringifyJson(json: unknown): string | undefined {\n  try {\n    return JSON.stringify(json)\n  } catch {\n    return undefined\n  }\n}\n","import { AxiosError } from \"axios\"\nimport { tryStringifyJson } from \"./converters\"\n\nexport function delay(ms: number) {\n  return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\nexport function makeShortErrorMessage(err: unknown) {\n  if (err instanceof AxiosError && err.code === \"ERR_NETWORK\") {\n    return \"Failed to connect to the server. Please check your internet connection.\"\n  } else if (err instanceof AxiosError && err.response) {\n    return `${err.response?.status} ${err.response?.statusText}: ${JSON.stringify(err.response?.data)}`\n  } else if (err instanceof Error) {\n    return err.message\n  } else {\n    return `Unexpected error: ${err}`\n  }\n}\n\nexport function assertUnreachable(x: never, msg: string): never {\n  throw new Error(msg + ` ${JSON.stringify(x)}`)\n}\n\nexport function makeErrorMessage(err: unknown) {\n  if (err instanceof AxiosError && err.code === \"ERR_NETWORK\") {\n    return \"Failed to connect to the server. Please check your internet connection.\"\n  } else if (err instanceof AxiosError && err.response) {\n    return `${err.response?.status} ${err.response?.statusText} from ${err.response?.config.url}: ${JSON.stringify(err.response?.data)}`\n  } else if (err instanceof Error) {\n    return err.message\n  } else {\n    return `Unexpected error: ${tryStringifyJson(err) || err}`\n  }\n}\n","import { capitalize, CircularProgress, Stack, useTheme } from \"@mui/material\"\nimport { lowerFirst } from \"lodash-es\"\nimport { useEffect, useState } from \"react\"\nimport { makeErrorMessage } from \"./utils/errorHandling\"\n\nexport const LoadingCover = (props: {\n  message?: string\n  error?: unknown\n  softTimeout?: number\n}) => {\n  const softTimeout = props.softTimeout || 3000\n\n  const [showSlowLoadingMessage, setShowSlowLoadingMessage] = useState(false)\n  const theme = useTheme()\n\n  useEffect(() => {\n    const timeout = setTimeout(() => {\n      setShowSlowLoadingMessage(true)\n    }, softTimeout)\n\n    return () => clearTimeout(timeout)\n  })\n\n  return (\n    <Stack\n      width=\"100%\"\n      height=\"100%\"\n      alignItems=\"center\"\n      justifyContent=\"center\"\n      sx={{ color: theme.palette.text.primary }}\n    >\n      {props.error ? (\n        <LoadingErrorMessage\n          loadingMessage={props.message}\n          error={props.error}\n        />\n      ) : (\n        <>\n          <CircularProgress sx={{ marginBottom: \"24px\" }} />\n          {!!props.message && <div>{props.message}</div>}\n          <Stack\n            sx={{\n              visibility: showSlowLoadingMessage ? \"visible\" : \"hidden\",\n              marginTop: \"1rem\",\n              color: theme.palette.text.secondary,\n            }}\n          >\n            {\"This is taking longer than expected...\"}\n          </Stack>\n        </>\n      )}\n    </Stack>\n  )\n}\n\nexport const LoadingErrorMessage = (props: {\n  loadingMessage?: string\n  error: unknown\n}) => {\n  const errorMessage = makeErrorMessage(props.error)\n  const stack = props.error instanceof Error ? props.error.stack : null\n  const theme = useTheme()\n\n  return (\n    <Stack\n      sx={{\n        maxHeight: \"100%\",\n        maxWidth: \"min(100%, 800px)\",\n        padding: 2,\n        overflow: \"auto\",\n        color: theme.palette.error.main,\n        \"& pre\": {\n          whiteSpace: \"pre-wrap\",\n          wordBreak: \"break-word\",\n          paddingBottom: \"3rem\",\n        },\n      }}\n    >\n      {(props.loadingMessage\n        ? `Error while ${lowerFirst(capitalize(props.loadingMessage))} - `\n        : \"\") + errorMessage}\n      <br />\n      {stack && <pre>{stack}</pre>}\n    </Stack>\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","/**\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 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';\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","/**\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","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","/**\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 * 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 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 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.state\n      .joint_limit_reached.limit_reached,\n  )\n  const jointLimitsReachedRef = useRef(jointLimitsReached)\n\n  useAnimationFrame(() => {\n    const newLimitsReached =\n      store.jogger.motionStream.rapidlyChangingMotionState.state\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 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","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","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  JoggerConnection,\n  MotionGroupSpecification,\n  RobotTcp,\n} from \"@wandelbots/nova-js/v1\"\nimport { countBy } from \"lodash-es\"\nimport keyBy from \"lodash-es/keyBy\"\nimport uniqueId from \"lodash-es/uniqueId\"\nimport { autorun, makeAutoObservable, type IReactionDisposer } from \"mobx\"\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  /**\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 = true\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 [motionGroupSpec, { coordinatesystems }, { tcps }] =\n      await Promise.all([\n        nova.api.motionGroupInfos.getMotionGroupSpecification(\n          jogger.motionGroupId,\n        ),\n\n        // Fetch coord systems so user can select between them\n        nova.api.coordinateSystems.listCoordinateSystems(\"ROTATION_VECTOR\"),\n\n        // Same for TCPs\n        nova.api.motionGroupInfos.listTcps(\n          jogger.motionGroupId,\n          \"ROTATION_VECTOR\",\n        ),\n      ])\n\n    return new JoggingStore(\n      jogger,\n      motionGroupSpec,\n      coordinatesystems || [],\n      tcps || [],\n    )\n  }\n\n  constructor(\n    readonly jogger: JoggerConnection,\n    readonly motionGroupSpec: MotionGroupSpecification,\n    readonly coordSystems: CoordinateSystem[],\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    makeAutoObservable(this, {}, { autoBind: true })\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    ;(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    const websocket = this.jogger.activeWebsocket\n\n    this.jogger.setJoggingMode(\"increment\")\n\n    if (websocket) {\n      await websocket.closed()\n    }\n  }\n\n  /** Activate the jogger with current settings */\n  async activate() {\n    if (this.currentTab.id === \"cartesian\") {\n      const cartesianJoggingOpts = {\n        tcpId: this.selectedTcpId,\n        coordSystemId: this.activeCoordSystemId,\n      }\n\n      if (this.activeDiscreteIncrement) {\n        this.jogger.setJoggingMode(\"increment\", cartesianJoggingOpts)\n      } else {\n        this.jogger.setJoggingMode(\"cartesian\", cartesianJoggingOpts)\n      }\n    } else {\n      this.jogger.setJoggingMode(\"joint\")\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  /** 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 { Box, MenuItem } from \"@mui/material\"\nimport { observer } from \"mobx-react-lite\"\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 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\"\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\"\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        id=\"orientation-select\"\n        labelId=\"orientation-select\"\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\"\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' && !/jsdom/.test(window.navigator.userAgent)) {\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}","/**\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.js\";\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 { alpha, lighten, darken } from '@mui/system/colorManipulator';\nimport { useRtl } from '@mui/system/RtlProvider';\nimport useSlotProps from '@mui/utils/useSlotProps';\nimport { useSlider, valueToPercent } from \"./useSlider.js\";\nimport isHostComponent from \"../utils/isHostComponent.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: lighten(theme.palette[color].main, 0.62),\n          borderColor: lighten(theme.palette[color].main, 0.62),\n          ...theme.applyStyles('dark', {\n            backgroundColor: darken(theme.palette[color].main, 0.5)\n          }),\n          ...theme.applyStyles('dark', {\n            borderColor: 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        ...(theme.vars ? {\n          boxShadow: `0px 0px 0px 8px rgba(${theme.vars.palette[color].mainChannel} / 0.16)`\n        } : {\n          boxShadow: `0px 0px 0px 8px ${alpha(theme.palette[color].main, 0.16)}`\n        }),\n        '@media (hover: none)': {\n          boxShadow: 'none'\n        }\n      },\n      [`&.${sliderClasses.active}`]: {\n        ...(theme.vars ? {\n          boxShadow: `0px 0px 0px 14px rgba(${theme.vars.palette[color].mainChannel} / 0.16)`\n        } : {\n          boxShadow: `0px 0px 0px 14px ${alpha(theme.palette[color].main, 0.16)}`\n        })\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 { degreesToRadians, radiansToDegrees } 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 { 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            `/motion-groups/${store.jogger.motionGroupId}/state-stream?tcp=${store.selectedTcpId}&response_coordinate_system=${store.selectedCoordSystemId}`,\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 =\n        jogger.motionStream.rapidlyChangingMotionState.state.joint_position\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.startTCPTranslation({\n          axis: opts.axis,\n          direction: opts.direction,\n          velocityMmPerSec: store.translationVelocityMmPerSec,\n        })\n      } else {\n        await store.jogger.startTCPRotation({\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          {/* Jogging options */}\n          <JoggingOptions store={store} />\n\n          {/* Velocity slider */}\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[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?.[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.startJointRotation({\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          id=\"JointControls\"\n        >\n          <Stack alignItems=\"center\" gap=\"24px\">\n            {store.jogger.motionStream.joints.map((joint) => {\n              const jointLimits =\n                store.motionGroupSpec.mechanical_joint_limits?.[joint.index]\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                          .state.joint_position.joints[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/v1\"\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 { LoadingCover } from \"../LoadingCover\"\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 nova.connectJogger(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\n        {/* Current tab content */}\n        <Stack\n          flexGrow={1}\n          position=\"relative\"\n          sx={{ overflowY: \"auto\", overflowX: \"hidden\" }}\n        >\n          {renderTabContent()}\n        </Stack>\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 } from \"@wandelbots/nova-js\"\nimport type { TcpPose } from \"@wandelbots/nova-js/v1\"\nimport { observer } from \"mobx-react-lite\"\nimport { useState } from \"react\"\nimport { externalizeComponent } from \"../../externalizeComponent\"\nimport { CopyableText } from \"../CopyableText\"\n\nexport type PoseCartesianValuesProps = {\n  tcpPose: TcpPose\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 type { Joints } from \"@wandelbots/nova-api/v1\"\nimport { observer } from \"mobx-react-lite\"\nimport { useState } from \"react\"\nimport { externalizeComponent } from \"../../externalizeComponent\"\nimport { CopyableText } from \"../CopyableText\"\n\nexport type PoseJointValuesProps = {\n  joints: Joints\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.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","import { Pause, PlayArrow, Stop } from \"@mui/icons-material\"\nimport { Box, Button, Typography, useTheme } from \"@mui/material\"\nimport { observer } from \"mobx-react-lite\"\nimport { useTranslation } from \"react-i18next\"\nimport { externalizeComponent } from \"../externalizeComponent\"\n\nexport enum ProgramState {\n  IDLE = \"idle\",\n  PREPARING = \"preparing\",\n  STARTING = \"starting\",\n  RUNNING = \"running\",\n  PAUSING = \"pausing\",\n  PAUSED = \"paused\",\n  STOPPING = \"stopping\",\n  COMPLETED = \"completed\",\n  FAILED = \"failed\",\n  STOPPED = \"stopped\",\n  ERROR = \"error\",\n}\n\nexport interface ProgramControlProps {\n  /** The current state of the program control */\n  state: ProgramState\n  /** Callback fired when the run/resume button is clicked */\n  onRun: () => void\n  /** Callback fired when the pause button is clicked (only available in 'with_pause' variant) */\n  onPause?: () => void\n  /** Callback fired when the stop button is clicked */\n  onStop: () => void\n  /**\n   * Function to reset the component from 'stopping' state back to 'idle'.\n   * This must be called manually by the user when requiresManualReset is true.\n   */\n  onReset?: () => void\n  /**\n   * When true, the component will stay in 'stopping' state until onReset is called manually.\n   * When false (default), auto-resets to 'idle' after 2 seconds.\n   */\n  requiresManualReset?: boolean\n  /**\n   * Variant of the component:\n   * - 'with_pause': Shows run/pause/stop buttons (default)\n   * - 'without_pause': Shows only run/stop buttons\n   */\n  variant?: \"with_pause\" | \"without_pause\"\n  /** Additional CSS class name */\n  className?: string\n}\n\ninterface ButtonConfig {\n  enabled: boolean\n  label: string\n  color: string\n  onClick: () => void\n}\n\n/**\n * A control component for program execution with run, pause, and stop functionality.\n *\n * Features:\n * - State machine with idle, preparing, starting, running, pausing, paused, stopping, completed, failed, stopped, and error states\n * - Two variants: with_pause (3 buttons) and without_pause (2 buttons)\n * - Optional manual reset functionality\n * - Responsive design with 110px circular buttons\n * - Material-UI theming integration\n */\nexport const ProgramControl = externalizeComponent(\n  observer(\n    ({\n      state,\n      onRun,\n      onPause,\n      onStop,\n      onReset,\n      requiresManualReset = false,\n      variant = \"with_pause\",\n      className,\n    }: ProgramControlProps) => {\n      const theme = useTheme()\n      const { t } = useTranslation()\n\n      const getButtonConfigs = (): ButtonConfig[] => {\n        const baseConfigs: Record<string, ButtonConfig> = {\n          run: {\n            enabled:\n              state === ProgramState.IDLE ||\n              state === ProgramState.STOPPED ||\n              state === ProgramState.PAUSED ||\n              state === ProgramState.COMPLETED ||\n              state === ProgramState.FAILED ||\n              state === ProgramState.ERROR,\n            label:\n              state === ProgramState.PAUSED\n                ? t(\"ProgramControl.Resume.bt\")\n                : state === ProgramState.ERROR || state === ProgramState.FAILED\n                  ? t(\"ProgramControl.Retry.bt\")\n                  : t(\"ProgramControl.Start.bt\"),\n            color: theme.palette.success.main,\n            onClick: onRun,\n          },\n          pause: {\n            enabled: state === ProgramState.RUNNING,\n            label: t(\"ProgramControl.Pause.bt\"),\n            color: \"#FFFFFF33\",\n            onClick: onPause || (() => {}),\n          },\n          stop: {\n            enabled:\n              state === ProgramState.PREPARING ||\n              state === ProgramState.STARTING ||\n              state === ProgramState.RUNNING ||\n              state === ProgramState.PAUSING ||\n              state === ProgramState.PAUSED,\n            label: t(\"ProgramControl.Stop.bt\"),\n            color: theme.palette.error.main,\n            onClick: onStop,\n          },\n        }\n\n        if (variant === \"without_pause\") {\n          return [baseConfigs.run, baseConfigs.stop]\n        }\n\n        return [baseConfigs.run, baseConfigs.pause, baseConfigs.stop]\n      }\n\n      const getButtonIcon = (index: number) => {\n        const iconProps = { sx: { fontSize: \"55px\" } }\n\n        if (variant === \"without_pause\") {\n          return index === 0 ? (\n            <PlayArrow {...iconProps} />\n          ) : (\n            <Stop {...iconProps} />\n          )\n        }\n\n        switch (index) {\n          case 0:\n            return <PlayArrow {...iconProps} />\n          case 1:\n            return <Pause {...iconProps} />\n          case 2:\n            return <Stop {...iconProps} />\n          default:\n            return null\n        }\n      }\n\n      const buttonConfigs = getButtonConfigs()\n\n      return (\n        <Box\n          className={className}\n          sx={{\n            display: \"flex\",\n            flexDirection: \"column\",\n            alignItems: \"center\",\n            gap: 2,\n          }}\n        >\n          <Box\n            sx={{\n              display: \"flex\",\n              gap: \"40px\",\n              flexWrap: \"wrap\",\n              justifyContent: \"center\",\n              alignItems: \"center\",\n            }}\n          >\n            {buttonConfigs.map((config, index) => (\n              <Box\n                key={config.label}\n                sx={{\n                  display: \"flex\",\n                  flexDirection: \"column\",\n                  alignItems: \"center\",\n                  gap: 1,\n                }}\n              >\n                <Button\n                  variant=\"contained\"\n                  disabled={\n                    !config.enabled ||\n                    state === ProgramState.PREPARING ||\n                    state === ProgramState.STARTING ||\n                    state === ProgramState.PAUSING ||\n                    (state === ProgramState.STOPPING && !requiresManualReset)\n                  }\n                  onClick={config.onClick}\n                  sx={{\n                    width: \"88px\",\n                    height: \"88px\",\n                    borderRadius: \"88px\",\n                    backgroundColor: config.color,\n                    opacity:\n                      config.enabled &&\n                      state !== ProgramState.PREPARING &&\n                      state !== ProgramState.STARTING &&\n                      state !== ProgramState.PAUSING &&\n                      !(state === ProgramState.STOPPING && !requiresManualReset)\n                        ? 1\n                        : 0.3,\n                    \"&:hover\": {\n                      backgroundColor: config.color,\n                      opacity:\n                        config.enabled &&\n                        state !== ProgramState.PREPARING &&\n                        state !== ProgramState.STARTING &&\n                        state !== ProgramState.PAUSING &&\n                        !(\n                          state === ProgramState.STOPPING &&\n                          !requiresManualReset\n                        )\n                          ? 0.8\n                          : 0.3,\n                    },\n                    \"&:disabled\": {\n                      backgroundColor: config.color,\n                      opacity: 0.3,\n                    },\n                    minWidth: \"88px\",\n                    flexShrink: 0,\n                  }}\n                >\n                  {getButtonIcon(index)}\n                </Button>\n\n                <Typography\n                  variant=\"body1\"\n                  sx={{\n                    color:\n                      config.enabled &&\n                      state !== ProgramState.PREPARING &&\n                      state !== ProgramState.STARTING &&\n                      state !== ProgramState.PAUSING &&\n                      !(state === ProgramState.STOPPING && !requiresManualReset)\n                        ? config.color\n                        : theme.palette.text.disabled,\n                    textAlign: \"center\",\n                    opacity:\n                      config.enabled &&\n                      state !== ProgramState.PREPARING &&\n                      state !== ProgramState.STARTING &&\n                      state !== ProgramState.PAUSING &&\n                      !(state === ProgramState.STOPPING && !requiresManualReset)\n                        ? 1\n                        : 0.3,\n                  }}\n                >\n                  {config.label}\n                </Typography>\n              </Box>\n            ))}\n          </Box>\n        </Box>\n      )\n    },\n  ),\n)\n","import { Chip, Typography, useTheme } from \"@mui/material\"\nimport type {\n  RobotControllerStateOperationModeEnum,\n  RobotControllerStateSafetyStateEnum,\n} from \"@wandelbots/nova-js/v1\"\nimport { observer } from \"mobx-react-lite\"\nimport { useTranslation } from \"react-i18next\"\nimport { externalizeComponent } from \"../externalizeComponent\"\nimport { ProgramState } from \"./ProgramControl\"\n\nexport interface ProgramStateIndicatorProps {\n  /** The current state of the program */\n  programState: ProgramState\n  /** The current safety state of the robot controller */\n  safetyState: RobotControllerStateSafetyStateEnum\n  /** The current operation mode of the robot controller */\n  operationMode: RobotControllerStateOperationModeEnum\n  /** Additional CSS class name */\n  className?: string\n}\n\n/**\n * A state indicator component that displays the current program execution state\n * combined with robot controller safety and operation mode states.\n *\n * Features:\n * - Combines program state with safety and operation mode states\n * - Color-coded based on state severity (success, warning, error)\n * - Rendered as Material-UI filled chip\n * - Localization support via react-i18next\n */\nexport const ProgramStateIndicator = externalizeComponent(\n  observer(\n    ({\n      programState,\n      safetyState,\n      operationMode,\n      className,\n    }: ProgramStateIndicatorProps) => {\n      const theme = useTheme()\n      const { t } = useTranslation()\n\n      const getStateInfo = () => {\n        // First check for emergency stop or critical safety states\n        if (\n          safetyState === \"SAFETY_STATE_DEVICE_EMERGENCY_STOP\" ||\n          safetyState === \"SAFETY_STATE_ROBOT_EMERGENCY_STOP\" ||\n          safetyState === \"SAFETY_STATE_STOP_0\" ||\n          safetyState === \"SAFETY_STATE_STOP_1\" ||\n          safetyState === \"SAFETY_STATE_STOP_2\" ||\n          safetyState === \"SAFETY_STATE_PROTECTIVE_STOP\" ||\n          safetyState === \"SAFETY_STATE_STOP\" ||\n          safetyState === \"SAFETY_STATE_REDUCED\" ||\n          safetyState === \"SAFETY_STATE_MASTERING\" ||\n          safetyState === \"SAFETY_STATE_CONFIRM_SAFETY\" ||\n          safetyState === \"SAFETY_STATE_OPERATOR_SAFETY\" ||\n          safetyState === \"SAFETY_STATE_RECOVERY\" ||\n          safetyState === \"SAFETY_STATE_VIOLATION\"\n        ) {\n          return {\n            label: t(\"ProgramStateIndicator.EStop.lb\"),\n            color: theme.palette.error.main,\n          }\n        }\n\n        // Check for error states\n        if (\n          safetyState === \"SAFETY_STATE_UNKNOWN\" ||\n          safetyState === \"SAFETY_STATE_FAULT\"\n        ) {\n          return {\n            label: t(\"ProgramStateIndicator.Error.lb\"),\n            color: theme.palette.error.main,\n          }\n        }\n\n        // For normal safety states, check program state\n        if (safetyState === \"SAFETY_STATE_NORMAL\") {\n          switch (programState) {\n            case ProgramState.PREPARING:\n              return {\n                label: t(\"ProgramStateIndicator.Preparing.lb\"),\n                color: theme.palette.warning.main,\n              }\n            case ProgramState.STARTING:\n              return {\n                label: t(\"ProgramStateIndicator.Starting.lb\"),\n                color: theme.palette.warning.main,\n              }\n            case ProgramState.RUNNING:\n              return {\n                label: t(\"ProgramStateIndicator.Running.lb\"),\n                color: theme.palette.success.main,\n              }\n            case ProgramState.PAUSING:\n              return {\n                label: t(\"ProgramStateIndicator.Pausing.lb\"),\n                color: theme.palette.warning.main,\n              }\n            case ProgramState.PAUSED:\n              return {\n                label: t(\"ProgramStateIndicator.Paused.lb\"),\n                color: theme.palette.grey[600],\n              }\n            case ProgramState.STOPPING:\n              return {\n                label: t(\"ProgramStateIndicator.Stopping.lb\"),\n                color: theme.palette.warning.main,\n              }\n            case ProgramState.COMPLETED:\n              return {\n                label: t(\"ProgramStateIndicator.Completed.lb\"),\n                color: theme.palette.success.main,\n              }\n            case ProgramState.FAILED:\n              return {\n                label: t(\"ProgramStateIndicator.Failed.lb\"),\n                color: theme.palette.error.main,\n              }\n            case ProgramState.STOPPED:\n              return {\n                label: t(\"ProgramStateIndicator.Stopped.lb\"),\n                color: theme.palette.warning.main,\n              }\n            case ProgramState.ERROR:\n              return {\n                label: t(\"ProgramStateIndicator.Error.lb\"),\n                color: theme.palette.error.main,\n              }\n            case ProgramState.IDLE:\n            default:\n              return {\n                label: t(\"ProgramStateIndicator.Ready.lb\"),\n                color: theme.palette.success.main,\n              }\n          }\n        }\n\n        // Default fallback\n        return {\n          label: t(\"ProgramStateIndicator.Idle.lb\"),\n          color: theme.palette.grey[600],\n        }\n      }\n\n      const { label, color } = getStateInfo()\n\n      // Add operation mode suffix if not automatic\n      const getOperationModeText = () => {\n        switch (operationMode) {\n          case \"OPERATION_MODE_AUTO\":\n            return t(\"ProgramStateIndicator.Auto.lb\")\n          case \"OPERATION_MODE_MANUAL\":\n            return t(\"ProgramStateIndicator.Manual.lb\")\n          case \"OPERATION_MODE_MANUAL_T1\":\n            return t(\"ProgramStateIndicator.ManualT1.lb\")\n          case \"OPERATION_MODE_MANUAL_T2\":\n            return t(\"ProgramStateIndicator.ManualT2.lb\")\n          default:\n            return t(\"ProgramStateIndicator.Auto.lb\") // Default to Auto for unknown modes\n        }\n      }\n\n      const fullLabel = `${label} / ${getOperationModeText()}`\n\n      return (\n        <Chip\n          className={className}\n          label={\n            <Typography\n              variant=\"body2\"\n              sx={{\n                fontSize: \"0.75rem\", // Smaller than body2\n                lineHeight: 1.2,\n              }}\n            >\n              {fullLabel}\n            </Typography>\n          }\n          variant=\"filled\"\n          sx={{\n            backgroundColor: color,\n            color: theme.palette.getContrastText(color),\n            fontWeight: 500,\n            height: \"auto\",\n            \"& .MuiChip-label\": {\n              paddingX: 1.5,\n              paddingY: 0.5,\n            },\n          }}\n        />\n      )\n    },\n  ),\n)\n","import type { Object3D } from \"three\"\nimport type { GLTF } from \"three-stdlib\"\nimport { version } from \"../../../package.json\"\n\nexport function defaultGetModel(modelFromController: string): string {\n  let useVersion = version\n  if (version.startsWith(\"0.\")) {\n    useVersion = \"\"\n  }\n  return `https://cdn.jsdelivr.net/gh/wandelbotsgmbh/wandelbots-js-react-components${useVersion ? `@${useVersion}` : \"\"}/public/models/${modelFromController}.glb`\n}\n\n/**\n * Finds all the joint groups in a GLTF tree, as identified\n * by the _Jxx name ending convention.\n */\nexport function collectJoints(rootObject: Object3D): Object3D[] {\n  function getAllObjects(root: Object3D): Object3D[] {\n    if (root.children.length === 0) {\n      return [root]\n    }\n    return [root, ...root.children.flatMap((child) => getAllObjects(child))]\n  }\n\n  return getAllObjects(rootObject).filter((o) => isJoint(o))\n}\n\n/**\n * Checks if a specified threejs object represents the flange of a\n * robot, based on the _FLG name ending convention.\n */\nexport function isFlange(node: Object3D) {\n  return node.name.endsWith(\"_FLG\")\n}\n\n/**\n * Checks if a specified threejs object represents a joint of a\n * robot, based on the _Jxx name ending convention.\n */\nexport function isJoint(node: Object3D) {\n  return /_J[0-9]+$/.test(node.name)\n}\n\n/**\n * Validates that the loaded GLTF file has six joints and a flange group.\n */\nexport function parseRobotModel(gltf: GLTF, filename: string): { gltf: GLTF } {\n  let flange: Object3D | undefined\n  const joints: Object3D[] = []\n\n  function parseNode(node: Object3D) {\n    if (isFlange(node)) {\n      if (flange) {\n        throw Error(\n          `Found multiple flange groups in robot model ${filename}; first ${flange.name} then ${node.name}. Only one _FLG group is allowed.`,\n        )\n      }\n\n      flange = node\n    }\n\n    if (isJoint(node)) {\n      joints.push(node)\n    }\n\n    node.children.map(parseNode)\n  }\n\n  parseNode(gltf.scene)\n\n  if (!flange) {\n    throw Error(\n      `No flange group found in robot model ${filename}. Flange must be identified with a name ending in _FLG.`,\n    )\n  }\n\n  return { gltf }\n}\n","import { useFrame, useThree } from \"@react-three/fiber\"\nimport type {\n  DHParameter,\n  MotionGroupStateResponse,\n} from \"@wandelbots/nova-api/v1\"\nimport React, { useEffect, useRef } from \"react\"\nimport type { Group, Object3D } from \"three\"\nimport { useAutorun } from \"../utils/hooks\"\nimport { ValueInterpolator } from \"../utils/interpolation\"\nimport { collectJoints } from \"./robotModelLogic\"\n\ntype RobotAnimatorProps = {\n  rapidlyChangingMotionState: MotionGroupStateResponse\n  dhParameters: DHParameter[]\n  onRotationChanged?: (joints: Object3D[], jointValues: number[]) => void\n  children: React.ReactNode\n}\n\nexport default function RobotAnimator({\n  rapidlyChangingMotionState,\n  dhParameters,\n  onRotationChanged,\n  children,\n}: RobotAnimatorProps) {\n  const jointValues = useRef<number[]>([])\n  const jointObjects = useRef<Object3D[]>([])\n  const interpolatorRef = useRef<ValueInterpolator | null>(null)\n  const { invalidate } = useThree()\n\n  // Initialize interpolator\n  useEffect(() => {\n    const initialJointValues =\n      rapidlyChangingMotionState.state.joint_position.joints.filter(\n        (item) => item !== undefined,\n      )\n\n    interpolatorRef.current = new ValueInterpolator(initialJointValues, {\n      tension: 120, // Controls spring stiffness - higher values create faster, more responsive motion\n      friction: 20, // Controls damping - higher values reduce oscillation and create smoother settling\n      threshold: 0.001,\n    })\n\n    return () => {\n      interpolatorRef.current?.destroy()\n    }\n  }, [])\n\n  // Animation loop that runs at the display's refresh rate\n  useFrame((state, delta) => {\n    if (interpolatorRef.current) {\n      const isComplete = interpolatorRef.current.update(delta)\n      setRotation()\n\n      // Trigger a re-render only if the animation is still running\n      if (!isComplete) {\n        invalidate()\n      }\n    }\n  })\n\n  function setGroupRef(group: Group | null) {\n    if (!group) return\n\n    jointObjects.current = collectJoints(group)\n\n    // Set initial position\n    setRotation()\n    invalidate()\n  }\n\n  function updateJoints(newJointValues: number[]) {\n    jointValues.current = newJointValues\n    interpolatorRef.current?.setTarget(newJointValues)\n  }\n\n  function setRotation() {\n    const updatedJointValues = interpolatorRef.current?.getCurrentValues() || []\n\n    if (onRotationChanged) {\n      onRotationChanged(jointObjects.current, updatedJointValues)\n    } else {\n      for (const [index, object] of jointObjects.current.entries()) {\n        const dhParam = dhParameters[index]\n        const rotationOffset = dhParam.theta || 0\n        const rotationSign = dhParam.reverse_rotation_direction ? -1 : 1\n\n        object.rotation.y =\n          rotationSign * (updatedJointValues[index] || 0) + rotationOffset\n      }\n    }\n  }\n\n  useAutorun(() => {\n    const newJointValues =\n      rapidlyChangingMotionState.state.joint_position.joints.filter(\n        (item) => item !== undefined,\n      )\n\n    requestAnimationFrame(() => updateJoints(newJointValues))\n  })\n\n  return <group ref={setGroupRef}>{children}</group>\n}\n","import { Line } from \"@react-three/drei\"\nimport type { DHParameter } from \"@wandelbots/nova-api/v1\"\nimport React, { useRef } from \"react\"\nimport type * as THREE from \"three\"\nimport { Matrix4, Quaternion, Vector3 } from \"three\"\nimport type { LineGeometry } from \"three/examples/jsm/lines/LineGeometry.js\"\nimport RobotAnimator from \"./RobotAnimator\"\nimport type { DHRobotProps } from \"./SupportedRobot\"\n\nconst CHILD_LINE = \"line\"\nconst CHILD_MESH = \"mesh\"\n\nexport function DHRobot({\n  rapidlyChangingMotionState,\n  dhParameters,\n  ...props\n}: DHRobotProps) {\n  // reused in every update\n  const accumulatedMatrix = new Matrix4()\n\n  // Store direct references to avoid searching by name\n  const lineRefs = useRef<any[]>([])\n  const meshRefs = useRef<(THREE.Mesh | null)[]>([])\n\n  // Initialize refs array when dhParameters change\n  React.useEffect(() => {\n    lineRefs.current = new Array(dhParameters.length).fill(null)\n    meshRefs.current = new Array(dhParameters.length).fill(null)\n  }, [dhParameters.length])\n\n  // Updates accumulatedMatrix with every execution\n  // Reset the matrix to identity if you start a new position update\n  function getLinePoints(\n    dhParameter: DHParameter,\n    jointRotation: number,\n  ): {\n    a: THREE.Vector3\n    b: THREE.Vector3\n  } {\n    const position = new Vector3()\n    const quaternion = new Quaternion()\n    const scale = new Vector3()\n    accumulatedMatrix.decompose(position, quaternion, scale)\n    const prevPosition = position.clone() // Update the previous position\n\n    const matrix = new Matrix4()\n      .makeRotationY(\n        dhParameter.theta! +\n          jointRotation * (dhParameter.reverse_rotation_direction ? -1 : 1),\n      ) // Rotate around Z\n      .multiply(new Matrix4().makeTranslation(0, dhParameter.d! / 1000, 0)) // Translate along Z\n      .multiply(new Matrix4().makeTranslation(dhParameter.a! / 1000, 0, 0)) // Translate along X\n      .multiply(new Matrix4().makeRotationX(dhParameter.alpha!)) // Rotate around X\n\n    // Accumulate transformations\n    accumulatedMatrix.multiply(matrix)\n    accumulatedMatrix.decompose(position, quaternion, scale)\n    return { a: prevPosition, b: position }\n  }\n\n  function setJointLineRotation(\n    jointIndex: number,\n    line: any, // Use any for drei Line component\n    mesh: THREE.Mesh,\n    jointValue: number,\n  ) {\n    if (!dhParameters) {\n      return\n    }\n\n    const dh_parameter = dhParameters[jointIndex]\n    if (!dh_parameter) {\n      return\n    }\n\n    const { a, b } = getLinePoints(dh_parameter, jointValue)\n    const lineGeometry = line.geometry as LineGeometry\n    lineGeometry.setPositions([a.toArray(), b.toArray()].flat())\n\n    mesh.position.set(b.x, b.y, b.z)\n  }\n\n  function setRotation(joints: THREE.Object3D[], jointValues: number[]) {\n    accumulatedMatrix.identity()\n\n    // Use direct refs instead of searching by name\n    for (\n      let jointIndex = 0;\n      jointIndex < Math.min(joints.length, jointValues.length);\n      jointIndex++\n    ) {\n      const line = lineRefs.current[jointIndex]\n      const mesh = meshRefs.current[jointIndex]\n\n      if (line && mesh) {\n        setJointLineRotation(jointIndex, line, mesh, jointValues[jointIndex]!)\n      }\n    }\n  }\n\n  return (\n    <>\n      <RobotAnimator\n        rapidlyChangingMotionState={rapidlyChangingMotionState}\n        dhParameters={dhParameters}\n        onRotationChanged={setRotation}\n      >\n        <group {...props} name=\"Scene\">\n          <mesh>\n            <sphereGeometry args={[0.01, 32, 32]} />\n            <meshStandardMaterial color={\"black\"} depthTest={true} />\n          </mesh>\n          {dhParameters!.map((param, index) => {\n            const { a, b } = getLinePoints(\n              param,\n              rapidlyChangingMotionState.state.joint_position.joints[index] ??\n                0,\n            )\n            const jointName = `dhrobot_J0${index}`\n            return (\n              <group name={jointName} key={jointName}>\n                <Line\n                  ref={(ref) => {\n                    lineRefs.current[index] = ref\n                  }}\n                  name={CHILD_LINE}\n                  points={[a, b]}\n                  color={\"white\"}\n                  lineWidth={5}\n                />\n                <mesh\n                  ref={(ref) => {\n                    meshRefs.current[index] = ref\n                  }}\n                  name={CHILD_MESH}\n                  key={\"mesh_\" + index}\n                  position={b}\n                >\n                  <sphereGeometry args={[0.01, 32, 32]} />\n                  <meshStandardMaterial color={\"black\"} depthTest={true} />\n                </mesh>\n              </group>\n            )\n          })}\n        </group>\n      </RobotAnimator>\n    </>\n  )\n}\n","\"use client\"\nimport { useEffect } from \"react\"\n\nconst defaultWarn = console.warn\n\nexport default function ConsoleFilter() {\n  useEffect(() => {\n    console.warn = (data) => {\n      // This message is caused by a bug from useSpring in combination with Canvas \"demand\" frameloop.\n      // For now we can only suppress this warning there are no sideeffects yet\n      // See https://github.com/pmndrs/react-spring/issues/1586#issuecomment-915051856\n      if (\n        data ===\n        \"Cannot call the manual advancement of rafz whilst frameLoop is not set as demand\"\n      ) {\n        return\n      }\n\n      defaultWarn(data)\n    }\n  }, [])\n\n  return <></>\n}\n","import { useGLTF } from \"@react-three/drei\"\nimport type { ThreeElements } from \"@react-three/fiber\"\nimport React, { useCallback } from \"react\"\nimport type { Group, Mesh } from \"three\"\nimport { type Object3D } from \"three\"\nimport { isFlange, parseRobotModel } from \"./robotModelLogic\"\n\nexport type RobotModelProps = {\n  modelURL: string\n  /**\n   * Called after a robot model has been loaded and\n   * rendered into the threejs scene\n   */\n  postModelRender?: () => void\n  flangeRef?: React.Ref<Group>\n} & ThreeElements[\"group\"]\n\nfunction isMesh(node: Object3D): node is Mesh {\n  return node.type === \"Mesh\"\n}\n\nexport function GenericRobot({\n  modelURL,\n  flangeRef,\n  postModelRender,\n  ...props\n}: RobotModelProps) {\n  const { gltf } = parseRobotModel(\n    useGLTF(modelURL),\n    modelURL.split(\"/\").pop() || modelURL,\n  )\n\n  const groupRef: React.RefCallback<Group> = useCallback(\n    (group) => {\n      if (group && postModelRender) {\n        postModelRender()\n      }\n    },\n    [modelURL],\n  )\n\n  function renderNode(node: Object3D): React.ReactNode {\n    if (isMesh(node)) {\n      return (\n        <mesh\n          name={node.name}\n          key={node.uuid}\n          geometry={node.geometry}\n          material={node.material}\n          position={node.position}\n          rotation={node.rotation}\n        />\n      )\n    } else {\n      return (\n        <group\n          name={node.name}\n          key={node.uuid}\n          position={node.position}\n          rotation={node.rotation}\n          ref={isFlange(node) ? flangeRef : undefined}\n        >\n          {node.children.map(renderNode)}\n        </group>\n      )\n    }\n  }\n\n  return (\n    <group {...props} dispose={null} ref={groupRef}>\n      {renderNode(gltf.scene)}\n    </group>\n  )\n}\n","import * as THREE from \"three\"\n\nexport const applyGhostStyle = (robot: THREE.Group, color: string) => {\n  if (robot.userData.isGhost) return\n\n  robot.traverse((obj) => {\n    if (obj instanceof THREE.Mesh) {\n      if (obj.material instanceof THREE.Material) {\n        obj.material.colorWrite = false\n      }\n\n      // Create a clone of the mesh\n      const depth = obj.clone()\n      const ghost = obj.clone()\n\n      depth.material = new THREE.MeshStandardMaterial({\n        depthTest: true,\n        depthWrite: true,\n        colorWrite: false,\n        polygonOffset: true,\n        polygonOffsetFactor: -1,\n        side: THREE.DoubleSide,\n      })\n      depth.userData.isGhost = true\n\n      // Set the material for the ghost mesh\n      ghost.material = new THREE.MeshStandardMaterial({\n        color: color,\n        opacity: 0.3,\n        depthTest: true,\n        depthWrite: false,\n        transparent: true,\n        polygonOffset: true,\n        polygonOffsetFactor: -2,\n        side: THREE.DoubleSide,\n      })\n      ghost.userData.isGhost = true\n\n      if (obj.parent) {\n        obj.parent.add(depth)\n        obj.parent.add(ghost)\n      }\n    }\n  })\n\n  robot.userData.isGhost = true\n}\n\nexport const removeGhostStyle = (robot: THREE.Group) => {\n  if (!robot.userData.isGhost) return\n\n  const objectsToRemove: THREE.Object3D[] = []\n\n  robot.traverse((obj) => {\n    if (obj instanceof THREE.Mesh) {\n      if (obj.userData?.isGhost) {\n        objectsToRemove.push(obj)\n      } else if (obj.material instanceof THREE.Material) {\n        obj.material.colorWrite = true\n      }\n    }\n  })\n\n  objectsToRemove.forEach((obj) => {\n    if (obj.parent) {\n      obj.parent.remove(obj)\n    }\n  })\n\n  robot.userData.isGhost = false\n}\n","import type { ThreeElements } from \"@react-three/fiber\"\nimport type {\n  DHParameter,\n  MotionGroupStateResponse,\n} from \"@wandelbots/nova-api/v1\"\nimport { Suspense, useCallback, useEffect, useState } from \"react\"\nimport { DHRobot } from \"./DHRobot\"\n\nimport { ErrorBoundary } from \"react-error-boundary\"\nimport type * as THREE from \"three\"\nimport { externalizeComponent } from \"../../externalizeComponent\"\nimport ConsoleFilter from \"../ConsoleFilter\"\nimport { GenericRobot } from \"./GenericRobot\"\nimport RobotAnimator from \"./RobotAnimator\"\nimport { applyGhostStyle, removeGhostStyle } from \"./ghostStyle\"\nimport { defaultGetModel } from \"./robotModelLogic\"\n\nexport type DHRobotProps = {\n  rapidlyChangingMotionState: MotionGroupStateResponse\n  dhParameters: Array<DHParameter>\n} & ThreeElements[\"group\"]\n\nexport type SupportedRobotProps = {\n  rapidlyChangingMotionState: MotionGroupStateResponse\n  modelFromController: string\n  dhParameters: DHParameter[]\n  flangeRef?: React.Ref<THREE.Group>\n  getModel?: (modelFromController: string) => string\n  postModelRender?: () => void\n  transparentColor?: string\n} & ThreeElements[\"group\"]\n\nexport const SupportedRobot = externalizeComponent(\n  ({\n    rapidlyChangingMotionState,\n    modelFromController,\n    dhParameters,\n    getModel = defaultGetModel,\n    flangeRef,\n    postModelRender,\n    transparentColor,\n    ...props\n  }: SupportedRobotProps) => {\n    const [robotGroup, setRobotGroup] = useState<THREE.Group | null>(null)\n\n    const setRobotRef = useCallback((instance: THREE.Group | null) => {\n      setRobotGroup(instance)\n    }, [])\n\n    useEffect(() => {\n      if (!robotGroup) return\n\n      if (transparentColor) {\n        applyGhostStyle(robotGroup, transparentColor)\n      } else {\n        removeGhostStyle(robotGroup)\n      }\n    }, [robotGroup, transparentColor])\n\n    const dhrobot = (\n      <DHRobot\n        rapidlyChangingMotionState={rapidlyChangingMotionState}\n        dhParameters={dhParameters}\n        {...props}\n      />\n    )\n\n    return (\n      <ErrorBoundary\n        fallback={dhrobot}\n        onError={(err) => {\n          // Missing model; show the fallback for now\n          console.error(err)\n        }}\n      >\n        <Suspense fallback={dhrobot}>\n          <group ref={setRobotRef}>\n            <RobotAnimator\n              rapidlyChangingMotionState={rapidlyChangingMotionState}\n              dhParameters={dhParameters}\n            >\n              <GenericRobot\n                modelURL={getModel(modelFromController)}\n                postModelRender={postModelRender}\n                flangeRef={flangeRef}\n                {...props}\n              />\n            </RobotAnimator>\n          </group>\n        </Suspense>\n        <ConsoleFilter />\n      </ErrorBoundary>\n    )\n  },\n)\n","import type { ThreeElements } from \"@react-three/fiber\"\n\nimport type { ConnectedMotionGroup } from \"@wandelbots/nova-js/v1\"\nimport type { Group } from \"three\"\nimport { defaultGetModel } from \"./robotModelLogic\"\nimport { SupportedRobot } from \"./SupportedRobot\"\n\nexport type RobotProps = {\n  connectedMotionGroup: ConnectedMotionGroup\n  getModel?: (modelFromController: string) => string\n  flangeRef?: React.Ref<Group>\n  transparentColor?: string\n  postModelRender?: () => void\n} & ThreeElements[\"group\"]\n\n/**\n * The Robot component is a wrapper around the SupportedRobot component\n * for usage with @wandelbots/nova-js ConnectedMotionGroup object.\n *\n * @param {RobotProps} props - The properties for the Robot component.\n * @param {ConnectedMotionGroup} props.connectedMotionGroup - The connected motion group containing motion state and parameters.\n * @param {Function} [props.getModel=defaultGetModel] - Optional function to get the model URL. Defaults to defaultGetModel.\n * @param {Object} props - Additional properties passed to the SupportedRobot component.\n *\n * @returns {JSX.Element} The rendered SupportedRobot component.\n */\nexport function Robot({\n  connectedMotionGroup,\n  getModel = defaultGetModel,\n  flangeRef,\n  transparentColor,\n  postModelRender,\n  ...props\n}: RobotProps) {\n  if (!connectedMotionGroup.dhParameters) {\n    return null\n  }\n\n  return (\n    <SupportedRobot\n      rapidlyChangingMotionState={\n        connectedMotionGroup.rapidlyChangingMotionState\n      }\n      modelFromController={connectedMotionGroup.modelFromController || \"\"}\n      dhParameters={connectedMotionGroup.dhParameters}\n      getModel={getModel}\n      flangeRef={flangeRef}\n      transparentColor={transparentColor}\n      postModelRender={postModelRender}\n      {...props}\n    />\n  )\n}\n","import { Box, Button, Card, Divider, Typography, useTheme } from \"@mui/material\"\nimport { Bounds } from \"@react-three/drei\"\nimport { Canvas } from \"@react-three/fiber\"\nimport type {\n  ConnectedMotionGroup,\n  RobotControllerStateOperationModeEnum,\n  RobotControllerStateSafetyStateEnum,\n} from \"@wandelbots/nova-js/v1\"\nimport { observer } from \"mobx-react-lite\"\nimport { useCallback, useEffect, useRef, useState } from \"react\"\nimport { useTranslation } from \"react-i18next\"\nimport type { Group } from \"three\"\nimport { externalizeComponent } from \"../externalizeComponent\"\nimport { PresetEnvironment } from \"./3d-viewport/PresetEnvironment\"\nimport type { ProgramState } from \"./ProgramControl\"\nimport { ProgramStateIndicator } from \"./ProgramStateIndicator\"\nimport { Robot } from \"./robots/Robot\"\n\nexport interface RobotCardProps {\n  /** Name of the robot displayed at the top */\n  robotName: string\n  /** Current program state */\n  programState: ProgramState\n  /** Current safety state of the robot controller */\n  safetyState: RobotControllerStateSafetyStateEnum\n  /** Current operation mode of the robot controller */\n  operationMode: RobotControllerStateOperationModeEnum\n  /** Whether the \"Drive to Home\" button should be enabled */\n  driveToHomeEnabled?: boolean\n  /** Callback fired when \"Drive to Home\" button is pressed */\n  onDriveToHomePress?: () => void\n  /** Callback fired when \"Drive to Home\" button is released */\n  onDriveToHomeRelease?: () => void\n  /**\n   * Callback fired when \"Drive to Home\" button is pressed, with the default home position.\n   * If provided, this will be called instead of onDriveToHomePress, providing the recommended\n   * home position joint configuration based on the robot manufacturer.\n   */\n  onDriveToHomePressWithConfig?: (homePosition: number[]) => void\n  /**\n   * Callback fired when \"Drive to Home\" button is released after using onDriveToHomePressWithConfig.\n   * If provided, this will be called instead of onDriveToHomeRelease.\n   */\n  onDriveToHomeReleaseWithConfig?: () => void\n  /**\n   * Custom default joint configuration to use if manufacturer-based defaults are not available.\n   * Joint values should be in radians.\n   */\n  defaultJointConfig?: number[]\n  /** Connected motion group for the robot */\n  connectedMotionGroup: ConnectedMotionGroup\n  /** Custom robot component to render (optional, defaults to Robot) */\n  robotComponent?: React.ComponentType<{\n    connectedMotionGroup: ConnectedMotionGroup\n    flangeRef?: React.Ref<Group>\n    postModelRender?: () => void\n    transparentColor?: string\n    getModel?: (modelFromController: string) => string\n  }>\n  /** Custom component to render in the content area (optional) */\n  customContentComponent?: React.ComponentType<Record<string, unknown>>\n  /** Additional CSS class name */\n  className?: string\n}\n\n/**\n * A responsive card component that displays a 3D robot with states and controls.\n * The card automatically adapts to its container's size and aspect ratio.\n *\n * Features:\n * - Fully responsive Material-UI Card that adapts to container dimensions\n * - Automatic layout switching based on aspect ratio:\n *   - Portrait mode: Vertical layout with robot in center\n *   - Landscape mode: Horizontal layout with robot on left, content on right (left-aligned)\n * - Responsive 3D robot rendering:\n *   - Scales dynamically with container size\n *   - Hides at very small sizes to preserve usability\n *   - Adaptive margin based on available space\n * - Smart spacing and padding that reduces at smaller sizes\n * - Minimum size constraints for usability while maximizing content density\n * - Robot name displayed in Typography h6 at top-left\n * - Program state indicator below the name\n * - Auto-fitting 3D robot model that scales with container size\n * - Customizable content area for displaying custom React components\n * - Transparent gray divider line\n * - \"Drive to Home\" button with press-and-hold functionality\n * - Localization support via react-i18next\n * - Material-UI theming integration\n *\n * Usage with custom content:\n * ```tsx\n * // Example custom timer component\n * const CustomTimer = () => (\n *   <Box>\n *     <Typography variant=\"body1\" sx={{ color: \"text.secondary\" }}>\n *       Runtime\n *     </Typography>\n *     <Typography variant=\"h6\">05:23</Typography>\n *   </Box>\n * )\n *\n * <RobotCard\n *   robotName=\"UR5e Robot\"\n *   programState={ProgramState.RUNNING}\n *   customContentComponent={CustomTimer}\n *   // ... other props\n * />\n * ```\n */\nexport const RobotCard = externalizeComponent(\n  observer(\n    ({\n      robotName,\n      programState,\n      safetyState,\n      operationMode,\n      driveToHomeEnabled = false,\n      onDriveToHomePress,\n      onDriveToHomeRelease,\n      connectedMotionGroup,\n      robotComponent: RobotComponent = Robot,\n      customContentComponent: CustomContentComponent,\n      className,\n    }: RobotCardProps) => {\n      const theme = useTheme()\n      const { t } = useTranslation()\n      const [isDriveToHomePressed, setIsDriveToHomePressed] = useState(false)\n      const driveButtonRef = useRef<HTMLButtonElement>(null)\n      const cardRef = useRef<HTMLDivElement>(null)\n      const [isLandscape, setIsLandscape] = useState(false)\n      const [cardSize, setCardSize] = useState<{\n        width: number\n        height: number\n      }>({ width: 400, height: 600 })\n      const [modelRenderTrigger, setModelRenderTrigger] = useState(0)\n\n      // Hook to detect aspect ratio and size changes\n      useEffect(() => {\n        const checkDimensions = () => {\n          if (cardRef.current) {\n            const { offsetWidth, offsetHeight } = cardRef.current\n            setIsLandscape(offsetWidth > offsetHeight)\n            setCardSize({ width: offsetWidth, height: offsetHeight })\n          }\n        }\n\n        // Initial check\n        checkDimensions()\n\n        // Set up ResizeObserver to watch for size changes\n        const resizeObserver = new ResizeObserver(checkDimensions)\n        if (cardRef.current) {\n          resizeObserver.observe(cardRef.current)\n        }\n\n        return () => {\n          resizeObserver.disconnect()\n        }\n      }, [])\n\n      const handleModelRender = useCallback(() => {\n        // Trigger bounds refresh when model renders\n        setModelRenderTrigger((prev) => prev + 1)\n      }, [])\n\n      const handleDriveToHomeMouseDown = useCallback(() => {\n        if (!driveToHomeEnabled || !onDriveToHomePress) return\n        setIsDriveToHomePressed(true)\n        onDriveToHomePress()\n      }, [driveToHomeEnabled, onDriveToHomePress])\n\n      const handleDriveToHomeMouseUp = useCallback(() => {\n        if (!driveToHomeEnabled || !onDriveToHomeRelease) return\n        setIsDriveToHomePressed(false)\n        onDriveToHomeRelease()\n      }, [driveToHomeEnabled, onDriveToHomeRelease])\n\n      const handleDriveToHomeMouseLeave = useCallback(() => {\n        if (isDriveToHomePressed && onDriveToHomeRelease) {\n          setIsDriveToHomePressed(false)\n          onDriveToHomeRelease()\n        }\n      }, [isDriveToHomePressed, onDriveToHomeRelease])\n\n      // Determine if robot should be hidden at small sizes to save space\n      const shouldHideRobot = isLandscape\n        ? cardSize.width < 350\n        : cardSize.height < 200 // Hide robot at height < 200px in portrait\n\n      // Determine if custom content should be hidden when height is too low\n      // Custom content should be hidden BEFORE the robot (at higher threshold)\n      const shouldHideCustomContent = isLandscape\n        ? cardSize.height < 310 // Landscape: hide custom content at height < 310px\n        : cardSize.height < 450 // Portrait: hide custom content at height < 450px\n\n      return (\n        <Card\n          ref={cardRef}\n          className={className}\n          sx={{\n            width: \"100%\",\n            height: \"100%\",\n            display: \"flex\",\n            flexDirection: isLandscape ? \"row\" : \"column\",\n            position: \"relative\",\n            overflow: \"hidden\",\n            minWidth: { xs: 180, sm: 220, md: 250 },\n            minHeight: isLandscape\n              ? { xs: 200, sm: 240, md: 260 } // Allow runtime hiding at < 283px\n              : { xs: 150, sm: 180, md: 220 }, // Allow progressive hiding in portrait mode\n            border: `1px solid ${theme.palette.divider}`,\n            borderRadius: \"18px\",\n            boxShadow: \"none\",\n            backgroundColor:\n              theme.palette.backgroundPaperElevation?.[8] || \"#2A2A3F\",\n            backgroundImage: \"none\", // Override any gradient from elevation\n          }}\n        >\n          {isLandscape ? (\n            <>\n              {/* Landscape Layout: Robot on left, content on right */}\n              <Box\n                sx={{\n                  flex: \"0 0 50%\",\n                  position: \"relative\",\n                  height: \"100%\",\n                  minHeight: \"100%\",\n                  maxHeight: \"100%\",\n                  borderRadius: 1,\n                  m: { xs: 1.5, sm: 2, md: 3 },\n                  mr: { xs: 0.75, sm: 1, md: 1.5 },\n                  overflow: \"hidden\", // Prevent content from affecting container size\n                  display: shouldHideRobot ? \"none\" : \"block\",\n                }}\n              >\n                {!shouldHideRobot && (\n                  <Canvas\n                    orthographic\n                    camera={{\n                      position: [3, 2, 3],\n                      zoom: 1,\n                    }}\n                    shadows\n                    frameloop=\"demand\"\n                    style={{\n                      borderRadius: theme.shape.borderRadius,\n                      width: \"100%\",\n                      height: \"100%\",\n                      background: \"transparent\",\n                      position: \"absolute\",\n                      top: 0,\n                      left: 0,\n                    }}\n                    dpr={[1, 2]}\n                    gl={{ alpha: true, antialias: true }}\n                  >\n                    <PresetEnvironment />\n                    <Bounds fit observe margin={1} maxDuration={1}>\n                      <RobotComponent\n                        connectedMotionGroup={connectedMotionGroup}\n                        postModelRender={handleModelRender}\n                      />\n                    </Bounds>\n                  </Canvas>\n                )}\n              </Box>\n\n              {/* Content container on right */}\n              <Box\n                sx={{\n                  flex: shouldHideRobot ? \"1\" : \"1\",\n                  display: \"flex\",\n                  flexDirection: \"column\",\n                  justifyContent: \"flex-start\",\n                  width: shouldHideRobot ? \"100%\" : \"50%\",\n                }}\n              >\n                {/* Header section with robot name and program state */}\n                <Box\n                  sx={{\n                    p: { xs: 1.5, sm: 2, md: 3 },\n                    pb: { xs: 1, sm: 1.5, md: 2 },\n                    textAlign: \"left\",\n                  }}\n                >\n                  <Typography variant=\"h6\" component=\"h2\" sx={{ mb: 1 }}>\n                    {robotName}\n                  </Typography>\n                  <ProgramStateIndicator\n                    programState={programState}\n                    safetyState={safetyState}\n                    operationMode={operationMode}\n                  />\n                </Box>\n\n                {/* Bottom section with custom content and button */}\n                <Box\n                  sx={{\n                    p: { xs: 1.5, sm: 2, md: 3 },\n                    pt: 0,\n                    flex: \"1\",\n                    display: \"flex\",\n                    flexDirection: \"column\",\n                    justifyContent: \"space-between\",\n                  }}\n                >\n                  {/* Custom content section - hidden if height is too low in landscape mode */}\n                  {!shouldHideCustomContent && CustomContentComponent && (\n                    <Box>\n                      <CustomContentComponent />\n\n                      {/* Divider */}\n                      <Divider\n                        sx={{\n                          mt: 1,\n                          mb: 0,\n                          borderColor: theme.palette.divider,\n                          opacity: 0.5,\n                        }}\n                      />\n                    </Box>\n                  )}\n\n                  <Box\n                    sx={{\n                      mt:\n                        !shouldHideCustomContent && CustomContentComponent\n                          ? \"auto\"\n                          : 0,\n                    }}\n                  >\n                    {/* Drive to Home button with some space */}\n                    <Box\n                      sx={{\n                        display: \"flex\",\n                        justifyContent: \"flex-start\",\n                        mt: { xs: 1, sm: 1.5, md: 2 },\n                        mb: { xs: 0.5, sm: 0.75, md: 1 },\n                      }}\n                    >\n                      <Button\n                        ref={driveButtonRef}\n                        variant=\"contained\"\n                        color=\"secondary\"\n                        size=\"small\"\n                        disabled={!driveToHomeEnabled}\n                        onMouseDown={handleDriveToHomeMouseDown}\n                        onMouseUp={handleDriveToHomeMouseUp}\n                        onMouseLeave={handleDriveToHomeMouseLeave}\n                        onTouchStart={handleDriveToHomeMouseDown}\n                        onTouchEnd={handleDriveToHomeMouseUp}\n                        sx={{\n                          textTransform: \"none\",\n                          px: 1.5,\n                          py: 0.5,\n                        }}\n                      >\n                        {t(\"RobotCard.DriveToHome.bt\")}\n                      </Button>\n                    </Box>\n                  </Box>\n                </Box>\n              </Box>\n            </>\n          ) : (\n            <>\n              {/* Portrait Layout: Header, Robot, Footer */}\n              <Box\n                sx={{\n                  p: 3,\n                  height: \"100%\",\n                  display: \"flex\",\n                  flexDirection: \"column\",\n                }}\n              >\n                {/* Header section with robot name and program state */}\n                <Box>\n                  <Typography variant=\"h6\" component=\"h2\" sx={{ mb: 1 }}>\n                    {robotName}\n                  </Typography>\n                  <ProgramStateIndicator\n                    programState={programState}\n                    safetyState={safetyState}\n                    operationMode={operationMode}\n                  />\n                </Box>\n\n                {/* 3D Robot viewport in center */}\n                <Box\n                  sx={{\n                    flex: shouldHideRobot ? 0 : 1,\n                    position: \"relative\",\n                    minHeight: shouldHideRobot\n                      ? 0\n                      : { xs: 120, sm: 150, md: 200 },\n                    height: shouldHideRobot ? 0 : \"auto\",\n                    borderRadius: 1,\n                    overflow: \"hidden\",\n                    display: shouldHideRobot ? \"none\" : \"block\",\n                  }}\n                >\n                  {!shouldHideRobot && (\n                    <Canvas\n                      orthographic\n                      camera={{\n                        position: [3, 2, 3],\n                        zoom: 1,\n                      }}\n                      shadows\n                      frameloop=\"demand\"\n                      style={{\n                        borderRadius: theme.shape.borderRadius,\n                        width: \"100%\",\n                        height: \"100%\",\n                        background: \"transparent\",\n                        position: \"absolute\",\n                      }}\n                      dpr={[1, 2]}\n                      gl={{ alpha: true, antialias: true }}\n                    >\n                      <PresetEnvironment />\n                      <Bounds fit clip observe margin={1} maxDuration={1}>\n                        <RobotComponent\n                          connectedMotionGroup={connectedMotionGroup}\n                          postModelRender={handleModelRender}\n                        />\n                      </Bounds>\n                    </Canvas>\n                  )}\n                </Box>\n\n                {/* Bottom section with custom content and button */}\n                <Box>\n                  {/* Custom content section - hidden if height is too low */}\n                  {!shouldHideCustomContent && CustomContentComponent && (\n                    <>\n                      <CustomContentComponent />\n\n                      {/* Divider */}\n                      <Divider\n                        sx={{\n                          mt: 1,\n                          mb: 0,\n                          borderColor: theme.palette.divider,\n                          opacity: 0.5,\n                        }}\n                      />\n                    </>\n                  )}\n\n                  {/* Drive to Home button with some space */}\n                  <Box\n                    sx={{\n                      display: \"flex\",\n                      justifyContent: \"flex-start\",\n                      mt:\n                        !shouldHideCustomContent && CustomContentComponent\n                          ? { xs: 1, sm: 2, md: 5 }\n                          : { xs: 0.5, sm: 1, md: 2 },\n                      mb: { xs: 0.5, sm: 0.75, md: 1 },\n                    }}\n                  >\n                    <Button\n                      ref={driveButtonRef}\n                      variant=\"contained\"\n                      color=\"secondary\"\n                      size=\"small\"\n                      disabled={!driveToHomeEnabled}\n                      onMouseDown={handleDriveToHomeMouseDown}\n                      onMouseUp={handleDriveToHomeMouseUp}\n                      onMouseLeave={handleDriveToHomeMouseLeave}\n                      onTouchStart={handleDriveToHomeMouseDown}\n                      onTouchEnd={handleDriveToHomeMouseUp}\n                      sx={{\n                        textTransform: \"none\",\n                        px: 1.5,\n                        py: 0.5,\n                      }}\n                    >\n                      {t(\"RobotCard.DriveToHome.bt\")}\n                    </Button>\n                  </Box>\n                </Box>\n              </Box>\n            </>\n          )}\n        </Card>\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: \"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","export type AxisConfig = number[]\n\nexport const defaultAxisConfig: AxisConfig = Array(6).fill(2 * Math.PI)\n","import { Manufacturer } from \"@wandelbots/nova-api/v1\"\n\n/**\n * Default home configs for different robot manufacturers.\n * These joint configurations represent safe home configs for each manufacturer's robots.\n * All angles are in radians.\n */\nexport const MANUFACTURER_HOME_CONFIGS: Record<Manufacturer, number[]> = {\n  [Manufacturer.Abb]: [0.0, 0.0, 0.0, 0.0, Math.PI / 2, 0.0, 0.0],\n  [Manufacturer.Fanuc]: [0.0, 0.0, 0.0, 0.0, -Math.PI / 2, 0.0, 0.0],\n  [Manufacturer.Yaskawa]: [0.0, 0.0, 0.0, 0.0, -Math.PI / 2, 0.0, 0.0],\n  [Manufacturer.Kuka]: [\n    0.0,\n    -Math.PI / 2,\n    Math.PI / 2,\n    0.0,\n    Math.PI / 2,\n    0.0,\n    0.0,\n  ],\n  [Manufacturer.Universalrobots]: [\n    0.0,\n    -Math.PI / 2,\n    -Math.PI / 2,\n    -Math.PI / 2,\n    Math.PI / 2,\n    -Math.PI / 2,\n    0.0,\n  ],\n}\n\n/**\n * Extracts manufacturer from modelFromController string.\n * @param modelFromController - String in format \"Manufacturer_ModelName\"\n * @returns Manufacturer enum value or null if not recognized\n */\nexport function extractManufacturer(\n  modelFromController: string,\n): Manufacturer | null {\n  const [manufacturerString] = modelFromController.split(\"_\")\n\n  // Handle the mapping from string to enum\n  switch (manufacturerString) {\n    case \"ABB\":\n      return Manufacturer.Abb\n    case \"FANUC\":\n      return Manufacturer.Fanuc\n    case \"YASKAWA\":\n      return Manufacturer.Yaskawa\n    case \"KUKA\":\n      return Manufacturer.Kuka\n    case \"UniversalRobots\":\n      return Manufacturer.Universalrobots\n    default:\n      return null\n  }\n}\n\n/**\n * Gets the default home config for a robot based on its model identifier.\n * @param modelFromController - String in format \"Manufacturer_ModelName\"\n * @param defaultJointConfig - Optional custom default configuration to use if manufacturer not found\n * @returns Array of joint positions in radians, or null if no configuration available\n */\nexport function getDefaultHomeConfig(\n  modelFromController: string,\n  defaultJointConfig?: number[],\n): number[] | null {\n  const manufacturer = extractManufacturer(modelFromController)\n\n  if (manufacturer && manufacturer in MANUFACTURER_HOME_CONFIGS) {\n    return MANUFACTURER_HOME_CONFIGS[manufacturer]\n  }\n\n  return defaultJointConfig || null\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 { 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 { t } = useTranslation()\n\n    if (isVirtual) {\n      return (\n        <IndicatorWithExplanation\n          id=\"motion-group-virtual\"\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\"\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 { RobotControllerStateOperationModeEnum } from \"@wandelbots/nova-js/v1\"\nimport { observer } from \"mobx-react-lite\"\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: RobotControllerStateOperationModeEnum\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\n    switch (operationMode) {\n      case \"OPERATION_MODE_AUTO\":\n        return (\n          <IndicatorWithExplanation\n            id=\"operation-mode-auto\"\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\"\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\"\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 { RobotControllerStateSafetyStateEnum } from \"@wandelbots/nova-js/v1\"\nimport { observer } from \"mobx-react-lite\"\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: RobotControllerStateSafetyStateEnum\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\n    switch (safetyState) {\n      // Normal state, robot can move\n      case \"SAFETY_STATE_NORMAL\":\n        return (\n          <IndicatorWithExplanation\n            id=\"safety-state-normal\"\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\"\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\"\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\"\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\"\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 {\n  RobotControllerStateOperationModeEnum,\n  RobotControllerStateSafetyStateEnum,\n} from \"@wandelbots/nova-js/v1\"\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: RobotControllerStateOperationModeEnum\n  safetyState: RobotControllerStateSafetyStateEnum\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","export default {\n  $schema:\n    \"https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json\",\n  name: \"wandelscript\",\n  patterns: [\n    {\n      include: \"#keywords\",\n    },\n    {\n      include: \"#strings\",\n    },\n    {\n      include: \"#comments\",\n    },\n    {\n      include: \"#functions\",\n    },\n  ],\n  repository: {\n    keywords: {\n      patterns: [\n        {\n          name: \"keyword.control.flow.wandelscript\",\n          match:\n            \"\\\\b(move|via|to|interrupt|def|False|True|for|if|else|elif|while|return|switch|activate|deactivate|print|and|or|not)\\\\b\",\n        },\n      ],\n    },\n    strings: {\n      name: \"string.quoted.double.wandelscript\",\n      begin: '\"',\n      end: '\"',\n      patterns: [\n        {\n          name: \"constant.character.escape.wandelscript\",\n          match: \"\\\\\\\\.\",\n        },\n      ],\n    },\n    comments: {\n      patterns: [\n        {\n          begin: \"#\",\n          beginCaptures: {\n            \"0\": { name: \"punctuation.definition.comment.wandelscript\" },\n          },\n          end: \"$\",\n          name: \"comment.line.number-sign.wandelscript\",\n        },\n      ],\n    },\n    functions: {\n      patterns: [\n        {\n          match: \"[a-zA-Z_-]+\\\\(\",\n          name: \"entity.name.function.wandelscript\",\n        },\n      ],\n    },\n  },\n  scopeName: \"source.wandelscript\",\n}\n","import type { Monaco } from \"@monaco-editor/react\"\nimport { lazy, Suspense, useState } from \"react\"\nimport type {\n  BundledLanguage,\n  BundledTheme,\n  HighlighterGeneric,\n  ShikiInternal,\n} from \"shiki\"\n\nimport { useTheme } from \"@mui/material\"\nimport type { editor } from \"monaco-editor\"\nimport { externalizeComponent } from \"../../externalizeComponent\"\nimport { LoadingCover } from \"../LoadingCover\"\nimport wandelscriptTextmateGrammar from \"./wandelscript.tmLanguage\"\n\ntype WandelscriptEditorProps = {\n  /** The current Wandelscript content of the code editor (controlled component) */\n  code?: string\n  /** What to do when the user edits the code */\n  onChange?: (\n    code: string | undefined,\n    ev: editor.IModelContentChangedEvent,\n  ) => void\n  /** Options for monaco editor */\n  monacoOptions?: editor.IEditorOptions\n  /** Callback to further configure monaco on startup if needed */\n  monacoSetup?: (monaco: Monaco) => void\n}\n\nconst Editor = lazy(() => import(\"@monaco-editor/react\"))\n\nlet preparedShiki: {\n  shiki: HighlighterGeneric<BundledLanguage, BundledTheme>\n  shikiToMonaco: (\n    shiki: HighlighterGeneric<BundledLanguage, BundledTheme>,\n    monaco: Monaco,\n  ) => void\n} | null = null\n\nasync function getShiki() {\n  if (!preparedShiki) {\n    const [{ createHighlighter }, { shikiToMonaco }] = await Promise.all([\n      import(\"shiki\"),\n      import(\"@shikijs/monaco\"),\n    ])\n\n    const shiki = await createHighlighter({\n      // Our textmate grammar doesn't quite conform to the expected type\n      // here; I'm not sure what the missing properties mean exactly\n      langs: [wandelscriptTextmateGrammar as any],\n      themes: [\"dark-plus\", \"light-plus\"],\n    })\n\n    preparedShiki = {\n      shiki,\n      shikiToMonaco: shikiToMonaco as unknown as (\n        shiki: ShikiInternal<any, any>,\n        monaco: typeof import(\"monaco-editor\"),\n      ) => void,\n    }\n  }\n\n  return preparedShiki\n}\n\n/** A Monaco (VSCode-style) embedded code editor with Wandelscript syntax highlighting */\nexport const WandelscriptEditor = externalizeComponent(\n  (props: WandelscriptEditorProps) => {\n    const theme = useTheme()\n    const [activeShikiTheme, setActiveShikiTheme] =\n      useState<BundledTheme>(\"dark-plus\")\n    const targetShikiTheme =\n      theme.palette.mode === \"dark\" ? \"dark-plus\" : \"light-plus\"\n\n    async function setupEditor(monaco: Monaco) {\n      // Register and configure the Wandelscript language\n      monaco.languages.register({ id: \"wandelscript\" })\n\n      monaco.languages.setLanguageConfiguration(\"wandelscript\", {\n        comments: {\n          lineComment: \"#\",\n        },\n        brackets: [\n          [\"(\", \")\"],\n          [\"[\", \"]\"],\n        ],\n        autoClosingPairs: [\n          { open: \"[\", close: \"]\" },\n          { open: \"(\", close: \")\" },\n        ],\n        surroundingPairs: [\n          { open: \"[\", close: \"]\" },\n          { open: \"(\", close: \")\" },\n        ],\n      })\n\n      const { shiki, shikiToMonaco } = await getShiki()\n\n      // Monaco doesn't support TextMate grammar config directly, so we\n      // use Shiki as an intermediary\n      shikiToMonaco(shiki, monaco)\n\n      // Override the generated shiki theme to use shiki syntax highlighting\n      // but vscode colors\n      monaco.editor.defineTheme(\n        targetShikiTheme,\n        theme.componentsExt?.WandelscriptEditor?.monacoTheme ?? {\n          base: theme.palette.mode === \"dark\" ? \"vs-dark\" : \"vs\",\n          inherit: true,\n          rules: [],\n          colors: {},\n        },\n      )\n\n      if (props.monacoSetup) {\n        props.monacoSetup(monaco)\n      }\n\n      setActiveShikiTheme(targetShikiTheme)\n    }\n\n    return (\n      <Suspense fallback={<LoadingCover />}>\n        <Editor\n          value={props.code}\n          onMount={(_editor, monaco) => {\n            setupEditor(monaco)\n          }}\n          onChange={props.onChange}\n          defaultLanguage=\"wandelscript\"\n          theme={activeShikiTheme}\n          options={{\n            minimap: { enabled: false },\n            wordWrap: \"on\",\n            automaticLayout: true,\n            ...props.monacoOptions,\n          }}\n        />\n      </Suspense>\n    )\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":["REACT_ELEMENT_TYPE","REACT_FRAGMENT_TYPE","jsxProd","type","config","maybeKey","key","propName","reactJsxRuntime_production","getComponentNameFromType","REACT_CLIENT_REFERENCE","REACT_PROFILER_TYPE","REACT_STRICT_MODE_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_ACTIVITY_TYPE","REACT_PORTAL_TYPE","REACT_CONTEXT_TYPE","REACT_CONSUMER_TYPE","REACT_FORWARD_REF_TYPE","innerType","REACT_MEMO_TYPE","REACT_LAZY_TYPE","testStringCoercion","value","checkKeyStringCoercion","JSCompiler_inline_result","JSCompiler_temp_const","JSCompiler_inline_result$jscomp$0","getTaskName","name","getOwner","dispatcher","ReactSharedInternals","UnknownOwner","hasValidKey","hasOwnProperty","getter","defineKeyPropWarningGetter","props","displayName","warnAboutAccessingKey","specialPropKeyWarningShown","elementRefGetterWithDeprecationWarning","componentName","didWarnAboutElementRef","ReactElement","self","source","owner","debugStack","debugTask","jsxDEVImpl","isStaticChildren","children","isArrayImpl","validateChildKeys","keys","k","didWarnAboutKeySpread","node","React","require$$0","createTask","callStackForError","unknownOwnerDebugStack","unknownOwnerDebugTask","reactJsxRuntime_development","trackActualOwner","jsxRuntimeModule","require$$1","colliderShapeToBufferGeometry","shape","ConvexGeometry","vertex","THREE","ColliderElement","collider","position","_a","rotation","_b","jsx","ColliderCollection","colliders","meshChildrenProvider","colliderKey","CollisionSceneRenderer","scene","PresetEnvironment","Environment","Lightformers","positions","jsxs","Fragment","Lightformer","x","i","areVerticesCoplanar","vertices","v0","v1","v2","vector1","vector2","normal","vi","vector","dotProduct","SafetyZonesRenderer","safetyZones","zone","index","geometries","geometry","v","coplanarityResult","newVertex","convexGeometry","error","TrajectoryRenderer","trajectory","points","point","Line","i18n","i18next","LanguageDetector","enJSON","deJSON","externalizeComponent","Component","NovaComponentsProvider","I18nextProvider","DropdownArrowIcon","SvgIcon","AppHeader","observer","appIcon","appName","apps","onAppSelect","disabled","sx","anchorEl","setAnchorEl","useState","isMenuOpen","handleMenuOpen","event","handleMenuClose","handleAppSelect","app","AppBar","Toolbar","Box","Typography","IconButton","theme","alpha","Backdrop","Menu","MenuItem","_extends","n","e","t","r","_objectWithoutPropertiesLoose","composeClasses","slots","getUtilityClass","classes","output","slotName","slot","buffer","start","f","o","clsx","formatMuiErrorMessage","code","args","url","arg","THEME_ID","murmur2","str","h","len","unitlessKeys","memoize","fn","cache","hyphenateRegex","animationRegex","isCustomProperty","property","isProcessableValue","processStyleName","styleName","processStyleValue","match","p1","p2","cursor","unitless","handleInterpolation","mergedProps","registered","interpolation","componentSelector","keyframes","serializedStyles","next","styles","createStringFromObject","asString","obj","string","_i","interpolated","labelPattern","serializeStyles","stringMode","strings","asTemplateStringsArr","templateStringsArr","identifierName","hashString","styled","tag","options","stylesFactory","emStyled","component","style","internal_mutateStyles","processor","wrapper","internal_serializeStyles","emSerializeStyles","REACT_VIEW_TRANSITION_TYPE","typeOf","object","$$typeof","reactIs_production","reactIs_development","reactIsModule","isPlainObject","item","prototype","deepClone","isValidElementType","deepmerge","target","sortBreakpointsValues","values","breakpointsAsArray","breakpoint1","breakpoint2","acc","createBreakpoints","breakpoints","unit","step","other","sortedValues","up","down","between","end","endIndex","only","not","keyIndex","sortContainerQueries","css","sorted","a","b","regex","isCqShorthand","breakpointKeys","getContainerQuery","shorthand","matches","_formatErrorMessage","containerQuery","containerName","cssContainerQueries","themeInput","toContainerQuery","mediaQuery","attachCq","result","containerQueries","responsivePropType","PropTypes","merge","defaultBreakpoints","defaultContainerQueries","handleBreakpoints","propValue","styleFromPropValue","themeBreakpoints","breakpoint","containerKey","mediaKey","cssKey","createEmptyBreakpointObject","breakpointsInput","breakpointStyleKey","removeUnusedBreakpoints","breakpointOutput","mergeBreakpointsInOrder","emptyBreakpoints","mergedOutput","prev","computeBreakpointsBase","breakpointValues","base","breakpointsKeys","resolveBreakpointValues","customBase","previous","capitalize","getPath","path","checkVars","val","getStyleValue","themeMapping","transform","propValueFinal","userValue","prop","cssProperty","themeKey","properties","directions","aliases","getCssProperties","direction","dir","marginKeys","paddingKeys","spacingKeys","createUnaryUnit","defaultValue","themeSpacing","abs","transformed","createUnarySpacing","getValue","transformer","getStyleFromPropValue","cssProperties","resolveCssProperty","margin","padding","createSpacing","spacingInput","spacing","argsInput","argument","compose","handlers","borderTransform","createBorderStyle","border","borderTop","borderRight","borderBottom","borderLeft","borderColor","borderTopColor","borderRightColor","borderBottomColor","borderLeftColor","outline","outlineColor","borderRadius","gap","columnGap","rowGap","gridColumn","gridRow","gridAutoFlow","gridAutoColumns","gridAutoRows","gridTemplateColumns","gridTemplateRows","gridTemplateAreas","gridArea","paletteTransform","color","bgcolor","backgroundColor","sizingTransform","width","maxWidth","_c","breakpointsValues","_e","_d","minWidth","height","maxHeight","minHeight","boxSizing","defaultSxConfig","objectsHaveSameKeys","objects","allKeys","union","callIfFn","maybeFn","unstable_createStyleFunctionSx","getThemeValue","styleFunctionSx","traverse","sxInput","sxObject","styleKey","applyStyles","selector","createTheme","paletteInput","shapeInput","muiTheme","isObjectEmpty","useTheme","defaultTheme","contextTheme","ThemeContext","systemDefaultTheme","useThemeWithoutDefault","splitProps","extendSxProp","inSx","systemProps","otherProps","finalSx","defaultGenerator","createClassNameGenerator","generate","generator","ClassNameGenerator","globalStateClasses","generateUtilityClass","globalStatePrefix","globalStateClass","generateUtilityClasses","getFunctionComponentName","fallback","getWrappedName","outerType","wrapperName","functionName","getDisplayName","ForwardRef","Memo","preprocessStyles","input","variants","variant","shouldForwardProp","defaultOverridesResolver","_props","attachTheme","themeId","processStyle","resolvedStyle","subStyle","rootStyle","otherStyles","processStyleVariants","results","mergedState","variantLoop","createStyled","rootShouldForwardProp","slotShouldForwardProp","styleAttachTheme","inputOptions","mutateStyles","componentSlot","inputSkipVariantsResolver","inputSkipSx","overridesResolver","lowercaseFirstLetter","skipVariantsResolver","skipSx","shouldForwardPropOption","isStringTag","defaultStyledResolver","styledEngineStyled","generateStyledLabel","transformStyle","serialized","muiStyledResolver","expressionsInput","expressionsHead","expressionsBody","expressionsTail","styleOverrides","resolvedStyleOverrides","slotKey","themeVariants","inputStrings","placeholdersHead","placeholdersTail","outputStrings","expressions","generateDisplayName","label","_","resolveProps","defaultProps","mergeClassNameAndStyle","defaultSlotProps","slotProps","slotPropName","getThemeProps","params","useThemeProps","useEnhancedEffect","clamp","min","max","clampWrapper","hexToRgb","re","colors","decomposeColor","marker","colorSpace","colorChannel","decomposedColor","idx","private_safeColorChannel","warning","recomposeColor","hslToRgb","s","l","rgb","getLuminance","getContrastRatio","foreground","background","lumA","lumB","private_safeAlpha","darken","coefficient","private_safeDarken","lighten","private_safeLighten","emphasize","private_safeEmphasize","RtlContext","useRtl","PropsContext","useDefaultProps","ctx","unstable_memoTheme","styleFn","lastValue","lastTheme","createGetCssVar","prefix","appendVar","vars","field","fallbacks","assignNestedKeys","arrayKeys","temp","walkObjectDeep","callback","shouldSkipPaths","recurse","parentKeys","getCssValue","cssVarsParser","shouldSkipGeneratingVar","varsWithDefaults","cssVar","resolvedValue","prepareCssVars","parserConfig","getSelector","defaultGetSelector","disableCssColorScheme","colorSchemes","components","defaultColorScheme","otherTheme","rootVars","rootCss","rootVarsWithDefaults","themeVars","colorSchemesMap","defaultScheme","otherColorSchemes","scheme","colorScheme","cssObject","rule","schemeVars","stylesheets","insertStyleSheet","defaultSchemeVal","cssColorSheme","finalCss","createGetColorSchemeSelector","defaultCreateStyledComponent","systemStyled","useThemePropsDefault","useThemePropsSystem","joinChildren","separator","childrenArray","child","getSideFromDirection","ownerState","directionValues","spacingValues","previousDirectionValue","createStack","createStyledComponent","useUtilityClasses","StackRoot","Stack","inProps","ref","themeProps","divider","className","useFlexGap","_jsx","common","grey","purple","red","orange","blue","lightBlue","green","getLight","light","getDark","dark","addLightOrDark","intent","shade","tonalOffset","tonalOffsetLight","tonalOffsetDark","getDefaultPrimary","mode","getDefaultSecondary","getDefaultError","getDefaultInfo","getDefaultSuccess","getDefaultWarning","createPalette","palette","contrastThreshold","primary","secondary","info","success","getContrastText","contrastText","contrast","augmentColor","mainShade","lightShade","darkShade","modeHydrated","prepareTypographyVars","typography","entry","createMixins","mixins","round","caseAllCaps","defaultFontFamily","createTypography","fontFamily","fontSize","fontWeightLight","fontWeightRegular","fontWeightMedium","fontWeightBold","htmlFontSize","allVariants","pxToRem2","coef","pxToRem","size","buildVariant","fontWeight","lineHeight","letterSpacing","casing","shadowKeyUmbraOpacity","shadowKeyPenumbraOpacity","shadowAmbientShadowOpacity","createShadow","px","shadows","easing","duration","formatMs","milliseconds","getAutoHeightDuration","constant","createTransitions","inputTransitions","mergedEasing","mergedDuration","durationOption","easingOption","delay","isString","isNumber","animatedProp","zIndex","isSerializable","stringifyTheme","baseTheme","serializableTheme","serializeTheme","array","createThemeNoVars","mixinsInput","transitionsInput","typographyInput","systemTheme","systemCreateTheme","stateClasses","stateClass","getOverlayAlpha","elevation","alphaValue","defaultDarkOverlays","overlay","getOpacity","getOverlays","createColorScheme","opacity","overlays","rest","excludeVariablesFromRoot","cssVarPrefix","root","excludedVariables","assignNode","setColor","toRgb","setColorChannel","safeColorChannel","getSpacingVal","silent","systemCreateGetCssVar","attachColorScheme","restTheme","createThemeWithVars","colorSchemesInput","defaultColorSchemeInput","defaultShouldSkipGeneratingVar","rootSelector","firstColorScheme","getCssVar","defaultSchemeInput","builtInLight","builtInDark","customColorSchemes","setCssVarColor","tokens","colorToken","safeDarken","safeLighten","snackbarContentBackground","safeEmphasize","safeAlpha","generateThemeVars","generateStyleSheets","cssVariables","initialColorSchemes","initialDefaultColorScheme","paletteOptions","useThemeSystem","systemUseThemeProps","useForkRef","refs","cleanupRef","refEffect","instance","cleanups","refCallback","refCleanup","globalId","useGlobalId","idOverride","defaultId","setDefaultId","id","safeReact","maybeReactUseId","useId","ChartStore","updater","newState","useChartAnimation","store","prevState","disableAnimation","disableCalled","disableAnimationCleanup","handleMediaChange","mql","skipAnimation","isAnimationDisabledEnvironment","disableAnimations","runIdentityFunctionCheck","resultFunc","inputSelectorsResults","outputSelectorResult","isInputSameAsOutput","emptyObject","stack","runInputStabilityCheck","inputSelectorResultsObject","inputSelectorArgs","memoizeOptions","inputSelectorResults","inputSelectorResultsCopy","createAnEmptyObject","globalDevModeChecks","NOT_FOUND","assertIsFunction","func","errorMessage","assertIsObject","assertIsArrayOfFunctions","itemTypes","ensureIsArray","getDependencies","createSelectorArgs","dependencies","collectInputSelectorResults","length","getDevModeChecksExecutionInfo","firstRun","devModeChecks","identityFunctionCheck","inputStabilityCheck","createSingletonCache","equals","createLruCache","maxSize","entries","get","cacheIndex","put","getEntries","clear","referenceEqualityCheck","createCacheKeyComparator","equalityCheck","lruMemoize","equalityCheckOrOptions","providedOptions","resultEqualityCheck","comparator","resultsCount","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","createSelector","createStructuredSelector","inputSelectorsObject","selectorCreator","inputSelectorKeys","composition","reselectCreateSelector","state","selectorArgs","cacheKey","cacheForCurrentChartInstance","cachedSelector","selectorChartAnimationState","selectorChartSkipAnimation","ownerDocument","ownerWindow","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","useSyncExternalStore","useRef","useMemo","withSelector_production","getServerSnapshot","isEqual","instRef","memoizedSelector","nextSnapshot","hasMemo","memoizedSnapshot","currentSelection","memoizedSelection","nextSelection","maybeGetServerSnapshot","withSelector_development","withSelectorModule","defaultCompare","useSelector","selectorWithArgs","useSyncExternalStoreWithSelector","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","selectorChartDimensionsState","selectorChartWidth","selectorChartHeight","selectorChartTopMargin","selectorChartRightMargin","selectorChartBottomMargin","selectorChartLeftMargin","selectorChartDrawingArea","marginTop","marginRight","marginBottom","marginLeft","axisSizeTop","axisSizeRight","axisSizeBottom","axisSizeLeft","selectorChartPropsSize","dimensionsState","selectorChartContainerSize","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","useChartExperimentalFeatures","experimentalFeatures","selectorChartExperimentalFeaturesState","selectorPreferStrictDomainInLineCharts","features","globalChartDefaultId","createChartDefaultId","useChartId","selectorChartIdState","selectorChartId","idState","rainbowSurgePaletteLight","rainbowSurgePaletteDark","rainbowSurgePalette","preprocessSeries","series","seriesConfig","dataset","seriesGroups","seriesData","seriesIndex","seriesWithDefaultValues","processedSeries","group","useChartSeries","isFirstRender","EMPTY_ARRAY","selectorChartSeriesState","selectorChartSeriesProcessed","seriesState","selectorChartSeriesConfig","eventList","Gesture","element","pointerManager","gestureRegistry","keyboardManager","changeOptionsEventName","changeStateEventName","stateChanges","isActive","activeGestures","gestureName","pointerType","ActiveGesturesRegistry","gesture","elementGestures","KeyboardManager","PointerManager","cancelEvent","firstPointer","pointerId","pointer","updatedPointer","handler","GestureManager","gestureNames","gestureOptions","gestureTemplate","gestureInstance","PointerGesture","pointers","calculatedTarget","getDistance","pointA","pointB","deltaX","deltaY","calculateAverageDistance","totalDistance","pairCount","j","calculateCentroid","sum","createEventName","phase","MAIN_THRESHOLD","ANGLE_THRESHOLD","SECONDARY_THRESHOLD","getDirection","current","isDiagonal","isDiagonalMovement","mainMovement","horizontalThreshold","verticalThreshold","angle","isDirectionAllowed","allowedDirections","verticalAllowed","horizontalAllowed","DIRECTION_THRESHOLD","getPinchDirection","velocity","MoveGesture","overrides","pointersArray","currentPosition","customEventData","eventName","domEvent","PanGesture","relevantPointers","currentCentroid","distanceDeltaX","distanceDeltaY","distance","moveDirection","lastDeltaX","lastDeltaY","p","timeElapsed","velocityX","velocityY","el","PinchGesture","initialDistance","currentDistance","distanceChange","scale","scaleChange","deltaTime","remainingPointers","newDistance","centroid","PressGesture","lastPosition","currentDuration","TapGesture","TurnWheelGesture","preventDefault","useChartInteractionListener","svg","gestureManager","addInteractionListener","interaction","CHART_CORE_PLUGINS","_excluded","extractPluginParamsFromProps","_ref","plugins","paramsLookup","plugin","pluginParams","useCharts","inPlugins","chartId","publicAPI","useChartApiInitialization","innerChartRootRef","innerSvgRef","storeRef","initialState","runPlugin","pluginResponse","initializeInputApiRef","inputApiRef","fallbackPublicApiRef","ChartContext","warnedOnceCache","warnOnce","message","gravity","cleanMessage","useAssertModelConsistencyOutsideOfProduction","parameters","controlled","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","defaultizeXAxis","inAxes","offsets","axisConfig","dataKey","defaultPosition","defaultHeight","sharedConfig","d","defaultizeYAxis","defaultWidth","ascending","descending","bisector","compare1","compare2","delta","zero","left","lo","hi","mid","right","center","number","ascendingBisect","bisectRight","InternMap","keyof","intern_get","intern_set","intern_delete","_intern","_key","e10","e5","e2","tickSpec","stop","count","power","factor","i1","i2","inc","ticks","reverse","tickIncrement","tickStep","range","initRange","domain","initInterpolator","interpolator","implicit","ordinal","unknown","band","ordinalRange","r0","r1","bandwidth","paddingInner","paddingOuter","align","rescale","sequence","pointish","copy","define","constructor","factory","extend","parent","definition","Color","darker","brighter","reI","reN","reP","reHex","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","channels","color_formatHex","color_formatHex8","color_formatHsl","color_formatRgb","hslConvert","format","m","rgbn","Rgb","rgba","hsla","g","rgbConvert","clampi","clampa","rgb_formatHex","rgb_formatHex8","rgb_formatRgb","hex","Hsl","hsl","m2","m1","hsl2rgb","clamph","clampt","constant$1","linear","exponential","gamma","nogamma","rgbGamma","colorRgb","numberArray","c","isNumberArray","genericArray","nb","na","interpolateDate","interpolateNumber","reA","reB","one","interpolateString","bi","am","bm","bs","q","interpolate","date","interpolateRound","constants","identity","normalize","clamper","bimap","d0","d1","polymap","bisect","interpolateValue","untransform","piecewise","u","continuous","formatDecimal","formatDecimalParts","exponent","formatGroup","grouping","thousands","formatNumerals","numerals","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","sign","symbol","comma","precision","trim","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","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","transformPow","transformSqrt","transformSquare","powish","pow","sqrt","threshold","t0","t1","timeInterval","floori","offseti","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","parse","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","createScalarFormatter","tickNumber","zoomScale","context","isBandScaleConfig","scaleConfig","isPointScaleConfig","getSequentialColorScale","scaleThreshold","scaleSequential","getOrdinalColorScale","scaleOrdinal","getColorScale","getTickNumber","tickMaxStep","tickMinStep","maxTicks","minTicks","defaultizedTickNumber","scaleTickNumberByRange","getScale","scaleType","scaleLog","scalePow","scaleSqrt","scaleTime","scaleUtc","scaleLinear","isDateData","data","createDateFormatter","timeScale","location","zoomScaleRange","scaleRange","zoomRange","rangeGap","zoomGap","cartesianInstance","polarInstance","CartesianSeriesTypes","PolarSeriesTypes","cartesianSeriesTypes","polarSeriesTypes","isCartesianSeriesType","seriesType","axisExtremumCallback","chartType","axisIndex","formattedSeries","getFilters","minChartTypeData","maxChartTypeData","minData","maxData","getAxisExtremum","extremums","charType","getAxisTriggerTooltip","defaultAxisId","tooltipAxesIds","tooltipAxes","getAxisDomainLimit","seriesId","getRange","DEFAULT_CATEGORY_GAP_RATIO","DEFAULT_BAR_GAP_RATIO","computeAxisValue","allAxis","zoomMap","zoomOptions","preferStrictDomainInLineCharts","axisIdsTriggeringTooltip","completeAxis","eachAxis","zoomOption","triggerTooltip","categoryGapRatio","barGapRatio","zoomedRange","scaleBand","dateFormatter","scalePoint","domainLimit","axisExtremums","rawTickNumber","finalScale","minDomain","maxDomain","isDefined","createAxisFilterMapper","minVal","maxVal","dataIndex","createGetAxisFilters","filters","currentAxisId","seriesXAxisId","seriesYAxisId","isDefaultAxis","createZoomLookup","axes","defaultizedZoom","createZoomMap","zoomItemMap","zoomItem","selectorChartZoomState","selectorChartZoomMap","selectorChartZoomOptionsLookup","axisLookup","selectorChartXFilter","selectorChartYFilter","selectorChartZoomAxisFilters","xMapper","yMapper","xFilters","filter","yFilters","selectorChartXAxis","selectorChartYAxis","xAxes","yAxes","isBandScale","getAsANumber","getAxisIndex","pointerValue","axisData","valueAsNumber","pointValue","getAxisValue","getSVGPoint","pt","useEventCallback","fastObjectShallowCompare","aLength","bLength","useChartInteraction","cleanInteraction","removeItemInteraction","itemToRemove","prevItem","setItemInteraction","newItem","setPointerCoordinate","coordinate","selectInteraction","selectorChartsInteractionIsInitialized","selectorChartsInteractionItem","selectorChartsInteractionPointer","selectorChartsInteractionPointerX","selectorChartsInteractionPointerY","isDeepEqual","entriesA","entryA","optionalGetAxisId","indexGetter","ids","selectChartsInteractionAxisIndex","selectorChartsInteractionXAxisIndex","selectorChartsInteractionYAxisIndex","selectorChartAxisInteraction","valueGetter","indexes","xIndex","yIndex","selectorChartsInteractionTooltipXAxes","selectorChartsInteractionTooltipYAxes","xTooltip","yTooltip","UNINITIALIZED","useLazyRef","init","initArg","noop","useLazySelectorEffect","effect","skip","initialize","initialSkip","isRunning","previousState","nextState","useChartCartesianAxis","onHighlightedAxisChange","duplicates","isInteractionEnabled","xAxisWithScale","xAxisIds","yAxisWithScale","yAxisIds","usedXAxis","usedYAxis","prevAxisInteraction","nextAxisInteraction","itemIndex","moveEndHandler","panEndHandler","pressEndHandler","gestureHandler","srvEvent","svgPoint","moveHandler","panHandler","pressHandler","onAxisClick","axisClickHandler","isXAxis","USED_AXIS_ID","axisValue","seriesValues","seriesItem","providedXAxisId","providedYAxisId","axisKey","addDefaultId","processColorMap","getZAxisState","zAxis","zAxisLookup","axisIds","defaultizedId","useChartZAxis","selectRootState","selectorChartZAxis","useChartHighlight","clearHighlight","setHighlight","createResult","getBaseExtremum","minX","maxX","getValueExtremum","stackedData","seriesMin","seriesMax","seriesAcc","getExtremumX","getExtremumY","atan2","cos","sin","epsilon","pi","halfPi","tau","acos","asin","tauEpsilon","append","appendRound","digits","Path","y1","x2","y2","y0","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","t01","t21","a0","a1","ccw","dx","dy","cw","da","w","withPath","arcInnerRadius","arcOuterRadius","arcStartAngle","arcEndAngle","arcPadAngle","intersect","x3","y3","x10","y10","x32","y32","cornerTangents","rc","ox","oy","x11","y11","x00","y00","d2","D","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","oc","ax","ay","bx","by","kc","lc","identity$1","d3Pie","sortValues","sort","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","vj","d3StackOrderAscending","sums","d3StackOrderDescending","d3StackOrderInsideOut","appearance","top","bottom","tops","bottoms","d3StackOrderReverse","StackOrder","StackOffset","getStackingGroups","seriesOrder","defaultStrategy","stackingGroups","stackIndex","stackOrder","stackOffset","barValueFormatter","seriesProcessor","d3Dataset","completedSeries","stackingGroup","stackingOffset","stackingOrder","stackedSeries","getLabel","legendGetter","formattedLabel","getColor","verticalLayout","bandColorScale","valueColorScale","bandValues","tooltipGetter","identifier","formattedValue","axisTooltipGetter","getSeriesWithDefaultValues","mergeMinMax","seriesMinMax","accSeries","datasetKeys","missingKeys","zColorScale","yColorScale","xColorScale","getSeriesExtremums","getValues","stackedValue","yAxisId","area","isArea","seriesExtremums","defaultizeValueFormatter","defaultValueFormatter","defaultizedSeries","getSortingComparator","piePoint","defaultSeriesConfig","barSeriesConfig","scatterSeriesConfig","lineSeriesConfig","pieSeriesConfig","defaultPlugins","ChartProvider","contextValue","useChartContext","useStore","useDrawingArea","deg2rad","defaultRad","useXAxes","useYAxes","useZAxes","zAxisIds","useSvgRef","useChartGradientIdBuilder","useChartGradientIdObjectBoundBuilder","NEWTON_ITERATIONS","NEWTON_MIN_SLOPE","SUBDIVISION_PRECISION","SUBDIVISION_MAX_ITERATIONS","kSplineTableSize","kSampleStepSize","float32ArraySupported","A","aA1","aA2","B","C","calcBezier","aT","getSlope","binarySubdivide","aX","aA","aB","mX1","mX2","currentX","currentT","newtonRaphsonIterate","aGuessT","currentSlope","LinearEasing","src","mY1","mY2","sampleValues","getTForX","intervalStart","currentSample","lastSample","dist","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","easingFn","onTick","easedT","shallowEqual","objA","objB","keysA","keysB","currentKey","useAnimateInternal","createInterpolator","applyProps","initialProps","lastInterpolatedPropsRef","transitionRef","elementRef","lastPropsRef","animate","lastInterpolatedProps","interpolatedProps","lastElement","useAnimate","transformProps","animateRef","animatedProps","ChartsPiecewiseGradient","isReversed","gradientId","colorMap","_jsxs","PX_PRECISION","ChartsContinuousGradient","gradientUnits","colorScale","extremumValues","extremumPositions","numberOfPoints","keyPrefix","ChartsContinuousGradientObjectBound","ChartsAxesGradients","svgHeight","svgWidth","getGradientId","getObjectBoundGradientId","filteredYAxisIds","filteredXAxisIds","filteredZAxisIds","objectBoundGradientId","ChartsSurfaceStyles","ChartsSurface","propsWidth","propsHeight","handleRef","title","desc","hasIntrinsicSize","getPercentageValue","refValue","percentage","getPoint","radAngle","getArcRatios","minAngle","maxAngle","initialAngle","cardinalAngle","minY","maxY","getAvailableRadius","cx","cy","ratio","space","GaugeContext","GaugeProvider","valueMin","valueMax","outerRadiusParam","innerRadiusParam","cornerRadiusParam","cxParam","cyParam","ratios","innerCx","innerCy","maxRadius","usedWidth","usedHeight","startAngleRad","endAngleRad","useGaugeState","GStyled","GaugeContainer","inWidth","inHeight","useSkipAnimation","storeSkipAnimation","gaugeValueArcPropsInterpolator","from","to","interpolateStartAngle","interpolateEndAngle","interpolateInnerRadius","interpolateOuterRadius","interpolateCornerRadius","useAnimateGaugeValueArc","StyledPath","GaugeValueArc","valueAngle","AnimatedGaugeValueArc","inSkipAnimation","GaugeReferenceArc","getGaugeUtilityClass","isSsr","stringCache","MAX_CACHE_NUM","SPAN_STYLE","STYLE_LIST","MEASUREMENT_SPAN_ID","autoCompleteStyle","camelToMiddleLine","text","getStyleString","domCleanTimeout","getStringSize","styleString","measurementSpan","measurementSpanStyle","rect","getWordsByLines","needsComputation","subText","useIsHydrated","isHydrated","setIsHydrated","_excluded2","ChartsText","styleProps","textProps","textAnchor","dominantBaseline","wordsByLines","startDy","line","defaultFormatter","GaugeValueText","formattedText","Gauge","formatTime","seconds","days","hours","minutes","remainingSeconds","parts","formatTimeLocalized","calculateExactProgress","currentState","totalElapsed","maxTime","DefaultVariant","timerState","animationState","hasError","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","ValueInterpolator","initialValues","hasChanges","isComplete","clampedDelta","initializationFactor","displacement","springForce","dampingForce","acceleration","newVelocity","newValue","newValues","timeSinceLastUpdate","isInitialTargetSet","blendFactor","newOptions","useInterpolation","interpolatorRef","useTimerLogic","autoStart","onCycleEnd","onMeasuringComplete","onPauseAnimation","onErrorAnimation","onClearErrorAnimation","onStartPulsating","setTimerState","animationRef","startTimeRef","pausedTimeRef","progressInterpolator","progress","setIdle","startMeasuring","elapsedSeconds","initialProgress","startNewCycle","maxTimeSeconds","completeMeasuring","pause","additionalElapsed","exactProgress","resume","isPaused","updateTimer","remaining","interpolationAnimationId","animateInterpolation","CycleTimer","onCycleComplete","prevStateRef","controls","isMounted","timeoutId","TimerDefaultVariant","elapsedTime","TimerSmallVariant","useTimerAnimations","lastProgressRef","reset","onTimerReady","memoTheme","useSystemDefaultProps","getSvgIconUtilityClass","SvgIconRoot","_f","_h","_g","_j","_l","_k","_n","_m","htmlColor","inheritViewBox","titleAccess","viewBox","hasSvgAsChild","more","createSvgIcon","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","useMounted","useAutorun","view","autorun","useReaction","expression","opts","reaction","useAnimationFrame","frameId","JoggingCartesianAxisControl","getDisplayedValue","startJogging","stopJogging","activeJoggingDirection","displayValue","valueContainerRef","localActiveJoggingDirection","setLocalActiveJoggingDirection","onPointerUpOrOut","showJoggingDirection","sxAxisControlButtonBase","sxAxisControlButtonDefault","sxAxisControlButtonPressed","onPointerDown","ev","JogMinus","JogPlus","ChevronLeft","ChevronRight","isObject","freeGlobal","freeSelf","reWhitespace","trimmedEndIndex","reTrimStart","baseTrim","Symbol","objectProto","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","trailing","invokeFunc","thisArg","leadingEdge","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","timeWaiting","shouldInvoke","trailingEdge","cancel","flush","debounced","isInvoking","throttle","JoggingJointRotationControl","lowerLimitDegs","upperLimitDegs","getValueDegs","currentValue","setCurrentValue","pressedButtonStyle","useLocalObservable","updateValue","onPointerDownMinus","onPointerDownPlus","onPointerUp","onPointerOut","formatDegrees","Slider","_o","MoveIcon","ShareIcon","isObject_default","listCacheClear","listCacheClear_default","eq","eq_default","assocIndexOf","assocIndexOf_default","arrayProto","splice","listCacheDelete","lastIndex","listCacheDelete_default","listCacheGet","listCacheGet_default","listCacheHas","listCacheHas_default","listCacheSet","listCacheSet_default","ListCache","ListCache_default","stackClear","stackClear_default","stackDelete","stackDelete_default","stackGet","stackGet_default","stackHas","stackHas_default","freeGlobal_default","root_default","Symbol_default","getRawTag_default","objectProto2","nativeObjectToString2","objectToString_default","symToStringTag2","baseGetTag_default","asyncTag","funcTag","genTag","proxyTag","isFunction","isFunction_default","coreJsData","coreJsData_default","maskSrcKey","uid","isMasked","isMasked_default","funcProto","funcToString","toSource","toSource_default","reRegExpChar","reIsHostCtor","funcProto2","objectProto3","funcToString2","hasOwnProperty2","reIsNative","baseIsNative","pattern","baseIsNative_default","getValue_default","getNative","getNative_default","Map","Map_default","nativeCreate","nativeCreate_default","hashClear","hashClear_default","hashDelete","hashDelete_default","HASH_UNDEFINED","objectProto4","hasOwnProperty3","hashGet","hashGet_default","objectProto5","hasOwnProperty4","hashHas","hashHas_default","HASH_UNDEFINED2","hashSet","hashSet_default","Hash","Hash_default","mapCacheClear","mapCacheClear_default","isKeyable","isKeyable_default","getMapData","getMapData_default","mapCacheDelete","mapCacheDelete_default","mapCacheGet","mapCacheGet_default","mapCacheHas","mapCacheHas_default","mapCacheSet","mapCacheSet_default","MapCache","MapCache_default","LARGE_ARRAY_SIZE","stackSet","pairs","stackSet_default","Stack_default","HASH_UNDEFINED3","setCacheAdd","setCacheAdd_default","setCacheHas","setCacheHas_default","SetCache","SetCache_default","arraySome","predicate","arraySome_default","cacheHas","cacheHas_default","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","equalArrays","bitmask","customizer","equalFunc","isPartial","arrLength","othLength","arrStacked","othStacked","seen","arrValue","othValue","compared","othValue2","othIndex","equalArrays_default","Uint8Array","Uint8Array_default","mapToArray","mapToArray_default","setToArray","set","setToArray_default","COMPARE_PARTIAL_FLAG2","COMPARE_UNORDERED_FLAG2","boolTag","dateTag","errorTag","mapTag","numberTag","regexpTag","setTag","stringTag","arrayBufferTag","dataViewTag","symbolProto","symbolValueOf","equalByTag","convert","stacked","equalByTag_default","arrayPush","arrayPush_default","isArray","isArray_default","baseGetAllKeys","keysFunc","symbolsFunc","baseGetAllKeys_default","arrayFilter","resIndex","arrayFilter_default","stubArray","stubArray_default","objectProto6","propertyIsEnumerable","nativeGetSymbols","getSymbols","getSymbols_default","baseTimes","iteratee","baseTimes_default","isObjectLike_default","argsTag","baseIsArguments","baseIsArguments_default","objectProto7","hasOwnProperty5","propertyIsEnumerable2","isArguments","isArguments_default","stubFalse","stubFalse_default","freeExports","freeModule","moduleExports","Buffer","nativeIsBuffer","isBuffer","isBuffer_default","MAX_SAFE_INTEGER","reIsUint","isIndex","isIndex_default","MAX_SAFE_INTEGER2","isLength","isLength_default","argsTag2","arrayTag","boolTag2","dateTag2","errorTag2","funcTag2","mapTag2","numberTag2","objectTag","regexpTag2","setTag2","stringTag2","weakMapTag","arrayBufferTag2","dataViewTag2","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","typedArrayTags","baseIsTypedArray","baseIsTypedArray_default","baseUnary","baseUnary_default","freeExports2","freeModule2","moduleExports2","freeProcess","nodeUtil","types","nodeUtil_default","nodeIsTypedArray","isTypedArray","isTypedArray_default","objectProto8","hasOwnProperty6","arrayLikeKeys","inherited","isArr","isArg","isBuff","isType","skipIndexes","arrayLikeKeys_default","objectProto9","isPrototype","Ctor","proto","isPrototype_default","overArg","overArg_default","nativeKeys","nativeKeys_default","objectProto10","hasOwnProperty7","baseKeys","baseKeys_default","isArrayLike","isArrayLike_default","keys_default","getAllKeys","getAllKeys_default","COMPARE_PARTIAL_FLAG3","objectProto11","hasOwnProperty8","equalObjects","objProps","objLength","othProps","objStacked","skipCtor","objValue","objCtor","othCtor","equalObjects_default","DataView","DataView_default","Promise2","Promise_default","Set","Set_default","WeakMap","WeakMap_default","mapTag3","objectTag2","promiseTag","setTag3","weakMapTag2","dataViewTag3","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","getTag","ctorString","getTag_default","COMPARE_PARTIAL_FLAG4","argsTag3","arrayTag2","objectTag3","objectProto12","hasOwnProperty9","baseIsEqualDeep","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","baseIsEqualDeep_default","baseIsEqual","baseIsEqual_default","isEqual_default","extendStatics","__extends","__","__values","__read","ar","__spread","Event","ErrorEvent","_super","_this","CloseEvent","reason","getGlobalWebSocket","isWebSocket","DEFAULT","ReconnectingWebSocket","protocols","minUptime","listener","bytes","maxEnqueuedMessages","e_1","listeners","listeners_1","listeners_1_1","e_1_1","reconnectionDelayGrowFactor","minReconnectionDelay","maxReconnectionDelay","resolve","urlProvider","maxRetries","connectionTimeout","WebSocket","__defProp","__defProps","__getOwnPropDescs","__getOwnPropSymbols","__hasOwnProp","__propIsEnum","__defNormalProp","__spreadValues","__spreadProps","__async","__this","__arguments","reject","fulfilled","rejected","AutoReconnectingWebsocket","targetUrl","origReconnect","onMessage","onError","AvailableStorage","availableStorage","tryParseJson","json","isSameCoordinateSystem","firstCoordSystem","secondCoordSystem","DOMAIN_SUFFIX","auth0ConfigMap","getAuth0Config","instanceUrl","loginWithAuth0","auth0Config","Auth0Client","auth0Client","appState","bind","toString","getPrototypeOf","kindOf","thing","kindOfTest","typeOfTest","isUndefined","isArrayBuffer","isArrayBufferView","isBoolean","isDate","isFile","isBlob","isFileList","isStream","isFormData","kind","isURLSearchParams","isReadableStream","isRequest","isResponse","isHeaders","forEach","allOwnKeys","findKey","_global","isContextDefined","caseless","assignValue","targetKey","stripBOM","content","inherits","superConstructor","descriptors","toFlatObject","sourceObj","destObj","propFilter","merged","endsWith","searchString","toArray","arr","TypedArray","forEachEntry","iterator","pair","matchAll","regExp","isHTMLForm","toCamelCase","isRegExp","reduceDescriptors","reducer","reducedDescriptors","descriptor","ret","freezeMethods","toObjectSet","arrayOrString","delimiter","toFiniteNumber","isSpecCompliantForm","toJSONObject","visit","reducedValue","isAsyncFn","isThenable","_setImmediate","setImmediateSupported","postMessageSupported","token","callbacks","cb","asap","utils$1","AxiosError","request","response","utils","customProps","axiosError","httpAdapter","isVisitable","removeBrackets","renderKey","dots","isFlatArray","predicates","toFormData","formData","option","metaTokens","visitor","defaultVisitor","useBlob","convertValue","exposedHelpers","build","encode","charMap","AxiosURLSearchParams","encoder","_encode","buildURL","serializeFn","serializedParams","hashmarkIndex","InterceptorManager","transitionalDefaults","URLSearchParams$1","FormData$1","Blob$1","platform$1","URLSearchParams","FormData","Blob","hasBrowserEnv","_navigator","hasStandardBrowserEnv","hasStandardBrowserWebWorkerEnv","origin","platform","toURLEncodedForm","helpers","parsePropPath","arrayToObject","formDataToJSON","buildPath","isNumericKey","isLast","stringifySafely","rawValue","parser","defaults","headers","contentType","hasJSONContentType","isObjectPayload","_FormData","transitional","forcedJSONParsing","JSONRequested","strictJSONParsing","status","method","ignoreDuplicateOf","parseHeaders","rawHeaders","parsed","$internals","normalizeHeader","header","normalizeValue","parseTokens","tokensRE","isValidHeaderName","matchHeaderValue","isHeaderNameFilter","formatHeader","char","buildAccessors","accessorName","methodName","arg1","arg2","arg3","AxiosHeaders$1","valueOrRewrite","rewrite","setHeader","_value","_header","_rewrite","lHeader","setHeaders","matcher","deleted","deleteHeader","normalized","targets","asStrings","first","computed","accessors","defineAccessor","AxiosHeaders","mapped","headerValue","transformData","fns","isCancel","CanceledError","settle","validateStatus","parseProtocol","speedometer","samplesCount","timestamps","head","tail","firstSampleTS","chunkLength","startedAt","bytesCount","passed","freq","timestamp","invoke","progressEventReducer","isDownloadStream","bytesNotified","_speedometer","loaded","total","progressBytes","rate","inRange","progressEventDecorator","throttled","lengthComputable","asyncDecorator","isURLSameOrigin","isMSIE","cookies","expires","secure","cookie","isAbsoluteURL","combineURLs","baseURL","relativeURL","buildFullPath","requestedURL","allowAbsoluteUrls","isRelativeUrl","headersToObject","mergeConfig","config1","config2","getMergedValue","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","configValue","resolveConfig","newConfig","withXSRFToken","xsrfHeaderName","xsrfCookieName","auth","xsrfValue","isXHRAdapterSupported","xhrAdapter","_config","requestData","requestHeaders","responseType","onUploadProgress","onDownloadProgress","onCanceled","uploadThrottled","downloadThrottled","flushUpload","flushDownload","done","onloadend","responseHeaders","err","timeoutErrorMessage","protocol","composeSignals","signals","controller","aborted","onabort","unsubscribe","signal","streamChunk","chunk","chunkSize","pos","readBytes","iterable","readStream","stream","reader","trackStream","onProgress","onFinish","_onFinish","loadedBytes","isFetchSupported","isReadableStreamSupported","encodeText","supportsRequestStream","duplexAccessed","hasContentType","DEFAULT_CHUNK_SIZE","supportsResponseStream","resolvers","res","getBodyLength","body","resolveBodyLength","fetchAdapter","cancelToken","withCredentials","fetchOptions","composedSignal","requestContentLength","_request","contentTypeHeader","isCredentialsSupported","isStreamResponse","responseContentLength","responseData","knownAdapters","renderReason","isResolvedHandle","adapter","adapters","nameOrAdapter","rejectedReasons","reasons","throwIfCancellationRequested","dispatchRequest","VERSION","validators","deprecatedWarnings","validator","version","formatMessage","opt","correctSpelling","assertOptions","schema","allowUnknown","Axios$1","instanceConfig","configOrUrl","dummy","paramsSerializer","contextHeaders","requestInterceptorChain","synchronousRequestInterceptors","interceptor","responseInterceptorChain","promise","chain","onFulfilled","onRejected","fullPath","Axios","generateHTTPMethod","isForm","CancelToken$1","CancelToken","executor","resolvePromise","onfulfilled","_resolve","abort","spread","isAxiosError","payload","HttpStatusCode","createInstance","defaultConfig","axios","promises","all","Cancel","formToJSON","getAdapter","BASE_PATH","BaseAPI","configuration","basePath","globalAxios","__publicField","RequiredError","msg","operationServerMap","DUMMY_BASE_URL","assertParamExists","paramName","paramValue","setBasicAuthToObject","setBearerAuthToObject","accessToken","setFlattenedQueryParams","urlSearchParams","parameter","setSearchParams","searchParams","serializeDataIfNeeded","requestOptions","nonString","toPathString","createRequestFunction","axiosArgs","axiosRequestArgs","Manufacturer","ApplicationApiAxiosParamCreator","cell","completionTimeout","localVarPath","localVarUrlObj","baseOptions","localVarRequestOptions","localVarHeaderParameter","localVarQueryParameter","headersFromBaseOptions","app2","ApplicationApiFp","localVarAxiosParamCreator","localVarAxiosArgs","localVarOperationServerIndex","localVarOperationServerBasePath","ApplicationApi","CellApiAxiosParamCreator","cell2","CellApiFp","CellApi","ControllerApiAxiosParamCreator","robotController","responseRate","ControllerApiFp","ControllerApi","ControllerIOsApiAxiosParamCreator","ios","iOValue","io","comparisonType","booleanValue","integerValue","floatingValue","ControllerIOsApiFp","ControllerIOsApi","CoordinateSystemsApiAxiosParamCreator","addRequest","coordinateSystem","rotationType","pose","CoordinateSystemsApiFp","CoordinateSystemsApi","DeviceConfigurationApiAxiosParamCreator","createDeviceRequestInner","DeviceConfigurationApiFp","DeviceConfigurationApi","LibraryProgramApiAxiosParamCreator","program","programIds","LibraryProgramApiFp","LibraryProgramApi","LibraryProgramMetadataApiAxiosParamCreator","showHidden","updateProgramMetadataRequest","file","localVarFormParams","LibraryProgramMetadataApiFp","LibraryProgramMetadataApi","LibraryRecipeApiAxiosParamCreator","programId","recipe","recipeIds","LibraryRecipeApiFp","LibraryRecipeApi","LibraryRecipeMetadataApiAxiosParamCreator","updateRecipeMetadataRequest","LibraryRecipeMetadataApiFp","LibraryRecipeMetadataApi","MotionApiAxiosParamCreator","motion","executeTrajectoryRequest","sampleTime","responsesCoordinateSystem","locationOnTrajectory","responseCoordinateSystem","plannedMotion","planCollisionFreePTPRequest","planRequest","planTrajectoryRequest","streamMoveRequest","playbackSpeedInPercent","startLocationOnTrajectory","limitOverrideJointVelocityLimitsJoints","limitOverrideJointAccelerationLimitsJoints","limitOverrideTcpVelocityLimit","limitOverrideTcpAccelerationLimit","limitOverrideTcpOrientationVelocityLimit","limitOverrideTcpOrientationAccelerationLimit","MotionApiFp","MotionApi","MotionGroupApiAxiosParamCreator","motionGroup","MotionGroupApiFp","MotionGroupApi","MotionGroupInfosApiAxiosParamCreator","tcp","MotionGroupInfosApiFp","MotionGroupInfosApi","MotionGroupJoggingApiAxiosParamCreator","directionJoggingRequest","jointJoggingRequest","MotionGroupJoggingApiFp","MotionGroupJoggingApi","MotionGroupKinematicApiAxiosParamCreator","allJointPositionsRequest","tcpPoseRequest","jointPositionRequest","MotionGroupKinematicApiFp","MotionGroupKinematicApi","ProgramApiAxiosParamCreator","codeWithArguments","runner","request1","ProgramApiFp","ProgramApi","ProgramValuesApiAxiosParamCreator","requestBody","ProgramValuesApiFp","ProgramValuesApi","StoreCollisionComponentsApiAxiosParamCreator","linkChain","tool","motionGroupModel","collider2","StoreCollisionComponentsApiFp","StoreCollisionComponentsApi","StoreCollisionScenesApiAxiosParamCreator","collisionSceneAssembly","StoreCollisionScenesApiFp","StoreCollisionScenesApi","StoreObjectApiAxiosParamCreator","xMetadata","anyValue","StoreObjectApiFp","StoreObjectApi","SystemApiAxiosParamCreator","channel","updateNovaVersionRequest","SystemApiFp","SystemApi","VirtualRobotApiAxiosParamCreator","motionGroupJoints","bool","integer","_double","VirtualRobotApiFp","VirtualRobotApi","VirtualRobotBehaviorApiAxiosParamCreator","externalJointStreamDatapoint","behavior","VirtualRobotBehaviorApiFp","VirtualRobotBehaviorApi","VirtualRobotModeApiAxiosParamCreator","VirtualRobotModeApiFp","VirtualRobotModeApi","VirtualRobotSetupApiAxiosParamCreator","robotTcp","deleteDependent","VirtualRobotSetupApiFp","VirtualRobotSetupApi","Quaternion","dst","dstOffset","src0","srcOffset0","src1","srcOffset1","z0","w0","z1","w1","sqrSin","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","az","bz","denominator","planeNormal","_vector","theta","dz","radius","phi","sinPhiRadius","sy","strArray","resultArray","urlJoin","compile","pathToRegexp","stringify","DEFAULT_DELIMITER","NOOP_VALUE","ID_START","ID_CONTINUE","DEBUG_URL","SIMPLE_TOKENS","escapeText","escape","lexer","chars","Iter","nextType","TokenData","encodePath","it","consume","endType","param","wildcard","tokensToFunction","missing","encoders","tokenToFunction","extras","encodeValue","decode","regexp","decoders","decoder","sensitive","sources","flags","items","seq","flatten","sequenceToRegExp","fork","backtrack","isSafeSegmentParam","negate","stringifyToken","isNameSafe","isNextNameSafe","jointValuesEqual","oldJointValues","newJointValues","changeDeltaThreshold","jointIndex","tcpPoseEqual","oldTcp","newTcp","changedDelta","MOTION_DELTA_THRESHOLD","ConnectedMotionGroup","_ConnectedMotionGroup","nova","initialMotionState","motionStateSocket","isVirtual","tcps","motionGroupSpecification","safetySetup","mounting","initialControllerState","controllerStateSocket","runInAction","motionStateResponse","makeAutoObservable","motionGroupId","controllers","_motionGroupIndex","controllerId","mg","firstMessage","firstControllerMessage","num","rotationVector","magnitude","JoggerConnection","_JoggerConnection","motionStream","_0","_1","cartesianJoggingOpts","joint","velocityRadsPerSec","jointVelocities","velocityMmPerSec","zeroVector","joggingVector","currentTcpPose","currentJoints","coordSystemId","velocityInRelevantUnits","commands","targetTcpPosition","currentRotationVector","Vector32","currentRotationRad","currentRotationDirection","differenceRotationRad","differenceRotationDirection","f1","f2","f3","f4","crossProduct","newRotationRad","f5","targetTcpOrientation","motionPlanRes","distanceRads","targetJoints","jointVelocityLimits","MOTION_DELTA_THRESHOLD2","unwrapRotationVector","newRotationVectorApi","currentRotationVectorApi","Vector33","newRotationVector","currentAngle","currentAxis","newAngle","newAxis","angleDifference","MotionStreamConnection","_MotionStreamConnection","runInAction2","makeAutoObservable2","NovaCellAPIClient","cellId","ApiConstructor","apiClient","mime","originalFunction","MockNovaInstance","apiHandlers","match2","pathToRegexp.match","socket","defaultMotionState","NovaClient","axiosInstance","axios2","_a2","motionGroupIds","instances","tryStringifyJson","assertUnreachable","makeErrorMessage","LoadingCover","softTimeout","showSlowLoadingMessage","setShowSlowLoadingMessage","LoadingErrorMessage","CircularProgress","lowerFirst","SvgAxisX","SvgAxisY","SvgAxisZ","SvgRotation","Promise","JoggingJointLimitDetector","jointLimitsReached","setJointLimitsReached","jointLimitsReachedRef","newLimitsReached","jointLimitReachedIndices","limitReached","AdornedFormControl","FormControl","AdornedSelect","labelValue","InputLabel","Select","defineProperty","baseAssignValue","arrayAggregator","setter","accumulator","createBaseFor","fromRight","baseFor","baseForOwn","createBaseEach","eachFunc","collection","baseEach","baseAggregator","baseIsMatch","matchData","srcValue","isStrictComparable","getMatchData","matchesStrictComparable","baseMatches","reIsDeepProp","reIsPlainProp","isKey","resolver","MAX_MEMOIZE_SIZE","memoizeCapped","rePropName","reEscapeChar","stringToPath","quote","subString","arrayMap","symbolToString","baseToString","castPath","toKey","baseGet","baseHasIn","hasPath","hasFunc","hasIn","baseMatchesProperty","baseProperty","basePropertyDeep","baseIteratee","createAggregator","initializer","keyBy","idCounter","uniqueId","discreteIncrementOptions","incrementOptions","ORIENTATION_IDS","JoggingStore","jogger","motionGroupSpec","coordSystems","cs","coordinatesystems","dispose","countBy","websocket","save","_event","tab","orientation","incrementJog","lockId","JoggingOptions","joggingOptions","translateOrientation","orientationId","select","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","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","ariaLabel","ariaValuetext","componentsProps","classesProp","getAriaLabel","getAriaValueText","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","VelocitySlider","onSliderChange","VelocitySliderLabel","JoggingVelocitySlider","JoggingCartesianTab","onMotionTypeChange","newMotionType","runIncrementalCartesianJog","increment","tcpPose","jointPosition","degreesToRadians","startCartesianJogging","getAxisColors","motionType","axisColors","axisList","XAxisIcon","YAxisIcon","ZAxisIcon","formatMM","radiansToDegrees","ToggleButton","RotationIcon","JoggingJointTab","startJointJogging","stopJointJogging","jointLimits","JoggingPanel","joggingStore","JoggingPanelInner","renderTabContent","Tabs","icon","Tab","CopyableText","tooltipOpen","setTooltipOpen","onCopyText","selection","Tooltip","PoseCartesianValues","showCopyButton","copyMessage","setCopyMessage","poseString","poseToWandelscriptString","handleCopy","Button","PoseJointValues","joints","LogStore","level","logMessage","makeObservable","observable","action","createLogMessage","createDebugMessage","createInfoMessage","createWarningMessage","createErrorMessage","LogViewer","messages","onClear","scrollContainerRef","scrollContainer","formatTimestamp","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","ProgramState","ProgramControl","onRun","onPause","onStop","onReset","requiresManualReset","getButtonConfigs","baseConfigs","getButtonIcon","iconProps","PlayArrow","Stop","Pause","buttonConfigs","ProgramStateIndicator","programState","safetyState","operationMode","getStateInfo","fullLabel","Chip","defaultGetModel","modelFromController","useVersion","collectJoints","rootObject","getAllObjects","isJoint","isFlange","parseRobotModel","gltf","filename","flange","parseNode","RobotAnimator","rapidlyChangingMotionState","dhParameters","onRotationChanged","jointValues","jointObjects","invalidate","useThree","initialJointValues","useFrame","setRotation","setGroupRef","updateJoints","updatedJointValues","dhParam","rotationOffset","rotationSign","CHILD_LINE","CHILD_MESH","DHRobot","accumulatedMatrix","Matrix4","lineRefs","meshRefs","getLinePoints","dhParameter","jointRotation","prevPosition","matrix","setJointLineRotation","mesh","jointValue","dh_parameter","jointName","defaultWarn","ConsoleFilter","isMesh","GenericRobot","modelURL","flangeRef","postModelRender","useGLTF","groupRef","renderNode","applyGhostStyle","robot","depth","ghost","removeGhostStyle","objectsToRemove","SupportedRobot","getModel","transparentColor","robotGroup","setRobotGroup","setRobotRef","dhrobot","ErrorBoundary","Suspense","Robot","connectedMotionGroup","RobotCard","robotName","driveToHomeEnabled","onDriveToHomePress","onDriveToHomeRelease","RobotComponent","CustomContentComponent","isDriveToHomePressed","setIsDriveToHomePressed","driveButtonRef","cardRef","isLandscape","setIsLandscape","cardSize","setCardSize","modelRenderTrigger","setModelRenderTrigger","checkDimensions","offsetWidth","offsetHeight","handleModelRender","handleDriveToHomeMouseDown","handleDriveToHomeMouseUp","handleDriveToHomeMouseLeave","shouldHideRobot","shouldHideCustomContent","Card","Canvas","Bounds","ErrorIcon","SvgRobot","RobotSetupReadinessState","RobotSetupReadinessIndicator","setupState","indicatorColor","textColor","RobotListItem","robotType","PreconditionComponent","displayRobotType","isReady","RobotIcon","defaultAxisConfig","MANUFACTURER_HOME_CONFIGS","extractManufacturer","manufacturerString","getDefaultHomeConfig","defaultJointConfig","manufacturer","SvgControllerTypePhysical","SvgControllerTypeVirtual","IndicatorWithExplanation","explanation","literalValue","anchorOrigin","transformOrigin","Popover","ControllerTypeIndicator","ControllerTypeVirtualIcon","Trans","ControllerTypePhysicalIcon","SvgOperationModeAutomatic","SvgOperationModeError","SvgOperationModeManual","OperationModeIndicator","OperationModeAutomaticIcon","OperationModeManualIcon","OperationModeErrorIcon","SvgSafetyStateError","SvgSafetyStateEstop","SvgSafetyStateManualActionRequired","SvgSafetyStateNormal","SvgSafetyStateStop","SafetyStateIndicator","SafetyStateNormalIcon","SafetyStateEstopIcon","SafetyStateStopIcon","SafetyStateManualActionRequiredIcon","SafetyStateErrorIcon","SafetyBar","StyledSelectableFab","Fab","selected","SelectableFab","TabPanel","TabWrapper","fullWidth","indicator","scrollButtons","selectionFollowsFocus","cleanProps","TabBar","activeTab","defaultActiveTab","onTabChange","uncontrolledActiveTab","setUncontrolledActiveTab","handleTabChange","getBadgeContent","shouldShowBadge","showZero","badgeContent","showBadge","handleTabClick","Badge","wandelscriptTextmateGrammar","Editor","lazy","preparedShiki","getShiki","createHighlighter","shikiToMonaco","WandelscriptEditor","activeShikiTheme","setActiveShikiTheme","targetShikiTheme","setupEditor","monaco","shiki","_editor","createDarkTheme","rgbToHex","createLightTheme","createNovaMuiTheme","isDark"],"mappings":"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AAU,SACX,EACD,QAAS,CACP,SAAU,UACV,UAAWA,EACZ,EACD,aAAc,CACZ,SAAU,SACX,EACD,aAAc,CACZ,SAAU,qBACV,MAAOc,EACR,EAED,MAAO,CACL,SAAU,UACV,UAAWa,EACZ,EACD,QAAS,CACP,SAAU,UACV,YAAa,kBACb,UAAWA,EACZ,EACD,gBAAiB,CACf,SAAU,UACV,UAAWA,EACZ,EAED,EAAG,CACD,MAAOnC,EACR,EACD,GAAI,CACF,MAAOA,EACR,EACD,GAAI,CACF,MAAOA,EACR,EACD,GAAI,CACF,MAAOA,EACR,EACD,GAAI,CACF,MAAOA,EACR,EACD,GAAI,CACF,MAAOA,EACR,EACD,GAAI,CACF,MAAOA,EACR,EACD,QAAS,CACP,MAAOA,EACR,EACD,WAAY,CACV,MAAOA,EACR,EACD,aAAc,CACZ,MAAOA,EACR,EACD,cAAe,CACb,MAAOA,EACR,EACD,YAAa,CACX,MAAOA,EACR,EACD,SAAU,CACR,MAAOA,EACR,EACD,SAAU,CACR,MAAOA,EACR,EACD,cAAe,CACb,MAAOA,EACR,EACD,mBAAoB,CAClB,MAAOA,EACR,EACD,iBAAkB,CAChB,MAAOA,EACR,EACD,aAAc,CACZ,MAAOA,EACR,EACD,kBAAmB,CACjB,MAAOA,EACR,EACD,gBAAiB,CACf,MAAOA,EACR,EACD,EAAG,CACD,MAAOD,EACR,EACD,GAAI,CACF,MAAOA,EACR,EACD,GAAI,CACF,MAAOA,EACR,EACD,GAAI,CACF,MAAOA,EACR,EACD,GAAI,CACF,MAAOA,EACR,EACD,GAAI,CACF,MAAOA,EACR,EACD,GAAI,CACF,MAAOA,EACR,EACD,OAAQ,CACN,MAAOA,EACR,EACD,UAAW,CACT,MAAOA,EACR,EACD,YAAa,CACX,MAAOA,EACR,EACD,aAAc,CACZ,MAAOA,EACR,EACD,WAAY,CACV,MAAOA,EACR,EACD,QAAS,CACP,MAAOA,EACR,EACD,QAAS,CACP,MAAOA,EACR,EACD,aAAc,CACZ,MAAOA,EACR,EACD,kBAAmB,CACjB,MAAOA,EACR,EACD,gBAAiB,CACf,MAAO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ACe,EACD,wBAAyB,CACvB,CACE,MAAO,mBACP,YAAa,mBACb,YAAa,kBACb,UAAW,EACZ,EACD,CACE,MAAO,mBACP,YAAa,mBACb,YAAa,kBACb,UAAW,EACZ,EACD,CACE,MAAO,mBACP,YAAa,mBACb,YAAa,kBACb,UAAW,EACZ,EACD,CACE,MAAO,mBACP,YAAa,mBACb,YAAa,kBACb,UAAW,EACZ,EACD,CACE,MAAO,mBACP,YAAa,mBACb,YAAa,kBACb,UAAW,EACZ,EACD,CACE,MAAO,mBACP,YAAa,mBACb,YAAa,kBACb,UAAW,EAC7B,CACA,CACa,CACb,CACS,EACD,CACE,OAAQ,MACR,KAAM,2DACN,QAAS,CACP,MAAO,CACL,gBAAiB,CACf,CACE,aAAc,gBACd,SAAU,CACR,sBAAuB,CACrB,CACE,MAAO,mBACP,YAAa,kBACb,YAAa,iBACb,UAAW,EACZ,EACD,CACE,MAAO,mBACP,YAAa,oBACb,YAAa,mBACb,UAAW,EACZ,EACD,CACE,MAAO,mBACP,YAAa,oBACb,YAAa,mBACb,UAAW,EACZ,EACD,CACE,MAAO,mBACP,YAAa,oBACb,YAAa,mBACb,UAAW,EACZ,EACD,CACE,MAAO,mBACP,YAAa,oBACb,YAAa,mBACb,UAAW,EACZ,EACD,CACE,MAAO,mBACP,YAAa,kBACb,YAAa,iBACb,UAAW,EACnC,CACqB,EACD,sBAAuB,CACrB,CACE,MAAO,mBACP,MAAO,kBACR,EACD,CACE,MAAO,mBACP,MAAO,kBACR,EACD,CACE,MAAO,mBACP,MAAO,kBACR,EACD,CACE,MAAO,mBACP,MAAO,iBACR,EACD,CACE,MAAO,mBACP,MAAO,iBACR,EACD,CACE,MAAO,mBACP,MAAO,iBAC/B,CACqB,EACD,0BAA2B,CAAE,EAC7B,oBAAqB,CAAE,EACvB,mBAAoB,IACxC,CACA,CACe,EACD,aAAc,CACZ,CACE,GAAI,EACJ,SAAU,EACV,SAAU,CACR,SAAU,CACR,iBAAkB,CAChB,CACE,YAAa,CACX,SAAU,CACR,CACE,EAAG,KACH,EAAG,MACH,EAAG,KACJ,EACD,CACE,EAAG,KACH,EAAG,MACH,EAAG,KACJ,EACD,CACE,EAAG,KACH,EAAG,KACH,EAAG,KACJ,EACD,CACE,EAAG,KACH,EAAG,KACH,EAAG,KACnC,CACA,CAC2B,EACD,UAAW,CACT,SAAU,CACR,EAAG,EACH,EAAG,EACH,EAAG,CACJ,EACD,YAAa,CACX,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,CACjC,CAC2B,EACD,GAAI,KACL,EACD,CACE,YAAa,CACX,SAAU,CACR,CACE,EAAG,KACH,EAAG,MACH,EAAG,KACJ,EACD,CACE,EAAG,KACH,EAAG,MACH,EAAG,KACJ,EACD,CACE,EAAG,KACH,EAAG,MACH,EAAG,IACJ,EACD,CACE,EAAG,KACH,EAAG,MACH,EAAG,IACnC,CACA,CAC2B,EACD,UAAW,CACT,SAAU,CACR,EAAG,EACH,EAAG,EACH,EAAG,CACJ,EACD,YAAa,CACX,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,CACjC,CAC2B,EACD,GAAI,KACL,EACD,CACE,YAAa,CACX,SAAU,CACR,CACE,EAAG,KACH,EAAG,MACH,EAAG,KACJ,EACD,CACE,EAAG,KACH,EAAG,KACH,EAAG,KACJ,EACD,CACE,EAAG,KACH,EAAG,KACH,EAAG,IACJ,EACD,CACE,EAAG,KACH,EAAG,MACH,EAAG,IACnC,CACA,CAC2B,EACD,UAAW,CACT,SAAU,CACR,EAAG,EACH,EAAG,EACH,EAAG,CACJ,EACD,YAAa,CACX,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,CACjC,CAC2B,EACD,GAAI,KACL,EACD,CACE,YAAa,CACX,SAAU,CACR,CACE,EAAG,KACH,EAAG,KACH,EAAG,IACJ,EACD,CACE,EAAG,KACH,EAAG,KACH,EAAG,IACJ,EACD,CACE,EAAG,KACH,EAAG,MACH,EAAG,IACJ,EACD,CACE,EAAG,KACH,EAAG,MACH,EAAG,IACnC,CACA,CAC2B,EACD,UAAW,CACT,SAAU,CACR,EAAG,EACH,EAAG,EACH,EAAG,CACJ,EACD,YAAa,CACX,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,CACjC,CAC2B,EACD,GAAI,KACL,EACD,CACE,YAAa,CACX,SAAU,CACR,CACE,EAAG,KACH,EAAG,KACH,EAAG,IACJ,EACD,CACE,EAAG,KACH,EAAG,KACH,EAAG,IACJ,EACD,CACE,EAAG,KACH,EAAG,KACH,EAAG,KACJ,EACD,CACE,EAAG,KACH,EAAG,KACH,EAAG,KACnC,CACA,CAC2B,EACD,UAAW,CACT,SAAU,CACR,EAAG,EACH,EAAG,EACH,EAAG,CACJ,EACD,YAAa,CACX,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,CACjC,CAC2B,EACD,GAAI,KACL,EACD,CACE,YAAa,CACX,SAAU,CACR,CACE,EAAG,KACH,EAAG,KACH,EAAG,IACJ,EACD,CACE,EAAG,KACH,EAAG,MACH,EAAG,IACJ,EACD,CACE,EAAG,KACH,EAAG,MACH,EAAG,KACJ,EACD,CACE,EAAG,KACH,EAAG,KACH,EAAG,KACnC,CACA,CAC2B,EACD,UAAW,CACT,SAAU,CACR,EAAG,EACH,EAAG,EACH,EAAG,CACJ,EACD,YAAa,CACX,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,CACjC,CAC2B,EACD,GAAI,KAC9B,CACA,CACqB,EACD,UAAW,CACT,SAAU,CACR,EAAG,EACH,EAAG,EACH,EAAG,CACJ,EACD,YAAa,CACX,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,CAC3B,CACqB,EACD,GAAI,eACL,EACD,iBAAkB,CACnB,EACD,CACE,GAAI,EACJ,SAAU,EACV,SAAU,CACR,YAAa,CACX,SAAU,CACR,CACE,EAAG,KACH,EAAG,KACH,EAAG,KACJ,EACD,CACE,EAAG,IACH,EAAG,KACH,EAAG,KACJ,EACD,CACE,EAAG,IACH,EAAG,KACH,EAAG,KACJ,EACD,CACE,EAAG,KACH,EAAG,KACH,EAAG,KACJ,EACD,CACE,EAAG,KACH,EAAG,KACH,EAAG,IACJ,EACD,CACE,EAAG,IACH,EAAG,KACH,EAAG,IACJ,EACD,CACE,EAAG,IACH,EAAG,KACH,EAAG,IACJ,EACD,CACE,EAAG,KACH,EAAG,KACH,EAAG,IAC7B,CACA,CACqB,EACD,UAAW,CACT,SAAU,CACR,EAAG,EACH,EAAG,EACH,EAAG,CACJ,EACD,YAAa,CACX,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,CAC3B,CACqB,EACD,GAAI,WACL,EACD,iBAAkB,CACnB,EACD,CACE,GAAI,EACJ,SAAU,EACV,SAAU,CACR,YAAa,CACX,SAAU,CACR,CACE,EAAG,KACH,EAAG,KACH,EAAG,IACJ,EACD,CACE,EAAG,IACH,EAAG,KACH,EAAG,IACJ,EACD,CACE,EAAG,IACH,EAAG,IACH,EAAG,IACJ,EACD,CACE,EAAG,KACH,EAAG,IACH,EAAG,IACJ,EACD,CACE,EAAG,KACH,EAAG,KACH,EAAG,KACJ,EACD,CACE,EAAG,IACH,EAAG,KACH,EAAG,KACJ,EACD,CACE,EAAG,IACH,EAAG,IACH,EAAG,KACJ,EACD,CACE,EAAG,KACH,EAAG,IACH,EAAG,KAC7B,CACA,CACqB,EACD,UAAW,CACT,SAAU,CACR,EAAG,EACH,EAAG,EACH,EAAG,CACJ,EACD,YAAa,CACX,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,CAC3B,CACqB,EACD,GAAI,OACL,EACD,iBAAkB,CACnB,EACD,CACE,GAAI,EACJ,SAAU,EACV,SAAU,CACR,YAAa,CACX,SAAU,CACR,CACE,EAAG,KACH,EAAG,KACH,EAAG,IACJ,EACD,CACE,EAAG,IACH,EAAG,KACH,EAAG,IACJ,EACD,CACE,EAAG,IACH,EAAG,MACH,EAAG,IACJ,EACD,CACE,EAAG,KACH,EAAG,MACH,EAAG,IACJ,EACD,CACE,EAAG,KACH,EAAG,KACH,EAAG,KACJ,EACD,CACE,EAAG,IACH,EAAG,KACH,EAAG,KACJ,EACD,CACE,EAAG,IACH,EAAG,MACH,EAAG,KACJ,EACD,CACE,EAAG,KACH,EAAG,MACH,EAAG,KAC7B,CACA,CACqB,EACD,UAAW,CACT,SAAU,CACR,EAAG,EACH,EAAG,EACH,EAAG,CACJ,EACD,YAAa,CACX,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,CAC3B,CACqB,EACD,GAAI,kBACL,EACD,iBAAkB,CACnB,EACD,CACE,GAAI,EACJ,SAAU,EACV,SAAU,CACR,YAAa,CACX,SAAU,CACR,CACE,EAAG,KACH,EAAG,KACH,EAAG,KACJ,EACD,CACE,EAAG,IACH,EAAG,KACH,EAAG,KACJ,EACD,CACE,EAAG,IACH,EAAG,IACH,EAAG,KACJ,EACD,CACE,EAAG,KACH,EAAG,IACH,EAAG,KACJ,EACD,CACE,EAAG,KACH,EAAG,KACH,EAAG,IACJ,EACD,CACE,EAAG,IACH,EAAG,KACH,EAAG,IACJ,EACD,CACE,EAAG,IACH,EAAG,IACH,EAAG,IACJ,EACD,CACE,EAAG,KACH,EAAG,IACH,EAAG,IAC7B,CACA,CACqB,EACD,UAAW,CACT,SAAU,CACR,EAAG,EACH,EAAG,EACH,EAAG,CACJ,EACD,YAAa,CACX,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,CAC3B,CACqB,EACD,GAAI,YACL,EACD,iBAAkB,CACpC,CACe,EACD,uBAAwB,CACtB,CACE,WAAY,EACZ,SAAU,CACR,OAAQ,CACN,OAAQ,GACT,EACD,UAAW,CACT,SAAU,CACR,EAAG,IACH,EAAG,IACH,EAAG,GACJ,EACD,YAAa,CACX,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,CAC3B,CACqB,EACD,GAAI,cACxB,CACiB,EACD,CACE,WAAY,EACZ,SAAU,CACR,QAAS,CACP,OAAQ,IACR,gBAAiB,GAClB,EACD,UAAW,CACT,SAAU,CACR,EAAG,KACH,EAAG,GACH,EAAG,GACJ,EACD,YAAa,CACX,EAAG,EACH,EAAG,mBACH,EAAG,EACH,EAAG,iBAC3B,CACqB,EACD,GAAI,eACxB,CACiB,EACD,CACE,WAAY,EACZ,SAAU,CACR,OAAQ,CACN,OAAQ,GACT,EACD,UAAW,CACT,SAAU,CACR,EAAG,KACH,EAAG,GACH,EAAG,IACJ,EACD,YAAa,CACX,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,CAC3B,CACqB,EACD,GAAI,cACxB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","x_google_ignoreList":[0,1,2,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,362,363,364,365,366,367,368,369,370,372,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,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,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,631]}