@wandelbots/wandelbots-js-react-components 3.2.0-pr.feat-improve-exports.414.40b4b4e → 3.2.0-pr.feat-improve-exports.414.80936cd
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.
- package/README.md +37 -59
- package/dist/3d.cjs.js +1 -1
- package/dist/3d.es.js +1 -1
- package/dist/LoadingCover-CbvPNfkO.cjs +2 -0
- package/dist/LoadingCover-CbvPNfkO.cjs.map +1 -0
- package/dist/LoadingCover-DkXwZXg8.js +87 -0
- package/dist/LoadingCover-DkXwZXg8.js.map +1 -0
- package/dist/WandelscriptEditor-DepOICD0.cjs +2 -0
- package/dist/WandelscriptEditor-DepOICD0.cjs.map +1 -0
- package/dist/WandelscriptEditor-DomKLwOz.js +140 -0
- package/dist/WandelscriptEditor-DomKLwOz.js.map +1 -0
- package/dist/core.cjs.js +1 -1
- package/dist/core.d.ts +11 -1
- package/dist/core.d.ts.map +1 -1
- package/dist/core.es.js +49 -41
- package/dist/core.es.js.map +1 -1
- package/dist/index-BHtHALJk.cjs +2 -0
- package/dist/index-BHtHALJk.cjs.map +1 -0
- package/dist/index-BSgNMmxG.js +2263 -0
- package/dist/index-BSgNMmxG.js.map +1 -0
- package/dist/index-DS_xdVel.cjs +29 -0
- package/dist/index-DS_xdVel.cjs.map +1 -0
- package/dist/{index-DZubFUuo.js → index-obAnXT9_.js} +2143 -1719
- package/dist/index-obAnXT9_.js.map +1 -0
- package/dist/index.cjs.js +1 -1
- package/dist/index.d.ts +3 -43
- package/dist/index.d.ts.map +1 -1
- package/dist/index.es.js +55 -58
- package/dist/index.es.js.map +1 -1
- package/dist/lib/JoggerConnection.d.ts +1 -1
- package/dist/lib/JoggerConnection.d.ts.map +1 -1
- package/dist/lib/MotionStreamConnection.d.ts +1 -1
- package/dist/lib/MotionStreamConnection.d.ts.map +1 -1
- package/dist/{manufacturerHomePositions-DHqcbFON.js → manufacturerHomePositions-4m2Kt5Pk.js} +17 -20
- package/dist/{manufacturerHomePositions-DHqcbFON.js.map → manufacturerHomePositions-4m2Kt5Pk.js.map} +1 -1
- package/dist/manufacturerHomePositions-AGIQC0U_.cjs +2 -0
- package/dist/{manufacturerHomePositions-zd-CKEiQ.cjs.map → manufacturerHomePositions-AGIQC0U_.cjs.map} +1 -1
- package/dist/theming-CO0a0eRg.js +21801 -0
- package/dist/theming-CO0a0eRg.js.map +1 -0
- package/dist/theming-ZJr8jTwS.cjs +128 -0
- package/dist/theming-ZJr8jTwS.cjs.map +1 -0
- package/dist/wandelscript.cjs.js +2 -0
- package/dist/wandelscript.cjs.js.map +1 -0
- package/dist/wandelscript.d.ts +2 -0
- package/dist/wandelscript.d.ts.map +1 -0
- package/dist/wandelscript.es.js +5 -0
- package/dist/wandelscript.es.js.map +1 -0
- package/package.json +21 -14
- package/src/components/AppHeader.md +1 -1
- package/src/core.ts +11 -1
- package/src/index.ts +4 -47
- package/src/lib/JoggerConnection.ts +1 -1
- package/src/lib/MotionStreamConnection.ts +4 -1
- package/src/wandelscript.ts +2 -0
- package/dist/PoseJointValues-C3bsJdfd.js +0 -5446
- package/dist/PoseJointValues-C3bsJdfd.js.map +0 -1
- package/dist/PoseJointValues-wLOjcYDe.cjs +0 -21
- package/dist/PoseJointValues-wLOjcYDe.cjs.map +0 -1
- package/dist/ProgramStateIndicator-CTT-CAcJ.js +0 -268
- package/dist/ProgramStateIndicator-CTT-CAcJ.js.map +0 -1
- package/dist/ProgramStateIndicator-DYKBcj1s.cjs +0 -2
- package/dist/ProgramStateIndicator-DYKBcj1s.cjs.map +0 -1
- package/dist/VelocitySlider-2Zme2MN7.cjs +0 -5
- package/dist/VelocitySlider-2Zme2MN7.cjs.map +0 -1
- package/dist/VelocitySlider-QSg_8eb1.js +0 -1906
- package/dist/VelocitySlider-QSg_8eb1.js.map +0 -1
- package/dist/createSvgIcon-BG4_bQuX.cjs +0 -56
- package/dist/createSvgIcon-BG4_bQuX.cjs.map +0 -1
- package/dist/createSvgIcon-D3GRPlVu.js +0 -3072
- package/dist/createSvgIcon-D3GRPlVu.js.map +0 -1
- package/dist/data.cjs.js +0 -2
- package/dist/data.cjs.js.map +0 -1
- package/dist/data.d.ts +0 -4
- package/dist/data.d.ts.map +0 -1
- package/dist/data.es.js +0 -7
- package/dist/data.es.js.map +0 -1
- package/dist/externalizeComponent-C12Qf79R.cjs +0 -24
- package/dist/externalizeComponent-C12Qf79R.cjs.map +0 -1
- package/dist/externalizeComponent-RpcZ_G17.js +0 -491
- package/dist/externalizeComponent-RpcZ_G17.js.map +0 -1
- package/dist/index-8UEqiXug.cjs +0 -7
- package/dist/index-8UEqiXug.cjs.map +0 -1
- package/dist/index-CQDi5W62.cjs +0 -2
- package/dist/index-CQDi5W62.cjs.map +0 -1
- package/dist/index-DSz82V23.js +0 -1801
- package/dist/index-DSz82V23.js.map +0 -1
- package/dist/index-DZubFUuo.js.map +0 -1
- package/dist/index-MyU3fVEK.cjs +0 -50
- package/dist/index-MyU3fVEK.cjs.map +0 -1
- package/dist/index-VURe0U2S.js +0 -9443
- package/dist/index-VURe0U2S.js.map +0 -1
- package/dist/interpolation-CVSmVNjc.cjs +0 -2
- package/dist/interpolation-CVSmVNjc.cjs.map +0 -1
- package/dist/interpolation-DjBX_Si-.js +0 -138
- package/dist/interpolation-DjBX_Si-.js.map +0 -1
- package/dist/jogging.cjs.js +0 -2
- package/dist/jogging.cjs.js.map +0 -1
- package/dist/jogging.d.ts +0 -9
- package/dist/jogging.d.ts.map +0 -1
- package/dist/jogging.es.js +0 -12
- package/dist/jogging.es.js.map +0 -1
- package/dist/manufacturerHomePositions-zd-CKEiQ.cjs +0 -2
- package/dist/theming-BO8z_Hpa.js +0 -2198
- package/dist/theming-BO8z_Hpa.js.map +0 -1
- package/dist/theming-D5DvGuxX.cjs +0 -4
- package/dist/theming-D5DvGuxX.cjs.map +0 -1
- package/dist/useThemeProps-P648Ox74.cjs +0 -2
- package/dist/useThemeProps-P648Ox74.cjs.map +0 -1
- package/dist/useThemeProps-jE_Qg6SI.js +0 -40
- package/dist/useThemeProps-jE_Qg6SI.js.map +0 -1
- package/src/data.ts +0 -4
- package/src/jogging.ts +0 -9
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"theming-BO8z_Hpa.js","sources":["../src/icons/DropdownArrowIcon.tsx","../src/components/AppHeader.tsx","../src/components/LogStore.ts","../src/components/LogViewer.tsx","../src/components/LogPanel.tsx","../src/components/modal/NoMotionGroupModal.tsx","../node_modules/@mui/icons-material/esm/Error.js","../src/icons/robot.svg","../src/components/RobotSetupReadinessIndicator.tsx","../src/components/RobotListItem.tsx","../src/components/safetyBar/icons/controller-type-physical.svg","../src/components/safetyBar/icons/controller-type-virtual.svg","../src/components/safetyBar/IndicatorWithExplanation.tsx","../src/components/safetyBar/ControllerTypeIndicator.tsx","../src/components/safetyBar/icons/operation-mode-automatic.svg","../src/components/safetyBar/icons/operation-mode-error.svg","../src/components/safetyBar/icons/operation-mode-manual.svg","../src/components/safetyBar/OperationModeIndicator.tsx","../src/components/safetyBar/icons/safety-state-error.svg","../src/components/safetyBar/icons/safety-state-estop.svg","../src/components/safetyBar/icons/safety-state-manual-action-required.svg","../src/components/safetyBar/icons/safety-state-normal.svg","../src/components/safetyBar/icons/safety-state-stop.svg","../src/components/safetyBar/SafetyStateIndicator.tsx","../src/components/safetyBar/SafetyBar.tsx","../src/components/SelectableFab.tsx","../src/components/TabBar.tsx","../src/components/wandelscript-editor/wandelscript.tmLanguage.ts","../src/components/wandelscript-editor/WandelscriptEditor.tsx","../src/lib/ConnectedMotionGroup.ts","../src/themes/createDarkTheme.ts","../src/themes/createLightTheme.ts","../src/themes/theming.ts"],"sourcesContent":["import { SvgIcon, type SvgIconProps } from \"@mui/material\"\n\nexport const DropdownArrowIcon = (props: SvgIconProps) => {\n return (\n <SvgIcon {...props} viewBox=\"0 0 10 8\">\n <path\n d=\"M8.825 0.9125L5 4.72917L1.175 0.9125L0 2.0875L5 7.0875L10 2.0875L8.825 0.9125Z\"\n fill=\"currentColor\"\n fillOpacity=\"0.56\"\n />\n </SvgIcon>\n )\n}\n","import {\n alpha,\n AppBar,\n Backdrop,\n Box,\n IconButton,\n Menu,\n MenuItem,\n type SxProps,\n Toolbar,\n Typography,\n} from \"@mui/material\"\nimport { observer } from \"mobx-react-lite\"\nimport { type MouseEvent, type ReactNode, useState } from \"react\"\nimport { externalizeComponent } from \"../externalizeComponent\"\nimport { DropdownArrowIcon } from \"../icons/DropdownArrowIcon\"\n\nexport type AppItem = {\n /** Unique identifier for the app */\n id: string\n /** Display name of the app */\n name: string\n /** Icon component to display */\n icon: ReactNode\n /** URL or callback to navigate to the app */\n href?: string\n /** Click handler for the app */\n onClick?: () => void\n}\n\nexport type AppHeaderProps = {\n /** Current app icon */\n appIcon: ReactNode\n /** Current app name */\n appName: string\n /** List of other available apps */\n apps?: AppItem[]\n /** Callback when an app is selected */\n onAppSelect?: (app: AppItem) => void\n /** Disable the menu button */\n disabled?: boolean\n /** Additional styling */\n sx?: SxProps\n}\n\n/**\n * A top navigation header component that displays the current app and provides\n * a dropdown menu to navigate to other apps.\n */\nexport const AppHeader = externalizeComponent(\n observer((props: AppHeaderProps) => {\n const {\n appIcon,\n appName,\n apps = [],\n onAppSelect,\n disabled = false,\n sx,\n } = props\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null)\n const isMenuOpen = Boolean(anchorEl)\n\n const handleMenuOpen = (event: MouseEvent<HTMLElement>) => {\n setAnchorEl(event.currentTarget)\n }\n\n const handleMenuClose = () => {\n setAnchorEl(null)\n }\n\n const handleAppSelect = (app: AppItem) => {\n handleMenuClose()\n\n if (app.onClick) {\n app.onClick()\n } else if (app.href) {\n window.location.href = app.href\n }\n\n onAppSelect?.(app)\n }\n\n return (\n <>\n <AppBar\n position=\"static\"\n sx={{\n boxShadow: \"none\",\n backgroundImage: \"none\",\n \"& .MuiAppBar-root\": {\n backgroundImage: \"none\",\n backgroundColor: \"transparent\",\n },\n ...sx,\n }}\n >\n <Toolbar sx={{ minHeight: \"62px !important\" }}>\n {/* App Icon */}\n <Box sx={{ mr: 1, display: \"flex\", alignItems: \"center\" }}>\n {appIcon}\n </Box>\n\n {/* App Name and Dropdown */}\n <Box sx={{ display: \"flex\", alignItems: \"center\", flexGrow: 1 }}>\n <Typography\n component=\"h1\"\n sx={{\n fontWeight: \"bold\",\n fontSize: \"1rem\",\n }}\n >\n {appName}\n </Typography>\n\n {/* Dropdown Button */}\n {apps.length > 0 && (\n <IconButton\n color=\"inherit\"\n aria-label=\"switch app\"\n aria-controls=\"app-menu\"\n aria-haspopup=\"true\"\n onClick={handleMenuOpen}\n disabled={disabled}\n sx={{\n ml: 1,\n width: 28,\n height: 28,\n borderRadius: \"6px\",\n padding: 0,\n backgroundColor: (theme) =>\n alpha(theme.palette.common.white, 0.1),\n opacity: 1,\n \"&:hover\": {\n backgroundColor: (theme) =>\n alpha(theme.palette.common.white, 0.16),\n },\n \"& .MuiSvgIcon-root\": {\n fontSize: \"8px\",\n width: \"8px\",\n height: \"6px\",\n },\n }}\n >\n <DropdownArrowIcon />\n </IconButton>\n )}\n </Box>\n </Toolbar>\n </AppBar>\n\n {/* Backdrop for blur effect */}\n <Backdrop\n open={isMenuOpen}\n onClick={handleMenuClose}\n sx={{\n backdropFilter: \"blur(4px)\",\n backgroundColor: \"rgba(0, 0, 0, 0.3)\",\n zIndex: (theme) => theme.zIndex.modal - 1,\n }}\n />\n\n {/* Dropdown Menu */}\n <Menu\n id=\"app-menu\"\n anchorEl={anchorEl}\n open={isMenuOpen}\n onClose={handleMenuClose}\n anchorOrigin={{\n vertical: \"bottom\",\n horizontal: \"left\",\n }}\n transformOrigin={{\n vertical: \"top\",\n horizontal: \"left\",\n }}\n sx={{\n zIndex: (theme) => theme.zIndex.modal,\n \"& .MuiPaper-root\": {\n minWidth: 200,\n mt: 1,\n },\n }}\n >\n {apps.map((app) => (\n <MenuItem key={app.id} onClick={() => handleAppSelect(app)}>\n <Box sx={{ display: \"flex\", alignItems: \"center\" }}>\n {app.icon}\n </Box>\n <Typography variant=\"body1\" sx={{ ml: 2 }}>\n {app.name}\n </Typography>\n </MenuItem>\n ))}\n </Menu>\n </>\n )\n }),\n)\n","import { action, makeObservable, observable } from \"mobx\"\nimport type { LogLevel, LogMessage } from \"./LogViewer\"\n\nexport class LogStore {\n messages: LogMessage[] = []\n\n constructor() {\n makeObservable(this, {\n messages: observable,\n addMessage: action,\n clearMessages: action,\n })\n }\n\n addMessage = (message: string, level: LogLevel = \"info\") => {\n const logMessage: LogMessage = {\n id: Math.random().toString(36).substring(2, 11),\n timestamp: new Date(),\n message,\n level,\n }\n this.messages.push(logMessage)\n }\n\n clearMessages = () => {\n this.messages = []\n }\n\n addInfo = (message: string) => {\n this.addMessage(message, \"info\")\n }\n\n addWarning = (message: string) => {\n this.addMessage(message, \"warning\")\n }\n\n addError = (message: string) => {\n this.addMessage(message, \"error\")\n }\n\n addDebug = (message: string) => {\n this.addMessage(message, \"debug\")\n }\n}\n","import {\n ContentCopy,\n DescriptionOutlined as DocumentIcon,\n ExpandLess,\n ExpandMore,\n} from \"@mui/icons-material\"\nimport type { SxProps } from \"@mui/material\"\nimport {\n Box,\n Button,\n IconButton,\n Paper,\n Typography,\n useTheme,\n} from \"@mui/material\"\nimport { observer } from \"mobx-react-lite\"\nimport { useEffect, useRef, useState } from \"react\"\nimport { externalizeComponent } from \"../externalizeComponent\"\n\nexport type LogLevel = \"info\" | \"error\" | \"warning\" | \"debug\"\n\nexport type LogMessage = {\n id: string\n timestamp: Date\n message: string\n level: LogLevel\n}\n\nexport type LogViewerProps = {\n /** Log messages to display */\n messages: LogMessage[]\n /** Callback when clear button is clicked */\n onClear?: () => void\n /** Height of the component */\n height?: string | number\n /** Additional styles */\n sx?: SxProps\n}\n\n/**\n * Utility function to create a log message\n */\nexport const createLogMessage = (\n message: string,\n level: LogLevel,\n id?: string,\n): LogMessage => ({\n id: id || `${Date.now()}-${Math.random().toString(36).substring(2, 11)}`,\n timestamp: new Date(),\n message,\n level,\n})\n\n/**\n * Utility function to create a debug log message\n */\nexport const createDebugMessage = (message: string, id?: string): LogMessage =>\n createLogMessage(message, \"debug\", id)\n\n/**\n * Utility function to create an info log message\n */\nexport const createInfoMessage = (message: string, id?: string): LogMessage =>\n createLogMessage(message, \"info\", id)\n\n/**\n * Utility function to create a warning log message\n */\nexport const createWarningMessage = (\n message: string,\n id?: string,\n): LogMessage => createLogMessage(message, \"warning\", id)\n\n/**\n * Utility function to create an error log message\n */\nexport const createErrorMessage = (message: string, id?: string): LogMessage =>\n createLogMessage(message, \"error\", id)\n\n/**\n * A log viewer component that displays timestamped log messages with different levels.\n * Features a header with document icon and clear button, and scrollable message area.\n */\nexport const LogViewer = externalizeComponent(\n observer((props: LogViewerProps) => {\n const { messages = [], onClear, height = 400, sx } = props\n const theme = useTheme()\n const scrollContainerRef = useRef<HTMLDivElement>(null)\n\n // Auto-scroll to bottom when new messages are added\n useEffect(() => {\n if (messages.length === 0) return\n\n const scrollContainer = scrollContainerRef.current\n if (!scrollContainer) return\n\n // Use a timeout to scroll after the DOM updates\n const timeoutId = setTimeout(() => {\n // Scroll the container to the bottom, not the entire browser\n scrollContainer.scrollTop = scrollContainer.scrollHeight\n }, 10)\n\n return () => clearTimeout(timeoutId)\n }, [messages.length])\n\n const formatTimestamp = (timestamp: Date) => {\n return timestamp.toLocaleTimeString(\"en-US\", {\n hour12: false,\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n })\n }\n\n const getMessageColor = (level: LogLevel) => {\n switch (level) {\n case \"error\":\n return theme.palette.error.main\n case \"warning\":\n return theme.palette.warning.main\n case \"info\":\n return theme.palette.info.main\n case \"debug\":\n return theme.palette.text.disabled\n default:\n return theme.palette.text.secondary\n }\n }\n\n // Component for individual log messages with expand/copy functionality\n const LogMessage = ({ message }: { message: LogMessage }) => {\n const [isExpanded, setIsExpanded] = useState(false)\n const [copyTooltip, setCopyTooltip] = useState(false)\n const [isHovered, setIsHovered] = useState(false)\n const isLongMessage = message.message.length > 150\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(message.message)\n setCopyTooltip(true)\n setTimeout(() => setCopyTooltip(false), 2000)\n } catch (err) {\n console.error(\"Failed to copy message:\", err)\n }\n }\n\n const displayMessage =\n isLongMessage && !isExpanded\n ? message.message.substring(0, 150) + \"...\"\n : message.message\n\n return (\n <Box\n key={message.id}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n sx={{\n display: \"flex\",\n gap: 1,\n fontFamily: \"monospace\",\n flexDirection: \"column\",\n \"&:hover\": {\n backgroundColor: theme.palette.action.hover,\n },\n borderRadius: \"4px\",\n padding: \"2px 4px\",\n margin: \"-2px -4px\",\n }}\n >\n <Box sx={{ display: \"flex\", gap: 1 }}>\n {/* Timestamp */}\n <Typography\n component=\"span\"\n sx={{\n fontWeight: 400,\n fontSize: \"12px\",\n lineHeight: \"18px\",\n letterSpacing: \"0.4px\",\n color: theme.palette.text.disabled,\n whiteSpace: \"nowrap\",\n flexShrink: 0,\n }}\n >\n [{formatTimestamp(message.timestamp)}]\n </Typography>\n\n {/* Message */}\n <Typography\n component=\"span\"\n sx={{\n fontWeight: 400,\n fontSize: \"12px\",\n lineHeight: \"18px\",\n letterSpacing: \"0.4px\",\n color: getMessageColor(message.level),\n wordBreak: \"break-word\",\n overflowWrap: \"anywhere\",\n hyphens: \"auto\",\n flex: 1,\n whiteSpace: \"pre-wrap\",\n }}\n >\n {displayMessage}\n </Typography>\n\n {/* Action buttons - only visible on hover */}\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"flex-start\",\n gap: 0.5,\n opacity: isHovered ? 1 : 0,\n transition: \"opacity 0.2s ease-in-out\",\n visibility: isHovered ? \"visible\" : \"hidden\",\n }}\n >\n <IconButton\n size=\"small\"\n onClick={handleCopy}\n sx={{\n padding: \"2px\",\n color: theme.palette.text.secondary,\n \"&:hover\": {\n backgroundColor: theme.palette.action.hover,\n },\n }}\n title={copyTooltip ? \"Copied!\" : \"Copy message\"}\n >\n <ContentCopy sx={{ fontSize: 12 }} />\n </IconButton>\n\n {isLongMessage && (\n <IconButton\n size=\"small\"\n onClick={() => setIsExpanded(!isExpanded)}\n sx={{\n padding: \"2px\",\n color: theme.palette.text.secondary,\n \"&:hover\": {\n backgroundColor: theme.palette.action.hover,\n },\n }}\n title={isExpanded ? \"Collapse\" : \"Expand\"}\n >\n {isExpanded ? (\n <ExpandLess sx={{ fontSize: 12 }} />\n ) : (\n <ExpandMore sx={{ fontSize: 12 }} />\n )}\n </IconButton>\n )}\n </Box>\n </Box>\n </Box>\n )\n }\n\n return (\n <Paper\n sx={{\n backgroundColor:\n theme.palette.backgroundPaperElevation?.[2] || \"#171927\",\n backgroundImage: \"none\", // Override any gradient from elevation\n height,\n display: \"flex\",\n flexDirection: \"column\",\n overflow: \"hidden\",\n ...sx,\n }}\n >\n {/* Header */}\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: \"12px 16px\",\n }}\n >\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\n <DocumentIcon\n sx={{\n fontSize: 16,\n color: theme.palette.action.active,\n opacity: 0.56,\n }}\n />\n <Typography\n sx={{\n fontWeight: 500,\n fontSize: \"14px\",\n lineHeight: \"143%\",\n letterSpacing: \"0.17px\",\n color: theme.palette.text.primary,\n }}\n >\n Log\n </Typography>\n </Box>\n <Button\n onClick={onClear}\n variant=\"text\"\n sx={{\n fontWeight: 500,\n fontSize: \"13px\",\n lineHeight: \"22px\",\n letterSpacing: \"0.46px\",\n color: theme.palette.primary.main,\n textTransform: \"none\",\n minWidth: \"auto\",\n padding: \"4px 8px\",\n \"&:hover\": {\n backgroundColor: theme.palette.primary.main + \"14\", // 8% opacity\n },\n }}\n >\n Clear\n </Button>\n </Box>\n\n {/* Messages Container */}\n <Box\n ref={scrollContainerRef}\n sx={{\n flex: 1,\n overflow: \"auto\",\n padding: \"8px 16px\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"2px\",\n // Custom scrollbar styling to keep it consistently dark\n scrollbarWidth: \"thin\",\n scrollbarColor: `${theme.palette.divider} transparent`,\n \"&::-webkit-scrollbar\": {\n width: \"6px\",\n },\n \"&::-webkit-scrollbar-track\": {\n background: \"transparent\",\n },\n \"&::-webkit-scrollbar-thumb\": {\n backgroundColor: theme.palette.divider,\n borderRadius: \"3px\",\n \"&:hover\": {\n backgroundColor: theme.palette.divider,\n },\n },\n }}\n >\n {messages.length === 0 ? (\n <Typography\n sx={{\n color: theme.palette.text.disabled,\n fontSize: \"12px\",\n fontStyle: \"italic\",\n textAlign: \"center\",\n marginTop: 2,\n }}\n >\n No log messages\n </Typography>\n ) : (\n messages.map((message) => (\n <LogMessage key={message.id} message={message} />\n ))\n )}\n </Box>\n </Paper>\n )\n }),\n)\n","import type { SxProps } from \"@mui/material\"\nimport { observer } from \"mobx-react-lite\"\nimport { useEffect, useMemo, useRef } from \"react\"\nimport { externalizeComponent } from \"../externalizeComponent\"\nimport { LogStore } from \"./LogStore\"\nimport { LogViewer } from \"./LogViewer\"\n\nexport type LogPanelProps = {\n /** Log store instance to use, or create one automatically if not provided */\n store?: LogStore\n /** Height of the component */\n height?: string | number\n /** Additional styles */\n sx?: SxProps\n /** Ref to the log store for external access */\n onStoreReady?: (store: LogStore) => void\n}\n\n/**\n * A complete log panel component with built-in state management.\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const [logStore, setLogStore] = useState<LogStore>()\n *\n * return (\n * <LogPanel\n * height={400}\n * onStoreReady={setLogStore}\n * />\n * )\n * }\n *\n * // Then use the store to add messages\n * logStore?.addInfo(\"Operation completed successfully\")\n * logStore?.addError(\"Something went wrong\")\n * logStore?.addWarning(\"Warning message\")\n * ```\n */\nexport const LogPanel = externalizeComponent(\n observer((props: LogPanelProps) => {\n const { store: externalStore, onStoreReady, ...logViewerProps } = props\n const onStoreReadyRef = useRef(onStoreReady)\n\n // Update ref when callback changes\n useEffect(() => {\n onStoreReadyRef.current = onStoreReady\n }, [onStoreReady])\n\n const store = useMemo(() => {\n const logStore = externalStore || new LogStore()\n onStoreReadyRef.current?.(logStore)\n return logStore\n }, [externalStore])\n\n const handleClear = () => {\n store.clearMessages()\n }\n\n return (\n <LogViewer\n {...logViewerProps}\n messages={store.messages}\n onClear={handleClear}\n />\n )\n }),\n)\n","import {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Stack,\n Typography,\n} from \"@mui/material\"\n\nfunction getBaseUrl(): string {\n const currentUrl = window.location.href\n return currentUrl.substring(\n 0,\n currentUrl.indexOf(\"/\", currentUrl.indexOf(\"//\") + 2),\n )\n}\n\nexport type NoMotionGroupModalProps = {\n baseUrl: string\n}\n\nexport function NoMotionGroupModal({\n baseUrl = getBaseUrl(),\n ...props\n}: NoMotionGroupModalProps) {\n return (\n <Dialog\n aria-labelledby=\"no-motion-group-modal-title\"\n open={true}\n fullWidth\n sx={{\n \"& .MuiModal-backdrop\": {\n backdropFilter: \"blur(10px)\",\n },\n \"& .MuiDialog-paper\": {\n \"::before\": {\n content: '\"\"',\n height: \"8px\",\n width: \"100%\",\n background: \"linear-gradient(90deg, #FF0E65 0%, #47D3FF 100%)\",\n },\n background: \"#101629\",\n },\n }}\n >\n <DialogTitle id=\"no-motion-group-modal-title\">\n No motion group found\n </DialogTitle>\n\n <DialogContent\n sx={{\n marginTop: \"3rem\",\n marginBottom: \"1.5rem\",\n textAlign: \"center\",\n }}\n >\n <Typography color=\"#fff\">Found no devices to connect to.</Typography>\n <Typography color=\"#fff\">\n Please ensure a motion group has been created.\n </Typography>\n </DialogContent>\n\n <DialogActions>\n <Stack width=\"100%\" maxWidth=\"300px\" margin=\"auto\" marginBottom=\"2rem\">\n <Button\n href={`${baseUrl}/settings`}\n variant=\"contained\"\n sx={{\n borderRadius: \"8px\",\n width: \"100%\",\n }}\n >\n Go to settings app\n </Button>\n <Button\n href={`${baseUrl}`}\n variant=\"text\"\n sx={{\n marginTop: \"1rem\",\n color: \"#fff\",\n textDecoration: \"underline\",\n fontSize: \"0.75rem\",\n }}\n >\n Back to Homescreen\n </Button>\n </Stack>\n </DialogActions>\n </Dialog>\n )\n}\n","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m1 15h-2v-2h2zm0-4h-2V7h2z\"\n}), 'Error');","import * as React from \"react\";\nimport { forwardRef } from \"react\";\nconst SvgRobot = ({\n title,\n titleId,\n ...props\n}, ref) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 18, height: 18, fill: \"none\", ref, \"aria-labelledby\": titleId, ...props }, title ? /* @__PURE__ */ React.createElement(\"title\", { id: titleId }, title) : null, /* @__PURE__ */ React.createElement(\"path\", { fill: \"#38C6F4\", fillRule: \"evenodd\", d: \"M6.359 14.25v2.934h7.63v-3.521L10.196 9.87 9 8.674l.859-.859.337-.337.858-.858.565.565.631.63.565.565 1.196-1.195.543-.544 1.196-1.195-1.196-1.196-2.304-2.304L11.054.75 9.86 1.946 3.446 8.359 2.25 9.554l1.196 1.196 2.913 2.913zm1.69 0v1.244h4.249v-1.13L7.804 9.87 6.608 8.674l1.196-1.196L9.86 5.424l.007-.008-.543-.543-4.681 4.681 2.912 2.913.496.496v.113h2.124l1.174 1.174zm3.005-10.022-.294.294-.543-.543.837-.837 2.304 2.304-.543.543-.565-.565z\", clipRule: \"evenodd\" }));\nconst ForwardRef = forwardRef(SvgRobot);\nexport default ForwardRef;\n","import { Box, Chip, Typography, useTheme } from \"@mui/material\"\nimport { observer } from \"mobx-react-lite\"\nimport { useTranslation } from \"react-i18next\"\nimport { externalizeComponent } from \"../externalizeComponent\"\n\n/**\n * Enum representing the robot setup readiness state\n */\nexport enum RobotSetupReadinessState {\n /** Preconditions are not fulfilled for robot operation */\n PRECONDITION_NOT_FULFILLED = \"PRECONDITION_NOT_FULFILLED\",\n /** Robot is disconnected from the system */\n ROBOT_DISCONNECTED = \"ROBOT_DISCONNECTED\",\n /** Safety cell is open and robot cannot operate */\n CELL_OPEN = \"CELL_OPEN\",\n /** Emergency stop is active and robot cannot operate */\n E_STOP = \"E_STOP\",\n /** Robot is in manual mode and requires manual intervention */\n MANUAL_MODE = \"MANUAL_MODE\",\n /** Robot is ready for operation */\n READY = \"READY\",\n}\n\nexport interface RobotSetupReadinessIndicatorProps {\n /** The current setup readiness state of the robot */\n setupState: RobotSetupReadinessState\n /** Additional CSS class name */\n className?: string\n}\n\n/**\n * A state indicator component that displays the current robot setup readiness state.\n *\n * Features:\n * - Shows six states: Precondition not fulfilled, Robot disconnected, Cell open, E-Stop, Manual mode, Ready\n * - Color-coded based on state (ready: tertiary/main, others: error/main)\n * - Rendered as Material-UI filled chip with paper-elevation-11 background\n * - Includes colored circle indicator (8px width)\n * - Localization support via react-i18next\n */\nexport const RobotSetupReadinessIndicator = externalizeComponent(\n observer(({ setupState, className }: RobotSetupReadinessIndicatorProps) => {\n const theme = useTheme()\n const { t } = useTranslation()\n\n const getStateInfo = () => {\n switch (setupState) {\n case RobotSetupReadinessState.READY:\n return {\n label: t(\"RobotSetupReadinessIndicator.Ready.lb\"),\n indicatorColor:\n theme.palette.tertiary?.main || theme.palette.primary.main,\n backgroundColor:\n theme.palette.backgroundPaperElevation?.[11] ||\n theme.palette.background.paper,\n textColor: theme.palette.secondary.contrastText,\n }\n case RobotSetupReadinessState.ROBOT_DISCONNECTED:\n return {\n label: t(\"RobotSetupReadinessIndicator.RobotDisconnected.lb\"),\n indicatorColor: theme.palette.error.main,\n backgroundColor:\n theme.palette.backgroundPaperElevation?.[11] ||\n theme.palette.background.paper,\n textColor: theme.palette.secondary.contrastText,\n }\n case RobotSetupReadinessState.CELL_OPEN:\n return {\n label: t(\"RobotSetupReadinessIndicator.CellOpen.lb\"),\n indicatorColor: theme.palette.error.main,\n backgroundColor:\n theme.palette.backgroundPaperElevation?.[11] ||\n theme.palette.background.paper,\n textColor: theme.palette.secondary.contrastText,\n }\n case RobotSetupReadinessState.E_STOP:\n return {\n label: t(\"RobotSetupReadinessIndicator.EStop.lb\"),\n indicatorColor: theme.palette.error.main,\n backgroundColor:\n theme.palette.backgroundPaperElevation?.[11] ||\n theme.palette.background.paper,\n textColor: theme.palette.secondary.contrastText,\n }\n case RobotSetupReadinessState.MANUAL_MODE:\n return {\n label: t(\"RobotSetupReadinessIndicator.ManualMode.lb\"),\n indicatorColor: theme.palette.error.main,\n backgroundColor:\n theme.palette.backgroundPaperElevation?.[11] ||\n theme.palette.background.paper,\n textColor: theme.palette.secondary.contrastText,\n }\n case RobotSetupReadinessState.PRECONDITION_NOT_FULFILLED:\n default:\n return {\n label: t(\n \"RobotSetupReadinessIndicator.PreconditionNotFulfilled.lb\",\n ),\n indicatorColor: theme.palette.error.main,\n backgroundColor:\n theme.palette.backgroundPaperElevation?.[11] ||\n theme.palette.background.paper,\n textColor: theme.palette.secondary.contrastText,\n }\n }\n }\n\n const { label, indicatorColor, backgroundColor, textColor } = getStateInfo()\n\n return (\n <Chip\n className={className}\n label={\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 1,\n }}\n >\n <Box\n sx={{\n width: 8,\n height: 8,\n borderRadius: \"50%\",\n backgroundColor: indicatorColor,\n flexShrink: 0,\n }}\n />\n <Typography\n variant=\"body2\"\n sx={{\n color: textColor,\n fontSize: \"0.75rem\", // Smaller than body2\n lineHeight: 1.2,\n }}\n >\n {label}\n </Typography>\n </Box>\n }\n variant=\"filled\"\n sx={{\n backgroundColor,\n color: theme.palette.getContrastText(backgroundColor),\n fontWeight: 500,\n height: \"auto\",\n \"& .MuiChip-label\": {\n paddingX: 1.5,\n paddingY: 0.5,\n },\n }}\n />\n )\n }),\n)\n","import ErrorIcon from \"@mui/icons-material/Error\"\nimport { Box, Divider, Typography, useTheme } from \"@mui/material\"\nimport { observer } from \"mobx-react-lite\"\nimport type { ComponentType } from \"react\"\nimport { externalizeComponent } from \"../externalizeComponent\"\nimport { RobotIcon } from \"../icons\"\nimport {\n RobotSetupReadinessIndicator,\n RobotSetupReadinessState,\n} from \"./RobotSetupReadinessIndicator\"\n\nexport interface RobotListItemProps {\n /** The name of the robot */\n robotName: string\n /** The type/model of the robot (will try to derive from nova if not provided) */\n robotType?: string\n /** The current setup readiness state of the robot */\n setupState: RobotSetupReadinessState\n /**\n * Component to render for the precondition indicator.\n * Defaults to RobotSetupReadinessIndicator.\n * Pass null or undefined to hide the indicator.\n */\n PreconditionComponent?: ComponentType<{\n setupState: RobotSetupReadinessState\n }> | null\n /** Additional CSS class name */\n className?: string\n}\n\n/**\n * A list item component that displays robot information and setup readiness state.\n *\n * Features:\n * - Shows robot name, type, and customizable precondition component\n * - Color-coded icon based on readiness state (robot icon for ready, warning for issues)\n * - Styled with consistent border, background, and spacing\n * - Responsive layout with proper spacing and alignment\n * - Flexible precondition component that can be customized or hidden\n */\nexport const RobotListItem = externalizeComponent(\n observer(\n ({\n robotName,\n robotType,\n setupState,\n PreconditionComponent = RobotSetupReadinessIndicator,\n className,\n }: RobotListItemProps) => {\n const theme = useTheme()\n\n // Use provided robot type or default\n const displayRobotType = robotType || \"Robot\"\n\n const isReady = setupState === RobotSetupReadinessState.READY\n\n return (\n <Box\n className={className}\n sx={{\n border: `1px solid ${theme.palette.divider}`,\n background:\n theme.palette.backgroundPaperElevation?.[8] || \"#292B3F\",\n borderRadius: \"8px\",\n padding: \"20px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n opacity: 1,\n }}\n >\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 2,\n flex: 1,\n }}\n >\n {/* Robot/Warning Icon */}\n {isReady ? (\n <Box\n sx={{\n fontSize: 24,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: 24,\n height: 24,\n \"& svg\": {\n fill: `${theme.palette.primary.main} !important`,\n },\n \"& svg path\": {\n fill: `${theme.palette.primary.main} !important`,\n },\n }}\n >\n <RobotIcon />\n </Box>\n ) : (\n <ErrorIcon\n sx={{\n color: theme.palette.error.main,\n fontSize: 24,\n }}\n />\n )}\n\n {/* Robot Name */}\n <Typography\n variant=\"body1\"\n sx={{\n fontWeight: 500,\n color: theme.palette.text.primary,\n }}\n >\n {robotName}\n </Typography>\n\n {/* Divider */}\n <Divider\n orientation=\"vertical\"\n flexItem\n sx={{\n backgroundColor: theme.palette.text.secondary,\n opacity: 0.3,\n width: \"1px\",\n }}\n />\n\n {/* Robot Type */}\n <Typography\n variant=\"body2\"\n sx={{\n color: theme.palette.text.secondary,\n }}\n >\n {displayRobotType}\n </Typography>\n </Box>\n\n {/* Setup Readiness Indicator */}\n {PreconditionComponent && (\n <PreconditionComponent setupState={setupState} />\n )}\n </Box>\n )\n },\n ),\n)\n","import * as React from \"react\";\nimport { forwardRef } from \"react\";\nconst SvgControllerTypePhysical = ({\n title,\n titleId,\n ...props\n}, ref) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, xmlns: \"http://www.w3.org/2000/svg\", ref, \"aria-labelledby\": titleId, ...props }, title ? /* @__PURE__ */ React.createElement(\"title\", { id: titleId }, title) : null, /* @__PURE__ */ React.createElement(\"path\", { d: \"M5.248 21c-.334 0-.619-.116-.853-.35a1.153 1.153 0 0 1-.351-.848c0-.333.117-.616.351-.85.234-.233.519-.35.853-.35H7.24L4.558 9.87a2.881 2.881 0 0 1-1.126-1.042A2.77 2.77 0 0 1 3 7.317c0-.793.28-1.467.838-2.023a2.774 2.774 0 0 1 2.033-.834 2.71 2.71 0 0 1 1.728.585c.494.389.832.887 1.014 1.493h3.58V5.239c0-.22.076-.406.226-.555a.76.76 0 0 1 .558-.224c.136 0 .263.035.381.104.118.07.209.167.273.292v.14l1.835-1.702a.979.979 0 0 1 .52-.279.881.881 0 0 1 .58.091l4.01 1.85a.74.74 0 0 1 .36.364.537.537 0 0 1-.002.474.592.592 0 0 1-.366.323.657.657 0 0 1-.477-.039l-3.858-1.774L13.76 6.59v1.454l2.473 2.233 3.858-1.774a.648.648 0 0 1 .485-.03.571.571 0 0 1 .358.314.513.513 0 0 1 .01.482.79.79 0 0 1-.367.357l-4.011 1.882a.881.881 0 0 1-.58.09.979.979 0 0 1-.52-.278L13.63 9.638v.14a.92.92 0 0 1-.273.275.665.665 0 0 1-.381.12.76.76 0 0 1-.558-.224.752.752 0 0 1-.225-.555V8.096h-3.58a2.82 2.82 0 0 1-.215.54 2.552 2.552 0 0 1-.323.479l5.139 9.488h2.673c.335 0 .62.116.854.35.234.233.35.516.35.849 0 .332-.116.615-.35.849a1.167 1.167 0 0 1-.854.349H5.248Zm.623-12.385c.362 0 .67-.126.924-.378a1.25 1.25 0 0 0 .38-.92 1.25 1.25 0 0 0-.38-.92 1.261 1.261 0 0 0-.924-.379 1.26 1.26 0 0 0-.925.379 1.25 1.25 0 0 0-.38.92c0 .36.127.667.38.92.254.252.562.378.925.378Z\" }));\nconst ForwardRef = forwardRef(SvgControllerTypePhysical);\nexport default ForwardRef;\n","import * as React from \"react\";\nimport { forwardRef } from \"react\";\nconst SvgControllerTypeVirtual = ({\n title,\n titleId,\n ...props\n}, ref) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, xmlns: \"http://www.w3.org/2000/svg\", ref, \"aria-labelledby\": titleId, ...props }, title ? /* @__PURE__ */ React.createElement(\"title\", { id: titleId }, title) : null, /* @__PURE__ */ React.createElement(\"path\", { d: \"m13.37 9.12 1.69 1.69 2.99-2.99-3.73-3.73-.95-.95-7.66 7.66-.95.95 3.99 3.99v3.44h7.55v-3.55l-4.72-4.72 1.79-1.79Zm-.91-2.99.91-.91 2.6 2.6-.91.91-2.6-2.6Zm-2.25 10.24h3.74l-1.34-1.34-.04-.04h-2.5l-3.25-3.25 4.59-4.59.92.92L9.5 10.9l5.33 5.33v1.48H10.2v-1.35l.01.01ZM2 2v4.99h1.41V3.4h3.58V2H2ZM22.21 2h-4.98v1.41h3.59v3.58h1.4V2h-.01ZM20.81 20.65h-3.58v1.4h4.98v-4.99h-1.4v3.59ZM3.4 17.06H2v4.98h4.99v-1.4H3.4v-3.58Z\" }));\nconst ForwardRef = forwardRef(SvgControllerTypeVirtual);\nexport default ForwardRef;\n","import {\n Popover,\n Stack,\n SvgIcon,\n Typography,\n type PopoverOrigin,\n type TypographyProps,\n} from \"@mui/material\"\nimport { observer, useLocalObservable } from \"mobx-react-lite\"\nimport type { ElementType, ReactNode } from \"react\"\n\nexport type IndicatorWithExplanationProps = {\n id: string\n icon: ElementType\n color: TypographyProps[\"color\"]\n title?: ReactNode\n name: ReactNode\n label?: ReactNode\n explanation: ReactNode\n literalValue?: string\n anchorOrigin?: PopoverOrigin\n transformOrigin?: PopoverOrigin\n}\n\nexport const IndicatorWithExplanation = observer(\n ({\n id,\n icon,\n color,\n title,\n name,\n label,\n explanation,\n literalValue,\n anchorOrigin,\n transformOrigin,\n }: IndicatorWithExplanationProps) => {\n const state = useLocalObservable(() => ({\n anchorEl: null as HTMLElement | null,\n\n get isPopoverOpen() {\n return !!state.anchorEl\n },\n\n openPopover(event: React.MouseEvent<HTMLElement>) {\n state.anchorEl = event.currentTarget\n },\n\n closePopover() {\n state.anchorEl = null\n },\n }))\n\n return (\n <>\n <Stack\n aria-owns={state.isPopoverOpen ? id : undefined}\n aria-haspopup=\"true\"\n onMouseEnter={state.openPopover}\n onMouseLeave={state.closePopover}\n direction=\"row\"\n spacing={1}\n sx={{\n cursor: \"pointer\",\n }}\n >\n <SvgIcon\n component={icon}\n sx={{\n color,\n }}\n />\n {label && (<div style={{\n color,\n }}>{label}</div>)}\n </Stack>\n <Popover\n id={id}\n sx={{\n pointerEvents: \"none\",\n }}\n open={state.isPopoverOpen}\n anchorEl={state.anchorEl}\n anchorOrigin={\n anchorOrigin ?? {\n vertical: \"bottom\",\n horizontal: \"left\",\n }\n }\n transformOrigin={\n transformOrigin ?? {\n vertical: \"top\",\n horizontal: \"left\",\n }\n }\n onClose={state.closePopover}\n disableRestoreFocus\n >\n <Stack\n gap=\"1rem\"\n padding={2}\n maxWidth=\"450px\"\n sx={{\n wordWrap: \"break-word\",\n }}\n >\n <div>\n {title && (\n <Typography component=\"span\" fontSize=\"14px\">\n {`${title}: `}\n </Typography>\n )}\n <Typography\n component=\"span\"\n color={color}\n fontWeight=\"bold\"\n fontSize=\"14px\"\n >\n {name}\n </Typography>\n </div>\n\n <Typography fontSize=\"14px\">{explanation}</Typography>\n\n {literalValue && (\n <Typography fontSize=\"12px\">{literalValue}</Typography>\n )}\n </Stack>\n </Popover>\n </>\n )\n },\n)\n","import { useTheme, type PopoverOrigin } from \"@mui/material\"\nimport { observer } from \"mobx-react-lite\"\nimport { Trans, useTranslation } from \"react-i18next\"\nimport ControllerTypePhysicalIcon from \"./icons/controller-type-physical.svg\"\nimport ControllerTypeVirtualIcon from \"./icons/controller-type-virtual.svg\"\nimport { IndicatorWithExplanation } from \"./IndicatorWithExplanation\"\n\ninterface ControllerTypeIndicatorProps {\n isVirtual: boolean\n motionGroupId: string\n anchorOrigin?: PopoverOrigin\n transformOrigin?: PopoverOrigin\n compact: boolean\n}\n\nexport const ControllerTypeIndicator = observer(\n ({\n isVirtual,\n motionGroupId,\n anchorOrigin,\n transformOrigin,\n compact,\n }: ControllerTypeIndicatorProps) => {\n const theme = useTheme()\n const { t } = useTranslation()\n\n if (isVirtual) {\n return (\n <IndicatorWithExplanation\n id=\"motion-group-virtual\"\n icon={ControllerTypeVirtualIcon}\n color={theme.palette.tertiary.main}\n name={t(\"SafetyBar.ControllerType.Virtual.lb\")}\n label={compact ? null : t(\"SafetyBar.ControllerType.Virtual.lb\")}\n explanation={\n <Trans\n i18nKey=\"SafetyBar.MotionGroup.Virtual.Explanation.lb\"\n values={{\n motionGroupId,\n }}\n >\n Motion group <code>{motionGroupId}</code> refers to a virtual\n robot with no physical counterpart. It can be freely manipulated\n without special safety precautions.\n </Trans>\n }\n anchorOrigin={anchorOrigin}\n transformOrigin={transformOrigin}\n />\n )\n }\n\n return (\n <IndicatorWithExplanation\n id=\"motion-group-physical\"\n icon={ControllerTypePhysicalIcon}\n color={theme.palette.primary.main}\n name={t(\"SafetyBar.ControllerType.Physical.lb\")}\n label={compact ? null : t(\"SafetyBar.ControllerType.Physical.lb\")}\n explanation={\n <Trans\n i18nKey=\"SafetyBar.MotionGroup.Physical.Explanation.lb\"\n values={{\n motionGroupId,\n }}\n components={{ code: <code />, strong: <strong /> }}\n />\n }\n anchorOrigin={anchorOrigin}\n transformOrigin={transformOrigin}\n />\n )\n },\n)\n","import * as React from \"react\";\nimport { forwardRef } from \"react\";\nconst SvgOperationModeAutomatic = ({\n title,\n titleId,\n ...props\n}, ref) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, xmlns: \"http://www.w3.org/2000/svg\", ref, \"aria-labelledby\": titleId, ...props }, title ? /* @__PURE__ */ React.createElement(\"title\", { id: titleId }, title) : null, /* @__PURE__ */ React.createElement(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M15.306 2.768c0-.424.344-.768.768-.768h.406C19.53 2 22 4.551 22 7.699c0 3.237-2.51 5.587-5.31 5.703-.84 1.595-2.478 2.677-4.36 2.677a4.845 4.845 0 0 1-3.146-1.163c-.6 1.783 0 3.922 1.79 4.99 1.929 1.149 4.395.467 5.508-1.524l.212-.378a.75.75 0 1 1 1.308.732l-.231.414c-1.524 2.725-4.9 3.66-7.54 2.085-2.716-1.618-3.432-5.037-2.129-7.599a5.22 5.22 0 0 1-.73-2.677c0-2.192 1.335-4.063 3.212-4.793-1.195-1.427-3.29-1.96-5.08-.892-1.928 1.15-2.589 3.696-1.475 5.687l.231.413a.75.75 0 0 1-1.308.732l-.212-.377c-1.524-2.726-.62-6.211 2.02-7.785 2.716-1.619 5.943-.55 7.44 1.897l.13-.001c2.739 0 4.96 2.292 4.96 5.12 0 .284-.023.563-.066.834 1.795-.354 3.288-1.96 3.288-4.095 0-2.3-1.805-4.163-4.032-4.163h-.406a.768.768 0 0 1-.768-.768Zm.496 8.191c0 .286-.033.564-.094.831a3.62 3.62 0 0 1-.672 1.415 3.425 3.425 0 0 1-2.706 1.338 3.402 3.402 0 0 1-2.384-.98 3.598 3.598 0 0 1-.852-1.306 3.677 3.677 0 0 1-.235-1.298c0-1.623 1.046-2.994 2.48-3.435a3.37 3.37 0 0 1 1.522-.107c1.665.264 2.94 1.75 2.94 3.542Z\" }));\nconst ForwardRef = forwardRef(SvgOperationModeAutomatic);\nexport default ForwardRef;\n","import * as React from \"react\";\nimport { forwardRef } from \"react\";\nconst SvgOperationModeError = ({\n title,\n titleId,\n ...props\n}, ref) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ref, \"aria-labelledby\": titleId, ...props }, title ? /* @__PURE__ */ React.createElement(\"title\", { id: titleId }, title) : null, /* @__PURE__ */ React.createElement(\"path\", { d: \"M19.763 16.432 13.516 5.864c-.674-1.152-2.358-1.152-3.049 0l-6.23 10.568C3.563 17.567 4.405 19 5.753 19H18.23c1.364 0 2.206-1.432 1.532-2.568ZM12 8.498c.539 0 .96.428.96.938v.066l-.32 4.708a.639.639 0 0 1-.64.592.639.639 0 0 1-.64-.592l-.32-4.708A.953.953 0 0 1 12 8.498Zm0 8.79c-.556 0-1.01-.444-1.01-.987 0-.544.454-.988 1.01-.988s1.01.444 1.01.988c0 .542-.454.987-1.01.987Z\", fill: \"#fff\", fillOpacity: 0.56 }));\nconst ForwardRef = forwardRef(SvgOperationModeError);\nexport default ForwardRef;\n","import * as React from \"react\";\nimport { forwardRef } from \"react\";\nconst SvgOperationModeManual = ({\n title,\n titleId,\n ...props\n}, ref) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ref, \"aria-labelledby\": titleId, ...props }, title ? /* @__PURE__ */ React.createElement(\"title\", { id: titleId }, title) : null, /* @__PURE__ */ React.createElement(\"path\", { d: \"M12.953 5.09a1.497 1.497 0 0 0-1.653-.518l-1.35.43a1.504 1.504 0 0 0-1.726-.376L2.858 6.97c-.736.321-1.06 1.155-.726 1.862.334.707 1.202 1.02 1.937.698l4.27-1.865 1.466 1.973v.402c0 .873-.627 1.63-1.512 1.827l-2.56.567c-1.329.295-2.27 1.431-2.27 2.74v.107c0 .26.22.469.489.469h11.117c1.329 0 2.618.435 3.656 1.233l1.665 1.28A1 1 0 0 0 22 17.47V11.062c0-.312-.108-.616-.308-.863l-3.415-4.218a1.5 1.5 0 0 0-1.618-.471l-.378.12-.866-.475a1.516 1.516 0 0 0-1.188-.114l-1.06.338-.214-.289Z\" }));\nconst ForwardRef = forwardRef(SvgOperationModeManual);\nexport default ForwardRef;\n","import { useTheme, type PopoverOrigin } from \"@mui/material\"\nimport type { OperationMode } from \"@wandelbots/nova-js/v2\"\nimport { observer } from \"mobx-react-lite\"\nimport { Trans, useTranslation } from \"react-i18next\"\nimport OperationModeAutomaticIcon from \"./icons/operation-mode-automatic.svg\"\nimport OperationModeErrorIcon from \"./icons/operation-mode-error.svg\"\nimport OperationModeManualIcon from \"./icons/operation-mode-manual.svg\"\nimport { IndicatorWithExplanation } from \"./IndicatorWithExplanation\"\n\ninterface OperationModeIndicatorProps {\n operationMode: OperationMode\n anchorOrigin?: PopoverOrigin\n transformOrigin?: PopoverOrigin\n compact: boolean\n}\n\nexport const OperationModeIndicator = observer(\n ({\n operationMode,\n anchorOrigin,\n transformOrigin,\n compact,\n }: OperationModeIndicatorProps) => {\n const { t } = useTranslation()\n const theme = useTheme()\n\n switch (operationMode) {\n case \"OPERATION_MODE_AUTO\":\n return (\n <IndicatorWithExplanation\n id=\"operation-mode-auto\"\n icon={OperationModeAutomaticIcon}\n title={t(\"SafetyBar.OperationMode.ti\")}\n name={t(\"SafetyBar.OperationMode.Automatic.ti\")}\n label={compact ? null : t(\"SafetyBar.OperationMode.Automatic.ti\")}\n color={theme.palette.text.secondary}\n explanation={\n <Trans i18nKey=\"SafetyBar.OperationMode.Auto.Explanation.lb\">\n The robot controller is in automatic operation mode. Automated\n movement without manual confirmation is possible in this mode.\n </Trans>\n }\n anchorOrigin={anchorOrigin}\n transformOrigin={transformOrigin}\n />\n )\n case \"OPERATION_MODE_MANUAL\":\n case \"OPERATION_MODE_MANUAL_T1\":\n case \"OPERATION_MODE_MANUAL_T2\": {\n return (\n <IndicatorWithExplanation\n id=\"operation-mode-manual\"\n icon={OperationModeManualIcon}\n color={theme.palette.warning.main}\n title={t(\"SafetyBar.OperationMode.ti\")}\n name={t(\"SafetyBar.OperationMode.Manual.lb\")}\n label={compact ? null : t(\"SafetyBar.OperationMode.Manual.lb\")}\n explanation={\n <Trans i18nKey=\"SafetyBar.OperationMode.Manual.Explanation.lb\">\n The robot controller is in manual operation mode. On a physical\n robot, this generally indicates that an enabling switch must be\n held for the robot to move successfully.\n </Trans>\n }\n literalValue={operationMode}\n anchorOrigin={anchorOrigin}\n transformOrigin={transformOrigin}\n />\n )\n }\n default:\n return (\n <IndicatorWithExplanation\n id=\"operation-mode-error\"\n icon={OperationModeErrorIcon}\n color={theme.palette.warning.main}\n title={t(\"SafetyBar.OperationMode.ti\")}\n name={t(\"SafetyBar.OperationMode.Error.lb\")}\n label={compact ? null : t(\"SafetyBar.OperationMode.Error.lb\")}\n explanation={\n <Trans i18nKey=\"SafetyBar.OperationMode.Error.Explanation.lb\">\n The robot controller has entered an unexpected operation mode.\n Motion group movement may not be possible.\n </Trans>\n }\n literalValue={operationMode}\n anchorOrigin={anchorOrigin}\n transformOrigin={transformOrigin}\n />\n )\n }\n },\n)\n","import * as React from \"react\";\nimport { forwardRef } from \"react\";\nconst SvgSafetyStateError = ({\n title,\n titleId,\n ...props\n}, ref) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, xmlns: \"http://www.w3.org/2000/svg\", ref, \"aria-labelledby\": titleId, ...props }, title ? /* @__PURE__ */ React.createElement(\"title\", { id: titleId }, title) : null, /* @__PURE__ */ React.createElement(\"path\", { d: \"M19.763 16.432 13.516 5.864c-.674-1.152-2.358-1.152-3.049 0l-6.23 10.568C3.563 17.567 4.405 19 5.753 19H18.23c1.364 0 2.206-1.432 1.532-2.568ZM12 8.498c.539 0 .96.428.96.938v.066l-.32 4.708a.639.639 0 0 1-.64.592.639.639 0 0 1-.64-.592l-.32-4.708A.953.953 0 0 1 12 8.498Zm0 8.79c-.556 0-1.01-.444-1.01-.987 0-.544.454-.988 1.01-.988s1.01.444 1.01.988c0 .542-.454.987-1.01.987Z\" }));\nconst ForwardRef = forwardRef(SvgSafetyStateError);\nexport default ForwardRef;\n","import * as React from \"react\";\nimport { forwardRef } from \"react\";\nconst SvgSafetyStateEstop = ({\n title,\n titleId,\n ...props\n}, ref) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, xmlns: \"http://www.w3.org/2000/svg\", ref, \"aria-labelledby\": titleId, ...props }, title ? /* @__PURE__ */ React.createElement(\"title\", { id: titleId }, title) : null, /* @__PURE__ */ React.createElement(\"path\", { d: \"M10.24 10.636 12 13.764l1.76-3.128h-3.52Z\" }), /* @__PURE__ */ React.createElement(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M18.364 12a6.364 6.364 0 1 1-12.728 0 6.364 6.364 0 0 1 12.728 0ZM7.909 9.273 12 16.546l4.09-7.273H7.91Z\" }), /* @__PURE__ */ React.createElement(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M22 12c0 5.523-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2s10 4.477 10 10Zm-1.364 0a8.636 8.636 0 1 1-17.273 0 8.636 8.636 0 0 1 17.273 0Z\" }));\nconst ForwardRef = forwardRef(SvgSafetyStateEstop);\nexport default ForwardRef;\n","import * as React from \"react\";\nimport { forwardRef } from \"react\";\nconst SvgSafetyStateManualActionRequired = ({\n title,\n titleId,\n ...props\n}, ref) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ref, \"aria-labelledby\": titleId, ...props }, title ? /* @__PURE__ */ React.createElement(\"title\", { id: titleId }, title) : null, /* @__PURE__ */ React.createElement(\"path\", { d: \"M9.057 15.115c-1.681 0-3.111-.59-4.29-1.768C3.59 12.17 3 10.74 3 9.057c0-.29.021-.582.064-.876a4.1 4.1 0 0 1 .214-.844.78.78 0 0 1 .273-.36c.115-.077.244-.133.389-.168a.857.857 0 0 1 .437.008c.146.04.28.12.4.24l2.806 2.787 2.26-2.261-2.775-2.786a.903.903 0 0 1-.241-.405.875.875 0 0 1-.008-.442 1.13 1.13 0 0 1 .174-.389.82.82 0 0 1 .355-.273c.268-.107.548-.182.838-.224.29-.043.581-.064.871-.064 1.682 0 3.112.59 4.29 1.768 1.179 1.178 1.768 2.608 1.768 4.29 0 .444-.042.858-.126 1.241-.084.384-.21.755-.377 1.113l5.726 5.692A2.2 2.2 0 0 1 21 18.721a2.2 2.2 0 0 1-.662 1.617A2.2 2.2 0 0 1 18.72 21a2.173 2.173 0 0 1-1.617-.679l-5.692-5.709c-.372.161-.75.285-1.133.372-.383.087-.79.13-1.222.13Z\", fill: \"#fff\", fillOpacity: 0.56 }));\nconst ForwardRef = forwardRef(SvgSafetyStateManualActionRequired);\nexport default ForwardRef;\n","import * as React from \"react\";\nimport { forwardRef } from \"react\";\nconst SvgSafetyStateNormal = ({\n title,\n titleId,\n ...props\n}, ref) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ref, \"aria-labelledby\": titleId, ...props }, title ? /* @__PURE__ */ React.createElement(\"title\", { id: titleId }, title) : null, /* @__PURE__ */ React.createElement(\"path\", { d: \"m10.6 13.8-2.15-2.15a.948.948 0 0 0-.7-.275.948.948 0 0 0-.7.275.948.948 0 0 0-.275.7c0 .283.092.517.275.7L9.9 15.9c.2.2.433.3.7.3.267 0 .5-.1.7-.3l5.65-5.65a.948.948 0 0 0 .275-.7.948.948 0 0 0-.275-.7.948.948 0 0 0-.7-.275.948.948 0 0 0-.7.275L10.6 13.8ZM12 22a9.738 9.738 0 0 1-3.9-.788 10.099 10.099 0 0 1-3.175-2.137c-.9-.9-1.612-1.958-2.137-3.175A9.738 9.738 0 0 1 2 12c0-1.383.263-2.683.788-3.9a10.099 10.099 0 0 1 2.137-3.175c.9-.9 1.958-1.612 3.175-2.137A9.738 9.738 0 0 1 12 2c1.383 0 2.683.263 3.9.788a10.098 10.098 0 0 1 3.175 2.137c.9.9 1.613 1.958 2.137 3.175A9.738 9.738 0 0 1 22 12a9.738 9.738 0 0 1-.788 3.9 10.098 10.098 0 0 1-2.137 3.175c-.9.9-1.958 1.613-3.175 2.137A9.738 9.738 0 0 1 12 22Zm0-2c2.233 0 4.125-.775 5.675-2.325C19.225 16.125 20 14.233 20 12c0-2.233-.775-4.125-2.325-5.675C16.125 4.775 14.233 4 12 4c-2.233 0-4.125.775-5.675 2.325C4.775 7.875 4 9.767 4 12c0 2.233.775 4.125 2.325 5.675C7.875 19.225 9.767 20 12 20Z\" }));\nconst ForwardRef = forwardRef(SvgSafetyStateNormal);\nexport default ForwardRef;\n","import * as React from \"react\";\nimport { forwardRef } from \"react\";\nconst SvgSafetyStateStop = ({\n title,\n titleId,\n ...props\n}, ref) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, xmlns: \"http://www.w3.org/2000/svg\", ref, \"aria-labelledby\": titleId, ...props }, title ? /* @__PURE__ */ React.createElement(\"title\", { id: titleId }, title) : null, /* @__PURE__ */ React.createElement(\"path\", { d: \"M9 16h6c.283 0 .52-.096.713-.287A.968.968 0 0 0 16 15V9a.967.967 0 0 0-.287-.713A.968.968 0 0 0 15 8H9a.968.968 0 0 0-.713.287A.968.968 0 0 0 8 9v6c0 .283.096.52.287.713.192.191.43.287.713.287Zm3 6a9.738 9.738 0 0 1-3.9-.788 10.099 10.099 0 0 1-3.175-2.137c-.9-.9-1.612-1.958-2.137-3.175A9.738 9.738 0 0 1 2 12c0-1.383.263-2.683.788-3.9a10.099 10.099 0 0 1 2.137-3.175c.9-.9 1.958-1.612 3.175-2.137A9.738 9.738 0 0 1 12 2c1.383 0 2.683.263 3.9.788a10.098 10.098 0 0 1 3.175 2.137c.9.9 1.613 1.958 2.137 3.175A9.738 9.738 0 0 1 22 12a9.738 9.738 0 0 1-.788 3.9 10.098 10.098 0 0 1-2.137 3.175c-.9.9-1.958 1.613-3.175 2.137A9.738 9.738 0 0 1 12 22Zm0-2c2.233 0 4.125-.775 5.675-2.325C19.225 16.125 20 14.233 20 12c0-2.233-.775-4.125-2.325-5.675C16.125 4.775 14.233 4 12 4c-2.233 0-4.125.775-5.675 2.325C4.775 7.875 4 9.767 4 12c0 2.233.775 4.125 2.325 5.675C7.875 19.225 9.767 20 12 20Z\" }));\nconst ForwardRef = forwardRef(SvgSafetyStateStop);\nexport default ForwardRef;\n","import { useTheme, type PopoverOrigin } from \"@mui/material\"\nimport type { SafetyStateType } from \"@wandelbots/nova-js/v2\"\nimport { observer } from \"mobx-react-lite\"\nimport { Trans, useTranslation } from \"react-i18next\"\nimport { assertUnreachable } from \"../utils/errorHandling\"\nimport SafetyStateErrorIcon from \"./icons/safety-state-error.svg\"\nimport SafetyStateEstopIcon from \"./icons/safety-state-estop.svg\"\nimport SafetyStateManualActionRequiredIcon from \"./icons/safety-state-manual-action-required.svg\"\nimport SafetyStateNormalIcon from \"./icons/safety-state-normal.svg\"\nimport SafetyStateStopIcon from \"./icons/safety-state-stop.svg\"\nimport { IndicatorWithExplanation } from \"./IndicatorWithExplanation\"\n\ninterface SafetyStateIndicatorProps {\n safetyState: SafetyStateType\n anchorOrigin?: PopoverOrigin\n transformOrigin?: PopoverOrigin\n compact: boolean\n}\n\nexport const SafetyStateIndicator = observer(\n ({\n safetyState,\n anchorOrigin,\n transformOrigin,\n compact,\n }: SafetyStateIndicatorProps) => {\n const { t } = useTranslation()\n const theme = useTheme()\n\n switch (safetyState) {\n // Normal state, robot can move\n case \"SAFETY_STATE_NORMAL\":\n return (\n <IndicatorWithExplanation\n id=\"safety-state-normal\"\n title={t(\"SafetyBar.SafetyState.ti\")}\n name={t(\"SafetyBar.SafetyState.Normal.lb\")}\n label={compact ? null : t(\"SafetyBar.SafetyState.Normal.lb\")}\n icon={SafetyStateNormalIcon}\n color={theme.palette.text.secondary}\n explanation={\n <Trans i18nKey=\"SafetyBar.SafetyState.Normal.Explanation.lb\">\n The robot controller is in a normal safety state. Movement is\n not prevented by this state.\n </Trans>\n }\n anchorOrigin={anchorOrigin}\n transformOrigin={transformOrigin}\n />\n )\n\n // Estop\n case \"SAFETY_STATE_DEVICE_EMERGENCY_STOP\":\n case \"SAFETY_STATE_ROBOT_EMERGENCY_STOP\":\n return (\n <IndicatorWithExplanation\n id=\"safety-state-estop\"\n title={t(\"SafetyBar.SafetyState.ti\")}\n name={t(\"SafetyBar.SafetyState.Estop.lb\")}\n label={compact ? null : t(\"SafetyBar.SafetyState.Estop.lb\")}\n icon={SafetyStateEstopIcon}\n color={theme.palette.error.main}\n explanation={\n <Trans i18nKey=\"SafetyBar.StopState.Estop.Explanation.lb\">\n An emergency stop of the robot controller has been triggered.\n Movement of the robot is no longer possible until the estop is\n released.\n </Trans>\n }\n literalValue={safetyState}\n anchorOrigin={anchorOrigin}\n transformOrigin={transformOrigin}\n />\n )\n\n // General stop\n case \"SAFETY_STATE_STOP_0\":\n case \"SAFETY_STATE_STOP_1\":\n case \"SAFETY_STATE_STOP_2\":\n case \"SAFETY_STATE_PROTECTIVE_STOP\":\n case \"SAFETY_STATE_STOP\":\n return (\n <IndicatorWithExplanation\n id=\"safety-state-stop\"\n icon={SafetyStateStopIcon}\n title={t(\"SafetyBar.SafetyState.ti\")}\n name={t(\"SafetyBar.SafetyState.Stop.lb\")}\n label={compact ? null : t(\"SafetyBar.SafetyState.Stop.lb\")}\n color={theme.palette.warning.main}\n explanation={\n <Trans i18nKey=\"SafetyBar.SafetyState.Stop.Explanation.lb\">\n The robot controller has entered a stop state. Movement is no\n longer possible until the stop state is resolved.\n </Trans>\n }\n literalValue={safetyState}\n anchorOrigin={anchorOrigin}\n transformOrigin={transformOrigin}\n />\n )\n\n // Manual action required\n case \"SAFETY_STATE_REDUCED\":\n case \"SAFETY_STATE_MASTERING\":\n case \"SAFETY_STATE_CONFIRM_SAFETY\":\n case \"SAFETY_STATE_OPERATOR_SAFETY\":\n case \"SAFETY_STATE_RECOVERY\":\n case \"SAFETY_STATE_VIOLATION\":\n return (\n <IndicatorWithExplanation\n id=\"safety-state-manual-action-required\"\n icon={SafetyStateManualActionRequiredIcon}\n color={theme.palette.warning.main}\n title={t(\"SafetyBar.SafetyState.ti\")}\n name={t(\"SafetyBar.SafetyState.ManualActionRequired.lb\")}\n label={\n compact\n ? null\n : t(\"SafetyBar.SafetyState.ManualActionRequired.lb\")\n }\n explanation={\n <Trans i18nKey=\"SafetyBar.SafetyState.ManualActionRequired.Explanation.lb\">\n The robot controller has entered a safety state requiring manual\n action to resolve.\n </Trans>\n }\n literalValue={safetyState}\n anchorOrigin={anchorOrigin}\n transformOrigin={transformOrigin}\n />\n )\n\n // Error\n case \"SAFETY_STATE_UNKNOWN\":\n case \"SAFETY_STATE_FAULT\":\n return (\n <IndicatorWithExplanation\n id=\"safety-state-error\"\n icon={SafetyStateErrorIcon}\n color={theme.palette.error.main}\n title={t(\"SafetyBar.SafetyState.ti\")}\n name={t(\"SafetyBar.SafetyState.Error.lb\")}\n label={compact ? null : t(\"SafetyBar.SafetyState.Error.lb\")}\n explanation={\n <Trans i18nKey=\"SafetyBar.SafetyState.Error.Explanation.lb\">\n The robot controller has entered an unexpected safety state.\n </Trans>\n }\n literalValue={safetyState}\n anchorOrigin={anchorOrigin}\n transformOrigin={transformOrigin}\n />\n )\n default:\n assertUnreachable(safetyState, `Unknown safety state ${safetyState}`)\n }\n },\n)\n","import { Divider, Stack, type PopoverOrigin } from \"@mui/material\"\nimport type { OperationMode, SafetyStateType } from \"@wandelbots/nova-js/v2\"\nimport { observer } from \"mobx-react-lite\"\nimport { externalizeComponent } from \"../../externalizeComponent\"\nimport { ControllerTypeIndicator } from \"./ControllerTypeIndicator\"\nimport { OperationModeIndicator } from \"./OperationModeIndicator\"\nimport { SafetyStateIndicator } from \"./SafetyStateIndicator\"\n\nexport interface SafetyBarProps {\n isVirtual: boolean\n motionGroupId: string\n operationMode: OperationMode\n safetyState: SafetyStateType\n anchorOrigin?: PopoverOrigin\n transformOrigin?: PopoverOrigin\n compact?: boolean\n}\n\nexport const SafetyBar = externalizeComponent(\n observer(\n ({\n isVirtual,\n motionGroupId,\n operationMode,\n safetyState,\n anchorOrigin,\n transformOrigin,\n compact = true,\n }: SafetyBarProps) => {\n const gap = compact ? 1 : 2\n\n return (\n <Stack\n direction=\"row\"\n gap={gap}\n alignItems=\"center\"\n sx={{ height: \"24px\" }}\n >\n <SafetyStateIndicator\n safetyState={safetyState}\n anchorOrigin={anchorOrigin}\n transformOrigin={transformOrigin}\n compact={compact}\n />\n\n <Divider orientation=\"vertical\" flexItem />\n\n <OperationModeIndicator\n operationMode={operationMode}\n anchorOrigin={anchorOrigin}\n transformOrigin={transformOrigin}\n compact={compact}\n />\n\n <Divider orientation=\"vertical\" flexItem />\n\n <ControllerTypeIndicator\n isVirtual={isVirtual}\n motionGroupId={motionGroupId}\n anchorOrigin={anchorOrigin}\n transformOrigin={transformOrigin}\n compact={compact}\n />\n </Stack>\n )\n },\n ),\n)\n","import { Fab, type FabProps, styled } from \"@mui/material\"\n\nconst StyledSelectableFab = styled(Fab, {\n shouldForwardProp: (prop) => prop !== \"selected\",\n})<CodeFabProps>(({ theme }) => ({\n borderRadius: \"20px\",\n\n \"&:hover\": {\n background: theme.palette.backgroundPaperElevation?.[7],\n },\n\n variants: [\n {\n props: ({ selected }) => !selected,\n style: {\n background: theme.palette.backgroundPaperElevation?.[0],\n color: theme.palette.action.disabled,\n \"> img\": {\n opacity: 0.4,\n },\n },\n },\n {\n props: ({ selected }) => selected,\n style: {\n background: theme.palette.backgroundPaperElevation?.[11],\n border: `1px solid ${theme.palette.divider}`,\n color: theme.palette.primary.contrastText,\n },\n },\n ],\n}))\n\ntype CodeFabProps = {\n selected?: boolean\n ref?: React.Ref<HTMLButtonElement>\n} & Omit<FabProps, \"variant\" | \"color\">\n\nexport const SelectableFab = (props: CodeFabProps) => {\n const { ref, ...otherProps } = props\n return (\n <StyledSelectableFab\n ref={ref}\n selected={props.selected}\n {...otherProps}\n color={\"secondary\"}\n variant=\"circular\"\n />\n )\n}\n","import type { SxProps } from \"@mui/material\"\nimport { Badge, Box, Tab, Tabs } from \"@mui/material\"\nimport { observer } from \"mobx-react-lite\"\nimport { useEffect, useState } from \"react\"\nimport { externalizeComponent } from \"../externalizeComponent\"\n\nexport interface TabItem {\n /** Unique identifier for the tab */\n id: string\n /** Label text for the tab */\n label: string\n /** Content to display when tab is active */\n content: React.ReactNode\n /** Optional icon component to display with the tab */\n icon?: React.ReactElement\n /** Optional badge configuration */\n badge?: {\n /** Badge content (number or string) */\n content: React.ReactNode\n /** Badge color variant */\n color?:\n | \"default\"\n | \"primary\"\n | \"secondary\"\n | \"error\"\n | \"info\"\n | \"success\"\n | \"warning\"\n /** Maximum number to display (e.g., 99+) */\n max?: number\n /** Show badge even when content is zero */\n showZero?: boolean\n }\n}\n\nexport interface TabBarProps {\n /** Array of tab items to display */\n items: TabItem[]\n /** Controlled active tab index */\n activeTab?: number\n /** Default active tab index */\n defaultActiveTab?: number\n /** Callback when tab changes */\n onTabChange?: (index: number) => void\n /** Additional styling */\n sx?: SxProps\n /** Ref to the root container element */\n ref?: React.Ref<HTMLDivElement>\n}\n\ninterface TabPanelProps {\n children?: React.ReactNode\n index: number\n value: number\n}\n\nfunction TabPanel(props: TabPanelProps) {\n const { children, value, index, ...other } = props\n\n return (\n <div\n role=\"tabpanel\"\n hidden={value !== index}\n id={`tabpanel-${index}`}\n aria-labelledby={`tab-${index}`}\n {...other}\n >\n {value === index && <Box>{children}</Box>}\n </div>\n )\n}\n\n/**\n * Wrapper component that filters out MUI Tabs internal props\n * to prevent them from being passed to DOM elements\n */\ninterface TabWrapperProps {\n children: React.ReactNode\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any\n}\n\nfunction TabWrapper({ children, ...props }: TabWrapperProps) {\n // Filter out MUI Tabs internal props that shouldn't reach the DOM\n const {\n fullWidth,\n indicator,\n onChange,\n orientation,\n scrollButtons,\n selectionFollowsFocus,\n textColor,\n value,\n variant,\n ...cleanProps\n } = props\n\n return <Box {...cleanProps}>{children}</Box>\n}\n\n/**\n * A styled tab bar component with configurable tabs and content.\n * Features the same styling as the Wandelbots design system with rounded tabs\n * and smooth transitions.\n */\nexport const TabBar = externalizeComponent(\n observer((props: TabBarProps) => {\n const {\n items,\n activeTab,\n defaultActiveTab = 0,\n onTabChange,\n sx,\n ref,\n } = props\n const isControlled = activeTab !== undefined\n const [uncontrolledActiveTab, setUncontrolledActiveTab] =\n useState(defaultActiveTab)\n\n const currentValue = isControlled ? activeTab! : uncontrolledActiveTab\n\n // Keep uncontrolled state in range when items change\n useEffect(() => {\n if (isControlled) return\n if (items.length === 0) return\n if (\n uncontrolledActiveTab < 0 ||\n uncontrolledActiveTab > items.length - 1\n ) {\n setUncontrolledActiveTab(0)\n }\n }, [items.length, isControlled, uncontrolledActiveTab])\n\n const handleTabChange = (\n _event: React.SyntheticEvent,\n newValue: number,\n ) => {\n if (!isControlled) {\n setUncontrolledActiveTab(newValue)\n }\n onTabChange?.(newValue)\n }\n\n return (\n <Box\n ref={ref}\n sx={{ height: \"100%\", display: \"flex\", flexDirection: \"column\", ...sx }}\n >\n {/* Tabs */}\n <Box\n sx={{\n px: 0,\n py: 0,\n overflow: \"visible\",\n position: \"relative\",\n // Extra padding to prevent badge clipping\n // Top: accommodates badge positioned at top: -6px with 20px height\n // Right: accommodates badge positioned at right: -8px with 20px width\n paddingTop: (theme) => theme.spacing(2), // 16px\n paddingRight: (theme) => theme.spacing(2.5), // 20px\n }}\n >\n <Tabs\n value={currentValue}\n onChange={handleTabChange}\n sx={{\n minHeight: \"32px\",\n backgroundColor: \"transparent\",\n overflow: \"visible\",\n \"& .MuiTabs-indicator\": {\n display: \"none\", // Hide the default indicator\n },\n \"& .MuiTabs-flexContainer\": {\n gap: 2,\n overflow: \"visible\",\n paddingTop: 0,\n paddingBottom: 0,\n },\n \"& .MuiTabs-scroller\": {\n overflow: \"visible !important\",\n },\n \"& .MuiTab-root\": {\n overflow: \"visible\",\n },\n }}\n >\n {items.map((item, index) => {\n // Helper functions for badge logic\n const getBadgeContent = () => {\n if (!item.badge) return undefined\n const content = item.badge.content\n const max = item.badge.max\n\n // Handle numeric content with max limit\n if (typeof content === \"number\" && max && content > max) {\n return `${max}+`\n }\n\n return content\n }\n\n const shouldShowBadge = () => {\n if (!item.badge) return false\n const content = item.badge.content\n const showZero = item.badge.showZero\n\n // If content is 0 and showZero is false, hide badge\n if (content === 0 && !showZero) return false\n\n return true\n }\n\n const badgeContent = getBadgeContent()\n const showBadge = shouldShowBadge()\n\n const handleTabClick = () => {\n if (!isControlled) {\n setUncontrolledActiveTab(index)\n }\n onTabChange?.(index)\n }\n\n const tab = (\n <Tab\n key={item.id}\n label={item.label}\n icon={item.icon}\n iconPosition=\"start\"\n disableRipple\n onClick={handleTabClick}\n sx={{\n minHeight: \"32px\",\n height: \"32px\",\n padding: \"0px 10px\",\n borderRadius: \"12px\",\n backgroundColor: (theme) =>\n theme.palette.backgroundPaperElevation?.[11] || \"#32344B\",\n color: \"text.primary\",\n opacity: currentValue === index ? 1 : 0.38,\n fontSize: \"13px\",\n transition: \"all 0.2s ease-in-out\",\n position: \"relative\",\n overflow: \"visible\",\n \"&:hover\": {\n opacity: currentValue === index ? 1 : 0.6,\n },\n \"&.Mui-selected\": {\n opacity: 1,\n backgroundColor: (theme) =>\n theme.palette.backgroundPaperElevation?.[11] ||\n \"#32344B\",\n color: \"text.primary\",\n },\n \"&:focus\": {\n outline: \"none\",\n },\n \"&:active\": {\n transform: \"none\",\n },\n }}\n />\n )\n\n if (!showBadge) {\n return tab\n }\n\n return (\n <TabWrapper\n key={item.id}\n component=\"span\"\n sx={{ display: \"inline-flex\" }}\n >\n <Badge\n badgeContent={badgeContent}\n color={item.badge?.color || \"error\"}\n max={item.badge?.max}\n showZero={item.badge?.showZero}\n anchorOrigin={{\n vertical: \"top\",\n horizontal: \"right\",\n }}\n overlap=\"rectangular\"\n sx={{\n \"& .MuiBadge-badge\": {\n // Ensure badge doesn't inherit tab opacity\n opacity: \"1 !important\",\n },\n }}\n >\n {tab}\n </Badge>\n </TabWrapper>\n )\n })}\n </Tabs>\n </Box>\n\n {/* Border line */}\n <Box\n sx={{\n mt: (theme) => theme.spacing(2),\n borderBottom: 1,\n borderColor: \"divider\",\n }}\n />\n\n {/* Tab Content */}\n <Box sx={{ flex: 1, overflow: \"auto\" }}>\n {items.map((item, index) => (\n <TabPanel key={item.id} value={currentValue} index={index}>\n {item.content}\n </TabPanel>\n ))}\n </Box>\n </Box>\n )\n }),\n)\n","export default {\n $schema:\n \"https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json\",\n name: \"wandelscript\",\n patterns: [\n {\n include: \"#keywords\",\n },\n {\n include: \"#strings\",\n },\n {\n include: \"#comments\",\n },\n {\n include: \"#functions\",\n },\n ],\n repository: {\n keywords: {\n patterns: [\n {\n name: \"keyword.control.flow.wandelscript\",\n match:\n \"\\\\b(move|via|to|interrupt|def|False|True|for|if|else|elif|while|return|switch|activate|deactivate|print|and|or|not)\\\\b\",\n },\n ],\n },\n strings: {\n name: \"string.quoted.double.wandelscript\",\n begin: '\"',\n end: '\"',\n patterns: [\n {\n name: \"constant.character.escape.wandelscript\",\n match: \"\\\\\\\\.\",\n },\n ],\n },\n comments: {\n patterns: [\n {\n begin: \"#\",\n beginCaptures: {\n \"0\": { name: \"punctuation.definition.comment.wandelscript\" },\n },\n end: \"$\",\n name: \"comment.line.number-sign.wandelscript\",\n },\n ],\n },\n functions: {\n patterns: [\n {\n match: \"[a-zA-Z_-]+\\\\(\",\n name: \"entity.name.function.wandelscript\",\n },\n ],\n },\n },\n scopeName: \"source.wandelscript\",\n}\n","import type { Monaco } from \"@monaco-editor/react\"\nimport { lazy, Suspense, useState } from \"react\"\nimport type {\n BundledLanguage,\n BundledTheme,\n HighlighterGeneric,\n ShikiInternal,\n} from \"shiki\"\n\nimport { useTheme } from \"@mui/material\"\nimport type { editor } from \"monaco-editor\"\nimport { externalizeComponent } from \"../../externalizeComponent\"\nimport { LoadingCover } from \"../LoadingCover\"\nimport wandelscriptTextmateGrammar from \"./wandelscript.tmLanguage\"\n\ntype WandelscriptEditorProps = {\n /** The current Wandelscript content of the code editor (controlled component) */\n code?: string\n /** What to do when the user edits the code */\n onChange?: (\n code: string | undefined,\n ev: editor.IModelContentChangedEvent,\n ) => void\n /** Options for monaco editor */\n monacoOptions?: editor.IEditorOptions\n /** Callback to further configure monaco on startup if needed */\n monacoSetup?: (monaco: Monaco) => void\n}\n\nconst Editor = lazy(() => import(\"@monaco-editor/react\"))\n\nlet preparedShiki: {\n shiki: HighlighterGeneric<BundledLanguage, BundledTheme>\n shikiToMonaco: (\n shiki: HighlighterGeneric<BundledLanguage, BundledTheme>,\n monaco: Monaco,\n ) => void\n} | null = null\n\nasync function getShiki() {\n if (!preparedShiki) {\n const [{ createHighlighter }, { shikiToMonaco }] = await Promise.all([\n import(\"shiki\"),\n import(\"@shikijs/monaco\"),\n ])\n\n const shiki = await createHighlighter({\n // Our textmate grammar doesn't quite conform to the expected type\n // here; I'm not sure what the missing properties mean exactly\n langs: [wandelscriptTextmateGrammar as any],\n themes: [\"dark-plus\", \"light-plus\"],\n })\n\n preparedShiki = {\n shiki,\n shikiToMonaco: shikiToMonaco as unknown as (\n shiki: ShikiInternal<any, any>,\n monaco: typeof import(\"monaco-editor\"),\n ) => void,\n }\n }\n\n return preparedShiki\n}\n\n/** A Monaco (VSCode-style) embedded code editor with Wandelscript syntax highlighting */\nexport const WandelscriptEditor = externalizeComponent(\n (props: WandelscriptEditorProps) => {\n const theme = useTheme()\n const [activeShikiTheme, setActiveShikiTheme] =\n useState<BundledTheme>(\"dark-plus\")\n const targetShikiTheme =\n theme.palette.mode === \"dark\" ? \"dark-plus\" : \"light-plus\"\n\n async function setupEditor(monaco: Monaco) {\n // Register and configure the Wandelscript language\n monaco.languages.register({ id: \"wandelscript\" })\n\n monaco.languages.setLanguageConfiguration(\"wandelscript\", {\n comments: {\n lineComment: \"#\",\n },\n brackets: [\n [\"(\", \")\"],\n [\"[\", \"]\"],\n ],\n autoClosingPairs: [\n { open: \"[\", close: \"]\" },\n { open: \"(\", close: \")\" },\n ],\n surroundingPairs: [\n { open: \"[\", close: \"]\" },\n { open: \"(\", close: \")\" },\n ],\n })\n\n const { shiki, shikiToMonaco } = await getShiki()\n\n // Monaco doesn't support TextMate grammar config directly, so we\n // use Shiki as an intermediary\n shikiToMonaco(shiki, monaco)\n\n // Override the generated shiki theme to use shiki syntax highlighting\n // but vscode colors\n monaco.editor.defineTheme(\n targetShikiTheme,\n theme.componentsExt?.WandelscriptEditor?.monacoTheme ?? {\n base: theme.palette.mode === \"dark\" ? \"vs-dark\" : \"vs\",\n inherit: true,\n rules: [],\n colors: {},\n },\n )\n\n if (props.monacoSetup) {\n props.monacoSetup(monaco)\n }\n\n setActiveShikiTheme(targetShikiTheme)\n }\n\n return (\n <Suspense fallback={<LoadingCover />}>\n <Editor\n value={props.code}\n onMount={(_editor, monaco) => {\n setupEditor(monaco)\n }}\n onChange={props.onChange}\n defaultLanguage=\"wandelscript\"\n theme={activeShikiTheme}\n options={{\n minimap: { enabled: false },\n wordWrap: \"on\",\n automaticLayout: true,\n ...props.monacoOptions,\n }}\n />\n </Suspense>\n )\n },\n)\n","import {\n tryParseJson,\n type AutoReconnectingWebsocket,\n} from \"@wandelbots/nova-js\"\nimport type {\n DHParameter,\n MotionGroupDescription,\n MotionGroupState,\n NovaClient,\n OperationMode,\n RobotControllerState,\n SafetyStateType,\n} from \"@wandelbots/nova-js/v2\"\nimport { makeAutoObservable, runInAction } from \"mobx\"\nimport * as THREE from \"three\"\nimport type { Vector3Simple } from \"./JoggerConnection\"\nimport { jointValuesEqual, tcpMotionEqual } from \"./motionStateUpdate\"\n\nconst MOTION_DELTA_THRESHOLD = 0.0001\n\nexport type RobotTcpLike = {\n id: string\n readable_name: string\n position: Vector3Simple\n orientation: Vector3Simple\n}\n\nexport type MotionGroupOption = {\n selectionId: string\n}\n\nconst EMPTY_DH_PARAMETER: DHParameter = {\n a: 0,\n d: 0,\n alpha: 0,\n theta: 0,\n reverse_rotation_direction: false,\n}\n\n/**\n * Store representing the current state of a connected motion group.\n * API v2 version, not used yet in the components.\n */\nexport class ConnectedMotionGroup {\n static async connectMultiple(nova: NovaClient, motionGroupIds: string[]) {\n return Promise.all(\n motionGroupIds.map((motionGroupId) =>\n ConnectedMotionGroup.connect(nova, motionGroupId),\n ),\n )\n }\n\n static async connect(nova: NovaClient, motionGroupId: string) {\n const [_motionGroupIndex, controllerId] = motionGroupId.split(\"@\") as [\n string,\n string,\n ]\n\n const controller =\n await nova.api.controller.getCurrentRobotControllerState(controllerId)\n const motionGroup = controller?.motion_groups.find(\n (mg) => mg.motion_group === motionGroupId,\n )\n if (!controller || !motionGroup) {\n throw new Error(\n `Controller ${controllerId} or motion group ${motionGroupId} not found`,\n )\n }\n\n const motionStateSocket = nova.openReconnectingWebsocket(\n `/controllers/${controllerId}/motion-groups/${motionGroupId}/state-stream`,\n )\n\n // Wait for the first message to get the initial state\n const firstMessage = await motionStateSocket.firstMessage()\n const initialMotionState = tryParseJson(firstMessage.data)\n ?.result as MotionGroupState\n\n if (!initialMotionState) {\n throw new Error(\n `Unable to parse initial motion state message ${firstMessage.data}`,\n )\n }\n\n console.log(\n `Connected motion state websocket to motion group ${motionGroup.motion_group}. Initial state:\\n `,\n initialMotionState,\n )\n\n // Check if robot is virtual or physical\n const config = await nova.api.controller.getRobotController(\n controller.controller,\n )\n const isVirtual = config.configuration.kind === \"VirtualController\"\n\n // If there's a configured mounting, we need it to show the right\n // position of the robot model\n const description = await nova.api.motionGroup.getMotionGroupDescription(\n controllerId,\n motionGroup.motion_group,\n )\n\n // Find out what TCPs this motion group has (we need it for jogging)\n // There are converted into a RobotTcpLike for easier use in the UI\n const tcps: RobotTcpLike[] = Object.entries(description.tcps || {}).map(\n ([id, tcp]) => ({\n id,\n readable_name: tcp.name,\n position: tcp.pose.position as Vector3Simple,\n orientation: tcp.pose.orientation as Vector3Simple,\n }),\n )\n\n // Open the websocket to monitor controller state for e.g. e-stop\n const controllerStateSocket = nova.openReconnectingWebsocket(\n `/controllers/${controller.controller}/state-stream?response_rate=1000`,\n )\n\n // Wait for the first message to get the initial state\n const firstControllerMessage = await controllerStateSocket.firstMessage()\n const initialControllerState = tryParseJson(firstControllerMessage.data)\n ?.result as RobotControllerState\n\n if (!initialControllerState) {\n throw new Error(\n `Unable to parse initial controller state message ${firstControllerMessage.data}`,\n )\n }\n\n console.log(\n `Connected controller state websocket to controller ${controller.controller}. Initial state:\\n `,\n initialControllerState,\n )\n\n return new ConnectedMotionGroup(\n nova,\n controller,\n motionGroup,\n initialMotionState,\n motionStateSocket,\n isVirtual,\n tcps,\n description,\n initialControllerState,\n controllerStateSocket,\n )\n }\n\n connectedJoggingSocket: WebSocket | null = null\n // biome-ignore lint/suspicious/noExplicitAny: legacy code\n planData: any | null // tmp\n joggingVelocity: number = 10\n\n // Not mobx-observable as this changes very fast; should be observed\n // using animation frames\n rapidlyChangingMotionState: MotionGroupState\n\n // Response rate on the websocket should be a bit slower on this one since\n // we don't use the motion data\n controllerState: RobotControllerState\n\n /**\n * Reflects activation state of the motion group / robot servos. The\n * movement controls in the UI should only be enabled in the \"active\" state\n */\n activationState: \"inactive\" | \"activating\" | \"deactivating\" | \"active\" =\n \"inactive\"\n\n constructor(\n readonly nova: NovaClient,\n readonly controller: RobotControllerState,\n readonly motionGroup: MotionGroupState,\n readonly initialMotionState: MotionGroupState,\n readonly motionStateSocket: AutoReconnectingWebsocket,\n readonly isVirtual: boolean,\n readonly tcps: RobotTcpLike[],\n readonly description: MotionGroupDescription,\n readonly initialControllerState: RobotControllerState,\n readonly controllerStateSocket: AutoReconnectingWebsocket,\n ) {\n this.rapidlyChangingMotionState = initialMotionState\n this.controllerState = initialControllerState\n\n // Track controller state updates (e.g. safety state and operation mode)\n controllerStateSocket.addEventListener(\"message\", (event) => {\n const data = tryParseJson(event.data)?.result\n\n if (!data) {\n return\n }\n\n runInAction(() => {\n this.controllerState = data\n })\n })\n\n motionStateSocket.addEventListener(\"message\", (event) => {\n const latestMotionState = tryParseJson(event.data)?.result as\n | MotionGroupState\n | undefined\n\n if (!latestMotionState) {\n throw new Error(\n `Failed to get motion state for ${this.motionGroupId}: ${event.data}`,\n )\n }\n\n // handle joint position changes\n if (\n !jointValuesEqual(\n this.rapidlyChangingMotionState.joint_position,\n latestMotionState.joint_position,\n MOTION_DELTA_THRESHOLD,\n )\n ) {\n runInAction(() => {\n this.rapidlyChangingMotionState.joint_position =\n latestMotionState.joint_position\n })\n }\n\n // handle tcp pose changes\n if (\n !tcpMotionEqual(\n this.rapidlyChangingMotionState,\n latestMotionState,\n MOTION_DELTA_THRESHOLD,\n )\n ) {\n runInAction(() => {\n this.rapidlyChangingMotionState.tcp_pose = latestMotionState.tcp_pose\n })\n }\n\n // handle standstill changes\n if (\n this.rapidlyChangingMotionState.standstill !==\n latestMotionState.standstill\n ) {\n runInAction(() => {\n this.rapidlyChangingMotionState.standstill =\n latestMotionState.standstill\n })\n }\n })\n makeAutoObservable(this)\n }\n\n get motionGroupId() {\n return this.motionGroup.motion_group\n }\n\n get controllerId() {\n return this.controller.controller\n }\n\n get modelFromController() {\n return this.description.motion_group_model\n }\n\n get wandelscriptIdentifier() {\n const num = this.motionGroupId.split(\"@\")[0]\n return `${this.controllerId.replace(/-/g, \"_\")}_${num}`\n }\n\n /** Jogging velocity in radians for rotation and joint movement */\n get joggingVelocityRads() {\n return (this.joggingVelocity * Math.PI) / 180\n }\n\n get joints() {\n return this.initialMotionState.joint_position.map((_, i) => {\n return {\n index: i,\n }\n })\n }\n\n // Please note that API v2 omits 0 values\n get dhParameters() {\n if (this.description.dh_parameters === undefined) {\n return undefined\n }\n\n return this.description.dh_parameters.map((dh_param) => ({\n ...EMPTY_DH_PARAMETER,\n ...dh_param,\n }))\n }\n\n get safetyZones() {\n return this.description.safety_zones\n }\n\n /** Gets the robot mounting position offset in 3D viz coordinates */\n get mountingPosition(): [number, number, number] {\n if (!this.description.mounting) {\n return [0, 0, 0]\n }\n\n return [\n (this.description.mounting.position?.[0] || 0) / 1000,\n (this.description.mounting.position?.[1] || 0) / 1000,\n (this.description.mounting.position?.[2] || 0) / 1000,\n ]\n }\n\n /** Gets the robot mounting position rotation in 3D viz coordinates */\n get mountingQuaternion() {\n const rotationVector = new THREE.Vector3(\n this.description.mounting?.orientation?.[0] || 0,\n this.description.mounting?.orientation?.[1] || 0,\n this.description.mounting?.orientation?.[2] || 0,\n )\n\n const magnitude = rotationVector.length()\n const axis = rotationVector.normalize()\n\n return new THREE.Quaternion().setFromAxisAngle(axis, magnitude)\n }\n\n /**\n * Whether the controller is currently in a safety state\n * corresponding to an emergency stop\n */\n get isEstopActive() {\n const estopStates: SafetyStateType[] = [\n \"SAFETY_STATE_ROBOT_EMERGENCY_STOP\",\n \"SAFETY_STATE_DEVICE_EMERGENCY_STOP\",\n ]\n\n return estopStates.includes(this.controllerState.safety_state)\n }\n\n /**\n * Whether the controller is in a safety state\n * that may be non-functional for robot pad purposes\n */\n get isMoveableSafetyState() {\n const goodSafetyStates: SafetyStateType[] = [\n \"SAFETY_STATE_NORMAL\",\n \"SAFETY_STATE_REDUCED\",\n ]\n\n return goodSafetyStates.includes(this.controllerState.safety_state)\n }\n\n /**\n * Whether the controller is in an operation mode that allows movement\n */\n get isMoveableOperationMode() {\n const goodOperationModes: OperationMode[] = [\n \"OPERATION_MODE_AUTO\",\n \"OPERATION_MODE_MANUAL\",\n \"OPERATION_MODE_MANUAL_T1\",\n \"OPERATION_MODE_MANUAL_T2\",\n ]\n\n return goodOperationModes.includes(this.controllerState.operation_mode)\n }\n\n /**\n * Whether the robot is currently active and can be moved, based on the\n * safety state, operation mode and servo toggle activation state.\n */\n get canBeMoved() {\n return (\n this.isMoveableSafetyState &&\n this.isMoveableOperationMode &&\n this.activationState === \"active\"\n )\n }\n\n async deactivate() {\n if (this.activationState !== \"active\") {\n console.error(\"Tried to deactivate while already deactivating\")\n return\n }\n\n runInAction(() => {\n this.activationState = \"deactivating\"\n })\n\n try {\n await this.nova.api.controller.setDefaultMode(\n this.controllerId,\n \"ROBOT_SYSTEM_MODE_MONITOR\",\n )\n\n runInAction(() => {\n this.activationState = \"inactive\"\n })\n } catch (err) {\n runInAction(() => {\n this.activationState = \"active\"\n })\n throw err\n }\n }\n\n async activate() {\n if (this.activationState !== \"inactive\") {\n console.error(\"Tried to activate while already activating\")\n return\n }\n\n runInAction(() => {\n this.activationState = \"activating\"\n })\n\n try {\n await this.nova.api.controller.setDefaultMode(\n this.controllerId,\n \"ROBOT_SYSTEM_MODE_CONTROL\",\n )\n\n runInAction(() => {\n this.activationState = \"active\"\n })\n } catch (err) {\n runInAction(() => {\n this.activationState = \"inactive\"\n })\n throw err\n }\n }\n\n toggleActivation() {\n if (this.activationState === \"inactive\") {\n this.activate()\n } else if (this.activationState === \"active\") {\n this.deactivate()\n }\n }\n\n dispose() {\n this.motionStateSocket.close()\n if (this.connectedJoggingSocket) this.connectedJoggingSocket.close()\n }\n\n setJoggingVelocity(velocity: number) {\n this.joggingVelocity = velocity\n }\n}\n","import { createTheme, rgbToHex, type Theme } from \"@mui/material\"\n\nexport function createDarkTheme(): Theme {\n const baseTheme = createTheme({\n palette: {\n mode: \"dark\",\n text: {\n primary: \"rgba(255, 255, 255, 1)\",\n secondary: \"rgba(255, 255, 255, 0.7)\",\n disabled: \"rgba(255, 255, 255, 0.38)\",\n },\n primary: {\n main: \"rgba(142, 86, 252, 1)\",\n dark: \"rgba(136, 58, 255, 1)\",\n light: \"rgba(157, 131, 246, 1)\",\n contrastText: \"rgba(255, 255, 255, 0.87)\",\n },\n secondary: {\n main: \"rgba(255, 255, 255, 1)\",\n dark: \"rgba(255, 255, 255, 0.06)\",\n contrastText: \"rgba(255, 255, 255, 0.87)\",\n },\n tertiary: {\n main: \"rgba(100, 255, 218, 1)\",\n dark: \"rgba(38, 166, 154, 1)\",\n light: \"rgba(167, 255, 235, 1)\",\n contrastText: \"rgba(0, 0, 0, 1)\",\n },\n error: {\n main: \"rgba(239, 83, 80, 1)\",\n dark: \"rgba(229, 57, 53, 1)\",\n light: \"rgba(239, 154, 154, 1)\",\n contrastText: \"rgba(255, 255, 255, 1)\",\n },\n warning: {\n main: \"rgba(255, 171, 64, 1)\",\n dark: \"rgba(255, 145, 0, 1)\",\n light: \"rgba(255, 209, 128, 1)\",\n contrastText: \"rgba(0, 0, 0, 0.87)\",\n },\n success: {\n main: \"rgba(38, 166, 154, 1)\",\n dark: \"rgba(0, 121, 107, 1)\",\n light: \"rgba(128, 203, 196, 1)\",\n contrastText: \"rgba(255, 255, 255, 0.87)\",\n },\n background: {\n default: \"rgba(2, 6, 23, 1)\",\n paper: \"rgba(17, 19, 31, 1)\",\n },\n action: {\n active: \"rgba(255, 255, 255, 0.56)\",\n hover: \"rgba(255, 255, 255, 0.08)\",\n selected: \"rgba(255, 255, 255, 0.16)\",\n disabledBackground: \"rgba(255, 255, 255, 0.12)\",\n focus: \"rgba(255, 255, 255, 0.12)\",\n disabled: \"rgba(255, 255, 255, 0.38)\",\n },\n common: {\n white: \"rgba(255, 255, 255, 1)\",\n black: \"rgba(0, 0, 0, 1)\",\n },\n divider: \"rgba(255, 255, 255, 0.12)\",\n backgroundPaperElevation: {\n 0: \"rgba(17,19,31,1.0)\",\n 1: \"rgba(20,22,35,1.0)\",\n 2: \"rgba(23,25,39,1.0)\",\n 3: \"rgba(26,28,43,1.0)\",\n 4: \"rgba(29,31,47,1.0)\",\n 5: \"rgba(32,34,51,1.0)\",\n 6: \"rgba(35,37,55,1.0)\",\n 7: \"rgba(38,40,59,1.0)\",\n 8: \"rgba(41,43,63,1.0)\",\n 9: \"rgba(44,46,67,1.0)\",\n 10: \"rgba(47,49,71,1.0)\",\n 11: \"rgba(50,52,75,1.0)\",\n 12: \"rgba(53,55,79,1.0)\",\n 13: \"rgba(56,58,83,1.0)\",\n 14: \"rgba(59,61,87,1.0)\",\n 15: \"rgba(62,64,91,1.0)\",\n 16: \"rgba(57,63,87,1.0)\",\n },\n },\n paletteExt: {\n primary: {\n hover: \"rgba(142, 86, 252, 0.08)\",\n selected: \"rgba(142, 86, 252, 0.16)\",\n focus: \"rgba(142, 86, 252, 0.12)\",\n focusVisible: \"rgba(142, 86, 252, 0.3)\",\n outlineBorder: \"rgba(142, 86, 252, 0.5)\",\n },\n secondary: {\n tonal: \"rgba(255,255,255,0.1)\",\n },\n },\n })\n\n return {\n ...baseTheme,\n components: {\n MuiCssBaseline: {\n styleOverrides: {\n \"html, body, *\": {\n scrollbarWidth: \"none\",\n msOverflowStyle: \"none\",\n },\n\n \"html:hover, body:hover, *:hover\": {\n scrollbarWidth: \"thin\",\n scrollbarColor: `${baseTheme.palette.divider} transparent`,\n },\n\n // Global styles for DataGrid filter popup\n \".MuiDataGrid-panelContent\": {\n borderRadius: \"16px !important\",\n \"& .MuiPaper-root\": {\n borderRadius: \"16px !important\",\n },\n },\n \".MuiDataGrid-filterForm\": {\n borderRadius: \"16px !important\",\n \"& .MuiInputBase-root\": {\n borderRadius: \"16px !important\",\n \"& fieldset\": {\n borderRadius: \"16px !important\",\n },\n \"& .MuiOutlinedInput-notchedOutline\": {\n borderRadius: \"16px !important\",\n },\n },\n \"& .MuiTextField-root\": {\n \"& .MuiInputBase-root\": {\n borderRadius: \"16px !important\",\n \"& fieldset\": {\n borderRadius: \"16px !important\",\n },\n \"& .MuiOutlinedInput-notchedOutline\": {\n borderRadius: \"16px !important\",\n },\n },\n },\n },\n \".MuiDataGrid-filterFormValueInput\": {\n \"& .MuiInputBase-root\": {\n borderRadius: \"16px !important\",\n \"& fieldset\": {\n borderRadius: \"16px !important\",\n },\n \"& .MuiOutlinedInput-notchedOutline\": {\n borderRadius: \"16px !important\",\n },\n },\n },\n },\n },\n MuiDataGrid: {\n styleOverrides: {\n root: {\n // Main DataGrid styling can go here if needed\n },\n panelContent: {\n borderRadius: \"16px !important\",\n },\n filterForm: {\n \"& .MuiInputBase-root\": {\n borderRadius: \"10px !important\",\n \"& fieldset\": {\n borderRadius: \"10px !important\",\n },\n \"& .MuiOutlinedInput-notchedOutline\": {\n borderRadius: \"10px !important\",\n },\n },\n },\n filterFormValueInput: {\n \"& .MuiInputBase-root\": {\n borderRadius: \"10px !important\",\n \"& fieldset\": {\n borderRadius: \"10px !important\",\n },\n \"& .MuiOutlinedInput-notchedOutline\": {\n borderRadius: \"10px !important\",\n },\n },\n },\n },\n },\n MuiButton: {\n styleOverrides: {\n root: {\n textTransform: \"none\",\n borderRadius: \"10px\",\n },\n },\n variants: [\n {\n props: { color: \"secondary\", variant: \"contained\" },\n style: {\n border: `1px solid ${baseTheme.palette.divider}`,\n background: baseTheme.paletteExt?.secondary?.tonal?.toString(),\n },\n },\n {\n props: { color: \"secondary\", variant: \"outlined\" },\n style: {\n border: `1px solid ${baseTheme.palette.divider}`,\n },\n },\n ],\n },\n MuiTab: {\n styleOverrides: {\n root: {\n textTransform: \"none\",\n color: baseTheme.palette.text.secondary,\n \"&.Mui-selected\": {\n color: baseTheme.palette.text.primary,\n },\n },\n },\n },\n MuiTabs: {\n styleOverrides: {\n root: {\n background: baseTheme.palette.backgroundPaperElevation?.[1],\n },\n },\n },\n MuiToggleButtonGroup: {\n styleOverrides: {\n root: {\n \".MuiToggleButtonGroup-firstButton\": {\n borderRadius: \"10px 0 0 10px\",\n },\n \".MuiToggleButtonGroup-lastButton\": {\n borderRadius: \"0 10px 10px 0\",\n },\n },\n },\n },\n MuiToggleButton: {\n styleOverrides: {\n root: {\n textTransform: \"none\",\n padding: \"6px 16px\",\n },\n },\n },\n MuiSelect: {\n variants: [\n {\n props: { variant: \"filled\" },\n style: {\n borderRadius: \"10px\",\n \"::before, ::after\": {\n visibility: \"collapse\",\n },\n \".MuiInputBase-input\": {\n padding: \"6px 16px\",\n borderRadius: \"10px\",\n },\n },\n },\n ],\n },\n MuiDrawer: {\n styleOverrides: {\n paper: {\n border: \"none\",\n boxShadow: \"4px 0 8px -4px rgba(0, 0, 0, 0.3)\",\n },\n },\n },\n MuiFab: {\n styleOverrides: {\n root: {\n background: baseTheme.paletteExt?.secondary?.tonal,\n },\n },\n variants: [\n {\n props: { color: \"primary\" },\n style: {\n background: baseTheme.palette.primary.main,\n },\n },\n ],\n },\n },\n\n componentsExt: {\n JoggingPanel: {\n JoggingCartesian: {\n Axis: {\n X: {\n backgroundColor: \"rgba(215, 66, 56, 1)\",\n borderColor: \"rgba(215, 66, 56, 1)\",\n buttonBackgroundColor: {\n default: \"rgba(241, 77, 66, 1)\",\n pressed: \"rgba(138, 41, 35, 1)\",\n hovered: \"rgba(241, 77, 66, 1)\",\n disabled: \"rgba(241, 77, 66, 1)\",\n },\n color: \"rgba(255, 198, 198, 1)\",\n labelColor: baseTheme.palette.text.primary,\n },\n Y: {\n backgroundColor: \"rgba(20, 151, 108, 1)\",\n borderColor: \"rgba(20, 151, 108, 1)\",\n buttonBackgroundColor: {\n default: \"rgba(28, 188, 135, 1)\",\n pressed: \"rgba(11, 89, 63, 1)\",\n disabled: \"rgba(28, 188, 135, 1)\",\n hovered: \"rgba(28, 188, 135, 1)\",\n },\n color: \"rgba(215, 255, 242, 1)\",\n labelColor: baseTheme.palette.text.primary,\n },\n Z: {\n backgroundColor: \"rgba(1, 87, 155, 1)\",\n borderColor: \"rgba(1, 87, 155, 1)\",\n buttonBackgroundColor: {\n default: \"rgba(2, 136, 209, 1)\",\n pressed: \"rgba(2, 64, 114, 1)\",\n disabled: \"rgba(2, 136, 209, 1)\",\n hovered: \"rgba(2, 136, 209, 1)\",\n },\n color: \"rgba(210, 239, 255, 1)\",\n labelColor: baseTheme.palette.text.primary,\n },\n },\n },\n JoggingJoint: {\n Joint: {\n arrowColor: baseTheme.palette.text.primary,\n },\n },\n VelocitySlider: {\n sliderLegendColor: baseTheme.palette.text.primary,\n },\n },\n WandelscriptEditor: {\n monacoTheme: {\n base: \"vs-dark\",\n inherit: true,\n rules: [\n {\n token: \"keyword\",\n foreground: \"#b349a9ff\",\n },\n ],\n colors: {\n \"editor.background\": rgbToHex(\n baseTheme.palette.backgroundPaperElevation?.[5] ?? \"\",\n ),\n \"editor.foreground\": \"#d4d4d4\",\n \"editorLineNumber.foreground\": \"#797979\",\n \"editorLineNumber.activeForeground\": \"#e9e9e9\",\n \"editor.lineHighlightBorder\": \"#e9e9e911\",\n },\n },\n },\n },\n } as Theme\n}\n","import { createDarkTheme } from \"./createDarkTheme\"\n\nexport function createLightTheme() {\n // Keep the dark theme until we support a light theme\n const theme = createDarkTheme()\n theme.palette.mode = \"light\"\n return theme\n}\n","\"use client\"\n\nimport {\n createTheme,\n type Theme,\n type ThemeOptions,\n} from \"@mui/material/styles\"\nimport { createDarkTheme } from \"./createDarkTheme\"\nimport { createLightTheme } from \"./createLightTheme\"\n\n/**\n * Create the default Wandelbots Nova Material UI theme, overriding\n * any defaults with the provided theme options.\n */\nexport function createNovaMuiTheme(opts: ThemeOptions): Theme {\n let isDark = true\n if (opts.palette?.mode === \"light\") {\n isDark = false\n } else if (opts.palette?.mode !== \"dark\") {\n const browserPrefersLight =\n typeof window !== \"undefined\" &&\n window.matchMedia?.(\"(prefers-color-scheme: light)\")?.matches\n isDark = !browserPrefersLight\n }\n\n const baseTheme = isDark ? createDarkTheme() : createLightTheme()\n\n return createTheme(baseTheme, opts)\n}\n"],"names":["DropdownArrowIcon","props","jsx","SvgIcon","AppHeader","externalizeComponent","observer","appIcon","appName","apps","onAppSelect","disabled","sx","anchorEl","setAnchorEl","useState","isMenuOpen","handleMenuOpen","event","handleMenuClose","handleAppSelect","app","jsxs","Fragment","AppBar","Toolbar","Box","Typography","IconButton","theme","alpha","Backdrop","Menu","MenuItem","LogStore","message","level","logMessage","makeObservable","observable","action","createLogMessage","id","createDebugMessage","createInfoMessage","createWarningMessage","createErrorMessage","LogViewer","messages","onClear","height","useTheme","scrollContainerRef","useRef","useEffect","scrollContainer","timeoutId","formatTimestamp","timestamp","getMessageColor","LogMessage","isExpanded","setIsExpanded","copyTooltip","setCopyTooltip","isHovered","setIsHovered","isLongMessage","handleCopy","err","displayMessage","ContentCopy","ExpandLess","ExpandMore","Paper","_a","DocumentIcon","Button","LogPanel","externalStore","onStoreReady","logViewerProps","onStoreReadyRef","store","useMemo","logStore","handleClear","getBaseUrl","currentUrl","NoMotionGroupModal","baseUrl","Dialog","DialogTitle","DialogContent","DialogActions","Stack","ErrorIcon","createSvgIcon","_jsx","SvgRobot","title","titleId","ref","React","ForwardRef","forwardRef","RobotSetupReadinessState","RobotSetupReadinessIndicator","setupState","className","t","useTranslation","getStateInfo","_b","_c","_d","_e","_f","_g","label","indicatorColor","backgroundColor","textColor","Chip","RobotListItem","robotName","robotType","PreconditionComponent","displayRobotType","isReady","RobotIcon","Divider","SvgControllerTypePhysical","SvgControllerTypeVirtual","IndicatorWithExplanation","icon","color","name","explanation","literalValue","anchorOrigin","transformOrigin","state","useLocalObservable","Popover","ControllerTypeIndicator","isVirtual","motionGroupId","compact","ControllerTypeVirtualIcon","Trans","ControllerTypePhysicalIcon","SvgOperationModeAutomatic","SvgOperationModeError","SvgOperationModeManual","OperationModeIndicator","operationMode","OperationModeAutomaticIcon","OperationModeManualIcon","OperationModeErrorIcon","SvgSafetyStateError","SvgSafetyStateEstop","SvgSafetyStateManualActionRequired","SvgSafetyStateNormal","SvgSafetyStateStop","SafetyStateIndicator","safetyState","SafetyStateNormalIcon","SafetyStateEstopIcon","SafetyStateStopIcon","SafetyStateManualActionRequiredIcon","SafetyStateErrorIcon","assertUnreachable","SafetyBar","gap","StyledSelectableFab","styled","Fab","prop","selected","SelectableFab","otherProps","TabPanel","children","value","index","other","TabWrapper","fullWidth","indicator","onChange","orientation","scrollButtons","selectionFollowsFocus","variant","cleanProps","TabBar","items","activeTab","defaultActiveTab","onTabChange","isControlled","uncontrolledActiveTab","setUncontrolledActiveTab","currentValue","handleTabChange","_event","newValue","Tabs","item","getBadgeContent","content","max","shouldShowBadge","showZero","badgeContent","showBadge","handleTabClick","tab","Tab","Badge","wandelscriptTextmateGrammar","Editor","lazy","preparedShiki","getShiki","createHighlighter","shikiToMonaco","WandelscriptEditor","activeShikiTheme","setActiveShikiTheme","targetShikiTheme","setupEditor","monaco","shiki","Suspense","LoadingCover","_editor","MOTION_DELTA_THRESHOLD","EMPTY_DH_PARAMETER","ConnectedMotionGroup","nova","controller","motionGroup","initialMotionState","motionStateSocket","tcps","description","initialControllerState","controllerStateSocket","data","tryParseJson","runInAction","latestMotionState","jointValuesEqual","tcpMotionEqual","makeAutoObservable","motionGroupIds","_motionGroupIndex","controllerId","mg","firstMessage","tcp","firstControllerMessage","num","_","i","dh_param","rotationVector","THREE","magnitude","axis","velocity","createDarkTheme","baseTheme","createTheme","rgbToHex","createLightTheme","createNovaMuiTheme","opts","isDark"],"mappings":"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","x_google_ignoreList":[6]}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
"use strict";var J=Object.create;var $=Object.defineProperty;var K=Object.getOwnPropertyDescriptor;var Q=Object.getOwnPropertyNames;var X=Object.getPrototypeOf,ee=Object.prototype.hasOwnProperty;var te=(t,e,o,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Q(e))!ee.call(t,n)&&n!==o&&$(t,n,{get:()=>e[n],enumerable:!(a=K(e,n))||a.enumerable});return t};var F=(t,e,o)=>(o=t!=null?J(X(t)):{},te(e||!t||!t.__esModule?$(o,"default",{value:t,enumerable:!0}):o,t));const r=require("./externalizeComponent-C12Qf79R.cjs"),s=require("@mui/material"),y=require("mobx-react-lite"),b=require("react"),f=require("mobx"),B=require("@mui/icons-material"),Y=require("./createSvgIcon-BG4_bQuX.cjs"),E=require("react-i18next"),P=require("./VelocitySlider-2Zme2MN7.cjs"),I=require("@wandelbots/nova-js"),oe=require("three");function H(t){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const o in t)if(o!=="default"){const a=Object.getOwnPropertyDescriptor(t,o);Object.defineProperty(e,o,a.get?a:{enumerable:!0,get:()=>t[o]})}}return e.default=t,Object.freeze(e)}const x=H(b),V=H(oe),re=t=>r.jsxRuntimeExports.jsx(s.SvgIcon,{...t,viewBox:"0 0 10 8",children:r.jsxRuntimeExports.jsx("path",{d:"M8.825 0.9125L5 4.72917L1.175 0.9125L0 2.0875L5 7.0875L10 2.0875L8.825 0.9125Z",fill:"currentColor",fillOpacity:"0.56"})}),ae=r.externalizeComponent(y.observer(t=>{const{appIcon:e,appName:o,apps:a=[],onAppSelect:n,disabled:i=!1,sx:c}=t,[d,g]=b.useState(null),h=!!d,m=p=>{g(p.currentTarget)},u=()=>{g(null)},l=p=>{u(),p.onClick?p.onClick():p.href&&(window.location.href=p.href),n==null||n(p)};return r.jsxRuntimeExports.jsxs(r.jsxRuntimeExports.Fragment,{children:[r.jsxRuntimeExports.jsx(s.AppBar,{position:"static",sx:{boxShadow:"none",backgroundImage:"none","& .MuiAppBar-root":{backgroundImage:"none",backgroundColor:"transparent"},...c},children:r.jsxRuntimeExports.jsxs(s.Toolbar,{sx:{minHeight:"62px !important"},children:[r.jsxRuntimeExports.jsx(s.Box,{sx:{mr:1,display:"flex",alignItems:"center"},children:e}),r.jsxRuntimeExports.jsxs(s.Box,{sx:{display:"flex",alignItems:"center",flexGrow:1},children:[r.jsxRuntimeExports.jsx(s.Typography,{component:"h1",sx:{fontWeight:"bold",fontSize:"1rem"},children:o}),a.length>0&&r.jsxRuntimeExports.jsx(s.IconButton,{color:"inherit","aria-label":"switch app","aria-controls":"app-menu","aria-haspopup":"true",onClick:m,disabled:i,sx:{ml:1,width:28,height:28,borderRadius:"6px",padding:0,backgroundColor:p=>s.alpha(p.palette.common.white,.1),opacity:1,"&:hover":{backgroundColor:p=>s.alpha(p.palette.common.white,.16)},"& .MuiSvgIcon-root":{fontSize:"8px",width:"8px",height:"6px"}},children:r.jsxRuntimeExports.jsx(re,{})})]})]})}),r.jsxRuntimeExports.jsx(s.Backdrop,{open:h,onClick:u,sx:{backdropFilter:"blur(4px)",backgroundColor:"rgba(0, 0, 0, 0.3)",zIndex:p=>p.zIndex.modal-1}}),r.jsxRuntimeExports.jsx(s.Menu,{id:"app-menu",anchorEl:d,open:h,onClose:u,anchorOrigin:{vertical:"bottom",horizontal:"left"},transformOrigin:{vertical:"top",horizontal:"left"},sx:{zIndex:p=>p.zIndex.modal,"& .MuiPaper-root":{minWidth:200,mt:1}},children:a.map(p=>r.jsxRuntimeExports.jsxs(s.MenuItem,{onClick:()=>l(p),children:[r.jsxRuntimeExports.jsx(s.Box,{sx:{display:"flex",alignItems:"center"},children:p.icon}),r.jsxRuntimeExports.jsx(s.Typography,{variant:"body1",sx:{ml:2},children:p.name})]},p.id))})]})}));class W{constructor(){this.messages=[],this.addMessage=(e,o="info")=>{const a={id:Math.random().toString(36).substring(2,11),timestamp:new Date,message:e,level:o};this.messages.push(a)},this.clearMessages=()=>{this.messages=[]},this.addInfo=e=>{this.addMessage(e,"info")},this.addWarning=e=>{this.addMessage(e,"warning")},this.addError=e=>{this.addMessage(e,"error")},this.addDebug=e=>{this.addMessage(e,"debug")},f.makeObservable(this,{messages:f.observable,addMessage:f.action,clearMessages:f.action})}}const O=(t,e,o)=>({id:o||`${Date.now()}-${Math.random().toString(36).substring(2,11)}`,timestamp:new Date,message:t,level:e}),ne=(t,e)=>O(t,"debug",e),ie=(t,e)=>O(t,"info",e),se=(t,e)=>O(t,"warning",e),le=(t,e)=>O(t,"error",e),U=r.externalizeComponent(y.observer(t=>{var m;const{messages:e=[],onClear:o,height:a=400,sx:n}=t,i=s.useTheme(),c=b.useRef(null);b.useEffect(()=>{if(e.length===0)return;const u=c.current;if(!u)return;const l=setTimeout(()=>{u.scrollTop=u.scrollHeight},10);return()=>clearTimeout(l)},[e.length]);const d=u=>u.toLocaleTimeString("en-US",{hour12:!1,hour:"2-digit",minute:"2-digit",second:"2-digit"}),g=u=>{switch(u){case"error":return i.palette.error.main;case"warning":return i.palette.warning.main;case"info":return i.palette.info.main;case"debug":return i.palette.text.disabled;default:return i.palette.text.secondary}},h=({message:u})=>{const[l,p]=b.useState(!1),[j,S]=b.useState(!1),[w,k]=b.useState(!1),A=u.message.length>150,M=async()=>{try{await navigator.clipboard.writeText(u.message),S(!0),setTimeout(()=>S(!1),2e3)}catch(_){console.error("Failed to copy message:",_)}},C=A&&!l?u.message.substring(0,150)+"...":u.message;return r.jsxRuntimeExports.jsx(s.Box,{onMouseEnter:()=>k(!0),onMouseLeave:()=>k(!1),sx:{display:"flex",gap:1,fontFamily:"monospace",flexDirection:"column","&:hover":{backgroundColor:i.palette.action.hover},borderRadius:"4px",padding:"2px 4px",margin:"-2px -4px"},children:r.jsxRuntimeExports.jsxs(s.Box,{sx:{display:"flex",gap:1},children:[r.jsxRuntimeExports.jsxs(s.Typography,{component:"span",sx:{fontWeight:400,fontSize:"12px",lineHeight:"18px",letterSpacing:"0.4px",color:i.palette.text.disabled,whiteSpace:"nowrap",flexShrink:0},children:["[",d(u.timestamp),"]"]}),r.jsxRuntimeExports.jsx(s.Typography,{component:"span",sx:{fontWeight:400,fontSize:"12px",lineHeight:"18px",letterSpacing:"0.4px",color:g(u.level),wordBreak:"break-word",overflowWrap:"anywhere",hyphens:"auto",flex:1,whiteSpace:"pre-wrap"},children:C}),r.jsxRuntimeExports.jsxs(s.Box,{sx:{display:"flex",alignItems:"flex-start",gap:.5,opacity:w?1:0,transition:"opacity 0.2s ease-in-out",visibility:w?"visible":"hidden"},children:[r.jsxRuntimeExports.jsx(s.IconButton,{size:"small",onClick:M,sx:{padding:"2px",color:i.palette.text.secondary,"&:hover":{backgroundColor:i.palette.action.hover}},title:j?"Copied!":"Copy message",children:r.jsxRuntimeExports.jsx(B.ContentCopy,{sx:{fontSize:12}})}),A&&r.jsxRuntimeExports.jsx(s.IconButton,{size:"small",onClick:()=>p(!l),sx:{padding:"2px",color:i.palette.text.secondary,"&:hover":{backgroundColor:i.palette.action.hover}},title:l?"Collapse":"Expand",children:l?r.jsxRuntimeExports.jsx(B.ExpandLess,{sx:{fontSize:12}}):r.jsxRuntimeExports.jsx(B.ExpandMore,{sx:{fontSize:12}})})]})]})},u.id)};return r.jsxRuntimeExports.jsxs(s.Paper,{sx:{backgroundColor:((m=i.palette.backgroundPaperElevation)==null?void 0:m[2])||"#171927",backgroundImage:"none",height:a,display:"flex",flexDirection:"column",overflow:"hidden",...n},children:[r.jsxRuntimeExports.jsxs(s.Box,{sx:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"12px 16px"},children:[r.jsxRuntimeExports.jsxs(s.Box,{sx:{display:"flex",alignItems:"center",gap:1},children:[r.jsxRuntimeExports.jsx(B.DescriptionOutlined,{sx:{fontSize:16,color:i.palette.action.active,opacity:.56}}),r.jsxRuntimeExports.jsx(s.Typography,{sx:{fontWeight:500,fontSize:"14px",lineHeight:"143%",letterSpacing:"0.17px",color:i.palette.text.primary},children:"Log"})]}),r.jsxRuntimeExports.jsx(s.Button,{onClick:o,variant:"text",sx:{fontWeight:500,fontSize:"13px",lineHeight:"22px",letterSpacing:"0.46px",color:i.palette.primary.main,textTransform:"none",minWidth:"auto",padding:"4px 8px","&:hover":{backgroundColor:i.palette.primary.main+"14"}},children:"Clear"})]}),r.jsxRuntimeExports.jsx(s.Box,{ref:c,sx:{flex:1,overflow:"auto",padding:"8px 16px",display:"flex",flexDirection:"column",gap:"2px",scrollbarWidth:"thin",scrollbarColor:`${i.palette.divider} transparent`,"&::-webkit-scrollbar":{width:"6px"},"&::-webkit-scrollbar-track":{background:"transparent"},"&::-webkit-scrollbar-thumb":{backgroundColor:i.palette.divider,borderRadius:"3px","&:hover":{backgroundColor:i.palette.divider}}},children:e.length===0?r.jsxRuntimeExports.jsx(s.Typography,{sx:{color:i.palette.text.disabled,fontSize:"12px",fontStyle:"italic",textAlign:"center",marginTop:2},children:"No log messages"}):e.map(u=>r.jsxRuntimeExports.jsx(h,{message:u},u.id))})]})})),ce=r.externalizeComponent(y.observer(t=>{const{store:e,onStoreReady:o,...a}=t,n=b.useRef(o);b.useEffect(()=>{n.current=o},[o]);const i=b.useMemo(()=>{var g;const d=e||new W;return(g=n.current)==null||g.call(n,d),d},[e]),c=()=>{i.clearMessages()};return r.jsxRuntimeExports.jsx(U,{...a,messages:i.messages,onClear:c})}));function pe(){const t=window.location.href;return t.substring(0,t.indexOf("/",t.indexOf("//")+2))}function de({baseUrl:t=pe(),...e}){return r.jsxRuntimeExports.jsxs(s.Dialog,{"aria-labelledby":"no-motion-group-modal-title",open:!0,fullWidth:!0,sx:{"& .MuiModal-backdrop":{backdropFilter:"blur(10px)"},"& .MuiDialog-paper":{"::before":{content:'""',height:"8px",width:"100%",background:"linear-gradient(90deg, #FF0E65 0%, #47D3FF 100%)"},background:"#101629"}},children:[r.jsxRuntimeExports.jsx(s.DialogTitle,{id:"no-motion-group-modal-title",children:"No motion group found"}),r.jsxRuntimeExports.jsxs(s.DialogContent,{sx:{marginTop:"3rem",marginBottom:"1.5rem",textAlign:"center"},children:[r.jsxRuntimeExports.jsx(s.Typography,{color:"#fff",children:"Found no devices to connect to."}),r.jsxRuntimeExports.jsx(s.Typography,{color:"#fff",children:"Please ensure a motion group has been created."})]}),r.jsxRuntimeExports.jsx(s.DialogActions,{children:r.jsxRuntimeExports.jsxs(s.Stack,{width:"100%",maxWidth:"300px",margin:"auto",marginBottom:"2rem",children:[r.jsxRuntimeExports.jsx(s.Button,{href:`${t}/settings`,variant:"contained",sx:{borderRadius:"8px",width:"100%"},children:"Go to settings app"}),r.jsxRuntimeExports.jsx(s.Button,{href:`${t}`,variant:"text",sx:{marginTop:"1rem",color:"#fff",textDecoration:"underline",fontSize:"0.75rem"},children:"Back to Homescreen"})]})})]})}const ue=Y.createSvgIcon(r.jsxRuntimeExports.jsx("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m1 15h-2v-2h2zm0-4h-2V7h2z"}),"Error"),xe=({title:t,titleId:e,...o},a)=>x.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:18,height:18,fill:"none",ref:a,"aria-labelledby":e,...o},t?x.createElement("title",{id:e},t):null,x.createElement("path",{fill:"#38C6F4",fillRule:"evenodd",d:"M6.359 14.25v2.934h7.63v-3.521L10.196 9.87 9 8.674l.859-.859.337-.337.858-.858.565.565.631.63.565.565 1.196-1.195.543-.544 1.196-1.195-1.196-1.196-2.304-2.304L11.054.75 9.86 1.946 3.446 8.359 2.25 9.554l1.196 1.196 2.913 2.913zm1.69 0v1.244h4.249v-1.13L7.804 9.87 6.608 8.674l1.196-1.196L9.86 5.424l.007-.008-.543-.543-4.681 4.681 2.912 2.913.496.496v.113h2.124l1.174 1.174zm3.005-10.022-.294.294-.543-.543.837-.837 2.304 2.304-.543.543-.565-.565z",clipRule:"evenodd"})),ge=b.forwardRef(xe);var N=(t=>(t.PRECONDITION_NOT_FULFILLED="PRECONDITION_NOT_FULFILLED",t.ROBOT_DISCONNECTED="ROBOT_DISCONNECTED",t.CELL_OPEN="CELL_OPEN",t.E_STOP="E_STOP",t.MANUAL_MODE="MANUAL_MODE",t.READY="READY",t))(N||{});const G=r.externalizeComponent(y.observer(({setupState:t,className:e})=>{const o=s.useTheme(),{t:a}=E.useTranslation(),n=()=>{var h,m,u,l,p,j,S;switch(t){case"READY":return{label:a("RobotSetupReadinessIndicator.Ready.lb"),indicatorColor:((h=o.palette.tertiary)==null?void 0:h.main)||o.palette.primary.main,backgroundColor:((m=o.palette.backgroundPaperElevation)==null?void 0:m[11])||o.palette.background.paper,textColor:o.palette.secondary.contrastText};case"ROBOT_DISCONNECTED":return{label:a("RobotSetupReadinessIndicator.RobotDisconnected.lb"),indicatorColor:o.palette.error.main,backgroundColor:((u=o.palette.backgroundPaperElevation)==null?void 0:u[11])||o.palette.background.paper,textColor:o.palette.secondary.contrastText};case"CELL_OPEN":return{label:a("RobotSetupReadinessIndicator.CellOpen.lb"),indicatorColor:o.palette.error.main,backgroundColor:((l=o.palette.backgroundPaperElevation)==null?void 0:l[11])||o.palette.background.paper,textColor:o.palette.secondary.contrastText};case"E_STOP":return{label:a("RobotSetupReadinessIndicator.EStop.lb"),indicatorColor:o.palette.error.main,backgroundColor:((p=o.palette.backgroundPaperElevation)==null?void 0:p[11])||o.palette.background.paper,textColor:o.palette.secondary.contrastText};case"MANUAL_MODE":return{label:a("RobotSetupReadinessIndicator.ManualMode.lb"),indicatorColor:o.palette.error.main,backgroundColor:((j=o.palette.backgroundPaperElevation)==null?void 0:j[11])||o.palette.background.paper,textColor:o.palette.secondary.contrastText};case"PRECONDITION_NOT_FULFILLED":default:return{label:a("RobotSetupReadinessIndicator.PreconditionNotFulfilled.lb"),indicatorColor:o.palette.error.main,backgroundColor:((S=o.palette.backgroundPaperElevation)==null?void 0:S[11])||o.palette.background.paper,textColor:o.palette.secondary.contrastText}}},{label:i,indicatorColor:c,backgroundColor:d,textColor:g}=n();return r.jsxRuntimeExports.jsx(s.Chip,{className:e,label:r.jsxRuntimeExports.jsxs(s.Box,{sx:{display:"flex",alignItems:"center",gap:1},children:[r.jsxRuntimeExports.jsx(s.Box,{sx:{width:8,height:8,borderRadius:"50%",backgroundColor:c,flexShrink:0}}),r.jsxRuntimeExports.jsx(s.Typography,{variant:"body2",sx:{color:g,fontSize:"0.75rem",lineHeight:1.2},children:i})]}),variant:"filled",sx:{backgroundColor:d,color:o.palette.getContrastText(d),fontWeight:500,height:"auto","& .MuiChip-label":{paddingX:1.5,paddingY:.5}}})})),me=r.externalizeComponent(y.observer(({robotName:t,robotType:e,setupState:o,PreconditionComponent:a=G,className:n})=>{var g;const i=s.useTheme(),c=e||"Robot",d=o===N.READY;return r.jsxRuntimeExports.jsxs(s.Box,{className:n,sx:{border:`1px solid ${i.palette.divider}`,background:((g=i.palette.backgroundPaperElevation)==null?void 0:g[8])||"#292B3F",borderRadius:"8px",padding:"20px",display:"flex",alignItems:"center",justifyContent:"space-between",opacity:1},children:[r.jsxRuntimeExports.jsxs(s.Box,{sx:{display:"flex",alignItems:"center",gap:2,flex:1},children:[d?r.jsxRuntimeExports.jsx(s.Box,{sx:{fontSize:24,display:"flex",alignItems:"center",justifyContent:"center",width:24,height:24,"& svg":{fill:`${i.palette.primary.main} !important`},"& svg path":{fill:`${i.palette.primary.main} !important`}},children:r.jsxRuntimeExports.jsx(ge,{})}):r.jsxRuntimeExports.jsx(ue,{sx:{color:i.palette.error.main,fontSize:24}}),r.jsxRuntimeExports.jsx(s.Typography,{variant:"body1",sx:{fontWeight:500,color:i.palette.text.primary},children:t}),r.jsxRuntimeExports.jsx(s.Divider,{orientation:"vertical",flexItem:!0,sx:{backgroundColor:i.palette.text.secondary,opacity:.3,width:"1px"}}),r.jsxRuntimeExports.jsx(s.Typography,{variant:"body2",sx:{color:i.palette.text.secondary},children:c})]}),a&&r.jsxRuntimeExports.jsx(a,{setupState:o})]})})),he=({title:t,titleId:e,...o},a)=>x.createElement("svg",{width:24,height:24,xmlns:"http://www.w3.org/2000/svg",ref:a,"aria-labelledby":e,...o},t?x.createElement("title",{id:e},t):null,x.createElement("path",{d:"M5.248 21c-.334 0-.619-.116-.853-.35a1.153 1.153 0 0 1-.351-.848c0-.333.117-.616.351-.85.234-.233.519-.35.853-.35H7.24L4.558 9.87a2.881 2.881 0 0 1-1.126-1.042A2.77 2.77 0 0 1 3 7.317c0-.793.28-1.467.838-2.023a2.774 2.774 0 0 1 2.033-.834 2.71 2.71 0 0 1 1.728.585c.494.389.832.887 1.014 1.493h3.58V5.239c0-.22.076-.406.226-.555a.76.76 0 0 1 .558-.224c.136 0 .263.035.381.104.118.07.209.167.273.292v.14l1.835-1.702a.979.979 0 0 1 .52-.279.881.881 0 0 1 .58.091l4.01 1.85a.74.74 0 0 1 .36.364.537.537 0 0 1-.002.474.592.592 0 0 1-.366.323.657.657 0 0 1-.477-.039l-3.858-1.774L13.76 6.59v1.454l2.473 2.233 3.858-1.774a.648.648 0 0 1 .485-.03.571.571 0 0 1 .358.314.513.513 0 0 1 .01.482.79.79 0 0 1-.367.357l-4.011 1.882a.881.881 0 0 1-.58.09.979.979 0 0 1-.52-.278L13.63 9.638v.14a.92.92 0 0 1-.273.275.665.665 0 0 1-.381.12.76.76 0 0 1-.558-.224.752.752 0 0 1-.225-.555V8.096h-3.58a2.82 2.82 0 0 1-.215.54 2.552 2.552 0 0 1-.323.479l5.139 9.488h2.673c.335 0 .62.116.854.35.234.233.35.516.35.849 0 .332-.116.615-.35.849a1.167 1.167 0 0 1-.854.349H5.248Zm.623-12.385c.362 0 .67-.126.924-.378a1.25 1.25 0 0 0 .38-.92 1.25 1.25 0 0 0-.38-.92 1.261 1.261 0 0 0-.924-.379 1.26 1.26 0 0 0-.925.379 1.25 1.25 0 0 0-.38.92c0 .36.127.667.38.92.254.252.562.378.925.378Z"})),be=b.forwardRef(he),fe=({title:t,titleId:e,...o},a)=>x.createElement("svg",{width:24,height:24,xmlns:"http://www.w3.org/2000/svg",ref:a,"aria-labelledby":e,...o},t?x.createElement("title",{id:e},t):null,x.createElement("path",{d:"m13.37 9.12 1.69 1.69 2.99-2.99-3.73-3.73-.95-.95-7.66 7.66-.95.95 3.99 3.99v3.44h7.55v-3.55l-4.72-4.72 1.79-1.79Zm-.91-2.99.91-.91 2.6 2.6-.91.91-2.6-2.6Zm-2.25 10.24h3.74l-1.34-1.34-.04-.04h-2.5l-3.25-3.25 4.59-4.59.92.92L9.5 10.9l5.33 5.33v1.48H10.2v-1.35l.01.01ZM2 2v4.99h1.41V3.4h3.58V2H2ZM22.21 2h-4.98v1.41h3.59v3.58h1.4V2h-.01ZM20.81 20.65h-3.58v1.4h4.98v-4.99h-1.4v3.59ZM3.4 17.06H2v4.98h4.99v-1.4H3.4v-3.58Z"})),Ee=b.forwardRef(fe),R=y.observer(({id:t,icon:e,color:o,title:a,name:n,label:i,explanation:c,literalValue:d,anchorOrigin:g,transformOrigin:h})=>{const m=y.useLocalObservable(()=>({anchorEl:null,get isPopoverOpen(){return!!m.anchorEl},openPopover(u){m.anchorEl=u.currentTarget},closePopover(){m.anchorEl=null}}));return r.jsxRuntimeExports.jsxs(r.jsxRuntimeExports.Fragment,{children:[r.jsxRuntimeExports.jsxs(s.Stack,{"aria-owns":m.isPopoverOpen?t:void 0,"aria-haspopup":"true",onMouseEnter:m.openPopover,onMouseLeave:m.closePopover,direction:"row",spacing:1,sx:{cursor:"pointer"},children:[r.jsxRuntimeExports.jsx(s.SvgIcon,{component:e,sx:{color:o}}),i&&r.jsxRuntimeExports.jsx("div",{style:{color:o},children:i})]}),r.jsxRuntimeExports.jsx(s.Popover,{id:t,sx:{pointerEvents:"none"},open:m.isPopoverOpen,anchorEl:m.anchorEl,anchorOrigin:g??{vertical:"bottom",horizontal:"left"},transformOrigin:h??{vertical:"top",horizontal:"left"},onClose:m.closePopover,disableRestoreFocus:!0,children:r.jsxRuntimeExports.jsxs(s.Stack,{gap:"1rem",padding:2,maxWidth:"450px",sx:{wordWrap:"break-word"},children:[r.jsxRuntimeExports.jsxs("div",{children:[a&&r.jsxRuntimeExports.jsx(s.Typography,{component:"span",fontSize:"14px",children:`${a}: `}),r.jsxRuntimeExports.jsx(s.Typography,{component:"span",color:o,fontWeight:"bold",fontSize:"14px",children:n})]}),r.jsxRuntimeExports.jsx(s.Typography,{fontSize:"14px",children:c}),d&&r.jsxRuntimeExports.jsx(s.Typography,{fontSize:"12px",children:d})]})})]})}),ye=y.observer(({isVirtual:t,motionGroupId:e,anchorOrigin:o,transformOrigin:a,compact:n})=>{const i=s.useTheme(),{t:c}=E.useTranslation();return t?r.jsxRuntimeExports.jsx(R,{id:"motion-group-virtual",icon:Ee,color:i.palette.tertiary.main,name:c("SafetyBar.ControllerType.Virtual.lb"),label:n?null:c("SafetyBar.ControllerType.Virtual.lb"),explanation:r.jsxRuntimeExports.jsxs(E.Trans,{i18nKey:"SafetyBar.MotionGroup.Virtual.Explanation.lb",values:{motionGroupId:e},children:["Motion group ",r.jsxRuntimeExports.jsx("code",{children:e})," refers to a virtual robot with no physical counterpart. It can be freely manipulated without special safety precautions."]}),anchorOrigin:o,transformOrigin:a}):r.jsxRuntimeExports.jsx(R,{id:"motion-group-physical",icon:be,color:i.palette.primary.main,name:c("SafetyBar.ControllerType.Physical.lb"),label:n?null:c("SafetyBar.ControllerType.Physical.lb"),explanation:r.jsxRuntimeExports.jsx(E.Trans,{i18nKey:"SafetyBar.MotionGroup.Physical.Explanation.lb",values:{motionGroupId:e},components:{code:r.jsxRuntimeExports.jsx("code",{}),strong:r.jsxRuntimeExports.jsx("strong",{})}}),anchorOrigin:o,transformOrigin:a})}),ve=({title:t,titleId:e,...o},a)=>x.createElement("svg",{width:24,height:24,xmlns:"http://www.w3.org/2000/svg",ref:a,"aria-labelledby":e,...o},t?x.createElement("title",{id:e},t):null,x.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M15.306 2.768c0-.424.344-.768.768-.768h.406C19.53 2 22 4.551 22 7.699c0 3.237-2.51 5.587-5.31 5.703-.84 1.595-2.478 2.677-4.36 2.677a4.845 4.845 0 0 1-3.146-1.163c-.6 1.783 0 3.922 1.79 4.99 1.929 1.149 4.395.467 5.508-1.524l.212-.378a.75.75 0 1 1 1.308.732l-.231.414c-1.524 2.725-4.9 3.66-7.54 2.085-2.716-1.618-3.432-5.037-2.129-7.599a5.22 5.22 0 0 1-.73-2.677c0-2.192 1.335-4.063 3.212-4.793-1.195-1.427-3.29-1.96-5.08-.892-1.928 1.15-2.589 3.696-1.475 5.687l.231.413a.75.75 0 0 1-1.308.732l-.212-.377c-1.524-2.726-.62-6.211 2.02-7.785 2.716-1.619 5.943-.55 7.44 1.897l.13-.001c2.739 0 4.96 2.292 4.96 5.12 0 .284-.023.563-.066.834 1.795-.354 3.288-1.96 3.288-4.095 0-2.3-1.805-4.163-4.032-4.163h-.406a.768.768 0 0 1-.768-.768Zm.496 8.191c0 .286-.033.564-.094.831a3.62 3.62 0 0 1-.672 1.415 3.425 3.425 0 0 1-2.706 1.338 3.402 3.402 0 0 1-2.384-.98 3.598 3.598 0 0 1-.852-1.306 3.677 3.677 0 0 1-.235-1.298c0-1.623 1.046-2.994 2.48-3.435a3.37 3.37 0 0 1 1.522-.107c1.665.264 2.94 1.75 2.94 3.542Z"})),Se=b.forwardRef(ve),Re=({title:t,titleId:e,...o},a)=>x.createElement("svg",{width:24,height:24,fill:"none",xmlns:"http://www.w3.org/2000/svg",ref:a,"aria-labelledby":e,...o},t?x.createElement("title",{id:e},t):null,x.createElement("path",{d:"M19.763 16.432 13.516 5.864c-.674-1.152-2.358-1.152-3.049 0l-6.23 10.568C3.563 17.567 4.405 19 5.753 19H18.23c1.364 0 2.206-1.432 1.532-2.568ZM12 8.498c.539 0 .96.428.96.938v.066l-.32 4.708a.639.639 0 0 1-.64.592.639.639 0 0 1-.64-.592l-.32-4.708A.953.953 0 0 1 12 8.498Zm0 8.79c-.556 0-1.01-.444-1.01-.987 0-.544.454-.988 1.01-.988s1.01.444 1.01.988c0 .542-.454.987-1.01.987Z",fill:"#fff",fillOpacity:.56})),je=b.forwardRef(Re),Te=({title:t,titleId:e,...o},a)=>x.createElement("svg",{width:24,height:24,fill:"none",xmlns:"http://www.w3.org/2000/svg",ref:a,"aria-labelledby":e,...o},t?x.createElement("title",{id:e},t):null,x.createElement("path",{d:"M12.953 5.09a1.497 1.497 0 0 0-1.653-.518l-1.35.43a1.504 1.504 0 0 0-1.726-.376L2.858 6.97c-.736.321-1.06 1.155-.726 1.862.334.707 1.202 1.02 1.937.698l4.27-1.865 1.466 1.973v.402c0 .873-.627 1.63-1.512 1.827l-2.56.567c-1.329.295-2.27 1.431-2.27 2.74v.107c0 .26.22.469.489.469h11.117c1.329 0 2.618.435 3.656 1.233l1.665 1.28A1 1 0 0 0 22 17.47V11.062c0-.312-.108-.616-.308-.863l-3.415-4.218a1.5 1.5 0 0 0-1.618-.471l-.378.12-.866-.475a1.516 1.516 0 0 0-1.188-.114l-1.06.338-.214-.289Z"})),we=b.forwardRef(Te),Me=y.observer(({operationMode:t,anchorOrigin:e,transformOrigin:o,compact:a})=>{const{t:n}=E.useTranslation(),i=s.useTheme();switch(t){case"OPERATION_MODE_AUTO":return r.jsxRuntimeExports.jsx(R,{id:"operation-mode-auto",icon:Se,title:n("SafetyBar.OperationMode.ti"),name:n("SafetyBar.OperationMode.Automatic.ti"),label:a?null:n("SafetyBar.OperationMode.Automatic.ti"),color:i.palette.text.secondary,explanation:r.jsxRuntimeExports.jsx(E.Trans,{i18nKey:"SafetyBar.OperationMode.Auto.Explanation.lb",children:"The robot controller is in automatic operation mode. Automated movement without manual confirmation is possible in this mode."}),anchorOrigin:e,transformOrigin:o});case"OPERATION_MODE_MANUAL":case"OPERATION_MODE_MANUAL_T1":case"OPERATION_MODE_MANUAL_T2":return r.jsxRuntimeExports.jsx(R,{id:"operation-mode-manual",icon:we,color:i.palette.warning.main,title:n("SafetyBar.OperationMode.ti"),name:n("SafetyBar.OperationMode.Manual.lb"),label:a?null:n("SafetyBar.OperationMode.Manual.lb"),explanation:r.jsxRuntimeExports.jsx(E.Trans,{i18nKey:"SafetyBar.OperationMode.Manual.Explanation.lb",children:"The robot controller is in manual operation mode. On a physical robot, this generally indicates that an enabling switch must be held for the robot to move successfully."}),literalValue:t,anchorOrigin:e,transformOrigin:o});default:return r.jsxRuntimeExports.jsx(R,{id:"operation-mode-error",icon:je,color:i.palette.warning.main,title:n("SafetyBar.OperationMode.ti"),name:n("SafetyBar.OperationMode.Error.lb"),label:a?null:n("SafetyBar.OperationMode.Error.lb"),explanation:r.jsxRuntimeExports.jsx(E.Trans,{i18nKey:"SafetyBar.OperationMode.Error.Explanation.lb",children:"The robot controller has entered an unexpected operation mode. Motion group movement may not be possible."}),literalValue:t,anchorOrigin:e,transformOrigin:o})}}),Ce=({title:t,titleId:e,...o},a)=>x.createElement("svg",{width:24,height:24,xmlns:"http://www.w3.org/2000/svg",ref:a,"aria-labelledby":e,...o},t?x.createElement("title",{id:e},t):null,x.createElement("path",{d:"M19.763 16.432 13.516 5.864c-.674-1.152-2.358-1.152-3.049 0l-6.23 10.568C3.563 17.567 4.405 19 5.753 19H18.23c1.364 0 2.206-1.432 1.532-2.568ZM12 8.498c.539 0 .96.428.96.938v.066l-.32 4.708a.639.639 0 0 1-.64.592.639.639 0 0 1-.64-.592l-.32-4.708A.953.953 0 0 1 12 8.498Zm0 8.79c-.556 0-1.01-.444-1.01-.987 0-.544.454-.988 1.01-.988s1.01.444 1.01.988c0 .542-.454.987-1.01.987Z"})),ke=b.forwardRef(Ce),Ae=({title:t,titleId:e,...o},a)=>x.createElement("svg",{width:24,height:24,xmlns:"http://www.w3.org/2000/svg",ref:a,"aria-labelledby":e,...o},t?x.createElement("title",{id:e},t):null,x.createElement("path",{d:"M10.24 10.636 12 13.764l1.76-3.128h-3.52Z"}),x.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M18.364 12a6.364 6.364 0 1 1-12.728 0 6.364 6.364 0 0 1 12.728 0ZM7.909 9.273 12 16.546l4.09-7.273H7.91Z"}),x.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M22 12c0 5.523-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2s10 4.477 10 10Zm-1.364 0a8.636 8.636 0 1 1-17.273 0 8.636 8.636 0 0 1 17.273 0Z"})),Oe=b.forwardRef(Ae),_e=({title:t,titleId:e,...o},a)=>x.createElement("svg",{width:24,height:24,fill:"none",xmlns:"http://www.w3.org/2000/svg",ref:a,"aria-labelledby":e,...o},t?x.createElement("title",{id:e},t):null,x.createElement("path",{d:"M9.057 15.115c-1.681 0-3.111-.59-4.29-1.768C3.59 12.17 3 10.74 3 9.057c0-.29.021-.582.064-.876a4.1 4.1 0 0 1 .214-.844.78.78 0 0 1 .273-.36c.115-.077.244-.133.389-.168a.857.857 0 0 1 .437.008c.146.04.28.12.4.24l2.806 2.787 2.26-2.261-2.775-2.786a.903.903 0 0 1-.241-.405.875.875 0 0 1-.008-.442 1.13 1.13 0 0 1 .174-.389.82.82 0 0 1 .355-.273c.268-.107.548-.182.838-.224.29-.043.581-.064.871-.064 1.682 0 3.112.59 4.29 1.768 1.179 1.178 1.768 2.608 1.768 4.29 0 .444-.042.858-.126 1.241-.084.384-.21.755-.377 1.113l5.726 5.692A2.2 2.2 0 0 1 21 18.721a2.2 2.2 0 0 1-.662 1.617A2.2 2.2 0 0 1 18.72 21a2.173 2.173 0 0 1-1.617-.679l-5.692-5.709c-.372.161-.75.285-1.133.372-.383.087-.79.13-1.222.13Z",fill:"#fff",fillOpacity:.56})),Be=b.forwardRef(_e),Ie=({title:t,titleId:e,...o},a)=>x.createElement("svg",{width:24,height:24,fill:"none",xmlns:"http://www.w3.org/2000/svg",ref:a,"aria-labelledby":e,...o},t?x.createElement("title",{id:e},t):null,x.createElement("path",{d:"m10.6 13.8-2.15-2.15a.948.948 0 0 0-.7-.275.948.948 0 0 0-.7.275.948.948 0 0 0-.275.7c0 .283.092.517.275.7L9.9 15.9c.2.2.433.3.7.3.267 0 .5-.1.7-.3l5.65-5.65a.948.948 0 0 0 .275-.7.948.948 0 0 0-.275-.7.948.948 0 0 0-.7-.275.948.948 0 0 0-.7.275L10.6 13.8ZM12 22a9.738 9.738 0 0 1-3.9-.788 10.099 10.099 0 0 1-3.175-2.137c-.9-.9-1.612-1.958-2.137-3.175A9.738 9.738 0 0 1 2 12c0-1.383.263-2.683.788-3.9a10.099 10.099 0 0 1 2.137-3.175c.9-.9 1.958-1.612 3.175-2.137A9.738 9.738 0 0 1 12 2c1.383 0 2.683.263 3.9.788a10.098 10.098 0 0 1 3.175 2.137c.9.9 1.613 1.958 2.137 3.175A9.738 9.738 0 0 1 22 12a9.738 9.738 0 0 1-.788 3.9 10.098 10.098 0 0 1-2.137 3.175c-.9.9-1.958 1.613-3.175 2.137A9.738 9.738 0 0 1 12 22Zm0-2c2.233 0 4.125-.775 5.675-2.325C19.225 16.125 20 14.233 20 12c0-2.233-.775-4.125-2.325-5.675C16.125 4.775 14.233 4 12 4c-2.233 0-4.125.775-5.675 2.325C4.775 7.875 4 9.767 4 12c0 2.233.775 4.125 2.325 5.675C7.875 19.225 9.767 20 12 20Z"})),Pe=b.forwardRef(Ie),Le=({title:t,titleId:e,...o},a)=>x.createElement("svg",{width:24,height:24,xmlns:"http://www.w3.org/2000/svg",ref:a,"aria-labelledby":e,...o},t?x.createElement("title",{id:e},t):null,x.createElement("path",{d:"M9 16h6c.283 0 .52-.096.713-.287A.968.968 0 0 0 16 15V9a.967.967 0 0 0-.287-.713A.968.968 0 0 0 15 8H9a.968.968 0 0 0-.713.287A.968.968 0 0 0 8 9v6c0 .283.096.52.287.713.192.191.43.287.713.287Zm3 6a9.738 9.738 0 0 1-3.9-.788 10.099 10.099 0 0 1-3.175-2.137c-.9-.9-1.612-1.958-2.137-3.175A9.738 9.738 0 0 1 2 12c0-1.383.263-2.683.788-3.9a10.099 10.099 0 0 1 2.137-3.175c.9-.9 1.958-1.612 3.175-2.137A9.738 9.738 0 0 1 12 2c1.383 0 2.683.263 3.9.788a10.098 10.098 0 0 1 3.175 2.137c.9.9 1.613 1.958 2.137 3.175A9.738 9.738 0 0 1 22 12a9.738 9.738 0 0 1-.788 3.9 10.098 10.098 0 0 1-2.137 3.175c-.9.9-1.958 1.613-3.175 2.137A9.738 9.738 0 0 1 12 22Zm0-2c2.233 0 4.125-.775 5.675-2.325C19.225 16.125 20 14.233 20 12c0-2.233-.775-4.125-2.325-5.675C16.125 4.775 14.233 4 12 4c-2.233 0-4.125.775-5.675 2.325C4.775 7.875 4 9.767 4 12c0 2.233.775 4.125 2.325 5.675C7.875 19.225 9.767 20 12 20Z"})),Fe=b.forwardRef(Le),De=y.observer(({safetyState:t,anchorOrigin:e,transformOrigin:o,compact:a})=>{const{t:n}=E.useTranslation(),i=s.useTheme();switch(t){case"SAFETY_STATE_NORMAL":return r.jsxRuntimeExports.jsx(R,{id:"safety-state-normal",title:n("SafetyBar.SafetyState.ti"),name:n("SafetyBar.SafetyState.Normal.lb"),label:a?null:n("SafetyBar.SafetyState.Normal.lb"),icon:Pe,color:i.palette.text.secondary,explanation:r.jsxRuntimeExports.jsx(E.Trans,{i18nKey:"SafetyBar.SafetyState.Normal.Explanation.lb",children:"The robot controller is in a normal safety state. Movement is not prevented by this state."}),anchorOrigin:e,transformOrigin:o});case"SAFETY_STATE_DEVICE_EMERGENCY_STOP":case"SAFETY_STATE_ROBOT_EMERGENCY_STOP":return r.jsxRuntimeExports.jsx(R,{id:"safety-state-estop",title:n("SafetyBar.SafetyState.ti"),name:n("SafetyBar.SafetyState.Estop.lb"),label:a?null:n("SafetyBar.SafetyState.Estop.lb"),icon:Oe,color:i.palette.error.main,explanation:r.jsxRuntimeExports.jsx(E.Trans,{i18nKey:"SafetyBar.StopState.Estop.Explanation.lb",children:"An emergency stop of the robot controller has been triggered. Movement of the robot is no longer possible until the estop is released."}),literalValue:t,anchorOrigin:e,transformOrigin:o});case"SAFETY_STATE_STOP_0":case"SAFETY_STATE_STOP_1":case"SAFETY_STATE_STOP_2":case"SAFETY_STATE_PROTECTIVE_STOP":case"SAFETY_STATE_STOP":return r.jsxRuntimeExports.jsx(R,{id:"safety-state-stop",icon:Fe,title:n("SafetyBar.SafetyState.ti"),name:n("SafetyBar.SafetyState.Stop.lb"),label:a?null:n("SafetyBar.SafetyState.Stop.lb"),color:i.palette.warning.main,explanation:r.jsxRuntimeExports.jsx(E.Trans,{i18nKey:"SafetyBar.SafetyState.Stop.Explanation.lb",children:"The robot controller has entered a stop state. Movement is no longer possible until the stop state is resolved."}),literalValue:t,anchorOrigin:e,transformOrigin:o});case"SAFETY_STATE_REDUCED":case"SAFETY_STATE_MASTERING":case"SAFETY_STATE_CONFIRM_SAFETY":case"SAFETY_STATE_OPERATOR_SAFETY":case"SAFETY_STATE_RECOVERY":case"SAFETY_STATE_VIOLATION":return r.jsxRuntimeExports.jsx(R,{id:"safety-state-manual-action-required",icon:Be,color:i.palette.warning.main,title:n("SafetyBar.SafetyState.ti"),name:n("SafetyBar.SafetyState.ManualActionRequired.lb"),label:a?null:n("SafetyBar.SafetyState.ManualActionRequired.lb"),explanation:r.jsxRuntimeExports.jsx(E.Trans,{i18nKey:"SafetyBar.SafetyState.ManualActionRequired.Explanation.lb",children:"The robot controller has entered a safety state requiring manual action to resolve."}),literalValue:t,anchorOrigin:e,transformOrigin:o});case"SAFETY_STATE_UNKNOWN":case"SAFETY_STATE_FAULT":return r.jsxRuntimeExports.jsx(R,{id:"safety-state-error",icon:ke,color:i.palette.error.main,title:n("SafetyBar.SafetyState.ti"),name:n("SafetyBar.SafetyState.Error.lb"),label:a?null:n("SafetyBar.SafetyState.Error.lb"),explanation:r.jsxRuntimeExports.jsx(E.Trans,{i18nKey:"SafetyBar.SafetyState.Error.Explanation.lb",children:"The robot controller has entered an unexpected safety state."}),literalValue:t,anchorOrigin:e,transformOrigin:o});default:P.assertUnreachable(t,`Unknown safety state ${t}`)}}),Ne=r.externalizeComponent(y.observer(({isVirtual:t,motionGroupId:e,operationMode:o,safetyState:a,anchorOrigin:n,transformOrigin:i,compact:c=!0})=>{const d=c?1:2;return r.jsxRuntimeExports.jsxs(s.Stack,{direction:"row",gap:d,alignItems:"center",sx:{height:"24px"},children:[r.jsxRuntimeExports.jsx(De,{safetyState:a,anchorOrigin:n,transformOrigin:i,compact:c}),r.jsxRuntimeExports.jsx(s.Divider,{orientation:"vertical",flexItem:!0}),r.jsxRuntimeExports.jsx(Me,{operationMode:o,anchorOrigin:n,transformOrigin:i,compact:c}),r.jsxRuntimeExports.jsx(s.Divider,{orientation:"vertical",flexItem:!0}),r.jsxRuntimeExports.jsx(ye,{isVirtual:t,motionGroupId:e,anchorOrigin:n,transformOrigin:i,compact:c})]})})),ze=s.styled(s.Fab,{shouldForwardProp:t=>t!=="selected"})(({theme:t})=>{var e,o,a;return{borderRadius:"20px","&:hover":{background:(e=t.palette.backgroundPaperElevation)==null?void 0:e[7]},variants:[{props:({selected:n})=>!n,style:{background:(o=t.palette.backgroundPaperElevation)==null?void 0:o[0],color:t.palette.action.disabled,"> img":{opacity:.4}}},{props:({selected:n})=>n,style:{background:(a=t.palette.backgroundPaperElevation)==null?void 0:a[11],border:`1px solid ${t.palette.divider}`,color:t.palette.primary.contrastText}}]}}),$e=t=>{const{ref:e,...o}=t;return r.jsxRuntimeExports.jsx(ze,{ref:e,selected:t.selected,...o,color:"secondary",variant:"circular"})};function Ve(t){const{children:e,value:o,index:a,...n}=t;return r.jsxRuntimeExports.jsx("div",{role:"tabpanel",hidden:o!==a,id:`tabpanel-${a}`,"aria-labelledby":`tab-${a}`,...n,children:o===a&&r.jsxRuntimeExports.jsx(s.Box,{children:e})})}function Ze({children:t,...e}){const{fullWidth:o,indicator:a,onChange:n,orientation:i,scrollButtons:c,selectionFollowsFocus:d,textColor:g,value:h,variant:m,...u}=e;return r.jsxRuntimeExports.jsx(s.Box,{...u,children:t})}const Ye=r.externalizeComponent(y.observer(t=>{const{items:e,activeTab:o,defaultActiveTab:a=0,onTabChange:n,sx:i,ref:c}=t,d=o!==void 0,[g,h]=b.useState(a),m=d?o:g;b.useEffect(()=>{d||e.length!==0&&(g<0||g>e.length-1)&&h(0)},[e.length,d,g]);const u=(l,p)=>{d||h(p),n==null||n(p)};return r.jsxRuntimeExports.jsxs(s.Box,{ref:c,sx:{height:"100%",display:"flex",flexDirection:"column",...i},children:[r.jsxRuntimeExports.jsx(s.Box,{sx:{px:0,py:0,overflow:"visible",position:"relative",paddingTop:l=>l.spacing(2),paddingRight:l=>l.spacing(2.5)},children:r.jsxRuntimeExports.jsx(s.Tabs,{value:m,onChange:u,sx:{minHeight:"32px",backgroundColor:"transparent",overflow:"visible","& .MuiTabs-indicator":{display:"none"},"& .MuiTabs-flexContainer":{gap:2,overflow:"visible",paddingTop:0,paddingBottom:0},"& .MuiTabs-scroller":{overflow:"visible !important"},"& .MuiTab-root":{overflow:"visible"}},children:e.map((l,p)=>{var C,_,z;const j=()=>{if(!l.badge)return;const T=l.badge.content,v=l.badge.max;return typeof T=="number"&&v&&T>v?`${v}+`:T},S=()=>{if(!l.badge)return!1;const T=l.badge.content,v=l.badge.showZero;return!(T===0&&!v)},w=j(),k=S(),A=()=>{d||h(p),n==null||n(p)},M=r.jsxRuntimeExports.jsx(s.Tab,{label:l.label,icon:l.icon,iconPosition:"start",disableRipple:!0,onClick:A,sx:{minHeight:"32px",height:"32px",padding:"0px 10px",borderRadius:"12px",backgroundColor:T=>{var v;return((v=T.palette.backgroundPaperElevation)==null?void 0:v[11])||"#32344B"},color:"text.primary",opacity:m===p?1:.38,fontSize:"13px",transition:"all 0.2s ease-in-out",position:"relative",overflow:"visible","&:hover":{opacity:m===p?1:.6},"&.Mui-selected":{opacity:1,backgroundColor:T=>{var v;return((v=T.palette.backgroundPaperElevation)==null?void 0:v[11])||"#32344B"},color:"text.primary"},"&:focus":{outline:"none"},"&:active":{transform:"none"}}},l.id);return k?r.jsxRuntimeExports.jsx(Ze,{component:"span",sx:{display:"inline-flex"},children:r.jsxRuntimeExports.jsx(s.Badge,{badgeContent:w,color:((C=l.badge)==null?void 0:C.color)||"error",max:(_=l.badge)==null?void 0:_.max,showZero:(z=l.badge)==null?void 0:z.showZero,anchorOrigin:{vertical:"top",horizontal:"right"},overlap:"rectangular",sx:{"& .MuiBadge-badge":{opacity:"1 !important"}},children:M})},l.id):M})})}),r.jsxRuntimeExports.jsx(s.Box,{sx:{mt:l=>l.spacing(2),borderBottom:1,borderColor:"divider"}}),r.jsxRuntimeExports.jsx(s.Box,{sx:{flex:1,overflow:"auto"},children:e.map((l,p)=>r.jsxRuntimeExports.jsx(Ve,{value:m,index:p,children:l.content},l.id))})]})})),He={$schema:"https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json",name:"wandelscript",patterns:[{include:"#keywords"},{include:"#strings"},{include:"#comments"},{include:"#functions"}],repository:{keywords:{patterns:[{name:"keyword.control.flow.wandelscript",match:"\\b(move|via|to|interrupt|def|False|True|for|if|else|elif|while|return|switch|activate|deactivate|print|and|or|not)\\b"}]},strings:{name:"string.quoted.double.wandelscript",begin:'"',end:'"',patterns:[{name:"constant.character.escape.wandelscript",match:"\\\\."}]},comments:{patterns:[{begin:"#",beginCaptures:{0:{name:"punctuation.definition.comment.wandelscript"}},end:"$",name:"comment.line.number-sign.wandelscript"}]},functions:{patterns:[{match:"[a-zA-Z_-]+\\(",name:"entity.name.function.wandelscript"}]}},scopeName:"source.wandelscript"},We=b.lazy(()=>import("@monaco-editor/react"));let D=null;async function Ue(){if(!D){const[{createHighlighter:t},{shikiToMonaco:e}]=await Promise.all([import("shiki"),import("@shikijs/monaco")]);D={shiki:await t({langs:[He],themes:["dark-plus","light-plus"]}),shikiToMonaco:e}}return D}const Ge=r.externalizeComponent(t=>{const e=s.useTheme(),[o,a]=b.useState("dark-plus"),n=e.palette.mode==="dark"?"dark-plus":"light-plus";async function i(c){var h,m;c.languages.register({id:"wandelscript"}),c.languages.setLanguageConfiguration("wandelscript",{comments:{lineComment:"#"},brackets:[["(",")"],["[","]"]],autoClosingPairs:[{open:"[",close:"]"},{open:"(",close:")"}],surroundingPairs:[{open:"[",close:"]"},{open:"(",close:")"}]});const{shiki:d,shikiToMonaco:g}=await Ue();g(d,c),c.editor.defineTheme(n,((m=(h=e.componentsExt)==null?void 0:h.WandelscriptEditor)==null?void 0:m.monacoTheme)??{base:e.palette.mode==="dark"?"vs-dark":"vs",inherit:!0,rules:[],colors:{}}),t.monacoSetup&&t.monacoSetup(c),a(n)}return r.jsxRuntimeExports.jsx(b.Suspense,{fallback:r.jsxRuntimeExports.jsx(P.LoadingCover,{}),children:r.jsxRuntimeExports.jsx(We,{value:t.code,onMount:(c,d)=>{i(d)},onChange:t.onChange,defaultLanguage:"wandelscript",theme:o,options:{minimap:{enabled:!1},wordWrap:"on",automaticLayout:!0,...t.monacoOptions}})})}),Z=1e-4,qe={a:0,d:0,alpha:0,theta:0,reverse_rotation_direction:!1};class L{constructor(e,o,a,n,i,c,d,g,h,m){this.nova=e,this.controller=o,this.motionGroup=a,this.initialMotionState=n,this.motionStateSocket=i,this.isVirtual=c,this.tcps=d,this.description=g,this.initialControllerState=h,this.controllerStateSocket=m,this.connectedJoggingSocket=null,this.joggingVelocity=10,this.activationState="inactive",this.rapidlyChangingMotionState=n,this.controllerState=h,m.addEventListener("message",u=>{var p;const l=(p=I.tryParseJson(u.data))==null?void 0:p.result;l&&f.runInAction(()=>{this.controllerState=l})}),i.addEventListener("message",u=>{var p;const l=(p=I.tryParseJson(u.data))==null?void 0:p.result;if(!l)throw new Error(`Failed to get motion state for ${this.motionGroupId}: ${u.data}`);P.jointValuesEqual(this.rapidlyChangingMotionState.joint_position,l.joint_position,Z)||f.runInAction(()=>{this.rapidlyChangingMotionState.joint_position=l.joint_position}),P.tcpMotionEqual(this.rapidlyChangingMotionState,l,Z)||f.runInAction(()=>{this.rapidlyChangingMotionState.tcp_pose=l.tcp_pose}),this.rapidlyChangingMotionState.standstill!==l.standstill&&f.runInAction(()=>{this.rapidlyChangingMotionState.standstill=l.standstill})}),f.makeAutoObservable(this)}static async connectMultiple(e,o){return Promise.all(o.map(a=>L.connect(e,a)))}static async connect(e,o){var k,A;const[a,n]=o.split("@"),i=await e.api.controller.getCurrentRobotControllerState(n),c=i==null?void 0:i.motion_groups.find(M=>M.motion_group===o);if(!i||!c)throw new Error(`Controller ${n} or motion group ${o} not found`);const d=e.openReconnectingWebsocket(`/controllers/${n}/motion-groups/${o}/state-stream`),g=await d.firstMessage(),h=(k=I.tryParseJson(g.data))==null?void 0:k.result;if(!h)throw new Error(`Unable to parse initial motion state message ${g.data}`);console.log(`Connected motion state websocket to motion group ${c.motion_group}. Initial state:
|
|
2
|
-
`,h);const u=(await e.api.controller.getRobotController(i.controller)).configuration.kind==="VirtualController",l=await e.api.motionGroup.getMotionGroupDescription(n,c.motion_group),p=Object.entries(l.tcps||{}).map(([M,C])=>({id:M,readable_name:C.name,position:C.pose.position,orientation:C.pose.orientation})),j=e.openReconnectingWebsocket(`/controllers/${i.controller}/state-stream?response_rate=1000`),S=await j.firstMessage(),w=(A=I.tryParseJson(S.data))==null?void 0:A.result;if(!w)throw new Error(`Unable to parse initial controller state message ${S.data}`);return console.log(`Connected controller state websocket to controller ${i.controller}. Initial state:
|
|
3
|
-
`,w),new L(e,i,c,h,d,u,p,l,w,j)}get motionGroupId(){return this.motionGroup.motion_group}get controllerId(){return this.controller.controller}get modelFromController(){return this.description.motion_group_model}get wandelscriptIdentifier(){const e=this.motionGroupId.split("@")[0];return`${this.controllerId.replace(/-/g,"_")}_${e}`}get joggingVelocityRads(){return this.joggingVelocity*Math.PI/180}get joints(){return this.initialMotionState.joint_position.map((e,o)=>({index:o}))}get dhParameters(){if(this.description.dh_parameters!==void 0)return this.description.dh_parameters.map(e=>({...qe,...e}))}get safetyZones(){return this.description.safety_zones}get mountingPosition(){var e,o,a;return this.description.mounting?[(((e=this.description.mounting.position)==null?void 0:e[0])||0)/1e3,(((o=this.description.mounting.position)==null?void 0:o[1])||0)/1e3,(((a=this.description.mounting.position)==null?void 0:a[2])||0)/1e3]:[0,0,0]}get mountingQuaternion(){var n,i,c,d,g,h;const e=new V.Vector3(((i=(n=this.description.mounting)==null?void 0:n.orientation)==null?void 0:i[0])||0,((d=(c=this.description.mounting)==null?void 0:c.orientation)==null?void 0:d[1])||0,((h=(g=this.description.mounting)==null?void 0:g.orientation)==null?void 0:h[2])||0),o=e.length(),a=e.normalize();return new V.Quaternion().setFromAxisAngle(a,o)}get isEstopActive(){return["SAFETY_STATE_ROBOT_EMERGENCY_STOP","SAFETY_STATE_DEVICE_EMERGENCY_STOP"].includes(this.controllerState.safety_state)}get isMoveableSafetyState(){return["SAFETY_STATE_NORMAL","SAFETY_STATE_REDUCED"].includes(this.controllerState.safety_state)}get isMoveableOperationMode(){return["OPERATION_MODE_AUTO","OPERATION_MODE_MANUAL","OPERATION_MODE_MANUAL_T1","OPERATION_MODE_MANUAL_T2"].includes(this.controllerState.operation_mode)}get canBeMoved(){return this.isMoveableSafetyState&&this.isMoveableOperationMode&&this.activationState==="active"}async deactivate(){if(this.activationState!=="active"){console.error("Tried to deactivate while already deactivating");return}f.runInAction(()=>{this.activationState="deactivating"});try{await this.nova.api.controller.setDefaultMode(this.controllerId,"ROBOT_SYSTEM_MODE_MONITOR"),f.runInAction(()=>{this.activationState="inactive"})}catch(e){throw f.runInAction(()=>{this.activationState="active"}),e}}async activate(){if(this.activationState!=="inactive"){console.error("Tried to activate while already activating");return}f.runInAction(()=>{this.activationState="activating"});try{await this.nova.api.controller.setDefaultMode(this.controllerId,"ROBOT_SYSTEM_MODE_CONTROL"),f.runInAction(()=>{this.activationState="active"})}catch(e){throw f.runInAction(()=>{this.activationState="inactive"}),e}}toggleActivation(){this.activationState==="inactive"?this.activate():this.activationState==="active"&&this.deactivate()}dispose(){this.motionStateSocket.close(),this.connectedJoggingSocket&&this.connectedJoggingSocket.close()}setJoggingVelocity(e){this.joggingVelocity=e}}function q(){var e,o,a,n,i,c,d;const t=s.createTheme({palette:{mode:"dark",text:{primary:"rgba(255, 255, 255, 1)",secondary:"rgba(255, 255, 255, 0.7)",disabled:"rgba(255, 255, 255, 0.38)"},primary:{main:"rgba(142, 86, 252, 1)",dark:"rgba(136, 58, 255, 1)",light:"rgba(157, 131, 246, 1)",contrastText:"rgba(255, 255, 255, 0.87)"},secondary:{main:"rgba(255, 255, 255, 1)",dark:"rgba(255, 255, 255, 0.06)",contrastText:"rgba(255, 255, 255, 0.87)"},tertiary:{main:"rgba(100, 255, 218, 1)",dark:"rgba(38, 166, 154, 1)",light:"rgba(167, 255, 235, 1)",contrastText:"rgba(0, 0, 0, 1)"},error:{main:"rgba(239, 83, 80, 1)",dark:"rgba(229, 57, 53, 1)",light:"rgba(239, 154, 154, 1)",contrastText:"rgba(255, 255, 255, 1)"},warning:{main:"rgba(255, 171, 64, 1)",dark:"rgba(255, 145, 0, 1)",light:"rgba(255, 209, 128, 1)",contrastText:"rgba(0, 0, 0, 0.87)"},success:{main:"rgba(38, 166, 154, 1)",dark:"rgba(0, 121, 107, 1)",light:"rgba(128, 203, 196, 1)",contrastText:"rgba(255, 255, 255, 0.87)"},background:{default:"rgba(2, 6, 23, 1)",paper:"rgba(17, 19, 31, 1)"},action:{active:"rgba(255, 255, 255, 0.56)",hover:"rgba(255, 255, 255, 0.08)",selected:"rgba(255, 255, 255, 0.16)",disabledBackground:"rgba(255, 255, 255, 0.12)",focus:"rgba(255, 255, 255, 0.12)",disabled:"rgba(255, 255, 255, 0.38)"},common:{white:"rgba(255, 255, 255, 1)",black:"rgba(0, 0, 0, 1)"},divider:"rgba(255, 255, 255, 0.12)",backgroundPaperElevation:{0:"rgba(17,19,31,1.0)",1:"rgba(20,22,35,1.0)",2:"rgba(23,25,39,1.0)",3:"rgba(26,28,43,1.0)",4:"rgba(29,31,47,1.0)",5:"rgba(32,34,51,1.0)",6:"rgba(35,37,55,1.0)",7:"rgba(38,40,59,1.0)",8:"rgba(41,43,63,1.0)",9:"rgba(44,46,67,1.0)",10:"rgba(47,49,71,1.0)",11:"rgba(50,52,75,1.0)",12:"rgba(53,55,79,1.0)",13:"rgba(56,58,83,1.0)",14:"rgba(59,61,87,1.0)",15:"rgba(62,64,91,1.0)",16:"rgba(57,63,87,1.0)"}},paletteExt:{primary:{hover:"rgba(142, 86, 252, 0.08)",selected:"rgba(142, 86, 252, 0.16)",focus:"rgba(142, 86, 252, 0.12)",focusVisible:"rgba(142, 86, 252, 0.3)",outlineBorder:"rgba(142, 86, 252, 0.5)"},secondary:{tonal:"rgba(255,255,255,0.1)"}}});return{...t,components:{MuiCssBaseline:{styleOverrides:{"html, body, *":{scrollbarWidth:"none",msOverflowStyle:"none"},"html:hover, body:hover, *:hover":{scrollbarWidth:"thin",scrollbarColor:`${t.palette.divider} transparent`},".MuiDataGrid-panelContent":{borderRadius:"16px !important","& .MuiPaper-root":{borderRadius:"16px !important"}},".MuiDataGrid-filterForm":{borderRadius:"16px !important","& .MuiInputBase-root":{borderRadius:"16px !important","& fieldset":{borderRadius:"16px !important"},"& .MuiOutlinedInput-notchedOutline":{borderRadius:"16px !important"}},"& .MuiTextField-root":{"& .MuiInputBase-root":{borderRadius:"16px !important","& fieldset":{borderRadius:"16px !important"},"& .MuiOutlinedInput-notchedOutline":{borderRadius:"16px !important"}}}},".MuiDataGrid-filterFormValueInput":{"& .MuiInputBase-root":{borderRadius:"16px !important","& fieldset":{borderRadius:"16px !important"},"& .MuiOutlinedInput-notchedOutline":{borderRadius:"16px !important"}}}}},MuiDataGrid:{styleOverrides:{root:{},panelContent:{borderRadius:"16px !important"},filterForm:{"& .MuiInputBase-root":{borderRadius:"10px !important","& fieldset":{borderRadius:"10px !important"},"& .MuiOutlinedInput-notchedOutline":{borderRadius:"10px !important"}}},filterFormValueInput:{"& .MuiInputBase-root":{borderRadius:"10px !important","& fieldset":{borderRadius:"10px !important"},"& .MuiOutlinedInput-notchedOutline":{borderRadius:"10px !important"}}}}},MuiButton:{styleOverrides:{root:{textTransform:"none",borderRadius:"10px"}},variants:[{props:{color:"secondary",variant:"contained"},style:{border:`1px solid ${t.palette.divider}`,background:(a=(o=(e=t.paletteExt)==null?void 0:e.secondary)==null?void 0:o.tonal)==null?void 0:a.toString()}},{props:{color:"secondary",variant:"outlined"},style:{border:`1px solid ${t.palette.divider}`}}]},MuiTab:{styleOverrides:{root:{textTransform:"none",color:t.palette.text.secondary,"&.Mui-selected":{color:t.palette.text.primary}}}},MuiTabs:{styleOverrides:{root:{background:(n=t.palette.backgroundPaperElevation)==null?void 0:n[1]}}},MuiToggleButtonGroup:{styleOverrides:{root:{".MuiToggleButtonGroup-firstButton":{borderRadius:"10px 0 0 10px"},".MuiToggleButtonGroup-lastButton":{borderRadius:"0 10px 10px 0"}}}},MuiToggleButton:{styleOverrides:{root:{textTransform:"none",padding:"6px 16px"}}},MuiSelect:{variants:[{props:{variant:"filled"},style:{borderRadius:"10px","::before, ::after":{visibility:"collapse"},".MuiInputBase-input":{padding:"6px 16px",borderRadius:"10px"}}}]},MuiDrawer:{styleOverrides:{paper:{border:"none",boxShadow:"4px 0 8px -4px rgba(0, 0, 0, 0.3)"}}},MuiFab:{styleOverrides:{root:{background:(c=(i=t.paletteExt)==null?void 0:i.secondary)==null?void 0:c.tonal}},variants:[{props:{color:"primary"},style:{background:t.palette.primary.main}}]}},componentsExt:{JoggingPanel:{JoggingCartesian:{Axis:{X:{backgroundColor:"rgba(215, 66, 56, 1)",borderColor:"rgba(215, 66, 56, 1)",buttonBackgroundColor:{default:"rgba(241, 77, 66, 1)",pressed:"rgba(138, 41, 35, 1)",hovered:"rgba(241, 77, 66, 1)",disabled:"rgba(241, 77, 66, 1)"},color:"rgba(255, 198, 198, 1)",labelColor:t.palette.text.primary},Y:{backgroundColor:"rgba(20, 151, 108, 1)",borderColor:"rgba(20, 151, 108, 1)",buttonBackgroundColor:{default:"rgba(28, 188, 135, 1)",pressed:"rgba(11, 89, 63, 1)",disabled:"rgba(28, 188, 135, 1)",hovered:"rgba(28, 188, 135, 1)"},color:"rgba(215, 255, 242, 1)",labelColor:t.palette.text.primary},Z:{backgroundColor:"rgba(1, 87, 155, 1)",borderColor:"rgba(1, 87, 155, 1)",buttonBackgroundColor:{default:"rgba(2, 136, 209, 1)",pressed:"rgba(2, 64, 114, 1)",disabled:"rgba(2, 136, 209, 1)",hovered:"rgba(2, 136, 209, 1)"},color:"rgba(210, 239, 255, 1)",labelColor:t.palette.text.primary}}},JoggingJoint:{Joint:{arrowColor:t.palette.text.primary}},VelocitySlider:{sliderLegendColor:t.palette.text.primary}},WandelscriptEditor:{monacoTheme:{base:"vs-dark",inherit:!0,rules:[{token:"keyword",foreground:"#b349a9ff"}],colors:{"editor.background":s.rgbToHex(((d=t.palette.backgroundPaperElevation)==null?void 0:d[5])??""),"editor.foreground":"#d4d4d4","editorLineNumber.foreground":"#797979","editorLineNumber.activeForeground":"#e9e9e9","editor.lineHighlightBorder":"#e9e9e911"}}}}}}function Je(){const t=q();return t.palette.mode="light",t}function Ke(t){var a,n,i,c;let e=!0;((a=t.palette)==null?void 0:a.mode)==="light"?e=!1:((n=t.palette)==null?void 0:n.mode)!=="dark"&&(e=!(typeof window<"u"&&((c=(i=window.matchMedia)==null?void 0:i.call(window,"(prefers-color-scheme: light)"))==null?void 0:c.matches)));const o=e?q():Je();return Y.createTheme$1(o,t)}exports.AppHeader=ae;exports.ConnectedMotionGroup=L;exports.LogPanel=ce;exports.LogStore=W;exports.LogViewer=U;exports.NoMotionGroupModal=de;exports.RobotListItem=me;exports.RobotSetupReadinessIndicator=G;exports.RobotSetupReadinessState=N;exports.SafetyBar=Ne;exports.SelectableFab=$e;exports.TabBar=Ye;exports.WandelscriptEditor=Ge;exports.createDebugMessage=ne;exports.createErrorMessage=le;exports.createInfoMessage=ie;exports.createLogMessage=O;exports.createNovaMuiTheme=Ke;exports.createWarningMessage=se;
|
|
4
|
-
//# sourceMappingURL=theming-D5DvGuxX.cjs.map
|