From d013ac5f1fa4c8444a6dfa2b9955df17e9e44221 Mon Sep 17 00:00:00 2001 From: ciregenz Date: Sun, 9 Aug 2026 11:56:27 -0700 Subject: [PATCH] [eric] canvas: app chrome identity is the app's own monogram tile (no name), and the Workflows strip goes bare like Settings/Marketplace --- .../Dashboard/cards/DashboardViewCard.tsx | 47 ++++++++++++------- .../Workflows/app/WorkflowsAppContent.tsx | 5 -- 2 files changed, 29 insertions(+), 23 deletions(-) diff --git a/frontend/src/app/pages/Dashboard/cards/DashboardViewCard.tsx b/frontend/src/app/pages/Dashboard/cards/DashboardViewCard.tsx index b23eb0f7..221989cc 100644 --- a/frontend/src/app/pages/Dashboard/cards/DashboardViewCard.tsx +++ b/frontend/src/app/pages/Dashboard/cards/DashboardViewCard.tsx @@ -5,7 +5,6 @@ import Typography from '@mui/material/Typography'; import IconButton from '@mui/material/IconButton'; import Tooltip from '@mui/material/Tooltip'; import RefreshIcon from '@mui/icons-material/Refresh'; -import GridViewRoundedIcon from '@mui/icons-material/GridViewRounded'; import VisibilityRoundedIcon from '@mui/icons-material/VisibilityRounded'; import KeyboardArrowUpRounded from '@mui/icons-material/KeyboardArrowUpRounded'; import { Output, SERVE_BASE, updateOutput } from '@/shared/state/outputsSlice'; @@ -646,6 +645,16 @@ const DashboardViewCard: React.FC = ({ const dockActive = !!dockRect && !dragging && !localResize && !isTiled && !isMinimized; const tiledSize = useTiledCard({ cardId: cardKey, zone: tileZone, active: !isMinimized, originX: displayX, originY: displayY, getCamera: getCanvasState }); + // Same identity math as the dock and Applications window, shrunk to chrome size. + const appHue = ((): number => { + let h = 0; + const name = output.name || '?'; + for (let i = 0; i < name.length; i++) h = (h * 31 + name.charCodeAt(i)) >>> 0; + return h % 360; + })(); + const p_glyph = (output.icon || '').trim(); + const appGlyph = p_glyph && p_glyph.length <= 3 ? p_glyph : (output.name || '?').trim().charAt(0).toUpperCase(); + // The old 8-icon header cluster, demoted behind one kebab: view switcher, new window, toolbar // collapse, then the same rows the card's right-click menu carries. const headerKebabRows = (): CardMenuRow[] => ([ @@ -808,26 +817,28 @@ const DashboardViewCard: React.FC = ({ e.stopPropagation()} sx={{ display: 'flex', alignItems: 'center', flexShrink: 0, mr: 0.25 }}> handleRemove()} onMinimize={onMinimize} onTile={onTile} tiled={!!tileZone} /> - {/* Centered identity (Safari compact): the name floats over the bar's midpoint, not the corner. */} - - - + - {output.name} - {instance > 1 && ( - - #{instance} - - )} - + {appGlyph} + + {instance > 1 && ( + #{instance} + )} diff --git a/frontend/src/app/pages/Workflows/app/WorkflowsAppContent.tsx b/frontend/src/app/pages/Workflows/app/WorkflowsAppContent.tsx index 0363c700..5337a5b2 100644 --- a/frontend/src/app/pages/Workflows/app/WorkflowsAppContent.tsx +++ b/frontend/src/app/pages/Workflows/app/WorkflowsAppContent.tsx @@ -1,5 +1,4 @@ import React, { useEffect, useMemo, useState } from 'react'; -import EventRepeatIcon from '@mui/icons-material/EventRepeat'; import { useAppDispatch, useAppSelector } from '@/shared/hooks'; import { clearWorkflowsAppTarget, closeWorkflowsApp, toggleMinimizeCard, WORKFLOWS_HUB_ID } from '@/shared/state/dashboardLayoutSlice'; import WindowControls from '@/app/pages/Dashboard/cards/WindowControls'; @@ -88,10 +87,6 @@ const WorkflowsAppContent: React.FC<{ header: CardHeader; tileZone: string | und tiled={!!tileZone} /> -
- - Workflows -
{selected && ( // The share dialog portals to the body but its events still bubble the React tree, so stop them here or dragging the card follows a click inside the modal.