@agentiffai/design 1.3.19 → 1.3.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +119 -20
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.js +119 -20
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/theme/tokens.ts","../src/components/AssistantThinking/AssistantThinking.styles.ts","../src/components/AssistantThinking/AssistantThinking.tsx","../src/components/ChatInput/ChatInput.styles.ts","../src/components/ChatInput/ChatInput.tsx","../src/components/layout/CategoryNav/CategoryNav.styles.ts","../src/components/layout/CategoryNav/CategoryNav.tsx","../src/components/layout/Icon/Icon.styles.ts","../src/components/layout/Icon/icons.ts","../src/components/layout/Icon/Icon.tsx","../src/components/layout/NavHorizontal/NavHorizontal.styles.ts","../src/components/layout/NavHorizontal/NavHorizontal.tsx","../src/components/layout/NavVertical/NavVertical.styles.ts","../src/components/layout/NavVertical/NavVertical.tsx","../src/components/layout/Layout/Layout.styles.ts","../src/components/layout/Layout/Layout.tsx","../src/components/layout/NavHorizontal/ActionButtons.styles.ts","../src/components/layout/NavHorizontal/ActionButtons.tsx","../src/components/layout/NavHorizontal/WorkflowStatusCard.styles.ts","../src/components/layout/NavHorizontal/WorkflowStatusCard.tsx","../src/components/NotificationCard/NotificationCard.dark.styles.ts","../src/components/NotificationCard/DarkNotificationCard.tsx","../src/components/layout/PaneMenus/PaneMenus.styles.ts","../src/components/layout/PaneMenus/PaneMenus.tsx","../src/components/layout/PaneSectionHeader/PaneSectionHeader.styles.ts","../src/components/layout/PaneSectionHeader/PaneSectionHeader.tsx","../src/components/layout/ServiceIcon/ServiceIcon.styles.ts","../src/components/layout/ServiceIcon/ServiceIcon.tsx","../src/components/NotificationCard/NotificationCard.styles.ts","../src/components/NotificationCard/NotificationCard.tsx","../src/components/UserMessage/UserMessage.styles.ts","../src/components/UserMessage/UserMessage.tsx","../src/theme/darkTheme.ts","../src/theme/GlobalStyle.tsx","../src/theme/lightTheme.ts","../src/components/connections/ConnectionStatusBadge.tsx","../src/components/connections/IntegrationCard.tsx","../src/components/connections/SecretInput.tsx","../src/components/copilotkit/StreamingText.tsx","../src/components/copilotkit/Messages/AssistantMessage.styles.ts","../src/components/copilotkit/Messages/FileAttachment.styles.ts","../src/components/copilotkit/Messages/FileAttachment.tsx","../src/components/copilotkit/Messages/AssistantMessage.tsx","../src/components/copilotkit/adapters/AssistantMessageAdapter.tsx","../src/components/copilotkit/Button/Button.styles.ts","../src/components/copilotkit/Button/Button.tsx","../src/components/copilotkit/Actions/Actions.styles.ts","../src/components/copilotkit/Actions/Actions.tsx","../src/components/copilotkit/Response/Response.styles.ts","../src/components/copilotkit/Response/Response.tsx","../src/components/copilotkit/AgentState/AgentState.styles.ts","../src/components/copilotkit/AgentState/AgentState.tsx","../src/components/copilotkit/Footer/Footer.styles.ts","../src/components/copilotkit/Footer/Footer.tsx","../src/components/copilotkit/StreamStatusIndicator.tsx","../src/components/copilotkit/Header/Header.styles.ts","../src/components/copilotkit/Header/Header.tsx","../src/components/copilotkit/Input/Input.styles.ts","../src/components/copilotkit/Input/Input.tsx","../src/components/copilotkit/Messages/Messages.styles.ts","../src/components/copilotkit/Messages/Messages.tsx","../src/components/copilotkit/Messages/MessagesList.styles.ts","../src/components/copilotkit/Messages/MessagesList.tsx","../src/components/copilotkit/Messages/UserMessage.styles.ts","../src/components/copilotkit/Messages/UserMessage.tsx","../src/components/copilotkit/StreamErrorMessage.tsx","../src/components/copilotkit/Suggestions/Suggestions.styles.ts","../src/components/copilotkit/Suggestions/Suggestions.tsx","../src/components/copilotkit/Window/Window.styles.ts","../src/components/copilotkit/Window/Window.tsx","../src/components/icons/FacebookIcon/FacebookIcon.tsx","../src/components/icons/GmailIcon/GmailIcon.styles.ts","../src/components/icons/GmailIcon/GmailIcon.tsx","../src/components/icons/InstagramIcon/InstagramIcon.tsx","../src/components/icons/LinkedInIcon/LinkedInIcon.styles.ts","../src/components/icons/LinkedInIcon/LinkedInIcon.tsx","../src/components/icons/PostizIcon/PostizIcon.styles.ts","../src/components/icons/PostizIcon/PostizIcon.tsx","../src/components/icons/RedditIcon/RedditIcon.tsx","../src/components/icons/SlackIcon/SlackIcon.tsx","../src/components/icons/TelegramIcon/TelegramIcon.tsx","../src/components/icons/WhatsAppIcon/WhatsAppIcon.tsx","../src/components/icons/XIcon/XIcon.styles.ts","../src/components/icons/XIcon/XIcon.tsx","../src/components/icons/YouTubeIcon/YouTubeIcon.tsx","../src/components/social-media/constants.tsx","../src/components/social-media/PostApprovalControls.tsx","../src/components/social-media/PostPreviewCard.tsx","../src/components/social-media/PlatformCarousel.tsx","../src/components/social-media/PlatformGrid.tsx","../src/components/social-media/SocialMediaCanvas.tsx","../src/components/social-media/redditEngagementConstants.ts","../src/components/social-media/RedditOpportunityCard.tsx","../src/components/social-media/RedditEngagementControls.tsx","../src/components/usage/TokenUsageCard.tsx","../src/components/workflow/WorkflowCard.tsx","../src/components/workflow/WorkflowErrorAlert.tsx","../src/components/workflow/WorkflowProgressBar.tsx","../src/components/workflow/WorkflowResultPanel.tsx","../src/components/workflow/WorkflowStatusBadge.tsx"],"names":["keyframes","styled","useRef","jsxs","jsx","useState","useCallback","useEffect","useButton","Container","css","IconWrapper","DisclosureGroup","Disclosure","Button","DisclosurePanel","Heading","Fragment","useMeter","useTab","useTabList","useTabPanel","useTabListState","Item","BackButton","ChevronIcon","ItemIcon","memo","createGlobalStyle","parsed","React","useMemo","Avatar","LoadingDots","pulse","ActionButton","ActionsContainer","dotPulse","Dot","Message","StreamingText","InputWrapper","Input","useTextField","StyledUserMessage","MessageContent","MessageTime","UserMessage","Content","Actions","useId","StyledIconWrapper","SVG_CONTENT","Header","ProgressBar","ProgressBarFill","fadeIn","PlatformIcon","ContentContainer","EmptyState","Icon","CardContainer","SkeletonContent","SkeletonLine","PostContent","ProgressBarContainer","ProgressBarTrack","shimmer","formatNumber","formatRelativeTime","Card","Title","WorkflowName","Description","IconContainer","ErrorMessage","CloseButton","ErrorIcon","CloseIcon","statusColors","CollapseIcon","BadgeContainer","Label"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Design Tokens\n * Centralized design system tokens for colors, typography, spacing, etc.\n * These tokens are the single source of truth for styling across all components.\n */\n\nexport const tokens = {\n colors: {\n // Brand colors\n primary: '#2CB0AB', // Teal (main brand color)\n secondary: '#264E68', // Deep Blue\n accent: '#459FB9', // Sky Blue\n seaGreen: '#4EB999', // Sea Green (additional brand color)\n\n // Backgrounds - dark theme optimized\n background: {\n darkest: '#0a1b2a', // Darkest Blue (brand color)\n darker: '#151a26', // Discord gray (preserved)\n dark: '#1b2230', // Discord surface gray (preserved)\n light: '#252d3d', // Discord border gray (preserved)\n },\n\n // Text hierarchy\n text: {\n primary: '#FFFFFF',\n secondary: '#B4B8C5',\n tertiary: '#6B7280',\n disabled: '#4B5563',\n },\n\n // Semantic colors\n success: '#2CB0AB', // Teal (brand aligned)\n error: '#EF4444',\n warning: '#F59E0B',\n info: '#459FB9', // Sky Blue (brand aligned)\n\n // Status colors (for workflow/SSE events)\n status: {\n pending: '#6B7280',\n editing: '#3B82F6',\n idle: '#6B7280',\n running: '#459FB9', // Sky Blue (brand aligned)\n completed: '#2CB0AB', // Teal (brand aligned)\n failed: '#EF4444',\n timeout: '#F59E0B',\n // Badge status (online/offline pattern)\n online: '#2CB0AB',\n offline: '#EF4444',\n busy: '#459FB9',\n },\n\n // Connection status\n connection: {\n connected: '#2CB0AB', // Teal (brand aligned)\n streaming: '#459FB9', // Sky Blue (brand aligned)\n disconnected: '#EF4444',\n reconnecting: '#F59E0B',\n },\n\n // Surface variants (for overlays, cards, panels)\n surface: {\n base: '#1b2230',\n elevated: '#252d3d',\n overlay: 'rgba(255, 255, 255, 0.05)',\n overlayHover: 'rgba(255, 255, 255, 0.1)',\n overlayActive: 'rgba(255, 255, 255, 0.15)',\n subtle: 'rgba(255, 255, 255, 0.02)',\n glass: 'rgba(255, 255, 255, 0.26)',\n glassBorder: 'rgba(255, 255, 255, 0.3)',\n },\n\n // UI Element colors\n border: {\n default: 'rgba(255, 255, 255, 0.1)',\n subtle: 'rgba(255, 255, 255, 0.05)',\n hover: 'rgba(255, 255, 255, 0.2)',\n focus: '#2CB0AB', // Teal (brand aligned)\n error: '#EF4444',\n },\n\n // Scrollbar colors\n scrollbar: {\n track: 'transparent',\n thumb: 'rgba(255, 255, 255, 0.2)',\n thumbHover: 'rgba(255, 255, 255, 0.3)',\n },\n\n // Message bubbles\n message: {\n user: '#264E68', // Deep Blue (brand color)\n ai: '#1b2230', // Dark background\n system: '#151a26', // Darker background\n },\n\n // Overlays and backdrops\n overlay: 'rgba(0, 0, 0, 0.5)',\n backdrop: 'rgba(27, 34, 48, 0.95)',\n\n // Icon colors\n icon: {\n default: '#B4B8C5',\n muted: '#6B7280',\n active: '#2CB0AB',\n },\n\n // Platform brand colors (for social media icons)\n platform: {\n facebook: '#1877F2',\n instagram: '#E4405F',\n linkedin: '#0A66C2',\n x: '#000000',\n twitter: '#1DA1F2',\n youtube: '#FF0000',\n reddit: '#FF4500',\n slack: '#4A154B',\n telegram: '#0088CC',\n whatsapp: '#25D366',\n gmail: '#EA4335',\n },\n },\n\n typography: {\n fontFamily: {\n primary:\n \"'Roboto', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Helvetica Neue', sans-serif\",\n heading:\n \"'Roboto', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Helvetica Neue', sans-serif\",\n monospace: \"'Roboto Mono', 'Monaco', 'Menlo', 'Ubuntu Mono', monospace\",\n },\n fontSize: {\n xs: '0.875rem', // 14px (was 12px, increased for better readability)\n sm: '1rem', // 16px (was 14px, increased for better readability)\n base: '1.125rem', // 18px (was 16px, increased for better readability)\n lg: '1.125rem', // 18px (heading size, unchanged)\n xl: '1.25rem', // 20px (heading size, unchanged)\n '2xl': '1.5rem', // 24px (heading size, unchanged)\n '3xl': '1.875rem', // 30px (heading size, unchanged)\n '4xl': '2.25rem', // 36px (heading size, unchanged)\n },\n fontWeight: {\n light: 300,\n regular: 400,\n medium: 500,\n semibold: 600,\n bold: 700,\n },\n lineHeight: {\n tight: 1.25,\n normal: 1.5,\n relaxed: 1.75,\n },\n },\n\n spacing: {\n xs: '0.25rem', // 4px\n sm: '0.5rem', // 8px\n md: '1rem', // 16px\n lg: '1.5rem', // 24px\n xl: '2rem', // 32px\n '2xl': '3rem', // 48px\n '3xl': '4rem', // 64px\n },\n\n borderRadius: {\n none: '0',\n sm: '0.25rem', // 4px\n md: '0.5rem', // 8px\n lg: '0.75rem', // 12px\n xl: '1rem', // 16px\n '2xl': '1.5rem', // 24px\n full: '9999px', // Fully rounded\n },\n\n shadows: {\n none: 'none',\n sm: '0 1px 2px 0 rgba(0, 0, 0, 0.05)',\n md: '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)',\n lg: '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)',\n xl: '0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)',\n card: '0 4px 20px rgba(0, 0, 0, 0.3)',\n glow: {\n primary: '0 0 20px rgba(44, 176, 171, 0.3)',\n secondary: '0 0 20px rgba(38, 78, 104, 0.3)',\n accent: '0 0 20px rgba(69, 159, 185, 0.3)',\n },\n },\n\n transitions: {\n fast: '150ms ease-in-out',\n normal: '250ms ease-in-out',\n slow: '350ms ease-in-out',\n },\n\n animation: {\n duration: {\n micro: '150ms',\n short: '200ms',\n medium: '300ms',\n long: '500ms',\n },\n easing: {\n enter: 'cubic-bezier(0.4, 0, 0.2, 1)',\n exit: 'cubic-bezier(0.4, 0, 1, 1)',\n smooth: 'cubic-bezier(0.4, 0, 0.2, 1)',\n linear: 'linear',\n },\n },\n\n zIndex: {\n base: 0,\n dropdown: 1000,\n sticky: 1020,\n fixed: 1030,\n overlay: 1100,\n modal: 1200,\n popover: 1300,\n tooltip: 1400,\n toast: 1500,\n },\n\n breakpoints: {\n mobile: 640,\n tablet: 1024,\n desktop: 1280,\n },\n} as const;\n\nexport type Tokens = typeof tokens;\n","import styled, { keyframes } from 'styled-components';\nimport { tokens } from '../../theme/tokens';\n\nconst dotPulse = keyframes`\n 0%, 100% {\n opacity: 0.3;\n transform: scale(0.8);\n }\n 50% {\n opacity: 1;\n transform: scale(1);\n }\n`;\n\nconst pulse = keyframes`\n 0%, 100% {\n opacity: 0.5;\n transform: scale(1);\n }\n 50% {\n opacity: 1;\n transform: scale(1.2);\n }\n`;\n\nconst wave = keyframes`\n 0%, 40%, 100% {\n transform: translateY(0);\n }\n 20% {\n transform: translateY(-8px);\n }\n`;\n\ninterface SizeProps {\n size?: 'sm' | 'md' | 'lg';\n}\n\nconst getSizeValue = (size: 'sm' | 'md' | 'lg' = 'md') => {\n switch (size) {\n case 'sm':\n return {\n padding: `${tokens.spacing.sm} ${tokens.spacing.md}`,\n avatar: '32px',\n icon: '16px',\n fontSize: tokens.typography.fontSize.xs,\n dotSize: '4px',\n };\n case 'lg':\n return {\n padding: `${tokens.spacing.md} ${tokens.spacing.xl}`,\n avatar: '48px',\n icon: '24px',\n fontSize: tokens.typography.fontSize.base,\n dotSize: '8px',\n };\n case 'md':\n default:\n return {\n padding: `${tokens.spacing.md} ${tokens.spacing.md}`,\n avatar: '40px',\n icon: '20px',\n fontSize: tokens.typography.fontSize.sm,\n dotSize: '6px',\n };\n }\n};\n\nexport const Container = styled.div<SizeProps>`\n display: inline-flex;\n align-items: center;\n gap: ${tokens.spacing.md};\n padding: ${(props) => getSizeValue(props.size).padding};\n background-color: ${tokens.colors.surface.base};\n border-radius: ${tokens.borderRadius.xl};\n box-shadow: ${tokens.shadows.none};\n font-family: ${tokens.typography.fontFamily.primary};\n max-width: fit-content;\n margin: 0 auto;\n`;\n\nexport const Avatar = styled.div<SizeProps>`\n width: ${(props) => getSizeValue(props.size).avatar};\n height: ${(props) => getSizeValue(props.size).avatar};\n border-radius: ${tokens.borderRadius.full};\n background: linear-gradient(135deg, ${tokens.colors.secondary} 0%, ${tokens.colors.primary} 100%);\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n box-shadow: ${tokens.shadows.glow.primary};\n`;\n\nexport const HeadphonesIcon = styled.svg<SizeProps>`\n width: ${(props) => getSizeValue(props.size).icon};\n height: ${(props) => getSizeValue(props.size).icon};\n color: ${tokens.colors.text.primary};\n`;\n\nexport const Content = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.sm};\n`;\n\ninterface LoadingDotsProps extends SizeProps {\n variant?: 'dots' | 'pulse' | 'wave';\n}\n\nexport const LoadingDots = styled.div<LoadingDotsProps>`\n display: flex;\n align-items: center;\n gap: ${(props) => (props.variant === 'wave' ? '2px' : `${tokens.spacing.xs}`)};\n padding: 0 ${tokens.spacing.xs};\n`;\n\ninterface DotProps extends SizeProps {\n variant?: 'dots' | 'pulse' | 'wave';\n}\n\nexport const Dot = styled.span<DotProps>`\n width: ${(props) => getSizeValue(props.size).dotSize};\n height: ${(props) => getSizeValue(props.size).dotSize};\n border-radius: ${tokens.borderRadius.full};\n background-color: ${tokens.colors.text.tertiary};\n animation: ${(props) => {\n switch (props.variant) {\n case 'pulse':\n return pulse;\n case 'wave':\n return wave;\n case 'dots':\n default:\n return dotPulse;\n }\n }}\n 1.4s ease-in-out infinite;\n`;\n\nexport const Message = styled.span<SizeProps>`\n font-size: ${(props) => getSizeValue(props.size).fontSize};\n color: ${tokens.colors.text.secondary};\n font-weight: ${tokens.typography.fontWeight.regular};\n line-height: ${tokens.typography.lineHeight.normal};\n white-space: nowrap;\n`;\n","import { useRef } from 'react';\nimport {\n Avatar,\n Container,\n Content,\n Dot,\n HeadphonesIcon,\n LoadingDots,\n Message,\n} from './AssistantThinking.styles';\n\nexport interface AssistantThinkingProps {\n message?: string;\n className?: string;\n ariaLabel?: string;\n /** Visual variant for the loading indicator */\n variant?: 'dots' | 'pulse' | 'wave' | 'text';\n /** Size of the component */\n size?: 'sm' | 'md' | 'lg';\n}\n\nexport function AssistantThinking({\n message = 'Analyzing data, please wait...',\n className,\n ariaLabel = 'Assistant is thinking',\n variant = 'dots',\n size = 'md',\n}: AssistantThinkingProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n\n const renderLoadingIndicator = () => {\n switch (variant) {\n case 'dots':\n return (\n <LoadingDots aria-hidden=\"true\" size={size}>\n <Dot style={{ animationDelay: '0ms' }} size={size} />\n <Dot style={{ animationDelay: '150ms' }} size={size} />\n <Dot style={{ animationDelay: '300ms' }} size={size} />\n </LoadingDots>\n );\n case 'pulse':\n return (\n <LoadingDots aria-hidden=\"true\" size={size} variant=\"pulse\">\n <Dot style={{ animationDelay: '0ms' }} size={size} variant=\"pulse\" />\n </LoadingDots>\n );\n case 'wave':\n return (\n <LoadingDots aria-hidden=\"true\" size={size} variant=\"wave\">\n <Dot style={{ animationDelay: '0ms' }} size={size} variant=\"wave\" />\n <Dot style={{ animationDelay: '100ms' }} size={size} variant=\"wave\" />\n <Dot style={{ animationDelay: '200ms' }} size={size} variant=\"wave\" />\n <Dot style={{ animationDelay: '300ms' }} size={size} variant=\"wave\" />\n <Dot style={{ animationDelay: '400ms' }} size={size} variant=\"wave\" />\n </LoadingDots>\n );\n case 'text':\n return null; // Just show the message with no indicator\n default:\n return null;\n }\n };\n\n return (\n <Container\n ref={containerRef}\n className={className}\n role=\"status\"\n aria-live=\"polite\"\n aria-label={ariaLabel}\n size={size}\n >\n <Avatar aria-hidden=\"true\" size={size}>\n <HeadphonesIcon viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M17 13a4 4 0 0 1 0 8c-2.142 0-4-1.79-4-4h-2a4 4 0 1 1-.535-2h3.07A4 4 0 0 1 17 13M2 12v-2h2V7a4 4 0 0 1 4-4h8a4 4 0 0 1 4 4v3h2v2z\" />\n </HeadphonesIcon>\n </Avatar>\n <Content>\n {renderLoadingIndicator()}\n <Message size={size}>{message}</Message>\n </Content>\n </Container>\n );\n}\n\nAssistantThinking.displayName = 'AssistantThinking';\n","import styled from 'styled-components';\nimport { tokens } from '../../theme/tokens';\n\n/**\n * Main container for the chat input component with dark theme\n * Matches header style with backdrop blur\n */\nexport const ChatInputContainer = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n padding: ${tokens.spacing.sm};\n background-color: ${tokens.colors.backdrop};\n backdrop-filter: blur(10px);\n -webkit-backdrop-filter: blur(10px);\n border-radius: ${tokens.borderRadius.none};\n box-shadow: ${tokens.shadows.none};\n box-sizing: border-box;\n\n @media (min-width: ${tokens.breakpoints.mobile}px) {\n padding: ${tokens.spacing.md};\n }\n`;\n\n/**\n * Container for suggestion buttons - horizontal layout with wrapping\n */\nexport const SuggestionsWrapper = styled.div`\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n gap: ${tokens.spacing.sm};\n margin-bottom: ${tokens.spacing.md};\n width: 100%;\n box-sizing: border-box;\n`;\n\n/**\n * Minimal pill-shaped suggestion button - Dark theme\n */\nexport const SuggestionButton = styled.button`\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n font-family: ${tokens.typography.fontFamily.primary};\n font-size: 13px;\n font-weight: ${tokens.typography.fontWeight.regular};\n text-align: center;\n border: 1px solid ${tokens.colors.border.default};\n border-radius: ${tokens.borderRadius.full};\n cursor: pointer;\n transition: all ${tokens.transitions.fast};\n white-space: nowrap;\n\n /* Dark theme colors */\n background-color: ${tokens.colors.surface.base};\n color: ${tokens.colors.text.secondary};\n\n /* Hover state */\n &:hover:not(:disabled) {\n background-color: ${tokens.colors.surface.elevated};\n border-color: ${tokens.colors.border.hover};\n }\n\n /* Active state */\n &:active:not(:disabled) {\n background-color: ${tokens.colors.background.light};\n }\n\n /* Focus state */\n &:focus-visible {\n outline: 2px solid ${tokens.colors.accent};\n outline-offset: 2px;\n }\n\n /* Disabled state */\n &:disabled {\n cursor: not-allowed;\n opacity: 0.4;\n }\n`;\n\n/**\n * Input wrapper with dark theme\n */\nexport const InputWrapper = styled.div`\n display: flex;\n align-items: flex-end; /* Align button to bottom when textarea expands */\n gap: ${tokens.spacing.sm};\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n background-color: rgba(25, 25, 25, 0.4);\n border: 1px solid ${tokens.colors.border.subtle};\n border-radius: ${tokens.borderRadius.lg};\n transition: all ${tokens.transitions.normal};\n width: 100%;\n box-sizing: border-box;\n\n &:focus-within {\n /* Subtle focus indication without bold colored border */\n border-color: ${tokens.colors.border.hover};\n background-color: rgba(50, 50, 52, 0.6);\n }\n`;\n\n/**\n * Text input field - Dark theme (textarea for multiline support)\n */\nexport const InputField = styled.textarea`\n flex: 1;\n border: none;\n outline: none;\n font-family: ${tokens.typography.fontFamily.primary};\n font-size: ${tokens.typography.fontSize.sm};\n color: ${tokens.colors.text.secondary};\n background: transparent;\n resize: none; /* Disable manual resize, we auto-resize */\n min-height: 24px; /* Single line height */\n max-height: 150px; /* Max ~6 lines before scrolling */\n overflow-y: auto;\n line-height: 1.5;\n padding: 0;\n margin: 0;\n\n &::placeholder {\n color: ${tokens.colors.text.tertiary};\n }\n\n &:disabled {\n color: ${tokens.colors.text.tertiary};\n cursor: not-allowed;\n }\n`;\n\n/**\n * Circular submit button with arrow icon\n */\ninterface SubmitButtonProps {\n disabled?: boolean;\n}\n\nexport const SubmitButton = styled.button<SubmitButtonProps>`\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n padding: 0;\n border: none;\n border-radius: ${tokens.borderRadius.full};\n background-color: ${(props) => (props.disabled ? tokens.colors.surface.elevated : tokens.colors.accent)};\n color: ${(props) => (props.disabled ? tokens.colors.text.tertiary : tokens.colors.text.primary)};\n cursor: ${(props) => (props.disabled ? 'not-allowed' : 'pointer')};\n transition: all ${tokens.transitions.normal};\n flex-shrink: 0;\n\n &:hover:not(:disabled) {\n background-color: ${tokens.colors.status.running};\n transform: scale(1.05);\n }\n\n &:active:not(:disabled) {\n transform: scale(0.98);\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.accent};\n outline-offset: 2px;\n }\n\n svg {\n width: 18px;\n height: 18px;\n }\n`;\n","import { useButton } from '@react-aria/button';\nimport type { AriaTextFieldProps } from '@react-aria/textfield';\nimport React, { type KeyboardEvent, useCallback, useEffect, useRef, useState } from 'react';\nimport {\n ChatInputContainer,\n InputField,\n InputWrapper,\n SubmitButton,\n SuggestionButton,\n SuggestionsWrapper,\n} from './ChatInput.styles';\n\nexport interface Suggestion {\n /** The text content of the suggestion */\n text: string;\n}\n\nexport interface ChatInputProps extends Omit<AriaTextFieldProps, 'onChange'> {\n /** Array of suggestion items to display above the input */\n suggestions?: Suggestion[];\n /** Callback when a suggestion is selected */\n onSuggestionSelect?: (suggestion: string) => void;\n /** Current message value */\n value?: string;\n /** Callback when message value changes */\n onChange?: (value: string) => void;\n /** Callback when message is submitted */\n onSubmit?: (message: string) => void;\n /** Placeholder text */\n placeholder?: string;\n /** Whether the input is disabled */\n isDisabled?: boolean;\n /** Whether the input is read-only */\n isReadOnly?: boolean;\n /** Whether to auto-focus the input */\n autoFocus?: boolean;\n /** Additional CSS class name */\n className?: string;\n /** ARIA label for the input */\n 'aria-label'?: string;\n}\n\n/**\n * ChatInput component with minimal pill-shaped suggestion buttons\n *\n * Features:\n * - Horizontal pill-shaped suggestion buttons with minimal design\n * - Auto-expanding multiline input (up to ~6 lines, then scrolls)\n * - Enter to submit, Shift+Enter for new line\n * - React ARIA for accessibility\n * - Keyboard navigation support\n * - Clean, modern design matching vendor image\n *\n * @example\n * ```tsx\n * <ChatInput\n * suggestions={[\n * { text: \"Create in-depth analysis\" },\n * { text: \"Identify actionable tasks\" }\n * ]}\n * placeholder=\"Ask, write or search for anything...\"\n * onSubmit={(message) => console.log(message)}\n * onSuggestionSelect={(suggestion) => console.log(suggestion)}\n * />\n * ```\n */\nexport const ChatInput: React.FC<ChatInputProps> = ({\n suggestions = [],\n onSuggestionSelect,\n value = '',\n onChange,\n onSubmit,\n placeholder = 'Ask, write or search for anything...',\n isDisabled = false,\n isReadOnly = false,\n autoFocus = false,\n className,\n 'aria-label': ariaLabel = 'Chat message input',\n // Note: Additional AriaTextFieldProps are accepted but not spread to textarea\n // since useTextField is not compatible with textarea elements\n}) => {\n const [internalValue, setInternalValue] = useState(value);\n const inputRef = useRef<HTMLTextAreaElement>(null);\n\n // Use controlled value if provided, otherwise use internal state\n const currentValue = value !== undefined ? value : internalValue;\n const setValue = onChange || setInternalValue;\n\n // Auto-resize textarea based on content\n const autoResize = useCallback(() => {\n const textarea = inputRef.current;\n if (textarea) {\n // Reset height to auto to get the correct scrollHeight\n textarea.style.height = 'auto';\n // Set height to scrollHeight (capped by max-height in CSS)\n textarea.style.height = `${textarea.scrollHeight}px`;\n }\n }, []);\n\n // Resize on value change\n useEffect(() => {\n autoResize();\n }, [currentValue, autoResize]);\n\n // Note: useTextField is not compatible with textarea, so we handle accessibility manually\n // The aria-label and other accessibility props are passed directly to the InputField\n\n // Direct onChange handler as backup\n const handleDirectChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n setValue(e.target.value);\n };\n\n // Handle keyboard events\n const handleKeyDown = (e: KeyboardEvent<HTMLTextAreaElement>) => {\n // Submit on Enter (without Shift for new line)\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n handleSubmit();\n }\n };\n\n // Handle submit\n const handleSubmit = () => {\n if (currentValue.trim() && onSubmit && !isDisabled && !isReadOnly) {\n onSubmit(currentValue.trim());\n setValue('');\n // Reset textarea height after clearing\n if (inputRef.current) {\n inputRef.current.style.height = 'auto';\n }\n }\n };\n\n // Handle suggestion selection\n const handleSuggestionClick = (suggestionText: string) => {\n if (onSuggestionSelect && !isDisabled && !isReadOnly) {\n onSuggestionSelect(suggestionText);\n }\n };\n\n const canSubmit = currentValue.trim().length > 0 && !isDisabled && !isReadOnly;\n\n return (\n <ChatInputContainer className={className}>\n {/* Suggestions */}\n {suggestions.length > 0 && (\n <SuggestionsWrapper role=\"list\" aria-label=\"Suggested prompts\">\n {suggestions.map((suggestion, index) => (\n <SuggestionButtonComponent\n key={`${suggestion.text}-${index}`}\n suggestion={suggestion}\n onSelect={handleSuggestionClick}\n isDisabled={isDisabled || isReadOnly}\n />\n ))}\n </SuggestionsWrapper>\n )}\n\n {/* Input field */}\n <InputWrapper>\n <InputField\n ref={inputRef}\n aria-label={ariaLabel}\n placeholder={placeholder}\n onKeyDown={handleKeyDown}\n onChange={handleDirectChange}\n autoFocus={autoFocus}\n disabled={isDisabled}\n readOnly={isReadOnly}\n value={currentValue}\n rows={1}\n />\n <SubmitButtonComponent\n onPress={handleSubmit}\n isDisabled={!canSubmit}\n ariaLabel=\"Send message\"\n />\n </InputWrapper>\n </ChatInputContainer>\n );\n};\n\n/**\n * Individual suggestion button component\n */\ninterface SuggestionButtonComponentProps {\n suggestion: Suggestion;\n onSelect: (text: string) => void;\n isDisabled?: boolean;\n}\n\nconst SuggestionButtonComponent: React.FC<SuggestionButtonComponentProps> = ({\n suggestion,\n onSelect,\n isDisabled = false,\n}) => {\n const ref = useRef<HTMLButtonElement>(null);\n const { buttonProps } = useButton(\n {\n onPress: () => onSelect(suggestion.text),\n isDisabled,\n 'aria-label': `Select suggestion: ${suggestion.text}`,\n },\n ref\n );\n\n return (\n <SuggestionButton {...buttonProps} ref={ref} role=\"listitem\">\n {suggestion.text}\n </SuggestionButton>\n );\n};\n\n/**\n * Submit button component with arrow icon\n */\ninterface SubmitButtonComponentProps {\n onPress: () => void;\n isDisabled?: boolean;\n ariaLabel?: string;\n}\n\nconst SubmitButtonComponent: React.FC<SubmitButtonComponentProps> = ({\n onPress,\n isDisabled = false,\n ariaLabel = 'Send message',\n}) => {\n const ref = useRef<HTMLButtonElement>(null);\n const { buttonProps } = useButton(\n {\n onPress,\n isDisabled,\n 'aria-label': ariaLabel,\n },\n ref\n );\n\n return (\n <SubmitButton {...buttonProps} ref={ref} disabled={isDisabled} title={ariaLabel}>\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n role=\"img\"\n aria-hidden=\"true\"\n >\n <title>Arrow Right Icon</title>\n <path\n d=\"M4 10H16M16 10L10 4M16 10L10 16\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </SubmitButton>\n );\n};\n\nChatInput.displayName = 'ChatInput';\n","import styled, { keyframes } from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\nexport const NavigationContainer = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n padding-top: ${tokens.spacing.xs};\n gap: ${tokens.spacing.xs};\n width: 100%;\n height: 100%;\n overflow-y: auto;\n overflow-x: hidden;\n\n &:hover {\n background: transparent !important;\n border-radius: 0 !important;\n box-shadow: none !important;\n }\n`;\n\nexport const CategoryGroup = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n padding-bottom: ${tokens.spacing.md};\n\n &:hover {\n background: transparent !important;\n border-radius: 0 !important;\n }\n`;\n\nexport const CategoryButton = styled.button<{ $active: boolean; $expanded: boolean }>`\n width: 48px;\n height: 48px;\n border: none;\n padding: 0;\n border-radius: ${({ $active }) => ($active ? tokens.borderRadius.xl : tokens.borderRadius.full)};\n background-color: ${({ $active }) => ($active ? tokens.colors.primary : tokens.colors.background.light)};\n color: ${tokens.colors.text.primary};\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all ${tokens.transitions.fast};\n position: relative;\n\n &:hover {\n border-radius: ${tokens.borderRadius.xl};\n background-color: ${({ $active }) => ($active ? tokens.colors.primary : tokens.colors.surface.overlayHover)};\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n`;\n\nexport const CategoryLabel = styled.span`\n font-size: 9px;\n color: ${tokens.colors.text.tertiary};\n margin-top: ${tokens.spacing.xs};\n text-align: center;\n max-width: 56px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nexport const SubItemList = styled.div<{ $expanded: boolean }>`\n display: ${({ $expanded }) => ($expanded ? 'flex' : 'none')};\n flex-direction: column;\n align-items: center;\n gap: ${tokens.spacing.xs};\n margin-top: ${tokens.spacing.xs};\n width: 100%;\n`;\n\nexport const SubItemButton = styled.button<{ $active: boolean }>`\n width: 32px;\n height: 32px;\n border: none;\n padding: 0;\n border-radius: ${({ $active }) => ($active ? tokens.borderRadius.md : tokens.borderRadius.full)};\n background-color: ${({ $active }) => ($active ? tokens.colors.surface.overlayActive : tokens.colors.surface.overlay)};\n color: ${tokens.colors.text.primary};\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all ${tokens.transitions.fast};\n\n &:hover {\n border-radius: ${tokens.borderRadius.md};\n background-color: ${({ $active }) =>\n $active ? tokens.colors.surface.overlayActive : tokens.colors.surface.overlayHover};\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n`;\n\nexport const CountBadge = styled.span`\n position: absolute;\n top: -2px;\n right: -2px;\n background: ${tokens.colors.accent};\n color: ${tokens.colors.text.primary};\n font-size: 10px;\n font-weight: ${tokens.typography.fontWeight.semibold};\n min-width: 16px;\n height: 16px;\n border-radius: ${tokens.borderRadius.md};\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0 ${tokens.spacing.xs};\n`;\n\nconst filterBadgeIn = keyframes`\n from {\n opacity: 0;\n transform: scale(0.5);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n`;\n\nexport const FilterBadge = styled.div`\n position: absolute;\n bottom: -${tokens.spacing.xs};\n right: -${tokens.spacing.xs};\n width: 18px;\n height: 18px;\n background: ${tokens.colors.background.darker};\n border-radius: ${tokens.borderRadius.full};\n display: flex;\n align-items: center;\n justify-content: center;\n animation: ${filterBadgeIn} ${tokens.transitions.normal};\n\n svg {\n width: 10px;\n height: 10px;\n fill: ${tokens.colors.text.primary};\n }\n`;\n\nexport const CategoryIconImg = styled.img<{ $size?: number; $active?: boolean }>`\n width: ${({ $size }) => $size || 24}px;\n height: ${({ $size }) => $size || 24}px;\n object-fit: contain;\n filter: ${({ $active }) => ($active ? 'brightness(0) invert(1)' : 'none')};\n`;\n\nexport const SubItemIconImg = styled.img<{ $size: number; $active?: boolean }>`\n width: ${({ $size }) => $size}px;\n height: ${({ $size }) => $size}px;\n object-fit: contain;\n filter: ${({ $active }) => ($active ? 'brightness(0) invert(1)' : 'none')};\n`;\n","/**\n * CategoryNav Component\n *\n * Vertical navigation bar displaying categories with expandable sub-items.\n * Generic component that can be used for any category-based navigation.\n */\n\nimport type React from 'react';\nimport { useCallback, useState } from 'react';\nimport {\n CategoryButton,\n CategoryGroup,\n CategoryIconImg,\n CategoryLabel,\n CountBadge,\n FilterBadge,\n NavigationContainer,\n SubItemButton,\n SubItemIconImg,\n SubItemList,\n} from './CategoryNav.styles';\n\n// =============================================================================\n// Types\n// =============================================================================\n\n/**\n * Represents a sub-item within a category\n */\nexport interface CategorySubItem {\n /** Unique identifier */\n id: string;\n /** Display name */\n name: string;\n /** Icon element or image path */\n icon: React.ReactNode | string;\n}\n\n/**\n * Represents a category in the navigation\n */\nexport interface CategoryItem<T extends string = string> {\n /** Unique identifier */\n id: T;\n /** Display label */\n label: string;\n /** Icon path (SVG) */\n iconPath: string;\n /** Sub-items within this category */\n subItems?: CategorySubItem[];\n}\n\nexport interface CategoryNavProps<T extends string = string> {\n /** List of categories to display */\n categories: CategoryItem<T>[];\n /** Currently selected category (null = none) */\n selectedCategory: T | null;\n /** Currently selected sub-item within category (null = all in category) */\n selectedSubItem: string | null;\n /** Callback when category is selected */\n onCategorySelect: (category: T | null) => void;\n /** Callback when sub-item is selected */\n onSubItemSelect: (subItem: string | null) => void;\n /** Optional counts per category */\n categoryCounts?: Record<T, number>;\n /** Optional set of enabled categories (if provided, hides categories not in set) */\n enabledCategories?: Set<T>;\n /** Test ID prefix for testing */\n testIdPrefix?: string;\n}\n\n// Filter icon for the badge\nconst FilterIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-label=\"Filter active\">\n <title>Filter active</title>\n <path d=\"M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z\" />\n </svg>\n);\n\n// =============================================================================\n// Component\n// =============================================================================\n\nexport function CategoryNav<T extends string = string>({\n categories,\n selectedCategory,\n selectedSubItem,\n onCategorySelect,\n onSubItemSelect,\n categoryCounts,\n enabledCategories,\n testIdPrefix = 'category',\n}: CategoryNavProps<T>): React.ReactElement {\n const [expandedCategory, setExpandedCategory] = useState<T | null>(selectedCategory);\n\n const hasSubItemFilterForCategory = useCallback(\n (categoryId: T): boolean => {\n if (!selectedSubItem) return false;\n const category = categories.find((c) => c.id === categoryId);\n return category?.subItems?.some((s) => s.id === selectedSubItem) ?? false;\n },\n [selectedSubItem, categories]\n );\n\n const handleCategoryClick = useCallback(\n (categoryId: T) => {\n // If this category is selected and has a sub-item filter, clear the filter\n if (selectedCategory === categoryId && hasSubItemFilterForCategory(categoryId)) {\n onSubItemSelect(null);\n return;\n }\n\n if (selectedCategory === categoryId) {\n // Toggle expansion without changing selection\n setExpandedCategory((prev) => (prev === categoryId ? null : categoryId));\n } else {\n // Select category and expand it\n onCategorySelect(categoryId);\n onSubItemSelect(null);\n setExpandedCategory(categoryId);\n }\n },\n [selectedCategory, onCategorySelect, onSubItemSelect, hasSubItemFilterForCategory]\n );\n\n const handleSubItemClick = useCallback(\n (subItemId: string) => {\n if (selectedSubItem === subItemId) {\n onSubItemSelect(null);\n } else {\n onSubItemSelect(subItemId);\n }\n },\n [selectedSubItem, onSubItemSelect]\n );\n\n // Filter categories by enabled set if provided\n const visibleCategories =\n enabledCategories && enabledCategories.size > 0\n ? categories.filter((cat) => enabledCategories.has(cat.id))\n : categories;\n\n const renderSubItemIcon = (subItem: CategorySubItem, isActive: boolean) => {\n if (typeof subItem.icon === 'string') {\n return <SubItemIconImg src={subItem.icon} alt={subItem.name} $size={16} $active={isActive} />;\n }\n return subItem.icon;\n };\n\n return (\n <NavigationContainer data-testid={`${testIdPrefix}-navigation`}>\n {visibleCategories.map((category) => {\n const isSelected = selectedCategory === category.id;\n const isExpanded = expandedCategory === category.id;\n const count = categoryCounts?.[category.id];\n const hasSubItemFilter = hasSubItemFilterForCategory(category.id);\n\n return (\n <CategoryGroup key={category.id}>\n <CategoryButton\n $active={isSelected}\n $expanded={isExpanded}\n onClick={() => handleCategoryClick(category.id)}\n aria-label={\n hasSubItemFilter ? `${category.label} (filtered - click to clear)` : category.label\n }\n aria-expanded={isExpanded}\n aria-pressed={isSelected}\n title={\n hasSubItemFilter ? `${category.label} - Click to clear filter` : category.label\n }\n data-testid={`${testIdPrefix}-${category.id}`}\n data-active={isSelected}\n >\n <CategoryIconImg\n src={category.iconPath}\n alt={category.label}\n $size={24}\n $active={isSelected}\n />\n {count !== undefined && count > 0 && <CountBadge>{count}</CountBadge>}\n {hasSubItemFilter && (\n <FilterBadge>\n <FilterIcon />\n </FilterBadge>\n )}\n </CategoryButton>\n <CategoryLabel>{category.label}</CategoryLabel>\n\n {category.subItems && category.subItems.length > 0 && (\n <SubItemList $expanded={isExpanded}>\n {category.subItems.map((subItem) => {\n const isSubItemActive = selectedSubItem === subItem.id;\n return (\n <SubItemButton\n key={subItem.id}\n $active={isSubItemActive}\n onClick={() => handleSubItemClick(subItem.id)}\n aria-label={subItem.name}\n title={subItem.name}\n data-testid={`${testIdPrefix}-subitem-${subItem.id}`}\n >\n {renderSubItemIcon(subItem, isSubItemActive)}\n </SubItemButton>\n );\n })}\n </SubItemList>\n )}\n </CategoryGroup>\n );\n })}\n </NavigationContainer>\n );\n}\n\nCategoryNav.displayName = 'CategoryNav';\n\nexport default CategoryNav;\n","import styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\ninterface IconWrapperProps {\n $size: number;\n $color: string;\n}\n\nexport const IconWrapper = styled.span<IconWrapperProps>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: ${({ $size }) => $size}px;\n height: ${({ $size }) => $size}px;\n color: ${({ $color }) => $color};\n line-height: 1;\n\n img {\n width: 100%;\n height: 100%;\n filter: ${({ $color }) => {\n if ($color === 'currentColor' || !$color) return 'inherit';\n if ($color === 'white' || $color === tokens.colors.text.primary || $color === '#fff') {\n return 'brightness(0) saturate(100%) invert(100%)';\n }\n if ($color === tokens.colors.text.secondary || $color === '#b9bbbe') {\n // Secondary text color (gray)\n return 'brightness(0) saturate(100%) invert(75%) sepia(8%) saturate(223%) hue-rotate(180deg) brightness(94%) contrast(86%)';\n }\n if ($color === tokens.colors.error || $color === '#ed4245' || $color === '#f04747') {\n // Error red\n return 'brightness(0) saturate(100%) invert(38%) sepia(97%) saturate(1459%) hue-rotate(334deg) brightness(95%) contrast(93%)';\n }\n return 'none';\n }};\n }\n`;\n","/**\n * Icon configuration and type definitions\n * Using @icon-set alias for cleaner imports\n */\n\n// Base path for all icons (served from public directory)\nexport const ICON_BASE_PATH = '/assets/icon-set' as const;\n\n// Available icon names as const for type safety\nexport const IconNames = {\n MIC: 'mic-fill',\n MIC_OFF: 'mic-off-fill',\n HEADPHONE: 'headphone-fill',\n VOLUME_MUTE: 'volume-mute-fill',\n SETTINGS_3_LINE: 'settings-3-line',\n HOME: 'home-fill',\n ADD_CIRCLE: 'add-circle-fill',\n COMPASS_DISCOVER: 'compass-discover-fill',\n DOWNLOAD: 'download-2-fill',\n ARROW_LEFT: 'arrow-left-fill',\n CALENDAR: 'calendar-fill',\n CHAT: 'chat-1-fill',\n FLOW_CHART: 'flow-chart',\n LOGOUT_CIRCLE_R_FILL: 'logout-circle-r-fill',\n LOGOUT_CIRCLE_R_LINE: 'logout-circle-r-line',\n SIDE_BAR_FILL: 'side-bar-fill',\n CHECK: 'check-fill',\n CHECK_CIRCLE: 'checkbox-circle-fill',\n CLOSE_CIRCLE: 'close-circle-fill',\n ERROR_WARNING: 'error-warning-fill',\n HAMMER: 'hammer-fill',\n ROCKET: 'rocket-fill',\n TICKET: 'coupon-2-fill',\n CLIPBOARD: 'clipboard-fill',\n} as const;\n\nexport type IconName = (typeof IconNames)[keyof typeof IconNames];\n\n// Icon file mapping\nexport const iconFiles: Record<IconName, string> = {\n 'mic-fill': 'Icon-mic-fill.svg',\n 'mic-off-fill': 'Icon-mic-off-fill.svg',\n 'headphone-fill': 'Icon-headphone-fill.svg',\n 'volume-mute-fill': 'Icon-volume-mute-fill.svg',\n 'settings-3-line': 'Icon-settings-3-line.svg',\n 'home-fill': 'Icon-home-fill.svg',\n 'add-circle-fill': 'Icon-add-circle-fill.svg',\n 'compass-discover-fill': 'Icon-compass-discover-fill.svg',\n 'download-2-fill': 'Icon-download-2-fill.svg',\n 'arrow-left-fill': 'Icon-arrow-left-fill.svg',\n 'calendar-fill': 'Icon-calendar-fill.svg',\n 'chat-1-fill': 'Icon-chat-1-fill.svg',\n 'flow-chart': 'Icon-flow-chart.svg',\n 'logout-circle-r-fill': 'Icon-logout-circle-r-fill.svg',\n 'logout-circle-r-line': 'Icon-logout-circle-r-line.svg',\n 'side-bar-fill': 'Icon-side-bar-fill.svg',\n 'check-fill': 'Icon-check-fill.svg',\n 'checkbox-circle-fill': 'Icon-checkbox-circle-fill.svg',\n 'close-circle-fill': 'Icon-close-circle-fill.svg',\n 'error-warning-fill': 'Icon-error-warning-fill.svg',\n 'hammer-fill': 'Icon-hammer-fill.svg',\n 'rocket-fill': 'Icon-rocket-fill.svg',\n 'coupon-2-fill': 'Icon-coupon-2-fill.svg',\n 'clipboard-fill': 'Icon-clipboard-fill.svg',\n};\n\n// Helper function to get full icon path\nexport function getIconPath(name: IconName): string {\n return `${ICON_BASE_PATH}/${iconFiles[name]}`;\n}\n","import type { ImgHTMLAttributes } from 'react';\nimport { IconWrapper } from './Icon.styles';\nimport { getIconPath, type IconName } from './icons';\n\nexport interface IconProps extends Omit<ImgHTMLAttributes<HTMLImageElement>, 'src' | 'alt'> {\n name: IconName;\n size?: number;\n color?: string;\n className?: string;\n}\n\nexport function Icon({\n name,\n size = 20,\n color = 'currentColor',\n className,\n ...imgProps\n}: IconProps) {\n const iconPath = getIconPath(name);\n\n return (\n <IconWrapper $size={size} $color={color} className={className} aria-hidden=\"true\">\n <img src={iconPath} alt=\"\" width={size} height={size} {...imgProps} />\n </IconWrapper>\n );\n}\n\nIcon.displayName = 'Icon';\n","import styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\nexport const Container = styled.nav`\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n background-color: ${tokens.colors.background.darker};\n border-top: 1px solid ${tokens.colors.border.subtle};\n /* Add vertical padding to prevent content overlap */\n padding-top: 4px;\n /* Use --safe-area-bottom CSS variable for Android navigation buttons.\n Android WebView doesn't support env(), so we use CSS custom properties\n injected by the native app. Fallback to 0 if not set. */\n padding-bottom: var(--safe-area-bottom, 0px);\n z-index: ${tokens.zIndex.sticky};\n\n /* Dark theme support */\n @media (prefers-color-scheme: dark) {\n background-color: ${tokens.colors.background.darkest};\n }\n`;\n\nexport const ContentWrapper = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n /* Fixed height for actual navbar content - keeps vertical centering */\n height: 52px;\n /* Left padding aligns WorkflowStatusCard icon with NavVertical icons (center at 36px) */\n /* Icon is 36px with 6px card padding, so card edge at 12px, icon center at 12+6+18=36px */\n padding: 0 ${tokens.spacing.xs} 0 12px;\n gap: ${tokens.spacing.xs}; /* 4px gap between status card and action buttons */\n max-width: 100%;\n\n /* Responsive padding - adjust for mobile nav width (60px, center at 30px) */\n @media (max-width: ${tokens.breakpoints.tablet}px) {\n /* Card edge at 6px, icon center at 6+6+18=30px to match 60px nav */\n padding: 0 ${tokens.spacing.xs} 0 6px;\n }\n`;\n\nexport const UserStatusSlot = styled.div`\n display: flex;\n align-items: center;\n min-width: 0; /* Allow flex item to shrink */\n flex: 1 1 auto; /* Allow slot to grow and take available space */\n\n /* Handle overflow for long usernames */\n > * {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n`;\n\nexport const ActionButtonsSlot = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n flex-shrink: 0;\n\n /* Ensure buttons stay visible */\n @media (min-width: 480px) {\n gap: ${tokens.spacing.sm};\n }\n`;\n","import type { ReactNode } from 'react';\nimport {\n ActionButtonsSlot,\n Container,\n ContentWrapper,\n UserStatusSlot,\n} from './NavHorizontal.styles';\n\nexport interface NavHorizontalProps {\n userStatusSlot?: ReactNode;\n actionsSlot?: ReactNode;\n className?: string;\n 'aria-label'?: string;\n}\n\nexport function NavHorizontal({\n userStatusSlot,\n actionsSlot,\n className,\n 'aria-label': ariaLabel = 'Horizontal navigation bar',\n}: NavHorizontalProps) {\n return (\n <Container className={className} role=\"navigation\" aria-label={ariaLabel}>\n <ContentWrapper>\n <UserStatusSlot>{userStatusSlot}</UserStatusSlot>\n <ActionButtonsSlot>{actionsSlot}</ActionButtonsSlot>\n </ContentWrapper>\n </Container>\n );\n}\n\nNavHorizontal.displayName = 'NavHorizontal';\n","import styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\nexport const Container = styled.nav`\n position: absolute;\n top: 0;\n left: 0;\n bottom: 52px; /* Account for horizontal nav height */\n width: 72px;\n background-color: ${tokens.colors.background.darker};\n display: flex;\n flex-direction: column;\n z-index: ${tokens.zIndex.base + 9}; /* Below horizontal nav and chat sidebar */\n overflow-y: auto;\n overflow-x: hidden;\n scrollbar-width: none; /* Firefox */\n /* Use CSS custom property for coordinated animations with MainPane */\n transition: transform var(--layout-transition-duration, 0.3s) var(--layout-transition-easing, ease-out);\n\n /* Hide scrollbar for Chrome, Safari and Opera */\n &::-webkit-scrollbar {\n display: none;\n }\n\n /* Dark theme support */\n @media (prefers-color-scheme: dark) {\n background-color: ${tokens.colors.background.darkest};\n }\n\n /* Responsive adjustments */\n @media (max-width: ${tokens.breakpoints.tablet}px) {\n width: 60px; /* Match MainPane left offset on mobile */\n }\n\n /* Mobile landscape: allow content to overflow and scroll with thin scrollbar */\n @media (orientation: landscape) and (max-height: 500px) {\n width: 60px;\n overflow-y: auto;\n overflow-x: hidden;\n scrollbar-width: thin; /* Firefox - show thin scrollbar */\n\n /* Show thin scrollbar for Chrome, Safari */\n &::-webkit-scrollbar {\n display: block;\n width: 3px;\n height: 3px;\n }\n\n &::-webkit-scrollbar-track {\n background: transparent;\n }\n\n &::-webkit-scrollbar-thumb {\n background: ${tokens.colors.border.default};\n border-radius: 2px;\n }\n }\n`;\n\nexport const TopSection = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 56px; /* Same as PaneSectionHeader on mobile */\n padding: 0;\n flex-shrink: 0;\n position: relative;\n\n @media (min-width: ${tokens.breakpoints.tablet}px) {\n height: 64px; /* Same as PaneSectionHeader on desktop */\n }\n`;\n\nexport const BackButton = styled.button`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 40px;\n height: 40px;\n border-radius: ${tokens.borderRadius.full};\n border: none;\n background-color: ${tokens.colors.background.light};\n color: ${tokens.colors.text.primary};\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all ${tokens.transitions.normal};\n -webkit-tap-highlight-color: transparent;\n\n &:hover {\n background-color: ${tokens.colors.primary};\n }\n\n &:active {\n transform: translate(-50%, -50%) scale(0.95);\n opacity: 0.8;\n }\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n`;\n\nexport const BackButtonIcon = styled.span`\n font-size: ${tokens.typography.fontSize.xl};\n line-height: ${tokens.typography.lineHeight.tight};\n font-weight: ${tokens.typography.fontWeight.bold};\n`;\n\nexport const Separator = styled.div`\n width: 32px;\n height: 2px;\n background-color: ${tokens.colors.background.light};\n align-self: center;\n margin: ${tokens.spacing.sm} auto ${tokens.spacing.md};\n border-radius: 1px;\n`;\n\nexport const FolderGroupsSlot = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: ${tokens.spacing.sm};\n padding: 0 ${tokens.spacing.md} ${tokens.spacing.md};\n flex: 1;\n padding-bottom: 120px; /* Prevent overlap with bottom section (2 buttons @ 40px + 1 gap @ 8px + padding @ 32px) */\n\n /* Server/workspace icons styling */\n > * {\n width: 48px;\n height: 48px;\n border-radius: ${tokens.borderRadius.full};\n transition: border-radius ${tokens.transitions.fast};\n cursor: pointer;\n\n &:hover {\n border-radius: ${tokens.borderRadius.xl};\n }\n }\n\n /* Responsive adjustments */\n @media (max-width: ${tokens.breakpoints.tablet}px) {\n padding: 0 6px ${tokens.spacing.md} 96px; /* Reduce horizontal padding on mobile */\n }\n\n /* Mobile landscape: remove extra padding since BottomSection flows with content */\n @media (orientation: landscape) and (max-height: 500px) {\n padding-bottom: ${tokens.spacing.md};\n flex: 0 0 auto; /* Don't flex-grow, allow natural height */\n }\n`;\n\nexport const BottomSection = styled.div`\n position: absolute;\n bottom: 0; /* At the bottom of the nav container */\n left: 0;\n right: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: ${tokens.spacing.sm};\n padding: ${tokens.spacing.md} 0;\n background-color: ${tokens.colors.background.darker};\n\n @media (prefers-color-scheme: dark) {\n background-color: ${tokens.colors.background.darkest};\n }\n\n /* Mobile landscape: make bottom section flow with content instead of fixed */\n @media (orientation: landscape) and (max-height: 500px) {\n position: relative;\n bottom: auto;\n margin-top: auto; /* Push to bottom of flex container */\n flex-shrink: 0;\n }\n`;\n\nexport const BottomButton = styled.button`\n width: 40px;\n height: 40px;\n border-radius: ${tokens.borderRadius.full};\n border: none;\n background-color: transparent;\n color: white;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all ${tokens.transitions.normal};\n -webkit-tap-highlight-color: transparent;\n\n &:hover {\n opacity: 0.7;\n }\n\n &:active {\n transform: scale(0.95);\n opacity: 0.8;\n }\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n border-radius: ${tokens.borderRadius.full};\n }\n`;\n","import { useButton } from '@react-aria/button';\nimport type { ReactNode } from 'react';\nimport { useRef } from 'react';\nimport { Icon } from '../Icon';\nimport {\n BackButton,\n BottomButton,\n BottomSection,\n Container,\n FolderGroupsSlot,\n Separator,\n TopSection,\n} from './NavVertical.styles';\n\nexport interface NavVerticalProps {\n onBackClick?: () => void;\n onHomeClick?: () => void;\n onSettingsClick?: () => void;\n onLogoutClick?: () => void;\n folderGroupsSlot?: ReactNode;\n className?: string;\n 'aria-label'?: string;\n}\n\nexport function NavVertical({\n onBackClick,\n onHomeClick,\n onSettingsClick,\n onLogoutClick,\n folderGroupsSlot,\n className,\n 'aria-label': ariaLabel = 'Vertical navigation sidebar',\n}: NavVerticalProps) {\n const backButtonRef = useRef<HTMLButtonElement>(null);\n const homeButtonRef = useRef<HTMLButtonElement>(null);\n const settingsButtonRef = useRef<HTMLButtonElement>(null);\n const logoutButtonRef = useRef<HTMLButtonElement>(null);\n\n const { buttonProps: backButtonProps } = useButton(\n {\n onPress: onBackClick,\n 'aria-label': 'Go back',\n },\n backButtonRef\n );\n\n const { buttonProps: homeButtonProps } = useButton(\n {\n onPress: onHomeClick,\n 'aria-label': 'Home',\n },\n homeButtonRef\n );\n\n const { buttonProps: settingsButtonProps } = useButton(\n {\n onPress: onSettingsClick,\n 'aria-label': 'Settings',\n },\n settingsButtonRef\n );\n\n const { buttonProps: logoutButtonProps } = useButton(\n {\n onPress: onLogoutClick,\n 'aria-label': 'Logout',\n },\n logoutButtonRef\n );\n\n return (\n <Container className={className} role=\"navigation\" aria-label={ariaLabel}>\n <TopSection>\n {onBackClick ? (\n <BackButton {...backButtonProps} ref={backButtonRef}>\n <Icon name=\"side-bar-fill\" size={20} color=\"white\" />\n </BackButton>\n ) : onHomeClick ? (\n <BackButton {...homeButtonProps} ref={homeButtonRef}>\n <Icon name=\"side-bar-fill\" size={24} color=\"white\" />\n </BackButton>\n ) : null}\n </TopSection>\n\n <Separator />\n\n <FolderGroupsSlot>{folderGroupsSlot}</FolderGroupsSlot>\n\n {(onSettingsClick || onLogoutClick) && (\n <BottomSection>\n {onSettingsClick && (\n <BottomButton {...settingsButtonProps} ref={settingsButtonRef}>\n <Icon name=\"settings-3-line\" size={24} color=\"white\" />\n </BottomButton>\n )}\n {onLogoutClick && (\n <BottomButton {...logoutButtonProps} ref={logoutButtonRef}>\n <Icon name=\"logout-circle-r-line\" size={24} color=\"white\" />\n </BottomButton>\n )}\n </BottomSection>\n )}\n </Container>\n );\n}\n\nNavVertical.displayName = 'NavVertical';\n","import styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\nexport const Container = styled.div`\n position: relative;\n width: 100%;\n height: 100vh;\n background-color: ${tokens.colors.surface.subtle};\n overflow: hidden;\n\n /* Ensure content is clipped on mobile */\n @media (max-width: ${tokens.breakpoints.tablet}px) {\n overflow: hidden;\n position: relative;\n }\n`;\n\n/**\n * BackgroundPane - Renders behind MainPane, visible when MainPane slides away\n * Used for displaying content like post previews that appear behind the main content\n */\nexport const BackgroundPane = styled.div`\n position: absolute;\n top: 0;\n left: 72px; /* Width of vertical nav */\n right: 0;\n bottom: 52px; /* Height of horizontal nav */\n background-color: transparent;\n overflow: auto;\n scrollbar-gutter: stable; /* Reserve space for scrollbar to prevent layout shift */\n z-index: ${tokens.zIndex.base}; /* Lower than MainPane */\n /* Use CSS custom property for coordinated animations with NavVertical */\n transition: transform var(--layout-transition-duration, 0.3s) var(--layout-transition-easing, ease-out);\n\n /* Custom scrollbar styling */\n &::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n }\n\n &::-webkit-scrollbar-track {\n background: ${tokens.colors.scrollbar.track};\n }\n\n &::-webkit-scrollbar-thumb {\n background-color: ${tokens.colors.scrollbar.thumb};\n border-radius: ${tokens.borderRadius.sm};\n }\n\n &::-webkit-scrollbar-thumb:hover {\n background-color: ${tokens.colors.scrollbar.thumbHover};\n }\n\n /* Firefox scrollbar */\n scrollbar-width: thin;\n scrollbar-color: ${tokens.colors.scrollbar.thumb} transparent;\n\n /* Responsive adjustments */\n @media (max-width: ${tokens.breakpoints.tablet}px) {\n left: 60px; /* Smaller nav on mobile */\n }\n`;\n\nexport const MainPane = styled.main`\n position: absolute;\n top: 0;\n left: 72px; /* Width of vertical nav */\n right: 0;\n bottom: 52px; /* Height of horizontal nav */\n background-color: ${tokens.colors.surface.overlay};\n overflow: auto;\n scrollbar-gutter: stable; /* Reserve space for scrollbar to prevent layout shift */\n z-index: ${tokens.zIndex.base + 1}; /* Higher than BackgroundPane */\n /* Use CSS custom property for coordinated animations with NavVertical */\n transition: transform var(--layout-transition-duration, 0.3s) var(--layout-transition-easing, ease-out);\n\n /* Custom scrollbar styling */\n &::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n }\n\n &::-webkit-scrollbar-track {\n background: ${tokens.colors.scrollbar.track};\n }\n\n &::-webkit-scrollbar-thumb {\n background-color: ${tokens.colors.scrollbar.thumb};\n border-radius: ${tokens.borderRadius.sm};\n }\n\n &::-webkit-scrollbar-thumb:hover {\n background-color: ${tokens.colors.scrollbar.thumbHover};\n }\n\n /* Firefox scrollbar */\n scrollbar-width: thin;\n scrollbar-color: ${tokens.colors.scrollbar.thumb} transparent;\n\n /* Responsive adjustments */\n @media (max-width: ${tokens.breakpoints.tablet}px) {\n left: 60px; /* Smaller nav on mobile */\n }\n`;\n","import type { ReactNode } from 'react';\nimport { NavHorizontal } from '../NavHorizontal';\nimport { NavVertical } from '../NavVertical';\nimport { BackgroundPane, Container, MainPane } from './Layout.styles';\n\nexport interface LayoutProps {\n mainPaneSlot: ReactNode;\n /** Background content rendered behind MainPane, visible when MainPane slides away */\n backgroundSlot?: ReactNode;\n navVerticalSlot?: ReactNode;\n navHorizontalUserSlot?: ReactNode;\n navHorizontalActionsSlot?: ReactNode;\n onNavBackClick?: () => void;\n onNavHomeClick?: () => void;\n onNavSettingsClick?: () => void;\n onNavLogoutClick?: () => void;\n className?: string;\n}\n\nexport function Layout({\n mainPaneSlot,\n backgroundSlot,\n navVerticalSlot,\n navHorizontalUserSlot,\n navHorizontalActionsSlot,\n onNavBackClick,\n onNavHomeClick,\n onNavSettingsClick,\n onNavLogoutClick,\n className,\n}: LayoutProps) {\n return (\n <Container className={className}>\n <NavVertical\n folderGroupsSlot={navVerticalSlot}\n onBackClick={onNavBackClick}\n onHomeClick={onNavHomeClick}\n onSettingsClick={onNavSettingsClick}\n onLogoutClick={onNavLogoutClick}\n />\n {backgroundSlot && <BackgroundPane>{backgroundSlot}</BackgroundPane>}\n <MainPane>{mainPaneSlot}</MainPane>\n <NavHorizontal\n userStatusSlot={navHorizontalUserSlot}\n actionsSlot={navHorizontalActionsSlot}\n />\n </Container>\n );\n}\n\nLayout.displayName = 'Layout';\n","import styled, { css } from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\nexport const Container = styled.div`\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: ${tokens.spacing.xs};\n`;\n\ninterface ActionButtonProps {\n $isActive?: boolean;\n $size?: number;\n $isPrimary?: boolean;\n}\n\nexport const ActionButton = styled.button<ActionButtonProps>`\n width: ${({ $size = 32 }) => $size}px;\n height: ${({ $size = 32 }) => $size}px;\n min-width: ${({ $size = 32 }) => $size}px;\n min-height: ${({ $size = 32 }) => $size}px;\n border-radius: ${({ $isPrimary }) => ($isPrimary ? tokens.borderRadius.full : tokens.borderRadius.md)};\n border: none;\n background-color: ${({ $isPrimary }) => ($isPrimary ? tokens.colors.primary : 'transparent')};\n color: ${({ $isPrimary }) => ($isPrimary ? tokens.colors.text.primary : tokens.colors.text.secondary)};\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all ${tokens.transitions.fast};\n font-size: ${tokens.typography.fontSize.base};\n -webkit-tap-highlight-color: transparent;\n\n &:hover {\n background-color: ${({ $isPrimary }) => ($isPrimary ? tokens.colors.secondary : tokens.colors.surface.overlayHover)};\n color: ${({ $isPrimary }) => ($isPrimary ? tokens.colors.text.primary : tokens.colors.text.primary)};\n }\n\n &:active {\n transform: scale(0.95);\n opacity: 0.8;\n }\n\n ${({ $isActive, $isPrimary }) =>\n $isActive &&\n !$isPrimary &&\n css`\n background-color: ${tokens.colors.surface.overlay};\n color: ${tokens.colors.text.primary};\n `}\n\n ${({ $isActive, $isPrimary }) =>\n $isActive &&\n $isPrimary &&\n css`\n background-color: ${tokens.colors.secondary};\n color: ${tokens.colors.text.primary};\n `}\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n`;\n","import { useButton } from '@react-aria/button';\nimport type { ReactNode } from 'react';\nimport { useRef } from 'react';\nimport { tokens } from '../../../theme/tokens';\nimport { Icon } from '../Icon';\nimport { ActionButton, Container } from './ActionButtons.styles';\n\nexport interface ActionButtonsProps {\n onCalendarClick?: () => void;\n onChatClick?: () => void;\n isCalendarActive?: boolean;\n isChatActive?: boolean;\n className?: string;\n}\n\ninterface ButtonProps {\n icon: ReactNode;\n label: string;\n onClick?: () => void;\n isActive?: boolean;\n size?: number;\n isPrimary?: boolean;\n}\n\nfunction ActionButtonItem({ icon, label, onClick, isActive, size, isPrimary }: ButtonProps) {\n const ref = useRef<HTMLButtonElement>(null);\n const { buttonProps } = useButton(\n {\n onPress: onClick,\n 'aria-label': label,\n 'aria-pressed': isActive,\n },\n ref\n );\n\n return (\n <ActionButton\n {...buttonProps}\n ref={ref}\n $isActive={isActive}\n $size={size}\n $isPrimary={isPrimary}\n >\n {icon}\n </ActionButton>\n );\n}\n\nexport function ActionButtons({\n onCalendarClick,\n onChatClick,\n isCalendarActive = false,\n isChatActive = false,\n className,\n}: ActionButtonsProps) {\n return (\n <Container className={className}>\n <ActionButtonItem\n icon={<Icon name=\"calendar-fill\" size={16} color={tokens.colors.text.secondary} />}\n label=\"Calendar\"\n onClick={onCalendarClick}\n isActive={isCalendarActive}\n size={32}\n />\n <ActionButtonItem\n icon={<Icon name=\"chat-1-fill\" size={16} color={tokens.colors.text.secondary} />}\n label=\"Chat\"\n onClick={onChatClick}\n isActive={isChatActive}\n size={32}\n />\n </Container>\n );\n}\n\nActionButtons.displayName = 'ActionButtons';\n","import styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\n// Status colors using design tokens\nconst statusColors = {\n online: tokens.colors.status.online,\n idle: tokens.colors.status.idle,\n busy: tokens.colors.status.busy,\n offline: tokens.colors.status.offline,\n};\n\ninterface StatusIndicatorProps {\n $status: 'online' | 'idle' | 'busy' | 'offline';\n}\n\ninterface ContainerProps {\n $isDisabled?: boolean;\n}\n\nexport const Container = styled.button<ContainerProps>`\n display: grid;\n grid-template-columns: auto 1fr;\n align-items: center;\n gap: ${tokens.spacing.sm};\n padding: 6px;\n margin: 0; /* No margin - positioning handled by parent slot */\n border-radius: ${tokens.borderRadius.md};\n border: none;\n background: ${tokens.colors.surface.subtle};\n color: inherit;\n font-family: ${tokens.typography.fontFamily.primary};\n transition: background-color ${tokens.transitions.fast}, opacity ${tokens.transitions.fast};\n cursor: ${(props) => (props.$isDisabled ? 'default' : 'pointer')};\n opacity: ${(props) => (props.$isDisabled ? 0.7 : 1)};\n text-align: left;\n width: 100%; /* Fill available slot width */\n /* Remove mobile tap highlight that causes blue flash */\n -webkit-tap-highlight-color: transparent;\n\n &:hover:not(:disabled) {\n background-color: ${(props) => (props.$isDisabled ? tokens.colors.surface.subtle : tokens.colors.surface.overlay)};\n }\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: none;\n /* Subtle focus ring instead of bright color */\n box-shadow: inset 0 0 0 1px ${tokens.colors.border.default};\n }\n\n &:active:not(:disabled) {\n /* Subtle press feedback - no color flash */\n opacity: 0.9;\n }\n`;\n\nexport const IconWrapper = styled.div`\n position: relative;\n width: 36px;\n height: 36px;\n border-radius: ${tokens.borderRadius.md};\n background-color: ${tokens.colors.background.light};\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n`;\n\nexport const WorkflowInfo = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.xs};\n min-width: 0;\n`;\n\nexport const WorkflowName = styled.span`\n color: ${tokens.colors.text.primary};\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.semibold};\n line-height: ${tokens.typography.lineHeight.tight};\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nexport const WorkflowStatus = styled.span`\n color: ${tokens.colors.text.tertiary};\n font-size: ${tokens.typography.fontSize.xs};\n font-weight: ${tokens.typography.fontWeight.regular};\n line-height: ${tokens.typography.lineHeight.tight};\n text-transform: capitalize;\n`;\n\nexport const WorkflowSubtitle = styled.span`\n color: ${tokens.colors.text.tertiary};\n font-size: ${tokens.typography.fontSize.xs};\n font-weight: ${tokens.typography.fontWeight.regular};\n line-height: ${tokens.typography.lineHeight.tight};\n opacity: 0.7;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nexport const StatusIndicatorOuter = styled.span<StatusIndicatorProps>`\n position: absolute;\n bottom: -2px;\n right: -2px;\n width: 12px;\n height: 12px;\n border-radius: ${tokens.borderRadius.full};\n background-color: ${tokens.colors.background.darker};\n display: flex;\n align-items: center;\n justify-content: center;\n`;\n\nexport const StatusIndicatorInner = styled.span<StatusIndicatorProps>`\n width: 8px;\n height: 8px;\n border-radius: ${tokens.borderRadius.full};\n background-color: ${({ $status }) => statusColors[$status]};\n`;\n","import { useButton } from '@react-aria/button';\nimport type { AriaButtonProps } from '@react-types/button';\nimport type { ReactNode } from 'react';\nimport { useRef } from 'react';\nimport {\n Container,\n IconWrapper,\n StatusIndicatorInner,\n StatusIndicatorOuter,\n WorkflowInfo,\n WorkflowName,\n WorkflowStatus,\n WorkflowSubtitle,\n} from './WorkflowStatusCard.styles';\n\nexport interface WorkflowStatusCardProps extends Omit<AriaButtonProps, 'children'> {\n icon: ReactNode;\n workflowName: string;\n status?: 'online' | 'idle' | 'busy' | 'offline';\n statusText?: string;\n /** Optional subtitle shown below status (e.g., time triggered) */\n subtitle?: string;\n className?: string;\n onClick?: () => void;\n}\n\nexport function WorkflowStatusCard({\n icon,\n workflowName,\n status = 'offline',\n statusText,\n subtitle,\n className,\n onClick,\n onPress,\n isDisabled,\n ...ariaProps\n}: WorkflowStatusCardProps) {\n const displayStatus = statusText || status;\n const ref = useRef<HTMLButtonElement>(null);\n\n // Combine onClick with onPress for React Aria compatibility\n const handlePress = () => {\n if (onClick) onClick();\n if (onPress) onPress({} as never);\n };\n\n const { buttonProps } = useButton(\n {\n ...ariaProps,\n onPress: handlePress,\n isDisabled,\n 'aria-label': ariaProps['aria-label'] || `${workflowName} workflow, status: ${displayStatus}`,\n },\n ref\n );\n\n return (\n <Container {...buttonProps} ref={ref} className={className} $isDisabled={isDisabled}>\n <IconWrapper>\n {icon}\n <StatusIndicatorOuter $status={status}>\n <StatusIndicatorInner $status={status} />\n </StatusIndicatorOuter>\n </IconWrapper>\n <WorkflowInfo>\n <WorkflowName>{workflowName}</WorkflowName>\n <WorkflowStatus>{displayStatus}</WorkflowStatus>\n {subtitle && <WorkflowSubtitle>{subtitle}</WorkflowSubtitle>}\n </WorkflowInfo>\n </Container>\n );\n}\n\nWorkflowStatusCard.displayName = 'WorkflowStatusCard';\n","import styled from 'styled-components';\nimport { tokens } from '../../theme/tokens';\n\n/**\n * Main container for the notification card with dark theme\n */\nexport const DarkNotificationCardContainer = styled.div`\n display: flex;\n flex-direction: column;\n padding: ${tokens.spacing.xs};\n background: ${tokens.colors.surface.base};\n border-radius: ${tokens.borderRadius.md};\n gap: ${tokens.spacing.xs};\n flex: 1;\n min-width: 0;\n overflow: hidden;\n`;\n\n/**\n * Section header button (collapsible) - dark theme\n */\nexport const DarkSectionHeader = styled.button`\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n padding: ${tokens.spacing.xs} ${tokens.spacing.xs};\n border: none;\n background: transparent;\n font-family: ${tokens.typography.fontFamily.primary};\n font-size: 11px;\n font-weight: ${tokens.typography.fontWeight.semibold};\n color: ${tokens.colors.text.secondary};\n text-align: left;\n cursor: pointer;\n transition: all ${tokens.transitions.normal};\n\n &:hover {\n color: ${tokens.colors.text.primary};\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.primary};\n outline-offset: 2px;\n border-radius: ${tokens.borderRadius.sm};\n }\n`;\n\n/**\n * Chevron icon for section header with rotation animation - dark theme\n */\ninterface ChevronIconProps {\n $isExpanded: boolean;\n}\n\nexport const DarkChevronIcon = styled.span<ChevronIconProps>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n transition: transform ${tokens.transitions.normal};\n color: ${tokens.colors.text.tertiary};\n\n ${(props) =>\n props.$isExpanded\n ? `\n transform: rotate(0deg);\n `\n : `\n transform: rotate(-90deg);\n `}\n\n svg {\n width: 12px;\n height: 12px;\n }\n`;\n\n/**\n * Container for section content (list of notification items) - dark theme\n */\nexport const DarkSectionContent = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.xs};\n padding-left: ${tokens.spacing.xs};\n margin-top: ${tokens.spacing.xs};\n min-width: 0;\n overflow: hidden;\n`;\n\n/**\n * Individual notification item wrapper (button) - dark theme\n */\ninterface NotificationItemWrapperProps {\n $isSelected: boolean;\n $hasIcon: boolean;\n}\n\nexport const DarkNotificationItemWrapper = styled.button<NotificationItemWrapperProps>`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n width: 100%;\n padding: ${tokens.spacing.xs} ${tokens.spacing.xs};\n border: none;\n cursor: pointer;\n text-align: left;\n transition: all ${tokens.transitions.normal};\n border-radius: ${tokens.borderRadius.sm};\n min-width: 0;\n overflow: hidden;\n\n /* Default state - transparent background */\n background-color: ${(props) => (props.$isSelected ? tokens.colors.primary : 'transparent')};\n\n /* Hover state */\n &:hover:not(:disabled) {\n background-color: ${(props) => (props.$isSelected ? tokens.colors.accent : tokens.colors.surface.overlay)};\n }\n\n /* Active state */\n &:active:not(:disabled) {\n transform: scale(0.99);\n }\n\n /* Focus state */\n &:focus-visible {\n outline: 2px solid ${tokens.colors.primary};\n outline-offset: 2px;\n }\n\n /* Disabled state */\n &:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n`;\n\n/**\n * Icon container for notification items - dark theme\n */\ninterface ItemIconProps {\n $iconColor?: string;\n $hasCustomIcon: boolean;\n}\n\nexport const DarkItemIcon = styled.span<ItemIconProps>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n flex-shrink: 0;\n border-radius: ${(props) => (props.$hasCustomIcon ? tokens.borderRadius.sm : tokens.borderRadius.full)};\n background-color: ${(props) => props.$iconColor || 'transparent'};\n color: ${(props) => (props.$hasCustomIcon ? tokens.colors.text.primary : tokens.colors.text.tertiary)};\n font-size: ${tokens.typography.fontSize.xs};\n\n /* Default circle icon styling */\n ${(props) =>\n !props.$hasCustomIcon &&\n `\n svg {\n width: 14px;\n height: 14px;\n }\n `}\n\n /* Custom icon (emoji or colored icon) styling */\n ${(props) =>\n props.$hasCustomIcon &&\n `\n padding: ${tokens.spacing.xs};\n `}\n`;\n\n/**\n * Text content for notification items - dark theme\n */\ninterface ItemTextProps {\n $isSelected: boolean;\n}\n\nexport const DarkItemText = styled.span<ItemTextProps>`\n flex: 1;\n font-family: ${tokens.typography.fontFamily.primary};\n font-size: 11px;\n font-weight: ${(props) => (props.$isSelected ? tokens.typography.fontWeight.medium : tokens.typography.fontWeight.regular)};\n color: ${(props) => (props.$isSelected ? tokens.colors.text.primary : tokens.colors.text.secondary)};\n line-height: ${tokens.typography.lineHeight.tight};\n word-wrap: break-word;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n`;\n\n/**\n * Three-dot menu button (shown on selected items) - dark theme\n */\nexport const DarkMenuButton = styled.button`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n padding: 0;\n border: none;\n border-radius: ${tokens.borderRadius.sm};\n background-color: transparent;\n color: ${tokens.colors.text.primary};\n cursor: pointer;\n transition: all ${tokens.transitions.normal};\n flex-shrink: 0;\n\n &:hover:not(:disabled) {\n background-color: ${tokens.colors.surface.overlayHover};\n }\n\n &:active:not(:disabled) {\n background-color: ${tokens.colors.surface.overlayActive};\n transform: scale(0.95);\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.primary};\n outline-offset: 2px;\n }\n\n svg {\n width: 14px;\n height: 14px;\n }\n`;\n\n/**\n * Timestamp text for action logs\n */\nexport const DarkTimestamp = styled.span`\n font-size: 10px;\n color: ${tokens.colors.text.tertiary};\n white-space: normal;\n word-wrap: break-word;\n text-align: right;\n max-width: 60px;\n`;\n","import { useButton } from '@react-aria/button';\nimport React, { type KeyboardEvent, useRef, useState } from 'react';\nimport type {\n NotificationCardProps,\n NotificationItem,\n NotificationSection,\n} from './NotificationCard';\nimport {\n DarkChevronIcon,\n DarkItemIcon,\n DarkItemText,\n DarkMenuButton,\n DarkNotificationCardContainer,\n DarkNotificationItemWrapper,\n DarkSectionContent,\n DarkSectionHeader,\n DarkTimestamp,\n} from './NotificationCard.dark.styles';\n\n/**\n * Dark-themed NotificationCard component for MainPaneMenu\n *\n * A dark variant of the NotificationCard component specifically designed\n * for use within the MainPaneMenu component. Features the same functionality\n * but with colors matching the dark theme.\n */\nexport const DarkNotificationCard: React.FC<NotificationCardProps> = ({\n sections,\n onItemClick,\n selectedItemId,\n onMenuClick,\n className,\n 'aria-label': ariaLabel = 'Action log history',\n}) => {\n // Track collapsed state for each section\n const [collapsedSections, setCollapsedSections] = useState<Record<string, boolean>>(() => {\n const initial: Record<string, boolean> = {};\n for (const section of sections) {\n initial[section.title] = section.isCollapsed || false;\n }\n return initial;\n });\n\n const toggleSection = (sectionTitle: string) => {\n setCollapsedSections((prev) => ({\n ...prev,\n [sectionTitle]: !prev[sectionTitle],\n }));\n };\n\n return (\n <DarkNotificationCardContainer className={className} aria-label={ariaLabel} role=\"region\">\n {sections.map((section) => (\n <DarkSectionComponent\n key={section.title}\n section={section}\n isCollapsed={collapsedSections[section.title] ?? false}\n onToggle={() => toggleSection(section.title)}\n onItemClick={onItemClick}\n selectedItemId={selectedItemId}\n onMenuClick={onMenuClick}\n />\n ))}\n </DarkNotificationCardContainer>\n );\n};\n\n/**\n * Individual section component with collapsible header - dark theme\n */\ninterface DarkSectionComponentProps {\n section: NotificationSection;\n isCollapsed: boolean;\n onToggle: () => void;\n onItemClick?: (item: NotificationItem) => void;\n selectedItemId?: string;\n onMenuClick?: (item: NotificationItem) => void;\n}\n\nconst DarkSectionComponent: React.FC<DarkSectionComponentProps> = ({\n section,\n isCollapsed,\n onToggle,\n onItemClick,\n selectedItemId,\n onMenuClick,\n}) => {\n const headerRef = useRef<HTMLButtonElement>(null);\n const { buttonProps } = useButton(\n {\n onPress: onToggle,\n 'aria-label': `${section.title} section, ${isCollapsed ? 'collapsed' : 'expanded'}`,\n 'aria-expanded': !isCollapsed,\n },\n headerRef\n );\n\n return (\n <section aria-label={`${section.title} actions`}>\n <DarkSectionHeader {...buttonProps} ref={headerRef}>\n {section.title}\n <DarkChevronIcon $isExpanded={!isCollapsed} aria-hidden=\"true\">\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n role=\"img\"\n aria-label=\"Expand/collapse icon\"\n >\n <title>Expand/collapse icon</title>\n <path\n d=\"M4 5L7 8L10 5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </DarkChevronIcon>\n </DarkSectionHeader>\n\n {!isCollapsed && (\n <DarkSectionContent role=\"list\">\n {section.items.map((item) => (\n <DarkNotificationItemComponent\n key={item.id}\n item={item}\n isSelected={item.id === selectedItemId}\n onItemClick={onItemClick}\n onMenuClick={onMenuClick}\n />\n ))}\n </DarkSectionContent>\n )}\n </section>\n );\n};\n\n/**\n * Individual notification item component - dark theme\n */\ninterface DarkNotificationItemComponentProps {\n item: NotificationItem & { timestamp?: string };\n isSelected: boolean;\n onItemClick?: (item: NotificationItem) => void;\n onMenuClick?: (item: NotificationItem) => void;\n}\n\nconst DarkNotificationItemComponent: React.FC<DarkNotificationItemComponentProps> = ({\n item,\n isSelected,\n onItemClick,\n onMenuClick,\n}) => {\n const itemRef = useRef<HTMLButtonElement>(null);\n const menuRef = useRef<HTMLButtonElement>(null);\n\n const { buttonProps: itemButtonProps } = useButton(\n {\n onPress: () => onItemClick?.(item),\n 'aria-label': `Action: ${item.text}`,\n 'aria-current': isSelected ? 'true' : undefined,\n },\n itemRef\n );\n\n const { buttonProps: menuButtonProps } = useButton(\n {\n onPress: () => onMenuClick?.(item),\n 'aria-label': `Options for ${item.text}`,\n },\n menuRef\n );\n\n // Handle keyboard navigation between item and menu button\n const handleItemKeyDown = (e: KeyboardEvent<HTMLButtonElement>) => {\n if (isSelected && e.key === 'Tab' && !e.shiftKey) {\n // Allow natural tab to menu button\n return;\n }\n };\n\n return (\n <DarkNotificationItemWrapper\n {...itemButtonProps}\n ref={itemRef}\n $isSelected={isSelected}\n $hasIcon={!!item.icon}\n role=\"listitem\"\n onKeyDown={handleItemKeyDown}\n >\n <DarkItemIcon $iconColor={item.iconColor} $hasCustomIcon={!!item.icon}>\n {item.icon || (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <circle cx=\"8\" cy=\"8\" r=\"6\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n </svg>\n )}\n </DarkItemIcon>\n <DarkItemText $isSelected={isSelected}>{item.text}</DarkItemText>\n {item.timestamp && <DarkTimestamp>{item.timestamp}</DarkTimestamp>}\n {isSelected && onMenuClick && (\n <DarkMenuButton\n {...menuButtonProps}\n ref={menuRef}\n onClick={(e) => {\n e.stopPropagation();\n menuButtonProps.onClick?.(e);\n }}\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <title>More options</title>\n <circle cx=\"8\" cy=\"3\" r=\"1\" fill=\"currentColor\" />\n <circle cx=\"8\" cy=\"8\" r=\"1\" fill=\"currentColor\" />\n <circle cx=\"8\" cy=\"13\" r=\"1\" fill=\"currentColor\" />\n </svg>\n </DarkMenuButton>\n )}\n </DarkNotificationItemWrapper>\n );\n};\n\nDarkNotificationCard.displayName = 'DarkNotificationCard';\n","import { Button, Disclosure, DisclosureGroup, DisclosurePanel } from 'react-aria-components';\nimport styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\nexport const Container = styled.div`\n width: 100%;\n height: 100%;\n background-color: transparent;\n color: ${tokens.colors.text.primary};\n display: flex;\n flex-direction: column;\n font-family: ${tokens.typography.fontFamily.primary};\n overflow: hidden; // Prevent content from escaping container bounds\n`;\n\nexport const TabListWrapper = styled.div`\n display: flex;\n border-bottom: 2px solid ${tokens.colors.border.default};\n background-color: ${tokens.colors.surface.subtle};\n padding: 0 ${tokens.spacing.md};\n gap: ${tokens.spacing.sm};\n overflow-x: auto;\n scrollbar-width: none;\n -ms-overflow-style: none;\n flex-shrink: 0; // Prevent shrinking when content overflows\n\n &::-webkit-scrollbar {\n display: none;\n }\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n padding: 0 ${tokens.spacing.sm};\n gap: ${tokens.spacing.xs};\n }\n`;\n\nexport const TabButton = styled.button<{ $isSelected?: boolean }>`\n padding: ${tokens.spacing.md} ${tokens.spacing.lg};\n background: none;\n border: none;\n color: ${(props) => (props.$isSelected ? tokens.colors.text.primary : tokens.colors.text.secondary)};\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.semibold};\n cursor: pointer;\n position: relative;\n transition: color ${tokens.transitions.normal};\n white-space: nowrap;\n flex-shrink: 0;\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n font-size: ${tokens.typography.fontSize.xs};\n }\n\n &:hover {\n color: ${tokens.colors.text.primary};\n }\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: -2px;\n border-radius: ${tokens.borderRadius.sm};\n }\n\n ${(props) =>\n props.$isSelected &&\n `\n &::after {\n content: '';\n position: absolute;\n bottom: -2px;\n left: 0;\n right: 0;\n height: 2px;\n background-color: ${tokens.colors.primary};\n }\n `}\n`;\n\nexport const TabPanelWrapper = styled.div`\n flex: 1;\n padding: ${tokens.spacing.lg};\n overflow-y: auto;\n overflow-x: hidden; // Prevent horizontal overflow\n scrollbar-gutter: stable; // Always reserve space for scrollbar to prevent width jump\n background-color: ${tokens.colors.surface.overlay};\n min-height: 0; // Enable proper flex shrinking and scrolling\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n padding: ${tokens.spacing.md};\n }\n\n @media (max-width: 480px) {\n padding: ${tokens.spacing.md};\n }\n\n /* Custom scrollbar */\n scrollbar-width: thin;\n scrollbar-color: ${tokens.colors.scrollbar.thumb} ${tokens.colors.scrollbar.track};\n\n &::-webkit-scrollbar {\n width: 8px;\n }\n\n &::-webkit-scrollbar-track {\n background: ${tokens.colors.background.dark};\n }\n\n &::-webkit-scrollbar-thumb {\n background: ${tokens.colors.background.light};\n border-radius: ${tokens.borderRadius.sm};\n }\n\n &::-webkit-scrollbar-thumb:hover {\n background: ${tokens.colors.scrollbar.thumbHover};\n }\n`;\n\n// Runs tab container\nexport const RunsContainer = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.lg};\n width: 100%;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n gap: ${tokens.spacing.md};\n }\n`;\n\n// Browse Automations button\nexport const BrowseButton = styled.button`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.md};\n width: 100%;\n padding: ${tokens.spacing.md} ${tokens.spacing.md};\n background-color: ${tokens.colors.surface.overlay};\n border: 1px solid ${tokens.colors.border.default};\n border-radius: ${tokens.borderRadius.md};\n color: ${tokens.colors.text.secondary};\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.medium};\n cursor: pointer;\n transition: all ${tokens.transitions.normal};\n white-space: nowrap;\n overflow: hidden;\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n font-size: ${tokens.typography.fontSize.sm};\n gap: ${tokens.spacing.sm};\n }\n\n &:hover {\n background-color: ${tokens.colors.surface.overlayHover};\n color: ${tokens.colors.text.primary};\n }\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n`;\n\n// DisclosureGroup styles\nexport const StyledDisclosureGroup = styled(DisclosureGroup)`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.sm};\n width: 100%;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n`;\n\n// Category Disclosure (Information, Community)\nexport const CategoryDisclosure = styled(Disclosure)`\n background-color: transparent;\n display: flex;\n flex-direction: column;\n width: 100%;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n\n &[data-expanded] {\n /* Styles when expanded */\n }\n\n &[data-disabled] {\n opacity: 0.5;\n cursor: not-allowed;\n }\n`;\n\n// Category Header (trigger button)\nexport const CategoryHeader = styled(Button)`\n width: 100%;\n padding: ${tokens.spacing.xs} 0;\n background: none;\n border: none;\n color: ${tokens.colors.text.secondary};\n display: flex;\n justify-content: space-between;\n align-items: center;\n cursor: pointer;\n transition: color ${tokens.transitions.normal};\n font-size: ${tokens.typography.fontSize.xs};\n font-weight: ${tokens.typography.fontWeight.semibold};\n text-transform: uppercase;\n letter-spacing: 0.5px;\n\n &:hover {\n color: ${tokens.colors.text.primary};\n }\n\n &:focus {\n outline: none;\n }\n\n &[data-focus-visible] {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n border-radius: ${tokens.borderRadius.sm};\n }\n`;\n\n// Category Title with icon\nexport const CategoryTitle = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.sm};\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n gap: ${tokens.spacing.xs};\n }\n`;\n\n// Category Icon\nexport const CategoryIcon = styled.img`\n width: 16px;\n height: 16px;\n opacity: 0.6;\n flex-shrink: 0;\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n width: 14px;\n height: 14px;\n }\n`;\n\n// Hashtag Icon\nexport const HashtagIcon = styled.img`\n width: 14px;\n height: 14px;\n opacity: 0.6;\n flex-shrink: 0;\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n width: 12px;\n height: 12px;\n }\n`;\n\n// Chevron icon\nexport const ChevronIcon = styled.div<{ $isExpanded: boolean }>`\n display: flex;\n align-items: center;\n transition: transform ${tokens.transitions.normal};\n transform: ${(props) => (props.$isExpanded ? 'rotate(0deg)' : 'rotate(-90deg)')};\n flex-shrink: 0;\n margin-left: ${tokens.spacing.xs};\n\n img {\n width: 16px;\n height: 16px;\n opacity: 0.6;\n }\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n img {\n width: 14px;\n height: 14px;\n }\n }\n`;\n\n// Category content panel\nexport const CategoryDisclosurePanel = styled(DisclosurePanel)`\n display: flex;\n flex-direction: column;\n gap: 2px;\n padding-left: ${tokens.spacing.xs};\n width: 100%;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n padding-left: ${tokens.spacing.xs};\n }\n\n &[data-entering] {\n animation: slideDown ${tokens.transitions.normal};\n }\n\n @keyframes slideDown {\n from {\n opacity: 0;\n transform: translateY(-${tokens.spacing.sm});\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n`;\n\n// Item container (announcements, server-rules, etc.)\nexport const ItemContainer = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.sm};\n padding: ${tokens.spacing.sm} ${tokens.spacing.sm}; // Increased vertical padding from 4px to 8px for better breathing room\n border-radius: ${tokens.borderRadius.sm};\n cursor: pointer;\n transition: background-color ${tokens.transitions.fast};\n min-width: 0;\n overflow: hidden;\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n gap: ${tokens.spacing.xs};\n padding: ${tokens.spacing.sm} ${tokens.spacing.xs}; // Increased vertical padding from 4px to 8px for mobile\n }\n\n &:hover {\n background-color: ${tokens.colors.surface.overlayHover};\n }\n`;\n\n// Nested item disclosure (for individual items)\nexport const ItemDisclosure = styled(Disclosure)`\n background-color: transparent;\n margin-bottom: ${tokens.spacing.xs};\n display: flex;\n flex-direction: column;\n width: 100%;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n\n &[data-expanded] {\n background-color: ${tokens.colors.surface.overlay};\n border-radius: ${tokens.borderRadius.md};\n }\n`;\n\n// Item header for nested disclosure\nexport const ItemHeader = styled(Button)<{ $isExpanded: boolean }>`\n width: 100%;\n padding: 0;\n background: none;\n border: none;\n cursor: pointer;\n transition: all ${tokens.transitions.fast};\n\n &:focus {\n outline: none;\n }\n\n &[data-focus-visible] {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n border-radius: ${tokens.borderRadius.sm};\n }\n`;\n\n// Item disclosure panel for logs\nexport const ItemDisclosurePanel = styled(DisclosurePanel)`\n padding: ${tokens.spacing.xs};\n background-color: ${tokens.colors.overlay};\n border-radius: 0 0 ${tokens.borderRadius.md} ${tokens.borderRadius.md};\n margin-top: -${tokens.spacing.xs};\n display: flex;\n flex-direction: column;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n padding: ${tokens.spacing.xs};\n }\n\n &[data-entering] {\n animation: slideDown ${tokens.transitions.normal};\n }\n\n @keyframes slideDown {\n from {\n opacity: 0;\n transform: translateY(-${tokens.spacing.sm});\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n`;\n\n// Item icon\nexport const ItemIcon = styled.img`\n width: 20px;\n height: 20px;\n opacity: 0.6;\n flex-shrink: 0;\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n width: 18px;\n height: 18px;\n }\n`;\n\n// Item name\nexport const ItemName = styled.span<{ $dimmed?: boolean }>`\n flex: 1;\n font-size: ${tokens.typography.fontSize.sm};\n color: ${(props) => (props.$dimmed ? tokens.colors.text.tertiary : tokens.colors.text.secondary)};\n font-weight: ${(props) => (props.$dimmed ? tokens.typography.fontWeight.regular : tokens.typography.fontWeight.medium)};\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n min-width: 0;\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n font-size: ${tokens.typography.fontSize.sm};\n }\n\n ${ItemContainer}:hover & {\n color: ${(props) => (props.$dimmed ? tokens.colors.text.secondary : tokens.colors.text.primary)};\n }\n`;\n\n// Run status indicator\nexport const RunStatus = styled.span<{ $status: 'completed' | 'running' | 'failed' }>`\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.medium};\n flex-shrink: 0;\n margin-left: auto;\n\n /* Color for SVG icons - using token colors for status */\n img {\n filter: ${(props) => {\n switch (props.$status) {\n case 'completed':\n return 'brightness(0) saturate(100%) invert(73%) sepia(34%) saturate(547%) hue-rotate(99deg) brightness(91%) contrast(89%)'; // success green\n case 'running':\n return 'brightness(0) saturate(100%) invert(78%) sepia(60%) saturate(1839%) hue-rotate(360deg) brightness(100%) contrast(94%)'; // warning yellow\n case 'failed':\n return 'brightness(0) saturate(100%) invert(34%) sepia(94%) saturate(3446%) hue-rotate(343deg) brightness(94%) contrast(94%)'; // error red\n default:\n return 'none';\n }\n }};\n }\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n font-size: ${tokens.typography.fontSize.xs};\n }\n`;\n\n// Old Disclosure styles (kept for backward compatibility)\nexport const DisclosureContainer = styled.div`\n margin-bottom: ${tokens.spacing.md};\n border-radius: ${tokens.borderRadius.lg};\n background-color: ${tokens.colors.surface.overlay};\n overflow: hidden;\n`;\n\nexport const DisclosureHeader = styled.button`\n width: 100%;\n padding: ${tokens.spacing.md};\n background: ${tokens.colors.surface.overlay};\n border: none;\n color: ${tokens.colors.text.primary};\n display: flex;\n justify-content: space-between;\n align-items: center;\n cursor: pointer;\n transition: background-color ${tokens.transitions.normal};\n text-align: left;\n\n &:hover {\n background-color: ${tokens.colors.surface.overlayHover};\n }\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: -2px;\n }\n\n > div {\n flex: 1;\n }\n\n strong {\n display: block;\n font-size: ${tokens.typography.fontSize.sm};\n margin-bottom: ${tokens.spacing.xs};\n }\n`;\n\nexport const DisclosureIcon = styled.span<{ $isExpanded: boolean }>`\n font-size: ${tokens.typography.fontSize.xs};\n color: ${tokens.colors.text.secondary};\n transition: transform ${tokens.transitions.normal};\n transform: ${(props) => (props.$isExpanded ? 'rotate(180deg)' : 'rotate(0deg)')};\n`;\n\nexport const DisclosureContent = styled.div`\n padding: ${tokens.spacing.md};\n padding-top: 0;\n background-color: ${tokens.colors.overlay};\n color: ${tokens.colors.text.secondary};\n font-size: ${tokens.typography.fontSize.sm};\n line-height: ${tokens.typography.lineHeight.relaxed};\n animation: slideDown ${tokens.transitions.normal};\n\n @keyframes slideDown {\n from {\n opacity: 0;\n transform: translateY(-${tokens.spacing.sm});\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n`;\n\n// Meter (Usage tab) styles\nexport const MeterContainer = styled.div`\n max-width: 600px;\n margin: 0 auto;\n`;\n\nexport const MeterLabel = styled.div`\n font-size: ${tokens.typography.fontSize.base};\n font-weight: ${tokens.typography.fontWeight.semibold};\n margin-bottom: ${tokens.spacing.md};\n color: ${tokens.colors.text.primary};\n`;\n\nexport const MeterBar = styled.div`\n width: 100%;\n height: 24px;\n background-color: ${tokens.colors.background.darker};\n border-radius: ${tokens.borderRadius.lg};\n overflow: hidden;\n position: relative;\n margin-bottom: ${tokens.spacing.md};\n`;\n\nexport const MeterFill = styled.div<{ $percentage: number; $color: string }>`\n height: 100%;\n width: ${(props) => props.$percentage}%;\n background: linear-gradient(90deg, ${(props) => props.$color}dd, ${(props) => props.$color});\n border-radius: ${tokens.borderRadius.lg};\n transition: width ${tokens.transitions.slow}, background ${tokens.transitions.slow};\n position: relative;\n\n &::after {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: linear-gradient(90deg, transparent, ${tokens.colors.surface.overlay}, transparent);\n animation: shimmer 2s infinite;\n }\n\n @keyframes shimmer {\n 0% {\n transform: translateX(-100%);\n }\n 100% {\n transform: translateX(100%);\n }\n }\n`;\n\nexport const MeterStats = styled.div`\n font-size: ${tokens.typography.fontSize.sm};\n color: ${tokens.colors.text.secondary};\n text-align: center;\n\n small {\n font-size: ${tokens.typography.fontSize.xs};\n color: ${tokens.colors.text.secondary};\n opacity: 0.8;\n }\n`;\n\n// Connections tab styles\nexport const ConnectionsContainer = styled.div`\n max-width: 500px;\n margin: 0 auto;\n text-align: center;\n`;\n\nexport const ConnectionDescription = styled.p`\n font-size: ${tokens.typography.fontSize.sm};\n color: ${tokens.colors.text.secondary};\n line-height: ${tokens.typography.lineHeight.relaxed};\n margin-bottom: ${tokens.spacing.lg};\n`;\n\nexport const GoogleButton = styled.button<{ $isConnected?: boolean }>`\n width: 100%;\n padding: ${tokens.spacing.md} ${tokens.spacing.lg};\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.semibold};\n color: ${(props) => (props.$isConnected ? tokens.colors.text.primary : tokens.colors.text.primary)};\n background: ${(props) => (props.$isConnected ? tokens.colors.background.light : `linear-gradient(135deg, ${tokens.colors.platform.facebook}, ${tokens.colors.platform.whatsapp})`)};\n border: none;\n border-radius: ${tokens.borderRadius.md};\n cursor: pointer;\n transition: all ${tokens.transitions.normal};\n display: flex;\n align-items: center;\n justify-content: center;\n gap: ${tokens.spacing.sm};\n\n &:hover {\n transform: translateY(-2px);\n box-shadow: ${tokens.shadows.lg};\n }\n\n &:active {\n transform: translateY(0);\n }\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n\n ${(props) =>\n props.$isConnected &&\n `\n &:hover {\n background-color: ${tokens.colors.error};\n box-shadow: ${tokens.shadows.lg};\n }\n `}\n`;\n","import { useButton } from '@react-aria/button';\nimport { useMeter } from '@react-aria/meter';\nimport { useTab, useTabList, useTabPanel } from '@react-aria/tabs';\nimport { Item } from '@react-stately/collections';\nimport { useTabListState } from '@react-stately/tabs';\nimport { useRef, useState } from 'react';\nimport type { Key } from 'react-aria-components';\nimport { Heading } from 'react-aria-components';\nimport { tokens } from '../../../theme/tokens';\nimport { DarkNotificationCard } from '../../NotificationCard/DarkNotificationCard';\nimport type { NotificationSection } from '../../NotificationCard/NotificationCard';\nimport {\n CategoryDisclosure,\n CategoryDisclosurePanel,\n CategoryHeader,\n CategoryTitle,\n ChevronIcon,\n ConnectionDescription,\n ConnectionsContainer,\n Container,\n GoogleButton,\n HashtagIcon,\n ItemContainer,\n ItemDisclosure,\n ItemDisclosurePanel,\n ItemHeader,\n ItemIcon,\n ItemName,\n MeterBar,\n MeterContainer,\n MeterFill,\n MeterLabel,\n MeterStats,\n RunStatus,\n RunsContainer,\n StyledDisclosureGroup,\n TabButton,\n TabListWrapper,\n TabPanelWrapper,\n} from './PaneMenus.styles';\n\n// Icons from assets/icon-set\nconst ICONS = {\n hashtag: '/assets/icon-set/Icon-hashtag.svg',\n // State icons - left side\n loader: '/assets/icon-set/Icon-loader-2-line.svg', // Pending\n radioButton: '/assets/icon-set/Icon-radio-button-line.svg', // Running\n shieldCheck: '/assets/icon-set/Icon-shield-check-fill.svg', // Completed\n shieldCross: '/assets/icon-set/Icon-shield-cross-fill.svg', // Failed\n // Status indicator icons - right side (before chevron)\n checkFill: '/assets/icon-set/Icon-check-fill.svg', // Completed status\n hourglass: '/assets/icon-set/Icon-hourglass-line.svg', // Running status\n closeFill: '/assets/icon-set/Icon-close-fill.svg', // Failed status\n // Legacy icons (kept for backward compatibility)\n bell: '/assets/icon-set/Icon-bell-fill.svg',\n file: '/assets/icon-set/Icon-file-3-fill.svg',\n link: '/assets/icon-set/Icon-external-link-fill.svg',\n chat: '/assets/icon-set/Icon-chat-1-fill.svg',\n logout: '/assets/icon-set/logout-box-fill.svg',\n community: '/assets/icon-set/Icon-community-fill.svg',\n cpu: '/assets/icon-set/Icon-cpu-fill.svg',\n chevronDown: '/assets/icon-set/Icon-arrow-down-s-fill.svg',\n warning: '/assets/icon-set/Icon-error-warning-fill.svg',\n};\n\nexport interface ActionLog {\n id: string;\n text: string;\n timestamp: string;\n icon?: React.ReactNode;\n iconColor?: string;\n}\n\nexport interface RunItem {\n id: string;\n name: string;\n status: 'completed' | 'running' | 'failed';\n details: string;\n /** @deprecated Use 'executing' | 'completed' | 'failed' instead. 'scheduled' maps to 'executing', 'issues' maps to 'failed' */\n category: 'scheduled' | 'completed' | 'issues' | 'executing' | 'failed';\n /** Workflow name for grouping executions under their parent workflow */\n workflowName?: string;\n /** Workflow ID for grouping */\n workflowId?: string;\n icon?:\n | 'loader'\n | 'radioButton'\n | 'shieldCheck'\n | 'shieldCross'\n | 'bell'\n | 'file'\n | 'link'\n | 'chat'\n | 'warning';\n logs?: ActionLog[];\n /** Whether logs are currently being loaded */\n logsLoading?: boolean;\n customContent?: React.ReactNode;\n}\n\nexport interface OAuthConnectionData {\n id: string;\n provider: string;\n connected: boolean;\n displayName?: string;\n scopes?: string[];\n}\n\nexport interface PaneMenusProps {\n activeTab?: 'workflows' | 'runs' | 'usage' | 'connections';\n onTabChange?: (tab: 'workflows' | 'runs' | 'usage' | 'connections') => void;\n\n // Runs tab props\n runs?: RunItem[];\n onRunSelect?: (runId: string) => void;\n\n // Usage tab props\n currentUsage?: number;\n maxUsage?: number;\n\n // Connections tab props\n isGoogleConnected?: boolean;\n onGoogleConnect?: () => void;\n onGoogleDisconnect?: () => void;\n\n // New: Real OAuth connection data support\n oauthConnections?: OAuthConnectionData[];\n onOAuthConnect?: (provider: string) => void;\n onOAuthDisconnect?: (connectionId: string) => void;\n isOAuthConnecting?: boolean;\n isOAuthLoading?: boolean;\n\n // Slot for custom connections tab content (replaces default ConnectionsTabContent)\n connectionsSlot?: React.ReactNode;\n\n // Slot for custom workflows tab content (adds new Workflows tab)\n workflowsSlot?: React.ReactNode;\n\n // Slot for custom usage tab content (replaces default UsageTabContent)\n usageSlot?: React.ReactNode;\n}\n\n// Individual item with nested disclosure for logs\nfunction ItemWithLogs({\n run,\n onRunSelect,\n}: {\n run: RunItem;\n onRunSelect?: (runId: string) => void;\n}) {\n const [isExpanded, setIsExpanded] = useState(false);\n\n // Format logs into NotificationSection format\n const logSections: NotificationSection[] = run.logs\n ? [\n {\n title: 'Action History',\n items: run.logs.map((log) => ({\n id: log.id,\n text: log.text,\n icon: log.icon,\n iconColor: log.iconColor,\n timestamp: log.timestamp,\n })),\n },\n ]\n : [];\n\n const handleClick = () => {\n setIsExpanded(!isExpanded);\n onRunSelect?.(run.id);\n };\n\n return (\n <ItemDisclosure id={run.id} data-testid={`run-item-${run.id}`}>\n <ItemHeader slot=\"trigger\" onClick={handleClick} $isExpanded={isExpanded}>\n <ItemContainer as=\"div\">\n <ItemIcon src={ICONS[run.icon || 'loader']} alt=\"\" data-testid={`run-icon-${run.status}`} />\n <ItemName data-testid=\"run-name\">{run.name}</ItemName>\n <RunStatus $status={run.status} data-testid={`run-status-${run.status}`}>\n {run.status === 'completed' && (\n <img src={ICONS.checkFill} alt=\"\" style={{ width: '16px', height: '16px' }} />\n )}\n {run.status === 'running' && (\n <img src={ICONS.hourglass} alt=\"\" style={{ width: '16px', height: '16px' }} />\n )}\n {run.status === 'failed' && (\n <img src={ICONS.closeFill} alt=\"\" style={{ width: '16px', height: '16px' }} />\n )}\n </RunStatus>\n <ChevronIcon $isExpanded={isExpanded}>\n <img src={ICONS.chevronDown} alt=\"\" />\n </ChevronIcon>\n </ItemContainer>\n </ItemHeader>\n {isExpanded && (\n <ItemDisclosurePanel>\n {run.customContent ? (\n // Render custom content directly\n <div style={{ padding: '16px' }}>{run.customContent}</div>\n ) : run.logsLoading ? (\n // Show loading spinner while logs are being fetched\n <div style={{ display: 'flex', justifyContent: 'center', padding: '16px' }}>\n <div\n style={{\n width: '24px',\n height: '24px',\n border: `2px solid ${tokens.colors.border.default}`,\n borderTopColor: tokens.colors.primary,\n borderRadius: '50%',\n animation: 'spin 1s linear infinite',\n }}\n />\n <style>{`@keyframes spin { to { transform: rotate(360deg); } }`}</style>\n </div>\n ) : run.logs && run.logs.length > 0 ? (\n <DarkNotificationCard sections={logSections} />\n ) : (\n <div style={{ color: tokens.colors.text.tertiary, fontSize: '13px', padding: '8px' }}>\n No action logs available\n </div>\n )}\n </ItemDisclosurePanel>\n )}\n </ItemDisclosure>\n );\n}\n\n// Helper to normalize category (backward compatibility)\nfunction normalizeCategory(category: RunItem['category']): 'executing' | 'completed' | 'failed' {\n if (category === 'scheduled') return 'executing';\n if (category === 'issues') return 'failed';\n return category as 'executing' | 'completed' | 'failed';\n}\n\n// Group runs by workflow name within a category\ninterface WorkflowGroup {\n workflowName: string;\n workflowId: string;\n runs: RunItem[];\n}\n\nfunction groupRunsByWorkflow(runs: RunItem[]): WorkflowGroup[] {\n const groups = new Map<string, WorkflowGroup>();\n\n for (const run of runs) {\n // Always use workflowId as the primary grouping key\n // Fallback to a normalized workflowName only if workflowId is missing\n const groupKey = run.workflowId || run.workflowName || 'ungrouped';\n\n if (!groups.has(groupKey)) {\n // Use the first workflowName encountered for this workflowId\n // This prevents duplicate groups when workflowName varies slightly\n const displayName = run.workflowName || run.name;\n\n groups.set(groupKey, {\n workflowId: groupKey,\n workflowName: displayName,\n runs: [],\n });\n }\n groups.get(groupKey)!.runs.push(run);\n }\n\n return Array.from(groups.values());\n}\n\n// Workflow group component with nested executions\nfunction WorkflowGroupItem({\n group,\n onRunSelect,\n expandedKeys,\n}: {\n group: WorkflowGroup;\n onRunSelect?: (runId: string) => void;\n expandedKeys: Set<Key>;\n}) {\n const groupId = `workflow-${group.workflowId}`;\n const isExpanded = expandedKeys.has(groupId);\n\n return (\n <CategoryDisclosure id={groupId}>\n <Heading level={4}>\n <CategoryHeader slot=\"trigger\" style={{ paddingLeft: '8px' }}>\n <CategoryTitle>\n <span style={{ fontSize: tokens.typography.fontSize.sm, fontWeight: 400 }}>{group.workflowName}</span>\n <span style={{ fontSize: tokens.typography.fontSize.xs, color: tokens.colors.text.tertiary, marginLeft: '8px' }}>\n ({group.runs.length})\n </span>\n </CategoryTitle>\n <ChevronIcon $isExpanded={isExpanded}>\n <img src={ICONS.chevronDown} alt=\"\" />\n </ChevronIcon>\n </CategoryHeader>\n </Heading>\n <CategoryDisclosurePanel>\n {group.runs.map((run) => (\n <ItemWithLogs key={run.id} run={run} onRunSelect={onRunSelect} />\n ))}\n </CategoryDisclosurePanel>\n </CategoryDisclosure>\n );\n}\n\n// Helper to render grouped runs with proper nesting\nfunction GroupedRunsRenderer({\n groups,\n onRunSelect,\n expandedKeys,\n setExpandedKeys,\n ariaLabel,\n emptyMessage,\n}: {\n groups: WorkflowGroup[];\n onRunSelect?: (runId: string) => void;\n expandedKeys: Set<Key>;\n setExpandedKeys: (keys: Set<Key>) => void;\n ariaLabel: string;\n emptyMessage: string;\n}) {\n if (groups.length === 0) {\n return (\n <ItemContainer>\n <ItemName $dimmed>{emptyMessage}</ItemName>\n </ItemContainer>\n );\n }\n\n // If single workflow with single execution, show directly\n const firstGroup = groups[0];\n if (groups.length === 1 && firstGroup && firstGroup.runs.length === 1) {\n return (\n <>\n {firstGroup.runs.map((run) => (\n <ItemWithLogs key={run.id} run={run} onRunSelect={onRunSelect} />\n ))}\n </>\n );\n }\n\n // Multiple executions - group by workflow\n return (\n <StyledDisclosureGroup\n expandedKeys={expandedKeys}\n onExpandedChange={setExpandedKeys}\n allowsMultipleExpanded\n aria-label={ariaLabel}\n >\n {groups.map((group) => (\n <WorkflowGroupItem\n key={group.workflowId}\n group={group}\n onRunSelect={onRunSelect}\n expandedKeys={expandedKeys}\n />\n ))}\n </StyledDisclosureGroup>\n );\n}\n\n// Runs tab content with DisclosureGroup - 3-level hierarchy\nfunction RunsTabContent({\n runs,\n onRunSelect,\n}: {\n runs: RunItem[];\n onRunSelect?: (runId: string) => void;\n}) {\n const [expandedKeys, setExpandedKeys] = useState<Set<Key>>(\n new Set(['executing', 'completed', 'failed']) // All status sections open by default\n );\n\n // Group runs by normalized category, then by workflow\n const executingRuns = runs.filter((r) => normalizeCategory(r.category) === 'executing');\n const completedRuns = runs.filter((r) => normalizeCategory(r.category) === 'completed');\n const failedRuns = runs.filter((r) => normalizeCategory(r.category) === 'failed');\n\n // Group each category by workflow\n const executingGroups = groupRunsByWorkflow(executingRuns);\n const completedGroups = groupRunsByWorkflow(completedRuns);\n const failedGroups = groupRunsByWorkflow(failedRuns);\n\n return (\n <RunsContainer>\n <StyledDisclosureGroup\n expandedKeys={expandedKeys}\n onExpandedChange={setExpandedKeys}\n allowsMultipleExpanded\n aria-label=\"Run sections\"\n >\n {/* Executing Section (was Scheduled) */}\n <CategoryDisclosure id=\"executing\" data-testid=\"category-executing\">\n <Heading level={3}>\n <CategoryHeader slot=\"trigger\" data-testid=\"category-header-executing\">\n <CategoryTitle>\n <HashtagIcon src={ICONS.hashtag} alt=\"\" />\n <span>EXECUTING</span>\n </CategoryTitle>\n <ChevronIcon $isExpanded={expandedKeys.has('executing')}>\n <img src={ICONS.chevronDown} alt=\"\" />\n </ChevronIcon>\n </CategoryHeader>\n </Heading>\n <CategoryDisclosurePanel>\n <GroupedRunsRenderer\n groups={executingGroups}\n onRunSelect={onRunSelect}\n expandedKeys={expandedKeys}\n setExpandedKeys={setExpandedKeys}\n ariaLabel=\"Executing workflows\"\n emptyMessage=\"No executing items\"\n />\n </CategoryDisclosurePanel>\n </CategoryDisclosure>\n\n {/* Completed Section */}\n <CategoryDisclosure id=\"completed\" data-testid=\"category-completed\">\n <Heading level={3}>\n <CategoryHeader slot=\"trigger\" data-testid=\"category-header-completed\">\n <CategoryTitle>\n <HashtagIcon src={ICONS.hashtag} alt=\"\" />\n <span>COMPLETED</span>\n </CategoryTitle>\n <ChevronIcon $isExpanded={expandedKeys.has('completed')}>\n <img src={ICONS.chevronDown} alt=\"\" />\n </ChevronIcon>\n </CategoryHeader>\n </Heading>\n <CategoryDisclosurePanel>\n <GroupedRunsRenderer\n groups={completedGroups}\n onRunSelect={onRunSelect}\n expandedKeys={expandedKeys}\n setExpandedKeys={setExpandedKeys}\n ariaLabel=\"Completed workflows\"\n emptyMessage=\"No completed items\"\n />\n </CategoryDisclosurePanel>\n </CategoryDisclosure>\n\n {/* Failed Section (was Issues) */}\n <CategoryDisclosure id=\"failed\" data-testid=\"category-failed\">\n <Heading level={3}>\n <CategoryHeader slot=\"trigger\" data-testid=\"category-header-failed\">\n <CategoryTitle>\n <HashtagIcon src={ICONS.hashtag} alt=\"\" />\n <span>FAILED</span>\n </CategoryTitle>\n <ChevronIcon $isExpanded={expandedKeys.has('failed')}>\n <img src={ICONS.chevronDown} alt=\"\" />\n </ChevronIcon>\n </CategoryHeader>\n </Heading>\n <CategoryDisclosurePanel>\n <GroupedRunsRenderer\n groups={failedGroups}\n onRunSelect={onRunSelect}\n expandedKeys={expandedKeys}\n setExpandedKeys={setExpandedKeys}\n ariaLabel=\"Failed workflows\"\n emptyMessage=\"No failed items\"\n />\n </CategoryDisclosurePanel>\n </CategoryDisclosure>\n </StyledDisclosureGroup>\n </RunsContainer>\n );\n}\n\n// Usage tab content with meter\nfunction UsageTabContent({\n currentUsage = 0,\n maxUsage = 100000,\n}: {\n currentUsage?: number;\n maxUsage?: number;\n}) {\n const ref = useRef<HTMLDivElement>(null);\n const { meterProps, labelProps } = useMeter({\n label: 'Token Usage',\n value: currentUsage,\n minValue: 0,\n maxValue: maxUsage,\n });\n\n const percentage = Math.round((currentUsage / maxUsage) * 100);\n\n // Determine color based on usage\n let color = '#10b981'; // green\n if (percentage >= 75)\n color = '#ef4444'; // red\n else if (percentage >= 50) color = '#f59e0b'; // yellow\n\n return (\n <MeterContainer>\n <MeterLabel {...labelProps}>Token Usage</MeterLabel>\n <MeterBar {...meterProps} ref={ref}>\n <MeterFill $percentage={percentage} $color={color} />\n </MeterBar>\n <MeterStats>\n {percentage}% of {maxUsage.toLocaleString()} tokens used\n <br />\n <small>\n {currentUsage.toLocaleString()} / {maxUsage.toLocaleString()} tokens\n </small>\n </MeterStats>\n </MeterContainer>\n );\n}\n\n// Connections tab content\nfunction ConnectionsTabContent({\n isGoogleConnected = false,\n onGoogleConnect,\n onGoogleDisconnect,\n oauthConnections,\n onOAuthConnect,\n onOAuthDisconnect,\n isOAuthConnecting = false,\n isOAuthLoading = false,\n}: {\n isGoogleConnected?: boolean;\n onGoogleConnect?: () => void;\n onGoogleDisconnect?: () => void;\n oauthConnections?: OAuthConnectionData[];\n onOAuthConnect?: (provider: string) => void;\n onOAuthDisconnect?: (connectionId: string) => void;\n isOAuthConnecting?: boolean;\n isOAuthLoading?: boolean;\n}) {\n const ref = useRef<HTMLButtonElement>(null);\n\n // Use real OAuth data if available, otherwise fall back to simple boolean prop\n const useRealOAuthData = oauthConnections && onOAuthConnect && onOAuthDisconnect;\n const googleConnection = useRealOAuthData\n ? oauthConnections.find((c) => c.provider === 'google')\n : undefined;\n const isConnected = useRealOAuthData ? googleConnection?.connected || false : isGoogleConnected;\n\n const handlePress = () => {\n if (useRealOAuthData) {\n if (isConnected && googleConnection) {\n onOAuthDisconnect(googleConnection.id);\n } else {\n onOAuthConnect('google');\n }\n } else {\n // Fall back to old simple callbacks\n if (isConnected && onGoogleDisconnect) {\n onGoogleDisconnect();\n } else if (!isConnected && onGoogleConnect) {\n onGoogleConnect();\n }\n }\n };\n\n const isButtonDisabled = isOAuthLoading || isOAuthConnecting;\n\n const { buttonProps } = useButton(\n {\n onPress: handlePress,\n isDisabled: isButtonDisabled,\n },\n ref\n );\n\n if (isOAuthLoading) {\n return (\n <ConnectionsContainer>\n <ConnectionDescription>Loading connections...</ConnectionDescription>\n </ConnectionsContainer>\n );\n }\n\n const buttonText = isOAuthConnecting\n ? 'Connecting...'\n : isConnected\n ? '✓ Disconnect from Google'\n : 'Connect with Google';\n\n const descriptionText = isConnected\n ? googleConnection?.displayName\n ? `Connected as ${googleConnection.displayName}. You can access Google services and data.`\n : 'Your Google account is connected. You can access Google services and data.'\n : 'Connect your Google account to access Google services and integrate with your workflows.';\n\n return (\n <ConnectionsContainer>\n <ConnectionDescription>{descriptionText}</ConnectionDescription>\n <GoogleButton {...buttonProps} ref={ref} $isConnected={isConnected}>\n {buttonText}\n </GoogleButton>\n {isConnected && googleConnection?.scopes && googleConnection.scopes.length > 0 && (\n <div style={{ marginTop: '16px', fontSize: '13px', color: tokens.colors.text.secondary }}>\n Connected services: {googleConnection.scopes.join(', ')}\n </div>\n )}\n </ConnectionsContainer>\n );\n}\n\n// Tab component\nfunction Tab({ item, state }: { item: any; state: ReturnType<typeof useTabListState> }) {\n const ref = useRef<HTMLButtonElement>(null);\n const { tabProps } = useTab({ key: item.key }, state, ref);\n\n return (\n <TabButton\n {...tabProps}\n ref={ref}\n $isSelected={state.selectedKey === item.key}\n data-testid={`tab-${item.key}`}\n >\n {item.rendered}\n </TabButton>\n );\n}\n\n// TabList component\nfunction TabList({\n state,\n ...props\n}: { state: ReturnType<typeof useTabListState> } & React.HTMLAttributes<HTMLDivElement>) {\n const ref = useRef<HTMLDivElement>(null);\n const { tabListProps } = useTabList(props, state, ref);\n\n return (\n <TabListWrapper {...tabListProps} ref={ref}>\n {[...state.collection].map((item) => (\n <Tab key={item.key} item={item} state={state} />\n ))}\n </TabListWrapper>\n );\n}\n\n// TabPanel component\nfunction TabPanel({\n state,\n ...props\n}: { state: ReturnType<typeof useTabListState> } & React.HTMLAttributes<HTMLDivElement>) {\n const ref = useRef<HTMLDivElement>(null);\n const { tabPanelProps } = useTabPanel(props, state, ref);\n\n return (\n <TabPanelWrapper {...tabPanelProps} ref={ref} data-testid={`tabpanel-${state.selectedKey}`}>\n {state.selectedItem?.props.children}\n </TabPanelWrapper>\n );\n}\n\nexport function PaneMenus({\n activeTab = 'runs',\n onTabChange,\n runs = [],\n onRunSelect,\n currentUsage = 0,\n maxUsage = 100000,\n isGoogleConnected = false,\n onGoogleConnect,\n onGoogleDisconnect,\n oauthConnections,\n onOAuthConnect,\n onOAuthDisconnect,\n isOAuthConnecting = false,\n isOAuthLoading = false,\n connectionsSlot,\n workflowsSlot,\n usageSlot,\n}: PaneMenusProps) {\n const state = useTabListState({\n selectedKey: activeTab,\n onSelectionChange: (key) => {\n if (onTabChange) {\n onTabChange(key as 'workflows' | 'runs' | 'usage' | 'connections');\n }\n },\n children: (\n <>\n {workflowsSlot && (\n <Item key=\"workflows\" title=\"Workflows\">\n {workflowsSlot}\n </Item>\n )}\n <Item key=\"runs\" title=\"Runs\">\n <RunsTabContent runs={runs} onRunSelect={onRunSelect} />\n </Item>\n <Item key=\"usage\" title=\"Usage\">\n {usageSlot || <UsageTabContent currentUsage={currentUsage} maxUsage={maxUsage} />}\n </Item>\n <Item key=\"connections\" title=\"Connections\">\n {connectionsSlot || (\n <ConnectionsTabContent\n isGoogleConnected={isGoogleConnected}\n onGoogleConnect={onGoogleConnect}\n onGoogleDisconnect={onGoogleDisconnect}\n oauthConnections={oauthConnections}\n onOAuthConnect={onOAuthConnect}\n onOAuthDisconnect={onOAuthDisconnect}\n isOAuthConnecting={isOAuthConnecting}\n isOAuthLoading={isOAuthLoading}\n />\n )}\n </Item>\n </>\n ),\n });\n\n return (\n <Container>\n <TabList state={state} aria-label=\"Main pane menu\" />\n <TabPanel key={state.selectedItem?.key} state={state} />\n </Container>\n );\n}\n","import styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\nexport const Container = styled.header`\n position: relative;\n width: 100%;\n height: 56px;\n background-color: ${tokens.colors.surface.subtle};\n backdrop-filter: blur(10px);\n -webkit-backdrop-filter: blur(10px);\n overflow: hidden;\n display: flex;\n align-items: center;\n justify-content: center;\n\n /* Background pattern - responsive sizes */\n &::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-image: url('/assets/bg-set/pattern/Size=xs, Type=Waves Rays2.svg');\n background-size: cover;\n background-position: center;\n background-repeat: no-repeat;\n opacity: 0.6;\n z-index: 0;\n }\n\n /* Small screens */\n @media (min-width: ${tokens.breakpoints.mobile}px) {\n &::before {\n background-image: url('/assets/bg-set/pattern/Size=sm, Type=Waves Rays2.svg');\n }\n }\n\n /* Medium screens */\n @media (min-width: ${tokens.breakpoints.tablet}px) {\n height: 64px;\n\n &::before {\n background-image: url('/assets/bg-set/pattern/Size=md, Type=Waves Rays2.svg');\n }\n }\n\n /* Large screens */\n @media (min-width: ${tokens.breakpoints.desktop}px) {\n &::before {\n background-image: url('/assets/bg-set/pattern/Size=lg, Type=Waves Rays2.svg');\n }\n }\n\n /* Extra large screens */\n @media (min-width: 1440px) {\n &::before {\n background-image: url('/assets/bg-set/pattern/Size=xl, Type=Waves Rays2.svg');\n }\n }\n\n /* Dark theme support */\n @media (prefers-color-scheme: dark) {\n background-color: ${tokens.colors.backdrop};\n }\n`;\n\nexport const BrandLogo = styled.img`\n position: relative;\n z-index: 1;\n max-height: 28px;\n height: auto;\n width: auto;\n object-fit: contain;\n pointer-events: none;\n user-select: none;\n\n /* Slightly larger on desktop */\n @media (min-width: ${tokens.breakpoints.tablet}px) {\n max-height: 32px;\n }\n`;\n\nexport const SettingsButton = styled.button<{ $isHovered?: boolean }>`\n position: absolute;\n top: 50%;\n right: ${tokens.spacing.md};\n transform: translateY(-50%);\n z-index: 2;\n\n /* Button appearance */\n width: 40px;\n height: 40px;\n border-radius: ${tokens.borderRadius.full};\n border: none;\n background-color: ${tokens.colors.surface.glass};\n cursor: pointer;\n\n /* Center the icon */\n display: flex;\n align-items: center;\n justify-content: center;\n\n /* Smooth transitions */\n transition: background-color ${tokens.transitions.normal}, transform ${tokens.transitions.fast};\n\n /* Hover state */\n &:hover {\n background-color: ${tokens.colors.surface.overlayHover};\n }\n\n /* Active state */\n &:active {\n transform: translateY(-50%) scale(0.95);\n }\n\n /* Focus visible state for accessibility */\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n\n /* Disabled state */\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n /* Responsive positioning */\n @media (min-width: ${tokens.breakpoints.tablet}px) {\n right: ${tokens.spacing.md};\n }\n\n @media (min-width: ${tokens.breakpoints.desktop}px) {\n right: ${tokens.spacing.lg};\n }\n`;\n\nexport const BackButton = styled.button<{ $isHovered?: boolean }>`\n position: absolute;\n top: 50%;\n left: ${tokens.spacing.md};\n transform: translateY(-50%);\n z-index: 2;\n\n /* Button appearance */\n width: 40px;\n height: 40px;\n border-radius: ${tokens.borderRadius.full};\n border: none;\n background-color: ${tokens.colors.surface.glass};\n cursor: pointer;\n\n /* Center the icon */\n display: flex;\n align-items: center;\n justify-content: center;\n\n /* Smooth transitions */\n transition: background-color ${tokens.transitions.normal}, transform ${tokens.transitions.fast};\n\n /* Hover state */\n &:hover {\n background-color: ${tokens.colors.surface.overlayHover};\n }\n\n /* Active state */\n &:active {\n transform: translateY(-50%) scale(0.95);\n }\n\n /* Focus visible state for accessibility */\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n\n /* Disabled state */\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n /* Responsive positioning */\n @media (min-width: ${tokens.breakpoints.tablet}px) {\n left: ${tokens.spacing.md};\n }\n\n @media (min-width: ${tokens.breakpoints.desktop}px) {\n left: ${tokens.spacing.lg};\n }\n`;\n","import { useButton } from '@react-aria/button';\nimport { useRef, useState } from 'react';\nimport { tokens } from '../../../theme/tokens';\nimport { Icon } from '../Icon';\nimport type { IconName } from '../Icon/icons';\nimport { BackButton, BrandLogo, Container, SettingsButton } from './PaneSectionHeader.styles';\n\nexport type BrandType = 'Google' | 'Microsoft' | 'Slack' | 'YouTube';\n\nexport interface PaneSectionHeaderProps {\n /**\n * Brand logo to display in the center of the header\n * @default 'Google'\n */\n brand?: BrandType;\n /**\n * Callback fired when back button is clicked\n */\n onBackClick?: () => void;\n /**\n * Callback fired when settings button is clicked\n */\n onSettingsClick?: () => void;\n /**\n * Icon name for the settings button\n * @default 'flow-chart'\n */\n settingsIcon?: string;\n /**\n * Additional CSS class name\n */\n className?: string;\n /**\n * Accessible label for the header\n */\n 'aria-label'?: string;\n}\n\n/**\n * PaneSectionHeader component\n *\n * A fixed-height header positioned at the top of the main pane section.\n * Features a centered brand logo and a settings button in the top-right corner.\n * Background includes responsive Rays2 pattern from the design system.\n *\n * @example\n * ```tsx\n * <PaneSectionHeader\n * brand=\"Google\"\n * onSettingsClick={() => console.log('Settings clicked')}\n * />\n * ```\n */\nexport function PaneSectionHeader({\n brand = 'Google',\n onBackClick,\n onSettingsClick,\n settingsIcon = 'flow-chart',\n className,\n 'aria-label': ariaLabel = 'Pane section header',\n}: PaneSectionHeaderProps) {\n const [isBackHovered, setIsBackHovered] = useState(false);\n const [isSettingsHovered, setIsSettingsHovered] = useState(false);\n const backButtonRef = useRef<HTMLButtonElement>(null);\n const settingsButtonRef = useRef<HTMLButtonElement>(null);\n\n const { buttonProps: backButtonProps } = useButton(\n {\n onPress: onBackClick,\n 'aria-label': 'Go back',\n },\n backButtonRef\n );\n\n const { buttonProps: settingsButtonProps } = useButton(\n {\n onPress: onSettingsClick,\n 'aria-label': 'Workflow configuration',\n },\n settingsButtonRef\n );\n\n return (\n <Container className={className} role=\"banner\" aria-label={ariaLabel}>\n {/* Back button - top left */}\n {onBackClick && (\n <BackButton\n {...backButtonProps}\n ref={backButtonRef}\n onMouseEnter={() => setIsBackHovered(true)}\n onMouseLeave={() => setIsBackHovered(false)}\n $isHovered={isBackHovered}\n >\n <Icon name=\"arrow-left-fill\" size={20} color={tokens.colors.text.secondary} />\n </BackButton>\n )}\n\n {/* Brand logo centered - using white variant for better contrast on dark background */}\n <BrandLogo src={`/assets/bg-set/brand-logos/${brand}2.svg`} alt={brand} />\n\n {/* Settings button - top right */}\n <SettingsButton\n {...settingsButtonProps}\n ref={settingsButtonRef}\n onMouseEnter={() => setIsSettingsHovered(true)}\n onMouseLeave={() => setIsSettingsHovered(false)}\n $isHovered={isSettingsHovered}\n >\n <Icon name={settingsIcon as IconName} size={20} color={tokens.colors.text.secondary} />\n </SettingsButton>\n </Container>\n );\n}\n\nPaneSectionHeader.displayName = 'PaneSectionHeader';\n","import styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\nexport const Container = styled.button<{ $active?: boolean }>`\n /* Base button styling */\n width: 48px;\n height: 48px;\n border: none;\n padding: ${tokens.spacing.xs};\n border-radius: ${({ $active }) => ($active ? tokens.borderRadius.xl : tokens.borderRadius.full)};\n background-color: ${tokens.colors.background.light};\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all ${tokens.transitions.fast};\n position: relative;\n overflow: hidden;\n\n /* Hover state */\n &:hover {\n border-radius: ${tokens.borderRadius.xl};\n background-color: ${tokens.colors.surface.overlayHover};\n }\n\n /* Focus visible state for accessibility */\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n\n /* Active indicator */\n ${({ $active }) =>\n $active &&\n `\n &::before {\n content: '';\n position: absolute;\n left: -16px;\n top: 50%;\n transform: translateY(-50%);\n width: 4px;\n height: 40px;\n background-color: ${tokens.colors.text.primary};\n border-radius: 0 ${tokens.borderRadius.sm} ${tokens.borderRadius.sm} 0;\n }\n `}\n\n /* Disabled state */\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n`;\n\nexport const LogoImage = styled.img`\n width: 100%;\n height: 100%;\n object-fit: contain;\n pointer-events: none;\n user-select: none;\n`;\n","import { useButton } from '@react-aria/button';\nimport type { AriaButtonProps } from '@react-types/button';\nimport { useRef } from 'react';\nimport { Container, LogoImage } from './ServiceIcon.styles';\n\nexport type ServiceBrand =\n | 'Facebook'\n | 'Gmail'\n | 'Instagram'\n | 'LinkedIn'\n | 'Reddit'\n | 'Slack'\n | 'Telegram'\n | 'WhatsApp'\n | 'X'\n | 'YouTube';\n\nexport interface ServiceIconProps extends AriaButtonProps {\n /**\n * Brand logo to display\n */\n brand: ServiceBrand;\n /**\n * Whether the service icon is active/selected\n */\n active?: boolean;\n /**\n * Additional CSS class name\n */\n className?: string;\n}\n\n/**\n * ServiceIcon component\n *\n * Displays a circular brand logo icon that can be used as a service selector.\n * Uses colored brand logos from assets/icons/Brand and supports active/hover states.\n *\n * @example\n * ```tsx\n * <ServiceIcon\n * brand=\"Gmail\"\n * active={true}\n * onPress={() => console.log('Gmail clicked')}\n * aria-label=\"Gmail service\"\n * />\n * ```\n */\nexport function ServiceIcon({ brand, active = false, className, ...ariaProps }: ServiceIconProps) {\n const ref = useRef<HTMLButtonElement>(null);\n const { buttonProps } = useButton(\n {\n ...ariaProps,\n 'aria-pressed': active,\n },\n ref\n );\n\n return (\n <Container {...buttonProps} ref={ref} $active={active} className={className}>\n <LogoImage src={`/assets/icons/Brand/${brand}.svg`} alt={brand} />\n </Container>\n );\n}\n\nServiceIcon.displayName = 'ServiceIcon';\n","import styled from 'styled-components';\nimport { tokens } from '../../theme/tokens';\n\n/**\n * Main container for the notification card with light gradient background\n */\nexport const NotificationCardContainer = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n max-width: 600px;\n padding: ${tokens.spacing.xl};\n background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%);\n border-radius: ${tokens.borderRadius['2xl']};\n box-shadow: ${tokens.shadows.card};\n gap: ${tokens.spacing.md};\n`;\n\n/**\n * Section header button (collapsible)\n */\nexport const SectionHeader = styled.button`\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n padding: ${tokens.spacing.sm} ${tokens.spacing.xs};\n border: none;\n background: transparent;\n font-family: ${tokens.typography.fontFamily.primary};\n font-size: ${tokens.typography.fontSize.base};\n font-weight: ${tokens.typography.fontWeight.bold};\n color: ${tokens.colors.secondary};\n text-align: left;\n cursor: pointer;\n transition: all ${tokens.transitions.normal};\n\n &:hover {\n color: ${tokens.colors.background.darkest};\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.accent};\n outline-offset: 2px;\n border-radius: ${tokens.borderRadius.md};\n }\n`;\n\n/**\n * Chevron icon for section header with rotation animation\n */\ninterface ChevronIconProps {\n $isExpanded: boolean;\n}\n\nexport const ChevronIcon = styled.span<ChevronIconProps>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n transition: transform ${tokens.transitions.normal};\n color: ${tokens.colors.text.tertiary};\n\n ${(props) =>\n props.$isExpanded\n ? `\n transform: rotate(0deg);\n `\n : `\n transform: rotate(-90deg);\n `}\n\n svg {\n width: 16px;\n height: 16px;\n }\n`;\n\n/**\n * Container for section content (list of notification items)\n */\nexport const SectionContent = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.sm};\n padding-left: 0;\n margin-top: ${tokens.spacing.xs};\n`;\n\n/**\n * Individual notification item wrapper (button)\n */\ninterface NotificationItemWrapperProps {\n $isSelected: boolean;\n $hasIcon: boolean;\n}\n\nexport const NotificationItemWrapper = styled.button<NotificationItemWrapperProps>`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.md};\n width: 100%;\n padding: ${(props) => (props.$isSelected ? `${tokens.spacing.md} ${tokens.spacing.md}` : `${tokens.spacing.sm} ${tokens.spacing.md}`)};\n border: none;\n cursor: pointer;\n text-align: left;\n transition: all ${tokens.transitions.normal};\n border-radius: ${(props) => (props.$isSelected ? tokens.borderRadius.md : tokens.borderRadius.md)};\n\n /* Default state - transparent background */\n background-color: ${(props) => (props.$isSelected ? tokens.colors.secondary : 'transparent')};\n\n /* Hover state */\n &:hover:not(:disabled) {\n background-color: ${(props) => (props.$isSelected ? tokens.colors.background.darkest : tokens.colors.surface.overlay)};\n }\n\n /* Active state */\n &:active:not(:disabled) {\n transform: scale(0.99);\n }\n\n /* Focus state */\n &:focus-visible {\n outline: 2px solid ${(props) => (props.$isSelected ? tokens.colors.text.primary : tokens.colors.accent)};\n outline-offset: 2px;\n }\n\n /* Disabled state */\n &:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n`;\n\n/**\n * Icon container for notification items\n */\ninterface ItemIconProps {\n $iconColor?: string;\n $hasCustomIcon: boolean;\n}\n\nexport const ItemIcon = styled.span<ItemIconProps>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n flex-shrink: 0;\n border-radius: ${(props) => (props.$hasCustomIcon ? tokens.borderRadius.sm : tokens.borderRadius.full)};\n background-color: ${(props) => props.$iconColor || 'transparent'};\n color: ${(props) => (props.$hasCustomIcon ? tokens.colors.text.primary : tokens.colors.text.tertiary)};\n font-size: ${(props) => (props.$hasCustomIcon ? tokens.typography.fontSize.base : tokens.typography.fontSize.sm)};\n\n /* Default circle icon styling */\n ${(props) =>\n !props.$hasCustomIcon &&\n `\n svg {\n width: 20px;\n height: 20px;\n }\n `}\n\n /* Custom icon (emoji or colored icon) styling */\n ${(props) =>\n props.$hasCustomIcon &&\n `\n padding: ${tokens.spacing.xs};\n `}\n`;\n\n/**\n * Text content for notification items\n */\ninterface ItemTextProps {\n $isSelected: boolean;\n}\n\nexport const ItemText = styled.span<ItemTextProps>`\n flex: 1;\n font-family: ${tokens.typography.fontFamily.primary};\n font-size: 15px;\n font-weight: ${(props) => (props.$isSelected ? tokens.typography.fontWeight.medium : tokens.typography.fontWeight.regular)};\n color: ${(props) => (props.$isSelected ? tokens.colors.text.primary : tokens.colors.text.tertiary)};\n line-height: ${tokens.typography.lineHeight.normal};\n word-wrap: break-word;\n`;\n\n/**\n * Three-dot menu button (shown on selected items)\n */\nexport const MenuButton = styled.button`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n padding: 0;\n border: none;\n border-radius: ${tokens.borderRadius.sm};\n background-color: transparent;\n color: ${tokens.colors.text.primary};\n cursor: pointer;\n transition: all ${tokens.transitions.normal};\n flex-shrink: 0;\n\n &:hover:not(:disabled) {\n background-color: ${tokens.colors.surface.overlayActive};\n }\n\n &:active:not(:disabled) {\n background-color: rgba(255, 255, 255, 0.25);\n transform: scale(0.95);\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.text.primary};\n outline-offset: 2px;\n }\n\n svg {\n width: 20px;\n height: 20px;\n }\n`;\n","import { useButton } from '@react-aria/button';\nimport React, { type KeyboardEvent, useRef, useState } from 'react';\nimport {\n ChevronIcon,\n ItemIcon,\n ItemText,\n MenuButton,\n NotificationCardContainer,\n NotificationItemWrapper,\n SectionContent,\n SectionHeader,\n} from './NotificationCard.styles';\n\nexport interface NotificationItem {\n /** Unique identifier for the item */\n id: string;\n /** The text content of the notification */\n text: string;\n /** Optional icon (can be emoji, SVG, or icon component) */\n icon?: React.ReactNode;\n /** Icon background color (for colored icons like Slack, Google Sheets) */\n iconColor?: string;\n /** Whether this item is currently selected/active */\n isSelected?: boolean;\n}\n\nexport interface NotificationSection {\n /** Section title (e.g., \"Today\", \"Yesterday\") */\n title: string;\n /** Whether the section is initially collapsed */\n isCollapsed?: boolean;\n /** Array of notification items in this section */\n items: NotificationItem[];\n}\n\nexport interface NotificationCardProps {\n /** Array of notification sections */\n sections: NotificationSection[];\n /** Callback when an item is clicked */\n onItemClick?: (item: NotificationItem) => void;\n /** Currently selected item ID */\n selectedItemId?: string;\n /** Callback when menu button is clicked (three-dot menu) */\n onMenuClick?: (item: NotificationItem) => void;\n /** Additional CSS class name */\n className?: string;\n /** ARIA label for the notification card */\n 'aria-label'?: string;\n}\n\n/**\n * NotificationCard component with collapsible sections\n *\n * Features:\n * - Date-based sections with collapsible headers\n * - Different item states (default, selected)\n * - Icon variants (circle icon, colored app icons)\n * - Three-dot menu on selected items\n * - React ARIA for accessibility\n * - Full keyboard navigation support\n * - Clean design matching vendor image\n *\n * @example\n * ```tsx\n * <NotificationCard\n * sections={[\n * {\n * title: \"Today\",\n * items: [\n * { id: \"1\", text: \"Help me write a professional email.\" },\n * { id: \"2\", text: \"Write a letter to the work chat\", icon: \"💬\", iconColor: \"#4A90E2\" }\n * ]\n * },\n * {\n * title: \"Yesterday\",\n * items: [\n * { id: \"3\", text: \"Generate a 3D scene of robots\", isSelected: true }\n * ]\n * }\n * ]}\n * selectedItemId=\"3\"\n * onItemClick={(item) => console.log(item)}\n * onMenuClick={(item) => console.log(\"Menu clicked\", item)}\n * />\n * ```\n */\nexport const NotificationCard: React.FC<NotificationCardProps> = ({\n sections,\n onItemClick,\n selectedItemId,\n onMenuClick,\n className,\n 'aria-label': ariaLabel = 'Notification history',\n}) => {\n // Track collapsed state for each section\n const [collapsedSections, setCollapsedSections] = useState<Record<string, boolean>>(() => {\n const initial: Record<string, boolean> = {};\n for (const section of sections) {\n initial[section.title] = section.isCollapsed || false;\n }\n return initial;\n });\n\n const toggleSection = (sectionTitle: string) => {\n setCollapsedSections((prev) => ({\n ...prev,\n [sectionTitle]: !prev[sectionTitle],\n }));\n };\n\n return (\n <NotificationCardContainer className={className} aria-label={ariaLabel} role=\"region\">\n {sections.map((section) => (\n <SectionComponent\n key={section.title}\n section={section}\n isCollapsed={collapsedSections[section.title] ?? false}\n onToggle={() => toggleSection(section.title)}\n onItemClick={onItemClick}\n selectedItemId={selectedItemId}\n onMenuClick={onMenuClick}\n />\n ))}\n </NotificationCardContainer>\n );\n};\n\n/**\n * Individual section component with collapsible header\n */\ninterface SectionComponentProps {\n section: NotificationSection;\n isCollapsed: boolean;\n onToggle: () => void;\n onItemClick?: (item: NotificationItem) => void;\n selectedItemId?: string;\n onMenuClick?: (item: NotificationItem) => void;\n}\n\nconst SectionComponent: React.FC<SectionComponentProps> = ({\n section,\n isCollapsed,\n onToggle,\n onItemClick,\n selectedItemId,\n onMenuClick,\n}) => {\n const headerRef = useRef<HTMLButtonElement>(null);\n const { buttonProps } = useButton(\n {\n onPress: onToggle,\n 'aria-label': `${section.title} section, ${isCollapsed ? 'collapsed' : 'expanded'}`,\n 'aria-expanded': !isCollapsed,\n },\n headerRef\n );\n\n return (\n <section aria-label={`${section.title} notifications`}>\n <SectionHeader {...buttonProps} ref={headerRef}>\n {section.title}\n <ChevronIcon $isExpanded={!isCollapsed} aria-hidden=\"true\">\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n role=\"img\"\n aria-label=\"Expand/collapse icon\"\n >\n <title>Expand/collapse icon</title>\n <path\n d=\"M4 6L8 10L12 6\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </ChevronIcon>\n </SectionHeader>\n\n {!isCollapsed && (\n <SectionContent role=\"list\">\n {section.items.map((item) => (\n <NotificationItemComponent\n key={item.id}\n item={item}\n isSelected={item.id === selectedItemId}\n onItemClick={onItemClick}\n onMenuClick={onMenuClick}\n />\n ))}\n </SectionContent>\n )}\n </section>\n );\n};\n\n/**\n * Individual notification item component\n */\ninterface NotificationItemComponentProps {\n item: NotificationItem;\n isSelected: boolean;\n onItemClick?: (item: NotificationItem) => void;\n onMenuClick?: (item: NotificationItem) => void;\n}\n\nconst NotificationItemComponent: React.FC<NotificationItemComponentProps> = ({\n item,\n isSelected,\n onItemClick,\n onMenuClick,\n}) => {\n const itemRef = useRef<HTMLButtonElement>(null);\n const menuRef = useRef<HTMLButtonElement>(null);\n\n const { buttonProps: itemButtonProps } = useButton(\n {\n onPress: () => onItemClick?.(item),\n 'aria-label': `Notification: ${item.text}`,\n 'aria-current': isSelected ? 'true' : undefined,\n },\n itemRef\n );\n\n const { buttonProps: menuButtonProps } = useButton(\n {\n onPress: () => onMenuClick?.(item),\n 'aria-label': `Options for ${item.text}`,\n },\n menuRef\n );\n\n // Handle keyboard navigation between item and menu button\n const handleItemKeyDown = (e: KeyboardEvent<HTMLButtonElement>) => {\n if (isSelected && e.key === 'Tab' && !e.shiftKey) {\n // Allow natural tab to menu button\n return;\n }\n };\n\n return (\n <NotificationItemWrapper\n {...itemButtonProps}\n ref={itemRef}\n $isSelected={isSelected}\n $hasIcon={!!item.icon}\n role=\"listitem\"\n onKeyDown={handleItemKeyDown}\n >\n <ItemIcon $iconColor={item.iconColor} $hasCustomIcon={!!item.icon}>\n {item.icon || (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <circle cx=\"10\" cy=\"10\" r=\"8\" stroke=\"currentColor\" strokeWidth=\"2\" />\n </svg>\n )}\n </ItemIcon>\n <ItemText $isSelected={isSelected}>{item.text}</ItemText>\n {isSelected && onMenuClick && (\n <MenuButton\n {...menuButtonProps}\n ref={menuRef}\n onClick={(e) => {\n e.stopPropagation();\n menuButtonProps.onClick?.(e);\n }}\n >\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <title>More options</title>\n <circle cx=\"10\" cy=\"4\" r=\"1.5\" fill=\"currentColor\" />\n <circle cx=\"10\" cy=\"10\" r=\"1.5\" fill=\"currentColor\" />\n <circle cx=\"10\" cy=\"16\" r=\"1.5\" fill=\"currentColor\" />\n </svg>\n </MenuButton>\n )}\n </NotificationItemWrapper>\n );\n};\n\nNotificationCard.displayName = 'NotificationCard';\n","import styled, { css } from 'styled-components';\nimport { tokens } from '../../theme/tokens';\n\ninterface StyledUserMessageProps {\n $isPressed: boolean;\n}\n\nexport const StyledUserMessage = styled.button<StyledUserMessageProps>`\n /* Base styles */\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: ${tokens.spacing.md} ${tokens.spacing.xl};\n font-family: ${tokens.typography.fontFamily.primary};\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.regular};\n line-height: ${tokens.typography.lineHeight.normal};\n border: none;\n cursor: default;\n user-select: none;\n white-space: pre-wrap;\n word-wrap: break-word;\n word-break: break-word;\n position: relative;\n text-align: left;\n\n /* Force override CopilotKit's default user message styles */\n && {\n background: ${tokens.colors.message.user} !important;\n color: ${tokens.colors.text.primary} !important;\n border-radius: ${tokens.borderRadius['2xl']} !important; /* Rounded corners that work for multi-line */\n }\n\n /* Subtle shadow and glow effect */\n box-shadow: ${tokens.shadows.glow.secondary};\n\n /* Smooth transitions */\n transition: all ${tokens.transitions.normal};\n\n /* Speech bubble tail - matches bubble background */\n &::after {\n content: '';\n position: absolute;\n bottom: -6px;\n right: ${tokens.spacing.md};\n width: 14px;\n height: 14px;\n background: ${tokens.colors.message.user} !important;\n transform: rotate(45deg);\n border-radius: 0 0 ${tokens.borderRadius.sm} 0;\n clip-path: polygon(0 0, 100% 100%, 0 100%);\n box-shadow: ${tokens.shadows.sm};\n transition: all ${tokens.transitions.normal};\n z-index: -1;\n }\n\n /* Hover state - only for button elements */\n &[role=\"button\"]:hover:not(:disabled) {\n transform: translateY(-1px);\n cursor: pointer;\n box-shadow: ${tokens.shadows.lg};\n\n &::after {\n box-shadow: ${tokens.shadows.md};\n }\n }\n\n /* Active/Pressed state - only for button elements */\n &[role=\"button\"]:active:not(:disabled) {\n transform: translateY(0);\n box-shadow: ${tokens.shadows.sm};\n\n &::after {\n box-shadow: ${tokens.shadows.sm};\n }\n }\n\n ${({ $isPressed }) =>\n $isPressed &&\n css`\n transform: translateY(0) scale(0.98);\n box-shadow: ${tokens.shadows.sm};\n\n &::after {\n box-shadow: ${tokens.shadows.sm};\n }\n `}\n\n /* Focus state for accessibility */\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.secondary};\n outline-offset: 3px;\n box-shadow: ${tokens.shadows.lg};\n }\n\n /* Disabled state */\n &:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n transform: none;\n box-shadow: ${tokens.shadows.none};\n\n &::after {\n opacity: 0.5;\n box-shadow: ${tokens.shadows.none};\n }\n }\n`;\n","import type { AriaButtonProps } from '@react-aria/button';\nimport { useButton } from '@react-aria/button';\nimport { memo, useRef, type ReactNode } from 'react';\nimport { StyledUserMessage } from './UserMessage.styles';\n\nexport interface UserMessageProps extends AriaButtonProps {\n /**\n * The message text to display\n */\n children: ReactNode;\n /**\n * Additional CSS class name\n */\n className?: string;\n /**\n * Whether the message is in a pressed state\n */\n isPressed?: boolean;\n /**\n * Optional click handler\n */\n onPress?: () => void;\n}\n\n/**\n * UserMessage component - Displays a user message in a gradient pill\n *\n * This component renders a user message with a purple-to-blue gradient background,\n * pill-shaped design with fully rounded ends, and white text. It uses React ARIA\n * for accessibility and supports keyboard navigation.\n *\n * Memoized to prevent unnecessary re-renders during parent updates.\n *\n * @example\n * ```tsx\n * <UserMessage onPress={() => console.log('clicked')}>\n * Can you export this as a CSV?\n * </UserMessage>\n * ```\n */\nfunction UserMessageBase({\n children,\n className,\n isPressed = false,\n onPress,\n ...ariaProps\n}: UserMessageProps) {\n const ref = useRef<HTMLButtonElement>(null);\n\n // If no onPress handler, render as non-interactive div\n if (!onPress) {\n return (\n <StyledUserMessage as=\"div\" className={className} $isPressed={isPressed} role=\"presentation\">\n {children}\n </StyledUserMessage>\n );\n }\n\n // Otherwise render as interactive button with React ARIA\n const { buttonProps, isPressed: ariaPressedState } = useButton(\n {\n ...ariaProps,\n onPress,\n },\n ref\n );\n\n return (\n <StyledUserMessage\n {...buttonProps}\n ref={ref}\n className={className}\n $isPressed={isPressed || ariaPressedState}\n role=\"button\"\n tabIndex={0}\n >\n {children}\n </StyledUserMessage>\n );\n}\n\n// Memoize to prevent re-renders when parent updates but props are the same\nexport const UserMessage = memo(UserMessageBase);\n\nUserMessage.displayName = 'UserMessage';\n","import { tokens } from './tokens';\n\n/**\n * Dark Theme\n * Applies token values for dark mode styling.\n * Components should use theme values via styled-components ThemeProvider.\n */\nexport const darkTheme = {\n name: 'dark',\n colors: {\n // Brand\n primary: tokens.colors.primary,\n secondary: tokens.colors.secondary,\n accent: tokens.colors.accent,\n seaGreen: tokens.colors.seaGreen,\n\n // Backgrounds\n background: tokens.colors.background,\n surface: tokens.colors.background.dark,\n surfaceHover: tokens.colors.background.light,\n\n // Text\n text: tokens.colors.text,\n textPrimary: tokens.colors.text.primary,\n textSecondary: tokens.colors.text.secondary,\n textTertiary: tokens.colors.text.tertiary,\n textDisabled: tokens.colors.text.disabled,\n\n // Semantic\n success: tokens.colors.success,\n error: tokens.colors.error,\n warning: tokens.colors.warning,\n info: tokens.colors.info,\n\n // Status\n status: tokens.colors.status,\n\n // Connection\n connection: tokens.colors.connection,\n\n // Border\n border: tokens.colors.border,\n borderDefault: tokens.colors.border.default,\n borderFocus: tokens.colors.border.focus,\n\n // Message\n message: tokens.colors.message,\n\n // Overlay\n overlay: tokens.colors.overlay,\n backdrop: tokens.colors.backdrop,\n\n // Icon\n icon: tokens.colors.icon,\n\n // Platform\n platform: tokens.colors.platform,\n },\n typography: tokens.typography,\n spacing: tokens.spacing,\n borderRadius: tokens.borderRadius,\n shadows: tokens.shadows,\n transitions: tokens.transitions,\n animation: tokens.animation,\n zIndex: tokens.zIndex,\n breakpoints: tokens.breakpoints,\n};\n\nexport type DarkTheme = typeof darkTheme;\n","import { createGlobalStyle } from 'styled-components';\n\nexport const GlobalStyle = createGlobalStyle`\n /* Universal tap highlight removal - nuclear option for Android WebKit */\n * {\n -webkit-tap-highlight-color: transparent !important;\n }\n\n *,\n *::before,\n *::after {\n box-sizing: border-box;\n }\n\n html {\n /* Ensure tap highlight is disabled at root level */\n -webkit-tap-highlight-color: transparent;\n -webkit-touch-callout: none;\n }\n\n body {\n margin: 0;\n padding: 0;\n font-family: ${({ theme }) => theme.fonts.body};\n color: ${({ theme }) => theme.colors.text};\n background-color: ${({ theme }) => theme.colors.surface};\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n /* Disable tap highlight on body as well */\n -webkit-tap-highlight-color: transparent;\n }\n\n /* Remove mobile tap highlight for ALL interactive elements */\n a,\n button,\n input,\n select,\n textarea,\n label,\n [role=\"button\"],\n [role=\"link\"],\n [role=\"tab\"],\n [role=\"menuitem\"],\n [role=\"option\"],\n [tabindex]:not([tabindex=\"-1\"]),\n [onclick] {\n -webkit-tap-highlight-color: transparent !important;\n -webkit-touch-callout: none;\n touch-action: manipulation;\n }\n\n button {\n font-family: inherit;\n /* Prevent text selection flash on tap */\n user-select: none;\n -webkit-user-select: none;\n }\n`;\n","import { tokens } from './tokens';\n\n/**\n * Light Theme\n * Applies light mode styling using token values.\n * Uses inverted colors from the dark theme for light backgrounds.\n * Components should use theme values via styled-components ThemeProvider.\n */\nexport const lightTheme = {\n name: 'light',\n colors: {\n // Brand\n primary: tokens.colors.primary,\n secondary: tokens.colors.secondary,\n accent: tokens.colors.accent,\n seaGreen: tokens.colors.seaGreen,\n\n // Backgrounds - light theme (inverted from dark)\n background: {\n darkest: '#FFFFFF',\n darker: '#F7F8FA',\n dark: '#EDEFF2',\n light: '#E5E7EB',\n },\n\n // Surfaces\n surface: '#FFFFFF',\n surfaceHover: '#F7F8FA',\n\n // Text - light theme (inverted)\n text: {\n primary: '#1F2937',\n secondary: '#4B5563',\n tertiary: '#9CA3AF',\n disabled: '#D1D5DB',\n },\n textPrimary: '#1F2937',\n textSecondary: '#4B5563',\n textTertiary: '#9CA3AF',\n textDisabled: '#D1D5DB',\n\n // Semantic\n success: tokens.colors.success,\n error: tokens.colors.error,\n warning: tokens.colors.warning,\n info: tokens.colors.info,\n\n // Status\n status: tokens.colors.status,\n\n // Connection\n connection: tokens.colors.connection,\n\n // Border - light theme\n border: {\n default: 'rgba(0, 0, 0, 0.1)',\n subtle: 'rgba(0, 0, 0, 0.05)',\n hover: 'rgba(0, 0, 0, 0.2)',\n focus: tokens.colors.primary,\n error: tokens.colors.error,\n },\n borderDefault: 'rgba(0, 0, 0, 0.1)',\n borderFocus: tokens.colors.primary,\n\n // Message\n message: {\n user: '#E0F2F1',\n ai: '#F5F5F5',\n system: '#E8E8E8',\n },\n\n // Overlay\n overlay: 'rgba(0, 0, 0, 0.3)',\n backdrop: 'rgba(255, 255, 255, 0.95)',\n\n // Icon\n icon: {\n default: '#4B5563',\n muted: '#9CA3AF',\n active: tokens.colors.primary,\n },\n\n // Platform\n platform: tokens.colors.platform,\n },\n typography: tokens.typography,\n spacing: tokens.spacing,\n borderRadius: tokens.borderRadius,\n shadows: tokens.shadows,\n transitions: tokens.transitions,\n animation: tokens.animation,\n zIndex: tokens.zIndex,\n breakpoints: tokens.breakpoints,\n};\n\nexport type LightTheme = typeof lightTheme;\n","/**\n * ConnectionStatusBadge Component\n *\n * Displays a binary status badge (connected/disconnected, active/inactive, etc.)\n * with appropriate color coding.\n */\n\nimport type React from 'react';\nimport styled from 'styled-components';\nimport { tokens } from '../../theme/tokens';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface ConnectionStatusBadgeProps {\n /** Whether the connection is active/connected */\n connected: boolean;\n /** Text to show when connected (default: \"Connected\") */\n connectedText?: string;\n /** Text to show when disconnected (default: \"Not Connected\") */\n disconnectedText?: string;\n /** Size variant */\n size?: 'sm' | 'md';\n /** Optional className for styling */\n className?: string;\n}\n\n// =============================================================================\n// Component\n// =============================================================================\n\nexport const ConnectionStatusBadge: React.FC<ConnectionStatusBadgeProps> = ({\n connected,\n connectedText = 'Connected',\n disconnectedText = 'Not Connected',\n size = 'md',\n className,\n}) => {\n return (\n <Badge\n $connected={connected}\n $size={size}\n className={className}\n data-testid=\"connection-status-badge\"\n >\n {connected ? connectedText : disconnectedText}\n </Badge>\n );\n};\n\nConnectionStatusBadge.displayName = 'ConnectionStatusBadge';\n\n// =============================================================================\n// Styled Components\n// =============================================================================\n\nconst Badge = styled.span<{ $connected: boolean; $size: 'sm' | 'md' }>`\n display: inline-flex;\n align-items: center;\n padding: ${({ $size }) => ($size === 'sm' ? `${tokens.spacing.xs} 6px` : `${tokens.spacing.xs} ${tokens.spacing.sm}`)};\n background: ${({ $connected }) =>\n $connected ? `${tokens.colors.status.online}33` : `${tokens.colors.status.offline}33`};\n color: ${({ $connected }) => ($connected ? tokens.colors.status.online : tokens.colors.status.offline)};\n font-size: ${({ $size }) => ($size === 'sm' ? '10px' : tokens.typography.fontSize.xs)};\n font-weight: ${tokens.typography.fontWeight.medium};\n border-radius: ${tokens.borderRadius.sm};\n white-space: nowrap;\n`;\n\nexport default ConnectionStatusBadge;\n","/**\n * IntegrationCard Component\n *\n * A card layout for displaying integration/service items with\n * icon, name, description, status, and actions.\n */\n\nimport type React from 'react';\nimport styled from 'styled-components';\nimport { tokens } from '../../theme/tokens';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface IntegrationCardProps {\n /** Icon URL or element */\n icon: string | React.ReactNode;\n /** Integration name */\n name: string;\n /** Description text */\n description?: string;\n /** Status element (e.g., ConnectionStatusBadge) */\n status?: React.ReactNode;\n /** Action buttons */\n actions?: React.ReactNode;\n /** Additional content (e.g., SecretInput) */\n children?: React.ReactNode;\n /** Optional className for styling */\n className?: string;\n}\n\n// =============================================================================\n// Component\n// =============================================================================\n\nexport const IntegrationCard: React.FC<IntegrationCardProps> = ({\n icon,\n name,\n description,\n status,\n actions,\n children,\n className,\n}) => {\n return (\n <Card className={className} data-testid=\"integration-card\">\n {/* Status badge at top */}\n {status && <StatusRow>{status}</StatusRow>}\n\n {/* Icon + name/description row */}\n <ContentHeader>\n <IconWrapper>\n {typeof icon === 'string' ? <IconImage src={icon} alt={name} /> : icon}\n </IconWrapper>\n <Info>\n <Name>{name}</Name>\n {description && <Description>{description}</Description>}\n </Info>\n </ContentHeader>\n\n {/* Actions/children at bottom */}\n {(children || actions) && (\n <ActionsRow>\n {children}\n {actions}\n </ActionsRow>\n )}\n </Card>\n );\n};\n\nIntegrationCard.displayName = 'IntegrationCard';\n\n// =============================================================================\n// Styled Components\n// =============================================================================\n\nconst Card = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.sm};\n padding: ${tokens.spacing.md};\n background: ${tokens.colors.background.dark};\n border-radius: ${tokens.borderRadius.xl};\n border: 1px solid ${tokens.colors.border.default};\n font-family: ${tokens.typography.fontFamily.primary};\n transition: border-color ${tokens.transitions.fast};\n\n @media (max-width: 480px) {\n padding: ${tokens.spacing.sm};\n gap: ${tokens.spacing.xs};\n }\n\n &:hover {\n border-color: ${tokens.colors.border.hover};\n }\n`;\n\nconst StatusRow = styled.div`\n display: flex;\n align-items: center;\n`;\n\nconst ContentHeader = styled.div`\n display: flex;\n align-items: flex-start;\n gap: ${tokens.spacing.sm};\n\n @media (max-width: 480px) {\n gap: ${tokens.spacing.xs};\n }\n`;\n\nconst IconWrapper = styled.div`\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: ${tokens.borderRadius.sm};\n background: ${tokens.colors.background.light};\n flex-shrink: 0;\n`;\n\nconst IconImage = styled.img`\n width: 24px;\n height: 24px;\n object-fit: contain;\n`;\n\nconst Info = styled.div`\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n flex: 1;\n`;\n\nconst Name = styled.h3`\n margin: 0;\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.semibold};\n color: ${tokens.colors.text.primary};\n line-height: ${tokens.typography.lineHeight.tight};\n`;\n\nconst Description = styled.p`\n margin: 0;\n font-size: ${tokens.typography.fontSize.xs};\n color: ${tokens.colors.text.tertiary};\n line-height: ${tokens.typography.lineHeight.normal};\n`;\n\nconst ActionsRow = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.sm};\n`;\n\nexport default IntegrationCard;\n","/**\n * SecretInput Component\n *\n * A password/secret input field with visibility toggle.\n * Commonly used for API keys, tokens, and other sensitive values.\n */\n\nimport type React from 'react';\nimport { useCallback, useState } from 'react';\nimport styled from 'styled-components';\nimport { tokens } from '../../theme/tokens';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface SecretInputProps {\n /** Current value */\n value: string;\n /** Change handler */\n onChange: (value: string) => void;\n /** Placeholder text */\n placeholder?: string;\n /** Whether the input is disabled */\n disabled?: boolean;\n /** Optional className for styling */\n className?: string;\n /** Aria label for the input */\n 'aria-label'?: string;\n}\n\n// =============================================================================\n// Icons\n// =============================================================================\n\nconst EyeIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <title>Show</title>\n <path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n);\n\nconst EyeOffIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <title>Hide</title>\n <path d=\"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24\" />\n <line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\" />\n </svg>\n);\n\n// =============================================================================\n// Component\n// =============================================================================\n\nexport const SecretInput: React.FC<SecretInputProps> = ({\n value,\n onChange,\n placeholder = 'Enter secret...',\n disabled = false,\n className,\n 'aria-label': ariaLabel = 'Secret input',\n}) => {\n const [isVisible, setIsVisible] = useState(false);\n\n const toggleVisibility = useCallback(() => {\n setIsVisible((prev) => !prev);\n }, []);\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange(e.target.value);\n },\n [onChange]\n );\n\n return (\n <Container className={className} data-testid=\"secret-input\">\n <Input\n type={isVisible ? 'text' : 'password'}\n value={value}\n onChange={handleChange}\n placeholder={placeholder}\n disabled={disabled}\n aria-label={ariaLabel}\n />\n <VisibilityToggle\n type=\"button\"\n onClick={toggleVisibility}\n aria-label={isVisible ? 'Hide secret' : 'Show secret'}\n disabled={disabled}\n >\n {isVisible ? <EyeOffIcon /> : <EyeIcon />}\n </VisibilityToggle>\n </Container>\n );\n};\n\nSecretInput.displayName = 'SecretInput';\n\n// =============================================================================\n// Styled Components\n// =============================================================================\n\nconst Container = styled.div`\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n`;\n\nconst Input = styled.input`\n width: 100%;\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n padding-right: 40px;\n background: ${tokens.colors.background.darker};\n border: 1px solid ${tokens.colors.border.default};\n border-radius: ${tokens.borderRadius.md};\n color: ${tokens.colors.text.primary};\n font-size: ${tokens.typography.fontSize.sm};\n font-family: ${tokens.typography.fontFamily.monospace};\n transition: border-color ${tokens.transitions.fast};\n\n &::placeholder {\n color: ${tokens.colors.text.tertiary};\n }\n\n &:focus {\n outline: none;\n border-color: ${tokens.colors.border.focus};\n }\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n`;\n\nconst VisibilityToggle = styled.button`\n position: absolute;\n right: ${tokens.spacing.sm};\n top: 50%;\n transform: translateY(-50%);\n background: none;\n border: none;\n cursor: pointer;\n padding: ${tokens.spacing.xs};\n display: flex;\n align-items: center;\n justify-content: center;\n color: ${tokens.colors.text.tertiary};\n transition: color ${tokens.transitions.fast};\n\n &:hover:not(:disabled) {\n color: ${tokens.colors.primary};\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.primary};\n outline-offset: 2px;\n border-radius: ${tokens.borderRadius.sm};\n }\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n\n svg {\n width: 20px;\n height: 20px;\n }\n`;\n\nexport default SecretInput;\n","/**\n * StreamingText Component\n *\n * Provides typewriter animation for streaming AI responses.\n * Supports basic markdown rendering (bold, italic, code, links).\n *\n * @see specs/015-restyle-ai-chat/spec.md:FR-031, FR-042\n * @see UI_COMPONENTS_SSE.md:548-595\n */\n\nimport React, { memo, useEffect, useMemo, useRef } from 'react';\nimport styled from 'styled-components';\nimport { tokens } from '../../theme/tokens';\n\n/**\n * Parse basic markdown and return React elements.\n * Supports: ```code blocks```, **bold**, *italic*, `code`, [links](url), and line breaks.\n */\nfunction parseMarkdown(text: string): React.ReactNode[] {\n if (!text) return [];\n\n // Strip tool call markers before rendering — these are invisible control signals\n // used by useCopilotToolCallSync for workflow execution, not display content.\n // Handles both complete markers and incomplete ones still being streamed.\n text = text\n .replace(/<!--TOOL_CALL:[^:]+:[\\s\\S]+?-->/g, '')\n .replace(/__TOOL_CALL__:[^:]+:\\{[^}]*(?:\\{[^}]*\\}[^}]*)*\\}/g, '')\n // Incomplete markers at end of string (streaming — closing delimiter not yet received)\n .replace(/<!--TOOL_CALL:[\\s\\S]*$/g, '')\n .replace(/__TOOL_CALL__:[\\s\\S]*$/g, '');\n\n const elements: React.ReactNode[] = [];\n let key = 0;\n\n // First, split by code blocks (``` ... ```) to handle them separately.\n // Code blocks preserve whitespace and use monospace font (critical for ASCII tables).\n const codeBlockRegex = /```(?:\\w*)\\n?([\\s\\S]*?)```/g;\n let lastCodeEnd = 0;\n let codeMatch: RegExpExecArray | null;\n\n // biome-ignore lint/suspicious/noAssignInExpressions: regex exec loop pattern\n while ((codeMatch = codeBlockRegex.exec(text)) !== null) {\n // Process text before the code block as normal markdown\n if (codeMatch.index > lastCodeEnd) {\n const beforeCode = text.slice(lastCodeEnd, codeMatch.index);\n const parsed = parseMarkdownParagraphs(beforeCode, key);\n elements.push(...parsed.elements);\n key = parsed.nextKey;\n }\n\n // Render the code block with pre/code tags\n const codeContent = (codeMatch[1] ?? '').replace(/\\n$/, ''); // trim trailing newline\n elements.push(\n <pre key={key++} className=\"code-block\">\n <code>{codeContent}</code>\n </pre>\n );\n\n lastCodeEnd = codeMatch.index + codeMatch[0].length;\n }\n\n // Process remaining text after the last code block\n const remaining = text.slice(lastCodeEnd);\n if (remaining) {\n const parsed = parseMarkdownParagraphs(remaining, key);\n elements.push(...parsed.elements);\n key = parsed.nextKey;\n }\n\n return elements;\n}\n\n/**\n * Check if a block of lines forms a markdown table (pipe-delimited).\n * Requires at least a header row and separator row (|---|).\n */\nfunction isMarkdownTable(lines: string[]): boolean {\n if (lines.length < 2) return false;\n // Check first line starts with | and second line is a separator (|---|)\n const firstLine = (lines[0] ?? '').trim();\n const secondLine = (lines[1] ?? '').trim();\n return (\n firstLine.startsWith('|') &&\n secondLine.startsWith('|') &&\n /^\\|[\\s-:|]+\\|$/.test(secondLine)\n );\n}\n\n/**\n * Parse non-code-block text into paragraphs and inline markdown.\n * Also detects markdown tables (pipe-delimited) and renders them in monospace.\n */\nfunction parseMarkdownParagraphs(\n text: string,\n startKey: number\n): { elements: React.ReactNode[]; nextKey: number } {\n const elements: React.ReactNode[] = [];\n let key = startKey;\n\n // Split by double newlines for paragraphs, single newlines for line breaks\n const paragraphs = text.split(/\\n\\n+/);\n\n paragraphs.forEach((paragraph, pIndex) => {\n if (pIndex > 0) {\n // Add paragraph break\n elements.push(<br key={key++} />);\n elements.push(<br key={key++} />);\n }\n\n // Check if this paragraph is a markdown table\n const lines = paragraph.split('\\n');\n if (isMarkdownTable(lines)) {\n // Render table in a monospace pre block for readability\n elements.push(\n <pre key={key++} className=\"code-block\">\n <code>{paragraph}</code>\n </pre>\n );\n return;\n }\n\n // Process lines within paragraph\n lines.forEach((line, lineIndex) => {\n if (lineIndex > 0) {\n elements.push(<br key={key++} />);\n }\n\n // Check for headings (# to ####)\n const headingMatch = line.match(/^(#{1,4})\\s+(.+)$/);\n if (headingMatch && headingMatch[1] && headingMatch[2]) {\n const level = headingMatch[1].length;\n const parsed = parseInlineMarkdown(headingMatch[2], key);\n key = parsed.nextKey;\n elements.push(React.createElement(`h${level}`, { key: key++ }, ...parsed.elements));\n return;\n }\n\n // Parse inline markdown\n const parsed = parseInlineMarkdown(line, key);\n elements.push(...parsed.elements);\n key = parsed.nextKey;\n });\n });\n\n return { elements, nextKey: key };\n}\n\n/**\n * Parse inline markdown elements within a line of text.\n */\nfunction parseInlineMarkdown(\n text: string,\n startKey: number\n): { elements: React.ReactNode[]; nextKey: number } {\n const elements: React.ReactNode[] = [];\n let key = startKey;\n\n // Combined regex for all inline patterns\n // Order matters: bold (**) before italic (*), and code backticks need escaping\n const inlineRegex = /(\\*\\*(.+?)\\*\\*)|(\\*(.+?)\\*)|(`([^`]+)`)|(\\[([^\\]]+)\\]\\(([^)]+)\\))/g;\n\n let lastIndex = 0;\n let match: RegExpExecArray | null;\n\n // biome-ignore lint/suspicious/noAssignInExpressions: regex exec loop pattern\n while ((match = inlineRegex.exec(text)) !== null) {\n // Add text before match\n if (match.index > lastIndex) {\n elements.push(text.slice(lastIndex, match.index));\n }\n\n if (match[1]) {\n // **bold**\n elements.push(<strong key={key++}>{match[2]}</strong>);\n } else if (match[3]) {\n // *italic*\n elements.push(<em key={key++}>{match[4]}</em>);\n } else if (match[5]) {\n // `code`\n elements.push(<code key={key++}>{match[6]}</code>);\n } else if (match[7]) {\n // [link](url)\n elements.push(\n <a key={key++} href={match[9]} target=\"_blank\" rel=\"noopener noreferrer\">\n {match[8]}\n </a>\n );\n }\n\n lastIndex = match.index + match[0].length;\n }\n\n // Add remaining text after last match\n if (lastIndex < text.length) {\n elements.push(text.slice(lastIndex));\n }\n\n // If no matches, just return the original text\n if (elements.length === 0) {\n elements.push(text);\n }\n\n return { elements, nextKey: key };\n}\n\nexport interface StreamingTextProps {\n /** The text content to display */\n content: string;\n /** Whether text is currently streaming */\n isStreaming?: boolean;\n /** Typing speed in milliseconds per character */\n typingSpeed?: number;\n /** Whether to show blinking cursor */\n cursor?: boolean;\n /** Visual variant */\n variant?: 'default' | 'code' | 'markdown';\n /** Callback when streaming completes */\n onStreamComplete?: () => void;\n /** Additional CSS class name */\n className?: string;\n}\n\nconst Container = styled.div<{ $variant: 'default' | 'code' | 'markdown' }>`\n font-family: ${(props) =>\n props.$variant === 'code'\n ? tokens.typography.fontFamily.monospace\n : tokens.typography.fontFamily.primary};\n white-space: pre-wrap;\n word-break: break-word;\n line-height: ${tokens.typography.lineHeight.normal};\n /* Performance optimizations for streaming text */\n text-rendering: optimizeSpeed;\n contain: content;\n\n /* Markdown element styles */\n strong {\n font-weight: ${tokens.typography.fontWeight.bold};\n color: ${tokens.colors.text.primary};\n }\n\n em {\n font-style: italic;\n }\n\n code {\n font-family: ${tokens.typography.fontFamily.monospace};\n background: ${tokens.colors.surface.overlay};\n padding: 0.15em 0.4em;\n border-radius: ${tokens.borderRadius.sm};\n font-size: 0.9em;\n }\n\n pre.code-block {\n background: ${tokens.colors.surface.overlay};\n border-radius: ${tokens.borderRadius.md};\n padding: ${tokens.spacing.md};\n margin: ${tokens.spacing.sm} 0;\n overflow-x: auto;\n white-space: pre;\n -webkit-overflow-scrolling: touch;\n\n code {\n background: none;\n padding: 0;\n border-radius: 0;\n font-size: 0.85em;\n line-height: 1.5;\n }\n }\n\n a {\n color: ${tokens.colors.primary};\n text-decoration: none;\n\n &:hover {\n text-decoration: underline;\n }\n }\n\n h1, h2, h3, h4 {\n margin: ${tokens.spacing.sm} 0 ${tokens.spacing.xs} 0;\n color: ${tokens.colors.text.primary};\n line-height: 1.3;\n }\n\n h1 { font-size: 1.4em; font-weight: ${tokens.typography.fontWeight.bold}; }\n h2 { font-size: 1.2em; font-weight: ${tokens.typography.fontWeight.bold}; }\n h3 { font-size: 1.05em; font-weight: ${tokens.typography.fontWeight.semibold}; }\n h4 { font-size: 1em; font-weight: ${tokens.typography.fontWeight.semibold}; }\n`;\n\nconst Cursor = styled.span`\n display: inline-block;\n width: 2px;\n height: 1em;\n background-color: currentColor;\n margin-left: 2px;\n vertical-align: text-bottom;\n animation: blink 1s infinite;\n\n @keyframes blink {\n 0%,\n 49% {\n opacity: 1;\n }\n 50%,\n 100% {\n opacity: 0;\n }\n }\n`;\n\n/**\n * StreamingText component for displaying streaming AI responses\n *\n * Features:\n * - Renders content directly without extra state (optimal performance)\n * - Optional blinking cursor during streaming\n * - Code and markdown variants\n * - Completion callback when streaming ends\n *\n * Memoized to prevent unnecessary re-renders during parent updates.\n */\nconst StreamingTextBase: React.FC<StreamingTextProps> = ({\n content,\n isStreaming = false,\n typingSpeed: _typingSpeed = 50, // Reserved for future use\n cursor = true,\n variant = 'default',\n onStreamComplete,\n className,\n}) => {\n const wasStreamingRef = useRef(isStreaming);\n const completionCalledRef = useRef(false);\n\n // Handle streaming completion callback without causing re-renders\n useEffect(() => {\n // Track when streaming transitions from true to false (completion)\n if (wasStreamingRef.current && !isStreaming && !completionCalledRef.current) {\n completionCalledRef.current = true;\n onStreamComplete?.();\n }\n\n // Reset completion flag when streaming starts again\n if (isStreaming) {\n completionCalledRef.current = false;\n }\n\n wasStreamingRef.current = isStreaming;\n }, [isStreaming, onStreamComplete]);\n\n const showCursor = isStreaming && cursor;\n\n // Parse markdown content when variant is 'markdown'\n const renderedContent = useMemo(() => {\n if (variant === 'markdown') {\n return parseMarkdown(content);\n }\n return content;\n }, [content, variant]);\n\n // Render content directly - no intermediate state for optimal performance\n return (\n <Container $variant={variant} className={className}>\n {renderedContent}\n {showCursor && <Cursor />}\n </Container>\n );\n};\n\n// Memoize to prevent re-renders when parent updates but props are the same\nexport const StreamingText = memo(StreamingTextBase);\n\nStreamingText.displayName = 'StreamingText';\n","import styled, { keyframes } from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\nexport const MessageContainer = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.xs};\n padding: ${tokens.spacing.xs} 0;\n max-width: 100%;\n /* GPU acceleration hint for smooth rendering during streaming */\n will-change: contents;\n contain: content;\n`;\n\nexport const AvatarContainer = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n flex-shrink: 0;\n`;\n\nexport const Avatar = styled.img`\n width: 20px;\n height: 20px;\n border-radius: ${tokens.borderRadius.full};\n object-fit: cover;\n background-color: transparent;\n`;\n\nexport const AvatarInitials = styled.div`\n width: 20px;\n height: 20px;\n border-radius: ${tokens.borderRadius.full};\n overflow: hidden;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: ${tokens.colors.secondary};\n padding: 2px;\n box-sizing: border-box;\n\n img {\n width: 100%;\n height: 100%;\n object-fit: contain;\n }\n`;\n\nexport const AvatarLabel = styled.span`\n font-size: ${tokens.typography.fontSize.xs};\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.text.secondary};\n`;\n\nexport const ContentContainer = styled.div`\n width: 100%;\n min-width: 0;\n`;\n\nexport const MessageContent = styled.div`\n /* Use solid color instead of backdrop-filter for performance during streaming */\n background-color: ${tokens.colors.surface.elevated};\n padding: ${tokens.spacing.sm};\n border-radius: ${tokens.borderRadius.lg};\n color: ${tokens.colors.text.primary};\n font-size: ${tokens.typography.fontSize.sm};\n line-height: ${tokens.typography.lineHeight.normal};\n font-family: ${tokens.typography.fontFamily.primary};\n word-wrap: break-word;\n white-space: pre-wrap;\n /* Optimize text rendering */\n text-rendering: optimizeSpeed;\n`;\n\nexport const LoadingDots = styled.div`\n display: flex;\n gap: ${tokens.spacing.xs};\n padding: ${tokens.spacing.sm};\n /* Use solid color instead of backdrop-filter for performance */\n background-color: ${tokens.colors.surface.elevated};\n border-radius: ${tokens.borderRadius.lg};\n width: fit-content;\n`;\n\n/* Simplified pulse animation - opacity only, no transform */\nconst pulse = keyframes`\n 0%, 100% {\n opacity: 0.4;\n }\n 50% {\n opacity: 1;\n }\n`;\n\nexport const LoadingDot = styled.div<{ delay: number }>`\n width: ${tokens.spacing.sm};\n height: ${tokens.spacing.sm};\n border-radius: ${tokens.borderRadius.full};\n background-color: ${tokens.colors.text.tertiary};\n /* Use simple opacity animation instead of transform bounce */\n animation: ${pulse} 1.4s ease-in-out infinite;\n animation-delay: ${(props) => props.delay}s;\n`;\n","import styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\ninterface FileAttachmentContainerProps {\n $isInteractive?: boolean;\n}\n\nexport const FileAttachmentContainer = styled.div<FileAttachmentContainerProps>`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.sm};\n padding: ${tokens.spacing.sm};\n background-color: ${tokens.colors.surface.elevated};\n border: 1px solid ${tokens.colors.border.default};\n border-radius: ${tokens.borderRadius.md};\n max-width: 320px;\n cursor: ${(props) => (props.$isInteractive ? 'pointer' : 'default')};\n transition: border-color ${tokens.transitions.fast};\n\n /* Remove default button styles when used as button */\n ${(props) =>\n props.$isInteractive &&\n `\n font: inherit;\n color: inherit;\n text-align: left;\n appearance: none;\n -webkit-appearance: none;\n\n &:hover {\n border-color: ${tokens.colors.border.hover};\n background-color: ${tokens.colors.surface.overlayHover};\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.accent};\n outline-offset: 2px;\n border-color: ${tokens.colors.accent};\n }\n\n &:active {\n border-color: ${tokens.colors.border.hover};\n }\n `}\n`;\n\nexport const FileIconContainer = styled.div`\n flex-shrink: 0;\n width: ${tokens.spacing.xl};\n height: ${tokens.spacing.xl};\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: ${tokens.typography.fontSize['2xl']};\n line-height: 1;\n`;\n\nexport const FileInfo = styled.div`\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 2px;\n`;\n\nexport const FileTitle = styled.div`\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.text.primary};\n font-family: ${tokens.typography.fontFamily.primary};\n line-height: ${tokens.typography.lineHeight.tight};\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nexport const FileMetadata = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n font-size: ${tokens.typography.fontSize.xs};\n color: ${tokens.colors.text.tertiary};\n font-family: ${tokens.typography.fontFamily.primary};\n line-height: ${tokens.typography.lineHeight.tight};\n overflow: hidden;\n`;\n\nexport const FileSubtitle = styled.span`\n color: ${tokens.colors.text.tertiary};\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n\n &:last-child {\n flex-shrink: 0;\n }\n`;\n","import { useButton } from '@react-aria/button';\nimport type { AriaButtonProps } from '@react-types/button';\nimport type { PressEvent } from '@react-types/shared';\nimport type React from 'react';\nimport { useRef } from 'react';\nimport {\n FileAttachmentContainer,\n FileIconContainer,\n FileInfo,\n FileMetadata,\n FileSubtitle,\n FileTitle,\n} from './FileAttachment.styles';\n\nexport interface FileAttachmentProps extends Omit<AriaButtonProps, 'children'> {\n /** File name/title */\n title: string;\n /** File subtitle/category (e.g., \"Downloads\", \"Documents\") */\n subtitle?: string;\n /** File size in human-readable format (e.g., \"500 KB\", \"2.5 MB\") */\n size?: string;\n /** File icon emoji or Unicode character */\n icon?: string;\n /** Click handler for file interaction */\n onClick?: () => void;\n /** Custom className for styling */\n className?: string;\n}\n\n/**\n * FileAttachment component displays file information in assistant messages\n *\n * Features:\n * - File icon display (emoji or Unicode)\n * - File metadata (title, subtitle, size)\n * - Accessible keyboard navigation via React ARIA\n * - Clean, minimal card-based design\n * - WCAG 2.1 AA compliant\n *\n * @example\n * ```tsx\n * <FileAttachment\n * title=\"Example File\"\n * subtitle=\"Downloads\"\n * size=\"500 KB\"\n * icon=\"📄\"\n * onPress={() => console.log('File clicked')}\n * />\n * ```\n */\nexport const FileAttachment: React.FC<FileAttachmentProps> = ({\n title,\n subtitle,\n size,\n icon = '📄',\n onClick,\n onPress,\n className,\n ...ariaProps\n}) => {\n const ref = useRef<HTMLButtonElement>(null);\n const isInteractive = !!(onClick || onPress);\n\n // Combine onClick and onPress handlers\n const handlePress = (e: PressEvent) => {\n if (onClick) onClick();\n if (onPress) onPress(e);\n };\n\n const { buttonProps } = useButton(\n {\n ...ariaProps,\n onPress: isInteractive ? handlePress : undefined,\n isDisabled: !isInteractive,\n },\n ref\n );\n\n return (\n <FileAttachmentContainer\n {...(isInteractive ? buttonProps : {})}\n ref={isInteractive ? ref : undefined}\n className={className}\n $isInteractive={isInteractive}\n as={isInteractive ? 'button' : 'div'}\n >\n <FileIconContainer>{icon}</FileIconContainer>\n <FileInfo>\n <FileTitle>{title}</FileTitle>\n <FileMetadata>\n {subtitle && <FileSubtitle>{subtitle}</FileSubtitle>}\n {size && subtitle && <FileSubtitle aria-hidden=\"true\"> • </FileSubtitle>}\n {size && <FileSubtitle>{size}</FileSubtitle>}\n </FileMetadata>\n </FileInfo>\n </FileAttachmentContainer>\n );\n};\n\nexport default FileAttachment;\n","import { memo, type FC } from 'react';\nimport styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\nimport { StreamingText } from '../StreamingText';\nimport {\n Avatar,\n AvatarContainer,\n AvatarInitials,\n AvatarLabel,\n ContentContainer,\n LoadingDot,\n LoadingDots,\n MessageContainer,\n MessageContent,\n} from './AssistantMessage.styles';\nimport { FileAttachment, type FileAttachmentProps } from './FileAttachment';\n\nconst AttachmentsContainer = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.sm};\n margin-top: ${tokens.spacing.sm};\n`;\n\nconst ActionButton = styled.button`\n display: inline-flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n padding: ${tokens.spacing.xs} ${tokens.spacing.sm};\n font-size: ${tokens.typography.fontSize.xs};\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.text.secondary};\n background: ${tokens.colors.surface.overlay};\n border: 1px solid ${tokens.colors.border.default};\n border-radius: ${tokens.borderRadius.md};\n cursor: pointer;\n transition: all ${tokens.transitions.fast};\n\n &:hover {\n background: ${tokens.colors.surface.overlayHover};\n border-color: ${tokens.colors.border.hover};\n color: ${tokens.colors.text.primary};\n }\n\n &:active {\n transform: scale(0.98);\n }\n`;\n\nconst ActionsContainer = styled.div`\n display: flex;\n gap: ${tokens.spacing.xs};\n flex-wrap: wrap;\n margin-top: ${tokens.spacing.sm};\n`;\n\nconst MessageTime = styled.time`\n font-size: ${tokens.typography.fontSize.xs};\n color: ${tokens.colors.text.tertiary};\n margin-top: ${tokens.spacing.xs};\n display: block;\n`;\n\nconst StreamingIndicator = styled.span`\n display: inline-block;\n width: ${tokens.spacing.xs};\n height: ${tokens.spacing.xs};\n margin-left: ${tokens.spacing.xs};\n background-color: ${tokens.colors.accent};\n border-radius: ${tokens.borderRadius.full};\n animation: pulse 1.5s ease-in-out infinite;\n\n @keyframes pulse {\n 0%,\n 100% {\n opacity: 0.3;\n transform: scale(0.8);\n }\n 50% {\n opacity: 1;\n transform: scale(1.2);\n }\n }\n`;\n\nexport interface ActionButtonType {\n label: string;\n onClick: () => void;\n icon?: React.ReactNode;\n}\n\nexport interface AssistantMessageProps {\n /** Message content to display */\n content?: string;\n /** Avatar image URL */\n avatarUrl?: string;\n /** Avatar initials when no image is provided */\n avatarInitials?: string;\n /** Whether to show loading state */\n isLoading?: boolean;\n /** Whether message is currently streaming */\n isStreaming?: boolean;\n /** Custom className for styling */\n className?: string;\n /** Support for markdown rendering (future enhancement) */\n enableMarkdown?: boolean;\n /** File attachments to display below the message */\n attachments?: FileAttachmentProps[];\n /** Optional timestamp */\n timestamp?: string;\n /** Action buttons to display */\n actions?: ActionButtonType[];\n}\n\n/**\n * AssistantMessage component displays AI assistant messages with avatar\n *\n * Features:\n * - Avatar with image or initials fallback\n * - Loading state with animated dots\n * - Streaming state indicator\n * - Markdown support (optional)\n * - Dark gray bubble (#2D2D3D) from Figma design\n * - Left-aligned layout\n * - Action buttons support\n * - Timestamp display\n *\n * Memoized to prevent unnecessary re-renders during parent updates.\n */\nconst AssistantMessageBase: FC<AssistantMessageProps> = ({\n content = '',\n avatarUrl,\n avatarInitials: _avatarInitials = 'AI',\n isLoading = false,\n isStreaming = false,\n className,\n attachments = [],\n enableMarkdown = false,\n timestamp,\n actions = [],\n}) => {\n const renderContent = () => {\n if (isLoading) {\n return (\n <LoadingDots>\n <LoadingDot delay={0} />\n <LoadingDot delay={0.2} />\n <LoadingDot delay={0.4} />\n </LoadingDots>\n );\n }\n\n // Use StreamingText for typewriter effect\n return (\n <>\n {content && (\n <MessageContent>\n <StreamingText\n content={content}\n isStreaming={isStreaming}\n typingSpeed={30}\n cursor={false}\n variant={enableMarkdown ? 'markdown' : 'default'}\n />\n {isStreaming && <StreamingIndicator />}\n </MessageContent>\n )}\n {attachments.length > 0 && (\n <AttachmentsContainer>\n {attachments.map((attachment, index) => (\n <FileAttachment key={`${attachment.title}-${index}`} {...attachment} />\n ))}\n </AttachmentsContainer>\n )}\n {timestamp && <MessageTime>{timestamp}</MessageTime>}\n {actions.length > 0 && (\n <ActionsContainer>\n {actions.map((action, index) => (\n <ActionButton key={index} onClick={action.onClick}>\n {action.icon}\n {action.label}\n </ActionButton>\n ))}\n </ActionsContainer>\n )}\n </>\n );\n };\n\n return (\n <MessageContainer className={className}>\n <AvatarContainer>\n {avatarUrl ? (\n <Avatar src={avatarUrl} alt=\"Assistant avatar\" />\n ) : (\n <AvatarInitials>\n <Avatar src=\"/assets/avatar-transparent-bg.png\" alt=\"AI Assistant\" />\n </AvatarInitials>\n )}\n <AvatarLabel>Assistant</AvatarLabel>\n </AvatarContainer>\n <ContentContainer>{renderContent()}</ContentContainer>\n </MessageContainer>\n );\n};\n\n// Memoize to prevent re-renders when parent updates but props are the same\nexport const AssistantMessage = memo(AssistantMessageBase);\n\nAssistantMessage.displayName = 'AssistantMessage';\n\nexport default AssistantMessage;\n","/**\n * Adapter component that bridges custom AssistantMessage with CopilotKit's expected interface\n *\n * This adapter:\n * 1. Converts CopilotKit's AssistantMessageProps to our custom component props\n * 2. Handles loading states by showing AssistantThinking component\n * 3. Extracts message content and renders with our styled component\n * 4. Renders generativeUI (tool call renders) when present\n * 5. Detects errors and provides \"Report Issue\" action button\n * 6. Shows tool call indicators from content markers or the global registry\n */\n\nimport { useCopilotChat } from '@copilotkit/react-core';\nimport type { AssistantMessageProps as CopilotAssistantMessageProps } from '@copilotkit/react-ui';\nimport type React from 'react';\nimport { type FC, memo, type ReactNode, useMemo, useRef } from 'react';\nimport styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\nimport { AssistantThinking } from '../../AssistantThinking/AssistantThinking';\nimport { Icon } from '../../layout/Icon/Icon';\nimport { AssistantMessage, type ActionButtonType } from '../Messages/AssistantMessage';\n\n// =============================================================================\n// Global Tool Call Registry\n// =============================================================================\n// Uses globalThis (window in browsers) to guarantee a SINGLE registry instance\n// across all bundler chunks. Without this, tsup's separate entry points\n// (dist/index.js vs dist/copilotkit/index.js) would each have their own Map,\n// causing registerToolCall() writes to be invisible to getActiveToolCalls() reads.\n// =============================================================================\n\nconst REGISTRY_KEY = '__agentiffai_tool_call_registry__';\nconst TOOL_CALL_TTL_MS = 5 * 60 * 1000; // 5 minutes\n\nfunction getRegistryMap(): Map<string, number> {\n const g = globalThis as unknown as Record<string, unknown>;\n if (!g[REGISTRY_KEY]) {\n g[REGISTRY_KEY] = new Map<string, number>();\n }\n return g[REGISTRY_KEY] as Map<string, number>;\n}\n\n/**\n * Register a tool call name in the global registry.\n * Call this from the mobile client when a tool call is detected.\n */\nexport function registerToolCall(name: string): void {\n getRegistryMap().set(name, Date.now());\n}\n\n/**\n * Clear all registered tool calls (e.g., when conversation resets).\n */\nexport function clearToolCalls(): void {\n getRegistryMap().clear();\n}\n\n/**\n * Get all active (non-expired) tool call names.\n */\nexport function getActiveToolCalls(): string[] {\n const map = getRegistryMap();\n const now = Date.now();\n const active: string[] = [];\n for (const [name, timestamp] of map) {\n if (now - timestamp < TOOL_CALL_TTL_MS) {\n active.push(name);\n } else {\n map.delete(name);\n }\n }\n return active;\n}\n\n/**\n * Extended message type that includes generativeUI for tool call renders\n */\ninterface MessageWithGenerativeUI {\n content?: string;\n generativeUI?: () => ReactNode;\n}\n\n/**\n * Strip tool call markers from message content.\n * These are internal markers used for state sync, not meant for display.\n *\n * Handles both complete and incomplete (still streaming) markers:\n * - Complete: <!--TOOL_CALL:name:args--> or __TOOL_CALL__:name:args\n * - Incomplete (streaming): <!--TOOL_CALL:name:partial... (no closing -->)\n */\nfunction stripToolCallMarkers(content: string): string {\n let stripped = content;\n // 1. Strip complete HTML-comment markers: <!--TOOL_CALL:name:args-->\n stripped = stripped.replace(/<!--TOOL_CALL:[^:]+:[\\s\\S]+?-->/g, '');\n // 2. Strip complete __TOOL_CALL__ markers: __TOOL_CALL__:name:{json}\n stripped = stripped.replace(/__TOOL_CALL__:[^:]+:\\{[^}]*(?:\\{[^}]*\\}[^}]*)*\\}/g, '');\n // 3. Strip incomplete markers still being streamed (no closing delimiter yet).\n // These appear at the END of the content during streaming.\n stripped = stripped.replace(/<!--TOOL_CALL:[\\s\\S]*$/g, '');\n stripped = stripped.replace(/__TOOL_CALL__:[\\s\\S]*$/g, '');\n return stripped.trim();\n}\n\n/**\n * Extract tool call names from message content.\n * Returns unique tool names found in TOOL_CALL markers.\n */\nfunction extractToolCallNames(content: string): string[] {\n if (!content.includes('TOOL_CALL')) return [];\n const names = new Set<string>();\n const patterns = [\n /<!--TOOL_CALL:([^:]+):/g,\n /__TOOL_CALL__:([^:]+):/g,\n ];\n for (const pattern of patterns) {\n let match: RegExpExecArray | null;\n // biome-ignore lint/suspicious/noAssignInExpressions: regex exec loop\n while ((match = pattern.exec(content)) !== null) {\n if (match[1]) names.add(match[1]);\n }\n }\n return Array.from(names);\n}\n\n/**\n * Format a kebab-case tool name to Title Case for display.\n */\nfunction formatToolName(name: string): string {\n // Handle update-workflow dispatcher — show the inner tool name if present\n if (name === 'update-workflow') return 'Workflow';\n return name\n .split(/[-_]/)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ');\n}\n\n/**\n * Error category types matching the mobile client's error system\n */\nexport type ErrorCategory = 'Network' | 'Auth' | 'OAuth' | 'Workflow' | 'Unknown';\n\n/**\n * Error context extracted from a message\n */\nexport interface ExtractedErrorContext {\n /** Whether the message contains an error */\n hasError: boolean;\n /** Inferred error category */\n category?: ErrorCategory;\n /** Correlation ID if present in the message */\n correlationId?: string;\n /** The error message text */\n errorMessage?: string;\n}\n\n/**\n * Callback for reporting issues from chat\n */\nexport interface ReportIssueCallback {\n (context: {\n errorCategory?: ErrorCategory;\n correlationId?: string;\n chatSnippet?: string;\n }): void;\n}\n\n/**\n * Error detection patterns\n * These patterns identify error messages in assistant responses\n */\nconst ERROR_PATTERNS = [\n /\\bfailed\\b/i,\n /\\berror\\b/i,\n /\\bunable to\\b/i,\n /\\bcouldn't\\b/i,\n /\\bcan't\\b/i,\n /\\bcannot\\b/i,\n /\\bsomething went wrong\\b/i,\n /\\btry again\\b/i,\n /\\bunexpected\\b/i,\n /\\btimed out\\b/i,\n /\\bconnection\\b.*\\b(lost|failed|refused)\\b/i,\n];\n\n/**\n * Patterns to extract correlation IDs from error messages\n * Format: \"Reference: abc123\" or \"Correlation ID: abc123\" or \"[abc123]\"\n */\nconst CORRELATION_ID_PATTERNS = [\n /reference:\\s*([a-f0-9-]+)/i,\n /correlation[_\\s]?id:\\s*([a-f0-9-]+)/i,\n /\\[([a-f0-9]{8,})\\]/i,\n];\n\n/**\n * Infer error category from message content\n */\nfunction inferErrorCategory(content: string): ErrorCategory {\n const lowerContent = content.toLowerCase();\n\n // Network errors\n if (\n lowerContent.includes('network') ||\n lowerContent.includes('internet') ||\n lowerContent.includes('connection') ||\n lowerContent.includes('offline') ||\n lowerContent.includes('timed out')\n ) {\n return 'Network';\n }\n\n // Auth errors\n if (\n lowerContent.includes('unauthorized') ||\n lowerContent.includes('authentication') ||\n lowerContent.includes('login') ||\n lowerContent.includes('session expired') ||\n lowerContent.includes('credentials')\n ) {\n return 'Auth';\n }\n\n // OAuth errors\n if (\n lowerContent.includes('oauth') ||\n lowerContent.includes('reconnect') ||\n lowerContent.includes('authorization') ||\n (lowerContent.includes('token') && lowerContent.includes('expired'))\n ) {\n return 'OAuth';\n }\n\n // Workflow errors\n if (\n lowerContent.includes('workflow') ||\n lowerContent.includes('execution') ||\n lowerContent.includes('failed to start') ||\n lowerContent.includes('automation')\n ) {\n return 'Workflow';\n }\n\n return 'Unknown';\n}\n\n/**\n * Extract correlation ID from message content\n */\nfunction extractCorrelationId(content: string): string | undefined {\n for (const pattern of CORRELATION_ID_PATTERNS) {\n const match = content.match(pattern);\n if (match?.[1]) {\n return match[1];\n }\n }\n return undefined;\n}\n\n/**\n * Detect if a message contains an error and extract context\n */\nexport function detectErrorInMessage(content: string): ExtractedErrorContext {\n // Check if any error patterns match\n const hasError = ERROR_PATTERNS.some((pattern) => pattern.test(content));\n\n if (!hasError) {\n return { hasError: false };\n }\n\n return {\n hasError: true,\n category: inferErrorCategory(content),\n correlationId: extractCorrelationId(content),\n errorMessage: content,\n };\n}\n\n/**\n * CopilotKit message type (simplified for our use)\n */\ninterface CopilotMessage {\n role?: string;\n content?: string;\n}\n\n/**\n * Build a chat snippet from recent messages for error context.\n * Includes recent user messages and the error message itself.\n *\n * @param messages - Array of chat messages from useCopilotChat\n * @param errorMessageContent - The current error message content\n * @param maxMessages - Maximum number of recent messages to include (default: 5)\n * @param maxLength - Maximum total character length (default: 1500)\n */\nfunction buildChatSnippet(\n messages: CopilotMessage[],\n errorMessageContent: string,\n maxMessages = 5,\n maxLength = 1500\n): string {\n // Get last N messages (excluding the current error message if it's already in the list)\n const recentMessages = messages\n .filter((msg) => msg.content && msg.content !== errorMessageContent)\n .slice(-maxMessages);\n\n // Format messages with role labels\n const formattedMessages = recentMessages.map((msg) => {\n const role = msg.role === 'user' ? 'User' : 'Assistant';\n const content = msg.content || '';\n // Truncate individual messages if too long\n const truncatedContent = content.length > 300 ? content.slice(0, 300) + '...' : content;\n return `[${role}]: ${truncatedContent}`;\n });\n\n // Add the error message\n const errorSnippet =\n errorMessageContent.length > 500\n ? errorMessageContent.slice(0, 500) + '...'\n : errorMessageContent;\n formattedMessages.push(`[Assistant - Error]: ${errorSnippet}`);\n\n // Join and truncate if total is too long\n let result = formattedMessages.join('\\n\\n');\n if (result.length > maxLength) {\n result = result.slice(0, maxLength) + '\\n...[truncated]';\n }\n\n return result;\n}\n\n/**\n * Container for generative UI (tool call renders)\n */\nconst GenerativeUIContainer = styled.div`\n margin-top: ${tokens.spacing.sm};\n margin-bottom: ${tokens.spacing.sm};\n`;\n\n/**\n * Inline tool call indicator shown in the message flow\n */\nconst ToolCallIndicator = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.sm};\n padding: ${tokens.spacing.xs} ${tokens.spacing.sm};\n margin-bottom: ${tokens.spacing.sm};\n border-radius: ${tokens.borderRadius.md};\n background: ${tokens.colors.text.primary}08;\n border: 1px solid ${tokens.colors.border.default};\n font-size: ${tokens.typography.fontSize.xs};\n color: ${tokens.colors.text.secondary};\n`;\n\nconst ToolCallIcon = styled.span`\n display: flex;\n align-items: center;\n color: ${tokens.colors.primary};\n`;\n\nconst ToolCallName = styled.span`\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.text.primary};\n`;\n\n/**\n * Adapter that converts CopilotKit's AssistantMessageProps to our custom component\n * Memoized to prevent re-renders when props haven't changed.\n */\nconst AssistantMessageAdapterBase: FC<CopilotAssistantMessageProps> = ({\n message,\n isLoading,\n isGenerating,\n // These are available but not used in our current implementation:\n // isCurrentMessage,\n // onRegenerate,\n // onCopy,\n // onThumbsUp,\n // onThumbsDown,\n // markdownTagRenderers,\n // ImageRenderer,\n}) => {\n // Cache the last generative UI output so it persists after tool completion\n // CopilotKit may stop calling generativeUI() after the tool completes, but we want\n // to keep showing the tool call render with its final \"completed\" state\n const lastGenerativeUIRef = useRef<ReactNode>(null);\n\n // Extract content — normalize array content (some CopilotKit versions use string[])\n const rawContent = Array.isArray(message?.content)\n ? (message.content as string[]).join('')\n : message?.content || '';\n const content = stripToolCallMarkers(rawContent);\n\n // Invoke generativeUI to get tool call render output\n // This is how CopilotKit renders custom tool call UIs from useRenderToolCall\n // IMPORTANT: Check for generative UI BEFORE showing \"Thinking...\" state\n // so that workflow progress UI is visible even when AI text hasn't arrived yet\n let generativeUIOutput: ReactNode = null;\n const msgWithUI = message as MessageWithGenerativeUI | undefined;\n if (msgWithUI && typeof msgWithUI.generativeUI === 'function') {\n try {\n const newOutput = msgWithUI.generativeUI();\n if (newOutput !== null && newOutput !== undefined) {\n generativeUIOutput = newOutput;\n // Cache the output so we can show it even after CopilotKit stops calling the function\n lastGenerativeUIRef.current = newOutput;\n }\n } catch (e) {\n console.warn('[AssistantMessageAdapter] Error rendering generativeUI:', e);\n }\n }\n\n // Fall back to cached generative UI if current call returned null\n // This keeps the tool call visible after completion\n if (!generativeUIOutput && lastGenerativeUIRef.current) {\n generativeUIOutput = lastGenerativeUIRef.current;\n }\n\n const hasGenerativeUI = generativeUIOutput !== null;\n\n // Show thinking when loading/generating and no content yet\n // Tool calls are rendered separately via RenderActionExecutionMessage/useRenderToolCall\n const showThinking = (isLoading || (isGenerating && !content)) && !hasGenerativeUI;\n\n if (showThinking) {\n return <AssistantThinking message=\"Thinking...\" />;\n }\n\n // Parse attachments if present in the message\n // TODO: Implement attachments parsing from CopilotKit message data\n const attachments: never[] = [];\n\n return (\n <>\n {/* Render generative UI (tool call renders) above the message if present */}\n {generativeUIOutput && <GenerativeUIContainer>{generativeUIOutput}</GenerativeUIContainer>}\n {/* Only render AssistantMessage if there's content */}\n {content && (\n <AssistantMessage\n content={content}\n avatarInitials=\"AI\"\n isLoading={false} // Don't show loading dots when we have content\n isStreaming={isGenerating} // Show streaming indicator while generating\n attachments={attachments}\n enableMarkdown={true}\n />\n )}\n </>\n );\n};\n\n// Memoize to prevent re-renders when parent updates but props are the same\nexport const AssistantMessageAdapter = memo(AssistantMessageAdapterBase);\n\nAssistantMessageAdapter.displayName = 'AssistantMessageAdapter';\n\n/**\n * Props for custom thinking indicator component\n */\nexport interface ThinkingIndicatorProps {\n isLoading?: boolean;\n isGenerating?: boolean;\n}\n\n/**\n * Creates a custom AssistantMessageAdapter with a custom thinking indicator\n * and an optional tool calls component that renders before the message.\n *\n * @param ThinkingIndicator - Custom component to render during loading/generating state (optional)\n * @param ToolCallsComponent - Component to render before message content, shown during loading/generating (optional)\n * @returns A memoized AssistantMessageAdapter component\n */\nexport function createAssistantMessageAdapter(\n ThinkingIndicator?: React.ComponentType<ThinkingIndicatorProps>,\n _ToolCallsComponent?: React.ComponentType\n): FC<CopilotAssistantMessageProps> {\n const CustomAssistantMessageAdapter: FC<CopilotAssistantMessageProps> = ({\n message,\n isLoading,\n isGenerating,\n }) => {\n // Cache the last generative UI output so it persists after tool completion\n const lastGenerativeUIRef = useRef<ReactNode>(null);\n\n // Extract content — normalize array content (some CopilotKit versions use string[])\n const rawContent = Array.isArray(message?.content)\n ? (message.content as string[]).join('')\n : message?.content || '';\n const content = stripToolCallMarkers(rawContent);\n\n // Detect tool calls: content markers first, then global registry\n // Check registry when loading/generating (current active message) or when content is substantial\n const toolCallNames = useMemo(() => {\n const fromContent = extractToolCallNames(rawContent);\n if (fromContent.length > 0) return fromContent;\n if (isLoading || isGenerating || rawContent.length > 80) return getActiveToolCalls();\n return [];\n }, [rawContent, isLoading, isGenerating]);\n\n // Invoke generativeUI to get tool call render output\n let generativeUIOutput: ReactNode = null;\n const msgWithUI = message as MessageWithGenerativeUI | undefined;\n if (msgWithUI && typeof msgWithUI.generativeUI === 'function') {\n try {\n const newOutput = msgWithUI.generativeUI();\n if (newOutput !== null && newOutput !== undefined) {\n generativeUIOutput = newOutput;\n lastGenerativeUIRef.current = newOutput;\n }\n } catch (e) {\n console.warn('[AssistantMessageAdapter] Error rendering generativeUI:', e);\n }\n }\n\n if (!generativeUIOutput && lastGenerativeUIRef.current) {\n generativeUIOutput = lastGenerativeUIRef.current;\n }\n\n const attachments: never[] = [];\n const hasGenerativeUI = generativeUIOutput !== null;\n const showThinking = (isLoading || (isGenerating && !content)) && !hasGenerativeUI;\n\n const toolCallIndicators = toolCallNames.map((name) => (\n <ToolCallIndicator key={name}>\n <ToolCallIcon>\n <Icon name=\"hammer-fill\" size={14} />\n </ToolCallIcon>\n <ToolCallName>{formatToolName(name)}</ToolCallName>\n </ToolCallIndicator>\n ));\n\n if (showThinking) {\n return (\n <>\n {toolCallIndicators}\n {ThinkingIndicator ? (\n <ThinkingIndicator isLoading={isLoading} isGenerating={isGenerating} />\n ) : (\n <AssistantThinking message=\"Thinking...\" />\n )}\n </>\n );\n }\n\n return (\n <>\n {toolCallIndicators}\n {generativeUIOutput && <GenerativeUIContainer>{generativeUIOutput}</GenerativeUIContainer>}\n {content && (\n <AssistantMessage\n content={content}\n avatarInitials=\"AI\"\n isLoading={false}\n isStreaming={isGenerating}\n attachments={attachments}\n enableMarkdown={true}\n />\n )}\n </>\n );\n };\n\n CustomAssistantMessageAdapter.displayName = 'CustomAssistantMessageAdapter';\n return memo(CustomAssistantMessageAdapter);\n}\n\n/**\n * Creates a custom AssistantMessageAdapter with error detection and reporting.\n * When an error is detected in the message, a \"Report Issue\" button is shown.\n *\n * @param onReportIssue - Callback fired when user clicks \"Report Issue\" button\n * @param ThinkingIndicator - Custom component to render during loading/generating state (optional)\n * @param ToolCallsComponent - Component to render before message content, shown during loading/generating (optional)\n * @returns A memoized AssistantMessageAdapter component with error reporting\n */\nexport function createAssistantMessageAdapterWithErrorReporting(\n onReportIssue?: ReportIssueCallback,\n ThinkingIndicator?: React.ComponentType<ThinkingIndicatorProps>,\n _ToolCallsComponent?: React.ComponentType // Kept for backwards compat, no longer used\n): FC<CopilotAssistantMessageProps> {\n const ErrorReportingAssistantMessageAdapter: FC<CopilotAssistantMessageProps> = ({\n message,\n isLoading,\n isGenerating,\n }) => {\n // Cache the last generative UI output so it persists after tool completion\n const lastGenerativeUIRef = useRef<ReactNode>(null);\n\n // Access conversation history for error context\n const { visibleMessages } = useCopilotChat();\n\n // Extract content — normalize array content (some CopilotKit versions use string[])\n const rawContent = Array.isArray(message?.content)\n ? (message.content as string[]).join('')\n : message?.content || '';\n const content = stripToolCallMarkers(rawContent);\n\n // Detect tool calls: content markers first, then global registry\n // Check registry when loading/generating (current active message) or when content is substantial\n const toolCallNames = useMemo(() => {\n const fromContent = extractToolCallNames(rawContent);\n if (fromContent.length > 0) return fromContent;\n if (isLoading || isGenerating || rawContent.length > 80) return getActiveToolCalls();\n return [];\n }, [rawContent, isLoading, isGenerating]);\n\n // Detect errors in the message content\n const errorContext = useMemo(() => detectErrorInMessage(content), [content]);\n\n // Build chat snippet including conversation history\n const chatSnippet = useMemo(() => {\n if (!errorContext.hasError) return '';\n return buildChatSnippet(visibleMessages as CopilotMessage[], content);\n }, [visibleMessages, content, errorContext.hasError]);\n\n // Build action buttons - add \"Report Issue\" if error detected and callback provided\n const actions: ActionButtonType[] = useMemo(() => {\n // Only show report button for completed messages with errors (not while streaming)\n if (!errorContext.hasError || !onReportIssue || isGenerating) {\n return [];\n }\n\n return [\n {\n label: 'Report Issue',\n onClick: () => {\n onReportIssue({\n errorCategory: errorContext.category,\n correlationId: errorContext.correlationId,\n // Include conversation history leading to the error\n chatSnippet,\n });\n },\n icon: (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\n </svg>\n ),\n },\n ];\n }, [errorContext, chatSnippet, isGenerating]);\n\n // Invoke generativeUI to get tool call render output\n // IMPORTANT: Check for generative UI BEFORE showing \"Thinking...\" state\n // so that workflow progress UI is visible even when AI text hasn't arrived yet\n let generativeUIOutput: ReactNode = null;\n const msgWithUI = message as MessageWithGenerativeUI | undefined;\n\n if (msgWithUI && typeof msgWithUI.generativeUI === 'function') {\n try {\n const newOutput = msgWithUI.generativeUI();\n if (newOutput !== null && newOutput !== undefined) {\n generativeUIOutput = newOutput;\n // Cache the output so we can show it even after CopilotKit stops calling the function\n lastGenerativeUIRef.current = newOutput;\n }\n } catch (e) {\n console.warn('[AssistantMessageAdapter] Error rendering generativeUI:', e);\n }\n }\n\n // Fall back to cached generative UI if current call returned null\n // This keeps the tool call visible after completion\n if (!generativeUIOutput && lastGenerativeUIRef.current) {\n generativeUIOutput = lastGenerativeUIRef.current;\n }\n\n const attachments: never[] = [];\n\n const hasGenerativeUI = generativeUIOutput !== null;\n\n // Show thinking when loading/generating and no content yet\n const showThinking = (isLoading || (isGenerating && !content)) && !hasGenerativeUI;\n\n if (showThinking) {\n return (\n <>\n {toolCallNames.map((name) => (\n <ToolCallIndicator key={name}>\n <ToolCallIcon>\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z\" />\n </svg>\n </ToolCallIcon>\n <ToolCallName>{formatToolName(name)}</ToolCallName>\n </ToolCallIndicator>\n ))}\n {ThinkingIndicator ? (\n <ThinkingIndicator isLoading={isLoading} isGenerating={isGenerating} />\n ) : (\n <AssistantThinking message=\"Thinking...\" />\n )}\n </>\n );\n }\n\n return (\n <>\n {toolCallNames.map((name) => (\n <ToolCallIndicator key={name}>\n <ToolCallIcon>\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z\" />\n </svg>\n </ToolCallIcon>\n <ToolCallName>{formatToolName(name)}</ToolCallName>\n </ToolCallIndicator>\n ))}\n {generativeUIOutput && <GenerativeUIContainer>{generativeUIOutput}</GenerativeUIContainer>}\n {content && (\n <AssistantMessage\n content={content}\n avatarInitials=\"AI\"\n isLoading={false}\n isStreaming={isGenerating}\n attachments={attachments}\n enableMarkdown={true}\n actions={actions}\n />\n )}\n </>\n );\n };\n\n ErrorReportingAssistantMessageAdapter.displayName = 'ErrorReportingAssistantMessageAdapter';\n return memo(ErrorReportingAssistantMessageAdapter);\n}\n","import styled, { css } from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\nimport type { ButtonSize, ButtonVariant } from './Button.types';\n\ninterface StyledButtonProps {\n $variant: ButtonVariant;\n $size: ButtonSize;\n $isPressed: boolean;\n $isLoading: boolean;\n}\n\nconst variantStyles = {\n primary: css`\n background-color: ${tokens.colors.primary};\n color: ${tokens.colors.text.primary};\n border: none;\n\n &:hover:not(:disabled) {\n opacity: 0.9;\n transform: translateY(-1px);\n }\n\n &:active:not(:disabled) {\n opacity: 0.8;\n transform: translateY(0);\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n `,\n secondary: css`\n background-color: transparent;\n color: ${tokens.colors.text.primary};\n border: 1px solid ${tokens.colors.border.default};\n\n &:hover:not(:disabled) {\n background-color: ${tokens.colors.surface.overlay};\n border-color: ${tokens.colors.primary};\n }\n\n &:active:not(:disabled) {\n background-color: ${tokens.colors.surface.overlayActive};\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n `,\n icon: css`\n background-color: transparent;\n color: ${tokens.colors.text.primary};\n border: none;\n padding: ${tokens.spacing.sm};\n min-width: auto;\n\n &:hover:not(:disabled) {\n background-color: ${tokens.colors.surface.overlayHover};\n opacity: 0.8;\n }\n\n &:active:not(:disabled) {\n opacity: 0.6;\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n `,\n};\n\nconst sizeStyles = {\n small: css`\n padding: ${tokens.spacing.xs} ${tokens.spacing.sm};\n font-size: ${tokens.typography.fontSize.sm};\n min-width: 60px;\n height: 28px;\n `,\n medium: css`\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n font-size: ${tokens.typography.fontSize.base};\n min-width: 80px;\n height: 36px;\n `,\n large: css`\n padding: ${tokens.spacing.md} ${tokens.spacing.lg};\n font-size: ${tokens.typography.fontSize.lg};\n min-width: 100px;\n height: 44px;\n `,\n};\n\nexport const StyledButton = styled.button<StyledButtonProps>`\n /* Base styles */\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: ${tokens.spacing.xs};\n font-family: ${tokens.typography.fontFamily.primary};\n font-weight: ${tokens.typography.fontWeight.medium};\n border-radius: ${tokens.borderRadius.md};\n cursor: pointer;\n transition: all ${tokens.transitions.normal};\n white-space: nowrap;\n user-select: none;\n\n /* Variant styles */\n ${({ $variant }) => variantStyles[$variant]}\n\n /* Size styles */\n ${({ $size, $variant }) => $variant !== 'icon' && sizeStyles[$size]}\n\n /* Icon variant size overrides */\n ${({ $variant, $size }) =>\n $variant === 'icon' &&\n css`\n width: ${$size === 'small' ? '28px' : $size === 'large' ? '44px' : '36px'};\n height: ${$size === 'small' ? '28px' : $size === 'large' ? '44px' : '36px'};\n border-radius: ${tokens.borderRadius.sm};\n `}\n\n /* Pressed state */\n ${({ $isPressed }) =>\n $isPressed &&\n css`\n transform: scale(0.98);\n `}\n\n /* Loading state */\n ${({ $isLoading }) =>\n $isLoading &&\n css`\n cursor: wait;\n opacity: 0.7;\n `}\n\n /* Disabled state */\n &:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n transform: none;\n }\n\n /* Remove default focus outline, using focus-visible instead */\n &:focus {\n outline: none;\n }\n`;\n","import type { AriaButtonProps } from '@react-aria/button';\nimport { useButton } from '@react-aria/button';\nimport { useRef } from 'react';\nimport { StyledButton } from './Button.styles';\nimport type { ButtonSize, ButtonVariant } from './Button.types';\n\n// Re-export types for public API\nexport type { ButtonSize, ButtonVariant } from './Button.types';\n\nexport interface ButtonProps extends AriaButtonProps {\n variant?: ButtonVariant;\n size?: ButtonSize;\n children: React.ReactNode;\n className?: string;\n disabled?: boolean;\n isLoading?: boolean;\n}\n\nexport function Button({\n variant = 'primary',\n size = 'medium',\n children,\n className,\n disabled = false,\n isLoading = false,\n ...ariaProps\n}: ButtonProps) {\n const ref = useRef<HTMLButtonElement>(null);\n const { buttonProps, isPressed } = useButton(\n {\n ...ariaProps,\n isDisabled: disabled || isLoading,\n },\n ref\n );\n\n return (\n <StyledButton\n {...buttonProps}\n ref={ref}\n className={className}\n $variant={variant}\n $size={size}\n $isPressed={isPressed}\n $isLoading={isLoading}\n disabled={disabled || isLoading}\n >\n {isLoading ? (\n <span aria-live=\"polite\" aria-busy=\"true\">\n Loading...\n </span>\n ) : (\n children\n )}\n </StyledButton>\n );\n}\n\nButton.displayName = 'Button';\n","import styled, { css } from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\nimport type { ActionsLayout } from './Actions.types';\n\ninterface ActionsContainerProps {\n $layout: ActionsLayout;\n}\n\nexport const ActionsContainer = styled.div<ActionsContainerProps>`\n display: flex;\n gap: ${tokens.spacing.sm};\n align-items: center;\n\n ${({ $layout }) =>\n $layout === 'horizontal'\n ? css`\n flex-direction: row;\n flex-wrap: wrap;\n `\n : css`\n flex-direction: column;\n align-items: stretch;\n\n button {\n width: 100%;\n }\n `}\n`;\n","import { Button } from '../Button';\nimport { ActionsContainer } from './Actions.styles';\nimport type { Action, ActionsLayout } from './Actions.types';\n\n// Re-export types for public API\nexport type { Action, ActionsLayout, ActionVariant } from './Actions.types';\n\nexport interface ActionsProps {\n actions: Action[];\n layout?: ActionsLayout;\n className?: string;\n}\n\nexport function Actions({ actions, layout = 'horizontal', className }: ActionsProps) {\n return (\n <ActionsContainer $layout={layout} className={className}>\n {actions.map((action) => (\n <Button\n key={action.id}\n variant={action.variant || 'secondary'}\n onPress={action.onClick}\n isDisabled={action.disabled}\n aria-label={action.label}\n >\n {action.icon && <span aria-hidden=\"true\">{action.icon}</span>}\n {action.variant !== 'icon' && action.label}\n </Button>\n ))}\n </ActionsContainer>\n );\n}\n\nActions.displayName = 'Actions';\n","import styled, { keyframes } from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\n// Pulse animation matching AssistantThinking\nconst dotPulse = keyframes`\n 0%, 100% {\n opacity: 0.3;\n transform: scale(0.8);\n }\n 50% {\n opacity: 1;\n transform: scale(1);\n }\n`;\n\n// Fade in animation for streaming text\nconst fadeIn = keyframes`\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n`;\n\n// Cursor blink animation for streaming\nconst blink = keyframes`\n 0%, 49% {\n opacity: 1;\n }\n 50%, 100% {\n opacity: 0;\n }\n`;\n\nexport const ResponseContainer = styled.div`\n display: inline-flex;\n align-items: center;\n gap: ${tokens.spacing.sm};\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n background-color: ${tokens.colors.surface.elevated};\n border-radius: ${tokens.borderRadius.xl};\n box-shadow: none;\n font-family: ${tokens.typography.fontFamily.primary};\n max-width: fit-content;\n margin: 0 auto;\n`;\n\nexport const LoadingDots = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n padding: 0 ${tokens.spacing.xs};\n`;\n\nexport const Dot = styled.span<{ delay: number }>`\n width: ${tokens.spacing.xs};\n height: ${tokens.spacing.xs};\n border-radius: ${tokens.borderRadius.full};\n background-color: ${tokens.colors.text.tertiary};\n animation: ${dotPulse} 1.4s ease-in-out infinite;\n animation-delay: ${(props) => props.delay}s;\n`;\n\nexport const TypingIndicator = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n padding: 0 ${tokens.spacing.xs};\n\n ${Dot} {\n width: ${tokens.spacing.xs};\n height: ${tokens.spacing.xs};\n background-color: ${tokens.colors.text.tertiary};\n animation: ${dotPulse} 1.4s ease-in-out infinite;\n }\n`;\n\nexport const Message = styled.span`\n font-size: ${tokens.typography.fontSize.sm};\n color: ${tokens.colors.text.primary};\n font-weight: ${tokens.typography.fontWeight.regular};\n line-height: ${tokens.typography.lineHeight.normal};\n white-space: nowrap;\n`;\n\nexport const StreamingText = styled.div`\n font-size: ${tokens.typography.fontSize.sm};\n line-height: ${tokens.typography.lineHeight.normal};\n color: ${tokens.colors.text.primary};\n animation: ${fadeIn} ${tokens.animation.duration.medium} ease-in;\n position: relative;\n font-weight: ${tokens.typography.fontWeight.regular};\n white-space: nowrap;\n\n /* Blinking cursor effect */\n &::after {\n content: '|';\n margin-left: 0.125rem;\n animation: ${blink} 1s infinite;\n color: ${tokens.colors.text.tertiary};\n font-weight: ${tokens.typography.fontWeight.regular};\n }\n`;\n","import {\n Dot,\n LoadingDots,\n Message,\n ResponseContainer,\n StreamingText,\n TypingIndicator,\n} from './Response.styles';\n\nexport interface ResponseProps {\n /** Loading state - shows animated dots */\n isLoading?: boolean;\n /** Typing state - shows typing indicator */\n isTyping?: boolean;\n /** Streaming state - shows text being typed */\n isStreaming?: boolean;\n /** Content to display when streaming */\n streamingContent?: string;\n /** Message to display with loading/typing state */\n message?: string;\n /** Additional CSS class name */\n className?: string;\n}\n\n/**\n * Response component for displaying loading and streaming states\n * Shows animated loading dots, typing indicators, and streaming text\n */\nexport const Response = ({\n isLoading = false,\n isTyping = false,\n isStreaming = false,\n streamingContent = '',\n message = 'Thinking...',\n className,\n}: ResponseProps) => {\n // Show loading dots\n if (isLoading) {\n return (\n <ResponseContainer className={className} data-testid=\"response-loading\">\n <LoadingDots aria-hidden=\"true\">\n <Dot delay={0} />\n <Dot delay={0.15} />\n <Dot delay={0.3} />\n </LoadingDots>\n <Message>{message}</Message>\n </ResponseContainer>\n );\n }\n\n // Show typing indicator\n if (isTyping) {\n return (\n <ResponseContainer className={className} data-testid=\"response-typing\">\n <TypingIndicator aria-hidden=\"true\">\n <Dot delay={0} />\n <Dot delay={0.15} />\n <Dot delay={0.3} />\n </TypingIndicator>\n <Message>{message}</Message>\n </ResponseContainer>\n );\n }\n\n // Show streaming text\n if (isStreaming && streamingContent) {\n return (\n <ResponseContainer className={className} data-testid=\"response-streaming\">\n <StreamingText>{streamingContent}</StreamingText>\n </ResponseContainer>\n );\n }\n\n // Empty state\n return null;\n};\n","import styled, { keyframes } from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\n// Pulse animation matching AssistantThinking\nconst dotPulse = keyframes`\n 0%, 100% {\n opacity: 0.3;\n transform: scale(0.8);\n }\n 50% {\n opacity: 1;\n transform: scale(1);\n }\n`;\n\n// Shake animation for error indicator\nconst shake = keyframes`\n 0%, 100% {\n transform: translateX(0);\n }\n 25% {\n transform: translateX(-5px);\n }\n 75% {\n transform: translateX(5px);\n }\n`;\n\nexport const AgentStateContainer = styled.div<{ isError?: boolean }>`\n display: inline-flex;\n flex-direction: column;\n align-items: center;\n gap: ${tokens.spacing.sm};\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n background-color: ${(props) => (props.isError ? 'rgba(239, 68, 68, 0.15)' : tokens.colors.surface.elevated)};\n border-radius: ${tokens.borderRadius.xl};\n border: ${(props) => (props.isError ? `1px solid ${tokens.colors.error}` : 'none')};\n box-shadow: none;\n font-family: ${tokens.typography.fontFamily.primary};\n max-width: fit-content;\n margin: 0 auto;\n`;\n\nexport const StateContent = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.sm};\n align-items: center;\n width: 100%;\n`;\n\nexport const IdleIndicator = styled.div`\n width: ${tokens.spacing.xs};\n height: ${tokens.spacing.xs};\n background-color: ${tokens.colors.status.idle};\n border-radius: ${tokens.borderRadius.full};\n animation: ${dotPulse} 2s infinite ease-in-out;\n`;\n\nexport const ErrorIndicator = styled.div`\n width: ${tokens.spacing.xs};\n height: ${tokens.spacing.xs};\n background-color: ${tokens.colors.error};\n border-radius: ${tokens.borderRadius.full};\n animation: ${shake} 0.5s ease-in-out;\n`;\n\nexport const StateLabel = styled.span`\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.regular};\n color: ${tokens.colors.text.primary};\n line-height: ${tokens.typography.lineHeight.normal};\n white-space: nowrap;\n`;\n\nexport const MessageText = styled.p`\n font-size: ${tokens.typography.fontSize.sm};\n color: ${tokens.colors.text.tertiary};\n line-height: ${tokens.typography.lineHeight.normal};\n margin: 0;\n text-align: center;\n white-space: nowrap;\n`;\n\nexport const ProgressBar = styled.div`\n width: 100%;\n height: ${tokens.spacing.xs};\n background-color: ${tokens.colors.surface.elevated};\n border-radius: ${tokens.borderRadius.sm};\n overflow: hidden;\n margin-top: ${tokens.spacing.xs};\n`;\n\nexport const ProgressBarFill = styled.div<{ progress: number }>`\n height: 100%;\n width: ${(props) => Math.min(Math.max(props.progress, 0), 100)}%;\n background: linear-gradient(135deg, ${tokens.colors.accent} 0%, ${tokens.colors.primary} 100%);\n border-radius: ${tokens.borderRadius.sm};\n transition: width ${tokens.transitions.normal};\n`;\n","import { Response } from '../Response';\nimport {\n AgentStateContainer,\n ErrorIndicator,\n IdleIndicator,\n ProgressBar,\n ProgressBarFill,\n StateContent,\n StateLabel,\n} from './AgentState.styles';\n\nexport interface AgentStateProps {\n /** Current agent state */\n state: 'idle' | 'thinking' | 'responding' | 'error';\n /** Optional message to display */\n message?: string;\n /** Optional progress percentage (0-100) */\n progress?: number;\n /** Additional CSS class name */\n className?: string;\n}\n\n/**\n * AgentState component for displaying agent status\n * Styled to match AssistantThinking and Response components with dark theme\n */\nexport const AgentState = ({ state, message, progress, className }: AgentStateProps) => {\n // Idle state - show pulsing indicator\n if (state === 'idle') {\n return (\n <AgentStateContainer className={className} data-testid=\"agent-state-idle\">\n <StateContent>\n <IdleIndicator />\n <StateLabel>{message || 'Agent is idle'}</StateLabel>\n {progress !== undefined && (\n <ProgressBar>\n <ProgressBarFill progress={progress} />\n </ProgressBar>\n )}\n </StateContent>\n </AgentStateContainer>\n );\n }\n\n // Error state - show error indicator\n if (state === 'error') {\n return (\n <AgentStateContainer className={className} data-testid=\"agent-state-error\" isError>\n <StateContent>\n <ErrorIndicator />\n <StateLabel>{message || 'Error occurred'}</StateLabel>\n </StateContent>\n </AgentStateContainer>\n );\n }\n\n // Thinking state - use Response component with loading dots\n if (state === 'thinking') {\n return <Response isLoading message={message || 'Agent is thinking...'} className={className} />;\n }\n\n // Responding state - use Response component with typing indicator\n if (state === 'responding') {\n return (\n <Response isTyping message={message || 'Agent is responding...'} className={className} />\n );\n }\n\n return null;\n};\n","import styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\nexport const FooterContainer = styled.footer`\n display: flex;\n align-items: center;\n justify-content: center;\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n background-color: ${tokens.colors.surface.base};\n border-top: 1px solid ${tokens.colors.border.default};\n min-height: 44px;\n`;\n\nexport const FooterContent = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: ${tokens.spacing.md};\n width: 100%;\n max-width: 100%;\n font-size: ${tokens.typography.fontSize.xs};\n color: ${tokens.colors.text.secondary};\n opacity: 0.6;\n font-family: ${tokens.typography.fontFamily.primary};\n line-height: ${tokens.typography.lineHeight.tight};\n`;\n\nexport const FooterBranding = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n flex-shrink: 0;\n`;\n\nexport const FooterStatus = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: ${tokens.typography.fontSize.xs};\n opacity: 0.8;\n`;\n\nexport const FooterLink = styled.a`\n color: ${tokens.colors.primary};\n text-decoration: none;\n transition: opacity ${tokens.transitions.fast};\n cursor: pointer;\n\n &:hover {\n opacity: 0.8;\n text-decoration: underline;\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n border-radius: ${tokens.borderRadius.sm};\n }\n`;\n","import type React from 'react';\nimport {\n FooterBranding,\n FooterContainer,\n FooterContent,\n FooterLink,\n FooterStatus,\n} from './Footer.styles';\n\nexport interface FooterProps {\n /**\n * Branding text to display (e.g., \"Powered by CopilotKit\")\n */\n branding?: string;\n\n /**\n * Optional status text (e.g., \"Connected\", \"Typing...\", \"3 tokens remaining\")\n */\n status?: string;\n\n /**\n * Optional link URL for the branding text\n */\n brandingUrl?: string;\n\n /**\n * Callback when branding link is clicked\n */\n onBrandingClick?: () => void;\n\n /**\n * Additional CSS class name for custom styling\n */\n className?: string;\n}\n\n/**\n * Footer Component\n *\n * A chat footer component that displays branding, status information, and optional links.\n * Typically used at the bottom of a chat interface to show provider information or connection status.\n *\n * @example\n * ```tsx\n * <Footer\n * branding=\"Powered by CopilotKit\"\n * status=\"Connected\"\n * brandingUrl=\"https://copilotkit.ai\"\n * />\n * ```\n */\nexport const Footer: React.FC<FooterProps> = ({\n branding,\n status,\n brandingUrl,\n onBrandingClick,\n className,\n}) => {\n // If no content, don't render\n if (!branding && !status) {\n return null;\n }\n\n const handleBrandingClick = (e: React.MouseEvent<HTMLAnchorElement>) => {\n if (onBrandingClick) {\n e.preventDefault();\n onBrandingClick();\n }\n };\n\n return (\n <FooterContainer className={className}>\n <FooterContent>\n {branding && (\n <FooterBranding>\n {brandingUrl ? (\n <FooterLink\n href={brandingUrl}\n onClick={handleBrandingClick}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {branding}\n </FooterLink>\n ) : (\n branding\n )}\n </FooterBranding>\n )}\n\n {status && <FooterStatus>{status}</FooterStatus>}\n </FooterContent>\n </FooterContainer>\n );\n};\n\nFooter.displayName = 'Footer';\n","/**\n * StreamStatusIndicator Component\n *\n * Displays connection status for streaming chat (SSE).\n *\n * @see specs/015-restyle-ai-chat/spec.md\n */\n\nimport type React from 'react';\nimport styled, { keyframes } from 'styled-components';\nimport { tokens } from '../../theme/tokens';\n\nconst pulse = keyframes`\n 0%, 100% {\n opacity: 1;\n transform: scale(1);\n }\n 50% {\n opacity: 0.6;\n transform: scale(1.1);\n }\n`;\n\nconst Container = styled.div<{ size: 'sm' | 'md' | 'lg' }>`\n display: inline-flex;\n align-items: center;\n gap: ${(props) => {\n switch (props.size) {\n case 'sm':\n return tokens.spacing.xs;\n case 'lg':\n return tokens.spacing.sm;\n case 'md':\n default:\n return tokens.spacing.xs;\n }\n }};\n font-family: ${tokens.typography.fontFamily.primary};\n`;\n\nconst StatusDot = styled.div<{\n status: 'connected' | 'streaming' | 'disconnected' | 'reconnecting';\n size: 'sm' | 'md' | 'lg';\n variant: 'dot' | 'badge';\n}>`\n width: ${(props) => {\n if (props.variant === 'badge') {\n switch (props.size) {\n case 'sm':\n return tokens.spacing.xs;\n case 'lg':\n return tokens.spacing.sm;\n case 'md':\n default:\n return tokens.spacing.sm;\n }\n }\n switch (props.size) {\n case 'sm':\n return tokens.spacing.xs;\n case 'lg':\n return tokens.borderRadius.lg;\n case 'md':\n default:\n return tokens.spacing.sm;\n }\n }};\n height: ${(props) => {\n if (props.variant === 'badge') {\n switch (props.size) {\n case 'sm':\n return tokens.spacing.xs;\n case 'lg':\n return tokens.spacing.sm;\n case 'md':\n default:\n return tokens.spacing.sm;\n }\n }\n switch (props.size) {\n case 'sm':\n return tokens.spacing.xs;\n case 'lg':\n return tokens.borderRadius.lg;\n case 'md':\n default:\n return tokens.spacing.sm;\n }\n }};\n border-radius: ${tokens.borderRadius.full};\n background-color: ${(props) => {\n switch (props.status) {\n case 'connected':\n return tokens.colors.connection.connected;\n case 'streaming':\n return tokens.colors.connection.streaming;\n case 'disconnected':\n return tokens.colors.connection.disconnected;\n case 'reconnecting':\n return tokens.colors.connection.reconnecting;\n }\n }};\n animation: ${(props) => (props.status === 'streaming' ? pulse : 'none')} 2s ease-in-out infinite;\n flex-shrink: 0;\n`;\n\nconst Label = styled.span<{ size: 'sm' | 'md' | 'lg'; variant: 'dot' | 'badge' }>`\n font-size: ${(props) => {\n if (props.variant === 'badge') {\n switch (props.size) {\n case 'sm':\n return tokens.typography.fontSize.xs;\n case 'lg':\n return tokens.typography.fontSize.base;\n case 'md':\n default:\n return tokens.typography.fontSize.sm;\n }\n }\n switch (props.size) {\n case 'sm':\n return tokens.typography.fontSize.xs;\n case 'lg':\n return tokens.typography.fontSize.base;\n case 'md':\n default:\n return tokens.typography.fontSize.sm;\n }\n }};\n font-weight: ${(props) => (props.variant === 'badge' ? tokens.typography.fontWeight.medium : tokens.typography.fontWeight.regular)};\n color: ${tokens.colors.text.secondary};\n line-height: ${tokens.typography.lineHeight.tight};\n`;\n\nconst BadgeContainer = styled.div<{ size: 'sm' | 'md' | 'lg' }>`\n display: inline-flex;\n align-items: center;\n gap: ${(props) => {\n switch (props.size) {\n case 'sm':\n return tokens.spacing.xs;\n case 'lg':\n return tokens.spacing.sm;\n case 'md':\n default:\n return tokens.spacing.xs;\n }\n }};\n padding: ${(props) => {\n switch (props.size) {\n case 'sm':\n return `${tokens.spacing.xs} ${tokens.spacing.sm}`;\n case 'lg':\n return `${tokens.spacing.sm} ${tokens.spacing.md}`;\n case 'md':\n default:\n return `${tokens.spacing.xs} ${tokens.spacing.sm}`;\n }\n }};\n background-color: ${tokens.colors.surface.overlay};\n border: 1px solid ${tokens.colors.border.default};\n border-radius: ${(props) => {\n switch (props.size) {\n case 'sm':\n return tokens.borderRadius.sm;\n case 'lg':\n return tokens.borderRadius.md;\n case 'md':\n default:\n return tokens.borderRadius.md;\n }\n }};\n`;\n\nexport interface StreamStatusIndicatorProps {\n /** Connection status */\n status: 'connected' | 'streaming' | 'disconnected' | 'reconnecting';\n /** Visual variant */\n variant?: 'dot' | 'badge';\n /** Size of the indicator */\n size?: 'sm' | 'md' | 'lg';\n /** Whether to show text label */\n showLabel?: boolean;\n /** Custom className */\n className?: string;\n}\n\nconst getStatusLabel = (status: StreamStatusIndicatorProps['status']): string => {\n switch (status) {\n case 'connected':\n return 'Connected';\n case 'streaming':\n return 'Streaming';\n case 'disconnected':\n return 'Disconnected';\n case 'reconnecting':\n return 'Reconnecting...';\n }\n};\n\n/**\n * StreamStatusIndicator component for showing connection status\n *\n * Features:\n * - Visual status indicators (connected/streaming/disconnected/reconnecting)\n * - Color-coded status (green/blue/red/yellow)\n * - Pulsing animation for streaming state\n * - Dot and badge variants\n * - Size options (sm/md/lg)\n * - Optional text labels\n */\nexport const StreamStatusIndicator: React.FC<StreamStatusIndicatorProps> = ({\n status,\n variant = 'dot',\n size = 'md',\n showLabel = false,\n className,\n}) => {\n const content = (\n <>\n <StatusDot status={status} size={size} variant={variant} aria-hidden=\"true\" />\n {showLabel && (\n <Label size={size} variant={variant}>\n {getStatusLabel(status)}\n </Label>\n )}\n </>\n );\n\n if (variant === 'badge') {\n return (\n <BadgeContainer\n size={size}\n className={className}\n role=\"status\"\n aria-label={getStatusLabel(status)}\n >\n {content}\n </BadgeContainer>\n );\n }\n\n return (\n <Container size={size} className={className} role=\"status\" aria-label={getStatusLabel(status)}>\n {content}\n </Container>\n );\n};\n\nStreamStatusIndicator.displayName = 'StreamStatusIndicator';\n","import styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\nexport const HeaderContainer = styled.header`\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: ${tokens.spacing.xs} ${tokens.spacing.sm};\n background-color: ${tokens.colors.backdrop};\n backdrop-filter: blur(10px);\n -webkit-backdrop-filter: blur(10px);\n border-bottom: 1px solid ${tokens.colors.border.default};\n min-height: 44px;\n box-sizing: border-box;\n\n @media (min-width: ${tokens.breakpoints.mobile}px) {\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n }\n`;\n\nexport const HeaderContent = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.xs};\n flex: 1;\n min-width: 0;\n`;\n\nexport const HeaderTitle = styled.h1`\n margin: 0;\n font-size: ${tokens.typography.fontSize.base};\n font-weight: ${tokens.typography.fontWeight.semibold};\n color: ${tokens.colors.text.primary};\n font-family: ${tokens.typography.fontFamily.primary};\n line-height: ${tokens.typography.lineHeight.normal};\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nexport const HeaderSubtitle = styled.p`\n margin: 0;\n font-size: ${tokens.typography.fontSize.sm};\n color: ${tokens.colors.text.secondary};\n font-family: ${tokens.typography.fontFamily.primary};\n line-height: ${tokens.typography.lineHeight.tight};\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nexport const HeaderActions = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n margin-left: ${tokens.spacing.md};\n`;\n\nexport const ActionButton = styled.button`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: ${tokens.spacing.xl};\n height: ${tokens.spacing.xl};\n padding: 0;\n background-color: transparent;\n border: none;\n border-radius: ${tokens.borderRadius.md};\n color: ${tokens.colors.text.primary};\n cursor: pointer;\n transition: all ${tokens.transitions.fast};\n\n &:hover:not(:disabled) {\n background-color: ${tokens.colors.surface.overlay};\n }\n\n &:active:not(:disabled) {\n transform: scale(0.95);\n background-color: ${tokens.colors.surface.overlayActive};\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.3;\n }\n\n svg {\n width: ${tokens.spacing.md};\n height: ${tokens.spacing.md};\n display: block;\n }\n`;\n","import { useButton } from '@react-aria/button';\nimport type React from 'react';\nimport { useRef } from 'react';\nimport { tokens } from '../../../theme/tokens';\nimport { StreamStatusIndicator } from '../StreamStatusIndicator';\nimport {\n ActionButton,\n HeaderActions,\n HeaderContainer,\n HeaderContent,\n HeaderSubtitle,\n HeaderTitle,\n} from './Header.styles';\n\nexport interface HeaderProps {\n /**\n * The main title text displayed in the header\n */\n title: string;\n\n /**\n * Optional subtitle text displayed below the title\n */\n subtitle?: string;\n\n /**\n * Optional stream status indicator (connected/streaming/disconnected/reconnecting)\n * When provided, displays a StreamStatusIndicator next to the title\n */\n streamStatus?: 'connected' | 'streaming' | 'disconnected' | 'reconnecting';\n\n /**\n * Callback function triggered when the close button is clicked\n */\n onClose?: () => void;\n\n /**\n * Callback function triggered when the minimize button is clicked\n */\n onMinimize?: () => void;\n\n /**\n * Additional CSS class name for custom styling\n */\n className?: string;\n}\n\n/**\n * Header Component\n *\n * A chat header component that displays a title, optional subtitle, and action buttons.\n * Built with React ARIA for accessibility and Styled Components for theming.\n *\n * @example\n * ```tsx\n * <Header\n * title=\"AI Assistant\"\n * subtitle=\"How can I help you today?\"\n * onClose={() => console.log('Close clicked')}\n * onMinimize={() => console.log('Minimize clicked')}\n * />\n * ```\n */\nexport const Header: React.FC<HeaderProps> = ({\n title,\n subtitle,\n streamStatus,\n onClose,\n onMinimize,\n className,\n}) => {\n const minimizeRef = useRef<HTMLButtonElement>(null);\n const closeRef = useRef<HTMLButtonElement>(null);\n\n const { buttonProps: minimizeProps } = useButton(\n {\n onPress: onMinimize,\n 'aria-label': 'Minimize',\n isDisabled: !onMinimize,\n },\n minimizeRef\n );\n\n const { buttonProps: closeProps } = useButton(\n {\n onPress: onClose,\n 'aria-label': 'Close',\n isDisabled: !onClose,\n },\n closeRef\n );\n\n return (\n <HeaderContainer className={className}>\n <HeaderContent>\n <div style={{ display: 'flex', alignItems: 'center', gap: tokens.spacing.sm }}>\n <HeaderTitle>{title}</HeaderTitle>\n {streamStatus && (\n <StreamStatusIndicator\n status={streamStatus}\n variant=\"badge\"\n size=\"sm\"\n showLabel={streamStatus === 'streaming' || streamStatus === 'reconnecting'}\n />\n )}\n </div>\n {subtitle && <HeaderSubtitle>{subtitle}</HeaderSubtitle>}\n </HeaderContent>\n\n <HeaderActions>\n {onMinimize && (\n <ActionButton ref={minimizeRef} {...minimizeProps} data-action=\"minimize\">\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <title>Minimize</title>\n <line x1=\"3\" y1=\"8\" x2=\"13\" y2=\"8\" stroke=\"currentColor\" strokeWidth=\"2\" />\n </svg>\n </ActionButton>\n )}\n\n {onClose && (\n <ActionButton ref={closeRef} {...closeProps} data-action=\"close\">\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <title>Close</title>\n <line x1=\"4\" y1=\"4\" x2=\"12\" y2=\"12\" stroke=\"currentColor\" strokeWidth=\"2\" />\n <line x1=\"12\" y1=\"4\" x2=\"4\" y2=\"12\" stroke=\"currentColor\" strokeWidth=\"2\" />\n </svg>\n </ActionButton>\n )}\n </HeaderActions>\n </HeaderContainer>\n );\n};\n\nHeader.displayName = 'Header';\n","import styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\nexport const InputContainer = styled.div`\n\tdisplay: flex;\n\tflex-direction: column;\n\twidth: 100%;\n\tposition: relative;\n`;\n\nexport const InputWrapper = styled.div`\n\tdisplay: flex;\n\talign-items: flex-end;\n\tgap: ${tokens.spacing.sm};\n\tpadding: ${tokens.spacing.md};\n\tbackground-color: ${tokens.colors.backdrop};\n\tbackdrop-filter: blur(10px);\n\t-webkit-backdrop-filter: blur(10px);\n\tborder: 1px solid ${tokens.colors.border.default};\n\tborder-radius: ${tokens.borderRadius.lg};\n\ttransition: all ${tokens.transitions.normal};\n\n\t&:focus-within {\n\t\tborder-color: ${tokens.colors.border.hover};\n\t}\n\n\t&:hover:not(:focus-within) {\n\t\tborder-color: ${tokens.colors.border.subtle};\n\t}\n`;\n\ninterface TextAreaProps {\n $maxRows?: number;\n disabled?: boolean;\n readOnly?: boolean;\n}\n\nexport const TextArea = styled.textarea<TextAreaProps>`\n\tflex: 1;\n\tmin-height: ${tokens.spacing.lg};\n\tmax-height: ${(props) => `${(props.$maxRows || 5) * 24}px`};\n\tpadding: 0;\n\tborder: none;\n\toutline: none;\n\tresize: none;\n\tfont-family: ${tokens.typography.fontFamily.primary};\n\tfont-size: ${tokens.typography.fontSize.sm};\n\tline-height: ${tokens.spacing.lg};\n\tcolor: ${tokens.colors.text.primary};\n\tbackground: transparent;\n\toverflow-y: auto;\n\n\t&::placeholder {\n\t\tcolor: ${tokens.colors.text.tertiary};\n\t}\n\n\t&:disabled {\n\t\tcolor: ${tokens.colors.text.disabled};\n\t\tcursor: not-allowed;\n\t}\n\n\t&:read-only {\n\t\tcursor: default;\n\t}\n\n\t/* Custom scrollbar */\n\t&::-webkit-scrollbar {\n\t\twidth: ${tokens.spacing.xs};\n\t}\n\n\t&::-webkit-scrollbar-track {\n\t\tbackground: ${tokens.colors.scrollbar.track};\n\t}\n\n\t&::-webkit-scrollbar-thumb {\n\t\tbackground: ${tokens.colors.scrollbar.thumb};\n\t\tborder-radius: ${tokens.borderRadius.sm};\n\t}\n\n\t&::-webkit-scrollbar-thumb:hover {\n\t\tbackground: ${tokens.colors.scrollbar.thumbHover};\n\t}\n`;\n\ninterface SendButtonProps {\n disabled?: boolean;\n}\n\nexport const SendButton = styled.button<SendButtonProps>`\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: 36px;\n\theight: 36px;\n\tpadding: 0;\n\tborder: none;\n\tborder-radius: ${tokens.borderRadius.md};\n\tbackground-color: ${(props) => (props.disabled ? tokens.colors.surface.overlay : tokens.colors.primary)};\n\tcolor: ${(props) => (props.disabled ? tokens.colors.text.tertiary : tokens.colors.text.primary)};\n\tcursor: ${(props) => (props.disabled ? 'not-allowed' : 'pointer')};\n\ttransition: all ${tokens.transitions.normal};\n\tflex-shrink: 0;\n\n\t&:hover:not(:disabled) {\n\t\tbackground-color: ${tokens.colors.accent};\n\t\ttransform: translateY(-1px);\n\t}\n\n\t&:active:not(:disabled) {\n\t\ttransform: translateY(0);\n\t}\n\n\t&:focus-visible {\n\t\toutline: 2px solid ${tokens.colors.border.focus};\n\t\toutline-offset: 2px;\n\t}\n\n\tsvg {\n\t\twidth: 20px;\n\t\theight: 20px;\n\t}\n`;\n","import type { AriaTextFieldProps } from '@react-aria/textfield';\nimport { useTextField } from '@react-aria/textfield';\nimport React, { type KeyboardEvent, useRef } from 'react';\nimport { InputContainer, InputWrapper, SendButton, TextArea } from './Input.styles';\n\nexport interface InputProps\n extends Omit<AriaTextFieldProps, 'onChange' | 'onFocus' | 'onBlur' | 'onKeyDown' | 'onKeyUp'> {\n /** Current message value */\n value?: string;\n /** Callback when message value changes */\n onChange?: (value: string) => void;\n /** Callback when message is submitted */\n onSubmit?: (message: string) => void;\n /** Placeholder text */\n placeholder?: string;\n /** Whether the input is disabled */\n isDisabled?: boolean;\n /** Whether the input is read-only */\n isReadOnly?: boolean;\n /** Maximum number of rows before scrolling */\n maxRows?: number;\n /** Whether to auto-focus the input */\n autoFocus?: boolean;\n /** Additional CSS class name */\n className?: string;\n /** ARIA label for the input */\n 'aria-label'?: string;\n}\n\n/**\n * Input component for chat interfaces\n * Features:\n * - Multi-line text support\n * - Submit on Enter, Shift+Enter for new line\n * - React ARIA for accessibility\n * - Auto-growing textarea\n * - Integrated send button\n */\nexport const Input: React.FC<InputProps> = ({\n value = '',\n onChange,\n onSubmit,\n placeholder = 'Type a message...',\n isDisabled = false,\n isReadOnly = false,\n maxRows = 5,\n autoFocus = false,\n className,\n 'aria-label': ariaLabel = 'Message input',\n ...ariaProps\n}) => {\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n\n // React ARIA hook for accessibility\n const { inputProps } = useTextField(\n {\n ...ariaProps,\n 'aria-label': ariaLabel,\n value,\n onChange: (newValue: string) => {\n onChange?.(newValue);\n },\n isDisabled,\n isReadOnly,\n inputElementType: 'textarea',\n },\n textareaRef\n );\n\n // Handle keyboard events\n const handleKeyDown = (e: KeyboardEvent<HTMLTextAreaElement>) => {\n // Submit on Enter (without Shift)\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n if (value.trim() && onSubmit && !isDisabled && !isReadOnly) {\n onSubmit(value.trim());\n // Clear the input after submission\n onChange?.('');\n }\n }\n // Shift+Enter adds a new line (default behavior)\n };\n\n // Handle send button click\n const handleSend = () => {\n if (value.trim() && onSubmit && !isDisabled && !isReadOnly) {\n onSubmit(value.trim());\n onChange?.('');\n // Refocus the textarea after sending\n textareaRef.current?.focus();\n }\n };\n\n const canSend = value.trim().length > 0 && !isDisabled && !isReadOnly;\n\n return (\n <InputContainer className={className}>\n <InputWrapper>\n <TextArea\n {...inputProps}\n ref={textareaRef}\n placeholder={placeholder}\n onKeyDown={handleKeyDown}\n $maxRows={maxRows}\n autoFocus={autoFocus}\n disabled={isDisabled}\n readOnly={isReadOnly}\n />\n <SendButton\n type=\"button\"\n onClick={handleSend}\n disabled={!canSend}\n aria-label=\"Send message\"\n title=\"Send message (Enter)\"\n >\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n role=\"img\"\n aria-hidden=\"true\"\n >\n <title>Send Icon</title>\n <path\n d=\"M2.5 10L17.5 3.75L11.25 18.75L10 12.5L2.5 10Z\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </SendButton>\n </InputWrapper>\n </InputContainer>\n );\n};\n","import styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\n/**\n * Styled container for the messages area\n * Provides flexible layout and responsive spacing\n */\nexport const MessagesContainer = styled.div`\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow: hidden;\n /* Gradient background - brand aligned */\n background: linear-gradient(\n to right bottom,\n ${tokens.colors.background.dark},\n ${tokens.colors.background.darker},\n ${tokens.colors.background.darkest}\n );\n /* Minimal horizontal padding to maximize message width */\n padding: ${tokens.spacing.sm} ${tokens.spacing.xs};\n gap: ${tokens.spacing.sm};\n box-sizing: border-box;\n\n /* Ensure proper scrolling behavior for child components */\n position: relative;\n min-height: 0;\n`;\n","import type React from 'react';\nimport { MessagesContainer } from './Messages.styles';\n\nexport interface MessagesProps {\n /**\n * Children elements to be rendered inside the messages container\n */\n children?: React.ReactNode;\n /**\n * Additional CSS class name\n */\n className?: string;\n /**\n * ARIA label for accessibility\n */\n ariaLabel?: string;\n}\n\n/**\n * Messages component - Container for message list\n *\n * This component serves as a wrapper for the messages area,\n * providing consistent spacing and layout for chat messages.\n *\n * @example\n * ```tsx\n * <Messages ariaLabel=\"Chat messages\">\n * <MessagesList messages={messages} />\n * </Messages>\n * ```\n */\nexport const Messages: React.FC<MessagesProps> = ({\n children,\n className,\n ariaLabel = 'Messages',\n}) => {\n return (\n <MessagesContainer className={className} role=\"region\" aria-label={ariaLabel}>\n {children}\n </MessagesContainer>\n );\n};\n\nMessages.displayName = 'Messages';\n","import styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\nexport const MessagesListContainer = styled.div<{ $maxHeight: string }>`\n display: flex;\n flex-direction: column;\n width: 100%;\n max-height: ${(props) => props.$maxHeight};\n overflow-y: auto;\n overflow-x: hidden;\n position: relative;\n background: ${tokens.colors.surface.base};\n border: 1px solid ${tokens.colors.border.default};\n border-radius: ${tokens.borderRadius.md};\n scroll-behavior: smooth;\n\n /* Custom scrollbar styling */\n &::-webkit-scrollbar {\n width: 8px;\n }\n\n &::-webkit-scrollbar-track {\n background: ${tokens.colors.scrollbar.track};\n border-radius: ${tokens.borderRadius.sm};\n }\n\n &::-webkit-scrollbar-thumb {\n background: ${tokens.colors.scrollbar.thumb};\n border-radius: ${tokens.borderRadius.sm};\n transition: background ${tokens.transitions.fast};\n }\n\n &::-webkit-scrollbar-thumb:hover {\n background: ${tokens.colors.scrollbar.thumbHover};\n }\n\n /* Firefox scrollbar styling */\n scrollbar-width: thin;\n scrollbar-color: ${tokens.colors.scrollbar.thumb} ${tokens.colors.scrollbar.track};\n\n /* Ensure proper rendering on mobile */\n -webkit-overflow-scrolling: touch;\n`;\n\nexport const MessagesListContent = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.sm};\n padding: ${tokens.spacing.md};\n min-height: min-content;\n\n /* Message styling */\n .message {\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.xs};\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n border-radius: ${tokens.borderRadius.md};\n max-width: 85%;\n word-wrap: break-word;\n animation: messageSlideIn ${tokens.animation.duration.short} ease-out;\n }\n\n @keyframes messageSlideIn {\n from {\n opacity: 0;\n transform: translateY(${tokens.spacing.sm});\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n\n /* Role-specific message styling */\n .message--user {\n align-self: flex-end;\n background: ${tokens.colors.message.user};\n color: ${tokens.colors.text.primary};\n border-bottom-right-radius: ${tokens.borderRadius.sm};\n }\n\n .message--assistant {\n align-self: flex-start;\n background: ${tokens.colors.message.ai};\n color: ${tokens.colors.text.primary};\n border-bottom-left-radius: ${tokens.borderRadius.sm};\n }\n\n .message--system {\n align-self: center;\n background: ${tokens.colors.message.system};\n color: ${tokens.colors.text.secondary};\n font-size: ${tokens.typography.fontSize.sm};\n font-style: italic;\n max-width: 100%;\n text-align: center;\n }\n`;\n","import { type ReactNode, useEffect, useRef } from 'react';\nimport { MessagesListContainer, MessagesListContent } from './MessagesList.styles';\n\nexport interface Message {\n id: string;\n content: ReactNode;\n role: 'user' | 'assistant' | 'system';\n timestamp?: Date;\n}\n\nexport interface MessagesListProps {\n /** Array of messages to display */\n messages: Message[];\n /** Whether to automatically scroll to the bottom when new messages arrive */\n autoScroll?: boolean;\n /** Custom class name for the container */\n className?: string;\n /** Custom render function for individual messages */\n renderMessage?: (message: Message) => ReactNode;\n /** Callback when scroll reaches the top (for loading more messages) */\n onScrollTop?: () => void;\n /** Maximum height of the messages list */\n maxHeight?: string;\n}\n\n/**\n * MessagesList Component\n *\n * A scrollable message list component with auto-scroll functionality.\n * Designed for chat interfaces where messages need to be displayed\n * in a scrollable container with automatic scrolling to the latest message.\n *\n * Features:\n * - Auto-scroll to bottom on new messages\n * - Overflow handling with custom scrollbar\n * - Flexible message rendering\n * - Scroll event handling for pagination\n */\nexport const MessagesList = ({\n messages,\n autoScroll = true,\n className,\n renderMessage,\n onScrollTop,\n maxHeight = '600px',\n}: MessagesListProps) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const isUserScrollingRef = useRef(false);\n const scrollTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Auto-scroll to bottom when new messages arrive\n // biome-ignore lint/correctness/useExhaustiveDependencies: We need messages.length to trigger scroll on new messages\n useEffect(() => {\n if (autoScroll && !isUserScrollingRef.current && containerRef.current) {\n const container = containerRef.current;\n container.scrollTop = container.scrollHeight;\n }\n }, [messages.length, autoScroll]);\n\n // Handle scroll events\n const handleScroll = () => {\n if (!containerRef.current) return;\n\n const container = containerRef.current;\n const isAtBottom = container.scrollHeight - container.scrollTop - container.clientHeight < 10;\n\n // User is scrolling manually\n isUserScrollingRef.current = !isAtBottom;\n\n // Clear existing timeout\n if (scrollTimeoutRef.current) {\n clearTimeout(scrollTimeoutRef.current);\n }\n\n // Reset user scrolling flag after 1 second of no scrolling\n scrollTimeoutRef.current = setTimeout(() => {\n isUserScrollingRef.current = false;\n }, 1000);\n\n // Check if scrolled to top\n if (container.scrollTop === 0 && onScrollTop) {\n onScrollTop();\n }\n };\n\n // Cleanup timeout on unmount\n useEffect(() => {\n return () => {\n if (scrollTimeoutRef.current) {\n clearTimeout(scrollTimeoutRef.current);\n }\n };\n }, []);\n\n // Default message renderer\n const defaultRenderMessage = (message: Message) => (\n <div\n key={message.id}\n className={`message message--${message.role}`}\n data-message-id={message.id}\n data-role={message.role}\n >\n {message.content}\n </div>\n );\n\n return (\n <MessagesListContainer\n ref={containerRef}\n onScroll={handleScroll}\n className={className}\n $maxHeight={maxHeight}\n >\n <MessagesListContent ref={contentRef}>\n {messages.map(renderMessage || defaultRenderMessage)}\n </MessagesListContent>\n </MessagesListContainer>\n );\n};\n","import styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\n/**\n * Container for the user message, aligned to the right\n */\nexport const StyledUserMessage = styled.div`\n display: flex;\n justify-content: flex-end;\n align-items: flex-start;\n margin: ${tokens.spacing.xs} 0;\n padding: 0;\n width: 100%;\n`;\n\n/**\n * The message bubble containing the user's text\n */\nexport const MessageBubble = styled.div`\n display: flex;\n flex-direction: column;\n max-width: 85%;\n padding: ${tokens.spacing.sm};\n border-radius: ${tokens.borderRadius.lg};\n\n /* User message colors - dark blue from brand */\n background: ${tokens.colors.message.user};\n color: ${tokens.colors.text.primary};\n\n /* Smooth transitions */\n transition: all ${tokens.transitions.fast};\n\n /* Ensure long strings don't overflow */\n overflow: hidden;\n overflow-wrap: break-word;\n word-break: break-word;\n\n /* Username styling */\n strong {\n font-size: ${tokens.typography.fontSize.xs};\n font-weight: ${tokens.typography.fontWeight.semibold};\n margin-bottom: ${tokens.spacing.xs};\n opacity: 0.9;\n }\n`;\n\n/**\n * The actual message text content\n */\nexport const MessageContent = styled.p`\n margin: 0;\n font-size: ${tokens.typography.fontSize.sm};\n line-height: ${tokens.typography.lineHeight.normal};\n word-wrap: break-word;\n overflow-wrap: break-word;\n word-break: break-word;\n white-space: pre-wrap;\n`;\n\n/**\n * Optional timestamp display\n */\nexport const MessageTime = styled.time`\n font-size: ${tokens.typography.fontSize.xs};\n opacity: 0.7;\n margin-top: ${tokens.spacing.xs};\n text-align: right;\n`;\n","import type React from 'react';\nimport styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\nimport { StreamingText } from '../StreamingText';\nimport {\n MessageBubble,\n MessageContent,\n MessageTime,\n StyledUserMessage,\n} from './UserMessage.styles';\n\nconst ActionButton = styled.button`\n display: inline-flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n padding: ${tokens.spacing.xs} ${tokens.spacing.sm};\n margin-top: ${tokens.spacing.sm};\n font-size: ${tokens.typography.fontSize.xs};\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.text.secondary};\n background: ${tokens.colors.surface.overlay};\n border: 1px solid ${tokens.colors.border.default};\n border-radius: ${tokens.borderRadius.md};\n cursor: pointer;\n transition: all ${tokens.transitions.fast};\n\n &:hover {\n background: ${tokens.colors.surface.overlayHover};\n border-color: ${tokens.colors.border.hover};\n }\n\n &:active {\n transform: scale(0.98);\n }\n`;\n\nconst ActionsContainer = styled.div`\n display: flex;\n gap: ${tokens.spacing.xs};\n flex-wrap: wrap;\n`;\n\nconst Avatar = styled.img`\n width: ${tokens.spacing.xl};\n height: ${tokens.spacing.xl};\n border-radius: ${tokens.borderRadius.full};\n margin-left: ${tokens.spacing.sm};\n object-fit: cover;\n border: 2px solid ${tokens.colors.border.default};\n`;\n\nexport interface ActionButtonType {\n label: string;\n onClick: () => void;\n icon?: React.ReactNode;\n}\n\nexport interface UserMessageProps {\n /** The message content to display */\n content: string;\n /** Optional timestamp for the message */\n timestamp?: string;\n /** Optional CSS class name */\n className?: string;\n /** Optional avatar URL */\n avatarUrl?: string;\n /** Optional username */\n username?: string;\n /** Whether the message is currently streaming */\n isStreaming?: boolean;\n /** Action buttons to display below the message */\n actions?: ActionButtonType[];\n /** Whether to enable markdown rendering */\n enableMarkdown?: boolean;\n}\n\n/**\n * UserMessage component displays a user's message in a chat interface.\n * Styled with right alignment and pink/purple gradient from Figma design.\n *\n * Features:\n * - Right-aligned layout\n * - Pink/purple gradient background (#D8B4FE)\n * - Support for streaming state\n * - Optional timestamp display\n * - Action buttons support\n * - Avatar display\n */\nexport const UserMessage = ({\n content,\n timestamp,\n className,\n avatarUrl,\n username,\n isStreaming = false,\n actions = [],\n enableMarkdown = true,\n}: UserMessageProps) => {\n return (\n <StyledUserMessage className={className}>\n <MessageBubble>\n {username && <strong>{username}</strong>}\n <MessageContent>\n <StreamingText\n content={content}\n isStreaming={isStreaming}\n variant={enableMarkdown ? 'markdown' : 'default'}\n cursor={false}\n />\n </MessageContent>\n {timestamp && <MessageTime>{timestamp}</MessageTime>}\n {actions.length > 0 && (\n <ActionsContainer>\n {actions.map((action, index) => (\n <ActionButton key={index} onClick={action.onClick}>\n {action.icon}\n {action.label}\n </ActionButton>\n ))}\n </ActionsContainer>\n )}\n </MessageBubble>\n {avatarUrl && <Avatar src={avatarUrl} alt={username || 'User'} />}\n </StyledUserMessage>\n );\n};\n","/**\n * StreamErrorMessage Component\n *\n * Displays inline chat errors with retry support.\n *\n * @see specs/015-restyle-ai-chat/spec.md\n */\n\nimport type React from 'react';\nimport styled from 'styled-components';\nimport { tokens } from '../../theme/tokens';\n\nconst ErrorContainer = styled.div<{ variant: 'inline' | 'banner' }>`\n display: flex;\n align-items: flex-start;\n gap: ${tokens.spacing.sm};\n padding: ${(props) => (props.variant === 'banner' ? tokens.spacing.md : `${tokens.spacing.sm} ${tokens.spacing.md}`)};\n background-color: ${(props) =>\n props.variant === 'banner' ? `${tokens.colors.error}1a` : `${tokens.colors.error}0d`};\n border: 1px solid ${tokens.colors.error}4d;\n border-radius: ${(props) => (props.variant === 'banner' ? tokens.borderRadius.md : tokens.borderRadius.lg)};\n color: ${tokens.colors.text.primary};\n font-family: ${tokens.typography.fontFamily.primary};\n margin: ${tokens.spacing.sm} 0;\n width: ${(props) => (props.variant === 'banner' ? '100%' : 'auto')};\n max-width: ${(props) => (props.variant === 'banner' ? '100%' : '600px')};\n`;\n\nconst IconContainer = styled.div`\n flex-shrink: 0;\n width: 20px;\n height: 20px;\n color: ${tokens.colors.error};\n`;\n\nconst ErrorIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n width=\"20\"\n height=\"20\"\n >\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z\" />\n </svg>\n);\n\nconst Content = styled.div`\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.sm};\n`;\n\nconst ErrorMessage = styled.div`\n font-size: ${tokens.typography.fontSize.sm};\n line-height: ${tokens.typography.lineHeight.normal};\n color: ${tokens.colors.text.primary};\n`;\n\nconst ErrorDetails = styled.div`\n font-size: ${tokens.typography.fontSize.xs};\n line-height: 1.4;\n color: ${tokens.colors.text.secondary};\n margin-top: ${tokens.spacing.xs};\n`;\n\nconst Actions = styled.div`\n display: flex;\n gap: ${tokens.spacing.sm};\n margin-top: ${tokens.spacing.sm};\n`;\n\nconst Button = styled.button<{ variant: 'primary' | 'secondary' }>`\n display: inline-flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n padding: ${tokens.spacing.xs} ${tokens.spacing.sm};\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${(props) => (props.variant === 'primary' ? tokens.colors.text.primary : tokens.colors.text.secondary)};\n background: ${(props) => (props.variant === 'primary' ? tokens.colors.error : tokens.colors.surface.overlay)};\n border: 1px solid\n ${(props) => (props.variant === 'primary' ? tokens.colors.error : tokens.colors.border.default)};\n border-radius: ${tokens.borderRadius.md};\n cursor: pointer;\n transition: all ${tokens.transitions.fast};\n\n &:hover {\n background: ${(props) =>\n props.variant === 'primary'\n ? tokens.colors.status.failed\n : tokens.colors.surface.overlayHover};\n border-color: ${(props) =>\n props.variant === 'primary' ? tokens.colors.status.failed : tokens.colors.border.hover};\n }\n\n &:active {\n transform: scale(0.98);\n }\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n`;\n\nconst CloseButton = styled.button`\n flex-shrink: 0;\n width: 24px;\n height: 24px;\n padding: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background: transparent;\n border: none;\n color: ${tokens.colors.text.secondary};\n cursor: pointer;\n border-radius: ${tokens.borderRadius.sm};\n transition: all ${tokens.transitions.fast};\n\n &:hover {\n background: ${tokens.colors.surface.overlayHover};\n color: ${tokens.colors.text.primary};\n }\n\n &:active {\n transform: scale(0.95);\n }\n`;\n\nconst CloseIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n width=\"16\"\n height=\"16\"\n >\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\n </svg>\n);\n\nexport interface StreamErrorMessageProps {\n /** Error message to display */\n error: string | Error;\n /** Visual variant */\n variant?: 'inline' | 'banner';\n /** Whether the error can be retried */\n retryable?: boolean;\n /** Callback when retry is clicked */\n onRetry?: () => void;\n /** Callback when dismiss is clicked */\n onDismiss?: () => void;\n /** Additional error details */\n details?: string;\n /** Custom className */\n className?: string;\n}\n\n/**\n * StreamErrorMessage component for inline chat errors\n *\n * Features:\n * - Inline and banner variants\n * - Retry support for recoverable errors\n * - Dismissible errors\n * - Error details display\n * - Accessible error reporting\n */\nexport const StreamErrorMessage: React.FC<StreamErrorMessageProps> = ({\n error,\n variant = 'inline',\n retryable = false,\n onRetry,\n onDismiss,\n details,\n className,\n}) => {\n const errorMessage = typeof error === 'string' ? error : error.message;\n\n return (\n <ErrorContainer variant={variant} className={className} role=\"alert\" aria-live=\"assertive\">\n <IconContainer aria-hidden=\"true\">\n <ErrorIcon />\n </IconContainer>\n <Content>\n <ErrorMessage>{errorMessage}</ErrorMessage>\n {details && <ErrorDetails>{details}</ErrorDetails>}\n {(retryable || onDismiss) && (\n <Actions>\n {retryable && onRetry && (\n <Button variant=\"primary\" onClick={onRetry}>\n Retry\n </Button>\n )}\n {onDismiss && (\n <Button variant=\"secondary\" onClick={onDismiss}>\n Dismiss\n </Button>\n )}\n </Actions>\n )}\n </Content>\n {onDismiss && (\n <CloseButton onClick={onDismiss} aria-label=\"Dismiss error\">\n <CloseIcon />\n </CloseButton>\n )}\n </ErrorContainer>\n );\n};\n\nStreamErrorMessage.displayName = 'StreamErrorMessage';\n","import styled, { css } from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\nexport const SuggestionsContainer = styled.div`\n display: flex;\n flex-wrap: nowrap; /* Single row */\n gap: ${tokens.spacing.sm};\n\n /* Reduced padding for tighter height */\n padding: ${tokens.spacing.xs} 0;\n\n /* Horizontal scrolling */\n overflow-x: auto;\n overflow-y: hidden;\n\n /* Smooth scrolling on mobile */\n -webkit-overflow-scrolling: touch;\n scroll-behavior: smooth;\n\n /* Align items to ensure single-row height */\n align-items: center;\n\n /* Constrain to exact height of buttons + minimal padding */\n /* Button height: ~14px font + 16px padding + 2px border = ~32px */\n /* Add small padding: 8px total = 40px */\n max-height: 40px;\n min-height: 40px;\n\n /* Hide scrollbar but keep functionality */\n scrollbar-width: none; /* Firefox */\n -ms-overflow-style: none; /* IE/Edge */\n\n &::-webkit-scrollbar {\n display: none; /* Chrome/Safari/Opera */\n }\n`;\n\ninterface StyledSuggestionProps {\n $isPressed: boolean;\n}\n\nexport const StyledSuggestion = styled.button<StyledSuggestionProps>`\n /* Base styles */\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n font-family: ${tokens.typography.fontFamily.primary};\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.text.primary};\n background-color: ${tokens.colors.surface.elevated};\n border: 1px solid ${tokens.colors.border.default};\n border-radius: ${tokens.borderRadius.lg};\n cursor: pointer;\n transition: all ${tokens.transitions.normal};\n white-space: nowrap;\n user-select: none;\n flex-shrink: 0; /* Prevent shrinking to maintain size */\n\n /* Hover state */\n &:hover:not(:disabled) {\n background-color: ${tokens.colors.surface.overlayHover};\n border-color: ${tokens.colors.primary};\n transform: translateY(-1px);\n box-shadow: ${tokens.shadows.sm};\n }\n\n /* Active/Pressed state */\n &:active:not(:disabled) {\n transform: translateY(0);\n box-shadow: none;\n }\n\n ${({ $isPressed }) =>\n $isPressed &&\n css`\n transform: scale(0.98);\n `}\n\n /* Focus state */\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n\n /* Remove default focus outline */\n &:focus {\n outline: none;\n }\n\n /* Disabled state */\n &:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n transform: none;\n }\n`;\n","import { useButton } from '@react-aria/button';\nimport { useRef } from 'react';\nimport { StyledSuggestion, SuggestionsContainer } from './Suggestions.styles';\n\nexport interface SuggestionsProps {\n suggestions: string[];\n onSelect: (suggestion: string) => void;\n className?: string;\n}\n\nexport function Suggestions({ suggestions, onSelect, className }: SuggestionsProps) {\n if (suggestions.length === 0) {\n return null;\n }\n\n return (\n <SuggestionsContainer className={className} role=\"list\" aria-label=\"Suggested prompts\">\n {suggestions.map((suggestion) => (\n <SuggestionChip key={suggestion} suggestion={suggestion} onSelect={onSelect} />\n ))}\n </SuggestionsContainer>\n );\n}\n\ninterface SuggestionChipProps {\n suggestion: string;\n onSelect: (suggestion: string) => void;\n}\n\nfunction SuggestionChip({ suggestion, onSelect }: SuggestionChipProps) {\n const ref = useRef<HTMLButtonElement>(null);\n const { buttonProps, isPressed } = useButton(\n {\n onPress: () => onSelect(suggestion),\n 'aria-label': `Select suggestion: ${suggestion}`,\n },\n ref\n );\n\n return (\n <StyledSuggestion {...buttonProps} ref={ref} $isPressed={isPressed} role=\"listitem\">\n {suggestion}\n </StyledSuggestion>\n );\n}\n\nSuggestions.displayName = 'Suggestions';\n","import styled, { css } from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\ninterface WindowContainerProps {\n $isMinimized: boolean;\n $isFullscreen: boolean;\n $width: string;\n $height: string;\n}\n\nexport const WindowContainer = styled.div<WindowContainerProps>`\n display: flex;\n flex-direction: column;\n /* Glassmorphism effect */\n background: transparent;\n backdrop-filter: blur(3.8px);\n -webkit-backdrop-filter: blur(3.8px);\n border: 1px solid ${tokens.colors.surface.glassBorder};\n border-radius: ${tokens.borderRadius.xl};\n box-shadow: ${tokens.shadows.lg};\n overflow: hidden;\n transition: all ${tokens.animation.duration.short} ${tokens.animation.easing.smooth};\n position: relative;\n\n /* Default dimensions */\n width: ${({ $width }) => $width};\n height: ${({ $height }) => $height};\n\n /* Fullscreen state */\n ${({ $isFullscreen }) =>\n $isFullscreen &&\n css`\n width: 100vw;\n height: 100vh;\n border-radius: 0;\n box-shadow: none;\n position: fixed;\n top: 0;\n left: 0;\n z-index: ${tokens.zIndex.modal};\n `}\n\n /* Minimized state */\n ${({ $isMinimized }) =>\n $isMinimized &&\n css`\n height: 60px;\n width: 300px;\n box-shadow: ${tokens.shadows.sm};\n cursor: pointer;\n\n /* Hide all content except header when minimized */\n > *:not(:first-child) {\n display: none;\n }\n\n /* Keep header visible but adjust styling */\n > *:first-child {\n border-bottom: none;\n }\n `}\n\n /* Responsive behavior for smaller screens */\n @media (max-width: ${tokens.breakpoints.tablet}px) {\n ${({ $isFullscreen, $isMinimized }) =>\n !$isFullscreen &&\n !$isMinimized &&\n css`\n width: 100vw;\n height: 100vh;\n border-radius: 0;\n max-width: 100%;\n max-height: 100%;\n `}\n }\n\n /* Focus states for accessibility */\n &:focus-visible {\n outline: 2px solid ${tokens.colors.primary};\n outline-offset: 2px;\n }\n\n /* Ensure proper stacking context */\n z-index: ${({ $isFullscreen }) => ($isFullscreen ? tokens.zIndex.modal : tokens.zIndex.fixed)};\n`;\n","import type React from 'react';\nimport { WindowContainer } from './Window.styles';\n\nexport interface WindowProps {\n /**\n * Whether the window is minimized to a small bar\n */\n isMinimized?: boolean;\n\n /**\n * Whether the window is fullscreen (100vw x 100vh)\n */\n isFullscreen?: boolean;\n\n /**\n * Custom width for the window (e.g., \"400px\", \"50vw\")\n * @default \"400px\"\n */\n width?: string;\n\n /**\n * Custom height for the window (e.g., \"600px\", \"80vh\")\n * @default \"600px\"\n */\n height?: string;\n\n /**\n * Children elements to be rendered inside the window\n */\n children: React.ReactNode;\n\n /**\n * Additional CSS class name for custom styling\n */\n className?: string;\n\n /**\n * ARIA label for the window\n */\n ariaLabel?: string;\n}\n\n/**\n * Window Component\n *\n * Main container/window wrapper for the CopilotKit chat interface.\n * This component holds the Header, Messages, Input, and Footer components.\n *\n * Features:\n * - Default: 400px width x 600px height with rounded corners and shadow\n * - Minimized: Collapsed to a small bar\n * - Fullscreen: Takes full viewport (100vw x 100vh)\n * - Smooth transitions between states\n * - Customizable dimensions via width/height props\n *\n * @example\n * ```tsx\n * // Default window\n * <Window>\n * <Header title=\"AI Assistant\" />\n * <Messages>...</Messages>\n * <MessageInput />\n * <Footer />\n * </Window>\n *\n * // Minimized window\n * <Window isMinimized>\n * <Header title=\"AI Assistant\" />\n * </Window>\n *\n * // Fullscreen window\n * <Window isFullscreen>\n * <Header title=\"AI Assistant\" />\n * <Messages>...</Messages>\n * <MessageInput />\n * </Window>\n *\n * // Custom dimensions\n * <Window width=\"500px\" height=\"700px\">\n * ...\n * </Window>\n * ```\n */\nexport const Window: React.FC<WindowProps> = ({\n isMinimized = false,\n isFullscreen = false,\n width = '400px',\n height = '600px',\n children,\n className,\n ariaLabel = 'Chat window',\n}) => {\n return (\n <WindowContainer\n className={className}\n $isMinimized={isMinimized}\n $isFullscreen={isFullscreen}\n $width={width}\n $height={height}\n role=\"dialog\"\n aria-label={ariaLabel}\n aria-modal=\"false\"\n >\n {children}\n </WindowContainer>\n );\n};\n\nWindow.displayName = 'Window';\n","import { type SVGAttributes, useId } from 'react';\n\nexport type FacebookIconVariant = 'colored' | 'black' | 'white';\n\nexport interface FacebookIconProps extends Omit<SVGAttributes<SVGSVGElement>, 'viewBox' | 'xmlns'> {\n /**\n * Visual variant of the icon\n * - colored: Facebook brand colors (blue gradient)\n * - black: Solid black\n * - white: Solid white\n */\n variant?: FacebookIconVariant;\n /**\n * Size of the icon in pixels\n */\n size?: number;\n /**\n * Additional CSS class name\n */\n className?: string;\n /**\n * Accessible label for the icon\n * Required for interactive icons, optional for decorative\n */\n 'aria-label'?: string;\n /**\n * Whether the icon is decorative (hidden from screen readers)\n */\n 'aria-hidden'?: boolean;\n /**\n * Click handler for interactive icons\n */\n onClick?: () => void;\n}\n\n/**\n * Facebook brand icon component with three variants\n *\n * @example\n * // Colored variant (default)\n * <FacebookIcon />\n *\n * @example\n * // Black variant with custom size\n * <FacebookIcon variant=\"black\" size={32} />\n *\n * @example\n * // Interactive icon with click handler\n * <FacebookIcon\n * onClick={handleClick}\n * aria-label=\"Share on Facebook\"\n * style={{ cursor: 'pointer' }}\n * />\n *\n * @example\n * // Decorative icon (hidden from screen readers)\n * <FacebookIcon aria-hidden=\"true\" />\n */\nexport function FacebookIcon({\n variant = 'colored',\n size = 24,\n className,\n 'aria-label': ariaLabel,\n 'aria-hidden': ariaHidden,\n onClick,\n ...svgProps\n}: FacebookIconProps) {\n // Generate unique ID for gradient to avoid conflicts when multiple icons are rendered\n const gradientId = useId();\n\n // Determine if icon is interactive\n const isInteractive = !!onClick;\n\n // Set appropriate ARIA attributes\n const ariaAttributes = {\n 'aria-label': ariaLabel,\n 'aria-hidden': ariaHidden !== undefined ? ariaHidden : !ariaLabel && !isInteractive,\n role: isInteractive ? 'button' : undefined,\n tabIndex: isInteractive ? 0 : undefined,\n };\n\n // Handle keyboard interaction for interactive icons\n const handleKeyDown = (event: React.KeyboardEvent<SVGSVGElement>) => {\n if (isInteractive && (event.key === 'Enter' || event.key === ' ')) {\n event.preventDefault();\n onClick?.();\n }\n };\n\n const commonProps = {\n width: size,\n height: size,\n viewBox: '0 0 24 24',\n fill: 'none',\n xmlns: 'http://www.w3.org/2000/svg',\n className,\n onClick,\n onKeyDown: isInteractive ? handleKeyDown : undefined,\n ...ariaAttributes,\n ...svgProps,\n };\n\n // Colored variant (Facebook brand gradient)\n if (variant === 'colored') {\n return (\n <svg {...commonProps}>\n <path\n d=\"M22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12Z\"\n fill=\"white\"\n />\n <path\n d=\"M22 12.0611C22 6.50451 17.5229 2 12 2C6.47715 2 2 6.50451 2 12.0611C2 17.0828 5.65684 21.2452 10.4375 22V14.9694H7.89844V12.0611H10.4375V9.84452C10.4375 7.32296 11.9305 5.93012 14.2146 5.93012C15.3084 5.93012 16.4531 6.12663 16.4531 6.12663V8.60261H15.1922C13.95 8.60261 13.5625 9.37822 13.5625 10.1747V12.0611H16.3359L15.8926 14.9694H13.5625V22C18.3432 21.2452 22 17.0828 22 12.0611Z\"\n fill={`url(#${gradientId})`}\n />\n <defs>\n <linearGradient\n id={gradientId}\n x1=\"12\"\n y1=\"2\"\n x2=\"12\"\n y2=\"22\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#50AAF7\" />\n <stop offset=\"1\" stopColor=\"#2961D8\" />\n </linearGradient>\n </defs>\n </svg>\n );\n }\n\n // Black variant\n if (variant === 'black') {\n return (\n <svg {...commonProps}>\n <path\n d=\"M22 12.0611C22 6.50451 17.5229 2 12 2C6.47715 2 2 6.50451 2 12.0611C2 17.0828 5.65684 21.2452 10.4375 22V14.9694H7.89844V12.0611H10.4375V9.84452C10.4375 7.32296 11.9305 5.93012 14.2146 5.93012C15.3084 5.93012 16.4531 6.12663 16.4531 6.12663V8.60261H15.1922C13.95 8.60261 13.5625 9.37822 13.5625 10.1747V12.0611H16.3359L15.8926 14.9694H13.5625V22C18.3432 21.2452 22 17.0828 22 12.0611Z\"\n fill=\"black\"\n />\n </svg>\n );\n }\n\n // White variant\n return (\n <svg {...commonProps}>\n <path\n d=\"M22 12.0611C22 6.50451 17.5229 2 12 2C6.47715 2 2 6.50451 2 12.0611C2 17.0828 5.65684 21.2452 10.4375 22V14.9694H7.89844V12.0611H10.4375V9.84452C10.4375 7.32296 11.9305 5.93012 14.2146 5.93012C15.3084 5.93012 16.4531 6.12663 16.4531 6.12663V8.60261H15.1922C13.95 8.60261 13.5625 9.37822 13.5625 10.1747V12.0611H16.3359L15.8926 14.9694H13.5625V22C18.3432 21.2452 22 17.0828 22 12.0611Z\"\n fill=\"white\"\n />\n </svg>\n );\n}\n\nFacebookIcon.displayName = 'FacebookIcon';\n","import styled from 'styled-components';\n\ninterface StyledIconWrapperProps {\n $size: number;\n}\n\nexport const StyledIconWrapper = styled.button<StyledIconWrapperProps>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n background: transparent;\n border: none;\n padding: 0;\n cursor: pointer;\n transition: all 0.2s ease-in-out;\n width: ${({ $size }) => `${$size}px`};\n height: ${({ $size }) => `${$size}px`};\n border-radius: ${({ theme }) => theme?.radii?.sm ?? '4px'};\n\n &:hover:not(:disabled) {\n opacity: 0.8;\n transform: scale(1.05);\n }\n\n &:active:not(:disabled) {\n opacity: 0.6;\n transform: scale(0.95);\n }\n\n &:focus-visible {\n outline: 2px solid ${({ theme }) => (theme?.colors?.primary && typeof theme.colors.primary === 'object' ? theme.colors.primary.light : theme?.colors?.primary) ?? '#0066FF'};\n outline-offset: 2px;\n }\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n\n /* Remove default focus outline, using focus-visible instead */\n &:focus {\n outline: none;\n }\n\n svg {\n display: block;\n width: 100%;\n height: 100%;\n }\n`;\n","import { useButton } from '@react-aria/button';\nimport { useRef } from 'react';\nimport { StyledIconWrapper } from './GmailIcon.styles';\nimport type { GmailIconProps } from './GmailIcon.types';\n\nconst SVG_CONTENT = {\n colored: {\n viewBox: '0 0 24 24',\n paths: [\n {\n d: 'M3.36364 20H6.54545V11.7596L2 8.1242V18.5458C2 19.3505 2.61136 20 3.36364 20Z',\n fill: '#4285F4',\n },\n {\n d: 'M17.4545 20H20.6364C21.3909 20 22 19.348 22 18.5458V8.1242L17.4545 11.7596',\n fill: '#34A853',\n },\n {\n d: 'M17.4545 5.45831V11.7596L22 8.1242V6.1854C22 4.38706 20.075 3.36186 18.7273 4.44038',\n fill: '#FBBC04',\n },\n {\n d: 'M6.54545 11.7596L6.54545 5.4582L12 9.82074L17.4545 5.45831V11.7596L12 16.1222',\n fill: '#EA4335',\n },\n {\n d: 'M2 6.1854V8.1242L6.54545 11.7596L6.54545 5.4582L5.27273 4.44038C3.92273 3.36186 2 4.38706 2 6.1854Z',\n fill: '#C5221F',\n },\n ],\n },\n black: {\n viewBox: '0 0 24 24',\n paths: [\n {\n d: 'M3.36364 20H6.54545V11.7596L2 8.1242V18.5458C2 19.3505 2.61136 20 3.36364 20Z',\n fill: 'black',\n },\n {\n d: 'M17.4545 20H20.6364C21.3909 20 22 19.348 22 18.5458V8.1242L17.4545 11.7596',\n fill: 'black',\n },\n {\n d: 'M17.4545 5.45831V11.7596L22 8.1242V6.1854C22 4.38706 20.075 3.36186 18.7273 4.44038',\n fill: 'black',\n },\n {\n d: 'M6.54545 11.7596L6.54545 5.4582L12 9.82074L17.4545 5.45831V11.7596L12 16.1222',\n fill: 'black',\n },\n {\n d: 'M2 6.1854V8.1242L6.54545 11.7596L6.54545 5.4582L5.27273 4.44038C3.92273 3.36186 2 4.38706 2 6.1854Z',\n fill: 'black',\n },\n ],\n },\n white: {\n viewBox: '0 0 24 24',\n paths: [\n {\n d: 'M3.36364 20H6.54545V11.7596L2 8.1242V18.5458C2 19.3505 2.61136 20 3.36364 20Z',\n fill: 'white',\n },\n {\n d: 'M17.4545 20H20.6364C21.3909 20 22 19.348 22 18.5458V8.1242L17.4545 11.7596',\n fill: 'white',\n },\n {\n d: 'M17.4545 5.45831V11.7596L22 8.1242V6.1854C22 4.38706 20.075 3.36186 18.7273 4.44038',\n fill: 'white',\n },\n {\n d: 'M6.54545 11.7596L6.54545 5.4582L12 9.82074L17.4545 5.45831V11.7596L12 16.1222',\n fill: 'white',\n },\n {\n d: 'M2 6.1854V8.1242L6.54545 11.7596L6.54545 5.4582L5.27273 4.44038C3.92273 3.36186 2 4.38706 2 6.1854Z',\n fill: 'white',\n },\n ],\n },\n};\n\nexport function GmailIcon({\n variant = 'colored',\n size = 24,\n className,\n style,\n 'aria-label': ariaLabel = 'Gmail',\n onPress,\n ...ariaProps\n}: GmailIconProps) {\n const ref = useRef<HTMLButtonElement>(null);\n const isInteractive = Boolean(onPress);\n\n // Only use button semantics if onPress is provided\n const { buttonProps } = useButton(\n {\n ...ariaProps,\n onPress,\n 'aria-label': ariaLabel,\n isDisabled: !isInteractive,\n },\n ref\n );\n\n const svgContent = SVG_CONTENT[variant];\n const role = isInteractive ? 'button' : 'img';\n const ariaHidden = !isInteractive && !ariaLabel;\n\n const svgElement = (\n <svg\n width={size}\n height={size}\n viewBox={svgContent.viewBox}\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n role={role}\n aria-label={ariaLabel}\n aria-hidden={ariaHidden}\n >\n {svgContent.paths.map((pathProps, index) => (\n <path\n key={`${pathProps.d.substring(0, 20)}-${index}`}\n d={pathProps.d}\n fill={pathProps.fill}\n />\n ))}\n </svg>\n );\n\n if (isInteractive) {\n return (\n <StyledIconWrapper\n {...buttonProps}\n ref={ref}\n className={className}\n style={style}\n $size={size}\n >\n {svgElement}\n </StyledIconWrapper>\n );\n }\n\n return (\n <span\n className={className}\n style={{ display: 'inline-flex', width: size, height: size, ...style }}\n >\n {svgElement}\n </span>\n );\n}\n\nGmailIcon.displayName = 'GmailIcon';\n","import { type SVGAttributes, useId } from 'react';\n\nexport type InstagramVariant = 'colored' | 'black' | 'white';\n\nexport interface InstagramIconProps\n extends Omit<SVGAttributes<SVGSVGElement>, 'viewBox' | 'xmlns'> {\n /**\n * Visual variant of the icon\n * - colored: Instagram brand gradient (purple to yellow)\n * - black: Solid black\n * - white: Solid white\n */\n variant?: InstagramVariant;\n /**\n * Size of the icon in pixels\n */\n size?: number;\n /**\n * Additional CSS class name\n */\n className?: string;\n /**\n * Accessible label for the icon\n * Required for interactive icons, optional for decorative\n */\n 'aria-label'?: string;\n /**\n * Whether the icon is decorative (hidden from screen readers)\n */\n 'aria-hidden'?: boolean;\n /**\n * Click handler for interactive icons\n */\n onClick?: () => void;\n}\n\n/**\n * Instagram brand icon component with three variants\n *\n * @example\n * // Colored variant (default)\n * <InstagramIcon />\n *\n * @example\n * // Black variant with custom size\n * <InstagramIcon variant=\"black\" size={32} />\n *\n * @example\n * // Interactive icon with click handler\n * <InstagramIcon\n * onClick={handleClick}\n * aria-label=\"Share on Instagram\"\n * style={{ cursor: 'pointer' }}\n * />\n *\n * @example\n * // Decorative icon (hidden from screen readers)\n * <InstagramIcon aria-hidden=\"true\" />\n */\nexport function InstagramIcon({\n variant = 'colored',\n size = 24,\n className,\n 'aria-label': ariaLabel,\n 'aria-hidden': ariaHidden,\n onClick,\n ...svgProps\n}: InstagramIconProps) {\n // Generate unique ID for gradient to avoid conflicts when multiple icons are rendered\n const gradientId = useId();\n\n // Determine if icon is interactive\n const isInteractive = !!onClick;\n\n // Set appropriate ARIA attributes\n const ariaAttributes = {\n 'aria-label': ariaLabel,\n 'aria-hidden': ariaHidden !== undefined ? ariaHidden : !ariaLabel && !isInteractive,\n role: isInteractive ? 'button' : undefined,\n tabIndex: isInteractive ? 0 : undefined,\n };\n\n // Handle keyboard interaction for interactive icons\n const handleKeyDown = (event: React.KeyboardEvent<SVGSVGElement>) => {\n if (isInteractive && (event.key === 'Enter' || event.key === ' ')) {\n event.preventDefault();\n onClick?.();\n }\n };\n\n const commonProps = {\n width: size,\n height: size,\n viewBox: '0 0 24 24',\n fill: 'none',\n xmlns: 'http://www.w3.org/2000/svg',\n className,\n onClick,\n onKeyDown: isInteractive ? handleKeyDown : undefined,\n ...ariaAttributes,\n ...svgProps,\n };\n\n // SVG paths for Instagram logo\n const paths = {\n // Camera lens circle\n path1:\n 'M12.0053 7.37695C9.45144 7.37695 7.37952 9.44766 7.37952 12C7.37952 14.5523 9.45144 16.623 12.0053 16.623C14.5591 16.623 16.631 14.5523 16.631 12C16.631 9.44766 14.5591 7.37695 12.0053 7.37695ZM12.0053 14.9988C10.3484 14.9988 9.00469 13.6559 9.00469 12C9.00469 10.3441 10.3484 9.00117 12.0053 9.00117C13.6621 9.00117 15.0059 10.3441 15.0059 12C15.0059 13.6559 13.6621 14.9988 12.0053 14.9988Z',\n // Flash dot\n path2:\n 'M16.814 8.27345C17.4084 8.27345 17.8939 7.79181 17.8939 7.19415C17.8939 6.60001 17.4084 6.11485 16.814 6.11485C16.2195 6.11485 15.734 6.59649 15.734 7.19415C15.734 7.78829 16.2159 8.27345 16.814 8.27345Z',\n // Outer rounded square\n path3:\n 'M12.0053 3C9.56048 3 9.25445 3.01055 8.29412 3.05273C7.33731 3.09492 6.6795 3.24961 6.10963 3.47109C5.51515 3.70312 5.01212 4.00898 4.51261 4.51172C4.00958 5.01094 3.70354 5.51367 3.47137 6.1043C3.24976 6.67734 3.09498 7.33125 3.05277 8.2875C3.01055 9.25078 3 9.55664 3 12C3 14.4434 3.01055 14.7492 3.05277 15.709C3.09498 16.6652 3.24976 17.3227 3.47137 17.8922C3.70354 18.4863 4.00958 18.9891 4.51261 19.4883C5.01212 19.9875 5.51515 20.2969 6.10612 20.5254C6.6795 20.7469 7.33379 20.9016 8.2906 20.9437C9.25093 20.9859 9.55697 20.9965 12.0018 20.9965C14.4465 20.9965 14.7526 20.9859 15.7129 20.9437C16.6697 20.9016 17.3275 20.7469 17.8974 20.5254C18.4884 20.2969 18.9914 19.9875 19.4909 19.4883C19.9904 18.9891 20.3 18.4863 20.5286 17.8957C20.7502 17.3227 20.905 16.6687 20.9472 15.7125C20.9894 14.7527 21 14.4469 21 12.0035C21 9.56016 20.9894 9.2543 20.9472 8.29453C20.905 7.33828 20.7502 6.68086 20.5286 6.11133C20.307 5.51367 20.001 5.01094 19.4979 4.51172C18.9984 4.0125 18.4954 3.70312 17.9044 3.47461C17.3311 3.25312 16.6768 3.09844 15.72 3.05625C14.7561 3.01055 14.4501 3 12.0053 3ZM12.0053 4.6207C14.4114 4.6207 14.6963 4.63125 15.6426 4.67344C16.522 4.71211 16.9969 4.85977 17.3135 4.98281C17.7321 5.14453 18.0346 5.34141 18.3477 5.6543C18.6643 5.9707 18.8577 6.26953 19.0195 6.68789C19.1427 7.0043 19.2904 7.48242 19.3291 8.35781C19.3713 9.30703 19.3819 9.5918 19.3819 11.993C19.3819 14.3977 19.3713 14.6824 19.3291 15.6281C19.2904 16.507 19.1427 16.9816 19.0195 17.298C18.8577 17.7164 18.6607 18.0188 18.3477 18.3316C18.0311 18.648 17.7321 18.8414 17.3135 19.0031C16.9969 19.1262 16.5185 19.2738 15.6426 19.3125C14.6928 19.3547 14.4079 19.3652 12.0053 19.3652C9.59918 19.3652 9.31425 19.3547 8.36799 19.3125C7.48857 19.2738 7.01368 19.1262 6.69709 19.0031C6.27848 18.8414 5.97596 18.6445 5.66289 18.3316C5.3463 18.0152 5.15282 17.7164 4.99101 17.298C4.86789 16.9816 4.72015 16.5035 4.68145 15.6281C4.63924 14.6789 4.62869 14.3941 4.62869 11.993C4.62869 9.58828 4.63924 9.30351 4.68145 8.35781C4.72015 7.47891 4.86789 7.0043 4.99101 6.68789C5.15282 6.26953 5.34981 5.96719 5.66289 5.6543C5.97948 5.33789 6.27848 5.14453 6.69709 4.98281C7.01368 4.85977 7.49209 4.71211 8.36799 4.67344C9.31425 4.63125 9.59918 4.6207 12.0053 4.6207Z',\n };\n\n // Colored variant (Instagram brand gradient)\n if (variant === 'colored') {\n return (\n <svg {...commonProps}>\n <defs>\n <linearGradient\n id={gradientId}\n x1=\"16\"\n y1=\"3\"\n x2=\"6.5\"\n y2=\"21\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#6E3BF1\" />\n <stop offset=\"0.241314\" stopColor=\"#C128BF\" />\n <stop offset=\"0.475694\" stopColor=\"#EA336B\" />\n <stop offset=\"0.715281\" stopColor=\"#EE8131\" />\n <stop offset=\"0.913202\" stopColor=\"#F8D849\" />\n </linearGradient>\n </defs>\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d={paths.path1} fill={`url(#${gradientId})`} />\n <path d={paths.path2} fill={`url(#${gradientId})`} />\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d={paths.path3} fill={`url(#${gradientId})`} />\n </svg>\n );\n }\n\n // Black variant\n if (variant === 'black') {\n return (\n <svg {...commonProps}>\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d={paths.path1} fill=\"black\" />\n <path d={paths.path2} fill=\"black\" />\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d={paths.path3} fill=\"black\" />\n </svg>\n );\n }\n\n // White variant\n return (\n <svg {...commonProps}>\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d={paths.path1} fill=\"white\" />\n <path d={paths.path2} fill=\"white\" />\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d={paths.path3} fill=\"white\" />\n </svg>\n );\n}\n\nInstagramIcon.displayName = 'InstagramIcon';\n","import styled from 'styled-components';\n\ninterface StyledIconWrapperProps {\n $size: number;\n}\n\nexport const StyledIconWrapper = styled.button<StyledIconWrapperProps>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n background: transparent;\n border: none;\n padding: 0;\n cursor: pointer;\n transition: all 0.2s ease-in-out;\n width: ${({ $size }) => `${$size}px`};\n height: ${({ $size }) => `${$size}px`};\n border-radius: ${({ theme }) => theme?.radii?.sm ?? '4px'};\n\n &:hover:not(:disabled) {\n opacity: 0.8;\n transform: scale(1.05);\n }\n\n &:active:not(:disabled) {\n opacity: 0.6;\n transform: scale(0.95);\n }\n\n &:focus-visible {\n outline: 2px solid ${({ theme }) => (theme?.colors?.primary && typeof theme.colors.primary === 'object' ? theme.colors.primary.light : theme?.colors?.primary) ?? '#0066FF'};\n outline-offset: 2px;\n }\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n\n /* Remove default focus outline, using focus-visible instead */\n &:focus {\n outline: none;\n }\n\n svg {\n display: block;\n width: 100%;\n height: 100%;\n }\n`;\n","import type { AriaButtonProps } from '@react-aria/button';\nimport { useButton } from '@react-aria/button';\nimport { useRef } from 'react';\nimport { StyledIconWrapper } from './LinkedInIcon.styles';\n\nexport type LinkedInIconVariant = 'colored' | 'black' | 'white';\n\nexport interface LinkedInIconProps extends Partial<AriaButtonProps> {\n variant?: LinkedInIconVariant;\n size?: number;\n className?: string;\n 'aria-label'?: string;\n}\n\nconst SVG_CONTENT = {\n colored: {\n viewBox: '0 0 24 24',\n paths: [\n {\n d: 'M9.85714 9.60714H12.2803V10.8423H12.3069C12.6763 10.1763 13.7674 9.5 15.1166 9.5C17.706 9.5 18.4286 10.8749 18.4286 13.4214V18.1786H15.8571V13.8903C15.8571 12.7503 15.402 11.75 14.3374 11.75C13.0449 11.75 12.4286 12.6251 12.4286 14.0617V18.1786H9.85714V9.60714ZM5.57143 18.1786H8.14286V9.60714H5.57143V18.1786ZM8.46429 6.60714C8.46429 7.49514 7.74514 8.21429 6.85714 8.21429C5.96914 8.21429 5.25 7.49514 5.25 6.60714C5.25 5.71914 5.96914 5 6.85714 5C7.74514 5 8.46429 5.71914 8.46429 6.60714Z',\n fill: 'white',\n fillRule: 'evenodd',\n clipRule: 'evenodd',\n },\n {\n d: 'M19.6963 3H4.35686C3.62314 3 3 3.58029 3 4.29514V19.704C3 20.4197 3.40886 21 4.14257 21H19.482C20.2166 21 21 20.4197 21 19.704V4.29514C21 3.58029 20.4309 3 19.6963 3ZM9.85714 9.85714H12.2803V11.0923H12.3069C12.6763 10.4263 13.7674 9.75 15.1166 9.75C17.706 9.75 18.4286 11.1249 18.4286 13.6714V18.4286H15.8571V14.1403C15.8571 13.0003 15.402 12 14.3374 12C13.0449 12 12.4286 12.8751 12.4286 14.3117V18.4286H9.85714V9.85714ZM5.57143 18.4286H8.14286V9.85714H5.57143V18.4286ZM8.46429 6.85714C8.46429 7.74514 7.74514 8.46429 6.85714 8.46429C5.96914 8.46429 5.25 7.74514 5.25 6.85714C5.25 5.96914 5.96914 5.25 6.85714 5.25C7.74514 5.25 8.46429 5.96914 8.46429 6.85714Z',\n fill: '#2D64BC',\n fillRule: 'evenodd',\n clipRule: 'evenodd',\n },\n ],\n },\n black: {\n viewBox: '0 0 24 24',\n paths: [\n {\n d: 'M19.6963 3H4.35686C3.62314 3 3 3.58029 3 4.29514V19.704C3 20.4197 3.40886 21 4.14257 21H19.482C20.2166 21 21 20.4197 21 19.704V4.29514C21 3.58029 20.4309 3 19.6963 3ZM9.85714 9.85714H12.2803V11.0923H12.3069C12.6763 10.4263 13.7674 9.75 15.1166 9.75C17.706 9.75 18.4286 11.1249 18.4286 13.6714V18.4286H15.8571V14.1403C15.8571 13.0003 15.402 12 14.3374 12C13.0449 12 12.4286 12.8751 12.4286 14.3117V18.4286H9.85714V9.85714ZM5.57143 18.4286H8.14286V9.85714H5.57143V18.4286ZM8.46429 6.85714C8.46429 7.74514 7.74514 8.46429 6.85714 8.46429C5.96914 8.46429 5.25 7.74514 5.25 6.85714C5.25 5.96914 5.96914 5.25 6.85714 5.25C7.74514 5.25 8.46429 5.96914 8.46429 6.85714Z',\n fill: 'black',\n fillRule: 'evenodd',\n clipRule: 'evenodd',\n },\n ],\n },\n white: {\n viewBox: '0 0 24 24',\n paths: [\n {\n d: 'M19.6963 3H4.35686C3.62314 3 3 3.58029 3 4.29514V19.704C3 20.4197 3.40886 21 4.14257 21H19.482C20.2166 21 21 20.4197 21 19.704V4.29514C21 3.58029 20.4309 3 19.6963 3ZM9.85714 9.85714H12.2803V11.0923H12.3069C12.6763 10.4263 13.7674 9.75 15.1166 9.75C17.706 9.75 18.4286 11.1249 18.4286 13.6714V18.4286H15.8571V14.1403C15.8571 13.0003 15.402 12 14.3374 12C13.0449 12 12.4286 12.8751 12.4286 14.3117V18.4286H9.85714V9.85714ZM5.57143 18.4286H8.14286V9.85714H5.57143V18.4286ZM8.46429 6.85714C8.46429 7.74514 7.74514 8.46429 6.85714 8.46429C5.96914 8.46429 5.25 7.74514 5.25 6.85714C5.25 5.96914 5.96914 5.25 6.85714 5.25C7.74514 5.25 8.46429 5.96914 8.46429 6.85714Z',\n fill: 'white',\n fillRule: 'evenodd',\n clipRule: 'evenodd',\n },\n ],\n },\n};\n\nexport function LinkedInIcon({\n variant = 'colored',\n size = 24,\n className,\n 'aria-label': ariaLabel = 'LinkedIn',\n onPress,\n ...ariaProps\n}: LinkedInIconProps) {\n const ref = useRef<HTMLButtonElement>(null);\n const isInteractive = Boolean(onPress);\n\n // Only use button semantics if onPress is provided\n const { buttonProps } = useButton(\n {\n ...ariaProps,\n onPress,\n 'aria-label': ariaLabel,\n isDisabled: !isInteractive,\n },\n ref\n );\n\n const svgContent = SVG_CONTENT[variant];\n const role = isInteractive ? 'button' : 'img';\n const ariaHidden = !isInteractive && !ariaLabel;\n\n const svgElement = (\n <svg\n width={size}\n height={size}\n viewBox={svgContent.viewBox}\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n role={role}\n aria-label={ariaLabel}\n aria-hidden={ariaHidden}\n >\n {svgContent.paths.map((pathProps) => (\n <path\n key={`${pathProps.d.substring(0, 20)}-${pathProps.fill}`}\n d={pathProps.d}\n fill={pathProps.fill}\n fillRule={pathProps.fillRule as 'evenodd' | 'nonzero' | 'inherit' | undefined}\n clipRule={pathProps.clipRule as 'evenodd' | 'nonzero' | 'inherit' | undefined}\n />\n ))}\n </svg>\n );\n\n if (isInteractive) {\n return (\n <StyledIconWrapper {...buttonProps} ref={ref} className={className} $size={size}>\n {svgElement}\n </StyledIconWrapper>\n );\n }\n\n return (\n <span className={className} style={{ display: 'inline-flex', width: size, height: size }}>\n {svgElement}\n </span>\n );\n}\n\nLinkedInIcon.displayName = 'LinkedInIcon';\n","import styled from 'styled-components';\n\ninterface StyledIconWrapperProps {\n $size: number;\n}\n\nexport const StyledIconWrapper = styled.button<StyledIconWrapperProps>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n background: transparent;\n border: none;\n padding: 0;\n cursor: pointer;\n transition: all 0.2s ease-in-out;\n width: ${({ $size }) => `${$size}px`};\n height: ${({ $size }) => `${$size}px`};\n border-radius: ${({ theme }) => theme?.radii?.sm ?? '4px'};\n\n &:hover:not(:disabled) {\n opacity: 0.8;\n transform: scale(1.05);\n }\n\n &:active:not(:disabled) {\n opacity: 0.6;\n transform: scale(0.95);\n }\n\n &:focus-visible {\n outline: 2px solid ${({ theme }) => (theme?.colors?.primary && typeof theme.colors.primary === 'object' ? theme.colors.primary.light : theme?.colors?.primary) ?? '#0066FF'};\n outline-offset: 2px;\n }\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n\n /* Remove default focus outline, using focus-visible instead */\n &:focus {\n outline: none;\n }\n\n svg {\n display: block;\n width: 100%;\n height: 100%;\n }\n`;\n","import { useButton } from '@react-aria/button';\nimport { useRef } from 'react';\nimport { StyledIconWrapper } from './PostizIcon.styles';\nimport type { PostizIconProps } from './PostizIcon.types';\n\n/**\n * Postiz logo - Official Postiz social media scheduling platform logo\n * Brand colors: Purple (#612bd3), Dark (#131019), White (#fff)\n */\n\nexport function PostizIcon({\n variant = 'colored',\n size = 24,\n className,\n style,\n 'aria-label': ariaLabel = 'Postiz',\n onPress,\n ...ariaProps\n}: PostizIconProps) {\n const ref = useRef<HTMLButtonElement>(null);\n const isInteractive = Boolean(onPress);\n\n // Only use button semantics if onPress is provided\n const { buttonProps } = useButton(\n {\n ...ariaProps,\n onPress,\n 'aria-label': ariaLabel,\n isDisabled: !isInteractive,\n },\n ref\n );\n\n const role = isInteractive ? 'button' : 'img';\n const ariaHidden = !isInteractive && !ariaLabel;\n\n // Color mappings for variants\n const colors = {\n colored: {\n purple: '#612bd3',\n dark: '#131019',\n white: '#fff',\n stroke: '#131019',\n },\n black: {\n purple: 'black',\n dark: 'black',\n white: 'black',\n stroke: 'black',\n },\n white: {\n purple: 'white',\n dark: 'white',\n white: 'white',\n stroke: 'white',\n },\n };\n\n const c = colors[variant];\n\n const svgElement = (\n <svg\n width={size}\n height={size}\n viewBox=\"26.74 0.02 460.94 509.34\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n role={role}\n aria-label={ariaLabel}\n aria-hidden={ariaHidden}\n >\n {/* Shadow/background layer */}\n <path\n d=\"M103.4 82.6c.4 5.6.8 12 1.4 19.1L125 362.4c2.3 29.1 3.4 43.8 9.9 54.4 5.7 9.4 14.4 16.7 24.5 21 11.6 4.9 26.1 3.7 55.2 1.4l199.8-15.4c18.9-1.5 31.7-2.5 41.2-4.8-3.2 7.5-8.1 14.3-14.5 19.5-9.6 8-23.9 11.4-52.4 17.9l-195 45c-28.5 6.5-42.8 9.9-54.8 6.8-10.7-2.7-20.3-8.6-27.3-17.1-8-9.6-11.4-23.9-17.9-52.4L34.7 184c-6.5-28.5-9.9-42.8-6.8-54.8 2.7-10.7 8.6-20.3 17.1-27.3 9.6-8 23.9-11.4 52.4-17.9z\"\n fill={c.purple}\n />\n {/* Card outline */}\n <path\n d=\"M112.8 101.1c-1.1-14.8-2-25.2-1.9-33.6 0-8.2.9-13.6 2.8-18 3.6-8.6 9.8-15.8 17.7-20.8 4.1-2.5 9.2-4.2 17.4-5.4 8.2-1.3 18.8-2.2 33.5-3.3L382 4.4c14.8-1.1 25.2-2 33.6-1.9 8.2 0 13.6.9 18 2.8 8.6 3.6 15.8 9.8 20.8 17.7 2.5 4.1 4.2 9.2 5.4 17.4s2.2 18.8 3.3 33.5l20.2 260.8c1.1 14.8 2 25.2 1.9 33.6 0 8.2-.9 13.6-2.8 18-3.6 8.6-9.8 15.8-17.7 20.8-4.1 2.5-9.2 4.2-17.4 5.4-8.2 1.3-18.8 2.2-33.5 3.3l-199.7 15.4c-14.8 1.1-25.2 2-33.6 1.9-8.2 0-13.6-.9-18-2.8-8.6-3.6-15.8-9.8-20.8-17.7-2.5-4.1-4.2-9.2-5.4-17.4-1.3-8.2-2.2-18.8-3.3-33.5z\"\n fill=\"none\"\n stroke={c.stroke}\n strokeWidth=\"4.9373\"\n />\n {/* White card background */}\n <path\n d=\"m182.9 27.9 199.7-15.4c14.9-1.2 25-1.9 33-1.9 7.7 0 11.9.9 14.9 2.2 7 3 13 8 17 14.6 1.7 2.9 3.2 6.8 4.5 14.5 1.3 7.8 2.1 18 3.2 32.9l20.2 260.8c1.2 14.9 1.9 25 1.9 33 0 7.7-.9 11.9-2.2 14.9-3 7-8 13-14.6 17-2.9 1.7-6.8 3.2-14.5 4.5-7.8 1.3-18 2.1-32.9 3.2l-199.7 15.3c-14.8 1.2-25 1.9-33 1.9-7.7 0-11.9-.9-14.9-2.2-7-3-13-8-17-14.6-1.7-2.9-3.2-6.8-4.5-14.5-1.3-7.8-2.1-18-3.2-32.9l-20.2-260.8c-1.2-14.8-1.9-25-1.9-33 0-7.7.9-11.9 2.2-14.9 3-7 8-13 14.6-17 2.9-1.7 6.8-3.2 14.5-4.5 7.9-1.1 18.1-1.9 32.9-3.1\"\n fill={c.white}\n />\n {/* Letter \"p\" */}\n <path\n d=\"m269.4 88.3 1.9 24.8c3.5-4.3 7.9-7.9 13.4-11 5.4-3.3 12.3-5.2 20.4-5.8 7.4-.6 14.7.3 21.4 2.7 7 2.4 13.3 6.4 18.8 12.5 5.7 5.7 10.6 13.7 14.5 23.8s6.3 22.5 7.5 37.2c.8 10.5.7 21.2-.5 31.9-1 10.7-3.4 20.4-7.3 29.1-4 8.7-9.7 16-17.2 21.9-7.3 5.6-16.7 8.9-28.4 9.8-8.3.7-15 .1-20-1.8-5-2.1-8.8-4.6-11.5-7.4l6.2 80-46.5 15.5L221.8 92zm26.4 149c5.7-.4 10.4-2.7 14.1-6.7 3.7-4.3 6.3-9.5 8-15.8 2-6.3 3.1-13.3 3.4-20.8.5-7.7.5-15.3-.1-22.9-.9-12.1-2.8-21.6-5.5-28.4-2.5-6.8-5.3-11.9-8.4-14.9-3.2-3.3-6.1-5.2-9.1-5.9-2.7-.7-4.9-1-6.3-.8-4 .3-7.7 2.1-11.2 5.1-3.6 3-5.9 7.2-7.3 12.9l7.1 91.9c1.2 1.7 3.2 3.3 5.6 4.9 2.5 1.2 5.7 1.7 9.7 1.4\"\n fill={c.dark}\n />\n </svg>\n );\n\n if (isInteractive) {\n return (\n <StyledIconWrapper\n {...buttonProps}\n ref={ref}\n className={className}\n style={style}\n $size={size}\n >\n {svgElement}\n </StyledIconWrapper>\n );\n }\n\n return (\n <span\n className={className}\n style={{ display: 'inline-flex', width: size, height: size, ...style }}\n >\n {svgElement}\n </span>\n );\n}\n\nPostizIcon.displayName = 'PostizIcon';\n","import type { SVGAttributes } from 'react';\n\nexport type RedditIconVariant = 'colored' | 'black' | 'white';\n\nexport interface RedditIconProps\n extends Omit<SVGAttributes<SVGSVGElement>, 'viewBox' | 'fill' | 'xmlns'> {\n /** Visual variant of the icon */\n variant?: RedditIconVariant;\n /** Size of the icon in pixels */\n size?: number;\n /** Additional CSS class */\n className?: string;\n /** Click handler for interactive icons */\n onClick?: () => void;\n /** Accessible label for screen readers */\n 'aria-label'?: string;\n}\n\nconst ColoredVariant = () => (\n <>\n <path\n d=\"M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z\"\n fill=\"#FF4500\"\n />\n <path\n d=\"M18.67 12C18.672 12.137 18.655 12.2738 18.619 12.406C18.583 12.5383 18.5285 12.665 18.457 12.782C18.3858 12.899 18.2983 13.0055 18.1973 13.0983C18.0963 13.191 17.9828 13.269 17.86 13.33C17.8628 13.3665 17.865 13.4033 17.8663 13.44C17.8693 13.5133 17.8693 13.5867 17.8663 13.66C17.865 13.6968 17.8628 13.7335 17.86 13.77C17.86 16.01 15.25 17.83 12.03 17.83C8.81003 17.83 6.20003 16.01 6.20003 13.77C6.19728 13.7335 6.19503 13.6968 6.19378 13.66C6.19077 13.5867 6.19077 13.5133 6.19378 13.44C6.19503 13.4033 6.19728 13.3665 6.20003 13.33C6.00772 13.2416 5.83691 13.1125 5.69943 12.9516C5.56194 12.7906 5.46107 12.6018 5.40378 12.398C5.34658 12.1942 5.3344 11.9803 5.36807 11.7713C5.40174 11.5623 5.48046 11.3631 5.59878 11.1875C5.71699 11.012 5.87197 10.8642 6.05299 10.7546C6.234 10.6449 6.4367 10.576 6.64703 10.5525C6.85738 10.5289 7.07035 10.5514 7.27117 10.6183C7.47199 10.6852 7.65585 10.795 7.81003 10.94C8.09624 10.746 8.3961 10.573 8.70728 10.4223C9.01853 10.2718 9.34028 10.1438 9.67003 10.0398C9.99978 9.93576 10.3368 9.85601 10.678 9.80076C11.0193 9.74551 11.3643 9.71526 11.71 9.71001L12.45 6.24001C12.4583 6.19976 12.4745 6.16176 12.4978 6.12776C12.5208 6.09401 12.5505 6.06501 12.5848 6.04276C12.6193 6.02051 12.6578 6.00526 12.6983 5.99776C12.7385 5.99051 12.78 5.99126 12.82 6.00001L15.27 6.49001C15.5173 6.06526 16.0363 5.88326 16.4945 6.06026C16.9528 6.23726 17.2148 6.72101 17.1123 7.20151C17.01 7.68201 16.5735 8.01701 16.083 7.99176C15.5923 7.96651 15.1925 7.58851 15.14 7.10001L13 6.65001L12.35 9.77001C12.6915 9.77726 13.0323 9.80926 13.3693 9.86551C14.0441 9.978 14.6992 10.1873 15.3143 10.487C15.6215 10.6365 15.9175 10.8079 16.2 11C16.4032 10.805 16.6585 10.6729 16.935 10.6198C17.2116 10.5664 17.4977 10.5943 17.7588 10.7C18.0199 10.8057 18.2449 10.9846 18.4065 11.2153C18.5683 11.4459 18.6598 11.7185 18.67 12ZM8.74603 13.3828C8.79653 13.504 8.87003 13.6143 8.96303 13.707C9.05578 13.8 9.16603 13.8735 9.28728 13.924C9.40864 13.9742 9.53869 14 9.67003 14C10.0745 14 10.439 13.7563 10.594 13.3828C10.7488 13.009 10.663 12.579 10.377 12.293C10.091 12.007 9.66103 11.9213 9.28728 12.076C8.91378 12.231 8.67003 12.5955 8.67003 13C8.67003 13.1313 8.69578 13.2613 8.74603 13.3828ZM14.4735 15.7833C14.5248 15.7333 14.554 15.665 14.555 15.5935C14.556 15.5218 14.5283 15.4528 14.4783 15.4015C14.4283 15.3503 14.36 15.321 14.2885 15.32C14.2168 15.319 14.1478 15.3468 14.09 15.39C13.9397 15.4979 13.7804 15.5928 13.614 15.6738C13.4476 15.7548 13.2747 15.8216 13.097 15.8735C12.9195 15.9253 12.7378 15.962 12.554 15.9833C12.37 16.0045 12.1848 16.01 12 16C11.8155 16.0083 11.6305 16.0008 11.4473 15.9778C11.264 15.955 11.083 15.9165 10.9063 15.8628C10.7293 15.8093 10.5575 15.7408 10.3923 15.6583C10.227 15.5758 10.069 15.4793 9.92003 15.37C9.86828 15.3275 9.80253 15.3058 9.73553 15.309C9.66853 15.3123 9.60528 15.3405 9.55778 15.3878C9.51053 15.4353 9.48228 15.4985 9.47903 15.5655C9.47578 15.6325 9.49753 15.6983 9.54003 15.75C9.71578 15.8825 9.90253 15.9995 10.0983 16.1C10.294 16.2005 10.4983 16.2838 10.7083 16.3493C10.9183 16.4148 11.1335 16.462 11.3518 16.4908C11.57 16.5193 11.7903 16.529 12.01 16.52C12.2298 16.529 12.45 16.5193 12.6683 16.4908C13.1054 16.4333 13.5294 16.3011 13.9218 16.1C14.1175 15.9995 14.3043 15.8825 14.48 15.75L14.4735 15.7833ZM14.29 14.08C14.4255 14.0815 14.56 14.0553 14.6853 14.0033C14.8105 13.951 14.9238 13.874 15.0183 13.7768C15.1128 13.6795 15.1863 13.564 15.2348 13.4373C15.2833 13.3107 15.3055 13.1755 15.3 13.04C15.3 12.6355 15.0563 12.271 14.6828 12.116C14.309 11.9613 13.879 12.047 13.593 12.333C13.307 12.619 13.2213 13.049 13.376 13.4228C13.531 13.7963 13.8955 14.04 14.3 14.04L14.29 14.08Z\"\n fill=\"white\"\n />\n </>\n);\n\nconst BlackVariant = () => (\n <>\n <path\n d=\"M8.96303 13.707C8.87003 13.6143 8.79653 13.504 8.74603 13.3828C8.69578 13.2613 8.67003 13.1313 8.67003 13C8.67003 12.5955 8.91378 12.231 9.28728 12.076C9.66103 11.9213 10.091 12.007 10.377 12.293C10.663 12.579 10.7488 13.009 10.594 13.3828C10.439 13.7563 10.0745 14 9.67003 14C9.53869 14 9.40864 13.9742 9.28728 13.924C9.16603 13.8735 9.05578 13.8 8.96303 13.707Z\"\n fill=\"black\"\n />\n <path\n d=\"M14.555 15.5935C14.554 15.665 14.5248 15.7333 14.4735 15.7833L14.48 15.75C14.3043 15.8825 14.1175 15.9995 13.9218 16.1C13.5294 16.3011 13.1054 16.4333 12.6683 16.4908C12.45 16.5193 12.2298 16.529 12.01 16.52C11.7903 16.529 11.57 16.5193 11.3518 16.4908C11.1335 16.462 10.9183 16.4148 10.7083 16.3493C10.4983 16.2838 10.294 16.2005 10.0983 16.1C9.90253 15.9995 9.71578 15.8825 9.54003 15.75C9.49753 15.6983 9.47578 15.6325 9.47903 15.5655C9.48228 15.4985 9.51053 15.4353 9.55778 15.3878C9.60528 15.3405 9.66853 15.3123 9.73553 15.309C9.80253 15.3058 9.86828 15.3275 9.92003 15.37C10.069 15.4793 10.227 15.5758 10.3923 15.6583C10.5575 15.7408 10.7293 15.8093 10.9063 15.8628C11.083 15.9165 11.264 15.955 11.4473 15.9778C11.6305 16.0008 11.8155 16.0083 12 16C12.1848 16.01 12.37 16.0045 12.554 15.9833C12.7378 15.962 12.9195 15.9253 13.097 15.8735C13.2747 15.8216 13.4476 15.7548 13.614 15.6738C13.7804 15.5928 13.9397 15.4979 14.09 15.39C14.1478 15.3468 14.2168 15.319 14.2885 15.32C14.36 15.321 14.4283 15.3503 14.4783 15.4015C14.5283 15.4528 14.556 15.5218 14.555 15.5935Z\"\n fill=\"black\"\n />\n <path\n d=\"M14.6853 14.0033C14.56 14.0553 14.4255 14.0815 14.29 14.08L14.3 14.04C13.8955 14.04 13.531 13.7963 13.376 13.4228C13.2213 13.049 13.307 12.619 13.593 12.333C13.879 12.047 14.309 11.9613 14.6828 12.116C15.0563 12.271 15.3 12.6355 15.3 13.04C15.3055 13.1755 15.2833 13.3107 15.2348 13.4373C15.1863 13.564 15.1128 13.6795 15.0183 13.7768C14.9238 13.874 14.8105 13.951 14.6853 14.0033Z\"\n fill=\"black\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12ZM18.619 12.406C18.655 12.2738 18.672 12.137 18.67 12C18.6598 11.7185 18.5683 11.4459 18.4065 11.2153C18.2449 10.9846 18.0199 10.8057 17.7588 10.7C17.4977 10.5943 17.2116 10.5664 16.935 10.6198C16.6585 10.6729 16.4032 10.805 16.2 11C15.9175 10.8079 15.6215 10.6365 15.3143 10.487C14.6992 10.1873 14.0441 9.978 13.3693 9.86551C13.0323 9.80926 12.6915 9.77726 12.35 9.77001L13 6.65001L15.14 7.10001C15.1925 7.58851 15.5923 7.96651 16.083 7.99176C16.5735 8.01701 17.01 7.68201 17.1123 7.20151C17.2148 6.72101 16.9528 6.23726 16.4945 6.06026C16.0363 5.88326 15.5173 6.06526 15.27 6.49001L12.82 6.00001C12.78 5.99126 12.7385 5.99051 12.6983 5.99776C12.6578 6.00526 12.6193 6.02051 12.5848 6.04276C12.5505 6.06501 12.5208 6.09401 12.4978 6.12776C12.4745 6.16176 12.4583 6.19976 12.45 6.24001L11.71 9.71001C11.3643 9.71526 11.0193 9.74551 10.678 9.80076C10.3368 9.85601 9.99978 9.93576 9.67003 10.0398C9.34028 10.1438 9.01853 10.2718 8.70728 10.4223C8.3961 10.573 8.09624 10.746 7.81003 10.94C7.65585 10.795 7.47198 10.6852 7.27117 10.6183C7.07035 10.5514 6.85738 10.5289 6.64703 10.5525C6.4367 10.576 6.234 10.6449 6.05299 10.7546C5.87197 10.8642 5.71699 11.012 5.59878 11.1875C5.48046 11.3631 5.40174 11.5623 5.36807 11.7713C5.3344 11.9803 5.34658 12.1942 5.40378 12.398C5.46107 12.6018 5.56194 12.7906 5.69943 12.9516C5.83691 13.1125 6.00772 13.2416 6.20003 13.33C6.19728 13.3665 6.19503 13.4033 6.19378 13.44C6.19077 13.5133 6.19077 13.5867 6.19378 13.66C6.19503 13.6968 6.19728 13.7335 6.20003 13.77C6.20003 16.01 8.81003 17.83 12.03 17.83C15.25 17.83 17.86 16.01 17.86 13.77C17.8628 13.7335 17.865 13.6968 17.8663 13.66C17.8693 13.5867 17.8693 13.5133 17.8663 13.44C17.865 13.4033 17.8628 13.3665 17.86 13.33C17.9828 13.269 18.0963 13.191 18.1973 13.0983C18.2983 13.0055 18.3858 12.899 18.457 12.782C18.5285 12.665 18.583 12.5383 18.619 12.406Z\"\n fill=\"black\"\n />\n </>\n);\n\nconst WhiteVariant = () => (\n <>\n <path\n d=\"M8.96303 13.707C8.87003 13.6143 8.79653 13.504 8.74603 13.3828C8.69578 13.2613 8.67003 13.1313 8.67003 13C8.67003 12.5955 8.91378 12.231 9.28728 12.076C9.66103 11.9213 10.091 12.007 10.377 12.293C10.663 12.579 10.7488 13.009 10.594 13.3828C10.439 13.7563 10.0745 14 9.67003 14C9.53869 14 9.40864 13.9742 9.28728 13.924C9.16603 13.8735 9.05578 13.8 8.96303 13.707Z\"\n fill=\"white\"\n />\n <path\n d=\"M14.555 15.5935C14.554 15.665 14.5248 15.7333 14.4735 15.7833L14.48 15.75C14.3043 15.8825 14.1175 15.9995 13.9218 16.1C13.5294 16.3011 13.1054 16.4333 12.6683 16.4908C12.45 16.5193 12.2298 16.529 12.01 16.52C11.7903 16.529 11.57 16.5193 11.3518 16.4908C11.1335 16.462 10.9183 16.4148 10.7083 16.3493C10.4983 16.2838 10.294 16.2005 10.0983 16.1C9.90253 15.9995 9.71578 15.8825 9.54003 15.75C9.49753 15.6983 9.47578 15.6325 9.47903 15.5655C9.48228 15.4985 9.51053 15.4353 9.55778 15.3878C9.60528 15.3405 9.66853 15.3123 9.73553 15.309C9.80253 15.3058 9.86828 15.3275 9.92003 15.37C10.069 15.4793 10.227 15.5758 10.3923 15.6583C10.5575 15.7408 10.7293 15.8093 10.9063 15.8628C11.083 15.9165 11.264 15.955 11.4473 15.9778C11.6305 16.0008 11.8155 16.0083 12 16C12.1848 16.01 12.37 16.0045 12.554 15.9833C12.7378 15.962 12.9195 15.9253 13.097 15.8735C13.2747 15.8216 13.4476 15.7548 13.614 15.6738C13.7804 15.5928 13.9397 15.4979 14.09 15.39C14.1478 15.3468 14.2168 15.319 14.2885 15.32C14.36 15.321 14.4283 15.3503 14.4783 15.4015C14.5283 15.4528 14.556 15.5218 14.555 15.5935Z\"\n fill=\"white\"\n />\n <path\n d=\"M14.6853 14.0033C14.56 14.0553 14.4255 14.0815 14.29 14.08L14.3 14.04C13.8955 14.04 13.531 13.7963 13.376 13.4228C13.2213 13.049 13.307 12.619 13.593 12.333C13.879 12.047 14.309 11.9613 14.6828 12.116C15.0563 12.271 15.3 12.6355 15.3 13.04C15.3055 13.1755 15.2833 13.3107 15.2348 13.4373C15.1863 13.564 15.1128 13.6795 15.0183 13.7768C14.9238 13.874 14.8105 13.951 14.6853 14.0033Z\"\n fill=\"white\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12ZM18.619 12.406C18.655 12.2738 18.672 12.137 18.67 12C18.6598 11.7185 18.5683 11.4459 18.4065 11.2153C18.2449 10.9846 18.0199 10.8057 17.7588 10.7C17.4977 10.5943 17.2116 10.5664 16.935 10.6198C16.6585 10.6729 16.4032 10.805 16.2 11C15.9175 10.8079 15.6215 10.6365 15.3143 10.487C14.6992 10.1873 14.0441 9.978 13.3693 9.86551C13.0323 9.80926 12.6915 9.77726 12.35 9.77001L13 6.65001L15.14 7.10001C15.1925 7.58851 15.5923 7.96651 16.083 7.99176C16.5735 8.01701 17.01 7.68201 17.1123 7.20151C17.2148 6.72101 16.9528 6.23726 16.4945 6.06026C16.0363 5.88326 15.5173 6.06526 15.27 6.49001L12.82 6.00001C12.78 5.99126 12.7385 5.99051 12.6983 5.99776C12.6578 6.00526 12.6193 6.02051 12.5848 6.04276C12.5505 6.06501 12.5208 6.09401 12.4978 6.12776C12.4745 6.16176 12.4583 6.19976 12.45 6.24001L11.71 9.71001C11.3643 9.71526 11.0193 9.74551 10.678 9.80076C10.3368 9.85601 9.99978 9.93576 9.67003 10.0398C9.34028 10.1438 9.01853 10.2718 8.70728 10.4223C8.3961 10.573 8.09624 10.746 7.81003 10.94C7.65585 10.795 7.47198 10.6852 7.27117 10.6183C7.07035 10.5514 6.85738 10.5289 6.64703 10.5525C6.4367 10.576 6.234 10.6449 6.05299 10.7546C5.87197 10.8642 5.71699 11.012 5.59878 11.1875C5.48046 11.3631 5.40174 11.5623 5.36807 11.7713C5.3344 11.9803 5.34658 12.1942 5.40378 12.398C5.46107 12.6018 5.56194 12.7906 5.69943 12.9516C5.83691 13.1125 6.00772 13.2416 6.20003 13.33C6.19728 13.3665 6.19503 13.4033 6.19378 13.44C6.19077 13.5133 6.19077 13.5867 6.19378 13.66C6.19503 13.6968 6.19728 13.7335 6.20003 13.77C6.20003 16.01 8.81003 17.83 12.03 17.83C15.25 17.83 17.86 16.01 17.86 13.77C17.8628 13.7335 17.865 13.6968 17.8663 13.66C17.8693 13.5867 17.8693 13.5133 17.8663 13.44C17.865 13.4033 17.8628 13.3665 17.86 13.33C17.9828 13.269 18.0963 13.191 18.1973 13.0983C18.2983 13.0055 18.3858 12.899 18.457 12.782C18.5285 12.665 18.583 12.5383 18.619 12.406Z\"\n fill=\"white\"\n />\n </>\n);\n\nexport function RedditIcon({\n variant = 'colored',\n size = 24,\n className,\n onClick,\n 'aria-label': ariaLabel,\n ...svgProps\n}: RedditIconProps) {\n const role = onClick ? 'button' : 'img';\n const tabIndex = onClick ? 0 : undefined;\n const cursor = onClick ? 'pointer' : undefined;\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (onClick && (e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault();\n onClick();\n }\n };\n\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n onClick={onClick}\n onKeyDown={onClick ? handleKeyDown : undefined}\n role={role}\n tabIndex={tabIndex}\n aria-label={ariaLabel || 'Reddit icon'}\n style={{ cursor, ...svgProps.style }}\n {...svgProps}\n >\n {variant === 'colored' && <ColoredVariant />}\n {variant === 'black' && <BlackVariant />}\n {variant === 'white' && <WhiteVariant />}\n </svg>\n );\n}\n\nRedditIcon.displayName = 'RedditIcon';\n","import type React from 'react';\n\nexport type SlackIconVariant = 'colored' | 'black' | 'white';\n\nexport interface SlackIconProps {\n variant?: SlackIconVariant;\n size?: number;\n className?: string;\n onClick?: (event: React.MouseEvent<SVGSVGElement>) => void;\n 'aria-label'?: string;\n}\n\nconst SlackIconColored: React.FC<Omit<SlackIconProps, 'variant'>> = ({\n size = 24,\n className,\n onClick,\n 'aria-label': ariaLabel,\n}) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n onClick={onClick}\n role={onClick ? 'button' : ariaLabel ? 'img' : 'presentation'}\n aria-label={ariaLabel}\n tabIndex={onClick ? 0 : undefined}\n onKeyDown={\n onClick\n ? (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onClick(e as unknown as React.MouseEvent<SVGSVGElement>);\n }\n }\n : undefined\n }\n >\n <path\n d=\"M6.79552 14.379C6.79552 15.4252 5.95068 16.2707 4.90538 16.2707C3.86007 16.2707 3.01523 15.4252 3.01523 14.379C3.01523 13.3328 3.86007 12.4873 4.90538 12.4873H6.79552V14.379ZM7.74059 14.379C7.74059 13.3328 8.58542 12.4873 9.63073 12.4873C10.676 12.4873 11.5209 13.3328 11.5209 14.379V19.1083C11.5209 20.1545 10.676 21 9.63073 21C8.58542 21 7.74059 20.1545 7.74059 19.1083V14.379Z\"\n fill=\"#DF1D5A\"\n />\n <path\n d=\"M9.62982 6.78342C8.58451 6.78342 7.73967 5.93788 7.73967 4.89171C7.73967 3.84554 8.58451 3 9.62982 3C10.6751 3 11.52 3.84554 11.52 4.89171V6.78342H9.62982ZM9.62982 7.7436C10.6751 7.7436 11.52 8.58914 11.52 9.63531C11.52 10.6815 10.6751 11.527 9.62982 11.527H4.89014C3.84484 11.527 3 10.6815 3 9.63531C3 8.58914 3.84484 7.7436 4.89014 7.7436H9.62982Z\"\n fill=\"#36C5F1\"\n />\n <path\n d=\"M17.2054 9.63531C17.2054 8.58914 18.0502 7.7436 19.0955 7.7436C20.1408 7.7436 20.9857 8.58914 20.9857 9.63531C20.9857 10.6815 20.1408 11.527 19.0955 11.527H17.2054V9.63531ZM16.2603 9.63531C16.2603 10.6815 15.4155 11.527 14.3702 11.527C13.3249 11.527 12.48 10.6815 12.48 9.63531V4.89171C12.48 3.84554 13.3249 3 14.3702 3C15.4155 3 16.2603 3.84554 16.2603 4.89171V9.63531Z\"\n fill=\"#2DB67E\"\n />\n <path\n d=\"M14.3702 17.2166C15.4155 17.2166 16.2603 18.0621 16.2603 19.1083C16.2603 20.1545 15.4155 21 14.3702 21C13.3249 21 12.48 20.1545 12.48 19.1083V17.2166H14.3702ZM14.3702 16.2707C13.3249 16.2707 12.48 15.4252 12.48 14.379C12.48 13.3328 13.3249 12.4873 14.3702 12.4873H19.1099C20.1552 12.4873 21 13.3328 21 14.379C21 15.4252 20.1552 16.2707 19.1099 16.2707H14.3702Z\"\n fill=\"#EBB22D\"\n />\n </svg>\n);\n\nconst SlackIconBlack: React.FC<Omit<SlackIconProps, 'variant'>> = ({\n size = 24,\n className,\n onClick,\n 'aria-label': ariaLabel,\n}) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n onClick={onClick}\n role={onClick ? 'button' : ariaLabel ? 'img' : 'presentation'}\n aria-label={ariaLabel}\n tabIndex={onClick ? 0 : undefined}\n onKeyDown={\n onClick\n ? (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onClick(e as unknown as React.MouseEvent<SVGSVGElement>);\n }\n }\n : undefined\n }\n >\n <path\n d=\"M6.79552 14.379C6.79552 15.4252 5.95068 16.2707 4.90538 16.2707C3.86007 16.2707 3.01523 15.4252 3.01523 14.379C3.01523 13.3328 3.86007 12.4873 4.90538 12.4873H6.79552V14.379ZM7.74059 14.379C7.74059 13.3328 8.58542 12.4873 9.63073 12.4873C10.676 12.4873 11.5209 13.3328 11.5209 14.379V19.1083C11.5209 20.1545 10.676 21 9.63073 21C8.58542 21 7.74059 20.1545 7.74059 19.1083V14.379Z\"\n fill=\"black\"\n />\n <path\n d=\"M9.62982 6.78342C8.58451 6.78342 7.73967 5.93788 7.73967 4.89171C7.73967 3.84554 8.58451 3 9.62982 3C10.6751 3 11.52 3.84554 11.52 4.89171V6.78342H9.62982ZM9.62982 7.7436C10.6751 7.7436 11.52 8.58914 11.52 9.63531C11.52 10.6815 10.6751 11.527 9.62982 11.527H4.89014C3.84484 11.527 3 10.6815 3 9.63531C3 8.58914 3.84484 7.7436 4.89014 7.7436H9.62982Z\"\n fill=\"black\"\n />\n <path\n d=\"M17.2054 9.63531C17.2054 8.58914 18.0502 7.7436 19.0955 7.7436C20.1408 7.7436 20.9857 8.58914 20.9857 9.63531C20.9857 10.6815 20.1408 11.527 19.0955 11.527H17.2054V9.63531ZM16.2603 9.63531C16.2603 10.6815 15.4155 11.527 14.3702 11.527C13.3249 11.527 12.48 10.6815 12.48 9.63531V4.89171C12.48 3.84554 13.3249 3 14.3702 3C15.4155 3 16.2603 3.84554 16.2603 4.89171V9.63531Z\"\n fill=\"black\"\n />\n <path\n d=\"M14.3702 17.2166C15.4155 17.2166 16.2603 18.0621 16.2603 19.1083C16.2603 20.1545 15.4155 21 14.3702 21C13.3249 21 12.48 20.1545 12.48 19.1083V17.2166H14.3702ZM14.3702 16.2707C13.3249 16.2707 12.48 15.4252 12.48 14.379C12.48 13.3328 13.3249 12.4873 14.3702 12.4873H19.1099C20.1552 12.4873 21 13.3328 21 14.379C21 15.4252 20.1552 16.2707 19.1099 16.2707H14.3702Z\"\n fill=\"black\"\n />\n </svg>\n);\n\nconst SlackIconWhite: React.FC<Omit<SlackIconProps, 'variant'>> = ({\n size = 24,\n className,\n onClick,\n 'aria-label': ariaLabel,\n}) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n onClick={onClick}\n role={onClick ? 'button' : ariaLabel ? 'img' : 'presentation'}\n aria-label={ariaLabel}\n tabIndex={onClick ? 0 : undefined}\n onKeyDown={\n onClick\n ? (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onClick(e as unknown as React.MouseEvent<SVGSVGElement>);\n }\n }\n : undefined\n }\n >\n <path\n d=\"M6.79552 14.379C6.79552 15.4252 5.95068 16.2707 4.90538 16.2707C3.86007 16.2707 3.01523 15.4252 3.01523 14.379C3.01523 13.3328 3.86007 12.4873 4.90538 12.4873H6.79552V14.379ZM7.74059 14.379C7.74059 13.3328 8.58542 12.4873 9.63073 12.4873C10.676 12.4873 11.5209 13.3328 11.5209 14.379V19.1083C11.5209 20.1545 10.676 21 9.63073 21C8.58542 21 7.74059 20.1545 7.74059 19.1083V14.379Z\"\n fill=\"white\"\n />\n <path\n d=\"M9.62982 6.78342C8.58451 6.78342 7.73967 5.93788 7.73967 4.89171C7.73967 3.84554 8.58451 3 9.62982 3C10.6751 3 11.52 3.84554 11.52 4.89171V6.78342H9.62982ZM9.62982 7.7436C10.6751 7.7436 11.52 8.58914 11.52 9.63531C11.52 10.6815 10.6751 11.527 9.62982 11.527H4.89014C3.84484 11.527 3 10.6815 3 9.63531C3 8.58914 3.84484 7.7436 4.89014 7.7436H9.62982Z\"\n fill=\"white\"\n />\n <path\n d=\"M17.2054 9.63531C17.2054 8.58914 18.0502 7.7436 19.0955 7.7436C20.1408 7.7436 20.9857 8.58914 20.9857 9.63531C20.9857 10.6815 20.1408 11.527 19.0955 11.527H17.2054V9.63531ZM16.2603 9.63531C16.2603 10.6815 15.4155 11.527 14.3702 11.527C13.3249 11.527 12.48 10.6815 12.48 9.63531V4.89171C12.48 3.84554 13.3249 3 14.3702 3C15.4155 3 16.2603 3.84554 16.2603 4.89171V9.63531Z\"\n fill=\"white\"\n />\n <path\n d=\"M14.3702 17.2166C15.4155 17.2166 16.2603 18.0621 16.2603 19.1083C16.2603 20.1545 15.4155 21 14.3702 21C13.3249 21 12.48 20.1545 12.48 19.1083V17.2166H14.3702ZM14.3702 16.2707C13.3249 16.2707 12.48 15.4252 12.48 14.379C12.48 13.3328 13.3249 12.4873 14.3702 12.4873H19.1099C20.1552 12.4873 21 13.3328 21 14.379C21 15.4252 20.1552 16.2707 19.1099 16.2707H14.3702Z\"\n fill=\"white\"\n />\n </svg>\n);\n\nexport function SlackIcon({\n variant = 'colored',\n size = 24,\n className,\n onClick,\n 'aria-label': ariaLabel = 'Slack icon',\n}: SlackIconProps) {\n const iconProps = {\n size,\n className,\n onClick,\n 'aria-label': ariaLabel,\n };\n\n switch (variant) {\n case 'black':\n return <SlackIconBlack {...iconProps} />;\n case 'white':\n return <SlackIconWhite {...iconProps} />;\n default:\n return <SlackIconColored {...iconProps} />;\n }\n}\n\nSlackIcon.displayName = 'SlackIcon';\n","import { type SVGAttributes, useId } from 'react';\n\nexport type TelegramIconVariant = 'colored' | 'black' | 'white';\n\nexport interface TelegramIconProps extends Omit<SVGAttributes<SVGSVGElement>, 'viewBox' | 'xmlns'> {\n /**\n * Visual variant of the icon\n * - colored: Telegram brand colors (blue gradient)\n * - black: Solid black\n * - white: Solid white\n */\n variant?: TelegramIconVariant;\n /**\n * Size of the icon in pixels\n */\n size?: number;\n /**\n * Additional CSS class name\n */\n className?: string;\n /**\n * Accessible label for the icon\n * Required for interactive icons, optional for decorative\n */\n 'aria-label'?: string;\n /**\n * Whether the icon is decorative (hidden from screen readers)\n */\n 'aria-hidden'?: boolean;\n /**\n * Click handler for interactive icons\n */\n onClick?: () => void;\n}\n\n/**\n * Telegram brand icon component with three variants\n *\n * Features:\n * - Three variants: colored (gradient), black, and white\n * - Customizable size (default 24px)\n * - Accessible with proper ARIA attributes\n * - Works as both decorative and interactive elements\n * - Inline SVG for optimal performance\n *\n * @example\n * // Colored variant (default)\n * <TelegramIcon />\n *\n * @example\n * // Black variant with custom size\n * <TelegramIcon variant=\"black\" size={32} />\n *\n * @example\n * // Interactive icon with click handler\n * <TelegramIcon\n * onClick={handleClick}\n * aria-label=\"Share on Telegram\"\n * style={{ cursor: 'pointer' }}\n * />\n *\n * @example\n * // Decorative icon (hidden from screen readers)\n * <TelegramIcon aria-hidden=\"true\" />\n */\nexport function TelegramIcon({\n variant = 'colored',\n size = 24,\n className,\n 'aria-label': ariaLabel,\n 'aria-hidden': ariaHidden,\n onClick,\n ...svgProps\n}: TelegramIconProps) {\n // Generate unique ID for gradient to avoid conflicts when multiple icons are rendered\n const gradientId = useId();\n\n // Determine if icon is interactive\n const isInteractive = !!onClick;\n\n // Set appropriate ARIA attributes\n const ariaAttributes = {\n 'aria-label': ariaLabel,\n 'aria-hidden': ariaHidden !== undefined ? ariaHidden : !ariaLabel && !isInteractive,\n role: isInteractive ? 'button' : undefined,\n tabIndex: isInteractive ? 0 : undefined,\n };\n\n // Handle keyboard interaction for interactive icons\n const handleKeyDown = (event: React.KeyboardEvent<SVGSVGElement>) => {\n if (isInteractive && (event.key === 'Enter' || event.key === ' ')) {\n event.preventDefault();\n onClick?.();\n }\n };\n\n const commonProps = {\n width: size,\n height: size,\n viewBox: '0 0 20 20',\n fill: 'none',\n xmlns: 'http://www.w3.org/2000/svg',\n className,\n onClick,\n onKeyDown: isInteractive ? handleKeyDown : undefined,\n ...ariaAttributes,\n ...svgProps,\n };\n\n // Colored variant (Telegram brand gradient)\n if (variant === 'colored') {\n return (\n <svg {...commonProps}>\n <path\n d=\"M18 10C18 14.4183 14.4183 18 10 18C5.58172 18 2 14.4183 2 10C2 5.58172 5.58172 2 10 2C14.4183 2 18 5.58172 18 10Z\"\n fill=\"white\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M20 10C20 15.5228 15.5228 20 10 20C4.47715 20 0 15.5228 0 10C0 4.47715 4.47715 0 10 0C15.5228 0 20 4.47715 20 10ZM10.3583 7.38245C9.38569 7.78701 7.44176 8.62434 4.52656 9.89445C4.05318 10.0827 3.8052 10.2669 3.78262 10.4469C3.74447 10.7513 4.12558 10.8711 4.64454 11.0343C4.71513 11.0565 4.78828 11.0795 4.86326 11.1039C5.37385 11.2698 6.06067 11.464 6.41772 11.4717C6.7416 11.4787 7.10309 11.3452 7.50218 11.0711C10.2259 9.23251 11.632 8.30319 11.7202 8.28315C11.7825 8.26902 11.8688 8.25125 11.9273 8.30322C11.9858 8.35519 11.98 8.45361 11.9738 8.48002C11.9361 8.64096 10.4401 10.0318 9.66592 10.7515C9.42457 10.9759 9.25338 11.135 9.21838 11.1714C9.13998 11.2528 9.06009 11.3298 8.9833 11.4039C8.50895 11.8611 8.15324 12.204 9.00299 12.764C9.41134 13.0331 9.7381 13.2556 10.0641 13.4776C10.4201 13.7201 10.7752 13.9619 11.2347 14.2631C11.3517 14.3398 11.4635 14.4195 11.5724 14.4971C11.9867 14.7925 12.3589 15.0579 12.8188 15.0155C13.086 14.991 13.362 14.7397 13.5022 13.9903C13.8335 12.2193 14.4847 8.38206 14.6352 6.80082C14.6483 6.66229 14.6318 6.48499 14.6184 6.40716C14.6051 6.32932 14.5773 6.21843 14.4761 6.13634C14.3563 6.03912 14.1713 6.01862 14.0886 6.02008C13.7125 6.0267 13.1354 6.22736 10.3583 7.38245Z\"\n fill={`url(#${gradientId})`}\n />\n <defs>\n <linearGradient\n id={gradientId}\n x1=\"20\"\n y1=\"-1.19209e-06\"\n x2=\"1.19209e-06\"\n y2=\"20\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#29AAEB\" />\n <stop offset=\"1\" stopColor=\"#23A0DC\" />\n </linearGradient>\n </defs>\n </svg>\n );\n }\n\n // Black variant\n if (variant === 'black') {\n return (\n <svg {...commonProps}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M20 10C20 15.5228 15.5228 20 10 20C4.47715 20 0 15.5228 0 10C0 4.47715 4.47715 0 10 0C15.5228 0 20 4.47715 20 10ZM10.3583 7.38245C9.38569 7.78701 7.44176 8.62434 4.52656 9.89445C4.05318 10.0827 3.8052 10.2669 3.78262 10.4469C3.74447 10.7513 4.12558 10.8711 4.64454 11.0343C4.71513 11.0565 4.78828 11.0795 4.86326 11.1039C5.37385 11.2698 6.06067 11.464 6.41772 11.4717C6.7416 11.4787 7.10309 11.3452 7.50218 11.0711C10.2259 9.23251 11.632 8.30319 11.7202 8.28315C11.7825 8.26902 11.8688 8.25125 11.9273 8.30322C11.9858 8.35519 11.98 8.45361 11.9738 8.48002C11.9361 8.64096 10.4401 10.0318 9.66592 10.7515C9.42457 10.9759 9.25338 11.135 9.21838 11.1714C9.13998 11.2528 9.06009 11.3298 8.9833 11.4039C8.50895 11.8611 8.15324 12.204 9.00299 12.764C9.41134 13.0331 9.7381 13.2556 10.0641 13.4776C10.4201 13.7201 10.7752 13.9619 11.2347 14.2631C11.3517 14.3398 11.4635 14.4195 11.5724 14.4971C11.9867 14.7925 12.3589 15.0579 12.8188 15.0155C13.086 14.991 13.362 14.7397 13.5022 13.9903C13.8335 12.2193 14.4847 8.38206 14.6352 6.80082C14.6483 6.66229 14.6318 6.48499 14.6184 6.40716C14.6051 6.32932 14.5773 6.21843 14.4761 6.13634C14.3563 6.03912 14.1713 6.01862 14.0886 6.02008C13.7125 6.0267 13.1354 6.22736 10.3583 7.38245Z\"\n fill=\"black\"\n />\n </svg>\n );\n }\n\n // White variant\n return (\n <svg {...commonProps}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M20 10C20 15.5228 15.5228 20 10 20C4.47715 20 0 15.5228 0 10C0 4.47715 4.47715 0 10 0C15.5228 0 20 4.47715 20 10ZM10.3583 7.38245C9.38569 7.78701 7.44176 8.62434 4.52656 9.89445C4.05318 10.0827 3.8052 10.2669 3.78262 10.4469C3.74447 10.7513 4.12558 10.8711 4.64454 11.0343C4.71513 11.0565 4.78828 11.0795 4.86326 11.1039C5.37385 11.2698 6.06067 11.464 6.41772 11.4717C6.7416 11.4787 7.10309 11.3452 7.50218 11.0711C10.2259 9.23251 11.632 8.30319 11.7202 8.28315C11.7825 8.26902 11.8688 8.25125 11.9273 8.30322C11.9858 8.35519 11.98 8.45361 11.9738 8.48002C11.9361 8.64096 10.4401 10.0318 9.66592 10.7515C9.42457 10.9759 9.25338 11.135 9.21838 11.1714C9.13998 11.2528 9.06009 11.3298 8.9833 11.4039C8.50895 11.8611 8.15324 12.204 9.00299 12.764C9.41134 13.0331 9.7381 13.2556 10.0641 13.4776C10.4201 13.7201 10.7752 13.9619 11.2347 14.2631C11.3517 14.3398 11.4635 14.4195 11.5724 14.4971C11.9867 14.7925 12.3589 15.0579 12.8188 15.0155C13.086 14.991 13.362 14.7397 13.5022 13.9903C13.8335 12.2193 14.4847 8.38206 14.6352 6.80082C14.6483 6.66229 14.6318 6.48499 14.6184 6.40716C14.6051 6.32932 14.5773 6.21843 14.4761 6.13634C14.3563 6.03912 14.1713 6.01862 14.0886 6.02008C13.7125 6.0267 13.1354 6.22736 10.3583 7.38245Z\"\n fill=\"white\"\n />\n </svg>\n );\n}\n\nTelegramIcon.displayName = 'TelegramIcon';\n","import type { SVGProps } from 'react';\n\nexport type WhatsAppIconVariant = 'colored' | 'black' | 'white';\n\nexport interface WhatsAppIconProps extends Omit<SVGProps<SVGSVGElement>, 'children'> {\n /**\n * Visual variant of the icon\n * - colored: Green WhatsApp brand color (#25D366) on white background\n * - black: Solid black icon\n * - white: Solid white icon\n * @default 'colored'\n */\n variant?: WhatsAppIconVariant;\n /**\n * Size of the icon in pixels\n * @default 24\n */\n size?: number;\n /**\n * Additional CSS class name\n */\n className?: string;\n /**\n * Accessible label for the icon\n * Required for interactive icons, optional for decorative ones\n */\n 'aria-label'?: string;\n /**\n * Whether the icon is decorative only (hidden from screen readers)\n * @default false\n */\n 'aria-hidden'?: boolean;\n /**\n * Click handler for interactive icons\n */\n onClick?: () => void;\n}\n\n/**\n * WhatsApp brand icon component with three visual variants.\n * Built with accessibility in mind - supports both decorative and interactive use cases.\n *\n * @example\n * ```tsx\n * // Decorative icon\n * <WhatsAppIcon variant=\"colored\" aria-hidden />\n *\n * // Interactive icon (button/link)\n * <WhatsAppIcon\n * variant=\"white\"\n * aria-label=\"Share on WhatsApp\"\n * onClick={handleShare}\n * />\n *\n * // Custom size\n * <WhatsAppIcon size={32} variant=\"black\" />\n * ```\n */\nexport function WhatsAppIcon({\n variant = 'colored',\n size = 24,\n className,\n 'aria-label': ariaLabel,\n 'aria-hidden': ariaHidden = false,\n onClick,\n ...svgProps\n}: WhatsAppIconProps) {\n const isInteractive = Boolean(onClick || svgProps.role === 'button');\n\n // Ensure accessibility: interactive icons must have a label\n const finalAriaLabel = isInteractive && !ariaLabel ? 'WhatsApp' : ariaLabel;\n const finalAriaHidden = isInteractive ? false : ariaHidden;\n\n const commonProps: SVGProps<SVGSVGElement> = {\n width: size,\n height: size,\n viewBox: '0 0 24 24',\n fill: 'none',\n xmlns: 'http://www.w3.org/2000/svg',\n className,\n 'aria-label': finalAriaLabel,\n 'aria-hidden': finalAriaHidden,\n onClick,\n role: isInteractive ? 'button' : undefined,\n tabIndex: isInteractive ? 0 : undefined,\n style: {\n cursor: isInteractive ? 'pointer' : undefined,\n ...svgProps.style,\n },\n ...svgProps,\n };\n\n // Colored variant: Green WhatsApp brand color on white background\n if (variant === 'colored') {\n return (\n // biome-ignore lint/a11y/noSvgWithoutTitle: aria-label and aria-hidden are handled via props\n <svg {...commonProps}>\n <path\n d=\"M16.6687 14.01C16.4678 13.9101 15.1616 13.3109 14.9607 13.211C14.7598 13.1111 14.5588 13.1111 14.3579 13.3109C14.157 13.5106 13.7551 14.1099 13.5542 14.3096C13.4536 14.5094 13.2527 14.5094 13.0518 14.4095C12.3484 14.1099 11.6452 13.7104 11.0424 13.211C10.54 12.7116 10.0376 12.1124 9.63577 11.5131C9.53529 11.3134 9.63577 11.1136 9.73623 11.0137C9.8367 10.9138 9.93717 10.7141 10.1381 10.6142C10.2386 10.5144 10.3391 10.3146 10.3391 10.2147C10.4395 10.1149 10.4395 9.91511 10.3391 9.81523C10.2386 9.71535 9.73623 8.51685 9.53529 8.01748C9.43482 7.31835 9.23388 7.31835 9.03294 7.31835C8.93247 7.31835 8.73153 7.31835 8.53059 7.31835C8.32964 7.31835 8.02823 7.51811 7.92776 7.61798C7.32494 8.21722 7.02353 8.91635 7.02353 9.71535C7.124 10.6142 7.42541 11.5131 8.02823 12.3121C9.13341 13.9101 10.54 15.2085 12.248 16.0075C12.7503 16.2073 13.1522 16.407 13.6546 16.5069C14.157 16.7066 14.6592 16.7066 15.2622 16.6067C15.9654 16.5069 16.5682 16.0075 16.9701 15.4083C17.1711 15.0087 17.1711 14.6093 17.0706 14.2097C17.0706 14.2097 16.8696 14.1099 16.6687 14.01ZM19.1805 4.92135C15.2622 1.02622 8.93247 1.02622 5.01412 4.92135C1.79906 8.11735 1.19624 13.0113 3.40659 16.9064L2 22L7.32494 20.6017C8.832 21.4007 10.4395 21.8003 12.0471 21.8003C17.573 21.8003 21.9937 17.4057 21.9937 11.9126C22.0941 9.31585 20.989 6.81898 19.1805 4.92135ZM16.4678 18.9039C15.1616 19.7029 13.6546 20.2023 12.0471 20.2023C10.54 20.2023 9.13341 19.8027 7.8273 19.1036L7.52588 18.9039L4.4113 19.7029L5.21506 16.7066L5.01412 16.407C2.60282 12.412 3.80847 7.41822 7.72682 4.92135C11.6452 2.42447 16.6687 3.72284 19.08 7.51811C21.4913 11.4133 20.3861 16.5069 16.4678 18.9039Z\"\n fill=\"white\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M16.4678 18.9039C15.1616 19.7029 13.6546 20.2023 12.0471 20.2023C10.54 20.2023 9.13341 19.8027 7.8273 19.1036L7.52588 18.9039L4.4113 19.7029L5.21506 16.7066L5.01412 16.407C2.60282 12.412 3.80847 7.41822 7.72682 4.92135C11.6452 2.42447 16.6687 3.72284 19.08 7.51811C21.4913 11.4133 20.3861 16.5069 16.4678 18.9039ZM14.9607 13.211C15.1616 13.3109 16.4678 13.9101 16.6687 14.01C16.8696 14.1099 17.0706 14.2097 17.0706 14.2097C17.1711 14.6093 17.1711 15.0087 16.9701 15.4083C16.5682 16.0075 15.9654 16.5069 15.2622 16.6067C14.6592 16.7066 14.157 16.7066 13.6546 16.5069C13.1522 16.407 12.7503 16.2073 12.248 16.0075C10.54 15.2085 9.13341 13.9101 8.02823 12.3121C7.42541 11.5131 7.124 10.6142 7.02353 9.71535C7.02353 8.91635 7.32494 8.21722 7.92776 7.61798C8.02823 7.51811 8.32964 7.31835 8.53059 7.31835H9.03294C9.23388 7.31835 9.43482 7.31835 9.53529 8.01748C9.73623 8.51685 10.2386 9.71535 10.3391 9.81523C10.4395 9.91511 10.4395 10.1149 10.3391 10.2147C10.3391 10.3146 10.2386 10.5144 10.1381 10.6142C9.93717 10.7141 9.8367 10.9138 9.73623 11.0137C9.63577 11.1136 9.53529 11.3134 9.63577 11.5131C10.0376 12.1124 10.54 12.7116 11.0424 13.211C11.6452 13.7104 12.3484 14.1099 13.0518 14.4095C13.2527 14.5094 13.4536 14.5094 13.5542 14.3096C13.7551 14.1099 14.157 13.5106 14.3579 13.3109C14.5588 13.1111 14.7598 13.1111 14.9607 13.211Z\"\n fill=\"#25D366\"\n />\n </svg>\n );\n }\n\n // Black variant: Solid black icon\n if (variant === 'black') {\n return (\n // biome-ignore lint/a11y/noSvgWithoutTitle: aria-label and aria-hidden are handled via props\n <svg {...commonProps}>\n <path\n d=\"M12.0419 2C6.5529 2 2.08581 6.446 2.08387 11.91C2.08258 13.6573 2.54194 15.3627 3.4129 16.8647L2 22L7.27935 20.622C8.74788 21.4158 10.3808 21.8298 12.0381 21.8287H12.0419C17.531 21.8287 21.9981 17.382 22 11.918C22.0013 9.27133 20.9665 6.78 19.0858 4.90733C17.2058 3.034 14.7058 2.00067 12.0419 2ZM12.0419 20.1547H12.0387C10.5535 20.1547 9.09677 19.7573 7.82581 19.0067L7.52258 18.828L4.39097 19.6453L5.2271 16.6053L5.03032 16.294C4.20381 14.9914 3.76383 13.4676 3.76452 11.91C3.76645 7.368 7.48 3.674 12.0452 3.674C14.2555 3.67467 16.3335 4.53267 17.8968 6.08933C19.46 7.646 20.32 9.716 20.3187 11.9173C20.3168 16.4593 16.6039 20.1547 12.0413 20.1547H12.0419ZM16.5819 13.9847C16.3329 13.8613 15.1097 13.262 14.8813 13.1787C14.6535 13.0967 14.4877 13.054 14.3219 13.302C14.1568 13.55 13.6794 14.108 13.5348 14.2727C13.389 14.438 13.2439 14.458 12.9948 14.3347C12.7458 14.2107 11.9439 13.9493 10.9942 13.1053C10.2542 12.4493 9.75484 11.6387 9.60968 11.39C9.46452 11.1427 9.59419 11.0087 9.71871 10.8853C9.83032 10.7753 9.96774 10.5967 10.0916 10.452C10.2155 10.3073 10.2568 10.204 10.3406 10.0387C10.4232 9.874 10.3819 9.72867 10.3194 9.60533C10.2568 9.48067 9.76 8.262 9.55161 7.76667C9.35032 7.284 9.14516 7.34867 8.99226 7.34067C8.8471 7.334 8.68193 7.332 8.51484 7.332C8.35032 7.332 8.08 7.394 7.85161 7.642C7.62387 7.89 6.98064 8.48867 6.98064 9.70733C6.98064 10.9267 7.87226 12.104 7.99677 12.2693C8.12129 12.434 9.75161 14.936 12.2477 16.0093C12.8413 16.2633 13.3045 16.416 13.6665 16.5307C14.2626 16.7193 14.8052 16.692 15.2335 16.6287C15.711 16.5573 16.7058 16.03 16.9123 15.452C17.12 14.874 17.12 14.378 17.0581 14.2747C16.9974 14.1713 16.831 14.1093 16.5819 13.9847Z\"\n fill=\"black\"\n />\n </svg>\n );\n }\n\n // White variant: Solid white icon\n return (\n // biome-ignore lint/a11y/noSvgWithoutTitle: aria-label and aria-hidden are handled via props\n <svg {...commonProps}>\n <path\n d=\"M12.0419 2C6.5529 2 2.08581 6.446 2.08387 11.91C2.08258 13.6573 2.54194 15.3627 3.4129 16.8647L2 22L7.27935 20.622C8.74788 21.4158 10.3808 21.8298 12.0381 21.8287H12.0419C17.531 21.8287 21.9981 17.382 22 11.918C22.0013 9.27133 20.9665 6.78 19.0858 4.90733C17.2058 3.034 14.7058 2.00067 12.0419 2ZM12.0419 20.1547H12.0387C10.5535 20.1547 9.09677 19.7573 7.82581 19.0067L7.52258 18.828L4.39097 19.6453L5.2271 16.6053L5.03032 16.294C4.20381 14.9914 3.76383 13.4676 3.76452 11.91C3.76645 7.368 7.48 3.674 12.0452 3.674C14.2555 3.67467 16.3335 4.53267 17.8968 6.08933C19.46 7.646 20.32 9.716 20.3187 11.9173C20.3168 16.4593 16.6039 20.1547 12.0413 20.1547H12.0419ZM16.5819 13.9847C16.3329 13.8613 15.1097 13.262 14.8813 13.1787C14.6535 13.0967 14.4877 13.054 14.3219 13.302C14.1568 13.55 13.6794 14.108 13.5348 14.2727C13.389 14.438 13.2439 14.458 12.9948 14.3347C12.7458 14.2107 11.9439 13.9493 10.9942 13.1053C10.2542 12.4493 9.75484 11.6387 9.60968 11.39C9.46452 11.1427 9.59419 11.0087 9.71871 10.8853C9.83032 10.7753 9.96774 10.5967 10.0916 10.452C10.2155 10.3073 10.2568 10.204 10.3406 10.0387C10.4232 9.874 10.3819 9.72867 10.3194 9.60533C10.2568 9.48067 9.76 8.262 9.55161 7.76667C9.35032 7.284 9.14516 7.34867 8.99226 7.34067C8.8471 7.334 8.68193 7.332 8.51484 7.332C8.35032 7.332 8.08 7.394 7.85161 7.642C7.62387 7.89 6.98064 8.48867 6.98064 9.70733C6.98064 10.9267 7.87226 12.104 7.99677 12.2693C8.12129 12.434 9.75161 14.936 12.2477 16.0093C12.8413 16.2633 13.3045 16.416 13.6665 16.5307C14.2626 16.7193 14.8052 16.692 15.2335 16.6287C15.711 16.5573 16.7058 16.03 16.9123 15.452C17.12 14.874 17.12 14.378 17.0581 14.2747C16.9974 14.1713 16.831 14.1093 16.5819 13.9847Z\"\n fill=\"white\"\n />\n </svg>\n );\n}\n\nWhatsAppIcon.displayName = 'WhatsAppIcon';\n","import styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\ninterface StyledXIconProps {\n $isInteractive?: boolean;\n}\n\nexport const StyledXIcon = styled.svg<StyledXIconProps>`\n display: inline-block;\n vertical-align: middle;\n flex-shrink: 0;\n\n ${({ $isInteractive, theme }) =>\n $isInteractive &&\n `\n cursor: pointer;\n transition: opacity 0.2s ease;\n\n &:hover {\n opacity: 0.8;\n }\n\n &:active {\n opacity: 0.6;\n }\n\n &:focus-visible {\n outline: 2px solid ${theme?.colors?.primary ?? '#007bff'};\n outline-offset: 2px;\n border-radius: ${tokens.borderRadius.sm};\n }\n `}\n`;\n","import type React from 'react';\nimport { StyledXIcon } from './XIcon.styles';\n\nexport type XIconVariant = 'colored' | 'black' | 'white';\n\nexport interface XIconProps {\n /**\n * The variant of the X icon to display\n * @default 'colored'\n */\n variant?: XIconVariant;\n /**\n * The size of the icon in pixels\n * @default 24\n */\n size?: number;\n /**\n * Additional CSS class name\n */\n className?: string;\n /**\n * Click handler for interactive icons\n */\n onClick?: (event: React.MouseEvent<SVGSVGElement>) => void;\n /**\n * Accessible label for the icon\n * If not provided and icon is interactive, defaults to \"X (formerly Twitter) icon\"\n */\n 'aria-label'?: string;\n /**\n * Whether the icon is purely decorative (will hide from screen readers)\n * @default false\n */\n decorative?: boolean;\n}\n\n// SVG path data for the X icon (same shape for all variants, only fill changes)\nconst X_PATH =\n 'M13.8593 10.4694L21.135 2.00513H19.4109L13.0935 9.35455L8.0477 2.00513H2.22803L9.85819 13.1188L2.22803 21.9949H3.95223L10.6236 14.2336L15.9523 21.9949H21.772L13.8589 10.4694H13.8593ZM11.4978 13.2167L10.7247 12.11L4.57348 3.30414H7.22176L12.1859 10.4108L12.959 11.5174L19.4117 20.7549H16.7635L11.4978 13.2171V13.2167Z';\n\n/**\n * XIcon component - Displays the X (formerly Twitter) icon with three variants\n *\n * This component renders the X social media icon with support for colored (black),\n * explicit black, and white variants. It's fully accessible and can be used as both\n * a decorative element and an interactive button.\n *\n * @example\n * ```tsx\n * // Colored variant (default, black)\n * <XIcon />\n *\n * // White variant for dark backgrounds\n * <XIcon variant=\"white\" size={32} />\n *\n * // Interactive icon with click handler\n * <XIcon\n * variant=\"colored\"\n * onClick={() => window.open('https://x.com/yourhandle')}\n * aria-label=\"Visit our X profile\"\n * />\n *\n * // Decorative icon (hidden from screen readers)\n * <XIcon decorative />\n * ```\n */\nexport function XIcon({\n variant = 'colored',\n size = 24,\n className,\n onClick,\n 'aria-label': ariaLabel,\n decorative = false,\n}: XIconProps) {\n // Determine the fill color based on variant\n const getFillColor = () => {\n switch (variant) {\n case 'white':\n return 'white';\n case 'black':\n return '#121619';\n default:\n return 'black';\n }\n };\n\n // If interactive but no aria-label provided, use default\n const accessibilityProps = decorative\n ? {\n 'aria-hidden': true,\n role: 'presentation',\n }\n : {\n 'aria-label': ariaLabel || 'X (formerly Twitter) icon',\n role: onClick ? 'button' : 'img',\n };\n\n return (\n <StyledXIcon\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n onClick={onClick}\n $isInteractive={!!onClick}\n {...accessibilityProps}\n >\n <path d={X_PATH} fill={getFillColor()} />\n </StyledXIcon>\n );\n}\n\nXIcon.displayName = 'XIcon';\n","import type React from 'react';\n\nexport type YouTubeIconVariant = 'colored' | 'black' | 'white';\n\nexport interface YouTubeIconProps {\n variant?: YouTubeIconVariant;\n size?: number;\n className?: string;\n onClick?: () => void;\n 'aria-label'?: string;\n}\n\nexport function YouTubeIcon({\n variant = 'colored',\n size = 24,\n className,\n onClick,\n 'aria-label': ariaLabel,\n}: YouTubeIconProps) {\n const role = onClick ? 'button' : 'img';\n const tabIndex = onClick ? 0 : undefined;\n const cursor = onClick ? 'pointer' : undefined;\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (onClick && (e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault();\n onClick();\n }\n };\n\n // Colored variant (red YouTube color)\n if (variant === 'colored') {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n onClick={onClick}\n onKeyDown={handleKeyDown}\n role={role}\n aria-label={ariaLabel || 'YouTube'}\n tabIndex={tabIndex}\n style={{ cursor }}\n >\n <path\n d=\"M21.8008 7.7366C21.8008 7.7366 21.6055 6.26618 21.0039 5.62052C20.2422 4.77076 19.3906 4.76659 19 4.71661C16.2031 4.5 12.0039 4.5 12.0039 4.5H11.9961C11.9961 4.5 7.79688 4.5 5 4.71661C4.60938 4.76659 3.75781 4.77076 2.99609 5.62052C2.39453 6.26618 2.20312 7.7366 2.20312 7.7366C2.20312 7.7366 2 9.46529 2 11.1898V12.806C2 14.5305 2.19922 16.2592 2.19922 16.2592C2.19922 16.2592 2.39453 17.7297 2.99219 18.3753C3.75391 19.2251 4.75391 19.1959 5.19922 19.2876C6.80078 19.45 12 19.5 12 19.5C12 19.5 16.2031 19.4917 19 19.2792C19.3906 19.2292 20.2422 19.2251 21.0039 18.3753C21.6055 17.7297 21.8008 16.2592 21.8008 16.2592C21.8008 16.2592 22 14.5347 22 12.806V11.1898C22 9.46529 21.8008 7.7366 21.8008 7.7366Z\"\n fill=\"white\"\n />\n <path\n d=\"M21.8008 7.7366C21.8008 7.7366 21.6055 6.26618 21.0039 5.62052C20.2422 4.77076 19.3906 4.76659 19 4.71661C16.2031 4.5 12.0039 4.5 12.0039 4.5H11.9961C11.9961 4.5 7.79688 4.5 5 4.71661C4.60938 4.76659 3.75781 4.77076 2.99609 5.62052C2.39453 6.26618 2.20312 7.7366 2.20312 7.7366C2.20312 7.7366 2 9.46529 2 11.1898V12.806C2 14.5305 2.19922 16.2592 2.19922 16.2592C2.19922 16.2592 2.39453 17.7297 2.99219 18.3753C3.75391 19.2251 4.75391 19.1959 5.19922 19.2876C6.80078 19.45 12 19.5 12 19.5C12 19.5 16.2031 19.4917 19 19.2792C19.3906 19.2292 20.2422 19.2251 21.0039 18.3753C21.6055 17.7297 21.8008 16.2592 21.8008 16.2592C21.8008 16.2592 22 14.5347 22 12.806V11.1898C22 9.46529 21.8008 7.7366 21.8008 7.7366ZM9.93359 14.768V8.77381L15.3359 11.7813L9.93359 14.768Z\"\n fill=\"#FE0000\"\n />\n </svg>\n );\n }\n\n // Black variant\n if (variant === 'black') {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n onClick={onClick}\n onKeyDown={handleKeyDown}\n role={role}\n aria-label={ariaLabel || 'YouTube'}\n tabIndex={tabIndex}\n style={{ cursor }}\n >\n <path\n d=\"M21.8008 7.7366C21.8008 7.7366 21.6055 6.26618 21.0039 5.62052C20.2422 4.77076 19.3906 4.76659 19 4.71661C16.2031 4.5 12.0039 4.5 12.0039 4.5H11.9961C11.9961 4.5 7.79688 4.5 5 4.71661C4.60938 4.76659 3.75781 4.77076 2.99609 5.62052C2.39453 6.26618 2.20312 7.7366 2.20312 7.7366C2.20312 7.7366 2 9.46529 2 11.1898V12.806C2 14.5305 2.19922 16.2592 2.19922 16.2592C2.19922 16.2592 2.39453 17.7297 2.99219 18.3753C3.75391 19.2251 4.75391 19.1959 5.19922 19.2876C6.80078 19.45 12 19.5 12 19.5C12 19.5 16.2031 19.4917 19 19.2792C19.3906 19.2292 20.2422 19.2251 21.0039 18.3753C21.6055 17.7297 21.8008 16.2592 21.8008 16.2592C21.8008 16.2592 22 14.5347 22 12.806V11.1898C22 9.46529 21.8008 7.7366 21.8008 7.7366ZM9.93359 14.768V8.77381L15.3359 11.7813L9.93359 14.768Z\"\n fill=\"black\"\n />\n </svg>\n );\n }\n\n // White variant\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n onClick={onClick}\n onKeyDown={handleKeyDown}\n role={role}\n aria-label={ariaLabel || 'YouTube'}\n tabIndex={tabIndex}\n style={{ cursor }}\n >\n <path\n d=\"M21.8008 7.7366C21.8008 7.7366 21.6055 6.26618 21.0039 5.62052C20.2422 4.77076 19.3906 4.76659 19 4.71661C16.2031 4.5 12.0039 4.5 12.0039 4.5H11.9961C11.9961 4.5 7.79688 4.5 5 4.71661C4.60938 4.76659 3.75781 4.77076 2.99609 5.62052C2.39453 6.26618 2.20312 7.7366 2.20312 7.7366C2.20312 7.7366 2 9.46529 2 11.1898V12.806C2 14.5305 2.19922 16.2592 2.19922 16.2592C2.19922 16.2592 2.39453 17.7297 2.99219 18.3753C3.75391 19.2251 4.75391 19.1959 5.19922 19.2876C6.80078 19.45 12 19.5 12 19.5C12 19.5 16.2031 19.4917 19 19.2792C19.3906 19.2292 20.2422 19.2251 21.0039 18.3753C21.6055 17.7297 21.8008 16.2592 21.8008 16.2592C21.8008 16.2592 22 14.5347 22 12.806V11.1898C22 9.46529 21.8008 7.7366 21.8008 7.7366ZM9.93359 14.768V8.77381L15.3359 11.7813L9.93359 14.768Z\"\n fill=\"white\"\n />\n </svg>\n );\n}\n\nYouTubeIcon.displayName = 'YouTubeIcon';\n","/**\n * Social Media Constants\n *\n * Platform configurations and progress category settings.\n */\n\nimport { tokens } from '../../theme/tokens';\nimport { FacebookIcon, InstagramIcon, LinkedInIcon, XIcon, YouTubeIcon } from '../icons';\nimport type { CategoryConfig, Platform, PlatformConfig, ProgressCategory } from './types';\n\n// =============================================================================\n// Platform Configurations\n// =============================================================================\n\nexport const PLATFORM_CONFIGS: Record<Platform, PlatformConfig> = {\n x: {\n icon: <XIcon variant=\"white\" size={20} />,\n color: tokens.colors.text.primary,\n bgColor: tokens.colors.platform.x,\n maxChars: 280,\n name: 'X (Twitter)',\n description: 'Concise, punchy posts with 1-2 hashtags',\n },\n linkedin: {\n icon: <LinkedInIcon variant=\"colored\" size={20} />,\n color: tokens.colors.platform.linkedin,\n bgColor: '#f3f6f8',\n maxChars: 3000,\n name: 'LinkedIn',\n description: 'Professional, thought-leadership content',\n },\n instagram: {\n icon: <InstagramIcon variant=\"colored\" size={20} />,\n color: tokens.colors.platform.instagram,\n bgColor: '#fafafa',\n maxChars: 2200,\n name: 'Instagram',\n description: 'Visual storytelling with 5-10 hashtags',\n },\n facebook: {\n icon: <FacebookIcon variant=\"colored\" size={20} />,\n color: tokens.colors.platform.facebook,\n bgColor: '#f0f2f5',\n maxChars: 63206,\n name: 'Facebook',\n description: 'Conversational, community-focused',\n },\n youtube: {\n icon: <YouTubeIcon variant=\"colored\" size={20} />,\n color: tokens.colors.platform.youtube,\n bgColor: '#f9f9f9',\n maxChars: 5000,\n name: 'YouTube',\n description: 'SEO-friendly descriptions with keywords',\n },\n};\n\n// =============================================================================\n// Progress Category Configurations\n// =============================================================================\n\nexport const CATEGORY_CONFIGS: Record<ProgressCategory, CategoryConfig> = {\n notion: { icon: '\\uD83D\\uDCD3', label: 'Notion', color: 'bg-gray-500' },\n setup: { icon: '\\u2699\\uFE0F', label: 'Setup', color: 'bg-blue-500' },\n integration: {\n icon: '\\uD83D\\uDD17',\n label: 'Connections',\n color: 'bg-purple-500',\n },\n generation: {\n icon: '\\uD83E\\uDD16',\n label: 'Generating',\n color: 'bg-green-500',\n },\n image: { icon: '\\uD83D\\uDDBC\\uFE0F', label: 'Image', color: 'bg-pink-500' },\n scheduling: {\n icon: '\\uD83D\\uDCE4',\n label: 'Scheduling',\n color: 'bg-orange-500',\n },\n completion: {\n icon: '\\u2705',\n label: 'Done',\n color: 'bg-emerald-500',\n },\n processing: {\n icon: '\\u2699\\uFE0F',\n label: 'Processing',\n color: 'bg-blue-500',\n },\n custom: {\n icon: '\\uD83D\\uDD27',\n label: 'Custom',\n color: 'bg-gray-500',\n },\n};\n\n// =============================================================================\n// Helper Functions\n// =============================================================================\n\n/**\n * Categorize a progress message into a ProgressCategory\n * Handles undefined/null message gracefully\n */\nexport function categorizeProgress(message: string | undefined | null): ProgressCategory {\n if (!message) return 'setup';\n if (message.includes('Notion')) return 'notion';\n if (message.includes('prompts') || message.includes('Loading')) return 'setup';\n if (message.includes('accounts') || message.includes('Fetching connected')) return 'integration';\n if (message.includes('Generating') || message.includes('Generated')) return 'generation';\n if (message.toLowerCase().includes('image')) return 'image';\n if (message.includes('Scheduling')) return 'scheduling';\n if (message.includes('updated') || message.includes('Updating')) return 'completion';\n return 'setup';\n}\n\n/**\n * Get the icon for a progress category (with fallback for unknown categories)\n */\nexport function getCategoryIcon(category: ProgressCategory): string {\n return CATEGORY_CONFIGS[category]?.icon ?? '\\u2699\\uFE0F';\n}\n\n/**\n * Get the color class for a progress category (with fallback for unknown categories)\n */\nexport function getCategoryColor(category: ProgressCategory): string {\n return CATEGORY_CONFIGS[category]?.color ?? 'bg-gray-500';\n}\n\n/**\n * Normalize platform name (e.g., 'twitter' -> 'x')\n * Handles undefined/null platform gracefully\n */\nexport function normalizePlatform(platform: string | undefined | null): Platform | null {\n if (!platform) return null;\n const normalized = platform.toLowerCase();\n if (normalized === 'twitter') return 'x';\n if (Object.keys(PLATFORM_CONFIGS).includes(normalized)) {\n return normalized as Platform;\n }\n return null;\n}\n\n/**\n * Calculate character count including hashtags\n */\nexport function getCharacterCount(content: string, hashtags: string[]): number {\n const hashtagString =\n hashtags.length > 0 ? ` ${hashtags.map((h) => `#${h.replace(/^#/, '')}`).join(' ')}` : '';\n return (content + hashtagString).length;\n}\n\n/**\n * Check if content is within platform character limit\n */\nexport function isWithinCharLimit(platform: Platform, characterCount: number): boolean {\n const config = PLATFORM_CONFIGS[platform] || PLATFORM_CONFIGS.x;\n return characterCount <= config.maxChars;\n}\n\n/**\n * Get character limit percentage (for progress bar)\n */\nexport function getCharacterLimitPercentage(platform: Platform, characterCount: number): number {\n const config = PLATFORM_CONFIGS[platform] || PLATFORM_CONFIGS.x;\n return Math.min(100, (characterCount / config.maxChars) * 100);\n}\n\n/**\n * Get color for character limit indicator based on percentage\n */\nexport function getCharacterLimitColor(percentage: number): string {\n if (percentage > 100) return 'bg-red-500';\n if (percentage > 80) return 'bg-yellow-500';\n return 'bg-green-500';\n}\n","/**\n * PostApprovalControls Component\n *\n * Separate component for managing post approval state and actions.\n * Renders as a collapsible card underneath the post preview.\n * Handles: status display, editing, approve/reject actions.\n */\n\nimport type React from 'react';\nimport { useMemo, useState } from 'react';\nimport styled from 'styled-components';\nimport { tokens } from '../../theme/tokens';\nimport { getCharacterLimitColor, getCharacterLimitPercentage, PLATFORM_CONFIGS } from './constants';\nimport type { ApprovalStatus, Platform } from './types';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface PostApprovalControlsProps {\n /** Platform for character limit validation */\n platform: Platform;\n /** Original content from the post */\n originalContent: string;\n /** Previously saved edited content (persisted from onSave) */\n editedContent?: string;\n /** Current approval status */\n status: ApprovalStatus;\n /** Error message if status is 'failed' */\n error?: string;\n /** Post ID if scheduled */\n postId?: string;\n /** Callback when user saves edits (without approving) */\n onSave?: (content: string) => void;\n /** Callback when user approves (receives final content) */\n onApprove: (content: string) => void;\n /** Callback when user rejects */\n onReject: () => void;\n /** Whether actions are disabled (e.g., during API call) */\n isLoading?: boolean;\n /** Initially collapsed state */\n defaultCollapsed?: boolean;\n}\n\n// =============================================================================\n// Status Labels\n// =============================================================================\n\nconst STATUS_CONFIG: Record<ApprovalStatus, { label: string; color: string }> = {\n pending: { label: 'Pending Review', color: tokens.colors.warning },\n edited: { label: 'Edited', color: tokens.colors.accent },\n approved: { label: 'Approved', color: tokens.colors.success },\n scheduling: { label: 'Scheduling...', color: tokens.colors.primary },\n scheduled: { label: 'Scheduled', color: tokens.colors.success },\n rejected: { label: 'Rejected', color: tokens.colors.error },\n failed: { label: 'Failed', color: tokens.colors.error },\n};\n\n// =============================================================================\n// Component\n// =============================================================================\n\nexport const PostApprovalControls: React.FC<PostApprovalControlsProps> = ({\n platform,\n originalContent,\n editedContent,\n status,\n error,\n postId,\n onSave,\n onApprove,\n onReject,\n isLoading = false,\n defaultCollapsed = false,\n}) => {\n const [isCollapsed, setIsCollapsed] = useState(defaultCollapsed);\n const [isEditing, setIsEditing] = useState(false);\n // Use editedContent if available, otherwise originalContent\n const [localEditContent, setLocalEditContent] = useState(editedContent ?? originalContent);\n\n const platformConfig = PLATFORM_CONFIGS[platform];\n const statusConfig = STATUS_CONFIG[status];\n\n // The current content to display (saved edits take precedence)\n const currentContent = editedContent ?? originalContent;\n\n // Character count for editing or display\n const currentCharCount = isEditing ? localEditContent.length : currentContent.length;\n const charPercentage = useMemo(\n () => getCharacterLimitPercentage(platform, currentCharCount),\n [platform, currentCharCount]\n );\n const charLimitColorClass = useMemo(\n () => getCharacterLimitColor(charPercentage),\n [charPercentage]\n );\n\n // Can take action only if pending or edited\n const canTakeAction = status === 'pending' || status === 'edited';\n const isProcessing = status === 'scheduling' || isLoading;\n\n const handleStartEdit = () => {\n // Start editing from current content (edited or original)\n setLocalEditContent(currentContent);\n setIsEditing(true);\n setIsCollapsed(false);\n };\n\n const handleCancelEdit = () => {\n setIsEditing(false);\n // Reset to current saved content\n setLocalEditContent(currentContent);\n };\n\n const handleSave = () => {\n // Save the edited content without approving\n onSave?.(localEditContent);\n setIsEditing(false);\n };\n\n const handleApprove = () => {\n // Approve with either the local edit (if editing) or the current saved content\n onApprove(isEditing ? localEditContent : currentContent);\n setIsEditing(false);\n };\n\n // Check if content has been modified from current saved state\n const hasUnsavedChanges = isEditing && localEditContent !== currentContent;\n\n return (\n <Container data-testid=\"post-approval-controls\">\n {/* Header - always visible */}\n <Header onClick={() => !isEditing && setIsCollapsed(!isCollapsed)}>\n <StatusBadge $color={statusConfig.color}>{statusConfig.label}</StatusBadge>\n <MetaInfo>\n {postId && <PostId>ID: {postId}</PostId>}\n {error && <ErrorText>{error}</ErrorText>}\n </MetaInfo>\n {canTakeAction && !isEditing && (\n <CollapseIcon $collapsed={isCollapsed}>{isCollapsed ? '▸' : '▾'}</CollapseIcon>\n )}\n </Header>\n\n {/* Content - collapsible */}\n {!isCollapsed && canTakeAction && (\n <Content>\n {isEditing ? (\n <>\n <EditSection>\n <EditLabel>\n Edit content\n <CharCount $colorClass={charLimitColorClass}>\n {currentCharCount}/{platformConfig.maxChars}\n </CharCount>\n </EditLabel>\n <EditTextarea\n value={localEditContent}\n onChange={(e) => setLocalEditContent(e.target.value)}\n placeholder=\"Enter your post content...\"\n $platformColor={platformConfig.color}\n disabled={isProcessing}\n />\n <ProgressBar>\n <ProgressFill\n $percentage={Math.min(charPercentage, 100)}\n $colorClass={charLimitColorClass}\n />\n </ProgressBar>\n </EditSection>\n <Actions>\n <ActionButton $variant=\"cancel\" onClick={handleCancelEdit} disabled={isProcessing}>\n Cancel\n </ActionButton>\n {onSave && (\n <ActionButton\n $variant=\"save\"\n onClick={handleSave}\n disabled={isProcessing || charPercentage > 100 || !hasUnsavedChanges}\n >\n {isProcessing ? 'Saving...' : 'Save'}\n </ActionButton>\n )}\n <ActionButton\n $variant=\"approve\"\n onClick={handleApprove}\n disabled={isProcessing || charPercentage > 100}\n >\n {isProcessing ? 'Processing...' : 'Approve'}\n </ActionButton>\n </Actions>\n </>\n ) : (\n <Actions>\n <ActionButton $variant=\"reject\" onClick={onReject} disabled={isProcessing}>\n Reject\n </ActionButton>\n <ActionButton $variant=\"edit\" onClick={handleStartEdit} disabled={isProcessing}>\n Edit\n </ActionButton>\n <ActionButton $variant=\"approve\" onClick={handleApprove} disabled={isProcessing}>\n {isProcessing ? 'Processing...' : 'Approve'}\n </ActionButton>\n </Actions>\n )}\n </Content>\n )}\n </Container>\n );\n};\n\nPostApprovalControls.displayName = 'PostApprovalControls';\n\n// =============================================================================\n// Styled Components\n// =============================================================================\n\nconst Container = styled.div`\n display: grid;\n gap: 0;\n background: ${tokens.colors.background.dark};\n border-radius: ${tokens.borderRadius.lg};\n border: 1px solid ${tokens.colors.border.default};\n overflow: hidden;\n font-family: ${tokens.typography.fontFamily.primary};\n transition: border-color ${tokens.transitions.fast};\n`;\n\nconst Header = styled.div`\n display: grid;\n grid-template-columns: auto 1fr auto;\n align-items: center;\n gap: ${tokens.spacing.sm};\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n cursor: pointer;\n user-select: none;\n transition: background ${tokens.transitions.fast};\n\n &:hover {\n background: ${tokens.colors.background.light};\n }\n`;\n\nconst StatusBadge = styled.span<{ $color: string }>`\n padding: ${tokens.spacing.xs} ${tokens.spacing.sm};\n border-radius: ${tokens.borderRadius.sm};\n font-size: ${tokens.typography.fontSize.xs};\n font-weight: ${tokens.typography.fontWeight.semibold};\n text-transform: uppercase;\n letter-spacing: 0.5px;\n background: ${({ $color }) => `${$color}20`};\n color: ${({ $color }) => $color};\n white-space: nowrap;\n`;\n\nconst MetaInfo = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.sm};\n min-width: 0;\n`;\n\nconst PostId = styled.span`\n font-size: ${tokens.typography.fontSize.xs};\n color: ${tokens.colors.text.tertiary};\n font-family: ${tokens.typography.fontFamily.monospace};\n`;\n\nconst ErrorText = styled.span`\n font-size: ${tokens.typography.fontSize.xs};\n color: ${tokens.colors.error};\n line-height: ${tokens.typography.lineHeight.tight};\n`;\n\nconst CollapseIcon = styled.span<{ $collapsed: boolean }>`\n font-size: ${tokens.typography.fontSize.sm};\n color: ${tokens.colors.text.tertiary};\n font-weight: ${tokens.typography.fontWeight.medium};\n width: 20px;\n height: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n`;\n\nconst Content = styled.div`\n display: grid;\n gap: ${tokens.spacing.md};\n padding: ${tokens.spacing.md};\n border-top: 1px solid ${tokens.colors.border.default};\n`;\n\nconst EditSection = styled.div`\n display: grid;\n gap: ${tokens.spacing.xs};\n`;\n\nconst EditLabel = styled.label`\n display: grid;\n grid-template-columns: 1fr auto;\n align-items: center;\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.text.secondary};\n line-height: ${tokens.typography.lineHeight.tight};\n`;\n\nconst CharCount = styled.span<{ $colorClass: string }>`\n font-size: ${tokens.typography.fontSize.xs};\n font-weight: ${tokens.typography.fontWeight.semibold};\n font-family: ${tokens.typography.fontFamily.monospace};\n color: ${({ $colorClass }) => {\n if ($colorClass.includes('red')) return tokens.colors.error;\n if ($colorClass.includes('yellow')) return tokens.colors.warning;\n return tokens.colors.success;\n }};\n`;\n\nconst EditTextarea = styled.textarea<{ $platformColor: string }>`\n width: 100%;\n min-height: 100px;\n padding: ${tokens.spacing.sm};\n font-size: ${tokens.typography.fontSize.sm};\n font-family: ${tokens.typography.fontFamily.primary};\n line-height: ${tokens.typography.lineHeight.normal};\n color: ${tokens.colors.text.primary};\n background: ${tokens.colors.background.darker};\n border: 1px solid ${tokens.colors.border.default};\n border-radius: ${tokens.borderRadius.md};\n resize: vertical;\n box-sizing: border-box;\n transition: border-color ${tokens.transitions.fast}, box-shadow ${tokens.transitions.fast};\n\n &:focus {\n outline: none;\n border-color: ${({ $platformColor }) => $platformColor};\n box-shadow: 0 0 0 2px ${({ $platformColor }) => `${$platformColor}20`};\n }\n\n &:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n }\n\n &::placeholder {\n color: ${tokens.colors.text.tertiary};\n }\n`;\n\nconst ProgressBar = styled.div`\n width: 100%;\n height: 3px;\n background: ${tokens.colors.border.default};\n border-radius: ${tokens.borderRadius.sm};\n overflow: hidden;\n`;\n\nconst ProgressFill = styled.div<{ $percentage: number; $colorClass: string }>`\n width: ${({ $percentage }) => $percentage}%;\n height: 100%;\n border-radius: ${tokens.borderRadius.sm};\n transition: width ${tokens.transitions.fast};\n background: ${({ $colorClass }) => {\n if ($colorClass.includes('red')) return tokens.colors.error;\n if ($colorClass.includes('yellow')) return tokens.colors.warning;\n return tokens.colors.success;\n }};\n`;\n\nconst Actions = styled.div`\n display: flex;\n gap: ${tokens.spacing.sm};\n justify-content: flex-end;\n`;\n\nconst ActionButton = styled.button<{\n $variant: 'approve' | 'reject' | 'edit' | 'cancel' | 'save';\n}>`\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n border-radius: ${tokens.borderRadius.md};\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.semibold};\n cursor: pointer;\n transition: background ${tokens.transitions.fast}, opacity ${tokens.transitions.fast};\n border: none;\n white-space: nowrap;\n min-width: 90px;\n text-align: center;\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n ${({ $variant }) => {\n switch ($variant) {\n case 'approve':\n return `\n background: ${tokens.colors.success};\n color: ${tokens.colors.background.darker};\n &:hover:not(:disabled) {\n background: ${tokens.colors.success};\n opacity: 0.9;\n }\n `;\n case 'save':\n return `\n background: ${tokens.colors.primary};\n color: ${tokens.colors.text.primary};\n &:hover:not(:disabled) {\n background: ${tokens.colors.primary};\n opacity: 0.9;\n }\n `;\n case 'reject':\n case 'cancel':\n return `\n background: ${tokens.colors.error}15;\n color: ${tokens.colors.error};\n border: 1px solid ${tokens.colors.error}30;\n &:hover:not(:disabled) {\n background: ${tokens.colors.error}25;\n }\n `;\n case 'edit':\n return `\n background: ${tokens.colors.background.light};\n color: ${tokens.colors.text.primary};\n border: 1px solid ${tokens.colors.border.default};\n &:hover:not(:disabled) {\n background: ${tokens.colors.surface.overlay};\n border-color: ${tokens.colors.border.hover};\n }\n `;\n default:\n return '';\n }\n }}\n`;\n\nexport default PostApprovalControls;\n","/**\n * PostPreviewCard Component\n *\n * Displays a preview of a social media post with platform branding.\n * This component is purely for content display - approval controls\n * should use the separate PostApprovalControls component.\n */\n\nimport type React from 'react';\nimport { useMemo } from 'react';\nimport styled, { keyframes } from 'styled-components';\nimport { tokens } from '../../theme/tokens';\nimport { getCharacterLimitColor, getCharacterLimitPercentage, PLATFORM_CONFIGS } from './constants';\nimport type { ProposedPost } from './types';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface PostPreviewCardProps {\n post: ProposedPost;\n isActive?: boolean;\n /** Enable inline editing mode */\n isEditing?: boolean;\n /** Current edited content (controlled) */\n editContent?: string;\n /** Callback when content changes during editing */\n onContentChange?: (content: string) => void;\n /** Show loading skeleton when content is being generated */\n isLoading?: boolean;\n}\n\n// =============================================================================\n// Component\n// =============================================================================\n\nexport const PostPreviewCard: React.FC<PostPreviewCardProps> = ({\n post,\n isActive = false,\n isEditing = false,\n editContent,\n onContentChange,\n isLoading = false,\n}) => {\n const platformConfig = PLATFORM_CONFIGS[post.platform] || PLATFORM_CONFIGS.x;\n\n // Determine if we should show skeleton (loading with no content)\n const showSkeleton = isLoading && !post.content;\n\n // Use editContent if editing, otherwise use post content\n const displayContent = isEditing && editContent !== undefined\n ? editContent\n : (post.editedContent || post.content);\n\n // Character count should reflect current content being displayed\n const currentCharCount = displayContent.length;\n\n const charPercentage = useMemo(\n () => getCharacterLimitPercentage(post.platform, currentCharCount),\n [post.platform, currentCharCount]\n );\n\n const charLimitColorClass = useMemo(\n () => getCharacterLimitColor(charPercentage),\n [charPercentage]\n );\n\n const charCountDisplay = `${currentCharCount}/${platformConfig.maxChars}`;\n\n const handleContentChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n onContentChange?.(e.target.value);\n };\n\n return (\n <CardContainer\n $isActive={isActive}\n $isEditing={isEditing}\n $platformColor={platformConfig.color}\n data-testid=\"post-preview-card\"\n >\n <PlatformHeader $platformColor={platformConfig.color}>\n <PlatformIcon $platformColor={platformConfig.color}>{platformConfig.icon}</PlatformIcon>\n <PlatformName>{platformConfig.name}</PlatformName>\n <CharacterBadge $colorClass={charLimitColorClass}>{charCountDisplay}</CharacterBadge>\n </PlatformHeader>\n\n <ContentSection>\n {showSkeleton ? (\n <SkeletonContent>\n <SkeletonLine $width=\"100%\" />\n <SkeletonLine $width=\"95%\" />\n <SkeletonLine $width=\"88%\" />\n <SkeletonLine $width=\"70%\" />\n </SkeletonContent>\n ) : isEditing ? (\n <PostContentEditable\n value={displayContent}\n onChange={handleContentChange}\n placeholder=\"Enter your post content...\"\n $platformColor={platformConfig.color}\n autoFocus\n />\n ) : (\n <PostContent>{displayContent}</PostContent>\n )}\n\n {!showSkeleton && post.hashtags.length > 0 && (\n <HashtagsContainer>\n {post.hashtags.map((hashtag) => (\n <HashtagPill key={hashtag} $platformColor={platformConfig.color}>\n #{hashtag.replace(/^#/, '')}\n </HashtagPill>\n ))}\n </HashtagsContainer>\n )}\n </ContentSection>\n\n {post.imageUrl ? (\n <ImagePreviewContainer>\n <ImagePreview src={post.imageUrl} alt=\"Post image preview\" />\n </ImagePreviewContainer>\n ) : ['instagram', 'linkedin', 'facebook', 'youtube'].includes(post.platform) && (\n <ImagePlaceholder>\n <PlaceholderIcon>\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" />\n <circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\" />\n <polyline points=\"21 15 16 10 5 21\" />\n </svg>\n </PlaceholderIcon>\n <span>No image attached</span>\n </ImagePlaceholder>\n )}\n\n {/* Character limit progress bar */}\n <ProgressBarContainer>\n <ProgressBarTrack>\n <ProgressBarFill\n $percentage={Math.min(charPercentage, 100)}\n $colorClass={charLimitColorClass}\n />\n </ProgressBarTrack>\n </ProgressBarContainer>\n </CardContainer>\n );\n};\n\nPostPreviewCard.displayName = 'PostPreviewCard';\n\n// =============================================================================\n// Styled Components\n// =============================================================================\n\n// Animation keyframes must be defined before components that use them\nconst fadeIn = keyframes`\n from {\n opacity: 0;\n transform: translate(2px, 2px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n`;\n\nconst CardContainer = styled.div<{\n $isActive: boolean;\n $isEditing: boolean;\n $platformColor: string;\n}>`\n background: ${tokens.colors.background.dark};\n border-radius: ${tokens.borderRadius.xl};\n padding: ${tokens.spacing.md};\n position: relative;\n transition: all ${tokens.transitions.normal};\n border: 1px solid ${({ $isActive, $isEditing, $platformColor }) =>\n $isEditing ? $platformColor : $isActive ? $platformColor : tokens.colors.border.default};\n box-shadow: ${({ $isActive, $isEditing, $platformColor }) =>\n $isEditing\n ? `${tokens.shadows.lg}, 0 0 20px ${$platformColor}40`\n : $isActive\n ? `${tokens.shadows.lg}, 0 0 20px ${$platformColor}33`\n : tokens.shadows.md};\n\n &:hover {\n border-color: ${({ $platformColor }) => `${$platformColor}80`};\n }\n`;\n\nconst PlatformHeader = styled.div<{ $platformColor: string }>`\n display: flex;\n align-items: center;\n gap: 10px;\n margin-bottom: ${tokens.spacing.sm};\n padding-bottom: ${tokens.spacing.sm};\n border-bottom: 1px solid ${tokens.colors.border.default};\n`;\n\nconst PlatformIcon = styled.span<{ $platformColor: string }>`\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border-radius: ${tokens.borderRadius.sm};\n background: ${({ $platformColor }) => `${$platformColor}20`};\n color: ${({ $platformColor }) => $platformColor};\n font-size: ${tokens.typography.fontSize.base};\n font-weight: ${tokens.typography.fontWeight.semibold};\n`;\n\nconst PlatformName = styled.span`\n flex: 1;\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.semibold};\n color: ${tokens.colors.text.primary};\n`;\n\nconst CharacterBadge = styled.span<{ $colorClass: string }>`\n padding: ${tokens.spacing.xs} ${tokens.spacing.sm};\n border-radius: ${tokens.borderRadius.lg};\n font-size: 11px;\n font-weight: ${tokens.typography.fontWeight.semibold};\n color: ${tokens.colors.text.primary};\n background: ${({ $colorClass }) => {\n if ($colorClass.includes('red')) return tokens.colors.error;\n if ($colorClass.includes('yellow')) return tokens.colors.warning;\n return tokens.colors.success;\n }};\n`;\n\nconst ContentSection = styled.div`\n margin-bottom: ${tokens.spacing.sm};\n`;\n\nconst PostContent = styled.div`\n font-size: ${tokens.typography.fontSize.base};\n font-family: ${tokens.typography.fontFamily.primary};\n line-height: 1.6;\n color: ${tokens.colors.text.primary};\n white-space: pre-wrap;\n word-break: break-word;\n margin-bottom: ${tokens.spacing.sm};\n letter-spacing: 0.01em;\n /* Smooth fade-in animation when content appears */\n animation: ${fadeIn} 0.4s ease-out;\n`;\n\nconst PostContentEditable = styled.textarea<{ $platformColor: string }>`\n width: 100%;\n min-height: 180px;\n max-height: 300px;\n font-size: ${tokens.typography.fontSize.base};\n font-family: ${tokens.typography.fontFamily.primary};\n line-height: 1.6;\n color: ${tokens.colors.text.primary};\n background: ${tokens.colors.background.darker};\n border: 1px solid ${tokens.colors.border.default};\n border-radius: ${tokens.borderRadius.sm};\n padding: ${tokens.spacing.md};\n margin-bottom: ${tokens.spacing.sm};\n letter-spacing: 0.01em;\n resize: vertical;\n box-sizing: border-box;\n transition: border-color ${tokens.transitions.fast}, box-shadow ${tokens.transitions.fast};\n overflow-y: auto;\n\n &:focus {\n outline: none;\n border-color: ${({ $platformColor }) => $platformColor};\n box-shadow: 0 0 0 2px ${({ $platformColor }) => `${$platformColor}30`};\n }\n\n &::placeholder {\n color: ${tokens.colors.text.tertiary};\n }\n`;\n\nconst HashtagsContainer = styled.div`\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n`;\n\nconst HashtagPill = styled.span<{ $platformColor: string }>`\n display: inline-block;\n padding: ${tokens.spacing.xs} 10px;\n border-radius: ${tokens.borderRadius.full};\n font-size: ${tokens.typography.fontSize.xs};\n font-weight: ${tokens.typography.fontWeight.medium};\n font-family: ${tokens.typography.fontFamily.primary};\n background: ${tokens.colors.surface.overlay};\n color: ${tokens.colors.accent};\n border: 1px solid ${tokens.colors.border.hover};\n transition: all ${tokens.transitions.normal};\n\n &:hover {\n background: ${tokens.colors.surface.overlayHover};\n color: ${tokens.colors.primary};\n }\n`;\n\nconst ProgressBarContainer = styled.div`\n margin-top: ${tokens.spacing.sm};\n`;\n\nconst ProgressBarTrack = styled.div`\n width: 100%;\n height: 4px;\n background: ${tokens.colors.border.default};\n border-radius: ${tokens.borderRadius.sm};\n overflow: hidden;\n`;\n\nconst ProgressBarFill = styled.div<{\n $percentage: number;\n $colorClass: string;\n}>`\n width: ${({ $percentage }) => $percentage}%;\n height: 100%;\n border-radius: ${tokens.borderRadius.sm};\n transition: width 0.3s ease, background-color 0.3s ease;\n background: ${({ $colorClass }) => {\n if ($colorClass.includes('red')) return tokens.colors.error;\n if ($colorClass.includes('yellow')) return tokens.colors.warning;\n return tokens.colors.success;\n }};\n`;\n\nconst ImagePreviewContainer = styled.div`\n margin-bottom: ${tokens.spacing.sm};\n border-radius: ${tokens.borderRadius.sm};\n overflow: hidden;\n border: 1px solid ${tokens.colors.border.default};\n`;\n\nconst ImagePreview = styled.img`\n width: 100%;\n height: auto;\n max-height: 200px;\n object-fit: cover;\n display: block;\n`;\n\nconst ImagePlaceholder = styled.div`\n width: 100%;\n height: 200px;\n background: linear-gradient(\n 45deg,\n #f09433 0%,\n #e6683c 25%,\n #dc2743 50%,\n #cc2366 75%,\n #bc1888 100%\n );\n border-radius: ${tokens.borderRadius.sm};\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: ${tokens.spacing.sm};\n color: white;\n font-size: ${tokens.typography.fontSize.sm};\n opacity: 0.8;\n margin-bottom: ${tokens.spacing.sm};\n`;\n\nconst PlaceholderIcon = styled.div`\n width: 48px;\n height: 48px;\n border: 2px solid white;\n border-radius: ${tokens.borderRadius.sm};\n display: flex;\n align-items: center;\n justify-content: center;\n\n svg {\n width: 24px;\n height: 24px;\n }\n`;\n\n// =============================================================================\n// Skeleton Loading Styles\n// =============================================================================\n\nconst shimmer = keyframes`\n 0% {\n background-position: -200% 0;\n }\n 100% {\n background-position: 200% 0;\n }\n`;\n\nconst SkeletonContent = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.sm};\n padding: ${tokens.spacing.sm} 0;\n`;\n\nconst SkeletonLine = styled.div<{ $width: string }>`\n height: 16px;\n width: ${({ $width }) => $width};\n background: linear-gradient(\n 90deg,\n ${tokens.colors.border.default} 0%,\n rgba(255, 255, 255, 0.15) 50%,\n ${tokens.colors.border.default} 100%\n );\n background-size: 200% 100%;\n border-radius: ${tokens.borderRadius.sm};\n animation: ${shimmer} 1.5s ease-in-out infinite;\n`;\n\nexport default PostPreviewCard;\n","/**\n * PlatformCarousel Component\n *\n * Displays posts in a tab-based carousel with platform tabs.\n * Features platform-specific styling, navigation dots, and smooth transitions.\n */\n\nimport type React from 'react';\nimport { useCallback, useEffect, useState } from 'react';\nimport styled from 'styled-components';\nimport { tokens } from '../../theme/tokens';\nimport { normalizePlatform, PLATFORM_CONFIGS } from './constants';\nimport { PostPreviewCard } from './PostPreviewCard';\nimport type { ProposedPost } from './types';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface PlatformCarouselProps {\n posts: ProposedPost[];\n onActiveChange?: (index: number) => void;\n /** Index of the post currently being edited (-1 or undefined = no editing) */\n editingIndex?: number;\n /** Content of the post being edited */\n editContent?: string;\n /** Callback when edit content changes */\n onEditContentChange?: (content: string) => void;\n /** Whether content is being loaded/generated */\n isLoading?: boolean;\n}\n\n// =============================================================================\n// Component\n// =============================================================================\n\nexport const PlatformCarousel: React.FC<PlatformCarouselProps> = ({\n posts,\n onActiveChange,\n editingIndex,\n editContent,\n onEditContentChange,\n isLoading = false,\n}) => {\n const [activeIndex, setActiveIndex] = useState(0);\n\n useEffect(() => {\n if (activeIndex >= posts.length && posts.length > 0) {\n setActiveIndex(0);\n }\n }, [posts.length, activeIndex]);\n\n const handleTabClick = useCallback(\n (index: number) => {\n setActiveIndex(index);\n onActiveChange?.(index);\n },\n [onActiveChange]\n );\n\n if (posts.length === 0) {\n return (\n <CarouselContainer>\n <EmptyState>No posts available</EmptyState>\n </CarouselContainer>\n );\n }\n\n // Default config for unknown platforms\n const defaultConfig = {\n icon: null,\n color: tokens.colors.text.secondary,\n bgColor: tokens.colors.background.light,\n maxChars: 1000,\n name: 'Unknown',\n description: 'Unknown platform',\n };\n\n // Get normalized platform config, with fallback for unknown platforms\n const getConfig = (platform: string) => {\n const normalized = normalizePlatform(platform);\n return normalized ? PLATFORM_CONFIGS[normalized] : defaultConfig;\n };\n\n return (\n <CarouselContainer>\n <TabsContainer>\n {posts.map((post, index) => {\n const config = getConfig(post.platform);\n const isActive = index === activeIndex;\n\n return (\n <PlatformTab\n key={`${post.platform}-${index}`}\n $isActive={isActive}\n $platformColor={config.color}\n onClick={() => handleTabClick(index)}\n aria-selected={isActive}\n role=\"tab\"\n >\n <PlatformIcon $platformColor={config.color} $isActive={isActive}>\n {config.icon}\n </PlatformIcon>\n {config.name}\n </PlatformTab>\n );\n })}\n </TabsContainer>\n\n <ContentContainer>\n {posts.map((post, index) => {\n const isEditing = editingIndex === index;\n return (\n <Slide key={`slide-${post.platform}-${index}`} $isActive={index === activeIndex}>\n <PostPreviewCard\n post={post}\n isActive={index === activeIndex}\n isEditing={isEditing}\n editContent={isEditing ? editContent : undefined}\n onContentChange={isEditing ? onEditContentChange : undefined}\n isLoading={isLoading}\n />\n </Slide>\n );\n })}\n </ContentContainer>\n\n {posts.length > 1 && (\n <NavigationDotsContainer>\n {posts.map((post, index) => {\n const config = getConfig(post.platform);\n return (\n <NavigationDot\n key={`dot-${post.platform}-${index}`}\n $isActive={index === activeIndex}\n $platformColor={config.color}\n onClick={() => handleTabClick(index)}\n aria-label={`Go to ${config.name} post`}\n />\n );\n })}\n </NavigationDotsContainer>\n )}\n </CarouselContainer>\n );\n};\n\nPlatformCarousel.displayName = 'PlatformCarousel';\n\n// =============================================================================\n// Styled Components\n// =============================================================================\n\nconst CarouselContainer = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n gap: ${tokens.spacing.md};\n`;\n\nconst TabsContainer = styled.div`\n display: flex;\n gap: ${tokens.spacing.sm};\n padding: ${tokens.spacing.sm};\n background: ${tokens.colors.backdrop};\n border-radius: ${tokens.borderRadius.lg};\n overflow-x: auto;\n scrollbar-width: none;\n -ms-overflow-style: none;\n\n &::-webkit-scrollbar {\n display: none;\n }\n`;\n\nconst PlatformTab = styled.button<{ $isActive: boolean; $platformColor: string }>`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n padding: ${tokens.spacing.sm} ${tokens.spacing.sm};\n border: 2px solid ${({ $isActive, $platformColor }) =>\n $isActive ? $platformColor : 'transparent'};\n border-radius: ${tokens.borderRadius.md};\n background: ${({ $isActive }) =>\n $isActive ? tokens.colors.background.darker : tokens.colors.background.light};\n color: ${({ $isActive }) =>\n $isActive ? tokens.colors.text.primary : tokens.colors.text.secondary};\n font-family: inherit;\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.medium};\n cursor: pointer;\n transition: all ${tokens.transitions.fast};\n white-space: nowrap;\n flex-shrink: 0;\n\n &:hover {\n background: ${({ $isActive }) =>\n $isActive ? tokens.colors.background.darker : tokens.colors.surface.overlayHover};\n }\n\n &:focus {\n outline: none;\n box-shadow: 0 0 0 2px ${({ $platformColor }) => $platformColor}40;\n }\n`;\n\nconst PlatformIcon = styled.span<{ $platformColor: string; $isActive: boolean }>`\n font-size: ${tokens.typography.fontSize.base};\n color: ${({ $platformColor }) => $platformColor};\n transition: color ${tokens.transitions.fast};\n`;\n\nconst ContentContainer = styled.div`\n position: relative;\n min-height: 200px;\n overflow: hidden;\n /* Padding to prevent card borders/shadows from being clipped */\n padding: 0 ${tokens.spacing.xs};\n margin: 0 -${tokens.spacing.xs};\n`;\n\nconst Slide = styled.div<{ $isActive: boolean }>`\n position: ${({ $isActive }) => ($isActive ? 'relative' : 'absolute')};\n top: 0;\n left: 0;\n width: 100%;\n opacity: ${({ $isActive }) => ($isActive ? 1 : 0)};\n transform: ${({ $isActive }) => ($isActive ? 'translateX(0)' : 'translateX(20px)')};\n transition: opacity ${tokens.animation.duration.short} ${tokens.animation.easing.smooth},\n transform ${tokens.animation.duration.short} ${tokens.animation.easing.smooth};\n pointer-events: ${({ $isActive }) => ($isActive ? 'auto' : 'none')};\n`;\n\nconst NavigationDotsContainer = styled.div`\n display: flex;\n justify-content: center;\n gap: ${tokens.spacing.xs};\n padding: ${tokens.spacing.sm};\n`;\n\nconst NavigationDot = styled.button<{ $isActive: boolean; $platformColor: string }>`\n width: ${tokens.spacing.sm};\n height: ${tokens.spacing.sm};\n border-radius: ${tokens.borderRadius.full};\n border: none;\n padding: 0;\n cursor: pointer;\n background: ${({ $isActive, $platformColor }) =>\n $isActive ? $platformColor : tokens.colors.background.light};\n transition: all ${tokens.transitions.fast};\n\n &:hover {\n background: ${({ $isActive, $platformColor }) =>\n $isActive ? $platformColor : `${$platformColor}80`};\n transform: scale(1.2);\n }\n\n &:focus {\n outline: none;\n box-shadow: 0 0 0 2px ${({ $platformColor }) => $platformColor}40;\n }\n`;\n\nconst EmptyState = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 200px;\n color: ${tokens.colors.text.tertiary};\n font-family: inherit;\n font-size: ${tokens.typography.fontSize.sm};\n`;\n\nexport default PlatformCarousel;\n","/**\n * PlatformGrid Component\n *\n * Displays all posts in a responsive grid layout.\n * Uses CSS Grid with responsive breakpoints for different screen sizes.\n */\n\nimport type React from 'react';\nimport styled from 'styled-components';\nimport { tokens } from '../../theme/tokens';\nimport { PostPreviewCard } from './PostPreviewCard';\nimport type { ProposedPost } from './types';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface PlatformGridProps {\n posts: ProposedPost[];\n /** Index of the post currently being edited (-1 or undefined = no editing) */\n editingIndex?: number;\n /** Content of the post being edited */\n editContent?: string;\n /** Callback when edit content changes */\n onEditContentChange?: (content: string) => void;\n /** Whether content is being loaded/generated */\n isLoading?: boolean;\n /** Currently active/selected post index */\n activeIndex?: number;\n /** Callback when a post is clicked/selected */\n onActiveChange?: (index: number) => void;\n}\n\n// =============================================================================\n// Component\n// =============================================================================\n\n/**\n * PlatformGrid displays all proposed posts in a responsive grid layout.\n *\n * Responsive behavior:\n * - 1 column on mobile (< 640px)\n * - 2 columns on tablet (640px - 1024px)\n * - 3 columns on desktop (> 1024px)\n */\nexport const PlatformGrid: React.FC<PlatformGridProps> = ({\n posts,\n editingIndex,\n editContent,\n onEditContentChange,\n isLoading = false,\n activeIndex = 0,\n onActiveChange,\n}) => {\n if (posts.length === 0) {\n return (\n <EmptyState>\n <EmptyStateText>No posts to display</EmptyStateText>\n </EmptyState>\n );\n }\n\n const handlePostClick = (index: number) => {\n onActiveChange?.(index);\n };\n\n return (\n <Grid data-testid=\"platform-grid\">\n {posts.map((post, index) => {\n const isEditing = editingIndex === index;\n const isActive = activeIndex === index;\n return (\n <GridCell\n key={post.platform}\n $isActive={isActive}\n onClick={() => handlePostClick(index)}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handlePostClick(index);\n }\n }}\n >\n <PostPreviewCard\n post={post}\n isActive={isActive}\n isEditing={isEditing}\n editContent={isEditing ? editContent : undefined}\n onContentChange={isEditing ? onEditContentChange : undefined}\n isLoading={isLoading}\n />\n </GridCell>\n );\n })}\n </Grid>\n );\n};\n\nPlatformGrid.displayName = 'PlatformGrid';\n\n// =============================================================================\n// Styled Components\n// =============================================================================\n\nconst Grid = styled.div`\n display: grid;\n gap: ${tokens.spacing.md};\n width: 100%;\n\n /* Mobile: 1 column */\n grid-template-columns: 1fr;\n\n /* Tablet: 2 columns (640px - 1024px) */\n @media (min-width: ${tokens.breakpoints.mobile}px) {\n grid-template-columns: repeat(2, 1fr);\n }\n\n /* Desktop: 3 columns (> 1024px) */\n @media (min-width: ${tokens.breakpoints.tablet}px) {\n grid-template-columns: repeat(3, 1fr);\n }\n`;\n\nconst GridCell = styled.div<{ $isActive?: boolean }>`\n min-width: 0; /* Prevent grid blowout with long content */\n cursor: pointer;\n border-radius: ${tokens.borderRadius.lg};\n transition: transform ${tokens.transitions.fast};\n\n &:hover {\n transform: translateY(-2px);\n }\n`;\n\nconst EmptyState = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n padding: ${tokens.spacing.xl};\n background: ${tokens.colors.backdrop};\n border: 1px dashed ${tokens.colors.border.hover};\n border-radius: ${tokens.borderRadius.lg};\n`;\n\nconst EmptyStateText = styled.p`\n margin: 0;\n font-size: ${tokens.typography.fontSize.sm};\n color: ${tokens.colors.text.tertiary};\n`;\n\nexport default PlatformGrid;\n","/**\n * SocialMediaCanvas Component\n *\n * Container for displaying social media post previews.\n * Supports carousel and grid view modes with a toggle.\n */\n\nimport type React from 'react';\nimport { useState } from 'react';\nimport styled from 'styled-components';\nimport { tokens } from '../../theme/tokens';\nimport { PlatformCarousel } from './PlatformCarousel';\nimport { PlatformGrid } from './PlatformGrid';\nimport type { ProposedPost } from './types';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface SocialMediaCanvasProps {\n /** Posts to display */\n posts: ProposedPost[];\n /** Initial view mode */\n viewMode?: 'carousel' | 'grid';\n /** Title to display in header */\n title?: string;\n /** Empty state title */\n emptyTitle?: string;\n /** Empty state description */\n emptyDescription?: string;\n /** Callback when active post changes */\n onActiveChange?: (index: number) => void;\n /** Whether to show the view mode toggle */\n showViewToggle?: boolean;\n /** Index of the post currently being edited (-1 or undefined = no editing) */\n editingIndex?: number;\n /** Content of the post being edited */\n editContent?: string;\n /** Callback when edit content changes */\n onEditContentChange?: (content: string) => void;\n /** Whether content is being loaded/generated */\n isLoading?: boolean;\n /** Currently active post index (for grid mode) */\n activeIndex?: number;\n}\n\n// =============================================================================\n// Styled Components\n// =============================================================================\n\nconst Container = styled.div`\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 100%;\n padding: 0;\n box-sizing: border-box;\n background: linear-gradient(\n 180deg,\n ${tokens.colors.backdrop} 0%,\n ${tokens.colors.background.light} 100%\n );\n overflow: auto;\n`;\n\nconst Header = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: ${tokens.spacing.sm};\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n position: relative;\n z-index: 1;\n background: ${tokens.colors.backdrop};\n\n /* Gradient fade from solid to transparent (blends into content below) */\n &::after {\n content: '';\n position: absolute;\n left: 0;\n right: 0;\n top: 100%;\n height: 16px;\n background: linear-gradient(\n to bottom,\n ${tokens.colors.backdrop} 0%,\n transparent 100%\n );\n pointer-events: none;\n }\n`;\n\nconst Title = styled.h2`\n margin: 0;\n font-size: ${tokens.typography.fontSize.base};\n font-weight: ${tokens.typography.fontWeight.semibold};\n color: ${tokens.colors.text.primary};\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n min-width: 0;\n`;\n\nconst ViewToggle = styled.div`\n display: flex;\n gap: ${tokens.spacing.xs};\n flex-shrink: 0;\n`;\n\nconst ToggleButton = styled.button<{ $active: boolean }>`\n padding: ${tokens.spacing.xs};\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n border-radius: ${tokens.borderRadius.md};\n cursor: pointer;\n transition: all ${tokens.transitions.fast};\n background: ${({ $active }) =>\n $active ? `${tokens.colors.primary}33` : tokens.colors.surface.overlay};\n color: ${({ $active }) => ($active ? tokens.colors.primary : tokens.colors.text.secondary)};\n border: 1px solid\n ${({ $active }) => ($active ? tokens.colors.primary : tokens.colors.border.default)};\n /* Remove mobile tap highlight */\n -webkit-tap-highlight-color: transparent;\n\n svg {\n width: 18px;\n height: 18px;\n fill: currentColor;\n }\n\n &:hover {\n background: ${({ $active }) =>\n $active ? `${tokens.colors.primary}4D` : tokens.colors.surface.overlayHover};\n }\n`;\n\nconst Content = styled.div`\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow-x: hidden;\n overflow-y: auto;\n /* Extra top padding to account for header fade overlay */\n padding-top: ${tokens.spacing.md};\n`;\n\nconst EmptyState = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n color: ${tokens.colors.text.tertiary};\n text-align: center;\n padding: ${tokens.spacing.xl};\n\n svg {\n width: ${tokens.spacing['3xl']};\n height: ${tokens.spacing['3xl']};\n margin-bottom: ${tokens.spacing.md};\n opacity: 0.5;\n }\n\n h3 {\n margin: 0 0 ${tokens.spacing.sm};\n font-size: ${tokens.typography.fontSize.base};\n color: ${tokens.colors.text.secondary};\n }\n\n p {\n margin: 0;\n font-size: ${tokens.typography.fontSize.sm};\n }\n`;\n\nconst PostCount = styled.span`\n font-size: ${tokens.typography.fontSize.sm};\n color: ${tokens.colors.text.tertiary};\n font-weight: ${tokens.typography.fontWeight.regular};\n`;\n\n// Empty state icon\nconst EmptyIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <title>No posts</title>\n <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V5h14v14zm-7-2h2v-4h4v-2h-4V7h-2v4H8v2h4z\" />\n </svg>\n);\n\n// =============================================================================\n// Component\n// =============================================================================\n\n/**\n * SocialMediaCanvas displays social media post previews in carousel or grid mode.\n *\n * @example\n * ```tsx\n * <SocialMediaCanvas\n * posts={posts}\n * viewMode=\"carousel\"\n * title=\"Generated Posts\"\n * onActiveChange={(index) => console.log('Active:', index)}\n * />\n * ```\n */\nexport const SocialMediaCanvas: React.FC<SocialMediaCanvasProps> = ({\n posts,\n viewMode: initialViewMode = 'carousel',\n title = 'Generated Posts',\n emptyTitle = 'No Posts Yet',\n emptyDescription = 'Generate social media posts to see them here.',\n onActiveChange,\n showViewToggle = true,\n editingIndex,\n editContent,\n onEditContentChange,\n isLoading = false,\n activeIndex = 0,\n}) => {\n const [viewMode, setViewMode] = useState<'carousel' | 'grid'>(initialViewMode);\n\n // Handle active post change in carousel\n const handleActiveChange = (index: number) => {\n onActiveChange?.(index);\n };\n\n // If no posts, show empty state\n if (posts.length === 0) {\n return (\n <Container>\n <EmptyState>\n <EmptyIcon />\n <h3>{emptyTitle}</h3>\n <p>{emptyDescription}</p>\n </EmptyState>\n </Container>\n );\n }\n\n return (\n <Container>\n <Header>\n <Title>\n {title} <PostCount>({posts.length})</PostCount>\n </Title>\n {showViewToggle && (\n <ViewToggle>\n <ToggleButton\n $active={viewMode === 'carousel'}\n onClick={() => setViewMode('carousel')}\n type=\"button\"\n aria-label=\"Carousel view\"\n title=\"Carousel view\"\n >\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path d=\"M2 6h4v12H2V6zm7 0h6v12H9V6zm9 0h4v12h-4V6z\" />\n </svg>\n </ToggleButton>\n <ToggleButton\n $active={viewMode === 'grid'}\n onClick={() => setViewMode('grid')}\n type=\"button\"\n aria-label=\"Grid view\"\n title=\"Grid view\"\n >\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path d=\"M3 3h8v8H3V3zm10 0h8v8h-8V3zM3 13h8v8H3v-8zm10 0h8v8h-8v-8z\" />\n </svg>\n </ToggleButton>\n </ViewToggle>\n )}\n </Header>\n <Content>\n {viewMode === 'carousel' ? (\n <PlatformCarousel\n posts={posts}\n onActiveChange={handleActiveChange}\n editingIndex={editingIndex}\n editContent={editContent}\n onEditContentChange={onEditContentChange}\n isLoading={isLoading}\n />\n ) : (\n <PlatformGrid\n posts={posts}\n editingIndex={editingIndex}\n editContent={editContent}\n onEditContentChange={onEditContentChange}\n isLoading={isLoading}\n activeIndex={activeIndex}\n onActiveChange={handleActiveChange}\n />\n )}\n </Content>\n </Container>\n );\n};\n\nSocialMediaCanvas.displayName = 'SocialMediaCanvas';\n","/**\n * Reddit Engagement Constants\n *\n * Configuration values and helper functions for Reddit GEO engagement components.\n * Uses existing tokens import from theme.\n */\n\nimport { tokens } from '../../theme/tokens';\nimport type { EngagementStatus, ReplyTone } from './redditEngagementTypes';\n\n// =============================================================================\n// Re-export tokens for component use\n// =============================================================================\n\nexport { tokens };\n\n// =============================================================================\n// Reddit-specific Colors\n// =============================================================================\n\nexport const REDDIT_COLORS = {\n orange: tokens.colors.platform.reddit,\n orangeLight: '#FF5722',\n orangeDark: '#E64A19',\n blue: '#0079D3',\n blueLight: '#1E88E5',\n darkGray: tokens.colors.background.darker,\n lightGray: '#DAE0E6',\n};\n\n// =============================================================================\n// Engagement Score Configuration\n// =============================================================================\n\nexport const SCORE_THRESHOLDS = {\n excellent: { min: 8, max: 10, label: 'Excellent', color: tokens.colors.success },\n good: { min: 6, max: 7, label: 'Good', color: tokens.colors.info },\n moderate: { min: 4, max: 5, label: 'Moderate', color: tokens.colors.warning },\n low: { min: 1, max: 3, label: 'Low', color: tokens.colors.error },\n};\n\nexport function getScoreConfig(score: number) {\n if (score >= 8) return SCORE_THRESHOLDS.excellent;\n if (score >= 6) return SCORE_THRESHOLDS.good;\n if (score >= 4) return SCORE_THRESHOLDS.moderate;\n return SCORE_THRESHOLDS.low;\n}\n\nexport function getScoreColor(score: number): string {\n return getScoreConfig(score).color;\n}\n\nexport function getScoreLabel(score: number): string {\n return getScoreConfig(score).label;\n}\n\n// =============================================================================\n// Tone Configuration\n// =============================================================================\n\nexport const TONE_CONFIG: Record<\n ReplyTone,\n { label: string; color: string; icon: string; description: string }\n> = {\n casual: {\n label: 'Casual',\n color: tokens.colors.accent,\n icon: '/assets/icon-set/Icon-chat-1-fill.svg',\n description: 'Friendly, conversational tone',\n },\n professional: {\n label: 'Professional',\n color: tokens.colors.info,\n icon: '/assets/icon-set/Icon-briefcase-fill.svg',\n description: 'Business-appropriate, formal tone',\n },\n technical: {\n label: 'Technical',\n color: tokens.colors.secondary,\n icon: '/assets/icon-set/Icon-settings-3-fill.svg',\n description: 'Detail-oriented, expert tone',\n },\n supportive: {\n label: 'Supportive',\n color: tokens.colors.success,\n icon: '/assets/icon-set/Icon-p2p-fill.svg',\n description: 'Empathetic, helpful tone',\n },\n humorous: {\n label: 'Humorous',\n color: tokens.colors.warning,\n icon: '/assets/icon-set/Icon-emotion-happy-fill.svg',\n description: 'Light-hearted, witty tone',\n },\n};\n\nexport function getToneConfig(tone: ReplyTone) {\n return (\n TONE_CONFIG[tone] ?? {\n label: tone || 'Unknown',\n color: tokens.colors.text.secondary,\n icon: '/assets/icon-set/Icon-chat-1-fill.svg',\n description: 'Unknown tone',\n }\n );\n}\n\n// =============================================================================\n// Status Configuration\n// =============================================================================\n\nexport const STATUS_CONFIG: Record<\n EngagementStatus,\n { label: string; color: string; icon: string }\n> = {\n pending: {\n label: 'Pending',\n color: tokens.colors.warning,\n icon: '/assets/icon-set/Icon-time-fill.svg',\n },\n posted: {\n label: 'Posted',\n color: tokens.colors.success,\n icon: '/assets/icon-set/Icon-check-fill.svg',\n },\n skipped: {\n label: 'Skipped',\n color: tokens.colors.text.tertiary,\n icon: '/assets/icon-set/Icon-skip-forward-fill.svg',\n },\n expired: {\n label: 'Expired',\n color: tokens.colors.error,\n icon: '/assets/icon-set/Icon-hourglass-line.svg',\n },\n editing: {\n label: 'Editing',\n color: tokens.colors.info,\n icon: '/assets/icon-set/Icon-edit-fill.svg',\n },\n};\n\nexport function getStatusConfig(status: EngagementStatus) {\n return (\n STATUS_CONFIG[status] ?? {\n label: status || 'Unknown',\n color: tokens.colors.text.tertiary,\n icon: '/assets/icon-set/Icon-question-mark.svg',\n }\n );\n}\n\n// =============================================================================\n// Reddit Character Limits\n// =============================================================================\n\nexport const REDDIT_LIMITS = {\n comment: 10000,\n postTitle: 300,\n postBody: 40000,\n};\n\nexport function getRedditCharPercentage(\n current: number,\n max: number = REDDIT_LIMITS.comment\n): number {\n return Math.min(100, (current / max) * 100);\n}\n\nexport function getRedditCharLimitColor(percentage: number): string {\n if (percentage > 100) return tokens.colors.error;\n if (percentage > 90) return tokens.colors.warning;\n if (percentage > 75) return tokens.colors.warning;\n return tokens.colors.success;\n}\n\n// =============================================================================\n// Subreddit Colors\n// =============================================================================\n\nconst SUBREDDIT_COLORS: Record<string, string> = {\n automation: tokens.colors.info,\n n8n: tokens.colors.platform.reddit,\n nocode: tokens.colors.success,\n smallbusiness: tokens.colors.warning,\n entrepreneur: tokens.colors.accent,\n saas: tokens.colors.primary,\n webdev: tokens.colors.secondary,\n startups: tokens.colors.seaGreen,\n};\n\nexport function getSubredditColor(subreddit: string | undefined | null): string {\n if (!subreddit) return REDDIT_COLORS.orange;\n const lower = subreddit.toLowerCase();\n return SUBREDDIT_COLORS[lower] || REDDIT_COLORS.orange;\n}\n\n// =============================================================================\n// Utility Functions\n// =============================================================================\n\n/**\n * Format a timestamp to relative time (e.g., \"2 hours ago\")\n */\nexport function formatRelativeTime(timestamp: string | number): string {\n if (!timestamp && timestamp !== 0) return 'unknown';\n const now = new Date();\n // Handle numeric timestamps (Unix seconds or milliseconds)\n let date: Date;\n const numericVal = typeof timestamp === 'number' ? timestamp : Number(timestamp);\n if (!Number.isNaN(numericVal) && numericVal > 0) {\n // Unix seconds (< 1e12) vs milliseconds (>= 1e12)\n date = new Date(numericVal < 1e12 ? numericVal * 1000 : numericVal);\n } else {\n date = new Date(timestamp);\n }\n if (Number.isNaN(date.getTime())) return 'unknown';\n const diffMs = now.getTime() - date.getTime();\n const diffMins = Math.floor(diffMs / 60000);\n const diffHours = Math.floor(diffMins / 60);\n const diffDays = Math.floor(diffHours / 24);\n\n if (diffMins < 1) return 'just now';\n if (diffMins < 60) return `${diffMins}m ago`;\n if (diffHours < 24) return `${diffHours}h ago`;\n if (diffDays < 7) return `${diffDays}d ago`;\n return date.toLocaleDateString();\n}\n\n/**\n * Format large numbers (e.g., 1.2k, 3.4M)\n */\nexport function formatNumber(num: number): string {\n if (num === undefined || num === null) return '0';\n if (num >= 1000000) return `${(num / 1000000).toFixed(1)}M`;\n if (num >= 1000) return `${(num / 1000).toFixed(1)}k`;\n return num.toString();\n}\n\n/**\n * Truncate text with ellipsis\n */\nexport function truncateText(text: string, maxLength: number): string {\n if (text.length <= maxLength) return text;\n return `${text.slice(0, maxLength - 3)}...`;\n}\n\n/**\n * Generate Reddit post URL\n */\nexport function getRedditPostUrl(subreddit: string, postId: string): string {\n const cleanId = postId.replace(/^t3_/, '');\n return `https://www.reddit.com/r/${subreddit}/comments/${cleanId}`;\n}\n\n/**\n * Generate Reddit subreddit URL\n */\nexport function getSubredditUrl(subreddit: string): string {\n return `https://www.reddit.com/r/${subreddit}`;\n}\n","/**\n * RedditOpportunityCard Component\n *\n * Displays a Reddit post opportunity with engagement metrics.\n * Shows post details, engagement score, and draft reply.\n */\n\nimport type React from 'react';\nimport { useMemo } from 'react';\nimport styled, { keyframes } from 'styled-components';\n\n/**\n * Simple markdown renderer for basic formatting\n * Supports: **bold**, *italic*, `code`\n */\nconst renderSimpleMarkdown = (text: string): React.ReactNode => {\n if (!text) return null;\n\n // Simple approach: process patterns in order using placeholder tokens\n let processed = text;\n\n // Replace **bold** first (before single *)\n processed = processed.replace(/\\*\\*(.+?)\\*\\*/g, '{{BOLD:$1}}');\n // Replace *italic*\n processed = processed.replace(/\\*(.+?)\\*/g, '{{ITALIC:$1}}');\n // Replace `code`\n processed = processed.replace(/`(.+?)`/g, '{{CODE:$1}}');\n\n // Now split and render\n const segments = processed.split(/({{(?:BOLD|ITALIC|CODE):.+?}})/g);\n\n return segments.map((segment, i) => {\n if (segment.startsWith('{{BOLD:')) {\n const content = segment.slice(7, -2);\n return <strong key={i}>{content}</strong>;\n }\n if (segment.startsWith('{{ITALIC:')) {\n const content = segment.slice(9, -2);\n return <em key={i}>{content}</em>;\n }\n if (segment.startsWith('{{CODE:')) {\n const content = segment.slice(7, -2);\n return <code key={i} style={{ background: 'rgba(255,255,255,0.1)', padding: '0 4px', borderRadius: '3px', fontFamily: 'monospace' }}>{content}</code>;\n }\n return segment;\n });\n};\nimport { tokens } from '../../theme/tokens';\nimport {\n formatNumber,\n formatRelativeTime,\n getRedditCharLimitColor,\n getRedditCharPercentage,\n getScoreColor,\n getScoreLabel,\n getSubredditColor,\n getSubredditUrl,\n getToneConfig,\n REDDIT_COLORS,\n REDDIT_LIMITS,\n truncateText,\n} from './redditEngagementConstants';\nimport type { RedditOpportunityCardProps, ReplyTone } from './redditEngagementTypes';\n\n// =============================================================================\n// Sub-Components\n// =============================================================================\n\nconst SubredditBadge: React.FC<{ subreddit: string; linked?: boolean }> = ({\n subreddit,\n linked = true,\n}) => {\n const color = getSubredditColor(subreddit);\n const content = <SubredditBadgeContainer $color={color}>r/{subreddit}</SubredditBadgeContainer>;\n\n if (linked) {\n return (\n <SubredditLink href={getSubredditUrl(subreddit)} target=\"_blank\" rel=\"noopener noreferrer\">\n {content}\n </SubredditLink>\n );\n }\n\n return content;\n};\n\nconst EngagementScoreBadge: React.FC<{ score: number; size?: 'sm' | 'md' | 'lg' }> = ({\n score,\n size = 'md',\n}) => {\n const color = getScoreColor(score);\n const label = getScoreLabel(score);\n\n return (\n <ScoreBadgeContainer $color={color} $size={size}>\n <ScoreValue>{score}</ScoreValue>\n <ScoreMax>/10</ScoreMax>\n <ScoreLabel>{label}</ScoreLabel>\n </ScoreBadgeContainer>\n );\n};\n\nconst ToneBadge: React.FC<{ tone: ReplyTone }> = ({ tone }) => {\n const config = getToneConfig(tone);\n\n return (\n <ToneBadgeContainer $color={config.color}>\n <ToneIcon src={config.icon} alt=\"\" />\n <span>{config.label}</span>\n </ToneBadgeContainer>\n );\n};\n\nconst PostStats: React.FC<{ score: number; comments: number; createdAt: string }> = ({\n score,\n comments,\n createdAt,\n}) => (\n <StatsContainer>\n <StatItem>\n <Icon src=\"/assets/icon-set/Icon-arrow-up-fill.svg\" alt=\"upvotes\" />\n <StatValue>{formatNumber(score)}</StatValue>\n </StatItem>\n <StatDivider>•</StatDivider>\n <StatItem>\n <Icon src=\"/assets/icon-set/Icon-chat-1-fill.svg\" alt=\"comments\" />\n <StatValue>{formatNumber(comments)}</StatValue>\n </StatItem>\n <StatDivider>•</StatDivider>\n <StatItem>\n <Icon src=\"/assets/icon-set/Icon-time-fill.svg\" alt=\"time\" />\n <StatValue>{formatRelativeTime(createdAt)}</StatValue>\n </StatItem>\n </StatsContainer>\n);\n\n// =============================================================================\n// Main Component\n// =============================================================================\n\nexport const RedditOpportunityCard: React.FC<RedditOpportunityCardProps> = ({\n opportunity,\n isActive = false,\n isEditing = false,\n editContent,\n onContentChange,\n isLoading = false,\n condensed = false,\n}) => {\n const displayContent =\n isEditing && editContent !== undefined\n ? editContent\n : opportunity.editedReply || opportunity.draftReply || '';\n\n const charCount = displayContent.length;\n const charPercentage = useMemo(\n () => getRedditCharPercentage(charCount, REDDIT_LIMITS.comment),\n [charCount]\n );\n const charLimitColor = useMemo(() => getRedditCharLimitColor(charPercentage), [charPercentage]);\n\n const handleContentChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n onContentChange?.(e.target.value);\n };\n\n if (isLoading) {\n return (\n <CardContainer $isActive={false} $isEditing={false}>\n <SkeletonContent>\n <SkeletonLine $width=\"40%\" />\n <SkeletonLine $width=\"90%\" />\n <SkeletonLine $width=\"75%\" />\n <SkeletonLine $width=\"60%\" />\n </SkeletonContent>\n </CardContainer>\n );\n }\n\n return (\n <CardContainer\n $isActive={isActive}\n $isEditing={isEditing}\n data-testid=\"reddit-opportunity-card\"\n >\n {/* Header with subreddit, score, and stats */}\n <CardHeader>\n <HeaderLeft>\n <SubredditBadge subreddit={opportunity.subreddit} />\n <EngagementScoreBadge score={opportunity.engagementScore} size=\"md\" />\n </HeaderLeft>\n <PostStats\n score={opportunity.postScore}\n comments={opportunity.postNumComments}\n createdAt={opportunity.postCreatedAt}\n />\n </CardHeader>\n\n {/* Post preview section */}\n <PostPreviewSection $condensed={condensed}>\n <PostTitle href={opportunity.postUrl} target=\"_blank\" rel=\"noopener noreferrer\">\n {opportunity.title}\n <ExternalLinkIcon>→</ExternalLinkIcon>\n </PostTitle>\n {!condensed && opportunity.postContent && (\n <PostContent>{truncateText(opportunity.postContent, 300)}</PostContent>\n )}\n <PostAuthor>\n Posted by u/{opportunity.postAuthor || 'unknown'}\n {opportunity.flair && <PostFlair>{opportunity.flair}</PostFlair>}\n </PostAuthor>\n </PostPreviewSection>\n\n <Divider />\n\n {/* Reply section */}\n <ReplySection>\n <ReplySectionHeader>\n <ReplyLabel>Your Draft Reply</ReplyLabel>\n <ReplyMeta>\n <ToneBadge tone={opportunity.toneMatch} />\n <CharacterCount $color={charLimitColor}>\n {charCount}/{REDDIT_LIMITS.comment}\n </CharacterCount>\n </ReplyMeta>\n </ReplySectionHeader>\n\n {isEditing ? (\n <ReplyTextarea\n value={displayContent}\n onChange={handleContentChange}\n placeholder=\"Write your reply...\"\n autoFocus\n />\n ) : (\n <ReplyContent>{renderSimpleMarkdown(displayContent)}</ReplyContent>\n )}\n\n {/* Strategy hint */}\n {opportunity.strategy ? (\n <StrategyHint>\n <StrategyIconImg src=\"/assets/icon-set/Icon-lightbulb-fill.svg\" alt=\"\" />\n <StrategyText>Strategy: {opportunity.strategy}</StrategyText>\n </StrategyHint>\n ) : null}\n\n {/* Character limit progress bar */}\n <ProgressBarContainer>\n <ProgressBarTrack>\n <ProgressBarFill $percentage={Math.min(charPercentage, 100)} $color={charLimitColor} />\n </ProgressBarTrack>\n </ProgressBarContainer>\n </ReplySection>\n </CardContainer>\n );\n};\n\nRedditOpportunityCard.displayName = 'RedditOpportunityCard';\n\n// =============================================================================\n// Styled Components\n// =============================================================================\n\nconst fadeIn = keyframes`\n from {\n opacity: 0;\n transform: translateY(8px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n`;\n\nconst shimmer = keyframes`\n 0% { background-position: -200% 0; }\n 100% { background-position: 200% 0; }\n`;\n\nconst Icon = styled.img`\n width: 14px;\n height: 14px;\n vertical-align: middle;\n opacity: 0.8;\n`;\n\nconst CardContainer = styled.div<{\n $isActive: boolean;\n $isEditing: boolean;\n}>`\n background: ${tokens.colors.background.dark};\n border-radius: ${tokens.borderRadius.xl};\n padding: ${tokens.spacing.lg};\n position: relative;\n transition: all ${tokens.transitions.normal};\n border: 1px solid ${({ $isActive, $isEditing }) =>\n $isEditing\n ? REDDIT_COLORS.orange\n : $isActive\n ? REDDIT_COLORS.orange\n : tokens.colors.border.default};\n box-shadow: ${({ $isActive, $isEditing }) =>\n $isEditing || $isActive\n ? `${tokens.shadows.lg}, 0 0 20px ${REDDIT_COLORS.orange}40`\n : tokens.shadows.md};\n animation: ${fadeIn} 0.4s ease-out;\n\n &:hover {\n border-color: ${REDDIT_COLORS.orange}80;\n }\n\n @media (max-width: 480px) {\n padding: ${tokens.spacing.md};\n }\n`;\n\nconst CardHeader = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: ${tokens.spacing.md};\n flex-wrap: wrap;\n gap: ${tokens.spacing.sm};\n\n @media (max-width: 480px) {\n flex-direction: column;\n align-items: flex-start;\n }\n`;\n\nconst HeaderLeft = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.sm};\n`;\n\nconst SubredditBadgeContainer = styled.span<{ $color: string }>`\n display: inline-flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n padding: ${tokens.spacing.xs} ${tokens.spacing.sm};\n border-radius: ${tokens.borderRadius.full};\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.semibold};\n background: ${({ $color }) => `${$color}20`};\n color: ${({ $color }) => $color};\n border: 1px solid ${({ $color }) => `${$color}40`};\n transition: all ${tokens.transitions.fast};\n`;\n\nconst SubredditLink = styled.a`\n text-decoration: none;\n\n &:hover ${SubredditBadgeContainer} {\n background: ${tokens.colors.surface.overlayHover};\n }\n`;\n\nconst ScoreBadgeContainer = styled.div<{ $color: string; $size: 'sm' | 'md' | 'lg' }>`\n display: flex;\n align-items: baseline;\n gap: ${tokens.spacing.xs};\n padding: ${({ $size }) =>\n $size === 'sm'\n ? `${tokens.spacing.xs} ${tokens.spacing.sm}`\n : $size === 'lg'\n ? `${tokens.spacing.sm} ${tokens.spacing.md}`\n : `${tokens.spacing.xs} ${tokens.spacing.sm}`};\n border-radius: ${tokens.borderRadius.md};\n background: ${({ $color }) => `${$color}20`};\n border: 1px solid ${({ $color }) => `${$color}40`};\n`;\n\nconst ScoreValue = styled.span`\n font-size: ${tokens.typography.fontSize.lg};\n font-weight: ${tokens.typography.fontWeight.bold};\n color: ${tokens.colors.text.primary};\n`;\n\nconst ScoreMax = styled.span`\n font-size: ${tokens.typography.fontSize.xs};\n color: ${tokens.colors.text.tertiary};\n`;\n\nconst ScoreLabel = styled.span`\n margin-left: ${tokens.spacing.xs};\n font-size: ${tokens.typography.fontSize.xs};\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.text.secondary};\n`;\n\nconst StatsContainer = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n`;\n\nconst StatItem = styled.span`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n`;\n\nconst StatValue = styled.span`\n font-size: ${tokens.typography.fontSize.sm};\n color: ${tokens.colors.text.secondary};\n`;\n\nconst StatDivider = styled.span`\n color: ${tokens.colors.text.tertiary};\n`;\n\nconst PostPreviewSection = styled.div<{ $condensed: boolean }>`\n margin-bottom: ${tokens.spacing.md};\n`;\n\nconst PostTitle = styled.a`\n display: flex;\n align-items: flex-start;\n gap: ${tokens.spacing.xs};\n font-size: ${tokens.typography.fontSize.lg};\n font-weight: ${tokens.typography.fontWeight.semibold};\n color: ${tokens.colors.text.primary};\n text-decoration: none;\n line-height: ${tokens.typography.lineHeight.tight};\n margin-bottom: ${tokens.spacing.sm};\n\n &:hover {\n color: ${tokens.colors.primary};\n }\n`;\n\nconst ExternalLinkIcon = styled.span`\n font-size: ${tokens.typography.fontSize.sm};\n color: ${tokens.colors.text.tertiary};\n flex-shrink: 0;\n`;\n\nconst PostContent = styled.p`\n font-size: ${tokens.typography.fontSize.base};\n color: ${tokens.colors.text.secondary};\n line-height: ${tokens.typography.lineHeight.relaxed};\n margin-bottom: ${tokens.spacing.sm};\n white-space: pre-wrap;\n`;\n\nconst PostAuthor = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.sm};\n font-size: ${tokens.typography.fontSize.sm};\n color: ${tokens.colors.text.tertiary};\n`;\n\nconst PostFlair = styled.span`\n padding: ${tokens.spacing.xs} ${tokens.spacing.sm};\n border-radius: ${tokens.borderRadius.sm};\n background: ${tokens.colors.surface.overlay};\n font-size: ${tokens.typography.fontSize.xs};\n color: ${tokens.colors.text.secondary};\n`;\n\nconst Divider = styled.hr`\n border: none;\n height: 1px;\n background: ${tokens.colors.border.default};\n margin: ${tokens.spacing.md} 0;\n`;\n\nconst ReplySection = styled.div``;\n\nconst ReplySectionHeader = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: ${tokens.spacing.sm};\n`;\n\nconst ReplyLabel = styled.span`\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.semibold};\n color: ${tokens.colors.text.secondary};\n text-transform: uppercase;\n letter-spacing: 0.5px;\n`;\n\nconst ReplyMeta = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.sm};\n`;\n\nconst ToneBadgeContainer = styled.span<{ $color: string }>`\n display: inline-flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n padding: ${tokens.spacing.xs} ${tokens.spacing.sm};\n border-radius: ${tokens.borderRadius.sm};\n font-size: ${tokens.typography.fontSize.xs};\n background: ${({ $color }) => `${$color}20`};\n color: ${({ $color }) => $color};\n`;\n\nconst ToneIcon = styled.img`\n width: 12px;\n height: 12px;\n`;\n\nconst CharacterCount = styled.span<{ $color: string }>`\n font-size: ${tokens.typography.fontSize.xs};\n font-family: ${tokens.typography.fontFamily.monospace};\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${({ $color }) => $color};\n`;\n\nconst ReplyContent = styled.div`\n font-size: ${tokens.typography.fontSize.base};\n line-height: ${tokens.typography.lineHeight.relaxed};\n color: ${tokens.colors.text.primary};\n white-space: pre-wrap;\n padding: ${tokens.spacing.md};\n background: ${tokens.colors.background.darker};\n border-radius: ${tokens.borderRadius.sm};\n border: 1px solid ${tokens.colors.border.default};\n margin-bottom: ${tokens.spacing.sm};\n min-height: 100px;\n animation: ${fadeIn} 0.3s ease-out;\n`;\n\nconst ReplyTextarea = styled.textarea`\n width: 100%;\n min-height: 150px;\n max-height: 400px;\n font-size: ${tokens.typography.fontSize.base};\n font-family: ${tokens.typography.fontFamily.primary};\n line-height: ${tokens.typography.lineHeight.relaxed};\n color: ${tokens.colors.text.primary};\n background: ${tokens.colors.background.darker};\n border: 1px solid ${tokens.colors.primary};\n border-radius: ${tokens.borderRadius.sm};\n padding: ${tokens.spacing.md};\n margin-bottom: ${tokens.spacing.sm};\n resize: vertical;\n box-sizing: border-box;\n transition: border-color ${tokens.transitions.fast}, box-shadow ${tokens.transitions.fast};\n\n &:focus {\n outline: none;\n box-shadow: 0 0 0 3px ${tokens.colors.primary}30;\n }\n\n &::placeholder {\n color: ${tokens.colors.text.tertiary};\n }\n`;\n\nconst StrategyHint = styled.div`\n display: flex;\n align-items: flex-start;\n gap: ${tokens.spacing.xs};\n padding: ${tokens.spacing.sm};\n background: ${tokens.colors.surface.overlay};\n border-radius: ${tokens.borderRadius.sm};\n margin-bottom: ${tokens.spacing.sm};\n`;\n\nconst StrategyIconImg = styled.img`\n width: 16px;\n height: 16px;\n opacity: 0.8;\n`;\n\nconst StrategyText = styled.span`\n font-size: ${tokens.typography.fontSize.sm};\n color: ${tokens.colors.text.secondary};\n font-style: italic;\n`;\n\nconst ProgressBarContainer = styled.div`\n margin-top: ${tokens.spacing.xs};\n`;\n\nconst ProgressBarTrack = styled.div`\n width: 100%;\n height: 4px;\n background: ${tokens.colors.border.default};\n border-radius: ${tokens.borderRadius.sm};\n overflow: hidden;\n`;\n\nconst ProgressBarFill = styled.div<{ $percentage: number; $color: string }>`\n width: ${({ $percentage }) => $percentage}%;\n height: 100%;\n border-radius: ${tokens.borderRadius.sm};\n transition: width 0.3s ease, background-color 0.3s ease;\n background: ${({ $color }) => $color};\n`;\n\nconst SkeletonContent = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.sm};\n padding: ${tokens.spacing.md};\n`;\n\nconst SkeletonLine = styled.div<{ $width: string }>`\n height: 16px;\n width: ${({ $width }) => $width};\n background: linear-gradient(\n 90deg,\n ${tokens.colors.border.default} 0%,\n rgba(255, 255, 255, 0.1) 50%,\n ${tokens.colors.border.default} 100%\n );\n background-size: 200% 100%;\n border-radius: ${tokens.borderRadius.sm};\n animation: ${shimmer} 1.5s ease-in-out infinite;\n`;\n\nexport default RedditOpportunityCard;\n","/**\n * RedditEngagementControls Component\n *\n * Action controls for the Reddit engagement workflow.\n * Handles: Copy & Open, Mark as Posted, Skip, Edit, Regenerate\n */\n\nimport type React from 'react';\nimport { useState, useCallback } from 'react';\nimport styled, { keyframes, css } from 'styled-components';\nimport type { RedditEngagementControlsProps } from './redditEngagementTypes';\nimport { tokens } from '../../theme/tokens';\n\n// =============================================================================\n// Component\n// =============================================================================\n\nexport const RedditEngagementControls: React.FC<RedditEngagementControlsProps> = ({\n opportunity,\n currentReply,\n isEditing,\n onToggleEdit,\n onSaveEdit,\n onCancelEdit,\n onCopyAndOpen,\n onMarkPosted,\n onSkip,\n onRegenerate,\n isLoading = false,\n justCopied = false,\n}) => {\n const [showRegenerateInput, setShowRegenerateInput] = useState(false);\n const [regenerateFeedback, setRegenerateFeedback] = useState('');\n const [copiedFeedback, setCopiedFeedback] = useState(false);\n // Track if user has engaged and what content was at that time\n const [engagedWithContent, setEngagedWithContent] = useState<string | null>(null);\n\n // Determine if currently engaged (content hasn't changed since engagement)\n const isEngaged = engagedWithContent !== null && engagedWithContent === currentReply;\n\n const handleCopyAndOpen = useCallback(async () => {\n try {\n await navigator.clipboard.writeText(currentReply);\n setCopiedFeedback(true);\n setEngagedWithContent(currentReply); // Mark as engaged with this content\n setTimeout(() => setCopiedFeedback(false), 2000);\n onCopyAndOpen();\n } catch (err) {\n console.error('Failed to copy:', err);\n }\n }, [currentReply, onCopyAndOpen]);\n\n const handleSkip = useCallback(() => {\n onSkip();\n }, [onSkip]);\n\n const handleRegenerate = useCallback(() => {\n if (showRegenerateInput) {\n onRegenerate(regenerateFeedback || undefined);\n setRegenerateFeedback('');\n setShowRegenerateInput(false);\n } else {\n setShowRegenerateInput(true);\n }\n }, [showRegenerateInput, regenerateFeedback, onRegenerate]);\n\n const isPending = opportunity.status === 'pending' || opportunity.status === 'editing';\n\n return (\n <ControlsContainer data-testid=\"reddit-engagement-controls\">\n {/* Edit mode controls */}\n {isEditing && (\n <EditModeSection>\n <EditModeLabel><Icon src=\"/assets/icon-set/Icon-edit-fill.svg\" alt=\"\" /> Editing Mode</EditModeLabel>\n <EditModeActions>\n <ActionButton $variant=\"cancel\" onClick={onCancelEdit} disabled={isLoading}>\n Cancel\n </ActionButton>\n <ActionButton\n $variant=\"save\"\n onClick={() => onSaveEdit(currentReply)}\n disabled={isLoading}\n >\n Save Changes\n </ActionButton>\n </EditModeActions>\n </EditModeSection>\n )}\n\n {/* Regenerate feedback input */}\n {showRegenerateInput && !isEditing && (\n <InputSection>\n <InputLabel>What should be different?</InputLabel>\n <InputRow>\n <TextInput\n value={regenerateFeedback}\n onChange={(e) => setRegenerateFeedback(e.target.value)}\n placeholder=\"Make it more casual, add specific example...\"\n onKeyDown={(e) => e.key === 'Enter' && handleRegenerate()}\n />\n <SmallButton onClick={() => setShowRegenerateInput(false)}>×</SmallButton>\n </InputRow>\n </InputSection>\n )}\n\n {/* Main action buttons */}\n {!isEditing && isPending && (\n <MainActions>\n <SecondaryActions>\n <ActionButton\n $variant=\"tertiary\"\n onClick={handleRegenerate}\n disabled={isLoading}\n title=\"Generate a new reply\"\n >\n <Icon src=\"/assets/icon-set/Icon-refresh-fill.svg\" alt=\"\" />\n {showRegenerateInput ? 'Confirm' : 'Regenerate'}\n </ActionButton>\n <ActionButton\n $variant=\"edit\"\n onClick={onToggleEdit}\n disabled={isLoading}\n title=\"Edit the draft reply\"\n >\n <Icon src=\"/assets/icon-set/Icon-edit-fill.svg\" alt=\"\" />\n Edit\n </ActionButton>\n <ActionButton\n $variant=\"skip\"\n onClick={handleSkip}\n disabled={isLoading}\n title=\"Skip this opportunity\"\n >\n <Icon src=\"/assets/icon-set/Icon-skip-forward-fill.svg\" alt=\"\" />\n Skip\n </ActionButton>\n </SecondaryActions>\n\n <PrimaryActions>\n <ActionButton\n $variant={isEngaged && !copiedFeedback ? 'engaged' : 'primary'}\n onClick={handleCopyAndOpen}\n disabled={isLoading || (isEngaged && !copiedFeedback)}\n $pulse={!justCopied && !copiedFeedback && !isEngaged}\n title={isEngaged ? 'Already copied - edit to re-enable' : 'Copy reply and open post in new tab'}\n >\n {copiedFeedback ? (\n <Icon src=\"/assets/icon-set/Icon-check-fill.svg\" alt=\"\" />\n ) : isEngaged ? (\n <Icon src=\"/assets/icon-set/Icon-check-fill.svg\" alt=\"\" />\n ) : (\n <Icon src=\"/assets/icon-set/Icon-clipboard-fill.svg\" alt=\"\" />\n )}\n {copiedFeedback ? 'Copied!' : isEngaged ? 'Engaged' : 'Engage'}\n </ActionButton>\n <ActionButton\n $variant=\"success\"\n onClick={onMarkPosted}\n disabled={isLoading || (!justCopied && !copiedFeedback && !isEngaged)}\n title=\"Mark as posted after you've replied\"\n >\n <Icon src=\"/assets/icon-set/Icon-check-fill.svg\" alt=\"\" />\n Mark as Posted\n </ActionButton>\n </PrimaryActions>\n </MainActions>\n )}\n\n </ControlsContainer>\n );\n};\n\nRedditEngagementControls.displayName = 'RedditEngagementControls';\n\n// =============================================================================\n// Styled Components\n// =============================================================================\n\nconst pulse = keyframes`\n 0%, 100% {\n box-shadow: 0 0 0 0 ${tokens.colors.primary}66;\n }\n 50% {\n box-shadow: 0 0 0 8px ${tokens.colors.primary}00;\n }\n`;\n\nconst ControlsContainer = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.md};\n padding: ${tokens.spacing.md};\n background: ${tokens.colors.background.dark};\n border-radius: ${tokens.borderRadius.lg};\n border: 1px solid ${tokens.colors.border.default};\n`;\n\nconst EditModeSection = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n background: ${tokens.colors.status.editing}20;\n border: 1px solid ${tokens.colors.status.editing}40;\n border-radius: ${tokens.borderRadius.md};\n`;\n\nconst EditModeLabel = styled.span`\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.status.editing};\n`;\n\nconst EditModeActions = styled.div`\n display: flex;\n gap: ${tokens.spacing.sm};\n`;\n\nconst InputSection = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.xs};\n`;\n\nconst InputLabel = styled.label`\n font-size: ${tokens.typography.fontSize.sm};\n color: ${tokens.colors.text.secondary};\n`;\n\nconst InputRow = styled.div`\n display: flex;\n gap: ${tokens.spacing.xs};\n flex-wrap: wrap;\n\n @media (max-width: 480px) {\n flex-direction: column;\n }\n`;\n\nconst TextInput = styled.input`\n flex: 1;\n min-width: 0;\n padding: ${tokens.spacing.sm};\n font-size: ${tokens.typography.fontSize.sm};\n color: ${tokens.colors.text.primary};\n background: ${tokens.colors.background.darker};\n border: 1px solid ${tokens.colors.border.default};\n border-radius: ${tokens.borderRadius.md};\n transition: border-color ${tokens.transitions.fast};\n\n &:focus {\n outline: none;\n border-color: ${tokens.colors.primary};\n }\n\n &::placeholder {\n color: ${tokens.colors.text.tertiary};\n }\n\n @media (max-width: 480px) {\n width: 100%;\n }\n`;\n\nconst SmallButton = styled.button`\n padding: ${tokens.spacing.sm};\n font-size: ${tokens.typography.fontSize.base};\n color: ${tokens.colors.text.tertiary};\n background: transparent;\n border: none;\n border-radius: ${tokens.borderRadius.md};\n cursor: pointer;\n transition: all ${tokens.transitions.fast};\n\n &:hover {\n color: ${tokens.colors.text.primary};\n background: ${tokens.colors.surface.overlay};\n }\n`;\n\nconst MainActions = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.md};\n`;\n\nconst SecondaryActions = styled.div`\n display: flex;\n gap: ${tokens.spacing.sm};\n flex-wrap: wrap;\n\n @media (max-width: 480px) {\n & > * {\n flex: 1 1 100%;\n }\n }\n`;\n\nconst PrimaryActions = styled.div`\n display: flex;\n gap: ${tokens.spacing.sm};\n flex-wrap: wrap;\n\n @media (max-width: 480px) {\n & > * {\n flex: 1 1 100%;\n }\n }\n`;\n\nconst Icon = styled.img`\n width: 16px;\n height: 16px;\n vertical-align: middle;\n`;\n\ntype ButtonVariant = 'primary' | 'success' | 'skip' | 'edit' | 'tertiary' | 'cancel' | 'save' | 'engaged';\n\nconst ActionButton = styled.button<{\n $variant: ButtonVariant;\n $pulse?: boolean;\n}>`\n display: flex;\n align-items: center;\n justify-content: center;\n gap: ${tokens.spacing.xs};\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n border-radius: ${tokens.borderRadius.md};\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.semibold};\n cursor: pointer;\n transition: all ${tokens.transitions.fast};\n border: none;\n white-space: nowrap;\n flex: 1;\n min-width: 100px;\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n ${({ $variant }) => {\n switch ($variant) {\n case 'primary':\n return css`\n background: ${tokens.colors.primary};\n color: white;\n &:hover:not(:disabled) {\n opacity: 0.9;\n }\n ${Icon} {\n filter: brightness(0) saturate(100%) invert(100%);\n }\n `;\n case 'success':\n return css`\n background: ${tokens.colors.success};\n color: white;\n &:hover:not(:disabled) {\n opacity: 0.9;\n }\n ${Icon} {\n filter: brightness(0) saturate(100%) invert(100%);\n }\n `;\n case 'skip':\n return css`\n background: transparent;\n color: ${tokens.colors.text.secondary};\n border: 1px solid ${tokens.colors.border.default};\n &:hover:not(:disabled) {\n background: ${tokens.colors.surface.overlay};\n border-color: ${tokens.colors.border.hover};\n }\n `;\n case 'edit':\n return css`\n background: ${tokens.colors.status.editing}20;\n color: ${tokens.colors.status.editing};\n border: 1px solid ${tokens.colors.status.editing}40;\n &:hover:not(:disabled) {\n background: ${tokens.colors.status.editing}30;\n }\n `;\n case 'tertiary':\n return css`\n background: transparent;\n color: ${tokens.colors.accent};\n border: 1px solid ${tokens.colors.accent}40;\n &:hover:not(:disabled) {\n background: ${tokens.colors.accent}20;\n }\n `;\n case 'cancel':\n return css`\n background: ${tokens.colors.error}15;\n color: ${tokens.colors.error};\n border: 1px solid ${tokens.colors.error}30;\n &:hover:not(:disabled) {\n background: ${tokens.colors.error}25;\n }\n `;\n case 'save':\n return css`\n background: ${tokens.colors.success};\n color: white;\n &:hover:not(:disabled) {\n opacity: 0.9;\n }\n `;\n case 'engaged':\n return css`\n background: ${tokens.colors.text.tertiary};\n color: ${tokens.colors.background.darker};\n cursor: default;\n ${Icon} {\n filter: brightness(0) saturate(100%) invert(15%);\n }\n `;\n default:\n return '';\n }\n }}\n\n ${({ $pulse }) =>\n $pulse &&\n css`\n animation: ${pulse} 2s ease-in-out infinite;\n `}\n`;\n\nexport default RedditEngagementControls;\n","/**\n * TokenUsageCard Component\n *\n * Displays token usage with a progress bar and transaction history.\n */\n\nimport type React from 'react';\nimport { useMemo } from 'react';\nimport styled from 'styled-components';\nimport { tokens } from '../../theme/tokens';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface TokenTransaction {\n id: string;\n timestamp: string;\n type: 'input' | 'output' | 'system';\n tokens: number;\n description: string;\n source?: string;\n}\n\nexport interface TokenUsageCardProps {\n currentUsage: number;\n maxLimit: number;\n transactions: TokenTransaction[];\n periodLabel: string;\n onViewAll?: () => void;\n className?: string;\n}\n\n// =============================================================================\n// Helpers\n// =============================================================================\n\nfunction formatNumber(num: number): string {\n if (num >= 1000000) {\n return `${(num / 1000000).toFixed(1)}M`;\n }\n if (num >= 1000) {\n return `${(num / 1000).toFixed(1)}K`;\n }\n return num.toLocaleString();\n}\n\nfunction formatRelativeTime(timestamp: string): string {\n const now = new Date();\n const then = new Date(timestamp);\n const diffMs = now.getTime() - then.getTime();\n const diffMins = Math.floor(diffMs / 60000);\n const diffHours = Math.floor(diffMs / 3600000);\n const diffDays = Math.floor(diffMs / 86400000);\n\n if (diffMins < 1) return 'Just now';\n if (diffMins < 60) return `${diffMins}m ago`;\n if (diffHours < 24) return `${diffHours}h ago`;\n return `${diffDays}d ago`;\n}\n\nfunction getUsageLevel(percentage: number): 'low' | 'medium' | 'high' | 'critical' {\n if (percentage >= 90) return 'critical';\n if (percentage >= 75) return 'high';\n if (percentage >= 50) return 'medium';\n return 'low';\n}\n\nconst usageLevelColors = {\n low: tokens.colors.success,\n medium: tokens.colors.warning,\n high: '#ff8c00',\n critical: tokens.colors.error,\n};\n\nconst typeIcons = {\n input: '↑',\n output: '↓',\n system: '⚙',\n};\n\nconst typeColors = {\n input: tokens.colors.info,\n output: tokens.colors.success,\n system: tokens.colors.text.tertiary,\n};\n\n// =============================================================================\n// Component\n// =============================================================================\n\nexport function TokenUsageCard({\n currentUsage,\n maxLimit,\n transactions,\n periodLabel,\n onViewAll,\n className,\n}: TokenUsageCardProps): React.ReactElement {\n const percentage = useMemo(\n () => Math.min((currentUsage / maxLimit) * 100, 100),\n [currentUsage, maxLimit]\n );\n const usageLevel = useMemo(() => getUsageLevel(percentage), [percentage]);\n\n return (\n <Card className={className} data-testid=\"token-usage-card\">\n <Header>\n <Title>Token Usage</Title>\n <Period>{periodLabel}</Period>\n </Header>\n\n <UsageSection>\n <UsageStats>\n <CurrentUsage>{formatNumber(currentUsage)}</CurrentUsage>\n <UsageSeparator>/</UsageSeparator>\n <MaxUsage>{formatNumber(maxLimit)}</MaxUsage>\n </UsageStats>\n <ProgressContainer>\n <ProgressBar $percentage={percentage} $level={usageLevel} />\n </ProgressContainer>\n <PercentageLabel $level={usageLevel}>{percentage.toFixed(1)}% used</PercentageLabel>\n </UsageSection>\n\n {transactions.length > 0 && (\n <TransactionsSection>\n <TransactionsHeader>Recent Activity</TransactionsHeader>\n <TransactionsList>\n {transactions.slice(0, 5).map((transaction) => (\n <TransactionItem key={transaction.id}>\n <TransactionIcon $type={transaction.type}>\n {typeIcons[transaction.type]}\n </TransactionIcon>\n <TransactionInfo>\n <TransactionDescription>{transaction.description}</TransactionDescription>\n <TransactionMeta>\n {transaction.source && <span>{transaction.source}</span>}\n <span>{formatRelativeTime(transaction.timestamp)}</span>\n </TransactionMeta>\n </TransactionInfo>\n <TransactionTokens $type={transaction.type}>\n {transaction.type === 'output' ? '+' : ''}\n {formatNumber(transaction.tokens)}\n </TransactionTokens>\n </TransactionItem>\n ))}\n </TransactionsList>\n </TransactionsSection>\n )}\n\n {transactions.length === 0 && <EmptyState>No recent activity</EmptyState>}\n\n {onViewAll && transactions.length > 0 && (\n <ViewAllButton onClick={onViewAll}>View all activity</ViewAllButton>\n )}\n </Card>\n );\n}\n\n// =============================================================================\n// Styled Components\n// =============================================================================\n\nconst Card = styled.div`\n display: flex;\n flex-direction: column;\n background: ${tokens.colors.background.darker};\n border-radius: ${tokens.borderRadius.xl};\n border: 1px solid ${tokens.colors.border.default};\n overflow: hidden;\n`;\n\nconst Header = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n background: ${tokens.colors.background.darker};\n border-bottom: 1px solid ${tokens.colors.border.default};\n min-height: 48px;\n`;\n\nconst Title = styled.h3`\n margin: 0;\n font-size: ${tokens.typography.fontSize.lg};\n font-weight: ${tokens.typography.fontWeight.semibold};\n font-family: ${tokens.typography.fontFamily.primary};\n color: ${tokens.colors.text.primary};\n`;\n\nconst Period = styled.span`\n font-size: ${tokens.typography.fontSize.sm};\n font-family: ${tokens.typography.fontFamily.primary};\n color: ${tokens.colors.text.secondary};\n`;\n\nconst UsageSection = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.sm};\n padding: ${tokens.spacing.md};\n`;\n\nconst UsageStats = styled.div`\n display: flex;\n align-items: baseline;\n gap: ${tokens.spacing.xs};\n`;\n\nconst CurrentUsage = styled.span`\n font-size: ${tokens.typography.fontSize['2xl']};\n font-weight: ${tokens.typography.fontWeight.bold};\n font-family: ${tokens.typography.fontFamily.primary};\n color: ${tokens.colors.text.primary};\n`;\n\nconst UsageSeparator = styled.span`\n font-size: ${tokens.typography.fontSize.lg};\n font-family: ${tokens.typography.fontFamily.primary};\n color: ${tokens.colors.text.tertiary};\n`;\n\nconst MaxUsage = styled.span`\n font-size: ${tokens.typography.fontSize.lg};\n font-family: ${tokens.typography.fontFamily.primary};\n color: ${tokens.colors.text.secondary};\n`;\n\nconst ProgressContainer = styled.div`\n width: 100%;\n height: 8px;\n background: ${tokens.colors.background.light};\n border-radius: ${tokens.borderRadius.full};\n overflow: hidden;\n`;\n\ninterface ProgressBarProps {\n $percentage: number;\n $level: 'low' | 'medium' | 'high' | 'critical';\n}\n\nconst ProgressBar = styled.div<ProgressBarProps>`\n height: 100%;\n width: ${({ $percentage }) => $percentage}%;\n background: ${({ $level }) => usageLevelColors[$level]};\n border-radius: ${tokens.borderRadius.full};\n transition: width ${tokens.transitions.normal}, background ${tokens.transitions.normal};\n`;\n\nconst PercentageLabel = styled.span<{ $level: 'low' | 'medium' | 'high' | 'critical' }>`\n font-size: ${tokens.typography.fontSize.sm};\n font-family: ${tokens.typography.fontFamily.primary};\n color: ${({ $level }) => usageLevelColors[$level]};\n`;\n\nconst TransactionsSection = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.sm};\n padding: ${tokens.spacing.md};\n padding-top: ${tokens.spacing.sm};\n border-top: 1px solid ${tokens.colors.border.subtle};\n`;\n\nconst TransactionsHeader = styled.h4`\n margin: 0;\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.semibold};\n font-family: ${tokens.typography.fontFamily.primary};\n color: ${tokens.colors.text.secondary};\n`;\n\nconst TransactionsList = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.xs};\n`;\n\nconst TransactionItem = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.sm};\n padding: ${tokens.spacing.sm};\n background: ${tokens.colors.background.darker};\n border-radius: ${tokens.borderRadius.sm};\n`;\n\nconst TransactionIcon = styled.span<{ $type: 'input' | 'output' | 'system' }>`\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: ${tokens.typography.fontSize.sm};\n color: ${({ $type }) => typeColors[$type]};\n background: ${tokens.colors.background.light};\n border-radius: ${tokens.borderRadius.sm};\n`;\n\nconst TransactionInfo = styled.div`\n flex: 1;\n min-width: 0;\n`;\n\nconst TransactionDescription = styled.div`\n font-size: ${tokens.typography.fontSize.sm};\n font-family: ${tokens.typography.fontFamily.primary};\n color: ${tokens.colors.text.primary};\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nconst TransactionMeta = styled.div`\n display: flex;\n gap: ${tokens.spacing.sm};\n font-size: ${tokens.typography.fontSize.xs};\n font-family: ${tokens.typography.fontFamily.primary};\n color: ${tokens.colors.text.tertiary};\n`;\n\nconst TransactionTokens = styled.span<{ $type: 'input' | 'output' | 'system' }>`\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.medium};\n font-family: ${tokens.typography.fontFamily.primary};\n color: ${({ $type }) => typeColors[$type]};\n`;\n\nconst EmptyState = styled.div`\n text-align: center;\n padding: ${tokens.spacing.lg} ${tokens.spacing.md};\n font-size: ${tokens.typography.fontSize.sm};\n font-family: ${tokens.typography.fontFamily.primary};\n color: ${tokens.colors.text.tertiary};\n`;\n\nconst ViewAllButton = styled.button`\n margin: 0 ${tokens.spacing.md} ${tokens.spacing.md};\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n background: transparent;\n border: 1px solid ${tokens.colors.border.default};\n border-radius: ${tokens.borderRadius.md};\n font-size: ${tokens.typography.fontSize.sm};\n font-family: ${tokens.typography.fontFamily.primary};\n color: ${tokens.colors.text.secondary};\n cursor: pointer;\n transition: all ${tokens.transitions.fast};\n\n &:hover {\n background: ${tokens.colors.background.light};\n border-color: ${tokens.colors.border.hover};\n color: ${tokens.colors.text.primary};\n }\n`;\n\nexport default TokenUsageCard;\n","/**\n * WorkflowCard Component\n *\n * A card for displaying available workflows in a list.\n * Used for browsing and activating workflows, showing\n * integrations and input requirements.\n */\n\nimport type React from 'react';\nimport styled from 'styled-components';\nimport { tokens } from '../../theme/tokens';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface WorkflowIntegration {\n /** Icon URL or path */\n icon: string;\n /** Integration name for alt text */\n name: string;\n /** Whether this integration is connected */\n connected?: boolean;\n /** Whether this integration is optional (softer visual when not connected) */\n optional?: boolean;\n}\n\nexport interface WorkflowCardProps {\n /** Unique identifier for the workflow */\n id: string;\n /** Workflow name */\n name: string;\n /** Workflow description */\n description?: string;\n /** List of required integrations */\n integrations?: WorkflowIntegration[];\n /** Whether the workflow needs setup (not yet provisioned) */\n needsSetup?: boolean;\n /** Estimated cost per run (e.g., \"~$0.15\") */\n estimatedCostPerRun?: string;\n /** Click handler */\n onClick?: () => void;\n /** Whether the card is disabled */\n disabled?: boolean;\n /** Optional className for styling */\n className?: string;\n}\n\n// =============================================================================\n// Component\n// =============================================================================\n\nexport const WorkflowCard: React.FC<WorkflowCardProps> = ({\n id,\n name,\n description,\n integrations = [],\n needsSetup = false,\n estimatedCostPerRun,\n onClick,\n disabled = false,\n className,\n}) => {\n const missingCount = integrations.filter((i) => i.connected === false && !i.optional).length;\n const hasFooter = integrations.length > 0 || needsSetup || !!estimatedCostPerRun;\n\n return (\n <Card\n data-testid={`workflow-card-${id}`}\n onClick={disabled ? undefined : onClick}\n disabled={disabled}\n className={className}\n type=\"button\"\n >\n <WorkflowName data-testid=\"workflow-card-name\">{name}</WorkflowName>\n\n {description && <Description>{description}</Description>}\n\n {hasFooter && (\n <CardFooter>\n <IntegrationList>\n {integrations.map((integration) => (\n <IntegrationIconWrapper\n key={integration.name}\n $connected={integration.connected !== false}\n $optional={!!integration.optional}\n title={`${integration.name}${integration.connected === false ? (integration.optional ? ' (optional)' : ' (not connected)') : ''}`}\n >\n <IntegrationIcon\n src={integration.icon}\n alt={integration.name}\n />\n </IntegrationIconWrapper>\n ))}\n </IntegrationList>\n\n <Indicators>\n {estimatedCostPerRun && (\n <IndicatorPill $variant=\"info\" title={`Estimated cost: ${estimatedCostPerRun}${estimatedCostPerRun.includes('/') ? '' : ' per run'}`}>\n <IndicatorText>{estimatedCostPerRun}{estimatedCostPerRun.includes('/') ? '' : '/run'}</IndicatorText>\n </IndicatorPill>\n )}\n {missingCount > 0 && (\n <IndicatorPill\n $variant=\"warning\"\n title={`${missingCount} integration${missingCount > 1 ? 's' : ''} not connected`}\n >\n <IndicatorDot $variant=\"warning\" />\n <IndicatorText>\n {missingCount} missing\n </IndicatorText>\n </IndicatorPill>\n )}\n {needsSetup && (\n <IndicatorPill $variant=\"warning\" title=\"Setup required before use\">\n <IndicatorDot $variant=\"warning\" />\n <IndicatorText>Needs Setup</IndicatorText>\n </IndicatorPill>\n )}\n </Indicators>\n </CardFooter>\n )}\n </Card>\n );\n};\n\nWorkflowCard.displayName = 'WorkflowCard';\n\n// =============================================================================\n// Styled Components\n// =============================================================================\n\nconst Card = styled.button`\n display: grid;\n gap: ${tokens.spacing.sm};\n padding: ${tokens.spacing.md};\n background: ${tokens.colors.background.dark};\n border-radius: ${tokens.borderRadius.xl};\n border: 1px solid ${tokens.colors.border.default};\n cursor: pointer;\n text-align: left;\n width: 100%;\n font-family: ${tokens.typography.fontFamily.primary};\n transition: border-color ${tokens.transitions.fast}, background-color ${tokens.transitions.fast};\n\n &:hover:not(:disabled) {\n border-color: ${tokens.colors.border.hover};\n background: ${tokens.colors.background.light};\n }\n\n &:active:not(:disabled) {\n background: ${tokens.colors.surface.overlayActive};\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n`;\n\nconst WorkflowName = styled.h3`\n margin: 0;\n font-size: ${tokens.typography.fontSize.base};\n font-weight: ${tokens.typography.fontWeight.semibold};\n color: ${tokens.colors.text.primary};\n line-height: ${tokens.typography.lineHeight.tight};\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n min-width: 0;\n`;\n\nconst Description = styled.p`\n margin: 0;\n font-size: ${tokens.typography.fontSize.sm};\n color: ${tokens.colors.text.tertiary};\n line-height: ${tokens.typography.lineHeight.normal};\n overflow: hidden;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n word-break: break-word;\n min-width: 0;\n`;\n\nconst CardFooter = styled.div`\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: ${tokens.spacing.sm};\n padding-top: ${tokens.spacing.sm};\n border-top: 1px solid ${tokens.colors.border.subtle};\n width: 100%;\n`;\n\nconst IntegrationList = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n flex-shrink: 0;\n`;\n\ninterface IntegrationIconWrapperProps {\n $connected: boolean;\n $optional?: boolean;\n}\n\nconst IntegrationIconWrapper = styled.span<IntegrationIconWrapperProps>`\n display: flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n border-radius: ${tokens.borderRadius.sm};\n background: ${tokens.colors.background.light};\n opacity: ${({ $connected, $optional }) => ($connected ? 1 : $optional ? 0.3 : 0.4)};\n position: relative;\n flex-shrink: 0;\n\n ${({ $connected, $optional }) =>\n !$connected &&\n `\n &::after {\n content: '';\n position: absolute;\n inset: 0;\n border: 1px dashed ${$optional ? tokens.colors.border.default : tokens.colors.warning};\n border-radius: ${tokens.borderRadius.sm};\n }\n `}\n`;\n\nconst IntegrationIcon = styled.img`\n width: 16px;\n height: 16px;\n object-fit: contain;\n`;\n\nconst Indicators = styled.div`\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: ${tokens.spacing.xs};\n margin-left: auto;\n min-width: 0;\n`;\n\ninterface IndicatorVariantProps {\n $variant: 'warning' | 'info';\n}\n\nconst IndicatorPill = styled.span<IndicatorVariantProps>`\n display: inline-flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n padding: ${tokens.spacing.xs} ${tokens.spacing.sm};\n border-radius: ${tokens.borderRadius.full};\n background: ${({ $variant }) =>\n $variant === 'warning'\n ? `${tokens.colors.warning}15`\n : `${tokens.colors.info}15`};\n border: 1px solid ${({ $variant }) =>\n $variant === 'warning'\n ? `${tokens.colors.warning}30`\n : `${tokens.colors.info}30`};\n`;\n\nconst IndicatorDot = styled.span<IndicatorVariantProps>`\n width: 6px;\n height: 6px;\n border-radius: ${tokens.borderRadius.full};\n background: ${({ $variant }) =>\n $variant === 'warning' ? tokens.colors.warning : tokens.colors.info};\n flex-shrink: 0;\n`;\n\nconst IndicatorText = styled.span`\n font-size: ${tokens.typography.fontSize.xs};\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.text.secondary};\n white-space: nowrap;\n`;\n\nexport default WorkflowCard;\n","/**\n * WorkflowErrorAlert Component\n *\n * Displays workflow execution errors with inline, banner, or modal variants.\n *\n * @see specs/015-restyle-ai-chat/spec.md\n */\n\nimport type React from 'react';\nimport { useState } from 'react';\nimport styled from 'styled-components';\nimport { tokens } from '../../theme/tokens';\n\n// Severity color mapping using design tokens\nconst severityColors = {\n error: tokens.colors.error,\n warning: tokens.colors.warning,\n info: tokens.colors.info,\n};\n\ninterface AlertContainerProps {\n variant: 'inline' | 'banner' | 'modal';\n severity: 'error' | 'warning' | 'info';\n}\n\nconst AlertContainer = styled.div<AlertContainerProps>`\n display: flex;\n flex-direction: column;\n background-color: ${(props) => {\n const alpha = props.variant === 'modal' ? '26' : props.variant === 'banner' ? '1a' : '0d';\n return `${severityColors[props.severity]}${alpha}`;\n }};\n border: 1px solid ${(props) => {\n const alpha = props.variant === 'modal' ? '66' : '4d';\n return `${severityColors[props.severity]}${alpha}`;\n }};\n border-radius: ${(props) => (props.variant === 'banner' ? '0' : tokens.borderRadius.md)};\n padding: ${(props) => (props.variant === 'modal' ? tokens.spacing.lg : tokens.spacing.md)};\n margin: ${(props) => (props.variant === 'banner' ? '0' : `${tokens.spacing.sm} 0`)};\n width: ${(props) => (props.variant === 'modal' ? 'auto' : '100%')};\n max-width: ${(props) => (props.variant === 'inline' ? '600px' : '100%')};\n font-family: ${tokens.typography.fontFamily.primary};\n`;\n\nconst ModalOverlay = styled.div<{ isOpen: boolean }>`\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: ${tokens.colors.overlay};\n display: ${(props) => (props.isOpen ? 'flex' : 'none')};\n align-items: center;\n justify-content: center;\n z-index: ${tokens.zIndex.modal};\n padding: ${tokens.spacing.lg};\n`;\n\nconst ModalContent = styled.div`\n background-color: ${tokens.colors.background.dark};\n border-radius: ${tokens.borderRadius.lg};\n max-width: 500px;\n width: 100%;\n box-shadow: ${tokens.shadows.xl};\n`;\n\nconst Header = styled.div`\n display: flex;\n align-items: flex-start;\n gap: ${tokens.spacing.md};\n`;\n\nconst IconContainer = styled.div<{ severity: 'error' | 'warning' | 'info' }>`\n flex-shrink: 0;\n width: 24px;\n height: 24px;\n color: ${(props) => severityColors[props.severity]};\n`;\n\nconst Content = styled.div`\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.sm};\n`;\n\nconst Title = styled.div`\n font-size: ${tokens.typography.fontSize.base};\n font-weight: ${tokens.typography.fontWeight.semibold};\n color: ${tokens.colors.text.primary};\n line-height: ${tokens.typography.lineHeight.tight};\n`;\n\nconst ErrorMessage = styled.div`\n font-size: ${tokens.typography.fontSize.sm};\n line-height: ${tokens.typography.lineHeight.normal};\n color: ${tokens.colors.text.secondary};\n`;\n\nconst ErrorCode = styled.div`\n font-size: ${tokens.typography.fontSize.xs};\n color: ${tokens.colors.text.secondary};\n font-family: ${tokens.typography.fontFamily.monospace};\n margin-top: ${tokens.spacing.xs};\n`;\n\nconst Timestamp = styled.div`\n font-size: ${tokens.typography.fontSize.xs};\n color: ${tokens.colors.text.tertiary};\n margin-top: ${tokens.spacing.xs};\n`;\n\nconst Details = styled.details`\n margin-top: ${tokens.spacing.md};\n cursor: pointer;\n\n summary {\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.text.secondary};\n user-select: none;\n list-style: none;\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n\n &:hover {\n color: ${tokens.colors.text.primary};\n }\n\n &::-webkit-details-marker {\n display: none;\n }\n }\n`;\n\nconst DetailsIcon = styled.span<{ open: boolean }>`\n display: inline-block;\n transition: transform ${tokens.transitions.fast};\n transform: ${(props) => (props.open ? 'rotate(90deg)' : 'rotate(0deg)')};\n`;\n\nconst StackTrace = styled.pre`\n margin: ${tokens.spacing.sm} 0 0 0;\n padding: ${tokens.spacing.md};\n background-color: ${tokens.colors.surface.subtle};\n border-radius: ${tokens.borderRadius.sm};\n font-family: ${tokens.typography.fontFamily.monospace};\n font-size: ${tokens.typography.fontSize.xs};\n line-height: ${tokens.typography.lineHeight.normal};\n color: ${tokens.colors.text.secondary};\n white-space: pre-wrap;\n word-break: break-word;\n overflow-x: auto;\n`;\n\nconst Actions = styled.div`\n display: flex;\n gap: ${tokens.spacing.sm};\n margin-top: ${tokens.spacing.md};\n`;\n\nconst Button = styled.button<{ variant: 'primary' | 'secondary' }>`\n display: inline-flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${(props) => (props.variant === 'primary' ? tokens.colors.text.primary : tokens.colors.text.secondary)};\n background: ${(props) => (props.variant === 'primary' ? tokens.colors.error : tokens.colors.surface.overlay)};\n border: 1px solid\n ${(props) => (props.variant === 'primary' ? tokens.colors.error : tokens.colors.border.default)};\n border-radius: ${tokens.borderRadius.md};\n cursor: pointer;\n transition: all ${tokens.transitions.fast};\n\n &:hover {\n background: ${(props) =>\n props.variant === 'primary' ? tokens.colors.error : tokens.colors.surface.overlayHover};\n border-color: ${(props) =>\n props.variant === 'primary' ? tokens.colors.error : tokens.colors.border.hover};\n }\n\n &:active {\n transform: scale(0.98);\n }\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n`;\n\nconst CloseButton = styled.button`\n position: absolute;\n top: ${tokens.spacing.md};\n right: ${tokens.spacing.md};\n width: 32px;\n height: 32px;\n padding: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background: transparent;\n border: none;\n color: ${tokens.colors.text.secondary};\n cursor: pointer;\n border-radius: ${tokens.borderRadius.sm};\n transition: all ${tokens.transitions.fast};\n\n &:hover {\n background: ${tokens.colors.surface.overlayHover};\n color: ${tokens.colors.text.primary};\n }\n\n &:active {\n transform: scale(0.95);\n }\n\n svg {\n width: 20px;\n height: 20px;\n }\n`;\n\n// Icons\nconst ErrorIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n width=\"24\"\n height=\"24\"\n >\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z\" />\n </svg>\n);\n\nconst WarningIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n width=\"24\"\n height=\"24\"\n >\n <path d=\"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z\" />\n </svg>\n);\n\nconst InfoIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n width=\"24\"\n height=\"24\"\n >\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z\" />\n </svg>\n);\n\nconst CloseIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\n </svg>\n);\n\nconst ChevronIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n width=\"16\"\n height=\"16\"\n >\n <path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\" />\n </svg>\n);\n\nexport interface WorkflowErrorAlertProps {\n /** Error object or message */\n error: Error | string;\n /** Optional error code */\n errorCode?: string;\n /** Timestamp of the error */\n timestamp?: string;\n /** Visual variant */\n variant?: 'inline' | 'banner' | 'modal';\n /** Severity level */\n severity?: 'error' | 'warning' | 'info';\n /** Whether the error can be retried */\n retryable?: boolean;\n /** Callback when retry is clicked */\n onRetry?: () => void;\n /** Callback when dismiss is clicked */\n onDismiss?: () => void;\n /** Whether to show details section */\n showDetails?: boolean;\n /** Stack trace to display */\n stackTrace?: string;\n /** Custom title */\n title?: string;\n /** Custom className */\n className?: string;\n}\n\n/**\n * WorkflowErrorAlert component for displaying workflow errors\n *\n * Features:\n * - Inline, banner, and modal variants\n * - Severity levels (error/warning/info)\n * - Error code and timestamp display\n * - Expandable stack trace\n * - Retry and dismiss actions\n * - Accessible error reporting\n */\nexport const WorkflowErrorAlert: React.FC<WorkflowErrorAlertProps> = ({\n error,\n errorCode,\n timestamp,\n variant = 'inline',\n severity = 'error',\n retryable = false,\n onRetry,\n onDismiss,\n showDetails = false,\n stackTrace,\n title,\n className,\n}) => {\n const [detailsOpen, setDetailsOpen] = useState(false);\n const [isModalOpen, setIsModalOpen] = useState(variant === 'modal');\n\n const errorMessage = typeof error === 'string' ? error : error.message;\n const defaultTitle =\n severity === 'error' ? 'Workflow Error' : severity === 'warning' ? 'Warning' : 'Information';\n const displayTitle = title || defaultTitle;\n\n const handleDismiss = () => {\n if (variant === 'modal') {\n setIsModalOpen(false);\n }\n onDismiss?.();\n };\n\n const getIcon = () => {\n switch (severity) {\n case 'error':\n return <ErrorIcon />;\n case 'warning':\n return <WarningIcon />;\n case 'info':\n return <InfoIcon />;\n }\n };\n\n const alertContent = (\n <AlertContainer variant={variant} severity={severity} className={className} role=\"alert\">\n <Header>\n <IconContainer severity={severity} aria-hidden=\"true\">\n {getIcon()}\n </IconContainer>\n <Content>\n <Title>{displayTitle}</Title>\n <ErrorMessage>{errorMessage}</ErrorMessage>\n {errorCode && <ErrorCode>Error Code: {errorCode}</ErrorCode>}\n {timestamp && <Timestamp>{new Date(timestamp).toLocaleString()}</Timestamp>}\n\n {showDetails && (stackTrace || (typeof error === 'object' && error.stack)) && (\n <Details\n open={detailsOpen}\n onToggle={(e) => setDetailsOpen((e.target as HTMLDetailsElement).open)}\n >\n <summary>\n <DetailsIcon open={detailsOpen}>\n <ChevronIcon />\n </DetailsIcon>\n Show Details\n </summary>\n <StackTrace>\n {stackTrace || (typeof error === 'object' ? error.stack : '')}\n </StackTrace>\n </Details>\n )}\n\n {(retryable || onDismiss) && (\n <Actions>\n {retryable && onRetry && (\n <Button variant=\"primary\" onClick={onRetry}>\n Retry\n </Button>\n )}\n {onDismiss && (\n <Button variant=\"secondary\" onClick={handleDismiss}>\n Dismiss\n </Button>\n )}\n </Actions>\n )}\n </Content>\n {variant !== 'modal' && onDismiss && (\n <CloseButton onClick={handleDismiss} aria-label=\"Dismiss alert\">\n <CloseIcon />\n </CloseButton>\n )}\n </Header>\n </AlertContainer>\n );\n\n if (variant === 'modal') {\n return (\n <ModalOverlay isOpen={isModalOpen} onClick={handleDismiss}>\n <ModalContent onClick={(e) => e.stopPropagation()}>\n {alertContent}\n <CloseButton onClick={handleDismiss} aria-label=\"Close modal\">\n <CloseIcon />\n </CloseButton>\n </ModalContent>\n </ModalOverlay>\n );\n }\n\n return alertContent;\n};\n\nWorkflowErrorAlert.displayName = 'WorkflowErrorAlert';\n","/**\n * WorkflowProgressBar Component\n *\n * Displays workflow execution progress with linear or circular variants.\n *\n * @see specs/015-restyle-ai-chat/spec.md\n */\n\nimport type React from 'react';\nimport styled, { keyframes } from 'styled-components';\nimport { tokens } from '../../theme/tokens';\n\nconst indeterminate = keyframes`\n 0% {\n transform: translateX(-100%);\n }\n 100% {\n transform: translateX(400%);\n }\n`;\n\nconst rotate = keyframes`\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n`;\n\n// Status color mapping using design tokens\nconst statusColors = {\n pending: tokens.colors.status.pending,\n running: tokens.colors.status.running,\n completed: tokens.colors.status.completed,\n failed: tokens.colors.status.failed,\n timeout: tokens.colors.status.timeout,\n};\n\nconst Container = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.sm};\n width: 100%;\n font-family: ${tokens.typography.fontFamily.primary};\n`;\n\nconst ProgressMessage = styled.div<{ size: 'sm' | 'md' | 'lg' }>`\n font-size: ${(props) => {\n switch (props.size) {\n case 'sm':\n return tokens.typography.fontSize.xs;\n case 'lg':\n return tokens.typography.fontSize.base;\n case 'md':\n default:\n return tokens.typography.fontSize.sm;\n }\n }};\n color: ${tokens.colors.text.secondary};\n line-height: ${tokens.typography.lineHeight.normal};\n`;\n\nconst ProgressInfo = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: ${tokens.spacing.xs};\n`;\n\nconst PercentageText = styled.span<{ size: 'sm' | 'md' | 'lg' }>`\n font-size: ${(props) => {\n switch (props.size) {\n case 'sm':\n return tokens.typography.fontSize.xs;\n case 'lg':\n return tokens.typography.fontSize.base;\n case 'md':\n default:\n return tokens.typography.fontSize.sm;\n }\n }};\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.text.primary};\n`;\n\n// Linear Progress Bar\nconst LinearTrack = styled.div<{ size: 'sm' | 'md' | 'lg' }>`\n position: relative;\n width: 100%;\n height: ${(props) => {\n switch (props.size) {\n case 'sm':\n return tokens.spacing.xs;\n case 'lg':\n return tokens.spacing.sm;\n case 'md':\n default:\n return '6px';\n }\n }};\n background-color: ${tokens.colors.border.default};\n border-radius: ${tokens.borderRadius.full};\n overflow: hidden;\n`;\n\ninterface LinearFillProps {\n progress: number;\n status: 'pending' | 'running' | 'completed' | 'failed' | 'timeout';\n animated: boolean;\n indeterminate: boolean;\n}\n\nconst LinearFill = styled.div<LinearFillProps>`\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n width: ${(props) => (props.indeterminate ? '25%' : `${props.progress}%`)};\n background-color: ${(props) => statusColors[props.status]};\n border-radius: ${tokens.borderRadius.full};\n transition: ${(props) => (props.animated && !props.indeterminate ? `width ${tokens.transitions.normal}` : 'none')};\n animation: ${(props) => (props.indeterminate ? indeterminate : 'none')} 1.5s ease-in-out infinite;\n`;\n\n// Circular Progress Bar\nconst CircularContainer = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n`;\n\nconst CircularSvg = styled.svg<{ size: 'sm' | 'md' | 'lg' }>`\n width: ${(props) => {\n switch (props.size) {\n case 'sm':\n return tokens.spacing.xl;\n case 'lg':\n return '80px';\n case 'md':\n default:\n return '60px';\n }\n }};\n height: ${(props) => {\n switch (props.size) {\n case 'sm':\n return tokens.spacing.xl;\n case 'lg':\n return '80px';\n case 'md':\n default:\n return '60px';\n }\n }};\n transform: rotate(-90deg);\n`;\n\ninterface CircularTrackProps {\n size: 'sm' | 'md' | 'lg';\n}\n\nconst getCircularSize = (size: 'sm' | 'md' | 'lg') => {\n switch (size) {\n case 'sm':\n return { radius: 16, strokeWidth: 3 };\n case 'lg':\n return { radius: 36, strokeWidth: 6 };\n case 'md':\n default:\n return { radius: 26, strokeWidth: 4 };\n }\n};\n\nconst CircularTrack = styled.circle<CircularTrackProps>`\n fill: none;\n stroke: ${tokens.colors.border.default};\n stroke-width: ${(props) => getCircularSize(props.size).strokeWidth};\n`;\n\ninterface CircularFillProps {\n progress: number;\n status: 'pending' | 'running' | 'completed' | 'failed' | 'timeout';\n size: 'sm' | 'md' | 'lg';\n animated: boolean;\n indeterminate: boolean;\n}\n\nconst CircularFill = styled.circle<CircularFillProps>`\n fill: none;\n stroke: ${(props) => statusColors[props.status]};\n stroke-width: ${(props) => getCircularSize(props.size).strokeWidth};\n stroke-dasharray: ${(props) => {\n const { radius } = getCircularSize(props.size);\n const circumference = 2 * Math.PI * radius;\n return props.indeterminate ? `${circumference * 0.25} ${circumference}` : circumference;\n }};\n stroke-dashoffset: ${(props) => {\n const { radius } = getCircularSize(props.size);\n const circumference = 2 * Math.PI * radius;\n return props.indeterminate ? 0 : circumference * (1 - props.progress / 100);\n }};\n stroke-linecap: round;\n transition: ${(props) => (props.animated && !props.indeterminate ? `stroke-dashoffset ${tokens.transitions.normal}` : 'none')};\n animation: ${(props) => (props.indeterminate ? rotate : 'none')} 1.5s linear infinite;\n`;\n\nconst CircularPercentage = styled.text<{ size: 'sm' | 'md' | 'lg' }>`\n fill: ${tokens.colors.text.primary};\n font-size: ${(props) => {\n switch (props.size) {\n case 'sm':\n return tokens.typography.fontSize.xs;\n case 'lg':\n return tokens.typography.fontSize.base;\n case 'md':\n default:\n return tokens.typography.fontSize.xs;\n }\n }};\n font-weight: ${tokens.typography.fontWeight.semibold};\n text-anchor: middle;\n dominant-baseline: middle;\n transform: rotate(90deg);\n transform-origin: center;\n`;\n\nexport interface WorkflowProgressBarProps {\n /** Progress percentage (0-100), or undefined for indeterminate */\n progress?: number;\n /** Optional message to display */\n message?: string;\n /** Status affects the color */\n status?: 'pending' | 'running' | 'completed' | 'failed' | 'timeout';\n /** Visual variant */\n variant?: 'linear' | 'circular';\n /** Size of the progress bar */\n size?: 'sm' | 'md' | 'lg';\n /** Whether to show percentage text */\n showPercentage?: boolean;\n /** Whether to animate progress changes */\n animated?: boolean;\n /** Custom className */\n className?: string;\n}\n\n/**\n * WorkflowProgressBar component for showing workflow execution progress\n *\n * Features:\n * - Linear and circular variants\n * - Determinate and indeterminate modes\n * - Color-coded status (gray/blue/green/red/orange)\n * - Size options (sm/md/lg)\n * - Optional percentage display\n * - Smooth animations\n * - Progress message support\n */\nexport const WorkflowProgressBar: React.FC<WorkflowProgressBarProps> = ({\n progress,\n message,\n status = 'running',\n variant = 'linear',\n size = 'md',\n showPercentage = true,\n animated = true,\n className,\n}) => {\n const isIndeterminate = progress === undefined;\n const progressValue = progress ?? 0;\n\n if (variant === 'circular') {\n const { radius } = getCircularSize(size);\n const center = radius + getCircularSize(size).strokeWidth;\n\n return (\n <Container className={className}>\n {message && <ProgressMessage size={size}>{message}</ProgressMessage>}\n <CircularContainer>\n <CircularSvg\n size={size}\n viewBox={`0 0 ${center * 2} ${center * 2}`}\n role=\"progressbar\"\n aria-valuenow={progressValue}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={message || `${progressValue}% complete`}\n >\n <CircularTrack size={size} cx={center} cy={center} r={radius} />\n <CircularFill\n progress={progressValue}\n status={status}\n size={size}\n animated={animated}\n indeterminate={isIndeterminate}\n cx={center}\n cy={center}\n r={radius}\n />\n {showPercentage && !isIndeterminate && (\n <CircularPercentage size={size} x={center} y={center}>\n {Math.round(progressValue)}%\n </CircularPercentage>\n )}\n </CircularSvg>\n </CircularContainer>\n </Container>\n );\n }\n\n return (\n <Container className={className}>\n {(message || showPercentage) && (\n <ProgressInfo>\n {message && <ProgressMessage size={size}>{message}</ProgressMessage>}\n {showPercentage && !isIndeterminate && (\n <PercentageText size={size}>{Math.round(progressValue)}%</PercentageText>\n )}\n </ProgressInfo>\n )}\n <LinearTrack\n size={size}\n role=\"progressbar\"\n aria-valuenow={progressValue}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={message || `${progressValue}% complete`}\n >\n <LinearFill\n progress={progressValue}\n status={status}\n animated={animated}\n indeterminate={isIndeterminate}\n />\n </LinearTrack>\n </Container>\n );\n};\n\nWorkflowProgressBar.displayName = 'WorkflowProgressBar';\n","/**\n * WorkflowResultPanel Component\n *\n * Displays workflow execution results with JSON/formatted/table views.\n *\n * @see specs/015-restyle-ai-chat/spec.md\n */\n\nimport type React from 'react';\nimport { useState } from 'react';\nimport styled from 'styled-components';\nimport { tokens } from '../../theme/tokens';\n\nconst Panel = styled.div<{ collapsible: boolean; expanded: boolean }>`\n display: flex;\n flex-direction: column;\n background-color: ${tokens.colors.surface.overlay};\n border: 1px solid ${tokens.colors.border.default};\n border-radius: ${tokens.borderRadius.md};\n overflow: hidden;\n font-family: ${tokens.typography.fontFamily.primary};\n`;\n\nconst Header = styled.div<{ collapsible: boolean }>`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n background-color: ${tokens.colors.surface.subtle};\n border-bottom: 1px solid ${tokens.colors.border.default};\n cursor: ${(props) => (props.collapsible ? 'pointer' : 'default')};\n user-select: none;\n\n &:hover {\n background-color: ${(props) => (props.collapsible ? tokens.colors.surface.overlay : tokens.colors.surface.subtle)};\n }\n`;\n\nconst Title = styled.div`\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.text.primary};\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.sm};\n`;\n\nconst Actions = styled.div`\n display: flex;\n gap: ${tokens.spacing.sm};\n`;\n\nconst IconButton = styled.button`\n display: flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n padding: 0;\n background: ${tokens.colors.surface.overlay};\n border: 1px solid ${tokens.colors.border.default};\n border-radius: ${tokens.borderRadius.sm};\n color: ${tokens.colors.text.secondary};\n cursor: pointer;\n transition: all ${tokens.transitions.fast};\n\n &:hover {\n background: ${tokens.colors.surface.overlayHover};\n border-color: ${tokens.colors.border.hover};\n color: ${tokens.colors.text.primary};\n }\n\n &:active {\n transform: scale(0.95);\n }\n\n svg {\n width: 16px;\n height: 16px;\n }\n`;\n\nconst CollapseIcon = styled.div<{ expanded: boolean }>`\n display: flex;\n align-items: center;\n justify-content: center;\n transition: transform ${tokens.transitions.fast};\n transform: ${(props) => (props.expanded ? 'rotate(180deg)' : 'rotate(0deg)')};\n color: ${tokens.colors.text.secondary};\n\n svg {\n width: 16px;\n height: 16px;\n }\n`;\n\nconst Content = styled.div<{ maxHeight?: string; expanded: boolean }>`\n padding: ${tokens.spacing.md};\n max-height: ${(props) => {\n if (!props.expanded) return '0';\n return props.maxHeight || '400px';\n }};\n overflow: ${(props) => (props.expanded ? 'auto' : 'hidden')};\n transition: max-height ${tokens.transitions.normal};\n\n /* Custom scrollbar */\n &::-webkit-scrollbar {\n width: 8px;\n }\n\n &::-webkit-scrollbar-track {\n background: ${tokens.colors.scrollbar.track};\n border-radius: ${tokens.borderRadius.sm};\n }\n\n &::-webkit-scrollbar-thumb {\n background: ${tokens.colors.scrollbar.thumb};\n border-radius: ${tokens.borderRadius.sm};\n }\n\n &::-webkit-scrollbar-thumb:hover {\n background: ${tokens.colors.scrollbar.thumbHover};\n }\n`;\n\nconst JsonView = styled.pre`\n margin: 0;\n font-family: ${tokens.typography.fontFamily.monospace};\n font-size: ${tokens.typography.fontSize.sm};\n line-height: ${tokens.typography.lineHeight.normal};\n color: ${tokens.colors.text.secondary};\n white-space: pre-wrap;\n word-break: break-word;\n`;\n\nconst FormattedView = styled.div`\n font-size: ${tokens.typography.fontSize.sm};\n line-height: ${tokens.typography.lineHeight.normal};\n color: ${tokens.colors.text.secondary};\n`;\n\nconst TableView = styled.table`\n width: 100%;\n border-collapse: collapse;\n font-size: ${tokens.typography.fontSize.sm};\n\n th {\n text-align: left;\n padding: ${tokens.spacing.sm} ${tokens.spacing.sm};\n background-color: ${tokens.colors.surface.overlay};\n border-bottom: 1px solid ${tokens.colors.border.default};\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.text.primary};\n }\n\n td {\n padding: ${tokens.spacing.sm} ${tokens.spacing.sm};\n border-bottom: 1px solid ${tokens.colors.border.subtle};\n color: ${tokens.colors.text.secondary};\n }\n\n tr:last-child td {\n border-bottom: none;\n }\n`;\n\nconst EmptyState = styled.div`\n padding: ${tokens.spacing.xl};\n text-align: center;\n color: ${tokens.colors.text.tertiary};\n font-size: ${tokens.typography.fontSize.sm};\n`;\n\n// Icons\nconst DownloadIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z\" />\n </svg>\n);\n\nconst CopyIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z\" />\n </svg>\n);\n\nconst ChevronIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z\" />\n </svg>\n);\n\nexport interface WorkflowResultPanelProps {\n /** Output data to display */\n outputData: unknown;\n /** Visual variant */\n variant?: 'json' | 'formatted' | 'table';\n /** Whether the panel can be collapsed */\n collapsible?: boolean;\n /** Default expanded state */\n defaultExpanded?: boolean;\n /** Maximum height of content area */\n maxHeight?: string;\n /** Callback when download is clicked */\n onDownload?: () => void;\n /** Callback when copy is clicked */\n onCopy?: () => void;\n /** Custom title */\n title?: string;\n /** Custom className */\n className?: string;\n}\n\n/**\n * WorkflowResultPanel component for displaying workflow results\n *\n * Features:\n * - JSON, formatted, and table view variants\n * - Collapsible content\n * - Download and copy actions\n * - Maximum height with scrolling\n * - Empty state handling\n * - Syntax highlighting for JSON\n */\nexport const WorkflowResultPanel: React.FC<WorkflowResultPanelProps> = ({\n outputData,\n variant = 'json',\n collapsible = true,\n defaultExpanded = true,\n maxHeight,\n onDownload,\n onCopy,\n title = 'Result',\n className,\n}) => {\n const [expanded, setExpanded] = useState(defaultExpanded);\n\n const handleToggle = () => {\n if (collapsible) {\n setExpanded(!expanded);\n }\n };\n\n const renderContent = () => {\n if (!outputData) {\n return <EmptyState>No results available</EmptyState>;\n }\n\n switch (variant) {\n case 'json':\n return <JsonView>{JSON.stringify(outputData, null, 2)}</JsonView>;\n\n case 'formatted':\n if (typeof outputData === 'object') {\n return (\n <FormattedView>\n {Object.entries(outputData as Record<string, unknown>).map(([key, value]) => (\n <div key={key}>\n <strong>{key}:</strong> {String(value)}\n </div>\n ))}\n </FormattedView>\n );\n }\n return <FormattedView>{String(outputData)}</FormattedView>;\n\n case 'table':\n if (Array.isArray(outputData) && outputData.length > 0) {\n const keys = Object.keys(outputData[0] as Record<string, unknown>);\n return (\n <TableView>\n <thead>\n <tr>\n {keys.map((key) => (\n <th key={key}>{key}</th>\n ))}\n </tr>\n </thead>\n <tbody>\n {outputData.map((row, idx) => (\n <tr key={idx}>\n {keys.map((key) => (\n <td key={key}>{String((row as Record<string, unknown>)[key])}</td>\n ))}\n </tr>\n ))}\n </tbody>\n </TableView>\n );\n }\n return <EmptyState>Data is not in table format</EmptyState>;\n\n default:\n return <EmptyState>Unsupported variant</EmptyState>;\n }\n };\n\n return (\n <Panel collapsible={collapsible} expanded={expanded} className={className}>\n <Header collapsible={collapsible} onClick={handleToggle}>\n <Title>\n {title}\n {collapsible && (\n <CollapseIcon expanded={expanded}>\n <ChevronIcon />\n </CollapseIcon>\n )}\n </Title>\n <Actions onClick={(e) => e.stopPropagation()}>\n {onCopy && (\n <IconButton onClick={onCopy} title=\"Copy to clipboard\" aria-label=\"Copy to clipboard\">\n <CopyIcon />\n </IconButton>\n )}\n {onDownload && (\n <IconButton onClick={onDownload} title=\"Download\" aria-label=\"Download results\">\n <DownloadIcon />\n </IconButton>\n )}\n </Actions>\n </Header>\n <Content maxHeight={maxHeight} expanded={expanded}>\n {renderContent()}\n </Content>\n </Panel>\n );\n};\n\nWorkflowResultPanel.displayName = 'WorkflowResultPanel';\n","/**\n * WorkflowStatusBadge Component\n *\n * Displays workflow execution status with color coding.\n *\n * @see specs/015-restyle-ai-chat/spec.md\n */\n\nimport type React from 'react';\nimport styled, { keyframes } from 'styled-components';\nimport { tokens } from '../../theme/tokens';\n\nconst spin = keyframes`\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n`;\n\nconst pulse = keyframes`\n 0%, 100% {\n opacity: 1;\n }\n 50% {\n opacity: 0.5;\n }\n`;\n\n// Status color mapping using design tokens\nconst statusColors = {\n pending: tokens.colors.status.pending,\n running: tokens.colors.status.running,\n completed: tokens.colors.status.completed,\n failed: tokens.colors.status.failed,\n timeout: tokens.colors.status.timeout,\n};\n\ninterface BadgeContainerProps {\n $status: 'pending' | 'running' | 'completed' | 'failed' | 'timeout';\n $size: 'sm' | 'md' | 'lg';\n}\n\nconst BadgeContainer = styled.div<BadgeContainerProps>`\n display: inline-flex;\n align-items: center;\n gap: ${(props) => {\n switch (props.$size) {\n case 'sm':\n return tokens.spacing.xs;\n case 'lg':\n return tokens.spacing.sm;\n case 'md':\n default:\n return '6px';\n }\n }};\n padding: ${(props) => {\n switch (props.$size) {\n case 'sm':\n return `${tokens.spacing.xs} ${tokens.spacing.sm}`;\n case 'lg':\n return `${tokens.spacing.sm} ${tokens.spacing.md}`;\n case 'md':\n default:\n return `6px ${tokens.spacing.md}`;\n }\n }};\n background-color: ${(props) => `${statusColors[props.$status]}1A`};\n border: 1px solid ${(props) => `${statusColors[props.$status]}4D`};\n border-radius: ${(props) => {\n switch (props.$size) {\n case 'sm':\n return tokens.borderRadius.sm;\n case 'lg':\n return tokens.borderRadius.md;\n case 'md':\n default:\n return tokens.borderRadius.md;\n }\n }};\n font-family: ${tokens.typography.fontFamily.primary};\n font-size: ${(props) => {\n switch (props.$size) {\n case 'sm':\n return '11px';\n case 'lg':\n return '15px';\n case 'md':\n default:\n return '13px';\n }\n }};\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${(props) => statusColors[props.$status]};\n line-height: 1.4;\n`;\n\ninterface IconContainerProps {\n $animated?: boolean;\n $status: 'pending' | 'running' | 'completed' | 'failed' | 'timeout';\n}\n\nconst IconContainer = styled.div<IconContainerProps>`\n display: flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n animation: ${(props) => {\n if (props.$animated) {\n if (props.$status === 'running') return spin;\n if (props.$status === 'pending') return pulse;\n }\n return 'none';\n }}\n ${(props) => (props.$status === 'running' ? '1s' : '2s')} linear infinite;\n`;\n\n// Status icons\nconst PendingIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n width=\"16\"\n height=\"16\"\n >\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm.5-13H11v6l5.25 3.15.75-1.23-4.5-2.67z\" />\n </svg>\n);\n\nconst RunningIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n width=\"16\"\n height=\"16\"\n >\n <path\n d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\"\n opacity=\"0.3\"\n />\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z\" />\n </svg>\n);\n\nconst CompletedIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n width=\"16\"\n height=\"16\"\n >\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\" />\n </svg>\n);\n\nconst FailedIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n width=\"16\"\n height=\"16\"\n >\n <path d=\"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z\" />\n </svg>\n);\n\nconst TimeoutIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n width=\"16\"\n height=\"16\"\n >\n <path d=\"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z\" />\n </svg>\n);\n\nconst Label = styled.span`\n white-space: nowrap;\n`;\n\nexport interface WorkflowStatusBadgeProps {\n /** Workflow execution status */\n status: 'pending' | 'running' | 'completed' | 'failed' | 'timeout';\n /** Size of the badge */\n size?: 'sm' | 'md' | 'lg';\n /** Whether to show status icon */\n showIcon?: boolean;\n /** Whether to show status label */\n showLabel?: boolean;\n /** Whether to animate the icon */\n animated?: boolean;\n /** Custom status label text */\n label?: string;\n /** Custom className */\n className?: string;\n}\n\nconst getDefaultLabel = (status: WorkflowStatusBadgeProps['status']): string => {\n switch (status) {\n case 'pending':\n return 'Pending';\n case 'running':\n return 'Running';\n case 'completed':\n return 'Completed';\n case 'failed':\n return 'Failed';\n case 'timeout':\n return 'Timeout';\n }\n};\n\nconst getStatusIcon = (status: WorkflowStatusBadgeProps['status']): React.ReactNode => {\n switch (status) {\n case 'pending':\n return <PendingIcon />;\n case 'running':\n return <RunningIcon />;\n case 'completed':\n return <CompletedIcon />;\n case 'failed':\n return <FailedIcon />;\n case 'timeout':\n return <TimeoutIcon />;\n }\n};\n\n/**\n * WorkflowStatusBadge component for showing workflow execution status\n *\n * Features:\n * - Color-coded status badges (gray/blue/green/red/orange)\n * - Status icons with optional animations\n * - Size options (sm/md/lg)\n * - Optional status labels\n * - Spinning animation for running state\n * - Pulse animation for pending state\n */\nexport const WorkflowStatusBadge: React.FC<WorkflowStatusBadgeProps> = ({\n status,\n size = 'md',\n showIcon = true,\n showLabel = true,\n animated = true,\n label,\n className,\n}) => {\n const displayLabel = label || getDefaultLabel(status);\n\n return (\n <BadgeContainer\n $status={status}\n $size={size}\n className={className}\n role=\"status\"\n aria-label={displayLabel}\n >\n {showIcon && (\n <IconContainer $animated={animated} $status={status} aria-hidden=\"true\">\n {getStatusIcon(status)}\n </IconContainer>\n )}\n {showLabel && <Label>{displayLabel}</Label>}\n </BadgeContainer>\n );\n};\n\nWorkflowStatusBadge.displayName = 'WorkflowStatusBadge';\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/theme/tokens.ts","../src/components/AssistantThinking/AssistantThinking.styles.ts","../src/components/AssistantThinking/AssistantThinking.tsx","../src/components/ChatInput/ChatInput.styles.ts","../src/components/ChatInput/ChatInput.tsx","../src/components/layout/CategoryNav/CategoryNav.styles.ts","../src/components/layout/CategoryNav/CategoryNav.tsx","../src/components/layout/Icon/Icon.styles.ts","../src/components/layout/Icon/icons.ts","../src/components/layout/Icon/Icon.tsx","../src/components/layout/NavHorizontal/NavHorizontal.styles.ts","../src/components/layout/NavHorizontal/NavHorizontal.tsx","../src/components/layout/NavVertical/NavVertical.styles.ts","../src/components/layout/NavVertical/NavVertical.tsx","../src/components/layout/Layout/Layout.styles.ts","../src/components/layout/Layout/Layout.tsx","../src/components/layout/NavHorizontal/ActionButtons.styles.ts","../src/components/layout/NavHorizontal/ActionButtons.tsx","../src/components/layout/NavHorizontal/WorkflowStatusCard.styles.ts","../src/components/layout/NavHorizontal/WorkflowStatusCard.tsx","../src/components/NotificationCard/NotificationCard.dark.styles.ts","../src/components/NotificationCard/DarkNotificationCard.tsx","../src/components/layout/PaneMenus/PaneMenus.styles.ts","../src/components/layout/PaneMenus/PaneMenus.tsx","../src/components/layout/PaneSectionHeader/PaneSectionHeader.styles.ts","../src/components/layout/PaneSectionHeader/PaneSectionHeader.tsx","../src/components/layout/ServiceIcon/ServiceIcon.styles.ts","../src/components/layout/ServiceIcon/ServiceIcon.tsx","../src/components/NotificationCard/NotificationCard.styles.ts","../src/components/NotificationCard/NotificationCard.tsx","../src/components/UserMessage/UserMessage.styles.ts","../src/components/UserMessage/UserMessage.tsx","../src/theme/darkTheme.ts","../src/theme/GlobalStyle.tsx","../src/theme/lightTheme.ts","../src/components/connections/ConnectionStatusBadge.tsx","../src/components/connections/IntegrationCard.tsx","../src/components/connections/SecretInput.tsx","../src/components/copilotkit/StreamingText.tsx","../src/components/copilotkit/Messages/AssistantMessage.styles.ts","../src/components/copilotkit/Messages/FileAttachment.styles.ts","../src/components/copilotkit/Messages/FileAttachment.tsx","../src/components/copilotkit/Messages/AssistantMessage.tsx","../src/components/copilotkit/adapters/AssistantMessageAdapter.tsx","../src/components/copilotkit/Button/Button.styles.ts","../src/components/copilotkit/Button/Button.tsx","../src/components/copilotkit/Actions/Actions.styles.ts","../src/components/copilotkit/Actions/Actions.tsx","../src/components/copilotkit/Response/Response.styles.ts","../src/components/copilotkit/Response/Response.tsx","../src/components/copilotkit/AgentState/AgentState.styles.ts","../src/components/copilotkit/AgentState/AgentState.tsx","../src/components/copilotkit/Footer/Footer.styles.ts","../src/components/copilotkit/Footer/Footer.tsx","../src/components/copilotkit/StreamStatusIndicator.tsx","../src/components/copilotkit/Header/Header.styles.ts","../src/components/copilotkit/Header/Header.tsx","../src/components/copilotkit/Input/Input.styles.ts","../src/components/copilotkit/Input/Input.tsx","../src/components/copilotkit/Messages/Messages.styles.ts","../src/components/copilotkit/Messages/Messages.tsx","../src/components/copilotkit/Messages/MessagesList.styles.ts","../src/components/copilotkit/Messages/MessagesList.tsx","../src/components/copilotkit/Messages/UserMessage.styles.ts","../src/components/copilotkit/Messages/UserMessage.tsx","../src/components/copilotkit/StreamErrorMessage.tsx","../src/components/copilotkit/Suggestions/Suggestions.styles.ts","../src/components/copilotkit/Suggestions/Suggestions.tsx","../src/components/copilotkit/Window/Window.styles.ts","../src/components/copilotkit/Window/Window.tsx","../src/components/icons/FacebookIcon/FacebookIcon.tsx","../src/components/icons/GmailIcon/GmailIcon.styles.ts","../src/components/icons/GmailIcon/GmailIcon.tsx","../src/components/icons/InstagramIcon/InstagramIcon.tsx","../src/components/icons/LinkedInIcon/LinkedInIcon.styles.ts","../src/components/icons/LinkedInIcon/LinkedInIcon.tsx","../src/components/icons/PostizIcon/PostizIcon.styles.ts","../src/components/icons/PostizIcon/PostizIcon.tsx","../src/components/icons/RedditIcon/RedditIcon.tsx","../src/components/icons/SlackIcon/SlackIcon.tsx","../src/components/icons/TelegramIcon/TelegramIcon.tsx","../src/components/icons/WhatsAppIcon/WhatsAppIcon.tsx","../src/components/icons/XIcon/XIcon.styles.ts","../src/components/icons/XIcon/XIcon.tsx","../src/components/icons/YouTubeIcon/YouTubeIcon.tsx","../src/components/social-media/constants.tsx","../src/components/social-media/PostApprovalControls.tsx","../src/components/social-media/PostPreviewCard.tsx","../src/components/social-media/PlatformCarousel.tsx","../src/components/social-media/PlatformGrid.tsx","../src/components/social-media/SocialMediaCanvas.tsx","../src/components/social-media/redditEngagementConstants.ts","../src/components/social-media/RedditOpportunityCard.tsx","../src/components/social-media/RedditEngagementControls.tsx","../src/components/usage/TokenUsageCard.tsx","../src/components/workflow/WorkflowCard.tsx","../src/components/workflow/WorkflowErrorAlert.tsx","../src/components/workflow/WorkflowProgressBar.tsx","../src/components/workflow/WorkflowResultPanel.tsx","../src/components/workflow/WorkflowStatusBadge.tsx"],"names":["keyframes","styled","useRef","jsxs","jsx","useState","useCallback","useEffect","useButton","Container","css","IconWrapper","DisclosureGroup","Disclosure","Button","DisclosurePanel","Heading","Fragment","useMeter","useTab","useTabList","useTabPanel","useTabListState","Item","BackButton","ChevronIcon","ItemIcon","memo","createGlobalStyle","parsed","React","useMemo","Avatar","LoadingDots","pulse","ActionButton","ActionsContainer","dotPulse","Dot","Message","StreamingText","InputWrapper","Input","useTextField","StyledUserMessage","MessageContent","MessageTime","UserMessage","Content","Actions","useId","StyledIconWrapper","SVG_CONTENT","Header","ProgressBar","ProgressBarFill","fadeIn","PlatformIcon","ContentContainer","EmptyState","Icon","CardContainer","SkeletonContent","SkeletonLine","PostContent","ProgressBarContainer","ProgressBarTrack","shimmer","formatNumber","formatRelativeTime","Card","Title","WorkflowName","Description","IconContainer","ErrorMessage","CloseButton","ErrorIcon","CloseIcon","statusColors","CollapseIcon","BadgeContainer","Label"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Design Tokens\n * Centralized design system tokens for colors, typography, spacing, etc.\n * These tokens are the single source of truth for styling across all components.\n */\n\nexport const tokens = {\n colors: {\n // Brand colors\n primary: '#2CB0AB', // Teal (main brand color)\n secondary: '#264E68', // Deep Blue\n accent: '#459FB9', // Sky Blue\n seaGreen: '#4EB999', // Sea Green (additional brand color)\n\n // Backgrounds - dark theme optimized\n background: {\n darkest: '#0a1b2a', // Darkest Blue (brand color)\n darker: '#151a26', // Discord gray (preserved)\n dark: '#1b2230', // Discord surface gray (preserved)\n light: '#252d3d', // Discord border gray (preserved)\n },\n\n // Text hierarchy\n text: {\n primary: '#FFFFFF',\n secondary: '#B4B8C5',\n tertiary: '#6B7280',\n disabled: '#4B5563',\n },\n\n // Semantic colors\n success: '#2CB0AB', // Teal (brand aligned)\n error: '#EF4444',\n warning: '#F59E0B',\n info: '#459FB9', // Sky Blue (brand aligned)\n\n // Status colors (for workflow/SSE events)\n status: {\n pending: '#6B7280',\n editing: '#3B82F6',\n idle: '#6B7280',\n running: '#459FB9', // Sky Blue (brand aligned)\n completed: '#2CB0AB', // Teal (brand aligned)\n failed: '#EF4444',\n timeout: '#F59E0B',\n // Badge status (online/offline pattern)\n online: '#2CB0AB',\n offline: '#EF4444',\n busy: '#459FB9',\n },\n\n // Connection status\n connection: {\n connected: '#2CB0AB', // Teal (brand aligned)\n streaming: '#459FB9', // Sky Blue (brand aligned)\n disconnected: '#EF4444',\n reconnecting: '#F59E0B',\n },\n\n // Surface variants (for overlays, cards, panels)\n surface: {\n base: '#1b2230',\n elevated: '#252d3d',\n overlay: 'rgba(255, 255, 255, 0.05)',\n overlayHover: 'rgba(255, 255, 255, 0.1)',\n overlayActive: 'rgba(255, 255, 255, 0.15)',\n subtle: 'rgba(255, 255, 255, 0.02)',\n glass: 'rgba(255, 255, 255, 0.26)',\n glassBorder: 'rgba(255, 255, 255, 0.3)',\n },\n\n // UI Element colors\n border: {\n default: 'rgba(255, 255, 255, 0.1)',\n subtle: 'rgba(255, 255, 255, 0.05)',\n hover: 'rgba(255, 255, 255, 0.2)',\n focus: '#2CB0AB', // Teal (brand aligned)\n error: '#EF4444',\n },\n\n // Scrollbar colors\n scrollbar: {\n track: 'transparent',\n thumb: 'rgba(255, 255, 255, 0.2)',\n thumbHover: 'rgba(255, 255, 255, 0.3)',\n },\n\n // Message bubbles\n message: {\n user: '#264E68', // Deep Blue (brand color)\n ai: '#1b2230', // Dark background\n system: '#151a26', // Darker background\n },\n\n // Overlays and backdrops\n overlay: 'rgba(0, 0, 0, 0.5)',\n backdrop: 'rgba(27, 34, 48, 0.95)',\n\n // Icon colors\n icon: {\n default: '#B4B8C5',\n muted: '#6B7280',\n active: '#2CB0AB',\n },\n\n // Platform brand colors (for social media icons)\n platform: {\n facebook: '#1877F2',\n instagram: '#E4405F',\n linkedin: '#0A66C2',\n x: '#000000',\n twitter: '#1DA1F2',\n youtube: '#FF0000',\n reddit: '#FF4500',\n slack: '#4A154B',\n telegram: '#0088CC',\n whatsapp: '#25D366',\n gmail: '#EA4335',\n },\n },\n\n typography: {\n fontFamily: {\n primary:\n \"'Roboto', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Helvetica Neue', sans-serif\",\n heading:\n \"'Roboto', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Helvetica Neue', sans-serif\",\n monospace: \"'Roboto Mono', 'Monaco', 'Menlo', 'Ubuntu Mono', monospace\",\n },\n fontSize: {\n xs: '0.875rem', // 14px (was 12px, increased for better readability)\n sm: '1rem', // 16px (was 14px, increased for better readability)\n base: '1.125rem', // 18px (was 16px, increased for better readability)\n lg: '1.125rem', // 18px (heading size, unchanged)\n xl: '1.25rem', // 20px (heading size, unchanged)\n '2xl': '1.5rem', // 24px (heading size, unchanged)\n '3xl': '1.875rem', // 30px (heading size, unchanged)\n '4xl': '2.25rem', // 36px (heading size, unchanged)\n },\n fontWeight: {\n light: 300,\n regular: 400,\n medium: 500,\n semibold: 600,\n bold: 700,\n },\n lineHeight: {\n tight: 1.25,\n normal: 1.5,\n relaxed: 1.75,\n },\n },\n\n spacing: {\n xs: '0.25rem', // 4px\n sm: '0.5rem', // 8px\n md: '1rem', // 16px\n lg: '1.5rem', // 24px\n xl: '2rem', // 32px\n '2xl': '3rem', // 48px\n '3xl': '4rem', // 64px\n },\n\n borderRadius: {\n none: '0',\n sm: '0.25rem', // 4px\n md: '0.5rem', // 8px\n lg: '0.75rem', // 12px\n xl: '1rem', // 16px\n '2xl': '1.5rem', // 24px\n full: '9999px', // Fully rounded\n },\n\n shadows: {\n none: 'none',\n sm: '0 1px 2px 0 rgba(0, 0, 0, 0.05)',\n md: '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)',\n lg: '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)',\n xl: '0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)',\n card: '0 4px 20px rgba(0, 0, 0, 0.3)',\n glow: {\n primary: '0 0 20px rgba(44, 176, 171, 0.3)',\n secondary: '0 0 20px rgba(38, 78, 104, 0.3)',\n accent: '0 0 20px rgba(69, 159, 185, 0.3)',\n },\n },\n\n transitions: {\n fast: '150ms ease-in-out',\n normal: '250ms ease-in-out',\n slow: '350ms ease-in-out',\n },\n\n animation: {\n duration: {\n micro: '150ms',\n short: '200ms',\n medium: '300ms',\n long: '500ms',\n },\n easing: {\n enter: 'cubic-bezier(0.4, 0, 0.2, 1)',\n exit: 'cubic-bezier(0.4, 0, 1, 1)',\n smooth: 'cubic-bezier(0.4, 0, 0.2, 1)',\n linear: 'linear',\n },\n },\n\n zIndex: {\n base: 0,\n dropdown: 1000,\n sticky: 1020,\n fixed: 1030,\n overlay: 1100,\n modal: 1200,\n popover: 1300,\n tooltip: 1400,\n toast: 1500,\n },\n\n breakpoints: {\n mobile: 640,\n tablet: 1024,\n desktop: 1280,\n },\n} as const;\n\nexport type Tokens = typeof tokens;\n","import styled, { keyframes } from 'styled-components';\nimport { tokens } from '../../theme/tokens';\n\nconst dotPulse = keyframes`\n 0%, 100% {\n opacity: 0.3;\n transform: scale(0.8);\n }\n 50% {\n opacity: 1;\n transform: scale(1);\n }\n`;\n\nconst pulse = keyframes`\n 0%, 100% {\n opacity: 0.5;\n transform: scale(1);\n }\n 50% {\n opacity: 1;\n transform: scale(1.2);\n }\n`;\n\nconst wave = keyframes`\n 0%, 40%, 100% {\n transform: translateY(0);\n }\n 20% {\n transform: translateY(-8px);\n }\n`;\n\ninterface SizeProps {\n size?: 'sm' | 'md' | 'lg';\n}\n\nconst getSizeValue = (size: 'sm' | 'md' | 'lg' = 'md') => {\n switch (size) {\n case 'sm':\n return {\n padding: `${tokens.spacing.sm} ${tokens.spacing.md}`,\n avatar: '32px',\n icon: '16px',\n fontSize: tokens.typography.fontSize.xs,\n dotSize: '4px',\n };\n case 'lg':\n return {\n padding: `${tokens.spacing.md} ${tokens.spacing.xl}`,\n avatar: '48px',\n icon: '24px',\n fontSize: tokens.typography.fontSize.base,\n dotSize: '8px',\n };\n case 'md':\n default:\n return {\n padding: `${tokens.spacing.md} ${tokens.spacing.md}`,\n avatar: '40px',\n icon: '20px',\n fontSize: tokens.typography.fontSize.sm,\n dotSize: '6px',\n };\n }\n};\n\nexport const Container = styled.div<SizeProps>`\n display: inline-flex;\n align-items: center;\n gap: ${tokens.spacing.md};\n padding: ${(props) => getSizeValue(props.size).padding};\n background-color: ${tokens.colors.surface.base};\n border-radius: ${tokens.borderRadius.xl};\n box-shadow: ${tokens.shadows.none};\n font-family: ${tokens.typography.fontFamily.primary};\n max-width: fit-content;\n margin: 0 auto;\n`;\n\nexport const Avatar = styled.div<SizeProps>`\n width: ${(props) => getSizeValue(props.size).avatar};\n height: ${(props) => getSizeValue(props.size).avatar};\n border-radius: ${tokens.borderRadius.full};\n background: linear-gradient(135deg, ${tokens.colors.secondary} 0%, ${tokens.colors.primary} 100%);\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n box-shadow: ${tokens.shadows.glow.primary};\n`;\n\nexport const HeadphonesIcon = styled.svg<SizeProps>`\n width: ${(props) => getSizeValue(props.size).icon};\n height: ${(props) => getSizeValue(props.size).icon};\n color: ${tokens.colors.text.primary};\n`;\n\nexport const Content = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.sm};\n`;\n\ninterface LoadingDotsProps extends SizeProps {\n variant?: 'dots' | 'pulse' | 'wave';\n}\n\nexport const LoadingDots = styled.div<LoadingDotsProps>`\n display: flex;\n align-items: center;\n gap: ${(props) => (props.variant === 'wave' ? '2px' : `${tokens.spacing.xs}`)};\n padding: 0 ${tokens.spacing.xs};\n`;\n\ninterface DotProps extends SizeProps {\n variant?: 'dots' | 'pulse' | 'wave';\n}\n\nexport const Dot = styled.span<DotProps>`\n width: ${(props) => getSizeValue(props.size).dotSize};\n height: ${(props) => getSizeValue(props.size).dotSize};\n border-radius: ${tokens.borderRadius.full};\n background-color: ${tokens.colors.text.tertiary};\n animation: ${(props) => {\n switch (props.variant) {\n case 'pulse':\n return pulse;\n case 'wave':\n return wave;\n case 'dots':\n default:\n return dotPulse;\n }\n }}\n 1.4s ease-in-out infinite;\n`;\n\nexport const Message = styled.span<SizeProps>`\n font-size: ${(props) => getSizeValue(props.size).fontSize};\n color: ${tokens.colors.text.secondary};\n font-weight: ${tokens.typography.fontWeight.regular};\n line-height: ${tokens.typography.lineHeight.normal};\n white-space: nowrap;\n`;\n","import { useRef } from 'react';\nimport {\n Avatar,\n Container,\n Content,\n Dot,\n HeadphonesIcon,\n LoadingDots,\n Message,\n} from './AssistantThinking.styles';\n\nexport interface AssistantThinkingProps {\n message?: string;\n className?: string;\n ariaLabel?: string;\n /** Visual variant for the loading indicator */\n variant?: 'dots' | 'pulse' | 'wave' | 'text';\n /** Size of the component */\n size?: 'sm' | 'md' | 'lg';\n}\n\nexport function AssistantThinking({\n message = 'Analyzing data, please wait...',\n className,\n ariaLabel = 'Assistant is thinking',\n variant = 'dots',\n size = 'md',\n}: AssistantThinkingProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n\n const renderLoadingIndicator = () => {\n switch (variant) {\n case 'dots':\n return (\n <LoadingDots aria-hidden=\"true\" size={size}>\n <Dot style={{ animationDelay: '0ms' }} size={size} />\n <Dot style={{ animationDelay: '150ms' }} size={size} />\n <Dot style={{ animationDelay: '300ms' }} size={size} />\n </LoadingDots>\n );\n case 'pulse':\n return (\n <LoadingDots aria-hidden=\"true\" size={size} variant=\"pulse\">\n <Dot style={{ animationDelay: '0ms' }} size={size} variant=\"pulse\" />\n </LoadingDots>\n );\n case 'wave':\n return (\n <LoadingDots aria-hidden=\"true\" size={size} variant=\"wave\">\n <Dot style={{ animationDelay: '0ms' }} size={size} variant=\"wave\" />\n <Dot style={{ animationDelay: '100ms' }} size={size} variant=\"wave\" />\n <Dot style={{ animationDelay: '200ms' }} size={size} variant=\"wave\" />\n <Dot style={{ animationDelay: '300ms' }} size={size} variant=\"wave\" />\n <Dot style={{ animationDelay: '400ms' }} size={size} variant=\"wave\" />\n </LoadingDots>\n );\n case 'text':\n return null; // Just show the message with no indicator\n default:\n return null;\n }\n };\n\n return (\n <Container\n ref={containerRef}\n className={className}\n role=\"status\"\n aria-live=\"polite\"\n aria-label={ariaLabel}\n size={size}\n >\n <Avatar aria-hidden=\"true\" size={size}>\n <HeadphonesIcon viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M17 13a4 4 0 0 1 0 8c-2.142 0-4-1.79-4-4h-2a4 4 0 1 1-.535-2h3.07A4 4 0 0 1 17 13M2 12v-2h2V7a4 4 0 0 1 4-4h8a4 4 0 0 1 4 4v3h2v2z\" />\n </HeadphonesIcon>\n </Avatar>\n <Content>\n {renderLoadingIndicator()}\n <Message size={size}>{message}</Message>\n </Content>\n </Container>\n );\n}\n\nAssistantThinking.displayName = 'AssistantThinking';\n","import styled from 'styled-components';\nimport { tokens } from '../../theme/tokens';\n\n/**\n * Main container for the chat input component with dark theme\n * Matches header style with backdrop blur\n */\nexport const ChatInputContainer = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n padding: ${tokens.spacing.sm};\n background-color: ${tokens.colors.backdrop};\n backdrop-filter: blur(10px);\n -webkit-backdrop-filter: blur(10px);\n border-radius: ${tokens.borderRadius.none};\n box-shadow: ${tokens.shadows.none};\n box-sizing: border-box;\n\n @media (min-width: ${tokens.breakpoints.mobile}px) {\n padding: ${tokens.spacing.md};\n }\n`;\n\n/**\n * Container for suggestion buttons - horizontal layout with wrapping\n */\nexport const SuggestionsWrapper = styled.div`\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n gap: ${tokens.spacing.sm};\n margin-bottom: ${tokens.spacing.md};\n width: 100%;\n box-sizing: border-box;\n`;\n\n/**\n * Minimal pill-shaped suggestion button - Dark theme\n */\nexport const SuggestionButton = styled.button`\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n font-family: ${tokens.typography.fontFamily.primary};\n font-size: 13px;\n font-weight: ${tokens.typography.fontWeight.regular};\n text-align: center;\n border: 1px solid ${tokens.colors.border.default};\n border-radius: ${tokens.borderRadius.full};\n cursor: pointer;\n transition: all ${tokens.transitions.fast};\n white-space: nowrap;\n\n /* Dark theme colors */\n background-color: ${tokens.colors.surface.base};\n color: ${tokens.colors.text.secondary};\n\n /* Hover state */\n &:hover:not(:disabled) {\n background-color: ${tokens.colors.surface.elevated};\n border-color: ${tokens.colors.border.hover};\n }\n\n /* Active state */\n &:active:not(:disabled) {\n background-color: ${tokens.colors.background.light};\n }\n\n /* Focus state */\n &:focus-visible {\n outline: 2px solid ${tokens.colors.accent};\n outline-offset: 2px;\n }\n\n /* Disabled state */\n &:disabled {\n cursor: not-allowed;\n opacity: 0.4;\n }\n`;\n\n/**\n * Input wrapper with dark theme\n */\nexport const InputWrapper = styled.div`\n display: flex;\n align-items: flex-end; /* Align button to bottom when textarea expands */\n gap: ${tokens.spacing.sm};\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n background-color: rgba(25, 25, 25, 0.4);\n border: 1px solid ${tokens.colors.border.subtle};\n border-radius: ${tokens.borderRadius.lg};\n transition: all ${tokens.transitions.normal};\n width: 100%;\n box-sizing: border-box;\n\n &:focus-within {\n /* Subtle focus indication without bold colored border */\n border-color: ${tokens.colors.border.hover};\n background-color: rgba(50, 50, 52, 0.6);\n }\n`;\n\n/**\n * Text input field - Dark theme (textarea for multiline support)\n */\nexport const InputField = styled.textarea`\n flex: 1;\n border: none;\n outline: none;\n font-family: ${tokens.typography.fontFamily.primary};\n font-size: ${tokens.typography.fontSize.sm};\n color: ${tokens.colors.text.secondary};\n background: transparent;\n resize: none; /* Disable manual resize, we auto-resize */\n min-height: 24px; /* Single line height */\n max-height: 150px; /* Max ~6 lines before scrolling */\n overflow-y: auto;\n line-height: 1.5;\n padding: 0;\n margin: 0;\n\n &::placeholder {\n color: ${tokens.colors.text.tertiary};\n }\n\n &:disabled {\n color: ${tokens.colors.text.tertiary};\n cursor: not-allowed;\n }\n`;\n\n/**\n * Circular submit button with arrow icon\n */\ninterface SubmitButtonProps {\n disabled?: boolean;\n}\n\nexport const SubmitButton = styled.button<SubmitButtonProps>`\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n padding: 0;\n border: none;\n border-radius: ${tokens.borderRadius.full};\n background-color: ${(props) => (props.disabled ? tokens.colors.surface.elevated : tokens.colors.accent)};\n color: ${(props) => (props.disabled ? tokens.colors.text.tertiary : tokens.colors.text.primary)};\n cursor: ${(props) => (props.disabled ? 'not-allowed' : 'pointer')};\n transition: all ${tokens.transitions.normal};\n flex-shrink: 0;\n\n &:hover:not(:disabled) {\n background-color: ${tokens.colors.status.running};\n transform: scale(1.05);\n }\n\n &:active:not(:disabled) {\n transform: scale(0.98);\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.accent};\n outline-offset: 2px;\n }\n\n svg {\n width: 18px;\n height: 18px;\n }\n`;\n","import { useButton } from '@react-aria/button';\nimport type { AriaTextFieldProps } from '@react-aria/textfield';\nimport React, { type KeyboardEvent, useCallback, useEffect, useRef, useState } from 'react';\nimport {\n ChatInputContainer,\n InputField,\n InputWrapper,\n SubmitButton,\n SuggestionButton,\n SuggestionsWrapper,\n} from './ChatInput.styles';\n\nexport interface Suggestion {\n /** The text content of the suggestion */\n text: string;\n}\n\nexport interface ChatInputProps extends Omit<AriaTextFieldProps, 'onChange'> {\n /** Array of suggestion items to display above the input */\n suggestions?: Suggestion[];\n /** Callback when a suggestion is selected */\n onSuggestionSelect?: (suggestion: string) => void;\n /** Current message value */\n value?: string;\n /** Callback when message value changes */\n onChange?: (value: string) => void;\n /** Callback when message is submitted */\n onSubmit?: (message: string) => void;\n /** Placeholder text */\n placeholder?: string;\n /** Whether the input is disabled */\n isDisabled?: boolean;\n /** Whether the input is read-only */\n isReadOnly?: boolean;\n /** Whether to auto-focus the input */\n autoFocus?: boolean;\n /** Additional CSS class name */\n className?: string;\n /** ARIA label for the input */\n 'aria-label'?: string;\n}\n\n/**\n * ChatInput component with minimal pill-shaped suggestion buttons\n *\n * Features:\n * - Horizontal pill-shaped suggestion buttons with minimal design\n * - Auto-expanding multiline input (up to ~6 lines, then scrolls)\n * - Enter to submit, Shift+Enter for new line\n * - React ARIA for accessibility\n * - Keyboard navigation support\n * - Clean, modern design matching vendor image\n *\n * @example\n * ```tsx\n * <ChatInput\n * suggestions={[\n * { text: \"Create in-depth analysis\" },\n * { text: \"Identify actionable tasks\" }\n * ]}\n * placeholder=\"Ask, write or search for anything...\"\n * onSubmit={(message) => console.log(message)}\n * onSuggestionSelect={(suggestion) => console.log(suggestion)}\n * />\n * ```\n */\nexport const ChatInput: React.FC<ChatInputProps> = ({\n suggestions = [],\n onSuggestionSelect,\n value = '',\n onChange,\n onSubmit,\n placeholder = 'Ask, write or search for anything...',\n isDisabled = false,\n isReadOnly = false,\n autoFocus = false,\n className,\n 'aria-label': ariaLabel = 'Chat message input',\n // Note: Additional AriaTextFieldProps are accepted but not spread to textarea\n // since useTextField is not compatible with textarea elements\n}) => {\n const [internalValue, setInternalValue] = useState(value);\n const inputRef = useRef<HTMLTextAreaElement>(null);\n\n // Use controlled value if provided, otherwise use internal state\n const currentValue = value !== undefined ? value : internalValue;\n const setValue = onChange || setInternalValue;\n\n // Auto-resize textarea based on content\n const autoResize = useCallback(() => {\n const textarea = inputRef.current;\n if (textarea) {\n // Reset height to auto to get the correct scrollHeight\n textarea.style.height = 'auto';\n // Set height to scrollHeight (capped by max-height in CSS)\n textarea.style.height = `${textarea.scrollHeight}px`;\n }\n }, []);\n\n // Resize on value change\n useEffect(() => {\n autoResize();\n }, [currentValue, autoResize]);\n\n // Note: useTextField is not compatible with textarea, so we handle accessibility manually\n // The aria-label and other accessibility props are passed directly to the InputField\n\n // Direct onChange handler as backup\n const handleDirectChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n setValue(e.target.value);\n };\n\n // Handle keyboard events\n const handleKeyDown = (e: KeyboardEvent<HTMLTextAreaElement>) => {\n // Submit on Enter (without Shift for new line)\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n handleSubmit();\n }\n };\n\n // Handle submit\n const handleSubmit = () => {\n if (currentValue.trim() && onSubmit && !isDisabled && !isReadOnly) {\n onSubmit(currentValue.trim());\n setValue('');\n // Reset textarea height after clearing\n if (inputRef.current) {\n inputRef.current.style.height = 'auto';\n }\n }\n };\n\n // Handle suggestion selection\n const handleSuggestionClick = (suggestionText: string) => {\n if (onSuggestionSelect && !isDisabled && !isReadOnly) {\n onSuggestionSelect(suggestionText);\n }\n };\n\n const canSubmit = currentValue.trim().length > 0 && !isDisabled && !isReadOnly;\n\n return (\n <ChatInputContainer className={className}>\n {/* Suggestions */}\n {suggestions.length > 0 && (\n <SuggestionsWrapper role=\"list\" aria-label=\"Suggested prompts\">\n {suggestions.map((suggestion, index) => (\n <SuggestionButtonComponent\n key={`${suggestion.text}-${index}`}\n suggestion={suggestion}\n onSelect={handleSuggestionClick}\n isDisabled={isDisabled || isReadOnly}\n />\n ))}\n </SuggestionsWrapper>\n )}\n\n {/* Input field */}\n <InputWrapper>\n <InputField\n ref={inputRef}\n aria-label={ariaLabel}\n placeholder={placeholder}\n onKeyDown={handleKeyDown}\n onChange={handleDirectChange}\n autoFocus={autoFocus}\n disabled={isDisabled}\n readOnly={isReadOnly}\n value={currentValue}\n rows={1}\n />\n <SubmitButtonComponent\n onPress={handleSubmit}\n isDisabled={!canSubmit}\n ariaLabel=\"Send message\"\n />\n </InputWrapper>\n </ChatInputContainer>\n );\n};\n\n/**\n * Individual suggestion button component\n */\ninterface SuggestionButtonComponentProps {\n suggestion: Suggestion;\n onSelect: (text: string) => void;\n isDisabled?: boolean;\n}\n\nconst SuggestionButtonComponent: React.FC<SuggestionButtonComponentProps> = ({\n suggestion,\n onSelect,\n isDisabled = false,\n}) => {\n const ref = useRef<HTMLButtonElement>(null);\n const { buttonProps } = useButton(\n {\n onPress: () => onSelect(suggestion.text),\n isDisabled,\n 'aria-label': `Select suggestion: ${suggestion.text}`,\n },\n ref\n );\n\n return (\n <SuggestionButton {...buttonProps} ref={ref} role=\"listitem\">\n {suggestion.text}\n </SuggestionButton>\n );\n};\n\n/**\n * Submit button component with arrow icon\n */\ninterface SubmitButtonComponentProps {\n onPress: () => void;\n isDisabled?: boolean;\n ariaLabel?: string;\n}\n\nconst SubmitButtonComponent: React.FC<SubmitButtonComponentProps> = ({\n onPress,\n isDisabled = false,\n ariaLabel = 'Send message',\n}) => {\n const ref = useRef<HTMLButtonElement>(null);\n const { buttonProps } = useButton(\n {\n onPress,\n isDisabled,\n 'aria-label': ariaLabel,\n },\n ref\n );\n\n return (\n <SubmitButton {...buttonProps} ref={ref} disabled={isDisabled} title={ariaLabel}>\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n role=\"img\"\n aria-hidden=\"true\"\n >\n <title>Arrow Right Icon</title>\n <path\n d=\"M4 10H16M16 10L10 4M16 10L10 16\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </SubmitButton>\n );\n};\n\nChatInput.displayName = 'ChatInput';\n","import styled, { keyframes } from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\nexport const NavigationContainer = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n padding-top: ${tokens.spacing.xs};\n gap: ${tokens.spacing.xs};\n width: 100%;\n height: 100%;\n overflow-y: auto;\n overflow-x: hidden;\n\n &:hover {\n background: transparent !important;\n border-radius: 0 !important;\n box-shadow: none !important;\n }\n`;\n\nexport const CategoryGroup = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n padding-bottom: ${tokens.spacing.md};\n\n &:hover {\n background: transparent !important;\n border-radius: 0 !important;\n }\n`;\n\nexport const CategoryButton = styled.button<{ $active: boolean; $expanded: boolean }>`\n width: 48px;\n height: 48px;\n border: none;\n padding: 0;\n border-radius: ${({ $active }) => ($active ? tokens.borderRadius.xl : tokens.borderRadius.full)};\n background-color: ${({ $active }) => ($active ? tokens.colors.primary : tokens.colors.background.light)};\n color: ${tokens.colors.text.primary};\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all ${tokens.transitions.fast};\n position: relative;\n\n &:hover {\n border-radius: ${tokens.borderRadius.xl};\n background-color: ${({ $active }) => ($active ? tokens.colors.primary : tokens.colors.surface.overlayHover)};\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n`;\n\nexport const CategoryLabel = styled.span`\n font-size: 9px;\n color: ${tokens.colors.text.tertiary};\n margin-top: ${tokens.spacing.xs};\n text-align: center;\n max-width: 56px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nexport const SubItemList = styled.div<{ $expanded: boolean }>`\n display: ${({ $expanded }) => ($expanded ? 'flex' : 'none')};\n flex-direction: column;\n align-items: center;\n gap: ${tokens.spacing.xs};\n margin-top: ${tokens.spacing.xs};\n width: 100%;\n`;\n\nexport const SubItemButton = styled.button<{ $active: boolean }>`\n width: 32px;\n height: 32px;\n border: none;\n padding: 0;\n border-radius: ${({ $active }) => ($active ? tokens.borderRadius.md : tokens.borderRadius.full)};\n background-color: ${({ $active }) => ($active ? tokens.colors.surface.overlayActive : tokens.colors.surface.overlay)};\n color: ${tokens.colors.text.primary};\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all ${tokens.transitions.fast};\n\n &:hover {\n border-radius: ${tokens.borderRadius.md};\n background-color: ${({ $active }) =>\n $active ? tokens.colors.surface.overlayActive : tokens.colors.surface.overlayHover};\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n`;\n\nexport const CountBadge = styled.span`\n position: absolute;\n top: -2px;\n right: -2px;\n background: ${tokens.colors.accent};\n color: ${tokens.colors.text.primary};\n font-size: 10px;\n font-weight: ${tokens.typography.fontWeight.semibold};\n min-width: 16px;\n height: 16px;\n border-radius: ${tokens.borderRadius.md};\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0 ${tokens.spacing.xs};\n`;\n\nconst filterBadgeIn = keyframes`\n from {\n opacity: 0;\n transform: scale(0.5);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n`;\n\nexport const FilterBadge = styled.div`\n position: absolute;\n bottom: -${tokens.spacing.xs};\n right: -${tokens.spacing.xs};\n width: 18px;\n height: 18px;\n background: ${tokens.colors.background.darker};\n border-radius: ${tokens.borderRadius.full};\n display: flex;\n align-items: center;\n justify-content: center;\n animation: ${filterBadgeIn} ${tokens.transitions.normal};\n\n svg {\n width: 10px;\n height: 10px;\n fill: ${tokens.colors.text.primary};\n }\n`;\n\nexport const CategoryIconImg = styled.img<{ $size?: number; $active?: boolean }>`\n width: ${({ $size }) => $size || 24}px;\n height: ${({ $size }) => $size || 24}px;\n object-fit: contain;\n filter: ${({ $active }) => ($active ? 'brightness(0) invert(1)' : 'none')};\n`;\n\nexport const SubItemIconImg = styled.img<{ $size: number; $active?: boolean }>`\n width: ${({ $size }) => $size}px;\n height: ${({ $size }) => $size}px;\n object-fit: contain;\n filter: ${({ $active }) => ($active ? 'brightness(0) invert(1)' : 'none')};\n`;\n","/**\n * CategoryNav Component\n *\n * Vertical navigation bar displaying categories with expandable sub-items.\n * Generic component that can be used for any category-based navigation.\n */\n\nimport type React from 'react';\nimport { useCallback, useState } from 'react';\nimport {\n CategoryButton,\n CategoryGroup,\n CategoryIconImg,\n CategoryLabel,\n CountBadge,\n FilterBadge,\n NavigationContainer,\n SubItemButton,\n SubItemIconImg,\n SubItemList,\n} from './CategoryNav.styles';\n\n// =============================================================================\n// Types\n// =============================================================================\n\n/**\n * Represents a sub-item within a category\n */\nexport interface CategorySubItem {\n /** Unique identifier */\n id: string;\n /** Display name */\n name: string;\n /** Icon element or image path */\n icon: React.ReactNode | string;\n}\n\n/**\n * Represents a category in the navigation\n */\nexport interface CategoryItem<T extends string = string> {\n /** Unique identifier */\n id: T;\n /** Display label */\n label: string;\n /** Icon path (SVG) */\n iconPath: string;\n /** Sub-items within this category */\n subItems?: CategorySubItem[];\n}\n\nexport interface CategoryNavProps<T extends string = string> {\n /** List of categories to display */\n categories: CategoryItem<T>[];\n /** Currently selected category (null = none) */\n selectedCategory: T | null;\n /** Currently selected sub-item within category (null = all in category) */\n selectedSubItem: string | null;\n /** Callback when category is selected */\n onCategorySelect: (category: T | null) => void;\n /** Callback when sub-item is selected */\n onSubItemSelect: (subItem: string | null) => void;\n /** Optional counts per category */\n categoryCounts?: Record<T, number>;\n /** Optional set of enabled categories (if provided, hides categories not in set) */\n enabledCategories?: Set<T>;\n /** Test ID prefix for testing */\n testIdPrefix?: string;\n}\n\n// Filter icon for the badge\nconst FilterIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-label=\"Filter active\">\n <title>Filter active</title>\n <path d=\"M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z\" />\n </svg>\n);\n\n// =============================================================================\n// Component\n// =============================================================================\n\nexport function CategoryNav<T extends string = string>({\n categories,\n selectedCategory,\n selectedSubItem,\n onCategorySelect,\n onSubItemSelect,\n categoryCounts,\n enabledCategories,\n testIdPrefix = 'category',\n}: CategoryNavProps<T>): React.ReactElement {\n const [expandedCategory, setExpandedCategory] = useState<T | null>(selectedCategory);\n\n const hasSubItemFilterForCategory = useCallback(\n (categoryId: T): boolean => {\n if (!selectedSubItem) return false;\n const category = categories.find((c) => c.id === categoryId);\n return category?.subItems?.some((s) => s.id === selectedSubItem) ?? false;\n },\n [selectedSubItem, categories]\n );\n\n const handleCategoryClick = useCallback(\n (categoryId: T) => {\n // If this category is selected and has a sub-item filter, clear the filter\n if (selectedCategory === categoryId && hasSubItemFilterForCategory(categoryId)) {\n onSubItemSelect(null);\n return;\n }\n\n if (selectedCategory === categoryId) {\n // Toggle expansion without changing selection\n setExpandedCategory((prev) => (prev === categoryId ? null : categoryId));\n } else {\n // Select category and expand it\n onCategorySelect(categoryId);\n onSubItemSelect(null);\n setExpandedCategory(categoryId);\n }\n },\n [selectedCategory, onCategorySelect, onSubItemSelect, hasSubItemFilterForCategory]\n );\n\n const handleSubItemClick = useCallback(\n (subItemId: string) => {\n if (selectedSubItem === subItemId) {\n onSubItemSelect(null);\n } else {\n onSubItemSelect(subItemId);\n }\n },\n [selectedSubItem, onSubItemSelect]\n );\n\n // Filter categories by enabled set if provided\n const visibleCategories =\n enabledCategories && enabledCategories.size > 0\n ? categories.filter((cat) => enabledCategories.has(cat.id))\n : categories;\n\n const renderSubItemIcon = (subItem: CategorySubItem, isActive: boolean) => {\n if (typeof subItem.icon === 'string') {\n return <SubItemIconImg src={subItem.icon} alt={subItem.name} $size={16} $active={isActive} />;\n }\n return subItem.icon;\n };\n\n return (\n <NavigationContainer data-testid={`${testIdPrefix}-navigation`}>\n {visibleCategories.map((category) => {\n const isSelected = selectedCategory === category.id;\n const isExpanded = expandedCategory === category.id;\n const count = categoryCounts?.[category.id];\n const hasSubItemFilter = hasSubItemFilterForCategory(category.id);\n\n return (\n <CategoryGroup key={category.id}>\n <CategoryButton\n $active={isSelected}\n $expanded={isExpanded}\n onClick={() => handleCategoryClick(category.id)}\n aria-label={\n hasSubItemFilter ? `${category.label} (filtered - click to clear)` : category.label\n }\n aria-expanded={isExpanded}\n aria-pressed={isSelected}\n title={\n hasSubItemFilter ? `${category.label} - Click to clear filter` : category.label\n }\n data-testid={`${testIdPrefix}-${category.id}`}\n data-active={isSelected}\n >\n <CategoryIconImg\n src={category.iconPath}\n alt={category.label}\n $size={24}\n $active={isSelected}\n />\n {count !== undefined && count > 0 && <CountBadge>{count}</CountBadge>}\n {hasSubItemFilter && (\n <FilterBadge>\n <FilterIcon />\n </FilterBadge>\n )}\n </CategoryButton>\n <CategoryLabel>{category.label}</CategoryLabel>\n\n {category.subItems && category.subItems.length > 0 && (\n <SubItemList $expanded={isExpanded}>\n {category.subItems.map((subItem) => {\n const isSubItemActive = selectedSubItem === subItem.id;\n return (\n <SubItemButton\n key={subItem.id}\n $active={isSubItemActive}\n onClick={() => handleSubItemClick(subItem.id)}\n aria-label={subItem.name}\n title={subItem.name}\n data-testid={`${testIdPrefix}-subitem-${subItem.id}`}\n >\n {renderSubItemIcon(subItem, isSubItemActive)}\n </SubItemButton>\n );\n })}\n </SubItemList>\n )}\n </CategoryGroup>\n );\n })}\n </NavigationContainer>\n );\n}\n\nCategoryNav.displayName = 'CategoryNav';\n\nexport default CategoryNav;\n","import styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\ninterface IconWrapperProps {\n $size: number;\n $color: string;\n}\n\nexport const IconWrapper = styled.span<IconWrapperProps>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: ${({ $size }) => $size}px;\n height: ${({ $size }) => $size}px;\n color: ${({ $color }) => $color};\n line-height: 1;\n\n img {\n width: 100%;\n height: 100%;\n filter: ${({ $color }) => {\n if ($color === 'currentColor' || !$color) return 'inherit';\n if ($color === 'white' || $color === tokens.colors.text.primary || $color === '#fff') {\n return 'brightness(0) saturate(100%) invert(100%)';\n }\n if ($color === tokens.colors.text.secondary || $color === '#b9bbbe') {\n // Secondary text color (gray)\n return 'brightness(0) saturate(100%) invert(75%) sepia(8%) saturate(223%) hue-rotate(180deg) brightness(94%) contrast(86%)';\n }\n if ($color === tokens.colors.error || $color === '#ed4245' || $color === '#f04747') {\n // Error red\n return 'brightness(0) saturate(100%) invert(38%) sepia(97%) saturate(1459%) hue-rotate(334deg) brightness(95%) contrast(93%)';\n }\n return 'none';\n }};\n }\n`;\n","/**\n * Icon configuration and type definitions\n * Using @icon-set alias for cleaner imports\n */\n\n// Base path for all icons (served from public directory)\nexport const ICON_BASE_PATH = '/assets/icon-set' as const;\n\n// Available icon names as const for type safety\nexport const IconNames = {\n MIC: 'mic-fill',\n MIC_OFF: 'mic-off-fill',\n HEADPHONE: 'headphone-fill',\n VOLUME_MUTE: 'volume-mute-fill',\n SETTINGS_3_LINE: 'settings-3-line',\n HOME: 'home-fill',\n ADD_CIRCLE: 'add-circle-fill',\n COMPASS_DISCOVER: 'compass-discover-fill',\n DOWNLOAD: 'download-2-fill',\n ARROW_LEFT: 'arrow-left-fill',\n CALENDAR: 'calendar-fill',\n CHAT: 'chat-1-fill',\n FLOW_CHART: 'flow-chart',\n LOGOUT_CIRCLE_R_FILL: 'logout-circle-r-fill',\n LOGOUT_CIRCLE_R_LINE: 'logout-circle-r-line',\n SIDE_BAR_FILL: 'side-bar-fill',\n CHECK: 'check-fill',\n CHECK_CIRCLE: 'checkbox-circle-fill',\n CLOSE_CIRCLE: 'close-circle-fill',\n ERROR_WARNING: 'error-warning-fill',\n HAMMER: 'hammer-fill',\n ROCKET: 'rocket-fill',\n TICKET: 'coupon-2-fill',\n CLIPBOARD: 'clipboard-fill',\n} as const;\n\nexport type IconName = (typeof IconNames)[keyof typeof IconNames];\n\n// Icon file mapping\nexport const iconFiles: Record<IconName, string> = {\n 'mic-fill': 'Icon-mic-fill.svg',\n 'mic-off-fill': 'Icon-mic-off-fill.svg',\n 'headphone-fill': 'Icon-headphone-fill.svg',\n 'volume-mute-fill': 'Icon-volume-mute-fill.svg',\n 'settings-3-line': 'Icon-settings-3-line.svg',\n 'home-fill': 'Icon-home-fill.svg',\n 'add-circle-fill': 'Icon-add-circle-fill.svg',\n 'compass-discover-fill': 'Icon-compass-discover-fill.svg',\n 'download-2-fill': 'Icon-download-2-fill.svg',\n 'arrow-left-fill': 'Icon-arrow-left-fill.svg',\n 'calendar-fill': 'Icon-calendar-fill.svg',\n 'chat-1-fill': 'Icon-chat-1-fill.svg',\n 'flow-chart': 'Icon-flow-chart.svg',\n 'logout-circle-r-fill': 'Icon-logout-circle-r-fill.svg',\n 'logout-circle-r-line': 'Icon-logout-circle-r-line.svg',\n 'side-bar-fill': 'Icon-side-bar-fill.svg',\n 'check-fill': 'Icon-check-fill.svg',\n 'checkbox-circle-fill': 'Icon-checkbox-circle-fill.svg',\n 'close-circle-fill': 'Icon-close-circle-fill.svg',\n 'error-warning-fill': 'Icon-error-warning-fill.svg',\n 'hammer-fill': 'Icon-hammer-fill.svg',\n 'rocket-fill': 'Icon-rocket-fill.svg',\n 'coupon-2-fill': 'Icon-coupon-2-fill.svg',\n 'clipboard-fill': 'Icon-clipboard-fill.svg',\n};\n\n// Helper function to get full icon path\nexport function getIconPath(name: IconName): string {\n return `${ICON_BASE_PATH}/${iconFiles[name]}`;\n}\n","import type { ImgHTMLAttributes } from 'react';\nimport { IconWrapper } from './Icon.styles';\nimport { getIconPath, type IconName } from './icons';\n\nexport interface IconProps extends Omit<ImgHTMLAttributes<HTMLImageElement>, 'src' | 'alt'> {\n name: IconName;\n size?: number;\n color?: string;\n className?: string;\n}\n\nexport function Icon({\n name,\n size = 20,\n color = 'currentColor',\n className,\n ...imgProps\n}: IconProps) {\n const iconPath = getIconPath(name);\n\n return (\n <IconWrapper $size={size} $color={color} className={className} aria-hidden=\"true\">\n <img src={iconPath} alt=\"\" width={size} height={size} {...imgProps} />\n </IconWrapper>\n );\n}\n\nIcon.displayName = 'Icon';\n","import styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\nexport const Container = styled.nav`\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n background-color: ${tokens.colors.background.darker};\n border-top: 1px solid ${tokens.colors.border.subtle};\n /* Add vertical padding to prevent content overlap */\n padding-top: 4px;\n /* Use --safe-area-bottom CSS variable for Android navigation buttons.\n Android WebView doesn't support env(), so we use CSS custom properties\n injected by the native app. Fallback to 0 if not set. */\n padding-bottom: var(--safe-area-bottom, 0px);\n z-index: ${tokens.zIndex.sticky};\n\n /* Dark theme support */\n @media (prefers-color-scheme: dark) {\n background-color: ${tokens.colors.background.darkest};\n }\n`;\n\nexport const ContentWrapper = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n /* Fixed height for actual navbar content - keeps vertical centering */\n height: 52px;\n /* Left padding aligns WorkflowStatusCard icon with NavVertical icons (center at 36px) */\n /* Icon is 36px with 6px card padding, so card edge at 12px, icon center at 12+6+18=36px */\n padding: 0 ${tokens.spacing.xs} 0 12px;\n gap: ${tokens.spacing.xs}; /* 4px gap between status card and action buttons */\n max-width: 100%;\n\n /* Responsive padding - adjust for mobile nav width (60px, center at 30px) */\n @media (max-width: ${tokens.breakpoints.tablet}px) {\n /* Card edge at 6px, icon center at 6+6+18=30px to match 60px nav */\n padding: 0 ${tokens.spacing.xs} 0 6px;\n }\n`;\n\nexport const UserStatusSlot = styled.div`\n display: flex;\n align-items: center;\n min-width: 0; /* Allow flex item to shrink */\n flex: 1 1 auto; /* Allow slot to grow and take available space */\n\n /* Handle overflow for long usernames */\n > * {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n`;\n\nexport const ActionButtonsSlot = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n flex-shrink: 0;\n\n /* Ensure buttons stay visible */\n @media (min-width: 480px) {\n gap: ${tokens.spacing.sm};\n }\n`;\n","import type { ReactNode } from 'react';\nimport {\n ActionButtonsSlot,\n Container,\n ContentWrapper,\n UserStatusSlot,\n} from './NavHorizontal.styles';\n\nexport interface NavHorizontalProps {\n userStatusSlot?: ReactNode;\n actionsSlot?: ReactNode;\n className?: string;\n 'aria-label'?: string;\n}\n\nexport function NavHorizontal({\n userStatusSlot,\n actionsSlot,\n className,\n 'aria-label': ariaLabel = 'Horizontal navigation bar',\n}: NavHorizontalProps) {\n return (\n <Container className={className} role=\"navigation\" aria-label={ariaLabel}>\n <ContentWrapper>\n <UserStatusSlot>{userStatusSlot}</UserStatusSlot>\n <ActionButtonsSlot>{actionsSlot}</ActionButtonsSlot>\n </ContentWrapper>\n </Container>\n );\n}\n\nNavHorizontal.displayName = 'NavHorizontal';\n","import styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\nexport const Container = styled.nav`\n position: absolute;\n top: 0;\n left: 0;\n bottom: 52px; /* Account for horizontal nav height */\n width: 72px;\n background-color: ${tokens.colors.background.darker};\n display: flex;\n flex-direction: column;\n z-index: ${tokens.zIndex.base + 9}; /* Below horizontal nav and chat sidebar */\n overflow-y: auto;\n overflow-x: hidden;\n scrollbar-width: none; /* Firefox */\n /* Use CSS custom property for coordinated animations with MainPane */\n transition: transform var(--layout-transition-duration, 0.3s) var(--layout-transition-easing, ease-out);\n\n /* Hide scrollbar for Chrome, Safari and Opera */\n &::-webkit-scrollbar {\n display: none;\n }\n\n /* Dark theme support */\n @media (prefers-color-scheme: dark) {\n background-color: ${tokens.colors.background.darkest};\n }\n\n /* Responsive adjustments */\n @media (max-width: ${tokens.breakpoints.tablet}px) {\n width: 60px; /* Match MainPane left offset on mobile */\n }\n\n /* Mobile landscape: allow content to overflow and scroll with thin scrollbar */\n @media (orientation: landscape) and (max-height: 500px) {\n width: 60px;\n overflow-y: auto;\n overflow-x: hidden;\n scrollbar-width: thin; /* Firefox - show thin scrollbar */\n\n /* Show thin scrollbar for Chrome, Safari */\n &::-webkit-scrollbar {\n display: block;\n width: 3px;\n height: 3px;\n }\n\n &::-webkit-scrollbar-track {\n background: transparent;\n }\n\n &::-webkit-scrollbar-thumb {\n background: ${tokens.colors.border.default};\n border-radius: 2px;\n }\n }\n`;\n\nexport const TopSection = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 56px; /* Same as PaneSectionHeader on mobile */\n padding: 0;\n flex-shrink: 0;\n position: relative;\n\n @media (min-width: ${tokens.breakpoints.tablet}px) {\n height: 64px; /* Same as PaneSectionHeader on desktop */\n }\n`;\n\nexport const BackButton = styled.button`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 40px;\n height: 40px;\n border-radius: ${tokens.borderRadius.full};\n border: none;\n background-color: ${tokens.colors.background.light};\n color: ${tokens.colors.text.primary};\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all ${tokens.transitions.normal};\n -webkit-tap-highlight-color: transparent;\n\n &:hover {\n background-color: ${tokens.colors.primary};\n }\n\n &:active {\n transform: translate(-50%, -50%) scale(0.95);\n opacity: 0.8;\n }\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n`;\n\nexport const BackButtonIcon = styled.span`\n font-size: ${tokens.typography.fontSize.xl};\n line-height: ${tokens.typography.lineHeight.tight};\n font-weight: ${tokens.typography.fontWeight.bold};\n`;\n\nexport const Separator = styled.div`\n width: 32px;\n height: 2px;\n background-color: ${tokens.colors.background.light};\n align-self: center;\n margin: ${tokens.spacing.sm} auto ${tokens.spacing.md};\n border-radius: 1px;\n`;\n\nexport const FolderGroupsSlot = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: ${tokens.spacing.sm};\n padding: 0 ${tokens.spacing.md} ${tokens.spacing.md};\n flex: 1;\n padding-bottom: 120px; /* Prevent overlap with bottom section (2 buttons @ 40px + 1 gap @ 8px + padding @ 32px) */\n\n /* Server/workspace icons styling */\n > * {\n width: 48px;\n height: 48px;\n border-radius: ${tokens.borderRadius.full};\n transition: border-radius ${tokens.transitions.fast};\n cursor: pointer;\n\n &:hover {\n border-radius: ${tokens.borderRadius.xl};\n }\n }\n\n /* Responsive adjustments */\n @media (max-width: ${tokens.breakpoints.tablet}px) {\n padding: 0 6px ${tokens.spacing.md} 96px; /* Reduce horizontal padding on mobile */\n }\n\n /* Mobile landscape: remove extra padding since BottomSection flows with content */\n @media (orientation: landscape) and (max-height: 500px) {\n padding-bottom: ${tokens.spacing.md};\n flex: 0 0 auto; /* Don't flex-grow, allow natural height */\n }\n`;\n\nexport const BottomSection = styled.div`\n position: absolute;\n bottom: 0; /* At the bottom of the nav container */\n left: 0;\n right: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: ${tokens.spacing.sm};\n padding: ${tokens.spacing.md} 0;\n background-color: ${tokens.colors.background.darker};\n\n @media (prefers-color-scheme: dark) {\n background-color: ${tokens.colors.background.darkest};\n }\n\n /* Mobile landscape: make bottom section flow with content instead of fixed */\n @media (orientation: landscape) and (max-height: 500px) {\n position: relative;\n bottom: auto;\n margin-top: auto; /* Push to bottom of flex container */\n flex-shrink: 0;\n }\n`;\n\nexport const BottomButton = styled.button`\n width: 40px;\n height: 40px;\n border-radius: ${tokens.borderRadius.full};\n border: none;\n background-color: transparent;\n color: white;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all ${tokens.transitions.normal};\n -webkit-tap-highlight-color: transparent;\n\n &:hover {\n opacity: 0.7;\n }\n\n &:active {\n transform: scale(0.95);\n opacity: 0.8;\n }\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n border-radius: ${tokens.borderRadius.full};\n }\n`;\n","import { useButton } from '@react-aria/button';\nimport type { ReactNode } from 'react';\nimport { useRef } from 'react';\nimport { Icon } from '../Icon';\nimport {\n BackButton,\n BottomButton,\n BottomSection,\n Container,\n FolderGroupsSlot,\n Separator,\n TopSection,\n} from './NavVertical.styles';\n\nexport interface NavVerticalProps {\n onBackClick?: () => void;\n onHomeClick?: () => void;\n onSettingsClick?: () => void;\n onLogoutClick?: () => void;\n folderGroupsSlot?: ReactNode;\n className?: string;\n 'aria-label'?: string;\n}\n\nexport function NavVertical({\n onBackClick,\n onHomeClick,\n onSettingsClick,\n onLogoutClick,\n folderGroupsSlot,\n className,\n 'aria-label': ariaLabel = 'Vertical navigation sidebar',\n}: NavVerticalProps) {\n const backButtonRef = useRef<HTMLButtonElement>(null);\n const homeButtonRef = useRef<HTMLButtonElement>(null);\n const settingsButtonRef = useRef<HTMLButtonElement>(null);\n const logoutButtonRef = useRef<HTMLButtonElement>(null);\n\n const { buttonProps: backButtonProps } = useButton(\n {\n onPress: onBackClick,\n 'aria-label': 'Go back',\n },\n backButtonRef\n );\n\n const { buttonProps: homeButtonProps } = useButton(\n {\n onPress: onHomeClick,\n 'aria-label': 'Home',\n },\n homeButtonRef\n );\n\n const { buttonProps: settingsButtonProps } = useButton(\n {\n onPress: onSettingsClick,\n 'aria-label': 'Settings',\n },\n settingsButtonRef\n );\n\n const { buttonProps: logoutButtonProps } = useButton(\n {\n onPress: onLogoutClick,\n 'aria-label': 'Logout',\n },\n logoutButtonRef\n );\n\n return (\n <Container className={className} role=\"navigation\" aria-label={ariaLabel}>\n <TopSection>\n {onBackClick ? (\n <BackButton {...backButtonProps} ref={backButtonRef}>\n <Icon name=\"side-bar-fill\" size={20} color=\"white\" />\n </BackButton>\n ) : onHomeClick ? (\n <BackButton {...homeButtonProps} ref={homeButtonRef}>\n <Icon name=\"side-bar-fill\" size={24} color=\"white\" />\n </BackButton>\n ) : null}\n </TopSection>\n\n <Separator />\n\n <FolderGroupsSlot>{folderGroupsSlot}</FolderGroupsSlot>\n\n {(onSettingsClick || onLogoutClick) && (\n <BottomSection>\n {onSettingsClick && (\n <BottomButton {...settingsButtonProps} ref={settingsButtonRef}>\n <Icon name=\"settings-3-line\" size={24} color=\"white\" />\n </BottomButton>\n )}\n {onLogoutClick && (\n <BottomButton {...logoutButtonProps} ref={logoutButtonRef}>\n <Icon name=\"logout-circle-r-line\" size={24} color=\"white\" />\n </BottomButton>\n )}\n </BottomSection>\n )}\n </Container>\n );\n}\n\nNavVertical.displayName = 'NavVertical';\n","import styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\nexport const Container = styled.div`\n position: relative;\n width: 100%;\n height: 100vh;\n background-color: ${tokens.colors.surface.subtle};\n overflow: hidden;\n\n /* Ensure content is clipped on mobile */\n @media (max-width: ${tokens.breakpoints.tablet}px) {\n overflow: hidden;\n position: relative;\n }\n`;\n\n/**\n * BackgroundPane - Renders behind MainPane, visible when MainPane slides away\n * Used for displaying content like post previews that appear behind the main content\n */\nexport const BackgroundPane = styled.div`\n position: absolute;\n top: 0;\n left: 72px; /* Width of vertical nav */\n right: 0;\n bottom: 52px; /* Height of horizontal nav */\n background-color: transparent;\n overflow: auto;\n scrollbar-gutter: stable; /* Reserve space for scrollbar to prevent layout shift */\n z-index: ${tokens.zIndex.base}; /* Lower than MainPane */\n /* Use CSS custom property for coordinated animations with NavVertical */\n transition: transform var(--layout-transition-duration, 0.3s) var(--layout-transition-easing, ease-out);\n\n /* Custom scrollbar styling */\n &::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n }\n\n &::-webkit-scrollbar-track {\n background: ${tokens.colors.scrollbar.track};\n }\n\n &::-webkit-scrollbar-thumb {\n background-color: ${tokens.colors.scrollbar.thumb};\n border-radius: ${tokens.borderRadius.sm};\n }\n\n &::-webkit-scrollbar-thumb:hover {\n background-color: ${tokens.colors.scrollbar.thumbHover};\n }\n\n /* Firefox scrollbar */\n scrollbar-width: thin;\n scrollbar-color: ${tokens.colors.scrollbar.thumb} transparent;\n\n /* Responsive adjustments */\n @media (max-width: ${tokens.breakpoints.tablet}px) {\n left: 60px; /* Smaller nav on mobile */\n }\n`;\n\nexport const MainPane = styled.main`\n position: absolute;\n top: 0;\n left: 72px; /* Width of vertical nav */\n right: 0;\n bottom: 52px; /* Height of horizontal nav */\n background-color: ${tokens.colors.surface.overlay};\n overflow: auto;\n scrollbar-gutter: stable; /* Reserve space for scrollbar to prevent layout shift */\n z-index: ${tokens.zIndex.base + 1}; /* Higher than BackgroundPane */\n /* Use CSS custom property for coordinated animations with NavVertical */\n transition: transform var(--layout-transition-duration, 0.3s) var(--layout-transition-easing, ease-out);\n\n /* Custom scrollbar styling */\n &::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n }\n\n &::-webkit-scrollbar-track {\n background: ${tokens.colors.scrollbar.track};\n }\n\n &::-webkit-scrollbar-thumb {\n background-color: ${tokens.colors.scrollbar.thumb};\n border-radius: ${tokens.borderRadius.sm};\n }\n\n &::-webkit-scrollbar-thumb:hover {\n background-color: ${tokens.colors.scrollbar.thumbHover};\n }\n\n /* Firefox scrollbar */\n scrollbar-width: thin;\n scrollbar-color: ${tokens.colors.scrollbar.thumb} transparent;\n\n /* Responsive adjustments */\n @media (max-width: ${tokens.breakpoints.tablet}px) {\n left: 60px; /* Smaller nav on mobile */\n }\n`;\n","import type { ReactNode } from 'react';\nimport { NavHorizontal } from '../NavHorizontal';\nimport { NavVertical } from '../NavVertical';\nimport { BackgroundPane, Container, MainPane } from './Layout.styles';\n\nexport interface LayoutProps {\n mainPaneSlot: ReactNode;\n /** Background content rendered behind MainPane, visible when MainPane slides away */\n backgroundSlot?: ReactNode;\n navVerticalSlot?: ReactNode;\n navHorizontalUserSlot?: ReactNode;\n navHorizontalActionsSlot?: ReactNode;\n onNavBackClick?: () => void;\n onNavHomeClick?: () => void;\n onNavSettingsClick?: () => void;\n onNavLogoutClick?: () => void;\n className?: string;\n}\n\nexport function Layout({\n mainPaneSlot,\n backgroundSlot,\n navVerticalSlot,\n navHorizontalUserSlot,\n navHorizontalActionsSlot,\n onNavBackClick,\n onNavHomeClick,\n onNavSettingsClick,\n onNavLogoutClick,\n className,\n}: LayoutProps) {\n return (\n <Container className={className}>\n <NavVertical\n folderGroupsSlot={navVerticalSlot}\n onBackClick={onNavBackClick}\n onHomeClick={onNavHomeClick}\n onSettingsClick={onNavSettingsClick}\n onLogoutClick={onNavLogoutClick}\n />\n {backgroundSlot && <BackgroundPane>{backgroundSlot}</BackgroundPane>}\n <MainPane>{mainPaneSlot}</MainPane>\n <NavHorizontal\n userStatusSlot={navHorizontalUserSlot}\n actionsSlot={navHorizontalActionsSlot}\n />\n </Container>\n );\n}\n\nLayout.displayName = 'Layout';\n","import styled, { css } from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\nexport const Container = styled.div`\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: ${tokens.spacing.xs};\n`;\n\ninterface ActionButtonProps {\n $isActive?: boolean;\n $size?: number;\n $isPrimary?: boolean;\n}\n\nexport const ActionButton = styled.button<ActionButtonProps>`\n width: ${({ $size = 32 }) => $size}px;\n height: ${({ $size = 32 }) => $size}px;\n min-width: ${({ $size = 32 }) => $size}px;\n min-height: ${({ $size = 32 }) => $size}px;\n border-radius: ${({ $isPrimary }) => ($isPrimary ? tokens.borderRadius.full : tokens.borderRadius.md)};\n border: none;\n background-color: ${({ $isPrimary }) => ($isPrimary ? tokens.colors.primary : 'transparent')};\n color: ${({ $isPrimary }) => ($isPrimary ? tokens.colors.text.primary : tokens.colors.text.secondary)};\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all ${tokens.transitions.fast};\n font-size: ${tokens.typography.fontSize.base};\n -webkit-tap-highlight-color: transparent;\n\n &:hover {\n background-color: ${({ $isPrimary }) => ($isPrimary ? tokens.colors.secondary : tokens.colors.surface.overlayHover)};\n color: ${({ $isPrimary }) => ($isPrimary ? tokens.colors.text.primary : tokens.colors.text.primary)};\n }\n\n &:active {\n transform: scale(0.95);\n opacity: 0.8;\n }\n\n ${({ $isActive, $isPrimary }) =>\n $isActive &&\n !$isPrimary &&\n css`\n background-color: ${tokens.colors.surface.overlay};\n color: ${tokens.colors.text.primary};\n `}\n\n ${({ $isActive, $isPrimary }) =>\n $isActive &&\n $isPrimary &&\n css`\n background-color: ${tokens.colors.secondary};\n color: ${tokens.colors.text.primary};\n `}\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n`;\n","import { useButton } from '@react-aria/button';\nimport type { ReactNode } from 'react';\nimport { useRef } from 'react';\nimport { tokens } from '../../../theme/tokens';\nimport { Icon } from '../Icon';\nimport { ActionButton, Container } from './ActionButtons.styles';\n\nexport interface ActionButtonsProps {\n onCalendarClick?: () => void;\n onChatClick?: () => void;\n isCalendarActive?: boolean;\n isChatActive?: boolean;\n className?: string;\n}\n\ninterface ButtonProps {\n icon: ReactNode;\n label: string;\n onClick?: () => void;\n isActive?: boolean;\n size?: number;\n isPrimary?: boolean;\n}\n\nfunction ActionButtonItem({ icon, label, onClick, isActive, size, isPrimary }: ButtonProps) {\n const ref = useRef<HTMLButtonElement>(null);\n const { buttonProps } = useButton(\n {\n onPress: onClick,\n 'aria-label': label,\n 'aria-pressed': isActive,\n },\n ref\n );\n\n return (\n <ActionButton\n {...buttonProps}\n ref={ref}\n $isActive={isActive}\n $size={size}\n $isPrimary={isPrimary}\n >\n {icon}\n </ActionButton>\n );\n}\n\nexport function ActionButtons({\n onCalendarClick,\n onChatClick,\n isCalendarActive = false,\n isChatActive = false,\n className,\n}: ActionButtonsProps) {\n return (\n <Container className={className}>\n <ActionButtonItem\n icon={<Icon name=\"calendar-fill\" size={16} color={tokens.colors.text.secondary} />}\n label=\"Calendar\"\n onClick={onCalendarClick}\n isActive={isCalendarActive}\n size={32}\n />\n <ActionButtonItem\n icon={<Icon name=\"chat-1-fill\" size={16} color={tokens.colors.text.secondary} />}\n label=\"Chat\"\n onClick={onChatClick}\n isActive={isChatActive}\n size={32}\n />\n </Container>\n );\n}\n\nActionButtons.displayName = 'ActionButtons';\n","import styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\n// Status colors using design tokens\nconst statusColors = {\n online: tokens.colors.status.online,\n idle: tokens.colors.status.idle,\n busy: tokens.colors.status.busy,\n offline: tokens.colors.status.offline,\n};\n\ninterface StatusIndicatorProps {\n $status: 'online' | 'idle' | 'busy' | 'offline';\n}\n\ninterface ContainerProps {\n $isDisabled?: boolean;\n}\n\nexport const Container = styled.button<ContainerProps>`\n display: grid;\n grid-template-columns: auto 1fr;\n align-items: center;\n gap: ${tokens.spacing.sm};\n padding: 6px;\n margin: 0; /* No margin - positioning handled by parent slot */\n border-radius: ${tokens.borderRadius.md};\n border: none;\n background: ${tokens.colors.surface.subtle};\n color: inherit;\n font-family: ${tokens.typography.fontFamily.primary};\n transition: background-color ${tokens.transitions.fast}, opacity ${tokens.transitions.fast};\n cursor: ${(props) => (props.$isDisabled ? 'default' : 'pointer')};\n opacity: ${(props) => (props.$isDisabled ? 0.7 : 1)};\n text-align: left;\n width: 100%; /* Fill available slot width */\n /* Remove mobile tap highlight that causes blue flash */\n -webkit-tap-highlight-color: transparent;\n\n &:hover:not(:disabled) {\n background-color: ${(props) => (props.$isDisabled ? tokens.colors.surface.subtle : tokens.colors.surface.overlay)};\n }\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: none;\n /* Subtle focus ring instead of bright color */\n box-shadow: inset 0 0 0 1px ${tokens.colors.border.default};\n }\n\n &:active:not(:disabled) {\n /* Subtle press feedback - no color flash */\n opacity: 0.9;\n }\n`;\n\nexport const IconWrapper = styled.div`\n position: relative;\n width: 36px;\n height: 36px;\n border-radius: ${tokens.borderRadius.md};\n background-color: ${tokens.colors.background.light};\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n`;\n\nexport const WorkflowInfo = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.xs};\n min-width: 0;\n`;\n\nexport const WorkflowName = styled.span`\n color: ${tokens.colors.text.primary};\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.semibold};\n line-height: ${tokens.typography.lineHeight.tight};\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nexport const WorkflowStatus = styled.span`\n color: ${tokens.colors.text.tertiary};\n font-size: ${tokens.typography.fontSize.xs};\n font-weight: ${tokens.typography.fontWeight.regular};\n line-height: ${tokens.typography.lineHeight.tight};\n text-transform: capitalize;\n`;\n\nexport const WorkflowSubtitle = styled.span`\n color: ${tokens.colors.text.tertiary};\n font-size: ${tokens.typography.fontSize.xs};\n font-weight: ${tokens.typography.fontWeight.regular};\n line-height: ${tokens.typography.lineHeight.tight};\n opacity: 0.7;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nexport const StatusIndicatorOuter = styled.span<StatusIndicatorProps>`\n position: absolute;\n bottom: -2px;\n right: -2px;\n width: 12px;\n height: 12px;\n border-radius: ${tokens.borderRadius.full};\n background-color: ${tokens.colors.background.darker};\n display: flex;\n align-items: center;\n justify-content: center;\n`;\n\nexport const StatusIndicatorInner = styled.span<StatusIndicatorProps>`\n width: 8px;\n height: 8px;\n border-radius: ${tokens.borderRadius.full};\n background-color: ${({ $status }) => statusColors[$status]};\n`;\n","import { useButton } from '@react-aria/button';\nimport type { AriaButtonProps } from '@react-types/button';\nimport type { ReactNode } from 'react';\nimport { useRef } from 'react';\nimport {\n Container,\n IconWrapper,\n StatusIndicatorInner,\n StatusIndicatorOuter,\n WorkflowInfo,\n WorkflowName,\n WorkflowStatus,\n WorkflowSubtitle,\n} from './WorkflowStatusCard.styles';\n\nexport interface WorkflowStatusCardProps extends Omit<AriaButtonProps, 'children'> {\n icon: ReactNode;\n workflowName: string;\n status?: 'online' | 'idle' | 'busy' | 'offline';\n statusText?: string;\n /** Optional subtitle shown below status (e.g., time triggered) */\n subtitle?: string;\n className?: string;\n onClick?: () => void;\n}\n\nexport function WorkflowStatusCard({\n icon,\n workflowName,\n status = 'offline',\n statusText,\n subtitle,\n className,\n onClick,\n onPress,\n isDisabled,\n ...ariaProps\n}: WorkflowStatusCardProps) {\n const displayStatus = statusText || status;\n const ref = useRef<HTMLButtonElement>(null);\n\n // Combine onClick with onPress for React Aria compatibility\n const handlePress = () => {\n if (onClick) onClick();\n if (onPress) onPress({} as never);\n };\n\n const { buttonProps } = useButton(\n {\n ...ariaProps,\n onPress: handlePress,\n isDisabled,\n 'aria-label': ariaProps['aria-label'] || `${workflowName} workflow, status: ${displayStatus}`,\n },\n ref\n );\n\n return (\n <Container {...buttonProps} ref={ref} className={className} $isDisabled={isDisabled}>\n <IconWrapper>\n {icon}\n <StatusIndicatorOuter $status={status}>\n <StatusIndicatorInner $status={status} />\n </StatusIndicatorOuter>\n </IconWrapper>\n <WorkflowInfo>\n <WorkflowName>{workflowName}</WorkflowName>\n <WorkflowStatus>{displayStatus}</WorkflowStatus>\n {subtitle && <WorkflowSubtitle>{subtitle}</WorkflowSubtitle>}\n </WorkflowInfo>\n </Container>\n );\n}\n\nWorkflowStatusCard.displayName = 'WorkflowStatusCard';\n","import styled from 'styled-components';\nimport { tokens } from '../../theme/tokens';\n\n/**\n * Main container for the notification card with dark theme\n */\nexport const DarkNotificationCardContainer = styled.div`\n display: flex;\n flex-direction: column;\n padding: ${tokens.spacing.xs};\n background: ${tokens.colors.surface.base};\n border-radius: ${tokens.borderRadius.md};\n gap: ${tokens.spacing.xs};\n flex: 1;\n min-width: 0;\n overflow: hidden;\n`;\n\n/**\n * Section header button (collapsible) - dark theme\n */\nexport const DarkSectionHeader = styled.button`\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n padding: ${tokens.spacing.xs} ${tokens.spacing.xs};\n border: none;\n background: transparent;\n font-family: ${tokens.typography.fontFamily.primary};\n font-size: 11px;\n font-weight: ${tokens.typography.fontWeight.semibold};\n color: ${tokens.colors.text.secondary};\n text-align: left;\n cursor: pointer;\n transition: all ${tokens.transitions.normal};\n\n &:hover {\n color: ${tokens.colors.text.primary};\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.primary};\n outline-offset: 2px;\n border-radius: ${tokens.borderRadius.sm};\n }\n`;\n\n/**\n * Chevron icon for section header with rotation animation - dark theme\n */\ninterface ChevronIconProps {\n $isExpanded: boolean;\n}\n\nexport const DarkChevronIcon = styled.span<ChevronIconProps>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n transition: transform ${tokens.transitions.normal};\n color: ${tokens.colors.text.tertiary};\n\n ${(props) =>\n props.$isExpanded\n ? `\n transform: rotate(0deg);\n `\n : `\n transform: rotate(-90deg);\n `}\n\n svg {\n width: 12px;\n height: 12px;\n }\n`;\n\n/**\n * Container for section content (list of notification items) - dark theme\n */\nexport const DarkSectionContent = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.xs};\n padding-left: ${tokens.spacing.xs};\n margin-top: ${tokens.spacing.xs};\n min-width: 0;\n overflow: hidden;\n`;\n\n/**\n * Individual notification item wrapper (button) - dark theme\n */\ninterface NotificationItemWrapperProps {\n $isSelected: boolean;\n $hasIcon: boolean;\n}\n\nexport const DarkNotificationItemWrapper = styled.button<NotificationItemWrapperProps>`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n width: 100%;\n padding: ${tokens.spacing.xs} ${tokens.spacing.xs};\n border: none;\n cursor: pointer;\n text-align: left;\n transition: all ${tokens.transitions.normal};\n border-radius: ${tokens.borderRadius.sm};\n min-width: 0;\n overflow: hidden;\n\n /* Default state - transparent background */\n background-color: ${(props) => (props.$isSelected ? tokens.colors.primary : 'transparent')};\n\n /* Hover state */\n &:hover:not(:disabled) {\n background-color: ${(props) => (props.$isSelected ? tokens.colors.accent : tokens.colors.surface.overlay)};\n }\n\n /* Active state */\n &:active:not(:disabled) {\n transform: scale(0.99);\n }\n\n /* Focus state */\n &:focus-visible {\n outline: 2px solid ${tokens.colors.primary};\n outline-offset: 2px;\n }\n\n /* Disabled state */\n &:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n`;\n\n/**\n * Icon container for notification items - dark theme\n */\ninterface ItemIconProps {\n $iconColor?: string;\n $hasCustomIcon: boolean;\n}\n\nexport const DarkItemIcon = styled.span<ItemIconProps>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n flex-shrink: 0;\n border-radius: ${(props) => (props.$hasCustomIcon ? tokens.borderRadius.sm : tokens.borderRadius.full)};\n background-color: ${(props) => props.$iconColor || 'transparent'};\n color: ${(props) => (props.$hasCustomIcon ? tokens.colors.text.primary : tokens.colors.text.tertiary)};\n font-size: ${tokens.typography.fontSize.xs};\n\n /* Default circle icon styling */\n ${(props) =>\n !props.$hasCustomIcon &&\n `\n svg {\n width: 14px;\n height: 14px;\n }\n `}\n\n /* Custom icon (emoji or colored icon) styling */\n ${(props) =>\n props.$hasCustomIcon &&\n `\n padding: ${tokens.spacing.xs};\n `}\n`;\n\n/**\n * Text content for notification items - dark theme\n */\ninterface ItemTextProps {\n $isSelected: boolean;\n}\n\nexport const DarkItemText = styled.span<ItemTextProps>`\n flex: 1;\n font-family: ${tokens.typography.fontFamily.primary};\n font-size: 11px;\n font-weight: ${(props) => (props.$isSelected ? tokens.typography.fontWeight.medium : tokens.typography.fontWeight.regular)};\n color: ${(props) => (props.$isSelected ? tokens.colors.text.primary : tokens.colors.text.secondary)};\n line-height: ${tokens.typography.lineHeight.tight};\n word-wrap: break-word;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n`;\n\n/**\n * Three-dot menu button (shown on selected items) - dark theme\n */\nexport const DarkMenuButton = styled.button`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n padding: 0;\n border: none;\n border-radius: ${tokens.borderRadius.sm};\n background-color: transparent;\n color: ${tokens.colors.text.primary};\n cursor: pointer;\n transition: all ${tokens.transitions.normal};\n flex-shrink: 0;\n\n &:hover:not(:disabled) {\n background-color: ${tokens.colors.surface.overlayHover};\n }\n\n &:active:not(:disabled) {\n background-color: ${tokens.colors.surface.overlayActive};\n transform: scale(0.95);\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.primary};\n outline-offset: 2px;\n }\n\n svg {\n width: 14px;\n height: 14px;\n }\n`;\n\n/**\n * Timestamp text for action logs\n */\nexport const DarkTimestamp = styled.span`\n font-size: 10px;\n color: ${tokens.colors.text.tertiary};\n white-space: normal;\n word-wrap: break-word;\n text-align: right;\n max-width: 60px;\n`;\n","import { useButton } from '@react-aria/button';\nimport React, { type KeyboardEvent, useRef, useState } from 'react';\nimport type {\n NotificationCardProps,\n NotificationItem,\n NotificationSection,\n} from './NotificationCard';\nimport {\n DarkChevronIcon,\n DarkItemIcon,\n DarkItemText,\n DarkMenuButton,\n DarkNotificationCardContainer,\n DarkNotificationItemWrapper,\n DarkSectionContent,\n DarkSectionHeader,\n DarkTimestamp,\n} from './NotificationCard.dark.styles';\n\n/**\n * Dark-themed NotificationCard component for MainPaneMenu\n *\n * A dark variant of the NotificationCard component specifically designed\n * for use within the MainPaneMenu component. Features the same functionality\n * but with colors matching the dark theme.\n */\nexport const DarkNotificationCard: React.FC<NotificationCardProps> = ({\n sections,\n onItemClick,\n selectedItemId,\n onMenuClick,\n className,\n 'aria-label': ariaLabel = 'Action log history',\n}) => {\n // Track collapsed state for each section\n const [collapsedSections, setCollapsedSections] = useState<Record<string, boolean>>(() => {\n const initial: Record<string, boolean> = {};\n for (const section of sections) {\n initial[section.title] = section.isCollapsed || false;\n }\n return initial;\n });\n\n const toggleSection = (sectionTitle: string) => {\n setCollapsedSections((prev) => ({\n ...prev,\n [sectionTitle]: !prev[sectionTitle],\n }));\n };\n\n return (\n <DarkNotificationCardContainer className={className} aria-label={ariaLabel} role=\"region\">\n {sections.map((section) => (\n <DarkSectionComponent\n key={section.title}\n section={section}\n isCollapsed={collapsedSections[section.title] ?? false}\n onToggle={() => toggleSection(section.title)}\n onItemClick={onItemClick}\n selectedItemId={selectedItemId}\n onMenuClick={onMenuClick}\n />\n ))}\n </DarkNotificationCardContainer>\n );\n};\n\n/**\n * Individual section component with collapsible header - dark theme\n */\ninterface DarkSectionComponentProps {\n section: NotificationSection;\n isCollapsed: boolean;\n onToggle: () => void;\n onItemClick?: (item: NotificationItem) => void;\n selectedItemId?: string;\n onMenuClick?: (item: NotificationItem) => void;\n}\n\nconst DarkSectionComponent: React.FC<DarkSectionComponentProps> = ({\n section,\n isCollapsed,\n onToggle,\n onItemClick,\n selectedItemId,\n onMenuClick,\n}) => {\n const headerRef = useRef<HTMLButtonElement>(null);\n const { buttonProps } = useButton(\n {\n onPress: onToggle,\n 'aria-label': `${section.title} section, ${isCollapsed ? 'collapsed' : 'expanded'}`,\n 'aria-expanded': !isCollapsed,\n },\n headerRef\n );\n\n return (\n <section aria-label={`${section.title} actions`}>\n <DarkSectionHeader {...buttonProps} ref={headerRef}>\n {section.title}\n <DarkChevronIcon $isExpanded={!isCollapsed} aria-hidden=\"true\">\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n role=\"img\"\n aria-label=\"Expand/collapse icon\"\n >\n <title>Expand/collapse icon</title>\n <path\n d=\"M4 5L7 8L10 5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </DarkChevronIcon>\n </DarkSectionHeader>\n\n {!isCollapsed && (\n <DarkSectionContent role=\"list\">\n {section.items.map((item) => (\n <DarkNotificationItemComponent\n key={item.id}\n item={item}\n isSelected={item.id === selectedItemId}\n onItemClick={onItemClick}\n onMenuClick={onMenuClick}\n />\n ))}\n </DarkSectionContent>\n )}\n </section>\n );\n};\n\n/**\n * Individual notification item component - dark theme\n */\ninterface DarkNotificationItemComponentProps {\n item: NotificationItem & { timestamp?: string };\n isSelected: boolean;\n onItemClick?: (item: NotificationItem) => void;\n onMenuClick?: (item: NotificationItem) => void;\n}\n\nconst DarkNotificationItemComponent: React.FC<DarkNotificationItemComponentProps> = ({\n item,\n isSelected,\n onItemClick,\n onMenuClick,\n}) => {\n const itemRef = useRef<HTMLButtonElement>(null);\n const menuRef = useRef<HTMLButtonElement>(null);\n\n const { buttonProps: itemButtonProps } = useButton(\n {\n onPress: () => onItemClick?.(item),\n 'aria-label': `Action: ${item.text}`,\n 'aria-current': isSelected ? 'true' : undefined,\n },\n itemRef\n );\n\n const { buttonProps: menuButtonProps } = useButton(\n {\n onPress: () => onMenuClick?.(item),\n 'aria-label': `Options for ${item.text}`,\n },\n menuRef\n );\n\n // Handle keyboard navigation between item and menu button\n const handleItemKeyDown = (e: KeyboardEvent<HTMLButtonElement>) => {\n if (isSelected && e.key === 'Tab' && !e.shiftKey) {\n // Allow natural tab to menu button\n return;\n }\n };\n\n return (\n <DarkNotificationItemWrapper\n {...itemButtonProps}\n ref={itemRef}\n $isSelected={isSelected}\n $hasIcon={!!item.icon}\n role=\"listitem\"\n onKeyDown={handleItemKeyDown}\n >\n <DarkItemIcon $iconColor={item.iconColor} $hasCustomIcon={!!item.icon}>\n {item.icon || (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <circle cx=\"8\" cy=\"8\" r=\"6\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n </svg>\n )}\n </DarkItemIcon>\n <DarkItemText $isSelected={isSelected}>{item.text}</DarkItemText>\n {item.timestamp && <DarkTimestamp>{item.timestamp}</DarkTimestamp>}\n {isSelected && onMenuClick && (\n <DarkMenuButton\n {...menuButtonProps}\n ref={menuRef}\n onClick={(e) => {\n e.stopPropagation();\n menuButtonProps.onClick?.(e);\n }}\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <title>More options</title>\n <circle cx=\"8\" cy=\"3\" r=\"1\" fill=\"currentColor\" />\n <circle cx=\"8\" cy=\"8\" r=\"1\" fill=\"currentColor\" />\n <circle cx=\"8\" cy=\"13\" r=\"1\" fill=\"currentColor\" />\n </svg>\n </DarkMenuButton>\n )}\n </DarkNotificationItemWrapper>\n );\n};\n\nDarkNotificationCard.displayName = 'DarkNotificationCard';\n","import { Button, Disclosure, DisclosureGroup, DisclosurePanel } from 'react-aria-components';\nimport styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\nexport const Container = styled.div`\n width: 100%;\n height: 100%;\n background-color: transparent;\n color: ${tokens.colors.text.primary};\n display: flex;\n flex-direction: column;\n font-family: ${tokens.typography.fontFamily.primary};\n overflow: hidden; // Prevent content from escaping container bounds\n`;\n\nexport const TabListWrapper = styled.div`\n display: flex;\n border-bottom: 2px solid ${tokens.colors.border.default};\n background-color: ${tokens.colors.surface.subtle};\n padding: 0 ${tokens.spacing.md};\n gap: ${tokens.spacing.sm};\n overflow-x: auto;\n scrollbar-width: none;\n -ms-overflow-style: none;\n flex-shrink: 0; // Prevent shrinking when content overflows\n\n &::-webkit-scrollbar {\n display: none;\n }\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n padding: 0 ${tokens.spacing.sm};\n gap: ${tokens.spacing.xs};\n }\n`;\n\nexport const TabButton = styled.button<{ $isSelected?: boolean }>`\n padding: ${tokens.spacing.md} ${tokens.spacing.lg};\n background: none;\n border: none;\n color: ${(props) => (props.$isSelected ? tokens.colors.text.primary : tokens.colors.text.secondary)};\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.semibold};\n cursor: pointer;\n position: relative;\n transition: color ${tokens.transitions.normal};\n white-space: nowrap;\n flex-shrink: 0;\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n font-size: ${tokens.typography.fontSize.xs};\n }\n\n &:hover {\n color: ${tokens.colors.text.primary};\n }\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: -2px;\n border-radius: ${tokens.borderRadius.sm};\n }\n\n ${(props) =>\n props.$isSelected &&\n `\n &::after {\n content: '';\n position: absolute;\n bottom: -2px;\n left: 0;\n right: 0;\n height: 2px;\n background-color: ${tokens.colors.primary};\n }\n `}\n`;\n\nexport const TabPanelWrapper = styled.div`\n flex: 1;\n padding: ${tokens.spacing.lg};\n overflow-y: auto;\n overflow-x: hidden; // Prevent horizontal overflow\n scrollbar-gutter: stable; // Always reserve space for scrollbar to prevent width jump\n background-color: ${tokens.colors.surface.overlay};\n min-height: 0; // Enable proper flex shrinking and scrolling\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n padding: ${tokens.spacing.md};\n }\n\n @media (max-width: 480px) {\n padding: ${tokens.spacing.md};\n }\n\n /* Custom scrollbar */\n scrollbar-width: thin;\n scrollbar-color: ${tokens.colors.scrollbar.thumb} ${tokens.colors.scrollbar.track};\n\n &::-webkit-scrollbar {\n width: 8px;\n }\n\n &::-webkit-scrollbar-track {\n background: ${tokens.colors.background.dark};\n }\n\n &::-webkit-scrollbar-thumb {\n background: ${tokens.colors.background.light};\n border-radius: ${tokens.borderRadius.sm};\n }\n\n &::-webkit-scrollbar-thumb:hover {\n background: ${tokens.colors.scrollbar.thumbHover};\n }\n`;\n\n// Runs tab container\nexport const RunsContainer = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.lg};\n width: 100%;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n gap: ${tokens.spacing.md};\n }\n`;\n\n// Browse Automations button\nexport const BrowseButton = styled.button`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.md};\n width: 100%;\n padding: ${tokens.spacing.md} ${tokens.spacing.md};\n background-color: ${tokens.colors.surface.overlay};\n border: 1px solid ${tokens.colors.border.default};\n border-radius: ${tokens.borderRadius.md};\n color: ${tokens.colors.text.secondary};\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.medium};\n cursor: pointer;\n transition: all ${tokens.transitions.normal};\n white-space: nowrap;\n overflow: hidden;\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n font-size: ${tokens.typography.fontSize.sm};\n gap: ${tokens.spacing.sm};\n }\n\n &:hover {\n background-color: ${tokens.colors.surface.overlayHover};\n color: ${tokens.colors.text.primary};\n }\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n`;\n\n// DisclosureGroup styles\nexport const StyledDisclosureGroup = styled(DisclosureGroup)`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.sm};\n width: 100%;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n`;\n\n// Category Disclosure (Information, Community)\nexport const CategoryDisclosure = styled(Disclosure)`\n background-color: transparent;\n display: flex;\n flex-direction: column;\n width: 100%;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n\n &[data-expanded] {\n /* Styles when expanded */\n }\n\n &[data-disabled] {\n opacity: 0.5;\n cursor: not-allowed;\n }\n`;\n\n// Category Header (trigger button)\nexport const CategoryHeader = styled(Button)`\n width: 100%;\n padding: ${tokens.spacing.xs} 0;\n background: none;\n border: none;\n color: ${tokens.colors.text.secondary};\n display: flex;\n justify-content: space-between;\n align-items: center;\n cursor: pointer;\n transition: color ${tokens.transitions.normal};\n font-size: ${tokens.typography.fontSize.xs};\n font-weight: ${tokens.typography.fontWeight.semibold};\n text-transform: uppercase;\n letter-spacing: 0.5px;\n\n &:hover {\n color: ${tokens.colors.text.primary};\n }\n\n &:focus {\n outline: none;\n }\n\n &[data-focus-visible] {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n border-radius: ${tokens.borderRadius.sm};\n }\n`;\n\n// Category Title with icon\nexport const CategoryTitle = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.sm};\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n gap: ${tokens.spacing.xs};\n }\n`;\n\n// Category Icon\nexport const CategoryIcon = styled.img`\n width: 16px;\n height: 16px;\n opacity: 0.6;\n flex-shrink: 0;\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n width: 14px;\n height: 14px;\n }\n`;\n\n// Hashtag Icon\nexport const HashtagIcon = styled.img`\n width: 14px;\n height: 14px;\n opacity: 0.6;\n flex-shrink: 0;\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n width: 12px;\n height: 12px;\n }\n`;\n\n// Chevron icon\nexport const ChevronIcon = styled.div<{ $isExpanded: boolean }>`\n display: flex;\n align-items: center;\n transition: transform ${tokens.transitions.normal};\n transform: ${(props) => (props.$isExpanded ? 'rotate(0deg)' : 'rotate(-90deg)')};\n flex-shrink: 0;\n margin-left: ${tokens.spacing.xs};\n\n img {\n width: 16px;\n height: 16px;\n opacity: 0.6;\n }\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n img {\n width: 14px;\n height: 14px;\n }\n }\n`;\n\n// Category content panel\nexport const CategoryDisclosurePanel = styled(DisclosurePanel)`\n display: flex;\n flex-direction: column;\n gap: 2px;\n padding-left: ${tokens.spacing.xs};\n width: 100%;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n padding-left: ${tokens.spacing.xs};\n }\n\n &[data-entering] {\n animation: slideDown ${tokens.transitions.normal};\n }\n\n @keyframes slideDown {\n from {\n opacity: 0;\n transform: translateY(-${tokens.spacing.sm});\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n`;\n\n// Item container (announcements, server-rules, etc.)\nexport const ItemContainer = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.sm};\n padding: ${tokens.spacing.sm} ${tokens.spacing.sm}; // Increased vertical padding from 4px to 8px for better breathing room\n border-radius: ${tokens.borderRadius.sm};\n cursor: pointer;\n transition: background-color ${tokens.transitions.fast};\n min-width: 0;\n overflow: hidden;\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n gap: ${tokens.spacing.xs};\n padding: ${tokens.spacing.sm} ${tokens.spacing.xs}; // Increased vertical padding from 4px to 8px for mobile\n }\n\n &:hover {\n background-color: ${tokens.colors.surface.overlayHover};\n }\n`;\n\n// Nested item disclosure (for individual items)\nexport const ItemDisclosure = styled(Disclosure)`\n background-color: transparent;\n margin-bottom: ${tokens.spacing.xs};\n display: flex;\n flex-direction: column;\n width: 100%;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n\n &[data-expanded] {\n background-color: ${tokens.colors.surface.overlay};\n border-radius: ${tokens.borderRadius.md};\n }\n`;\n\n// Item header for nested disclosure\nexport const ItemHeader = styled(Button)<{ $isExpanded: boolean }>`\n width: 100%;\n padding: 0;\n background: none;\n border: none;\n cursor: pointer;\n transition: all ${tokens.transitions.fast};\n\n &:focus {\n outline: none;\n }\n\n &[data-focus-visible] {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n border-radius: ${tokens.borderRadius.sm};\n }\n`;\n\n// Item disclosure panel for logs\nexport const ItemDisclosurePanel = styled(DisclosurePanel)`\n padding: ${tokens.spacing.xs};\n background-color: ${tokens.colors.overlay};\n border-radius: 0 0 ${tokens.borderRadius.md} ${tokens.borderRadius.md};\n margin-top: -${tokens.spacing.xs};\n display: flex;\n flex-direction: column;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n padding: ${tokens.spacing.xs};\n }\n\n &[data-entering] {\n animation: slideDown ${tokens.transitions.normal};\n }\n\n @keyframes slideDown {\n from {\n opacity: 0;\n transform: translateY(-${tokens.spacing.sm});\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n`;\n\n// Item icon\nexport const ItemIcon = styled.img`\n width: 20px;\n height: 20px;\n opacity: 0.6;\n flex-shrink: 0;\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n width: 18px;\n height: 18px;\n }\n`;\n\n// Item name\nexport const ItemName = styled.span<{ $dimmed?: boolean }>`\n flex: 1;\n font-size: ${tokens.typography.fontSize.sm};\n color: ${(props) => (props.$dimmed ? tokens.colors.text.tertiary : tokens.colors.text.secondary)};\n font-weight: ${(props) => (props.$dimmed ? tokens.typography.fontWeight.regular : tokens.typography.fontWeight.medium)};\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n min-width: 0;\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n font-size: ${tokens.typography.fontSize.sm};\n }\n\n ${ItemContainer}:hover & {\n color: ${(props) => (props.$dimmed ? tokens.colors.text.secondary : tokens.colors.text.primary)};\n }\n`;\n\n// Run status indicator\nexport const RunStatus = styled.span<{ $status: 'completed' | 'running' | 'failed' }>`\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.medium};\n flex-shrink: 0;\n margin-left: auto;\n\n /* Color for SVG icons - using token colors for status */\n img {\n filter: ${(props) => {\n switch (props.$status) {\n case 'completed':\n return 'brightness(0) saturate(100%) invert(73%) sepia(34%) saturate(547%) hue-rotate(99deg) brightness(91%) contrast(89%)'; // success green\n case 'running':\n return 'brightness(0) saturate(100%) invert(78%) sepia(60%) saturate(1839%) hue-rotate(360deg) brightness(100%) contrast(94%)'; // warning yellow\n case 'failed':\n return 'brightness(0) saturate(100%) invert(34%) sepia(94%) saturate(3446%) hue-rotate(343deg) brightness(94%) contrast(94%)'; // error red\n default:\n return 'none';\n }\n }};\n }\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n font-size: ${tokens.typography.fontSize.xs};\n }\n`;\n\n// Old Disclosure styles (kept for backward compatibility)\nexport const DisclosureContainer = styled.div`\n margin-bottom: ${tokens.spacing.md};\n border-radius: ${tokens.borderRadius.lg};\n background-color: ${tokens.colors.surface.overlay};\n overflow: hidden;\n`;\n\nexport const DisclosureHeader = styled.button`\n width: 100%;\n padding: ${tokens.spacing.md};\n background: ${tokens.colors.surface.overlay};\n border: none;\n color: ${tokens.colors.text.primary};\n display: flex;\n justify-content: space-between;\n align-items: center;\n cursor: pointer;\n transition: background-color ${tokens.transitions.normal};\n text-align: left;\n\n &:hover {\n background-color: ${tokens.colors.surface.overlayHover};\n }\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: -2px;\n }\n\n > div {\n flex: 1;\n }\n\n strong {\n display: block;\n font-size: ${tokens.typography.fontSize.sm};\n margin-bottom: ${tokens.spacing.xs};\n }\n`;\n\nexport const DisclosureIcon = styled.span<{ $isExpanded: boolean }>`\n font-size: ${tokens.typography.fontSize.xs};\n color: ${tokens.colors.text.secondary};\n transition: transform ${tokens.transitions.normal};\n transform: ${(props) => (props.$isExpanded ? 'rotate(180deg)' : 'rotate(0deg)')};\n`;\n\nexport const DisclosureContent = styled.div`\n padding: ${tokens.spacing.md};\n padding-top: 0;\n background-color: ${tokens.colors.overlay};\n color: ${tokens.colors.text.secondary};\n font-size: ${tokens.typography.fontSize.sm};\n line-height: ${tokens.typography.lineHeight.relaxed};\n animation: slideDown ${tokens.transitions.normal};\n\n @keyframes slideDown {\n from {\n opacity: 0;\n transform: translateY(-${tokens.spacing.sm});\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n`;\n\n// Meter (Usage tab) styles\nexport const MeterContainer = styled.div`\n max-width: 600px;\n margin: 0 auto;\n`;\n\nexport const MeterLabel = styled.div`\n font-size: ${tokens.typography.fontSize.base};\n font-weight: ${tokens.typography.fontWeight.semibold};\n margin-bottom: ${tokens.spacing.md};\n color: ${tokens.colors.text.primary};\n`;\n\nexport const MeterBar = styled.div`\n width: 100%;\n height: 24px;\n background-color: ${tokens.colors.background.darker};\n border-radius: ${tokens.borderRadius.lg};\n overflow: hidden;\n position: relative;\n margin-bottom: ${tokens.spacing.md};\n`;\n\nexport const MeterFill = styled.div<{ $percentage: number; $color: string }>`\n height: 100%;\n width: ${(props) => props.$percentage}%;\n background: linear-gradient(90deg, ${(props) => props.$color}dd, ${(props) => props.$color});\n border-radius: ${tokens.borderRadius.lg};\n transition: width ${tokens.transitions.slow}, background ${tokens.transitions.slow};\n position: relative;\n\n &::after {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: linear-gradient(90deg, transparent, ${tokens.colors.surface.overlay}, transparent);\n animation: shimmer 2s infinite;\n }\n\n @keyframes shimmer {\n 0% {\n transform: translateX(-100%);\n }\n 100% {\n transform: translateX(100%);\n }\n }\n`;\n\nexport const MeterStats = styled.div`\n font-size: ${tokens.typography.fontSize.sm};\n color: ${tokens.colors.text.secondary};\n text-align: center;\n\n small {\n font-size: ${tokens.typography.fontSize.xs};\n color: ${tokens.colors.text.secondary};\n opacity: 0.8;\n }\n`;\n\n// Connections tab styles\nexport const ConnectionsContainer = styled.div`\n max-width: 500px;\n margin: 0 auto;\n text-align: center;\n`;\n\nexport const ConnectionDescription = styled.p`\n font-size: ${tokens.typography.fontSize.sm};\n color: ${tokens.colors.text.secondary};\n line-height: ${tokens.typography.lineHeight.relaxed};\n margin-bottom: ${tokens.spacing.lg};\n`;\n\nexport const GoogleButton = styled.button<{ $isConnected?: boolean }>`\n width: 100%;\n padding: ${tokens.spacing.md} ${tokens.spacing.lg};\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.semibold};\n color: ${(props) => (props.$isConnected ? tokens.colors.text.primary : tokens.colors.text.primary)};\n background: ${(props) => (props.$isConnected ? tokens.colors.background.light : `linear-gradient(135deg, ${tokens.colors.platform.facebook}, ${tokens.colors.platform.whatsapp})`)};\n border: none;\n border-radius: ${tokens.borderRadius.md};\n cursor: pointer;\n transition: all ${tokens.transitions.normal};\n display: flex;\n align-items: center;\n justify-content: center;\n gap: ${tokens.spacing.sm};\n\n &:hover {\n transform: translateY(-2px);\n box-shadow: ${tokens.shadows.lg};\n }\n\n &:active {\n transform: translateY(0);\n }\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n\n ${(props) =>\n props.$isConnected &&\n `\n &:hover {\n background-color: ${tokens.colors.error};\n box-shadow: ${tokens.shadows.lg};\n }\n `}\n`;\n","import { useButton } from '@react-aria/button';\nimport { useMeter } from '@react-aria/meter';\nimport { useTab, useTabList, useTabPanel } from '@react-aria/tabs';\nimport { Item } from '@react-stately/collections';\nimport { useTabListState } from '@react-stately/tabs';\nimport { useRef, useState } from 'react';\nimport type { Key } from 'react-aria-components';\nimport { Heading } from 'react-aria-components';\nimport { tokens } from '../../../theme/tokens';\nimport { DarkNotificationCard } from '../../NotificationCard/DarkNotificationCard';\nimport type { NotificationSection } from '../../NotificationCard/NotificationCard';\nimport {\n CategoryDisclosure,\n CategoryDisclosurePanel,\n CategoryHeader,\n CategoryTitle,\n ChevronIcon,\n ConnectionDescription,\n ConnectionsContainer,\n Container,\n GoogleButton,\n HashtagIcon,\n ItemContainer,\n ItemDisclosure,\n ItemDisclosurePanel,\n ItemHeader,\n ItemIcon,\n ItemName,\n MeterBar,\n MeterContainer,\n MeterFill,\n MeterLabel,\n MeterStats,\n RunStatus,\n RunsContainer,\n StyledDisclosureGroup,\n TabButton,\n TabListWrapper,\n TabPanelWrapper,\n} from './PaneMenus.styles';\n\n// Icons from assets/icon-set\nconst ICONS = {\n hashtag: '/assets/icon-set/Icon-hashtag.svg',\n // State icons - left side\n loader: '/assets/icon-set/Icon-loader-2-line.svg', // Pending\n radioButton: '/assets/icon-set/Icon-radio-button-line.svg', // Running\n shieldCheck: '/assets/icon-set/Icon-shield-check-fill.svg', // Completed\n shieldCross: '/assets/icon-set/Icon-shield-cross-fill.svg', // Failed\n // Status indicator icons - right side (before chevron)\n checkFill: '/assets/icon-set/Icon-check-fill.svg', // Completed status\n hourglass: '/assets/icon-set/Icon-hourglass-line.svg', // Running status\n closeFill: '/assets/icon-set/Icon-close-fill.svg', // Failed status\n // Legacy icons (kept for backward compatibility)\n bell: '/assets/icon-set/Icon-bell-fill.svg',\n file: '/assets/icon-set/Icon-file-3-fill.svg',\n link: '/assets/icon-set/Icon-external-link-fill.svg',\n chat: '/assets/icon-set/Icon-chat-1-fill.svg',\n logout: '/assets/icon-set/logout-box-fill.svg',\n community: '/assets/icon-set/Icon-community-fill.svg',\n cpu: '/assets/icon-set/Icon-cpu-fill.svg',\n chevronDown: '/assets/icon-set/Icon-arrow-down-s-fill.svg',\n warning: '/assets/icon-set/Icon-error-warning-fill.svg',\n};\n\nexport interface ActionLog {\n id: string;\n text: string;\n timestamp: string;\n icon?: React.ReactNode;\n iconColor?: string;\n}\n\nexport interface RunItem {\n id: string;\n name: string;\n status: 'completed' | 'running' | 'failed';\n details: string;\n /** @deprecated Use 'executing' | 'completed' | 'failed' instead. 'scheduled' maps to 'executing', 'issues' maps to 'failed' */\n category: 'scheduled' | 'completed' | 'issues' | 'executing' | 'failed';\n /** Workflow name for grouping executions under their parent workflow */\n workflowName?: string;\n /** Workflow ID for grouping */\n workflowId?: string;\n icon?:\n | 'loader'\n | 'radioButton'\n | 'shieldCheck'\n | 'shieldCross'\n | 'bell'\n | 'file'\n | 'link'\n | 'chat'\n | 'warning';\n logs?: ActionLog[];\n /** Whether logs are currently being loaded */\n logsLoading?: boolean;\n customContent?: React.ReactNode;\n}\n\nexport interface OAuthConnectionData {\n id: string;\n provider: string;\n connected: boolean;\n displayName?: string;\n scopes?: string[];\n}\n\nexport interface PaneMenusProps {\n activeTab?: 'workflows' | 'runs' | 'usage' | 'connections';\n onTabChange?: (tab: 'workflows' | 'runs' | 'usage' | 'connections') => void;\n\n // Runs tab props\n runs?: RunItem[];\n onRunSelect?: (runId: string) => void;\n\n // Usage tab props\n currentUsage?: number;\n maxUsage?: number;\n\n // Connections tab props\n isGoogleConnected?: boolean;\n onGoogleConnect?: () => void;\n onGoogleDisconnect?: () => void;\n\n // New: Real OAuth connection data support\n oauthConnections?: OAuthConnectionData[];\n onOAuthConnect?: (provider: string) => void;\n onOAuthDisconnect?: (connectionId: string) => void;\n isOAuthConnecting?: boolean;\n isOAuthLoading?: boolean;\n\n // Slot for custom connections tab content (replaces default ConnectionsTabContent)\n connectionsSlot?: React.ReactNode;\n\n // Slot for custom workflows tab content (adds new Workflows tab)\n workflowsSlot?: React.ReactNode;\n\n // Slot for custom usage tab content (replaces default UsageTabContent)\n usageSlot?: React.ReactNode;\n}\n\n// Individual item with nested disclosure for logs\nfunction ItemWithLogs({\n run,\n onRunSelect,\n}: {\n run: RunItem;\n onRunSelect?: (runId: string) => void;\n}) {\n const [isExpanded, setIsExpanded] = useState(false);\n\n // Format logs into NotificationSection format\n const logSections: NotificationSection[] = run.logs\n ? [\n {\n title: 'Action History',\n items: run.logs.map((log) => ({\n id: log.id,\n text: log.text,\n icon: log.icon,\n iconColor: log.iconColor,\n timestamp: log.timestamp,\n })),\n },\n ]\n : [];\n\n const handleClick = () => {\n setIsExpanded(!isExpanded);\n onRunSelect?.(run.id);\n };\n\n return (\n <ItemDisclosure id={run.id} data-testid={`run-item-${run.id}`}>\n <ItemHeader slot=\"trigger\" onClick={handleClick} $isExpanded={isExpanded}>\n <ItemContainer as=\"div\">\n <ItemIcon src={ICONS[run.icon || 'loader']} alt=\"\" data-testid={`run-icon-${run.status}`} />\n <ItemName data-testid=\"run-name\">{run.name}</ItemName>\n <RunStatus $status={run.status} data-testid={`run-status-${run.status}`}>\n {run.status === 'completed' && (\n <img src={ICONS.checkFill} alt=\"\" style={{ width: '16px', height: '16px' }} />\n )}\n {run.status === 'running' && (\n <img src={ICONS.hourglass} alt=\"\" style={{ width: '16px', height: '16px' }} />\n )}\n {run.status === 'failed' && (\n <img src={ICONS.closeFill} alt=\"\" style={{ width: '16px', height: '16px' }} />\n )}\n </RunStatus>\n <ChevronIcon $isExpanded={isExpanded}>\n <img src={ICONS.chevronDown} alt=\"\" />\n </ChevronIcon>\n </ItemContainer>\n </ItemHeader>\n {isExpanded && (\n <ItemDisclosurePanel>\n {run.customContent ? (\n // Render custom content directly\n <div style={{ padding: '16px' }}>{run.customContent}</div>\n ) : run.logsLoading ? (\n // Show loading spinner while logs are being fetched\n <div style={{ display: 'flex', justifyContent: 'center', padding: '16px' }}>\n <div\n style={{\n width: '24px',\n height: '24px',\n border: `2px solid ${tokens.colors.border.default}`,\n borderTopColor: tokens.colors.primary,\n borderRadius: '50%',\n animation: 'spin 1s linear infinite',\n }}\n />\n <style>{`@keyframes spin { to { transform: rotate(360deg); } }`}</style>\n </div>\n ) : run.logs && run.logs.length > 0 ? (\n <DarkNotificationCard sections={logSections} />\n ) : (\n <div style={{ color: tokens.colors.text.tertiary, fontSize: '13px', padding: '8px' }}>\n No action logs available\n </div>\n )}\n </ItemDisclosurePanel>\n )}\n </ItemDisclosure>\n );\n}\n\n// Helper to normalize category (backward compatibility)\nfunction normalizeCategory(category: RunItem['category']): 'executing' | 'completed' | 'failed' {\n if (category === 'scheduled') return 'executing';\n if (category === 'issues') return 'failed';\n return category as 'executing' | 'completed' | 'failed';\n}\n\n// Group runs by workflow name within a category\ninterface WorkflowGroup {\n workflowName: string;\n workflowId: string;\n runs: RunItem[];\n}\n\nfunction groupRunsByWorkflow(runs: RunItem[]): WorkflowGroup[] {\n const groups = new Map<string, WorkflowGroup>();\n\n for (const run of runs) {\n // Always use workflowId as the primary grouping key\n // Fallback to a normalized workflowName only if workflowId is missing\n const groupKey = run.workflowId || run.workflowName || 'ungrouped';\n\n if (!groups.has(groupKey)) {\n // Use the first workflowName encountered for this workflowId\n // This prevents duplicate groups when workflowName varies slightly\n const displayName = run.workflowName || run.name;\n\n groups.set(groupKey, {\n workflowId: groupKey,\n workflowName: displayName,\n runs: [],\n });\n }\n groups.get(groupKey)!.runs.push(run);\n }\n\n return Array.from(groups.values());\n}\n\n// Workflow group component with nested executions\nfunction WorkflowGroupItem({\n group,\n onRunSelect,\n expandedKeys,\n}: {\n group: WorkflowGroup;\n onRunSelect?: (runId: string) => void;\n expandedKeys: Set<Key>;\n}) {\n const groupId = `workflow-${group.workflowId}`;\n const isExpanded = expandedKeys.has(groupId);\n\n return (\n <CategoryDisclosure id={groupId}>\n <Heading level={4}>\n <CategoryHeader slot=\"trigger\" style={{ paddingLeft: '8px' }}>\n <CategoryTitle>\n <span style={{ fontSize: tokens.typography.fontSize.sm, fontWeight: 400 }}>{group.workflowName}</span>\n <span style={{ fontSize: tokens.typography.fontSize.xs, color: tokens.colors.text.tertiary, marginLeft: '8px' }}>\n ({group.runs.length})\n </span>\n </CategoryTitle>\n <ChevronIcon $isExpanded={isExpanded}>\n <img src={ICONS.chevronDown} alt=\"\" />\n </ChevronIcon>\n </CategoryHeader>\n </Heading>\n <CategoryDisclosurePanel>\n {group.runs.map((run) => (\n <ItemWithLogs key={run.id} run={run} onRunSelect={onRunSelect} />\n ))}\n </CategoryDisclosurePanel>\n </CategoryDisclosure>\n );\n}\n\n// Helper to render grouped runs with proper nesting\nfunction GroupedRunsRenderer({\n groups,\n onRunSelect,\n expandedKeys,\n setExpandedKeys,\n ariaLabel,\n emptyMessage,\n}: {\n groups: WorkflowGroup[];\n onRunSelect?: (runId: string) => void;\n expandedKeys: Set<Key>;\n setExpandedKeys: (keys: Set<Key>) => void;\n ariaLabel: string;\n emptyMessage: string;\n}) {\n if (groups.length === 0) {\n return (\n <ItemContainer>\n <ItemName $dimmed>{emptyMessage}</ItemName>\n </ItemContainer>\n );\n }\n\n // If single workflow with single execution, show directly\n const firstGroup = groups[0];\n if (groups.length === 1 && firstGroup && firstGroup.runs.length === 1) {\n return (\n <>\n {firstGroup.runs.map((run) => (\n <ItemWithLogs key={run.id} run={run} onRunSelect={onRunSelect} />\n ))}\n </>\n );\n }\n\n // Multiple executions - group by workflow\n return (\n <StyledDisclosureGroup\n expandedKeys={expandedKeys}\n onExpandedChange={setExpandedKeys}\n allowsMultipleExpanded\n aria-label={ariaLabel}\n >\n {groups.map((group) => (\n <WorkflowGroupItem\n key={group.workflowId}\n group={group}\n onRunSelect={onRunSelect}\n expandedKeys={expandedKeys}\n />\n ))}\n </StyledDisclosureGroup>\n );\n}\n\n// Runs tab content with DisclosureGroup - 3-level hierarchy\nfunction RunsTabContent({\n runs,\n onRunSelect,\n}: {\n runs: RunItem[];\n onRunSelect?: (runId: string) => void;\n}) {\n const [expandedKeys, setExpandedKeys] = useState<Set<Key>>(\n new Set(['executing', 'completed', 'failed']) // All status sections open by default\n );\n\n // Group runs by normalized category, then by workflow\n const executingRuns = runs.filter((r) => normalizeCategory(r.category) === 'executing');\n const completedRuns = runs.filter((r) => normalizeCategory(r.category) === 'completed');\n const failedRuns = runs.filter((r) => normalizeCategory(r.category) === 'failed');\n\n // Group each category by workflow\n const executingGroups = groupRunsByWorkflow(executingRuns);\n const completedGroups = groupRunsByWorkflow(completedRuns);\n const failedGroups = groupRunsByWorkflow(failedRuns);\n\n return (\n <RunsContainer>\n <StyledDisclosureGroup\n expandedKeys={expandedKeys}\n onExpandedChange={setExpandedKeys}\n allowsMultipleExpanded\n aria-label=\"Run sections\"\n >\n {/* Executing Section (was Scheduled) */}\n <CategoryDisclosure id=\"executing\" data-testid=\"category-executing\">\n <Heading level={3}>\n <CategoryHeader slot=\"trigger\" data-testid=\"category-header-executing\">\n <CategoryTitle>\n <HashtagIcon src={ICONS.hashtag} alt=\"\" />\n <span>EXECUTING</span>\n </CategoryTitle>\n <ChevronIcon $isExpanded={expandedKeys.has('executing')}>\n <img src={ICONS.chevronDown} alt=\"\" />\n </ChevronIcon>\n </CategoryHeader>\n </Heading>\n <CategoryDisclosurePanel>\n <GroupedRunsRenderer\n groups={executingGroups}\n onRunSelect={onRunSelect}\n expandedKeys={expandedKeys}\n setExpandedKeys={setExpandedKeys}\n ariaLabel=\"Executing workflows\"\n emptyMessage=\"No executing items\"\n />\n </CategoryDisclosurePanel>\n </CategoryDisclosure>\n\n {/* Completed Section */}\n <CategoryDisclosure id=\"completed\" data-testid=\"category-completed\">\n <Heading level={3}>\n <CategoryHeader slot=\"trigger\" data-testid=\"category-header-completed\">\n <CategoryTitle>\n <HashtagIcon src={ICONS.hashtag} alt=\"\" />\n <span>COMPLETED</span>\n </CategoryTitle>\n <ChevronIcon $isExpanded={expandedKeys.has('completed')}>\n <img src={ICONS.chevronDown} alt=\"\" />\n </ChevronIcon>\n </CategoryHeader>\n </Heading>\n <CategoryDisclosurePanel>\n <GroupedRunsRenderer\n groups={completedGroups}\n onRunSelect={onRunSelect}\n expandedKeys={expandedKeys}\n setExpandedKeys={setExpandedKeys}\n ariaLabel=\"Completed workflows\"\n emptyMessage=\"No completed items\"\n />\n </CategoryDisclosurePanel>\n </CategoryDisclosure>\n\n {/* Failed Section (was Issues) */}\n <CategoryDisclosure id=\"failed\" data-testid=\"category-failed\">\n <Heading level={3}>\n <CategoryHeader slot=\"trigger\" data-testid=\"category-header-failed\">\n <CategoryTitle>\n <HashtagIcon src={ICONS.hashtag} alt=\"\" />\n <span>FAILED</span>\n </CategoryTitle>\n <ChevronIcon $isExpanded={expandedKeys.has('failed')}>\n <img src={ICONS.chevronDown} alt=\"\" />\n </ChevronIcon>\n </CategoryHeader>\n </Heading>\n <CategoryDisclosurePanel>\n <GroupedRunsRenderer\n groups={failedGroups}\n onRunSelect={onRunSelect}\n expandedKeys={expandedKeys}\n setExpandedKeys={setExpandedKeys}\n ariaLabel=\"Failed workflows\"\n emptyMessage=\"No failed items\"\n />\n </CategoryDisclosurePanel>\n </CategoryDisclosure>\n </StyledDisclosureGroup>\n </RunsContainer>\n );\n}\n\n// Usage tab content with meter\nfunction UsageTabContent({\n currentUsage = 0,\n maxUsage = 100000,\n}: {\n currentUsage?: number;\n maxUsage?: number;\n}) {\n const ref = useRef<HTMLDivElement>(null);\n const { meterProps, labelProps } = useMeter({\n label: 'Token Usage',\n value: currentUsage,\n minValue: 0,\n maxValue: maxUsage,\n });\n\n const percentage = Math.round((currentUsage / maxUsage) * 100);\n\n // Determine color based on usage\n let color = '#10b981'; // green\n if (percentage >= 75)\n color = '#ef4444'; // red\n else if (percentage >= 50) color = '#f59e0b'; // yellow\n\n return (\n <MeterContainer>\n <MeterLabel {...labelProps}>Token Usage</MeterLabel>\n <MeterBar {...meterProps} ref={ref}>\n <MeterFill $percentage={percentage} $color={color} />\n </MeterBar>\n <MeterStats>\n {percentage}% of {maxUsage.toLocaleString()} tokens used\n <br />\n <small>\n {currentUsage.toLocaleString()} / {maxUsage.toLocaleString()} tokens\n </small>\n </MeterStats>\n </MeterContainer>\n );\n}\n\n// Connections tab content\nfunction ConnectionsTabContent({\n isGoogleConnected = false,\n onGoogleConnect,\n onGoogleDisconnect,\n oauthConnections,\n onOAuthConnect,\n onOAuthDisconnect,\n isOAuthConnecting = false,\n isOAuthLoading = false,\n}: {\n isGoogleConnected?: boolean;\n onGoogleConnect?: () => void;\n onGoogleDisconnect?: () => void;\n oauthConnections?: OAuthConnectionData[];\n onOAuthConnect?: (provider: string) => void;\n onOAuthDisconnect?: (connectionId: string) => void;\n isOAuthConnecting?: boolean;\n isOAuthLoading?: boolean;\n}) {\n const ref = useRef<HTMLButtonElement>(null);\n\n // Use real OAuth data if available, otherwise fall back to simple boolean prop\n const useRealOAuthData = oauthConnections && onOAuthConnect && onOAuthDisconnect;\n const googleConnection = useRealOAuthData\n ? oauthConnections.find((c) => c.provider === 'google')\n : undefined;\n const isConnected = useRealOAuthData ? googleConnection?.connected || false : isGoogleConnected;\n\n const handlePress = () => {\n if (useRealOAuthData) {\n if (isConnected && googleConnection) {\n onOAuthDisconnect(googleConnection.id);\n } else {\n onOAuthConnect('google');\n }\n } else {\n // Fall back to old simple callbacks\n if (isConnected && onGoogleDisconnect) {\n onGoogleDisconnect();\n } else if (!isConnected && onGoogleConnect) {\n onGoogleConnect();\n }\n }\n };\n\n const isButtonDisabled = isOAuthLoading || isOAuthConnecting;\n\n const { buttonProps } = useButton(\n {\n onPress: handlePress,\n isDisabled: isButtonDisabled,\n },\n ref\n );\n\n if (isOAuthLoading) {\n return (\n <ConnectionsContainer>\n <ConnectionDescription>Loading connections...</ConnectionDescription>\n </ConnectionsContainer>\n );\n }\n\n const buttonText = isOAuthConnecting\n ? 'Connecting...'\n : isConnected\n ? '✓ Disconnect from Google'\n : 'Connect with Google';\n\n const descriptionText = isConnected\n ? googleConnection?.displayName\n ? `Connected as ${googleConnection.displayName}. You can access Google services and data.`\n : 'Your Google account is connected. You can access Google services and data.'\n : 'Connect your Google account to access Google services and integrate with your workflows.';\n\n return (\n <ConnectionsContainer>\n <ConnectionDescription>{descriptionText}</ConnectionDescription>\n <GoogleButton {...buttonProps} ref={ref} $isConnected={isConnected}>\n {buttonText}\n </GoogleButton>\n {isConnected && googleConnection?.scopes && googleConnection.scopes.length > 0 && (\n <div style={{ marginTop: '16px', fontSize: '13px', color: tokens.colors.text.secondary }}>\n Connected services: {googleConnection.scopes.join(', ')}\n </div>\n )}\n </ConnectionsContainer>\n );\n}\n\n// Tab component\nfunction Tab({ item, state }: { item: any; state: ReturnType<typeof useTabListState> }) {\n const ref = useRef<HTMLButtonElement>(null);\n const { tabProps } = useTab({ key: item.key }, state, ref);\n\n return (\n <TabButton\n {...tabProps}\n ref={ref}\n $isSelected={state.selectedKey === item.key}\n data-testid={`tab-${item.key}`}\n >\n {item.rendered}\n </TabButton>\n );\n}\n\n// TabList component\nfunction TabList({\n state,\n ...props\n}: { state: ReturnType<typeof useTabListState> } & React.HTMLAttributes<HTMLDivElement>) {\n const ref = useRef<HTMLDivElement>(null);\n const { tabListProps } = useTabList(props, state, ref);\n\n return (\n <TabListWrapper {...tabListProps} ref={ref}>\n {[...state.collection].map((item) => (\n <Tab key={item.key} item={item} state={state} />\n ))}\n </TabListWrapper>\n );\n}\n\n// TabPanel component\nfunction TabPanel({\n state,\n ...props\n}: { state: ReturnType<typeof useTabListState> } & React.HTMLAttributes<HTMLDivElement>) {\n const ref = useRef<HTMLDivElement>(null);\n const { tabPanelProps } = useTabPanel(props, state, ref);\n\n return (\n <TabPanelWrapper {...tabPanelProps} ref={ref} data-testid={`tabpanel-${state.selectedKey}`}>\n {state.selectedItem?.props.children}\n </TabPanelWrapper>\n );\n}\n\nexport function PaneMenus({\n activeTab = 'runs',\n onTabChange,\n runs = [],\n onRunSelect,\n currentUsage = 0,\n maxUsage = 100000,\n isGoogleConnected = false,\n onGoogleConnect,\n onGoogleDisconnect,\n oauthConnections,\n onOAuthConnect,\n onOAuthDisconnect,\n isOAuthConnecting = false,\n isOAuthLoading = false,\n connectionsSlot,\n workflowsSlot,\n usageSlot,\n}: PaneMenusProps) {\n const state = useTabListState({\n selectedKey: activeTab,\n onSelectionChange: (key) => {\n if (onTabChange) {\n onTabChange(key as 'workflows' | 'runs' | 'usage' | 'connections');\n }\n },\n children: (\n <>\n {workflowsSlot && (\n <Item key=\"workflows\" title=\"Workflows\">\n {workflowsSlot}\n </Item>\n )}\n <Item key=\"runs\" title=\"Runs\">\n <RunsTabContent runs={runs} onRunSelect={onRunSelect} />\n </Item>\n <Item key=\"usage\" title=\"Usage\">\n {usageSlot || <UsageTabContent currentUsage={currentUsage} maxUsage={maxUsage} />}\n </Item>\n <Item key=\"connections\" title=\"Connections\">\n {connectionsSlot || (\n <ConnectionsTabContent\n isGoogleConnected={isGoogleConnected}\n onGoogleConnect={onGoogleConnect}\n onGoogleDisconnect={onGoogleDisconnect}\n oauthConnections={oauthConnections}\n onOAuthConnect={onOAuthConnect}\n onOAuthDisconnect={onOAuthDisconnect}\n isOAuthConnecting={isOAuthConnecting}\n isOAuthLoading={isOAuthLoading}\n />\n )}\n </Item>\n </>\n ),\n });\n\n return (\n <Container>\n <TabList state={state} aria-label=\"Main pane menu\" />\n <TabPanel key={state.selectedItem?.key} state={state} />\n </Container>\n );\n}\n","import styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\nexport const Container = styled.header`\n position: relative;\n width: 100%;\n height: 56px;\n background-color: ${tokens.colors.surface.subtle};\n backdrop-filter: blur(10px);\n -webkit-backdrop-filter: blur(10px);\n overflow: hidden;\n display: flex;\n align-items: center;\n justify-content: center;\n\n /* Background pattern - responsive sizes */\n &::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-image: url('/assets/bg-set/pattern/Size=xs, Type=Waves Rays2.svg');\n background-size: cover;\n background-position: center;\n background-repeat: no-repeat;\n opacity: 0.6;\n z-index: 0;\n }\n\n /* Small screens */\n @media (min-width: ${tokens.breakpoints.mobile}px) {\n &::before {\n background-image: url('/assets/bg-set/pattern/Size=sm, Type=Waves Rays2.svg');\n }\n }\n\n /* Medium screens */\n @media (min-width: ${tokens.breakpoints.tablet}px) {\n height: 64px;\n\n &::before {\n background-image: url('/assets/bg-set/pattern/Size=md, Type=Waves Rays2.svg');\n }\n }\n\n /* Large screens */\n @media (min-width: ${tokens.breakpoints.desktop}px) {\n &::before {\n background-image: url('/assets/bg-set/pattern/Size=lg, Type=Waves Rays2.svg');\n }\n }\n\n /* Extra large screens */\n @media (min-width: 1440px) {\n &::before {\n background-image: url('/assets/bg-set/pattern/Size=xl, Type=Waves Rays2.svg');\n }\n }\n\n /* Dark theme support */\n @media (prefers-color-scheme: dark) {\n background-color: ${tokens.colors.backdrop};\n }\n`;\n\nexport const BrandLogo = styled.img`\n position: relative;\n z-index: 1;\n max-height: 28px;\n height: auto;\n width: auto;\n object-fit: contain;\n pointer-events: none;\n user-select: none;\n\n /* Slightly larger on desktop */\n @media (min-width: ${tokens.breakpoints.tablet}px) {\n max-height: 32px;\n }\n`;\n\nexport const SettingsButton = styled.button<{ $isHovered?: boolean }>`\n position: absolute;\n top: 50%;\n right: ${tokens.spacing.md};\n transform: translateY(-50%);\n z-index: 2;\n\n /* Button appearance */\n width: 40px;\n height: 40px;\n border-radius: ${tokens.borderRadius.full};\n border: none;\n background-color: ${tokens.colors.surface.glass};\n cursor: pointer;\n\n /* Center the icon */\n display: flex;\n align-items: center;\n justify-content: center;\n\n /* Smooth transitions */\n transition: background-color ${tokens.transitions.normal}, transform ${tokens.transitions.fast};\n\n /* Hover state */\n &:hover {\n background-color: ${tokens.colors.surface.overlayHover};\n }\n\n /* Active state */\n &:active {\n transform: translateY(-50%) scale(0.95);\n }\n\n /* Focus visible state for accessibility */\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n\n /* Disabled state */\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n /* Responsive positioning */\n @media (min-width: ${tokens.breakpoints.tablet}px) {\n right: ${tokens.spacing.md};\n }\n\n @media (min-width: ${tokens.breakpoints.desktop}px) {\n right: ${tokens.spacing.lg};\n }\n`;\n\nexport const BackButton = styled.button<{ $isHovered?: boolean }>`\n position: absolute;\n top: 50%;\n left: ${tokens.spacing.md};\n transform: translateY(-50%);\n z-index: 2;\n\n /* Button appearance */\n width: 40px;\n height: 40px;\n border-radius: ${tokens.borderRadius.full};\n border: none;\n background-color: ${tokens.colors.surface.glass};\n cursor: pointer;\n\n /* Center the icon */\n display: flex;\n align-items: center;\n justify-content: center;\n\n /* Smooth transitions */\n transition: background-color ${tokens.transitions.normal}, transform ${tokens.transitions.fast};\n\n /* Hover state */\n &:hover {\n background-color: ${tokens.colors.surface.overlayHover};\n }\n\n /* Active state */\n &:active {\n transform: translateY(-50%) scale(0.95);\n }\n\n /* Focus visible state for accessibility */\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n\n /* Disabled state */\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n /* Responsive positioning */\n @media (min-width: ${tokens.breakpoints.tablet}px) {\n left: ${tokens.spacing.md};\n }\n\n @media (min-width: ${tokens.breakpoints.desktop}px) {\n left: ${tokens.spacing.lg};\n }\n`;\n","import { useButton } from '@react-aria/button';\nimport { useRef, useState } from 'react';\nimport { tokens } from '../../../theme/tokens';\nimport { Icon } from '../Icon';\nimport type { IconName } from '../Icon/icons';\nimport { BackButton, BrandLogo, Container, SettingsButton } from './PaneSectionHeader.styles';\n\nexport type BrandType = 'Google' | 'Microsoft' | 'Slack' | 'YouTube';\n\nexport interface PaneSectionHeaderProps {\n /**\n * Brand logo to display in the center of the header\n * @default 'Google'\n */\n brand?: BrandType;\n /**\n * Callback fired when back button is clicked\n */\n onBackClick?: () => void;\n /**\n * Callback fired when settings button is clicked\n */\n onSettingsClick?: () => void;\n /**\n * Icon name for the settings button\n * @default 'flow-chart'\n */\n settingsIcon?: string;\n /**\n * Additional CSS class name\n */\n className?: string;\n /**\n * Accessible label for the header\n */\n 'aria-label'?: string;\n}\n\n/**\n * PaneSectionHeader component\n *\n * A fixed-height header positioned at the top of the main pane section.\n * Features a centered brand logo and a settings button in the top-right corner.\n * Background includes responsive Rays2 pattern from the design system.\n *\n * @example\n * ```tsx\n * <PaneSectionHeader\n * brand=\"Google\"\n * onSettingsClick={() => console.log('Settings clicked')}\n * />\n * ```\n */\nexport function PaneSectionHeader({\n brand = 'Google',\n onBackClick,\n onSettingsClick,\n settingsIcon = 'flow-chart',\n className,\n 'aria-label': ariaLabel = 'Pane section header',\n}: PaneSectionHeaderProps) {\n const [isBackHovered, setIsBackHovered] = useState(false);\n const [isSettingsHovered, setIsSettingsHovered] = useState(false);\n const backButtonRef = useRef<HTMLButtonElement>(null);\n const settingsButtonRef = useRef<HTMLButtonElement>(null);\n\n const { buttonProps: backButtonProps } = useButton(\n {\n onPress: onBackClick,\n 'aria-label': 'Go back',\n },\n backButtonRef\n );\n\n const { buttonProps: settingsButtonProps } = useButton(\n {\n onPress: onSettingsClick,\n 'aria-label': 'Workflow configuration',\n },\n settingsButtonRef\n );\n\n return (\n <Container className={className} role=\"banner\" aria-label={ariaLabel}>\n {/* Back button - top left */}\n {onBackClick && (\n <BackButton\n {...backButtonProps}\n ref={backButtonRef}\n onMouseEnter={() => setIsBackHovered(true)}\n onMouseLeave={() => setIsBackHovered(false)}\n $isHovered={isBackHovered}\n >\n <Icon name=\"arrow-left-fill\" size={20} color={tokens.colors.text.secondary} />\n </BackButton>\n )}\n\n {/* Brand logo centered - using white variant for better contrast on dark background */}\n <BrandLogo src={`/assets/bg-set/brand-logos/${brand}2.svg`} alt={brand} />\n\n {/* Settings button - top right */}\n <SettingsButton\n {...settingsButtonProps}\n ref={settingsButtonRef}\n onMouseEnter={() => setIsSettingsHovered(true)}\n onMouseLeave={() => setIsSettingsHovered(false)}\n $isHovered={isSettingsHovered}\n >\n <Icon name={settingsIcon as IconName} size={20} color={tokens.colors.text.secondary} />\n </SettingsButton>\n </Container>\n );\n}\n\nPaneSectionHeader.displayName = 'PaneSectionHeader';\n","import styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\nexport const Container = styled.button<{ $active?: boolean }>`\n /* Base button styling */\n width: 48px;\n height: 48px;\n border: none;\n padding: ${tokens.spacing.xs};\n border-radius: ${({ $active }) => ($active ? tokens.borderRadius.xl : tokens.borderRadius.full)};\n background-color: ${tokens.colors.background.light};\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all ${tokens.transitions.fast};\n position: relative;\n overflow: hidden;\n\n /* Hover state */\n &:hover {\n border-radius: ${tokens.borderRadius.xl};\n background-color: ${tokens.colors.surface.overlayHover};\n }\n\n /* Focus visible state for accessibility */\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n\n /* Active indicator */\n ${({ $active }) =>\n $active &&\n `\n &::before {\n content: '';\n position: absolute;\n left: -16px;\n top: 50%;\n transform: translateY(-50%);\n width: 4px;\n height: 40px;\n background-color: ${tokens.colors.text.primary};\n border-radius: 0 ${tokens.borderRadius.sm} ${tokens.borderRadius.sm} 0;\n }\n `}\n\n /* Disabled state */\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n`;\n\nexport const LogoImage = styled.img`\n width: 100%;\n height: 100%;\n object-fit: contain;\n pointer-events: none;\n user-select: none;\n`;\n","import { useButton } from '@react-aria/button';\nimport type { AriaButtonProps } from '@react-types/button';\nimport { useRef } from 'react';\nimport { Container, LogoImage } from './ServiceIcon.styles';\n\nexport type ServiceBrand =\n | 'Facebook'\n | 'Gmail'\n | 'Instagram'\n | 'LinkedIn'\n | 'Reddit'\n | 'Slack'\n | 'Telegram'\n | 'WhatsApp'\n | 'X'\n | 'YouTube';\n\nexport interface ServiceIconProps extends AriaButtonProps {\n /**\n * Brand logo to display\n */\n brand: ServiceBrand;\n /**\n * Whether the service icon is active/selected\n */\n active?: boolean;\n /**\n * Additional CSS class name\n */\n className?: string;\n}\n\n/**\n * ServiceIcon component\n *\n * Displays a circular brand logo icon that can be used as a service selector.\n * Uses colored brand logos from assets/icons/Brand and supports active/hover states.\n *\n * @example\n * ```tsx\n * <ServiceIcon\n * brand=\"Gmail\"\n * active={true}\n * onPress={() => console.log('Gmail clicked')}\n * aria-label=\"Gmail service\"\n * />\n * ```\n */\nexport function ServiceIcon({ brand, active = false, className, ...ariaProps }: ServiceIconProps) {\n const ref = useRef<HTMLButtonElement>(null);\n const { buttonProps } = useButton(\n {\n ...ariaProps,\n 'aria-pressed': active,\n },\n ref\n );\n\n return (\n <Container {...buttonProps} ref={ref} $active={active} className={className}>\n <LogoImage src={`/assets/icons/Brand/${brand}.svg`} alt={brand} />\n </Container>\n );\n}\n\nServiceIcon.displayName = 'ServiceIcon';\n","import styled from 'styled-components';\nimport { tokens } from '../../theme/tokens';\n\n/**\n * Main container for the notification card with light gradient background\n */\nexport const NotificationCardContainer = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n max-width: 600px;\n padding: ${tokens.spacing.xl};\n background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%);\n border-radius: ${tokens.borderRadius['2xl']};\n box-shadow: ${tokens.shadows.card};\n gap: ${tokens.spacing.md};\n`;\n\n/**\n * Section header button (collapsible)\n */\nexport const SectionHeader = styled.button`\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n padding: ${tokens.spacing.sm} ${tokens.spacing.xs};\n border: none;\n background: transparent;\n font-family: ${tokens.typography.fontFamily.primary};\n font-size: ${tokens.typography.fontSize.base};\n font-weight: ${tokens.typography.fontWeight.bold};\n color: ${tokens.colors.secondary};\n text-align: left;\n cursor: pointer;\n transition: all ${tokens.transitions.normal};\n\n &:hover {\n color: ${tokens.colors.background.darkest};\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.accent};\n outline-offset: 2px;\n border-radius: ${tokens.borderRadius.md};\n }\n`;\n\n/**\n * Chevron icon for section header with rotation animation\n */\ninterface ChevronIconProps {\n $isExpanded: boolean;\n}\n\nexport const ChevronIcon = styled.span<ChevronIconProps>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n transition: transform ${tokens.transitions.normal};\n color: ${tokens.colors.text.tertiary};\n\n ${(props) =>\n props.$isExpanded\n ? `\n transform: rotate(0deg);\n `\n : `\n transform: rotate(-90deg);\n `}\n\n svg {\n width: 16px;\n height: 16px;\n }\n`;\n\n/**\n * Container for section content (list of notification items)\n */\nexport const SectionContent = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.sm};\n padding-left: 0;\n margin-top: ${tokens.spacing.xs};\n`;\n\n/**\n * Individual notification item wrapper (button)\n */\ninterface NotificationItemWrapperProps {\n $isSelected: boolean;\n $hasIcon: boolean;\n}\n\nexport const NotificationItemWrapper = styled.button<NotificationItemWrapperProps>`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.md};\n width: 100%;\n padding: ${(props) => (props.$isSelected ? `${tokens.spacing.md} ${tokens.spacing.md}` : `${tokens.spacing.sm} ${tokens.spacing.md}`)};\n border: none;\n cursor: pointer;\n text-align: left;\n transition: all ${tokens.transitions.normal};\n border-radius: ${(props) => (props.$isSelected ? tokens.borderRadius.md : tokens.borderRadius.md)};\n\n /* Default state - transparent background */\n background-color: ${(props) => (props.$isSelected ? tokens.colors.secondary : 'transparent')};\n\n /* Hover state */\n &:hover:not(:disabled) {\n background-color: ${(props) => (props.$isSelected ? tokens.colors.background.darkest : tokens.colors.surface.overlay)};\n }\n\n /* Active state */\n &:active:not(:disabled) {\n transform: scale(0.99);\n }\n\n /* Focus state */\n &:focus-visible {\n outline: 2px solid ${(props) => (props.$isSelected ? tokens.colors.text.primary : tokens.colors.accent)};\n outline-offset: 2px;\n }\n\n /* Disabled state */\n &:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n`;\n\n/**\n * Icon container for notification items\n */\ninterface ItemIconProps {\n $iconColor?: string;\n $hasCustomIcon: boolean;\n}\n\nexport const ItemIcon = styled.span<ItemIconProps>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n flex-shrink: 0;\n border-radius: ${(props) => (props.$hasCustomIcon ? tokens.borderRadius.sm : tokens.borderRadius.full)};\n background-color: ${(props) => props.$iconColor || 'transparent'};\n color: ${(props) => (props.$hasCustomIcon ? tokens.colors.text.primary : tokens.colors.text.tertiary)};\n font-size: ${(props) => (props.$hasCustomIcon ? tokens.typography.fontSize.base : tokens.typography.fontSize.sm)};\n\n /* Default circle icon styling */\n ${(props) =>\n !props.$hasCustomIcon &&\n `\n svg {\n width: 20px;\n height: 20px;\n }\n `}\n\n /* Custom icon (emoji or colored icon) styling */\n ${(props) =>\n props.$hasCustomIcon &&\n `\n padding: ${tokens.spacing.xs};\n `}\n`;\n\n/**\n * Text content for notification items\n */\ninterface ItemTextProps {\n $isSelected: boolean;\n}\n\nexport const ItemText = styled.span<ItemTextProps>`\n flex: 1;\n font-family: ${tokens.typography.fontFamily.primary};\n font-size: 15px;\n font-weight: ${(props) => (props.$isSelected ? tokens.typography.fontWeight.medium : tokens.typography.fontWeight.regular)};\n color: ${(props) => (props.$isSelected ? tokens.colors.text.primary : tokens.colors.text.tertiary)};\n line-height: ${tokens.typography.lineHeight.normal};\n word-wrap: break-word;\n`;\n\n/**\n * Three-dot menu button (shown on selected items)\n */\nexport const MenuButton = styled.button`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n padding: 0;\n border: none;\n border-radius: ${tokens.borderRadius.sm};\n background-color: transparent;\n color: ${tokens.colors.text.primary};\n cursor: pointer;\n transition: all ${tokens.transitions.normal};\n flex-shrink: 0;\n\n &:hover:not(:disabled) {\n background-color: ${tokens.colors.surface.overlayActive};\n }\n\n &:active:not(:disabled) {\n background-color: rgba(255, 255, 255, 0.25);\n transform: scale(0.95);\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.text.primary};\n outline-offset: 2px;\n }\n\n svg {\n width: 20px;\n height: 20px;\n }\n`;\n","import { useButton } from '@react-aria/button';\nimport React, { type KeyboardEvent, useRef, useState } from 'react';\nimport {\n ChevronIcon,\n ItemIcon,\n ItemText,\n MenuButton,\n NotificationCardContainer,\n NotificationItemWrapper,\n SectionContent,\n SectionHeader,\n} from './NotificationCard.styles';\n\nexport interface NotificationItem {\n /** Unique identifier for the item */\n id: string;\n /** The text content of the notification */\n text: string;\n /** Optional icon (can be emoji, SVG, or icon component) */\n icon?: React.ReactNode;\n /** Icon background color (for colored icons like Slack, Google Sheets) */\n iconColor?: string;\n /** Whether this item is currently selected/active */\n isSelected?: boolean;\n}\n\nexport interface NotificationSection {\n /** Section title (e.g., \"Today\", \"Yesterday\") */\n title: string;\n /** Whether the section is initially collapsed */\n isCollapsed?: boolean;\n /** Array of notification items in this section */\n items: NotificationItem[];\n}\n\nexport interface NotificationCardProps {\n /** Array of notification sections */\n sections: NotificationSection[];\n /** Callback when an item is clicked */\n onItemClick?: (item: NotificationItem) => void;\n /** Currently selected item ID */\n selectedItemId?: string;\n /** Callback when menu button is clicked (three-dot menu) */\n onMenuClick?: (item: NotificationItem) => void;\n /** Additional CSS class name */\n className?: string;\n /** ARIA label for the notification card */\n 'aria-label'?: string;\n}\n\n/**\n * NotificationCard component with collapsible sections\n *\n * Features:\n * - Date-based sections with collapsible headers\n * - Different item states (default, selected)\n * - Icon variants (circle icon, colored app icons)\n * - Three-dot menu on selected items\n * - React ARIA for accessibility\n * - Full keyboard navigation support\n * - Clean design matching vendor image\n *\n * @example\n * ```tsx\n * <NotificationCard\n * sections={[\n * {\n * title: \"Today\",\n * items: [\n * { id: \"1\", text: \"Help me write a professional email.\" },\n * { id: \"2\", text: \"Write a letter to the work chat\", icon: \"💬\", iconColor: \"#4A90E2\" }\n * ]\n * },\n * {\n * title: \"Yesterday\",\n * items: [\n * { id: \"3\", text: \"Generate a 3D scene of robots\", isSelected: true }\n * ]\n * }\n * ]}\n * selectedItemId=\"3\"\n * onItemClick={(item) => console.log(item)}\n * onMenuClick={(item) => console.log(\"Menu clicked\", item)}\n * />\n * ```\n */\nexport const NotificationCard: React.FC<NotificationCardProps> = ({\n sections,\n onItemClick,\n selectedItemId,\n onMenuClick,\n className,\n 'aria-label': ariaLabel = 'Notification history',\n}) => {\n // Track collapsed state for each section\n const [collapsedSections, setCollapsedSections] = useState<Record<string, boolean>>(() => {\n const initial: Record<string, boolean> = {};\n for (const section of sections) {\n initial[section.title] = section.isCollapsed || false;\n }\n return initial;\n });\n\n const toggleSection = (sectionTitle: string) => {\n setCollapsedSections((prev) => ({\n ...prev,\n [sectionTitle]: !prev[sectionTitle],\n }));\n };\n\n return (\n <NotificationCardContainer className={className} aria-label={ariaLabel} role=\"region\">\n {sections.map((section) => (\n <SectionComponent\n key={section.title}\n section={section}\n isCollapsed={collapsedSections[section.title] ?? false}\n onToggle={() => toggleSection(section.title)}\n onItemClick={onItemClick}\n selectedItemId={selectedItemId}\n onMenuClick={onMenuClick}\n />\n ))}\n </NotificationCardContainer>\n );\n};\n\n/**\n * Individual section component with collapsible header\n */\ninterface SectionComponentProps {\n section: NotificationSection;\n isCollapsed: boolean;\n onToggle: () => void;\n onItemClick?: (item: NotificationItem) => void;\n selectedItemId?: string;\n onMenuClick?: (item: NotificationItem) => void;\n}\n\nconst SectionComponent: React.FC<SectionComponentProps> = ({\n section,\n isCollapsed,\n onToggle,\n onItemClick,\n selectedItemId,\n onMenuClick,\n}) => {\n const headerRef = useRef<HTMLButtonElement>(null);\n const { buttonProps } = useButton(\n {\n onPress: onToggle,\n 'aria-label': `${section.title} section, ${isCollapsed ? 'collapsed' : 'expanded'}`,\n 'aria-expanded': !isCollapsed,\n },\n headerRef\n );\n\n return (\n <section aria-label={`${section.title} notifications`}>\n <SectionHeader {...buttonProps} ref={headerRef}>\n {section.title}\n <ChevronIcon $isExpanded={!isCollapsed} aria-hidden=\"true\">\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n role=\"img\"\n aria-label=\"Expand/collapse icon\"\n >\n <title>Expand/collapse icon</title>\n <path\n d=\"M4 6L8 10L12 6\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </ChevronIcon>\n </SectionHeader>\n\n {!isCollapsed && (\n <SectionContent role=\"list\">\n {section.items.map((item) => (\n <NotificationItemComponent\n key={item.id}\n item={item}\n isSelected={item.id === selectedItemId}\n onItemClick={onItemClick}\n onMenuClick={onMenuClick}\n />\n ))}\n </SectionContent>\n )}\n </section>\n );\n};\n\n/**\n * Individual notification item component\n */\ninterface NotificationItemComponentProps {\n item: NotificationItem;\n isSelected: boolean;\n onItemClick?: (item: NotificationItem) => void;\n onMenuClick?: (item: NotificationItem) => void;\n}\n\nconst NotificationItemComponent: React.FC<NotificationItemComponentProps> = ({\n item,\n isSelected,\n onItemClick,\n onMenuClick,\n}) => {\n const itemRef = useRef<HTMLButtonElement>(null);\n const menuRef = useRef<HTMLButtonElement>(null);\n\n const { buttonProps: itemButtonProps } = useButton(\n {\n onPress: () => onItemClick?.(item),\n 'aria-label': `Notification: ${item.text}`,\n 'aria-current': isSelected ? 'true' : undefined,\n },\n itemRef\n );\n\n const { buttonProps: menuButtonProps } = useButton(\n {\n onPress: () => onMenuClick?.(item),\n 'aria-label': `Options for ${item.text}`,\n },\n menuRef\n );\n\n // Handle keyboard navigation between item and menu button\n const handleItemKeyDown = (e: KeyboardEvent<HTMLButtonElement>) => {\n if (isSelected && e.key === 'Tab' && !e.shiftKey) {\n // Allow natural tab to menu button\n return;\n }\n };\n\n return (\n <NotificationItemWrapper\n {...itemButtonProps}\n ref={itemRef}\n $isSelected={isSelected}\n $hasIcon={!!item.icon}\n role=\"listitem\"\n onKeyDown={handleItemKeyDown}\n >\n <ItemIcon $iconColor={item.iconColor} $hasCustomIcon={!!item.icon}>\n {item.icon || (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <circle cx=\"10\" cy=\"10\" r=\"8\" stroke=\"currentColor\" strokeWidth=\"2\" />\n </svg>\n )}\n </ItemIcon>\n <ItemText $isSelected={isSelected}>{item.text}</ItemText>\n {isSelected && onMenuClick && (\n <MenuButton\n {...menuButtonProps}\n ref={menuRef}\n onClick={(e) => {\n e.stopPropagation();\n menuButtonProps.onClick?.(e);\n }}\n >\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <title>More options</title>\n <circle cx=\"10\" cy=\"4\" r=\"1.5\" fill=\"currentColor\" />\n <circle cx=\"10\" cy=\"10\" r=\"1.5\" fill=\"currentColor\" />\n <circle cx=\"10\" cy=\"16\" r=\"1.5\" fill=\"currentColor\" />\n </svg>\n </MenuButton>\n )}\n </NotificationItemWrapper>\n );\n};\n\nNotificationCard.displayName = 'NotificationCard';\n","import styled, { css } from 'styled-components';\nimport { tokens } from '../../theme/tokens';\n\ninterface StyledUserMessageProps {\n $isPressed: boolean;\n}\n\nexport const StyledUserMessage = styled.button<StyledUserMessageProps>`\n /* Base styles */\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: ${tokens.spacing.md} ${tokens.spacing.xl};\n font-family: ${tokens.typography.fontFamily.primary};\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.regular};\n line-height: ${tokens.typography.lineHeight.normal};\n border: none;\n cursor: default;\n user-select: none;\n white-space: pre-wrap;\n word-wrap: break-word;\n word-break: break-word;\n position: relative;\n text-align: left;\n\n /* Force override CopilotKit's default user message styles */\n && {\n background: ${tokens.colors.message.user} !important;\n color: ${tokens.colors.text.primary} !important;\n border-radius: ${tokens.borderRadius['2xl']} !important; /* Rounded corners that work for multi-line */\n }\n\n /* Subtle shadow and glow effect */\n box-shadow: ${tokens.shadows.glow.secondary};\n\n /* Smooth transitions */\n transition: all ${tokens.transitions.normal};\n\n /* Speech bubble tail - matches bubble background */\n &::after {\n content: '';\n position: absolute;\n bottom: -6px;\n right: ${tokens.spacing.md};\n width: 14px;\n height: 14px;\n background: ${tokens.colors.message.user} !important;\n transform: rotate(45deg);\n border-radius: 0 0 ${tokens.borderRadius.sm} 0;\n clip-path: polygon(0 0, 100% 100%, 0 100%);\n box-shadow: ${tokens.shadows.sm};\n transition: all ${tokens.transitions.normal};\n z-index: -1;\n }\n\n /* Hover state - only for button elements */\n &[role=\"button\"]:hover:not(:disabled) {\n transform: translateY(-1px);\n cursor: pointer;\n box-shadow: ${tokens.shadows.lg};\n\n &::after {\n box-shadow: ${tokens.shadows.md};\n }\n }\n\n /* Active/Pressed state - only for button elements */\n &[role=\"button\"]:active:not(:disabled) {\n transform: translateY(0);\n box-shadow: ${tokens.shadows.sm};\n\n &::after {\n box-shadow: ${tokens.shadows.sm};\n }\n }\n\n ${({ $isPressed }) =>\n $isPressed &&\n css`\n transform: translateY(0) scale(0.98);\n box-shadow: ${tokens.shadows.sm};\n\n &::after {\n box-shadow: ${tokens.shadows.sm};\n }\n `}\n\n /* Focus state for accessibility */\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.secondary};\n outline-offset: 3px;\n box-shadow: ${tokens.shadows.lg};\n }\n\n /* Disabled state */\n &:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n transform: none;\n box-shadow: ${tokens.shadows.none};\n\n &::after {\n opacity: 0.5;\n box-shadow: ${tokens.shadows.none};\n }\n }\n`;\n","import type { AriaButtonProps } from '@react-aria/button';\nimport { useButton } from '@react-aria/button';\nimport { memo, useRef, type ReactNode } from 'react';\nimport { StyledUserMessage } from './UserMessage.styles';\n\nexport interface UserMessageProps extends AriaButtonProps {\n /**\n * The message text to display\n */\n children: ReactNode;\n /**\n * Additional CSS class name\n */\n className?: string;\n /**\n * Whether the message is in a pressed state\n */\n isPressed?: boolean;\n /**\n * Optional click handler\n */\n onPress?: () => void;\n}\n\n/**\n * UserMessage component - Displays a user message in a gradient pill\n *\n * This component renders a user message with a purple-to-blue gradient background,\n * pill-shaped design with fully rounded ends, and white text. It uses React ARIA\n * for accessibility and supports keyboard navigation.\n *\n * Memoized to prevent unnecessary re-renders during parent updates.\n *\n * @example\n * ```tsx\n * <UserMessage onPress={() => console.log('clicked')}>\n * Can you export this as a CSV?\n * </UserMessage>\n * ```\n */\nfunction UserMessageBase({\n children,\n className,\n isPressed = false,\n onPress,\n ...ariaProps\n}: UserMessageProps) {\n const ref = useRef<HTMLButtonElement>(null);\n\n // If no onPress handler, render as non-interactive div\n if (!onPress) {\n return (\n <StyledUserMessage as=\"div\" className={className} $isPressed={isPressed} role=\"presentation\">\n {children}\n </StyledUserMessage>\n );\n }\n\n // Otherwise render as interactive button with React ARIA\n const { buttonProps, isPressed: ariaPressedState } = useButton(\n {\n ...ariaProps,\n onPress,\n },\n ref\n );\n\n return (\n <StyledUserMessage\n {...buttonProps}\n ref={ref}\n className={className}\n $isPressed={isPressed || ariaPressedState}\n role=\"button\"\n tabIndex={0}\n >\n {children}\n </StyledUserMessage>\n );\n}\n\n// Memoize to prevent re-renders when parent updates but props are the same\nexport const UserMessage = memo(UserMessageBase);\n\nUserMessage.displayName = 'UserMessage';\n","import { tokens } from './tokens';\n\n/**\n * Dark Theme\n * Applies token values for dark mode styling.\n * Components should use theme values via styled-components ThemeProvider.\n */\nexport const darkTheme = {\n name: 'dark',\n colors: {\n // Brand\n primary: tokens.colors.primary,\n secondary: tokens.colors.secondary,\n accent: tokens.colors.accent,\n seaGreen: tokens.colors.seaGreen,\n\n // Backgrounds\n background: tokens.colors.background,\n surface: tokens.colors.background.dark,\n surfaceHover: tokens.colors.background.light,\n\n // Text\n text: tokens.colors.text,\n textPrimary: tokens.colors.text.primary,\n textSecondary: tokens.colors.text.secondary,\n textTertiary: tokens.colors.text.tertiary,\n textDisabled: tokens.colors.text.disabled,\n\n // Semantic\n success: tokens.colors.success,\n error: tokens.colors.error,\n warning: tokens.colors.warning,\n info: tokens.colors.info,\n\n // Status\n status: tokens.colors.status,\n\n // Connection\n connection: tokens.colors.connection,\n\n // Border\n border: tokens.colors.border,\n borderDefault: tokens.colors.border.default,\n borderFocus: tokens.colors.border.focus,\n\n // Message\n message: tokens.colors.message,\n\n // Overlay\n overlay: tokens.colors.overlay,\n backdrop: tokens.colors.backdrop,\n\n // Icon\n icon: tokens.colors.icon,\n\n // Platform\n platform: tokens.colors.platform,\n },\n typography: tokens.typography,\n spacing: tokens.spacing,\n borderRadius: tokens.borderRadius,\n shadows: tokens.shadows,\n transitions: tokens.transitions,\n animation: tokens.animation,\n zIndex: tokens.zIndex,\n breakpoints: tokens.breakpoints,\n};\n\nexport type DarkTheme = typeof darkTheme;\n","import { createGlobalStyle } from 'styled-components';\n\nexport const GlobalStyle = createGlobalStyle`\n /* Universal tap highlight removal - nuclear option for Android WebKit */\n * {\n -webkit-tap-highlight-color: transparent !important;\n }\n\n *,\n *::before,\n *::after {\n box-sizing: border-box;\n }\n\n html {\n /* Ensure tap highlight is disabled at root level */\n -webkit-tap-highlight-color: transparent;\n -webkit-touch-callout: none;\n }\n\n body {\n margin: 0;\n padding: 0;\n font-family: ${({ theme }) => theme.fonts.body};\n color: ${({ theme }) => theme.colors.text};\n background-color: ${({ theme }) => theme.colors.surface};\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n /* Disable tap highlight on body as well */\n -webkit-tap-highlight-color: transparent;\n }\n\n /* Remove mobile tap highlight for ALL interactive elements */\n a,\n button,\n input,\n select,\n textarea,\n label,\n [role=\"button\"],\n [role=\"link\"],\n [role=\"tab\"],\n [role=\"menuitem\"],\n [role=\"option\"],\n [tabindex]:not([tabindex=\"-1\"]),\n [onclick] {\n -webkit-tap-highlight-color: transparent !important;\n -webkit-touch-callout: none;\n touch-action: manipulation;\n }\n\n button {\n font-family: inherit;\n /* Prevent text selection flash on tap */\n user-select: none;\n -webkit-user-select: none;\n }\n`;\n","import { tokens } from './tokens';\n\n/**\n * Light Theme\n * Applies light mode styling using token values.\n * Uses inverted colors from the dark theme for light backgrounds.\n * Components should use theme values via styled-components ThemeProvider.\n */\nexport const lightTheme = {\n name: 'light',\n colors: {\n // Brand\n primary: tokens.colors.primary,\n secondary: tokens.colors.secondary,\n accent: tokens.colors.accent,\n seaGreen: tokens.colors.seaGreen,\n\n // Backgrounds - light theme (inverted from dark)\n background: {\n darkest: '#FFFFFF',\n darker: '#F7F8FA',\n dark: '#EDEFF2',\n light: '#E5E7EB',\n },\n\n // Surfaces\n surface: '#FFFFFF',\n surfaceHover: '#F7F8FA',\n\n // Text - light theme (inverted)\n text: {\n primary: '#1F2937',\n secondary: '#4B5563',\n tertiary: '#9CA3AF',\n disabled: '#D1D5DB',\n },\n textPrimary: '#1F2937',\n textSecondary: '#4B5563',\n textTertiary: '#9CA3AF',\n textDisabled: '#D1D5DB',\n\n // Semantic\n success: tokens.colors.success,\n error: tokens.colors.error,\n warning: tokens.colors.warning,\n info: tokens.colors.info,\n\n // Status\n status: tokens.colors.status,\n\n // Connection\n connection: tokens.colors.connection,\n\n // Border - light theme\n border: {\n default: 'rgba(0, 0, 0, 0.1)',\n subtle: 'rgba(0, 0, 0, 0.05)',\n hover: 'rgba(0, 0, 0, 0.2)',\n focus: tokens.colors.primary,\n error: tokens.colors.error,\n },\n borderDefault: 'rgba(0, 0, 0, 0.1)',\n borderFocus: tokens.colors.primary,\n\n // Message\n message: {\n user: '#E0F2F1',\n ai: '#F5F5F5',\n system: '#E8E8E8',\n },\n\n // Overlay\n overlay: 'rgba(0, 0, 0, 0.3)',\n backdrop: 'rgba(255, 255, 255, 0.95)',\n\n // Icon\n icon: {\n default: '#4B5563',\n muted: '#9CA3AF',\n active: tokens.colors.primary,\n },\n\n // Platform\n platform: tokens.colors.platform,\n },\n typography: tokens.typography,\n spacing: tokens.spacing,\n borderRadius: tokens.borderRadius,\n shadows: tokens.shadows,\n transitions: tokens.transitions,\n animation: tokens.animation,\n zIndex: tokens.zIndex,\n breakpoints: tokens.breakpoints,\n};\n\nexport type LightTheme = typeof lightTheme;\n","/**\n * ConnectionStatusBadge Component\n *\n * Displays a binary status badge (connected/disconnected, active/inactive, etc.)\n * with appropriate color coding.\n */\n\nimport type React from 'react';\nimport styled from 'styled-components';\nimport { tokens } from '../../theme/tokens';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface ConnectionStatusBadgeProps {\n /** Whether the connection is active/connected */\n connected: boolean;\n /** Text to show when connected (default: \"Connected\") */\n connectedText?: string;\n /** Text to show when disconnected (default: \"Not Connected\") */\n disconnectedText?: string;\n /** Size variant */\n size?: 'sm' | 'md';\n /** Optional className for styling */\n className?: string;\n}\n\n// =============================================================================\n// Component\n// =============================================================================\n\nexport const ConnectionStatusBadge: React.FC<ConnectionStatusBadgeProps> = ({\n connected,\n connectedText = 'Connected',\n disconnectedText = 'Not Connected',\n size = 'md',\n className,\n}) => {\n return (\n <Badge\n $connected={connected}\n $size={size}\n className={className}\n data-testid=\"connection-status-badge\"\n >\n {connected ? connectedText : disconnectedText}\n </Badge>\n );\n};\n\nConnectionStatusBadge.displayName = 'ConnectionStatusBadge';\n\n// =============================================================================\n// Styled Components\n// =============================================================================\n\nconst Badge = styled.span<{ $connected: boolean; $size: 'sm' | 'md' }>`\n display: inline-flex;\n align-items: center;\n padding: ${({ $size }) => ($size === 'sm' ? `${tokens.spacing.xs} 6px` : `${tokens.spacing.xs} ${tokens.spacing.sm}`)};\n background: ${({ $connected }) =>\n $connected ? `${tokens.colors.status.online}33` : `${tokens.colors.status.offline}33`};\n color: ${({ $connected }) => ($connected ? tokens.colors.status.online : tokens.colors.status.offline)};\n font-size: ${({ $size }) => ($size === 'sm' ? '10px' : tokens.typography.fontSize.xs)};\n font-weight: ${tokens.typography.fontWeight.medium};\n border-radius: ${tokens.borderRadius.sm};\n white-space: nowrap;\n`;\n\nexport default ConnectionStatusBadge;\n","/**\n * IntegrationCard Component\n *\n * A card layout for displaying integration/service items with\n * icon, name, description, status, and actions.\n */\n\nimport type React from 'react';\nimport styled from 'styled-components';\nimport { tokens } from '../../theme/tokens';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface IntegrationCardProps {\n /** Icon URL or element */\n icon: string | React.ReactNode;\n /** Integration name */\n name: string;\n /** Description text */\n description?: string;\n /** Status element (e.g., ConnectionStatusBadge) */\n status?: React.ReactNode;\n /** Action buttons */\n actions?: React.ReactNode;\n /** Additional content (e.g., SecretInput) */\n children?: React.ReactNode;\n /** Optional className for styling */\n className?: string;\n}\n\n// =============================================================================\n// Component\n// =============================================================================\n\nexport const IntegrationCard: React.FC<IntegrationCardProps> = ({\n icon,\n name,\n description,\n status,\n actions,\n children,\n className,\n}) => {\n return (\n <Card className={className} data-testid=\"integration-card\">\n {/* Status badge at top */}\n {status && <StatusRow>{status}</StatusRow>}\n\n {/* Icon + name/description row */}\n <ContentHeader>\n <IconWrapper>\n {typeof icon === 'string' ? <IconImage src={icon} alt={name} /> : icon}\n </IconWrapper>\n <Info>\n <Name>{name}</Name>\n {description && <Description>{description}</Description>}\n </Info>\n </ContentHeader>\n\n {/* Actions/children at bottom */}\n {(children || actions) && (\n <ActionsRow>\n {children}\n {actions}\n </ActionsRow>\n )}\n </Card>\n );\n};\n\nIntegrationCard.displayName = 'IntegrationCard';\n\n// =============================================================================\n// Styled Components\n// =============================================================================\n\nconst Card = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.sm};\n padding: ${tokens.spacing.md};\n background: ${tokens.colors.background.dark};\n border-radius: ${tokens.borderRadius.xl};\n border: 1px solid ${tokens.colors.border.default};\n font-family: ${tokens.typography.fontFamily.primary};\n transition: border-color ${tokens.transitions.fast};\n\n @media (max-width: 480px) {\n padding: ${tokens.spacing.sm};\n gap: ${tokens.spacing.xs};\n }\n\n &:hover {\n border-color: ${tokens.colors.border.hover};\n }\n`;\n\nconst StatusRow = styled.div`\n display: flex;\n align-items: center;\n`;\n\nconst ContentHeader = styled.div`\n display: flex;\n align-items: flex-start;\n gap: ${tokens.spacing.sm};\n\n @media (max-width: 480px) {\n gap: ${tokens.spacing.xs};\n }\n`;\n\nconst IconWrapper = styled.div`\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: ${tokens.borderRadius.sm};\n background: ${tokens.colors.background.light};\n flex-shrink: 0;\n`;\n\nconst IconImage = styled.img`\n width: 24px;\n height: 24px;\n object-fit: contain;\n`;\n\nconst Info = styled.div`\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n flex: 1;\n`;\n\nconst Name = styled.h3`\n margin: 0;\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.semibold};\n color: ${tokens.colors.text.primary};\n line-height: ${tokens.typography.lineHeight.tight};\n`;\n\nconst Description = styled.p`\n margin: 0;\n font-size: ${tokens.typography.fontSize.xs};\n color: ${tokens.colors.text.tertiary};\n line-height: ${tokens.typography.lineHeight.normal};\n`;\n\nconst ActionsRow = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.sm};\n`;\n\nexport default IntegrationCard;\n","/**\n * SecretInput Component\n *\n * A password/secret input field with visibility toggle.\n * Commonly used for API keys, tokens, and other sensitive values.\n */\n\nimport type React from 'react';\nimport { useCallback, useState } from 'react';\nimport styled from 'styled-components';\nimport { tokens } from '../../theme/tokens';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface SecretInputProps {\n /** Current value */\n value: string;\n /** Change handler */\n onChange: (value: string) => void;\n /** Placeholder text */\n placeholder?: string;\n /** Whether the input is disabled */\n disabled?: boolean;\n /** Optional className for styling */\n className?: string;\n /** Aria label for the input */\n 'aria-label'?: string;\n}\n\n// =============================================================================\n// Icons\n// =============================================================================\n\nconst EyeIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <title>Show</title>\n <path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n);\n\nconst EyeOffIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <title>Hide</title>\n <path d=\"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24\" />\n <line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\" />\n </svg>\n);\n\n// =============================================================================\n// Component\n// =============================================================================\n\nexport const SecretInput: React.FC<SecretInputProps> = ({\n value,\n onChange,\n placeholder = 'Enter secret...',\n disabled = false,\n className,\n 'aria-label': ariaLabel = 'Secret input',\n}) => {\n const [isVisible, setIsVisible] = useState(false);\n\n const toggleVisibility = useCallback(() => {\n setIsVisible((prev) => !prev);\n }, []);\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange(e.target.value);\n },\n [onChange]\n );\n\n return (\n <Container className={className} data-testid=\"secret-input\">\n <Input\n type={isVisible ? 'text' : 'password'}\n value={value}\n onChange={handleChange}\n placeholder={placeholder}\n disabled={disabled}\n aria-label={ariaLabel}\n />\n <VisibilityToggle\n type=\"button\"\n onClick={toggleVisibility}\n aria-label={isVisible ? 'Hide secret' : 'Show secret'}\n disabled={disabled}\n >\n {isVisible ? <EyeOffIcon /> : <EyeIcon />}\n </VisibilityToggle>\n </Container>\n );\n};\n\nSecretInput.displayName = 'SecretInput';\n\n// =============================================================================\n// Styled Components\n// =============================================================================\n\nconst Container = styled.div`\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n min-width: 0;\n`;\n\nconst Input = styled.input`\n width: 100%;\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n padding-right: 40px;\n background: ${tokens.colors.background.darker};\n border: 1px solid ${tokens.colors.border.default};\n border-radius: ${tokens.borderRadius.md};\n color: ${tokens.colors.text.primary};\n font-size: ${tokens.typography.fontSize.sm};\n font-family: ${tokens.typography.fontFamily.monospace};\n transition: border-color ${tokens.transitions.fast};\n\n &::placeholder {\n color: ${tokens.colors.text.tertiary};\n }\n\n &:focus {\n outline: none;\n border-color: ${tokens.colors.border.focus};\n }\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n`;\n\nconst VisibilityToggle = styled.button`\n position: absolute;\n right: ${tokens.spacing.sm};\n top: 50%;\n transform: translateY(-50%);\n background: none;\n border: none;\n cursor: pointer;\n padding: ${tokens.spacing.xs};\n display: flex;\n align-items: center;\n justify-content: center;\n color: ${tokens.colors.text.tertiary};\n transition: color ${tokens.transitions.fast};\n\n &:hover:not(:disabled) {\n color: ${tokens.colors.primary};\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.primary};\n outline-offset: 2px;\n border-radius: ${tokens.borderRadius.sm};\n }\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n\n svg {\n width: 20px;\n height: 20px;\n }\n`;\n\nexport default SecretInput;\n","/**\n * StreamingText Component\n *\n * Provides typewriter animation for streaming AI responses.\n * Supports basic markdown rendering (bold, italic, code, links).\n *\n * @see specs/015-restyle-ai-chat/spec.md:FR-031, FR-042\n * @see UI_COMPONENTS_SSE.md:548-595\n */\n\nimport React, { memo, useEffect, useMemo, useRef } from 'react';\nimport styled from 'styled-components';\nimport { tokens } from '../../theme/tokens';\n\n/**\n * Parse basic markdown and return React elements.\n * Supports: ```code blocks```, **bold**, *italic*, `code`, [links](url), and line breaks.\n */\nfunction parseMarkdown(text: string): React.ReactNode[] {\n if (!text) return [];\n\n // Strip tool call markers before rendering — these are invisible control signals\n // used by useCopilotToolCallSync for workflow execution, not display content.\n // Handles both complete markers and incomplete ones still being streamed.\n text = text\n .replace(/<!--TOOL_CALL:[^:]+:[\\s\\S]+?-->/g, '')\n .replace(/__TOOL_CALL__:[^:]+:\\{[^}]*(?:\\{[^}]*\\}[^}]*)*\\}/g, '')\n // Incomplete markers at end of string (streaming — closing delimiter not yet received)\n .replace(/<!--TOOL_CALL:[\\s\\S]*$/g, '')\n .replace(/__TOOL_CALL__:[\\s\\S]*$/g, '');\n\n const elements: React.ReactNode[] = [];\n let key = 0;\n\n // First, split by code blocks (``` ... ```) to handle them separately.\n // Code blocks preserve whitespace and use monospace font (critical for ASCII tables).\n const codeBlockRegex = /```(?:\\w*)\\n?([\\s\\S]*?)```/g;\n let lastCodeEnd = 0;\n let codeMatch: RegExpExecArray | null;\n\n // biome-ignore lint/suspicious/noAssignInExpressions: regex exec loop pattern\n while ((codeMatch = codeBlockRegex.exec(text)) !== null) {\n // Process text before the code block as normal markdown\n if (codeMatch.index > lastCodeEnd) {\n const beforeCode = text.slice(lastCodeEnd, codeMatch.index);\n const parsed = parseMarkdownParagraphs(beforeCode, key);\n elements.push(...parsed.elements);\n key = parsed.nextKey;\n }\n\n // Render the code block with pre/code tags\n const codeContent = (codeMatch[1] ?? '').replace(/\\n$/, ''); // trim trailing newline\n elements.push(\n <pre key={key++} className=\"code-block\">\n <code>{codeContent}</code>\n </pre>\n );\n\n lastCodeEnd = codeMatch.index + codeMatch[0].length;\n }\n\n // Process remaining text after the last code block\n const remaining = text.slice(lastCodeEnd);\n if (remaining) {\n const parsed = parseMarkdownParagraphs(remaining, key);\n elements.push(...parsed.elements);\n key = parsed.nextKey;\n }\n\n return elements;\n}\n\n/**\n * Check if a block of lines forms a markdown table (pipe-delimited).\n * Requires at least a header row and separator row (|---|).\n */\nfunction isMarkdownTable(lines: string[]): boolean {\n if (lines.length < 2) return false;\n // Check first line starts with | and second line is a separator (|---|)\n const firstLine = (lines[0] ?? '').trim();\n const secondLine = (lines[1] ?? '').trim();\n return (\n firstLine.startsWith('|') &&\n secondLine.startsWith('|') &&\n /^\\|[\\s-:|]+\\|$/.test(secondLine)\n );\n}\n\n/**\n * Parse non-code-block text into paragraphs and inline markdown.\n * Also detects markdown tables (pipe-delimited) and renders them in monospace.\n */\nfunction parseMarkdownParagraphs(\n text: string,\n startKey: number\n): { elements: React.ReactNode[]; nextKey: number } {\n const elements: React.ReactNode[] = [];\n let key = startKey;\n\n // Split by double newlines for paragraphs, single newlines for line breaks\n const paragraphs = text.split(/\\n\\n+/);\n\n paragraphs.forEach((paragraph, pIndex) => {\n if (pIndex > 0) {\n // Add paragraph break\n elements.push(<br key={key++} />);\n elements.push(<br key={key++} />);\n }\n\n // Check if this paragraph is a markdown table\n const lines = paragraph.split('\\n');\n if (isMarkdownTable(lines)) {\n // Render table in a monospace pre block for readability\n elements.push(\n <pre key={key++} className=\"code-block\">\n <code>{paragraph}</code>\n </pre>\n );\n return;\n }\n\n // Process lines within paragraph\n lines.forEach((line, lineIndex) => {\n if (lineIndex > 0) {\n elements.push(<br key={key++} />);\n }\n\n // Check for headings (# to ####)\n const headingMatch = line.match(/^(#{1,4})\\s+(.+)$/);\n if (headingMatch && headingMatch[1] && headingMatch[2]) {\n const level = headingMatch[1].length;\n const parsed = parseInlineMarkdown(headingMatch[2], key);\n key = parsed.nextKey;\n elements.push(React.createElement(`h${level}`, { key: key++ }, ...parsed.elements));\n return;\n }\n\n // Parse inline markdown\n const parsed = parseInlineMarkdown(line, key);\n elements.push(...parsed.elements);\n key = parsed.nextKey;\n });\n });\n\n return { elements, nextKey: key };\n}\n\n/**\n * Parse inline markdown elements within a line of text.\n */\nfunction parseInlineMarkdown(\n text: string,\n startKey: number\n): { elements: React.ReactNode[]; nextKey: number } {\n const elements: React.ReactNode[] = [];\n let key = startKey;\n\n // Combined regex for all inline patterns\n // Order matters: bold (**) before italic (*), and code backticks need escaping\n const inlineRegex = /(\\*\\*(.+?)\\*\\*)|(\\*(.+?)\\*)|(`([^`]+)`)|(\\[([^\\]]+)\\]\\(([^)]+)\\))/g;\n\n let lastIndex = 0;\n let match: RegExpExecArray | null;\n\n // biome-ignore lint/suspicious/noAssignInExpressions: regex exec loop pattern\n while ((match = inlineRegex.exec(text)) !== null) {\n // Add text before match\n if (match.index > lastIndex) {\n elements.push(text.slice(lastIndex, match.index));\n }\n\n if (match[1]) {\n // **bold**\n elements.push(<strong key={key++}>{match[2]}</strong>);\n } else if (match[3]) {\n // *italic*\n elements.push(<em key={key++}>{match[4]}</em>);\n } else if (match[5]) {\n // `code`\n elements.push(<code key={key++}>{match[6]}</code>);\n } else if (match[7]) {\n // [link](url)\n elements.push(\n <a key={key++} href={match[9]} target=\"_blank\" rel=\"noopener noreferrer\">\n {match[8]}\n </a>\n );\n }\n\n lastIndex = match.index + match[0].length;\n }\n\n // Add remaining text after last match\n if (lastIndex < text.length) {\n elements.push(text.slice(lastIndex));\n }\n\n // If no matches, just return the original text\n if (elements.length === 0) {\n elements.push(text);\n }\n\n return { elements, nextKey: key };\n}\n\nexport interface StreamingTextProps {\n /** The text content to display */\n content: string;\n /** Whether text is currently streaming */\n isStreaming?: boolean;\n /** Typing speed in milliseconds per character */\n typingSpeed?: number;\n /** Whether to show blinking cursor */\n cursor?: boolean;\n /** Visual variant */\n variant?: 'default' | 'code' | 'markdown';\n /** Callback when streaming completes */\n onStreamComplete?: () => void;\n /** Additional CSS class name */\n className?: string;\n}\n\nconst Container = styled.div<{ $variant: 'default' | 'code' | 'markdown' }>`\n font-family: ${(props) =>\n props.$variant === 'code'\n ? tokens.typography.fontFamily.monospace\n : tokens.typography.fontFamily.primary};\n white-space: pre-wrap;\n word-break: break-word;\n line-height: ${tokens.typography.lineHeight.normal};\n /* Performance optimizations for streaming text */\n text-rendering: optimizeSpeed;\n contain: content;\n\n /* Markdown element styles */\n strong {\n font-weight: ${tokens.typography.fontWeight.bold};\n color: ${tokens.colors.text.primary};\n }\n\n em {\n font-style: italic;\n }\n\n code {\n font-family: ${tokens.typography.fontFamily.monospace};\n background: ${tokens.colors.surface.overlay};\n padding: 0.15em 0.4em;\n border-radius: ${tokens.borderRadius.sm};\n font-size: 0.9em;\n }\n\n pre.code-block {\n background: ${tokens.colors.surface.overlay};\n border-radius: ${tokens.borderRadius.md};\n padding: ${tokens.spacing.md};\n margin: ${tokens.spacing.sm} 0;\n overflow-x: auto;\n white-space: pre;\n -webkit-overflow-scrolling: touch;\n\n code {\n background: none;\n padding: 0;\n border-radius: 0;\n font-size: 0.85em;\n line-height: 1.5;\n }\n }\n\n a {\n color: ${tokens.colors.primary};\n text-decoration: none;\n\n &:hover {\n text-decoration: underline;\n }\n }\n\n h1, h2, h3, h4 {\n margin: ${tokens.spacing.sm} 0 ${tokens.spacing.xs} 0;\n color: ${tokens.colors.text.primary};\n line-height: 1.3;\n }\n\n h1 { font-size: 1.4em; font-weight: ${tokens.typography.fontWeight.bold}; }\n h2 { font-size: 1.2em; font-weight: ${tokens.typography.fontWeight.bold}; }\n h3 { font-size: 1.05em; font-weight: ${tokens.typography.fontWeight.semibold}; }\n h4 { font-size: 1em; font-weight: ${tokens.typography.fontWeight.semibold}; }\n`;\n\nconst Cursor = styled.span`\n display: inline-block;\n width: 2px;\n height: 1em;\n background-color: currentColor;\n margin-left: 2px;\n vertical-align: text-bottom;\n animation: blink 1s infinite;\n\n @keyframes blink {\n 0%,\n 49% {\n opacity: 1;\n }\n 50%,\n 100% {\n opacity: 0;\n }\n }\n`;\n\n/**\n * StreamingText component for displaying streaming AI responses\n *\n * Features:\n * - Renders content directly without extra state (optimal performance)\n * - Optional blinking cursor during streaming\n * - Code and markdown variants\n * - Completion callback when streaming ends\n *\n * Memoized to prevent unnecessary re-renders during parent updates.\n */\nconst StreamingTextBase: React.FC<StreamingTextProps> = ({\n content,\n isStreaming = false,\n typingSpeed: _typingSpeed = 50, // Reserved for future use\n cursor = true,\n variant = 'default',\n onStreamComplete,\n className,\n}) => {\n const wasStreamingRef = useRef(isStreaming);\n const completionCalledRef = useRef(false);\n\n // Handle streaming completion callback without causing re-renders\n useEffect(() => {\n // Track when streaming transitions from true to false (completion)\n if (wasStreamingRef.current && !isStreaming && !completionCalledRef.current) {\n completionCalledRef.current = true;\n onStreamComplete?.();\n }\n\n // Reset completion flag when streaming starts again\n if (isStreaming) {\n completionCalledRef.current = false;\n }\n\n wasStreamingRef.current = isStreaming;\n }, [isStreaming, onStreamComplete]);\n\n const showCursor = isStreaming && cursor;\n\n // Parse markdown content when variant is 'markdown'\n const renderedContent = useMemo(() => {\n if (variant === 'markdown') {\n return parseMarkdown(content);\n }\n return content;\n }, [content, variant]);\n\n // Render content directly - no intermediate state for optimal performance\n return (\n <Container $variant={variant} className={className}>\n {renderedContent}\n {showCursor && <Cursor />}\n </Container>\n );\n};\n\n// Memoize to prevent re-renders when parent updates but props are the same\nexport const StreamingText = memo(StreamingTextBase);\n\nStreamingText.displayName = 'StreamingText';\n","import styled, { keyframes } from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\nexport const MessageContainer = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.xs};\n padding: ${tokens.spacing.xs} 0;\n max-width: 100%;\n /* GPU acceleration hint for smooth rendering during streaming */\n will-change: contents;\n contain: content;\n`;\n\nexport const AvatarContainer = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n flex-shrink: 0;\n`;\n\nexport const Avatar = styled.img`\n width: 20px;\n height: 20px;\n border-radius: ${tokens.borderRadius.full};\n object-fit: cover;\n background-color: transparent;\n`;\n\nexport const AvatarInitials = styled.div`\n width: 20px;\n height: 20px;\n border-radius: ${tokens.borderRadius.full};\n overflow: hidden;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: ${tokens.colors.secondary};\n padding: 2px;\n box-sizing: border-box;\n\n img {\n width: 100%;\n height: 100%;\n object-fit: contain;\n }\n`;\n\nexport const AvatarLabel = styled.span`\n font-size: ${tokens.typography.fontSize.xs};\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.text.secondary};\n`;\n\nexport const ContentContainer = styled.div`\n width: 100%;\n min-width: 0;\n`;\n\nexport const MessageContent = styled.div`\n /* Use solid color instead of backdrop-filter for performance during streaming */\n background-color: ${tokens.colors.surface.elevated};\n padding: ${tokens.spacing.sm};\n border-radius: ${tokens.borderRadius.lg};\n color: ${tokens.colors.text.primary};\n font-size: ${tokens.typography.fontSize.sm};\n line-height: ${tokens.typography.lineHeight.normal};\n font-family: ${tokens.typography.fontFamily.primary};\n word-wrap: break-word;\n white-space: pre-wrap;\n /* Optimize text rendering */\n text-rendering: optimizeSpeed;\n`;\n\nexport const LoadingDots = styled.div`\n display: flex;\n gap: ${tokens.spacing.xs};\n padding: ${tokens.spacing.sm};\n /* Use solid color instead of backdrop-filter for performance */\n background-color: ${tokens.colors.surface.elevated};\n border-radius: ${tokens.borderRadius.lg};\n width: fit-content;\n`;\n\n/* Simplified pulse animation - opacity only, no transform */\nconst pulse = keyframes`\n 0%, 100% {\n opacity: 0.4;\n }\n 50% {\n opacity: 1;\n }\n`;\n\nexport const LoadingDot = styled.div<{ delay: number }>`\n width: ${tokens.spacing.sm};\n height: ${tokens.spacing.sm};\n border-radius: ${tokens.borderRadius.full};\n background-color: ${tokens.colors.text.tertiary};\n /* Use simple opacity animation instead of transform bounce */\n animation: ${pulse} 1.4s ease-in-out infinite;\n animation-delay: ${(props) => props.delay}s;\n`;\n","import styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\ninterface FileAttachmentContainerProps {\n $isInteractive?: boolean;\n}\n\nexport const FileAttachmentContainer = styled.div<FileAttachmentContainerProps>`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.sm};\n padding: ${tokens.spacing.sm};\n background-color: ${tokens.colors.surface.elevated};\n border: 1px solid ${tokens.colors.border.default};\n border-radius: ${tokens.borderRadius.md};\n max-width: 320px;\n cursor: ${(props) => (props.$isInteractive ? 'pointer' : 'default')};\n transition: border-color ${tokens.transitions.fast};\n\n /* Remove default button styles when used as button */\n ${(props) =>\n props.$isInteractive &&\n `\n font: inherit;\n color: inherit;\n text-align: left;\n appearance: none;\n -webkit-appearance: none;\n\n &:hover {\n border-color: ${tokens.colors.border.hover};\n background-color: ${tokens.colors.surface.overlayHover};\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.accent};\n outline-offset: 2px;\n border-color: ${tokens.colors.accent};\n }\n\n &:active {\n border-color: ${tokens.colors.border.hover};\n }\n `}\n`;\n\nexport const FileIconContainer = styled.div`\n flex-shrink: 0;\n width: ${tokens.spacing.xl};\n height: ${tokens.spacing.xl};\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: ${tokens.typography.fontSize['2xl']};\n line-height: 1;\n`;\n\nexport const FileInfo = styled.div`\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 2px;\n`;\n\nexport const FileTitle = styled.div`\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.text.primary};\n font-family: ${tokens.typography.fontFamily.primary};\n line-height: ${tokens.typography.lineHeight.tight};\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nexport const FileMetadata = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n font-size: ${tokens.typography.fontSize.xs};\n color: ${tokens.colors.text.tertiary};\n font-family: ${tokens.typography.fontFamily.primary};\n line-height: ${tokens.typography.lineHeight.tight};\n overflow: hidden;\n`;\n\nexport const FileSubtitle = styled.span`\n color: ${tokens.colors.text.tertiary};\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n\n &:last-child {\n flex-shrink: 0;\n }\n`;\n","import { useButton } from '@react-aria/button';\nimport type { AriaButtonProps } from '@react-types/button';\nimport type { PressEvent } from '@react-types/shared';\nimport type React from 'react';\nimport { useRef } from 'react';\nimport {\n FileAttachmentContainer,\n FileIconContainer,\n FileInfo,\n FileMetadata,\n FileSubtitle,\n FileTitle,\n} from './FileAttachment.styles';\n\nexport interface FileAttachmentProps extends Omit<AriaButtonProps, 'children'> {\n /** File name/title */\n title: string;\n /** File subtitle/category (e.g., \"Downloads\", \"Documents\") */\n subtitle?: string;\n /** File size in human-readable format (e.g., \"500 KB\", \"2.5 MB\") */\n size?: string;\n /** File icon emoji or Unicode character */\n icon?: string;\n /** Click handler for file interaction */\n onClick?: () => void;\n /** Custom className for styling */\n className?: string;\n}\n\n/**\n * FileAttachment component displays file information in assistant messages\n *\n * Features:\n * - File icon display (emoji or Unicode)\n * - File metadata (title, subtitle, size)\n * - Accessible keyboard navigation via React ARIA\n * - Clean, minimal card-based design\n * - WCAG 2.1 AA compliant\n *\n * @example\n * ```tsx\n * <FileAttachment\n * title=\"Example File\"\n * subtitle=\"Downloads\"\n * size=\"500 KB\"\n * icon=\"📄\"\n * onPress={() => console.log('File clicked')}\n * />\n * ```\n */\nexport const FileAttachment: React.FC<FileAttachmentProps> = ({\n title,\n subtitle,\n size,\n icon = '📄',\n onClick,\n onPress,\n className,\n ...ariaProps\n}) => {\n const ref = useRef<HTMLButtonElement>(null);\n const isInteractive = !!(onClick || onPress);\n\n // Combine onClick and onPress handlers\n const handlePress = (e: PressEvent) => {\n if (onClick) onClick();\n if (onPress) onPress(e);\n };\n\n const { buttonProps } = useButton(\n {\n ...ariaProps,\n onPress: isInteractive ? handlePress : undefined,\n isDisabled: !isInteractive,\n },\n ref\n );\n\n return (\n <FileAttachmentContainer\n {...(isInteractive ? buttonProps : {})}\n ref={isInteractive ? ref : undefined}\n className={className}\n $isInteractive={isInteractive}\n as={isInteractive ? 'button' : 'div'}\n >\n <FileIconContainer>{icon}</FileIconContainer>\n <FileInfo>\n <FileTitle>{title}</FileTitle>\n <FileMetadata>\n {subtitle && <FileSubtitle>{subtitle}</FileSubtitle>}\n {size && subtitle && <FileSubtitle aria-hidden=\"true\"> • </FileSubtitle>}\n {size && <FileSubtitle>{size}</FileSubtitle>}\n </FileMetadata>\n </FileInfo>\n </FileAttachmentContainer>\n );\n};\n\nexport default FileAttachment;\n","import { memo, type FC } from 'react';\nimport styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\nimport { StreamingText } from '../StreamingText';\nimport {\n Avatar,\n AvatarContainer,\n AvatarInitials,\n AvatarLabel,\n ContentContainer,\n LoadingDot,\n LoadingDots,\n MessageContainer,\n MessageContent,\n} from './AssistantMessage.styles';\nimport { FileAttachment, type FileAttachmentProps } from './FileAttachment';\n\nconst AttachmentsContainer = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.sm};\n margin-top: ${tokens.spacing.sm};\n`;\n\nconst ActionButton = styled.button`\n display: inline-flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n padding: ${tokens.spacing.xs} ${tokens.spacing.sm};\n font-size: ${tokens.typography.fontSize.xs};\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.text.secondary};\n background: ${tokens.colors.surface.overlay};\n border: 1px solid ${tokens.colors.border.default};\n border-radius: ${tokens.borderRadius.md};\n cursor: pointer;\n transition: all ${tokens.transitions.fast};\n\n &:hover {\n background: ${tokens.colors.surface.overlayHover};\n border-color: ${tokens.colors.border.hover};\n color: ${tokens.colors.text.primary};\n }\n\n &:active {\n transform: scale(0.98);\n }\n`;\n\nconst ActionsContainer = styled.div`\n display: flex;\n gap: ${tokens.spacing.xs};\n flex-wrap: wrap;\n margin-top: ${tokens.spacing.sm};\n`;\n\nconst MessageTime = styled.time`\n font-size: ${tokens.typography.fontSize.xs};\n color: ${tokens.colors.text.tertiary};\n margin-top: ${tokens.spacing.xs};\n display: block;\n`;\n\nconst StreamingIndicator = styled.span`\n display: inline-block;\n width: ${tokens.spacing.xs};\n height: ${tokens.spacing.xs};\n margin-left: ${tokens.spacing.xs};\n background-color: ${tokens.colors.accent};\n border-radius: ${tokens.borderRadius.full};\n animation: pulse 1.5s ease-in-out infinite;\n\n @keyframes pulse {\n 0%,\n 100% {\n opacity: 0.3;\n transform: scale(0.8);\n }\n 50% {\n opacity: 1;\n transform: scale(1.2);\n }\n }\n`;\n\nexport interface ActionButtonType {\n label: string;\n onClick: () => void;\n icon?: React.ReactNode;\n}\n\nexport interface AssistantMessageProps {\n /** Message content to display */\n content?: string;\n /** Avatar image URL */\n avatarUrl?: string;\n /** Avatar initials when no image is provided */\n avatarInitials?: string;\n /** Whether to show loading state */\n isLoading?: boolean;\n /** Whether message is currently streaming */\n isStreaming?: boolean;\n /** Custom className for styling */\n className?: string;\n /** Support for markdown rendering (future enhancement) */\n enableMarkdown?: boolean;\n /** File attachments to display below the message */\n attachments?: FileAttachmentProps[];\n /** Optional timestamp */\n timestamp?: string;\n /** Action buttons to display */\n actions?: ActionButtonType[];\n}\n\n/**\n * AssistantMessage component displays AI assistant messages with avatar\n *\n * Features:\n * - Avatar with image or initials fallback\n * - Loading state with animated dots\n * - Streaming state indicator\n * - Markdown support (optional)\n * - Dark gray bubble (#2D2D3D) from Figma design\n * - Left-aligned layout\n * - Action buttons support\n * - Timestamp display\n *\n * Memoized to prevent unnecessary re-renders during parent updates.\n */\nconst AssistantMessageBase: FC<AssistantMessageProps> = ({\n content = '',\n avatarUrl,\n avatarInitials: _avatarInitials = 'AI',\n isLoading = false,\n isStreaming = false,\n className,\n attachments = [],\n enableMarkdown = false,\n timestamp,\n actions = [],\n}) => {\n const renderContent = () => {\n if (isLoading) {\n return (\n <LoadingDots>\n <LoadingDot delay={0} />\n <LoadingDot delay={0.2} />\n <LoadingDot delay={0.4} />\n </LoadingDots>\n );\n }\n\n // Use StreamingText for typewriter effect\n return (\n <>\n {content && (\n <MessageContent>\n <StreamingText\n content={content}\n isStreaming={isStreaming}\n typingSpeed={30}\n cursor={false}\n variant={enableMarkdown ? 'markdown' : 'default'}\n />\n {isStreaming && <StreamingIndicator />}\n </MessageContent>\n )}\n {attachments.length > 0 && (\n <AttachmentsContainer>\n {attachments.map((attachment, index) => (\n <FileAttachment key={`${attachment.title}-${index}`} {...attachment} />\n ))}\n </AttachmentsContainer>\n )}\n {timestamp && <MessageTime>{timestamp}</MessageTime>}\n {actions.length > 0 && (\n <ActionsContainer>\n {actions.map((action, index) => (\n <ActionButton key={index} onClick={action.onClick}>\n {action.icon}\n {action.label}\n </ActionButton>\n ))}\n </ActionsContainer>\n )}\n </>\n );\n };\n\n return (\n <MessageContainer className={className}>\n <AvatarContainer>\n {avatarUrl ? (\n <Avatar src={avatarUrl} alt=\"Assistant avatar\" />\n ) : (\n <AvatarInitials>\n <Avatar src=\"/assets/avatar-transparent-bg.png\" alt=\"AI Assistant\" />\n </AvatarInitials>\n )}\n <AvatarLabel>Assistant</AvatarLabel>\n </AvatarContainer>\n <ContentContainer>{renderContent()}</ContentContainer>\n </MessageContainer>\n );\n};\n\n// Memoize to prevent re-renders when parent updates but props are the same\nexport const AssistantMessage = memo(AssistantMessageBase);\n\nAssistantMessage.displayName = 'AssistantMessage';\n\nexport default AssistantMessage;\n","/**\n * Adapter component that bridges custom AssistantMessage with CopilotKit's expected interface\n *\n * This adapter:\n * 1. Converts CopilotKit's AssistantMessageProps to our custom component props\n * 2. Handles loading states by showing AssistantThinking component\n * 3. Extracts message content and renders with our styled component\n * 4. Renders generativeUI (tool call renders) when present\n * 5. Detects errors and provides \"Report Issue\" action button\n * 6. Shows tool call indicators from content markers or the global registry\n */\n\nimport { useCopilotChat } from '@copilotkit/react-core';\nimport type { AssistantMessageProps as CopilotAssistantMessageProps } from '@copilotkit/react-ui';\nimport type React from 'react';\nimport { type FC, memo, type ReactNode, useMemo, useRef } from 'react';\nimport styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\nimport { AssistantThinking } from '../../AssistantThinking/AssistantThinking';\nimport { Icon } from '../../layout/Icon/Icon';\nimport { AssistantMessage, type ActionButtonType } from '../Messages/AssistantMessage';\n\n// =============================================================================\n// Global Tool Call Registry\n// =============================================================================\n// Uses globalThis (window in browsers) to guarantee a SINGLE registry instance\n// across all bundler chunks. Without this, tsup's separate entry points\n// (dist/index.js vs dist/copilotkit/index.js) would each have their own Map,\n// causing registerToolCall() writes to be invisible to getActiveToolCalls() reads.\n// =============================================================================\n\nconst REGISTRY_KEY = '__agentiffai_tool_call_registry__';\nconst TOOL_CALL_TTL_MS = 5 * 60 * 1000; // 5 minutes\n\nfunction getRegistryMap(): Map<string, number> {\n const g = globalThis as unknown as Record<string, unknown>;\n if (!g[REGISTRY_KEY]) {\n g[REGISTRY_KEY] = new Map<string, number>();\n }\n return g[REGISTRY_KEY] as Map<string, number>;\n}\n\n/**\n * Register a tool call name in the global registry.\n * Call this from the mobile client when a tool call is detected.\n */\nexport function registerToolCall(name: string): void {\n getRegistryMap().set(name, Date.now());\n}\n\n/**\n * Clear all registered tool calls (e.g., when conversation resets).\n */\nexport function clearToolCalls(): void {\n getRegistryMap().clear();\n}\n\n/**\n * Get all active (non-expired) tool call names.\n */\nexport function getActiveToolCalls(): string[] {\n const map = getRegistryMap();\n const now = Date.now();\n const active: string[] = [];\n for (const [name, timestamp] of map) {\n if (now - timestamp < TOOL_CALL_TTL_MS) {\n active.push(name);\n } else {\n map.delete(name);\n }\n }\n return active;\n}\n\n/**\n * Extended message type that includes generativeUI for tool call renders\n */\ninterface MessageWithGenerativeUI {\n content?: string;\n generativeUI?: () => ReactNode;\n}\n\n/**\n * Strip tool call markers from message content.\n * These are internal markers used for state sync, not meant for display.\n *\n * Handles both complete and incomplete (still streaming) markers:\n * - Complete: <!--TOOL_CALL:name:args--> or __TOOL_CALL__:name:args\n * - Incomplete (streaming): <!--TOOL_CALL:name:partial... (no closing -->)\n */\nfunction stripToolCallMarkers(content: string): string {\n let stripped = content;\n // 1. Strip complete HTML-comment markers: <!--TOOL_CALL:name:args-->\n stripped = stripped.replace(/<!--TOOL_CALL:[^:]+:[\\s\\S]+?-->/g, '');\n // 2. Strip complete __TOOL_CALL__ markers: __TOOL_CALL__:name:{json}\n stripped = stripped.replace(/__TOOL_CALL__:[^:]+:\\{[^}]*(?:\\{[^}]*\\}[^}]*)*\\}/g, '');\n // 3. Strip incomplete markers still being streamed (no closing delimiter yet).\n // These appear at the END of the content during streaming.\n stripped = stripped.replace(/<!--TOOL_CALL:[\\s\\S]*$/g, '');\n stripped = stripped.replace(/__TOOL_CALL__:[\\s\\S]*$/g, '');\n return stripped.trim();\n}\n\n/**\n * Extract tool call names from message content.\n * Returns unique tool names found in TOOL_CALL markers.\n */\nfunction extractToolCallNames(content: string): string[] {\n if (!content.includes('TOOL_CALL')) return [];\n const names = new Set<string>();\n const patterns = [\n /<!--TOOL_CALL:([^:]+):/g,\n /__TOOL_CALL__:([^:]+):/g,\n ];\n for (const pattern of patterns) {\n let match: RegExpExecArray | null;\n // biome-ignore lint/suspicious/noAssignInExpressions: regex exec loop\n while ((match = pattern.exec(content)) !== null) {\n if (match[1]) names.add(match[1]);\n }\n }\n return Array.from(names);\n}\n\n/**\n * Format a kebab-case tool name to Title Case for display.\n */\nfunction formatToolName(name: string): string {\n // Handle update-workflow dispatcher — show the inner tool name if present\n if (name === 'update-workflow') return 'Workflow';\n return name\n .split(/[-_]/)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ');\n}\n\n/**\n * Error category types matching the mobile client's error system\n */\nexport type ErrorCategory = 'Network' | 'Auth' | 'OAuth' | 'Workflow' | 'Unknown';\n\n/**\n * Error context extracted from a message\n */\nexport interface ExtractedErrorContext {\n /** Whether the message contains an error */\n hasError: boolean;\n /** Inferred error category */\n category?: ErrorCategory;\n /** Correlation ID if present in the message */\n correlationId?: string;\n /** The error message text */\n errorMessage?: string;\n}\n\n/**\n * Callback for reporting issues from chat\n */\nexport interface ReportIssueCallback {\n (context: {\n errorCategory?: ErrorCategory;\n correlationId?: string;\n chatSnippet?: string;\n }): void;\n}\n\n/**\n * Error detection patterns\n * These patterns identify error messages in assistant responses\n */\nconst ERROR_PATTERNS = [\n /\\bfailed\\b/i,\n /\\berror\\b/i,\n /\\bunable to\\b/i,\n /\\bcouldn't\\b/i,\n /\\bcan't\\b/i,\n /\\bcannot\\b/i,\n /\\bsomething went wrong\\b/i,\n /\\btry again\\b/i,\n /\\bunexpected\\b/i,\n /\\btimed out\\b/i,\n /\\bconnection\\b.*\\b(lost|failed|refused)\\b/i,\n];\n\n/**\n * Patterns to extract correlation IDs from error messages\n * Format: \"Reference: abc123\" or \"Correlation ID: abc123\" or \"[abc123]\"\n */\nconst CORRELATION_ID_PATTERNS = [\n /reference:\\s*([a-f0-9-]+)/i,\n /correlation[_\\s]?id:\\s*([a-f0-9-]+)/i,\n /\\[([a-f0-9]{8,})\\]/i,\n];\n\n/**\n * Infer error category from message content\n */\nfunction inferErrorCategory(content: string): ErrorCategory {\n const lowerContent = content.toLowerCase();\n\n // Network errors\n if (\n lowerContent.includes('network') ||\n lowerContent.includes('internet') ||\n lowerContent.includes('connection') ||\n lowerContent.includes('offline') ||\n lowerContent.includes('timed out')\n ) {\n return 'Network';\n }\n\n // Auth errors\n if (\n lowerContent.includes('unauthorized') ||\n lowerContent.includes('authentication') ||\n lowerContent.includes('login') ||\n lowerContent.includes('session expired') ||\n lowerContent.includes('credentials')\n ) {\n return 'Auth';\n }\n\n // OAuth errors\n if (\n lowerContent.includes('oauth') ||\n lowerContent.includes('reconnect') ||\n lowerContent.includes('authorization') ||\n (lowerContent.includes('token') && lowerContent.includes('expired'))\n ) {\n return 'OAuth';\n }\n\n // Workflow errors\n if (\n lowerContent.includes('workflow') ||\n lowerContent.includes('execution') ||\n lowerContent.includes('failed to start') ||\n lowerContent.includes('automation')\n ) {\n return 'Workflow';\n }\n\n return 'Unknown';\n}\n\n/**\n * Extract correlation ID from message content\n */\nfunction extractCorrelationId(content: string): string | undefined {\n for (const pattern of CORRELATION_ID_PATTERNS) {\n const match = content.match(pattern);\n if (match?.[1]) {\n return match[1];\n }\n }\n return undefined;\n}\n\n/**\n * Detect if a message contains an error and extract context\n */\nexport function detectErrorInMessage(content: string): ExtractedErrorContext {\n // Check if any error patterns match\n const hasError = ERROR_PATTERNS.some((pattern) => pattern.test(content));\n\n if (!hasError) {\n return { hasError: false };\n }\n\n return {\n hasError: true,\n category: inferErrorCategory(content),\n correlationId: extractCorrelationId(content),\n errorMessage: content,\n };\n}\n\n/**\n * CopilotKit message type (simplified for our use)\n */\ninterface CopilotMessage {\n role?: string;\n content?: string;\n}\n\n/**\n * Build a chat snippet from recent messages for error context.\n * Includes recent user messages and the error message itself.\n *\n * @param messages - Array of chat messages from useCopilotChat\n * @param errorMessageContent - The current error message content\n * @param maxMessages - Maximum number of recent messages to include (default: 5)\n * @param maxLength - Maximum total character length (default: 1500)\n */\nfunction buildChatSnippet(\n messages: CopilotMessage[],\n errorMessageContent: string,\n maxMessages = 5,\n maxLength = 1500\n): string {\n // Get last N messages (excluding the current error message if it's already in the list)\n const recentMessages = messages\n .filter((msg) => msg.content && msg.content !== errorMessageContent)\n .slice(-maxMessages);\n\n // Format messages with role labels\n const formattedMessages = recentMessages.map((msg) => {\n const role = msg.role === 'user' ? 'User' : 'Assistant';\n const content = msg.content || '';\n // Truncate individual messages if too long\n const truncatedContent = content.length > 300 ? content.slice(0, 300) + '...' : content;\n return `[${role}]: ${truncatedContent}`;\n });\n\n // Add the error message\n const errorSnippet =\n errorMessageContent.length > 500\n ? errorMessageContent.slice(0, 500) + '...'\n : errorMessageContent;\n formattedMessages.push(`[Assistant - Error]: ${errorSnippet}`);\n\n // Join and truncate if total is too long\n let result = formattedMessages.join('\\n\\n');\n if (result.length > maxLength) {\n result = result.slice(0, maxLength) + '\\n...[truncated]';\n }\n\n return result;\n}\n\n/**\n * Container for generative UI (tool call renders)\n */\nconst GenerativeUIContainer = styled.div`\n margin-top: ${tokens.spacing.sm};\n margin-bottom: ${tokens.spacing.sm};\n`;\n\n/**\n * Inline tool call indicator shown in the message flow\n */\nconst ToolCallIndicator = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.sm};\n padding: ${tokens.spacing.xs} ${tokens.spacing.sm};\n margin-bottom: ${tokens.spacing.sm};\n border-radius: ${tokens.borderRadius.md};\n background: ${tokens.colors.text.primary}08;\n border: 1px solid ${tokens.colors.border.default};\n font-size: ${tokens.typography.fontSize.xs};\n color: ${tokens.colors.text.secondary};\n`;\n\nconst ToolCallIcon = styled.span`\n display: flex;\n align-items: center;\n color: ${tokens.colors.primary};\n`;\n\nconst ToolCallName = styled.span`\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.text.primary};\n`;\n\n/**\n * Adapter that converts CopilotKit's AssistantMessageProps to our custom component\n * Memoized to prevent re-renders when props haven't changed.\n */\nconst AssistantMessageAdapterBase: FC<CopilotAssistantMessageProps> = ({\n message,\n isLoading,\n isGenerating,\n // These are available but not used in our current implementation:\n // isCurrentMessage,\n // onRegenerate,\n // onCopy,\n // onThumbsUp,\n // onThumbsDown,\n // markdownTagRenderers,\n // ImageRenderer,\n}) => {\n // Cache the last generative UI output so it persists after tool completion\n // CopilotKit may stop calling generativeUI() after the tool completes, but we want\n // to keep showing the tool call render with its final \"completed\" state\n const lastGenerativeUIRef = useRef<ReactNode>(null);\n\n // Extract content — normalize array content (some CopilotKit versions use string[])\n const rawContent = Array.isArray(message?.content)\n ? (message.content as string[]).join('')\n : message?.content || '';\n const content = stripToolCallMarkers(rawContent);\n\n // Invoke generativeUI to get tool call render output\n // This is how CopilotKit renders custom tool call UIs from useRenderToolCall\n // IMPORTANT: Check for generative UI BEFORE showing \"Thinking...\" state\n // so that workflow progress UI is visible even when AI text hasn't arrived yet\n let generativeUIOutput: ReactNode = null;\n const msgWithUI = message as MessageWithGenerativeUI | undefined;\n if (msgWithUI && typeof msgWithUI.generativeUI === 'function') {\n try {\n const newOutput = msgWithUI.generativeUI();\n if (newOutput !== null && newOutput !== undefined) {\n generativeUIOutput = newOutput;\n // Cache the output so we can show it even after CopilotKit stops calling the function\n lastGenerativeUIRef.current = newOutput;\n }\n } catch (e) {\n console.warn('[AssistantMessageAdapter] Error rendering generativeUI:', e);\n }\n }\n\n // Fall back to cached generative UI if current call returned null\n // This keeps the tool call visible after completion\n if (!generativeUIOutput && lastGenerativeUIRef.current) {\n generativeUIOutput = lastGenerativeUIRef.current;\n }\n\n const hasGenerativeUI = generativeUIOutput !== null;\n\n // Show thinking when loading/generating and no content yet\n // Tool calls are rendered separately via RenderActionExecutionMessage/useRenderToolCall\n const showThinking = (isLoading || (isGenerating && !content)) && !hasGenerativeUI;\n\n if (showThinking) {\n return <AssistantThinking message=\"Thinking...\" />;\n }\n\n // Parse attachments if present in the message\n // TODO: Implement attachments parsing from CopilotKit message data\n const attachments: never[] = [];\n\n return (\n <>\n {/* Render generative UI (tool call renders) above the message if present */}\n {generativeUIOutput && <GenerativeUIContainer>{generativeUIOutput}</GenerativeUIContainer>}\n {/* Only render AssistantMessage if there's content */}\n {content && (\n <AssistantMessage\n content={content}\n avatarInitials=\"AI\"\n isLoading={false} // Don't show loading dots when we have content\n isStreaming={isGenerating} // Show streaming indicator while generating\n attachments={attachments}\n enableMarkdown={true}\n />\n )}\n </>\n );\n};\n\n// Memoize to prevent re-renders when parent updates but props are the same\nexport const AssistantMessageAdapter = memo(AssistantMessageAdapterBase);\n\nAssistantMessageAdapter.displayName = 'AssistantMessageAdapter';\n\n/**\n * Props for custom thinking indicator component\n */\nexport interface ThinkingIndicatorProps {\n isLoading?: boolean;\n isGenerating?: boolean;\n}\n\n/**\n * Creates a custom AssistantMessageAdapter with a custom thinking indicator\n * and an optional tool calls component that renders before the message.\n *\n * @param ThinkingIndicator - Custom component to render during loading/generating state (optional)\n * @param ToolCallsComponent - Component to render before message content, shown during loading/generating (optional)\n * @returns A memoized AssistantMessageAdapter component\n */\nexport function createAssistantMessageAdapter(\n ThinkingIndicator?: React.ComponentType<ThinkingIndicatorProps>,\n _ToolCallsComponent?: React.ComponentType\n): FC<CopilotAssistantMessageProps> {\n const CustomAssistantMessageAdapter: FC<CopilotAssistantMessageProps> = ({\n message,\n isLoading,\n isGenerating,\n }) => {\n // Cache the last generative UI output so it persists after tool completion\n const lastGenerativeUIRef = useRef<ReactNode>(null);\n\n // Extract content — normalize array content (some CopilotKit versions use string[])\n const rawContent = Array.isArray(message?.content)\n ? (message.content as string[]).join('')\n : message?.content || '';\n const content = stripToolCallMarkers(rawContent);\n\n // Detect tool calls: content markers first, then global registry\n // Check registry when loading/generating (current active message) or when content is substantial\n const toolCallNames = useMemo(() => {\n const fromContent = extractToolCallNames(rawContent);\n if (fromContent.length > 0) return fromContent;\n if (isLoading || isGenerating || rawContent.length > 80) return getActiveToolCalls();\n return [];\n }, [rawContent, isLoading, isGenerating]);\n\n // Invoke generativeUI to get tool call render output\n let generativeUIOutput: ReactNode = null;\n const msgWithUI = message as MessageWithGenerativeUI | undefined;\n if (msgWithUI && typeof msgWithUI.generativeUI === 'function') {\n try {\n const newOutput = msgWithUI.generativeUI();\n if (newOutput !== null && newOutput !== undefined) {\n generativeUIOutput = newOutput;\n lastGenerativeUIRef.current = newOutput;\n }\n } catch (e) {\n console.warn('[AssistantMessageAdapter] Error rendering generativeUI:', e);\n }\n }\n\n if (!generativeUIOutput && lastGenerativeUIRef.current) {\n generativeUIOutput = lastGenerativeUIRef.current;\n }\n\n const attachments: never[] = [];\n const hasGenerativeUI = generativeUIOutput !== null;\n const showThinking = (isLoading || (isGenerating && !content)) && !hasGenerativeUI;\n\n const toolCallIndicators = toolCallNames.map((name) => (\n <ToolCallIndicator key={name}>\n <ToolCallIcon>\n <Icon name=\"hammer-fill\" size={14} />\n </ToolCallIcon>\n <ToolCallName>{formatToolName(name)}</ToolCallName>\n </ToolCallIndicator>\n ));\n\n if (showThinking) {\n return (\n <>\n {toolCallIndicators}\n {ThinkingIndicator ? (\n <ThinkingIndicator isLoading={isLoading} isGenerating={isGenerating} />\n ) : (\n <AssistantThinking message=\"Thinking...\" />\n )}\n </>\n );\n }\n\n return (\n <>\n {toolCallIndicators}\n {generativeUIOutput && <GenerativeUIContainer>{generativeUIOutput}</GenerativeUIContainer>}\n {content && (\n <AssistantMessage\n content={content}\n avatarInitials=\"AI\"\n isLoading={false}\n isStreaming={isGenerating}\n attachments={attachments}\n enableMarkdown={true}\n />\n )}\n </>\n );\n };\n\n CustomAssistantMessageAdapter.displayName = 'CustomAssistantMessageAdapter';\n return memo(CustomAssistantMessageAdapter);\n}\n\n/**\n * Creates a custom AssistantMessageAdapter with error detection and reporting.\n * When an error is detected in the message, a \"Report Issue\" button is shown.\n *\n * @param onReportIssue - Callback fired when user clicks \"Report Issue\" button\n * @param ThinkingIndicator - Custom component to render during loading/generating state (optional)\n * @param ToolCallsComponent - Component to render before message content, shown during loading/generating (optional)\n * @returns A memoized AssistantMessageAdapter component with error reporting\n */\nexport function createAssistantMessageAdapterWithErrorReporting(\n onReportIssue?: ReportIssueCallback,\n ThinkingIndicator?: React.ComponentType<ThinkingIndicatorProps>,\n _ToolCallsComponent?: React.ComponentType // Kept for backwards compat, no longer used\n): FC<CopilotAssistantMessageProps> {\n const ErrorReportingAssistantMessageAdapter: FC<CopilotAssistantMessageProps> = ({\n message,\n isLoading,\n isGenerating,\n }) => {\n // Cache the last generative UI output so it persists after tool completion\n const lastGenerativeUIRef = useRef<ReactNode>(null);\n\n // Access conversation history for error context\n const { visibleMessages } = useCopilotChat();\n\n // Extract content — normalize array content (some CopilotKit versions use string[])\n const rawContent = Array.isArray(message?.content)\n ? (message.content as string[]).join('')\n : message?.content || '';\n const content = stripToolCallMarkers(rawContent);\n\n // Detect tool calls: content markers first, then global registry\n // Check registry when loading/generating (current active message) or when content is substantial\n const toolCallNames = useMemo(() => {\n const fromContent = extractToolCallNames(rawContent);\n if (fromContent.length > 0) return fromContent;\n if (isLoading || isGenerating || rawContent.length > 80) return getActiveToolCalls();\n return [];\n }, [rawContent, isLoading, isGenerating]);\n\n // Detect errors in the message content\n const errorContext = useMemo(() => detectErrorInMessage(content), [content]);\n\n // Build chat snippet including conversation history\n const chatSnippet = useMemo(() => {\n if (!errorContext.hasError) return '';\n return buildChatSnippet(visibleMessages as CopilotMessage[], content);\n }, [visibleMessages, content, errorContext.hasError]);\n\n // Build action buttons - add \"Report Issue\" if error detected and callback provided\n const actions: ActionButtonType[] = useMemo(() => {\n // Only show report button for completed messages with errors (not while streaming)\n if (!errorContext.hasError || !onReportIssue || isGenerating) {\n return [];\n }\n\n return [\n {\n label: 'Report Issue',\n onClick: () => {\n onReportIssue({\n errorCategory: errorContext.category,\n correlationId: errorContext.correlationId,\n // Include conversation history leading to the error\n chatSnippet,\n });\n },\n icon: (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\n </svg>\n ),\n },\n ];\n }, [errorContext, chatSnippet, isGenerating]);\n\n // Invoke generativeUI to get tool call render output\n // IMPORTANT: Check for generative UI BEFORE showing \"Thinking...\" state\n // so that workflow progress UI is visible even when AI text hasn't arrived yet\n let generativeUIOutput: ReactNode = null;\n const msgWithUI = message as MessageWithGenerativeUI | undefined;\n\n if (msgWithUI && typeof msgWithUI.generativeUI === 'function') {\n try {\n const newOutput = msgWithUI.generativeUI();\n if (newOutput !== null && newOutput !== undefined) {\n generativeUIOutput = newOutput;\n // Cache the output so we can show it even after CopilotKit stops calling the function\n lastGenerativeUIRef.current = newOutput;\n }\n } catch (e) {\n console.warn('[AssistantMessageAdapter] Error rendering generativeUI:', e);\n }\n }\n\n // Fall back to cached generative UI if current call returned null\n // This keeps the tool call visible after completion\n if (!generativeUIOutput && lastGenerativeUIRef.current) {\n generativeUIOutput = lastGenerativeUIRef.current;\n }\n\n const attachments: never[] = [];\n\n const hasGenerativeUI = generativeUIOutput !== null;\n\n // Show thinking when loading/generating and no content yet\n const showThinking = (isLoading || (isGenerating && !content)) && !hasGenerativeUI;\n\n if (showThinking) {\n return (\n <>\n {toolCallNames.map((name) => (\n <ToolCallIndicator key={name}>\n <ToolCallIcon>\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z\" />\n </svg>\n </ToolCallIcon>\n <ToolCallName>{formatToolName(name)}</ToolCallName>\n </ToolCallIndicator>\n ))}\n {ThinkingIndicator ? (\n <ThinkingIndicator isLoading={isLoading} isGenerating={isGenerating} />\n ) : (\n <AssistantThinking message=\"Thinking...\" />\n )}\n </>\n );\n }\n\n return (\n <>\n {toolCallNames.map((name) => (\n <ToolCallIndicator key={name}>\n <ToolCallIcon>\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z\" />\n </svg>\n </ToolCallIcon>\n <ToolCallName>{formatToolName(name)}</ToolCallName>\n </ToolCallIndicator>\n ))}\n {generativeUIOutput && <GenerativeUIContainer>{generativeUIOutput}</GenerativeUIContainer>}\n {content && (\n <AssistantMessage\n content={content}\n avatarInitials=\"AI\"\n isLoading={false}\n isStreaming={isGenerating}\n attachments={attachments}\n enableMarkdown={true}\n actions={actions}\n />\n )}\n </>\n );\n };\n\n ErrorReportingAssistantMessageAdapter.displayName = 'ErrorReportingAssistantMessageAdapter';\n return memo(ErrorReportingAssistantMessageAdapter);\n}\n","import styled, { css } from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\nimport type { ButtonSize, ButtonVariant } from './Button.types';\n\ninterface StyledButtonProps {\n $variant: ButtonVariant;\n $size: ButtonSize;\n $isPressed: boolean;\n $isLoading: boolean;\n}\n\nconst variantStyles = {\n primary: css`\n background-color: ${tokens.colors.primary};\n color: ${tokens.colors.text.primary};\n border: none;\n\n &:hover:not(:disabled) {\n opacity: 0.9;\n transform: translateY(-1px);\n }\n\n &:active:not(:disabled) {\n opacity: 0.8;\n transform: translateY(0);\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n `,\n secondary: css`\n background-color: transparent;\n color: ${tokens.colors.text.primary};\n border: 1px solid ${tokens.colors.border.default};\n\n &:hover:not(:disabled) {\n background-color: ${tokens.colors.surface.overlay};\n border-color: ${tokens.colors.primary};\n }\n\n &:active:not(:disabled) {\n background-color: ${tokens.colors.surface.overlayActive};\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n `,\n icon: css`\n background-color: transparent;\n color: ${tokens.colors.text.primary};\n border: none;\n padding: ${tokens.spacing.sm};\n min-width: auto;\n\n &:hover:not(:disabled) {\n background-color: ${tokens.colors.surface.overlayHover};\n opacity: 0.8;\n }\n\n &:active:not(:disabled) {\n opacity: 0.6;\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n `,\n};\n\nconst sizeStyles = {\n small: css`\n padding: ${tokens.spacing.xs} ${tokens.spacing.sm};\n font-size: ${tokens.typography.fontSize.sm};\n min-width: 60px;\n height: 28px;\n `,\n medium: css`\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n font-size: ${tokens.typography.fontSize.base};\n min-width: 80px;\n height: 36px;\n `,\n large: css`\n padding: ${tokens.spacing.md} ${tokens.spacing.lg};\n font-size: ${tokens.typography.fontSize.lg};\n min-width: 100px;\n height: 44px;\n `,\n};\n\nexport const StyledButton = styled.button<StyledButtonProps>`\n /* Base styles */\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: ${tokens.spacing.xs};\n font-family: ${tokens.typography.fontFamily.primary};\n font-weight: ${tokens.typography.fontWeight.medium};\n border-radius: ${tokens.borderRadius.md};\n cursor: pointer;\n transition: all ${tokens.transitions.normal};\n white-space: nowrap;\n user-select: none;\n\n /* Variant styles */\n ${({ $variant }) => variantStyles[$variant]}\n\n /* Size styles */\n ${({ $size, $variant }) => $variant !== 'icon' && sizeStyles[$size]}\n\n /* Icon variant size overrides */\n ${({ $variant, $size }) =>\n $variant === 'icon' &&\n css`\n width: ${$size === 'small' ? '28px' : $size === 'large' ? '44px' : '36px'};\n height: ${$size === 'small' ? '28px' : $size === 'large' ? '44px' : '36px'};\n border-radius: ${tokens.borderRadius.sm};\n `}\n\n /* Pressed state */\n ${({ $isPressed }) =>\n $isPressed &&\n css`\n transform: scale(0.98);\n `}\n\n /* Loading state */\n ${({ $isLoading }) =>\n $isLoading &&\n css`\n cursor: wait;\n opacity: 0.7;\n `}\n\n /* Disabled state */\n &:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n transform: none;\n }\n\n /* Remove default focus outline, using focus-visible instead */\n &:focus {\n outline: none;\n }\n`;\n","import type { AriaButtonProps } from '@react-aria/button';\nimport { useButton } from '@react-aria/button';\nimport { useRef } from 'react';\nimport { StyledButton } from './Button.styles';\nimport type { ButtonSize, ButtonVariant } from './Button.types';\n\n// Re-export types for public API\nexport type { ButtonSize, ButtonVariant } from './Button.types';\n\nexport interface ButtonProps extends AriaButtonProps {\n variant?: ButtonVariant;\n size?: ButtonSize;\n children: React.ReactNode;\n className?: string;\n disabled?: boolean;\n isLoading?: boolean;\n}\n\nexport function Button({\n variant = 'primary',\n size = 'medium',\n children,\n className,\n disabled = false,\n isLoading = false,\n ...ariaProps\n}: ButtonProps) {\n const ref = useRef<HTMLButtonElement>(null);\n const { buttonProps, isPressed } = useButton(\n {\n ...ariaProps,\n isDisabled: disabled || isLoading,\n },\n ref\n );\n\n return (\n <StyledButton\n {...buttonProps}\n ref={ref}\n className={className}\n $variant={variant}\n $size={size}\n $isPressed={isPressed}\n $isLoading={isLoading}\n disabled={disabled || isLoading}\n >\n {isLoading ? (\n <span aria-live=\"polite\" aria-busy=\"true\">\n Loading...\n </span>\n ) : (\n children\n )}\n </StyledButton>\n );\n}\n\nButton.displayName = 'Button';\n","import styled, { css } from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\nimport type { ActionsLayout } from './Actions.types';\n\ninterface ActionsContainerProps {\n $layout: ActionsLayout;\n}\n\nexport const ActionsContainer = styled.div<ActionsContainerProps>`\n display: flex;\n gap: ${tokens.spacing.sm};\n align-items: center;\n\n ${({ $layout }) =>\n $layout === 'horizontal'\n ? css`\n flex-direction: row;\n flex-wrap: wrap;\n `\n : css`\n flex-direction: column;\n align-items: stretch;\n\n button {\n width: 100%;\n }\n `}\n`;\n","import { Button } from '../Button';\nimport { ActionsContainer } from './Actions.styles';\nimport type { Action, ActionsLayout } from './Actions.types';\n\n// Re-export types for public API\nexport type { Action, ActionsLayout, ActionVariant } from './Actions.types';\n\nexport interface ActionsProps {\n actions: Action[];\n layout?: ActionsLayout;\n className?: string;\n}\n\nexport function Actions({ actions, layout = 'horizontal', className }: ActionsProps) {\n return (\n <ActionsContainer $layout={layout} className={className}>\n {actions.map((action) => (\n <Button\n key={action.id}\n variant={action.variant || 'secondary'}\n onPress={action.onClick}\n isDisabled={action.disabled}\n aria-label={action.label}\n >\n {action.icon && <span aria-hidden=\"true\">{action.icon}</span>}\n {action.variant !== 'icon' && action.label}\n </Button>\n ))}\n </ActionsContainer>\n );\n}\n\nActions.displayName = 'Actions';\n","import styled, { keyframes } from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\n// Pulse animation matching AssistantThinking\nconst dotPulse = keyframes`\n 0%, 100% {\n opacity: 0.3;\n transform: scale(0.8);\n }\n 50% {\n opacity: 1;\n transform: scale(1);\n }\n`;\n\n// Fade in animation for streaming text\nconst fadeIn = keyframes`\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n`;\n\n// Cursor blink animation for streaming\nconst blink = keyframes`\n 0%, 49% {\n opacity: 1;\n }\n 50%, 100% {\n opacity: 0;\n }\n`;\n\nexport const ResponseContainer = styled.div`\n display: inline-flex;\n align-items: center;\n gap: ${tokens.spacing.sm};\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n background-color: ${tokens.colors.surface.elevated};\n border-radius: ${tokens.borderRadius.xl};\n box-shadow: none;\n font-family: ${tokens.typography.fontFamily.primary};\n max-width: fit-content;\n margin: 0 auto;\n`;\n\nexport const LoadingDots = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n padding: 0 ${tokens.spacing.xs};\n`;\n\nexport const Dot = styled.span<{ delay: number }>`\n width: ${tokens.spacing.xs};\n height: ${tokens.spacing.xs};\n border-radius: ${tokens.borderRadius.full};\n background-color: ${tokens.colors.text.tertiary};\n animation: ${dotPulse} 1.4s ease-in-out infinite;\n animation-delay: ${(props) => props.delay}s;\n`;\n\nexport const TypingIndicator = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n padding: 0 ${tokens.spacing.xs};\n\n ${Dot} {\n width: ${tokens.spacing.xs};\n height: ${tokens.spacing.xs};\n background-color: ${tokens.colors.text.tertiary};\n animation: ${dotPulse} 1.4s ease-in-out infinite;\n }\n`;\n\nexport const Message = styled.span`\n font-size: ${tokens.typography.fontSize.sm};\n color: ${tokens.colors.text.primary};\n font-weight: ${tokens.typography.fontWeight.regular};\n line-height: ${tokens.typography.lineHeight.normal};\n white-space: nowrap;\n`;\n\nexport const StreamingText = styled.div`\n font-size: ${tokens.typography.fontSize.sm};\n line-height: ${tokens.typography.lineHeight.normal};\n color: ${tokens.colors.text.primary};\n animation: ${fadeIn} ${tokens.animation.duration.medium} ease-in;\n position: relative;\n font-weight: ${tokens.typography.fontWeight.regular};\n white-space: nowrap;\n\n /* Blinking cursor effect */\n &::after {\n content: '|';\n margin-left: 0.125rem;\n animation: ${blink} 1s infinite;\n color: ${tokens.colors.text.tertiary};\n font-weight: ${tokens.typography.fontWeight.regular};\n }\n`;\n","import {\n Dot,\n LoadingDots,\n Message,\n ResponseContainer,\n StreamingText,\n TypingIndicator,\n} from './Response.styles';\n\nexport interface ResponseProps {\n /** Loading state - shows animated dots */\n isLoading?: boolean;\n /** Typing state - shows typing indicator */\n isTyping?: boolean;\n /** Streaming state - shows text being typed */\n isStreaming?: boolean;\n /** Content to display when streaming */\n streamingContent?: string;\n /** Message to display with loading/typing state */\n message?: string;\n /** Additional CSS class name */\n className?: string;\n}\n\n/**\n * Response component for displaying loading and streaming states\n * Shows animated loading dots, typing indicators, and streaming text\n */\nexport const Response = ({\n isLoading = false,\n isTyping = false,\n isStreaming = false,\n streamingContent = '',\n message = 'Thinking...',\n className,\n}: ResponseProps) => {\n // Show loading dots\n if (isLoading) {\n return (\n <ResponseContainer className={className} data-testid=\"response-loading\">\n <LoadingDots aria-hidden=\"true\">\n <Dot delay={0} />\n <Dot delay={0.15} />\n <Dot delay={0.3} />\n </LoadingDots>\n <Message>{message}</Message>\n </ResponseContainer>\n );\n }\n\n // Show typing indicator\n if (isTyping) {\n return (\n <ResponseContainer className={className} data-testid=\"response-typing\">\n <TypingIndicator aria-hidden=\"true\">\n <Dot delay={0} />\n <Dot delay={0.15} />\n <Dot delay={0.3} />\n </TypingIndicator>\n <Message>{message}</Message>\n </ResponseContainer>\n );\n }\n\n // Show streaming text\n if (isStreaming && streamingContent) {\n return (\n <ResponseContainer className={className} data-testid=\"response-streaming\">\n <StreamingText>{streamingContent}</StreamingText>\n </ResponseContainer>\n );\n }\n\n // Empty state\n return null;\n};\n","import styled, { keyframes } from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\n// Pulse animation matching AssistantThinking\nconst dotPulse = keyframes`\n 0%, 100% {\n opacity: 0.3;\n transform: scale(0.8);\n }\n 50% {\n opacity: 1;\n transform: scale(1);\n }\n`;\n\n// Shake animation for error indicator\nconst shake = keyframes`\n 0%, 100% {\n transform: translateX(0);\n }\n 25% {\n transform: translateX(-5px);\n }\n 75% {\n transform: translateX(5px);\n }\n`;\n\nexport const AgentStateContainer = styled.div<{ isError?: boolean }>`\n display: inline-flex;\n flex-direction: column;\n align-items: center;\n gap: ${tokens.spacing.sm};\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n background-color: ${(props) => (props.isError ? 'rgba(239, 68, 68, 0.15)' : tokens.colors.surface.elevated)};\n border-radius: ${tokens.borderRadius.xl};\n border: ${(props) => (props.isError ? `1px solid ${tokens.colors.error}` : 'none')};\n box-shadow: none;\n font-family: ${tokens.typography.fontFamily.primary};\n max-width: fit-content;\n margin: 0 auto;\n`;\n\nexport const StateContent = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.sm};\n align-items: center;\n width: 100%;\n`;\n\nexport const IdleIndicator = styled.div`\n width: ${tokens.spacing.xs};\n height: ${tokens.spacing.xs};\n background-color: ${tokens.colors.status.idle};\n border-radius: ${tokens.borderRadius.full};\n animation: ${dotPulse} 2s infinite ease-in-out;\n`;\n\nexport const ErrorIndicator = styled.div`\n width: ${tokens.spacing.xs};\n height: ${tokens.spacing.xs};\n background-color: ${tokens.colors.error};\n border-radius: ${tokens.borderRadius.full};\n animation: ${shake} 0.5s ease-in-out;\n`;\n\nexport const StateLabel = styled.span`\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.regular};\n color: ${tokens.colors.text.primary};\n line-height: ${tokens.typography.lineHeight.normal};\n white-space: nowrap;\n`;\n\nexport const MessageText = styled.p`\n font-size: ${tokens.typography.fontSize.sm};\n color: ${tokens.colors.text.tertiary};\n line-height: ${tokens.typography.lineHeight.normal};\n margin: 0;\n text-align: center;\n white-space: nowrap;\n`;\n\nexport const ProgressBar = styled.div`\n width: 100%;\n height: ${tokens.spacing.xs};\n background-color: ${tokens.colors.surface.elevated};\n border-radius: ${tokens.borderRadius.sm};\n overflow: hidden;\n margin-top: ${tokens.spacing.xs};\n`;\n\nexport const ProgressBarFill = styled.div<{ progress: number }>`\n height: 100%;\n width: ${(props) => Math.min(Math.max(props.progress, 0), 100)}%;\n background: linear-gradient(135deg, ${tokens.colors.accent} 0%, ${tokens.colors.primary} 100%);\n border-radius: ${tokens.borderRadius.sm};\n transition: width ${tokens.transitions.normal};\n`;\n","import { Response } from '../Response';\nimport {\n AgentStateContainer,\n ErrorIndicator,\n IdleIndicator,\n ProgressBar,\n ProgressBarFill,\n StateContent,\n StateLabel,\n} from './AgentState.styles';\n\nexport interface AgentStateProps {\n /** Current agent state */\n state: 'idle' | 'thinking' | 'responding' | 'error';\n /** Optional message to display */\n message?: string;\n /** Optional progress percentage (0-100) */\n progress?: number;\n /** Additional CSS class name */\n className?: string;\n}\n\n/**\n * AgentState component for displaying agent status\n * Styled to match AssistantThinking and Response components with dark theme\n */\nexport const AgentState = ({ state, message, progress, className }: AgentStateProps) => {\n // Idle state - show pulsing indicator\n if (state === 'idle') {\n return (\n <AgentStateContainer className={className} data-testid=\"agent-state-idle\">\n <StateContent>\n <IdleIndicator />\n <StateLabel>{message || 'Agent is idle'}</StateLabel>\n {progress !== undefined && (\n <ProgressBar>\n <ProgressBarFill progress={progress} />\n </ProgressBar>\n )}\n </StateContent>\n </AgentStateContainer>\n );\n }\n\n // Error state - show error indicator\n if (state === 'error') {\n return (\n <AgentStateContainer className={className} data-testid=\"agent-state-error\" isError>\n <StateContent>\n <ErrorIndicator />\n <StateLabel>{message || 'Error occurred'}</StateLabel>\n </StateContent>\n </AgentStateContainer>\n );\n }\n\n // Thinking state - use Response component with loading dots\n if (state === 'thinking') {\n return <Response isLoading message={message || 'Agent is thinking...'} className={className} />;\n }\n\n // Responding state - use Response component with typing indicator\n if (state === 'responding') {\n return (\n <Response isTyping message={message || 'Agent is responding...'} className={className} />\n );\n }\n\n return null;\n};\n","import styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\nexport const FooterContainer = styled.footer`\n display: flex;\n align-items: center;\n justify-content: center;\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n background-color: ${tokens.colors.surface.base};\n border-top: 1px solid ${tokens.colors.border.default};\n min-height: 44px;\n`;\n\nexport const FooterContent = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: ${tokens.spacing.md};\n width: 100%;\n max-width: 100%;\n font-size: ${tokens.typography.fontSize.xs};\n color: ${tokens.colors.text.secondary};\n opacity: 0.6;\n font-family: ${tokens.typography.fontFamily.primary};\n line-height: ${tokens.typography.lineHeight.tight};\n`;\n\nexport const FooterBranding = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n flex-shrink: 0;\n`;\n\nexport const FooterStatus = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: ${tokens.typography.fontSize.xs};\n opacity: 0.8;\n`;\n\nexport const FooterLink = styled.a`\n color: ${tokens.colors.primary};\n text-decoration: none;\n transition: opacity ${tokens.transitions.fast};\n cursor: pointer;\n\n &:hover {\n opacity: 0.8;\n text-decoration: underline;\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n border-radius: ${tokens.borderRadius.sm};\n }\n`;\n","import type React from 'react';\nimport {\n FooterBranding,\n FooterContainer,\n FooterContent,\n FooterLink,\n FooterStatus,\n} from './Footer.styles';\n\nexport interface FooterProps {\n /**\n * Branding text to display (e.g., \"Powered by CopilotKit\")\n */\n branding?: string;\n\n /**\n * Optional status text (e.g., \"Connected\", \"Typing...\", \"3 tokens remaining\")\n */\n status?: string;\n\n /**\n * Optional link URL for the branding text\n */\n brandingUrl?: string;\n\n /**\n * Callback when branding link is clicked\n */\n onBrandingClick?: () => void;\n\n /**\n * Additional CSS class name for custom styling\n */\n className?: string;\n}\n\n/**\n * Footer Component\n *\n * A chat footer component that displays branding, status information, and optional links.\n * Typically used at the bottom of a chat interface to show provider information or connection status.\n *\n * @example\n * ```tsx\n * <Footer\n * branding=\"Powered by CopilotKit\"\n * status=\"Connected\"\n * brandingUrl=\"https://copilotkit.ai\"\n * />\n * ```\n */\nexport const Footer: React.FC<FooterProps> = ({\n branding,\n status,\n brandingUrl,\n onBrandingClick,\n className,\n}) => {\n // If no content, don't render\n if (!branding && !status) {\n return null;\n }\n\n const handleBrandingClick = (e: React.MouseEvent<HTMLAnchorElement>) => {\n if (onBrandingClick) {\n e.preventDefault();\n onBrandingClick();\n }\n };\n\n return (\n <FooterContainer className={className}>\n <FooterContent>\n {branding && (\n <FooterBranding>\n {brandingUrl ? (\n <FooterLink\n href={brandingUrl}\n onClick={handleBrandingClick}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {branding}\n </FooterLink>\n ) : (\n branding\n )}\n </FooterBranding>\n )}\n\n {status && <FooterStatus>{status}</FooterStatus>}\n </FooterContent>\n </FooterContainer>\n );\n};\n\nFooter.displayName = 'Footer';\n","/**\n * StreamStatusIndicator Component\n *\n * Displays connection status for streaming chat (SSE).\n *\n * @see specs/015-restyle-ai-chat/spec.md\n */\n\nimport type React from 'react';\nimport styled, { keyframes } from 'styled-components';\nimport { tokens } from '../../theme/tokens';\n\nconst pulse = keyframes`\n 0%, 100% {\n opacity: 1;\n transform: scale(1);\n }\n 50% {\n opacity: 0.6;\n transform: scale(1.1);\n }\n`;\n\nconst Container = styled.div<{ size: 'sm' | 'md' | 'lg' }>`\n display: inline-flex;\n align-items: center;\n gap: ${(props) => {\n switch (props.size) {\n case 'sm':\n return tokens.spacing.xs;\n case 'lg':\n return tokens.spacing.sm;\n case 'md':\n default:\n return tokens.spacing.xs;\n }\n }};\n font-family: ${tokens.typography.fontFamily.primary};\n`;\n\nconst StatusDot = styled.div<{\n status: 'connected' | 'streaming' | 'disconnected' | 'reconnecting';\n size: 'sm' | 'md' | 'lg';\n variant: 'dot' | 'badge';\n}>`\n width: ${(props) => {\n if (props.variant === 'badge') {\n switch (props.size) {\n case 'sm':\n return tokens.spacing.xs;\n case 'lg':\n return tokens.spacing.sm;\n case 'md':\n default:\n return tokens.spacing.sm;\n }\n }\n switch (props.size) {\n case 'sm':\n return tokens.spacing.xs;\n case 'lg':\n return tokens.borderRadius.lg;\n case 'md':\n default:\n return tokens.spacing.sm;\n }\n }};\n height: ${(props) => {\n if (props.variant === 'badge') {\n switch (props.size) {\n case 'sm':\n return tokens.spacing.xs;\n case 'lg':\n return tokens.spacing.sm;\n case 'md':\n default:\n return tokens.spacing.sm;\n }\n }\n switch (props.size) {\n case 'sm':\n return tokens.spacing.xs;\n case 'lg':\n return tokens.borderRadius.lg;\n case 'md':\n default:\n return tokens.spacing.sm;\n }\n }};\n border-radius: ${tokens.borderRadius.full};\n background-color: ${(props) => {\n switch (props.status) {\n case 'connected':\n return tokens.colors.connection.connected;\n case 'streaming':\n return tokens.colors.connection.streaming;\n case 'disconnected':\n return tokens.colors.connection.disconnected;\n case 'reconnecting':\n return tokens.colors.connection.reconnecting;\n }\n }};\n animation: ${(props) => (props.status === 'streaming' ? pulse : 'none')} 2s ease-in-out infinite;\n flex-shrink: 0;\n`;\n\nconst Label = styled.span<{ size: 'sm' | 'md' | 'lg'; variant: 'dot' | 'badge' }>`\n font-size: ${(props) => {\n if (props.variant === 'badge') {\n switch (props.size) {\n case 'sm':\n return tokens.typography.fontSize.xs;\n case 'lg':\n return tokens.typography.fontSize.base;\n case 'md':\n default:\n return tokens.typography.fontSize.sm;\n }\n }\n switch (props.size) {\n case 'sm':\n return tokens.typography.fontSize.xs;\n case 'lg':\n return tokens.typography.fontSize.base;\n case 'md':\n default:\n return tokens.typography.fontSize.sm;\n }\n }};\n font-weight: ${(props) => (props.variant === 'badge' ? tokens.typography.fontWeight.medium : tokens.typography.fontWeight.regular)};\n color: ${tokens.colors.text.secondary};\n line-height: ${tokens.typography.lineHeight.tight};\n`;\n\nconst BadgeContainer = styled.div<{ size: 'sm' | 'md' | 'lg' }>`\n display: inline-flex;\n align-items: center;\n gap: ${(props) => {\n switch (props.size) {\n case 'sm':\n return tokens.spacing.xs;\n case 'lg':\n return tokens.spacing.sm;\n case 'md':\n default:\n return tokens.spacing.xs;\n }\n }};\n padding: ${(props) => {\n switch (props.size) {\n case 'sm':\n return `${tokens.spacing.xs} ${tokens.spacing.sm}`;\n case 'lg':\n return `${tokens.spacing.sm} ${tokens.spacing.md}`;\n case 'md':\n default:\n return `${tokens.spacing.xs} ${tokens.spacing.sm}`;\n }\n }};\n background-color: ${tokens.colors.surface.overlay};\n border: 1px solid ${tokens.colors.border.default};\n border-radius: ${(props) => {\n switch (props.size) {\n case 'sm':\n return tokens.borderRadius.sm;\n case 'lg':\n return tokens.borderRadius.md;\n case 'md':\n default:\n return tokens.borderRadius.md;\n }\n }};\n`;\n\nexport interface StreamStatusIndicatorProps {\n /** Connection status */\n status: 'connected' | 'streaming' | 'disconnected' | 'reconnecting';\n /** Visual variant */\n variant?: 'dot' | 'badge';\n /** Size of the indicator */\n size?: 'sm' | 'md' | 'lg';\n /** Whether to show text label */\n showLabel?: boolean;\n /** Custom className */\n className?: string;\n}\n\nconst getStatusLabel = (status: StreamStatusIndicatorProps['status']): string => {\n switch (status) {\n case 'connected':\n return 'Connected';\n case 'streaming':\n return 'Streaming';\n case 'disconnected':\n return 'Disconnected';\n case 'reconnecting':\n return 'Reconnecting...';\n }\n};\n\n/**\n * StreamStatusIndicator component for showing connection status\n *\n * Features:\n * - Visual status indicators (connected/streaming/disconnected/reconnecting)\n * - Color-coded status (green/blue/red/yellow)\n * - Pulsing animation for streaming state\n * - Dot and badge variants\n * - Size options (sm/md/lg)\n * - Optional text labels\n */\nexport const StreamStatusIndicator: React.FC<StreamStatusIndicatorProps> = ({\n status,\n variant = 'dot',\n size = 'md',\n showLabel = false,\n className,\n}) => {\n const content = (\n <>\n <StatusDot status={status} size={size} variant={variant} aria-hidden=\"true\" />\n {showLabel && (\n <Label size={size} variant={variant}>\n {getStatusLabel(status)}\n </Label>\n )}\n </>\n );\n\n if (variant === 'badge') {\n return (\n <BadgeContainer\n size={size}\n className={className}\n role=\"status\"\n aria-label={getStatusLabel(status)}\n >\n {content}\n </BadgeContainer>\n );\n }\n\n return (\n <Container size={size} className={className} role=\"status\" aria-label={getStatusLabel(status)}>\n {content}\n </Container>\n );\n};\n\nStreamStatusIndicator.displayName = 'StreamStatusIndicator';\n","import styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\nexport const HeaderContainer = styled.header`\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: ${tokens.spacing.xs} ${tokens.spacing.sm};\n background-color: ${tokens.colors.backdrop};\n backdrop-filter: blur(10px);\n -webkit-backdrop-filter: blur(10px);\n border-bottom: 1px solid ${tokens.colors.border.default};\n min-height: 44px;\n box-sizing: border-box;\n\n @media (min-width: ${tokens.breakpoints.mobile}px) {\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n }\n`;\n\nexport const HeaderContent = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.xs};\n flex: 1;\n min-width: 0;\n`;\n\nexport const HeaderTitle = styled.h1`\n margin: 0;\n font-size: ${tokens.typography.fontSize.base};\n font-weight: ${tokens.typography.fontWeight.semibold};\n color: ${tokens.colors.text.primary};\n font-family: ${tokens.typography.fontFamily.primary};\n line-height: ${tokens.typography.lineHeight.normal};\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nexport const HeaderSubtitle = styled.p`\n margin: 0;\n font-size: ${tokens.typography.fontSize.sm};\n color: ${tokens.colors.text.secondary};\n font-family: ${tokens.typography.fontFamily.primary};\n line-height: ${tokens.typography.lineHeight.tight};\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nexport const HeaderActions = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n margin-left: ${tokens.spacing.md};\n`;\n\nexport const ActionButton = styled.button`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: ${tokens.spacing.xl};\n height: ${tokens.spacing.xl};\n padding: 0;\n background-color: transparent;\n border: none;\n border-radius: ${tokens.borderRadius.md};\n color: ${tokens.colors.text.primary};\n cursor: pointer;\n transition: all ${tokens.transitions.fast};\n\n &:hover:not(:disabled) {\n background-color: ${tokens.colors.surface.overlay};\n }\n\n &:active:not(:disabled) {\n transform: scale(0.95);\n background-color: ${tokens.colors.surface.overlayActive};\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.3;\n }\n\n svg {\n width: ${tokens.spacing.md};\n height: ${tokens.spacing.md};\n display: block;\n }\n`;\n","import { useButton } from '@react-aria/button';\nimport type React from 'react';\nimport { useRef } from 'react';\nimport { tokens } from '../../../theme/tokens';\nimport { StreamStatusIndicator } from '../StreamStatusIndicator';\nimport {\n ActionButton,\n HeaderActions,\n HeaderContainer,\n HeaderContent,\n HeaderSubtitle,\n HeaderTitle,\n} from './Header.styles';\n\nexport interface HeaderProps {\n /**\n * The main title text displayed in the header\n */\n title: string;\n\n /**\n * Optional subtitle text displayed below the title\n */\n subtitle?: string;\n\n /**\n * Optional stream status indicator (connected/streaming/disconnected/reconnecting)\n * When provided, displays a StreamStatusIndicator next to the title\n */\n streamStatus?: 'connected' | 'streaming' | 'disconnected' | 'reconnecting';\n\n /**\n * Callback function triggered when the close button is clicked\n */\n onClose?: () => void;\n\n /**\n * Callback function triggered when the minimize button is clicked\n */\n onMinimize?: () => void;\n\n /**\n * Additional CSS class name for custom styling\n */\n className?: string;\n}\n\n/**\n * Header Component\n *\n * A chat header component that displays a title, optional subtitle, and action buttons.\n * Built with React ARIA for accessibility and Styled Components for theming.\n *\n * @example\n * ```tsx\n * <Header\n * title=\"AI Assistant\"\n * subtitle=\"How can I help you today?\"\n * onClose={() => console.log('Close clicked')}\n * onMinimize={() => console.log('Minimize clicked')}\n * />\n * ```\n */\nexport const Header: React.FC<HeaderProps> = ({\n title,\n subtitle,\n streamStatus,\n onClose,\n onMinimize,\n className,\n}) => {\n const minimizeRef = useRef<HTMLButtonElement>(null);\n const closeRef = useRef<HTMLButtonElement>(null);\n\n const { buttonProps: minimizeProps } = useButton(\n {\n onPress: onMinimize,\n 'aria-label': 'Minimize',\n isDisabled: !onMinimize,\n },\n minimizeRef\n );\n\n const { buttonProps: closeProps } = useButton(\n {\n onPress: onClose,\n 'aria-label': 'Close',\n isDisabled: !onClose,\n },\n closeRef\n );\n\n return (\n <HeaderContainer className={className}>\n <HeaderContent>\n <div style={{ display: 'flex', alignItems: 'center', gap: tokens.spacing.sm }}>\n <HeaderTitle>{title}</HeaderTitle>\n {streamStatus && (\n <StreamStatusIndicator\n status={streamStatus}\n variant=\"badge\"\n size=\"sm\"\n showLabel={streamStatus === 'streaming' || streamStatus === 'reconnecting'}\n />\n )}\n </div>\n {subtitle && <HeaderSubtitle>{subtitle}</HeaderSubtitle>}\n </HeaderContent>\n\n <HeaderActions>\n {onMinimize && (\n <ActionButton ref={minimizeRef} {...minimizeProps} data-action=\"minimize\">\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <title>Minimize</title>\n <line x1=\"3\" y1=\"8\" x2=\"13\" y2=\"8\" stroke=\"currentColor\" strokeWidth=\"2\" />\n </svg>\n </ActionButton>\n )}\n\n {onClose && (\n <ActionButton ref={closeRef} {...closeProps} data-action=\"close\">\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <title>Close</title>\n <line x1=\"4\" y1=\"4\" x2=\"12\" y2=\"12\" stroke=\"currentColor\" strokeWidth=\"2\" />\n <line x1=\"12\" y1=\"4\" x2=\"4\" y2=\"12\" stroke=\"currentColor\" strokeWidth=\"2\" />\n </svg>\n </ActionButton>\n )}\n </HeaderActions>\n </HeaderContainer>\n );\n};\n\nHeader.displayName = 'Header';\n","import styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\nexport const InputContainer = styled.div`\n\tdisplay: flex;\n\tflex-direction: column;\n\twidth: 100%;\n\tposition: relative;\n`;\n\nexport const InputWrapper = styled.div`\n\tdisplay: flex;\n\talign-items: flex-end;\n\tgap: ${tokens.spacing.sm};\n\tpadding: ${tokens.spacing.md};\n\tbackground-color: ${tokens.colors.backdrop};\n\tbackdrop-filter: blur(10px);\n\t-webkit-backdrop-filter: blur(10px);\n\tborder: 1px solid ${tokens.colors.border.default};\n\tborder-radius: ${tokens.borderRadius.lg};\n\ttransition: all ${tokens.transitions.normal};\n\n\t&:focus-within {\n\t\tborder-color: ${tokens.colors.border.hover};\n\t}\n\n\t&:hover:not(:focus-within) {\n\t\tborder-color: ${tokens.colors.border.subtle};\n\t}\n`;\n\ninterface TextAreaProps {\n $maxRows?: number;\n disabled?: boolean;\n readOnly?: boolean;\n}\n\nexport const TextArea = styled.textarea<TextAreaProps>`\n\tflex: 1;\n\tmin-height: ${tokens.spacing.lg};\n\tmax-height: ${(props) => `${(props.$maxRows || 5) * 24}px`};\n\tpadding: 0;\n\tborder: none;\n\toutline: none;\n\tresize: none;\n\tfont-family: ${tokens.typography.fontFamily.primary};\n\tfont-size: ${tokens.typography.fontSize.sm};\n\tline-height: ${tokens.spacing.lg};\n\tcolor: ${tokens.colors.text.primary};\n\tbackground: transparent;\n\toverflow-y: auto;\n\n\t&::placeholder {\n\t\tcolor: ${tokens.colors.text.tertiary};\n\t}\n\n\t&:disabled {\n\t\tcolor: ${tokens.colors.text.disabled};\n\t\tcursor: not-allowed;\n\t}\n\n\t&:read-only {\n\t\tcursor: default;\n\t}\n\n\t/* Custom scrollbar */\n\t&::-webkit-scrollbar {\n\t\twidth: ${tokens.spacing.xs};\n\t}\n\n\t&::-webkit-scrollbar-track {\n\t\tbackground: ${tokens.colors.scrollbar.track};\n\t}\n\n\t&::-webkit-scrollbar-thumb {\n\t\tbackground: ${tokens.colors.scrollbar.thumb};\n\t\tborder-radius: ${tokens.borderRadius.sm};\n\t}\n\n\t&::-webkit-scrollbar-thumb:hover {\n\t\tbackground: ${tokens.colors.scrollbar.thumbHover};\n\t}\n`;\n\ninterface SendButtonProps {\n disabled?: boolean;\n}\n\nexport const SendButton = styled.button<SendButtonProps>`\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: 36px;\n\theight: 36px;\n\tpadding: 0;\n\tborder: none;\n\tborder-radius: ${tokens.borderRadius.md};\n\tbackground-color: ${(props) => (props.disabled ? tokens.colors.surface.overlay : tokens.colors.primary)};\n\tcolor: ${(props) => (props.disabled ? tokens.colors.text.tertiary : tokens.colors.text.primary)};\n\tcursor: ${(props) => (props.disabled ? 'not-allowed' : 'pointer')};\n\ttransition: all ${tokens.transitions.normal};\n\tflex-shrink: 0;\n\n\t&:hover:not(:disabled) {\n\t\tbackground-color: ${tokens.colors.accent};\n\t\ttransform: translateY(-1px);\n\t}\n\n\t&:active:not(:disabled) {\n\t\ttransform: translateY(0);\n\t}\n\n\t&:focus-visible {\n\t\toutline: 2px solid ${tokens.colors.border.focus};\n\t\toutline-offset: 2px;\n\t}\n\n\tsvg {\n\t\twidth: 20px;\n\t\theight: 20px;\n\t}\n`;\n","import type { AriaTextFieldProps } from '@react-aria/textfield';\nimport { useTextField } from '@react-aria/textfield';\nimport React, { type KeyboardEvent, useRef } from 'react';\nimport { InputContainer, InputWrapper, SendButton, TextArea } from './Input.styles';\n\nexport interface InputProps\n extends Omit<AriaTextFieldProps, 'onChange' | 'onFocus' | 'onBlur' | 'onKeyDown' | 'onKeyUp'> {\n /** Current message value */\n value?: string;\n /** Callback when message value changes */\n onChange?: (value: string) => void;\n /** Callback when message is submitted */\n onSubmit?: (message: string) => void;\n /** Placeholder text */\n placeholder?: string;\n /** Whether the input is disabled */\n isDisabled?: boolean;\n /** Whether the input is read-only */\n isReadOnly?: boolean;\n /** Maximum number of rows before scrolling */\n maxRows?: number;\n /** Whether to auto-focus the input */\n autoFocus?: boolean;\n /** Additional CSS class name */\n className?: string;\n /** ARIA label for the input */\n 'aria-label'?: string;\n}\n\n/**\n * Input component for chat interfaces\n * Features:\n * - Multi-line text support\n * - Submit on Enter, Shift+Enter for new line\n * - React ARIA for accessibility\n * - Auto-growing textarea\n * - Integrated send button\n */\nexport const Input: React.FC<InputProps> = ({\n value = '',\n onChange,\n onSubmit,\n placeholder = 'Type a message...',\n isDisabled = false,\n isReadOnly = false,\n maxRows = 5,\n autoFocus = false,\n className,\n 'aria-label': ariaLabel = 'Message input',\n ...ariaProps\n}) => {\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n\n // React ARIA hook for accessibility\n const { inputProps } = useTextField(\n {\n ...ariaProps,\n 'aria-label': ariaLabel,\n value,\n onChange: (newValue: string) => {\n onChange?.(newValue);\n },\n isDisabled,\n isReadOnly,\n inputElementType: 'textarea',\n },\n textareaRef\n );\n\n // Handle keyboard events\n const handleKeyDown = (e: KeyboardEvent<HTMLTextAreaElement>) => {\n // Submit on Enter (without Shift)\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n if (value.trim() && onSubmit && !isDisabled && !isReadOnly) {\n onSubmit(value.trim());\n // Clear the input after submission\n onChange?.('');\n }\n }\n // Shift+Enter adds a new line (default behavior)\n };\n\n // Handle send button click\n const handleSend = () => {\n if (value.trim() && onSubmit && !isDisabled && !isReadOnly) {\n onSubmit(value.trim());\n onChange?.('');\n // Refocus the textarea after sending\n textareaRef.current?.focus();\n }\n };\n\n const canSend = value.trim().length > 0 && !isDisabled && !isReadOnly;\n\n return (\n <InputContainer className={className}>\n <InputWrapper>\n <TextArea\n {...inputProps}\n ref={textareaRef}\n placeholder={placeholder}\n onKeyDown={handleKeyDown}\n $maxRows={maxRows}\n autoFocus={autoFocus}\n disabled={isDisabled}\n readOnly={isReadOnly}\n />\n <SendButton\n type=\"button\"\n onClick={handleSend}\n disabled={!canSend}\n aria-label=\"Send message\"\n title=\"Send message (Enter)\"\n >\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n role=\"img\"\n aria-hidden=\"true\"\n >\n <title>Send Icon</title>\n <path\n d=\"M2.5 10L17.5 3.75L11.25 18.75L10 12.5L2.5 10Z\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </SendButton>\n </InputWrapper>\n </InputContainer>\n );\n};\n","import styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\n/**\n * Styled container for the messages area\n * Provides flexible layout and responsive spacing\n */\nexport const MessagesContainer = styled.div`\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow: hidden;\n /* Gradient background - brand aligned */\n background: linear-gradient(\n to right bottom,\n ${tokens.colors.background.dark},\n ${tokens.colors.background.darker},\n ${tokens.colors.background.darkest}\n );\n /* Minimal horizontal padding to maximize message width */\n padding: ${tokens.spacing.sm} ${tokens.spacing.xs};\n gap: ${tokens.spacing.sm};\n box-sizing: border-box;\n\n /* Ensure proper scrolling behavior for child components */\n position: relative;\n min-height: 0;\n`;\n","import type React from 'react';\nimport { MessagesContainer } from './Messages.styles';\n\nexport interface MessagesProps {\n /**\n * Children elements to be rendered inside the messages container\n */\n children?: React.ReactNode;\n /**\n * Additional CSS class name\n */\n className?: string;\n /**\n * ARIA label for accessibility\n */\n ariaLabel?: string;\n}\n\n/**\n * Messages component - Container for message list\n *\n * This component serves as a wrapper for the messages area,\n * providing consistent spacing and layout for chat messages.\n *\n * @example\n * ```tsx\n * <Messages ariaLabel=\"Chat messages\">\n * <MessagesList messages={messages} />\n * </Messages>\n * ```\n */\nexport const Messages: React.FC<MessagesProps> = ({\n children,\n className,\n ariaLabel = 'Messages',\n}) => {\n return (\n <MessagesContainer className={className} role=\"region\" aria-label={ariaLabel}>\n {children}\n </MessagesContainer>\n );\n};\n\nMessages.displayName = 'Messages';\n","import styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\nexport const MessagesListContainer = styled.div<{ $maxHeight: string }>`\n display: flex;\n flex-direction: column;\n width: 100%;\n max-height: ${(props) => props.$maxHeight};\n overflow-y: auto;\n overflow-x: hidden;\n position: relative;\n background: ${tokens.colors.surface.base};\n border: 1px solid ${tokens.colors.border.default};\n border-radius: ${tokens.borderRadius.md};\n scroll-behavior: smooth;\n\n /* Custom scrollbar styling */\n &::-webkit-scrollbar {\n width: 8px;\n }\n\n &::-webkit-scrollbar-track {\n background: ${tokens.colors.scrollbar.track};\n border-radius: ${tokens.borderRadius.sm};\n }\n\n &::-webkit-scrollbar-thumb {\n background: ${tokens.colors.scrollbar.thumb};\n border-radius: ${tokens.borderRadius.sm};\n transition: background ${tokens.transitions.fast};\n }\n\n &::-webkit-scrollbar-thumb:hover {\n background: ${tokens.colors.scrollbar.thumbHover};\n }\n\n /* Firefox scrollbar styling */\n scrollbar-width: thin;\n scrollbar-color: ${tokens.colors.scrollbar.thumb} ${tokens.colors.scrollbar.track};\n\n /* Ensure proper rendering on mobile */\n -webkit-overflow-scrolling: touch;\n`;\n\nexport const MessagesListContent = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.sm};\n padding: ${tokens.spacing.md};\n min-height: min-content;\n\n /* Message styling */\n .message {\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.xs};\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n border-radius: ${tokens.borderRadius.md};\n max-width: 85%;\n word-wrap: break-word;\n animation: messageSlideIn ${tokens.animation.duration.short} ease-out;\n }\n\n @keyframes messageSlideIn {\n from {\n opacity: 0;\n transform: translateY(${tokens.spacing.sm});\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n\n /* Role-specific message styling */\n .message--user {\n align-self: flex-end;\n background: ${tokens.colors.message.user};\n color: ${tokens.colors.text.primary};\n border-bottom-right-radius: ${tokens.borderRadius.sm};\n }\n\n .message--assistant {\n align-self: flex-start;\n background: ${tokens.colors.message.ai};\n color: ${tokens.colors.text.primary};\n border-bottom-left-radius: ${tokens.borderRadius.sm};\n }\n\n .message--system {\n align-self: center;\n background: ${tokens.colors.message.system};\n color: ${tokens.colors.text.secondary};\n font-size: ${tokens.typography.fontSize.sm};\n font-style: italic;\n max-width: 100%;\n text-align: center;\n }\n`;\n","import { type ReactNode, useEffect, useRef } from 'react';\nimport { MessagesListContainer, MessagesListContent } from './MessagesList.styles';\n\nexport interface Message {\n id: string;\n content: ReactNode;\n role: 'user' | 'assistant' | 'system';\n timestamp?: Date;\n}\n\nexport interface MessagesListProps {\n /** Array of messages to display */\n messages: Message[];\n /** Whether to automatically scroll to the bottom when new messages arrive */\n autoScroll?: boolean;\n /** Custom class name for the container */\n className?: string;\n /** Custom render function for individual messages */\n renderMessage?: (message: Message) => ReactNode;\n /** Callback when scroll reaches the top (for loading more messages) */\n onScrollTop?: () => void;\n /** Maximum height of the messages list */\n maxHeight?: string;\n}\n\n/**\n * MessagesList Component\n *\n * A scrollable message list component with auto-scroll functionality.\n * Designed for chat interfaces where messages need to be displayed\n * in a scrollable container with automatic scrolling to the latest message.\n *\n * Features:\n * - Auto-scroll to bottom on new messages\n * - Overflow handling with custom scrollbar\n * - Flexible message rendering\n * - Scroll event handling for pagination\n */\nexport const MessagesList = ({\n messages,\n autoScroll = true,\n className,\n renderMessage,\n onScrollTop,\n maxHeight = '600px',\n}: MessagesListProps) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const isUserScrollingRef = useRef(false);\n const scrollTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Auto-scroll to bottom when new messages arrive\n // biome-ignore lint/correctness/useExhaustiveDependencies: We need messages.length to trigger scroll on new messages\n useEffect(() => {\n if (autoScroll && !isUserScrollingRef.current && containerRef.current) {\n const container = containerRef.current;\n container.scrollTop = container.scrollHeight;\n }\n }, [messages.length, autoScroll]);\n\n // Handle scroll events\n const handleScroll = () => {\n if (!containerRef.current) return;\n\n const container = containerRef.current;\n const isAtBottom = container.scrollHeight - container.scrollTop - container.clientHeight < 10;\n\n // User is scrolling manually\n isUserScrollingRef.current = !isAtBottom;\n\n // Clear existing timeout\n if (scrollTimeoutRef.current) {\n clearTimeout(scrollTimeoutRef.current);\n }\n\n // Reset user scrolling flag after 1 second of no scrolling\n scrollTimeoutRef.current = setTimeout(() => {\n isUserScrollingRef.current = false;\n }, 1000);\n\n // Check if scrolled to top\n if (container.scrollTop === 0 && onScrollTop) {\n onScrollTop();\n }\n };\n\n // Cleanup timeout on unmount\n useEffect(() => {\n return () => {\n if (scrollTimeoutRef.current) {\n clearTimeout(scrollTimeoutRef.current);\n }\n };\n }, []);\n\n // Default message renderer\n const defaultRenderMessage = (message: Message) => (\n <div\n key={message.id}\n className={`message message--${message.role}`}\n data-message-id={message.id}\n data-role={message.role}\n >\n {message.content}\n </div>\n );\n\n return (\n <MessagesListContainer\n ref={containerRef}\n onScroll={handleScroll}\n className={className}\n $maxHeight={maxHeight}\n >\n <MessagesListContent ref={contentRef}>\n {messages.map(renderMessage || defaultRenderMessage)}\n </MessagesListContent>\n </MessagesListContainer>\n );\n};\n","import styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\n/**\n * Container for the user message, aligned to the right\n */\nexport const StyledUserMessage = styled.div`\n display: flex;\n justify-content: flex-end;\n align-items: flex-start;\n margin: ${tokens.spacing.xs} 0;\n padding: 0;\n width: 100%;\n`;\n\n/**\n * The message bubble containing the user's text\n */\nexport const MessageBubble = styled.div`\n display: flex;\n flex-direction: column;\n max-width: 85%;\n padding: ${tokens.spacing.sm};\n border-radius: ${tokens.borderRadius.lg};\n\n /* User message colors - dark blue from brand */\n background: ${tokens.colors.message.user};\n color: ${tokens.colors.text.primary};\n\n /* Smooth transitions */\n transition: all ${tokens.transitions.fast};\n\n /* Ensure long strings don't overflow */\n overflow: hidden;\n overflow-wrap: break-word;\n word-break: break-word;\n\n /* Username styling */\n strong {\n font-size: ${tokens.typography.fontSize.xs};\n font-weight: ${tokens.typography.fontWeight.semibold};\n margin-bottom: ${tokens.spacing.xs};\n opacity: 0.9;\n }\n`;\n\n/**\n * The actual message text content\n */\nexport const MessageContent = styled.p`\n margin: 0;\n font-size: ${tokens.typography.fontSize.sm};\n line-height: ${tokens.typography.lineHeight.normal};\n word-wrap: break-word;\n overflow-wrap: break-word;\n word-break: break-word;\n white-space: pre-wrap;\n`;\n\n/**\n * Optional timestamp display\n */\nexport const MessageTime = styled.time`\n font-size: ${tokens.typography.fontSize.xs};\n opacity: 0.7;\n margin-top: ${tokens.spacing.xs};\n text-align: right;\n`;\n","import type React from 'react';\nimport styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\nimport { StreamingText } from '../StreamingText';\nimport {\n MessageBubble,\n MessageContent,\n MessageTime,\n StyledUserMessage,\n} from './UserMessage.styles';\n\nconst ActionButton = styled.button`\n display: inline-flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n padding: ${tokens.spacing.xs} ${tokens.spacing.sm};\n margin-top: ${tokens.spacing.sm};\n font-size: ${tokens.typography.fontSize.xs};\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.text.secondary};\n background: ${tokens.colors.surface.overlay};\n border: 1px solid ${tokens.colors.border.default};\n border-radius: ${tokens.borderRadius.md};\n cursor: pointer;\n transition: all ${tokens.transitions.fast};\n\n &:hover {\n background: ${tokens.colors.surface.overlayHover};\n border-color: ${tokens.colors.border.hover};\n }\n\n &:active {\n transform: scale(0.98);\n }\n`;\n\nconst ActionsContainer = styled.div`\n display: flex;\n gap: ${tokens.spacing.xs};\n flex-wrap: wrap;\n`;\n\nconst Avatar = styled.img`\n width: ${tokens.spacing.xl};\n height: ${tokens.spacing.xl};\n border-radius: ${tokens.borderRadius.full};\n margin-left: ${tokens.spacing.sm};\n object-fit: cover;\n border: 2px solid ${tokens.colors.border.default};\n`;\n\nexport interface ActionButtonType {\n label: string;\n onClick: () => void;\n icon?: React.ReactNode;\n}\n\nexport interface UserMessageProps {\n /** The message content to display */\n content: string;\n /** Optional timestamp for the message */\n timestamp?: string;\n /** Optional CSS class name */\n className?: string;\n /** Optional avatar URL */\n avatarUrl?: string;\n /** Optional username */\n username?: string;\n /** Whether the message is currently streaming */\n isStreaming?: boolean;\n /** Action buttons to display below the message */\n actions?: ActionButtonType[];\n /** Whether to enable markdown rendering */\n enableMarkdown?: boolean;\n}\n\n/**\n * UserMessage component displays a user's message in a chat interface.\n * Styled with right alignment and pink/purple gradient from Figma design.\n *\n * Features:\n * - Right-aligned layout\n * - Pink/purple gradient background (#D8B4FE)\n * - Support for streaming state\n * - Optional timestamp display\n * - Action buttons support\n * - Avatar display\n */\nexport const UserMessage = ({\n content,\n timestamp,\n className,\n avatarUrl,\n username,\n isStreaming = false,\n actions = [],\n enableMarkdown = true,\n}: UserMessageProps) => {\n return (\n <StyledUserMessage className={className}>\n <MessageBubble>\n {username && <strong>{username}</strong>}\n <MessageContent>\n <StreamingText\n content={content}\n isStreaming={isStreaming}\n variant={enableMarkdown ? 'markdown' : 'default'}\n cursor={false}\n />\n </MessageContent>\n {timestamp && <MessageTime>{timestamp}</MessageTime>}\n {actions.length > 0 && (\n <ActionsContainer>\n {actions.map((action, index) => (\n <ActionButton key={index} onClick={action.onClick}>\n {action.icon}\n {action.label}\n </ActionButton>\n ))}\n </ActionsContainer>\n )}\n </MessageBubble>\n {avatarUrl && <Avatar src={avatarUrl} alt={username || 'User'} />}\n </StyledUserMessage>\n );\n};\n","/**\n * StreamErrorMessage Component\n *\n * Displays inline chat errors with retry support.\n *\n * @see specs/015-restyle-ai-chat/spec.md\n */\n\nimport type React from 'react';\nimport styled from 'styled-components';\nimport { tokens } from '../../theme/tokens';\n\nconst ErrorContainer = styled.div<{ variant: 'inline' | 'banner' }>`\n display: flex;\n align-items: flex-start;\n gap: ${tokens.spacing.sm};\n padding: ${(props) => (props.variant === 'banner' ? tokens.spacing.md : `${tokens.spacing.sm} ${tokens.spacing.md}`)};\n background-color: ${(props) =>\n props.variant === 'banner' ? `${tokens.colors.error}1a` : `${tokens.colors.error}0d`};\n border: 1px solid ${tokens.colors.error}4d;\n border-radius: ${(props) => (props.variant === 'banner' ? tokens.borderRadius.md : tokens.borderRadius.lg)};\n color: ${tokens.colors.text.primary};\n font-family: ${tokens.typography.fontFamily.primary};\n margin: ${tokens.spacing.sm} 0;\n width: ${(props) => (props.variant === 'banner' ? '100%' : 'auto')};\n max-width: ${(props) => (props.variant === 'banner' ? '100%' : '600px')};\n`;\n\nconst IconContainer = styled.div`\n flex-shrink: 0;\n width: 20px;\n height: 20px;\n color: ${tokens.colors.error};\n`;\n\nconst ErrorIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n width=\"20\"\n height=\"20\"\n >\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z\" />\n </svg>\n);\n\nconst Content = styled.div`\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.sm};\n`;\n\nconst ErrorMessage = styled.div`\n font-size: ${tokens.typography.fontSize.sm};\n line-height: ${tokens.typography.lineHeight.normal};\n color: ${tokens.colors.text.primary};\n`;\n\nconst ErrorDetails = styled.div`\n font-size: ${tokens.typography.fontSize.xs};\n line-height: 1.4;\n color: ${tokens.colors.text.secondary};\n margin-top: ${tokens.spacing.xs};\n`;\n\nconst Actions = styled.div`\n display: flex;\n gap: ${tokens.spacing.sm};\n margin-top: ${tokens.spacing.sm};\n`;\n\nconst Button = styled.button<{ variant: 'primary' | 'secondary' }>`\n display: inline-flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n padding: ${tokens.spacing.xs} ${tokens.spacing.sm};\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${(props) => (props.variant === 'primary' ? tokens.colors.text.primary : tokens.colors.text.secondary)};\n background: ${(props) => (props.variant === 'primary' ? tokens.colors.error : tokens.colors.surface.overlay)};\n border: 1px solid\n ${(props) => (props.variant === 'primary' ? tokens.colors.error : tokens.colors.border.default)};\n border-radius: ${tokens.borderRadius.md};\n cursor: pointer;\n transition: all ${tokens.transitions.fast};\n\n &:hover {\n background: ${(props) =>\n props.variant === 'primary'\n ? tokens.colors.status.failed\n : tokens.colors.surface.overlayHover};\n border-color: ${(props) =>\n props.variant === 'primary' ? tokens.colors.status.failed : tokens.colors.border.hover};\n }\n\n &:active {\n transform: scale(0.98);\n }\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n`;\n\nconst CloseButton = styled.button`\n flex-shrink: 0;\n width: 24px;\n height: 24px;\n padding: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background: transparent;\n border: none;\n color: ${tokens.colors.text.secondary};\n cursor: pointer;\n border-radius: ${tokens.borderRadius.sm};\n transition: all ${tokens.transitions.fast};\n\n &:hover {\n background: ${tokens.colors.surface.overlayHover};\n color: ${tokens.colors.text.primary};\n }\n\n &:active {\n transform: scale(0.95);\n }\n`;\n\nconst CloseIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n width=\"16\"\n height=\"16\"\n >\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\n </svg>\n);\n\nexport interface StreamErrorMessageProps {\n /** Error message to display */\n error: string | Error;\n /** Visual variant */\n variant?: 'inline' | 'banner';\n /** Whether the error can be retried */\n retryable?: boolean;\n /** Callback when retry is clicked */\n onRetry?: () => void;\n /** Callback when dismiss is clicked */\n onDismiss?: () => void;\n /** Additional error details */\n details?: string;\n /** Custom className */\n className?: string;\n}\n\n/**\n * StreamErrorMessage component for inline chat errors\n *\n * Features:\n * - Inline and banner variants\n * - Retry support for recoverable errors\n * - Dismissible errors\n * - Error details display\n * - Accessible error reporting\n */\nexport const StreamErrorMessage: React.FC<StreamErrorMessageProps> = ({\n error,\n variant = 'inline',\n retryable = false,\n onRetry,\n onDismiss,\n details,\n className,\n}) => {\n const errorMessage = typeof error === 'string' ? error : error.message;\n\n return (\n <ErrorContainer variant={variant} className={className} role=\"alert\" aria-live=\"assertive\">\n <IconContainer aria-hidden=\"true\">\n <ErrorIcon />\n </IconContainer>\n <Content>\n <ErrorMessage>{errorMessage}</ErrorMessage>\n {details && <ErrorDetails>{details}</ErrorDetails>}\n {(retryable || onDismiss) && (\n <Actions>\n {retryable && onRetry && (\n <Button variant=\"primary\" onClick={onRetry}>\n Retry\n </Button>\n )}\n {onDismiss && (\n <Button variant=\"secondary\" onClick={onDismiss}>\n Dismiss\n </Button>\n )}\n </Actions>\n )}\n </Content>\n {onDismiss && (\n <CloseButton onClick={onDismiss} aria-label=\"Dismiss error\">\n <CloseIcon />\n </CloseButton>\n )}\n </ErrorContainer>\n );\n};\n\nStreamErrorMessage.displayName = 'StreamErrorMessage';\n","import styled, { css } from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\nexport const SuggestionsContainer = styled.div`\n display: flex;\n flex-wrap: nowrap; /* Single row */\n gap: ${tokens.spacing.sm};\n\n /* Reduced padding for tighter height */\n padding: ${tokens.spacing.xs} 0;\n\n /* Horizontal scrolling */\n overflow-x: auto;\n overflow-y: hidden;\n\n /* Smooth scrolling on mobile */\n -webkit-overflow-scrolling: touch;\n scroll-behavior: smooth;\n\n /* Align items to ensure single-row height */\n align-items: center;\n\n /* Constrain to exact height of buttons + minimal padding */\n /* Button height: ~14px font + 16px padding + 2px border = ~32px */\n /* Add small padding: 8px total = 40px */\n max-height: 40px;\n min-height: 40px;\n\n /* Hide scrollbar but keep functionality */\n scrollbar-width: none; /* Firefox */\n -ms-overflow-style: none; /* IE/Edge */\n\n &::-webkit-scrollbar {\n display: none; /* Chrome/Safari/Opera */\n }\n`;\n\ninterface StyledSuggestionProps {\n $isPressed: boolean;\n}\n\nexport const StyledSuggestion = styled.button<StyledSuggestionProps>`\n /* Base styles */\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n font-family: ${tokens.typography.fontFamily.primary};\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.text.primary};\n background-color: ${tokens.colors.surface.elevated};\n border: 1px solid ${tokens.colors.border.default};\n border-radius: ${tokens.borderRadius.lg};\n cursor: pointer;\n transition: all ${tokens.transitions.normal};\n white-space: nowrap;\n user-select: none;\n flex-shrink: 0; /* Prevent shrinking to maintain size */\n\n /* Hover state */\n &:hover:not(:disabled) {\n background-color: ${tokens.colors.surface.overlayHover};\n border-color: ${tokens.colors.primary};\n transform: translateY(-1px);\n box-shadow: ${tokens.shadows.sm};\n }\n\n /* Active/Pressed state */\n &:active:not(:disabled) {\n transform: translateY(0);\n box-shadow: none;\n }\n\n ${({ $isPressed }) =>\n $isPressed &&\n css`\n transform: scale(0.98);\n `}\n\n /* Focus state */\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n\n /* Remove default focus outline */\n &:focus {\n outline: none;\n }\n\n /* Disabled state */\n &:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n transform: none;\n }\n`;\n","import { useButton } from '@react-aria/button';\nimport { useRef } from 'react';\nimport { StyledSuggestion, SuggestionsContainer } from './Suggestions.styles';\n\nexport interface SuggestionsProps {\n suggestions: string[];\n onSelect: (suggestion: string) => void;\n className?: string;\n}\n\nexport function Suggestions({ suggestions, onSelect, className }: SuggestionsProps) {\n if (suggestions.length === 0) {\n return null;\n }\n\n return (\n <SuggestionsContainer className={className} role=\"list\" aria-label=\"Suggested prompts\">\n {suggestions.map((suggestion) => (\n <SuggestionChip key={suggestion} suggestion={suggestion} onSelect={onSelect} />\n ))}\n </SuggestionsContainer>\n );\n}\n\ninterface SuggestionChipProps {\n suggestion: string;\n onSelect: (suggestion: string) => void;\n}\n\nfunction SuggestionChip({ suggestion, onSelect }: SuggestionChipProps) {\n const ref = useRef<HTMLButtonElement>(null);\n const { buttonProps, isPressed } = useButton(\n {\n onPress: () => onSelect(suggestion),\n 'aria-label': `Select suggestion: ${suggestion}`,\n },\n ref\n );\n\n return (\n <StyledSuggestion {...buttonProps} ref={ref} $isPressed={isPressed} role=\"listitem\">\n {suggestion}\n </StyledSuggestion>\n );\n}\n\nSuggestions.displayName = 'Suggestions';\n","import styled, { css } from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\ninterface WindowContainerProps {\n $isMinimized: boolean;\n $isFullscreen: boolean;\n $width: string;\n $height: string;\n}\n\nexport const WindowContainer = styled.div<WindowContainerProps>`\n display: flex;\n flex-direction: column;\n /* Glassmorphism effect */\n background: transparent;\n backdrop-filter: blur(3.8px);\n -webkit-backdrop-filter: blur(3.8px);\n border: 1px solid ${tokens.colors.surface.glassBorder};\n border-radius: ${tokens.borderRadius.xl};\n box-shadow: ${tokens.shadows.lg};\n overflow: hidden;\n transition: all ${tokens.animation.duration.short} ${tokens.animation.easing.smooth};\n position: relative;\n\n /* Default dimensions */\n width: ${({ $width }) => $width};\n height: ${({ $height }) => $height};\n\n /* Fullscreen state */\n ${({ $isFullscreen }) =>\n $isFullscreen &&\n css`\n width: 100vw;\n height: 100vh;\n border-radius: 0;\n box-shadow: none;\n position: fixed;\n top: 0;\n left: 0;\n z-index: ${tokens.zIndex.modal};\n `}\n\n /* Minimized state */\n ${({ $isMinimized }) =>\n $isMinimized &&\n css`\n height: 60px;\n width: 300px;\n box-shadow: ${tokens.shadows.sm};\n cursor: pointer;\n\n /* Hide all content except header when minimized */\n > *:not(:first-child) {\n display: none;\n }\n\n /* Keep header visible but adjust styling */\n > *:first-child {\n border-bottom: none;\n }\n `}\n\n /* Responsive behavior for smaller screens */\n @media (max-width: ${tokens.breakpoints.tablet}px) {\n ${({ $isFullscreen, $isMinimized }) =>\n !$isFullscreen &&\n !$isMinimized &&\n css`\n width: 100vw;\n height: 100vh;\n border-radius: 0;\n max-width: 100%;\n max-height: 100%;\n `}\n }\n\n /* Focus states for accessibility */\n &:focus-visible {\n outline: 2px solid ${tokens.colors.primary};\n outline-offset: 2px;\n }\n\n /* Ensure proper stacking context */\n z-index: ${({ $isFullscreen }) => ($isFullscreen ? tokens.zIndex.modal : tokens.zIndex.fixed)};\n`;\n","import type React from 'react';\nimport { WindowContainer } from './Window.styles';\n\nexport interface WindowProps {\n /**\n * Whether the window is minimized to a small bar\n */\n isMinimized?: boolean;\n\n /**\n * Whether the window is fullscreen (100vw x 100vh)\n */\n isFullscreen?: boolean;\n\n /**\n * Custom width for the window (e.g., \"400px\", \"50vw\")\n * @default \"400px\"\n */\n width?: string;\n\n /**\n * Custom height for the window (e.g., \"600px\", \"80vh\")\n * @default \"600px\"\n */\n height?: string;\n\n /**\n * Children elements to be rendered inside the window\n */\n children: React.ReactNode;\n\n /**\n * Additional CSS class name for custom styling\n */\n className?: string;\n\n /**\n * ARIA label for the window\n */\n ariaLabel?: string;\n}\n\n/**\n * Window Component\n *\n * Main container/window wrapper for the CopilotKit chat interface.\n * This component holds the Header, Messages, Input, and Footer components.\n *\n * Features:\n * - Default: 400px width x 600px height with rounded corners and shadow\n * - Minimized: Collapsed to a small bar\n * - Fullscreen: Takes full viewport (100vw x 100vh)\n * - Smooth transitions between states\n * - Customizable dimensions via width/height props\n *\n * @example\n * ```tsx\n * // Default window\n * <Window>\n * <Header title=\"AI Assistant\" />\n * <Messages>...</Messages>\n * <MessageInput />\n * <Footer />\n * </Window>\n *\n * // Minimized window\n * <Window isMinimized>\n * <Header title=\"AI Assistant\" />\n * </Window>\n *\n * // Fullscreen window\n * <Window isFullscreen>\n * <Header title=\"AI Assistant\" />\n * <Messages>...</Messages>\n * <MessageInput />\n * </Window>\n *\n * // Custom dimensions\n * <Window width=\"500px\" height=\"700px\">\n * ...\n * </Window>\n * ```\n */\nexport const Window: React.FC<WindowProps> = ({\n isMinimized = false,\n isFullscreen = false,\n width = '400px',\n height = '600px',\n children,\n className,\n ariaLabel = 'Chat window',\n}) => {\n return (\n <WindowContainer\n className={className}\n $isMinimized={isMinimized}\n $isFullscreen={isFullscreen}\n $width={width}\n $height={height}\n role=\"dialog\"\n aria-label={ariaLabel}\n aria-modal=\"false\"\n >\n {children}\n </WindowContainer>\n );\n};\n\nWindow.displayName = 'Window';\n","import { type SVGAttributes, useId } from 'react';\n\nexport type FacebookIconVariant = 'colored' | 'black' | 'white';\n\nexport interface FacebookIconProps extends Omit<SVGAttributes<SVGSVGElement>, 'viewBox' | 'xmlns'> {\n /**\n * Visual variant of the icon\n * - colored: Facebook brand colors (blue gradient)\n * - black: Solid black\n * - white: Solid white\n */\n variant?: FacebookIconVariant;\n /**\n * Size of the icon in pixels\n */\n size?: number;\n /**\n * Additional CSS class name\n */\n className?: string;\n /**\n * Accessible label for the icon\n * Required for interactive icons, optional for decorative\n */\n 'aria-label'?: string;\n /**\n * Whether the icon is decorative (hidden from screen readers)\n */\n 'aria-hidden'?: boolean;\n /**\n * Click handler for interactive icons\n */\n onClick?: () => void;\n}\n\n/**\n * Facebook brand icon component with three variants\n *\n * @example\n * // Colored variant (default)\n * <FacebookIcon />\n *\n * @example\n * // Black variant with custom size\n * <FacebookIcon variant=\"black\" size={32} />\n *\n * @example\n * // Interactive icon with click handler\n * <FacebookIcon\n * onClick={handleClick}\n * aria-label=\"Share on Facebook\"\n * style={{ cursor: 'pointer' }}\n * />\n *\n * @example\n * // Decorative icon (hidden from screen readers)\n * <FacebookIcon aria-hidden=\"true\" />\n */\nexport function FacebookIcon({\n variant = 'colored',\n size = 24,\n className,\n 'aria-label': ariaLabel,\n 'aria-hidden': ariaHidden,\n onClick,\n ...svgProps\n}: FacebookIconProps) {\n // Generate unique ID for gradient to avoid conflicts when multiple icons are rendered\n const gradientId = useId();\n\n // Determine if icon is interactive\n const isInteractive = !!onClick;\n\n // Set appropriate ARIA attributes\n const ariaAttributes = {\n 'aria-label': ariaLabel,\n 'aria-hidden': ariaHidden !== undefined ? ariaHidden : !ariaLabel && !isInteractive,\n role: isInteractive ? 'button' : undefined,\n tabIndex: isInteractive ? 0 : undefined,\n };\n\n // Handle keyboard interaction for interactive icons\n const handleKeyDown = (event: React.KeyboardEvent<SVGSVGElement>) => {\n if (isInteractive && (event.key === 'Enter' || event.key === ' ')) {\n event.preventDefault();\n onClick?.();\n }\n };\n\n const commonProps = {\n width: size,\n height: size,\n viewBox: '0 0 24 24',\n fill: 'none',\n xmlns: 'http://www.w3.org/2000/svg',\n className,\n onClick,\n onKeyDown: isInteractive ? handleKeyDown : undefined,\n ...ariaAttributes,\n ...svgProps,\n };\n\n // Colored variant (Facebook brand gradient)\n if (variant === 'colored') {\n return (\n <svg {...commonProps}>\n <path\n d=\"M22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12Z\"\n fill=\"white\"\n />\n <path\n d=\"M22 12.0611C22 6.50451 17.5229 2 12 2C6.47715 2 2 6.50451 2 12.0611C2 17.0828 5.65684 21.2452 10.4375 22V14.9694H7.89844V12.0611H10.4375V9.84452C10.4375 7.32296 11.9305 5.93012 14.2146 5.93012C15.3084 5.93012 16.4531 6.12663 16.4531 6.12663V8.60261H15.1922C13.95 8.60261 13.5625 9.37822 13.5625 10.1747V12.0611H16.3359L15.8926 14.9694H13.5625V22C18.3432 21.2452 22 17.0828 22 12.0611Z\"\n fill={`url(#${gradientId})`}\n />\n <defs>\n <linearGradient\n id={gradientId}\n x1=\"12\"\n y1=\"2\"\n x2=\"12\"\n y2=\"22\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#50AAF7\" />\n <stop offset=\"1\" stopColor=\"#2961D8\" />\n </linearGradient>\n </defs>\n </svg>\n );\n }\n\n // Black variant\n if (variant === 'black') {\n return (\n <svg {...commonProps}>\n <path\n d=\"M22 12.0611C22 6.50451 17.5229 2 12 2C6.47715 2 2 6.50451 2 12.0611C2 17.0828 5.65684 21.2452 10.4375 22V14.9694H7.89844V12.0611H10.4375V9.84452C10.4375 7.32296 11.9305 5.93012 14.2146 5.93012C15.3084 5.93012 16.4531 6.12663 16.4531 6.12663V8.60261H15.1922C13.95 8.60261 13.5625 9.37822 13.5625 10.1747V12.0611H16.3359L15.8926 14.9694H13.5625V22C18.3432 21.2452 22 17.0828 22 12.0611Z\"\n fill=\"black\"\n />\n </svg>\n );\n }\n\n // White variant\n return (\n <svg {...commonProps}>\n <path\n d=\"M22 12.0611C22 6.50451 17.5229 2 12 2C6.47715 2 2 6.50451 2 12.0611C2 17.0828 5.65684 21.2452 10.4375 22V14.9694H7.89844V12.0611H10.4375V9.84452C10.4375 7.32296 11.9305 5.93012 14.2146 5.93012C15.3084 5.93012 16.4531 6.12663 16.4531 6.12663V8.60261H15.1922C13.95 8.60261 13.5625 9.37822 13.5625 10.1747V12.0611H16.3359L15.8926 14.9694H13.5625V22C18.3432 21.2452 22 17.0828 22 12.0611Z\"\n fill=\"white\"\n />\n </svg>\n );\n}\n\nFacebookIcon.displayName = 'FacebookIcon';\n","import styled from 'styled-components';\n\ninterface StyledIconWrapperProps {\n $size: number;\n}\n\nexport const StyledIconWrapper = styled.button<StyledIconWrapperProps>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n background: transparent;\n border: none;\n padding: 0;\n cursor: pointer;\n transition: all 0.2s ease-in-out;\n width: ${({ $size }) => `${$size}px`};\n height: ${({ $size }) => `${$size}px`};\n border-radius: ${({ theme }) => theme?.radii?.sm ?? '4px'};\n\n &:hover:not(:disabled) {\n opacity: 0.8;\n transform: scale(1.05);\n }\n\n &:active:not(:disabled) {\n opacity: 0.6;\n transform: scale(0.95);\n }\n\n &:focus-visible {\n outline: 2px solid ${({ theme }) => (theme?.colors?.primary && typeof theme.colors.primary === 'object' ? theme.colors.primary.light : theme?.colors?.primary) ?? '#0066FF'};\n outline-offset: 2px;\n }\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n\n /* Remove default focus outline, using focus-visible instead */\n &:focus {\n outline: none;\n }\n\n svg {\n display: block;\n width: 100%;\n height: 100%;\n }\n`;\n","import { useButton } from '@react-aria/button';\nimport { useRef } from 'react';\nimport { StyledIconWrapper } from './GmailIcon.styles';\nimport type { GmailIconProps } from './GmailIcon.types';\n\nconst SVG_CONTENT = {\n colored: {\n viewBox: '0 0 24 24',\n paths: [\n {\n d: 'M3.36364 20H6.54545V11.7596L2 8.1242V18.5458C2 19.3505 2.61136 20 3.36364 20Z',\n fill: '#4285F4',\n },\n {\n d: 'M17.4545 20H20.6364C21.3909 20 22 19.348 22 18.5458V8.1242L17.4545 11.7596',\n fill: '#34A853',\n },\n {\n d: 'M17.4545 5.45831V11.7596L22 8.1242V6.1854C22 4.38706 20.075 3.36186 18.7273 4.44038',\n fill: '#FBBC04',\n },\n {\n d: 'M6.54545 11.7596L6.54545 5.4582L12 9.82074L17.4545 5.45831V11.7596L12 16.1222',\n fill: '#EA4335',\n },\n {\n d: 'M2 6.1854V8.1242L6.54545 11.7596L6.54545 5.4582L5.27273 4.44038C3.92273 3.36186 2 4.38706 2 6.1854Z',\n fill: '#C5221F',\n },\n ],\n },\n black: {\n viewBox: '0 0 24 24',\n paths: [\n {\n d: 'M3.36364 20H6.54545V11.7596L2 8.1242V18.5458C2 19.3505 2.61136 20 3.36364 20Z',\n fill: 'black',\n },\n {\n d: 'M17.4545 20H20.6364C21.3909 20 22 19.348 22 18.5458V8.1242L17.4545 11.7596',\n fill: 'black',\n },\n {\n d: 'M17.4545 5.45831V11.7596L22 8.1242V6.1854C22 4.38706 20.075 3.36186 18.7273 4.44038',\n fill: 'black',\n },\n {\n d: 'M6.54545 11.7596L6.54545 5.4582L12 9.82074L17.4545 5.45831V11.7596L12 16.1222',\n fill: 'black',\n },\n {\n d: 'M2 6.1854V8.1242L6.54545 11.7596L6.54545 5.4582L5.27273 4.44038C3.92273 3.36186 2 4.38706 2 6.1854Z',\n fill: 'black',\n },\n ],\n },\n white: {\n viewBox: '0 0 24 24',\n paths: [\n {\n d: 'M3.36364 20H6.54545V11.7596L2 8.1242V18.5458C2 19.3505 2.61136 20 3.36364 20Z',\n fill: 'white',\n },\n {\n d: 'M17.4545 20H20.6364C21.3909 20 22 19.348 22 18.5458V8.1242L17.4545 11.7596',\n fill: 'white',\n },\n {\n d: 'M17.4545 5.45831V11.7596L22 8.1242V6.1854C22 4.38706 20.075 3.36186 18.7273 4.44038',\n fill: 'white',\n },\n {\n d: 'M6.54545 11.7596L6.54545 5.4582L12 9.82074L17.4545 5.45831V11.7596L12 16.1222',\n fill: 'white',\n },\n {\n d: 'M2 6.1854V8.1242L6.54545 11.7596L6.54545 5.4582L5.27273 4.44038C3.92273 3.36186 2 4.38706 2 6.1854Z',\n fill: 'white',\n },\n ],\n },\n};\n\nexport function GmailIcon({\n variant = 'colored',\n size = 24,\n className,\n style,\n 'aria-label': ariaLabel = 'Gmail',\n onPress,\n ...ariaProps\n}: GmailIconProps) {\n const ref = useRef<HTMLButtonElement>(null);\n const isInteractive = Boolean(onPress);\n\n // Only use button semantics if onPress is provided\n const { buttonProps } = useButton(\n {\n ...ariaProps,\n onPress,\n 'aria-label': ariaLabel,\n isDisabled: !isInteractive,\n },\n ref\n );\n\n const svgContent = SVG_CONTENT[variant];\n const role = isInteractive ? 'button' : 'img';\n const ariaHidden = !isInteractive && !ariaLabel;\n\n const svgElement = (\n <svg\n width={size}\n height={size}\n viewBox={svgContent.viewBox}\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n role={role}\n aria-label={ariaLabel}\n aria-hidden={ariaHidden}\n >\n {svgContent.paths.map((pathProps, index) => (\n <path\n key={`${pathProps.d.substring(0, 20)}-${index}`}\n d={pathProps.d}\n fill={pathProps.fill}\n />\n ))}\n </svg>\n );\n\n if (isInteractive) {\n return (\n <StyledIconWrapper\n {...buttonProps}\n ref={ref}\n className={className}\n style={style}\n $size={size}\n >\n {svgElement}\n </StyledIconWrapper>\n );\n }\n\n return (\n <span\n className={className}\n style={{ display: 'inline-flex', width: size, height: size, ...style }}\n >\n {svgElement}\n </span>\n );\n}\n\nGmailIcon.displayName = 'GmailIcon';\n","import { type SVGAttributes, useId } from 'react';\n\nexport type InstagramVariant = 'colored' | 'black' | 'white';\n\nexport interface InstagramIconProps\n extends Omit<SVGAttributes<SVGSVGElement>, 'viewBox' | 'xmlns'> {\n /**\n * Visual variant of the icon\n * - colored: Instagram brand gradient (purple to yellow)\n * - black: Solid black\n * - white: Solid white\n */\n variant?: InstagramVariant;\n /**\n * Size of the icon in pixels\n */\n size?: number;\n /**\n * Additional CSS class name\n */\n className?: string;\n /**\n * Accessible label for the icon\n * Required for interactive icons, optional for decorative\n */\n 'aria-label'?: string;\n /**\n * Whether the icon is decorative (hidden from screen readers)\n */\n 'aria-hidden'?: boolean;\n /**\n * Click handler for interactive icons\n */\n onClick?: () => void;\n}\n\n/**\n * Instagram brand icon component with three variants\n *\n * @example\n * // Colored variant (default)\n * <InstagramIcon />\n *\n * @example\n * // Black variant with custom size\n * <InstagramIcon variant=\"black\" size={32} />\n *\n * @example\n * // Interactive icon with click handler\n * <InstagramIcon\n * onClick={handleClick}\n * aria-label=\"Share on Instagram\"\n * style={{ cursor: 'pointer' }}\n * />\n *\n * @example\n * // Decorative icon (hidden from screen readers)\n * <InstagramIcon aria-hidden=\"true\" />\n */\nexport function InstagramIcon({\n variant = 'colored',\n size = 24,\n className,\n 'aria-label': ariaLabel,\n 'aria-hidden': ariaHidden,\n onClick,\n ...svgProps\n}: InstagramIconProps) {\n // Generate unique ID for gradient to avoid conflicts when multiple icons are rendered\n const gradientId = useId();\n\n // Determine if icon is interactive\n const isInteractive = !!onClick;\n\n // Set appropriate ARIA attributes\n const ariaAttributes = {\n 'aria-label': ariaLabel,\n 'aria-hidden': ariaHidden !== undefined ? ariaHidden : !ariaLabel && !isInteractive,\n role: isInteractive ? 'button' : undefined,\n tabIndex: isInteractive ? 0 : undefined,\n };\n\n // Handle keyboard interaction for interactive icons\n const handleKeyDown = (event: React.KeyboardEvent<SVGSVGElement>) => {\n if (isInteractive && (event.key === 'Enter' || event.key === ' ')) {\n event.preventDefault();\n onClick?.();\n }\n };\n\n const commonProps = {\n width: size,\n height: size,\n viewBox: '0 0 24 24',\n fill: 'none',\n xmlns: 'http://www.w3.org/2000/svg',\n className,\n onClick,\n onKeyDown: isInteractive ? handleKeyDown : undefined,\n ...ariaAttributes,\n ...svgProps,\n };\n\n // SVG paths for Instagram logo\n const paths = {\n // Camera lens circle\n path1:\n 'M12.0053 7.37695C9.45144 7.37695 7.37952 9.44766 7.37952 12C7.37952 14.5523 9.45144 16.623 12.0053 16.623C14.5591 16.623 16.631 14.5523 16.631 12C16.631 9.44766 14.5591 7.37695 12.0053 7.37695ZM12.0053 14.9988C10.3484 14.9988 9.00469 13.6559 9.00469 12C9.00469 10.3441 10.3484 9.00117 12.0053 9.00117C13.6621 9.00117 15.0059 10.3441 15.0059 12C15.0059 13.6559 13.6621 14.9988 12.0053 14.9988Z',\n // Flash dot\n path2:\n 'M16.814 8.27345C17.4084 8.27345 17.8939 7.79181 17.8939 7.19415C17.8939 6.60001 17.4084 6.11485 16.814 6.11485C16.2195 6.11485 15.734 6.59649 15.734 7.19415C15.734 7.78829 16.2159 8.27345 16.814 8.27345Z',\n // Outer rounded square\n path3:\n 'M12.0053 3C9.56048 3 9.25445 3.01055 8.29412 3.05273C7.33731 3.09492 6.6795 3.24961 6.10963 3.47109C5.51515 3.70312 5.01212 4.00898 4.51261 4.51172C4.00958 5.01094 3.70354 5.51367 3.47137 6.1043C3.24976 6.67734 3.09498 7.33125 3.05277 8.2875C3.01055 9.25078 3 9.55664 3 12C3 14.4434 3.01055 14.7492 3.05277 15.709C3.09498 16.6652 3.24976 17.3227 3.47137 17.8922C3.70354 18.4863 4.00958 18.9891 4.51261 19.4883C5.01212 19.9875 5.51515 20.2969 6.10612 20.5254C6.6795 20.7469 7.33379 20.9016 8.2906 20.9437C9.25093 20.9859 9.55697 20.9965 12.0018 20.9965C14.4465 20.9965 14.7526 20.9859 15.7129 20.9437C16.6697 20.9016 17.3275 20.7469 17.8974 20.5254C18.4884 20.2969 18.9914 19.9875 19.4909 19.4883C19.9904 18.9891 20.3 18.4863 20.5286 17.8957C20.7502 17.3227 20.905 16.6687 20.9472 15.7125C20.9894 14.7527 21 14.4469 21 12.0035C21 9.56016 20.9894 9.2543 20.9472 8.29453C20.905 7.33828 20.7502 6.68086 20.5286 6.11133C20.307 5.51367 20.001 5.01094 19.4979 4.51172C18.9984 4.0125 18.4954 3.70312 17.9044 3.47461C17.3311 3.25312 16.6768 3.09844 15.72 3.05625C14.7561 3.01055 14.4501 3 12.0053 3ZM12.0053 4.6207C14.4114 4.6207 14.6963 4.63125 15.6426 4.67344C16.522 4.71211 16.9969 4.85977 17.3135 4.98281C17.7321 5.14453 18.0346 5.34141 18.3477 5.6543C18.6643 5.9707 18.8577 6.26953 19.0195 6.68789C19.1427 7.0043 19.2904 7.48242 19.3291 8.35781C19.3713 9.30703 19.3819 9.5918 19.3819 11.993C19.3819 14.3977 19.3713 14.6824 19.3291 15.6281C19.2904 16.507 19.1427 16.9816 19.0195 17.298C18.8577 17.7164 18.6607 18.0188 18.3477 18.3316C18.0311 18.648 17.7321 18.8414 17.3135 19.0031C16.9969 19.1262 16.5185 19.2738 15.6426 19.3125C14.6928 19.3547 14.4079 19.3652 12.0053 19.3652C9.59918 19.3652 9.31425 19.3547 8.36799 19.3125C7.48857 19.2738 7.01368 19.1262 6.69709 19.0031C6.27848 18.8414 5.97596 18.6445 5.66289 18.3316C5.3463 18.0152 5.15282 17.7164 4.99101 17.298C4.86789 16.9816 4.72015 16.5035 4.68145 15.6281C4.63924 14.6789 4.62869 14.3941 4.62869 11.993C4.62869 9.58828 4.63924 9.30351 4.68145 8.35781C4.72015 7.47891 4.86789 7.0043 4.99101 6.68789C5.15282 6.26953 5.34981 5.96719 5.66289 5.6543C5.97948 5.33789 6.27848 5.14453 6.69709 4.98281C7.01368 4.85977 7.49209 4.71211 8.36799 4.67344C9.31425 4.63125 9.59918 4.6207 12.0053 4.6207Z',\n };\n\n // Colored variant (Instagram brand gradient)\n if (variant === 'colored') {\n return (\n <svg {...commonProps}>\n <defs>\n <linearGradient\n id={gradientId}\n x1=\"16\"\n y1=\"3\"\n x2=\"6.5\"\n y2=\"21\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#6E3BF1\" />\n <stop offset=\"0.241314\" stopColor=\"#C128BF\" />\n <stop offset=\"0.475694\" stopColor=\"#EA336B\" />\n <stop offset=\"0.715281\" stopColor=\"#EE8131\" />\n <stop offset=\"0.913202\" stopColor=\"#F8D849\" />\n </linearGradient>\n </defs>\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d={paths.path1} fill={`url(#${gradientId})`} />\n <path d={paths.path2} fill={`url(#${gradientId})`} />\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d={paths.path3} fill={`url(#${gradientId})`} />\n </svg>\n );\n }\n\n // Black variant\n if (variant === 'black') {\n return (\n <svg {...commonProps}>\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d={paths.path1} fill=\"black\" />\n <path d={paths.path2} fill=\"black\" />\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d={paths.path3} fill=\"black\" />\n </svg>\n );\n }\n\n // White variant\n return (\n <svg {...commonProps}>\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d={paths.path1} fill=\"white\" />\n <path d={paths.path2} fill=\"white\" />\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d={paths.path3} fill=\"white\" />\n </svg>\n );\n}\n\nInstagramIcon.displayName = 'InstagramIcon';\n","import styled from 'styled-components';\n\ninterface StyledIconWrapperProps {\n $size: number;\n}\n\nexport const StyledIconWrapper = styled.button<StyledIconWrapperProps>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n background: transparent;\n border: none;\n padding: 0;\n cursor: pointer;\n transition: all 0.2s ease-in-out;\n width: ${({ $size }) => `${$size}px`};\n height: ${({ $size }) => `${$size}px`};\n border-radius: ${({ theme }) => theme?.radii?.sm ?? '4px'};\n\n &:hover:not(:disabled) {\n opacity: 0.8;\n transform: scale(1.05);\n }\n\n &:active:not(:disabled) {\n opacity: 0.6;\n transform: scale(0.95);\n }\n\n &:focus-visible {\n outline: 2px solid ${({ theme }) => (theme?.colors?.primary && typeof theme.colors.primary === 'object' ? theme.colors.primary.light : theme?.colors?.primary) ?? '#0066FF'};\n outline-offset: 2px;\n }\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n\n /* Remove default focus outline, using focus-visible instead */\n &:focus {\n outline: none;\n }\n\n svg {\n display: block;\n width: 100%;\n height: 100%;\n }\n`;\n","import type { AriaButtonProps } from '@react-aria/button';\nimport { useButton } from '@react-aria/button';\nimport { useRef } from 'react';\nimport { StyledIconWrapper } from './LinkedInIcon.styles';\n\nexport type LinkedInIconVariant = 'colored' | 'black' | 'white';\n\nexport interface LinkedInIconProps extends Partial<AriaButtonProps> {\n variant?: LinkedInIconVariant;\n size?: number;\n className?: string;\n 'aria-label'?: string;\n}\n\nconst SVG_CONTENT = {\n colored: {\n viewBox: '0 0 24 24',\n paths: [\n {\n d: 'M9.85714 9.60714H12.2803V10.8423H12.3069C12.6763 10.1763 13.7674 9.5 15.1166 9.5C17.706 9.5 18.4286 10.8749 18.4286 13.4214V18.1786H15.8571V13.8903C15.8571 12.7503 15.402 11.75 14.3374 11.75C13.0449 11.75 12.4286 12.6251 12.4286 14.0617V18.1786H9.85714V9.60714ZM5.57143 18.1786H8.14286V9.60714H5.57143V18.1786ZM8.46429 6.60714C8.46429 7.49514 7.74514 8.21429 6.85714 8.21429C5.96914 8.21429 5.25 7.49514 5.25 6.60714C5.25 5.71914 5.96914 5 6.85714 5C7.74514 5 8.46429 5.71914 8.46429 6.60714Z',\n fill: 'white',\n fillRule: 'evenodd',\n clipRule: 'evenodd',\n },\n {\n d: 'M19.6963 3H4.35686C3.62314 3 3 3.58029 3 4.29514V19.704C3 20.4197 3.40886 21 4.14257 21H19.482C20.2166 21 21 20.4197 21 19.704V4.29514C21 3.58029 20.4309 3 19.6963 3ZM9.85714 9.85714H12.2803V11.0923H12.3069C12.6763 10.4263 13.7674 9.75 15.1166 9.75C17.706 9.75 18.4286 11.1249 18.4286 13.6714V18.4286H15.8571V14.1403C15.8571 13.0003 15.402 12 14.3374 12C13.0449 12 12.4286 12.8751 12.4286 14.3117V18.4286H9.85714V9.85714ZM5.57143 18.4286H8.14286V9.85714H5.57143V18.4286ZM8.46429 6.85714C8.46429 7.74514 7.74514 8.46429 6.85714 8.46429C5.96914 8.46429 5.25 7.74514 5.25 6.85714C5.25 5.96914 5.96914 5.25 6.85714 5.25C7.74514 5.25 8.46429 5.96914 8.46429 6.85714Z',\n fill: '#2D64BC',\n fillRule: 'evenodd',\n clipRule: 'evenodd',\n },\n ],\n },\n black: {\n viewBox: '0 0 24 24',\n paths: [\n {\n d: 'M19.6963 3H4.35686C3.62314 3 3 3.58029 3 4.29514V19.704C3 20.4197 3.40886 21 4.14257 21H19.482C20.2166 21 21 20.4197 21 19.704V4.29514C21 3.58029 20.4309 3 19.6963 3ZM9.85714 9.85714H12.2803V11.0923H12.3069C12.6763 10.4263 13.7674 9.75 15.1166 9.75C17.706 9.75 18.4286 11.1249 18.4286 13.6714V18.4286H15.8571V14.1403C15.8571 13.0003 15.402 12 14.3374 12C13.0449 12 12.4286 12.8751 12.4286 14.3117V18.4286H9.85714V9.85714ZM5.57143 18.4286H8.14286V9.85714H5.57143V18.4286ZM8.46429 6.85714C8.46429 7.74514 7.74514 8.46429 6.85714 8.46429C5.96914 8.46429 5.25 7.74514 5.25 6.85714C5.25 5.96914 5.96914 5.25 6.85714 5.25C7.74514 5.25 8.46429 5.96914 8.46429 6.85714Z',\n fill: 'black',\n fillRule: 'evenodd',\n clipRule: 'evenodd',\n },\n ],\n },\n white: {\n viewBox: '0 0 24 24',\n paths: [\n {\n d: 'M19.6963 3H4.35686C3.62314 3 3 3.58029 3 4.29514V19.704C3 20.4197 3.40886 21 4.14257 21H19.482C20.2166 21 21 20.4197 21 19.704V4.29514C21 3.58029 20.4309 3 19.6963 3ZM9.85714 9.85714H12.2803V11.0923H12.3069C12.6763 10.4263 13.7674 9.75 15.1166 9.75C17.706 9.75 18.4286 11.1249 18.4286 13.6714V18.4286H15.8571V14.1403C15.8571 13.0003 15.402 12 14.3374 12C13.0449 12 12.4286 12.8751 12.4286 14.3117V18.4286H9.85714V9.85714ZM5.57143 18.4286H8.14286V9.85714H5.57143V18.4286ZM8.46429 6.85714C8.46429 7.74514 7.74514 8.46429 6.85714 8.46429C5.96914 8.46429 5.25 7.74514 5.25 6.85714C5.25 5.96914 5.96914 5.25 6.85714 5.25C7.74514 5.25 8.46429 5.96914 8.46429 6.85714Z',\n fill: 'white',\n fillRule: 'evenodd',\n clipRule: 'evenodd',\n },\n ],\n },\n};\n\nexport function LinkedInIcon({\n variant = 'colored',\n size = 24,\n className,\n 'aria-label': ariaLabel = 'LinkedIn',\n onPress,\n ...ariaProps\n}: LinkedInIconProps) {\n const ref = useRef<HTMLButtonElement>(null);\n const isInteractive = Boolean(onPress);\n\n // Only use button semantics if onPress is provided\n const { buttonProps } = useButton(\n {\n ...ariaProps,\n onPress,\n 'aria-label': ariaLabel,\n isDisabled: !isInteractive,\n },\n ref\n );\n\n const svgContent = SVG_CONTENT[variant];\n const role = isInteractive ? 'button' : 'img';\n const ariaHidden = !isInteractive && !ariaLabel;\n\n const svgElement = (\n <svg\n width={size}\n height={size}\n viewBox={svgContent.viewBox}\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n role={role}\n aria-label={ariaLabel}\n aria-hidden={ariaHidden}\n >\n {svgContent.paths.map((pathProps) => (\n <path\n key={`${pathProps.d.substring(0, 20)}-${pathProps.fill}`}\n d={pathProps.d}\n fill={pathProps.fill}\n fillRule={pathProps.fillRule as 'evenodd' | 'nonzero' | 'inherit' | undefined}\n clipRule={pathProps.clipRule as 'evenodd' | 'nonzero' | 'inherit' | undefined}\n />\n ))}\n </svg>\n );\n\n if (isInteractive) {\n return (\n <StyledIconWrapper {...buttonProps} ref={ref} className={className} $size={size}>\n {svgElement}\n </StyledIconWrapper>\n );\n }\n\n return (\n <span className={className} style={{ display: 'inline-flex', width: size, height: size }}>\n {svgElement}\n </span>\n );\n}\n\nLinkedInIcon.displayName = 'LinkedInIcon';\n","import styled from 'styled-components';\n\ninterface StyledIconWrapperProps {\n $size: number;\n}\n\nexport const StyledIconWrapper = styled.button<StyledIconWrapperProps>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n background: transparent;\n border: none;\n padding: 0;\n cursor: pointer;\n transition: all 0.2s ease-in-out;\n width: ${({ $size }) => `${$size}px`};\n height: ${({ $size }) => `${$size}px`};\n border-radius: ${({ theme }) => theme?.radii?.sm ?? '4px'};\n\n &:hover:not(:disabled) {\n opacity: 0.8;\n transform: scale(1.05);\n }\n\n &:active:not(:disabled) {\n opacity: 0.6;\n transform: scale(0.95);\n }\n\n &:focus-visible {\n outline: 2px solid ${({ theme }) => (theme?.colors?.primary && typeof theme.colors.primary === 'object' ? theme.colors.primary.light : theme?.colors?.primary) ?? '#0066FF'};\n outline-offset: 2px;\n }\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n\n /* Remove default focus outline, using focus-visible instead */\n &:focus {\n outline: none;\n }\n\n svg {\n display: block;\n width: 100%;\n height: 100%;\n }\n`;\n","import { useButton } from '@react-aria/button';\nimport { useRef } from 'react';\nimport { StyledIconWrapper } from './PostizIcon.styles';\nimport type { PostizIconProps } from './PostizIcon.types';\n\n/**\n * Postiz logo - Official Postiz social media scheduling platform logo\n * Brand colors: Purple (#612bd3), Dark (#131019), White (#fff)\n */\n\nexport function PostizIcon({\n variant = 'colored',\n size = 24,\n className,\n style,\n 'aria-label': ariaLabel = 'Postiz',\n onPress,\n ...ariaProps\n}: PostizIconProps) {\n const ref = useRef<HTMLButtonElement>(null);\n const isInteractive = Boolean(onPress);\n\n // Only use button semantics if onPress is provided\n const { buttonProps } = useButton(\n {\n ...ariaProps,\n onPress,\n 'aria-label': ariaLabel,\n isDisabled: !isInteractive,\n },\n ref\n );\n\n const role = isInteractive ? 'button' : 'img';\n const ariaHidden = !isInteractive && !ariaLabel;\n\n // Color mappings for variants\n const colors = {\n colored: {\n purple: '#612bd3',\n dark: '#131019',\n white: '#fff',\n stroke: '#131019',\n },\n black: {\n purple: 'black',\n dark: 'black',\n white: 'black',\n stroke: 'black',\n },\n white: {\n purple: 'white',\n dark: 'white',\n white: 'white',\n stroke: 'white',\n },\n };\n\n const c = colors[variant];\n\n const svgElement = (\n <svg\n width={size}\n height={size}\n viewBox=\"26.74 0.02 460.94 509.34\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n role={role}\n aria-label={ariaLabel}\n aria-hidden={ariaHidden}\n >\n {/* Shadow/background layer */}\n <path\n d=\"M103.4 82.6c.4 5.6.8 12 1.4 19.1L125 362.4c2.3 29.1 3.4 43.8 9.9 54.4 5.7 9.4 14.4 16.7 24.5 21 11.6 4.9 26.1 3.7 55.2 1.4l199.8-15.4c18.9-1.5 31.7-2.5 41.2-4.8-3.2 7.5-8.1 14.3-14.5 19.5-9.6 8-23.9 11.4-52.4 17.9l-195 45c-28.5 6.5-42.8 9.9-54.8 6.8-10.7-2.7-20.3-8.6-27.3-17.1-8-9.6-11.4-23.9-17.9-52.4L34.7 184c-6.5-28.5-9.9-42.8-6.8-54.8 2.7-10.7 8.6-20.3 17.1-27.3 9.6-8 23.9-11.4 52.4-17.9z\"\n fill={c.purple}\n />\n {/* Card outline */}\n <path\n d=\"M112.8 101.1c-1.1-14.8-2-25.2-1.9-33.6 0-8.2.9-13.6 2.8-18 3.6-8.6 9.8-15.8 17.7-20.8 4.1-2.5 9.2-4.2 17.4-5.4 8.2-1.3 18.8-2.2 33.5-3.3L382 4.4c14.8-1.1 25.2-2 33.6-1.9 8.2 0 13.6.9 18 2.8 8.6 3.6 15.8 9.8 20.8 17.7 2.5 4.1 4.2 9.2 5.4 17.4s2.2 18.8 3.3 33.5l20.2 260.8c1.1 14.8 2 25.2 1.9 33.6 0 8.2-.9 13.6-2.8 18-3.6 8.6-9.8 15.8-17.7 20.8-4.1 2.5-9.2 4.2-17.4 5.4-8.2 1.3-18.8 2.2-33.5 3.3l-199.7 15.4c-14.8 1.1-25.2 2-33.6 1.9-8.2 0-13.6-.9-18-2.8-8.6-3.6-15.8-9.8-20.8-17.7-2.5-4.1-4.2-9.2-5.4-17.4-1.3-8.2-2.2-18.8-3.3-33.5z\"\n fill=\"none\"\n stroke={c.stroke}\n strokeWidth=\"4.9373\"\n />\n {/* White card background */}\n <path\n d=\"m182.9 27.9 199.7-15.4c14.9-1.2 25-1.9 33-1.9 7.7 0 11.9.9 14.9 2.2 7 3 13 8 17 14.6 1.7 2.9 3.2 6.8 4.5 14.5 1.3 7.8 2.1 18 3.2 32.9l20.2 260.8c1.2 14.9 1.9 25 1.9 33 0 7.7-.9 11.9-2.2 14.9-3 7-8 13-14.6 17-2.9 1.7-6.8 3.2-14.5 4.5-7.8 1.3-18 2.1-32.9 3.2l-199.7 15.3c-14.8 1.2-25 1.9-33 1.9-7.7 0-11.9-.9-14.9-2.2-7-3-13-8-17-14.6-1.7-2.9-3.2-6.8-4.5-14.5-1.3-7.8-2.1-18-3.2-32.9l-20.2-260.8c-1.2-14.8-1.9-25-1.9-33 0-7.7.9-11.9 2.2-14.9 3-7 8-13 14.6-17 2.9-1.7 6.8-3.2 14.5-4.5 7.9-1.1 18.1-1.9 32.9-3.1\"\n fill={c.white}\n />\n {/* Letter \"p\" */}\n <path\n d=\"m269.4 88.3 1.9 24.8c3.5-4.3 7.9-7.9 13.4-11 5.4-3.3 12.3-5.2 20.4-5.8 7.4-.6 14.7.3 21.4 2.7 7 2.4 13.3 6.4 18.8 12.5 5.7 5.7 10.6 13.7 14.5 23.8s6.3 22.5 7.5 37.2c.8 10.5.7 21.2-.5 31.9-1 10.7-3.4 20.4-7.3 29.1-4 8.7-9.7 16-17.2 21.9-7.3 5.6-16.7 8.9-28.4 9.8-8.3.7-15 .1-20-1.8-5-2.1-8.8-4.6-11.5-7.4l6.2 80-46.5 15.5L221.8 92zm26.4 149c5.7-.4 10.4-2.7 14.1-6.7 3.7-4.3 6.3-9.5 8-15.8 2-6.3 3.1-13.3 3.4-20.8.5-7.7.5-15.3-.1-22.9-.9-12.1-2.8-21.6-5.5-28.4-2.5-6.8-5.3-11.9-8.4-14.9-3.2-3.3-6.1-5.2-9.1-5.9-2.7-.7-4.9-1-6.3-.8-4 .3-7.7 2.1-11.2 5.1-3.6 3-5.9 7.2-7.3 12.9l7.1 91.9c1.2 1.7 3.2 3.3 5.6 4.9 2.5 1.2 5.7 1.7 9.7 1.4\"\n fill={c.dark}\n />\n </svg>\n );\n\n if (isInteractive) {\n return (\n <StyledIconWrapper\n {...buttonProps}\n ref={ref}\n className={className}\n style={style}\n $size={size}\n >\n {svgElement}\n </StyledIconWrapper>\n );\n }\n\n return (\n <span\n className={className}\n style={{ display: 'inline-flex', width: size, height: size, ...style }}\n >\n {svgElement}\n </span>\n );\n}\n\nPostizIcon.displayName = 'PostizIcon';\n","import type { SVGAttributes } from 'react';\n\nexport type RedditIconVariant = 'colored' | 'black' | 'white';\n\nexport interface RedditIconProps\n extends Omit<SVGAttributes<SVGSVGElement>, 'viewBox' | 'fill' | 'xmlns'> {\n /** Visual variant of the icon */\n variant?: RedditIconVariant;\n /** Size of the icon in pixels */\n size?: number;\n /** Additional CSS class */\n className?: string;\n /** Click handler for interactive icons */\n onClick?: () => void;\n /** Accessible label for screen readers */\n 'aria-label'?: string;\n}\n\nconst ColoredVariant = () => (\n <>\n <path\n d=\"M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z\"\n fill=\"#FF4500\"\n />\n <path\n d=\"M18.67 12C18.672 12.137 18.655 12.2738 18.619 12.406C18.583 12.5383 18.5285 12.665 18.457 12.782C18.3858 12.899 18.2983 13.0055 18.1973 13.0983C18.0963 13.191 17.9828 13.269 17.86 13.33C17.8628 13.3665 17.865 13.4033 17.8663 13.44C17.8693 13.5133 17.8693 13.5867 17.8663 13.66C17.865 13.6968 17.8628 13.7335 17.86 13.77C17.86 16.01 15.25 17.83 12.03 17.83C8.81003 17.83 6.20003 16.01 6.20003 13.77C6.19728 13.7335 6.19503 13.6968 6.19378 13.66C6.19077 13.5867 6.19077 13.5133 6.19378 13.44C6.19503 13.4033 6.19728 13.3665 6.20003 13.33C6.00772 13.2416 5.83691 13.1125 5.69943 12.9516C5.56194 12.7906 5.46107 12.6018 5.40378 12.398C5.34658 12.1942 5.3344 11.9803 5.36807 11.7713C5.40174 11.5623 5.48046 11.3631 5.59878 11.1875C5.71699 11.012 5.87197 10.8642 6.05299 10.7546C6.234 10.6449 6.4367 10.576 6.64703 10.5525C6.85738 10.5289 7.07035 10.5514 7.27117 10.6183C7.47199 10.6852 7.65585 10.795 7.81003 10.94C8.09624 10.746 8.3961 10.573 8.70728 10.4223C9.01853 10.2718 9.34028 10.1438 9.67003 10.0398C9.99978 9.93576 10.3368 9.85601 10.678 9.80076C11.0193 9.74551 11.3643 9.71526 11.71 9.71001L12.45 6.24001C12.4583 6.19976 12.4745 6.16176 12.4978 6.12776C12.5208 6.09401 12.5505 6.06501 12.5848 6.04276C12.6193 6.02051 12.6578 6.00526 12.6983 5.99776C12.7385 5.99051 12.78 5.99126 12.82 6.00001L15.27 6.49001C15.5173 6.06526 16.0363 5.88326 16.4945 6.06026C16.9528 6.23726 17.2148 6.72101 17.1123 7.20151C17.01 7.68201 16.5735 8.01701 16.083 7.99176C15.5923 7.96651 15.1925 7.58851 15.14 7.10001L13 6.65001L12.35 9.77001C12.6915 9.77726 13.0323 9.80926 13.3693 9.86551C14.0441 9.978 14.6992 10.1873 15.3143 10.487C15.6215 10.6365 15.9175 10.8079 16.2 11C16.4032 10.805 16.6585 10.6729 16.935 10.6198C17.2116 10.5664 17.4977 10.5943 17.7588 10.7C18.0199 10.8057 18.2449 10.9846 18.4065 11.2153C18.5683 11.4459 18.6598 11.7185 18.67 12ZM8.74603 13.3828C8.79653 13.504 8.87003 13.6143 8.96303 13.707C9.05578 13.8 9.16603 13.8735 9.28728 13.924C9.40864 13.9742 9.53869 14 9.67003 14C10.0745 14 10.439 13.7563 10.594 13.3828C10.7488 13.009 10.663 12.579 10.377 12.293C10.091 12.007 9.66103 11.9213 9.28728 12.076C8.91378 12.231 8.67003 12.5955 8.67003 13C8.67003 13.1313 8.69578 13.2613 8.74603 13.3828ZM14.4735 15.7833C14.5248 15.7333 14.554 15.665 14.555 15.5935C14.556 15.5218 14.5283 15.4528 14.4783 15.4015C14.4283 15.3503 14.36 15.321 14.2885 15.32C14.2168 15.319 14.1478 15.3468 14.09 15.39C13.9397 15.4979 13.7804 15.5928 13.614 15.6738C13.4476 15.7548 13.2747 15.8216 13.097 15.8735C12.9195 15.9253 12.7378 15.962 12.554 15.9833C12.37 16.0045 12.1848 16.01 12 16C11.8155 16.0083 11.6305 16.0008 11.4473 15.9778C11.264 15.955 11.083 15.9165 10.9063 15.8628C10.7293 15.8093 10.5575 15.7408 10.3923 15.6583C10.227 15.5758 10.069 15.4793 9.92003 15.37C9.86828 15.3275 9.80253 15.3058 9.73553 15.309C9.66853 15.3123 9.60528 15.3405 9.55778 15.3878C9.51053 15.4353 9.48228 15.4985 9.47903 15.5655C9.47578 15.6325 9.49753 15.6983 9.54003 15.75C9.71578 15.8825 9.90253 15.9995 10.0983 16.1C10.294 16.2005 10.4983 16.2838 10.7083 16.3493C10.9183 16.4148 11.1335 16.462 11.3518 16.4908C11.57 16.5193 11.7903 16.529 12.01 16.52C12.2298 16.529 12.45 16.5193 12.6683 16.4908C13.1054 16.4333 13.5294 16.3011 13.9218 16.1C14.1175 15.9995 14.3043 15.8825 14.48 15.75L14.4735 15.7833ZM14.29 14.08C14.4255 14.0815 14.56 14.0553 14.6853 14.0033C14.8105 13.951 14.9238 13.874 15.0183 13.7768C15.1128 13.6795 15.1863 13.564 15.2348 13.4373C15.2833 13.3107 15.3055 13.1755 15.3 13.04C15.3 12.6355 15.0563 12.271 14.6828 12.116C14.309 11.9613 13.879 12.047 13.593 12.333C13.307 12.619 13.2213 13.049 13.376 13.4228C13.531 13.7963 13.8955 14.04 14.3 14.04L14.29 14.08Z\"\n fill=\"white\"\n />\n </>\n);\n\nconst BlackVariant = () => (\n <>\n <path\n d=\"M8.96303 13.707C8.87003 13.6143 8.79653 13.504 8.74603 13.3828C8.69578 13.2613 8.67003 13.1313 8.67003 13C8.67003 12.5955 8.91378 12.231 9.28728 12.076C9.66103 11.9213 10.091 12.007 10.377 12.293C10.663 12.579 10.7488 13.009 10.594 13.3828C10.439 13.7563 10.0745 14 9.67003 14C9.53869 14 9.40864 13.9742 9.28728 13.924C9.16603 13.8735 9.05578 13.8 8.96303 13.707Z\"\n fill=\"black\"\n />\n <path\n d=\"M14.555 15.5935C14.554 15.665 14.5248 15.7333 14.4735 15.7833L14.48 15.75C14.3043 15.8825 14.1175 15.9995 13.9218 16.1C13.5294 16.3011 13.1054 16.4333 12.6683 16.4908C12.45 16.5193 12.2298 16.529 12.01 16.52C11.7903 16.529 11.57 16.5193 11.3518 16.4908C11.1335 16.462 10.9183 16.4148 10.7083 16.3493C10.4983 16.2838 10.294 16.2005 10.0983 16.1C9.90253 15.9995 9.71578 15.8825 9.54003 15.75C9.49753 15.6983 9.47578 15.6325 9.47903 15.5655C9.48228 15.4985 9.51053 15.4353 9.55778 15.3878C9.60528 15.3405 9.66853 15.3123 9.73553 15.309C9.80253 15.3058 9.86828 15.3275 9.92003 15.37C10.069 15.4793 10.227 15.5758 10.3923 15.6583C10.5575 15.7408 10.7293 15.8093 10.9063 15.8628C11.083 15.9165 11.264 15.955 11.4473 15.9778C11.6305 16.0008 11.8155 16.0083 12 16C12.1848 16.01 12.37 16.0045 12.554 15.9833C12.7378 15.962 12.9195 15.9253 13.097 15.8735C13.2747 15.8216 13.4476 15.7548 13.614 15.6738C13.7804 15.5928 13.9397 15.4979 14.09 15.39C14.1478 15.3468 14.2168 15.319 14.2885 15.32C14.36 15.321 14.4283 15.3503 14.4783 15.4015C14.5283 15.4528 14.556 15.5218 14.555 15.5935Z\"\n fill=\"black\"\n />\n <path\n d=\"M14.6853 14.0033C14.56 14.0553 14.4255 14.0815 14.29 14.08L14.3 14.04C13.8955 14.04 13.531 13.7963 13.376 13.4228C13.2213 13.049 13.307 12.619 13.593 12.333C13.879 12.047 14.309 11.9613 14.6828 12.116C15.0563 12.271 15.3 12.6355 15.3 13.04C15.3055 13.1755 15.2833 13.3107 15.2348 13.4373C15.1863 13.564 15.1128 13.6795 15.0183 13.7768C14.9238 13.874 14.8105 13.951 14.6853 14.0033Z\"\n fill=\"black\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12ZM18.619 12.406C18.655 12.2738 18.672 12.137 18.67 12C18.6598 11.7185 18.5683 11.4459 18.4065 11.2153C18.2449 10.9846 18.0199 10.8057 17.7588 10.7C17.4977 10.5943 17.2116 10.5664 16.935 10.6198C16.6585 10.6729 16.4032 10.805 16.2 11C15.9175 10.8079 15.6215 10.6365 15.3143 10.487C14.6992 10.1873 14.0441 9.978 13.3693 9.86551C13.0323 9.80926 12.6915 9.77726 12.35 9.77001L13 6.65001L15.14 7.10001C15.1925 7.58851 15.5923 7.96651 16.083 7.99176C16.5735 8.01701 17.01 7.68201 17.1123 7.20151C17.2148 6.72101 16.9528 6.23726 16.4945 6.06026C16.0363 5.88326 15.5173 6.06526 15.27 6.49001L12.82 6.00001C12.78 5.99126 12.7385 5.99051 12.6983 5.99776C12.6578 6.00526 12.6193 6.02051 12.5848 6.04276C12.5505 6.06501 12.5208 6.09401 12.4978 6.12776C12.4745 6.16176 12.4583 6.19976 12.45 6.24001L11.71 9.71001C11.3643 9.71526 11.0193 9.74551 10.678 9.80076C10.3368 9.85601 9.99978 9.93576 9.67003 10.0398C9.34028 10.1438 9.01853 10.2718 8.70728 10.4223C8.3961 10.573 8.09624 10.746 7.81003 10.94C7.65585 10.795 7.47198 10.6852 7.27117 10.6183C7.07035 10.5514 6.85738 10.5289 6.64703 10.5525C6.4367 10.576 6.234 10.6449 6.05299 10.7546C5.87197 10.8642 5.71699 11.012 5.59878 11.1875C5.48046 11.3631 5.40174 11.5623 5.36807 11.7713C5.3344 11.9803 5.34658 12.1942 5.40378 12.398C5.46107 12.6018 5.56194 12.7906 5.69943 12.9516C5.83691 13.1125 6.00772 13.2416 6.20003 13.33C6.19728 13.3665 6.19503 13.4033 6.19378 13.44C6.19077 13.5133 6.19077 13.5867 6.19378 13.66C6.19503 13.6968 6.19728 13.7335 6.20003 13.77C6.20003 16.01 8.81003 17.83 12.03 17.83C15.25 17.83 17.86 16.01 17.86 13.77C17.8628 13.7335 17.865 13.6968 17.8663 13.66C17.8693 13.5867 17.8693 13.5133 17.8663 13.44C17.865 13.4033 17.8628 13.3665 17.86 13.33C17.9828 13.269 18.0963 13.191 18.1973 13.0983C18.2983 13.0055 18.3858 12.899 18.457 12.782C18.5285 12.665 18.583 12.5383 18.619 12.406Z\"\n fill=\"black\"\n />\n </>\n);\n\nconst WhiteVariant = () => (\n <>\n <path\n d=\"M8.96303 13.707C8.87003 13.6143 8.79653 13.504 8.74603 13.3828C8.69578 13.2613 8.67003 13.1313 8.67003 13C8.67003 12.5955 8.91378 12.231 9.28728 12.076C9.66103 11.9213 10.091 12.007 10.377 12.293C10.663 12.579 10.7488 13.009 10.594 13.3828C10.439 13.7563 10.0745 14 9.67003 14C9.53869 14 9.40864 13.9742 9.28728 13.924C9.16603 13.8735 9.05578 13.8 8.96303 13.707Z\"\n fill=\"white\"\n />\n <path\n d=\"M14.555 15.5935C14.554 15.665 14.5248 15.7333 14.4735 15.7833L14.48 15.75C14.3043 15.8825 14.1175 15.9995 13.9218 16.1C13.5294 16.3011 13.1054 16.4333 12.6683 16.4908C12.45 16.5193 12.2298 16.529 12.01 16.52C11.7903 16.529 11.57 16.5193 11.3518 16.4908C11.1335 16.462 10.9183 16.4148 10.7083 16.3493C10.4983 16.2838 10.294 16.2005 10.0983 16.1C9.90253 15.9995 9.71578 15.8825 9.54003 15.75C9.49753 15.6983 9.47578 15.6325 9.47903 15.5655C9.48228 15.4985 9.51053 15.4353 9.55778 15.3878C9.60528 15.3405 9.66853 15.3123 9.73553 15.309C9.80253 15.3058 9.86828 15.3275 9.92003 15.37C10.069 15.4793 10.227 15.5758 10.3923 15.6583C10.5575 15.7408 10.7293 15.8093 10.9063 15.8628C11.083 15.9165 11.264 15.955 11.4473 15.9778C11.6305 16.0008 11.8155 16.0083 12 16C12.1848 16.01 12.37 16.0045 12.554 15.9833C12.7378 15.962 12.9195 15.9253 13.097 15.8735C13.2747 15.8216 13.4476 15.7548 13.614 15.6738C13.7804 15.5928 13.9397 15.4979 14.09 15.39C14.1478 15.3468 14.2168 15.319 14.2885 15.32C14.36 15.321 14.4283 15.3503 14.4783 15.4015C14.5283 15.4528 14.556 15.5218 14.555 15.5935Z\"\n fill=\"white\"\n />\n <path\n d=\"M14.6853 14.0033C14.56 14.0553 14.4255 14.0815 14.29 14.08L14.3 14.04C13.8955 14.04 13.531 13.7963 13.376 13.4228C13.2213 13.049 13.307 12.619 13.593 12.333C13.879 12.047 14.309 11.9613 14.6828 12.116C15.0563 12.271 15.3 12.6355 15.3 13.04C15.3055 13.1755 15.2833 13.3107 15.2348 13.4373C15.1863 13.564 15.1128 13.6795 15.0183 13.7768C14.9238 13.874 14.8105 13.951 14.6853 14.0033Z\"\n fill=\"white\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12ZM18.619 12.406C18.655 12.2738 18.672 12.137 18.67 12C18.6598 11.7185 18.5683 11.4459 18.4065 11.2153C18.2449 10.9846 18.0199 10.8057 17.7588 10.7C17.4977 10.5943 17.2116 10.5664 16.935 10.6198C16.6585 10.6729 16.4032 10.805 16.2 11C15.9175 10.8079 15.6215 10.6365 15.3143 10.487C14.6992 10.1873 14.0441 9.978 13.3693 9.86551C13.0323 9.80926 12.6915 9.77726 12.35 9.77001L13 6.65001L15.14 7.10001C15.1925 7.58851 15.5923 7.96651 16.083 7.99176C16.5735 8.01701 17.01 7.68201 17.1123 7.20151C17.2148 6.72101 16.9528 6.23726 16.4945 6.06026C16.0363 5.88326 15.5173 6.06526 15.27 6.49001L12.82 6.00001C12.78 5.99126 12.7385 5.99051 12.6983 5.99776C12.6578 6.00526 12.6193 6.02051 12.5848 6.04276C12.5505 6.06501 12.5208 6.09401 12.4978 6.12776C12.4745 6.16176 12.4583 6.19976 12.45 6.24001L11.71 9.71001C11.3643 9.71526 11.0193 9.74551 10.678 9.80076C10.3368 9.85601 9.99978 9.93576 9.67003 10.0398C9.34028 10.1438 9.01853 10.2718 8.70728 10.4223C8.3961 10.573 8.09624 10.746 7.81003 10.94C7.65585 10.795 7.47198 10.6852 7.27117 10.6183C7.07035 10.5514 6.85738 10.5289 6.64703 10.5525C6.4367 10.576 6.234 10.6449 6.05299 10.7546C5.87197 10.8642 5.71699 11.012 5.59878 11.1875C5.48046 11.3631 5.40174 11.5623 5.36807 11.7713C5.3344 11.9803 5.34658 12.1942 5.40378 12.398C5.46107 12.6018 5.56194 12.7906 5.69943 12.9516C5.83691 13.1125 6.00772 13.2416 6.20003 13.33C6.19728 13.3665 6.19503 13.4033 6.19378 13.44C6.19077 13.5133 6.19077 13.5867 6.19378 13.66C6.19503 13.6968 6.19728 13.7335 6.20003 13.77C6.20003 16.01 8.81003 17.83 12.03 17.83C15.25 17.83 17.86 16.01 17.86 13.77C17.8628 13.7335 17.865 13.6968 17.8663 13.66C17.8693 13.5867 17.8693 13.5133 17.8663 13.44C17.865 13.4033 17.8628 13.3665 17.86 13.33C17.9828 13.269 18.0963 13.191 18.1973 13.0983C18.2983 13.0055 18.3858 12.899 18.457 12.782C18.5285 12.665 18.583 12.5383 18.619 12.406Z\"\n fill=\"white\"\n />\n </>\n);\n\nexport function RedditIcon({\n variant = 'colored',\n size = 24,\n className,\n onClick,\n 'aria-label': ariaLabel,\n ...svgProps\n}: RedditIconProps) {\n const role = onClick ? 'button' : 'img';\n const tabIndex = onClick ? 0 : undefined;\n const cursor = onClick ? 'pointer' : undefined;\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (onClick && (e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault();\n onClick();\n }\n };\n\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n onClick={onClick}\n onKeyDown={onClick ? handleKeyDown : undefined}\n role={role}\n tabIndex={tabIndex}\n aria-label={ariaLabel || 'Reddit icon'}\n style={{ cursor, ...svgProps.style }}\n {...svgProps}\n >\n {variant === 'colored' && <ColoredVariant />}\n {variant === 'black' && <BlackVariant />}\n {variant === 'white' && <WhiteVariant />}\n </svg>\n );\n}\n\nRedditIcon.displayName = 'RedditIcon';\n","import type React from 'react';\n\nexport type SlackIconVariant = 'colored' | 'black' | 'white';\n\nexport interface SlackIconProps {\n variant?: SlackIconVariant;\n size?: number;\n className?: string;\n onClick?: (event: React.MouseEvent<SVGSVGElement>) => void;\n 'aria-label'?: string;\n}\n\nconst SlackIconColored: React.FC<Omit<SlackIconProps, 'variant'>> = ({\n size = 24,\n className,\n onClick,\n 'aria-label': ariaLabel,\n}) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n onClick={onClick}\n role={onClick ? 'button' : ariaLabel ? 'img' : 'presentation'}\n aria-label={ariaLabel}\n tabIndex={onClick ? 0 : undefined}\n onKeyDown={\n onClick\n ? (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onClick(e as unknown as React.MouseEvent<SVGSVGElement>);\n }\n }\n : undefined\n }\n >\n <path\n d=\"M6.79552 14.379C6.79552 15.4252 5.95068 16.2707 4.90538 16.2707C3.86007 16.2707 3.01523 15.4252 3.01523 14.379C3.01523 13.3328 3.86007 12.4873 4.90538 12.4873H6.79552V14.379ZM7.74059 14.379C7.74059 13.3328 8.58542 12.4873 9.63073 12.4873C10.676 12.4873 11.5209 13.3328 11.5209 14.379V19.1083C11.5209 20.1545 10.676 21 9.63073 21C8.58542 21 7.74059 20.1545 7.74059 19.1083V14.379Z\"\n fill=\"#DF1D5A\"\n />\n <path\n d=\"M9.62982 6.78342C8.58451 6.78342 7.73967 5.93788 7.73967 4.89171C7.73967 3.84554 8.58451 3 9.62982 3C10.6751 3 11.52 3.84554 11.52 4.89171V6.78342H9.62982ZM9.62982 7.7436C10.6751 7.7436 11.52 8.58914 11.52 9.63531C11.52 10.6815 10.6751 11.527 9.62982 11.527H4.89014C3.84484 11.527 3 10.6815 3 9.63531C3 8.58914 3.84484 7.7436 4.89014 7.7436H9.62982Z\"\n fill=\"#36C5F1\"\n />\n <path\n d=\"M17.2054 9.63531C17.2054 8.58914 18.0502 7.7436 19.0955 7.7436C20.1408 7.7436 20.9857 8.58914 20.9857 9.63531C20.9857 10.6815 20.1408 11.527 19.0955 11.527H17.2054V9.63531ZM16.2603 9.63531C16.2603 10.6815 15.4155 11.527 14.3702 11.527C13.3249 11.527 12.48 10.6815 12.48 9.63531V4.89171C12.48 3.84554 13.3249 3 14.3702 3C15.4155 3 16.2603 3.84554 16.2603 4.89171V9.63531Z\"\n fill=\"#2DB67E\"\n />\n <path\n d=\"M14.3702 17.2166C15.4155 17.2166 16.2603 18.0621 16.2603 19.1083C16.2603 20.1545 15.4155 21 14.3702 21C13.3249 21 12.48 20.1545 12.48 19.1083V17.2166H14.3702ZM14.3702 16.2707C13.3249 16.2707 12.48 15.4252 12.48 14.379C12.48 13.3328 13.3249 12.4873 14.3702 12.4873H19.1099C20.1552 12.4873 21 13.3328 21 14.379C21 15.4252 20.1552 16.2707 19.1099 16.2707H14.3702Z\"\n fill=\"#EBB22D\"\n />\n </svg>\n);\n\nconst SlackIconBlack: React.FC<Omit<SlackIconProps, 'variant'>> = ({\n size = 24,\n className,\n onClick,\n 'aria-label': ariaLabel,\n}) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n onClick={onClick}\n role={onClick ? 'button' : ariaLabel ? 'img' : 'presentation'}\n aria-label={ariaLabel}\n tabIndex={onClick ? 0 : undefined}\n onKeyDown={\n onClick\n ? (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onClick(e as unknown as React.MouseEvent<SVGSVGElement>);\n }\n }\n : undefined\n }\n >\n <path\n d=\"M6.79552 14.379C6.79552 15.4252 5.95068 16.2707 4.90538 16.2707C3.86007 16.2707 3.01523 15.4252 3.01523 14.379C3.01523 13.3328 3.86007 12.4873 4.90538 12.4873H6.79552V14.379ZM7.74059 14.379C7.74059 13.3328 8.58542 12.4873 9.63073 12.4873C10.676 12.4873 11.5209 13.3328 11.5209 14.379V19.1083C11.5209 20.1545 10.676 21 9.63073 21C8.58542 21 7.74059 20.1545 7.74059 19.1083V14.379Z\"\n fill=\"black\"\n />\n <path\n d=\"M9.62982 6.78342C8.58451 6.78342 7.73967 5.93788 7.73967 4.89171C7.73967 3.84554 8.58451 3 9.62982 3C10.6751 3 11.52 3.84554 11.52 4.89171V6.78342H9.62982ZM9.62982 7.7436C10.6751 7.7436 11.52 8.58914 11.52 9.63531C11.52 10.6815 10.6751 11.527 9.62982 11.527H4.89014C3.84484 11.527 3 10.6815 3 9.63531C3 8.58914 3.84484 7.7436 4.89014 7.7436H9.62982Z\"\n fill=\"black\"\n />\n <path\n d=\"M17.2054 9.63531C17.2054 8.58914 18.0502 7.7436 19.0955 7.7436C20.1408 7.7436 20.9857 8.58914 20.9857 9.63531C20.9857 10.6815 20.1408 11.527 19.0955 11.527H17.2054V9.63531ZM16.2603 9.63531C16.2603 10.6815 15.4155 11.527 14.3702 11.527C13.3249 11.527 12.48 10.6815 12.48 9.63531V4.89171C12.48 3.84554 13.3249 3 14.3702 3C15.4155 3 16.2603 3.84554 16.2603 4.89171V9.63531Z\"\n fill=\"black\"\n />\n <path\n d=\"M14.3702 17.2166C15.4155 17.2166 16.2603 18.0621 16.2603 19.1083C16.2603 20.1545 15.4155 21 14.3702 21C13.3249 21 12.48 20.1545 12.48 19.1083V17.2166H14.3702ZM14.3702 16.2707C13.3249 16.2707 12.48 15.4252 12.48 14.379C12.48 13.3328 13.3249 12.4873 14.3702 12.4873H19.1099C20.1552 12.4873 21 13.3328 21 14.379C21 15.4252 20.1552 16.2707 19.1099 16.2707H14.3702Z\"\n fill=\"black\"\n />\n </svg>\n);\n\nconst SlackIconWhite: React.FC<Omit<SlackIconProps, 'variant'>> = ({\n size = 24,\n className,\n onClick,\n 'aria-label': ariaLabel,\n}) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n onClick={onClick}\n role={onClick ? 'button' : ariaLabel ? 'img' : 'presentation'}\n aria-label={ariaLabel}\n tabIndex={onClick ? 0 : undefined}\n onKeyDown={\n onClick\n ? (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onClick(e as unknown as React.MouseEvent<SVGSVGElement>);\n }\n }\n : undefined\n }\n >\n <path\n d=\"M6.79552 14.379C6.79552 15.4252 5.95068 16.2707 4.90538 16.2707C3.86007 16.2707 3.01523 15.4252 3.01523 14.379C3.01523 13.3328 3.86007 12.4873 4.90538 12.4873H6.79552V14.379ZM7.74059 14.379C7.74059 13.3328 8.58542 12.4873 9.63073 12.4873C10.676 12.4873 11.5209 13.3328 11.5209 14.379V19.1083C11.5209 20.1545 10.676 21 9.63073 21C8.58542 21 7.74059 20.1545 7.74059 19.1083V14.379Z\"\n fill=\"white\"\n />\n <path\n d=\"M9.62982 6.78342C8.58451 6.78342 7.73967 5.93788 7.73967 4.89171C7.73967 3.84554 8.58451 3 9.62982 3C10.6751 3 11.52 3.84554 11.52 4.89171V6.78342H9.62982ZM9.62982 7.7436C10.6751 7.7436 11.52 8.58914 11.52 9.63531C11.52 10.6815 10.6751 11.527 9.62982 11.527H4.89014C3.84484 11.527 3 10.6815 3 9.63531C3 8.58914 3.84484 7.7436 4.89014 7.7436H9.62982Z\"\n fill=\"white\"\n />\n <path\n d=\"M17.2054 9.63531C17.2054 8.58914 18.0502 7.7436 19.0955 7.7436C20.1408 7.7436 20.9857 8.58914 20.9857 9.63531C20.9857 10.6815 20.1408 11.527 19.0955 11.527H17.2054V9.63531ZM16.2603 9.63531C16.2603 10.6815 15.4155 11.527 14.3702 11.527C13.3249 11.527 12.48 10.6815 12.48 9.63531V4.89171C12.48 3.84554 13.3249 3 14.3702 3C15.4155 3 16.2603 3.84554 16.2603 4.89171V9.63531Z\"\n fill=\"white\"\n />\n <path\n d=\"M14.3702 17.2166C15.4155 17.2166 16.2603 18.0621 16.2603 19.1083C16.2603 20.1545 15.4155 21 14.3702 21C13.3249 21 12.48 20.1545 12.48 19.1083V17.2166H14.3702ZM14.3702 16.2707C13.3249 16.2707 12.48 15.4252 12.48 14.379C12.48 13.3328 13.3249 12.4873 14.3702 12.4873H19.1099C20.1552 12.4873 21 13.3328 21 14.379C21 15.4252 20.1552 16.2707 19.1099 16.2707H14.3702Z\"\n fill=\"white\"\n />\n </svg>\n);\n\nexport function SlackIcon({\n variant = 'colored',\n size = 24,\n className,\n onClick,\n 'aria-label': ariaLabel = 'Slack icon',\n}: SlackIconProps) {\n const iconProps = {\n size,\n className,\n onClick,\n 'aria-label': ariaLabel,\n };\n\n switch (variant) {\n case 'black':\n return <SlackIconBlack {...iconProps} />;\n case 'white':\n return <SlackIconWhite {...iconProps} />;\n default:\n return <SlackIconColored {...iconProps} />;\n }\n}\n\nSlackIcon.displayName = 'SlackIcon';\n","import { type SVGAttributes, useId } from 'react';\n\nexport type TelegramIconVariant = 'colored' | 'black' | 'white';\n\nexport interface TelegramIconProps extends Omit<SVGAttributes<SVGSVGElement>, 'viewBox' | 'xmlns'> {\n /**\n * Visual variant of the icon\n * - colored: Telegram brand colors (blue gradient)\n * - black: Solid black\n * - white: Solid white\n */\n variant?: TelegramIconVariant;\n /**\n * Size of the icon in pixels\n */\n size?: number;\n /**\n * Additional CSS class name\n */\n className?: string;\n /**\n * Accessible label for the icon\n * Required for interactive icons, optional for decorative\n */\n 'aria-label'?: string;\n /**\n * Whether the icon is decorative (hidden from screen readers)\n */\n 'aria-hidden'?: boolean;\n /**\n * Click handler for interactive icons\n */\n onClick?: () => void;\n}\n\n/**\n * Telegram brand icon component with three variants\n *\n * Features:\n * - Three variants: colored (gradient), black, and white\n * - Customizable size (default 24px)\n * - Accessible with proper ARIA attributes\n * - Works as both decorative and interactive elements\n * - Inline SVG for optimal performance\n *\n * @example\n * // Colored variant (default)\n * <TelegramIcon />\n *\n * @example\n * // Black variant with custom size\n * <TelegramIcon variant=\"black\" size={32} />\n *\n * @example\n * // Interactive icon with click handler\n * <TelegramIcon\n * onClick={handleClick}\n * aria-label=\"Share on Telegram\"\n * style={{ cursor: 'pointer' }}\n * />\n *\n * @example\n * // Decorative icon (hidden from screen readers)\n * <TelegramIcon aria-hidden=\"true\" />\n */\nexport function TelegramIcon({\n variant = 'colored',\n size = 24,\n className,\n 'aria-label': ariaLabel,\n 'aria-hidden': ariaHidden,\n onClick,\n ...svgProps\n}: TelegramIconProps) {\n // Generate unique ID for gradient to avoid conflicts when multiple icons are rendered\n const gradientId = useId();\n\n // Determine if icon is interactive\n const isInteractive = !!onClick;\n\n // Set appropriate ARIA attributes\n const ariaAttributes = {\n 'aria-label': ariaLabel,\n 'aria-hidden': ariaHidden !== undefined ? ariaHidden : !ariaLabel && !isInteractive,\n role: isInteractive ? 'button' : undefined,\n tabIndex: isInteractive ? 0 : undefined,\n };\n\n // Handle keyboard interaction for interactive icons\n const handleKeyDown = (event: React.KeyboardEvent<SVGSVGElement>) => {\n if (isInteractive && (event.key === 'Enter' || event.key === ' ')) {\n event.preventDefault();\n onClick?.();\n }\n };\n\n const commonProps = {\n width: size,\n height: size,\n viewBox: '0 0 20 20',\n fill: 'none',\n xmlns: 'http://www.w3.org/2000/svg',\n className,\n onClick,\n onKeyDown: isInteractive ? handleKeyDown : undefined,\n ...ariaAttributes,\n ...svgProps,\n };\n\n // Colored variant (Telegram brand gradient)\n if (variant === 'colored') {\n return (\n <svg {...commonProps}>\n <path\n d=\"M18 10C18 14.4183 14.4183 18 10 18C5.58172 18 2 14.4183 2 10C2 5.58172 5.58172 2 10 2C14.4183 2 18 5.58172 18 10Z\"\n fill=\"white\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M20 10C20 15.5228 15.5228 20 10 20C4.47715 20 0 15.5228 0 10C0 4.47715 4.47715 0 10 0C15.5228 0 20 4.47715 20 10ZM10.3583 7.38245C9.38569 7.78701 7.44176 8.62434 4.52656 9.89445C4.05318 10.0827 3.8052 10.2669 3.78262 10.4469C3.74447 10.7513 4.12558 10.8711 4.64454 11.0343C4.71513 11.0565 4.78828 11.0795 4.86326 11.1039C5.37385 11.2698 6.06067 11.464 6.41772 11.4717C6.7416 11.4787 7.10309 11.3452 7.50218 11.0711C10.2259 9.23251 11.632 8.30319 11.7202 8.28315C11.7825 8.26902 11.8688 8.25125 11.9273 8.30322C11.9858 8.35519 11.98 8.45361 11.9738 8.48002C11.9361 8.64096 10.4401 10.0318 9.66592 10.7515C9.42457 10.9759 9.25338 11.135 9.21838 11.1714C9.13998 11.2528 9.06009 11.3298 8.9833 11.4039C8.50895 11.8611 8.15324 12.204 9.00299 12.764C9.41134 13.0331 9.7381 13.2556 10.0641 13.4776C10.4201 13.7201 10.7752 13.9619 11.2347 14.2631C11.3517 14.3398 11.4635 14.4195 11.5724 14.4971C11.9867 14.7925 12.3589 15.0579 12.8188 15.0155C13.086 14.991 13.362 14.7397 13.5022 13.9903C13.8335 12.2193 14.4847 8.38206 14.6352 6.80082C14.6483 6.66229 14.6318 6.48499 14.6184 6.40716C14.6051 6.32932 14.5773 6.21843 14.4761 6.13634C14.3563 6.03912 14.1713 6.01862 14.0886 6.02008C13.7125 6.0267 13.1354 6.22736 10.3583 7.38245Z\"\n fill={`url(#${gradientId})`}\n />\n <defs>\n <linearGradient\n id={gradientId}\n x1=\"20\"\n y1=\"-1.19209e-06\"\n x2=\"1.19209e-06\"\n y2=\"20\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#29AAEB\" />\n <stop offset=\"1\" stopColor=\"#23A0DC\" />\n </linearGradient>\n </defs>\n </svg>\n );\n }\n\n // Black variant\n if (variant === 'black') {\n return (\n <svg {...commonProps}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M20 10C20 15.5228 15.5228 20 10 20C4.47715 20 0 15.5228 0 10C0 4.47715 4.47715 0 10 0C15.5228 0 20 4.47715 20 10ZM10.3583 7.38245C9.38569 7.78701 7.44176 8.62434 4.52656 9.89445C4.05318 10.0827 3.8052 10.2669 3.78262 10.4469C3.74447 10.7513 4.12558 10.8711 4.64454 11.0343C4.71513 11.0565 4.78828 11.0795 4.86326 11.1039C5.37385 11.2698 6.06067 11.464 6.41772 11.4717C6.7416 11.4787 7.10309 11.3452 7.50218 11.0711C10.2259 9.23251 11.632 8.30319 11.7202 8.28315C11.7825 8.26902 11.8688 8.25125 11.9273 8.30322C11.9858 8.35519 11.98 8.45361 11.9738 8.48002C11.9361 8.64096 10.4401 10.0318 9.66592 10.7515C9.42457 10.9759 9.25338 11.135 9.21838 11.1714C9.13998 11.2528 9.06009 11.3298 8.9833 11.4039C8.50895 11.8611 8.15324 12.204 9.00299 12.764C9.41134 13.0331 9.7381 13.2556 10.0641 13.4776C10.4201 13.7201 10.7752 13.9619 11.2347 14.2631C11.3517 14.3398 11.4635 14.4195 11.5724 14.4971C11.9867 14.7925 12.3589 15.0579 12.8188 15.0155C13.086 14.991 13.362 14.7397 13.5022 13.9903C13.8335 12.2193 14.4847 8.38206 14.6352 6.80082C14.6483 6.66229 14.6318 6.48499 14.6184 6.40716C14.6051 6.32932 14.5773 6.21843 14.4761 6.13634C14.3563 6.03912 14.1713 6.01862 14.0886 6.02008C13.7125 6.0267 13.1354 6.22736 10.3583 7.38245Z\"\n fill=\"black\"\n />\n </svg>\n );\n }\n\n // White variant\n return (\n <svg {...commonProps}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M20 10C20 15.5228 15.5228 20 10 20C4.47715 20 0 15.5228 0 10C0 4.47715 4.47715 0 10 0C15.5228 0 20 4.47715 20 10ZM10.3583 7.38245C9.38569 7.78701 7.44176 8.62434 4.52656 9.89445C4.05318 10.0827 3.8052 10.2669 3.78262 10.4469C3.74447 10.7513 4.12558 10.8711 4.64454 11.0343C4.71513 11.0565 4.78828 11.0795 4.86326 11.1039C5.37385 11.2698 6.06067 11.464 6.41772 11.4717C6.7416 11.4787 7.10309 11.3452 7.50218 11.0711C10.2259 9.23251 11.632 8.30319 11.7202 8.28315C11.7825 8.26902 11.8688 8.25125 11.9273 8.30322C11.9858 8.35519 11.98 8.45361 11.9738 8.48002C11.9361 8.64096 10.4401 10.0318 9.66592 10.7515C9.42457 10.9759 9.25338 11.135 9.21838 11.1714C9.13998 11.2528 9.06009 11.3298 8.9833 11.4039C8.50895 11.8611 8.15324 12.204 9.00299 12.764C9.41134 13.0331 9.7381 13.2556 10.0641 13.4776C10.4201 13.7201 10.7752 13.9619 11.2347 14.2631C11.3517 14.3398 11.4635 14.4195 11.5724 14.4971C11.9867 14.7925 12.3589 15.0579 12.8188 15.0155C13.086 14.991 13.362 14.7397 13.5022 13.9903C13.8335 12.2193 14.4847 8.38206 14.6352 6.80082C14.6483 6.66229 14.6318 6.48499 14.6184 6.40716C14.6051 6.32932 14.5773 6.21843 14.4761 6.13634C14.3563 6.03912 14.1713 6.01862 14.0886 6.02008C13.7125 6.0267 13.1354 6.22736 10.3583 7.38245Z\"\n fill=\"white\"\n />\n </svg>\n );\n}\n\nTelegramIcon.displayName = 'TelegramIcon';\n","import type { SVGProps } from 'react';\n\nexport type WhatsAppIconVariant = 'colored' | 'black' | 'white';\n\nexport interface WhatsAppIconProps extends Omit<SVGProps<SVGSVGElement>, 'children'> {\n /**\n * Visual variant of the icon\n * - colored: Green WhatsApp brand color (#25D366) on white background\n * - black: Solid black icon\n * - white: Solid white icon\n * @default 'colored'\n */\n variant?: WhatsAppIconVariant;\n /**\n * Size of the icon in pixels\n * @default 24\n */\n size?: number;\n /**\n * Additional CSS class name\n */\n className?: string;\n /**\n * Accessible label for the icon\n * Required for interactive icons, optional for decorative ones\n */\n 'aria-label'?: string;\n /**\n * Whether the icon is decorative only (hidden from screen readers)\n * @default false\n */\n 'aria-hidden'?: boolean;\n /**\n * Click handler for interactive icons\n */\n onClick?: () => void;\n}\n\n/**\n * WhatsApp brand icon component with three visual variants.\n * Built with accessibility in mind - supports both decorative and interactive use cases.\n *\n * @example\n * ```tsx\n * // Decorative icon\n * <WhatsAppIcon variant=\"colored\" aria-hidden />\n *\n * // Interactive icon (button/link)\n * <WhatsAppIcon\n * variant=\"white\"\n * aria-label=\"Share on WhatsApp\"\n * onClick={handleShare}\n * />\n *\n * // Custom size\n * <WhatsAppIcon size={32} variant=\"black\" />\n * ```\n */\nexport function WhatsAppIcon({\n variant = 'colored',\n size = 24,\n className,\n 'aria-label': ariaLabel,\n 'aria-hidden': ariaHidden = false,\n onClick,\n ...svgProps\n}: WhatsAppIconProps) {\n const isInteractive = Boolean(onClick || svgProps.role === 'button');\n\n // Ensure accessibility: interactive icons must have a label\n const finalAriaLabel = isInteractive && !ariaLabel ? 'WhatsApp' : ariaLabel;\n const finalAriaHidden = isInteractive ? false : ariaHidden;\n\n const commonProps: SVGProps<SVGSVGElement> = {\n width: size,\n height: size,\n viewBox: '0 0 24 24',\n fill: 'none',\n xmlns: 'http://www.w3.org/2000/svg',\n className,\n 'aria-label': finalAriaLabel,\n 'aria-hidden': finalAriaHidden,\n onClick,\n role: isInteractive ? 'button' : undefined,\n tabIndex: isInteractive ? 0 : undefined,\n style: {\n cursor: isInteractive ? 'pointer' : undefined,\n ...svgProps.style,\n },\n ...svgProps,\n };\n\n // Colored variant: Green WhatsApp brand color on white background\n if (variant === 'colored') {\n return (\n // biome-ignore lint/a11y/noSvgWithoutTitle: aria-label and aria-hidden are handled via props\n <svg {...commonProps}>\n <path\n d=\"M16.6687 14.01C16.4678 13.9101 15.1616 13.3109 14.9607 13.211C14.7598 13.1111 14.5588 13.1111 14.3579 13.3109C14.157 13.5106 13.7551 14.1099 13.5542 14.3096C13.4536 14.5094 13.2527 14.5094 13.0518 14.4095C12.3484 14.1099 11.6452 13.7104 11.0424 13.211C10.54 12.7116 10.0376 12.1124 9.63577 11.5131C9.53529 11.3134 9.63577 11.1136 9.73623 11.0137C9.8367 10.9138 9.93717 10.7141 10.1381 10.6142C10.2386 10.5144 10.3391 10.3146 10.3391 10.2147C10.4395 10.1149 10.4395 9.91511 10.3391 9.81523C10.2386 9.71535 9.73623 8.51685 9.53529 8.01748C9.43482 7.31835 9.23388 7.31835 9.03294 7.31835C8.93247 7.31835 8.73153 7.31835 8.53059 7.31835C8.32964 7.31835 8.02823 7.51811 7.92776 7.61798C7.32494 8.21722 7.02353 8.91635 7.02353 9.71535C7.124 10.6142 7.42541 11.5131 8.02823 12.3121C9.13341 13.9101 10.54 15.2085 12.248 16.0075C12.7503 16.2073 13.1522 16.407 13.6546 16.5069C14.157 16.7066 14.6592 16.7066 15.2622 16.6067C15.9654 16.5069 16.5682 16.0075 16.9701 15.4083C17.1711 15.0087 17.1711 14.6093 17.0706 14.2097C17.0706 14.2097 16.8696 14.1099 16.6687 14.01ZM19.1805 4.92135C15.2622 1.02622 8.93247 1.02622 5.01412 4.92135C1.79906 8.11735 1.19624 13.0113 3.40659 16.9064L2 22L7.32494 20.6017C8.832 21.4007 10.4395 21.8003 12.0471 21.8003C17.573 21.8003 21.9937 17.4057 21.9937 11.9126C22.0941 9.31585 20.989 6.81898 19.1805 4.92135ZM16.4678 18.9039C15.1616 19.7029 13.6546 20.2023 12.0471 20.2023C10.54 20.2023 9.13341 19.8027 7.8273 19.1036L7.52588 18.9039L4.4113 19.7029L5.21506 16.7066L5.01412 16.407C2.60282 12.412 3.80847 7.41822 7.72682 4.92135C11.6452 2.42447 16.6687 3.72284 19.08 7.51811C21.4913 11.4133 20.3861 16.5069 16.4678 18.9039Z\"\n fill=\"white\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M16.4678 18.9039C15.1616 19.7029 13.6546 20.2023 12.0471 20.2023C10.54 20.2023 9.13341 19.8027 7.8273 19.1036L7.52588 18.9039L4.4113 19.7029L5.21506 16.7066L5.01412 16.407C2.60282 12.412 3.80847 7.41822 7.72682 4.92135C11.6452 2.42447 16.6687 3.72284 19.08 7.51811C21.4913 11.4133 20.3861 16.5069 16.4678 18.9039ZM14.9607 13.211C15.1616 13.3109 16.4678 13.9101 16.6687 14.01C16.8696 14.1099 17.0706 14.2097 17.0706 14.2097C17.1711 14.6093 17.1711 15.0087 16.9701 15.4083C16.5682 16.0075 15.9654 16.5069 15.2622 16.6067C14.6592 16.7066 14.157 16.7066 13.6546 16.5069C13.1522 16.407 12.7503 16.2073 12.248 16.0075C10.54 15.2085 9.13341 13.9101 8.02823 12.3121C7.42541 11.5131 7.124 10.6142 7.02353 9.71535C7.02353 8.91635 7.32494 8.21722 7.92776 7.61798C8.02823 7.51811 8.32964 7.31835 8.53059 7.31835H9.03294C9.23388 7.31835 9.43482 7.31835 9.53529 8.01748C9.73623 8.51685 10.2386 9.71535 10.3391 9.81523C10.4395 9.91511 10.4395 10.1149 10.3391 10.2147C10.3391 10.3146 10.2386 10.5144 10.1381 10.6142C9.93717 10.7141 9.8367 10.9138 9.73623 11.0137C9.63577 11.1136 9.53529 11.3134 9.63577 11.5131C10.0376 12.1124 10.54 12.7116 11.0424 13.211C11.6452 13.7104 12.3484 14.1099 13.0518 14.4095C13.2527 14.5094 13.4536 14.5094 13.5542 14.3096C13.7551 14.1099 14.157 13.5106 14.3579 13.3109C14.5588 13.1111 14.7598 13.1111 14.9607 13.211Z\"\n fill=\"#25D366\"\n />\n </svg>\n );\n }\n\n // Black variant: Solid black icon\n if (variant === 'black') {\n return (\n // biome-ignore lint/a11y/noSvgWithoutTitle: aria-label and aria-hidden are handled via props\n <svg {...commonProps}>\n <path\n d=\"M12.0419 2C6.5529 2 2.08581 6.446 2.08387 11.91C2.08258 13.6573 2.54194 15.3627 3.4129 16.8647L2 22L7.27935 20.622C8.74788 21.4158 10.3808 21.8298 12.0381 21.8287H12.0419C17.531 21.8287 21.9981 17.382 22 11.918C22.0013 9.27133 20.9665 6.78 19.0858 4.90733C17.2058 3.034 14.7058 2.00067 12.0419 2ZM12.0419 20.1547H12.0387C10.5535 20.1547 9.09677 19.7573 7.82581 19.0067L7.52258 18.828L4.39097 19.6453L5.2271 16.6053L5.03032 16.294C4.20381 14.9914 3.76383 13.4676 3.76452 11.91C3.76645 7.368 7.48 3.674 12.0452 3.674C14.2555 3.67467 16.3335 4.53267 17.8968 6.08933C19.46 7.646 20.32 9.716 20.3187 11.9173C20.3168 16.4593 16.6039 20.1547 12.0413 20.1547H12.0419ZM16.5819 13.9847C16.3329 13.8613 15.1097 13.262 14.8813 13.1787C14.6535 13.0967 14.4877 13.054 14.3219 13.302C14.1568 13.55 13.6794 14.108 13.5348 14.2727C13.389 14.438 13.2439 14.458 12.9948 14.3347C12.7458 14.2107 11.9439 13.9493 10.9942 13.1053C10.2542 12.4493 9.75484 11.6387 9.60968 11.39C9.46452 11.1427 9.59419 11.0087 9.71871 10.8853C9.83032 10.7753 9.96774 10.5967 10.0916 10.452C10.2155 10.3073 10.2568 10.204 10.3406 10.0387C10.4232 9.874 10.3819 9.72867 10.3194 9.60533C10.2568 9.48067 9.76 8.262 9.55161 7.76667C9.35032 7.284 9.14516 7.34867 8.99226 7.34067C8.8471 7.334 8.68193 7.332 8.51484 7.332C8.35032 7.332 8.08 7.394 7.85161 7.642C7.62387 7.89 6.98064 8.48867 6.98064 9.70733C6.98064 10.9267 7.87226 12.104 7.99677 12.2693C8.12129 12.434 9.75161 14.936 12.2477 16.0093C12.8413 16.2633 13.3045 16.416 13.6665 16.5307C14.2626 16.7193 14.8052 16.692 15.2335 16.6287C15.711 16.5573 16.7058 16.03 16.9123 15.452C17.12 14.874 17.12 14.378 17.0581 14.2747C16.9974 14.1713 16.831 14.1093 16.5819 13.9847Z\"\n fill=\"black\"\n />\n </svg>\n );\n }\n\n // White variant: Solid white icon\n return (\n // biome-ignore lint/a11y/noSvgWithoutTitle: aria-label and aria-hidden are handled via props\n <svg {...commonProps}>\n <path\n d=\"M12.0419 2C6.5529 2 2.08581 6.446 2.08387 11.91C2.08258 13.6573 2.54194 15.3627 3.4129 16.8647L2 22L7.27935 20.622C8.74788 21.4158 10.3808 21.8298 12.0381 21.8287H12.0419C17.531 21.8287 21.9981 17.382 22 11.918C22.0013 9.27133 20.9665 6.78 19.0858 4.90733C17.2058 3.034 14.7058 2.00067 12.0419 2ZM12.0419 20.1547H12.0387C10.5535 20.1547 9.09677 19.7573 7.82581 19.0067L7.52258 18.828L4.39097 19.6453L5.2271 16.6053L5.03032 16.294C4.20381 14.9914 3.76383 13.4676 3.76452 11.91C3.76645 7.368 7.48 3.674 12.0452 3.674C14.2555 3.67467 16.3335 4.53267 17.8968 6.08933C19.46 7.646 20.32 9.716 20.3187 11.9173C20.3168 16.4593 16.6039 20.1547 12.0413 20.1547H12.0419ZM16.5819 13.9847C16.3329 13.8613 15.1097 13.262 14.8813 13.1787C14.6535 13.0967 14.4877 13.054 14.3219 13.302C14.1568 13.55 13.6794 14.108 13.5348 14.2727C13.389 14.438 13.2439 14.458 12.9948 14.3347C12.7458 14.2107 11.9439 13.9493 10.9942 13.1053C10.2542 12.4493 9.75484 11.6387 9.60968 11.39C9.46452 11.1427 9.59419 11.0087 9.71871 10.8853C9.83032 10.7753 9.96774 10.5967 10.0916 10.452C10.2155 10.3073 10.2568 10.204 10.3406 10.0387C10.4232 9.874 10.3819 9.72867 10.3194 9.60533C10.2568 9.48067 9.76 8.262 9.55161 7.76667C9.35032 7.284 9.14516 7.34867 8.99226 7.34067C8.8471 7.334 8.68193 7.332 8.51484 7.332C8.35032 7.332 8.08 7.394 7.85161 7.642C7.62387 7.89 6.98064 8.48867 6.98064 9.70733C6.98064 10.9267 7.87226 12.104 7.99677 12.2693C8.12129 12.434 9.75161 14.936 12.2477 16.0093C12.8413 16.2633 13.3045 16.416 13.6665 16.5307C14.2626 16.7193 14.8052 16.692 15.2335 16.6287C15.711 16.5573 16.7058 16.03 16.9123 15.452C17.12 14.874 17.12 14.378 17.0581 14.2747C16.9974 14.1713 16.831 14.1093 16.5819 13.9847Z\"\n fill=\"white\"\n />\n </svg>\n );\n}\n\nWhatsAppIcon.displayName = 'WhatsAppIcon';\n","import styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\ninterface StyledXIconProps {\n $isInteractive?: boolean;\n}\n\nexport const StyledXIcon = styled.svg<StyledXIconProps>`\n display: inline-block;\n vertical-align: middle;\n flex-shrink: 0;\n\n ${({ $isInteractive, theme }) =>\n $isInteractive &&\n `\n cursor: pointer;\n transition: opacity 0.2s ease;\n\n &:hover {\n opacity: 0.8;\n }\n\n &:active {\n opacity: 0.6;\n }\n\n &:focus-visible {\n outline: 2px solid ${theme?.colors?.primary ?? '#007bff'};\n outline-offset: 2px;\n border-radius: ${tokens.borderRadius.sm};\n }\n `}\n`;\n","import type React from 'react';\nimport { StyledXIcon } from './XIcon.styles';\n\nexport type XIconVariant = 'colored' | 'black' | 'white';\n\nexport interface XIconProps {\n /**\n * The variant of the X icon to display\n * @default 'colored'\n */\n variant?: XIconVariant;\n /**\n * The size of the icon in pixels\n * @default 24\n */\n size?: number;\n /**\n * Additional CSS class name\n */\n className?: string;\n /**\n * Click handler for interactive icons\n */\n onClick?: (event: React.MouseEvent<SVGSVGElement>) => void;\n /**\n * Accessible label for the icon\n * If not provided and icon is interactive, defaults to \"X (formerly Twitter) icon\"\n */\n 'aria-label'?: string;\n /**\n * Whether the icon is purely decorative (will hide from screen readers)\n * @default false\n */\n decorative?: boolean;\n}\n\n// SVG path data for the X icon (same shape for all variants, only fill changes)\nconst X_PATH =\n 'M13.8593 10.4694L21.135 2.00513H19.4109L13.0935 9.35455L8.0477 2.00513H2.22803L9.85819 13.1188L2.22803 21.9949H3.95223L10.6236 14.2336L15.9523 21.9949H21.772L13.8589 10.4694H13.8593ZM11.4978 13.2167L10.7247 12.11L4.57348 3.30414H7.22176L12.1859 10.4108L12.959 11.5174L19.4117 20.7549H16.7635L11.4978 13.2171V13.2167Z';\n\n/**\n * XIcon component - Displays the X (formerly Twitter) icon with three variants\n *\n * This component renders the X social media icon with support for colored (black),\n * explicit black, and white variants. It's fully accessible and can be used as both\n * a decorative element and an interactive button.\n *\n * @example\n * ```tsx\n * // Colored variant (default, black)\n * <XIcon />\n *\n * // White variant for dark backgrounds\n * <XIcon variant=\"white\" size={32} />\n *\n * // Interactive icon with click handler\n * <XIcon\n * variant=\"colored\"\n * onClick={() => window.open('https://x.com/yourhandle')}\n * aria-label=\"Visit our X profile\"\n * />\n *\n * // Decorative icon (hidden from screen readers)\n * <XIcon decorative />\n * ```\n */\nexport function XIcon({\n variant = 'colored',\n size = 24,\n className,\n onClick,\n 'aria-label': ariaLabel,\n decorative = false,\n}: XIconProps) {\n // Determine the fill color based on variant\n const getFillColor = () => {\n switch (variant) {\n case 'white':\n return 'white';\n case 'black':\n return '#121619';\n default:\n return 'black';\n }\n };\n\n // If interactive but no aria-label provided, use default\n const accessibilityProps = decorative\n ? {\n 'aria-hidden': true,\n role: 'presentation',\n }\n : {\n 'aria-label': ariaLabel || 'X (formerly Twitter) icon',\n role: onClick ? 'button' : 'img',\n };\n\n return (\n <StyledXIcon\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n onClick={onClick}\n $isInteractive={!!onClick}\n {...accessibilityProps}\n >\n <path d={X_PATH} fill={getFillColor()} />\n </StyledXIcon>\n );\n}\n\nXIcon.displayName = 'XIcon';\n","import type React from 'react';\n\nexport type YouTubeIconVariant = 'colored' | 'black' | 'white';\n\nexport interface YouTubeIconProps {\n variant?: YouTubeIconVariant;\n size?: number;\n className?: string;\n onClick?: () => void;\n 'aria-label'?: string;\n}\n\nexport function YouTubeIcon({\n variant = 'colored',\n size = 24,\n className,\n onClick,\n 'aria-label': ariaLabel,\n}: YouTubeIconProps) {\n const role = onClick ? 'button' : 'img';\n const tabIndex = onClick ? 0 : undefined;\n const cursor = onClick ? 'pointer' : undefined;\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (onClick && (e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault();\n onClick();\n }\n };\n\n // Colored variant (red YouTube color)\n if (variant === 'colored') {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n onClick={onClick}\n onKeyDown={handleKeyDown}\n role={role}\n aria-label={ariaLabel || 'YouTube'}\n tabIndex={tabIndex}\n style={{ cursor }}\n >\n <path\n d=\"M21.8008 7.7366C21.8008 7.7366 21.6055 6.26618 21.0039 5.62052C20.2422 4.77076 19.3906 4.76659 19 4.71661C16.2031 4.5 12.0039 4.5 12.0039 4.5H11.9961C11.9961 4.5 7.79688 4.5 5 4.71661C4.60938 4.76659 3.75781 4.77076 2.99609 5.62052C2.39453 6.26618 2.20312 7.7366 2.20312 7.7366C2.20312 7.7366 2 9.46529 2 11.1898V12.806C2 14.5305 2.19922 16.2592 2.19922 16.2592C2.19922 16.2592 2.39453 17.7297 2.99219 18.3753C3.75391 19.2251 4.75391 19.1959 5.19922 19.2876C6.80078 19.45 12 19.5 12 19.5C12 19.5 16.2031 19.4917 19 19.2792C19.3906 19.2292 20.2422 19.2251 21.0039 18.3753C21.6055 17.7297 21.8008 16.2592 21.8008 16.2592C21.8008 16.2592 22 14.5347 22 12.806V11.1898C22 9.46529 21.8008 7.7366 21.8008 7.7366Z\"\n fill=\"white\"\n />\n <path\n d=\"M21.8008 7.7366C21.8008 7.7366 21.6055 6.26618 21.0039 5.62052C20.2422 4.77076 19.3906 4.76659 19 4.71661C16.2031 4.5 12.0039 4.5 12.0039 4.5H11.9961C11.9961 4.5 7.79688 4.5 5 4.71661C4.60938 4.76659 3.75781 4.77076 2.99609 5.62052C2.39453 6.26618 2.20312 7.7366 2.20312 7.7366C2.20312 7.7366 2 9.46529 2 11.1898V12.806C2 14.5305 2.19922 16.2592 2.19922 16.2592C2.19922 16.2592 2.39453 17.7297 2.99219 18.3753C3.75391 19.2251 4.75391 19.1959 5.19922 19.2876C6.80078 19.45 12 19.5 12 19.5C12 19.5 16.2031 19.4917 19 19.2792C19.3906 19.2292 20.2422 19.2251 21.0039 18.3753C21.6055 17.7297 21.8008 16.2592 21.8008 16.2592C21.8008 16.2592 22 14.5347 22 12.806V11.1898C22 9.46529 21.8008 7.7366 21.8008 7.7366ZM9.93359 14.768V8.77381L15.3359 11.7813L9.93359 14.768Z\"\n fill=\"#FE0000\"\n />\n </svg>\n );\n }\n\n // Black variant\n if (variant === 'black') {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n onClick={onClick}\n onKeyDown={handleKeyDown}\n role={role}\n aria-label={ariaLabel || 'YouTube'}\n tabIndex={tabIndex}\n style={{ cursor }}\n >\n <path\n d=\"M21.8008 7.7366C21.8008 7.7366 21.6055 6.26618 21.0039 5.62052C20.2422 4.77076 19.3906 4.76659 19 4.71661C16.2031 4.5 12.0039 4.5 12.0039 4.5H11.9961C11.9961 4.5 7.79688 4.5 5 4.71661C4.60938 4.76659 3.75781 4.77076 2.99609 5.62052C2.39453 6.26618 2.20312 7.7366 2.20312 7.7366C2.20312 7.7366 2 9.46529 2 11.1898V12.806C2 14.5305 2.19922 16.2592 2.19922 16.2592C2.19922 16.2592 2.39453 17.7297 2.99219 18.3753C3.75391 19.2251 4.75391 19.1959 5.19922 19.2876C6.80078 19.45 12 19.5 12 19.5C12 19.5 16.2031 19.4917 19 19.2792C19.3906 19.2292 20.2422 19.2251 21.0039 18.3753C21.6055 17.7297 21.8008 16.2592 21.8008 16.2592C21.8008 16.2592 22 14.5347 22 12.806V11.1898C22 9.46529 21.8008 7.7366 21.8008 7.7366ZM9.93359 14.768V8.77381L15.3359 11.7813L9.93359 14.768Z\"\n fill=\"black\"\n />\n </svg>\n );\n }\n\n // White variant\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n onClick={onClick}\n onKeyDown={handleKeyDown}\n role={role}\n aria-label={ariaLabel || 'YouTube'}\n tabIndex={tabIndex}\n style={{ cursor }}\n >\n <path\n d=\"M21.8008 7.7366C21.8008 7.7366 21.6055 6.26618 21.0039 5.62052C20.2422 4.77076 19.3906 4.76659 19 4.71661C16.2031 4.5 12.0039 4.5 12.0039 4.5H11.9961C11.9961 4.5 7.79688 4.5 5 4.71661C4.60938 4.76659 3.75781 4.77076 2.99609 5.62052C2.39453 6.26618 2.20312 7.7366 2.20312 7.7366C2.20312 7.7366 2 9.46529 2 11.1898V12.806C2 14.5305 2.19922 16.2592 2.19922 16.2592C2.19922 16.2592 2.39453 17.7297 2.99219 18.3753C3.75391 19.2251 4.75391 19.1959 5.19922 19.2876C6.80078 19.45 12 19.5 12 19.5C12 19.5 16.2031 19.4917 19 19.2792C19.3906 19.2292 20.2422 19.2251 21.0039 18.3753C21.6055 17.7297 21.8008 16.2592 21.8008 16.2592C21.8008 16.2592 22 14.5347 22 12.806V11.1898C22 9.46529 21.8008 7.7366 21.8008 7.7366ZM9.93359 14.768V8.77381L15.3359 11.7813L9.93359 14.768Z\"\n fill=\"white\"\n />\n </svg>\n );\n}\n\nYouTubeIcon.displayName = 'YouTubeIcon';\n","/**\n * Social Media Constants\n *\n * Platform configurations and progress category settings.\n */\n\nimport { tokens } from '../../theme/tokens';\nimport { FacebookIcon, InstagramIcon, LinkedInIcon, XIcon, YouTubeIcon } from '../icons';\nimport type { CategoryConfig, Platform, PlatformConfig, ProgressCategory } from './types';\n\n// =============================================================================\n// Platform Configurations\n// =============================================================================\n\nexport const PLATFORM_CONFIGS: Record<Platform, PlatformConfig> = {\n x: {\n icon: <XIcon variant=\"white\" size={20} />,\n color: tokens.colors.text.primary,\n bgColor: tokens.colors.platform.x,\n maxChars: 280,\n name: 'X (Twitter)',\n description: 'Concise, punchy posts with 1-2 hashtags',\n },\n linkedin: {\n icon: <LinkedInIcon variant=\"colored\" size={20} />,\n color: tokens.colors.platform.linkedin,\n bgColor: '#f3f6f8',\n maxChars: 3000,\n name: 'LinkedIn',\n description: 'Professional, thought-leadership content',\n },\n instagram: {\n icon: <InstagramIcon variant=\"colored\" size={20} />,\n color: tokens.colors.platform.instagram,\n bgColor: '#fafafa',\n maxChars: 2200,\n name: 'Instagram',\n description: 'Visual storytelling with 5-10 hashtags',\n },\n facebook: {\n icon: <FacebookIcon variant=\"colored\" size={20} />,\n color: tokens.colors.platform.facebook,\n bgColor: '#f0f2f5',\n maxChars: 63206,\n name: 'Facebook',\n description: 'Conversational, community-focused',\n },\n youtube: {\n icon: <YouTubeIcon variant=\"colored\" size={20} />,\n color: tokens.colors.platform.youtube,\n bgColor: '#f9f9f9',\n maxChars: 5000,\n name: 'YouTube',\n description: 'SEO-friendly descriptions with keywords',\n },\n};\n\n// =============================================================================\n// Progress Category Configurations\n// =============================================================================\n\nexport const CATEGORY_CONFIGS: Record<ProgressCategory, CategoryConfig> = {\n notion: { icon: '\\uD83D\\uDCD3', label: 'Notion', color: 'bg-gray-500' },\n setup: { icon: '\\u2699\\uFE0F', label: 'Setup', color: 'bg-blue-500' },\n integration: {\n icon: '\\uD83D\\uDD17',\n label: 'Connections',\n color: 'bg-purple-500',\n },\n generation: {\n icon: '\\uD83E\\uDD16',\n label: 'Generating',\n color: 'bg-green-500',\n },\n image: { icon: '\\uD83D\\uDDBC\\uFE0F', label: 'Image', color: 'bg-pink-500' },\n scheduling: {\n icon: '\\uD83D\\uDCE4',\n label: 'Scheduling',\n color: 'bg-orange-500',\n },\n completion: {\n icon: '\\u2705',\n label: 'Done',\n color: 'bg-emerald-500',\n },\n processing: {\n icon: '\\u2699\\uFE0F',\n label: 'Processing',\n color: 'bg-blue-500',\n },\n custom: {\n icon: '\\uD83D\\uDD27',\n label: 'Custom',\n color: 'bg-gray-500',\n },\n};\n\n// =============================================================================\n// Helper Functions\n// =============================================================================\n\n/**\n * Categorize a progress message into a ProgressCategory\n * Handles undefined/null message gracefully\n */\nexport function categorizeProgress(message: string | undefined | null): ProgressCategory {\n if (!message) return 'setup';\n if (message.includes('Notion')) return 'notion';\n if (message.includes('prompts') || message.includes('Loading')) return 'setup';\n if (message.includes('accounts') || message.includes('Fetching connected')) return 'integration';\n if (message.includes('Generating') || message.includes('Generated')) return 'generation';\n if (message.toLowerCase().includes('image')) return 'image';\n if (message.includes('Scheduling')) return 'scheduling';\n if (message.includes('updated') || message.includes('Updating')) return 'completion';\n return 'setup';\n}\n\n/**\n * Get the icon for a progress category (with fallback for unknown categories)\n */\nexport function getCategoryIcon(category: ProgressCategory): string {\n return CATEGORY_CONFIGS[category]?.icon ?? '\\u2699\\uFE0F';\n}\n\n/**\n * Get the color class for a progress category (with fallback for unknown categories)\n */\nexport function getCategoryColor(category: ProgressCategory): string {\n return CATEGORY_CONFIGS[category]?.color ?? 'bg-gray-500';\n}\n\n/**\n * Normalize platform name (e.g., 'twitter' -> 'x')\n * Handles undefined/null platform gracefully\n */\nexport function normalizePlatform(platform: string | undefined | null): Platform | null {\n if (!platform) return null;\n const normalized = platform.toLowerCase();\n if (normalized === 'twitter') return 'x';\n if (Object.keys(PLATFORM_CONFIGS).includes(normalized)) {\n return normalized as Platform;\n }\n return null;\n}\n\n/**\n * Calculate character count including hashtags\n */\nexport function getCharacterCount(content: string, hashtags: string[]): number {\n const hashtagString =\n hashtags.length > 0 ? ` ${hashtags.map((h) => `#${h.replace(/^#/, '')}`).join(' ')}` : '';\n return (content + hashtagString).length;\n}\n\n/**\n * Check if content is within platform character limit\n */\nexport function isWithinCharLimit(platform: Platform, characterCount: number): boolean {\n const config = PLATFORM_CONFIGS[platform] || PLATFORM_CONFIGS.x;\n return characterCount <= config.maxChars;\n}\n\n/**\n * Get character limit percentage (for progress bar)\n */\nexport function getCharacterLimitPercentage(platform: Platform, characterCount: number): number {\n const config = PLATFORM_CONFIGS[platform] || PLATFORM_CONFIGS.x;\n return Math.min(100, (characterCount / config.maxChars) * 100);\n}\n\n/**\n * Get color for character limit indicator based on percentage\n */\nexport function getCharacterLimitColor(percentage: number): string {\n if (percentage > 100) return 'bg-red-500';\n if (percentage > 80) return 'bg-yellow-500';\n return 'bg-green-500';\n}\n","/**\n * PostApprovalControls Component\n *\n * Separate component for managing post approval state and actions.\n * Renders as a collapsible card underneath the post preview.\n * Handles: status display, editing, approve/reject actions.\n */\n\nimport type React from 'react';\nimport { useMemo, useState } from 'react';\nimport styled from 'styled-components';\nimport { tokens } from '../../theme/tokens';\nimport { getCharacterLimitColor, getCharacterLimitPercentage, PLATFORM_CONFIGS } from './constants';\nimport type { ApprovalStatus, Platform } from './types';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface PostApprovalControlsProps {\n /** Platform for character limit validation */\n platform: Platform;\n /** Original content from the post */\n originalContent: string;\n /** Previously saved edited content (persisted from onSave) */\n editedContent?: string;\n /** Current approval status */\n status: ApprovalStatus;\n /** Error message if status is 'failed' */\n error?: string;\n /** Post ID if scheduled */\n postId?: string;\n /** Callback when user saves edits (without approving) */\n onSave?: (content: string) => void;\n /** Callback when user approves (receives final content) */\n onApprove: (content: string) => void;\n /** Callback when user rejects */\n onReject: () => void;\n /** Whether actions are disabled (e.g., during API call) */\n isLoading?: boolean;\n /** Initially collapsed state */\n defaultCollapsed?: boolean;\n}\n\n// =============================================================================\n// Status Labels\n// =============================================================================\n\nconst STATUS_CONFIG: Record<ApprovalStatus, { label: string; color: string }> = {\n pending: { label: 'Pending Review', color: tokens.colors.warning },\n edited: { label: 'Edited', color: tokens.colors.accent },\n approved: { label: 'Approved', color: tokens.colors.success },\n scheduling: { label: 'Scheduling...', color: tokens.colors.primary },\n scheduled: { label: 'Scheduled', color: tokens.colors.success },\n rejected: { label: 'Rejected', color: tokens.colors.error },\n failed: { label: 'Failed', color: tokens.colors.error },\n};\n\n// =============================================================================\n// Component\n// =============================================================================\n\nexport const PostApprovalControls: React.FC<PostApprovalControlsProps> = ({\n platform,\n originalContent,\n editedContent,\n status,\n error,\n postId,\n onSave,\n onApprove,\n onReject,\n isLoading = false,\n defaultCollapsed = false,\n}) => {\n const [isCollapsed, setIsCollapsed] = useState(defaultCollapsed);\n const [isEditing, setIsEditing] = useState(false);\n // Use editedContent if available, otherwise originalContent\n const [localEditContent, setLocalEditContent] = useState(editedContent ?? originalContent);\n\n const platformConfig = PLATFORM_CONFIGS[platform];\n const statusConfig = STATUS_CONFIG[status];\n\n // The current content to display (saved edits take precedence)\n const currentContent = editedContent ?? originalContent;\n\n // Character count for editing or display\n const currentCharCount = isEditing ? localEditContent.length : currentContent.length;\n const charPercentage = useMemo(\n () => getCharacterLimitPercentage(platform, currentCharCount),\n [platform, currentCharCount]\n );\n const charLimitColorClass = useMemo(\n () => getCharacterLimitColor(charPercentage),\n [charPercentage]\n );\n\n // Can take action only if pending or edited\n const canTakeAction = status === 'pending' || status === 'edited';\n const isProcessing = status === 'scheduling' || isLoading;\n\n const handleStartEdit = () => {\n // Start editing from current content (edited or original)\n setLocalEditContent(currentContent);\n setIsEditing(true);\n setIsCollapsed(false);\n };\n\n const handleCancelEdit = () => {\n setIsEditing(false);\n // Reset to current saved content\n setLocalEditContent(currentContent);\n };\n\n const handleSave = () => {\n // Save the edited content without approving\n onSave?.(localEditContent);\n setIsEditing(false);\n };\n\n const handleApprove = () => {\n // Approve with either the local edit (if editing) or the current saved content\n onApprove(isEditing ? localEditContent : currentContent);\n setIsEditing(false);\n };\n\n // Check if content has been modified from current saved state\n const hasUnsavedChanges = isEditing && localEditContent !== currentContent;\n\n return (\n <Container data-testid=\"post-approval-controls\">\n {/* Header - always visible */}\n <Header onClick={() => !isEditing && setIsCollapsed(!isCollapsed)}>\n <StatusBadge $color={statusConfig.color}>{statusConfig.label}</StatusBadge>\n <MetaInfo>\n {postId && <PostId>ID: {postId}</PostId>}\n {error && <ErrorText>{error}</ErrorText>}\n </MetaInfo>\n {canTakeAction && !isEditing && (\n <CollapseIcon $collapsed={isCollapsed}>{isCollapsed ? '▸' : '▾'}</CollapseIcon>\n )}\n </Header>\n\n {/* Content - collapsible */}\n {!isCollapsed && canTakeAction && (\n <Content>\n {isEditing ? (\n <>\n <EditSection>\n <EditLabel>\n Edit content\n <CharCount $colorClass={charLimitColorClass}>\n {currentCharCount}/{platformConfig.maxChars}\n </CharCount>\n </EditLabel>\n <EditTextarea\n value={localEditContent}\n onChange={(e) => setLocalEditContent(e.target.value)}\n placeholder=\"Enter your post content...\"\n $platformColor={platformConfig.color}\n disabled={isProcessing}\n />\n <ProgressBar>\n <ProgressFill\n $percentage={Math.min(charPercentage, 100)}\n $colorClass={charLimitColorClass}\n />\n </ProgressBar>\n </EditSection>\n <Actions>\n <ActionButton $variant=\"cancel\" onClick={handleCancelEdit} disabled={isProcessing}>\n Cancel\n </ActionButton>\n {onSave && (\n <ActionButton\n $variant=\"save\"\n onClick={handleSave}\n disabled={isProcessing || charPercentage > 100 || !hasUnsavedChanges}\n >\n {isProcessing ? 'Saving...' : 'Save'}\n </ActionButton>\n )}\n <ActionButton\n $variant=\"approve\"\n onClick={handleApprove}\n disabled={isProcessing || charPercentage > 100}\n >\n {isProcessing ? 'Processing...' : 'Approve'}\n </ActionButton>\n </Actions>\n </>\n ) : (\n <Actions>\n <ActionButton $variant=\"reject\" onClick={onReject} disabled={isProcessing}>\n Reject\n </ActionButton>\n <ActionButton $variant=\"edit\" onClick={handleStartEdit} disabled={isProcessing}>\n Edit\n </ActionButton>\n <ActionButton $variant=\"approve\" onClick={handleApprove} disabled={isProcessing}>\n {isProcessing ? 'Processing...' : 'Approve'}\n </ActionButton>\n </Actions>\n )}\n </Content>\n )}\n </Container>\n );\n};\n\nPostApprovalControls.displayName = 'PostApprovalControls';\n\n// =============================================================================\n// Styled Components\n// =============================================================================\n\nconst Container = styled.div`\n display: grid;\n gap: 0;\n background: ${tokens.colors.background.dark};\n border-radius: ${tokens.borderRadius.lg};\n border: 1px solid ${tokens.colors.border.default};\n overflow: hidden;\n font-family: ${tokens.typography.fontFamily.primary};\n transition: border-color ${tokens.transitions.fast};\n`;\n\nconst Header = styled.div`\n display: grid;\n grid-template-columns: auto 1fr auto;\n align-items: center;\n gap: ${tokens.spacing.sm};\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n cursor: pointer;\n user-select: none;\n transition: background ${tokens.transitions.fast};\n\n &:hover {\n background: ${tokens.colors.background.light};\n }\n`;\n\nconst StatusBadge = styled.span<{ $color: string }>`\n padding: ${tokens.spacing.xs} ${tokens.spacing.sm};\n border-radius: ${tokens.borderRadius.sm};\n font-size: ${tokens.typography.fontSize.xs};\n font-weight: ${tokens.typography.fontWeight.semibold};\n text-transform: uppercase;\n letter-spacing: 0.5px;\n background: ${({ $color }) => `${$color}20`};\n color: ${({ $color }) => $color};\n white-space: nowrap;\n`;\n\nconst MetaInfo = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.sm};\n min-width: 0;\n`;\n\nconst PostId = styled.span`\n font-size: ${tokens.typography.fontSize.xs};\n color: ${tokens.colors.text.tertiary};\n font-family: ${tokens.typography.fontFamily.monospace};\n`;\n\nconst ErrorText = styled.span`\n font-size: ${tokens.typography.fontSize.xs};\n color: ${tokens.colors.error};\n line-height: ${tokens.typography.lineHeight.tight};\n`;\n\nconst CollapseIcon = styled.span<{ $collapsed: boolean }>`\n font-size: ${tokens.typography.fontSize.sm};\n color: ${tokens.colors.text.tertiary};\n font-weight: ${tokens.typography.fontWeight.medium};\n width: 20px;\n height: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n`;\n\nconst Content = styled.div`\n display: grid;\n gap: ${tokens.spacing.md};\n padding: ${tokens.spacing.md};\n border-top: 1px solid ${tokens.colors.border.default};\n`;\n\nconst EditSection = styled.div`\n display: grid;\n gap: ${tokens.spacing.xs};\n`;\n\nconst EditLabel = styled.label`\n display: grid;\n grid-template-columns: 1fr auto;\n align-items: center;\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.text.secondary};\n line-height: ${tokens.typography.lineHeight.tight};\n`;\n\nconst CharCount = styled.span<{ $colorClass: string }>`\n font-size: ${tokens.typography.fontSize.xs};\n font-weight: ${tokens.typography.fontWeight.semibold};\n font-family: ${tokens.typography.fontFamily.monospace};\n color: ${({ $colorClass }) => {\n if ($colorClass.includes('red')) return tokens.colors.error;\n if ($colorClass.includes('yellow')) return tokens.colors.warning;\n return tokens.colors.success;\n }};\n`;\n\nconst EditTextarea = styled.textarea<{ $platformColor: string }>`\n width: 100%;\n min-height: 100px;\n padding: ${tokens.spacing.sm};\n font-size: ${tokens.typography.fontSize.sm};\n font-family: ${tokens.typography.fontFamily.primary};\n line-height: ${tokens.typography.lineHeight.normal};\n color: ${tokens.colors.text.primary};\n background: ${tokens.colors.background.darker};\n border: 1px solid ${tokens.colors.border.default};\n border-radius: ${tokens.borderRadius.md};\n resize: vertical;\n box-sizing: border-box;\n transition: border-color ${tokens.transitions.fast}, box-shadow ${tokens.transitions.fast};\n\n &:focus {\n outline: none;\n border-color: ${({ $platformColor }) => $platformColor};\n box-shadow: 0 0 0 2px ${({ $platformColor }) => `${$platformColor}20`};\n }\n\n &:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n }\n\n &::placeholder {\n color: ${tokens.colors.text.tertiary};\n }\n`;\n\nconst ProgressBar = styled.div`\n width: 100%;\n height: 3px;\n background: ${tokens.colors.border.default};\n border-radius: ${tokens.borderRadius.sm};\n overflow: hidden;\n`;\n\nconst ProgressFill = styled.div<{ $percentage: number; $colorClass: string }>`\n width: ${({ $percentage }) => $percentage}%;\n height: 100%;\n border-radius: ${tokens.borderRadius.sm};\n transition: width ${tokens.transitions.fast};\n background: ${({ $colorClass }) => {\n if ($colorClass.includes('red')) return tokens.colors.error;\n if ($colorClass.includes('yellow')) return tokens.colors.warning;\n return tokens.colors.success;\n }};\n`;\n\nconst Actions = styled.div`\n display: flex;\n gap: ${tokens.spacing.sm};\n justify-content: flex-end;\n`;\n\nconst ActionButton = styled.button<{\n $variant: 'approve' | 'reject' | 'edit' | 'cancel' | 'save';\n}>`\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n border-radius: ${tokens.borderRadius.md};\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.semibold};\n cursor: pointer;\n transition: background ${tokens.transitions.fast}, opacity ${tokens.transitions.fast};\n border: none;\n white-space: nowrap;\n min-width: 90px;\n text-align: center;\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n ${({ $variant }) => {\n switch ($variant) {\n case 'approve':\n return `\n background: ${tokens.colors.success};\n color: ${tokens.colors.background.darker};\n &:hover:not(:disabled) {\n background: ${tokens.colors.success};\n opacity: 0.9;\n }\n `;\n case 'save':\n return `\n background: ${tokens.colors.primary};\n color: ${tokens.colors.text.primary};\n &:hover:not(:disabled) {\n background: ${tokens.colors.primary};\n opacity: 0.9;\n }\n `;\n case 'reject':\n case 'cancel':\n return `\n background: ${tokens.colors.error}15;\n color: ${tokens.colors.error};\n border: 1px solid ${tokens.colors.error}30;\n &:hover:not(:disabled) {\n background: ${tokens.colors.error}25;\n }\n `;\n case 'edit':\n return `\n background: ${tokens.colors.background.light};\n color: ${tokens.colors.text.primary};\n border: 1px solid ${tokens.colors.border.default};\n &:hover:not(:disabled) {\n background: ${tokens.colors.surface.overlay};\n border-color: ${tokens.colors.border.hover};\n }\n `;\n default:\n return '';\n }\n }}\n`;\n\nexport default PostApprovalControls;\n","/**\n * PostPreviewCard Component\n *\n * Displays a preview of a social media post with platform branding.\n * This component is purely for content display - approval controls\n * should use the separate PostApprovalControls component.\n */\n\nimport type React from 'react';\nimport { useMemo, useState } from 'react';\nimport styled, { keyframes } from 'styled-components';\nimport { tokens } from '../../theme/tokens';\nimport { getCharacterLimitColor, getCharacterLimitPercentage, PLATFORM_CONFIGS } from './constants';\nimport type { ProposedPost } from './types';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface PostPreviewCardProps {\n post: ProposedPost;\n isActive?: boolean;\n /** Enable inline editing mode */\n isEditing?: boolean;\n /** Current edited content (controlled) */\n editContent?: string;\n /** Callback when content changes during editing */\n onContentChange?: (content: string) => void;\n /** Show loading skeleton when content is being generated */\n isLoading?: boolean;\n}\n\n// =============================================================================\n// Component\n// =============================================================================\n\nexport const PostPreviewCard: React.FC<PostPreviewCardProps> = ({\n post,\n isActive = false,\n isEditing = false,\n editContent,\n onContentChange,\n isLoading = false,\n}) => {\n const platformConfig = PLATFORM_CONFIGS[post.platform] || PLATFORM_CONFIGS.x;\n const [imageError, setImageError] = useState(false);\n\n // Determine if we should show skeleton (loading with no content)\n const showSkeleton = isLoading && !post.content;\n\n // Use editContent if editing, otherwise use post content\n const displayContent =\n isEditing && editContent !== undefined ? editContent : post.editedContent || post.content;\n\n // Character count should reflect current content being displayed\n const currentCharCount = displayContent.length;\n\n const charPercentage = useMemo(\n () => getCharacterLimitPercentage(post.platform, currentCharCount),\n [post.platform, currentCharCount]\n );\n\n const charLimitColorClass = useMemo(\n () => getCharacterLimitColor(charPercentage),\n [charPercentage]\n );\n\n const charCountDisplay = `${currentCharCount}/${platformConfig.maxChars}`;\n\n const handleContentChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n onContentChange?.(e.target.value);\n };\n\n return (\n <CardContainer\n $isActive={isActive}\n $isEditing={isEditing}\n $platformColor={platformConfig.color}\n data-testid=\"post-preview-card\"\n >\n <PlatformHeader $platformColor={platformConfig.color}>\n <PlatformIcon $platformColor={platformConfig.color}>{platformConfig.icon}</PlatformIcon>\n <PlatformName>{platformConfig.name}</PlatformName>\n <CharacterBadge $colorClass={charLimitColorClass}>{charCountDisplay}</CharacterBadge>\n </PlatformHeader>\n\n <ContentSection>\n {showSkeleton ? (\n <SkeletonContent>\n <SkeletonLine $width=\"100%\" />\n <SkeletonLine $width=\"95%\" />\n <SkeletonLine $width=\"88%\" />\n <SkeletonLine $width=\"70%\" />\n </SkeletonContent>\n ) : isEditing ? (\n <PostContentEditable\n value={displayContent}\n onChange={handleContentChange}\n placeholder=\"Enter your post content...\"\n $platformColor={platformConfig.color}\n autoFocus\n />\n ) : (\n <PostContent>{displayContent}</PostContent>\n )}\n\n {!showSkeleton && post.hashtags.length > 0 && (\n <HashtagsContainer>\n {post.hashtags.map((hashtag) => (\n <HashtagPill key={hashtag} $platformColor={platformConfig.color}>\n #{hashtag.replace(/^#/, '')}\n </HashtagPill>\n ))}\n </HashtagsContainer>\n )}\n </ContentSection>\n\n {post.imageUrl && !imageError ? (\n <ImagePreviewContainer>\n <ImagePreview\n src={post.imageUrl}\n alt=\"Post image preview\"\n onError={() => setImageError(true)}\n />\n </ImagePreviewContainer>\n ) : post.imageUrl && imageError ? (\n <ImagePlaceholder>\n <PlaceholderIcon>\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n role=\"img\"\n aria-label=\"Image unavailable\"\n >\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" />\n <circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\" />\n <polyline points=\"21 15 16 10 5 21\" />\n </svg>\n </PlaceholderIcon>\n <span>Image unavailable</span>\n </ImagePlaceholder>\n ) : (\n ['instagram', 'linkedin', 'facebook', 'youtube'].includes(post.platform) && (\n <ImagePlaceholder>\n <PlaceholderIcon>\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n role=\"img\"\n aria-label=\"No image attached\"\n >\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" />\n <circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\" />\n <polyline points=\"21 15 16 10 5 21\" />\n </svg>\n </PlaceholderIcon>\n <span>No image attached</span>\n </ImagePlaceholder>\n )\n )}\n\n {/* Character limit progress bar */}\n <ProgressBarContainer>\n <ProgressBarTrack>\n <ProgressBarFill\n $percentage={Math.min(charPercentage, 100)}\n $colorClass={charLimitColorClass}\n />\n </ProgressBarTrack>\n </ProgressBarContainer>\n </CardContainer>\n );\n};\n\nPostPreviewCard.displayName = 'PostPreviewCard';\n\n// =============================================================================\n// Styled Components\n// =============================================================================\n\n// Animation keyframes must be defined before components that use them\nconst fadeIn = keyframes`\n from {\n opacity: 0;\n transform: translate(2px, 2px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n`;\n\nconst CardContainer = styled.div<{\n $isActive: boolean;\n $isEditing: boolean;\n $platformColor: string;\n}>`\n background: ${tokens.colors.background.dark};\n border-radius: ${tokens.borderRadius.xl};\n padding: ${tokens.spacing.md};\n position: relative;\n transition: all ${tokens.transitions.normal};\n border: 1px solid ${({ $isActive, $isEditing, $platformColor }) =>\n $isEditing ? $platformColor : $isActive ? $platformColor : tokens.colors.border.default};\n box-shadow: ${({ $isActive, $isEditing, $platformColor }) =>\n $isEditing\n ? `${tokens.shadows.lg}, 0 0 20px ${$platformColor}40`\n : $isActive\n ? `${tokens.shadows.lg}, 0 0 20px ${$platformColor}33`\n : tokens.shadows.md};\n\n &:hover {\n border-color: ${({ $platformColor }) => `${$platformColor}80`};\n }\n`;\n\nconst PlatformHeader = styled.div<{ $platformColor: string }>`\n display: flex;\n align-items: center;\n gap: 10px;\n margin-bottom: ${tokens.spacing.sm};\n padding-bottom: ${tokens.spacing.sm};\n border-bottom: 1px solid ${tokens.colors.border.default};\n`;\n\nconst PlatformIcon = styled.span<{ $platformColor: string }>`\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border-radius: ${tokens.borderRadius.sm};\n background: ${({ $platformColor }) => `${$platformColor}20`};\n color: ${({ $platformColor }) => $platformColor};\n font-size: ${tokens.typography.fontSize.base};\n font-weight: ${tokens.typography.fontWeight.semibold};\n`;\n\nconst PlatformName = styled.span`\n flex: 1;\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.semibold};\n color: ${tokens.colors.text.primary};\n`;\n\nconst CharacterBadge = styled.span<{ $colorClass: string }>`\n padding: ${tokens.spacing.xs} ${tokens.spacing.sm};\n border-radius: ${tokens.borderRadius.lg};\n font-size: 11px;\n font-weight: ${tokens.typography.fontWeight.semibold};\n color: ${tokens.colors.text.primary};\n background: ${({ $colorClass }) => {\n if ($colorClass.includes('red')) return tokens.colors.error;\n if ($colorClass.includes('yellow')) return tokens.colors.warning;\n return tokens.colors.success;\n }};\n`;\n\nconst ContentSection = styled.div`\n margin-bottom: ${tokens.spacing.sm};\n`;\n\nconst PostContent = styled.div`\n font-size: ${tokens.typography.fontSize.base};\n font-family: ${tokens.typography.fontFamily.primary};\n line-height: 1.6;\n color: ${tokens.colors.text.primary};\n white-space: pre-wrap;\n word-break: break-word;\n margin-bottom: ${tokens.spacing.sm};\n letter-spacing: 0.01em;\n /* Smooth fade-in animation when content appears */\n animation: ${fadeIn} 0.4s ease-out;\n`;\n\nconst PostContentEditable = styled.textarea<{ $platformColor: string }>`\n width: 100%;\n min-height: 180px;\n max-height: 300px;\n font-size: ${tokens.typography.fontSize.base};\n font-family: ${tokens.typography.fontFamily.primary};\n line-height: 1.6;\n color: ${tokens.colors.text.primary};\n background: ${tokens.colors.background.darker};\n border: 1px solid ${tokens.colors.border.default};\n border-radius: ${tokens.borderRadius.sm};\n padding: ${tokens.spacing.md};\n margin-bottom: ${tokens.spacing.sm};\n letter-spacing: 0.01em;\n resize: vertical;\n box-sizing: border-box;\n transition: border-color ${tokens.transitions.fast}, box-shadow ${tokens.transitions.fast};\n overflow-y: auto;\n\n &:focus {\n outline: none;\n border-color: ${({ $platformColor }) => $platformColor};\n box-shadow: 0 0 0 2px ${({ $platformColor }) => `${$platformColor}30`};\n }\n\n &::placeholder {\n color: ${tokens.colors.text.tertiary};\n }\n`;\n\nconst HashtagsContainer = styled.div`\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n`;\n\nconst HashtagPill = styled.span<{ $platformColor: string }>`\n display: inline-block;\n padding: ${tokens.spacing.xs} 10px;\n border-radius: ${tokens.borderRadius.full};\n font-size: ${tokens.typography.fontSize.xs};\n font-weight: ${tokens.typography.fontWeight.medium};\n font-family: ${tokens.typography.fontFamily.primary};\n background: ${tokens.colors.surface.overlay};\n color: ${tokens.colors.accent};\n border: 1px solid ${tokens.colors.border.hover};\n transition: all ${tokens.transitions.normal};\n\n &:hover {\n background: ${tokens.colors.surface.overlayHover};\n color: ${tokens.colors.primary};\n }\n`;\n\nconst ProgressBarContainer = styled.div`\n margin-top: ${tokens.spacing.sm};\n`;\n\nconst ProgressBarTrack = styled.div`\n width: 100%;\n height: 4px;\n background: ${tokens.colors.border.default};\n border-radius: ${tokens.borderRadius.sm};\n overflow: hidden;\n`;\n\nconst ProgressBarFill = styled.div<{\n $percentage: number;\n $colorClass: string;\n}>`\n width: ${({ $percentage }) => $percentage}%;\n height: 100%;\n border-radius: ${tokens.borderRadius.sm};\n transition: width 0.3s ease, background-color 0.3s ease;\n background: ${({ $colorClass }) => {\n if ($colorClass.includes('red')) return tokens.colors.error;\n if ($colorClass.includes('yellow')) return tokens.colors.warning;\n return tokens.colors.success;\n }};\n`;\n\nconst ImagePreviewContainer = styled.div`\n margin-bottom: ${tokens.spacing.sm};\n border-radius: ${tokens.borderRadius.sm};\n overflow: hidden;\n border: 1px solid ${tokens.colors.border.default};\n`;\n\nconst ImagePreview = styled.img`\n width: 100%;\n height: auto;\n max-height: 200px;\n object-fit: cover;\n display: block;\n`;\n\nconst ImagePlaceholder = styled.div`\n width: 100%;\n height: 200px;\n background: linear-gradient(\n 45deg,\n #f09433 0%,\n #e6683c 25%,\n #dc2743 50%,\n #cc2366 75%,\n #bc1888 100%\n );\n border-radius: ${tokens.borderRadius.sm};\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: ${tokens.spacing.sm};\n color: white;\n font-size: ${tokens.typography.fontSize.sm};\n opacity: 0.8;\n margin-bottom: ${tokens.spacing.sm};\n`;\n\nconst PlaceholderIcon = styled.div`\n width: 48px;\n height: 48px;\n border: 2px solid white;\n border-radius: ${tokens.borderRadius.sm};\n display: flex;\n align-items: center;\n justify-content: center;\n\n svg {\n width: 24px;\n height: 24px;\n }\n`;\n\n// =============================================================================\n// Skeleton Loading Styles\n// =============================================================================\n\nconst shimmer = keyframes`\n 0% {\n background-position: -200% 0;\n }\n 100% {\n background-position: 200% 0;\n }\n`;\n\nconst SkeletonContent = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.sm};\n padding: ${tokens.spacing.sm} 0;\n`;\n\nconst SkeletonLine = styled.div<{ $width: string }>`\n height: 16px;\n width: ${({ $width }) => $width};\n background: linear-gradient(\n 90deg,\n ${tokens.colors.border.default} 0%,\n rgba(255, 255, 255, 0.15) 50%,\n ${tokens.colors.border.default} 100%\n );\n background-size: 200% 100%;\n border-radius: ${tokens.borderRadius.sm};\n animation: ${shimmer} 1.5s ease-in-out infinite;\n`;\n\nexport default PostPreviewCard;\n","/**\n * PlatformCarousel Component\n *\n * Displays posts in a tab-based carousel with platform tabs.\n * Features platform-specific styling, navigation dots, and smooth transitions.\n */\n\nimport type React from 'react';\nimport { useCallback, useEffect, useState } from 'react';\nimport styled from 'styled-components';\nimport { tokens } from '../../theme/tokens';\nimport { normalizePlatform, PLATFORM_CONFIGS } from './constants';\nimport { PostPreviewCard } from './PostPreviewCard';\nimport type { ProposedPost } from './types';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface PlatformCarouselProps {\n posts: ProposedPost[];\n onActiveChange?: (index: number) => void;\n /** Index of the post currently being edited (-1 or undefined = no editing) */\n editingIndex?: number;\n /** Content of the post being edited */\n editContent?: string;\n /** Callback when edit content changes */\n onEditContentChange?: (content: string) => void;\n /** Whether content is being loaded/generated */\n isLoading?: boolean;\n}\n\n// =============================================================================\n// Component\n// =============================================================================\n\nexport const PlatformCarousel: React.FC<PlatformCarouselProps> = ({\n posts,\n onActiveChange,\n editingIndex,\n editContent,\n onEditContentChange,\n isLoading = false,\n}) => {\n const [activeIndex, setActiveIndex] = useState(0);\n\n useEffect(() => {\n if (activeIndex >= posts.length && posts.length > 0) {\n setActiveIndex(0);\n }\n }, [posts.length, activeIndex]);\n\n const handleTabClick = useCallback(\n (index: number) => {\n setActiveIndex(index);\n onActiveChange?.(index);\n },\n [onActiveChange]\n );\n\n if (posts.length === 0) {\n return (\n <CarouselContainer>\n <EmptyState>No posts available</EmptyState>\n </CarouselContainer>\n );\n }\n\n // Default config for unknown platforms\n const defaultConfig = {\n icon: null,\n color: tokens.colors.text.secondary,\n bgColor: tokens.colors.background.light,\n maxChars: 1000,\n name: 'Unknown',\n description: 'Unknown platform',\n };\n\n // Get normalized platform config, with fallback for unknown platforms\n const getConfig = (platform: string) => {\n const normalized = normalizePlatform(platform);\n return normalized ? PLATFORM_CONFIGS[normalized] : defaultConfig;\n };\n\n return (\n <CarouselContainer>\n <TabsContainer>\n {posts.map((post, index) => {\n const config = getConfig(post.platform);\n const isActive = index === activeIndex;\n\n return (\n <PlatformTab\n key={`${post.platform}-${index}`}\n $isActive={isActive}\n $platformColor={config.color}\n onClick={() => handleTabClick(index)}\n aria-selected={isActive}\n role=\"tab\"\n >\n <PlatformIcon $platformColor={config.color} $isActive={isActive}>\n {config.icon}\n </PlatformIcon>\n {config.name}\n </PlatformTab>\n );\n })}\n </TabsContainer>\n\n <ContentContainer>\n {posts.map((post, index) => {\n const isEditing = editingIndex === index;\n return (\n <Slide key={`slide-${post.platform}-${index}`} $isActive={index === activeIndex}>\n <PostPreviewCard\n post={post}\n isActive={index === activeIndex}\n isEditing={isEditing}\n editContent={isEditing ? editContent : undefined}\n onContentChange={isEditing ? onEditContentChange : undefined}\n isLoading={isLoading}\n />\n </Slide>\n );\n })}\n </ContentContainer>\n\n {posts.length > 1 && (\n <NavigationDotsContainer>\n {posts.map((post, index) => {\n const config = getConfig(post.platform);\n return (\n <NavigationDot\n key={`dot-${post.platform}-${index}`}\n $isActive={index === activeIndex}\n $platformColor={config.color}\n onClick={() => handleTabClick(index)}\n aria-label={`Go to ${config.name} post`}\n />\n );\n })}\n </NavigationDotsContainer>\n )}\n </CarouselContainer>\n );\n};\n\nPlatformCarousel.displayName = 'PlatformCarousel';\n\n// =============================================================================\n// Styled Components\n// =============================================================================\n\nconst CarouselContainer = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n gap: ${tokens.spacing.md};\n`;\n\nconst TabsContainer = styled.div`\n display: flex;\n gap: ${tokens.spacing.sm};\n padding: ${tokens.spacing.sm};\n background: ${tokens.colors.backdrop};\n border-radius: ${tokens.borderRadius.lg};\n overflow-x: auto;\n scrollbar-width: none;\n -ms-overflow-style: none;\n\n &::-webkit-scrollbar {\n display: none;\n }\n`;\n\nconst PlatformTab = styled.button<{ $isActive: boolean; $platformColor: string }>`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n padding: ${tokens.spacing.sm} ${tokens.spacing.sm};\n border: 2px solid ${({ $isActive, $platformColor }) =>\n $isActive ? $platformColor : 'transparent'};\n border-radius: ${tokens.borderRadius.md};\n background: ${({ $isActive }) =>\n $isActive ? tokens.colors.background.darker : tokens.colors.background.light};\n color: ${({ $isActive }) =>\n $isActive ? tokens.colors.text.primary : tokens.colors.text.secondary};\n font-family: inherit;\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.medium};\n cursor: pointer;\n transition: all ${tokens.transitions.fast};\n white-space: nowrap;\n flex-shrink: 0;\n\n &:hover {\n background: ${({ $isActive }) =>\n $isActive ? tokens.colors.background.darker : tokens.colors.surface.overlayHover};\n }\n\n &:focus {\n outline: none;\n box-shadow: 0 0 0 2px ${({ $platformColor }) => $platformColor}40;\n }\n`;\n\nconst PlatformIcon = styled.span<{ $platformColor: string; $isActive: boolean }>`\n font-size: ${tokens.typography.fontSize.base};\n color: ${({ $platformColor }) => $platformColor};\n transition: color ${tokens.transitions.fast};\n`;\n\nconst ContentContainer = styled.div`\n position: relative;\n min-height: 200px;\n overflow: hidden;\n /* Padding to prevent card borders/shadows from being clipped */\n padding: 0 ${tokens.spacing.xs};\n margin: 0 -${tokens.spacing.xs};\n`;\n\nconst Slide = styled.div<{ $isActive: boolean }>`\n position: ${({ $isActive }) => ($isActive ? 'relative' : 'absolute')};\n top: 0;\n left: 0;\n width: 100%;\n opacity: ${({ $isActive }) => ($isActive ? 1 : 0)};\n transform: ${({ $isActive }) => ($isActive ? 'translateX(0)' : 'translateX(20px)')};\n transition: opacity ${tokens.animation.duration.short} ${tokens.animation.easing.smooth},\n transform ${tokens.animation.duration.short} ${tokens.animation.easing.smooth};\n pointer-events: ${({ $isActive }) => ($isActive ? 'auto' : 'none')};\n`;\n\nconst NavigationDotsContainer = styled.div`\n display: flex;\n justify-content: center;\n gap: ${tokens.spacing.xs};\n padding: ${tokens.spacing.sm};\n`;\n\nconst NavigationDot = styled.button<{ $isActive: boolean; $platformColor: string }>`\n width: ${tokens.spacing.sm};\n height: ${tokens.spacing.sm};\n border-radius: ${tokens.borderRadius.full};\n border: none;\n padding: 0;\n cursor: pointer;\n background: ${({ $isActive, $platformColor }) =>\n $isActive ? $platformColor : tokens.colors.background.light};\n transition: all ${tokens.transitions.fast};\n\n &:hover {\n background: ${({ $isActive, $platformColor }) =>\n $isActive ? $platformColor : `${$platformColor}80`};\n transform: scale(1.2);\n }\n\n &:focus {\n outline: none;\n box-shadow: 0 0 0 2px ${({ $platformColor }) => $platformColor}40;\n }\n`;\n\nconst EmptyState = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 200px;\n color: ${tokens.colors.text.tertiary};\n font-family: inherit;\n font-size: ${tokens.typography.fontSize.sm};\n`;\n\nexport default PlatformCarousel;\n","/**\n * PlatformGrid Component\n *\n * Displays all posts in a responsive grid layout.\n * Uses CSS Grid with responsive breakpoints for different screen sizes.\n */\n\nimport type React from 'react';\nimport styled from 'styled-components';\nimport { tokens } from '../../theme/tokens';\nimport { PostPreviewCard } from './PostPreviewCard';\nimport type { ProposedPost } from './types';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface PlatformGridProps {\n posts: ProposedPost[];\n /** Index of the post currently being edited (-1 or undefined = no editing) */\n editingIndex?: number;\n /** Content of the post being edited */\n editContent?: string;\n /** Callback when edit content changes */\n onEditContentChange?: (content: string) => void;\n /** Whether content is being loaded/generated */\n isLoading?: boolean;\n /** Currently active/selected post index */\n activeIndex?: number;\n /** Callback when a post is clicked/selected */\n onActiveChange?: (index: number) => void;\n}\n\n// =============================================================================\n// Component\n// =============================================================================\n\n/**\n * PlatformGrid displays all proposed posts in a responsive grid layout.\n *\n * Responsive behavior:\n * - 1 column on mobile (< 640px)\n * - 2 columns on tablet (640px - 1024px)\n * - 3 columns on desktop (> 1024px)\n */\nexport const PlatformGrid: React.FC<PlatformGridProps> = ({\n posts,\n editingIndex,\n editContent,\n onEditContentChange,\n isLoading = false,\n activeIndex = 0,\n onActiveChange,\n}) => {\n if (posts.length === 0) {\n return (\n <EmptyState>\n <EmptyStateText>No posts to display</EmptyStateText>\n </EmptyState>\n );\n }\n\n const handlePostClick = (index: number) => {\n onActiveChange?.(index);\n };\n\n return (\n <Grid data-testid=\"platform-grid\">\n {posts.map((post, index) => {\n const isEditing = editingIndex === index;\n const isActive = activeIndex === index;\n return (\n <GridCell\n key={post.platform}\n $isActive={isActive}\n onClick={() => handlePostClick(index)}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handlePostClick(index);\n }\n }}\n >\n <PostPreviewCard\n post={post}\n isActive={isActive}\n isEditing={isEditing}\n editContent={isEditing ? editContent : undefined}\n onContentChange={isEditing ? onEditContentChange : undefined}\n isLoading={isLoading}\n />\n </GridCell>\n );\n })}\n </Grid>\n );\n};\n\nPlatformGrid.displayName = 'PlatformGrid';\n\n// =============================================================================\n// Styled Components\n// =============================================================================\n\nconst Grid = styled.div`\n display: grid;\n gap: ${tokens.spacing.md};\n width: 100%;\n\n /* Mobile: 1 column */\n grid-template-columns: 1fr;\n\n /* Tablet: 2 columns (640px - 1024px) */\n @media (min-width: ${tokens.breakpoints.mobile}px) {\n grid-template-columns: repeat(2, 1fr);\n }\n\n /* Desktop: 3 columns (> 1024px) */\n @media (min-width: ${tokens.breakpoints.tablet}px) {\n grid-template-columns: repeat(3, 1fr);\n }\n`;\n\nconst GridCell = styled.div<{ $isActive?: boolean }>`\n min-width: 0; /* Prevent grid blowout with long content */\n cursor: pointer;\n border-radius: ${tokens.borderRadius.lg};\n transition: transform ${tokens.transitions.fast};\n\n &:hover {\n transform: translateY(-2px);\n }\n`;\n\nconst EmptyState = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n padding: ${tokens.spacing.xl};\n background: ${tokens.colors.backdrop};\n border: 1px dashed ${tokens.colors.border.hover};\n border-radius: ${tokens.borderRadius.lg};\n`;\n\nconst EmptyStateText = styled.p`\n margin: 0;\n font-size: ${tokens.typography.fontSize.sm};\n color: ${tokens.colors.text.tertiary};\n`;\n\nexport default PlatformGrid;\n","/**\n * SocialMediaCanvas Component\n *\n * Container for displaying social media post previews.\n * Supports carousel and grid view modes with a toggle.\n */\n\nimport type React from 'react';\nimport { useState } from 'react';\nimport styled from 'styled-components';\nimport { tokens } from '../../theme/tokens';\nimport { PlatformCarousel } from './PlatformCarousel';\nimport { PlatformGrid } from './PlatformGrid';\nimport type { ProposedPost } from './types';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface SocialMediaCanvasProps {\n /** Posts to display */\n posts: ProposedPost[];\n /** Initial view mode */\n viewMode?: 'carousel' | 'grid';\n /** Title to display in header */\n title?: string;\n /** Empty state title */\n emptyTitle?: string;\n /** Empty state description */\n emptyDescription?: string;\n /** Callback when active post changes */\n onActiveChange?: (index: number) => void;\n /** Whether to show the view mode toggle */\n showViewToggle?: boolean;\n /** Index of the post currently being edited (-1 or undefined = no editing) */\n editingIndex?: number;\n /** Content of the post being edited */\n editContent?: string;\n /** Callback when edit content changes */\n onEditContentChange?: (content: string) => void;\n /** Whether content is being loaded/generated */\n isLoading?: boolean;\n /** Currently active post index (for grid mode) */\n activeIndex?: number;\n}\n\n// =============================================================================\n// Styled Components\n// =============================================================================\n\nconst Container = styled.div`\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 100%;\n padding: 0;\n box-sizing: border-box;\n background: linear-gradient(\n 180deg,\n ${tokens.colors.backdrop} 0%,\n ${tokens.colors.background.light} 100%\n );\n overflow: auto;\n`;\n\nconst Header = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: ${tokens.spacing.sm};\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n position: relative;\n z-index: 1;\n background: ${tokens.colors.backdrop};\n\n /* Gradient fade from solid to transparent (blends into content below) */\n &::after {\n content: '';\n position: absolute;\n left: 0;\n right: 0;\n top: 100%;\n height: 16px;\n background: linear-gradient(\n to bottom,\n ${tokens.colors.backdrop} 0%,\n transparent 100%\n );\n pointer-events: none;\n }\n`;\n\nconst Title = styled.h2`\n margin: 0;\n font-size: ${tokens.typography.fontSize.base};\n font-weight: ${tokens.typography.fontWeight.semibold};\n color: ${tokens.colors.text.primary};\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n min-width: 0;\n`;\n\nconst ViewToggle = styled.div`\n display: flex;\n gap: ${tokens.spacing.xs};\n flex-shrink: 0;\n`;\n\nconst ToggleButton = styled.button<{ $active: boolean }>`\n padding: ${tokens.spacing.xs};\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n border-radius: ${tokens.borderRadius.md};\n cursor: pointer;\n transition: all ${tokens.transitions.fast};\n background: ${({ $active }) =>\n $active ? `${tokens.colors.primary}33` : tokens.colors.surface.overlay};\n color: ${({ $active }) => ($active ? tokens.colors.primary : tokens.colors.text.secondary)};\n border: 1px solid\n ${({ $active }) => ($active ? tokens.colors.primary : tokens.colors.border.default)};\n /* Remove mobile tap highlight */\n -webkit-tap-highlight-color: transparent;\n\n svg {\n width: 18px;\n height: 18px;\n fill: currentColor;\n }\n\n &:hover {\n background: ${({ $active }) =>\n $active ? `${tokens.colors.primary}4D` : tokens.colors.surface.overlayHover};\n }\n`;\n\nconst Content = styled.div`\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow-x: hidden;\n overflow-y: auto;\n /* Extra top padding to account for header fade overlay */\n padding-top: ${tokens.spacing.md};\n`;\n\nconst EmptyState = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n color: ${tokens.colors.text.tertiary};\n text-align: center;\n padding: ${tokens.spacing.xl};\n\n svg {\n width: ${tokens.spacing['3xl']};\n height: ${tokens.spacing['3xl']};\n margin-bottom: ${tokens.spacing.md};\n opacity: 0.5;\n }\n\n h3 {\n margin: 0 0 ${tokens.spacing.sm};\n font-size: ${tokens.typography.fontSize.base};\n color: ${tokens.colors.text.secondary};\n }\n\n p {\n margin: 0;\n font-size: ${tokens.typography.fontSize.sm};\n }\n`;\n\nconst PostCount = styled.span`\n font-size: ${tokens.typography.fontSize.sm};\n color: ${tokens.colors.text.tertiary};\n font-weight: ${tokens.typography.fontWeight.regular};\n`;\n\n// Empty state icon\nconst EmptyIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <title>No posts</title>\n <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V5h14v14zm-7-2h2v-4h4v-2h-4V7h-2v4H8v2h4z\" />\n </svg>\n);\n\n// =============================================================================\n// Component\n// =============================================================================\n\n/**\n * SocialMediaCanvas displays social media post previews in carousel or grid mode.\n *\n * @example\n * ```tsx\n * <SocialMediaCanvas\n * posts={posts}\n * viewMode=\"carousel\"\n * title=\"Generated Posts\"\n * onActiveChange={(index) => console.log('Active:', index)}\n * />\n * ```\n */\nexport const SocialMediaCanvas: React.FC<SocialMediaCanvasProps> = ({\n posts,\n viewMode: initialViewMode = 'carousel',\n title = 'Generated Posts',\n emptyTitle = 'No Posts Yet',\n emptyDescription = 'Generate social media posts to see them here.',\n onActiveChange,\n showViewToggle = true,\n editingIndex,\n editContent,\n onEditContentChange,\n isLoading = false,\n activeIndex = 0,\n}) => {\n const [viewMode, setViewMode] = useState<'carousel' | 'grid'>(initialViewMode);\n\n // Handle active post change in carousel\n const handleActiveChange = (index: number) => {\n onActiveChange?.(index);\n };\n\n // If no posts, show empty state\n if (posts.length === 0) {\n return (\n <Container>\n <EmptyState>\n <EmptyIcon />\n <h3>{emptyTitle}</h3>\n <p>{emptyDescription}</p>\n </EmptyState>\n </Container>\n );\n }\n\n return (\n <Container>\n <Header>\n <Title>\n {title} <PostCount>({posts.length})</PostCount>\n </Title>\n {showViewToggle && (\n <ViewToggle>\n <ToggleButton\n $active={viewMode === 'carousel'}\n onClick={() => setViewMode('carousel')}\n type=\"button\"\n aria-label=\"Carousel view\"\n title=\"Carousel view\"\n >\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path d=\"M2 6h4v12H2V6zm7 0h6v12H9V6zm9 0h4v12h-4V6z\" />\n </svg>\n </ToggleButton>\n <ToggleButton\n $active={viewMode === 'grid'}\n onClick={() => setViewMode('grid')}\n type=\"button\"\n aria-label=\"Grid view\"\n title=\"Grid view\"\n >\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path d=\"M3 3h8v8H3V3zm10 0h8v8h-8V3zM3 13h8v8H3v-8zm10 0h8v8h-8v-8z\" />\n </svg>\n </ToggleButton>\n </ViewToggle>\n )}\n </Header>\n <Content>\n {viewMode === 'carousel' ? (\n <PlatformCarousel\n posts={posts}\n onActiveChange={handleActiveChange}\n editingIndex={editingIndex}\n editContent={editContent}\n onEditContentChange={onEditContentChange}\n isLoading={isLoading}\n />\n ) : (\n <PlatformGrid\n posts={posts}\n editingIndex={editingIndex}\n editContent={editContent}\n onEditContentChange={onEditContentChange}\n isLoading={isLoading}\n activeIndex={activeIndex}\n onActiveChange={handleActiveChange}\n />\n )}\n </Content>\n </Container>\n );\n};\n\nSocialMediaCanvas.displayName = 'SocialMediaCanvas';\n","/**\n * Reddit Engagement Constants\n *\n * Configuration values and helper functions for Reddit GEO engagement components.\n * Uses existing tokens import from theme.\n */\n\nimport { tokens } from '../../theme/tokens';\nimport type { EngagementStatus, ReplyTone } from './redditEngagementTypes';\n\n// =============================================================================\n// Re-export tokens for component use\n// =============================================================================\n\nexport { tokens };\n\n// =============================================================================\n// Reddit-specific Colors\n// =============================================================================\n\nexport const REDDIT_COLORS = {\n orange: tokens.colors.platform.reddit,\n orangeLight: '#FF5722',\n orangeDark: '#E64A19',\n blue: '#0079D3',\n blueLight: '#1E88E5',\n darkGray: tokens.colors.background.darker,\n lightGray: '#DAE0E6',\n};\n\n// =============================================================================\n// Engagement Score Configuration\n// =============================================================================\n\nexport const SCORE_THRESHOLDS = {\n excellent: { min: 8, max: 10, label: 'Excellent', color: tokens.colors.success },\n good: { min: 6, max: 7, label: 'Good', color: tokens.colors.info },\n moderate: { min: 4, max: 5, label: 'Moderate', color: tokens.colors.warning },\n low: { min: 1, max: 3, label: 'Low', color: tokens.colors.error },\n};\n\nexport function getScoreConfig(score: number) {\n if (score >= 8) return SCORE_THRESHOLDS.excellent;\n if (score >= 6) return SCORE_THRESHOLDS.good;\n if (score >= 4) return SCORE_THRESHOLDS.moderate;\n return SCORE_THRESHOLDS.low;\n}\n\nexport function getScoreColor(score: number): string {\n return getScoreConfig(score).color;\n}\n\nexport function getScoreLabel(score: number): string {\n return getScoreConfig(score).label;\n}\n\n// =============================================================================\n// Tone Configuration\n// =============================================================================\n\nexport const TONE_CONFIG: Record<\n ReplyTone,\n { label: string; color: string; icon: string; description: string }\n> = {\n casual: {\n label: 'Casual',\n color: tokens.colors.accent,\n icon: '/assets/icon-set/Icon-chat-1-fill.svg',\n description: 'Friendly, conversational tone',\n },\n professional: {\n label: 'Professional',\n color: tokens.colors.info,\n icon: '/assets/icon-set/Icon-briefcase-fill.svg',\n description: 'Business-appropriate, formal tone',\n },\n technical: {\n label: 'Technical',\n color: tokens.colors.secondary,\n icon: '/assets/icon-set/Icon-settings-3-fill.svg',\n description: 'Detail-oriented, expert tone',\n },\n supportive: {\n label: 'Supportive',\n color: tokens.colors.success,\n icon: '/assets/icon-set/Icon-p2p-fill.svg',\n description: 'Empathetic, helpful tone',\n },\n humorous: {\n label: 'Humorous',\n color: tokens.colors.warning,\n icon: '/assets/icon-set/Icon-emotion-happy-fill.svg',\n description: 'Light-hearted, witty tone',\n },\n};\n\nexport function getToneConfig(tone: ReplyTone) {\n return (\n TONE_CONFIG[tone] ?? {\n label: tone || 'Unknown',\n color: tokens.colors.text.secondary,\n icon: '/assets/icon-set/Icon-chat-1-fill.svg',\n description: 'Unknown tone',\n }\n );\n}\n\n// =============================================================================\n// Status Configuration\n// =============================================================================\n\nexport const STATUS_CONFIG: Record<\n EngagementStatus,\n { label: string; color: string; icon: string }\n> = {\n pending: {\n label: 'Pending',\n color: tokens.colors.warning,\n icon: '/assets/icon-set/Icon-time-fill.svg',\n },\n posted: {\n label: 'Posted',\n color: tokens.colors.success,\n icon: '/assets/icon-set/Icon-check-fill.svg',\n },\n skipped: {\n label: 'Skipped',\n color: tokens.colors.text.tertiary,\n icon: '/assets/icon-set/Icon-skip-forward-fill.svg',\n },\n expired: {\n label: 'Expired',\n color: tokens.colors.error,\n icon: '/assets/icon-set/Icon-hourglass-line.svg',\n },\n editing: {\n label: 'Editing',\n color: tokens.colors.info,\n icon: '/assets/icon-set/Icon-edit-fill.svg',\n },\n};\n\nexport function getStatusConfig(status: EngagementStatus) {\n return (\n STATUS_CONFIG[status] ?? {\n label: status || 'Unknown',\n color: tokens.colors.text.tertiary,\n icon: '/assets/icon-set/Icon-question-mark.svg',\n }\n );\n}\n\n// =============================================================================\n// Reddit Character Limits\n// =============================================================================\n\nexport const REDDIT_LIMITS = {\n comment: 10000,\n postTitle: 300,\n postBody: 40000,\n};\n\nexport function getRedditCharPercentage(\n current: number,\n max: number = REDDIT_LIMITS.comment\n): number {\n return Math.min(100, (current / max) * 100);\n}\n\nexport function getRedditCharLimitColor(percentage: number): string {\n if (percentage > 100) return tokens.colors.error;\n if (percentage > 90) return tokens.colors.warning;\n if (percentage > 75) return tokens.colors.warning;\n return tokens.colors.success;\n}\n\n// =============================================================================\n// Subreddit Colors\n// =============================================================================\n\nconst SUBREDDIT_COLORS: Record<string, string> = {\n automation: tokens.colors.info,\n n8n: tokens.colors.platform.reddit,\n nocode: tokens.colors.success,\n smallbusiness: tokens.colors.warning,\n entrepreneur: tokens.colors.accent,\n saas: tokens.colors.primary,\n webdev: tokens.colors.secondary,\n startups: tokens.colors.seaGreen,\n};\n\nexport function getSubredditColor(subreddit: string | undefined | null): string {\n if (!subreddit) return REDDIT_COLORS.orange;\n const lower = subreddit.toLowerCase();\n return SUBREDDIT_COLORS[lower] || REDDIT_COLORS.orange;\n}\n\n// =============================================================================\n// Utility Functions\n// =============================================================================\n\n/**\n * Format a timestamp to relative time (e.g., \"2 hours ago\")\n */\nexport function formatRelativeTime(timestamp: string | number): string {\n if (!timestamp && timestamp !== 0) return 'unknown';\n const now = new Date();\n // Handle numeric timestamps (Unix seconds or milliseconds)\n let date: Date;\n const numericVal = typeof timestamp === 'number' ? timestamp : Number(timestamp);\n if (!Number.isNaN(numericVal) && numericVal > 0) {\n // Unix seconds (< 1e12) vs milliseconds (>= 1e12)\n date = new Date(numericVal < 1e12 ? numericVal * 1000 : numericVal);\n } else {\n date = new Date(timestamp);\n }\n if (Number.isNaN(date.getTime())) return 'unknown';\n const diffMs = now.getTime() - date.getTime();\n const diffMins = Math.floor(diffMs / 60000);\n const diffHours = Math.floor(diffMins / 60);\n const diffDays = Math.floor(diffHours / 24);\n\n if (diffMins < 1) return 'just now';\n if (diffMins < 60) return `${diffMins}m ago`;\n if (diffHours < 24) return `${diffHours}h ago`;\n if (diffDays < 7) return `${diffDays}d ago`;\n return date.toLocaleDateString();\n}\n\n/**\n * Format large numbers (e.g., 1.2k, 3.4M)\n */\nexport function formatNumber(num: number): string {\n if (num === undefined || num === null) return '0';\n if (num >= 1000000) return `${(num / 1000000).toFixed(1)}M`;\n if (num >= 1000) return `${(num / 1000).toFixed(1)}k`;\n return num.toString();\n}\n\n/**\n * Truncate text with ellipsis\n */\nexport function truncateText(text: string, maxLength: number): string {\n if (text.length <= maxLength) return text;\n return `${text.slice(0, maxLength - 3)}...`;\n}\n\n/**\n * Generate Reddit post URL\n */\nexport function getRedditPostUrl(subreddit: string, postId: string): string {\n const cleanId = postId.replace(/^t3_/, '');\n return `https://www.reddit.com/r/${subreddit}/comments/${cleanId}`;\n}\n\n/**\n * Generate Reddit subreddit URL\n */\nexport function getSubredditUrl(subreddit: string): string {\n return `https://www.reddit.com/r/${subreddit}`;\n}\n","/**\n * RedditOpportunityCard Component\n *\n * Displays a Reddit post opportunity with engagement metrics.\n * Shows post details, engagement score, and draft reply.\n */\n\nimport type React from 'react';\nimport { useMemo } from 'react';\nimport styled, { keyframes } from 'styled-components';\n\n/**\n * Simple markdown renderer for basic formatting\n * Supports: **bold**, *italic*, `code`\n */\nconst renderSimpleMarkdown = (text: string): React.ReactNode => {\n if (!text) return null;\n\n // Simple approach: process patterns in order using placeholder tokens\n let processed = text;\n\n // Replace **bold** first (before single *)\n processed = processed.replace(/\\*\\*(.+?)\\*\\*/g, '{{BOLD:$1}}');\n // Replace *italic*\n processed = processed.replace(/\\*(.+?)\\*/g, '{{ITALIC:$1}}');\n // Replace `code`\n processed = processed.replace(/`(.+?)`/g, '{{CODE:$1}}');\n\n // Now split and render\n const segments = processed.split(/({{(?:BOLD|ITALIC|CODE):.+?}})/g);\n\n return segments.map((segment, i) => {\n if (segment.startsWith('{{BOLD:')) {\n const content = segment.slice(7, -2);\n return <strong key={i}>{content}</strong>;\n }\n if (segment.startsWith('{{ITALIC:')) {\n const content = segment.slice(9, -2);\n return <em key={i}>{content}</em>;\n }\n if (segment.startsWith('{{CODE:')) {\n const content = segment.slice(7, -2);\n return <code key={i} style={{ background: 'rgba(255,255,255,0.1)', padding: '0 4px', borderRadius: '3px', fontFamily: 'monospace' }}>{content}</code>;\n }\n return segment;\n });\n};\nimport { tokens } from '../../theme/tokens';\nimport {\n formatNumber,\n formatRelativeTime,\n getRedditCharLimitColor,\n getRedditCharPercentage,\n getScoreColor,\n getScoreLabel,\n getSubredditColor,\n getSubredditUrl,\n getToneConfig,\n REDDIT_COLORS,\n REDDIT_LIMITS,\n truncateText,\n} from './redditEngagementConstants';\nimport type { RedditOpportunityCardProps, ReplyTone } from './redditEngagementTypes';\n\n// =============================================================================\n// Sub-Components\n// =============================================================================\n\nconst SubredditBadge: React.FC<{ subreddit: string; linked?: boolean }> = ({\n subreddit,\n linked = true,\n}) => {\n const color = getSubredditColor(subreddit);\n const content = <SubredditBadgeContainer $color={color}>r/{subreddit}</SubredditBadgeContainer>;\n\n if (linked) {\n return (\n <SubredditLink href={getSubredditUrl(subreddit)} target=\"_blank\" rel=\"noopener noreferrer\">\n {content}\n </SubredditLink>\n );\n }\n\n return content;\n};\n\nconst EngagementScoreBadge: React.FC<{ score: number; size?: 'sm' | 'md' | 'lg' }> = ({\n score,\n size = 'md',\n}) => {\n const color = getScoreColor(score);\n const label = getScoreLabel(score);\n\n return (\n <ScoreBadgeContainer $color={color} $size={size}>\n <ScoreValue>{score}</ScoreValue>\n <ScoreMax>/10</ScoreMax>\n <ScoreLabel>{label}</ScoreLabel>\n </ScoreBadgeContainer>\n );\n};\n\nconst ToneBadge: React.FC<{ tone: ReplyTone }> = ({ tone }) => {\n const config = getToneConfig(tone);\n\n return (\n <ToneBadgeContainer $color={config.color}>\n <ToneIcon src={config.icon} alt=\"\" />\n <span>{config.label}</span>\n </ToneBadgeContainer>\n );\n};\n\nconst PostStats: React.FC<{ score: number; comments: number; createdAt: string }> = ({\n score,\n comments,\n createdAt,\n}) => (\n <StatsContainer>\n <StatItem>\n <Icon src=\"/assets/icon-set/Icon-arrow-up-fill.svg\" alt=\"upvotes\" />\n <StatValue>{formatNumber(score)}</StatValue>\n </StatItem>\n <StatDivider>•</StatDivider>\n <StatItem>\n <Icon src=\"/assets/icon-set/Icon-chat-1-fill.svg\" alt=\"comments\" />\n <StatValue>{formatNumber(comments)}</StatValue>\n </StatItem>\n <StatDivider>•</StatDivider>\n <StatItem>\n <Icon src=\"/assets/icon-set/Icon-time-fill.svg\" alt=\"time\" />\n <StatValue>{formatRelativeTime(createdAt)}</StatValue>\n </StatItem>\n </StatsContainer>\n);\n\n// =============================================================================\n// Main Component\n// =============================================================================\n\nexport const RedditOpportunityCard: React.FC<RedditOpportunityCardProps> = ({\n opportunity,\n isActive = false,\n isEditing = false,\n editContent,\n onContentChange,\n isLoading = false,\n condensed = false,\n}) => {\n const displayContent =\n isEditing && editContent !== undefined\n ? editContent\n : opportunity.editedReply || opportunity.draftReply || '';\n\n const charCount = displayContent.length;\n const charPercentage = useMemo(\n () => getRedditCharPercentage(charCount, REDDIT_LIMITS.comment),\n [charCount]\n );\n const charLimitColor = useMemo(() => getRedditCharLimitColor(charPercentage), [charPercentage]);\n\n const handleContentChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n onContentChange?.(e.target.value);\n };\n\n if (isLoading) {\n return (\n <CardContainer $isActive={false} $isEditing={false}>\n <SkeletonContent>\n <SkeletonLine $width=\"40%\" />\n <SkeletonLine $width=\"90%\" />\n <SkeletonLine $width=\"75%\" />\n <SkeletonLine $width=\"60%\" />\n </SkeletonContent>\n </CardContainer>\n );\n }\n\n return (\n <CardContainer\n $isActive={isActive}\n $isEditing={isEditing}\n data-testid=\"reddit-opportunity-card\"\n >\n {/* Header with subreddit, score, and stats */}\n <CardHeader>\n <HeaderLeft>\n <SubredditBadge subreddit={opportunity.subreddit} />\n <EngagementScoreBadge score={opportunity.engagementScore} size=\"md\" />\n </HeaderLeft>\n <PostStats\n score={opportunity.postScore}\n comments={opportunity.postNumComments}\n createdAt={opportunity.postCreatedAt}\n />\n </CardHeader>\n\n {/* Post preview section */}\n <PostPreviewSection $condensed={condensed}>\n <PostTitle href={opportunity.postUrl} target=\"_blank\" rel=\"noopener noreferrer\">\n {opportunity.title}\n <ExternalLinkIcon>→</ExternalLinkIcon>\n </PostTitle>\n {!condensed && opportunity.postContent && (\n <PostContent>{truncateText(opportunity.postContent, 300)}</PostContent>\n )}\n <PostAuthor>\n Posted by u/{opportunity.postAuthor || 'unknown'}\n {opportunity.flair && <PostFlair>{opportunity.flair}</PostFlair>}\n </PostAuthor>\n </PostPreviewSection>\n\n <Divider />\n\n {/* Reply section */}\n <ReplySection>\n <ReplySectionHeader>\n <ReplyLabel>Your Draft Reply</ReplyLabel>\n <ReplyMeta>\n <ToneBadge tone={opportunity.toneMatch} />\n <CharacterCount $color={charLimitColor}>\n {charCount}/{REDDIT_LIMITS.comment}\n </CharacterCount>\n </ReplyMeta>\n </ReplySectionHeader>\n\n {isEditing ? (\n <ReplyTextarea\n value={displayContent}\n onChange={handleContentChange}\n placeholder=\"Write your reply...\"\n autoFocus\n />\n ) : (\n <ReplyContent>{renderSimpleMarkdown(displayContent)}</ReplyContent>\n )}\n\n {/* Strategy hint */}\n {opportunity.strategy ? (\n <StrategyHint>\n <StrategyIconImg src=\"/assets/icon-set/Icon-lightbulb-fill.svg\" alt=\"\" />\n <StrategyText>Strategy: {opportunity.strategy}</StrategyText>\n </StrategyHint>\n ) : null}\n\n {/* Character limit progress bar */}\n <ProgressBarContainer>\n <ProgressBarTrack>\n <ProgressBarFill $percentage={Math.min(charPercentage, 100)} $color={charLimitColor} />\n </ProgressBarTrack>\n </ProgressBarContainer>\n </ReplySection>\n </CardContainer>\n );\n};\n\nRedditOpportunityCard.displayName = 'RedditOpportunityCard';\n\n// =============================================================================\n// Styled Components\n// =============================================================================\n\nconst fadeIn = keyframes`\n from {\n opacity: 0;\n transform: translateY(8px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n`;\n\nconst shimmer = keyframes`\n 0% { background-position: -200% 0; }\n 100% { background-position: 200% 0; }\n`;\n\nconst Icon = styled.img`\n width: 14px;\n height: 14px;\n vertical-align: middle;\n opacity: 0.8;\n`;\n\nconst CardContainer = styled.div<{\n $isActive: boolean;\n $isEditing: boolean;\n}>`\n background: ${tokens.colors.background.dark};\n border-radius: ${tokens.borderRadius.xl};\n padding: ${tokens.spacing.lg};\n position: relative;\n transition: all ${tokens.transitions.normal};\n border: 1px solid ${({ $isActive, $isEditing }) =>\n $isEditing\n ? REDDIT_COLORS.orange\n : $isActive\n ? REDDIT_COLORS.orange\n : tokens.colors.border.default};\n box-shadow: ${({ $isActive, $isEditing }) =>\n $isEditing || $isActive\n ? `${tokens.shadows.lg}, 0 0 20px ${REDDIT_COLORS.orange}40`\n : tokens.shadows.md};\n animation: ${fadeIn} 0.4s ease-out;\n\n &:hover {\n border-color: ${REDDIT_COLORS.orange}80;\n }\n\n @media (max-width: 480px) {\n padding: ${tokens.spacing.md};\n }\n`;\n\nconst CardHeader = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: ${tokens.spacing.md};\n flex-wrap: wrap;\n gap: ${tokens.spacing.sm};\n\n @media (max-width: 480px) {\n flex-direction: column;\n align-items: flex-start;\n }\n`;\n\nconst HeaderLeft = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.sm};\n`;\n\nconst SubredditBadgeContainer = styled.span<{ $color: string }>`\n display: inline-flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n padding: ${tokens.spacing.xs} ${tokens.spacing.sm};\n border-radius: ${tokens.borderRadius.full};\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.semibold};\n background: ${({ $color }) => `${$color}20`};\n color: ${({ $color }) => $color};\n border: 1px solid ${({ $color }) => `${$color}40`};\n transition: all ${tokens.transitions.fast};\n`;\n\nconst SubredditLink = styled.a`\n text-decoration: none;\n\n &:hover ${SubredditBadgeContainer} {\n background: ${tokens.colors.surface.overlayHover};\n }\n`;\n\nconst ScoreBadgeContainer = styled.div<{ $color: string; $size: 'sm' | 'md' | 'lg' }>`\n display: flex;\n align-items: baseline;\n gap: ${tokens.spacing.xs};\n padding: ${({ $size }) =>\n $size === 'sm'\n ? `${tokens.spacing.xs} ${tokens.spacing.sm}`\n : $size === 'lg'\n ? `${tokens.spacing.sm} ${tokens.spacing.md}`\n : `${tokens.spacing.xs} ${tokens.spacing.sm}`};\n border-radius: ${tokens.borderRadius.md};\n background: ${({ $color }) => `${$color}20`};\n border: 1px solid ${({ $color }) => `${$color}40`};\n`;\n\nconst ScoreValue = styled.span`\n font-size: ${tokens.typography.fontSize.lg};\n font-weight: ${tokens.typography.fontWeight.bold};\n color: ${tokens.colors.text.primary};\n`;\n\nconst ScoreMax = styled.span`\n font-size: ${tokens.typography.fontSize.xs};\n color: ${tokens.colors.text.tertiary};\n`;\n\nconst ScoreLabel = styled.span`\n margin-left: ${tokens.spacing.xs};\n font-size: ${tokens.typography.fontSize.xs};\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.text.secondary};\n`;\n\nconst StatsContainer = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n`;\n\nconst StatItem = styled.span`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n`;\n\nconst StatValue = styled.span`\n font-size: ${tokens.typography.fontSize.sm};\n color: ${tokens.colors.text.secondary};\n`;\n\nconst StatDivider = styled.span`\n color: ${tokens.colors.text.tertiary};\n`;\n\nconst PostPreviewSection = styled.div<{ $condensed: boolean }>`\n margin-bottom: ${tokens.spacing.md};\n`;\n\nconst PostTitle = styled.a`\n display: flex;\n align-items: flex-start;\n gap: ${tokens.spacing.xs};\n font-size: ${tokens.typography.fontSize.lg};\n font-weight: ${tokens.typography.fontWeight.semibold};\n color: ${tokens.colors.text.primary};\n text-decoration: none;\n line-height: ${tokens.typography.lineHeight.tight};\n margin-bottom: ${tokens.spacing.sm};\n\n &:hover {\n color: ${tokens.colors.primary};\n }\n`;\n\nconst ExternalLinkIcon = styled.span`\n font-size: ${tokens.typography.fontSize.sm};\n color: ${tokens.colors.text.tertiary};\n flex-shrink: 0;\n`;\n\nconst PostContent = styled.p`\n font-size: ${tokens.typography.fontSize.base};\n color: ${tokens.colors.text.secondary};\n line-height: ${tokens.typography.lineHeight.relaxed};\n margin-bottom: ${tokens.spacing.sm};\n white-space: pre-wrap;\n`;\n\nconst PostAuthor = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.sm};\n font-size: ${tokens.typography.fontSize.sm};\n color: ${tokens.colors.text.tertiary};\n`;\n\nconst PostFlair = styled.span`\n padding: ${tokens.spacing.xs} ${tokens.spacing.sm};\n border-radius: ${tokens.borderRadius.sm};\n background: ${tokens.colors.surface.overlay};\n font-size: ${tokens.typography.fontSize.xs};\n color: ${tokens.colors.text.secondary};\n`;\n\nconst Divider = styled.hr`\n border: none;\n height: 1px;\n background: ${tokens.colors.border.default};\n margin: ${tokens.spacing.md} 0;\n`;\n\nconst ReplySection = styled.div``;\n\nconst ReplySectionHeader = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: ${tokens.spacing.sm};\n`;\n\nconst ReplyLabel = styled.span`\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.semibold};\n color: ${tokens.colors.text.secondary};\n text-transform: uppercase;\n letter-spacing: 0.5px;\n`;\n\nconst ReplyMeta = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.sm};\n`;\n\nconst ToneBadgeContainer = styled.span<{ $color: string }>`\n display: inline-flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n padding: ${tokens.spacing.xs} ${tokens.spacing.sm};\n border-radius: ${tokens.borderRadius.sm};\n font-size: ${tokens.typography.fontSize.xs};\n background: ${({ $color }) => `${$color}20`};\n color: ${({ $color }) => $color};\n`;\n\nconst ToneIcon = styled.img`\n width: 12px;\n height: 12px;\n`;\n\nconst CharacterCount = styled.span<{ $color: string }>`\n font-size: ${tokens.typography.fontSize.xs};\n font-family: ${tokens.typography.fontFamily.monospace};\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${({ $color }) => $color};\n`;\n\nconst ReplyContent = styled.div`\n font-size: ${tokens.typography.fontSize.base};\n line-height: ${tokens.typography.lineHeight.relaxed};\n color: ${tokens.colors.text.primary};\n white-space: pre-wrap;\n padding: ${tokens.spacing.md};\n background: ${tokens.colors.background.darker};\n border-radius: ${tokens.borderRadius.sm};\n border: 1px solid ${tokens.colors.border.default};\n margin-bottom: ${tokens.spacing.sm};\n min-height: 100px;\n animation: ${fadeIn} 0.3s ease-out;\n`;\n\nconst ReplyTextarea = styled.textarea`\n width: 100%;\n min-height: 150px;\n max-height: 400px;\n font-size: ${tokens.typography.fontSize.base};\n font-family: ${tokens.typography.fontFamily.primary};\n line-height: ${tokens.typography.lineHeight.relaxed};\n color: ${tokens.colors.text.primary};\n background: ${tokens.colors.background.darker};\n border: 1px solid ${tokens.colors.primary};\n border-radius: ${tokens.borderRadius.sm};\n padding: ${tokens.spacing.md};\n margin-bottom: ${tokens.spacing.sm};\n resize: vertical;\n box-sizing: border-box;\n transition: border-color ${tokens.transitions.fast}, box-shadow ${tokens.transitions.fast};\n\n &:focus {\n outline: none;\n box-shadow: 0 0 0 3px ${tokens.colors.primary}30;\n }\n\n &::placeholder {\n color: ${tokens.colors.text.tertiary};\n }\n`;\n\nconst StrategyHint = styled.div`\n display: flex;\n align-items: flex-start;\n gap: ${tokens.spacing.xs};\n padding: ${tokens.spacing.sm};\n background: ${tokens.colors.surface.overlay};\n border-radius: ${tokens.borderRadius.sm};\n margin-bottom: ${tokens.spacing.sm};\n`;\n\nconst StrategyIconImg = styled.img`\n width: 16px;\n height: 16px;\n opacity: 0.8;\n`;\n\nconst StrategyText = styled.span`\n font-size: ${tokens.typography.fontSize.sm};\n color: ${tokens.colors.text.secondary};\n font-style: italic;\n`;\n\nconst ProgressBarContainer = styled.div`\n margin-top: ${tokens.spacing.xs};\n`;\n\nconst ProgressBarTrack = styled.div`\n width: 100%;\n height: 4px;\n background: ${tokens.colors.border.default};\n border-radius: ${tokens.borderRadius.sm};\n overflow: hidden;\n`;\n\nconst ProgressBarFill = styled.div<{ $percentage: number; $color: string }>`\n width: ${({ $percentage }) => $percentage}%;\n height: 100%;\n border-radius: ${tokens.borderRadius.sm};\n transition: width 0.3s ease, background-color 0.3s ease;\n background: ${({ $color }) => $color};\n`;\n\nconst SkeletonContent = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.sm};\n padding: ${tokens.spacing.md};\n`;\n\nconst SkeletonLine = styled.div<{ $width: string }>`\n height: 16px;\n width: ${({ $width }) => $width};\n background: linear-gradient(\n 90deg,\n ${tokens.colors.border.default} 0%,\n rgba(255, 255, 255, 0.1) 50%,\n ${tokens.colors.border.default} 100%\n );\n background-size: 200% 100%;\n border-radius: ${tokens.borderRadius.sm};\n animation: ${shimmer} 1.5s ease-in-out infinite;\n`;\n\nexport default RedditOpportunityCard;\n","/**\n * RedditEngagementControls Component\n *\n * Action controls for the Reddit engagement workflow.\n * Handles: Copy & Open, Mark as Posted, Skip, Edit, Regenerate\n */\n\nimport type React from 'react';\nimport { useState, useCallback } from 'react';\nimport styled, { keyframes, css } from 'styled-components';\nimport type { RedditEngagementControlsProps } from './redditEngagementTypes';\nimport { tokens } from '../../theme/tokens';\n\n// =============================================================================\n// Component\n// =============================================================================\n\nexport const RedditEngagementControls: React.FC<RedditEngagementControlsProps> = ({\n opportunity,\n currentReply,\n isEditing,\n onToggleEdit,\n onSaveEdit,\n onCancelEdit,\n onCopyAndOpen,\n onMarkPosted,\n onSkip,\n onRegenerate,\n isLoading = false,\n justCopied = false,\n}) => {\n const [showRegenerateInput, setShowRegenerateInput] = useState(false);\n const [regenerateFeedback, setRegenerateFeedback] = useState('');\n const [copiedFeedback, setCopiedFeedback] = useState(false);\n // Track if user has engaged and what content was at that time\n const [engagedWithContent, setEngagedWithContent] = useState<string | null>(null);\n\n // Determine if currently engaged (content hasn't changed since engagement)\n const isEngaged = engagedWithContent !== null && engagedWithContent === currentReply;\n\n const handleCopyAndOpen = useCallback(async () => {\n try {\n await navigator.clipboard.writeText(currentReply);\n setCopiedFeedback(true);\n setEngagedWithContent(currentReply); // Mark as engaged with this content\n setTimeout(() => setCopiedFeedback(false), 2000);\n onCopyAndOpen();\n } catch (err) {\n console.error('Failed to copy:', err);\n }\n }, [currentReply, onCopyAndOpen]);\n\n const handleSkip = useCallback(() => {\n onSkip();\n }, [onSkip]);\n\n const handleRegenerate = useCallback(() => {\n if (showRegenerateInput) {\n onRegenerate(regenerateFeedback || undefined);\n setRegenerateFeedback('');\n setShowRegenerateInput(false);\n } else {\n setShowRegenerateInput(true);\n }\n }, [showRegenerateInput, regenerateFeedback, onRegenerate]);\n\n const isPending = opportunity.status === 'pending' || opportunity.status === 'editing';\n\n return (\n <ControlsContainer data-testid=\"reddit-engagement-controls\">\n {/* Edit mode controls */}\n {isEditing && (\n <EditModeSection>\n <EditModeLabel><Icon src=\"/assets/icon-set/Icon-edit-fill.svg\" alt=\"\" /> Editing Mode</EditModeLabel>\n <EditModeActions>\n <ActionButton $variant=\"cancel\" onClick={onCancelEdit} disabled={isLoading}>\n Cancel\n </ActionButton>\n <ActionButton\n $variant=\"save\"\n onClick={() => onSaveEdit(currentReply)}\n disabled={isLoading}\n >\n Save Changes\n </ActionButton>\n </EditModeActions>\n </EditModeSection>\n )}\n\n {/* Regenerate feedback input */}\n {showRegenerateInput && !isEditing && (\n <InputSection>\n <InputLabel>What should be different?</InputLabel>\n <InputRow>\n <TextInput\n value={regenerateFeedback}\n onChange={(e) => setRegenerateFeedback(e.target.value)}\n placeholder=\"Make it more casual, add specific example...\"\n onKeyDown={(e) => e.key === 'Enter' && handleRegenerate()}\n />\n <SmallButton onClick={() => setShowRegenerateInput(false)}>×</SmallButton>\n </InputRow>\n </InputSection>\n )}\n\n {/* Main action buttons */}\n {!isEditing && isPending && (\n <MainActions>\n <SecondaryActions>\n <ActionButton\n $variant=\"tertiary\"\n onClick={handleRegenerate}\n disabled={isLoading}\n title=\"Generate a new reply\"\n >\n <Icon src=\"/assets/icon-set/Icon-refresh-fill.svg\" alt=\"\" />\n {showRegenerateInput ? 'Confirm' : 'Regenerate'}\n </ActionButton>\n <ActionButton\n $variant=\"edit\"\n onClick={onToggleEdit}\n disabled={isLoading}\n title=\"Edit the draft reply\"\n >\n <Icon src=\"/assets/icon-set/Icon-edit-fill.svg\" alt=\"\" />\n Edit\n </ActionButton>\n <ActionButton\n $variant=\"skip\"\n onClick={handleSkip}\n disabled={isLoading}\n title=\"Skip this opportunity\"\n >\n <Icon src=\"/assets/icon-set/Icon-skip-forward-fill.svg\" alt=\"\" />\n Skip\n </ActionButton>\n </SecondaryActions>\n\n <PrimaryActions>\n <ActionButton\n $variant={isEngaged && !copiedFeedback ? 'engaged' : 'primary'}\n onClick={handleCopyAndOpen}\n disabled={isLoading || (isEngaged && !copiedFeedback)}\n $pulse={!justCopied && !copiedFeedback && !isEngaged}\n title={isEngaged ? 'Already copied - edit to re-enable' : 'Copy reply and open post in new tab'}\n >\n {copiedFeedback ? (\n <Icon src=\"/assets/icon-set/Icon-check-fill.svg\" alt=\"\" />\n ) : isEngaged ? (\n <Icon src=\"/assets/icon-set/Icon-check-fill.svg\" alt=\"\" />\n ) : (\n <Icon src=\"/assets/icon-set/Icon-clipboard-fill.svg\" alt=\"\" />\n )}\n {copiedFeedback ? 'Copied!' : isEngaged ? 'Engaged' : 'Engage'}\n </ActionButton>\n <ActionButton\n $variant=\"success\"\n onClick={onMarkPosted}\n disabled={isLoading || (!justCopied && !copiedFeedback && !isEngaged)}\n title=\"Mark as posted after you've replied\"\n >\n <Icon src=\"/assets/icon-set/Icon-check-fill.svg\" alt=\"\" />\n Mark as Posted\n </ActionButton>\n </PrimaryActions>\n </MainActions>\n )}\n\n </ControlsContainer>\n );\n};\n\nRedditEngagementControls.displayName = 'RedditEngagementControls';\n\n// =============================================================================\n// Styled Components\n// =============================================================================\n\nconst pulse = keyframes`\n 0%, 100% {\n box-shadow: 0 0 0 0 ${tokens.colors.primary}66;\n }\n 50% {\n box-shadow: 0 0 0 8px ${tokens.colors.primary}00;\n }\n`;\n\nconst ControlsContainer = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.md};\n padding: ${tokens.spacing.md};\n background: ${tokens.colors.background.dark};\n border-radius: ${tokens.borderRadius.lg};\n border: 1px solid ${tokens.colors.border.default};\n`;\n\nconst EditModeSection = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n background: ${tokens.colors.status.editing}20;\n border: 1px solid ${tokens.colors.status.editing}40;\n border-radius: ${tokens.borderRadius.md};\n`;\n\nconst EditModeLabel = styled.span`\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.status.editing};\n`;\n\nconst EditModeActions = styled.div`\n display: flex;\n gap: ${tokens.spacing.sm};\n`;\n\nconst InputSection = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.xs};\n`;\n\nconst InputLabel = styled.label`\n font-size: ${tokens.typography.fontSize.sm};\n color: ${tokens.colors.text.secondary};\n`;\n\nconst InputRow = styled.div`\n display: flex;\n gap: ${tokens.spacing.xs};\n flex-wrap: wrap;\n\n @media (max-width: 480px) {\n flex-direction: column;\n }\n`;\n\nconst TextInput = styled.input`\n flex: 1;\n min-width: 0;\n padding: ${tokens.spacing.sm};\n font-size: ${tokens.typography.fontSize.sm};\n color: ${tokens.colors.text.primary};\n background: ${tokens.colors.background.darker};\n border: 1px solid ${tokens.colors.border.default};\n border-radius: ${tokens.borderRadius.md};\n transition: border-color ${tokens.transitions.fast};\n\n &:focus {\n outline: none;\n border-color: ${tokens.colors.primary};\n }\n\n &::placeholder {\n color: ${tokens.colors.text.tertiary};\n }\n\n @media (max-width: 480px) {\n width: 100%;\n }\n`;\n\nconst SmallButton = styled.button`\n padding: ${tokens.spacing.sm};\n font-size: ${tokens.typography.fontSize.base};\n color: ${tokens.colors.text.tertiary};\n background: transparent;\n border: none;\n border-radius: ${tokens.borderRadius.md};\n cursor: pointer;\n transition: all ${tokens.transitions.fast};\n\n &:hover {\n color: ${tokens.colors.text.primary};\n background: ${tokens.colors.surface.overlay};\n }\n`;\n\nconst MainActions = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.md};\n`;\n\nconst SecondaryActions = styled.div`\n display: flex;\n gap: ${tokens.spacing.sm};\n flex-wrap: wrap;\n\n @media (max-width: 480px) {\n & > * {\n flex: 1 1 100%;\n }\n }\n`;\n\nconst PrimaryActions = styled.div`\n display: flex;\n gap: ${tokens.spacing.sm};\n flex-wrap: wrap;\n\n @media (max-width: 480px) {\n & > * {\n flex: 1 1 100%;\n }\n }\n`;\n\nconst Icon = styled.img`\n width: 16px;\n height: 16px;\n vertical-align: middle;\n`;\n\ntype ButtonVariant = 'primary' | 'success' | 'skip' | 'edit' | 'tertiary' | 'cancel' | 'save' | 'engaged';\n\nconst ActionButton = styled.button<{\n $variant: ButtonVariant;\n $pulse?: boolean;\n}>`\n display: flex;\n align-items: center;\n justify-content: center;\n gap: ${tokens.spacing.xs};\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n border-radius: ${tokens.borderRadius.md};\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.semibold};\n cursor: pointer;\n transition: all ${tokens.transitions.fast};\n border: none;\n white-space: nowrap;\n flex: 1;\n min-width: 100px;\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n ${({ $variant }) => {\n switch ($variant) {\n case 'primary':\n return css`\n background: ${tokens.colors.primary};\n color: white;\n &:hover:not(:disabled) {\n opacity: 0.9;\n }\n ${Icon} {\n filter: brightness(0) saturate(100%) invert(100%);\n }\n `;\n case 'success':\n return css`\n background: ${tokens.colors.success};\n color: white;\n &:hover:not(:disabled) {\n opacity: 0.9;\n }\n ${Icon} {\n filter: brightness(0) saturate(100%) invert(100%);\n }\n `;\n case 'skip':\n return css`\n background: transparent;\n color: ${tokens.colors.text.secondary};\n border: 1px solid ${tokens.colors.border.default};\n &:hover:not(:disabled) {\n background: ${tokens.colors.surface.overlay};\n border-color: ${tokens.colors.border.hover};\n }\n `;\n case 'edit':\n return css`\n background: ${tokens.colors.status.editing}20;\n color: ${tokens.colors.status.editing};\n border: 1px solid ${tokens.colors.status.editing}40;\n &:hover:not(:disabled) {\n background: ${tokens.colors.status.editing}30;\n }\n `;\n case 'tertiary':\n return css`\n background: transparent;\n color: ${tokens.colors.accent};\n border: 1px solid ${tokens.colors.accent}40;\n &:hover:not(:disabled) {\n background: ${tokens.colors.accent}20;\n }\n `;\n case 'cancel':\n return css`\n background: ${tokens.colors.error}15;\n color: ${tokens.colors.error};\n border: 1px solid ${tokens.colors.error}30;\n &:hover:not(:disabled) {\n background: ${tokens.colors.error}25;\n }\n `;\n case 'save':\n return css`\n background: ${tokens.colors.success};\n color: white;\n &:hover:not(:disabled) {\n opacity: 0.9;\n }\n `;\n case 'engaged':\n return css`\n background: ${tokens.colors.text.tertiary};\n color: ${tokens.colors.background.darker};\n cursor: default;\n ${Icon} {\n filter: brightness(0) saturate(100%) invert(15%);\n }\n `;\n default:\n return '';\n }\n }}\n\n ${({ $pulse }) =>\n $pulse &&\n css`\n animation: ${pulse} 2s ease-in-out infinite;\n `}\n`;\n\nexport default RedditEngagementControls;\n","/**\n * TokenUsageCard Component\n *\n * Displays token usage with a progress bar and transaction history.\n */\n\nimport type React from 'react';\nimport { useMemo } from 'react';\nimport styled, { keyframes } from 'styled-components';\nimport { tokens } from '../../theme/tokens';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface TokenTransaction {\n id: string;\n timestamp: string;\n type: 'input' | 'output' | 'system';\n tokens: number;\n description: string;\n source?: string;\n}\n\nexport interface TokenUsageCardProps {\n currentUsage: number;\n maxLimit: number;\n transactions: TokenTransaction[];\n periodLabel: string;\n onViewAll?: () => void;\n className?: string;\n /** Show loading skeleton state */\n loading?: boolean;\n}\n\n// =============================================================================\n// Icons (SVG asset paths)\n// =============================================================================\n\nconst TYPE_ICONS = {\n input: '/assets/icon-set/Icon-arrow-up-fill.svg',\n output: '/assets/icon-set/Icon-download-2-fill.svg',\n system: '/assets/icon-set/Icon-settings-3-fill.svg',\n};\n\n// =============================================================================\n// Helpers\n// =============================================================================\n\nfunction formatNumber(num: number): string {\n if (num >= 1000000) {\n return `${(num / 1000000).toFixed(1)}M`;\n }\n if (num >= 1000) {\n return `${(num / 1000).toFixed(1)}K`;\n }\n return num.toLocaleString();\n}\n\nfunction formatRelativeTime(timestamp: string): string {\n const now = new Date();\n const then = new Date(timestamp);\n const diffMs = now.getTime() - then.getTime();\n const diffMins = Math.floor(diffMs / 60000);\n const diffHours = Math.floor(diffMs / 3600000);\n const diffDays = Math.floor(diffMs / 86400000);\n\n if (diffMins < 1) return 'Just now';\n if (diffMins < 60) return `${diffMins}m ago`;\n if (diffHours < 24) return `${diffHours}h ago`;\n return `${diffDays}d ago`;\n}\n\nfunction getUsageLevel(percentage: number): 'low' | 'medium' | 'high' | 'critical' {\n if (percentage >= 90) return 'critical';\n if (percentage >= 75) return 'high';\n if (percentage >= 50) return 'medium';\n return 'low';\n}\n\nconst usageLevelColors = {\n low: tokens.colors.success,\n medium: tokens.colors.warning,\n high: '#ff8c00',\n critical: tokens.colors.error,\n};\n\nconst typeColors = {\n input: tokens.colors.info,\n output: tokens.colors.success,\n system: tokens.colors.text.tertiary,\n};\n\n// =============================================================================\n// Component\n// =============================================================================\n\nexport function TokenUsageCard({\n currentUsage,\n maxLimit,\n transactions,\n periodLabel,\n onViewAll,\n className,\n loading = false,\n}: TokenUsageCardProps): React.ReactElement {\n const percentage = useMemo(\n () => Math.min((currentUsage / maxLimit) * 100, 100),\n [currentUsage, maxLimit]\n );\n const usageLevel = useMemo(() => getUsageLevel(percentage), [percentage]);\n\n if (loading) {\n return (\n <Card className={className} data-testid=\"token-usage-card-loading\">\n <Header>\n <SkeletonBlock $width=\"120px\" $height=\"20px\" />\n <SkeletonBlock $width=\"80px\" $height=\"16px\" />\n </Header>\n <UsageSection>\n <SkeletonBlock $width=\"160px\" $height=\"28px\" />\n <SkeletonBlock $width=\"100%\" $height=\"8px\" $radius={tokens.borderRadius.full} />\n <SkeletonBlock $width=\"80px\" $height=\"14px\" />\n </UsageSection>\n <TransactionsSection>\n <SkeletonBlock $width=\"100px\" $height=\"14px\" />\n <TransactionsList>\n {[1, 2, 3].map((i) => (\n <TransactionItem key={i}>\n <SkeletonBlock $width=\"24px\" $height=\"24px\" $radius={tokens.borderRadius.sm} />\n <TransactionInfo>\n <SkeletonBlock $width=\"70%\" $height=\"14px\" />\n <SkeletonBlock $width=\"50%\" $height=\"12px\" />\n </TransactionInfo>\n <SkeletonBlock $width=\"32px\" $height=\"14px\" />\n </TransactionItem>\n ))}\n </TransactionsList>\n </TransactionsSection>\n </Card>\n );\n }\n\n return (\n <Card className={className} data-testid=\"token-usage-card\">\n <Header>\n <Title>Token Usage</Title>\n <Period>{periodLabel}</Period>\n </Header>\n\n <UsageSection>\n <UsageStats>\n <CurrentUsage>{formatNumber(currentUsage)}</CurrentUsage>\n <UsageSeparator>/</UsageSeparator>\n <MaxUsage>{formatNumber(maxLimit)}</MaxUsage>\n </UsageStats>\n <ProgressContainer>\n <ProgressBar $percentage={percentage} $level={usageLevel} />\n </ProgressContainer>\n <PercentageLabel $level={usageLevel}>{percentage.toFixed(1)}% used</PercentageLabel>\n </UsageSection>\n\n {transactions.length > 0 && (\n <TransactionsSection>\n <TransactionsHeader>Recent Activity</TransactionsHeader>\n <TransactionsList>\n {transactions.slice(0, 5).map((transaction) => (\n <TransactionItem key={transaction.id}>\n <TransactionIcon $type={transaction.type}>\n <img src={TYPE_ICONS[transaction.type]} alt=\"\" width={14} height={14} />\n </TransactionIcon>\n <TransactionInfo>\n <TransactionDescription>{transaction.description}</TransactionDescription>\n <TransactionMeta>\n {transaction.source && <span>{transaction.source}</span>}\n <span>{formatRelativeTime(transaction.timestamp)}</span>\n </TransactionMeta>\n </TransactionInfo>\n <TransactionTokens $type={transaction.type}>\n {transaction.type === 'output' ? '+' : ''}\n {formatNumber(transaction.tokens)}\n </TransactionTokens>\n </TransactionItem>\n ))}\n </TransactionsList>\n </TransactionsSection>\n )}\n\n {transactions.length === 0 && <EmptyState>No recent activity</EmptyState>}\n\n {onViewAll && transactions.length > 0 && (\n <ViewAllButton onClick={onViewAll}>View all activity</ViewAllButton>\n )}\n </Card>\n );\n}\n\n// =============================================================================\n// Styled Components\n// =============================================================================\n\nconst Card = styled.div`\n display: flex;\n flex-direction: column;\n background: ${tokens.colors.background.darker};\n border-radius: ${tokens.borderRadius.xl};\n border: 1px solid ${tokens.colors.border.default};\n overflow: hidden;\n`;\n\nconst Header = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n background: ${tokens.colors.background.darker};\n border-bottom: 1px solid ${tokens.colors.border.default};\n min-height: 48px;\n`;\n\nconst Title = styled.h3`\n margin: 0;\n font-size: ${tokens.typography.fontSize.lg};\n font-weight: ${tokens.typography.fontWeight.semibold};\n font-family: ${tokens.typography.fontFamily.primary};\n color: ${tokens.colors.text.primary};\n`;\n\nconst Period = styled.span`\n font-size: ${tokens.typography.fontSize.sm};\n font-family: ${tokens.typography.fontFamily.primary};\n color: ${tokens.colors.text.secondary};\n`;\n\nconst UsageSection = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.sm};\n padding: ${tokens.spacing.md};\n`;\n\nconst UsageStats = styled.div`\n display: flex;\n align-items: baseline;\n gap: ${tokens.spacing.xs};\n`;\n\nconst CurrentUsage = styled.span`\n font-size: ${tokens.typography.fontSize['2xl']};\n font-weight: ${tokens.typography.fontWeight.bold};\n font-family: ${tokens.typography.fontFamily.primary};\n color: ${tokens.colors.text.primary};\n`;\n\nconst UsageSeparator = styled.span`\n font-size: ${tokens.typography.fontSize.lg};\n font-family: ${tokens.typography.fontFamily.primary};\n color: ${tokens.colors.text.tertiary};\n`;\n\nconst MaxUsage = styled.span`\n font-size: ${tokens.typography.fontSize.lg};\n font-family: ${tokens.typography.fontFamily.primary};\n color: ${tokens.colors.text.secondary};\n`;\n\nconst ProgressContainer = styled.div`\n width: 100%;\n height: 8px;\n background: ${tokens.colors.background.light};\n border-radius: ${tokens.borderRadius.full};\n overflow: hidden;\n`;\n\ninterface ProgressBarProps {\n $percentage: number;\n $level: 'low' | 'medium' | 'high' | 'critical';\n}\n\nconst ProgressBar = styled.div<ProgressBarProps>`\n height: 100%;\n width: ${({ $percentage }) => $percentage}%;\n background: ${({ $level }) => usageLevelColors[$level]};\n border-radius: ${tokens.borderRadius.full};\n transition: width ${tokens.transitions.normal}, background ${tokens.transitions.normal};\n`;\n\nconst PercentageLabel = styled.span<{\n $level: 'low' | 'medium' | 'high' | 'critical';\n}>`\n font-size: ${tokens.typography.fontSize.sm};\n font-family: ${tokens.typography.fontFamily.primary};\n color: ${({ $level }) => usageLevelColors[$level]};\n`;\n\nconst TransactionsSection = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.sm};\n padding: ${tokens.spacing.sm} ${tokens.spacing.md} ${tokens.spacing.md};\n border-top: 1px solid ${tokens.colors.border.subtle};\n`;\n\nconst TransactionsHeader = styled.h4`\n margin: 0;\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.semibold};\n font-family: ${tokens.typography.fontFamily.primary};\n color: ${tokens.colors.text.secondary};\n`;\n\nconst TransactionsList = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.xs};\n`;\n\nconst TransactionItem = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.sm};\n padding: ${tokens.spacing.sm};\n border-radius: ${tokens.borderRadius.sm};\n min-width: 0;\n overflow: hidden;\n transition: background-color ${tokens.transitions.fast};\n\n &:hover {\n background-color: ${tokens.colors.surface.overlayHover};\n }\n`;\n\nconst TransactionIcon = styled.span<{ $type: 'input' | 'output' | 'system' }>`\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: ${tokens.colors.background.light};\n border-radius: ${tokens.borderRadius.sm};\n\n img {\n filter: ${({ $type }) => {\n if ($type === 'input') {\n return 'brightness(0) saturate(100%) invert(55%) sepia(83%) saturate(1956%) hue-rotate(190deg) brightness(101%) contrast(101%)';\n }\n if ($type === 'output') {\n return 'brightness(0) saturate(100%) invert(73%) sepia(34%) saturate(547%) hue-rotate(99deg) brightness(91%) contrast(89%)';\n }\n return 'brightness(0) saturate(100%) invert(70%) sepia(0%) saturate(0%) hue-rotate(0deg) brightness(90%) contrast(85%)';\n }};\n }\n`;\n\nconst TransactionInfo = styled.div`\n flex: 1;\n min-width: 0;\n overflow: hidden;\n`;\n\nconst TransactionDescription = styled.div`\n font-size: ${tokens.typography.fontSize.sm};\n font-family: ${tokens.typography.fontFamily.primary};\n color: ${tokens.colors.text.primary};\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nconst TransactionMeta = styled.div`\n display: flex;\n gap: ${tokens.spacing.sm};\n font-size: ${tokens.typography.fontSize.xs};\n font-family: ${tokens.typography.fontFamily.primary};\n color: ${tokens.colors.text.tertiary};\n overflow: hidden;\n\n span {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n`;\n\nconst TransactionTokens = styled.span<{ $type: 'input' | 'output' | 'system' }>`\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.medium};\n font-family: ${tokens.typography.fontFamily.primary};\n color: ${({ $type }) => typeColors[$type]};\n flex-shrink: 0;\n`;\n\nconst EmptyState = styled.div`\n text-align: center;\n padding: ${tokens.spacing.lg} ${tokens.spacing.md};\n font-size: ${tokens.typography.fontSize.sm};\n font-family: ${tokens.typography.fontFamily.primary};\n color: ${tokens.colors.text.tertiary};\n`;\n\nconst ViewAllButton = styled.button`\n margin: 0 ${tokens.spacing.md} ${tokens.spacing.md};\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n background: transparent;\n border: 1px solid ${tokens.colors.border.default};\n border-radius: ${tokens.borderRadius.md};\n font-size: ${tokens.typography.fontSize.sm};\n font-family: ${tokens.typography.fontFamily.primary};\n color: ${tokens.colors.text.secondary};\n cursor: pointer;\n transition: all ${tokens.transitions.fast};\n\n &:hover {\n background: ${tokens.colors.background.light};\n border-color: ${tokens.colors.border.hover};\n color: ${tokens.colors.text.primary};\n }\n`;\n\n// Skeleton loading animation\nconst pulse = keyframes`\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.4; }\n`;\n\nconst SkeletonBlock = styled.div<{\n $width: string;\n $height: string;\n $radius?: string;\n}>`\n width: ${({ $width }) => $width};\n height: ${({ $height }) => $height};\n background: ${tokens.colors.background.light};\n border-radius: ${({ $radius }) => $radius || tokens.borderRadius.sm};\n animation: ${pulse} 1.5s ease-in-out infinite;\n`;\n\nexport default TokenUsageCard;\n","/**\n * WorkflowCard Component\n *\n * A card for displaying available workflows in a list.\n * Used for browsing and activating workflows, showing\n * integrations and input requirements.\n */\n\nimport type React from 'react';\nimport styled from 'styled-components';\nimport { tokens } from '../../theme/tokens';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface WorkflowIntegration {\n /** Icon URL or path */\n icon: string;\n /** Integration name for alt text */\n name: string;\n /** Whether this integration is connected */\n connected?: boolean;\n /** Whether this integration is optional (softer visual when not connected) */\n optional?: boolean;\n}\n\nexport interface WorkflowCardProps {\n /** Unique identifier for the workflow */\n id: string;\n /** Workflow name */\n name: string;\n /** Workflow description */\n description?: string;\n /** List of required integrations */\n integrations?: WorkflowIntegration[];\n /** Whether the workflow needs setup (not yet provisioned) */\n needsSetup?: boolean;\n /** Estimated cost per run (e.g., \"~$0.15\") */\n estimatedCostPerRun?: string;\n /** Click handler */\n onClick?: () => void;\n /** Whether the card is disabled */\n disabled?: boolean;\n /** Optional className for styling */\n className?: string;\n}\n\n// =============================================================================\n// Component\n// =============================================================================\n\nexport const WorkflowCard: React.FC<WorkflowCardProps> = ({\n id,\n name,\n description,\n integrations = [],\n needsSetup = false,\n estimatedCostPerRun,\n onClick,\n disabled = false,\n className,\n}) => {\n const missingCount = integrations.filter((i) => i.connected === false && !i.optional).length;\n const hasFooter = integrations.length > 0 || needsSetup || !!estimatedCostPerRun;\n\n return (\n <Card\n data-testid={`workflow-card-${id}`}\n onClick={disabled ? undefined : onClick}\n disabled={disabled}\n className={className}\n type=\"button\"\n >\n <WorkflowName data-testid=\"workflow-card-name\">{name}</WorkflowName>\n\n {description && <Description>{description}</Description>}\n\n {hasFooter && (\n <CardFooter>\n <IntegrationList>\n {integrations.map((integration) => (\n <IntegrationIconWrapper\n key={integration.name}\n $connected={integration.connected !== false}\n $optional={!!integration.optional}\n title={`${integration.name}${integration.connected === false ? (integration.optional ? ' (optional)' : ' (not connected)') : ''}`}\n >\n <IntegrationIcon\n src={integration.icon}\n alt={integration.name}\n />\n </IntegrationIconWrapper>\n ))}\n </IntegrationList>\n\n <Indicators>\n {estimatedCostPerRun && (\n <IndicatorPill $variant=\"info\" title={`Estimated cost: ${estimatedCostPerRun}${estimatedCostPerRun.includes('/') ? '' : ' per run'}`}>\n <IndicatorText>{estimatedCostPerRun}{estimatedCostPerRun.includes('/') ? '' : '/run'}</IndicatorText>\n </IndicatorPill>\n )}\n {missingCount > 0 && (\n <IndicatorPill\n $variant=\"warning\"\n title={`${missingCount} integration${missingCount > 1 ? 's' : ''} not connected`}\n >\n <IndicatorDot $variant=\"warning\" />\n <IndicatorText>\n {missingCount} missing\n </IndicatorText>\n </IndicatorPill>\n )}\n {needsSetup && (\n <IndicatorPill $variant=\"warning\" title=\"Setup required before use\">\n <IndicatorDot $variant=\"warning\" />\n <IndicatorText>Needs Setup</IndicatorText>\n </IndicatorPill>\n )}\n </Indicators>\n </CardFooter>\n )}\n </Card>\n );\n};\n\nWorkflowCard.displayName = 'WorkflowCard';\n\n// =============================================================================\n// Styled Components\n// =============================================================================\n\nconst Card = styled.button`\n display: grid;\n gap: ${tokens.spacing.sm};\n padding: ${tokens.spacing.md};\n background: ${tokens.colors.background.dark};\n border-radius: ${tokens.borderRadius.xl};\n border: 1px solid ${tokens.colors.border.default};\n cursor: pointer;\n text-align: left;\n width: 100%;\n font-family: ${tokens.typography.fontFamily.primary};\n transition: border-color ${tokens.transitions.fast}, background-color ${tokens.transitions.fast};\n\n &:hover:not(:disabled) {\n border-color: ${tokens.colors.border.hover};\n background: ${tokens.colors.background.light};\n }\n\n &:active:not(:disabled) {\n background: ${tokens.colors.surface.overlayActive};\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n`;\n\nconst WorkflowName = styled.h3`\n margin: 0;\n font-size: ${tokens.typography.fontSize.base};\n font-weight: ${tokens.typography.fontWeight.semibold};\n color: ${tokens.colors.text.primary};\n line-height: ${tokens.typography.lineHeight.tight};\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n min-width: 0;\n`;\n\nconst Description = styled.p`\n margin: 0;\n font-size: ${tokens.typography.fontSize.sm};\n color: ${tokens.colors.text.tertiary};\n line-height: ${tokens.typography.lineHeight.normal};\n overflow: hidden;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n word-break: break-word;\n min-width: 0;\n`;\n\nconst CardFooter = styled.div`\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: ${tokens.spacing.sm};\n padding-top: ${tokens.spacing.sm};\n border-top: 1px solid ${tokens.colors.border.subtle};\n width: 100%;\n`;\n\nconst IntegrationList = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n flex-shrink: 0;\n`;\n\ninterface IntegrationIconWrapperProps {\n $connected: boolean;\n $optional?: boolean;\n}\n\nconst IntegrationIconWrapper = styled.span<IntegrationIconWrapperProps>`\n display: flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n border-radius: ${tokens.borderRadius.sm};\n background: ${tokens.colors.background.light};\n opacity: ${({ $connected, $optional }) => ($connected ? 1 : $optional ? 0.3 : 0.4)};\n position: relative;\n flex-shrink: 0;\n\n ${({ $connected, $optional }) =>\n !$connected &&\n `\n &::after {\n content: '';\n position: absolute;\n inset: 0;\n border: 1px dashed ${$optional ? tokens.colors.border.default : tokens.colors.warning};\n border-radius: ${tokens.borderRadius.sm};\n }\n `}\n`;\n\nconst IntegrationIcon = styled.img`\n width: 16px;\n height: 16px;\n object-fit: contain;\n`;\n\nconst Indicators = styled.div`\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: ${tokens.spacing.xs};\n margin-left: auto;\n min-width: 0;\n`;\n\ninterface IndicatorVariantProps {\n $variant: 'warning' | 'info';\n}\n\nconst IndicatorPill = styled.span<IndicatorVariantProps>`\n display: inline-flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n padding: ${tokens.spacing.xs} ${tokens.spacing.sm};\n border-radius: ${tokens.borderRadius.full};\n background: ${({ $variant }) =>\n $variant === 'warning'\n ? `${tokens.colors.warning}15`\n : `${tokens.colors.info}15`};\n border: 1px solid ${({ $variant }) =>\n $variant === 'warning'\n ? `${tokens.colors.warning}30`\n : `${tokens.colors.info}30`};\n`;\n\nconst IndicatorDot = styled.span<IndicatorVariantProps>`\n width: 6px;\n height: 6px;\n border-radius: ${tokens.borderRadius.full};\n background: ${({ $variant }) =>\n $variant === 'warning' ? tokens.colors.warning : tokens.colors.info};\n flex-shrink: 0;\n`;\n\nconst IndicatorText = styled.span`\n font-size: ${tokens.typography.fontSize.xs};\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.text.secondary};\n white-space: nowrap;\n`;\n\nexport default WorkflowCard;\n","/**\n * WorkflowErrorAlert Component\n *\n * Displays workflow execution errors with inline, banner, or modal variants.\n *\n * @see specs/015-restyle-ai-chat/spec.md\n */\n\nimport type React from 'react';\nimport { useState } from 'react';\nimport styled from 'styled-components';\nimport { tokens } from '../../theme/tokens';\n\n// Severity color mapping using design tokens\nconst severityColors = {\n error: tokens.colors.error,\n warning: tokens.colors.warning,\n info: tokens.colors.info,\n};\n\ninterface AlertContainerProps {\n variant: 'inline' | 'banner' | 'modal';\n severity: 'error' | 'warning' | 'info';\n}\n\nconst AlertContainer = styled.div<AlertContainerProps>`\n display: flex;\n flex-direction: column;\n background-color: ${(props) => {\n const alpha = props.variant === 'modal' ? '26' : props.variant === 'banner' ? '1a' : '0d';\n return `${severityColors[props.severity]}${alpha}`;\n }};\n border: 1px solid ${(props) => {\n const alpha = props.variant === 'modal' ? '66' : '4d';\n return `${severityColors[props.severity]}${alpha}`;\n }};\n border-radius: ${(props) => (props.variant === 'banner' ? '0' : tokens.borderRadius.md)};\n padding: ${(props) => (props.variant === 'modal' ? tokens.spacing.lg : tokens.spacing.md)};\n margin: ${(props) => (props.variant === 'banner' ? '0' : `${tokens.spacing.sm} 0`)};\n width: ${(props) => (props.variant === 'modal' ? 'auto' : '100%')};\n max-width: ${(props) => (props.variant === 'inline' ? '600px' : '100%')};\n font-family: ${tokens.typography.fontFamily.primary};\n`;\n\nconst ModalOverlay = styled.div<{ isOpen: boolean }>`\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: ${tokens.colors.overlay};\n display: ${(props) => (props.isOpen ? 'flex' : 'none')};\n align-items: center;\n justify-content: center;\n z-index: ${tokens.zIndex.modal};\n padding: ${tokens.spacing.lg};\n`;\n\nconst ModalContent = styled.div`\n background-color: ${tokens.colors.background.dark};\n border-radius: ${tokens.borderRadius.lg};\n max-width: 500px;\n width: 100%;\n box-shadow: ${tokens.shadows.xl};\n`;\n\nconst Header = styled.div`\n display: flex;\n align-items: flex-start;\n gap: ${tokens.spacing.md};\n`;\n\nconst IconContainer = styled.div<{ severity: 'error' | 'warning' | 'info' }>`\n flex-shrink: 0;\n width: 24px;\n height: 24px;\n color: ${(props) => severityColors[props.severity]};\n`;\n\nconst Content = styled.div`\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.sm};\n`;\n\nconst Title = styled.div`\n font-size: ${tokens.typography.fontSize.base};\n font-weight: ${tokens.typography.fontWeight.semibold};\n color: ${tokens.colors.text.primary};\n line-height: ${tokens.typography.lineHeight.tight};\n`;\n\nconst ErrorMessage = styled.div`\n font-size: ${tokens.typography.fontSize.sm};\n line-height: ${tokens.typography.lineHeight.normal};\n color: ${tokens.colors.text.secondary};\n`;\n\nconst ErrorCode = styled.div`\n font-size: ${tokens.typography.fontSize.xs};\n color: ${tokens.colors.text.secondary};\n font-family: ${tokens.typography.fontFamily.monospace};\n margin-top: ${tokens.spacing.xs};\n`;\n\nconst Timestamp = styled.div`\n font-size: ${tokens.typography.fontSize.xs};\n color: ${tokens.colors.text.tertiary};\n margin-top: ${tokens.spacing.xs};\n`;\n\nconst Details = styled.details`\n margin-top: ${tokens.spacing.md};\n cursor: pointer;\n\n summary {\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.text.secondary};\n user-select: none;\n list-style: none;\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n\n &:hover {\n color: ${tokens.colors.text.primary};\n }\n\n &::-webkit-details-marker {\n display: none;\n }\n }\n`;\n\nconst DetailsIcon = styled.span<{ open: boolean }>`\n display: inline-block;\n transition: transform ${tokens.transitions.fast};\n transform: ${(props) => (props.open ? 'rotate(90deg)' : 'rotate(0deg)')};\n`;\n\nconst StackTrace = styled.pre`\n margin: ${tokens.spacing.sm} 0 0 0;\n padding: ${tokens.spacing.md};\n background-color: ${tokens.colors.surface.subtle};\n border-radius: ${tokens.borderRadius.sm};\n font-family: ${tokens.typography.fontFamily.monospace};\n font-size: ${tokens.typography.fontSize.xs};\n line-height: ${tokens.typography.lineHeight.normal};\n color: ${tokens.colors.text.secondary};\n white-space: pre-wrap;\n word-break: break-word;\n overflow-x: auto;\n`;\n\nconst Actions = styled.div`\n display: flex;\n gap: ${tokens.spacing.sm};\n margin-top: ${tokens.spacing.md};\n`;\n\nconst Button = styled.button<{ variant: 'primary' | 'secondary' }>`\n display: inline-flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${(props) => (props.variant === 'primary' ? tokens.colors.text.primary : tokens.colors.text.secondary)};\n background: ${(props) => (props.variant === 'primary' ? tokens.colors.error : tokens.colors.surface.overlay)};\n border: 1px solid\n ${(props) => (props.variant === 'primary' ? tokens.colors.error : tokens.colors.border.default)};\n border-radius: ${tokens.borderRadius.md};\n cursor: pointer;\n transition: all ${tokens.transitions.fast};\n\n &:hover {\n background: ${(props) =>\n props.variant === 'primary' ? tokens.colors.error : tokens.colors.surface.overlayHover};\n border-color: ${(props) =>\n props.variant === 'primary' ? tokens.colors.error : tokens.colors.border.hover};\n }\n\n &:active {\n transform: scale(0.98);\n }\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n`;\n\nconst CloseButton = styled.button`\n position: absolute;\n top: ${tokens.spacing.md};\n right: ${tokens.spacing.md};\n width: 32px;\n height: 32px;\n padding: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background: transparent;\n border: none;\n color: ${tokens.colors.text.secondary};\n cursor: pointer;\n border-radius: ${tokens.borderRadius.sm};\n transition: all ${tokens.transitions.fast};\n\n &:hover {\n background: ${tokens.colors.surface.overlayHover};\n color: ${tokens.colors.text.primary};\n }\n\n &:active {\n transform: scale(0.95);\n }\n\n svg {\n width: 20px;\n height: 20px;\n }\n`;\n\n// Icons\nconst ErrorIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n width=\"24\"\n height=\"24\"\n >\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z\" />\n </svg>\n);\n\nconst WarningIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n width=\"24\"\n height=\"24\"\n >\n <path d=\"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z\" />\n </svg>\n);\n\nconst InfoIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n width=\"24\"\n height=\"24\"\n >\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z\" />\n </svg>\n);\n\nconst CloseIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\n </svg>\n);\n\nconst ChevronIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n width=\"16\"\n height=\"16\"\n >\n <path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\" />\n </svg>\n);\n\nexport interface WorkflowErrorAlertProps {\n /** Error object or message */\n error: Error | string;\n /** Optional error code */\n errorCode?: string;\n /** Timestamp of the error */\n timestamp?: string;\n /** Visual variant */\n variant?: 'inline' | 'banner' | 'modal';\n /** Severity level */\n severity?: 'error' | 'warning' | 'info';\n /** Whether the error can be retried */\n retryable?: boolean;\n /** Callback when retry is clicked */\n onRetry?: () => void;\n /** Callback when dismiss is clicked */\n onDismiss?: () => void;\n /** Whether to show details section */\n showDetails?: boolean;\n /** Stack trace to display */\n stackTrace?: string;\n /** Custom title */\n title?: string;\n /** Custom className */\n className?: string;\n}\n\n/**\n * WorkflowErrorAlert component for displaying workflow errors\n *\n * Features:\n * - Inline, banner, and modal variants\n * - Severity levels (error/warning/info)\n * - Error code and timestamp display\n * - Expandable stack trace\n * - Retry and dismiss actions\n * - Accessible error reporting\n */\nexport const WorkflowErrorAlert: React.FC<WorkflowErrorAlertProps> = ({\n error,\n errorCode,\n timestamp,\n variant = 'inline',\n severity = 'error',\n retryable = false,\n onRetry,\n onDismiss,\n showDetails = false,\n stackTrace,\n title,\n className,\n}) => {\n const [detailsOpen, setDetailsOpen] = useState(false);\n const [isModalOpen, setIsModalOpen] = useState(variant === 'modal');\n\n const errorMessage = typeof error === 'string' ? error : error.message;\n const defaultTitle =\n severity === 'error' ? 'Workflow Error' : severity === 'warning' ? 'Warning' : 'Information';\n const displayTitle = title || defaultTitle;\n\n const handleDismiss = () => {\n if (variant === 'modal') {\n setIsModalOpen(false);\n }\n onDismiss?.();\n };\n\n const getIcon = () => {\n switch (severity) {\n case 'error':\n return <ErrorIcon />;\n case 'warning':\n return <WarningIcon />;\n case 'info':\n return <InfoIcon />;\n }\n };\n\n const alertContent = (\n <AlertContainer variant={variant} severity={severity} className={className} role=\"alert\">\n <Header>\n <IconContainer severity={severity} aria-hidden=\"true\">\n {getIcon()}\n </IconContainer>\n <Content>\n <Title>{displayTitle}</Title>\n <ErrorMessage>{errorMessage}</ErrorMessage>\n {errorCode && <ErrorCode>Error Code: {errorCode}</ErrorCode>}\n {timestamp && <Timestamp>{new Date(timestamp).toLocaleString()}</Timestamp>}\n\n {showDetails && (stackTrace || (typeof error === 'object' && error.stack)) && (\n <Details\n open={detailsOpen}\n onToggle={(e) => setDetailsOpen((e.target as HTMLDetailsElement).open)}\n >\n <summary>\n <DetailsIcon open={detailsOpen}>\n <ChevronIcon />\n </DetailsIcon>\n Show Details\n </summary>\n <StackTrace>\n {stackTrace || (typeof error === 'object' ? error.stack : '')}\n </StackTrace>\n </Details>\n )}\n\n {(retryable || onDismiss) && (\n <Actions>\n {retryable && onRetry && (\n <Button variant=\"primary\" onClick={onRetry}>\n Retry\n </Button>\n )}\n {onDismiss && (\n <Button variant=\"secondary\" onClick={handleDismiss}>\n Dismiss\n </Button>\n )}\n </Actions>\n )}\n </Content>\n {variant !== 'modal' && onDismiss && (\n <CloseButton onClick={handleDismiss} aria-label=\"Dismiss alert\">\n <CloseIcon />\n </CloseButton>\n )}\n </Header>\n </AlertContainer>\n );\n\n if (variant === 'modal') {\n return (\n <ModalOverlay isOpen={isModalOpen} onClick={handleDismiss}>\n <ModalContent onClick={(e) => e.stopPropagation()}>\n {alertContent}\n <CloseButton onClick={handleDismiss} aria-label=\"Close modal\">\n <CloseIcon />\n </CloseButton>\n </ModalContent>\n </ModalOverlay>\n );\n }\n\n return alertContent;\n};\n\nWorkflowErrorAlert.displayName = 'WorkflowErrorAlert';\n","/**\n * WorkflowProgressBar Component\n *\n * Displays workflow execution progress with linear or circular variants.\n *\n * @see specs/015-restyle-ai-chat/spec.md\n */\n\nimport type React from 'react';\nimport styled, { keyframes } from 'styled-components';\nimport { tokens } from '../../theme/tokens';\n\nconst indeterminate = keyframes`\n 0% {\n transform: translateX(-100%);\n }\n 100% {\n transform: translateX(400%);\n }\n`;\n\nconst rotate = keyframes`\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n`;\n\n// Status color mapping using design tokens\nconst statusColors = {\n pending: tokens.colors.status.pending,\n running: tokens.colors.status.running,\n completed: tokens.colors.status.completed,\n failed: tokens.colors.status.failed,\n timeout: tokens.colors.status.timeout,\n};\n\nconst Container = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.sm};\n width: 100%;\n font-family: ${tokens.typography.fontFamily.primary};\n`;\n\nconst ProgressMessage = styled.div<{ size: 'sm' | 'md' | 'lg' }>`\n font-size: ${(props) => {\n switch (props.size) {\n case 'sm':\n return tokens.typography.fontSize.xs;\n case 'lg':\n return tokens.typography.fontSize.base;\n case 'md':\n default:\n return tokens.typography.fontSize.sm;\n }\n }};\n color: ${tokens.colors.text.secondary};\n line-height: ${tokens.typography.lineHeight.normal};\n`;\n\nconst ProgressInfo = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: ${tokens.spacing.xs};\n`;\n\nconst PercentageText = styled.span<{ size: 'sm' | 'md' | 'lg' }>`\n font-size: ${(props) => {\n switch (props.size) {\n case 'sm':\n return tokens.typography.fontSize.xs;\n case 'lg':\n return tokens.typography.fontSize.base;\n case 'md':\n default:\n return tokens.typography.fontSize.sm;\n }\n }};\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.text.primary};\n`;\n\n// Linear Progress Bar\nconst LinearTrack = styled.div<{ size: 'sm' | 'md' | 'lg' }>`\n position: relative;\n width: 100%;\n height: ${(props) => {\n switch (props.size) {\n case 'sm':\n return tokens.spacing.xs;\n case 'lg':\n return tokens.spacing.sm;\n case 'md':\n default:\n return '6px';\n }\n }};\n background-color: ${tokens.colors.border.default};\n border-radius: ${tokens.borderRadius.full};\n overflow: hidden;\n`;\n\ninterface LinearFillProps {\n progress: number;\n status: 'pending' | 'running' | 'completed' | 'failed' | 'timeout';\n animated: boolean;\n indeterminate: boolean;\n}\n\nconst LinearFill = styled.div<LinearFillProps>`\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n width: ${(props) => (props.indeterminate ? '25%' : `${props.progress}%`)};\n background-color: ${(props) => statusColors[props.status]};\n border-radius: ${tokens.borderRadius.full};\n transition: ${(props) => (props.animated && !props.indeterminate ? `width ${tokens.transitions.normal}` : 'none')};\n animation: ${(props) => (props.indeterminate ? indeterminate : 'none')} 1.5s ease-in-out infinite;\n`;\n\n// Circular Progress Bar\nconst CircularContainer = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n`;\n\nconst CircularSvg = styled.svg<{ size: 'sm' | 'md' | 'lg' }>`\n width: ${(props) => {\n switch (props.size) {\n case 'sm':\n return tokens.spacing.xl;\n case 'lg':\n return '80px';\n case 'md':\n default:\n return '60px';\n }\n }};\n height: ${(props) => {\n switch (props.size) {\n case 'sm':\n return tokens.spacing.xl;\n case 'lg':\n return '80px';\n case 'md':\n default:\n return '60px';\n }\n }};\n transform: rotate(-90deg);\n`;\n\ninterface CircularTrackProps {\n size: 'sm' | 'md' | 'lg';\n}\n\nconst getCircularSize = (size: 'sm' | 'md' | 'lg') => {\n switch (size) {\n case 'sm':\n return { radius: 16, strokeWidth: 3 };\n case 'lg':\n return { radius: 36, strokeWidth: 6 };\n case 'md':\n default:\n return { radius: 26, strokeWidth: 4 };\n }\n};\n\nconst CircularTrack = styled.circle<CircularTrackProps>`\n fill: none;\n stroke: ${tokens.colors.border.default};\n stroke-width: ${(props) => getCircularSize(props.size).strokeWidth};\n`;\n\ninterface CircularFillProps {\n progress: number;\n status: 'pending' | 'running' | 'completed' | 'failed' | 'timeout';\n size: 'sm' | 'md' | 'lg';\n animated: boolean;\n indeterminate: boolean;\n}\n\nconst CircularFill = styled.circle<CircularFillProps>`\n fill: none;\n stroke: ${(props) => statusColors[props.status]};\n stroke-width: ${(props) => getCircularSize(props.size).strokeWidth};\n stroke-dasharray: ${(props) => {\n const { radius } = getCircularSize(props.size);\n const circumference = 2 * Math.PI * radius;\n return props.indeterminate ? `${circumference * 0.25} ${circumference}` : circumference;\n }};\n stroke-dashoffset: ${(props) => {\n const { radius } = getCircularSize(props.size);\n const circumference = 2 * Math.PI * radius;\n return props.indeterminate ? 0 : circumference * (1 - props.progress / 100);\n }};\n stroke-linecap: round;\n transition: ${(props) => (props.animated && !props.indeterminate ? `stroke-dashoffset ${tokens.transitions.normal}` : 'none')};\n animation: ${(props) => (props.indeterminate ? rotate : 'none')} 1.5s linear infinite;\n`;\n\nconst CircularPercentage = styled.text<{ size: 'sm' | 'md' | 'lg' }>`\n fill: ${tokens.colors.text.primary};\n font-size: ${(props) => {\n switch (props.size) {\n case 'sm':\n return tokens.typography.fontSize.xs;\n case 'lg':\n return tokens.typography.fontSize.base;\n case 'md':\n default:\n return tokens.typography.fontSize.xs;\n }\n }};\n font-weight: ${tokens.typography.fontWeight.semibold};\n text-anchor: middle;\n dominant-baseline: middle;\n transform: rotate(90deg);\n transform-origin: center;\n`;\n\nexport interface WorkflowProgressBarProps {\n /** Progress percentage (0-100), or undefined for indeterminate */\n progress?: number;\n /** Optional message to display */\n message?: string;\n /** Status affects the color */\n status?: 'pending' | 'running' | 'completed' | 'failed' | 'timeout';\n /** Visual variant */\n variant?: 'linear' | 'circular';\n /** Size of the progress bar */\n size?: 'sm' | 'md' | 'lg';\n /** Whether to show percentage text */\n showPercentage?: boolean;\n /** Whether to animate progress changes */\n animated?: boolean;\n /** Custom className */\n className?: string;\n}\n\n/**\n * WorkflowProgressBar component for showing workflow execution progress\n *\n * Features:\n * - Linear and circular variants\n * - Determinate and indeterminate modes\n * - Color-coded status (gray/blue/green/red/orange)\n * - Size options (sm/md/lg)\n * - Optional percentage display\n * - Smooth animations\n * - Progress message support\n */\nexport const WorkflowProgressBar: React.FC<WorkflowProgressBarProps> = ({\n progress,\n message,\n status = 'running',\n variant = 'linear',\n size = 'md',\n showPercentage = true,\n animated = true,\n className,\n}) => {\n const isIndeterminate = progress === undefined;\n const progressValue = progress ?? 0;\n\n if (variant === 'circular') {\n const { radius } = getCircularSize(size);\n const center = radius + getCircularSize(size).strokeWidth;\n\n return (\n <Container className={className}>\n {message && <ProgressMessage size={size}>{message}</ProgressMessage>}\n <CircularContainer>\n <CircularSvg\n size={size}\n viewBox={`0 0 ${center * 2} ${center * 2}`}\n role=\"progressbar\"\n aria-valuenow={progressValue}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={message || `${progressValue}% complete`}\n >\n <CircularTrack size={size} cx={center} cy={center} r={radius} />\n <CircularFill\n progress={progressValue}\n status={status}\n size={size}\n animated={animated}\n indeterminate={isIndeterminate}\n cx={center}\n cy={center}\n r={radius}\n />\n {showPercentage && !isIndeterminate && (\n <CircularPercentage size={size} x={center} y={center}>\n {Math.round(progressValue)}%\n </CircularPercentage>\n )}\n </CircularSvg>\n </CircularContainer>\n </Container>\n );\n }\n\n return (\n <Container className={className}>\n {(message || showPercentage) && (\n <ProgressInfo>\n {message && <ProgressMessage size={size}>{message}</ProgressMessage>}\n {showPercentage && !isIndeterminate && (\n <PercentageText size={size}>{Math.round(progressValue)}%</PercentageText>\n )}\n </ProgressInfo>\n )}\n <LinearTrack\n size={size}\n role=\"progressbar\"\n aria-valuenow={progressValue}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={message || `${progressValue}% complete`}\n >\n <LinearFill\n progress={progressValue}\n status={status}\n animated={animated}\n indeterminate={isIndeterminate}\n />\n </LinearTrack>\n </Container>\n );\n};\n\nWorkflowProgressBar.displayName = 'WorkflowProgressBar';\n","/**\n * WorkflowResultPanel Component\n *\n * Displays workflow execution results with JSON/formatted/table views.\n *\n * @see specs/015-restyle-ai-chat/spec.md\n */\n\nimport type React from 'react';\nimport { useState } from 'react';\nimport styled from 'styled-components';\nimport { tokens } from '../../theme/tokens';\n\nconst Panel = styled.div<{ collapsible: boolean; expanded: boolean }>`\n display: flex;\n flex-direction: column;\n background-color: ${tokens.colors.surface.overlay};\n border: 1px solid ${tokens.colors.border.default};\n border-radius: ${tokens.borderRadius.md};\n overflow: hidden;\n font-family: ${tokens.typography.fontFamily.primary};\n`;\n\nconst Header = styled.div<{ collapsible: boolean }>`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n background-color: ${tokens.colors.surface.subtle};\n border-bottom: 1px solid ${tokens.colors.border.default};\n cursor: ${(props) => (props.collapsible ? 'pointer' : 'default')};\n user-select: none;\n\n &:hover {\n background-color: ${(props) => (props.collapsible ? tokens.colors.surface.overlay : tokens.colors.surface.subtle)};\n }\n`;\n\nconst Title = styled.div`\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.text.primary};\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.sm};\n`;\n\nconst Actions = styled.div`\n display: flex;\n gap: ${tokens.spacing.sm};\n`;\n\nconst IconButton = styled.button`\n display: flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n padding: 0;\n background: ${tokens.colors.surface.overlay};\n border: 1px solid ${tokens.colors.border.default};\n border-radius: ${tokens.borderRadius.sm};\n color: ${tokens.colors.text.secondary};\n cursor: pointer;\n transition: all ${tokens.transitions.fast};\n\n &:hover {\n background: ${tokens.colors.surface.overlayHover};\n border-color: ${tokens.colors.border.hover};\n color: ${tokens.colors.text.primary};\n }\n\n &:active {\n transform: scale(0.95);\n }\n\n svg {\n width: 16px;\n height: 16px;\n }\n`;\n\nconst CollapseIcon = styled.div<{ expanded: boolean }>`\n display: flex;\n align-items: center;\n justify-content: center;\n transition: transform ${tokens.transitions.fast};\n transform: ${(props) => (props.expanded ? 'rotate(180deg)' : 'rotate(0deg)')};\n color: ${tokens.colors.text.secondary};\n\n svg {\n width: 16px;\n height: 16px;\n }\n`;\n\nconst Content = styled.div<{ maxHeight?: string; expanded: boolean }>`\n padding: ${tokens.spacing.md};\n max-height: ${(props) => {\n if (!props.expanded) return '0';\n return props.maxHeight || '400px';\n }};\n overflow: ${(props) => (props.expanded ? 'auto' : 'hidden')};\n transition: max-height ${tokens.transitions.normal};\n\n /* Custom scrollbar */\n &::-webkit-scrollbar {\n width: 8px;\n }\n\n &::-webkit-scrollbar-track {\n background: ${tokens.colors.scrollbar.track};\n border-radius: ${tokens.borderRadius.sm};\n }\n\n &::-webkit-scrollbar-thumb {\n background: ${tokens.colors.scrollbar.thumb};\n border-radius: ${tokens.borderRadius.sm};\n }\n\n &::-webkit-scrollbar-thumb:hover {\n background: ${tokens.colors.scrollbar.thumbHover};\n }\n`;\n\nconst JsonView = styled.pre`\n margin: 0;\n font-family: ${tokens.typography.fontFamily.monospace};\n font-size: ${tokens.typography.fontSize.sm};\n line-height: ${tokens.typography.lineHeight.normal};\n color: ${tokens.colors.text.secondary};\n white-space: pre-wrap;\n word-break: break-word;\n`;\n\nconst FormattedView = styled.div`\n font-size: ${tokens.typography.fontSize.sm};\n line-height: ${tokens.typography.lineHeight.normal};\n color: ${tokens.colors.text.secondary};\n`;\n\nconst TableView = styled.table`\n width: 100%;\n border-collapse: collapse;\n font-size: ${tokens.typography.fontSize.sm};\n\n th {\n text-align: left;\n padding: ${tokens.spacing.sm} ${tokens.spacing.sm};\n background-color: ${tokens.colors.surface.overlay};\n border-bottom: 1px solid ${tokens.colors.border.default};\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${tokens.colors.text.primary};\n }\n\n td {\n padding: ${tokens.spacing.sm} ${tokens.spacing.sm};\n border-bottom: 1px solid ${tokens.colors.border.subtle};\n color: ${tokens.colors.text.secondary};\n }\n\n tr:last-child td {\n border-bottom: none;\n }\n`;\n\nconst EmptyState = styled.div`\n padding: ${tokens.spacing.xl};\n text-align: center;\n color: ${tokens.colors.text.tertiary};\n font-size: ${tokens.typography.fontSize.sm};\n`;\n\n// Icons\nconst DownloadIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z\" />\n </svg>\n);\n\nconst CopyIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z\" />\n </svg>\n);\n\nconst ChevronIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z\" />\n </svg>\n);\n\nexport interface WorkflowResultPanelProps {\n /** Output data to display */\n outputData: unknown;\n /** Visual variant */\n variant?: 'json' | 'formatted' | 'table';\n /** Whether the panel can be collapsed */\n collapsible?: boolean;\n /** Default expanded state */\n defaultExpanded?: boolean;\n /** Maximum height of content area */\n maxHeight?: string;\n /** Callback when download is clicked */\n onDownload?: () => void;\n /** Callback when copy is clicked */\n onCopy?: () => void;\n /** Custom title */\n title?: string;\n /** Custom className */\n className?: string;\n}\n\n/**\n * WorkflowResultPanel component for displaying workflow results\n *\n * Features:\n * - JSON, formatted, and table view variants\n * - Collapsible content\n * - Download and copy actions\n * - Maximum height with scrolling\n * - Empty state handling\n * - Syntax highlighting for JSON\n */\nexport const WorkflowResultPanel: React.FC<WorkflowResultPanelProps> = ({\n outputData,\n variant = 'json',\n collapsible = true,\n defaultExpanded = true,\n maxHeight,\n onDownload,\n onCopy,\n title = 'Result',\n className,\n}) => {\n const [expanded, setExpanded] = useState(defaultExpanded);\n\n const handleToggle = () => {\n if (collapsible) {\n setExpanded(!expanded);\n }\n };\n\n const renderContent = () => {\n if (!outputData) {\n return <EmptyState>No results available</EmptyState>;\n }\n\n switch (variant) {\n case 'json':\n return <JsonView>{JSON.stringify(outputData, null, 2)}</JsonView>;\n\n case 'formatted':\n if (typeof outputData === 'object') {\n return (\n <FormattedView>\n {Object.entries(outputData as Record<string, unknown>).map(([key, value]) => (\n <div key={key}>\n <strong>{key}:</strong> {String(value)}\n </div>\n ))}\n </FormattedView>\n );\n }\n return <FormattedView>{String(outputData)}</FormattedView>;\n\n case 'table':\n if (Array.isArray(outputData) && outputData.length > 0) {\n const keys = Object.keys(outputData[0] as Record<string, unknown>);\n return (\n <TableView>\n <thead>\n <tr>\n {keys.map((key) => (\n <th key={key}>{key}</th>\n ))}\n </tr>\n </thead>\n <tbody>\n {outputData.map((row, idx) => (\n <tr key={idx}>\n {keys.map((key) => (\n <td key={key}>{String((row as Record<string, unknown>)[key])}</td>\n ))}\n </tr>\n ))}\n </tbody>\n </TableView>\n );\n }\n return <EmptyState>Data is not in table format</EmptyState>;\n\n default:\n return <EmptyState>Unsupported variant</EmptyState>;\n }\n };\n\n return (\n <Panel collapsible={collapsible} expanded={expanded} className={className}>\n <Header collapsible={collapsible} onClick={handleToggle}>\n <Title>\n {title}\n {collapsible && (\n <CollapseIcon expanded={expanded}>\n <ChevronIcon />\n </CollapseIcon>\n )}\n </Title>\n <Actions onClick={(e) => e.stopPropagation()}>\n {onCopy && (\n <IconButton onClick={onCopy} title=\"Copy to clipboard\" aria-label=\"Copy to clipboard\">\n <CopyIcon />\n </IconButton>\n )}\n {onDownload && (\n <IconButton onClick={onDownload} title=\"Download\" aria-label=\"Download results\">\n <DownloadIcon />\n </IconButton>\n )}\n </Actions>\n </Header>\n <Content maxHeight={maxHeight} expanded={expanded}>\n {renderContent()}\n </Content>\n </Panel>\n );\n};\n\nWorkflowResultPanel.displayName = 'WorkflowResultPanel';\n","/**\n * WorkflowStatusBadge Component\n *\n * Displays workflow execution status with color coding.\n *\n * @see specs/015-restyle-ai-chat/spec.md\n */\n\nimport type React from 'react';\nimport styled, { keyframes } from 'styled-components';\nimport { tokens } from '../../theme/tokens';\n\nconst spin = keyframes`\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n`;\n\nconst pulse = keyframes`\n 0%, 100% {\n opacity: 1;\n }\n 50% {\n opacity: 0.5;\n }\n`;\n\n// Status color mapping using design tokens\nconst statusColors = {\n pending: tokens.colors.status.pending,\n running: tokens.colors.status.running,\n completed: tokens.colors.status.completed,\n failed: tokens.colors.status.failed,\n timeout: tokens.colors.status.timeout,\n};\n\ninterface BadgeContainerProps {\n $status: 'pending' | 'running' | 'completed' | 'failed' | 'timeout';\n $size: 'sm' | 'md' | 'lg';\n}\n\nconst BadgeContainer = styled.div<BadgeContainerProps>`\n display: inline-flex;\n align-items: center;\n gap: ${(props) => {\n switch (props.$size) {\n case 'sm':\n return tokens.spacing.xs;\n case 'lg':\n return tokens.spacing.sm;\n case 'md':\n default:\n return '6px';\n }\n }};\n padding: ${(props) => {\n switch (props.$size) {\n case 'sm':\n return `${tokens.spacing.xs} ${tokens.spacing.sm}`;\n case 'lg':\n return `${tokens.spacing.sm} ${tokens.spacing.md}`;\n case 'md':\n default:\n return `6px ${tokens.spacing.md}`;\n }\n }};\n background-color: ${(props) => `${statusColors[props.$status]}1A`};\n border: 1px solid ${(props) => `${statusColors[props.$status]}4D`};\n border-radius: ${(props) => {\n switch (props.$size) {\n case 'sm':\n return tokens.borderRadius.sm;\n case 'lg':\n return tokens.borderRadius.md;\n case 'md':\n default:\n return tokens.borderRadius.md;\n }\n }};\n font-family: ${tokens.typography.fontFamily.primary};\n font-size: ${(props) => {\n switch (props.$size) {\n case 'sm':\n return '11px';\n case 'lg':\n return '15px';\n case 'md':\n default:\n return '13px';\n }\n }};\n font-weight: ${tokens.typography.fontWeight.medium};\n color: ${(props) => statusColors[props.$status]};\n line-height: 1.4;\n`;\n\ninterface IconContainerProps {\n $animated?: boolean;\n $status: 'pending' | 'running' | 'completed' | 'failed' | 'timeout';\n}\n\nconst IconContainer = styled.div<IconContainerProps>`\n display: flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n animation: ${(props) => {\n if (props.$animated) {\n if (props.$status === 'running') return spin;\n if (props.$status === 'pending') return pulse;\n }\n return 'none';\n }}\n ${(props) => (props.$status === 'running' ? '1s' : '2s')} linear infinite;\n`;\n\n// Status icons\nconst PendingIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n width=\"16\"\n height=\"16\"\n >\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm.5-13H11v6l5.25 3.15.75-1.23-4.5-2.67z\" />\n </svg>\n);\n\nconst RunningIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n width=\"16\"\n height=\"16\"\n >\n <path\n d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\"\n opacity=\"0.3\"\n />\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z\" />\n </svg>\n);\n\nconst CompletedIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n width=\"16\"\n height=\"16\"\n >\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\" />\n </svg>\n);\n\nconst FailedIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n width=\"16\"\n height=\"16\"\n >\n <path d=\"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z\" />\n </svg>\n);\n\nconst TimeoutIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n width=\"16\"\n height=\"16\"\n >\n <path d=\"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z\" />\n </svg>\n);\n\nconst Label = styled.span`\n white-space: nowrap;\n`;\n\nexport interface WorkflowStatusBadgeProps {\n /** Workflow execution status */\n status: 'pending' | 'running' | 'completed' | 'failed' | 'timeout';\n /** Size of the badge */\n size?: 'sm' | 'md' | 'lg';\n /** Whether to show status icon */\n showIcon?: boolean;\n /** Whether to show status label */\n showLabel?: boolean;\n /** Whether to animate the icon */\n animated?: boolean;\n /** Custom status label text */\n label?: string;\n /** Custom className */\n className?: string;\n}\n\nconst getDefaultLabel = (status: WorkflowStatusBadgeProps['status']): string => {\n switch (status) {\n case 'pending':\n return 'Pending';\n case 'running':\n return 'Running';\n case 'completed':\n return 'Completed';\n case 'failed':\n return 'Failed';\n case 'timeout':\n return 'Timeout';\n }\n};\n\nconst getStatusIcon = (status: WorkflowStatusBadgeProps['status']): React.ReactNode => {\n switch (status) {\n case 'pending':\n return <PendingIcon />;\n case 'running':\n return <RunningIcon />;\n case 'completed':\n return <CompletedIcon />;\n case 'failed':\n return <FailedIcon />;\n case 'timeout':\n return <TimeoutIcon />;\n }\n};\n\n/**\n * WorkflowStatusBadge component for showing workflow execution status\n *\n * Features:\n * - Color-coded status badges (gray/blue/green/red/orange)\n * - Status icons with optional animations\n * - Size options (sm/md/lg)\n * - Optional status labels\n * - Spinning animation for running state\n * - Pulse animation for pending state\n */\nexport const WorkflowStatusBadge: React.FC<WorkflowStatusBadgeProps> = ({\n status,\n size = 'md',\n showIcon = true,\n showLabel = true,\n animated = true,\n label,\n className,\n}) => {\n const displayLabel = label || getDefaultLabel(status);\n\n return (\n <BadgeContainer\n $status={status}\n $size={size}\n className={className}\n role=\"status\"\n aria-label={displayLabel}\n >\n {showIcon && (\n <IconContainer $animated={animated} $status={status} aria-hidden=\"true\">\n {getStatusIcon(status)}\n </IconContainer>\n )}\n {showLabel && <Label>{displayLabel}</Label>}\n </BadgeContainer>\n );\n};\n\nWorkflowStatusBadge.displayName = 'WorkflowStatusBadge';\n"]}
|