Spaces:
Running
Running
File size: 2,316 Bytes
6ce4ca6 3cdf7b9 6ce4ca6 3cdf7b9 6ce4ca6 3cdf7b9 6ce4ca6 3cdf7b9 6ce4ca6 3cdf7b9 6ce4ca6 3cdf7b9 6ce4ca6 3cdf7b9 6ce4ca6 3cdf7b9 6ce4ca6 3cdf7b9 6ce4ca6 3cdf7b9 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
<script lang="ts">
import type { Robot } from "$lib/elements/robot/Robot.svelte.js";
import { ICON } from "$lib/utils/icon";
import { BaseStatusBox, StatusHeader, StatusContent, StatusButton } from "$lib/components/3d/ui";
interface Props {
robot: Robot;
onOutputBoxClick: (robot: Robot) => void;
}
let { robot, onOutputBoxClick }: Props = $props();
function handleClick() {
onOutputBoxClick(robot);
}
// Output theme color (blue)
const outputColor = "rgb(59, 130, 246)";
</script>
<!--
Event info here
https://github.com/threlte/threlte-uikit/blob/13b34172656cd49b9e2f38d7a9c41305e435daa1/src/lib/Events.ts#L30
-->
<BaseStatusBox
color={outputColor}
borderOpacity={robot.outputDriverCount > 0 ? 0.8 : 0.4}
backgroundOpacity={robot.outputDriverCount > 0 ? 0.3 : 0.15}
opacity={robot.outputDriverCount > 0 ? 1 : 0.7}
onclick={handleClick}
>
{#if robot.outputDriverCount > 0}
<!-- Connected Outputs State -->
<StatusHeader
icon={ICON["icon-[material-symbols--upload]"].svg}
text="OUTPUT"
color={outputColor}
opacity={0.9}
/>
<!-- Outputs Count -->
<StatusContent
title={`${robot.outputDriverCount} Outputs Active`}
color="rgb(191, 219, 254)"
variant="primary"
/>
{#if robot.producers.length > 0}
<!-- Outputs List -->
<StatusContent color={outputColor} variant="secondary">
{#snippet children()}
{#each robot.producers.slice(0, 2) as producer}
<StatusContent
title={producer.name.slice(0, 20)}
subtitle={producer.constructor.name.replace("Producer", "").slice(0, 15)}
color={outputColor}
variant="tertiary"
size="sm"
/>
{/each}
{#if robot.producers.length > 2}
<StatusContent
title={`+${robot.producers.length - 2} more`}
color={outputColor}
variant="tertiary"
size="sm"
/>
{/if}
{/snippet}
</StatusContent>
{/if}
{:else}
<!-- No Outputs State -->
<StatusHeader
icon={ICON["icon-[material-symbols--upload]"].svg}
text="NO OUTPUT"
color={outputColor}
opacity={0.7}
/>
<StatusContent title="Click to Connect" color={outputColor} variant="secondary" />
<StatusButton
icon={ICON["icon-[mdi--plus]"].svg}
text="Add Outputs"
color={outputColor}
textOpacity={0.7}
/>
{/if}
</BaseStatusBox>
|