summaryrefslogtreecommitdiffhomepage
path: root/src/features/surface-host/ui/SurfaceView.svelte
diff options
context:
space:
mode:
authorAdam Malczewski <[email protected]>2026-06-27 01:13:28 +0900
committerAdam Malczewski <[email protected]>2026-06-27 01:13:31 +0900
commit2fa03f8d7410c2b8d6be8e10ad088863e83d7177 (patch)
tree94e1923180ae38d571d34b578afecb0a18913c24 /src/features/surface-host/ui/SurfaceView.svelte
parent80f99665034a0e510300793205c162fc7a46769f (diff)
parent08b12478636f4a5c86a1f3c40a843f2906b7c82f (diff)
downloaddispatch-web-2fa03f8d7410c2b8d6be8e10ad088863e83d7177.tar.gz
dispatch-web-2fa03f8d7410c2b8d6be8e10ad088863e83d7177.zip
Merge branch 'dev' into feature/heartbeat
# Conflicts: # src/app/App.svelte # src/app/store.svelte.ts # src/app/store.test.ts # src/features/workspaces/ui/WorkspaceCard.test.ts
Diffstat (limited to 'src/features/surface-host/ui/SurfaceView.svelte')
-rw-r--r--src/features/surface-host/ui/SurfaceView.svelte87
1 files changed, 42 insertions, 45 deletions
diff --git a/src/features/surface-host/ui/SurfaceView.svelte b/src/features/surface-host/ui/SurfaceView.svelte
index 3f92e3b..aed8d03 100644
--- a/src/features/surface-host/ui/SurfaceView.svelte
+++ b/src/features/surface-host/ui/SurfaceView.svelte
@@ -1,52 +1,49 @@
<script lang="ts">
- import type { InvokeMessage, SurfaceSpec } from "@dispatch/ui-contract";
- import { groupRenderFields, planSurface } from "../logic/plan";
- import Button from "./Button.svelte";
- import MessageQueueList from "./MessageQueueList.svelte";
- import Number from "./Number.svelte";
- import Progress from "./Progress.svelte";
- import Selector from "./Selector.svelte";
- import StatTable from "./StatTable.svelte";
- import SurfaceTable from "./SurfaceTable.svelte";
- import TodoList from "./TodoList.svelte";
- import Toggle from "./Toggle.svelte";
+ import type { InvokeMessage, SurfaceSpec } from "@dispatch/ui-contract";
+ import { groupRenderFields, planSurface } from "../logic/plan";
+ import Button from "./Button.svelte";
+ import MessageQueueList from "./MessageQueueList.svelte";
+ import Number from "./Number.svelte";
+ import Progress from "./Progress.svelte";
+ import Selector from "./Selector.svelte";
+ import StatTable from "./StatTable.svelte";
+ import SurfaceTable from "./SurfaceTable.svelte";
+ import TodoList from "./TodoList.svelte";
+ import Toggle from "./Toggle.svelte";
- let {
- spec,
- onInvoke,
- }: { spec: SurfaceSpec; onInvoke: (msg: InvokeMessage) => void } = $props();
+ let { spec, onInvoke }: { spec: SurfaceSpec; onInvoke: (msg: InvokeMessage) => void } = $props();
- const plan = $derived(planSurface(spec));
- // Consecutive stats render together as one aligned table; everything else is
- // a standalone widget. Grouping keys on field KIND only — never the surface id.
- const groups = $derived(groupRenderFields(plan.fields));
+ const plan = $derived(planSurface(spec));
+ // Consecutive stats render together as one aligned table; everything else is
+ // a standalone widget. Grouping keys on field KIND only — never the surface id.
+ const groups = $derived(groupRenderFields(plan.fields));
</script>
<article>
- <h2>{spec.title}</h2>
- {#each groups as group, i (i)}
- {#if group.type === "stats"}
- <StatTable stats={group.stats} />
- {:else if group.field.kind === "toggle"}
- <Toggle field={group.field} surfaceId={spec.id} {onInvoke} />
- {:else if group.field.kind === "progress"}
- <Progress field={group.field} />
- {:else if group.field.kind === "selector"}
- <Selector field={group.field} surfaceId={spec.id} {onInvoke} />
- {:else if group.field.kind === "number"}
- <Number field={group.field} surfaceId={spec.id} {onInvoke} />
- {:else if group.field.kind === "button"}
- <Button field={group.field} surfaceId={spec.id} {onInvoke} />
- {:else if group.field.kind === "custom"}
- <!-- Dispatch on rendererId (a renderer KIND, never a surface id);
- unknown ids gracefully render nothing. -->
- {#if group.field.rendererId === "table"}
- <SurfaceTable payload={group.field.payload} />
- {:else if group.field.rendererId === "message-queue"}
- <MessageQueueList payload={group.field.payload} />
- {:else if group.field.rendererId === "todo"}
- <TodoList payload={group.field.payload} />
- {/if}
- {/if}
- {/each}
+ <h2>{spec.title}</h2>
+ {#each groups as group, i (i)}
+ {#if group.type === "stats"}
+ <StatTable stats={group.stats} />
+ {:else if group.field.kind === "toggle"}
+ <Toggle field={group.field} surfaceId={spec.id} {onInvoke} />
+ {:else if group.field.kind === "progress"}
+ <Progress field={group.field} />
+ {:else if group.field.kind === "selector"}
+ <Selector field={group.field} surfaceId={spec.id} {onInvoke} />
+ {:else if group.field.kind === "number"}
+ <Number field={group.field} surfaceId={spec.id} {onInvoke} />
+ {:else if group.field.kind === "button"}
+ <Button field={group.field} surfaceId={spec.id} {onInvoke} />
+ {:else if group.field.kind === "custom"}
+ <!-- Dispatch on rendererId (a renderer KIND, never a surface id);
+ unknown ids gracefully render nothing. -->
+ {#if group.field.rendererId === "table"}
+ <SurfaceTable payload={group.field.payload} />
+ {:else if group.field.rendererId === "message-queue"}
+ <MessageQueueList payload={group.field.payload} />
+ {:else if group.field.rendererId === "todo"}
+ <TodoList payload={group.field.payload} />
+ {/if}
+ {/if}
+ {/each}
</article>