@wandelbots/wandelbots-js-react-components 3.2.0-pr.feat-improve-exports.414.40b4b4e → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -79
- package/dist/components/jogging/JoggingStore.d.ts +1 -1
- package/dist/index.cjs +155 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.js +30530 -0
- package/dist/index.js.map +1 -0
- package/package.json +3 -24
- package/dist/3d.cjs.js +0 -2
- package/dist/3d.cjs.js.map +0 -1
- package/dist/3d.d.ts +0 -11
- package/dist/3d.d.ts.map +0 -1
- package/dist/3d.es.js +0 -16
- package/dist/3d.es.js.map +0 -1
- 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/core.cjs.js +0 -2
- package/dist/core.cjs.js.map +0 -1
- package/dist/core.d.ts +0 -23
- package/dist/core.d.ts.map +0 -1
- package/dist/core.es.js +0 -46
- package/dist/core.es.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 +0 -4909
- 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/index.cjs.js +0 -2
- package/dist/index.cjs.js.map +0 -1
- package/dist/index.es.js +0 -72
- package/dist/index.es.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-DHqcbFON.js +0 -979
- package/dist/manufacturerHomePositions-DHqcbFON.js.map +0 -1
- package/dist/manufacturerHomePositions-zd-CKEiQ.cjs +0 -2
- package/dist/manufacturerHomePositions-zd-CKEiQ.cjs.map +0 -1
- 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/3d.ts +0 -15
- package/src/core.ts +0 -23
- 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
|