From b28b814e95d191ecf0cc4f5001930d6e55af356a Mon Sep 17 00:00:00 2001 From: Guilhem Lemouel Date: Wed, 29 Apr 2026 12:27:38 +0200 Subject: [PATCH] feat: replace flow summary card with breadcrumb + frame the flow as a chat-owned card MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - FlowBuilder: replace the SummaryPathDisplay box (path / summary stack) with an inline breadcrumb (Workflow icon + "Flows" / folder / summary-or-leaf, separated by ChevronRight). The breadcrumb derives $pathStore segments via $derived (breadcrumbParts/Folder/Leaf) so it can be referenced from the template without {@const}, which is not allowed as a direct child of
. Drops the now-unused SummaryPathDisplay import. - design-sandbox: position the right pane as a contained "chat-owned" workspace — p-2 pl-0 padding plus an inner rounded-xl border / shadow-sm card wrapping FlowWrapper. Drop the left pane's right border so the chat reads as full-bleed primary content. Add a chat-side header (h-12 to match FlowBuilder's max-h-12 row) with a MessageSquare icon and a conversationTitle derived from the first user message in the current chat (truncated to 60 chars). Hide the splitpanes divider visually via a scoped :global(.design-sandbox-splitpanes ...) rule while keeping the hit area so the split is still resizable. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../src/lib/components/FlowBuilder.svelte | 35 +++++++--- .../(logged)/design-sandbox/+page.svelte | 67 +++++++++++++++---- 2 files changed, 80 insertions(+), 22 deletions(-) diff --git a/frontend/src/lib/components/FlowBuilder.svelte b/frontend/src/lib/components/FlowBuilder.svelte index 6c135a70b5..e0222e4b59 100644 --- a/frontend/src/lib/components/FlowBuilder.svelte +++ b/frontend/src/lib/components/FlowBuilder.svelte @@ -59,7 +59,9 @@ CheckCircle, RefreshCw, CheckCheck, - Disc + Disc, + ChevronRight, + Workflow } from 'lucide-svelte' import Awareness from './Awareness.svelte' import { getAllModules } from './flows/flowExplorer' @@ -71,7 +73,6 @@ import { resetAllTodos, skipAllTodos } from '$lib/tutorialUtils' import { tutorialsToDo } from '$lib/stores' import { getTutorialIndex } from '$lib/tutorials/config' - import SummaryPathDisplay from './SummaryPathDisplay.svelte' import type { FlowBuilderWhitelabelCustomUi } from './custom_ui' import FlowYamlEditor from './flows/header/FlowYamlEditor.svelte' import { type TriggerContext, type ScheduleTrigger } from './triggers' @@ -622,6 +623,15 @@ const flowEditorDrawer = writable(undefined) const history = initHistory(untrack(() => flowStore).val) const pathStore = writable(untrack(() => pathStoreInit) ?? initialPath) + + // Breadcrumb derivations for the flow header (replaces SummaryPathDisplay). + const breadcrumbParts = $derived(($pathStore ?? '').split('/').filter(Boolean)) + const breadcrumbFolder = $derived( + breadcrumbParts.length > 1 ? breadcrumbParts.slice(0, -1).join('/') : '' + ) + const breadcrumbLeaf = $derived( + breadcrumbParts.length > 0 ? breadcrumbParts[breadcrumbParts.length - 1] : 'untitled' + ) const captureOn = writable(false) const showCaptureHint = writable(undefined) const flowInputEditorStateStore = writable({ @@ -1150,13 +1160,20 @@
-
- +
+ + Flows + {#if breadcrumbFolder} + + {breadcrumbFolder} + {/if} + + + {flowStore.val.summary || breadcrumbLeaf} +
+ +