@wandelbots/wandelbots-js-react-components 3.2.0-pr.feat-improve-exports.414.40b4b4e → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/README.md +2 -79
  2. package/dist/components/jogging/JoggingStore.d.ts +1 -1
  3. package/dist/index.cjs +155 -0
  4. package/dist/index.cjs.map +1 -0
  5. package/dist/index.js +30530 -0
  6. package/dist/index.js.map +1 -0
  7. package/package.json +3 -24
  8. package/dist/3d.cjs.js +0 -2
  9. package/dist/3d.cjs.js.map +0 -1
  10. package/dist/3d.d.ts +0 -11
  11. package/dist/3d.d.ts.map +0 -1
  12. package/dist/3d.es.js +0 -16
  13. package/dist/3d.es.js.map +0 -1
  14. package/dist/PoseJointValues-C3bsJdfd.js +0 -5446
  15. package/dist/PoseJointValues-C3bsJdfd.js.map +0 -1
  16. package/dist/PoseJointValues-wLOjcYDe.cjs +0 -21
  17. package/dist/PoseJointValues-wLOjcYDe.cjs.map +0 -1
  18. package/dist/ProgramStateIndicator-CTT-CAcJ.js +0 -268
  19. package/dist/ProgramStateIndicator-CTT-CAcJ.js.map +0 -1
  20. package/dist/ProgramStateIndicator-DYKBcj1s.cjs +0 -2
  21. package/dist/ProgramStateIndicator-DYKBcj1s.cjs.map +0 -1
  22. package/dist/VelocitySlider-2Zme2MN7.cjs +0 -5
  23. package/dist/VelocitySlider-2Zme2MN7.cjs.map +0 -1
  24. package/dist/VelocitySlider-QSg_8eb1.js +0 -1906
  25. package/dist/VelocitySlider-QSg_8eb1.js.map +0 -1
  26. package/dist/core.cjs.js +0 -2
  27. package/dist/core.cjs.js.map +0 -1
  28. package/dist/core.d.ts +0 -23
  29. package/dist/core.d.ts.map +0 -1
  30. package/dist/core.es.js +0 -46
  31. package/dist/core.es.js.map +0 -1
  32. package/dist/createSvgIcon-BG4_bQuX.cjs +0 -56
  33. package/dist/createSvgIcon-BG4_bQuX.cjs.map +0 -1
  34. package/dist/createSvgIcon-D3GRPlVu.js +0 -3072
  35. package/dist/createSvgIcon-D3GRPlVu.js.map +0 -1
  36. package/dist/data.cjs.js +0 -2
  37. package/dist/data.cjs.js.map +0 -1
  38. package/dist/data.d.ts +0 -4
  39. package/dist/data.d.ts.map +0 -1
  40. package/dist/data.es.js +0 -7
  41. package/dist/data.es.js.map +0 -1
  42. package/dist/externalizeComponent-C12Qf79R.cjs +0 -24
  43. package/dist/externalizeComponent-C12Qf79R.cjs.map +0 -1
  44. package/dist/externalizeComponent-RpcZ_G17.js +0 -491
  45. package/dist/externalizeComponent-RpcZ_G17.js.map +0 -1
  46. package/dist/index-8UEqiXug.cjs +0 -7
  47. package/dist/index-8UEqiXug.cjs.map +0 -1
  48. package/dist/index-CQDi5W62.cjs +0 -2
  49. package/dist/index-CQDi5W62.cjs.map +0 -1
  50. package/dist/index-DSz82V23.js +0 -1801
  51. package/dist/index-DSz82V23.js.map +0 -1
  52. package/dist/index-DZubFUuo.js +0 -4909
  53. package/dist/index-DZubFUuo.js.map +0 -1
  54. package/dist/index-MyU3fVEK.cjs +0 -50
  55. package/dist/index-MyU3fVEK.cjs.map +0 -1
  56. package/dist/index-VURe0U2S.js +0 -9443
  57. package/dist/index-VURe0U2S.js.map +0 -1
  58. package/dist/index.cjs.js +0 -2
  59. package/dist/index.cjs.js.map +0 -1
  60. package/dist/index.es.js +0 -72
  61. package/dist/index.es.js.map +0 -1
  62. package/dist/interpolation-CVSmVNjc.cjs +0 -2
  63. package/dist/interpolation-CVSmVNjc.cjs.map +0 -1
  64. package/dist/interpolation-DjBX_Si-.js +0 -138
  65. package/dist/interpolation-DjBX_Si-.js.map +0 -1
  66. package/dist/jogging.cjs.js +0 -2
  67. package/dist/jogging.cjs.js.map +0 -1
  68. package/dist/jogging.d.ts +0 -9
  69. package/dist/jogging.d.ts.map +0 -1
  70. package/dist/jogging.es.js +0 -12
  71. package/dist/jogging.es.js.map +0 -1
  72. package/dist/manufacturerHomePositions-DHqcbFON.js +0 -979
  73. package/dist/manufacturerHomePositions-DHqcbFON.js.map +0 -1
  74. package/dist/manufacturerHomePositions-zd-CKEiQ.cjs +0 -2
  75. package/dist/manufacturerHomePositions-zd-CKEiQ.cjs.map +0 -1
  76. package/dist/theming-BO8z_Hpa.js +0 -2198
  77. package/dist/theming-BO8z_Hpa.js.map +0 -1
  78. package/dist/theming-D5DvGuxX.cjs +0 -4
  79. package/dist/theming-D5DvGuxX.cjs.map +0 -1
  80. package/dist/useThemeProps-P648Ox74.cjs +0 -2
  81. package/dist/useThemeProps-P648Ox74.cjs.map +0 -1
  82. package/dist/useThemeProps-jE_Qg6SI.js +0 -40
  83. package/dist/useThemeProps-jE_Qg6SI.js.map +0 -1
  84. package/src/3d.ts +0 -15
  85. package/src/core.ts +0 -23
  86. package/src/data.ts +0 -4
  87. package/src/jogging.ts +0 -9
@@ -1 +0,0 @@
1
- {"version":3,"file":"PoseJointValues-wLOjcYDe.cjs","sources":["../node_modules/@mui/system/esm/styleFunctionSx/extendSxProp.js","../node_modules/@mui/system/esm/styled/styled.js","../node_modules/@mui/system/esm/Stack/createStack.js","../node_modules/@mui/material/esm/Stack/Stack.js","../src/icons/jog-minus.svg","../src/icons/jog-plus.svg","../src/components/jogging/JoggingCartesianAxisControl.tsx","../node_modules/@mui/icons-material/esm/ChevronLeft.js","../node_modules/@mui/icons-material/esm/ChevronRight.js","../node_modules/lodash-es/isObject.js","../node_modules/lodash-es/now.js","../node_modules/lodash-es/_trimmedEndIndex.js","../node_modules/lodash-es/_baseTrim.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/reconnecting-websocket/dist/reconnecting-websocket-mjs.js","../node_modules/@wandelbots/nova-js/dist/LoginWithAuth0-wQB-Sol1.mjs","../node_modules/url-join/lib/url-join.js","../node_modules/path-to-regexp/dist/index.js","../node_modules/@wandelbots/nova-js/dist/lib/v2/index.mjs","../node_modules/three/src/math/MathUtils.js","../node_modules/three/src/math/Quaternion.js","../node_modules/three/src/math/Vector3.js","../src/lib/MotionStreamConnection.ts","../src/lib/JoggerConnection.ts","../node_modules/lodash-es/isFunction.js","../node_modules/lodash-es/_coreJsData.js","../node_modules/lodash-es/_isMasked.js","../node_modules/lodash-es/_toSource.js","../node_modules/lodash-es/_baseIsNative.js","../node_modules/lodash-es/_getValue.js","../node_modules/lodash-es/_getNative.js","../node_modules/lodash-es/_defineProperty.js","../node_modules/lodash-es/_baseAssignValue.js","../node_modules/lodash-es/_arrayAggregator.js","../node_modules/lodash-es/_createBaseFor.js","../node_modules/lodash-es/_baseFor.js","../node_modules/lodash-es/_baseTimes.js","../node_modules/lodash-es/_baseIsArguments.js","../node_modules/lodash-es/isArguments.js","../node_modules/lodash-es/isArray.js","../node_modules/lodash-es/stubFalse.js","../node_modules/lodash-es/isBuffer.js","../node_modules/lodash-es/_isIndex.js","../node_modules/lodash-es/isLength.js","../node_modules/lodash-es/_baseIsTypedArray.js","../node_modules/lodash-es/_baseUnary.js","../node_modules/lodash-es/_nodeUtil.js","../node_modules/lodash-es/isTypedArray.js","../node_modules/lodash-es/_arrayLikeKeys.js","../node_modules/lodash-es/_isPrototype.js","../node_modules/lodash-es/_overArg.js","../node_modules/lodash-es/_nativeKeys.js","../node_modules/lodash-es/_baseKeys.js","../node_modules/lodash-es/isArrayLike.js","../node_modules/lodash-es/keys.js","../node_modules/lodash-es/_baseForOwn.js","../node_modules/lodash-es/_createBaseEach.js","../node_modules/lodash-es/_baseEach.js","../node_modules/lodash-es/_baseAggregator.js","../node_modules/lodash-es/_listCacheClear.js","../node_modules/lodash-es/eq.js","../node_modules/lodash-es/_assocIndexOf.js","../node_modules/lodash-es/_listCacheDelete.js","../node_modules/lodash-es/_listCacheGet.js","../node_modules/lodash-es/_listCacheHas.js","../node_modules/lodash-es/_listCacheSet.js","../node_modules/lodash-es/_ListCache.js","../node_modules/lodash-es/_stackClear.js","../node_modules/lodash-es/_stackDelete.js","../node_modules/lodash-es/_stackGet.js","../node_modules/lodash-es/_stackHas.js","../node_modules/lodash-es/_Map.js","../node_modules/lodash-es/_nativeCreate.js","../node_modules/lodash-es/_hashClear.js","../node_modules/lodash-es/_hashDelete.js","../node_modules/lodash-es/_hashGet.js","../node_modules/lodash-es/_hashHas.js","../node_modules/lodash-es/_hashSet.js","../node_modules/lodash-es/_Hash.js","../node_modules/lodash-es/_mapCacheClear.js","../node_modules/lodash-es/_isKeyable.js","../node_modules/lodash-es/_getMapData.js","../node_modules/lodash-es/_mapCacheDelete.js","../node_modules/lodash-es/_mapCacheGet.js","../node_modules/lodash-es/_mapCacheHas.js","../node_modules/lodash-es/_mapCacheSet.js","../node_modules/lodash-es/_MapCache.js","../node_modules/lodash-es/_stackSet.js","../node_modules/lodash-es/_Stack.js","../node_modules/lodash-es/_setCacheAdd.js","../node_modules/lodash-es/_setCacheHas.js","../node_modules/lodash-es/_SetCache.js","../node_modules/lodash-es/_arraySome.js","../node_modules/lodash-es/_cacheHas.js","../node_modules/lodash-es/_equalArrays.js","../node_modules/lodash-es/_Uint8Array.js","../node_modules/lodash-es/_mapToArray.js","../node_modules/lodash-es/_setToArray.js","../node_modules/lodash-es/_equalByTag.js","../node_modules/lodash-es/_arrayPush.js","../node_modules/lodash-es/_baseGetAllKeys.js","../node_modules/lodash-es/_arrayFilter.js","../node_modules/lodash-es/stubArray.js","../node_modules/lodash-es/_getSymbols.js","../node_modules/lodash-es/_getAllKeys.js","../node_modules/lodash-es/_equalObjects.js","../node_modules/lodash-es/_DataView.js","../node_modules/lodash-es/_Promise.js","../node_modules/lodash-es/_Set.js","../node_modules/lodash-es/_WeakMap.js","../node_modules/lodash-es/_getTag.js","../node_modules/lodash-es/_baseIsEqualDeep.js","../node_modules/lodash-es/_baseIsEqual.js","../node_modules/lodash-es/_baseIsMatch.js","../node_modules/lodash-es/_isStrictComparable.js","../node_modules/lodash-es/_getMatchData.js","../node_modules/lodash-es/_matchesStrictComparable.js","../node_modules/lodash-es/_baseMatches.js","../node_modules/lodash-es/_isKey.js","../node_modules/lodash-es/memoize.js","../node_modules/lodash-es/_memoizeCapped.js","../node_modules/lodash-es/_stringToPath.js","../node_modules/lodash-es/_arrayMap.js","../node_modules/lodash-es/_baseToString.js","../node_modules/lodash-es/toString.js","../node_modules/lodash-es/_castPath.js","../node_modules/lodash-es/_toKey.js","../node_modules/lodash-es/_baseGet.js","../node_modules/lodash-es/get.js","../node_modules/lodash-es/_baseHasIn.js","../node_modules/lodash-es/_hasPath.js","../node_modules/lodash-es/hasIn.js","../node_modules/lodash-es/_baseMatchesProperty.js","../node_modules/lodash-es/identity.js","../node_modules/lodash-es/_baseProperty.js","../node_modules/lodash-es/_basePropertyDeep.js","../node_modules/lodash-es/property.js","../node_modules/lodash-es/_baseIteratee.js","../node_modules/lodash-es/_createAggregator.js","../node_modules/lodash-es/keyBy.js","../node_modules/lodash-es/uniqueId.js","../src/components/jogging/JoggingStore.ts","../src/components/jogging/JoggingBlocked.tsx","../src/icons/axis-x.svg","../src/icons/axis-y.svg","../src/icons/axis-z.svg","../src/icons/rotation.svg","../node_modules/lodash-es/isEqual.js","../src/components/jogging/JoggingJointLimitDetector.tsx","../src/components/experimental/utils/AdornedSelect.tsx","../src/components/jogging/JoggingOptions.tsx","../src/components/jogging/JoggingToggleButtonGroup.tsx","../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"],"sourcesContent":["import { isPlainObject } from '@mui/utils/deepmerge';\nimport defaultSxConfig from \"./defaultSxConfig.js\";\nconst splitProps = props => {\n const result = {\n systemProps: {},\n otherProps: {}\n };\n const config = props?.theme?.unstable_sxConfig ?? defaultSxConfig;\n Object.keys(props).forEach(prop => {\n if (config[prop]) {\n result.systemProps[prop] = props[prop];\n } else {\n result.otherProps[prop] = props[prop];\n }\n });\n return result;\n};\nexport default function extendSxProp(props) {\n const {\n sx: inSx,\n ...other\n } = props;\n const {\n systemProps,\n otherProps\n } = splitProps(other);\n let finalSx;\n if (Array.isArray(inSx)) {\n finalSx = [systemProps, ...inSx];\n } else if (typeof inSx === 'function') {\n finalSx = (...args) => {\n const result = inSx(...args);\n if (!isPlainObject(result)) {\n return systemProps;\n }\n return {\n ...systemProps,\n ...result\n };\n };\n } else {\n finalSx = {\n ...systemProps,\n ...inSx\n };\n }\n return {\n ...otherProps,\n sx: finalSx\n };\n}","import createStyled from \"../createStyled/index.js\";\nconst styled = createStyled();\nexport default styled;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport deepmerge from '@mui/utils/deepmerge';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nimport composeClasses from '@mui/utils/composeClasses';\nimport systemStyled from \"../styled/index.js\";\nimport useThemePropsSystem from \"../useThemeProps/index.js\";\nimport { extendSxProp } from \"../styleFunctionSx/index.js\";\nimport createTheme from \"../createTheme/index.js\";\nimport { handleBreakpoints, mergeBreakpointsInOrder, resolveBreakpointValues } from \"../breakpoints/index.js\";\nimport { createUnarySpacing, getValue } from \"../spacing/index.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst defaultTheme = createTheme();\n// widening Theme to any so that the consumer can own the theme structure.\nconst defaultCreateStyledComponent = systemStyled('div', {\n name: 'MuiStack',\n slot: 'Root'\n});\nfunction useThemePropsDefault(props) {\n return useThemePropsSystem({\n props,\n name: 'MuiStack',\n defaultTheme\n });\n}\n\n/**\n * Return an array with the separator React element interspersed between\n * each React node of the input children.\n *\n * > joinChildren([1,2,3], 0)\n * [1,0,2,0,3]\n */\nfunction joinChildren(children, separator) {\n const childrenArray = React.Children.toArray(children).filter(Boolean);\n return childrenArray.reduce((output, child, index) => {\n output.push(child);\n if (index < childrenArray.length - 1) {\n output.push(/*#__PURE__*/React.cloneElement(separator, {\n key: `separator-${index}`\n }));\n }\n return output;\n }, []);\n}\nconst getSideFromDirection = direction => {\n return {\n row: 'Left',\n 'row-reverse': 'Right',\n column: 'Top',\n 'column-reverse': 'Bottom'\n }[direction];\n};\nexport const style = ({\n ownerState,\n theme\n}) => {\n let styles = {\n display: 'flex',\n flexDirection: 'column',\n ...handleBreakpoints({\n theme\n }, resolveBreakpointValues({\n values: ownerState.direction,\n breakpoints: theme.breakpoints.values\n }), propValue => ({\n flexDirection: propValue\n }))\n };\n if (ownerState.spacing) {\n const transformer = createUnarySpacing(theme);\n const base = Object.keys(theme.breakpoints.values).reduce((acc, breakpoint) => {\n if (typeof ownerState.spacing === 'object' && ownerState.spacing[breakpoint] != null || typeof ownerState.direction === 'object' && ownerState.direction[breakpoint] != null) {\n acc[breakpoint] = true;\n }\n return acc;\n }, {});\n const directionValues = resolveBreakpointValues({\n values: ownerState.direction,\n base\n });\n const spacingValues = resolveBreakpointValues({\n values: ownerState.spacing,\n base\n });\n if (typeof directionValues === 'object') {\n Object.keys(directionValues).forEach((breakpoint, index, breakpoints) => {\n const directionValue = directionValues[breakpoint];\n if (!directionValue) {\n const previousDirectionValue = index > 0 ? directionValues[breakpoints[index - 1]] : 'column';\n directionValues[breakpoint] = previousDirectionValue;\n }\n });\n }\n const styleFromPropValue = (propValue, breakpoint) => {\n if (ownerState.useFlexGap) {\n return {\n gap: getValue(transformer, propValue)\n };\n }\n return {\n // The useFlexGap={false} implement relies on each child to give up control of the margin.\n // We need to reset the margin to avoid double spacing.\n '& > :not(style):not(style)': {\n margin: 0\n },\n '& > :not(style) ~ :not(style)': {\n [`margin${getSideFromDirection(breakpoint ? directionValues[breakpoint] : ownerState.direction)}`]: getValue(transformer, propValue)\n }\n };\n };\n styles = deepmerge(styles, handleBreakpoints({\n theme\n }, spacingValues, styleFromPropValue));\n }\n styles = mergeBreakpointsInOrder(theme.breakpoints, styles);\n return styles;\n};\nexport default function createStack(options = {}) {\n const {\n // This will allow adding custom styled fn (for example for custom sx style function)\n createStyledComponent = defaultCreateStyledComponent,\n useThemeProps = useThemePropsDefault,\n componentName = 'MuiStack'\n } = options;\n const useUtilityClasses = () => {\n const slots = {\n root: ['root']\n };\n return composeClasses(slots, slot => generateUtilityClass(componentName, slot), {});\n };\n const StackRoot = createStyledComponent(style);\n const Stack = /*#__PURE__*/React.forwardRef(function Grid(inProps, ref) {\n const themeProps = useThemeProps(inProps);\n const props = extendSxProp(themeProps); // `color` type conflicts with html color attribute.\n const {\n component = 'div',\n direction = 'column',\n spacing = 0,\n divider,\n children,\n className,\n useFlexGap = false,\n ...other\n } = props;\n const ownerState = {\n direction,\n spacing,\n useFlexGap\n };\n const classes = useUtilityClasses();\n return /*#__PURE__*/_jsx(StackRoot, {\n as: component,\n ownerState: ownerState,\n ref: ref,\n className: clsx(classes.root, className),\n ...other,\n children: divider ? joinChildren(children, divider) : children\n });\n });\n process.env.NODE_ENV !== \"production\" ? Stack.propTypes /* remove-proptypes */ = {\n children: PropTypes.node,\n direction: PropTypes.oneOfType([PropTypes.oneOf(['column-reverse', 'column', 'row-reverse', 'row']), PropTypes.arrayOf(PropTypes.oneOf(['column-reverse', 'column', 'row-reverse', 'row'])), PropTypes.object]),\n divider: PropTypes.node,\n spacing: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string])), PropTypes.number, PropTypes.object, PropTypes.string]),\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n } : void 0;\n return Stack;\n}","'use client';\n\nimport PropTypes from 'prop-types';\nimport { createStack } from '@mui/system';\nimport styled from \"../styles/styled.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nconst Stack = createStack({\n createStyledComponent: styled('div', {\n name: 'MuiStack',\n slot: 'Root'\n }),\n useThemeProps: inProps => useDefaultProps({\n props: inProps,\n name: 'MuiStack'\n })\n});\nprocess.env.NODE_ENV !== \"production\" ? Stack.propTypes /* remove-proptypes */ = {\n // ┌────────────────────────────── Warning ──────────────────────────────┐\n // │ These PropTypes are generated from the TypeScript type definitions. │\n // │ To update them, edit the d.ts file and run `pnpm proptypes`. │\n // └─────────────────────────────────────────────────────────────────────┘\n /**\n * The content of the component.\n */\n children: PropTypes.node,\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: PropTypes.elementType,\n /**\n * Defines the `flex-direction` style property.\n * It is applied for all screen sizes.\n * @default 'column'\n */\n direction: PropTypes.oneOfType([PropTypes.oneOf(['column-reverse', 'column', 'row-reverse', 'row']), PropTypes.arrayOf(PropTypes.oneOf(['column-reverse', 'column', 'row-reverse', 'row'])), PropTypes.object]),\n /**\n * Add an element between each child.\n */\n divider: PropTypes.node,\n /**\n * Defines the space between immediate children.\n * @default 0\n */\n spacing: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string])), PropTypes.number, PropTypes.object, PropTypes.string]),\n /**\n * The system prop, which allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n /**\n * If `true`, the CSS flexbox `gap` is used instead of applying `margin` to children.\n *\n * While CSS `gap` removes the [known limitations](https://mui.com/joy-ui/react-stack/#limitations),\n * it is not fully supported in some browsers. We recommend checking https://caniuse.com/?search=flex%20gap before using this flag.\n *\n * To enable this flag globally, follow the [theme's default props](https://mui.com/material-ui/customization/theme-components/#default-props) configuration.\n * @default false\n */\n useFlexGap: PropTypes.bool\n} : void 0;\nexport default Stack;","import * as React from \"react\";\nimport { forwardRef } from \"react\";\nconst SvgJogMinus = ({\n title,\n titleId,\n ...props\n}, ref) => /* @__PURE__ */ React.createElement(\"svg\", { width: 21, height: 21, viewBox: \"0 0 21 21\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ref, \"aria-labelledby\": titleId, ...props }, title ? /* @__PURE__ */ React.createElement(\"title\", { id: titleId }, title) : null, /* @__PURE__ */ React.createElement(\"g\", { id: \"JogMinus\" }, /* @__PURE__ */ React.createElement(\"path\", { id: \"Minus\", d: \"M0 13V8H21V13H0Z\", fill: \"white\" })));\nconst ForwardRef = forwardRef(SvgJogMinus);\nexport default ForwardRef;\n","import * as React from \"react\";\nimport { forwardRef } from \"react\";\nconst SvgJogPlus = ({\n title,\n titleId,\n ...props\n}, ref) => /* @__PURE__ */ React.createElement(\"svg\", { width: 21, height: 21, viewBox: \"0 0 21 21\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ref, \"aria-labelledby\": titleId, ...props }, title ? /* @__PURE__ */ React.createElement(\"title\", { id: titleId }, title) : null, /* @__PURE__ */ React.createElement(\"g\", { id: \"JogPlus\" }, /* @__PURE__ */ React.createElement(\"g\", { id: \"Plus\" }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M0 13V8H8V13H0Z\", fill: \"white\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M8 0L13 2.18557e-07L13 21H8L8 0Z\", fill: \"white\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M13 13V8H21V13H13Z\", fill: \"white\" }))));\nconst ForwardRef = forwardRef(SvgJogPlus);\nexport default ForwardRef;\n","import { IconButton, Typography, useTheme } from \"@mui/material\"\nimport Stack from \"@mui/material/Stack\"\nimport { observer } from \"mobx-react-lite\"\nimport React, { useEffect, useRef, useState, type ReactNode } from \"react\"\nimport { externalizeComponent } from \"../../externalizeComponent\"\nimport JogMinus from \"../../icons/jog-minus.svg\"\nimport JogPlus from \"../../icons/jog-plus.svg\"\nimport type { AxisControlComponentColors } from \"../../themes/themeTypes\"\nimport { useAnimationFrame } from \"../utils/hooks\"\nimport type { JoggingDirection } from \"./JoggingStore\"\n\ntype JoggingCartesianAxisControlProps = {\n colors?: AxisControlComponentColors\n label: ReactNode\n getDisplayedValue: () => string\n startJogging: (direction: JoggingDirection) => void\n stopJogging: () => void\n disabled?: boolean\n /** If set, the corresponding button will be rendered in the pressed state */\n activeJoggingDirection?: JoggingDirection\n} & React.ComponentProps<typeof Stack>\n\n/** A input widget to control an individual cartesian axis */\nexport const JoggingCartesianAxisControl = externalizeComponent(\n observer(\n ({\n colors,\n label,\n getDisplayedValue,\n startJogging,\n stopJogging,\n disabled,\n activeJoggingDirection,\n ...rest\n }: JoggingCartesianAxisControlProps) => {\n useAnimationFrame(() => {\n const displayValue = getDisplayedValue()\n const element = valueContainerRef.current\n if (!element) return\n\n element.textContent = displayValue\n })\n const theme = useTheme()\n\n const [localActiveJoggingDirection, setLocalActiveJoggingDirection] =\n useState<JoggingDirection | null>(null)\n\n // Trigger pointer \"release\" events because e.g. firefox does not trigger pointer events as soon as a component is disabled\n useEffect(() => {\n if (!disabled) {\n return\n }\n onPointerUpOrOut()\n }, [disabled])\n\n // Handle both controlled and uncontrolled states\n const showJoggingDirection =\n activeJoggingDirection || localActiveJoggingDirection\n\n const valueContainerRef = useRef<HTMLParagraphElement>(null)\n\n if (!colors) {\n colors = {\n color: \"#fff\",\n backgroundColor: \"#000\",\n borderColor: \"#000\",\n buttonBackgroundColor: {\n disabled: \"#000\",\n default: \"#000\",\n hovered: \"#000\",\n pressed: \"#000\",\n },\n labelColor: \"#000\",\n }\n }\n\n const borderColor = showJoggingDirection\n ? colors.buttonBackgroundColor?.pressed\n : colors.borderColor\n\n const sxAxisControlButtonBase = {\n width: \"55px\",\n color: colors.color,\n path: { fill: colors.color },\n alignContent: \"center\",\n fontSize: \"37px\",\n svg: {\n pointerEvents: \"none\",\n },\n }\n\n const sxAxisControlButtonDefault = {\n ...sxAxisControlButtonBase,\n backgroundColor: colors.buttonBackgroundColor?.default,\n \":hover\": {\n backgroundColor: colors.buttonBackgroundColor?.hovered,\n },\n \":active\": {\n backgroundColor: colors.buttonBackgroundColor?.pressed,\n color: colors.backgroundColor,\n path: { fill: colors.backgroundColor },\n },\n \":disabled\": {\n backgroundColor: colors.buttonBackgroundColor?.disabled,\n \"svg path\": { fill: theme.palette.action.disabled },\n },\n }\n\n const sxAxisControlButtonPressed = {\n ...sxAxisControlButtonBase,\n backgroundColor: colors.buttonBackgroundColor?.pressed,\n color: colors.backgroundColor,\n path: { fill: colors.backgroundColor },\n \":disabled\": {\n backgroundColor: colors.buttonBackgroundColor?.pressed,\n \"svg path\": { fill: theme.palette.action.disabled },\n },\n }\n\n function onPointerDown(\n ev: React.PointerEvent,\n direction: JoggingDirection,\n ) {\n if (disabled) {\n return\n }\n\n if (ev.button === 0) {\n setLocalActiveJoggingDirection(direction)\n startJogging(direction)\n }\n }\n\n function onPointerUpOrOut() {\n setLocalActiveJoggingDirection(null)\n stopJogging()\n }\n\n return (\n <Stack height=\"64px\" direction=\"row\" justifyContent=\"center\" {...rest}>\n <IconButton\n disabled={disabled}\n disableRipple\n onPointerDown={(ev: React.PointerEvent) => onPointerDown(ev, \"-\")}\n onPointerUp={onPointerUpOrOut}\n onPointerOut={onPointerUpOrOut}\n size=\"large\"\n sx={{\n ...(showJoggingDirection === \"-\"\n ? sxAxisControlButtonPressed\n : sxAxisControlButtonDefault),\n borderRadius: \"16px 0px 0px 16px\",\n borderLeft: `2px solid ${borderColor ?? \"#fff\"}`,\n borderBottom: `2px solid ${borderColor ?? \"#fff\"}`,\n borderTop: `2px solid ${borderColor ?? \"#fff\"}`,\n }}\n >\n <JogMinus />\n </IconButton>\n\n <Stack\n spacing=\"6px\"\n sx={{\n width: \"150px\",\n backgroundColor: colors.backgroundColor,\n alignItems: \"center\",\n justifyContent: \"center\",\n opacity: \"0.9\",\n borderBottom: `2px solid ${borderColor ?? \"#fff\"}`,\n borderTop: `2px solid ${borderColor ?? \"#fff\"}`,\n }}\n >\n <Stack\n height=\"22px\"\n direction=\"row\"\n alignItems=\"center\"\n justifyItems=\"center\"\n spacing={1}\n sx={{\n userSelect: \"none\",\n color: colors.color,\n \".MuiTypography-root\": {\n fontWeight: 700,\n ...(disabled ? { color: theme.palette.action.disabled } : {}),\n },\n ...(disabled\n ? { \"svg path\": { fill: theme.palette.action.disabled } }\n : {}),\n }}\n >\n {label}\n </Stack>\n <Typography\n height=\"22px\"\n sx={{\n fontSize: \"15px\",\n color: disabled ? theme.palette.action.disabled : colors.color,\n fontWeight: 700,\n }}\n ref={valueContainerRef}\n >\n {getDisplayedValue()}\n </Typography>\n </Stack>\n\n <IconButton\n disableRipple\n disabled={disabled}\n onPointerDown={(ev: React.PointerEvent) => onPointerDown(ev, \"+\")}\n onPointerUp={onPointerUpOrOut}\n onPointerOut={onPointerUpOrOut}\n size=\"large\"\n sx={{\n ...(showJoggingDirection === \"+\"\n ? sxAxisControlButtonPressed\n : sxAxisControlButtonDefault),\n borderRadius: \"0px 16px 16px 0px\",\n borderRight: `2px solid ${borderColor ?? \"#fff\"}`,\n borderBottom: `2px solid ${borderColor ?? \"#fff\"}`,\n borderTop: `2px solid ${borderColor ?? \"#fff\"}`,\n }}\n >\n <JogPlus />\n </IconButton>\n </Stack>\n )\n },\n ),\n)\n","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M15.41 7.41 14 6l-6 6 6 6 1.41-1.41L10.83 12z\"\n}), 'ChevronLeft');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M10 6 8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\"\n}), 'ChevronRight');","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","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 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');","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nfunction __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nfunction __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nfunction __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\n\nvar Event = /** @class */ (function () {\r\n function Event(type, target) {\r\n this.target = target;\r\n this.type = type;\r\n }\r\n return Event;\r\n}());\r\nvar ErrorEvent = /** @class */ (function (_super) {\r\n __extends(ErrorEvent, _super);\r\n function ErrorEvent(error, target) {\r\n var _this = _super.call(this, 'error', target) || this;\r\n _this.message = error.message;\r\n _this.error = error;\r\n return _this;\r\n }\r\n return ErrorEvent;\r\n}(Event));\r\nvar CloseEvent = /** @class */ (function (_super) {\r\n __extends(CloseEvent, _super);\r\n function CloseEvent(code, reason, target) {\r\n if (code === void 0) { code = 1000; }\r\n if (reason === void 0) { reason = ''; }\r\n var _this = _super.call(this, 'close', target) || this;\r\n _this.wasClean = true;\r\n _this.code = code;\r\n _this.reason = reason;\r\n return _this;\r\n }\r\n return CloseEvent;\r\n}(Event));\n\n/*!\r\n * Reconnecting WebSocket\r\n * by Pedro Ladaria <pedro.ladaria@gmail.com>\r\n * https://github.com/pladaria/reconnecting-websocket\r\n * License MIT\r\n */\r\nvar getGlobalWebSocket = function () {\r\n if (typeof WebSocket !== 'undefined') {\r\n // @ts-ignore\r\n return WebSocket;\r\n }\r\n};\r\n/**\r\n * Returns true if given argument looks like a WebSocket class\r\n */\r\nvar isWebSocket = function (w) { return typeof w !== 'undefined' && !!w && w.CLOSING === 2; };\r\nvar DEFAULT = {\r\n maxReconnectionDelay: 10000,\r\n minReconnectionDelay: 1000 + Math.random() * 4000,\r\n minUptime: 5000,\r\n reconnectionDelayGrowFactor: 1.3,\r\n connectionTimeout: 4000,\r\n maxRetries: Infinity,\r\n maxEnqueuedMessages: Infinity,\r\n startClosed: false,\r\n debug: false,\r\n};\r\nvar ReconnectingWebSocket = /** @class */ (function () {\r\n function ReconnectingWebSocket(url, protocols, options) {\r\n var _this = this;\r\n if (options === void 0) { options = {}; }\r\n this._listeners = {\r\n error: [],\r\n message: [],\r\n open: [],\r\n close: [],\r\n };\r\n this._retryCount = -1;\r\n this._shouldReconnect = true;\r\n this._connectLock = false;\r\n this._binaryType = 'blob';\r\n this._closeCalled = false;\r\n this._messageQueue = [];\r\n /**\r\n * An event listener to be called when the WebSocket connection's readyState changes to CLOSED\r\n */\r\n this.onclose = null;\r\n /**\r\n * An event listener to be called when an error occurs\r\n */\r\n this.onerror = null;\r\n /**\r\n * An event listener to be called when a message is received from the server\r\n */\r\n this.onmessage = null;\r\n /**\r\n * An event listener to be called when the WebSocket connection's readyState changes to OPEN;\r\n * this indicates that the connection is ready to send and receive data\r\n */\r\n this.onopen = null;\r\n this._handleOpen = function (event) {\r\n _this._debug('open event');\r\n var _a = _this._options.minUptime, minUptime = _a === void 0 ? DEFAULT.minUptime : _a;\r\n clearTimeout(_this._connectTimeout);\r\n _this._uptimeTimeout = setTimeout(function () { return _this._acceptOpen(); }, minUptime);\r\n _this._ws.binaryType = _this._binaryType;\r\n // send enqueued messages (messages sent before websocket open event)\r\n _this._messageQueue.forEach(function (message) { return _this._ws.send(message); });\r\n _this._messageQueue = [];\r\n if (_this.onopen) {\r\n _this.onopen(event);\r\n }\r\n _this._listeners.open.forEach(function (listener) { return _this._callEventListener(event, listener); });\r\n };\r\n this._handleMessage = function (event) {\r\n _this._debug('message event');\r\n if (_this.onmessage) {\r\n _this.onmessage(event);\r\n }\r\n _this._listeners.message.forEach(function (listener) { return _this._callEventListener(event, listener); });\r\n };\r\n this._handleError = function (event) {\r\n _this._debug('error event', event.message);\r\n _this._disconnect(undefined, event.message === 'TIMEOUT' ? 'timeout' : undefined);\r\n if (_this.onerror) {\r\n _this.onerror(event);\r\n }\r\n _this._debug('exec error listeners');\r\n _this._listeners.error.forEach(function (listener) { return _this._callEventListener(event, listener); });\r\n _this._connect();\r\n };\r\n this._handleClose = function (event) {\r\n _this._debug('close event');\r\n _this._clearTimeouts();\r\n if (_this._shouldReconnect) {\r\n _this._connect();\r\n }\r\n if (_this.onclose) {\r\n _this.onclose(event);\r\n }\r\n _this._listeners.close.forEach(function (listener) { return _this._callEventListener(event, listener); });\r\n };\r\n this._url = url;\r\n this._protocols = protocols;\r\n this._options = options;\r\n if (this._options.startClosed) {\r\n this._shouldReconnect = false;\r\n }\r\n this._connect();\r\n }\r\n Object.defineProperty(ReconnectingWebSocket, \"CONNECTING\", {\r\n get: function () {\r\n return 0;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket, \"OPEN\", {\r\n get: function () {\r\n return 1;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket, \"CLOSING\", {\r\n get: function () {\r\n return 2;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket, \"CLOSED\", {\r\n get: function () {\r\n return 3;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket.prototype, \"CONNECTING\", {\r\n get: function () {\r\n return ReconnectingWebSocket.CONNECTING;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket.prototype, \"OPEN\", {\r\n get: function () {\r\n return ReconnectingWebSocket.OPEN;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket.prototype, \"CLOSING\", {\r\n get: function () {\r\n return ReconnectingWebSocket.CLOSING;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket.prototype, \"CLOSED\", {\r\n get: function () {\r\n return ReconnectingWebSocket.CLOSED;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket.prototype, \"binaryType\", {\r\n get: function () {\r\n return this._ws ? this._ws.binaryType : this._binaryType;\r\n },\r\n set: function (value) {\r\n this._binaryType = value;\r\n if (this._ws) {\r\n this._ws.binaryType = value;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket.prototype, \"retryCount\", {\r\n /**\r\n * Returns the number or connection retries\r\n */\r\n get: function () {\r\n return Math.max(this._retryCount, 0);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket.prototype, \"bufferedAmount\", {\r\n /**\r\n * The number of bytes of data that have been queued using calls to send() but not yet\r\n * transmitted to the network. This value resets to zero once all queued data has been sent.\r\n * This value does not reset to zero when the connection is closed; if you keep calling send(),\r\n * this will continue to climb. Read only\r\n */\r\n get: function () {\r\n var bytes = this._messageQueue.reduce(function (acc, message) {\r\n if (typeof message === 'string') {\r\n acc += message.length; // not byte size\r\n }\r\n else if (message instanceof Blob) {\r\n acc += message.size;\r\n }\r\n else {\r\n acc += message.byteLength;\r\n }\r\n return acc;\r\n }, 0);\r\n return bytes + (this._ws ? this._ws.bufferedAmount : 0);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket.prototype, \"extensions\", {\r\n /**\r\n * The extensions selected by the server. This is currently only the empty string or a list of\r\n * extensions as negotiated by the connection\r\n */\r\n get: function () {\r\n return this._ws ? this._ws.extensions : '';\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket.prototype, \"protocol\", {\r\n /**\r\n * A string indicating the name of the sub-protocol the server selected;\r\n * this will be one of the strings specified in the protocols parameter when creating the\r\n * WebSocket object\r\n */\r\n get: function () {\r\n return this._ws ? this._ws.protocol : '';\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket.prototype, \"readyState\", {\r\n /**\r\n * The current state of the connection; this is one of the Ready state constants\r\n */\r\n get: function () {\r\n if (this._ws) {\r\n return this._ws.readyState;\r\n }\r\n return this._options.startClosed\r\n ? ReconnectingWebSocket.CLOSED\r\n : ReconnectingWebSocket.CONNECTING;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket.prototype, \"url\", {\r\n /**\r\n * The URL as resolved by the constructor\r\n */\r\n get: function () {\r\n return this._ws ? this._ws.url : '';\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Closes the WebSocket connection or connection attempt, if any. If the connection is already\r\n * CLOSED, this method does nothing\r\n */\r\n ReconnectingWebSocket.prototype.close = function (code, reason) {\r\n if (code === void 0) { code = 1000; }\r\n this._closeCalled = true;\r\n this._shouldReconnect = false;\r\n this._clearTimeouts();\r\n if (!this._ws) {\r\n this._debug('close enqueued: no ws instance');\r\n return;\r\n }\r\n if (this._ws.readyState === this.CLOSED) {\r\n this._debug('close: already closed');\r\n return;\r\n }\r\n this._ws.close(code, reason);\r\n };\r\n /**\r\n * Closes the WebSocket connection or connection attempt and connects again.\r\n * Resets retry counter;\r\n */\r\n ReconnectingWebSocket.prototype.reconnect = function (code, reason) {\r\n this._shouldReconnect = true;\r\n this._closeCalled = false;\r\n this._retryCount = -1;\r\n if (!this._ws || this._ws.readyState === this.CLOSED) {\r\n this._connect();\r\n }\r\n else {\r\n this._disconnect(code, reason);\r\n this._connect();\r\n }\r\n };\r\n /**\r\n * Enqueue specified data to be transmitted to the server over the WebSocket connection\r\n */\r\n ReconnectingWebSocket.prototype.send = function (data) {\r\n if (this._ws && this._ws.readyState === this.OPEN) {\r\n this._debug('send', data);\r\n this._ws.send(data);\r\n }\r\n else {\r\n var _a = this._options.maxEnqueuedMessages, maxEnqueuedMessages = _a === void 0 ? DEFAULT.maxEnqueuedMessages : _a;\r\n if (this._messageQueue.length < maxEnqueuedMessages) {\r\n this._debug('enqueue', data);\r\n this._messageQueue.push(data);\r\n }\r\n }\r\n };\r\n /**\r\n * Register an event handler of a specific event type\r\n */\r\n ReconnectingWebSocket.prototype.addEventListener = function (type, listener) {\r\n if (this._listeners[type]) {\r\n // @ts-ignore\r\n this._listeners[type].push(listener);\r\n }\r\n };\r\n ReconnectingWebSocket.prototype.dispatchEvent = function (event) {\r\n var e_1, _a;\r\n var listeners = this._listeners[event.type];\r\n if (listeners) {\r\n try {\r\n for (var listeners_1 = __values(listeners), listeners_1_1 = listeners_1.next(); !listeners_1_1.done; listeners_1_1 = listeners_1.next()) {\r\n var listener = listeners_1_1.value;\r\n this._callEventListener(event, listener);\r\n }\r\n }\r\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\r\n finally {\r\n try {\r\n if (listeners_1_1 && !listeners_1_1.done && (_a = listeners_1.return)) _a.call(listeners_1);\r\n }\r\n finally { if (e_1) throw e_1.error; }\r\n }\r\n }\r\n return true;\r\n };\r\n /**\r\n * Removes an event listener\r\n */\r\n ReconnectingWebSocket.prototype.removeEventListener = function (type, listener) {\r\n if (this._listeners[type]) {\r\n // @ts-ignore\r\n this._listeners[type] = this._listeners[type].filter(function (l) { return l !== listener; });\r\n }\r\n };\r\n ReconnectingWebSocket.prototype._debug = function () {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n if (this._options.debug) {\r\n // not using spread because compiled version uses Symbols\r\n // tslint:disable-next-line\r\n console.log.apply(console, __spread(['RWS>'], args));\r\n }\r\n };\r\n ReconnectingWebSocket.prototype._getNextDelay = function () {\r\n var _a = this._options, _b = _a.reconnectionDelayGrowFactor, reconnectionDelayGrowFactor = _b === void 0 ? DEFAULT.reconnectionDelayGrowFactor : _b, _c = _a.minReconnectionDelay, minReconnectionDelay = _c === void 0 ? DEFAULT.minReconnectionDelay : _c, _d = _a.maxReconnectionDelay, maxReconnectionDelay = _d === void 0 ? DEFAULT.maxReconnectionDelay : _d;\r\n var delay = 0;\r\n if (this._retryCount > 0) {\r\n delay =\r\n minReconnectionDelay * Math.pow(reconnectionDelayGrowFactor, this._retryCount - 1);\r\n if (delay > maxReconnectionDelay) {\r\n delay = maxReconnectionDelay;\r\n }\r\n }\r\n this._debug('next delay', delay);\r\n return delay;\r\n };\r\n ReconnectingWebSocket.prototype._wait = function () {\r\n var _this = this;\r\n return new Promise(function (resolve) {\r\n setTimeout(resolve, _this._getNextDelay());\r\n });\r\n };\r\n ReconnectingWebSocket.prototype._getNextUrl = function (urlProvider) {\r\n if (typeof urlProvider === 'string') {\r\n return Promise.resolve(urlProvider);\r\n }\r\n if (typeof urlProvider === 'function') {\r\n var url = urlProvider();\r\n if (typeof url === 'string') {\r\n return Promise.resolve(url);\r\n }\r\n if (!!url.then) {\r\n return url;\r\n }\r\n }\r\n throw Error('Invalid URL');\r\n };\r\n ReconnectingWebSocket.prototype._connect = function () {\r\n var _this = this;\r\n if (this._connectLock || !this._shouldReconnect) {\r\n return;\r\n }\r\n this._connectLock = true;\r\n var _a = this._options, _b = _a.maxRetries, maxRetries = _b === void 0 ? DEFAULT.maxRetries : _b, _c = _a.connectionTimeout, connectionTimeout = _c === void 0 ? DEFAULT.connectionTimeout : _c, _d = _a.WebSocket, WebSocket = _d === void 0 ? getGlobalWebSocket() : _d;\r\n if (this._retryCount >= maxRetries) {\r\n this._debug('max retries reached', this._retryCount, '>=', maxRetries);\r\n return;\r\n }\r\n this._retryCount++;\r\n this._debug('connect', this._retryCount);\r\n this._removeListeners();\r\n if (!isWebSocket(WebSocket)) {\r\n throw Error('No valid WebSocket class provided');\r\n }\r\n this._wait()\r\n .then(function () { return _this._getNextUrl(_this._url); })\r\n .then(function (url) {\r\n // close could be called before creating the ws\r\n if (_this._closeCalled) {\r\n return;\r\n }\r\n _this._debug('connect', { url: url, protocols: _this._protocols });\r\n _this._ws = _this._protocols\r\n ? new WebSocket(url, _this._protocols)\r\n : new WebSocket(url);\r\n _this._ws.binaryType = _this._binaryType;\r\n _this._connectLock = false;\r\n _this._addListeners();\r\n _this._connectTimeout = setTimeout(function () { return _this._handleTimeout(); }, connectionTimeout);\r\n });\r\n };\r\n ReconnectingWebSocket.prototype._handleTimeout = function () {\r\n this._debug('timeout event');\r\n this._handleError(new ErrorEvent(Error('TIMEOUT'), this));\r\n };\r\n ReconnectingWebSocket.prototype._disconnect = function (code, reason) {\r\n if (code === void 0) { code = 1000; }\r\n this._clearTimeouts();\r\n if (!this._ws) {\r\n return;\r\n }\r\n this._removeListeners();\r\n try {\r\n this._ws.close(code, reason);\r\n this._handleClose(new CloseEvent(code, reason, this));\r\n }\r\n catch (error) {\r\n // ignore\r\n }\r\n };\r\n ReconnectingWebSocket.prototype._acceptOpen = function () {\r\n this._debug('accept open');\r\n this._retryCount = 0;\r\n };\r\n ReconnectingWebSocket.prototype._callEventListener = function (event, listener) {\r\n if ('handleEvent' in listener) {\r\n // @ts-ignore\r\n listener.handleEvent(event);\r\n }\r\n else {\r\n // @ts-ignore\r\n listener(event);\r\n }\r\n };\r\n ReconnectingWebSocket.prototype._removeListeners = function () {\r\n if (!this._ws) {\r\n return;\r\n }\r\n this._debug('removeListeners');\r\n this._ws.removeEventListener('open', this._handleOpen);\r\n this._ws.removeEventListener('close', this._handleClose);\r\n this._ws.removeEventListener('message', this._handleMessage);\r\n // @ts-ignore\r\n this._ws.removeEventListener('error', this._handleError);\r\n };\r\n ReconnectingWebSocket.prototype._addListeners = function () {\r\n if (!this._ws) {\r\n return;\r\n }\r\n this._debug('addListeners');\r\n this._ws.addEventListener('open', this._handleOpen);\r\n this._ws.addEventListener('close', this._handleClose);\r\n this._ws.addEventListener('message', this._handleMessage);\r\n // @ts-ignore\r\n this._ws.addEventListener('error', this._handleError);\r\n };\r\n ReconnectingWebSocket.prototype._clearTimeouts = function () {\r\n clearTimeout(this._connectTimeout);\r\n clearTimeout(this._uptimeTimeout);\r\n };\r\n return ReconnectingWebSocket;\r\n}());\n\nexport default ReconnectingWebSocket;\n","import ReconnectingWebSocket from \"reconnecting-websocket\";\n\n//#region src/lib/AutoReconnectingWebsocket.ts\nvar AutoReconnectingWebsocket = class extends ReconnectingWebSocket {\n\tconstructor(targetUrl, opts = {}) {\n\t\tconsole.log(\"Opening websocket to\", targetUrl);\n\t\tsuper(() => this.targetUrl || targetUrl, void 0, { startClosed: true });\n\t\tthis.opts = opts;\n\t\tthis.disposed = false;\n\t\tObject.defineProperty(this, \"url\", { get() {\n\t\t\treturn this.targetUrl;\n\t\t} });\n\t\tthis.targetUrl = targetUrl;\n\t\tthis.addEventListener(\"open\", () => {\n\t\t\tconsole.log(`Websocket to ${this.url} opened`);\n\t\t});\n\t\tthis.addEventListener(\"message\", (ev) => {\n\t\t\tif (!this.receivedFirstMessage) this.receivedFirstMessage = ev;\n\t\t});\n\t\tthis.addEventListener(\"close\", () => {\n\t\t\tconsole.log(`Websocket to ${this.url} closed`);\n\t\t});\n\t\tconst origReconnect = this.reconnect;\n\t\tthis.reconnect = () => {\n\t\t\tif (this.opts.mock) this.opts.mock.handleWebsocketConnection(this);\n\t\t\telse origReconnect.apply(this);\n\t\t};\n\t\tthis.reconnect();\n\t}\n\tchangeUrl(targetUrl) {\n\t\tthis.receivedFirstMessage = void 0;\n\t\tthis.targetUrl = targetUrl;\n\t\tthis.reconnect();\n\t}\n\tsendJson(data) {\n\t\tif (this.opts.mock) this.opts.mock.handleWebsocketMessage(this, JSON.stringify(data));\n\t\telse this.send(JSON.stringify(data));\n\t}\n\t/**\n\t* Permanently close this websocket and indicate that\n\t* this object should not be used again.\n\t**/\n\tdispose() {\n\t\tthis.close();\n\t\tthis.disposed = true;\n\t\tif (this.opts.onDispose) this.opts.onDispose();\n\t}\n\t/**\n\t* Returns a promise that resolves once the websocket\n\t* is in the OPEN state. */\n\tasync opened() {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tif (this.readyState === WebSocket.OPEN) resolve();\n\t\t\telse {\n\t\t\t\tthis.addEventListener(\"open\", () => resolve());\n\t\t\t\tthis.addEventListener(\"error\", reject);\n\t\t\t}\n\t\t});\n\t}\n\t/**\n\t* Returns a promise that resolves once the websocket\n\t* is in the CLOSED state. */\n\tasync closed() {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tif (this.readyState === WebSocket.CLOSED) resolve();\n\t\t\telse {\n\t\t\t\tthis.addEventListener(\"close\", () => resolve());\n\t\t\t\tthis.addEventListener(\"error\", reject);\n\t\t\t}\n\t\t});\n\t}\n\t/**\n\t* Returns a promise that resolves when the first message\n\t* is received from the websocket. Resolves immediately if\n\t* the first message has already been received.\n\t*/\n\tasync firstMessage() {\n\t\tif (this.receivedFirstMessage) return this.receivedFirstMessage;\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst onMessage = (ev) => {\n\t\t\t\tthis.receivedFirstMessage = ev;\n\t\t\t\tthis.removeEventListener(\"message\", onMessage);\n\t\t\t\tthis.removeEventListener(\"error\", onError);\n\t\t\t\tresolve(ev);\n\t\t\t};\n\t\t\tconst onError = (ev) => {\n\t\t\t\tthis.removeEventListener(\"message\", onMessage);\n\t\t\t\tthis.removeEventListener(\"error\", onError);\n\t\t\t\treject(ev);\n\t\t\t};\n\t\t\tthis.addEventListener(\"message\", onMessage);\n\t\t\tthis.addEventListener(\"error\", onError);\n\t\t});\n\t}\n\t/**\n\t* Returns a promise that resolves when the next message\n\t* is received from the websocket.\n\t*/\n\tasync nextMessage() {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst onMessage = (ev) => {\n\t\t\t\tthis.removeEventListener(\"message\", onMessage);\n\t\t\t\tthis.removeEventListener(\"error\", onError);\n\t\t\t\tresolve(ev);\n\t\t\t};\n\t\t\tconst onError = (ev) => {\n\t\t\t\tthis.removeEventListener(\"message\", onMessage);\n\t\t\t\tthis.removeEventListener(\"error\", onError);\n\t\t\t\treject(ev);\n\t\t\t};\n\t\t\tthis.addEventListener(\"message\", onMessage);\n\t\t\tthis.addEventListener(\"error\", onError);\n\t\t});\n\t}\n};\n\n//#endregion\n//#region src/lib/availableStorage.ts\n/**\n* Safety wrapper around browser localStorage providing context availability\n* checks and JSON parsing\n*/\nvar AvailableStorage = class {\n\tconstructor() {\n\t\tthis.available = typeof window !== \"undefined\" && !!window.localStorage;\n\t}\n\tgetJSON(key) {\n\t\tif (!this.available) return null;\n\t\tconst result = window.localStorage.getItem(key);\n\t\tif (result === null) return null;\n\t\ttry {\n\t\t\treturn JSON.parse(result);\n\t\t} catch (err) {\n\t\t\treturn null;\n\t\t}\n\t}\n\tsetJSON(key, obj) {\n\t\tif (!this.available) return null;\n\t\twindow.localStorage.setItem(key, JSON.stringify(obj));\n\t}\n\tdelete(key) {\n\t\tif (!this.available) return null;\n\t\twindow.localStorage.removeItem(key);\n\t}\n\tsetString(key, value) {\n\t\tif (!this.available) return null;\n\t\twindow.localStorage.setItem(key, value);\n\t}\n\tgetString(key) {\n\t\tif (!this.available) return null;\n\t\treturn window.localStorage.getItem(key);\n\t}\n};\nconst availableStorage = new AvailableStorage();\n\n//#endregion\n//#region src/LoginWithAuth0.ts\nconst DOMAIN_SUFFIX = \"wandelbots.io\";\n/**\n* Mapping of stages to Auth0 configurations.\n* The client ids are public identifiers for a specific auth0 application\n* and are safe to include in client-side code.\n* https://auth0.com/docs/get-started/applications/application-settings\n*/\nconst auth0ConfigMap = {\n\tdev: {\n\t\tdomain: `https://auth.portal.dev.${DOMAIN_SUFFIX}`,\n\t\tclientId: \"fLbJD0RLp5r2Dpucm5j8BjwMR6Hunfha\"\n\t},\n\tstg: {\n\t\tdomain: `https://auth.portal.stg.${DOMAIN_SUFFIX}`,\n\t\tclientId: \"joVDeD9e786WzFNSGCqoVq7HNkWt5j6s\"\n\t},\n\tprod: {\n\t\tdomain: `https://auth.portal.${DOMAIN_SUFFIX}`,\n\t\tclientId: \"J7WJUi38xVQdJAEBNRT9Xw1b0fXDb4J2\"\n\t}\n};\n/** Determine which Auth0 configuration to use based on instance URL */\nconst getAuth0Config = (instanceUrl) => {\n\tif (instanceUrl.endsWith(`dev.${DOMAIN_SUFFIX}`)) return auth0ConfigMap.dev;\n\tif (instanceUrl.endsWith(`stg.${DOMAIN_SUFFIX}`)) return auth0ConfigMap.stg;\n\tif (instanceUrl.endsWith(DOMAIN_SUFFIX)) return auth0ConfigMap.prod;\n\tthrow new Error(\"Unsupported instance URL. Cannot determine Auth0 configuration.\");\n};\n/**\n* Initializes Auth0 login process using redirect if necessary and retrieves an access token.\n* Returns null when an access token should not be needed to authenticate (i.e. cookie auth\n* when deployed on the instance domain)\n*/\nconst loginWithAuth0 = async (instanceUrl) => {\n\tif (typeof window === \"undefined\") throw new Error(`Access token must be set to use NovaClient when not in a browser environment.`);\n\tconst auth0Config = getAuth0Config(instanceUrl);\n\tif (new URL(instanceUrl).origin === window.location.origin) {\n\t\twindow.location.reload();\n\t\tthrow new Error(\"Failed to reload page to get auth details, please refresh manually\");\n\t}\n\tconst { Auth0Client } = await import(\"@auth0/auth0-spa-js\");\n\tconst auth0Client = new Auth0Client({\n\t\tdomain: auth0Config.domain,\n\t\tclientId: auth0Config.clientId ?? \"\",\n\t\tuseRefreshTokens: false,\n\t\tauthorizationParams: {\n\t\t\taudience: \"nova-api\",\n\t\t\tredirect_uri: window.location.origin\n\t\t}\n\t});\n\tif (window.location.search.includes(\"code=\") && window.location.search.includes(\"state=\")) {\n\t\tconst { appState } = await auth0Client.handleRedirectCallback();\n\t\twindow.history.replaceState({}, document.title, appState?.returnTo || window.location.pathname);\n\t} else await auth0Client.loginWithRedirect();\n\treturn await auth0Client.getTokenSilently();\n};\n\n//#endregion\nexport { availableStorage as n, AutoReconnectingWebsocket as r, loginWithAuth0 as t };\n//# sourceMappingURL=LoginWithAuth0-wQB-Sol1.mjs.map","function normalize (strArray) {\n var resultArray = [];\n if (strArray.length === 0) { return ''; }\n\n if (typeof strArray[0] !== 'string') {\n throw new TypeError('Url must be a string. Received ' + strArray[0]);\n }\n\n // If the first part is a plain protocol, we combine it with the next part.\n if (strArray[0].match(/^[^/:]+:\\/*$/) && strArray.length > 1) {\n var first = strArray.shift();\n strArray[0] = first + strArray[0];\n }\n\n // There must be two or three slashes in the file protocol, two slashes in anything else.\n if (strArray[0].match(/^file:\\/\\/\\//)) {\n strArray[0] = strArray[0].replace(/^([^/:]+):\\/*/, '$1:///');\n } else {\n strArray[0] = strArray[0].replace(/^([^/:]+):\\/*/, '$1://');\n }\n\n for (var i = 0; i < strArray.length; i++) {\n var component = strArray[i];\n\n if (typeof component !== 'string') {\n throw new TypeError('Url must be a string. Received ' + component);\n }\n\n if (component === '') { continue; }\n\n if (i > 0) {\n // Removing the starting slashes for each component but the first.\n component = component.replace(/^[\\/]+/, '');\n }\n if (i < strArray.length - 1) {\n // Removing the ending slashes for each component but the last.\n component = component.replace(/[\\/]+$/, '');\n } else {\n // For the last component we will combine multiple slashes to a single one.\n component = component.replace(/[\\/]+$/, '/');\n }\n\n resultArray.push(component);\n\n }\n\n var str = resultArray.join('/');\n // Each input component is now separated by a single slash except the possible first plain protocol part.\n\n // remove trailing slash before parameters or hash\n str = str.replace(/\\/(\\?|&|#[^!])/g, '$1');\n\n // replace ? in parameters with &\n var parts = str.split('?');\n str = parts.shift() + (parts.length > 0 ? '?': '') + parts.join('&');\n\n return str;\n}\n\nexport default function urlJoin() {\n var input;\n\n if (typeof arguments[0] === 'object') {\n input = arguments[0];\n } else {\n input = [].slice.call(arguments);\n }\n\n return normalize(input);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PathError = exports.TokenData = void 0;\nexports.parse = parse;\nexports.compile = compile;\nexports.match = match;\nexports.pathToRegexp = pathToRegexp;\nexports.stringify = stringify;\nconst DEFAULT_DELIMITER = \"/\";\nconst NOOP_VALUE = (value) => value;\nconst ID_START = /^[$_\\p{ID_Start}]$/u;\nconst ID_CONTINUE = /^[$\\u200c\\u200d\\p{ID_Continue}]$/u;\nconst SIMPLE_TOKENS = {\n // Groups.\n \"{\": \"{\",\n \"}\": \"}\",\n // Reserved.\n \"(\": \"(\",\n \")\": \")\",\n \"[\": \"[\",\n \"]\": \"]\",\n \"+\": \"+\",\n \"?\": \"?\",\n \"!\": \"!\",\n};\n/**\n * Escape text for stringify to path.\n */\nfunction escapeText(str) {\n return str.replace(/[{}()\\[\\]+?!:*\\\\]/g, \"\\\\$&\");\n}\n/**\n * Escape a regular expression string.\n */\nfunction escape(str) {\n return str.replace(/[.+*?^${}()[\\]|/\\\\]/g, \"\\\\$&\");\n}\n/**\n * Tokenized path instance.\n */\nclass TokenData {\n constructor(tokens, originalPath) {\n this.tokens = tokens;\n this.originalPath = originalPath;\n }\n}\nexports.TokenData = TokenData;\n/**\n * ParseError is thrown when there is an error processing the path.\n */\nclass PathError extends TypeError {\n constructor(message, originalPath) {\n let text = message;\n if (originalPath)\n text += `: ${originalPath}`;\n text += `; visit https://git.new/pathToRegexpError for info`;\n super(text);\n this.originalPath = originalPath;\n }\n}\nexports.PathError = PathError;\n/**\n * Parse a string for the raw tokens.\n */\nfunction parse(str, options = {}) {\n const { encodePath = NOOP_VALUE } = options;\n const chars = [...str];\n const tokens = [];\n let index = 0;\n let pos = 0;\n function name() {\n let value = \"\";\n if (ID_START.test(chars[index])) {\n do {\n value += chars[index++];\n } while (ID_CONTINUE.test(chars[index]));\n }\n else if (chars[index] === '\"') {\n let quoteStart = index;\n while (index++ < chars.length) {\n if (chars[index] === '\"') {\n index++;\n quoteStart = 0;\n break;\n }\n // Increment over escape characters.\n if (chars[index] === \"\\\\\")\n index++;\n value += chars[index];\n }\n if (quoteStart) {\n throw new PathError(`Unterminated quote at index ${quoteStart}`, str);\n }\n }\n if (!value) {\n throw new PathError(`Missing parameter name at index ${index}`, str);\n }\n return value;\n }\n while (index < chars.length) {\n const value = chars[index];\n const type = SIMPLE_TOKENS[value];\n if (type) {\n tokens.push({ type, index: index++, value });\n }\n else if (value === \"\\\\\") {\n tokens.push({ type: \"escape\", index: index++, value: chars[index++] });\n }\n else if (value === \":\") {\n tokens.push({ type: \"param\", index: index++, value: name() });\n }\n else if (value === \"*\") {\n tokens.push({ type: \"wildcard\", index: index++, value: name() });\n }\n else {\n tokens.push({ type: \"char\", index: index++, value });\n }\n }\n tokens.push({ type: \"end\", index, value: \"\" });\n function consumeUntil(endType) {\n const output = [];\n while (true) {\n const token = tokens[pos++];\n if (token.type === endType)\n break;\n if (token.type === \"char\" || token.type === \"escape\") {\n let path = token.value;\n let cur = tokens[pos];\n while (cur.type === \"char\" || cur.type === \"escape\") {\n path += cur.value;\n cur = tokens[++pos];\n }\n output.push({\n type: \"text\",\n value: encodePath(path),\n });\n continue;\n }\n if (token.type === \"param\" || token.type === \"wildcard\") {\n output.push({\n type: token.type,\n name: token.value,\n });\n continue;\n }\n if (token.type === \"{\") {\n output.push({\n type: \"group\",\n tokens: consumeUntil(\"}\"),\n });\n continue;\n }\n throw new PathError(`Unexpected ${token.type} at index ${token.index}, expected ${endType}`, str);\n }\n return output;\n }\n return new TokenData(consumeUntil(\"end\"), str);\n}\n/**\n * Compile a string to a template function for the path.\n */\nfunction compile(path, options = {}) {\n const { encode = encodeURIComponent, delimiter = DEFAULT_DELIMITER } = options;\n const data = typeof path === \"object\" ? path : parse(path, options);\n const fn = tokensToFunction(data.tokens, delimiter, encode);\n return function path(params = {}) {\n const [path, ...missing] = fn(params);\n if (missing.length) {\n throw new TypeError(`Missing parameters: ${missing.join(\", \")}`);\n }\n return path;\n };\n}\nfunction tokensToFunction(tokens, delimiter, encode) {\n const encoders = tokens.map((token) => tokenToFunction(token, delimiter, encode));\n return (data) => {\n const result = [\"\"];\n for (const encoder of encoders) {\n const [value, ...extras] = encoder(data);\n result[0] += value;\n result.push(...extras);\n }\n return result;\n };\n}\n/**\n * Convert a single token into a path building function.\n */\nfunction tokenToFunction(token, delimiter, encode) {\n if (token.type === \"text\")\n return () => [token.value];\n if (token.type === \"group\") {\n const fn = tokensToFunction(token.tokens, delimiter, encode);\n return (data) => {\n const [value, ...missing] = fn(data);\n if (!missing.length)\n return [value];\n return [\"\"];\n };\n }\n const encodeValue = encode || NOOP_VALUE;\n if (token.type === \"wildcard\" && encode !== false) {\n return (data) => {\n const value = data[token.name];\n if (value == null)\n return [\"\", token.name];\n if (!Array.isArray(value) || value.length === 0) {\n throw new TypeError(`Expected \"${token.name}\" to be a non-empty array`);\n }\n return [\n value\n .map((value, index) => {\n if (typeof value !== \"string\") {\n throw new TypeError(`Expected \"${token.name}/${index}\" to be a string`);\n }\n return encodeValue(value);\n })\n .join(delimiter),\n ];\n };\n }\n return (data) => {\n const value = data[token.name];\n if (value == null)\n return [\"\", token.name];\n if (typeof value !== \"string\") {\n throw new TypeError(`Expected \"${token.name}\" to be a string`);\n }\n return [encodeValue(value)];\n };\n}\n/**\n * Transform a path into a match function.\n */\nfunction match(path, options = {}) {\n const { decode = decodeURIComponent, delimiter = DEFAULT_DELIMITER } = options;\n const { regexp, keys } = pathToRegexp(path, options);\n const decoders = keys.map((key) => {\n if (decode === false)\n return NOOP_VALUE;\n if (key.type === \"param\")\n return decode;\n return (value) => value.split(delimiter).map(decode);\n });\n return function match(input) {\n const m = regexp.exec(input);\n if (!m)\n return false;\n const path = m[0];\n const params = Object.create(null);\n for (let i = 1; i < m.length; i++) {\n if (m[i] === undefined)\n continue;\n const key = keys[i - 1];\n const decoder = decoders[i - 1];\n params[key.name] = decoder(m[i]);\n }\n return { path, params };\n };\n}\nfunction pathToRegexp(path, options = {}) {\n const { delimiter = DEFAULT_DELIMITER, end = true, sensitive = false, trailing = true, } = options;\n const keys = [];\n const flags = sensitive ? \"\" : \"i\";\n const sources = [];\n for (const input of pathsToArray(path, [])) {\n const data = typeof input === \"object\" ? input : parse(input, options);\n for (const tokens of flatten(data.tokens, 0, [])) {\n sources.push(toRegExpSource(tokens, delimiter, keys, data.originalPath));\n }\n }\n let pattern = `^(?:${sources.join(\"|\")})`;\n if (trailing)\n pattern += `(?:${escape(delimiter)}$)?`;\n pattern += end ? \"$\" : `(?=${escape(delimiter)}|$)`;\n const regexp = new RegExp(pattern, flags);\n return { regexp, keys };\n}\n/**\n * Convert a path or array of paths into a flat array.\n */\nfunction pathsToArray(paths, init) {\n if (Array.isArray(paths)) {\n for (const p of paths)\n pathsToArray(p, init);\n }\n else {\n init.push(paths);\n }\n return init;\n}\n/**\n * Generate a flat list of sequence tokens from the given tokens.\n */\nfunction* flatten(tokens, index, init) {\n if (index === tokens.length) {\n return yield init;\n }\n const token = tokens[index];\n if (token.type === \"group\") {\n for (const seq of flatten(token.tokens, 0, init.slice())) {\n yield* flatten(tokens, index + 1, seq);\n }\n }\n else {\n init.push(token);\n }\n yield* flatten(tokens, index + 1, init);\n}\n/**\n * Transform a flat sequence of tokens into a regular expression.\n */\nfunction toRegExpSource(tokens, delimiter, keys, originalPath) {\n let result = \"\";\n let backtrack = \"\";\n let isSafeSegmentParam = true;\n for (const token of tokens) {\n if (token.type === \"text\") {\n result += escape(token.value);\n backtrack += token.value;\n isSafeSegmentParam || (isSafeSegmentParam = token.value.includes(delimiter));\n continue;\n }\n if (token.type === \"param\" || token.type === \"wildcard\") {\n if (!isSafeSegmentParam && !backtrack) {\n throw new PathError(`Missing text before \"${token.name}\" ${token.type}`, originalPath);\n }\n if (token.type === \"param\") {\n result += `(${negate(delimiter, isSafeSegmentParam ? \"\" : backtrack)}+)`;\n }\n else {\n result += `([\\\\s\\\\S]+)`;\n }\n keys.push(token);\n backtrack = \"\";\n isSafeSegmentParam = false;\n continue;\n }\n }\n return result;\n}\n/**\n * Block backtracking on previous text and ignore delimiter string.\n */\nfunction negate(delimiter, backtrack) {\n if (backtrack.length < 2) {\n if (delimiter.length < 2)\n return `[^${escape(delimiter + backtrack)}]`;\n return `(?:(?!${escape(delimiter)})[^${escape(backtrack)}])`;\n }\n if (delimiter.length < 2) {\n return `(?:(?!${escape(backtrack)})[^${escape(delimiter)}])`;\n }\n return `(?:(?!${escape(backtrack)}|${escape(delimiter)})[\\\\s\\\\S])`;\n}\n/**\n * Stringify an array of tokens into a path string.\n */\nfunction stringifyTokens(tokens) {\n let value = \"\";\n let i = 0;\n function name(value) {\n const isSafe = isNameSafe(value) && isNextNameSafe(tokens[i]);\n return isSafe ? value : JSON.stringify(value);\n }\n while (i < tokens.length) {\n const token = tokens[i++];\n if (token.type === \"text\") {\n value += escapeText(token.value);\n continue;\n }\n if (token.type === \"group\") {\n value += `{${stringifyTokens(token.tokens)}}`;\n continue;\n }\n if (token.type === \"param\") {\n value += `:${name(token.name)}`;\n continue;\n }\n if (token.type === \"wildcard\") {\n value += `*${name(token.name)}`;\n continue;\n }\n throw new TypeError(`Unknown token type: ${token.type}`);\n }\n return value;\n}\n/**\n * Stringify token data into a path string.\n */\nfunction stringify(data) {\n return stringifyTokens(data.tokens);\n}\n/**\n * Validate the parameter name contains valid ID characters.\n */\nfunction isNameSafe(name) {\n const [first, ...rest] = name;\n return ID_START.test(first) && rest.every((char) => ID_CONTINUE.test(char));\n}\n/**\n * Validate the next token does not interfere with the current param name.\n */\nfunction isNextNameSafe(token) {\n if (token && token.type === \"text\")\n return !ID_CONTINUE.test(token.value[0]);\n return true;\n}\n//# sourceMappingURL=index.js.map","import { n as availableStorage, r as AutoReconnectingWebsocket, t as loginWithAuth0 } from \"../../LoginWithAuth0-wQB-Sol1.mjs\";\nimport axios, { AxiosError, isAxiosError } from \"axios\";\nimport urlJoin from \"url-join\";\nimport * as pathToRegexp from \"path-to-regexp\";\nimport { ApplicationApi, BUSInputsOutputsApi, CellApi, ControllerApi, ControllerInputsOutputsApi, JoggingApi, KinematicsApi, MotionGroupApi, MotionGroupModelsApi, StoreCollisionComponentsApi, StoreCollisionSetupsApi, StoreObjectApi, SystemApi, TrajectoryCachingApi, TrajectoryExecutionApi, TrajectoryPlanningApi, VirtualControllerApi, VirtualControllerBehaviorApi, VirtualControllerInputsOutputsApi } from \"@wandelbots/nova-api/v2\";\n\nexport * from \"@wandelbots/nova-api/v2\"\n\n//#region src/lib/v2/NovaCellAPIClient.ts\n/**\n* API client providing type-safe access to all the Nova API REST endpoints\n* associated with a specific cell id.\n*/\nvar NovaCellAPIClient = class {\n\tconstructor(cellId, opts) {\n\t\tthis.cellId = cellId;\n\t\tthis.opts = opts;\n\t\tthis.system = this.withUnwrappedResponsesOnly(SystemApi);\n\t\tthis.cell = this.withUnwrappedResponsesOnly(CellApi);\n\t\tthis.motionGroup = this.withCellId(MotionGroupApi);\n\t\tthis.motionGroupModels = this.withCellId(MotionGroupModelsApi);\n\t\tthis.controller = this.withCellId(ControllerApi);\n\t\tthis.controllerIOs = this.withCellId(ControllerInputsOutputsApi);\n\t\tthis.trajectoryPlanning = this.withCellId(TrajectoryPlanningApi);\n\t\tthis.trajectoryExecution = this.withCellId(TrajectoryExecutionApi);\n\t\tthis.trajectoryCaching = this.withCellId(TrajectoryCachingApi);\n\t\tthis.application = this.withCellId(ApplicationApi);\n\t\tthis.applicationGlobal = this.withUnwrappedResponsesOnly(ApplicationApi);\n\t\tthis.jogging = this.withCellId(JoggingApi);\n\t\tthis.kinematics = this.withCellId(KinematicsApi);\n\t\tthis.busInputsOutputs = this.withCellId(BUSInputsOutputsApi);\n\t\tthis.virtualController = this.withCellId(VirtualControllerApi);\n\t\tthis.virtualControllerBehavior = this.withCellId(VirtualControllerBehaviorApi);\n\t\tthis.virtualControllerIOs = this.withCellId(VirtualControllerInputsOutputsApi);\n\t\tthis.storeObject = this.withCellId(StoreObjectApi);\n\t\tthis.storeCollisionComponents = this.withCellId(StoreCollisionComponentsApi);\n\t\tthis.storeCollisionSetups = this.withCellId(StoreCollisionSetupsApi);\n\t}\n\t/**\n\t* Some TypeScript sorcery which alters the API class methods so you don't\n\t* have to pass the cell id to every single one, and de-encapsulates the\n\t* response data\n\t*/\n\twithCellId(ApiConstructor) {\n\t\tconst apiClient = new ApiConstructor({\n\t\t\t...this.opts,\n\t\t\tisJsonMime: (mime) => {\n\t\t\t\treturn mime === \"application/json\";\n\t\t\t}\n\t\t}, this.opts.basePath ?? \"\", this.opts.axiosInstance ?? axios.create());\n\t\tfor (const key of Reflect.ownKeys(Reflect.getPrototypeOf(apiClient))) if (key !== \"constructor\" && typeof apiClient[key] === \"function\") {\n\t\t\tconst originalFunction = apiClient[key];\n\t\t\tapiClient[key] = (...args) => {\n\t\t\t\treturn originalFunction.apply(apiClient, [this.cellId, ...args]).then((res) => res.data);\n\t\t\t};\n\t\t}\n\t\treturn apiClient;\n\t}\n\t/**\n\t* As withCellId, but only does the response unwrapping\n\t*/\n\twithUnwrappedResponsesOnly(ApiConstructor) {\n\t\tconst apiClient = new ApiConstructor({\n\t\t\t...this.opts,\n\t\t\tisJsonMime: (mime) => {\n\t\t\t\treturn mime === \"application/json\";\n\t\t\t}\n\t\t}, this.opts.basePath ?? \"\", this.opts.axiosInstance ?? axios.create());\n\t\tfor (const key of Reflect.ownKeys(Reflect.getPrototypeOf(apiClient))) if (key !== \"constructor\" && typeof apiClient[key] === \"function\") {\n\t\t\tconst originalFunction = apiClient[key];\n\t\t\tapiClient[key] = (...args) => {\n\t\t\t\treturn originalFunction.apply(apiClient, args).then((res) => res.data);\n\t\t\t};\n\t\t}\n\t\treturn apiClient;\n\t}\n};\n\n//#endregion\n//#region src/lib/v2/mock/MockNovaInstance.ts\n/**\n* Ultra-simplified mock Nova server for testing stuff\n*/\nvar MockNovaInstance = class {\n\tconstructor() {\n\t\tthis.connections = [];\n\t}\n\tasync handleAPIRequest(config) {\n\t\tconst apiHandlers = [\n\t\t\t{\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tpath: \"/cells/:cellId/controllers\",\n\t\t\t\thandle() {\n\t\t\t\t\treturn [\"mock-ur5e\"];\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tpath: \"/cells/:cellId/controllers/:controllerId\",\n\t\t\t\thandle() {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tconfiguration: {\n\t\t\t\t\t\t\tinitial_joint_position: \"[0,-1.571,-1.571,-1.571,1.571,-1.571,0]\",\n\t\t\t\t\t\t\tkind: \"VirtualController\",\n\t\t\t\t\t\t\tmanufacturer: \"universalrobots\",\n\t\t\t\t\t\t\ttype: \"universalrobots-ur5e\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\tname: \"mock-ur5\"\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tpath: \"/cells/:cellId/controllers/:controllerId/state\",\n\t\t\t\thandle() {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tmode: \"MODE_CONTROL\",\n\t\t\t\t\t\tlast_error: [],\n\t\t\t\t\t\ttimestamp: \"2025-10-16T09:19:26.634534092Z\",\n\t\t\t\t\t\tsequence_number: 1054764,\n\t\t\t\t\t\tcontroller: \"mock-ur5e\",\n\t\t\t\t\t\toperation_mode: \"OPERATION_MODE_AUTO\",\n\t\t\t\t\t\tsafety_state: \"SAFETY_STATE_NORMAL\",\n\t\t\t\t\t\tvelocity_override: 100,\n\t\t\t\t\t\tmotion_groups: [{\n\t\t\t\t\t\t\ttimestamp: \"2025-10-16T09:19:26.634534092Z\",\n\t\t\t\t\t\t\tsequence_number: 1054764,\n\t\t\t\t\t\t\tmotion_group: \"0@mock-ur5e\",\n\t\t\t\t\t\t\tcontroller: \"mock-ur5e\",\n\t\t\t\t\t\t\tjoint_position: [\n\t\t\t\t\t\t\t\t1.487959623336792,\n\t\t\t\t\t\t\t\t-1.8501918315887451,\n\t\t\t\t\t\t\t\t1.8003005981445312,\n\t\t\t\t\t\t\t\t6.034560203552246,\n\t\t\t\t\t\t\t\t1.4921919107437134,\n\t\t\t\t\t\t\t\t1.593459963798523\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tjoint_limit_reached: { limit_reached: [\n\t\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t\t\tfalse\n\t\t\t\t\t\t\t] },\n\t\t\t\t\t\t\tjoint_torque: [],\n\t\t\t\t\t\t\tjoint_current: [\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t0\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tflange_pose: {\n\t\t\t\t\t\t\t\tposition: [\n\t\t\t\t\t\t\t\t\t107.6452433732927,\n\t\t\t\t\t\t\t\t\t-409.0402987746852,\n\t\t\t\t\t\t\t\t\t524.2402132330305\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\torientation: [\n\t\t\t\t\t\t\t\t\t.9874434028353319,\n\t\t\t\t\t\t\t\t\t-.986571714997442,\n\t\t\t\t\t\t\t\t\t1.3336589451098142\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttcp: \"Flange\",\n\t\t\t\t\t\t\ttcp_pose: {\n\t\t\t\t\t\t\t\tposition: [\n\t\t\t\t\t\t\t\t\t107.6452433732927,\n\t\t\t\t\t\t\t\t\t-409.0402987746852,\n\t\t\t\t\t\t\t\t\t524.2402132330305\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\torientation: [\n\t\t\t\t\t\t\t\t\t.9874434028353319,\n\t\t\t\t\t\t\t\t\t-.986571714997442,\n\t\t\t\t\t\t\t\t\t1.3336589451098142\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tpayload: \"\",\n\t\t\t\t\t\t\tcoordinate_system: \"\",\n\t\t\t\t\t\t\tstandstill: true\n\t\t\t\t\t\t}]\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tpath: \"/cells/:cellId/controllers/:controllerId/motion-groups/:motionGroupId/description\",\n\t\t\t\thandle() {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tmotion_group_model: \"UniversalRobots_UR5e\",\n\t\t\t\t\t\tmounting: {\n\t\t\t\t\t\t\tposition: [\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t0\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\torientation: [\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t0\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttcps: { Flange: {\n\t\t\t\t\t\t\tname: \"Default-Flange\",\n\t\t\t\t\t\t\tpose: {\n\t\t\t\t\t\t\t\tposition: [\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t0\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\torientation: [\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t0\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} },\n\t\t\t\t\t\tpayloads: { \"FPay-0\": {\n\t\t\t\t\t\t\tname: \"FPay-0\",\n\t\t\t\t\t\t\tpayload: 0,\n\t\t\t\t\t\t\tcenter_of_mass: [\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t0\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tmoment_of_inertia: [\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t0\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t} },\n\t\t\t\t\t\tcycle_time: 8,\n\t\t\t\t\t\tdh_parameters: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\talpha: 1.5707963267948966,\n\t\t\t\t\t\t\t\td: 162.25\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{ a: -425 },\n\t\t\t\t\t\t\t{ a: -392.2 },\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\talpha: 1.5707963267948966,\n\t\t\t\t\t\t\t\td: 133.3\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\talpha: -1.5707963267948966,\n\t\t\t\t\t\t\t\td: 99.7\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{ d: 99.6 }\n\t\t\t\t\t\t],\n\t\t\t\t\t\toperation_limits: {\n\t\t\t\t\t\t\tauto_limits: {\n\t\t\t\t\t\t\t\tjoints: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t\t\t\t\tlower_limit: -6.283185307179586,\n\t\t\t\t\t\t\t\t\t\t\tupper_limit: 6.283185307179586\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tvelocity: 3.34159255027771,\n\t\t\t\t\t\t\t\t\t\tacceleration: 40,\n\t\t\t\t\t\t\t\t\t\ttorque: 150\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t\t\t\t\tlower_limit: -6.283185307179586,\n\t\t\t\t\t\t\t\t\t\t\tupper_limit: 6.283185307179586\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tvelocity: 3.34159255027771,\n\t\t\t\t\t\t\t\t\t\tacceleration: 40,\n\t\t\t\t\t\t\t\t\t\ttorque: 150\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t\t\t\t\tlower_limit: -6.283185307179586,\n\t\t\t\t\t\t\t\t\t\t\tupper_limit: 6.283185307179586\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tvelocity: 3.34159255027771,\n\t\t\t\t\t\t\t\t\t\tacceleration: 40,\n\t\t\t\t\t\t\t\t\t\ttorque: 150\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t\t\t\t\tlower_limit: -6.283185307179586,\n\t\t\t\t\t\t\t\t\t\t\tupper_limit: 6.283185307179586\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tvelocity: 3.34159255027771,\n\t\t\t\t\t\t\t\t\t\tacceleration: 40,\n\t\t\t\t\t\t\t\t\t\ttorque: 28\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t\t\t\t\tlower_limit: -6.283185307179586,\n\t\t\t\t\t\t\t\t\t\t\tupper_limit: 6.283185307179586\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tvelocity: 3.34159255027771,\n\t\t\t\t\t\t\t\t\t\tacceleration: 40,\n\t\t\t\t\t\t\t\t\t\ttorque: 28\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t\t\t\t\tlower_limit: -6.283185307179586,\n\t\t\t\t\t\t\t\t\t\t\tupper_limit: 6.283185307179586\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tvelocity: 3.34159255027771,\n\t\t\t\t\t\t\t\t\t\tacceleration: 40,\n\t\t\t\t\t\t\t\t\t\ttorque: 28\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\ttcp: { velocity: 5e3 },\n\t\t\t\t\t\t\t\telbow: { velocity: 5e3 },\n\t\t\t\t\t\t\t\tflange: { velocity: 5e3 }\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tmanual_limits: {\n\t\t\t\t\t\t\t\tjoints: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t\t\t\t\tlower_limit: -6.283185307179586,\n\t\t\t\t\t\t\t\t\t\t\tupper_limit: 6.283185307179586\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tvelocity: 3.34159255027771,\n\t\t\t\t\t\t\t\t\t\tacceleration: 40,\n\t\t\t\t\t\t\t\t\t\ttorque: 150\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t\t\t\t\tlower_limit: -6.283185307179586,\n\t\t\t\t\t\t\t\t\t\t\tupper_limit: 6.283185307179586\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tvelocity: 3.34159255027771,\n\t\t\t\t\t\t\t\t\t\tacceleration: 40,\n\t\t\t\t\t\t\t\t\t\ttorque: 150\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t\t\t\t\tlower_limit: -6.283185307179586,\n\t\t\t\t\t\t\t\t\t\t\tupper_limit: 6.283185307179586\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tvelocity: 3.34159255027771,\n\t\t\t\t\t\t\t\t\t\tacceleration: 40,\n\t\t\t\t\t\t\t\t\t\ttorque: 150\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t\t\t\t\tlower_limit: -6.283185307179586,\n\t\t\t\t\t\t\t\t\t\t\tupper_limit: 6.283185307179586\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tvelocity: 3.34159255027771,\n\t\t\t\t\t\t\t\t\t\tacceleration: 40,\n\t\t\t\t\t\t\t\t\t\ttorque: 28\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t\t\t\t\tlower_limit: -6.283185307179586,\n\t\t\t\t\t\t\t\t\t\t\tupper_limit: 6.283185307179586\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tvelocity: 3.34159255027771,\n\t\t\t\t\t\t\t\t\t\tacceleration: 40,\n\t\t\t\t\t\t\t\t\t\ttorque: 28\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t\t\t\t\tlower_limit: -6.283185307179586,\n\t\t\t\t\t\t\t\t\t\t\tupper_limit: 6.283185307179586\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tvelocity: 3.34159255027771,\n\t\t\t\t\t\t\t\t\t\tacceleration: 40,\n\t\t\t\t\t\t\t\t\t\ttorque: 28\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\ttcp: { velocity: 5e3 }\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tmanual_t1_limits: {\n\t\t\t\t\t\t\t\tjoints: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t\t\t\t\tlower_limit: -6.283185307179586,\n\t\t\t\t\t\t\t\t\t\t\tupper_limit: 6.283185307179586\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tvelocity: 3.34159255027771,\n\t\t\t\t\t\t\t\t\t\tacceleration: 40,\n\t\t\t\t\t\t\t\t\t\ttorque: 150\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t\t\t\t\tlower_limit: -6.283185307179586,\n\t\t\t\t\t\t\t\t\t\t\tupper_limit: 6.283185307179586\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tvelocity: 3.34159255027771,\n\t\t\t\t\t\t\t\t\t\tacceleration: 40,\n\t\t\t\t\t\t\t\t\t\ttorque: 150\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t\t\t\t\tlower_limit: -6.283185307179586,\n\t\t\t\t\t\t\t\t\t\t\tupper_limit: 6.283185307179586\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tvelocity: 3.34159255027771,\n\t\t\t\t\t\t\t\t\t\tacceleration: 40,\n\t\t\t\t\t\t\t\t\t\ttorque: 150\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t\t\t\t\tlower_limit: -6.283185307179586,\n\t\t\t\t\t\t\t\t\t\t\tupper_limit: 6.283185307179586\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tvelocity: 3.34159255027771,\n\t\t\t\t\t\t\t\t\t\tacceleration: 40,\n\t\t\t\t\t\t\t\t\t\ttorque: 28\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t\t\t\t\tlower_limit: -6.283185307179586,\n\t\t\t\t\t\t\t\t\t\t\tupper_limit: 6.283185307179586\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tvelocity: 3.34159255027771,\n\t\t\t\t\t\t\t\t\t\tacceleration: 40,\n\t\t\t\t\t\t\t\t\t\ttorque: 28\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t\t\t\t\tlower_limit: -6.283185307179586,\n\t\t\t\t\t\t\t\t\t\t\tupper_limit: 6.283185307179586\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tvelocity: 3.34159255027771,\n\t\t\t\t\t\t\t\t\t\tacceleration: 40,\n\t\t\t\t\t\t\t\t\t\ttorque: 28\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\ttcp: { velocity: 5e3 }\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tmanual_t2_limits: {\n\t\t\t\t\t\t\t\tjoints: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t\t\t\t\tlower_limit: -6.283185307179586,\n\t\t\t\t\t\t\t\t\t\t\tupper_limit: 6.283185307179586\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tvelocity: 3.34159255027771,\n\t\t\t\t\t\t\t\t\t\tacceleration: 40,\n\t\t\t\t\t\t\t\t\t\ttorque: 150\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t\t\t\t\tlower_limit: -6.283185307179586,\n\t\t\t\t\t\t\t\t\t\t\tupper_limit: 6.283185307179586\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tvelocity: 3.34159255027771,\n\t\t\t\t\t\t\t\t\t\tacceleration: 40,\n\t\t\t\t\t\t\t\t\t\ttorque: 150\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t\t\t\t\tlower_limit: -6.283185307179586,\n\t\t\t\t\t\t\t\t\t\t\tupper_limit: 6.283185307179586\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tvelocity: 3.34159255027771,\n\t\t\t\t\t\t\t\t\t\tacceleration: 40,\n\t\t\t\t\t\t\t\t\t\ttorque: 150\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t\t\t\t\tlower_limit: -6.283185307179586,\n\t\t\t\t\t\t\t\t\t\t\tupper_limit: 6.283185307179586\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tvelocity: 3.34159255027771,\n\t\t\t\t\t\t\t\t\t\tacceleration: 40,\n\t\t\t\t\t\t\t\t\t\ttorque: 28\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t\t\t\t\tlower_limit: -6.283185307179586,\n\t\t\t\t\t\t\t\t\t\t\tupper_limit: 6.283185307179586\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tvelocity: 3.34159255027771,\n\t\t\t\t\t\t\t\t\t\tacceleration: 40,\n\t\t\t\t\t\t\t\t\t\ttorque: 28\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t\t\t\t\tlower_limit: -6.283185307179586,\n\t\t\t\t\t\t\t\t\t\t\tupper_limit: 6.283185307179586\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tvelocity: 3.34159255027771,\n\t\t\t\t\t\t\t\t\t\tacceleration: 40,\n\t\t\t\t\t\t\t\t\t\ttorque: 28\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\ttcp: { velocity: 5e3 }\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tserial_number: \"WBVirtualRobot\"\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tpath: \"/cells/:cellId/controllers/:controllerId/coordinate-systems\",\n\t\t\t\thandle() {\n\t\t\t\t\treturn [{\n\t\t\t\t\t\tcoordinate_system: \"\",\n\t\t\t\t\t\tname: \"world\",\n\t\t\t\t\t\treference_coordinate_system: \"\",\n\t\t\t\t\t\tposition: [\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t0\n\t\t\t\t\t\t],\n\t\t\t\t\t\torientation: [\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t0\n\t\t\t\t\t\t],\n\t\t\t\t\t\torientation_type: \"ROTATION_VECTOR\"\n\t\t\t\t\t}, {\n\t\t\t\t\t\tcoordinate_system: \"CS-0\",\n\t\t\t\t\t\tname: \"Default-CS\",\n\t\t\t\t\t\treference_coordinate_system: \"\",\n\t\t\t\t\t\tposition: [\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t0\n\t\t\t\t\t\t],\n\t\t\t\t\t\torientation: [\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t0\n\t\t\t\t\t\t],\n\t\t\t\t\t\torientation_type: \"ROTATION_VECTOR\"\n\t\t\t\t\t}];\n\t\t\t\t}\n\t\t\t}\n\t\t];\n\t\tconst method = config.method?.toUpperCase() || \"GET\";\n\t\tconst path = `/cells${config.url?.split(\"/cells\")[1]?.split(\"?\")[0]}`;\n\t\tfor (const handler of apiHandlers) {\n\t\t\tconst match = pathToRegexp.match(handler.path)(path || \"\");\n\t\t\tif (method === handler.method && match) {\n\t\t\t\tconst json = handler.handle();\n\t\t\t\treturn {\n\t\t\t\t\tstatus: 200,\n\t\t\t\t\tstatusText: \"Success\",\n\t\t\t\t\tdata: JSON.stringify(json),\n\t\t\t\t\theaders: {},\n\t\t\t\t\tconfig,\n\t\t\t\t\trequest: { responseURL: config.url }\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\tthrow new AxiosError(`No mock handler matched this request: ${method} ${path}`, \"404\", config);\n\t}\n\thandleWebsocketConnection(socket) {\n\t\tthis.connections.push(socket);\n\t\tsetTimeout(() => {\n\t\t\tsocket.dispatchEvent(new Event(\"open\"));\n\t\t\tconsole.log(\"Websocket connection opened from\", socket.url);\n\t\t\tif (socket.url.includes(\"/state-stream\")) socket.dispatchEvent(new MessageEvent(\"message\", { data: JSON.stringify(defaultMotionState) }));\n\t\t\tif (socket.url.includes(\"/execution/jogging\")) socket.dispatchEvent(new MessageEvent(\"message\", { data: JSON.stringify({ result: {\n\t\t\t\tmessage: \"string\",\n\t\t\t\tkind: \"INITIALIZE_RECEIVED\"\n\t\t\t} }) }));\n\t\t}, 10);\n\t}\n\thandleWebsocketMessage(socket, message) {\n\t\tconsole.log(`Received message on ${socket.url}`, message);\n\t}\n};\nconst defaultMotionState = { result: {\n\tmotion_group: \"0@universalrobots-ur5e\",\n\tcontroller: \"universalrobots-ur5e\",\n\ttimestamp: (/* @__PURE__ */ new Date()).toISOString(),\n\tsequence_number: 1,\n\tjoint_position: [\n\t\t1.1699999570846558,\n\t\t-1.5700000524520874,\n\t\t1.3600000143051147,\n\t\t1.0299999713897705,\n\t\t1.2899999618530273,\n\t\t1.2799999713897705\n\t],\n\tjoint_limit_reached: { limit_reached: [\n\t\tfalse,\n\t\tfalse,\n\t\tfalse,\n\t\tfalse,\n\t\tfalse,\n\t\tfalse\n\t] },\n\tstandstill: false,\n\tflange_pose: {\n\t\tposition: [\n\t\t\t1.3300010259703043,\n\t\t\t-409.2680714682808,\n\t\t\t531.0203477065281\n\t\t],\n\t\torientation: [\n\t\t\t1.7564919306270736,\n\t\t\t-1.7542521568325058,\n\t\t\t.7326972590614671\n\t\t]\n\t},\n\ttcp_pose: {\n\t\tposition: [\n\t\t\t1.3300010259703043,\n\t\t\t-409.2680714682808,\n\t\t\t531.0203477065281\n\t\t],\n\t\torientation: [\n\t\t\t1.7564919306270736,\n\t\t\t-1.7542521568325058,\n\t\t\t.7326972590614671\n\t\t]\n\t}\n} };\n\n//#endregion\n//#region src/lib/v2/NovaClient.ts\nfunction permissiveInstanceUrlParse(url) {\n\tif (!url.startsWith(\"http\")) url = `http://${url}`;\n\treturn new URL(url).toString();\n}\n/**\n*\n* Client for connecting to a Nova instance and controlling robots.\n*/\nvar NovaClient = class {\n\tconstructor(config) {\n\t\tthis.authPromise = null;\n\t\tthis.accessToken = null;\n\t\tconst cellId = config.cellId ?? \"cell\";\n\t\tthis.config = {\n\t\t\tcellId,\n\t\t\t...config\n\t\t};\n\t\tthis.accessToken = config.accessToken || availableStorage.getString(\"wbjs.access_token\") || null;\n\t\tif (this.config.instanceUrl === \"https://mock.example.com\") this.mock = new MockNovaInstance();\n\t\telse this.config.instanceUrl = permissiveInstanceUrlParse(this.config.instanceUrl);\n\t\tconst axiosInstance = axios.create({\n\t\t\tbaseURL: urlJoin(this.config.instanceUrl, \"/api/v2\"),\n\t\t\theaders: typeof window !== \"undefined\" && window.location.origin.includes(\"localhost\") ? {} : { \"X-Wandelbots-Client\": \"Wandelbots-Nova-JS-SDK\" }\n\t\t});\n\t\taxiosInstance.interceptors.request.use(async (request) => {\n\t\t\tif (!request.headers.Authorization) {\n\t\t\t\tif (this.accessToken) request.headers.Authorization = `Bearer ${this.accessToken}`;\n\t\t\t\telse if (this.config.username && this.config.password) request.headers.Authorization = `Basic ${btoa(`${config.username}:${config.password}`)}`;\n\t\t\t}\n\t\t\treturn request;\n\t\t});\n\t\tif (typeof window !== \"undefined\") axiosInstance.interceptors.response.use((r) => r, async (error) => {\n\t\t\tif (isAxiosError(error)) {\n\t\t\t\tif (error.response?.status === 401) try {\n\t\t\t\t\tawait this.renewAuthentication();\n\t\t\t\t\tif (error.config) {\n\t\t\t\t\t\tif (this.accessToken) error.config.headers.Authorization = `Bearer ${this.accessToken}`;\n\t\t\t\t\t\telse delete error.config.headers.Authorization;\n\t\t\t\t\t\treturn axiosInstance.request(error.config);\n\t\t\t\t\t}\n\t\t\t\t} catch (err) {\n\t\t\t\t\treturn Promise.reject(err);\n\t\t\t\t}\n\t\t\t\telse if (error.response?.status === 503) {\n\t\t\t\t\tif ((await fetch(window.location.href)).status === 503) window.location.reload();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn Promise.reject(error);\n\t\t});\n\t\tthis.api = new NovaCellAPIClient(cellId, {\n\t\t\t...config,\n\t\t\tbasePath: urlJoin(this.config.instanceUrl, \"/api/v2\"),\n\t\t\tisJsonMime: (mime) => {\n\t\t\t\treturn mime === \"application/json\";\n\t\t\t},\n\t\t\tbaseOptions: {\n\t\t\t\t...this.mock ? { adapter: (config$1) => {\n\t\t\t\t\treturn this.mock.handleAPIRequest(config$1);\n\t\t\t\t} } : {},\n\t\t\t\t...config.baseOptions\n\t\t\t},\n\t\t\taxiosInstance\n\t\t});\n\t}\n\tasync renewAuthentication() {\n\t\tif (this.authPromise) return;\n\t\tthis.authPromise = loginWithAuth0(this.config.instanceUrl);\n\t\ttry {\n\t\t\tthis.accessToken = await this.authPromise;\n\t\t\tif (this.accessToken) availableStorage.setString(\"wbjs.access_token\", this.accessToken);\n\t\t\telse availableStorage.delete(\"wbjs.access_token\");\n\t\t} finally {\n\t\t\tthis.authPromise = null;\n\t\t}\n\t}\n\tmakeWebsocketURL(path) {\n\t\tconst url = new URL(urlJoin(this.config.instanceUrl, `/api/v2/cells/${this.config.cellId}`, path));\n\t\turl.protocol = url.protocol.replace(\"http\", \"ws\");\n\t\turl.protocol = url.protocol.replace(\"https\", \"wss\");\n\t\tif (this.accessToken) url.searchParams.append(\"token\", this.accessToken);\n\t\telse if (this.config.username && this.config.password) {\n\t\t\turl.username = this.config.username;\n\t\t\turl.password = this.config.password;\n\t\t}\n\t\treturn url.toString();\n\t}\n\t/**\n\t* Retrieve an AutoReconnectingWebsocket to the given path on the Nova instance.\n\t* If you explicitly want to reconnect an existing websocket, call `reconnect`\n\t* on the returned object.\n\t*/\n\topenReconnectingWebsocket(path) {\n\t\treturn new AutoReconnectingWebsocket(this.makeWebsocketURL(path), { mock: this.mock });\n\t}\n};\n\n//#endregion\n//#region src/lib/v2/wandelscriptUtils.ts\n/**\n* Convert a Pose object representing a motion group position\n* into a string which represents that pose in Wandelscript.\n*/\nfunction poseToWandelscriptString(pose) {\n\tconst position = [\n\t\tpose.position?.[0] ?? 0,\n\t\tpose.position?.[1] ?? 0,\n\t\tpose.position?.[2] ?? 0\n\t];\n\tconst orientation = [\n\t\tpose.orientation?.[0] ?? 0,\n\t\tpose.orientation?.[1] ?? 0,\n\t\tpose.orientation?.[2] ?? 0\n\t];\n\tconst positionValues = position.map((v) => v.toFixed(1));\n\tconst rotationValues = orientation.map((v) => v.toFixed(4));\n\treturn `(${positionValues.concat(rotationValues).join(\", \")})`;\n}\n\n//#endregion\nexport { NovaCellAPIClient, NovaClient, poseToWandelscriptString };\n//# sourceMappingURL=index.mjs.map","const _lut = [ '00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '0a', '0b', '0c', '0d', '0e', '0f', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '1a', '1b', '1c', '1d', '1e', '1f', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '2a', '2b', '2c', '2d', '2e', '2f', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '3a', '3b', '3c', '3d', '3e', '3f', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '4a', '4b', '4c', '4d', '4e', '4f', '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '5a', '5b', '5c', '5d', '5e', '5f', '60', '61', '62', '63', '64', '65', '66', '67', '68', '69', '6a', '6b', '6c', '6d', '6e', '6f', '70', '71', '72', '73', '74', '75', '76', '77', '78', '79', '7a', '7b', '7c', '7d', '7e', '7f', '80', '81', '82', '83', '84', '85', '86', '87', '88', '89', '8a', '8b', '8c', '8d', '8e', '8f', '90', '91', '92', '93', '94', '95', '96', '97', '98', '99', '9a', '9b', '9c', '9d', '9e', '9f', 'a0', 'a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7', 'a8', 'a9', 'aa', 'ab', 'ac', 'ad', 'ae', 'af', 'b0', 'b1', 'b2', 'b3', 'b4', 'b5', 'b6', 'b7', 'b8', 'b9', 'ba', 'bb', 'bc', 'bd', 'be', 'bf', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'c7', 'c8', 'c9', 'ca', 'cb', 'cc', 'cd', 'ce', 'cf', 'd0', 'd1', 'd2', 'd3', 'd4', 'd5', 'd6', 'd7', 'd8', 'd9', 'da', 'db', 'dc', 'dd', 'de', 'df', 'e0', 'e1', 'e2', 'e3', 'e4', 'e5', 'e6', 'e7', 'e8', 'e9', 'ea', 'eb', 'ec', 'ed', 'ee', 'ef', 'f0', 'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'fa', 'fb', 'fc', 'fd', 'fe', 'ff' ];\n\nlet _seed = 1234567;\n\n\nconst DEG2RAD = Math.PI / 180;\nconst RAD2DEG = 180 / Math.PI;\n\n/**\n * Generate a [UUID]{@link https://en.wikipedia.org/wiki/Universally_unique_identifier}\n * (universally unique identifier).\n *\n * @return {string} The UUID.\n */\nfunction generateUUID() {\n\n\t// http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136\n\n\tconst d0 = Math.random() * 0xffffffff | 0;\n\tconst d1 = Math.random() * 0xffffffff | 0;\n\tconst d2 = Math.random() * 0xffffffff | 0;\n\tconst d3 = Math.random() * 0xffffffff | 0;\n\tconst uuid = _lut[ d0 & 0xff ] + _lut[ d0 >> 8 & 0xff ] + _lut[ d0 >> 16 & 0xff ] + _lut[ d0 >> 24 & 0xff ] + '-' +\n\t\t\t_lut[ d1 & 0xff ] + _lut[ d1 >> 8 & 0xff ] + '-' + _lut[ d1 >> 16 & 0x0f | 0x40 ] + _lut[ d1 >> 24 & 0xff ] + '-' +\n\t\t\t_lut[ d2 & 0x3f | 0x80 ] + _lut[ d2 >> 8 & 0xff ] + '-' + _lut[ d2 >> 16 & 0xff ] + _lut[ d2 >> 24 & 0xff ] +\n\t\t\t_lut[ d3 & 0xff ] + _lut[ d3 >> 8 & 0xff ] + _lut[ d3 >> 16 & 0xff ] + _lut[ d3 >> 24 & 0xff ];\n\n\t// .toLowerCase() here flattens concatenated strings to save heap memory space.\n\treturn uuid.toLowerCase();\n\n}\n\n/**\n * Clamps the given value between min and max.\n *\n * @param {number} value - The value to clamp.\n * @param {number} min - The min value.\n * @param {number} max - The max value.\n * @return {number} The clamped value.\n */\nfunction clamp( value, min, max ) {\n\n\treturn Math.max( min, Math.min( max, value ) );\n\n}\n\n/**\n * Computes the Euclidean modulo of the given parameters that\n * is `( ( n % m ) + m ) % m`.\n *\n * @param {number} n - The first parameter.\n * @param {number} m - The second parameter.\n * @return {number} The Euclidean modulo.\n */\nfunction euclideanModulo( n, m ) {\n\n\t// https://en.wikipedia.org/wiki/Modulo_operation\n\n\treturn ( ( n % m ) + m ) % m;\n\n}\n\n/**\n * Performs a linear mapping from range `<a1, a2>` to range `<b1, b2>`\n * for the given value.\n *\n * @param {number} x - The value to be mapped.\n * @param {number} a1 - Minimum value for range A.\n * @param {number} a2 - Maximum value for range A.\n * @param {number} b1 - Minimum value for range B.\n * @param {number} b2 - Maximum value for range B.\n * @return {number} The mapped value.\n */\nfunction mapLinear( x, a1, a2, b1, b2 ) {\n\n\treturn b1 + ( x - a1 ) * ( b2 - b1 ) / ( a2 - a1 );\n\n}\n\n/**\n * Returns the percentage in the closed interval `[0, 1]` of the given value\n * between the start and end point.\n *\n * @param {number} x - The start point\n * @param {number} y - The end point.\n * @param {number} value - A value between start and end.\n * @return {number} The interpolation factor.\n */\nfunction inverseLerp( x, y, value ) {\n\n\t// https://www.gamedev.net/tutorials/programming/general-and-gameplay-programming/inverse-lerp-a-super-useful-yet-often-overlooked-function-r5230/\n\n\tif ( x !== y ) {\n\n\t\treturn ( value - x ) / ( y - x );\n\n\t} else {\n\n\t\treturn 0;\n\n\t}\n\n}\n\n/**\n * Returns a value linearly interpolated from two known points based on the given interval -\n * `t = 0` will return `x` and `t = 1` will return `y`.\n *\n * @param {number} x - The start point\n * @param {number} y - The end point.\n * @param {number} t - The interpolation factor in the closed interval `[0, 1]`.\n * @return {number} The interpolated value.\n */\nfunction lerp( x, y, t ) {\n\n\treturn ( 1 - t ) * x + t * y;\n\n}\n\n/**\n * Smoothly interpolate a number from `x` to `y` in a spring-like manner using a delta\n * time to maintain frame rate independent movement. For details, see\n * [Frame rate independent damping using lerp]{@link http://www.rorydriscoll.com/2016/03/07/frame-rate-independent-damping-using-lerp/}.\n *\n * @param {number} x - The current point.\n * @param {number} y - The target point.\n * @param {number} lambda - A higher lambda value will make the movement more sudden,\n * and a lower value will make the movement more gradual.\n * @param {number} dt - Delta time in seconds.\n * @return {number} The interpolated value.\n */\nfunction damp( x, y, lambda, dt ) {\n\n\treturn lerp( x, y, 1 - Math.exp( - lambda * dt ) );\n\n}\n\n/**\n * Returns a value that alternates between `0` and the given `length` parameter.\n *\n * @param {number} x - The value to pingpong.\n * @param {number} [length=1] - The positive value the function will pingpong to.\n * @return {number} The alternated value.\n */\nfunction pingpong( x, length = 1 ) {\n\n\t// https://www.desmos.com/calculator/vcsjnyz7x4\n\n\treturn length - Math.abs( euclideanModulo( x, length * 2 ) - length );\n\n}\n\n/**\n * Returns a value in the range `[0,1]` that represents the percentage that `x` has\n * moved between `min` and `max`, but smoothed or slowed down the closer `x` is to\n * the `min` and `max`.\n *\n * See [Smoothstep]{@link http://en.wikipedia.org/wiki/Smoothstep} for more details.\n *\n * @param {number} x - The value to evaluate based on its position between min and max.\n * @param {number} min - The min value. Any x value below min will be `0`.\n * @param {number} max - The max value. Any x value above max will be `1`.\n * @return {number} The alternated value.\n */\nfunction smoothstep( x, min, max ) {\n\n\tif ( x <= min ) return 0;\n\tif ( x >= max ) return 1;\n\n\tx = ( x - min ) / ( max - min );\n\n\treturn x * x * ( 3 - 2 * x );\n\n}\n\n/**\n * A [variation on smoothstep]{@link https://en.wikipedia.org/wiki/Smoothstep#Variations}\n * that has zero 1st and 2nd order derivatives at x=0 and x=1.\n *\n * @param {number} x - The value to evaluate based on its position between min and max.\n * @param {number} min - The min value. Any x value below min will be `0`.\n * @param {number} max - The max value. Any x value above max will be `1`.\n * @return {number} The alternated value.\n */\nfunction smootherstep( x, min, max ) {\n\n\tif ( x <= min ) return 0;\n\tif ( x >= max ) return 1;\n\n\tx = ( x - min ) / ( max - min );\n\n\treturn x * x * x * ( x * ( x * 6 - 15 ) + 10 );\n\n}\n\n/**\n * Returns a random integer from `<low, high>` interval.\n *\n * @param {number} low - The lower value boundary.\n * @param {number} high - The upper value boundary\n * @return {number} A random integer.\n */\nfunction randInt( low, high ) {\n\n\treturn low + Math.floor( Math.random() * ( high - low + 1 ) );\n\n}\n\n/**\n * Returns a random float from `<low, high>` interval.\n *\n * @param {number} low - The lower value boundary.\n * @param {number} high - The upper value boundary\n * @return {number} A random float.\n */\nfunction randFloat( low, high ) {\n\n\treturn low + Math.random() * ( high - low );\n\n}\n\n/**\n * Returns a random integer from `<-range/2, range/2>` interval.\n *\n * @param {number} range - Defines the value range.\n * @return {number} A random float.\n */\nfunction randFloatSpread( range ) {\n\n\treturn range * ( 0.5 - Math.random() );\n\n}\n\n/**\n * Returns a deterministic pseudo-random float in the interval `[0, 1]`.\n *\n * @param {number} [s] - The integer seed.\n * @return {number} A random float.\n */\nfunction seededRandom( s ) {\n\n\tif ( s !== undefined ) _seed = s;\n\n\t// Mulberry32 generator\n\n\tlet t = _seed += 0x6D2B79F5;\n\n\tt = Math.imul( t ^ t >>> 15, t | 1 );\n\n\tt ^= t + Math.imul( t ^ t >>> 7, t | 61 );\n\n\treturn ( ( t ^ t >>> 14 ) >>> 0 ) / 4294967296;\n\n}\n\n/**\n * Converts degrees to radians.\n *\n * @param {number} degrees - A value in degrees.\n * @return {number} The converted value in radians.\n */\nfunction degToRad( degrees ) {\n\n\treturn degrees * DEG2RAD;\n\n}\n\n/**\n * Converts radians to degrees.\n *\n * @param {number} radians - A value in radians.\n * @return {number} The converted value in degrees.\n */\nfunction radToDeg( radians ) {\n\n\treturn radians * RAD2DEG;\n\n}\n\n/**\n * Returns `true` if the given number is a power of two.\n *\n * @param {number} value - The value to check.\n * @return {boolean} Whether the given number is a power of two or not.\n */\nfunction isPowerOfTwo( value ) {\n\n\treturn ( value & ( value - 1 ) ) === 0 && value !== 0;\n\n}\n\n/**\n * Returns the smallest power of two that is greater than or equal to the given number.\n *\n * @param {number} value - The value to find a POT for.\n * @return {number} The smallest power of two that is greater than or equal to the given number.\n */\nfunction ceilPowerOfTwo( value ) {\n\n\treturn Math.pow( 2, Math.ceil( Math.log( value ) / Math.LN2 ) );\n\n}\n\n/**\n * Returns the largest power of two that is less than or equal to the given number.\n *\n * @param {number} value - The value to find a POT for.\n * @return {number} The largest power of two that is less than or equal to the given number.\n */\nfunction floorPowerOfTwo( value ) {\n\n\treturn Math.pow( 2, Math.floor( Math.log( value ) / Math.LN2 ) );\n\n}\n\n/**\n * Sets the given quaternion from the [Intrinsic Proper Euler Angles]{@link https://en.wikipedia.org/wiki/Euler_angles}\n * defined by the given angles and order.\n *\n * Rotations are applied to the axes in the order specified by order:\n * rotation by angle `a` is applied first, then by angle `b`, then by angle `c`.\n *\n * @param {Quaternion} q - The quaternion to set.\n * @param {number} a - The rotation applied to the first axis, in radians.\n * @param {number} b - The rotation applied to the second axis, in radians.\n * @param {number} c - The rotation applied to the third axis, in radians.\n * @param {('XYX'|'XZX'|'YXY'|'YZY'|'ZXZ'|'ZYZ')} order - A string specifying the axes order.\n */\nfunction setQuaternionFromProperEuler( q, a, b, c, order ) {\n\n\tconst cos = Math.cos;\n\tconst sin = Math.sin;\n\n\tconst c2 = cos( b / 2 );\n\tconst s2 = sin( b / 2 );\n\n\tconst c13 = cos( ( a + c ) / 2 );\n\tconst s13 = sin( ( a + c ) / 2 );\n\n\tconst c1_3 = cos( ( a - c ) / 2 );\n\tconst s1_3 = sin( ( a - c ) / 2 );\n\n\tconst c3_1 = cos( ( c - a ) / 2 );\n\tconst s3_1 = sin( ( c - a ) / 2 );\n\n\tswitch ( order ) {\n\n\t\tcase 'XYX':\n\t\t\tq.set( c2 * s13, s2 * c1_3, s2 * s1_3, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'YZY':\n\t\t\tq.set( s2 * s1_3, c2 * s13, s2 * c1_3, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'ZXZ':\n\t\t\tq.set( s2 * c1_3, s2 * s1_3, c2 * s13, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'XZX':\n\t\t\tq.set( c2 * s13, s2 * s3_1, s2 * c3_1, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'YXY':\n\t\t\tq.set( s2 * c3_1, c2 * s13, s2 * s3_1, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'ZYZ':\n\t\t\tq.set( s2 * s3_1, s2 * c3_1, c2 * s13, c2 * c13 );\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tconsole.warn( 'THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: ' + order );\n\n\t}\n\n}\n\n/**\n * Denormalizes the given value according to the given typed array.\n *\n * @param {number} value - The value to denormalize.\n * @param {TypedArray} array - The typed array that defines the data type of the value.\n * @return {number} The denormalize (float) value in the range `[0,1]`.\n */\nfunction denormalize( value, array ) {\n\n\tswitch ( array.constructor ) {\n\n\t\tcase Float32Array:\n\n\t\t\treturn value;\n\n\t\tcase Uint32Array:\n\n\t\t\treturn value / 4294967295.0;\n\n\t\tcase Uint16Array:\n\n\t\t\treturn value / 65535.0;\n\n\t\tcase Uint8Array:\n\n\t\t\treturn value / 255.0;\n\n\t\tcase Int32Array:\n\n\t\t\treturn Math.max( value / 2147483647.0, - 1.0 );\n\n\t\tcase Int16Array:\n\n\t\t\treturn Math.max( value / 32767.0, - 1.0 );\n\n\t\tcase Int8Array:\n\n\t\t\treturn Math.max( value / 127.0, - 1.0 );\n\n\t\tdefault:\n\n\t\t\tthrow new Error( 'Invalid component type.' );\n\n\t}\n\n}\n\n/**\n * Normalizes the given value according to the given typed array.\n *\n * @param {number} value - The float value in the range `[0,1]` to normalize.\n * @param {TypedArray} array - The typed array that defines the data type of the value.\n * @return {number} The normalize value.\n */\nfunction normalize( value, array ) {\n\n\tswitch ( array.constructor ) {\n\n\t\tcase Float32Array:\n\n\t\t\treturn value;\n\n\t\tcase Uint32Array:\n\n\t\t\treturn Math.round( value * 4294967295.0 );\n\n\t\tcase Uint16Array:\n\n\t\t\treturn Math.round( value * 65535.0 );\n\n\t\tcase Uint8Array:\n\n\t\t\treturn Math.round( value * 255.0 );\n\n\t\tcase Int32Array:\n\n\t\t\treturn Math.round( value * 2147483647.0 );\n\n\t\tcase Int16Array:\n\n\t\t\treturn Math.round( value * 32767.0 );\n\n\t\tcase Int8Array:\n\n\t\t\treturn Math.round( value * 127.0 );\n\n\t\tdefault:\n\n\t\t\tthrow new Error( 'Invalid component type.' );\n\n\t}\n\n}\n\nconst MathUtils = {\n\tDEG2RAD: DEG2RAD,\n\tRAD2DEG: RAD2DEG,\n\tgenerateUUID: generateUUID,\n\tclamp: clamp,\n\teuclideanModulo: euclideanModulo,\n\tmapLinear: mapLinear,\n\tinverseLerp: inverseLerp,\n\tlerp: lerp,\n\tdamp: damp,\n\tpingpong: pingpong,\n\tsmoothstep: smoothstep,\n\tsmootherstep: smootherstep,\n\trandInt: randInt,\n\trandFloat: randFloat,\n\trandFloatSpread: randFloatSpread,\n\tseededRandom: seededRandom,\n\tdegToRad: degToRad,\n\tradToDeg: radToDeg,\n\tisPowerOfTwo: isPowerOfTwo,\n\tceilPowerOfTwo: ceilPowerOfTwo,\n\tfloorPowerOfTwo: floorPowerOfTwo,\n\tsetQuaternionFromProperEuler: setQuaternionFromProperEuler,\n\tnormalize: normalize,\n\tdenormalize: denormalize\n};\n\nexport {\n\tDEG2RAD,\n\tRAD2DEG,\n\tgenerateUUID,\n\tclamp,\n\teuclideanModulo,\n\tmapLinear,\n\tinverseLerp,\n\tlerp,\n\tdamp,\n\tpingpong,\n\tsmoothstep,\n\tsmootherstep,\n\trandInt,\n\trandFloat,\n\trandFloatSpread,\n\tseededRandom,\n\tdegToRad,\n\tradToDeg,\n\tisPowerOfTwo,\n\tceilPowerOfTwo,\n\tfloorPowerOfTwo,\n\tsetQuaternionFromProperEuler,\n\tnormalize,\n\tdenormalize,\n\tMathUtils\n};\n","import { clamp } from './MathUtils.js';\n\n/**\n * Class for representing a Quaternion. Quaternions are used in three.js to represent rotations.\n *\n * Iterating through a vector instance will yield its components `(x, y, z, w)` in\n * the corresponding order.\n *\n * Note that three.js expects Quaternions to be normalized.\n * ```js\n * const quaternion = new THREE.Quaternion();\n * quaternion.setFromAxisAngle( new THREE.Vector3( 0, 1, 0 ), Math.PI / 2 );\n *\n * const vector = new THREE.Vector3( 1, 0, 0 );\n * vector.applyQuaternion( quaternion );\n * ```\n */\nclass Quaternion {\n\n\t/**\n\t * Constructs a new quaternion.\n\t *\n\t * @param {number} [x=0] - The x value of this quaternion.\n\t * @param {number} [y=0] - The y value of this quaternion.\n\t * @param {number} [z=0] - The z value of this quaternion.\n\t * @param {number} [w=1] - The w value of this quaternion.\n\t */\n\tconstructor( x = 0, y = 0, z = 0, w = 1 ) {\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isQuaternion = true;\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._w = w;\n\n\t}\n\n\t/**\n\t * Interpolates between two quaternions via SLERP. This implementation assumes the\n\t * quaternion data are managed in flat arrays.\n\t *\n\t * @param {Array<number>} dst - The destination array.\n\t * @param {number} dstOffset - An offset into the destination array.\n\t * @param {Array<number>} src0 - The source array of the first quaternion.\n\t * @param {number} srcOffset0 - An offset into the first source array.\n\t * @param {Array<number>} src1 - The source array of the second quaternion.\n\t * @param {number} srcOffset1 - An offset into the second source array.\n\t * @param {number} t - The interpolation factor in the range `[0,1]`.\n\t * @see {@link Quaternion#slerp}\n\t */\n\tstatic slerpFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t ) {\n\n\t\t// fuzz-free, array-based Quaternion SLERP operation\n\n\t\tlet x0 = src0[ srcOffset0 + 0 ],\n\t\t\ty0 = src0[ srcOffset0 + 1 ],\n\t\t\tz0 = src0[ srcOffset0 + 2 ],\n\t\t\tw0 = src0[ srcOffset0 + 3 ];\n\n\t\tconst x1 = src1[ srcOffset1 + 0 ],\n\t\t\ty1 = src1[ srcOffset1 + 1 ],\n\t\t\tz1 = src1[ srcOffset1 + 2 ],\n\t\t\tw1 = src1[ srcOffset1 + 3 ];\n\n\t\tif ( t === 0 ) {\n\n\t\t\tdst[ dstOffset + 0 ] = x0;\n\t\t\tdst[ dstOffset + 1 ] = y0;\n\t\t\tdst[ dstOffset + 2 ] = z0;\n\t\t\tdst[ dstOffset + 3 ] = w0;\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( t === 1 ) {\n\n\t\t\tdst[ dstOffset + 0 ] = x1;\n\t\t\tdst[ dstOffset + 1 ] = y1;\n\t\t\tdst[ dstOffset + 2 ] = z1;\n\t\t\tdst[ dstOffset + 3 ] = w1;\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1 ) {\n\n\t\t\tlet s = 1 - t;\n\t\t\tconst cos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1,\n\t\t\t\tdir = ( cos >= 0 ? 1 : - 1 ),\n\t\t\t\tsqrSin = 1 - cos * cos;\n\n\t\t\t// Skip the Slerp for tiny steps to avoid numeric problems:\n\t\t\tif ( sqrSin > Number.EPSILON ) {\n\n\t\t\t\tconst sin = Math.sqrt( sqrSin ),\n\t\t\t\t\tlen = Math.atan2( sin, cos * dir );\n\n\t\t\t\ts = Math.sin( s * len ) / sin;\n\t\t\t\tt = Math.sin( t * len ) / sin;\n\n\t\t\t}\n\n\t\t\tconst tDir = t * dir;\n\n\t\t\tx0 = x0 * s + x1 * tDir;\n\t\t\ty0 = y0 * s + y1 * tDir;\n\t\t\tz0 = z0 * s + z1 * tDir;\n\t\t\tw0 = w0 * s + w1 * tDir;\n\n\t\t\t// Normalize in case we just did a lerp:\n\t\t\tif ( s === 1 - t ) {\n\n\t\t\t\tconst f = 1 / Math.sqrt( x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0 );\n\n\t\t\t\tx0 *= f;\n\t\t\t\ty0 *= f;\n\t\t\t\tz0 *= f;\n\t\t\t\tw0 *= f;\n\n\t\t\t}\n\n\t\t}\n\n\t\tdst[ dstOffset ] = x0;\n\t\tdst[ dstOffset + 1 ] = y0;\n\t\tdst[ dstOffset + 2 ] = z0;\n\t\tdst[ dstOffset + 3 ] = w0;\n\n\t}\n\n\t/**\n\t * Multiplies two quaternions. This implementation assumes the quaternion data are managed\n\t * in flat arrays.\n\t *\n\t * @param {Array<number>} dst - The destination array.\n\t * @param {number} dstOffset - An offset into the destination array.\n\t * @param {Array<number>} src0 - The source array of the first quaternion.\n\t * @param {number} srcOffset0 - An offset into the first source array.\n\t * @param {Array<number>} src1 - The source array of the second quaternion.\n\t * @param {number} srcOffset1 - An offset into the second source array.\n\t * @return {Array<number>} The destination array.\n\t * @see {@link Quaternion#multiplyQuaternions}.\n\t */\n\tstatic multiplyQuaternionsFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1 ) {\n\n\t\tconst x0 = src0[ srcOffset0 ];\n\t\tconst y0 = src0[ srcOffset0 + 1 ];\n\t\tconst z0 = src0[ srcOffset0 + 2 ];\n\t\tconst w0 = src0[ srcOffset0 + 3 ];\n\n\t\tconst x1 = src1[ srcOffset1 ];\n\t\tconst y1 = src1[ srcOffset1 + 1 ];\n\t\tconst z1 = src1[ srcOffset1 + 2 ];\n\t\tconst w1 = src1[ srcOffset1 + 3 ];\n\n\t\tdst[ dstOffset ] = x0 * w1 + w0 * x1 + y0 * z1 - z0 * y1;\n\t\tdst[ dstOffset + 1 ] = y0 * w1 + w0 * y1 + z0 * x1 - x0 * z1;\n\t\tdst[ dstOffset + 2 ] = z0 * w1 + w0 * z1 + x0 * y1 - y0 * x1;\n\t\tdst[ dstOffset + 3 ] = w0 * w1 - x0 * x1 - y0 * y1 - z0 * z1;\n\n\t\treturn dst;\n\n\t}\n\n\t/**\n\t * The x value of this quaternion.\n\t *\n\t * @type {number}\n\t * @default 0\n\t */\n\tget x() {\n\n\t\treturn this._x;\n\n\t}\n\n\tset x( value ) {\n\n\t\tthis._x = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\t/**\n\t * The y value of this quaternion.\n\t *\n\t * @type {number}\n\t * @default 0\n\t */\n\tget y() {\n\n\t\treturn this._y;\n\n\t}\n\n\tset y( value ) {\n\n\t\tthis._y = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\t/**\n\t * The z value of this quaternion.\n\t *\n\t * @type {number}\n\t * @default 0\n\t */\n\tget z() {\n\n\t\treturn this._z;\n\n\t}\n\n\tset z( value ) {\n\n\t\tthis._z = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\t/**\n\t * The w value of this quaternion.\n\t *\n\t * @type {number}\n\t * @default 1\n\t */\n\tget w() {\n\n\t\treturn this._w;\n\n\t}\n\n\tset w( value ) {\n\n\t\tthis._w = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\t/**\n\t * Sets the quaternion components.\n\t *\n\t * @param {number} x - The x value of this quaternion.\n\t * @param {number} y - The y value of this quaternion.\n\t * @param {number} z - The z value of this quaternion.\n\t * @param {number} w - The w value of this quaternion.\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\tset( x, y, z, w ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._w = w;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns a new quaternion with copied values from this instance.\n\t *\n\t * @return {Quaternion} A clone of this instance.\n\t */\n\tclone() {\n\n\t\treturn new this.constructor( this._x, this._y, this._z, this._w );\n\n\t}\n\n\t/**\n\t * Copies the values of the given quaternion to this instance.\n\t *\n\t * @param {Quaternion} quaternion - The quaternion to copy.\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\tcopy( quaternion ) {\n\n\t\tthis._x = quaternion.x;\n\t\tthis._y = quaternion.y;\n\t\tthis._z = quaternion.z;\n\t\tthis._w = quaternion.w;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets this quaternion from the rotation specified by the given\n\t * Euler angles.\n\t *\n\t * @param {Euler} euler - The Euler angles.\n\t * @param {boolean} [update=true] - Whether the internal `onChange` callback should be executed or not.\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\tsetFromEuler( euler, update = true ) {\n\n\t\tconst x = euler._x, y = euler._y, z = euler._z, order = euler._order;\n\n\t\t// http://www.mathworks.com/matlabcentral/fileexchange/\n\t\t// \t20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/\n\t\t//\tcontent/SpinCalc.m\n\n\t\tconst cos = Math.cos;\n\t\tconst sin = Math.sin;\n\n\t\tconst c1 = cos( x / 2 );\n\t\tconst c2 = cos( y / 2 );\n\t\tconst c3 = cos( z / 2 );\n\n\t\tconst s1 = sin( x / 2 );\n\t\tconst s2 = sin( y / 2 );\n\t\tconst s3 = sin( z / 2 );\n\n\t\tswitch ( order ) {\n\n\t\t\tcase 'XYZ':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'YXZ':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZXY':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZYX':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'YZX':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'XZY':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.warn( 'THREE.Quaternion: .setFromEuler() encountered an unknown order: ' + order );\n\n\t\t}\n\n\t\tif ( update === true ) this._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets this quaternion from the given axis and angle.\n\t *\n\t * @param {Vector3} axis - The normalized axis.\n\t * @param {number} angle - The angle in radians.\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\tsetFromAxisAngle( axis, angle ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm\n\n\t\tconst halfAngle = angle / 2, s = Math.sin( halfAngle );\n\n\t\tthis._x = axis.x * s;\n\t\tthis._y = axis.y * s;\n\t\tthis._z = axis.z * s;\n\t\tthis._w = Math.cos( halfAngle );\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets this quaternion from the given rotation matrix.\n\t *\n\t * @param {Matrix4} m - A 4x4 matrix of which the upper 3x3 of matrix is a pure rotation matrix (i.e. unscaled).\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\tsetFromRotationMatrix( m ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tconst te = m.elements,\n\n\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\n\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\n\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ],\n\n\t\t\ttrace = m11 + m22 + m33;\n\n\t\tif ( trace > 0 ) {\n\n\t\t\tconst s = 0.5 / Math.sqrt( trace + 1.0 );\n\n\t\t\tthis._w = 0.25 / s;\n\t\t\tthis._x = ( m32 - m23 ) * s;\n\t\t\tthis._y = ( m13 - m31 ) * s;\n\t\t\tthis._z = ( m21 - m12 ) * s;\n\n\t\t} else if ( m11 > m22 && m11 > m33 ) {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m11 - m22 - m33 );\n\n\t\t\tthis._w = ( m32 - m23 ) / s;\n\t\t\tthis._x = 0.25 * s;\n\t\t\tthis._y = ( m12 + m21 ) / s;\n\t\t\tthis._z = ( m13 + m31 ) / s;\n\n\t\t} else if ( m22 > m33 ) {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m22 - m11 - m33 );\n\n\t\t\tthis._w = ( m13 - m31 ) / s;\n\t\t\tthis._x = ( m12 + m21 ) / s;\n\t\t\tthis._y = 0.25 * s;\n\t\t\tthis._z = ( m23 + m32 ) / s;\n\n\t\t} else {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m33 - m11 - m22 );\n\n\t\t\tthis._w = ( m21 - m12 ) / s;\n\t\t\tthis._x = ( m13 + m31 ) / s;\n\t\t\tthis._y = ( m23 + m32 ) / s;\n\t\t\tthis._z = 0.25 * s;\n\n\t\t}\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets this quaternion to the rotation required to rotate the direction vector\n\t * `vFrom` to the direction vector `vTo`.\n\t *\n\t * @param {Vector3} vFrom - The first (normalized) direction vector.\n\t * @param {Vector3} vTo - The second (normalized) direction vector.\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\tsetFromUnitVectors( vFrom, vTo ) {\n\n\t\t// assumes direction vectors vFrom and vTo are normalized\n\n\t\tlet r = vFrom.dot( vTo ) + 1;\n\n\t\tif ( r < Number.EPSILON ) {\n\n\t\t\t// vFrom and vTo point in opposite directions\n\n\t\t\tr = 0;\n\n\t\t\tif ( Math.abs( vFrom.x ) > Math.abs( vFrom.z ) ) {\n\n\t\t\t\tthis._x = - vFrom.y;\n\t\t\t\tthis._y = vFrom.x;\n\t\t\t\tthis._z = 0;\n\t\t\t\tthis._w = r;\n\n\t\t\t} else {\n\n\t\t\t\tthis._x = 0;\n\t\t\t\tthis._y = - vFrom.z;\n\t\t\t\tthis._z = vFrom.y;\n\t\t\t\tthis._w = r;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// crossVectors( vFrom, vTo ); // inlined to avoid cyclic dependency on Vector3\n\n\t\t\tthis._x = vFrom.y * vTo.z - vFrom.z * vTo.y;\n\t\t\tthis._y = vFrom.z * vTo.x - vFrom.x * vTo.z;\n\t\t\tthis._z = vFrom.x * vTo.y - vFrom.y * vTo.x;\n\t\t\tthis._w = r;\n\n\t\t}\n\n\t\treturn this.normalize();\n\n\t}\n\n\t/**\n\t * Returns the angle between this quaternion and the given one in radians.\n\t *\n\t * @param {Quaternion} q - The quaternion to compute the angle with.\n\t * @return {number} The angle in radians.\n\t */\n\tangleTo( q ) {\n\n\t\treturn 2 * Math.acos( Math.abs( clamp( this.dot( q ), - 1, 1 ) ) );\n\n\t}\n\n\t/**\n\t * Rotates this quaternion by a given angular step to the given quaternion.\n\t * The method ensures that the final quaternion will not overshoot `q`.\n\t *\n\t * @param {Quaternion} q - The target quaternion.\n\t * @param {number} step - The angular step in radians.\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\trotateTowards( q, step ) {\n\n\t\tconst angle = this.angleTo( q );\n\n\t\tif ( angle === 0 ) return this;\n\n\t\tconst t = Math.min( 1, step / angle );\n\n\t\tthis.slerp( q, t );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets this quaternion to the identity quaternion; that is, to the\n\t * quaternion that represents \"no rotation\".\n\t *\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\tidentity() {\n\n\t\treturn this.set( 0, 0, 0, 1 );\n\n\t}\n\n\t/**\n\t * Inverts this quaternion via {@link Quaternion#conjugate}. The\n\t * quaternion is assumed to have unit length.\n\t *\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\tinvert() {\n\n\t\treturn this.conjugate();\n\n\t}\n\n\t/**\n\t * Returns the rotational conjugate of this quaternion. The conjugate of a\n\t * quaternion represents the same rotation in the opposite direction about\n\t * the rotational axis.\n\t *\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\tconjugate() {\n\n\t\tthis._x *= - 1;\n\t\tthis._y *= - 1;\n\t\tthis._z *= - 1;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Calculates the dot product of this quaternion and the given one.\n\t *\n\t * @param {Quaternion} v - The quaternion to compute the dot product with.\n\t * @return {number} The result of the dot product.\n\t */\n\tdot( v ) {\n\n\t\treturn this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w;\n\n\t}\n\n\t/**\n\t * Computes the squared Euclidean length (straight-line length) of this quaternion,\n\t * considered as a 4 dimensional vector. This can be useful if you are comparing the\n\t * lengths of two quaternions, as this is a slightly more efficient calculation than\n\t * {@link Quaternion#length}.\n\t *\n\t * @return {number} The squared Euclidean length.\n\t */\n\tlengthSq() {\n\n\t\treturn this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w;\n\n\t}\n\n\t/**\n\t * Computes the Euclidean length (straight-line length) of this quaternion,\n\t * considered as a 4 dimensional vector.\n\t *\n\t * @return {number} The Euclidean length.\n\t */\n\tlength() {\n\n\t\treturn Math.sqrt( this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w );\n\n\t}\n\n\t/**\n\t * Normalizes this quaternion - that is, calculated the quaternion that performs\n\t * the same rotation as this one, but has a length equal to `1`.\n\t *\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\tnormalize() {\n\n\t\tlet l = this.length();\n\n\t\tif ( l === 0 ) {\n\n\t\t\tthis._x = 0;\n\t\t\tthis._y = 0;\n\t\t\tthis._z = 0;\n\t\t\tthis._w = 1;\n\n\t\t} else {\n\n\t\t\tl = 1 / l;\n\n\t\t\tthis._x = this._x * l;\n\t\t\tthis._y = this._y * l;\n\t\t\tthis._z = this._z * l;\n\t\t\tthis._w = this._w * l;\n\n\t\t}\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Multiplies this quaternion by the given one.\n\t *\n\t * @param {Quaternion} q - The quaternion.\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\tmultiply( q ) {\n\n\t\treturn this.multiplyQuaternions( this, q );\n\n\t}\n\n\t/**\n\t * Pre-multiplies this quaternion by the given one.\n\t *\n\t * @param {Quaternion} q - The quaternion.\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\tpremultiply( q ) {\n\n\t\treturn this.multiplyQuaternions( q, this );\n\n\t}\n\n\t/**\n\t * Multiplies the given quaternions and stores the result in this instance.\n\t *\n\t * @param {Quaternion} a - The first quaternion.\n\t * @param {Quaternion} b - The second quaternion.\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\tmultiplyQuaternions( a, b ) {\n\n\t\t// from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm\n\n\t\tconst qax = a._x, qay = a._y, qaz = a._z, qaw = a._w;\n\t\tconst qbx = b._x, qby = b._y, qbz = b._z, qbw = b._w;\n\n\t\tthis._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby;\n\t\tthis._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz;\n\t\tthis._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx;\n\t\tthis._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Performs a spherical linear interpolation between quaternions.\n\t *\n\t * @param {Quaternion} qb - The target quaternion.\n\t * @param {number} t - The interpolation factor in the closed interval `[0, 1]`.\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\tslerp( qb, t ) {\n\n\t\tif ( t === 0 ) return this;\n\t\tif ( t === 1 ) return this.copy( qb );\n\n\t\tconst x = this._x, y = this._y, z = this._z, w = this._w;\n\n\t\t// http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/\n\n\t\tlet cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z;\n\n\t\tif ( cosHalfTheta < 0 ) {\n\n\t\t\tthis._w = - qb._w;\n\t\t\tthis._x = - qb._x;\n\t\t\tthis._y = - qb._y;\n\t\t\tthis._z = - qb._z;\n\n\t\t\tcosHalfTheta = - cosHalfTheta;\n\n\t\t} else {\n\n\t\t\tthis.copy( qb );\n\n\t\t}\n\n\t\tif ( cosHalfTheta >= 1.0 ) {\n\n\t\t\tthis._w = w;\n\t\t\tthis._x = x;\n\t\t\tthis._y = y;\n\t\t\tthis._z = z;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst sqrSinHalfTheta = 1.0 - cosHalfTheta * cosHalfTheta;\n\n\t\tif ( sqrSinHalfTheta <= Number.EPSILON ) {\n\n\t\t\tconst s = 1 - t;\n\t\t\tthis._w = s * w + t * this._w;\n\t\t\tthis._x = s * x + t * this._x;\n\t\t\tthis._y = s * y + t * this._y;\n\t\t\tthis._z = s * z + t * this._z;\n\n\t\t\tthis.normalize(); // normalize calls _onChangeCallback()\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst sinHalfTheta = Math.sqrt( sqrSinHalfTheta );\n\t\tconst halfTheta = Math.atan2( sinHalfTheta, cosHalfTheta );\n\t\tconst ratioA = Math.sin( ( 1 - t ) * halfTheta ) / sinHalfTheta,\n\t\t\tratioB = Math.sin( t * halfTheta ) / sinHalfTheta;\n\n\t\tthis._w = ( w * ratioA + this._w * ratioB );\n\t\tthis._x = ( x * ratioA + this._x * ratioB );\n\t\tthis._y = ( y * ratioA + this._y * ratioB );\n\t\tthis._z = ( z * ratioA + this._z * ratioB );\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Performs a spherical linear interpolation between the given quaternions\n\t * and stores the result in this quaternion.\n\t *\n\t * @param {Quaternion} qa - The source quaternion.\n\t * @param {Quaternion} qb - The target quaternion.\n\t * @param {number} t - The interpolation factor in the closed interval `[0, 1]`.\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\tslerpQuaternions( qa, qb, t ) {\n\n\t\treturn this.copy( qa ).slerp( qb, t );\n\n\t}\n\n\t/**\n\t * Sets this quaternion to a uniformly random, normalized quaternion.\n\t *\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\trandom() {\n\n\t\t// Ken Shoemake\n\t\t// Uniform random rotations\n\t\t// D. Kirk, editor, Graphics Gems III, pages 124-132. Academic Press, New York, 1992.\n\n\t\tconst theta1 = 2 * Math.PI * Math.random();\n\t\tconst theta2 = 2 * Math.PI * Math.random();\n\n\t\tconst x0 = Math.random();\n\t\tconst r1 = Math.sqrt( 1 - x0 );\n\t\tconst r2 = Math.sqrt( x0 );\n\n\t\treturn this.set(\n\t\t\tr1 * Math.sin( theta1 ),\n\t\t\tr1 * Math.cos( theta1 ),\n\t\t\tr2 * Math.sin( theta2 ),\n\t\t\tr2 * Math.cos( theta2 ),\n\t\t);\n\n\t}\n\n\t/**\n\t * Returns `true` if this quaternion is equal with the given one.\n\t *\n\t * @param {Quaternion} quaternion - The quaternion to test for equality.\n\t * @return {boolean} Whether this quaternion is equal with the given one.\n\t */\n\tequals( quaternion ) {\n\n\t\treturn ( quaternion._x === this._x ) && ( quaternion._y === this._y ) && ( quaternion._z === this._z ) && ( quaternion._w === this._w );\n\n\t}\n\n\t/**\n\t * Sets this quaternion's components from the given array.\n\t *\n\t * @param {Array<number>} array - An array holding the quaternion component values.\n\t * @param {number} [offset=0] - The offset into the array.\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis._x = array[ offset ];\n\t\tthis._y = array[ offset + 1 ];\n\t\tthis._z = array[ offset + 2 ];\n\t\tthis._w = array[ offset + 3 ];\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Writes the components of this quaternion to the given array. If no array is provided,\n\t * the method returns a new instance.\n\t *\n\t * @param {Array<number>} [array=[]] - The target array holding the quaternion components.\n\t * @param {number} [offset=0] - Index of the first element in the array.\n\t * @return {Array<number>} The quaternion components.\n\t */\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this._x;\n\t\tarray[ offset + 1 ] = this._y;\n\t\tarray[ offset + 2 ] = this._z;\n\t\tarray[ offset + 3 ] = this._w;\n\n\t\treturn array;\n\n\t}\n\n\t/**\n\t * Sets the components of this quaternion from the given buffer attribute.\n\t *\n\t * @param {BufferAttribute} attribute - The buffer attribute holding quaternion data.\n\t * @param {number} index - The index into the attribute.\n\t * @return {Quaternion} A reference to this quaternion.\n\t */\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis._x = attribute.getX( index );\n\t\tthis._y = attribute.getY( index );\n\t\tthis._z = attribute.getZ( index );\n\t\tthis._w = attribute.getW( index );\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * This methods defines the serialization result of this class. Returns the\n\t * numerical elements of this quaternion in an array of format `[x, y, z, w]`.\n\t *\n\t * @return {Array<number>} The serialized quaternion.\n\t */\n\ttoJSON() {\n\n\t\treturn this.toArray();\n\n\t}\n\n\t_onChange( callback ) {\n\n\t\tthis._onChangeCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\t_onChangeCallback() {}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this._x;\n\t\tyield this._y;\n\t\tyield this._z;\n\t\tyield this._w;\n\n\t}\n\n}\n\nexport { Quaternion };\n","import { clamp } from './MathUtils.js';\nimport { Quaternion } from './Quaternion.js';\n\n/**\n * Class representing a 3D vector. A 3D vector is an ordered triplet of numbers\n * (labeled x, y and z), which can be used to represent a number of things, such as:\n *\n * - A point in 3D space.\n * - A direction and length in 3D space. In three.js the length will\n * always be the Euclidean distance(straight-line distance) from `(0, 0, 0)` to `(x, y, z)`\n * and the direction is also measured from `(0, 0, 0)` towards `(x, y, z)`.\n * - Any arbitrary ordered triplet of numbers.\n *\n * There are other things a 3D vector can be used to represent, such as\n * momentum vectors and so on, however these are the most\n * common uses in three.js.\n *\n * Iterating through a vector instance will yield its components `(x, y, z)` in\n * the corresponding order.\n * ```js\n * const a = new THREE.Vector3( 0, 1, 0 );\n *\n * //no arguments; will be initialised to (0, 0, 0)\n * const b = new THREE.Vector3( );\n *\n * const d = a.distanceTo( b );\n * ```\n */\nclass Vector3 {\n\n\t/**\n\t * Constructs a new 3D vector.\n\t *\n\t * @param {number} [x=0] - The x value of this vector.\n\t * @param {number} [y=0] - The y value of this vector.\n\t * @param {number} [z=0] - The z value of this vector.\n\t */\n\tconstructor( x = 0, y = 0, z = 0 ) {\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tVector3.prototype.isVector3 = true;\n\n\t\t/**\n\t\t * The x value of this vector.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.x = x;\n\n\t\t/**\n\t\t * The y value of this vector.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.y = y;\n\n\t\t/**\n\t\t * The z value of this vector.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.z = z;\n\n\t}\n\n\t/**\n\t * Sets the vector components.\n\t *\n\t * @param {number} x - The value of the x component.\n\t * @param {number} y - The value of the y component.\n\t * @param {number} z - The value of the z component.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tset( x, y, z ) {\n\n\t\tif ( z === undefined ) z = this.z; // sprite.scale.set(x,y)\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the vector components to the same value.\n\t *\n\t * @param {number} scalar - The value to set for all vector components.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsetScalar( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\t\tthis.z = scalar;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the vector's x component to the given value\n\t *\n\t * @param {number} x - The value to set.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsetX( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the vector's y component to the given value\n\t *\n\t * @param {number} y - The value to set.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the vector's z component to the given value\n\t *\n\t * @param {number} z - The value to set.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsetZ( z ) {\n\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Allows to set a vector component with an index.\n\t *\n\t * @param {number} index - The component index. `0` equals to x, `1` equals to y, `2` equals to z.\n\t * @param {number} value - The value to set.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsetComponent( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tcase 2: this.z = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns the value of the vector component which matches the given index.\n\t *\n\t * @param {number} index - The component index. `0` equals to x, `1` equals to y, `2` equals to z.\n\t * @return {number} A vector component value.\n\t */\n\tgetComponent( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tcase 2: return this.z;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Returns a new vector with copied values from this instance.\n\t *\n\t * @return {Vector3} A clone of this instance.\n\t */\n\tclone() {\n\n\t\treturn new this.constructor( this.x, this.y, this.z );\n\n\t}\n\n\t/**\n\t * Copies the values of the given vector to this instance.\n\t *\n\t * @param {Vector3} v - The vector to copy.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tcopy( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\t\tthis.z = v.z;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Adds the given vector to this instance.\n\t *\n\t * @param {Vector3} v - The vector to add.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tadd( v ) {\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\t\tthis.z += v.z;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Adds the given scalar value to all components of this instance.\n\t *\n\t * @param {number} s - The scalar to add.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\taddScalar( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\t\tthis.z += s;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Adds the given vectors and stores the result in this instance.\n\t *\n\t * @param {Vector3} a - The first vector.\n\t * @param {Vector3} b - The second vector.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\taddVectors( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\t\tthis.z = a.z + b.z;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Adds the given vector scaled by the given factor to this instance.\n\t *\n\t * @param {Vector3|Vector4} v - The vector.\n\t * @param {number} s - The factor that scales `v`.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\taddScaledVector( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\t\tthis.z += v.z * s;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Subtracts the given vector from this instance.\n\t *\n\t * @param {Vector3} v - The vector to subtract.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsub( v ) {\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\t\tthis.z -= v.z;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Subtracts the given scalar value from all components of this instance.\n\t *\n\t * @param {number} s - The scalar to subtract.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsubScalar( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\t\tthis.z -= s;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Subtracts the given vectors and stores the result in this instance.\n\t *\n\t * @param {Vector3} a - The first vector.\n\t * @param {Vector3} b - The second vector.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsubVectors( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\t\tthis.z = a.z - b.z;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Multiplies the given vector with this instance.\n\t *\n\t * @param {Vector3} v - The vector to multiply.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tmultiply( v ) {\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\t\tthis.z *= v.z;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Multiplies the given scalar value with all components of this instance.\n\t *\n\t * @param {number} scalar - The scalar to multiply.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tmultiplyScalar( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\t\tthis.z *= scalar;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Multiplies the given vectors and stores the result in this instance.\n\t *\n\t * @param {Vector3} a - The first vector.\n\t * @param {Vector3} b - The second vector.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tmultiplyVectors( a, b ) {\n\n\t\tthis.x = a.x * b.x;\n\t\tthis.y = a.y * b.y;\n\t\tthis.z = a.z * b.z;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Applies the given Euler rotation to this vector.\n\t *\n\t * @param {Euler} euler - The Euler angles.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tapplyEuler( euler ) {\n\n\t\treturn this.applyQuaternion( _quaternion.setFromEuler( euler ) );\n\n\t}\n\n\t/**\n\t * Applies a rotation specified by an axis and an angle to this vector.\n\t *\n\t * @param {Vector3} axis - A normalized vector representing the rotation axis.\n\t * @param {number} angle - The angle in radians.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tapplyAxisAngle( axis, angle ) {\n\n\t\treturn this.applyQuaternion( _quaternion.setFromAxisAngle( axis, angle ) );\n\n\t}\n\n\t/**\n\t * Multiplies this vector with the given 3x3 matrix.\n\t *\n\t * @param {Matrix3} m - The 3x3 matrix.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tapplyMatrix3( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ] * z;\n\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ] * z;\n\t\tthis.z = e[ 2 ] * x + e[ 5 ] * y + e[ 8 ] * z;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Multiplies this vector by the given normal matrix and normalizes\n\t * the result.\n\t *\n\t * @param {Matrix3} m - The normal matrix.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tapplyNormalMatrix( m ) {\n\n\t\treturn this.applyMatrix3( m ).normalize();\n\n\t}\n\n\t/**\n\t * Multiplies this vector (with an implicit 1 in the 4th dimension) by m, and\n\t * divides by perspective.\n\t *\n\t * @param {Matrix4} m - The matrix to apply.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tapplyMatrix4( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tconst w = 1 / ( e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] );\n\n\t\tthis.x = ( e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] ) * w;\n\t\tthis.y = ( e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] ) * w;\n\t\tthis.z = ( e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] ) * w;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Applies the given Quaternion to this vector.\n\t *\n\t * @param {Quaternion} q - The Quaternion.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tapplyQuaternion( q ) {\n\n\t\t// quaternion q is assumed to have unit length\n\n\t\tconst vx = this.x, vy = this.y, vz = this.z;\n\t\tconst qx = q.x, qy = q.y, qz = q.z, qw = q.w;\n\n\t\t// t = 2 * cross( q.xyz, v );\n\t\tconst tx = 2 * ( qy * vz - qz * vy );\n\t\tconst ty = 2 * ( qz * vx - qx * vz );\n\t\tconst tz = 2 * ( qx * vy - qy * vx );\n\n\t\t// v + q.w * t + cross( q.xyz, t );\n\t\tthis.x = vx + qw * tx + qy * tz - qz * ty;\n\t\tthis.y = vy + qw * ty + qz * tx - qx * tz;\n\t\tthis.z = vz + qw * tz + qx * ty - qy * tx;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Projects this vector from world space into the camera's normalized\n\t * device coordinate (NDC) space.\n\t *\n\t * @param {Camera} camera - The camera.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tproject( camera ) {\n\n\t\treturn this.applyMatrix4( camera.matrixWorldInverse ).applyMatrix4( camera.projectionMatrix );\n\n\t}\n\n\t/**\n\t * Unprojects this vector from the camera's normalized device coordinate (NDC)\n\t * space into world space.\n\t *\n\t * @param {Camera} camera - The camera.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tunproject( camera ) {\n\n\t\treturn this.applyMatrix4( camera.projectionMatrixInverse ).applyMatrix4( camera.matrixWorld );\n\n\t}\n\n\t/**\n\t * Transforms the direction of this vector by a matrix (the upper left 3 x 3\n\t * subset of the given 4x4 matrix and then normalizes the result.\n\t *\n\t * @param {Matrix4} m - The matrix.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\ttransformDirection( m ) {\n\n\t\t// input: THREE.Matrix4 affine matrix\n\t\t// vector interpreted as a direction\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z;\n\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z;\n\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z;\n\n\t\treturn this.normalize();\n\n\t}\n\n\t/**\n\t * Divides this instance by the given vector.\n\t *\n\t * @param {Vector3} v - The vector to divide.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tdivide( v ) {\n\n\t\tthis.x /= v.x;\n\t\tthis.y /= v.y;\n\t\tthis.z /= v.z;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Divides this vector by the given scalar.\n\t *\n\t * @param {number} scalar - The scalar to divide.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tdivideScalar( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\t/**\n\t * If this vector's x, y or z value is greater than the given vector's x, y or z\n\t * value, replace that value with the corresponding min value.\n\t *\n\t * @param {Vector3} v - The vector.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tmin( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\t\tthis.z = Math.min( this.z, v.z );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * If this vector's x, y or z value is less than the given vector's x, y or z\n\t * value, replace that value with the corresponding max value.\n\t *\n\t * @param {Vector3} v - The vector.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tmax( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\t\tthis.z = Math.max( this.z, v.z );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * If this vector's x, y or z value is greater than the max vector's x, y or z\n\t * value, it is replaced by the corresponding value.\n\t * If this vector's x, y or z value is less than the min vector's x, y or z value,\n\t * it is replaced by the corresponding value.\n\t *\n\t * @param {Vector3} min - The minimum x, y and z values.\n\t * @param {Vector3} max - The maximum x, y and z values in the desired range.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tclamp( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = clamp( this.x, min.x, max.x );\n\t\tthis.y = clamp( this.y, min.y, max.y );\n\t\tthis.z = clamp( this.z, min.z, max.z );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * If this vector's x, y or z values are greater than the max value, they are\n\t * replaced by the max value.\n\t * If this vector's x, y or z values are less than the min value, they are\n\t * replaced by the min value.\n\t *\n\t * @param {number} minVal - The minimum value the components will be clamped to.\n\t * @param {number} maxVal - The maximum value the components will be clamped to.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tclampScalar( minVal, maxVal ) {\n\n\t\tthis.x = clamp( this.x, minVal, maxVal );\n\t\tthis.y = clamp( this.y, minVal, maxVal );\n\t\tthis.z = clamp( this.z, minVal, maxVal );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * If this vector's length is greater than the max value, it is replaced by\n\t * the max value.\n\t * If this vector's length is less than the min value, it is replaced by the\n\t * min value.\n\t *\n\t * @param {number} min - The minimum value the vector length will be clamped to.\n\t * @param {number} max - The maximum value the vector length will be clamped to.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tclampLength( min, max ) {\n\n\t\tconst length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( clamp( length, min, max ) );\n\n\t}\n\n\t/**\n\t * The components of this vector are rounded down to the nearest integer value.\n\t *\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tfloor() {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\t\tthis.z = Math.floor( this.z );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * The components of this vector are rounded up to the nearest integer value.\n\t *\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tceil() {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\t\tthis.z = Math.ceil( this.z );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * The components of this vector are rounded to the nearest integer value\n\t *\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tround() {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\t\tthis.z = Math.round( this.z );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * The components of this vector are rounded towards zero (up if negative,\n\t * down if positive) to an integer value.\n\t *\n\t * @return {Vector3} A reference to this vector.\n\t */\n\troundToZero() {\n\n\t\tthis.x = Math.trunc( this.x );\n\t\tthis.y = Math.trunc( this.y );\n\t\tthis.z = Math.trunc( this.z );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Inverts this vector - i.e. sets x = -x, y = -y and z = -z.\n\t *\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tnegate() {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\t\tthis.z = - this.z;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Calculates the dot product of the given vector with this instance.\n\t *\n\t * @param {Vector3} v - The vector to compute the dot product with.\n\t * @return {number} The result of the dot product.\n\t */\n\tdot( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y + this.z * v.z;\n\n\t}\n\n\t// TODO lengthSquared?\n\n\t/**\n\t * Computes the square of the Euclidean length (straight-line length) from\n\t * (0, 0, 0) to (x, y, z). If you are comparing the lengths of vectors, you should\n\t * compare the length squared instead as it is slightly more efficient to calculate.\n\t *\n\t * @return {number} The square length of this vector.\n\t */\n\tlengthSq() {\n\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z;\n\n\t}\n\n\t/**\n\t * Computes the Euclidean length (straight-line length) from (0, 0, 0) to (x, y, z).\n\t *\n\t * @return {number} The length of this vector.\n\t */\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z );\n\n\t}\n\n\t/**\n\t * Computes the Manhattan length of this vector.\n\t *\n\t * @return {number} The length of this vector.\n\t */\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z );\n\n\t}\n\n\t/**\n\t * Converts this vector to a unit vector - that is, sets it equal to a vector\n\t * with the same direction as this one, but with a vector length of `1`.\n\t *\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\t/**\n\t * Sets this vector to a vector with the same direction as this one, but\n\t * with the specified length.\n\t *\n\t * @param {number} length - The new length of this vector.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\t/**\n\t * Linearly interpolates between the given vector and this instance, where\n\t * alpha is the percent distance along the line - alpha = 0 will be this\n\t * vector, and alpha = 1 will be the given one.\n\t *\n\t * @param {Vector3} v - The vector to interpolate towards.\n\t * @param {number} alpha - The interpolation factor, typically in the closed interval `[0, 1]`.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tlerp( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\t\tthis.z += ( v.z - this.z ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Linearly interpolates between the given vectors, where alpha is the percent\n\t * distance along the line - alpha = 0 will be first vector, and alpha = 1 will\n\t * be the second one. The result is stored in this instance.\n\t *\n\t * @param {Vector3} v1 - The first vector.\n\t * @param {Vector3} v2 - The second vector.\n\t * @param {number} alpha - The interpolation factor, typically in the closed interval `[0, 1]`.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tlerpVectors( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\t\tthis.z = v1.z + ( v2.z - v1.z ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Calculates the cross product of the given vector with this instance.\n\t *\n\t * @param {Vector3} v - The vector to compute the cross product with.\n\t * @return {Vector3} The result of the cross product.\n\t */\n\tcross( v ) {\n\n\t\treturn this.crossVectors( this, v );\n\n\t}\n\n\t/**\n\t * Calculates the cross product of the given vectors and stores the result\n\t * in this instance.\n\t *\n\t * @param {Vector3} a - The first vector.\n\t * @param {Vector3} b - The second vector.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tcrossVectors( a, b ) {\n\n\t\tconst ax = a.x, ay = a.y, az = a.z;\n\t\tconst bx = b.x, by = b.y, bz = b.z;\n\n\t\tthis.x = ay * bz - az * by;\n\t\tthis.y = az * bx - ax * bz;\n\t\tthis.z = ax * by - ay * bx;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Projects this vector onto the given one.\n\t *\n\t * @param {Vector3} v - The vector to project to.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tprojectOnVector( v ) {\n\n\t\tconst denominator = v.lengthSq();\n\n\t\tif ( denominator === 0 ) return this.set( 0, 0, 0 );\n\n\t\tconst scalar = v.dot( this ) / denominator;\n\n\t\treturn this.copy( v ).multiplyScalar( scalar );\n\n\t}\n\n\t/**\n\t * Projects this vector onto a plane by subtracting this\n\t * vector projected onto the plane's normal from this vector.\n\t *\n\t * @param {Vector3} planeNormal - The plane normal.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tprojectOnPlane( planeNormal ) {\n\n\t\t_vector.copy( this ).projectOnVector( planeNormal );\n\n\t\treturn this.sub( _vector );\n\n\t}\n\n\t/**\n\t * Reflects this vector off a plane orthogonal to the given normal vector.\n\t *\n\t * @param {Vector3} normal - The (normalized) normal vector.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\treflect( normal ) {\n\n\t\treturn this.sub( _vector.copy( normal ).multiplyScalar( 2 * this.dot( normal ) ) );\n\n\t}\n\t/**\n\t * Returns the angle between the given vector and this instance in radians.\n\t *\n\t * @param {Vector3} v - The vector to compute the angle with.\n\t * @return {number} The angle in radians.\n\t */\n\tangleTo( v ) {\n\n\t\tconst denominator = Math.sqrt( this.lengthSq() * v.lengthSq() );\n\n\t\tif ( denominator === 0 ) return Math.PI / 2;\n\n\t\tconst theta = this.dot( v ) / denominator;\n\n\t\t// clamp, to handle numerical problems\n\n\t\treturn Math.acos( clamp( theta, - 1, 1 ) );\n\n\t}\n\n\t/**\n\t * Computes the distance from the given vector to this instance.\n\t *\n\t * @param {Vector3} v - The vector to compute the distance to.\n\t * @return {number} The distance.\n\t */\n\tdistanceTo( v ) {\n\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t}\n\n\t/**\n\t * Computes the squared distance from the given vector to this instance.\n\t * If you are just comparing the distance with another distance, you should compare\n\t * the distance squared instead as it is slightly more efficient to calculate.\n\t *\n\t * @param {Vector3} v - The vector to compute the squared distance to.\n\t * @return {number} The squared distance.\n\t */\n\tdistanceToSquared( v ) {\n\n\t\tconst dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z;\n\n\t\treturn dx * dx + dy * dy + dz * dz;\n\n\t}\n\n\t/**\n\t * Computes the Manhattan distance from the given vector to this instance.\n\t *\n\t * @param {Vector3} v - The vector to compute the Manhattan distance to.\n\t * @return {number} The Manhattan distance.\n\t */\n\tmanhattanDistanceTo( v ) {\n\n\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y ) + Math.abs( this.z - v.z );\n\n\t}\n\n\t/**\n\t * Sets the vector components from the given spherical coordinates.\n\t *\n\t * @param {Spherical} s - The spherical coordinates.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsetFromSpherical( s ) {\n\n\t\treturn this.setFromSphericalCoords( s.radius, s.phi, s.theta );\n\n\t}\n\n\t/**\n\t * Sets the vector components from the given spherical coordinates.\n\t *\n\t * @param {number} radius - The radius.\n\t * @param {number} phi - The phi angle in radians.\n\t * @param {number} theta - The theta angle in radians.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsetFromSphericalCoords( radius, phi, theta ) {\n\n\t\tconst sinPhiRadius = Math.sin( phi ) * radius;\n\n\t\tthis.x = sinPhiRadius * Math.sin( theta );\n\t\tthis.y = Math.cos( phi ) * radius;\n\t\tthis.z = sinPhiRadius * Math.cos( theta );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the vector components from the given cylindrical coordinates.\n\t *\n\t * @param {Cylindrical} c - The cylindrical coordinates.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsetFromCylindrical( c ) {\n\n\t\treturn this.setFromCylindricalCoords( c.radius, c.theta, c.y );\n\n\t}\n\n\t/**\n\t * Sets the vector components from the given cylindrical coordinates.\n\t *\n\t * @param {number} radius - The radius.\n\t * @param {number} theta - The theta angle in radians.\n\t * @param {number} y - The y value.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsetFromCylindricalCoords( radius, theta, y ) {\n\n\t\tthis.x = radius * Math.sin( theta );\n\t\tthis.y = y;\n\t\tthis.z = radius * Math.cos( theta );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the vector components to the position elements of the\n\t * given transformation matrix.\n\t *\n\t * @param {Matrix4} m - The 4x4 matrix.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsetFromMatrixPosition( m ) {\n\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 12 ];\n\t\tthis.y = e[ 13 ];\n\t\tthis.z = e[ 14 ];\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the vector components to the scale elements of the\n\t * given transformation matrix.\n\t *\n\t * @param {Matrix4} m - The 4x4 matrix.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsetFromMatrixScale( m ) {\n\n\t\tconst sx = this.setFromMatrixColumn( m, 0 ).length();\n\t\tconst sy = this.setFromMatrixColumn( m, 1 ).length();\n\t\tconst sz = this.setFromMatrixColumn( m, 2 ).length();\n\n\t\tthis.x = sx;\n\t\tthis.y = sy;\n\t\tthis.z = sz;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the vector components from the specified matrix column.\n\t *\n\t * @param {Matrix4} m - The 4x4 matrix.\n\t * @param {number} index - The column index.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsetFromMatrixColumn( m, index ) {\n\n\t\treturn this.fromArray( m.elements, index * 4 );\n\n\t}\n\n\t/**\n\t * Sets the vector components from the specified matrix column.\n\t *\n\t * @param {Matrix3} m - The 3x3 matrix.\n\t * @param {number} index - The column index.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsetFromMatrix3Column( m, index ) {\n\n\t\treturn this.fromArray( m.elements, index * 3 );\n\n\t}\n\n\t/**\n\t * Sets the vector components from the given Euler angles.\n\t *\n\t * @param {Euler} e - The Euler angles to set.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsetFromEuler( e ) {\n\n\t\tthis.x = e._x;\n\t\tthis.y = e._y;\n\t\tthis.z = e._z;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the vector components from the RGB components of the\n\t * given color.\n\t *\n\t * @param {Color} c - The color to set.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tsetFromColor( c ) {\n\n\t\tthis.x = c.r;\n\t\tthis.y = c.g;\n\t\tthis.z = c.b;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Returns `true` if this vector is equal with the given one.\n\t *\n\t * @param {Vector3} v - The vector to test for equality.\n\t * @return {boolean} Whether this vector is equal with the given one.\n\t */\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) );\n\n\t}\n\n\t/**\n\t * Sets this vector's x value to be `array[ offset ]`, y value to be `array[ offset + 1 ]`\n\t * and z value to be `array[ offset + 2 ]`.\n\t *\n\t * @param {Array<number>} array - An array holding the vector component values.\n\t * @param {number} [offset=0] - The offset into the array.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\t\tthis.z = array[ offset + 2 ];\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Writes the components of this vector to the given array. If no array is provided,\n\t * the method returns a new instance.\n\t *\n\t * @param {Array<number>} [array=[]] - The target array holding the vector components.\n\t * @param {number} [offset=0] - Index of the first element in the array.\n\t * @return {Array<number>} The vector components.\n\t */\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\t\tarray[ offset + 2 ] = this.z;\n\n\t\treturn array;\n\n\t}\n\n\t/**\n\t * Sets the components of this vector from the given buffer attribute.\n\t *\n\t * @param {BufferAttribute} attribute - The buffer attribute holding vector data.\n\t * @param {number} index - The index into the attribute.\n\t * @return {Vector3} A reference to this vector.\n\t */\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\t\tthis.z = attribute.getZ( index );\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets each component of this vector to a pseudo-random value between `0` and\n\t * `1`, excluding `1`.\n\t *\n\t * @return {Vector3} A reference to this vector.\n\t */\n\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\t\tthis.z = Math.random();\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets this vector to a uniformly random point on a unit sphere.\n\t *\n\t * @return {Vector3} A reference to this vector.\n\t */\n\trandomDirection() {\n\n\t\t// https://mathworld.wolfram.com/SpherePointPicking.html\n\n\t\tconst theta = Math.random() * Math.PI * 2;\n\t\tconst u = Math.random() * 2 - 1;\n\t\tconst c = Math.sqrt( 1 - u * u );\n\n\t\tthis.x = c * Math.cos( theta );\n\t\tthis.y = u;\n\t\tthis.z = c * Math.sin( theta );\n\n\t\treturn this;\n\n\t}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this.x;\n\t\tyield this.y;\n\t\tyield this.z;\n\n\t}\n\n}\n\nconst _vector = /*@__PURE__*/ new Vector3();\nconst _quaternion = /*@__PURE__*/ new Quaternion();\n\nexport { Vector3 };\n","import { AutoReconnectingWebsocket, tryParseJson } from \"@wandelbots/nova-js\"\nimport type {\n MotionGroupDescription,\n MotionGroupState,\n NovaClient,\n RobotControllerState,\n} from \"@wandelbots/nova-js/v2\"\nimport { makeAutoObservable, runInAction } from \"mobx\"\nimport type { Vector3Simple } from \"./JoggerConnection\"\nimport {\n jointValuesEqual,\n tcpMotionEqual,\n unwrapRotationVector,\n} from \"./motionStateUpdate\"\n\nconst MOTION_DELTA_THRESHOLD = 0.0001\n\n/**\n * Store representing the current state of a connected motion group.\n */\nexport class MotionStreamConnection {\n static async open(nova: NovaClient, motionGroupId: string) {\n const [_motionGroupIndex, controllerId] = motionGroupId.split(\"@\") as [\n string,\n string,\n ]\n\n const controller =\n await nova.api.controller.getCurrentRobotControllerState(controllerId)\n const motionGroup = controller?.motion_groups.find(\n (mg) => mg.motion_group === motionGroupId,\n )\n if (!controller || !motionGroup) {\n throw new Error(\n `Controller ${controllerId} or motion group ${motionGroupId} not found`,\n )\n }\n\n const motionStateSocket = nova.openReconnectingWebsocket(\n `/controllers/${controllerId}/motion-groups/${motionGroupId}/state-stream`,\n )\n\n // Wait for the first message to get the initial state\n const firstMessage = await motionStateSocket.firstMessage()\n const initialMotionState = tryParseJson(firstMessage.data)\n ?.result as MotionGroupState\n\n if (!initialMotionState) {\n throw new Error(\n `Unable to parse initial motion state message ${firstMessage.data}`,\n )\n }\n\n console.log(\n `Connected motion state websocket to motion group ${motionGroup.motion_group}. Initial state:\\n `,\n initialMotionState,\n )\n\n // Get the motion group description for later usage in jogging\n const description = await nova.api.motionGroup.getMotionGroupDescription(\n controllerId,\n motionGroup.motion_group,\n )\n\n return new MotionStreamConnection(\n nova,\n controller,\n motionGroup,\n description,\n initialMotionState,\n motionStateSocket,\n )\n }\n\n // Not mobx-observable as this changes very fast; should be observed\n // using animation frames\n rapidlyChangingMotionState: MotionGroupState\n\n constructor(\n readonly nova: NovaClient,\n readonly controller: RobotControllerState,\n readonly motionGroup: MotionGroupState,\n readonly description: MotionGroupDescription,\n readonly initialMotionState: MotionGroupState,\n readonly motionStateSocket: AutoReconnectingWebsocket,\n ) {\n this.rapidlyChangingMotionState = initialMotionState\n\n motionStateSocket.addEventListener(\"message\", (event) => {\n const latestMotionState = tryParseJson(event.data)?.result as\n | MotionGroupState\n | undefined\n\n if (!latestMotionState) {\n throw new Error(\n `Failed to get motion state for ${this.motionGroupId}: ${event.data}`,\n )\n }\n\n // handle joint position changes\n if (\n !jointValuesEqual(\n this.rapidlyChangingMotionState.joint_position,\n latestMotionState.joint_position,\n MOTION_DELTA_THRESHOLD,\n )\n ) {\n runInAction(() => {\n this.rapidlyChangingMotionState.joint_position =\n latestMotionState.joint_position\n })\n }\n\n // handle tcp pose changes\n if (\n !tcpMotionEqual(\n this.rapidlyChangingMotionState,\n latestMotionState,\n MOTION_DELTA_THRESHOLD,\n )\n ) {\n runInAction(() => {\n if (this.rapidlyChangingMotionState.tcp_pose == null) {\n this.rapidlyChangingMotionState.tcp_pose =\n latestMotionState.tcp_pose\n } else if (\n latestMotionState.tcp_pose?.orientation &&\n latestMotionState.tcp_pose?.position &&\n this.rapidlyChangingMotionState.tcp_pose?.orientation\n ) {\n this.rapidlyChangingMotionState.tcp_pose = {\n position: latestMotionState.tcp_pose.position,\n orientation: unwrapRotationVector(\n latestMotionState.tcp_pose.orientation as Vector3Simple,\n this.rapidlyChangingMotionState.tcp_pose\n .orientation as Vector3Simple,\n ),\n }\n } else {\n console.warn(\n \"Received incomplete tcp_pose, ignoring\",\n latestMotionState.tcp_pose,\n )\n }\n })\n }\n\n // handle standstill changes\n if (\n this.rapidlyChangingMotionState.standstill !==\n latestMotionState.standstill\n ) {\n runInAction(() => {\n this.rapidlyChangingMotionState.standstill =\n latestMotionState.standstill\n })\n }\n })\n makeAutoObservable(this)\n }\n\n get motionGroupId() {\n return this.motionGroup.motion_group\n }\n\n get controllerId() {\n return this.controller.controller\n }\n\n get wandelscriptIdentifier() {\n const num = this.motionGroupId.split(\"@\")[0]\n return `${this.controllerId.replace(/-/g, \"_\")}_${num}`\n }\n\n get joints() {\n return this.initialMotionState.joint_position.map((_, i) => {\n return {\n index: i,\n }\n })\n }\n\n dispose() {\n this.motionStateSocket.close()\n }\n}\n","import {\n AutoReconnectingWebsocket,\n tryParseJson,\n XYZ_TO_VECTOR,\n} from \"@wandelbots/nova-js\"\nimport type {\n InitializeMovementResponse,\n MotionCommand,\n NovaClient,\n Pose,\n StartMovementResponse,\n} from \"@wandelbots/nova-js/v2\"\nimport { when } from \"mobx\"\nimport { Vector3 } from \"three/src/math/Vector3.js\"\nimport { MotionStreamConnection } from \"./MotionStreamConnection\"\n\nexport type Vector3Simple = [number, number, number]\n\nconst API_ERROR_CONNECTION_BLOCKED = `Movement request rejected. Another client is currently executing a 'Jogging' motion!`\n\nexport type JoggerConnectionOptions = {\n // The mode of the jogger connection - see type description of JoggerMode for details\n mode?: JoggerMode\n\n // Connection timeout in milliseconds to wait for jogging initialization to complete\n timeout?: number\n\n /**\n * When an error message is received from the jogging websocket, it\n * will be passed here. If this handler is not provided, the error will\n * instead be thrown as an unhandled error.\n */\n onError?: (err: unknown) => void\n\n // The TCP to use for jogging motions.\n tcp?: string\n\n // The coordinate system in which jogging takes place in\n // coordinateSystem?: string,\n\n // If set to \"tool\", jogging TcpVelocityRequest will use `use_tool_coordinate_system` option\n orientation?: JoggerOrientation\n}\n\n// Three modes are supported:\n// - \"jogging\": Continuous jogging mode, where joint velocities or TCP velocities can be commanded. Opens a single websocket connection to jogging endpoint\n// - \"trajectory\": Incremental jogging mode, where fixed distance motions are planned and executed. Opens a short lived websocket for each motion.\n// - \"off\": No jogging, all websockets are closed.\nexport type JoggerMode = \"jogging\" | \"trajectory\" | \"off\"\n\n// If set to \"tool\", will use `use_tool_coordinate_system` option in movement requests\nexport type JoggerOrientation = \"coordsys\" | \"tool\"\n\nexport class JoggerConnection {\n ENDPOINT_JOGGING = \"/execution/jogging\"\n ENDPOINT_TRAJECTORY = \"/execution/trajectory\"\n DEFAULT_MODE = \"off\" as JoggerMode\n DEFAULT_TCP = \"Flange\"\n // DEFAULT_COORDINATE_SYSTEM = \"world\"\n DEFAULT_INIT_TIMEOUT = 5000\n DEFAULT_ORIENTATION = \"coordsys\" as JoggerOrientation\n\n mode: JoggerMode = \"off\"\n joggingSocket: AutoReconnectingWebsocket | null = null\n trajectorySocket: AutoReconnectingWebsocket | null = null\n timeout: number = this.DEFAULT_INIT_TIMEOUT\n tcp: string\n // coordinateSystem?: string\n orientation: JoggerOrientation\n onError?: (err: unknown) => void\n onBlocked?: () => void\n\n /**\n * Initialize the jogging connection using jogging endpoint or trajectory endpoint depending on the selected mode.\n *\n * @param nova - The Nova client instance\n * @param motionGroupId - The ID of the motion group to connect to\n * @param options - Configuration options for the jogger connection\n * @param options.mode - The jogging mode to initialize:\n * - \"jogging\": Continuous jogging mode with persistent websocket for real-time velocity commands\n * - \"trajectory\": Incremental jogging mode for fixed-distance motions via trajectory planning\n * - \"off\": No jogging enabled, all websockets closed (default)\n * @param options.timeout - Timeout in milliseconds for websocket initialization (default: 5000ms)\n * @param options.tcp - TCP frame to use for motions (default: from motion group)\n * //param options.coordinateSystem - Coordinate system for jogging commands (default: \"world\"). Please note: Currently not implemented\n * @param options.orientation - If set to \"tool\", jogging TcpVelocityRequest will use `use_tool_coordinate_system` option (default: \"coordsys\")\n * @param options.onError - Error handler for websocket errors\n * @returns Promise resolving to initialized JoggerConnection instance\n */\n static async open(\n nova: NovaClient,\n motionGroupId: string,\n options: JoggerConnectionOptions = {},\n ) {\n // Get matching motion stream\n const motionStream = await MotionStreamConnection.open(nova, motionGroupId)\n\n // Initialize jogger with options\n const jogger = new JoggerConnection(motionStream, options)\n\n // Initialize the jogging websocket, if necessary (mode is \"jogging\")\n await jogger.setJoggingMode(jogger.mode)\n\n // Return the initialized jogger\n return jogger\n }\n\n constructor(\n readonly motionStream: MotionStreamConnection,\n readonly options: JoggerConnectionOptions | undefined = {},\n ) {\n this.tcp = options?.tcp || motionStream.motionGroup.tcp || this.DEFAULT_TCP\n // this.coordinateSystem = options?.coordinateSystem || this.DEFAULT_COORDINATE_SYSTEM\n this.orientation = options?.orientation || this.DEFAULT_ORIENTATION\n this.timeout = options?.timeout || this.DEFAULT_INIT_TIMEOUT\n this.mode = options?.mode || this.DEFAULT_MODE\n this.onError = options?.onError\n }\n\n // Set a new tcp or other options. If current mode is jogging, will reinitialize the jogging websocket\n async setOptions(options: Partial<JoggerConnectionOptions>) {\n if (options.tcp) {\n this.tcp = options.tcp\n }\n\n if (options.orientation) {\n this.orientation = options.orientation\n }\n\n // if (options.coordinateSystem) {\n // this.coordinateSystem = options.coordinateSystem\n // }\n\n if (options.timeout) {\n this.timeout = options.timeout\n }\n\n if (options.mode) {\n this.mode = options.mode\n }\n\n if (options.onError) {\n this.onError = options.onError\n }\n\n this.setJoggingMode(this.mode, false)\n }\n\n get motionGroupId() {\n return this.motionStream.motionGroupId\n }\n\n get nova() {\n return this.motionStream.nova\n }\n\n get numJoints() {\n return this.motionStream.joints.length\n }\n\n // get activeJoggingMode() {\n // return this.mode\n // }\n\n // get activeWebsocket() {\n // return this.mode === \"jogging\" ? this.joggingSocket : this.trajectorySocket;\n // }\n\n // Sends stop movement command to robot\n async stop() {\n if (this.joggingSocket) {\n const velocity = new Array(this.numJoints).fill(0)\n this.joggingSocket.sendJson({\n message_type: \"JointVelocityRequest\",\n velocity,\n })\n }\n\n if (this.trajectorySocket) {\n this.trajectorySocket.sendJson({\n message_type: \"PauseMovementRequest\",\n })\n }\n }\n\n // Dispose the jogger, closing all open websockets\n async dispose() {\n // Collect all initialized sockets\n const sockets = [this.joggingSocket, this.trajectorySocket].filter(\n (s) => s !== null,\n ) as AutoReconnectingWebsocket[]\n\n // Call them to dispose\n sockets.forEach((s) => {\n s.dispose()\n })\n\n // Remove references\n this.joggingSocket = null\n this.trajectorySocket = null\n\n // Return promise that resolves when all sockets are closed\n return Promise.all(sockets.map((s) => s.closed()))\n }\n\n // Activate jogger in one of the supported modes\n // Will iniitialize or close websockets as necessary\n // If mode is unchanged, does nothing (unless skipReinitializeIfSameMode is false)\n async setJoggingMode(mode: JoggerMode, skipReinitializeIfSameMode = true) {\n // If not changing mode, do nothing\n if (this.mode === mode && skipReinitializeIfSameMode) {\n return\n }\n\n // Close any previous websocket connection\n this.dispose()\n\n // Set the new mode\n this.mode = mode\n\n // Mode is \"jogging\" - open jogging websocket\n if (this.mode === \"jogging\") {\n return this.initializeJoggingWebsocket()\n }\n\n // Mode is \"trajectory\" or \"off\" - nothing more to do\n return\n }\n\n // Initializes continuous jogging websocket, called by setJoggingMode(\"jogging\")\n async initializeJoggingWebsocket() {\n // Wait for initialization with timeout\n return new Promise<void>((resolve, reject) => {\n const connectionFailedTimeout = setTimeout(() => {\n reject(\n new Error(\n `Jogging initialization timeout after ${this.timeout} seconds`,\n ),\n )\n }, this.timeout)\n\n this.joggingSocket = this.nova.openReconnectingWebsocket(\n this.ENDPOINT_JOGGING,\n )\n this.joggingSocket.addEventListener(\"message\", (ev: MessageEvent) => {\n const data = tryParseJson(ev.data)\n\n if (data?.result?.kind === \"INITIALIZE_RECEIVED\") {\n clearTimeout(connectionFailedTimeout)\n resolve()\n return\n }\n\n if (data?.result?.kind === \"MOTION_ERROR\") {\n clearTimeout(connectionFailedTimeout)\n if (\n this.onBlocked &&\n data?.result?.message.includes(API_ERROR_CONNECTION_BLOCKED)\n ) {\n this.joggingSocket?.dispose()\n this.onBlocked()\n return\n } else if (this.onError) {\n this.onError(ev.data)\n } else {\n reject(new Error(ev.data))\n }\n }\n })\n\n this.joggingSocket.sendJson({\n message_type: \"InitializeJoggingRequest\",\n motion_group: this.motionGroupId,\n tcp: this.tcp,\n })\n })\n }\n\n /**\n * Jogging: Start rotation of a single robot joint at the specified velocity\n */\n async rotateJoints({\n joint,\n direction,\n velocityRadsPerSec,\n }: {\n /** Index of the joint to rotate */\n joint: number\n /** Direction of rotation (\"+\" or \"-\") */\n direction: \"+\" | \"-\"\n /** Speed of the rotation in radians per second */\n velocityRadsPerSec: number\n }) {\n if (!this.joggingSocket || this.mode !== \"jogging\") {\n throw new Error(\n \"Joint jogging websocket not connected; create one by setting jogging mode to 'jogging'\",\n )\n }\n\n const velocity = new Array(this.numJoints).fill(0)\n\n velocity[joint] =\n direction === \"-\" ? -velocityRadsPerSec : velocityRadsPerSec\n\n this.joggingSocket.sendJson({\n message_type: \"JointVelocityRequest\",\n velocity,\n })\n }\n\n /**\n * Jogging: Start the TCP moving along a specified axis at a given velocity\n */\n async translateTCP({\n axis,\n direction,\n velocityMmPerSec,\n }: {\n axis: \"x\" | \"y\" | \"z\"\n direction: \"-\" | \"+\"\n velocityMmPerSec: number\n }) {\n if (!this.joggingSocket || this.mode !== \"jogging\") {\n throw new Error(\n \"Continuous jogging websocket not connected; create one by setting jogging mode to 'jogging'\",\n )\n }\n const rotation = [0, 0, 0]\n const translation = [0, 0, 0]\n translation[XYZ_TO_VECTOR[axis]] =\n direction === \"-\" ? -velocityMmPerSec : velocityMmPerSec\n\n this.joggingSocket.sendJson({\n message_type: \"TcpVelocityRequest\",\n translation,\n rotation,\n use_tool_coordinate_system: this.orientation === \"tool\",\n })\n }\n\n /**\n * Jogging: Start the TCP rotating around a specified axis at a given velocity\n */\n async rotateTCP({\n axis,\n direction,\n velocityRadsPerSec,\n }: {\n axis: \"x\" | \"y\" | \"z\"\n direction: \"-\" | \"+\"\n velocityRadsPerSec: number\n }) {\n if (!this.joggingSocket || this.mode !== \"jogging\") {\n throw new Error(\n \"Continuous jogging websocket not connected; create one by setting jogging mode to 'jogging'\",\n )\n }\n const rotation = [0, 0, 0]\n const translation = [0, 0, 0]\n rotation[XYZ_TO_VECTOR[axis]] =\n direction === \"-\" ? -velocityRadsPerSec : velocityRadsPerSec\n\n this.joggingSocket.sendJson({\n message_type: \"TcpVelocityRequest\",\n translation,\n rotation,\n })\n }\n\n /**\n * Trajectory jogging:\n *\n * Move the robot by a fixed distance in a single cartesian\n * axis, either rotating or translating relative to the TCP.\n * Promise resolves only after the motion has completed.\n */\n async runIncrementalCartesianMotion({\n currentTcpPose,\n currentJoints,\n // coordSystemId,\n velocityInRelevantUnits,\n axis,\n direction,\n motion,\n }: {\n currentTcpPose: Pose\n currentJoints: Vector3Simple\n coordSystemId: string\n velocityInRelevantUnits: number\n axis: \"x\" | \"y\" | \"z\"\n direction: \"-\" | \"+\"\n motion:\n | {\n type: \"rotate\"\n distanceRads: number\n }\n | {\n type: \"translate\"\n distanceMm: number\n }\n }) {\n const commands: MotionCommand[] = []\n\n if (this.mode !== \"trajectory\") {\n throw new Error(\n \"Set jogging mode to 'trajectory' to run incremental cartesian motions\",\n )\n }\n\n if (motion.type === \"translate\") {\n if (!currentTcpPose.position) {\n throw new Error(\n \"Current pose has no position, cannot perform translation\",\n )\n }\n\n const targetTcpPosition = [...currentTcpPose.position]\n targetTcpPosition[XYZ_TO_VECTOR[axis]] +=\n motion.distanceMm * (direction === \"-\" ? -1 : 1)\n\n commands.push({\n limits_override: {\n tcp_velocity_limit: velocityInRelevantUnits,\n },\n path: {\n path_definition_name: \"PathLine\",\n target_pose: {\n position: targetTcpPosition,\n orientation: currentTcpPose.orientation,\n },\n },\n })\n } else if (motion.type === \"rotate\") {\n // Concatenate rotations expressed by rotation vectors\n // Equations taken from https://physics.stackexchange.com/a/287819\n\n if (!currentTcpPose.orientation) {\n throw new Error(\n \"Current pose has no orientation, cannot perform rotation\",\n )\n }\n\n // Compute axis and angle of current rotation vector\n const currentRotationVector = new Vector3(\n currentTcpPose.orientation[0],\n currentTcpPose.orientation[1],\n currentTcpPose.orientation[2],\n )\n\n const currentRotationRad = currentRotationVector.length()\n const currentRotationDirection = currentRotationVector.clone().normalize()\n\n // Compute axis and angle of difference rotation vector\n const differenceRotationRad =\n motion.distanceRads * (direction === \"-\" ? -1 : 1)\n\n const differenceRotationDirection = new Vector3(0.0, 0.0, 0.0)\n differenceRotationDirection[axis] = 1.0\n\n // Some abbreviations to make the following equations more readable\n const f1 =\n Math.cos(0.5 * differenceRotationRad) *\n Math.cos(0.5 * currentRotationRad)\n const f2 =\n Math.sin(0.5 * differenceRotationRad) *\n Math.sin(0.5 * currentRotationRad)\n const f3 =\n Math.sin(0.5 * differenceRotationRad) *\n Math.cos(0.5 * currentRotationRad)\n const f4 =\n Math.cos(0.5 * differenceRotationRad) *\n Math.sin(0.5 * currentRotationRad)\n\n const dotProduct = differenceRotationDirection.dot(\n currentRotationDirection,\n )\n\n const crossProduct = differenceRotationDirection\n .clone()\n .cross(currentRotationDirection)\n\n // Compute angle of concatenated rotation\n const newRotationRad = 2.0 * Math.acos(f1 - f2 * dotProduct)\n\n // Compute rotation vector of concatenated rotation\n const f5 = newRotationRad / Math.sin(0.5 * newRotationRad)\n\n const targetTcpOrientation = new Vector3()\n .addScaledVector(crossProduct, f2)\n .addScaledVector(differenceRotationDirection, f3)\n .addScaledVector(currentRotationDirection, f4)\n .multiplyScalar(f5)\n\n commands.push({\n limits_override: {\n tcp_orientation_velocity_limit: velocityInRelevantUnits,\n },\n path: {\n path_definition_name: \"PathLine\",\n target_pose: {\n position: currentTcpPose.position,\n orientation: [...targetTcpOrientation],\n },\n },\n })\n }\n\n // Plan the motion https://portal.wandelbots.io/docs/api/v2/ui/#/operations/planTrajectory\n const description = this.motionStream.description\n if (description.cycle_time === undefined) {\n console.warn(\n \"Current motion group has no cycle time, cannot plan jogging motion\",\n )\n return\n }\n\n const motion_group_setup = {\n motion_group_model: description.motion_group_model,\n cycle_time: description.cycle_time,\n mounting: description.mounting,\n\n // tcp_offset: description.tcp_offset, TODO: implement tcp_offset handling\n // FIXME use proper mode's limits if set\n global: description.operation_limits.auto_limits,\n }\n\n const motionPlanRes = await this.nova.api.trajectoryPlanning.planTrajectory(\n {\n motion_group_setup,\n start_joint_position: currentJoints,\n motion_commands: commands,\n },\n )\n\n const trajectoryData = motionPlanRes.response\n if (!trajectoryData) {\n throw new Error(\n `Failed to plan jogging increment motion ${JSON.stringify(motionPlanRes)}`,\n )\n }\n\n if (this.trajectorySocket) {\n console.warn(\"Trajectory jogging websocket already open; will close\")\n this.trajectorySocket.dispose()\n }\n\n // Execute the planned motion https://portal.wandelbots.io/docs/api/v2/ui/#/operations/executeTrajectory\n this.trajectorySocket = this.nova.openReconnectingWebsocket(\n this.ENDPOINT_TRAJECTORY,\n )\n\n const messageInitializeMovementResponse = (\n result: InitializeMovementResponse | undefined,\n ) => {\n // Handle errorous response\n if (!result || result.add_trajectory_error || result.message) {\n if (this.onError) {\n this.onError(result)\n } else {\n throw new Error(\n result?.add_trajectory_error?.message ||\n result?.message ||\n \"Failed to execute trajectory, unknown error\",\n )\n }\n }\n\n // Handle socket gone\n if (!this.trajectorySocket) {\n throw new Error(\n `Failed to execute trajectory, websocket not available anymore`,\n )\n }\n\n // Trajectory locked, now start movement\n this.trajectorySocket.sendJson({\n message_type: \"StartMovementRequest\",\n direction: \"DIRECTION_FORWARD\",\n })\n }\n\n const waitForMovementToStartAndFinish = async () => {\n // Wait for robot to start moving (standstill becomes false)\n await when(() => !this.motionStream.rapidlyChangingMotionState.standstill)\n\n // Then wait for robot to stop moving (standstill becomes true)\n await when(() => this.motionStream.rapidlyChangingMotionState.standstill)\n\n // Close connection and free robot\n this.trajectorySocket?.dispose()\n this.trajectorySocket = null\n }\n\n const waitForMovementToFinish = async () => {\n // Wait for robot to stop moving (standstill becomes true)\n await when(() => this.motionStream.rapidlyChangingMotionState.standstill)\n\n // Close connection and free robot\n this.trajectorySocket?.dispose()\n this.trajectorySocket = null\n }\n\n const messageStartMovementResponse = async (\n data: StartMovementResponse,\n ) => {\n if (data?.message) {\n if (this.onError) {\n this.onError(data)\n return\n } else {\n throw new Error(\n data.message || \"Failed to execute trajectory, unknown error\",\n )\n }\n }\n\n // Movement started we now wait to verify the robot is moving\n // by observing changes to motion state\n if (this.motionStream.rapidlyChangingMotionState.standstill) {\n await waitForMovementToStartAndFinish()\n } else {\n await waitForMovementToFinish()\n }\n }\n\n this.trajectorySocket.addEventListener(\"message\", (ev: MessageEvent) => {\n const data = tryParseJson(ev.data)\n\n if (!data?.result?.kind) {\n throw new Error(\n `Failed to execute trajectory: Received invalid message ${ev.data}`,\n )\n }\n\n if (\n this.onBlocked &&\n data.result.message?.includes(API_ERROR_CONNECTION_BLOCKED)\n ) {\n this.onBlocked()\n return\n }\n\n if (data.result.kind === \"INITIALIZE_RECEIVED\") {\n messageInitializeMovementResponse(data.result)\n } else if (data.result.kind === \"START_RECEIVED\") {\n messageStartMovementResponse(data)\n } else if (data.result.kind === \"PAUSE_RECEIVED\") {\n // do nothing\n } else if (data.result.kind === \"MOTION_ERROR\" && data.result.message) {\n if (this.onError) {\n this.onError(data)\n return\n } else {\n throw new Error(data.result.message)\n }\n } else {\n throw new Error(\n `Failed to execute trajectory, cannot handle message type \"${data.result.kind}\"`,\n )\n }\n })\n\n // Send initialization/movement request\n this.trajectorySocket.sendJson({\n message_type: \"InitializeMovementRequest\",\n trajectory: {\n message_type: \"TrajectoryData\",\n motion_group: this.motionGroupId,\n data: trajectoryData,\n tcp: this.tcp,\n },\n })\n }\n}\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n","import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n","import coreJsData from './_coreJsData.js';\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nexport default isMasked;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nexport default toSource;\n","import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nexport default baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nexport default getValue;\n","import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nexport default getNative;\n","import getNative from './_getNative.js';\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nexport default defineProperty;\n","import defineProperty from './_defineProperty.js';\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nexport default baseAssignValue;\n","/**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\nfunction arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n return accumulator;\n}\n\nexport default arrayAggregator;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nexport default createBaseFor;\n","import createBaseFor from './_createBaseFor.js';\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nexport default baseFor;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nexport default baseTimes;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n","import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nexport default stubFalse;\n","import root from './_root.js';\nimport stubFalse from './stubFalse.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nexport default isBuffer;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nexport default isIndex;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n","import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nexport default baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nexport default baseUnary;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nexport default nodeUtil;\n","import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nexport default isTypedArray;\n","import baseTimes from './_baseTimes.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isIndex from './_isIndex.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default arrayLikeKeys;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nexport default isPrototype;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nexport default overArg;\n","import overArg from './_overArg.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nexport default nativeKeys;\n","import isPrototype from './_isPrototype.js';\nimport nativeKeys from './_nativeKeys.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeys;\n","import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nexport default isArrayLike;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeys from './_baseKeys.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nexport default keys;\n","import baseFor from './_baseFor.js';\nimport keys from './keys.js';\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n}\n\nexport default baseForOwn;\n","import isArrayLike from './isArrayLike.js';\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n}\n\nexport default createBaseEach;\n","import baseForOwn from './_baseForOwn.js';\nimport createBaseEach from './_createBaseEach.js';\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nexport default baseEach;\n","import baseEach from './_baseEach.js';\n\n/**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\nfunction baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach(collection, function(value, key, collection) {\n setter(accumulator, value, iteratee(value), collection);\n });\n return accumulator;\n}\n\nexport default baseAggregator;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nexport default listCacheClear;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nexport default eq;\n","import eq from './eq.js';\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nexport default assocIndexOf;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nexport default listCacheDelete;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nexport default listCacheGet;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nexport default listCacheHas;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nexport default listCacheSet;\n","import listCacheClear from './_listCacheClear.js';\nimport listCacheDelete from './_listCacheDelete.js';\nimport listCacheGet from './_listCacheGet.js';\nimport listCacheHas from './_listCacheHas.js';\nimport listCacheSet from './_listCacheSet.js';\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nexport default ListCache;\n","import ListCache from './_ListCache.js';\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nexport default stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nexport default stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nexport default stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nexport default stackHas;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n","import getNative from './_getNative.js';\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nexport default nativeCreate;\n","import nativeCreate from './_nativeCreate.js';\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nexport default hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default hashDelete;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nexport default hashGet;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nexport default hashHas;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nexport default hashSet;\n","import hashClear from './_hashClear.js';\nimport hashDelete from './_hashDelete.js';\nimport hashGet from './_hashGet.js';\nimport hashHas from './_hashHas.js';\nimport hashSet from './_hashSet.js';\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nexport default Hash;\n","import Hash from './_Hash.js';\nimport ListCache from './_ListCache.js';\nimport Map from './_Map.js';\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nexport default mapCacheClear;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nexport default isKeyable;\n","import isKeyable from './_isKeyable.js';\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nexport default getMapData;\n","import getMapData from './_getMapData.js';\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default mapCacheDelete;\n","import getMapData from './_getMapData.js';\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nexport default mapCacheGet;\n","import getMapData from './_getMapData.js';\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nexport default mapCacheHas;\n","import getMapData from './_getMapData.js';\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nexport default mapCacheSet;\n","import mapCacheClear from './_mapCacheClear.js';\nimport mapCacheDelete from './_mapCacheDelete.js';\nimport mapCacheGet from './_mapCacheGet.js';\nimport mapCacheHas from './_mapCacheHas.js';\nimport mapCacheSet from './_mapCacheSet.js';\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nexport default MapCache;\n","import ListCache from './_ListCache.js';\nimport Map from './_Map.js';\nimport MapCache from './_MapCache.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nexport default stackSet;\n","import ListCache from './_ListCache.js';\nimport stackClear from './_stackClear.js';\nimport stackDelete from './_stackDelete.js';\nimport stackGet from './_stackGet.js';\nimport stackHas from './_stackHas.js';\nimport stackSet from './_stackSet.js';\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nexport default Stack;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nexport default setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nexport default setCacheHas;\n","import MapCache from './_MapCache.js';\nimport setCacheAdd from './_setCacheAdd.js';\nimport setCacheHas from './_setCacheHas.js';\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nexport default SetCache;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nexport default arraySome;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nexport default cacheHas;\n","import SetCache from './_SetCache.js';\nimport arraySome from './_arraySome.js';\nimport cacheHas from './_cacheHas.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nexport default equalArrays;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nexport default Uint8Array;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nexport default mapToArray;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nexport default setToArray;\n","import Symbol from './_Symbol.js';\nimport Uint8Array from './_Uint8Array.js';\nimport eq from './eq.js';\nimport equalArrays from './_equalArrays.js';\nimport mapToArray from './_mapToArray.js';\nimport setToArray from './_setToArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nexport default equalByTag;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nexport default arrayPush;\n","import arrayPush from './_arrayPush.js';\nimport isArray from './isArray.js';\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nexport default baseGetAllKeys;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nexport default arrayFilter;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nexport default stubArray;\n","import arrayFilter from './_arrayFilter.js';\nimport stubArray from './stubArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nexport default getSymbols;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbols from './_getSymbols.js';\nimport keys from './keys.js';\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nexport default getAllKeys;\n","import getAllKeys from './_getAllKeys.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nexport default equalObjects;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nexport default DataView;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nexport default Promise;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nexport default Set;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nexport default WeakMap;\n","import DataView from './_DataView.js';\nimport Map from './_Map.js';\nimport Promise from './_Promise.js';\nimport Set from './_Set.js';\nimport WeakMap from './_WeakMap.js';\nimport baseGetTag from './_baseGetTag.js';\nimport toSource from './_toSource.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nexport default getTag;\n","import Stack from './_Stack.js';\nimport equalArrays from './_equalArrays.js';\nimport equalByTag from './_equalByTag.js';\nimport equalObjects from './_equalObjects.js';\nimport getTag from './_getTag.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nexport default baseIsEqualDeep;\n","import baseIsEqualDeep from './_baseIsEqualDeep.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nexport default baseIsEqual;\n","import Stack from './_Stack.js';\nimport baseIsEqual from './_baseIsEqual.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n}\n\nexport default baseIsMatch;\n","import isObject from './isObject.js';\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n return value === value && !isObject(value);\n}\n\nexport default isStrictComparable;\n","import isStrictComparable from './_isStrictComparable.js';\nimport keys from './keys.js';\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n}\n\nexport default getMatchData;\n","/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n}\n\nexport default matchesStrictComparable;\n","import baseIsMatch from './_baseIsMatch.js';\nimport getMatchData from './_getMatchData.js';\nimport matchesStrictComparable from './_matchesStrictComparable.js';\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n}\n\nexport default baseMatches;\n","import isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nexport default isKey;\n","import MapCache from './_MapCache.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nexport default memoize;\n","import memoize from './memoize.js';\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nexport default memoizeCapped;\n","import memoizeCapped from './_memoizeCapped.js';\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nexport default stringToPath;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nexport default arrayMap;\n","import Symbol from './_Symbol.js';\nimport arrayMap from './_arrayMap.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default baseToString;\n","import baseToString from './_baseToString.js';\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nexport default toString;\n","import isArray from './isArray.js';\nimport isKey from './_isKey.js';\nimport stringToPath from './_stringToPath.js';\nimport toString from './toString.js';\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nexport default castPath;\n","import isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default toKey;\n","import castPath from './_castPath.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nexport default baseGet;\n","import baseGet from './_baseGet.js';\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nexport default get;\n","/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\nexport default baseHasIn;\n","import castPath from './_castPath.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isIndex from './_isIndex.js';\nimport isLength from './isLength.js';\nimport toKey from './_toKey.js';\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n}\n\nexport default hasPath;\n","import baseHasIn from './_baseHasIn.js';\nimport hasPath from './_hasPath.js';\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\nexport default hasIn;\n","import baseIsEqual from './_baseIsEqual.js';\nimport get from './get.js';\nimport hasIn from './hasIn.js';\nimport isKey from './_isKey.js';\nimport isStrictComparable from './_isStrictComparable.js';\nimport matchesStrictComparable from './_matchesStrictComparable.js';\nimport toKey from './_toKey.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n}\n\nexport default baseMatchesProperty;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nexport default identity;\n","/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\nexport default baseProperty;\n","import baseGet from './_baseGet.js';\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n}\n\nexport default basePropertyDeep;\n","import baseProperty from './_baseProperty.js';\nimport basePropertyDeep from './_basePropertyDeep.js';\nimport isKey from './_isKey.js';\nimport toKey from './_toKey.js';\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nexport default property;\n","import baseMatches from './_baseMatches.js';\nimport baseMatchesProperty from './_baseMatchesProperty.js';\nimport identity from './identity.js';\nimport isArray from './isArray.js';\nimport property from './property.js';\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n}\n\nexport default baseIteratee;\n","import arrayAggregator from './_arrayAggregator.js';\nimport baseAggregator from './_baseAggregator.js';\nimport baseIteratee from './_baseIteratee.js';\nimport isArray from './isArray.js';\n\n/**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\nfunction createAggregator(setter, initializer) {\n return function(collection, iteratee) {\n var func = isArray(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {};\n\n return func(collection, setter, baseIteratee(iteratee, 2), accumulator);\n };\n}\n\nexport default createAggregator;\n","import baseAssignValue from './_baseAssignValue.js';\nimport createAggregator from './_createAggregator.js';\n\n/**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the last element responsible for generating the key. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * var array = [\n * { 'dir': 'left', 'code': 97 },\n * { 'dir': 'right', 'code': 100 }\n * ];\n *\n * _.keyBy(array, function(o) {\n * return String.fromCharCode(o.code);\n * });\n * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n *\n * _.keyBy(array, 'dir');\n * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n */\nvar keyBy = createAggregator(function(result, value, key) {\n baseAssignValue(result, key, value);\n});\n\nexport default keyBy;\n","import toString from './toString.js';\n\n/** Used to generate unique IDs. */\nvar idCounter = 0;\n\n/**\n * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {string} [prefix=''] The value to prefix the ID with.\n * @returns {string} Returns the unique ID.\n * @example\n *\n * _.uniqueId('contact_');\n * // => 'contact_104'\n *\n * _.uniqueId();\n * // => '105'\n */\nfunction uniqueId(prefix) {\n var id = ++idCounter;\n return toString(prefix) + id;\n}\n\nexport default uniqueId;\n","import { tryParseJson } from \"@wandelbots/nova-js\"\nimport type {\n CoordinateSystem,\n MotionGroupDescription,\n RobotTcp,\n} from \"@wandelbots/nova-js/v2\"\nimport { countBy } from \"lodash-es\"\nimport keyBy from \"lodash-es/keyBy\"\nimport uniqueId from \"lodash-es/uniqueId\"\nimport { autorun, makeAutoObservable, type IReactionDisposer } from \"mobx\"\nimport type {\n JoggerConnection,\n JoggerOrientation,\n Vector3Simple,\n} from \"../../lib/JoggerConnection\"\n\nconst discreteIncrementOptions = [\n { id: \"0.1\", mm: 0.1, degrees: 0.05 },\n { id: \"1\", mm: 1, degrees: 0.5 },\n { id: \"5\", mm: 5, degrees: 2.5 },\n { id: \"10\", mm: 10, degrees: 5 },\n]\n\nconst incrementOptions = [\n { id: \"continuous\" },\n ...discreteIncrementOptions,\n] as const\n\nexport type JoggingAxis = \"x\" | \"y\" | \"z\"\nexport type JoggingDirection = \"+\" | \"-\"\nexport type DiscreteIncrementOption = (typeof discreteIncrementOptions)[number]\nexport type IncrementOption = (typeof incrementOptions)[number]\nexport type IncrementOptionId = IncrementOption[\"id\"]\n\nexport const ORIENTATION_IDS = [\"coordsys\", \"tool\"]\nexport type OrientationId = (typeof ORIENTATION_IDS)[number]\n\nexport type IncrementJogInProgress = {\n direction: JoggingDirection\n axis: JoggingAxis\n}\n\nexport class JoggingStore {\n selectedTabId: \"cartesian\" | \"joint\" | \"debug\" = \"cartesian\"\n\n /**\n * State of the jogging panel. Starts as \"inactive\"\n */\n activationState: \"inactive\" | \"loading\" | \"active\" = \"inactive\"\n\n /**\n * If an error occurred connecting to the jogging websocket\n */\n activationError: unknown | null = null\n\n /** To avoid activation race conditions */\n activationCounter: number = 0\n\n /** Locks to prevent UI interactions during certain operations */\n locks = new Set<string>()\n\n /** Block jogging UI interactions when connection is taken by another jogger */\n blocked: boolean = false\n\n /**\n * Id of selected coordinate system from among those defined on the API side\n */\n selectedCoordSystemId: string = \"world\"\n\n /** Id of selected tool center point from among the options available on the robot */\n selectedTcpId: string = \"\"\n\n /**\n * Whether the user is jogging in the coordinate system or tool orientation.\n * When in tool orientation, the robot moves in a direction relative to the\n * attached tool rotation.\n */\n selectedOrientation: OrientationId = \"coordsys\"\n\n /**\n * Id of selected increment amount for jogging. Options are defined by robot pad.\n * When non-continuous, jogging moves the robot by a fixed number of mm or degrees\n * each time the button is pressed, for extra precision\n */\n selectedIncrementId: IncrementOptionId = \"continuous\"\n\n /**\n * When on the cartesian tab, jogging can be either translating or rotating\n * around the TCP.\n */\n selectedCartesianMotionType: \"translate\" | \"rotate\" = \"translate\"\n\n /**\n * If the jogger is busy running an incremental jog, this will be set\n * with the information about the motion\n */\n incrementJogInProgress: IncrementJogInProgress | null = null\n\n /** How fast the robot goes when doing cartesian translate jogging in mm/s */\n translationVelocityMmPerSec: number = 10\n /** How fast the robot goes when doing cartesian or joint rotation jogging in °/s */\n rotationVelocityDegPerSec: number = 1\n\n /** Minimum translation velocity user can choose on the velocity slider in °/s */\n minTranslationVelocityMmPerSec: number = 5\n /** Maximum translation velocity user can choose on the velocity slider in °/s */\n maxTranslationVelocityMmPerSec: number = 250\n\n /** Minimum rotation velocity user can choose on the velocity slider in °/s */\n minRotationVelocityDegPerSec: number = 1\n /** Maximum rotation velocity user can choose on the velocity slider in °/s */\n maxRotationVelocityDegPerSec: number = 60\n\n /** Whether to show the coordinate system select dropdown in the UI */\n showCoordSystemSelect: boolean = false\n\n /** Whether to show the TCP select dropdown in the UI */\n showTcpSelect: boolean = true\n\n /** Whether to show the orientation select dropdown in the UI */\n showOrientationSelect: boolean = true\n\n /** Whether to show the increment select dropdown in the UI */\n showIncrementSelect: boolean = true\n\n /** Whether to show icons in the jogging tabs */\n showTabIcons: boolean = false\n\n /** Whether to show the label to the right of the velocity slider */\n showVelocitySliderLabel: boolean = true\n\n /** Whether to show the legend before the slider */\n showVelocityLegend: boolean = false\n\n /** Whether to show the legend before the joints */\n showJointsLegend: boolean = false\n\n disposers: IReactionDisposer[] = []\n\n /**\n * Load a jogging store with the relevant data it needs\n * from the backend\n */\n static async loadFor(jogger: JoggerConnection) {\n const { nova } = jogger\n\n // Find out what TCPs this motion group has (we need it for jogging)\n const [coordinatesystems, description] = await Promise.all([\n // Fetch coord systems so user can select between them\n nova.api.controller.listCoordinateSystems(\n jogger.motionStream.controllerId,\n \"ROTATION_VECTOR\",\n ),\n\n // Same for TCPs and other info from description\n nova.api.motionGroup.getMotionGroupDescription(\n jogger.motionStream.controllerId,\n jogger.motionGroupId,\n ),\n ])\n\n const tcps = Object.entries(description.tcps || {}).map(([id, tcp]) => ({\n id,\n readable_name: tcp.name,\n position: tcp.pose.position as Vector3Simple,\n orientation: tcp.pose.orientation as Vector3Simple,\n }))\n\n return new JoggingStore(jogger, coordinatesystems || [], description, tcps)\n }\n\n constructor(\n readonly jogger: JoggerConnection,\n readonly coordSystems: CoordinateSystem[],\n readonly motionGroupDescription: MotionGroupDescription,\n readonly tcps: RobotTcp[],\n ) {\n // TODO workaround for default coord system on backend having a canonical id\n // of empty string. Can remove when fixed on API side\n for (const cs of coordSystems) {\n if (cs.coordinate_system === \"\") {\n cs.coordinate_system = \"world\"\n break\n }\n }\n this.selectedCoordSystemId = coordSystems[0]?.coordinate_system || \"world\"\n this.selectedTcpId = tcps[0]?.id || \"\"\n\n // Make all properties observable and actions auto-bound\n makeAutoObservable(this, {}, { autoBind: true })\n\n // Register blocked watching\n this.jogger.onBlocked = () => {\n this.block()\n }\n\n // Load user settings from local storage if available\n this.loadFromLocalStorage()\n\n // Automatically save user settings to local storage when save changes\n this.disposers.push(autorun(() => this.saveToLocalStorage()))\n\n // Assign joggingStore to window\n ;(window as any).joggingStore = this\n }\n\n dispose() {\n for (const dispose of this.disposers) {\n dispose()\n }\n this.jogger.dispose()\n }\n\n get coordSystemCountByName() {\n return countBy(this.coordSystems, (cs) => cs.name)\n }\n\n async deactivate() {\n if (this.jogger.mode === \"jogging\") {\n return this.jogger.stop()\n }\n }\n\n /** Activate the jogger with current settings */\n async activate() {\n if (this.currentTab.id === \"cartesian\") {\n if (\n this.jogger.tcp !== this.selectedTcpId ||\n this.jogger.orientation !== this.selectedOrientation\n ) {\n this.jogger.setOptions({\n tcp: this.selectedTcpId,\n orientation: this.selectedOrientation as JoggerOrientation,\n })\n }\n\n if (this.activeDiscreteIncrement) {\n this.jogger.setJoggingMode(\"trajectory\")\n } else {\n this.jogger.setJoggingMode(\"jogging\")\n }\n } else {\n this.jogger.setJoggingMode(\"jogging\")\n }\n\n return this.jogger\n }\n\n loadFromLocalStorage() {\n const save = tryParseJson(localStorage.getItem(\"joggingToolStore\"))\n if (!save) return\n\n if (this.tabsById[save.selectedTabId]) {\n this.selectedTabId = save.selectedTabId\n }\n\n if (this.coordSystemsById[save.selectedCoordSystemId]) {\n this.selectedCoordSystemId = save.selectedCoordSystemId\n }\n\n if (this.tcpsById[save.selectedTcpId]) {\n this.selectedTcpId = save.selectedTcpId\n }\n\n if (this.incrementOptionsById[save.selectedIncrementId]) {\n this.selectedIncrementId = save.selectedIncrementId\n }\n\n if ([\"translate\", \"rotate\"].includes(save.selectedCartesianMotionType)) {\n this.selectedCartesianMotionType = save.selectedCartesianMotionType\n }\n\n if ([\"coordsys\", \"tool\"].includes(save.selectedOrientation)) {\n this.selectedOrientation = save.selectedOrientation\n }\n }\n\n saveToLocalStorage() {\n localStorage.setItem(\n \"joggingToolStore\",\n JSON.stringify(this.localStorageSave),\n )\n }\n\n get isLocked() {\n return this.locks.size > 0\n }\n\n get localStorageSave() {\n return {\n selectedTabId: this.selectedTabId,\n selectedCoordSystemId: this.selectedCoordSystemId,\n selectedTcpId: this.selectedTcpId,\n selectedOrientation: this.selectedOrientation,\n selectedIncrementId: this.selectedIncrementId,\n selectedCartesianMotionType: this.selectedCartesianMotionType,\n }\n }\n\n get tabs() {\n return [\n {\n id: \"cartesian\",\n label: \"cartesian\",\n },\n {\n id: \"joint\",\n label: \"joint\",\n },\n ] as const\n }\n\n get incrementOptions() {\n return incrementOptions\n }\n\n get discreteIncrementOptions() {\n return discreteIncrementOptions\n }\n\n get incrementOptionsById() {\n return keyBy(this.incrementOptions, (o) => o.id)\n }\n\n get tabsById() {\n return keyBy(this.tabs, (t) => t.id)\n }\n\n get currentTab() {\n return this.tabsById[this.selectedTabId] || this.tabs[0]!\n }\n\n get tabIndex() {\n return this.tabs.indexOf(this.currentTab)\n }\n\n get coordSystemsById() {\n return keyBy(this.coordSystems, (cs) => cs.coordinate_system)\n }\n\n get selectedCoordSystem() {\n return this.coordSystemsById[this.selectedCoordSystemId]\n }\n\n /**\n * The id of the coordinate system to use for jogging.\n * If in tool orientation, this is set to \"tool\", not the\n * selected coordinate system.\n */\n get activeCoordSystemId() {\n return this.selectedOrientation === \"tool\"\n ? \"tool\"\n : this.selectedCoordSystemId\n }\n\n get tcpsById() {\n return keyBy(this.tcps, (tcp) => tcp.id)\n }\n\n get activeDiscreteIncrement() {\n return this.selectedOrientation === \"tool\"\n ? undefined\n : discreteIncrementOptions.find((d) => d.id === this.selectedIncrementId)\n }\n\n /** The selected rotation velocity converted to radians per second */\n get rotationVelocityRadsPerSec() {\n return (this.rotationVelocityDegPerSec * Math.PI) / 180\n }\n\n /** Selected velocity in mm/sec or deg/sec */\n get velocityInDisplayUnits() {\n return this.currentMotionType === \"translate\"\n ? this.translationVelocityMmPerSec\n : this.rotationVelocityDegPerSec\n }\n\n /** Minimum selectable velocity in mm/sec or deg/sec */\n get minVelocityInDisplayUnits() {\n return this.currentMotionType === \"translate\"\n ? this.minTranslationVelocityMmPerSec\n : this.minRotationVelocityDegPerSec\n }\n\n /** Maximum selectable velocity in mm/sec or deg/sec */\n get maxVelocityInDisplayUnits() {\n return this.currentMotionType === \"translate\"\n ? this.maxTranslationVelocityMmPerSec\n : this.maxRotationVelocityDegPerSec\n }\n\n /**\n * For velocity unit purposes, joint and cartesian rotation\n * are treated as the same type of motion\n */\n get currentMotionType() {\n if (\n this.selectedTabId === \"cartesian\" &&\n this.selectedCartesianMotionType === \"translate\"\n ) {\n return \"translate\"\n } else {\n return \"rotate\"\n }\n }\n\n onTabChange(_event: React.SyntheticEvent, newValue: number) {\n const tab = this.tabs[newValue] || this.tabs[0]!\n this.selectedTabId = tab.id\n }\n\n setSelectedCoordSystemId(id: string) {\n this.selectedCoordSystemId = id\n }\n\n setSelectedTcpId(id: string) {\n this.selectedTcpId = id\n }\n\n setSelectedOrientation(orientation: OrientationId) {\n this.selectedOrientation = orientation\n }\n\n setSelectedIncrementId(id: IncrementOptionId) {\n this.selectedIncrementId = id\n }\n\n setCurrentIncrementJog(incrementJog: IncrementJogInProgress | null) {\n this.incrementJogInProgress = incrementJog\n }\n\n setVelocityFromSlider(velocity: number) {\n if (this.currentMotionType === \"translate\") {\n this.translationVelocityMmPerSec = velocity\n } else {\n this.rotationVelocityDegPerSec = velocity\n }\n }\n\n setSelectedCartesianMotionType(type: \"translate\" | \"rotate\") {\n this.selectedCartesianMotionType = type\n }\n\n lock(id: string) {\n this.locks.add(id)\n }\n\n unlock(id: string) {\n this.locks.delete(id)\n }\n\n block() {\n this.blocked = true\n }\n\n unblock() {\n this.blocked = false\n if (this.jogger.mode === \"jogging\") {\n this.jogger.initializeJoggingWebsocket()\n }\n }\n\n /** Lock the UI until the given async callback resolves */\n async withMotionLock(fn: () => Promise<void>) {\n const lockId = uniqueId()\n this.lock(lockId)\n\n try {\n return await fn()\n } finally {\n this.unlock(lockId)\n }\n }\n}\n","import { Alert, AlertTitle, Backdrop, Button, Stack } from \"@mui/material\"\nimport { observer } from \"mobx-react-lite\"\nimport { useTranslation } from \"react-i18next\"\nimport { type JoggingStore } from \"./JoggingStore\"\n\nexport const JoggingBlocked = observer(({ store }: { store: JoggingStore }) => {\n const { t } = useTranslation()\n\n return (\n <Backdrop\n open={true}\n sx={{\n position: \"absolute\",\n zIndex: (theme) => theme.zIndex.drawer + 1,\n color: \"#fff\",\n background: \"rgba(15, 15, 15, 0.88)\",\n justifyContent: \"flex-start\",\n alignItems: \"flex-start\",\n }}\n >\n <Stack sx={{ m: 2, width: \"100%\" }}>\n <Alert severity=\"error\" sx={{ mb: 2 }}>\n <AlertTitle>{t(\"Jogging.Blocked.ti\")}</AlertTitle>\n {t(\"Jogging.Blocked.lb\")}\n </Alert>\n\n <Button\n variant=\"contained\"\n color=\"secondary\"\n onClick={() => store.unblock()}\n >\n {t(\"Jogging.Blocked.Reenable.bt\")}\n </Button>\n </Stack>\n </Backdrop>\n )\n})\n","import * as React from \"react\";\nimport { forwardRef } from \"react\";\nconst SvgAxisX = ({\n title,\n titleId,\n ...props\n}, ref) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 19, height: 10, fill: \"none\", ref, \"aria-labelledby\": titleId, ...props }, title ? /* @__PURE__ */ React.createElement(\"title\", { id: titleId }, title) : null, /* @__PURE__ */ React.createElement(\"path\", { fill: \"#fff\", fillRule: \"evenodd\", d: \"M5.131.312a.9.9 0 0 1 0 1.272L3.07 3.645h12.44l-2.06-2.061A.9.9 0 0 1 14.72.313l3.596 3.596a.9.9 0 0 1 0 1.271l-3.596 3.597a.9.9 0 0 1-1.271-1.272l2.061-2.062H3.07L5.13 7.505A.9.9 0 0 1 3.86 8.777L.263 5.18a.9.9 0 0 1 0-1.271L3.86.312a.9.9 0 0 1 1.271 0\", clipRule: \"evenodd\" }));\nconst ForwardRef = forwardRef(SvgAxisX);\nexport default ForwardRef;\n","import * as React from \"react\";\nimport { forwardRef } from \"react\";\nconst SvgAxisY = ({\n title,\n titleId,\n ...props\n}, ref) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 19, height: 10, fill: \"none\", ref, \"aria-labelledby\": titleId, ...props }, title ? /* @__PURE__ */ React.createElement(\"title\", { id: titleId }, title) : null, /* @__PURE__ */ React.createElement(\"path\", { fill: \"#fff\", fillRule: \"evenodd\", d: \"M5.131.312a.9.9 0 0 1 0 1.272L3.07 3.645h12.44l-2.06-2.061A.9.9 0 0 1 14.72.313l3.596 3.596a.9.9 0 0 1 0 1.271l-3.596 3.597a.9.9 0 0 1-1.271-1.272l2.061-2.062H3.07L5.13 7.505A.9.9 0 0 1 3.86 8.777L.263 5.18a.9.9 0 0 1 0-1.271L3.86.312a.9.9 0 0 1 1.271 0\", clipRule: \"evenodd\" }));\nconst ForwardRef = forwardRef(SvgAxisY);\nexport default ForwardRef;\n","import * as React from \"react\";\nimport { forwardRef } from \"react\";\nconst SvgAxisZ = ({\n title,\n titleId,\n ...props\n}, ref) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 10, height: 19, fill: \"none\", ref, \"aria-labelledby\": titleId, ...props }, title ? /* @__PURE__ */ React.createElement(\"title\", { id: titleId }, title) : null, /* @__PURE__ */ React.createElement(\"path\", { fill: \"#fff\", fillRule: \"evenodd\", d: \"M9.522 14.811A.899.899 0 1 0 8.25 13.54L6.19 15.601V3.16L8.25 5.221A.9.9 0 0 0 9.522 3.95L5.926.354a.9.9 0 0 0-1.272 0L1.058 3.95a.9.9 0 1 0 1.271 1.271L4.391 3.16v12.442L2.329 13.54a.899.899 0 1 0-1.271 1.271l3.596 3.597a.9.9 0 0 0 1.272 0z\", clipRule: \"evenodd\" }));\nconst ForwardRef = forwardRef(SvgAxisZ);\nexport default ForwardRef;\n","import * as React from \"react\";\nimport { forwardRef } from \"react\";\nconst SvgRotation = ({\n title,\n titleId,\n ...props\n}, ref) => /* @__PURE__ */ React.createElement(\"svg\", { width: 16, height: 16, viewBox: \"0 0 16 16\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ref, \"aria-labelledby\": titleId, ...props }, title ? /* @__PURE__ */ React.createElement(\"title\", { id: titleId }, title) : null, /* @__PURE__ */ React.createElement(\"path\", { d: \"M8 16C5.76667 16 3.875 15.225 2.325 13.675C0.775 12.125 0 10.2333 0 8C0 5.76667 0.775 3.875 2.325 2.325C3.875 0.775 5.76667 0 8 0C9.15 0 10.25 0.2375 11.3 0.7125C12.35 1.1875 13.25 1.86667 14 2.75V0H16V7H9V5H13.2C12.6667 4.06667 11.9375 3.33333 11.0125 2.8C10.0875 2.26667 9.08333 2 8 2C6.33333 2 4.91667 2.58333 3.75 3.75C2.58333 4.91667 2 6.33333 2 8C2 9.66667 2.58333 11.0833 3.75 12.25C4.91667 13.4167 6.33333 14 8 14C9.28333 14 10.4417 13.6333 11.475 12.9C11.0583 14.1 12.5083 12.1667 11.475 12.9L12.9 14.325C11.4667 15.4417 9.83333 16 8 16Z\", fill: \"white\" }));\nconst ForwardRef = forwardRef(SvgRotation);\nexport default ForwardRef;\n","import baseIsEqual from './_baseIsEqual.js';\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\nexport default isEqual;\n","import { Typography } from \"@mui/material\"\nimport isEqual from \"lodash-es/isEqual\"\nimport { useRef, useState } from \"react\"\nimport { useTranslation } from \"react-i18next\"\nimport { useAnimationFrame } from \"../utils/hooks\"\nimport type { JoggingStore } from \"./JoggingStore\"\n\n/**\n * Monitors the active robot motion state and displays a message if\n * any joint limits are reached.\n */\nexport const JoggingJointLimitDetector = ({\n store,\n}: {\n store: JoggingStore\n}) => {\n const { t } = useTranslation()\n\n const [jointLimitsReached, setJointLimitsReached] = useState(\n store.jogger.motionStream.rapidlyChangingMotionState\n .joint_limit_reached.limit_reached,\n )\n const jointLimitsReachedRef = useRef(jointLimitsReached)\n\n useAnimationFrame(() => {\n const newLimitsReached =\n store.jogger.motionStream.rapidlyChangingMotionState\n .joint_limit_reached.limit_reached\n\n if (!isEqual(jointLimitsReachedRef.current, newLimitsReached)) {\n jointLimitsReachedRef.current = newLimitsReached\n setJointLimitsReached(newLimitsReached)\n }\n })\n\n const jointLimitReachedIndices: number[] = []\n for (const [index, limitReached] of jointLimitsReached.entries()) {\n if (limitReached) jointLimitReachedIndices.push(index)\n }\n\n return (\n <Typography\n color=\"error\"\n sx={{\n margin: \"0.5rem 1rem\",\n textAlign: \"center\",\n minHeight: \"1.5rem\",\n visibility: jointLimitReachedIndices.length ? \"visible\" : \"hidden\",\n }}\n >\n {t(\"Jogging.JointLimitsReached.lb\", {\n jointNumbers: jointLimitReachedIndices.map((i) => i + 1).join(\", \"),\n })}\n </Typography>\n )\n}\n","import {\n FormControl,\n InputLabel,\n Select,\n styled,\n type SelectProps,\n} from \"@mui/material\"\n\nconst AdornedFormControl = styled(FormControl)(({ theme }) => ({\n \"&.MuiFormControl-root\": {\n \".MuiSelect-select\": {\n paddingTop: \"20px\",\n paddingLeft: \"12px\",\n },\n label: {\n pointerEvents: \"none\",\n fontSize: \"16px\",\n },\n \".MuiInputLabel-root\": {\n \"&.Mui-focused\": {\n color: theme.palette.text.primary,\n },\n },\n },\n}))\n\ntype AdornedSelectProps = {\n labelValue: string\n labelId: string\n} & SelectProps\n\nexport default function AdornedSelect({\n labelValue,\n ...props\n}: AdornedSelectProps) {\n return (\n <AdornedFormControl fullWidth variant=\"filled\">\n <InputLabel id={props.labelId}>{labelValue}</InputLabel>\n <Select {...props} />\n </AdornedFormControl>\n )\n}\n","import { Box, MenuItem } from \"@mui/material\"\nimport { observer } from \"mobx-react-lite\"\nimport { 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","import { observer, useLocalObservable } from \"mobx-react-lite\"\nimport { useTranslation } from \"react-i18next\"\nimport { VelocitySlider, VelocitySliderLabel } from \"../VelocitySlider\"\nimport type { JoggingStore } from \"./JoggingStore\"\n\nexport const JoggingVelocitySlider = observer(\n ({ store }: { store: JoggingStore }) => {\n const { t } = useTranslation()\n\n const state = useLocalObservable(() => ({\n get valueLabelFormat() {\n if (store.currentMotionType === \"translate\") {\n return (value: number) =>\n `v = ${t(\"Jogging.Cartesian.Translation.velocityMmPerSec.lb\", { amount: value })}`\n } else {\n return (value: number) =>\n `ω = ${t(\"Jogging.Cartesian.Rotation.velocityDegPerSec.lb\", { amount: value })}`\n }\n },\n }))\n\n return (\n <VelocitySlider\n store={store}\n velocity={store.velocityInDisplayUnits}\n min={store.minVelocityInDisplayUnits}\n max={store.maxVelocityInDisplayUnits}\n onVelocityChange={store.setVelocityFromSlider}\n disabled={store.isLocked}\n renderValue={(value) => (\n <VelocitySliderLabel\n value={state.valueLabelFormat(value)}\n sx={{\n minWidth: \"111px\",\n span: {\n transform: \"translateY(-1.5px)\",\n },\n }}\n />\n )}\n />\n )\n },\n)\n","import {\n Divider,\n Stack,\n ToggleButton,\n Typography,\n useTheme,\n type Theme,\n} from \"@mui/material\"\nimport {\n degreesToRadians,\n radiansToDegrees,\n XYZ_TO_VECTOR,\n} from \"@wandelbots/nova-js\"\nimport { observer } from \"mobx-react-lite\"\nimport { useTranslation } from \"react-i18next\"\nimport XAxisIcon from \"../../icons/axis-x.svg\"\nimport YAxisIcon from \"../../icons/axis-y.svg\"\nimport ZAxisIcon from \"../../icons/axis-z.svg\"\nimport RotationIcon from \"../../icons/rotation.svg\"\nimport type { Vector3Simple } from \"../../lib/JoggerConnection\"\nimport { useReaction } from \"../utils/hooks\"\nimport { JoggingCartesianAxisControl } from \"./JoggingCartesianAxisControl\"\nimport { JoggingJointLimitDetector } from \"./JoggingJointLimitDetector\"\nimport { JoggingOptions } from \"./JoggingOptions\"\nimport type {\n DiscreteIncrementOption,\n JoggingAxis,\n JoggingDirection,\n JoggingStore,\n} from \"./JoggingStore\"\nimport { JoggingToggleButtonGroup } from \"./JoggingToggleButtonGroup\"\nimport { JoggingVelocitySlider } from \"./JoggingVelocitySlider\"\n\ntype JoggingCartesianOpts = {\n axis: JoggingAxis\n motionType: \"translate\" | \"rotate\"\n direction: JoggingDirection\n}\n\nexport const JoggingCartesianTab = observer(\n ({\n store,\n children,\n }: {\n store: JoggingStore\n children?: React.ReactNode\n }) => {\n const { t } = useTranslation()\n const theme = useTheme()\n\n function onMotionTypeChange(\n _event: React.MouseEvent<HTMLElement>,\n newMotionType: string,\n ) {\n if (newMotionType === \"translate\" || newMotionType === \"rotate\")\n store.setSelectedCartesianMotionType(newMotionType)\n }\n\n useReaction(\n () => [store.selectedCoordSystemId, store.selectedTcpId],\n () => {\n store.jogger.motionStream.motionStateSocket.changeUrl(\n store.jogger.nova.makeWebsocketURL(\n `/controllers/${store.jogger.motionStream.controllerId}/motion-groups/${store.jogger.motionGroupId}/state-stream?tcp=${store.selectedTcpId}`,\n ),\n )\n },\n { fireImmediately: true } as any,\n )\n\n async function runIncrementalCartesianJog(\n opts: JoggingCartesianOpts,\n increment: DiscreteIncrementOption,\n ) {\n const jogger = await store.activate()\n\n const tcpPose = jogger.motionStream.rapidlyChangingMotionState.tcp_pose\n const jointPosition = jogger.motionStream.rapidlyChangingMotionState\n .joint_position as Vector3Simple\n if (!tcpPose) return\n\n await store.withMotionLock(async () => {\n try {\n store.setCurrentIncrementJog({\n axis: opts.axis,\n direction: opts.direction,\n })\n await store.jogger.runIncrementalCartesianMotion({\n currentTcpPose: tcpPose,\n currentJoints: jointPosition,\n coordSystemId: store.activeCoordSystemId,\n velocityInRelevantUnits:\n store.selectedCartesianMotionType === \"translate\"\n ? store.translationVelocityMmPerSec\n : store.rotationVelocityRadsPerSec,\n axis: opts.axis,\n direction: opts.direction,\n motion:\n store.selectedCartesianMotionType === \"translate\"\n ? {\n type: \"translate\",\n distanceMm: increment.mm,\n }\n : {\n type: \"rotate\",\n distanceRads: degreesToRadians(increment.degrees),\n },\n })\n } finally {\n store.setCurrentIncrementJog(null)\n await store.deactivate()\n }\n })\n }\n\n async function startCartesianJogging(opts: JoggingCartesianOpts) {\n if (store.isLocked) return\n\n const jogger = await store.activate()\n if (store.activeDiscreteIncrement) {\n return runIncrementalCartesianJog(opts, store.activeDiscreteIncrement)\n }\n\n if (opts.motionType === \"translate\") {\n await store.jogger.translateTCP({\n axis: opts.axis,\n direction: opts.direction,\n velocityMmPerSec: store.translationVelocityMmPerSec,\n })\n } else {\n await store.jogger.rotateTCP({\n axis: opts.axis,\n direction: opts.direction,\n velocityRadsPerSec: store.rotationVelocityRadsPerSec,\n })\n }\n }\n\n async function stopJogging() {\n if (store.isLocked) return\n\n if (store.activeDiscreteIncrement) {\n return\n }\n\n await store.deactivate()\n }\n\n function getAxisColors(\n axisId: \"X\" | \"Y\" | \"Z\",\n motionType: \"translate\" | \"rotate\",\n theme: Theme,\n ) {\n const axisColors =\n theme.componentsExt?.JoggingPanel?.JoggingCartesian?.Axis\n\n if (!axisColors) return undefined\n\n if (motionType === \"translate\") {\n return axisColors[axisId]\n }\n\n return axisColors.CustomRotation ?? axisColors[axisId]\n }\n\n const axisList = [\n {\n id: \"x\",\n icon: <XAxisIcon />,\n colors: getAxisColors(\"X\", store.selectedCartesianMotionType, theme),\n },\n {\n id: \"y\",\n icon: <YAxisIcon />,\n colors: getAxisColors(\"Y\", store.selectedCartesianMotionType, theme),\n },\n {\n id: \"z\",\n icon: <ZAxisIcon />,\n colors: getAxisColors(\"Z\", store.selectedCartesianMotionType, theme),\n },\n ] as const\n\n function formatMM(value: number) {\n return t(\"General.mm.variable\", { amount: value.toFixed(1) })\n }\n\n function formatDegrees(value: number) {\n return t(\"General.degree.variable\", {\n amount: radiansToDegrees(value).toFixed(1),\n })\n }\n\n return (\n <Stack flexGrow={1} gap={2} sx={{ padding: \"18px 24px\" }}>\n <Stack gap={2}>\n <JoggingOptions store={store} />\n <JoggingVelocitySlider store={store} />\n <Divider />\n </Stack>\n\n <Stack\n //maxWidth=\"296px\"\n marginLeft=\"auto\"\n marginRight=\"auto\"\n gap=\"24px\"\n justifyContent=\"center\"\n sx={{ flexGrow: \"1\" }}\n >\n <Stack\n alignItems=\"center\"\n justifyContent=\"center\"\n gap=\"24px\"\n sx={{ flexGrow: 1 }}\n >\n {/* Translate or rotate toggle */}\n <JoggingToggleButtonGroup\n value={store.selectedCartesianMotionType}\n onChange={onMotionTypeChange}\n exclusive\n aria-label={t(\"Jogging.Cartesian.MotionType.lb\")}\n sx={{ justifyContent: \"center\" }}\n >\n <ToggleButton value=\"translate\">\n {t(\"Jogging.Cartesian.Translation.bt\")}\n </ToggleButton>\n <ToggleButton value=\"rotate\">\n {t(\"Jogging.Cartesian.Rotation.bt\")}\n </ToggleButton>\n </JoggingToggleButtonGroup>\n\n {/* Cartesian translate jogging */}\n {store.selectedCartesianMotionType === \"translate\" &&\n axisList.map((axis) => (\n <JoggingCartesianAxisControl\n key={axis.id}\n colors={axis.colors}\n disabled={store.isLocked}\n activeJoggingDirection={\n store.incrementJogInProgress?.axis === axis.id\n ? store.incrementJogInProgress.direction\n : undefined\n }\n label={\n <>\n {axis.icon}\n <Typography\n sx={{\n fontSize: \"24px\",\n color:\n axis.colors?.labelColor ??\n theme.palette.text.primary,\n }}\n >\n {axis.id.toUpperCase()}\n </Typography>\n </>\n }\n getDisplayedValue={() =>\n formatMM(\n store.jogger.motionStream.rapidlyChangingMotionState\n .tcp_pose?.position?.[XYZ_TO_VECTOR[axis.id]] || 0,\n )\n }\n startJogging={(direction: \"-\" | \"+\") =>\n startCartesianJogging({\n axis: axis.id,\n motionType: \"translate\",\n direction,\n })\n }\n stopJogging={stopJogging}\n />\n ))}\n\n {/* Cartesian rotate jogging */}\n {store.selectedCartesianMotionType === \"rotate\" &&\n axisList.map((axis) => (\n <JoggingCartesianAxisControl\n key={axis.id}\n colors={axis.colors}\n disabled={store.isLocked}\n activeJoggingDirection={\n store.incrementJogInProgress?.axis === axis.id\n ? store.incrementJogInProgress.direction\n : undefined\n }\n label={\n <>\n <RotationIcon />\n <Typography\n sx={{\n fontSize: \"24px\",\n color:\n axis.colors?.labelColor ??\n theme.palette.text.primary,\n }}\n >\n {axis.id.toUpperCase()}\n </Typography>\n </>\n }\n getDisplayedValue={() =>\n formatDegrees(\n store.jogger.motionStream.rapidlyChangingMotionState\n .tcp_pose?.orientation?.[XYZ_TO_VECTOR[axis.id]] || 0,\n )\n }\n startJogging={(direction: \"-\" | \"+\") =>\n startCartesianJogging({\n axis: axis.id,\n motionType: \"rotate\",\n direction,\n })\n }\n stopJogging={stopJogging}\n />\n ))}\n </Stack>\n </Stack>\n\n {/* Show message if joint limits reached */}\n <JoggingJointLimitDetector store={store} />\n\n {children && <Divider />}\n\n {/* Custom content */}\n\n {children}\n </Stack>\n )\n },\n)\n","import { Divider, Stack, Typography, useTheme } from \"@mui/material\"\nimport { radiansToDegrees } from \"@wandelbots/nova-js\"\nimport { observer } from \"mobx-react-lite\"\nimport type { ReactNode } from \"react\"\nimport { JoggingJointLimitDetector } from \"./JoggingJointLimitDetector\"\nimport { JoggingJointRotationControl } from \"./JoggingJointRotationControl\"\nimport type { JoggingStore } from \"./JoggingStore\"\nimport { JoggingVelocitySlider } from \"./JoggingVelocitySlider\"\n\nexport const JoggingJointTab = observer(\n ({ store, children }: { store: JoggingStore; children: ReactNode }) => {\n const theme = useTheme()\n async function startJointJogging(opts: {\n joint: number\n direction: \"-\" | \"+\"\n }) {\n await store.activate()\n\n await store.jogger.rotateJoints({\n joint: opts.joint,\n direction: opts.direction,\n velocityRadsPerSec: store.rotationVelocityRadsPerSec,\n })\n }\n\n async function stopJointJogging() {\n await store.jogger.stop()\n await store.deactivate()\n }\n\n return (\n <Stack flexGrow={1} gap={2} sx={{ padding: \"18px 24px\" }}>\n <JoggingVelocitySlider store={store} />\n <Divider />\n\n <Stack\n justifyContent=\"center\"\n alignItems=\"stretch\"\n sx={{ flexGrow: \"1\" }}\n id=\"JointControls\"\n >\n <Stack alignItems=\"center\" gap=\"24px\">\n {store.jogger.motionStream.joints.map((joint) => {\n const jointLimits =\n store.motionGroupDescription.operation_limits.auto_limits\n ?.joints?.[joint.index]?.position\n const lowerLimitDegs =\n jointLimits?.lower_limit !== undefined\n ? radiansToDegrees(jointLimits.lower_limit)\n : undefined\n const upperLimitDegs =\n jointLimits?.upper_limit !== undefined\n ? radiansToDegrees(jointLimits.upper_limit)\n : undefined\n\n return (\n <Stack\n key={`joint-${joint.index}`}\n direction=\"row\"\n alignItems=\"center\"\n justifyContent={\"center\"}\n spacing={1.5}\n width={\"100%\"}\n >\n {store.showJointsLegend && (\n <Typography\n color={\n store.isLocked\n ? theme.palette.text.disabled\n : theme.palette.text.secondary\n }\n >\n {`G${joint.index + 1}`}\n </Typography>\n )}\n\n <JoggingJointRotationControl\n disabled={store.isLocked}\n lowerLimitDegs={lowerLimitDegs}\n upperLimitDegs={upperLimitDegs}\n getValueDegs={() => {\n const value =\n store.jogger.motionStream.rapidlyChangingMotionState\n .joint_position[joint.index]\n return value !== undefined\n ? radiansToDegrees(value)\n : undefined\n }}\n startJogging={(direction: \"-\" | \"+\") =>\n startJointJogging({\n joint: joint.index,\n direction,\n })\n }\n stopJogging={stopJointJogging}\n />\n </Stack>\n )\n })}\n </Stack>\n </Stack>\n <JoggingJointLimitDetector store={store} />\n\n {children && <Divider />}\n\n {/* Custom content */}\n {children}\n </Stack>\n )\n },\n)\n","import MoveIcon from \"@mui/icons-material/OpenWith\"\nimport ShareIcon from \"@mui/icons-material/Share\"\nimport { Stack, Tab, Tabs, type SxProps } from \"@mui/material\"\nimport { NovaClient } from \"@wandelbots/nova-js/v2\"\nimport { isString } from \"lodash-es\"\nimport { runInAction } from \"mobx\"\nimport { observer, useLocalObservable } from \"mobx-react-lite\"\nimport { useEffect } from \"react\"\nimport { useTranslation } from \"react-i18next\"\nimport { externalizeComponent } from \"../../externalizeComponent\"\nimport { JoggerConnection } from \"../../lib/JoggerConnection\"\nimport { LoadingCover } from \"../LoadingCover\"\nimport { JoggingBlocked } from \"./JoggingBlocked\"\nimport { JoggingCartesianTab } from \"./JoggingCartesianTab\"\nimport { JoggingJointTab } from \"./JoggingJointTab\"\nimport { JoggingStore } from \"./JoggingStore\"\n\nexport type JoggingPanelTabId = \"cartesian\" | \"joint\"\n\nexport type JoggingPanelProps = {\n /** Either an existing NovaClient or the base url of a deployed Nova instance */\n nova: NovaClient | string\n /** Id of the motion group to move e.g. 0@ur5e */\n motionGroupId: string\n /** Callback with the jogging panel's state store for further customization/config */\n onSetup?: (store: JoggingStore) => void\n /** Any children will go at the bottom of the panel under the default contents */\n children?: React.ReactNode\n /** Set this to true to disable jogging UI temporarily e.g. when a program is executing */\n locked?: boolean\n sx?: SxProps\n\n /**\n * To preserve state while the jogging panel is hidden, you can create and pass a\n * JoggingStore here and it will be used instead of creating a new one.\n */\n store?: JoggingStore\n}\n\n/**\n * A high-level, opinionated UI panel for jogging a robot using the Wandelbots Platform API\n */\nexport const JoggingPanel = externalizeComponent(\n observer((props: JoggingPanelProps) => {\n const nova = isString(props.nova)\n ? new NovaClient({ instanceUrl: props.nova })\n : props.nova\n\n const state = useLocalObservable(() => ({\n joggingStore: null as JoggingStore | null,\n loadingError: null as unknown | null,\n }))\n\n async function init() {\n runInAction(() => {\n state.loadingError = null\n state.joggingStore = null\n })\n\n try {\n let joggingStore = props.store\n if (!joggingStore) {\n const jogger = await JoggerConnection.open(nova, props.motionGroupId)\n joggingStore = await JoggingStore.loadFor(jogger)\n }\n runInAction(() => {\n state.joggingStore = joggingStore\n })\n if (props.onSetup) {\n props.onSetup(joggingStore)\n }\n } catch (err) {\n state.loadingError = err\n }\n }\n\n useEffect(() => {\n init()\n return props.store\n ? () => null\n : () => {\n state.joggingStore?.dispose()\n }\n }, [props.store, props.nova, props.motionGroupId])\n\n useEffect(() => {\n const store = state.joggingStore\n if (!store) return\n\n if (props.locked) {\n store.lock(\"external\")\n } else {\n store.unlock(\"external\")\n }\n }, [state.joggingStore, props.locked])\n\n return (\n <Stack\n sx={{\n maxWidth: \"460px\",\n minWidth: \"320px\",\n position: \"relative\",\n ...props.sx,\n }}\n >\n {state.joggingStore ? (\n <JoggingPanelInner\n store={state.joggingStore}\n children={props.children}\n ></JoggingPanelInner>\n ) : (\n <LoadingCover message=\"Loading jogging\" error={state.loadingError} />\n )}\n </Stack>\n )\n }),\n)\n\nconst JoggingPanelInner = observer(\n ({\n store,\n children,\n }: {\n store: JoggingStore\n children?: React.ReactNode\n childrenJoint?: React.ReactNode\n }) => {\n const { t } = useTranslation()\n\n function renderTabContent() {\n if (store.currentTab.id === \"cartesian\") {\n return (\n <>\n <JoggingCartesianTab store={store}>{children}</JoggingCartesianTab>\n </>\n )\n } else if (store.currentTab.id === \"joint\") {\n return (\n <>\n <JoggingJointTab store={store}>{children}</JoggingJointTab>\n </>\n )\n }\n }\n\n return (\n <Stack flexGrow={1} sx={{ overflow: \"hidden\" }}>\n {/* Tab selection */}\n <Tabs\n value={store.tabIndex}\n onChange={store.onTabChange}\n variant=\"fullWidth\"\n >\n {store.tabs.map((tab) => {\n const label =\n tab.label === \"cartesian\"\n ? t(\"Jogging.Cartesian.bt\")\n : t(\"Jogging.Joints.bt\")\n\n const icon =\n tab.label === \"cartesian\" ? (\n <MoveIcon fontSize=\"small\" sx={{ mr: 1 }} />\n ) : (\n <ShareIcon fontSize=\"small\" sx={{ mr: 1 }} />\n )\n\n return (\n <Tab\n key={tab.id}\n label={\n store.showTabIcons ? (\n <Stack direction=\"row\" alignItems=\"center\">\n {icon}\n {label}\n </Stack>\n ) : (\n label\n )\n }\n id={`jogging-tab-${tab.id}`}\n aria-controls={`jogging-tab-${tab.id}`}\n />\n )\n })}\n </Tabs>\n {/* Current tab content */}\n <Stack\n flexGrow={1}\n position=\"relative\"\n sx={{ overflowY: \"auto\", overflowX: \"hidden\" }}\n >\n {renderTabContent()}\n </Stack>\n {/* Overlay when jogging connection is blocked */}\n {store.blocked && <JoggingBlocked store={store} />}\n </Stack>\n )\n },\n)\n","import { Stack, Tooltip, Typography, useTheme } from \"@mui/material\"\nimport { useEffect, useState } from \"react\"\n\nexport const CopyableText = (props: {\n label?: string\n value: string\n ref?: React.Ref<HTMLDivElement>\n}) => {\n const { value, ref } = props\n // Note: label prop is available but not currently used in the component\n const theme = useTheme()\n const [tooltipOpen, setTooltipOpen] = useState(false)\n\n async function onCopyText(): Promise<boolean> {\n if (!ref || !(\"current\" in ref)) {\n console.warn(\"No copy target found\")\n return false\n }\n try {\n await navigator.clipboard.writeText(value)\n console.log(\"Copied!\")\n setTooltipOpen(true)\n return true\n } catch (err) {\n // Direct clipboard copy is not available in non-secure contexts\n console.error(err)\n\n // Let's fall back to selecting the text so the user can manually copy easily\n const selection = window.getSelection()\n if (selection && ref && \"current\" in ref && ref.current) {\n const range = document.createRange()\n range.selectNodeContents(ref.current)\n selection.removeAllRanges()\n selection.addRange(range)\n }\n }\n return false\n }\n\n useEffect(() => {\n if (!tooltipOpen) {\n return\n }\n const timeoutId = setTimeout(() => setTooltipOpen(false), 3000)\n return () => {\n timeoutId ? clearTimeout(timeoutId) : {}\n }\n }, [tooltipOpen])\n\n return (\n <Tooltip open={tooltipOpen} title=\"Copied!\">\n <Stack\n justifyContent=\"center\"\n sx={{\n height: \"100%\",\n boxSizing: \"border-box\",\n padding: \"6px 12px\",\n background: theme.palette.backgroundPaperElevation?.[8],\n borderRadius: \"10px\",\n minWidth: \"0\",\n cursor: \"pointer\",\n }}\n onClick={() => onCopyText()}\n >\n <Typography\n ref={ref}\n align=\"center\"\n sx={{\n pointerEvents: \"none\",\n fontSize: \"12px\",\n color: theme.palette.text.primary,\n whiteSpace: \"nowrap\",\n minWidth: 0,\n textOverflow: \"ellipsis\",\n width: \"100%\",\n overflow: \"hidden\",\n }}\n >\n {value}\n </Typography>\n </Stack>\n </Tooltip>\n )\n}\n","import { Button, Stack } from \"@mui/material\"\nimport { poseToWandelscriptString, type Pose } from \"@wandelbots/nova-js/v2\"\nimport { observer } from \"mobx-react-lite\"\nimport { useState } from \"react\"\nimport { externalizeComponent } from \"../../externalizeComponent\"\nimport { CopyableText } from \"../CopyableText\"\n\nexport type PoseCartesianValuesProps = {\n tcpPose: Pose\n showCopyButton?: boolean\n}\n\nexport const PoseCartesianValues = externalizeComponent(\n observer(({ tcpPose, showCopyButton = false }: PoseCartesianValuesProps) => {\n const [copyMessage, setCopyMessage] = useState<string | null>(null)\n const poseString = poseToWandelscriptString(tcpPose)\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(poseString)\n setCopyMessage(\"Copied!\")\n setTimeout(() => setCopyMessage(null), 2000)\n } catch {\n setCopyMessage(\"Copy failed\")\n setTimeout(() => setCopyMessage(null), 2000)\n }\n }\n\n return (\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n spacing={1}\n sx={{ flexGrow: 1, minWidth: 0, overflow: \"hidden\" }}\n data-testid=\"pose-cartesian-values\"\n >\n <CopyableText value={poseString} />\n {showCopyButton && (\n <Button\n variant=\"contained\"\n color=\"secondary\"\n size=\"small\"\n onClick={handleCopy}\n sx={{ flexShrink: 0 }}\n >\n {copyMessage ? copyMessage : \"Copy\"}\n </Button>\n )}\n </Stack>\n )\n }),\n)\n","import { Button, Stack } from \"@mui/material\"\nimport { observer } from \"mobx-react-lite\"\nimport { useState } from \"react\"\nimport { externalizeComponent } from \"../../externalizeComponent\"\nimport { CopyableText } from \"../CopyableText\"\n\nexport type PoseJointValuesProps = {\n joints: Array<number>\n showCopyButton?: boolean\n}\n\nexport const PoseJointValues = externalizeComponent(\n observer(({ joints, showCopyButton = false }: PoseJointValuesProps) => {\n const [copyMessage, setCopyMessage] = useState<string | null>(null)\n const poseString = `[${joints.map((j: number) => parseFloat(j.toFixed(4))).join(\", \")}]`\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(poseString)\n setCopyMessage(\"Copied!\")\n setTimeout(() => setCopyMessage(null), 2000)\n } catch {\n setCopyMessage(\"Copy failed\")\n setTimeout(() => setCopyMessage(null), 2000)\n }\n }\n\n return (\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n spacing={1}\n sx={{ flexGrow: 1, minWidth: 0, overflow: \"hidden\" }}\n data-testid=\"pose-joint-values\"\n >\n <CopyableText value={poseString} />\n {showCopyButton && (\n <Button\n variant=\"contained\"\n color=\"secondary\"\n size=\"small\"\n onClick={handleCopy}\n sx={{ flexShrink: 0 }}\n >\n {copyMessage ? copyMessage : \"Copy\"}\n </Button>\n )}\n </Stack>\n )\n }),\n)\n"],"names":["splitProps","props","result","config","_a","defaultSxConfig","prop","extendSxProp","inSx","other","systemProps","otherProps","finalSx","args","isPlainObject","styled","createStyled","defaultTheme","createTheme","defaultCreateStyledComponent","systemStyled","useThemePropsDefault","useThemePropsSystem","joinChildren","children","separator","childrenArray","React","output","child","index","getSideFromDirection","direction","style","ownerState","theme","styles","handleBreakpoints","resolveBreakpointValues","propValue","transformer","createUnarySpacing","base","acc","breakpoint","directionValues","spacingValues","breakpoints","previousDirectionValue","styleFromPropValue","getValue","deepmerge","mergeBreakpointsInOrder","createStack","options","createStyledComponent","useThemeProps","componentName","useUtilityClasses","slots","composeClasses","slot","generateUtilityClass","StackRoot","Stack","inProps","ref","themeProps","component","spacing","divider","className","useFlexGap","classes","_jsx","clsx","PropTypes","useDefaultProps","SvgJogMinus","title","titleId","ForwardRef","forwardRef","SvgJogPlus","JoggingCartesianAxisControl","externalizeComponent","observer","colors","label","getDisplayedValue","startJogging","stopJogging","disabled","activeJoggingDirection","rest","useAnimationFrame","displayValue","element","valueContainerRef","useTheme","localActiveJoggingDirection","setLocalActiveJoggingDirection","useState","useEffect","onPointerUpOrOut","showJoggingDirection","useRef","borderColor","sxAxisControlButtonBase","sxAxisControlButtonDefault","_b","_c","_d","_e","sxAxisControlButtonPressed","_f","_g","onPointerDown","ev","jsxs","jsx","IconButton","JogMinus","Typography","JogPlus","ChevronLeft","createSvgIcon","ChevronRight","isObject","value","type","now","root","reWhitespace","trimmedEndIndex","string","reTrimStart","baseTrim","symbolTag","isSymbol","isObjectLike","baseGetTag","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","toNumber","isBinary","FUNC_ERROR_TEXT","nativeMax","nativeMin","debounce","func","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","invokeFunc","time","thisArg","leadingEdge","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","timeWaiting","shouldInvoke","trailingEdge","cancel","flush","debounced","isInvoking","throttle","JoggingJointRotationControl","lowerLimitDegs","upperLimitDegs","getValueDegs","t","useTranslation","currentValue","setCurrentValue","pressedButtonStyle","state","useLocalObservable","dir","updateValue","onPointerDownMinus","onPointerDownPlus","onPointerUp","onPointerOut","formatDegrees","precision","_i","_h","_j","Slider","_k","_o","_n","_m","_l","MoveIcon","ShareIcon","extendStatics","d","b","p","__extends","__","__values","o","m","i","__read","n","r","ar","e","error","__spread","Event","target","ErrorEvent","_super","_this","CloseEvent","code","reason","getGlobalWebSocket","isWebSocket","w","DEFAULT","ReconnectingWebSocket","url","protocols","event","minUptime","message","listener","bytes","data","maxEnqueuedMessages","e_1","listeners","listeners_1","listeners_1_1","e_1_1","l","reconnectionDelayGrowFactor","minReconnectionDelay","maxReconnectionDelay","delay","resolve","urlProvider","maxRetries","connectionTimeout","WebSocket","AutoReconnectingWebsocket","targetUrl","opts","origReconnect","reject","onMessage","onError","AvailableStorage","key","obj","availableStorage","DOMAIN_SUFFIX","auth0ConfigMap","getAuth0Config","instanceUrl","loginWithAuth0","auth0Config","Auth0Client","auth0Client","appState","normalize","strArray","resultArray","first","str","parts","urlJoin","input","dist","parse","compile","match","pathToRegexp","stringify","DEFAULT_DELIMITER","NOOP_VALUE","ID_START","ID_CONTINUE","SIMPLE_TOKENS","escapeText","escape","TokenData","tokens","originalPath","PathError","text","encodePath","chars","pos","name","quoteStart","consumeUntil","endType","token","path","cur","encode","delimiter","fn","tokensToFunction","params","missing","encoders","tokenToFunction","encoder","extras","encodeValue","decode","regexp","keys","decoders","decoder","end","sensitive","flags","sources","pathsToArray","flatten","toRegExpSource","pattern","paths","init","seq","backtrack","isSafeSegmentParam","negate","stringifyTokens","isNameSafe","isNextNameSafe","char","NovaCellAPIClient","cellId","SystemApi","CellApi","MotionGroupApi","MotionGroupModelsApi","ControllerApi","ControllerInputsOutputsApi","TrajectoryPlanningApi","TrajectoryExecutionApi","TrajectoryCachingApi","ApplicationApi","JoggingApi","KinematicsApi","BUSInputsOutputsApi","VirtualControllerApi","VirtualControllerBehaviorApi","VirtualControllerInputsOutputsApi","StoreObjectApi","StoreCollisionComponentsApi","StoreCollisionSetupsApi","ApiConstructor","apiClient","mime","axios","originalFunction","res","MockNovaInstance","apiHandlers","method","handler","pathToRegexp.match","json","AxiosError","socket","defaultMotionState","permissiveInstanceUrlParse","NovaClient","axiosInstance","request","isAxiosError","err","config$1","poseToWandelscriptString","pose","position","orientation","positionValues","v","rotationValues","clamp","min","max","Quaternion","x","y","z","dst","dstOffset","src0","srcOffset0","src1","srcOffset1","x0","y0","z0","w0","x1","y1","z1","w1","s","cos","sqrSin","sin","len","tDir","f","quaternion","euler","update","order","c1","c2","c3","s1","s2","s3","axis","angle","halfAngle","te","m11","m12","m13","m21","m22","m23","m31","m32","m33","trace","vFrom","vTo","q","step","a","qax","qay","qaz","qaw","qbx","qby","qbz","qbw","qb","cosHalfTheta","sqrSinHalfTheta","sinHalfTheta","halfTheta","ratioA","ratioB","qa","theta1","theta2","r1","r2","array","offset","attribute","callback","Vector3","scalar","_quaternion","vx","vy","vz","qx","qy","qz","qw","tx","ty","tz","camera","minVal","maxVal","length","alpha","v1","v2","ax","ay","az","bx","by","bz","denominator","planeNormal","_vector","normal","theta","dx","dy","dz","radius","phi","sinPhiRadius","c","sx","sy","sz","u","MOTION_DELTA_THRESHOLD","MotionStreamConnection","nova","controller","motionGroup","description","initialMotionState","motionStateSocket","latestMotionState","tryParseJson","jointValuesEqual","runInAction","tcpMotionEqual","unwrapRotationVector","makeAutoObservable","motionGroupId","_motionGroupIndex","controllerId","mg","firstMessage","num","_","API_ERROR_CONNECTION_BLOCKED","JoggerConnection","motionStream","jogger","velocity","sockets","mode","skipReinitializeIfSameMode","connectionFailedTimeout","joint","velocityRadsPerSec","velocityMmPerSec","rotation","translation","XYZ_TO_VECTOR","currentTcpPose","currentJoints","velocityInRelevantUnits","motion","commands","targetTcpPosition","currentRotationVector","currentRotationRad","currentRotationDirection","differenceRotationRad","differenceRotationDirection","f1","f2","f3","f4","dotProduct","crossProduct","newRotationRad","f5","targetTcpOrientation","motion_group_setup","motionPlanRes","trajectoryData","messageInitializeMovementResponse","waitForMovementToStartAndFinish","when","waitForMovementToFinish","messageStartMovementResponse","asyncTag","funcTag","genTag","proxyTag","isFunction","tag","coreJsData","maskSrcKey","uid","isMasked","funcProto","funcToString","toSource","reRegExpChar","reIsHostCtor","objectProto","hasOwnProperty","reIsNative","baseIsNative","object","getNative","defineProperty","baseAssignValue","arrayAggregator","setter","iteratee","accumulator","createBaseFor","fromRight","keysFunc","iterable","baseFor","baseTimes","argsTag","baseIsArguments","propertyIsEnumerable","isArguments","isArray","stubFalse","freeExports","freeModule","moduleExports","Buffer","nativeIsBuffer","isBuffer","MAX_SAFE_INTEGER","reIsUint","isIndex","isLength","arrayTag","boolTag","dateTag","errorTag","mapTag","numberTag","objectTag","regexpTag","setTag","stringTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","typedArrayTags","baseIsTypedArray","baseUnary","freeProcess","freeGlobal","nodeUtil","types","nodeIsTypedArray","isTypedArray","arrayLikeKeys","inherited","isArr","isArg","isBuff","isType","skipIndexes","isPrototype","Ctor","proto","overArg","transform","arg","nativeKeys","baseKeys","isArrayLike","baseForOwn","createBaseEach","eachFunc","collection","baseEach","baseAggregator","listCacheClear","eq","assocIndexOf","arrayProto","splice","listCacheDelete","lastIndex","listCacheGet","listCacheHas","listCacheSet","ListCache","entries","entry","stackClear","stackDelete","stackGet","stackHas","Map","nativeCreate","hashClear","hashDelete","HASH_UNDEFINED","hashGet","hashHas","hashSet","Hash","mapCacheClear","isKeyable","getMapData","map","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","size","MapCache","LARGE_ARRAY_SIZE","stackSet","pairs","setCacheAdd","setCacheHas","SetCache","values","arraySome","predicate","cacheHas","cache","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","equalArrays","bitmask","customizer","equalFunc","stack","isPartial","arrLength","othLength","arrStacked","othStacked","seen","arrValue","othValue","compared","othIndex","Uint8Array","mapToArray","setToArray","set","symbolProto","Symbol","symbolValueOf","equalByTag","convert","stacked","arrayPush","baseGetAllKeys","symbolsFunc","arrayFilter","resIndex","stubArray","nativeGetSymbols","getSymbols","symbol","getAllKeys","equalObjects","objProps","objLength","othProps","objStacked","skipCtor","objValue","objCtor","othCtor","DataView","Promise","Set","WeakMap","promiseTag","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","getTag","ctorString","baseIsEqualDeep","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","baseIsEqual","baseIsMatch","source","matchData","srcValue","isStrictComparable","getMatchData","matchesStrictComparable","baseMatches","reIsDeepProp","reIsPlainProp","isKey","memoize","resolver","memoized","MAX_MEMOIZE_SIZE","memoizeCapped","rePropName","reEscapeChar","stringToPath","number","quote","subString","arrayMap","symbolToString","baseToString","toString","castPath","toKey","baseGet","get","defaultValue","baseHasIn","hasPath","hasFunc","hasIn","baseMatchesProperty","identity","baseProperty","basePropertyDeep","property","baseIteratee","createAggregator","initializer","keyBy","idCounter","uniqueId","prefix","id","discreteIncrementOptions","incrementOptions","ORIENTATION_IDS","JoggingStore","coordSystems","motionGroupDescription","tcps","cs","autorun","coordinatesystems","tcp","dispose","countBy","save","_event","newValue","tab","incrementJog","lockId","JoggingBlocked","store","Backdrop","Alert","AlertTitle","Button","SvgAxisX","SvgAxisY","SvgAxisZ","SvgRotation","isEqual","JoggingJointLimitDetector","jointLimitsReached","setJointLimitsReached","jointLimitsReachedRef","newLimitsReached","jointLimitReachedIndices","limitReached","AdornedFormControl","FormControl","AdornedSelect","labelValue","InputLabel","Select","JoggingOptions","joggingOptions","translateOrientation","MenuItem","orientationId","inc","Box","select","idx","JoggingToggleButtonGroup","ToggleButtonGroup","JoggingVelocitySlider","VelocitySlider","VelocitySliderLabel","JoggingCartesianTab","onMotionTypeChange","newMotionType","useReaction","runIncrementalCartesianJog","increment","tcpPose","jointPosition","degreesToRadians","startCartesianJogging","getAxisColors","axisId","motionType","axisColors","axisList","XAxisIcon","YAxisIcon","ZAxisIcon","formatMM","radiansToDegrees","Divider","ToggleButton","Fragment","RotationIcon","JoggingJointTab","startJointJogging","stopJointJogging","jointLimits","JoggingPanel","isString","joggingStore","JoggingPanelInner","LoadingCover","renderTabContent","Tabs","icon","Tab","CopyableText","tooltipOpen","setTooltipOpen","onCopyText","selection","range","timeoutId","Tooltip","PoseCartesianValues","showCopyButton","copyMessage","setCopyMessage","poseString","handleCopy","PoseJointValues","joints","j"],"mappings":"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ACA,EACA,EACA,CACA,EACD,YAAa,CACZ,SAAU,CACT,kBACA,mBACA,iBACA,EACD,YAAa,CACZ,kBACA,kBACA,kBACT,CACQ,EACD,IAAK,SACL,SAAU,CACT,SAAU,CACT,kBACA,mBACA,iBACA,EACD,YAAa,CACZ,kBACA,kBACA,kBACT,CACQ,EACD,QAAS,GACT,kBAAmB,GACnB,WAAY,EACZ,CAAA,CACD,CACN,CACI,EACD,CACC,OAAQ,MACR,KAAM,oFACN,QAAS,CACR,MAAO,CACN,mBAAoB,uBACpB,SAAU,CACT,SAAU,CACT,EACA,EACA,CACA,EACD,YAAa,CACZ,EACA,EACA,CACR,CACO,EACD,KAAM,CAAE,OAAQ,CACf,KAAM,iBACN,KAAM,CACL,SAAU,CACT,EACA,EACA,CACA,EACD,YAAa,CACZ,EACA,EACA,CACT,CACA,CACA,CAAS,EACH,SAAU,CAAE,SAAU,CACrB,KAAM,SACN,QAAS,EACT,eAAgB,CACf,EACA,EACA,CACA,EACD,kBAAmB,CAClB,EACA,EACA,CACR,CACA,CAAS,EACH,WAAY,EACZ,cAAe,CACd,CACC,MAAO,mBACP,EAAG,MACH,EACD,CAAE,EAAG,IAAM,EACX,CAAE,EAAG,MAAQ,EACb,CACC,MAAO,mBACP,EAAG,KACH,EACD,CACC,MAAO,oBACP,EAAG,IACH,EACD,CAAE,EAAG,IAAI,CACT,EACD,iBAAkB,CACjB,YAAa,CACZ,OAAQ,CACP,CACC,SAAU,CACT,YAAa,mBACb,YAAa,iBACb,EACD,SAAU,iBACV,aAAc,GACd,OAAQ,GACR,EACD,CACC,SAAU,CACT,YAAa,mBACb,YAAa,iBACb,EACD,SAAU,iBACV,aAAc,GACd,OAAQ,GACR,EACD,CACC,SAAU,CACT,YAAa,mBACb,YAAa,iBACb,EACD,SAAU,iBACV,aAAc,GACd,OAAQ,GACR,EACD,CACC,SAAU,CACT,YAAa,mBACb,YAAa,iBACb,EACD,SAAU,iBACV,aAAc,GACd,OAAQ,EACR,EACD,CACC,SAAU,CACT,YAAa,mBACb,YAAa,iBACb,EACD,SAAU,iBACV,aAAc,GACd,OAAQ,EACR,EACD,CACC,SAAU,CACT,YAAa,mBACb,YAAa,iBACb,EACD,SAAU,iBACV,aAAc,GACd,OAAQ,EAClB,CACS,EACD,IAAK,CAAE,SAAU,GAAK,EACtB,MAAO,CAAE,SAAU,GAAK,EACxB,OAAQ,CAAE,SAAU,GAAG,CACvB,EACD,cAAe,CACd,OAAQ,CACP,CACC,SAAU,CACT,YAAa,mBACb,YAAa,iBACb,EACD,SAAU,iBACV,aAAc,GACd,OAAQ,GACR,EACD,CACC,SAAU,CACT,YAAa,mBACb,YAAa,iBACb,EACD,SAAU,iBACV,aAAc,GACd,OAAQ,GACR,EACD,CACC,SAAU,CACT,YAAa,mBACb,YAAa,iBACb,EACD,SAAU,iBACV,aAAc,GACd,OAAQ,GACR,EACD,CACC,SAAU,CACT,YAAa,mBACb,YAAa,iBACb,EACD,SAAU,iBACV,aAAc,GACd,OAAQ,EACR,EACD,CACC,SAAU,CACT,YAAa,mBACb,YAAa,iBACb,EACD,SAAU,iBACV,aAAc,GACd,OAAQ,EACR,EACD,CACC,SAAU,CACT,YAAa,mBACb,YAAa,iBACb,EACD,SAAU,iBACV,aAAc,GACd,OAAQ,EAClB,CACS,EACD,IAAK,CAAE,SAAU,GAAG,CACpB,EACD,iBAAkB,CACjB,OAAQ,CACP,CACC,SAAU,CACT,YAAa,mBACb,YAAa,iBACb,EACD,SAAU,iBACV,aAAc,GACd,OAAQ,GACR,EACD,CACC,SAAU,CACT,YAAa,mBACb,YAAa,iBACb,EACD,SAAU,iBACV,aAAc,GACd,OAAQ,GACR,EACD,CACC,SAAU,CACT,YAAa,mBACb,YAAa,iBACb,EACD,SAAU,iBACV,aAAc,GACd,OAAQ,GACR,EACD,CACC,SAAU,CACT,YAAa,mBACb,YAAa,iBACb,EACD,SAAU,iBACV,aAAc,GACd,OAAQ,EACR,EACD,CACC,SAAU,CACT,YAAa,mBACb,YAAa,iBACb,EACD,SAAU,iBACV,aAAc,GACd,OAAQ,EACR,EACD,CACC,SAAU,CACT,YAAa,mBACb,YAAa,iBACb,EACD,SAAU,iBACV,aAAc,GACd,OAAQ,EAClB,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","x_google_ignoreList":[0,1,2,3,7,8,9,10,11,12,13,14,15,16,18,19,20,21,22,23,24,25,26,27,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,153]}