diff --git a/frontend/src/app/pages/Dashboard/ChatBubbleTeardrop.tsx b/frontend/src/app/pages/Dashboard/ChatBubbleTeardrop.tsx new file mode 100644 index 00000000..34ff5c7a --- /dev/null +++ b/frontend/src/app/pages/Dashboard/ChatBubbleTeardrop.tsx @@ -0,0 +1,19 @@ +import React from 'react'; + +// Custom near-circular speech bubble with a teardrop tail at the +// bottom-left. The bubble body is a rounded square with corner radius +// ~half the body size, so it reads as a circle. Matches Image #57; MUI +// rounded chat glyphs either fill the bubble or omit the tail. +export default function ChatBubbleTeardrop(props: { sx?: { fontSize?: number } }) { + const size = props.sx?.fontSize ?? 18; + return ( + + + + ); +} diff --git a/frontend/src/app/pages/Dashboard/DashboardToolbar.tsx b/frontend/src/app/pages/Dashboard/DashboardToolbar.tsx index 604ecfad..2ba753c9 100644 --- a/frontend/src/app/pages/Dashboard/DashboardToolbar.tsx +++ b/frontend/src/app/pages/Dashboard/DashboardToolbar.tsx @@ -9,23 +9,8 @@ import { styled } from '@mui/material/styles'; import AddRounded from '@mui/icons-material/AddRounded'; import HistoryRounded from '@mui/icons-material/HistoryRounded'; -// Custom near-circular speech bubble with a teardrop tail at the -// bottom-left. The bubble body is a rounded square with corner radius -// ~half the body size, so it reads as a circle. Matches Image #57; MUI -// rounded chat glyphs either fill the bubble or omit the tail. -function ChatBubbleTeardrop(props: { sx?: { fontSize?: number } }) { - const size = props.sx?.fontSize ?? 18; - return ( - - - - ); -} +import ChatBubbleTeardrop from './ChatBubbleTeardrop'; + // Collapsed-row buttons hop up one after another when the toolbar appears. const popIn = (i: number) => ({ animation: `toolbar-pop 0.4s cubic-bezier(0.2, 1.4, 0.4, 1) ${i * 55}ms both`, diff --git a/frontend/src/app/pages/Dashboard/canvas/DashboardEmptyState.tsx b/frontend/src/app/pages/Dashboard/canvas/DashboardEmptyState.tsx index 749f9343..e59c8492 100644 --- a/frontend/src/app/pages/Dashboard/canvas/DashboardEmptyState.tsx +++ b/frontend/src/app/pages/Dashboard/canvas/DashboardEmptyState.tsx @@ -2,6 +2,7 @@ import React from 'react'; import Box from '@mui/material/Box'; import Typography from '@mui/material/Typography'; import type { ClaudeTokens } from '@/shared/styles/claudeTokens'; +import ChatBubbleTeardrop from '../ChatBubbleTeardrop'; const DashboardEmptyState: React.FC<{ c: ClaudeTokens }> = ({ c }) => ( = ({ c }) => ( = ({ c }) => ( animation: 'empty-state-shimmer 6s linear infinite', }} > - Click the chat bubble below to launch your first agent + Click the + {/* Literal toolbar glyph; the shimmer's transparent color would hide it, so reset color here. */} + + + + below to launch your first agent );