From 871957b930203c019e631c4606cfdf8266d222fa Mon Sep 17 00:00:00 2001 From: Adam Malczewski Date: Wed, 10 Jun 2026 16:29:01 +0900 Subject: feat(views,surface-host): Extensions sidebar view — auto-expanded surfaces + tables MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit views (new feature): - pure panel-stack reducer + thin generic ViewSidebar (dropdown picker + add/remove), switches on view KIND, never a surface id Extensions view (composition root): - folds frontend modules + backend surfaces into one "Extensions" view - frontend module list AGGREGATED from each feature's public `manifest` export (can't drift); no per-module version (FE features are internal to dispatch-web) - surfaces are AUTO-SUBSCRIBED on catalog + rendered expanded (no catalog buttons) surface-host: - consecutive `stat` fields coalesce into one aligned label/value table (StatTable) - generic custom-field renderer: dispatch on rendererId === "table" → SurfaceTable (pure parseTablePayload), so a backend `custom`/table field renders generically - shared presentational components/Table.svelte (used by both, neither feature depends on the other) store: - auto-subscribe every catalog entry, unsubscribe vanished ones, re-subscribe all on reconnect; expose all received specs via `surfaces` (drops single-selection) backend-handoff: CR-1 — emit Loaded Extensions as a custom/table field; notes what's already covered FE-side (renderer shipped, stat-table fallback works). --- src/features/surface-host/ui/Stat.svelte | 10 ------- src/features/surface-host/ui/StatTable.svelte | 21 ++++++++++++++ src/features/surface-host/ui/SurfaceTable.svelte | 14 +++++++++ src/features/surface-host/ui/SurfaceView.svelte | 36 +++++++++++++++--------- 4 files changed, 58 insertions(+), 23 deletions(-) delete mode 100644 src/features/surface-host/ui/Stat.svelte create mode 100644 src/features/surface-host/ui/StatTable.svelte create mode 100644 src/features/surface-host/ui/SurfaceTable.svelte (limited to 'src/features/surface-host/ui') diff --git a/src/features/surface-host/ui/Stat.svelte b/src/features/surface-host/ui/Stat.svelte deleted file mode 100644 index e184dab..0000000 --- a/src/features/surface-host/ui/Stat.svelte +++ /dev/null @@ -1,10 +0,0 @@ - - -
-
{field.label}
-
{field.value}
-
diff --git a/src/features/surface-host/ui/StatTable.svelte b/src/features/surface-host/ui/StatTable.svelte new file mode 100644 index 0000000..415423f --- /dev/null +++ b/src/features/surface-host/ui/StatTable.svelte @@ -0,0 +1,21 @@ + + +
+ + + {#each stats as stat, i (i)} + + + + + {/each} + +
{stat.label}{stat.value}
+
diff --git a/src/features/surface-host/ui/SurfaceTable.svelte b/src/features/surface-host/ui/SurfaceTable.svelte new file mode 100644 index 0000000..764cc36 --- /dev/null +++ b/src/features/surface-host/ui/SurfaceTable.svelte @@ -0,0 +1,14 @@ + + +{#if data !== null} + +{/if} diff --git a/src/features/surface-host/ui/SurfaceView.svelte b/src/features/surface-host/ui/SurfaceView.svelte index 4207913..5210e8c 100644 --- a/src/features/surface-host/ui/SurfaceView.svelte +++ b/src/features/surface-host/ui/SurfaceView.svelte @@ -1,10 +1,11 @@

{spec.title}

- {#each plan.fields as field (field)} - {#if field.kind === "toggle"} - - {:else if field.kind === "progress"} - - {:else if field.kind === "selector"} - - {:else if field.kind === "stat"} - - {:else if field.kind === "button"} -
-- cgit v1.2.3