+
{room.participants?.producer
? "π΄ Has Output"
@@ -504,7 +506,7 @@
diff --git a/src/lib/components/3d/elements/video/status/VideoBoxUIKit.svelte b/src/lib/components/3d/elements/video/status/VideoBoxUIKit.svelte
index 616567c66c9ca6675d56573c7adbdc8560c87174..81cfeb0b6f0c0b527c043cc6f000877097575515 100644
--- a/src/lib/components/3d/elements/video/status/VideoBoxUIKit.svelte
+++ b/src/lib/components/3d/elements/video/status/VideoBoxUIKit.svelte
@@ -1,11 +1,7 @@
+
+
+
-
-
-
-
-
-
-
\ No newline at end of file
+
+
+
diff --git a/src/lib/components/3d/elements/video/status/VideoConnectionFlowBoxUIKit.svelte b/src/lib/components/3d/elements/video/status/VideoConnectionFlowBoxUIKit.svelte
index 1deaa2bbf8a4b5295d4457d25e9453d55f655b84..6a2c8ca7d29d02850702c6fa546e2a188c371bfa 100644
--- a/src/lib/components/3d/elements/video/status/VideoConnectionFlowBoxUIKit.svelte
+++ b/src/lib/components/3d/elements/video/status/VideoConnectionFlowBoxUIKit.svelte
@@ -17,17 +17,30 @@
delay?: number;
}
- let { visible, video, onInputBoxClick, onOutputBoxClick, duration = 100, delay = 0 }: Props = $props();
+ let {
+ visible,
+ video,
+ onInputBoxClick,
+ onOutputBoxClick,
+ duration = 100,
+ delay = 0
+ }: Props = $props();
const inputColor = "rgb(34, 197, 94)";
const outputColor = "rgb(59, 130, 246)";
- const tweenedScale = Tween.of(() => {
- return visible ? 1 : 0;
- }, { duration: duration, easing: cubicOut, delay: delay });
- const tweenedOpacity = Tween.of(() => {
- return visible ? 1 : 0;
- }, { duration: duration, easing: cubicOut, delay: delay });
+ const tweenedScale = Tween.of(
+ () => {
+ return visible ? 1 : 0;
+ },
+ { duration: duration, easing: cubicOut, delay: delay }
+ );
+ const tweenedOpacity = Tween.of(
+ () => {
+ return visible ? 1 : 0;
+ },
+ { duration: duration, easing: cubicOut, delay: delay }
+ );
- e.stopPropagation()}
- onpointerup={(e) => e.stopPropagation()}
- onpointermove={(e) => e.stopPropagation()}
- onclick={(e) => e.stopPropagation()}
- position.z={0.22}
- padding={10}
- rotation={[Math.PI / 2, 0, 0]}
- scale={[0.12, 0.12, 0.12]}
- pointerEvents="listener"
- >
-
-
-
-
-
-
-
+ e.stopPropagation()}
+ onpointerup={(e) => e.stopPropagation()}
+ onpointermove={(e) => e.stopPropagation()}
+ onclick={(e) => e.stopPropagation()}
+ position.z={0.22}
+ padding={10}
+ rotation={[Math.PI / 2, 0, 0]}
+ scale={[0.12, 0.12, 0.12]}
+ pointerEvents="listener"
+>
+
+
+
+
+
+
+
-
-
+
diff --git a/src/lib/components/3d/ui/StatusArrow.svelte b/src/lib/components/3d/ui/StatusArrow.svelte
index 312b9099b6a1871a54542728eaeca3a3811a52e5..0cf2aced66698ba85136d8bd94a59ed68b8b5f8c 100644
--- a/src/lib/components/3d/ui/StatusArrow.svelte
+++ b/src/lib/components/3d/ui/StatusArrow.svelte
@@ -6,7 +6,7 @@
color?: string;
opacity?: number;
size?: number;
- direction?: 'right' | 'down' | 'left' | 'up';
+ direction?: "right" | "down" | "left" | "up";
minWidth?: number;
minHeight?: number;
}
@@ -15,7 +15,7 @@
color = "rgb(139, 69, 219)",
opacity = 1,
size = 12,
- direction = 'right',
+ direction = "right",
minWidth = 20,
minHeight = 12
}: Props = $props();
@@ -29,7 +29,7 @@
{minWidth}
{minHeight}
>
- {#if direction === 'right'}
+ {#if direction === "right"}
- {:else if direction === 'down'}
-
- {:else if direction === 'left'}
-
- {:else if direction === 'up'}
-
+ {:else if direction === "down"}
+
+ {:else if direction === "left"}
+
+ {:else if direction === "up"}
+
{/if}
-
\ No newline at end of file
+
diff --git a/src/lib/components/3d/ui/StatusButton.svelte b/src/lib/components/3d/ui/StatusButton.svelte
index 23dec38e6a1d0c3dc56780c1158adc713290588b..105b6528566fd21de115e3e1fdccf916c3776082 100644
--- a/src/lib/components/3d/ui/StatusButton.svelte
+++ b/src/lib/components/3d/ui/StatusButton.svelte
@@ -47,15 +47,9 @@
{onclick}
>
{#if icon}
-
+
{/if}
-
+
-
\ No newline at end of file
+
diff --git a/src/lib/components/3d/ui/StatusContent.svelte b/src/lib/components/3d/ui/StatusContent.svelte
index b0608cb258f67087ddd9934d6f277eeceb71c548..bdeb8ec1e1e26335a99594c4b54a0f7cdeeab1cb 100644
--- a/src/lib/components/3d/ui/StatusContent.svelte
+++ b/src/lib/components/3d/ui/StatusContent.svelte
@@ -6,10 +6,10 @@
subtitle?: string;
description?: string;
color?: string;
- variant?: 'primary' | 'secondary' | 'tertiary';
- size?: 'sm' | 'md' | 'lg';
- align?: 'left' | 'center' | 'right';
- children?: import('svelte').Snippet;
+ variant?: "primary" | "secondary" | "tertiary";
+ size?: "sm" | "md" | "lg";
+ align?: "left" | "center" | "right";
+ children?: import("svelte").Snippet;
}
let {
@@ -17,9 +17,9 @@
subtitle,
description,
color = "rgb(221, 214, 254)",
- variant = 'primary',
- size = 'md',
- align = 'center',
+ variant = "primary",
+ size = "md",
+ align = "center",
children
}: Props = $props();
@@ -40,19 +40,15 @@
const config = sizeConfigs[size];
const opacities = opacityLevels[variant];
- const flexAlign = align === 'left' ? 'flex-start' : align === 'right' ? 'flex-end' : 'center';
+ const flexAlign = align === "left" ? "flex-start" : align === "right" ? "flex-end" : "center";
-
+
{#if children}
{@render children()}
{:else}
-
{/if}
-
+
{#if subtitle}
{/if}
-
+
{#if description}
{/if}
-
\ No newline at end of file
+
diff --git a/src/lib/components/3d/ui/icons.ts b/src/lib/components/3d/ui/icons.ts
index 73d2f8b1ae92666f8907278663a3c9bf6fb8da1c..a2ce9e50e5d549704566d348d2a214e35aabfd8b 100644
--- a/src/lib/components/3d/ui/icons.ts
+++ b/src/lib/components/3d/ui/icons.ts
@@ -1,7 +1,8 @@
// Common generic SVG icons encoded as base64 data URLs
export const icons = {
plus: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjMDAwIiBkPSJNMTkgMTNoLTZ2NmgtMnYtNkg1di0yaDZWNWgydjZoNnoiLz48L3N2Zz4=",
- settings: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjMDAwIiBkPSJtOS4yNSAyMmwtLjQtMy4ycS0uMzI1LS4xMjUtLjYxMi0uM3QtLjU2My0uMzc1TDQuNyAxOS4zNzVsLTIuNzUtNC43NWwyLjU3NS0xLjk1UTQuNSAxMi41IDQuNSAxMi4zMzh2LS42NzVxMC0uMTYzLjAyNS0uMzM4TDEuOTUgOS4zNzVsMi43NS00Ljc1bDIuOTc5IDEuMjVxLjI3NS0uMi41NzUtLjM3NXQuNi0uM2wuNC0zLjJoNS41bC40IDMuMnEuMzI1LjEyNS42MTMuM3QuNTYyLjM3NWwyLjk3NS0xLjI1bDIuNzUgNC43NWwtMi41NzUgMS45NXEuMDI1LjE3NS4wMjUuMzM4di42NzRxMCAuMTYzLS4wNS4zMzhsMi41NzUgMS45NWwtMi43NSA0Ljc1bC0yLjk1LTEuMjVxLS4yNzUuMi0uNTc1LjM3NXQtLjYuM2wtLjQgMy4yem0yLjgtNi41cTEuNDUgMCAyLjQ3NS0xLjAyNVQxNS41NSAxMnQtMS4wMjUtMi40NzVUMTIuMDUgOC41cS0xLjQ3NSAwLTIuNDg4IDEuMDI1VDguNTUgMTJ0MS4wMTMgMi40NzVUMTIuMDUgMTUuNSIvPjwvc3ZnPg=="
+ settings:
+ "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjMDAwIiBkPSJtOS4yNSAyMmwtLjQtMy4ycS0uMzI1LS4xMjUtLjYxMi0uM3QtLjU2My0uMzc1TDQuNyAxOS4zNzVsLTIuNzUtNC43NWwyLjU3NS0xLjk1UTQuNSAxMi41IDQuNSAxMi4zMzh2LS42NzVxMC0uMTYzLjAyNS0uMzM4TDEuOTUgOS4zNzVsMi43NS00Ljc1bDIuOTc5IDEuMjVxLjI3NS0uMi41NzUtLjM3NXQuNi0uM2wuNC0zLjJoNS41bC40IDMuMnEuMzI1LjEyNS42MTMuM3QuNTYyLjM3NWwyLjk3NS0xLjI1bDIuNzUgNC43NWwtMi41NzUgMS45NXEuMDI1LjE3NS4wMjUuMzM4di42NzRxMCAuMTYzLS4wNS4zMzhsMi41NzUgMS45NWwtMi43NSA0Ljc1bC0yLjk1LTEuMjVxLS4yNzUuMi0uNTc1LjM3NXQtLjYuM2wtLjQgMy4yem0yLjgtNi41cTEuNDUgMCAyLjQ3NS0xLjAyNVQxNS41NSAxMnQtMS4wMjUtMi40NzVUMTIuMDUgOC41cS0xLjQ3NSAwLTIuNDg4IDEuMDI1VDguNTUgMTJ0MS4wMTMgMi40NzVUMTIuMDUgMTUuNSIvPjwvc3ZnPg=="
} as const;
-
-export type IconName = keyof typeof icons;
\ No newline at end of file
+
+export type IconName = keyof typeof icons;
diff --git a/src/lib/components/3d/ui/index.ts b/src/lib/components/3d/ui/index.ts
index 6010886296255dd1dbc77ac0fe6be62b6ea87afa..4b5eea267e0dd642d4c056e3111ce198226c7ac8 100644
--- a/src/lib/components/3d/ui/index.ts
+++ b/src/lib/components/3d/ui/index.ts
@@ -1,6 +1,6 @@
-export { default as BaseStatusBox } from './BaseStatusBox.svelte';
-export { default as StatusHeader } from './StatusHeader.svelte';
-export { default as StatusContent } from './StatusContent.svelte';
-export { default as StatusIndicator } from './StatusIndicator.svelte';
-export { default as StatusButton } from './StatusButton.svelte';
-export { default as StatusArrow } from './StatusArrow.svelte';
\ No newline at end of file
+export { default as BaseStatusBox } from "./BaseStatusBox.svelte";
+export { default as StatusHeader } from "./StatusHeader.svelte";
+export { default as StatusContent } from "./StatusContent.svelte";
+export { default as StatusIndicator } from "./StatusIndicator.svelte";
+export { default as StatusButton } from "./StatusButton.svelte";
+export { default as StatusArrow } from "./StatusArrow.svelte";
diff --git a/src/lib/components/interface/overlay/AddAIButton.svelte b/src/lib/components/interface/overlay/AddAIButton.svelte
index 2cb07070650d2678e5b7d3f5a6e2e5e35309d351..501481193ee7b01e65f4832a534be3ae013cab0a 100644
--- a/src/lib/components/interface/overlay/AddAIButton.svelte
+++ b/src/lib/components/interface/overlay/AddAIButton.svelte
@@ -13,10 +13,10 @@
let { open = $bindable(), workspaceId }: Props = $props();
let isConfigModalOpen = $state(false);
- let selectedModelType = $state
('act');
+ let selectedModelType = $state("act");
// Get available model types
- const availableModels = Object.values(MODEL_TYPES).filter(model => model.enabled);
+ const availableModels = Object.values(MODEL_TYPES).filter((model) => model.enabled);
function openConfigModal(modelType: ModelType) {
selectedModelType = modelType;
@@ -25,7 +25,7 @@
}
function quickAddACT() {
- openConfigModal('act');
+ openConfigModal("act");
}
function formatModelType(modelType: string): string {
@@ -87,10 +87,12 @@
{/snippet}
-
+
{#each availableModels as model}
openConfigModal(model.id)}
>
@@ -108,8 +110,8 @@
-
diff --git a/src/lib/components/interface/overlay/AddRobotButton.svelte b/src/lib/components/interface/overlay/AddRobotButton.svelte
index 3699c7fb7879dbd61259f9882f3f761d0922c06a..bea7ad499667c8f289174fb4507979309961ccff 100644
--- a/src/lib/components/interface/overlay/AddRobotButton.svelte
+++ b/src/lib/components/interface/overlay/AddRobotButton.svelte
@@ -45,7 +45,7 @@
}
async function quickAddDefault() {
- const defaultRobotType = robotTypes.find(type => robotUrdfConfigMap[type].isDefault);
+ const defaultRobotType = robotTypes.find((type) => robotUrdfConfigMap[type].isDefault);
if (defaultRobotType) {
await addRobot(defaultRobotType);
} else {
@@ -53,7 +53,6 @@
await addRobot(robotTypes[0]);
}
}
-
@@ -127,7 +126,9 @@
{urdfConfig.displayName || robotType.replace(/-/g, " ").toUpperCase()}
-
+
{urdfConfig.description || "Robot"}
diff --git a/src/lib/components/interface/overlay/AddSensorButton.svelte b/src/lib/components/interface/overlay/AddSensorButton.svelte
index cbc18d85a7ce6298083129c7738c7e28919e3315..f03bfc8df9b7f48b059f80135a40cb01a3dcdc38 100644
--- a/src/lib/components/interface/overlay/AddSensorButton.svelte
+++ b/src/lib/components/interface/overlay/AddSensorButton.svelte
@@ -21,34 +21,34 @@
}
const sensorConfigs: SensorConfig[] = [
- {
- id: 'camera',
- label: 'Camera',
- description: 'Video Camera Sensor',
- icon: 'icon-[mdi--camera]',
+ {
+ id: "camera",
+ label: "Camera",
+ description: "Video Camera Sensor",
+ icon: "icon-[mdi--camera]",
enabled: true,
isDefault: true
},
- {
- id: 'depth-camera',
- label: 'Depth Camera',
- description: 'Depth Camera Sensor',
- icon: 'icon-[mdi--camera]',
- enabled: false
+ {
+ id: "depth-camera",
+ label: "Depth Camera",
+ description: "Depth Camera Sensor",
+ icon: "icon-[mdi--camera]",
+ enabled: false
},
- {
- id: 'lidar',
- label: 'Lidar',
- description: 'Distance Sensor',
- icon: 'icon-[mdi--radar]',
- enabled: false
+ {
+ id: "lidar",
+ label: "Lidar",
+ description: "Distance Sensor",
+ icon: "icon-[mdi--radar]",
+ enabled: false
},
- {
- id: 'imu',
- label: 'IMU',
- description: 'Motion Sensor',
- icon: 'icon-[mdi--radar]',
- enabled: false
+ {
+ id: "imu",
+ label: "IMU",
+ description: "Motion Sensor",
+ icon: "icon-[mdi--radar]",
+ enabled: false
}
];
@@ -58,7 +58,7 @@
if (!sensorType) return;
const sensorId = `${sensorType}_${Date.now()}`;
-
+
if (sensorType === "camera") {
// Create video camera
const video = videoManager.createVideo(sensorId);
@@ -67,7 +67,7 @@
});
} else {
// Placeholder for other sensor types
- const config = sensorConfigs.find(c => c.id === sensorType);
+ const config = sensorConfigs.find((c) => c.id === sensorType);
toast.success("Sensor Added", {
description: `${config?.label || sensorType} sensor ${sensorId.slice(0, 12)}... created successfully.`
});
@@ -105,7 +105,7 @@