Spaces:
Running
Running
| <script lang="ts"> | |
| import type { Robot } from "$lib/elements/robot/Robot.svelte"; | |
| import { ICON } from "$lib/utils/icon"; | |
| import { BaseStatusBox, StatusHeader, StatusContent, StatusButton } from "$lib/components/3d/ui"; | |
| interface Props { | |
| robot: Robot; | |
| onBoxClick: (robot: Robot) => void; | |
| } | |
| let { robot, onBoxClick }: Props = $props(); | |
| let isDisabled = $derived(robot.hasConsumer); | |
| function handleClick() { | |
| if (!isDisabled) { | |
| onBoxClick(robot); | |
| } | |
| } | |
| const manualColor = "rgb(147, 51, 234)"; | |
| </script> | |
| <BaseStatusBox | |
| color={manualColor} | |
| borderOpacity={isDisabled ? 0.3 : robot.isManualControlEnabled ? 0.8 : 0.5} | |
| backgroundOpacity={isDisabled ? 0.1 : robot.isManualControlEnabled ? 0.3 : 0.2} | |
| opacity={isDisabled ? 0.6 : 1} | |
| onclick={handleClick} | |
| > | |
| {#if isDisabled} | |
| <!-- Disabled State --> | |
| <StatusHeader | |
| icon={ICON["icon-[material-symbols--lock]"].svg} | |
| text="DISABLED" | |
| color={manualColor} | |
| opacity={0.7} | |
| /> | |
| <StatusContent | |
| title="Control managed by" | |
| subtitle={robot.consumer?.name.slice(0, 20) ?? "No Input"} | |
| color="rgb(196, 181, 253)" | |
| variant="secondary" | |
| /> | |
| {:else if robot.isManualControlEnabled} | |
| <!-- Enabled State --> | |
| <StatusHeader | |
| icon={ICON["icon-[solar--volume-knob-bold]"].svg} | |
| text="ACTIVE" | |
| color={manualColor} | |
| opacity={0.9} | |
| /> | |
| <StatusContent | |
| title={`${robot.jointArray.length} Joints Active`} | |
| subtitle="Manual Control Enabled" | |
| color="rgb(233, 213, 255)" | |
| variant="primary" | |
| /> | |
| {:else} | |
| <!-- Default State (Manual Off) --> | |
| <StatusHeader | |
| icon={ICON["icon-[solar--volume-knob-bold]"].svg} | |
| text="MANUAL" | |
| color={manualColor} | |
| opacity={0.8} | |
| /> | |
| <StatusContent title="Click to Enable" color={manualColor} variant="secondary" /> | |
| <StatusButton | |
| icon={ICON["icon-[mingcute--settings-2-fill]"].svg} | |
| text="Configure" | |
| color={manualColor} | |
| backgroundOpacity={0.1} | |
| textOpacity={0.7} | |
| /> | |
| {/if} | |
| </BaseStatusBox> | |