@agentiffai/design 0.1.2 → 0.1.4

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/NotificationCard/NotificationCard.styles.ts","../src/components/NotificationCard/NotificationCard.tsx"],"names":["styled","useState","jsx","useRef","useButton","jsxs"],"mappings":"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","file":"index.cjs","sourcesContent":["import styled from 'styled-components';\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: 20px;\n background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%);\n border-radius: 20px;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08);\n gap: 12px;\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: 8px 4px;\n border: none;\n background: transparent;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu',\n 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;\n font-size: 16px;\n font-weight: 700;\n color: #2c3e50;\n text-align: left;\n cursor: pointer;\n transition: all 0.2s ease;\n\n &:hover {\n color: #1a252f;\n }\n\n &:focus-visible {\n outline: 2px solid #5b9fff;\n outline-offset: 2px;\n border-radius: 8px;\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 0.2s ease;\n color: #6c757d;\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: 8px;\n padding-left: 0;\n margin-top: 4px;\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: 12px;\n width: 100%;\n padding: ${(props) => (props.$isSelected ? '12px 16px' : '10px 12px')};\n border: none;\n cursor: pointer;\n text-align: left;\n transition: all 0.2s ease;\n border-radius: ${(props) => (props.$isSelected ? '12px' : '10px')};\n\n /* Default state - transparent background */\n background-color: ${(props) => (props.$isSelected ? '#2c3e50' : 'transparent')};\n\n /* Hover state */\n &:hover:not(:disabled) {\n background-color: ${(props) => (props.$isSelected ? '#1a252f' : 'rgba(255, 255, 255, 0.5)')};\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 ? '#ffffff' : '#5b9fff')};\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 ? '6px' : '50%')};\n background-color: ${(props) => props.$iconColor || 'transparent'};\n color: ${(props) => (props.$hasCustomIcon ? '#ffffff' : '#6c757d')};\n font-size: ${(props) => (props.$hasCustomIcon ? '16px' : '14px')};\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: 2px;\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: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu',\n 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;\n font-size: 15px;\n font-weight: ${(props) => (props.$isSelected ? '500' : '400')};\n color: ${(props) => (props.$isSelected ? '#ffffff' : '#5a5a5a')};\n line-height: 1.5;\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: 6px;\n background-color: transparent;\n color: #ffffff;\n cursor: pointer;\n transition: all 0.2s ease;\n flex-shrink: 0;\n\n &:hover:not(:disabled) {\n background-color: rgba(255, 255, 255, 0.15);\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 #ffffff;\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"]}
1
+ {"version":3,"sources":["../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/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/tokens.ts","../src/theme/darkTheme.ts","../src/theme/GlobalStyle.tsx","../src/theme/lightTheme.ts","../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/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/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/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/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.styles.ts","../src/components/icons/InstagramIcon/InstagramIcon.tsx","../src/components/icons/LinkedInIcon/LinkedInIcon.styles.ts","../src/components/icons/LinkedInIcon/LinkedInIcon.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"],"names":["keyframes","styled","useRef","jsxs","jsx","useState","useTextField","useButton","Container","NAV_BG","css","IconWrapper","BG_TERTIARY","TEXT_PRIMARY","TEXT_SECONDARY","TEXT_MUTED","ACCENT_COLOR","HOVER_BG","DisclosureGroup","Disclosure","Button","DisclosurePanel","Heading","useMeter","useTab","useTabList","useTabPanel","useTabListState","Fragment","Item","BackButton","ChevronIcon","ItemIcon","createGlobalStyle","dotPulse","LoadingDots","Dot","Message","ActionButton","InputWrapper","Avatar","useEffect","StyledUserMessage","MessageContent","UserMessage","useId","StyledIconWrapper","SVG_CONTENT"],"mappings":"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","file":"index.cjs","sourcesContent":["import styled, { keyframes } from 'styled-components';\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\nexport const Container = styled.div`\n display: inline-flex;\n align-items: center;\n gap: 12px;\n padding: 12px 16px;\n background-color: #2c2c2e;\n border-radius: 16px;\n box-shadow: none;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu',\n 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;\n max-width: fit-content;\n margin: 0 auto;\n`;\n\nexport const Avatar = styled.div`\n width: 40px;\n height: 40px;\n border-radius: 50%;\n background: linear-gradient(135deg, #8B5CF6 0%, #EC4899 100%);\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n box-shadow: 0 2px 8px rgba(139, 92, 246, 0.3);\n`;\n\nexport const HeadphonesIcon = styled.svg`\n width: 20px;\n height: 20px;\n color: #FFFFFF;\n`;\n\nexport const Content = styled.div`\n display: flex;\n align-items: center;\n gap: 8px;\n`;\n\nexport const LoadingDots = styled.div`\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 0 4px;\n`;\n\nexport const Dot = styled.span`\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background-color: #8e8e93;\n animation: ${dotPulse} 1.4s ease-in-out infinite;\n`;\n\nexport const Message = styled.span`\n font-size: 14px;\n color: #e5e5e7;\n font-weight: 400;\n line-height: 1.5;\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}\n\nexport function AssistantThinking({\n message = 'Analyzing data, please wait...',\n className,\n ariaLabel = 'Assistant is thinking',\n}: AssistantThinkingProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n\n return (\n <Container\n ref={containerRef}\n className={className}\n role=\"status\"\n aria-live=\"polite\"\n aria-label={ariaLabel}\n >\n <Avatar aria-hidden=\"true\">\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 <LoadingDots aria-hidden=\"true\">\n <Dot style={{ animationDelay: '0ms' }} />\n <Dot style={{ animationDelay: '150ms' }} />\n <Dot style={{ animationDelay: '300ms' }} />\n </LoadingDots>\n <Message>{message}</Message>\n </Content>\n </Container>\n );\n}\n\nAssistantThinking.displayName = 'AssistantThinking';\n","import styled from 'styled-components';\n\n/**\n * Main container for the chat input component with dark theme\n */\nexport const ChatInputContainer = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n padding: 8px;\n background: transparent;\n border-radius: 0;\n box-shadow: none;\n box-sizing: border-box;\n\n @media (min-width: 640px) {\n padding: 12px;\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: 8px;\n margin-bottom: 12px;\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: 8px 16px;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu',\n 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;\n font-size: 13px;\n font-weight: 400;\n text-align: center;\n border: 1px solid #3a3a3c;\n border-radius: 20px;\n cursor: pointer;\n transition: all 0.15s ease;\n white-space: nowrap;\n\n /* Dark theme colors */\n background-color: #2c2c2e;\n color: #e5e5e7;\n\n /* Hover state */\n &:hover:not(:disabled) {\n background-color: #3a3a3c;\n border-color: #48484a;\n }\n\n /* Active state */\n &:active:not(:disabled) {\n background-color: #48484a;\n }\n\n /* Focus state */\n &:focus-visible {\n outline: 2px solid #5B9FFF;\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: center;\n gap: 10px;\n padding: 10px 14px;\n background-color: #2c2c2e;\n border: 1px solid #3a3a3c;\n border-radius: 12px;\n transition: all 0.2s ease;\n width: 100%;\n box-sizing: border-box;\n\n &:focus-within {\n border-color: #5B9FFF;\n background-color: #323234;\n }\n`;\n\n/**\n * Text input field - Dark theme\n */\nexport const InputField = styled.input`\n flex: 1;\n border: none;\n outline: none;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu',\n 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;\n font-size: 14px;\n color: #e5e5e7;\n background: transparent;\n\n &::placeholder {\n color: #6e6e73;\n }\n\n &:disabled {\n color: #6e6e73;\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: 50%;\n background-color: ${(props) => (props.disabled ? '#3a3a3c' : '#5B9FFF')};\n color: ${(props) => (props.disabled ? '#6e6e73' : '#ffffff')};\n cursor: ${(props) => (props.disabled ? 'not-allowed' : 'pointer')};\n transition: all 0.2s ease;\n flex-shrink: 0;\n\n &:hover:not(:disabled) {\n background-color: #4A8FEF;\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 #5B9FFF;\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 { useTextField } from '@react-aria/textfield';\nimport React, { type KeyboardEvent, 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 * - Single-line input with submit button\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 ...ariaProps\n}) => {\n const [internalValue, setInternalValue] = useState(value);\n const inputRef = useRef<HTMLInputElement>(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 // React ARIA hook for accessibility\n const { inputProps } = useTextField(\n {\n ...ariaProps,\n 'aria-label': ariaLabel,\n value: currentValue,\n onChange: (newValue: string) => {\n setValue(newValue);\n },\n isDisabled,\n isReadOnly,\n },\n inputRef\n );\n\n // Handle keyboard events\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n // Submit on Enter\n if (e.key === 'Enter') {\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 // Refocus the input after sending\n inputRef.current?.focus();\n }\n };\n\n // Handle suggestion selection\n const handleSuggestionClick = (suggestionText: string) => {\n if (onSuggestionSelect && !isDisabled && !isReadOnly) {\n onSuggestionSelect(suggestionText);\n // Optionally set the suggestion as the input value\n setValue(suggestionText);\n inputRef.current?.focus();\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 {...inputProps}\n ref={inputRef}\n type=\"text\"\n placeholder={placeholder}\n onKeyDown={handleKeyDown}\n autoFocus={autoFocus}\n disabled={isDisabled}\n readOnly={isReadOnly}\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 from 'styled-components';\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 === '#ffffff' || $color === '#fff') {\n return 'brightness(0) saturate(100%) invert(100%)';\n }\n if ($color === '#b9bbbe') {\n // Discord gray\n return 'brightness(0) saturate(100%) invert(75%) sepia(8%) saturate(223%) hue-rotate(180deg) brightness(94%) contrast(86%)';\n }\n if ($color === '#ed4245' || $color === '#f04747') {\n // Discord 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: 'settings-3-fill',\n SETTINGS_FILL: 'settings-fill',\n SETTINGS_LINE: 'settings-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} 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-fill': 'Icon-settings-3-fill.svg',\n 'settings-fill': 'Icon-settings-fill.svg',\n 'settings-line': 'Icon-settings-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};\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';\n\n// Colors based on the design\nconst NAV_BG = '#232428';\nconst NAV_BORDER = '#1E1F22';\n\nexport const Container = styled.nav`\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n background-color: ${NAV_BG};\n border-top: 1px solid ${NAV_BORDER};\n height: 52px;\n z-index: 10;\n\n /* Dark theme support */\n @media (prefers-color-scheme: dark) {\n background-color: #1a1b1e;\n }\n`;\n\nexport const ContentWrapper = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n height: 100%;\n padding: 0 8px;\n max-width: 100%;\n\n /* Responsive padding */\n @media (min-width: 768px) {\n padding: 0 16px;\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: 0 1 auto;\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: 4px;\n flex-shrink: 0;\n\n /* Ensure buttons stay visible */\n @media (min-width: 480px) {\n gap: 8px;\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';\n\n// Colors based on the design\nconst NAV_BG = '#202225';\nconst NAV_SEPARATOR = '#36393F';\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: ${NAV_BG};\n display: flex;\n flex-direction: column;\n z-index: 9; /* Below horizontal nav and chat sidebar */\n overflow-y: auto;\n overflow-x: hidden;\n scrollbar-width: none; /* Firefox */\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: #1a1b1e;\n }\n\n /* Responsive adjustments */\n @media (max-width: 768px) {\n width: 60px; /* Match MainPane left offset on mobile */\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: 768px) {\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: 50%;\n border: none;\n background-color: ${NAV_SEPARATOR};\n color: #ffffff;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.2s ease-in-out;\n\n &:hover {\n background-color: #5865F2;\n }\n\n &:active {\n transform: translate(-50%, -50%) scale(0.95);\n }\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: 2px solid #5865F2;\n outline-offset: 2px;\n }\n`;\n\nexport const BackButtonIcon = styled.span`\n font-size: 20px;\n line-height: 1;\n font-weight: bold;\n`;\n\nexport const Separator = styled.div`\n width: 32px;\n height: 2px;\n background-color: ${NAV_SEPARATOR};\n align-self: center;\n margin: 8px auto 12px;\n border-radius: 1px;\n`;\n\nexport const FolderGroupsSlot = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n padding: 0 12px 12px;\n flex: 1;\n\n /* Server/workspace icons styling */\n > * {\n width: 48px;\n height: 48px;\n border-radius: 50%;\n transition: border-radius 0.15s ease-out;\n cursor: pointer;\n\n &:hover {\n border-radius: 16px;\n }\n }\n\n /* Responsive adjustments */\n @media (max-width: 768px) {\n padding: 0 6px 12px; /* Reduce horizontal padding on mobile */\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 Container,\n FolderGroupsSlot,\n Separator,\n TopSection,\n} from './NavVertical.styles';\n\nexport interface NavVerticalProps {\n onBackClick?: () => void;\n onHomeClick?: () => void;\n folderGroupsSlot?: ReactNode;\n className?: string;\n 'aria-label'?: string;\n}\n\nexport function NavVertical({\n onBackClick,\n onHomeClick,\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\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 return (\n <Container className={className} role=\"navigation\" aria-label={ariaLabel}>\n <TopSection>\n {onBackClick ? (\n <BackButton {...backButtonProps} ref={backButtonRef}>\n <Icon name=\"arrow-left-fill\" size={20} color=\"white\" />\n </BackButton>\n ) : onHomeClick ? (\n <BackButton {...homeButtonProps} ref={homeButtonRef}>\n <Icon name=\"home-fill\" size={24} color=\"white\" />\n </BackButton>\n ) : null}\n </TopSection>\n\n <Separator />\n\n <FolderGroupsSlot>{folderGroupsSlot}</FolderGroupsSlot>\n </Container>\n );\n}\n\nNavVertical.displayName = 'NavVertical';\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n position: relative;\n width: 100%;\n height: 100vh;\n background-color: #36393f;\n overflow: hidden;\n\n /* Dark theme support */\n @media (prefers-color-scheme: dark) {\n background-color: #2f3136;\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: #36393f;\n overflow: auto;\n\n /* Custom scrollbar styling */\n &::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n }\n\n &::-webkit-scrollbar-track {\n background: transparent;\n }\n\n &::-webkit-scrollbar-thumb {\n background-color: #202225;\n border-radius: 4px;\n }\n\n &::-webkit-scrollbar-thumb:hover {\n background-color: #18191c;\n }\n\n /* Firefox scrollbar */\n scrollbar-width: thin;\n scrollbar-color: #202225 transparent;\n\n /* Dark theme support */\n @media (prefers-color-scheme: dark) {\n background-color: #2f3136;\n }\n\n /* Responsive adjustments */\n @media (max-width: 768px) {\n left: 60px; /* Smaller nav on mobile */\n }\n`;\n","import type { ReactNode } from 'react';\nimport { NavHorizontal } from '../NavHorizontal';\nimport { NavVertical } from '../NavVertical';\nimport { Container, MainPane } from './Layout.styles';\n\nexport interface LayoutProps {\n mainPaneSlot: ReactNode;\n navVerticalSlot?: ReactNode;\n navHorizontalUserSlot?: ReactNode;\n navHorizontalActionsSlot?: ReactNode;\n onNavBackClick?: () => void;\n className?: string;\n}\n\nexport function Layout({\n mainPaneSlot,\n navVerticalSlot,\n navHorizontalUserSlot,\n navHorizontalActionsSlot,\n onNavBackClick,\n className,\n}: LayoutProps) {\n return (\n <Container className={className}>\n <NavVertical folderGroupsSlot={navVerticalSlot} onBackClick={onNavBackClick} />\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';\n\nexport const Container = styled.div`\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 4px;\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 ? '50%' : '4px')};\n border: none;\n background-color: ${({ $isPrimary }) => ($isPrimary ? '#5865F2' : 'transparent')};\n color: ${({ $isPrimary }) => ($isPrimary ? '#FFFFFF' : '#b9bbbe')};\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.15s ease;\n font-size: 16px;\n\n &:hover {\n background-color: ${({ $isPrimary }) => ($isPrimary ? '#4752C4' : 'rgba(255, 255, 255, 0.1)')};\n color: ${({ $isPrimary }) => ($isPrimary ? '#FFFFFF' : '#dcddde')};\n }\n\n &:active {\n transform: scale(0.95);\n }\n\n ${({ $isActive, $isPrimary }) =>\n $isActive &&\n !$isPrimary &&\n css`\n background-color: rgba(255, 255, 255, 0.08);\n color: #ffffff;\n `}\n\n ${({ $isActive, $isPrimary }) =>\n $isActive &&\n $isPrimary &&\n css`\n background-color: #4752C4;\n color: #ffffff;\n `}\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: 2px solid #5865f2;\n outline-offset: 2px;\n }\n`;\n","import { useButton } from '@react-aria/button';\nimport type { ReactNode } from 'react';\nimport { useRef } from 'react';\nimport { Icon } from '../Icon';\nimport { ActionButton, Container } from './ActionButtons.styles';\n\nexport interface ActionButtonsProps {\n onCalendarClick?: () => void;\n onSettingsClick?: () => void;\n onChatClick?: () => void;\n isCalendarActive?: boolean;\n isSettingsActive?: 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 onSettingsClick,\n onChatClick,\n isCalendarActive = false,\n isSettingsActive = 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=\"#b9bbbe\" />}\n label=\"Calendar\"\n onClick={onCalendarClick}\n isActive={isCalendarActive}\n size={32}\n />\n <ActionButtonItem\n icon={<Icon name=\"settings-3-fill\" size={16} color=\"#b9bbbe\" />}\n label=\"Settings\"\n onClick={onSettingsClick}\n isActive={isSettingsActive}\n size={32}\n />\n <ActionButtonItem\n icon={<Icon name=\"chat-1-fill\" size={16} color=\"#b9bbbe\" />}\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';\n\nconst statusColors = {\n online: '#43B581',\n idle: '#FAA61A',\n busy: '#F04747',\n offline: '#747F8D',\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: flex;\n align-items: center;\n gap: 8px;\n padding: 4px 6px;\n border-radius: 4px;\n border: none;\n background: transparent;\n color: inherit;\n font: inherit;\n transition: background-color 0.2s ease, opacity 0.2s ease;\n cursor: ${(props) => (props.$isDisabled ? 'not-allowed' : 'pointer')};\n opacity: ${(props) => (props.$isDisabled ? 0.5 : 1)};\n text-align: left;\n width: 100%;\n\n &:hover:not(:disabled) {\n background-color: rgba(255, 255, 255, 0.05);\n }\n\n &:focus-visible {\n outline: 2px solid #5865F2;\n outline-offset: 2px;\n }\n\n &:active:not(:disabled) {\n background-color: rgba(255, 255, 255, 0.08);\n }\n`;\n\nexport const IconWrapper = styled.div`\n position: relative;\n width: 32px;\n height: 32px;\n border-radius: 8px;\n background-color: #36393f;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n overflow: hidden;\n`;\n\nexport const WorkflowInfo = styled.div`\n display: flex;\n flex-direction: column;\n min-width: 0;\n`;\n\nexport const WorkflowName = styled.span`\n color: #ffffff;\n font-size: 13px;\n font-weight: 600;\n line-height: 1.2;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nexport const WorkflowStatus = styled.div`\n display: flex;\n align-items: center;\n gap: 4px;\n color: #b9bbbe;\n font-size: 11px;\n line-height: 1.2;\n`;\n\nexport const StatusIndicatorOuter = styled.span<StatusIndicatorProps>`\n position: absolute;\n bottom: -2px;\n right: -2px;\n width: 10px;\n height: 10px;\n border-radius: 50%;\n background-color: #232428;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n`;\n\nexport const StatusIndicatorInner = styled.span<StatusIndicatorProps>`\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background-color: ${({ $status }) => statusColors[$status]};\n flex-shrink: 0;\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} 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 className?: string;\n onClick?: () => void;\n}\n\nexport function WorkflowStatusCard({\n icon,\n workflowName,\n status = 'offline',\n statusText,\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 </WorkflowInfo>\n </Container>\n );\n}\n\nWorkflowStatusCard.displayName = 'WorkflowStatusCard';\n","import styled from 'styled-components';\n\n// Dark theme colors matching MainPaneMenu\nconst _BG_PRIMARY = '#2F3136';\nconst _BG_SECONDARY = '#202225';\nconst BG_TERTIARY = '#36393F';\nconst TEXT_PRIMARY = '#FFFFFF';\nconst TEXT_SECONDARY = '#B9BBBE';\nconst TEXT_MUTED = '#72767D';\nconst ACCENT_COLOR = '#5865F2';\nconst HOVER_BG = 'rgba(255, 255, 255, 0.05)';\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: 6px;\n background: ${BG_TERTIARY};\n border-radius: 8px;\n gap: 4px;\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: 4px 2px;\n border: none;\n background: transparent;\n font-family: ${(props) => props.theme?.fonts?.body || 'system-ui, sans-serif'};\n font-size: 11px;\n font-weight: 600;\n color: ${TEXT_SECONDARY};\n text-align: left;\n cursor: pointer;\n transition: all 0.2s ease;\n\n &:hover {\n color: ${TEXT_PRIMARY};\n }\n\n &:focus-visible {\n outline: 2px solid ${ACCENT_COLOR};\n outline-offset: 2px;\n border-radius: 4px;\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 0.2s ease;\n color: ${TEXT_MUTED};\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: 2px;\n padding-left: 4px;\n margin-top: 2px;\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: 6px;\n width: 100%;\n padding: 4px 6px;\n border: none;\n cursor: pointer;\n text-align: left;\n transition: all 0.2s ease;\n border-radius: 4px;\n min-width: 0;\n overflow: hidden;\n\n /* Default state - transparent background */\n background-color: ${(props) => (props.$isSelected ? ACCENT_COLOR : 'transparent')};\n\n /* Hover state */\n &:hover:not(:disabled) {\n background-color: ${(props) => (props.$isSelected ? '#4752C4' : HOVER_BG)};\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 ${ACCENT_COLOR};\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 ? '4px' : '50%')};\n background-color: ${(props) => props.$iconColor || 'transparent'};\n color: ${(props) => (props.$hasCustomIcon ? TEXT_PRIMARY : TEXT_MUTED)};\n font-size: 12px;\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: 2px;\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: ${(props) => props.theme?.fonts?.body || 'system-ui, sans-serif'};\n font-size: 11px;\n font-weight: ${(props) => (props.$isSelected ? '500' : '400')};\n color: ${(props) => (props.$isSelected ? TEXT_PRIMARY : TEXT_SECONDARY)};\n line-height: 1.3;\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: 4px;\n background-color: transparent;\n color: ${TEXT_PRIMARY};\n cursor: pointer;\n transition: all 0.2s ease;\n flex-shrink: 0;\n\n &:hover:not(:disabled) {\n background-color: rgba(255, 255, 255, 0.1);\n }\n\n &:active:not(:disabled) {\n background-color: rgba(255, 255, 255, 0.15);\n transform: scale(0.95);\n }\n\n &:focus-visible {\n outline: 2px solid ${ACCENT_COLOR};\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: ${TEXT_MUTED};\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';\n\n// Main color constants matching the dark theme\nconst BG_PRIMARY = '#2F3136';\nconst BG_SECONDARY = '#202225';\nconst BG_TERTIARY = '#36393F';\nconst TEXT_PRIMARY = '#FFFFFF';\nconst TEXT_SECONDARY = '#B9BBBE';\nconst TEXT_MUTED = '#72767D';\nconst ACCENT_COLOR = '#5865F2';\nconst HOVER_BG = 'rgba(255, 255, 255, 0.05)';\n\nexport const Container = styled.div`\n width: 100%;\n height: 100%;\n background-color: ${BG_PRIMARY};\n color: ${TEXT_PRIMARY};\n display: flex;\n flex-direction: column;\n font-family: ${(props) => props.theme?.fonts?.body || 'system-ui, sans-serif'};\n overflow: hidden; // Prevent content from escaping container bounds\n`;\n\nexport const TabListWrapper = styled.div`\n display: flex;\n border-bottom: 2px solid ${BG_TERTIARY};\n background-color: ${BG_SECONDARY};\n padding: 0 16px;\n gap: 8px;\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: 640px) {\n padding: 0 8px;\n gap: 4px;\n }\n`;\n\nexport const TabButton = styled.button<{ $isSelected?: boolean }>`\n padding: 12px 20px;\n background: none;\n border: none;\n color: ${(props) => (props.$isSelected ? TEXT_PRIMARY : TEXT_SECONDARY)};\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n position: relative;\n transition: color 0.2s ease;\n white-space: nowrap;\n flex-shrink: 0;\n\n @media (max-width: 640px) {\n padding: 10px 12px;\n font-size: 12px;\n }\n\n &:hover {\n color: ${TEXT_PRIMARY};\n }\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: 2px solid ${ACCENT_COLOR};\n outline-offset: -2px;\n border-radius: 4px;\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: ${ACCENT_COLOR};\n }\n `}\n`;\n\nexport const TabPanelWrapper = styled.div`\n flex: 1;\n padding: 24px;\n overflow-y: auto;\n overflow-x: hidden; // Prevent horizontal overflow\n background-color: ${BG_PRIMARY};\n min-height: 0; // Enable proper flex shrinking and scrolling\n\n @media (max-width: 640px) {\n padding: 16px;\n }\n\n @media (max-width: 480px) {\n padding: 12px;\n }\n\n /* Custom scrollbar */\n scrollbar-width: thin;\n scrollbar-color: ${BG_TERTIARY} ${BG_PRIMARY};\n\n &::-webkit-scrollbar {\n width: 8px;\n }\n\n &::-webkit-scrollbar-track {\n background: ${BG_PRIMARY};\n }\n\n &::-webkit-scrollbar-thumb {\n background: ${BG_TERTIARY};\n border-radius: 4px;\n }\n\n &::-webkit-scrollbar-thumb:hover {\n background: #4a4d52;\n }\n`;\n\n// Runs tab container\nexport const RunsContainer = styled.div`\n display: flex;\n flex-direction: column;\n gap: 20px;\n width: 100%;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n\n @media (max-width: 640px) {\n gap: 16px;\n }\n`;\n\n// Browse Automations button\nexport const BrowseButton = styled.button`\n display: flex;\n align-items: center;\n gap: 12px;\n width: 100%;\n padding: 12px 16px;\n background-color: ${BG_SECONDARY};\n border: 1px solid ${BG_TERTIARY};\n border-radius: 8px;\n color: ${TEXT_SECONDARY};\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n white-space: nowrap;\n overflow: hidden;\n\n @media (max-width: 640px) {\n padding: 10px 12px;\n font-size: 13px;\n gap: 8px;\n }\n\n &:hover {\n background-color: ${HOVER_BG};\n color: ${TEXT_PRIMARY};\n }\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: 2px solid ${ACCENT_COLOR};\n outline-offset: 2px;\n }\n`;\n\n// DisclosureGroup styles\nexport const StyledDisclosureGroup = styled(DisclosureGroup)`\n display: flex;\n flex-direction: column;\n gap: 8px;\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: 4px 0;\n background: none;\n border: none;\n color: ${TEXT_SECONDARY};\n display: flex;\n justify-content: space-between;\n align-items: center;\n cursor: pointer;\n transition: color 0.2s ease;\n font-size: 12px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n\n &:hover {\n color: ${TEXT_PRIMARY};\n }\n\n &:focus {\n outline: none;\n }\n\n &[data-focus-visible] {\n outline: 2px solid ${ACCENT_COLOR};\n outline-offset: 2px;\n border-radius: 4px;\n }\n`;\n\n// Category Title with icon\nexport const CategoryTitle = styled.div`\n display: flex;\n align-items: center;\n gap: 8px;\n\n @media (max-width: 640px) {\n gap: 6px;\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: 640px) {\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: 640px) {\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 0.2s ease;\n transform: ${(props) => (props.$isExpanded ? 'rotate(0deg)' : 'rotate(-90deg)')};\n flex-shrink: 0;\n margin-left: 4px;\n\n img {\n width: 16px;\n height: 16px;\n opacity: 0.6;\n }\n\n @media (max-width: 640px) {\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: 4px;\n width: 100%;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n\n @media (max-width: 640px) {\n padding-left: 2px;\n }\n\n &[data-entering] {\n animation: slideDown 0.2s ease;\n }\n\n @keyframes slideDown {\n from {\n opacity: 0;\n transform: translateY(-8px);\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: 8px;\n padding: 4px 8px;\n border-radius: 4px;\n cursor: pointer;\n transition: background-color 0.1s ease;\n min-width: 0;\n overflow: hidden;\n\n @media (max-width: 640px) {\n gap: 6px;\n padding: 4px 6px;\n }\n\n &:hover {\n background-color: ${HOVER_BG};\n }\n`;\n\n// Nested item disclosure (for individual items)\nexport const ItemDisclosure = styled(Disclosure)`\n background-color: transparent;\n margin-bottom: 4px;\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: ${BG_SECONDARY};\n border-radius: 8px;\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 0.1s ease;\n\n &:focus {\n outline: none;\n }\n\n &[data-focus-visible] {\n outline: 2px solid ${ACCENT_COLOR};\n outline-offset: 2px;\n border-radius: 4px;\n }\n`;\n\n// Item disclosure panel for logs\nexport const ItemDisclosurePanel = styled(DisclosurePanel)`\n padding: 6px;\n background-color: ${BG_SECONDARY};\n border-radius: 0 0 8px 8px;\n margin-top: -4px;\n display: flex;\n flex-direction: column;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n\n @media (max-width: 640px) {\n padding: 6px;\n }\n\n &[data-entering] {\n animation: slideDown 0.2s ease;\n }\n\n @keyframes slideDown {\n from {\n opacity: 0;\n transform: translateY(-8px);\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: 640px) {\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: 14px;\n color: ${(props) => (props.$dimmed ? TEXT_MUTED : TEXT_SECONDARY)};\n font-weight: ${(props) => (props.$dimmed ? 'normal' : '500')};\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n min-width: 0;\n\n @media (max-width: 640px) {\n font-size: 13px;\n }\n\n ${ItemContainer}:hover & {\n color: ${(props) => (props.$dimmed ? TEXT_SECONDARY : TEXT_PRIMARY)};\n }\n`;\n\n// Run status indicator\nexport const RunStatus = styled.span<{ $status: 'completed' | 'running' | 'failed' }>`\n font-size: 14px;\n font-weight: 500;\n flex-shrink: 0;\n margin-left: auto;\n color: ${(props) => {\n switch (props.$status) {\n case 'completed':\n return '#10b981'; // green\n case 'running':\n return '#f59e0b'; // yellow\n case 'failed':\n return '#ef4444'; // red\n default:\n return TEXT_SECONDARY;\n }\n }};\n\n @media (max-width: 640px) {\n font-size: 12px;\n }\n`;\n\n// Old Disclosure styles (kept for backward compatibility)\nexport const DisclosureContainer = styled.div`\n margin-bottom: 12px;\n border-radius: 12px;\n background-color: ${BG_SECONDARY};\n overflow: hidden;\n`;\n\nexport const DisclosureHeader = styled.button`\n width: 100%;\n padding: 16px;\n background: ${BG_SECONDARY};\n border: none;\n color: ${TEXT_PRIMARY};\n display: flex;\n justify-content: space-between;\n align-items: center;\n cursor: pointer;\n transition: background-color 0.2s ease;\n text-align: left;\n\n &:hover {\n background-color: ${HOVER_BG};\n }\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: 2px solid ${ACCENT_COLOR};\n outline-offset: -2px;\n }\n\n > div {\n flex: 1;\n }\n\n strong {\n display: block;\n font-size: 14px;\n margin-bottom: 4px;\n }\n`;\n\nexport const DisclosureIcon = styled.span<{ $isExpanded: boolean }>`\n font-size: 12px;\n color: ${TEXT_SECONDARY};\n transition: transform 0.2s ease;\n transform: ${(props) => (props.$isExpanded ? 'rotate(180deg)' : 'rotate(0deg)')};\n`;\n\nexport const DisclosureContent = styled.div`\n padding: 16px;\n padding-top: 0;\n background-color: ${BG_TERTIARY};\n color: ${TEXT_SECONDARY};\n font-size: 13px;\n line-height: 1.6;\n animation: slideDown 0.2s ease;\n\n @keyframes slideDown {\n from {\n opacity: 0;\n transform: translateY(-8px);\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: 16px;\n font-weight: 600;\n margin-bottom: 16px;\n color: ${TEXT_PRIMARY};\n`;\n\nexport const MeterBar = styled.div`\n width: 100%;\n height: 24px;\n background-color: ${BG_SECONDARY};\n border-radius: 12px;\n overflow: hidden;\n position: relative;\n margin-bottom: 12px;\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: 12px;\n transition: width 0.3s ease, background 0.3s ease;\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, rgba(255, 255, 255, 0.2), 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: 14px;\n color: ${TEXT_SECONDARY};\n text-align: center;\n\n small {\n font-size: 12px;\n color: ${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: 14px;\n color: ${TEXT_SECONDARY};\n line-height: 1.6;\n margin-bottom: 24px;\n`;\n\nexport const GoogleButton = styled.button<{ $isConnected?: boolean }>`\n width: 100%;\n padding: 16px 24px;\n font-size: 15px;\n font-weight: 600;\n color: ${(props) => (props.$isConnected ? TEXT_PRIMARY : '#FFFFFF')};\n background: ${(props) => (props.$isConnected ? BG_TERTIARY : 'linear-gradient(135deg, #4285F4, #34A853)')};\n border: none;\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n\n &:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 12px rgba(66, 133, 244, 0.3);\n }\n\n &:active {\n transform: translateY(0);\n }\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: 2px solid ${ACCENT_COLOR};\n outline-offset: 2px;\n }\n\n ${(props) =>\n props.$isConnected &&\n `\n &:hover {\n background-color: #ef4444;\n box-shadow: 0 4px 12px rgba(239, 68, 68, 0.3);\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 { DarkNotificationCard } from '../../NotificationCard/DarkNotificationCard';\nimport type { NotificationSection } from '../../NotificationCard/NotificationCard';\nimport {\n BrowseButton,\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 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 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 category: 'scheduled' | 'completed' | 'issues';\n icon?: 'bell' | 'file' | 'link' | 'chat' | 'warning';\n logs?: ActionLog[];\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?: 'runs' | 'usage' | 'connections';\n onTabChange?: (tab: 'runs' | 'usage' | 'connections') => void;\n\n // Runs tab props\n runs?: RunItem[];\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 // Browse action\n onBrowseAutomations?: () => void;\n}\n\n// Individual item with nested disclosure for logs\nfunction ItemWithLogs({ run }: { run: RunItem }) {\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 return (\n <ItemDisclosure id={run.id}>\n <ItemHeader\n slot=\"trigger\"\n onClick={() => setIsExpanded(!isExpanded)}\n $isExpanded={isExpanded}\n >\n <ItemContainer as=\"div\">\n <ItemIcon src={ICONS[run.icon || 'bell']} alt=\"\" />\n <ItemName>{run.name}</ItemName>\n <RunStatus $status={run.status}>\n {run.status === 'completed' && '✓'}\n {run.status === 'running' && '⟳'}\n {run.status === 'failed' && '✕'}\n </RunStatus>\n <ChevronIcon $isExpanded={isExpanded}>\n <img src={ICONS.chevronDown} alt=\"\" />\n </ChevronIcon>\n </ItemContainer>\n </ItemHeader>\n {isExpanded && (\n <ItemDisclosurePanel>\n {run.logs && run.logs.length > 0 ? (\n <DarkNotificationCard sections={logSections} />\n ) : (\n <div style={{ color: '#72767D', fontSize: '13px', padding: '8px' }}>\n No action logs available\n </div>\n )}\n </ItemDisclosurePanel>\n )}\n </ItemDisclosure>\n );\n}\n\n// Runs tab content with DisclosureGroup\nfunction RunsTabContent({\n runs,\n onBrowseAutomations,\n}: {\n runs: RunItem[];\n onBrowseAutomations?: () => void;\n}) {\n const [expandedKeys, setExpandedKeys] = useState<Set<Key>>(\n new Set(['scheduled', 'completed', 'issues']) // All sections open by default\n );\n\n // Group runs by category\n const scheduledRuns = runs.filter((r) => r.category === 'scheduled');\n const completedRuns = runs.filter((r) => r.category === 'completed');\n const issuesRuns = runs.filter((r) => r.category === 'issues');\n\n const buttonRef = useRef<HTMLButtonElement>(null);\n const { buttonProps } = useButton(\n {\n onPress: onBrowseAutomations,\n },\n buttonRef\n );\n\n return (\n <RunsContainer>\n <BrowseButton {...buttonProps} ref={buttonRef}>\n <ItemIcon src={ICONS.cpu} alt=\"\" />\n <span>Browse Automations</span>\n </BrowseButton>\n\n <StyledDisclosureGroup\n expandedKeys={expandedKeys}\n onExpandedChange={setExpandedKeys}\n allowsMultipleExpanded\n aria-label=\"Run sections\"\n >\n {/* Scheduled Section */}\n <CategoryDisclosure id=\"scheduled\">\n <Heading level={3}>\n <CategoryHeader slot=\"trigger\">\n <CategoryTitle>\n <HashtagIcon src={ICONS.hashtag} alt=\"\" />\n <span>SCHEDULED</span>\n </CategoryTitle>\n <ChevronIcon $isExpanded={expandedKeys.has('scheduled')}>\n <img src={ICONS.chevronDown} alt=\"\" />\n </ChevronIcon>\n </CategoryHeader>\n </Heading>\n <CategoryDisclosurePanel>\n {scheduledRuns.length > 0 ? (\n scheduledRuns.map((run) => <ItemWithLogs key={run.id} run={run} />)\n ) : (\n <ItemContainer>\n <ItemName $dimmed>No scheduled items</ItemName>\n </ItemContainer>\n )}\n </CategoryDisclosurePanel>\n </CategoryDisclosure>\n\n {/* Completed Section */}\n <CategoryDisclosure id=\"completed\">\n <Heading level={3}>\n <CategoryHeader slot=\"trigger\">\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 {completedRuns.length > 0 ? (\n completedRuns.map((run) => <ItemWithLogs key={run.id} run={run} />)\n ) : (\n <ItemContainer>\n <ItemName $dimmed>No completed items</ItemName>\n </ItemContainer>\n )}\n </CategoryDisclosurePanel>\n </CategoryDisclosure>\n\n {/* Issues Section */}\n <CategoryDisclosure id=\"issues\">\n <Heading level={3}>\n <CategoryHeader slot=\"trigger\">\n <CategoryTitle>\n <HashtagIcon src={ICONS.hashtag} alt=\"\" />\n <span>ISSUES</span>\n </CategoryTitle>\n <ChevronIcon $isExpanded={expandedKeys.has('issues')}>\n <img src={ICONS.chevronDown} alt=\"\" />\n </ChevronIcon>\n </CategoryHeader>\n </Heading>\n <CategoryDisclosurePanel>\n {issuesRuns.length > 0 ? (\n issuesRuns.map((run) => <ItemWithLogs key={run.id} run={run} />)\n ) : (\n <ItemContainer>\n <ItemName $dimmed>No issues</ItemName>\n </ItemContainer>\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\n ? googleConnection?.connected || false\n : 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\n {...buttonProps}\n ref={ref}\n $isConnected={isConnected}\n >\n {buttonText}\n </GoogleButton>\n {isConnected && googleConnection?.scopes && googleConnection.scopes.length > 0 && (\n <div style={{ marginTop: '16px', fontSize: '13px', color: '#B9BBBE' }}>\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 {...tabProps} ref={ref} $isSelected={state.selectedKey === item.key}>\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}>\n {state.selectedItem?.props.children}\n </TabPanelWrapper>\n );\n}\n\nexport function PaneMenus({\n activeTab = 'runs',\n onTabChange,\n runs = [],\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 onBrowseAutomations,\n}: PaneMenusProps) {\n const state = useTabListState({\n defaultSelectedKey: activeTab,\n onSelectionChange: (key) => {\n if (onTabChange) {\n onTabChange(key as 'runs' | 'usage' | 'connections');\n }\n },\n children: (\n <>\n <Item key=\"runs\" title=\"Runs\">\n <RunsTabContent runs={runs} onBrowseAutomations={onBrowseAutomations} />\n </Item>\n <Item key=\"usage\" title=\"Usage\">\n <UsageTabContent currentUsage={currentUsage} maxUsage={maxUsage} />\n </Item>\n <Item key=\"connections\" title=\"Connections\">\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 </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';\n\n// Color palette from Layout.styles.ts\nconst HEADER_BG = '#202225';\nconst HEADER_BG_DARK = '#18191c';\nconst BUTTON_BG = '#36393f';\nconst BUTTON_BG_HOVER = '#40444b';\n\n// Breakpoints for responsive pattern sizes\nconst breakpoints = {\n xs: '640px',\n sm: '768px',\n md: '1024px',\n lg: '1280px',\n};\n\nexport const Container = styled.header`\n position: relative;\n width: 100%;\n height: 56px;\n background-color: ${HEADER_BG};\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: ${breakpoints.xs}) {\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: ${breakpoints.sm}) {\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: ${breakpoints.md}) {\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: ${breakpoints.lg}) {\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: ${HEADER_BG_DARK};\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: ${breakpoints.sm}) {\n max-height: 32px;\n }\n`;\n\nexport const SettingsButton = styled.button<{ $isHovered?: boolean }>`\n position: absolute;\n top: 50%;\n right: 12px;\n transform: translateY(-50%);\n z-index: 2;\n\n /* Button appearance */\n width: 40px;\n height: 40px;\n border-radius: 50%;\n border: none;\n background-color: ${BUTTON_BG};\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 0.2s ease, transform 0.1s ease;\n\n /* Hover state */\n &:hover {\n background-color: ${BUTTON_BG_HOVER};\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 #5865f2;\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: ${breakpoints.sm}) {\n right: 16px;\n }\n\n @media (min-width: ${breakpoints.md}) {\n right: 24px;\n }\n`;\n\nexport const BackButton = styled.button<{ $isHovered?: boolean }>`\n position: absolute;\n top: 50%;\n left: 12px;\n transform: translateY(-50%);\n z-index: 2;\n\n /* Button appearance */\n width: 40px;\n height: 40px;\n border-radius: 50%;\n border: none;\n background-color: ${BUTTON_BG};\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 0.2s ease, transform 0.1s ease;\n\n /* Hover state */\n &:hover {\n background-color: ${BUTTON_BG_HOVER};\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 #5865f2;\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: ${breakpoints.sm}) {\n left: 16px;\n }\n\n @media (min-width: ${breakpoints.md}) {\n left: 24px;\n }\n`;\n","import { useButton } from '@react-aria/button';\nimport { useRef, useState } from 'react';\nimport { Icon } from '../Icon';\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 * 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 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': 'Settings',\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=\"#b9bbbe\" />\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\n name={isSettingsHovered ? 'settings-line' : 'settings-fill'}\n size={20}\n color=\"#b9bbbe\"\n />\n </SettingsButton>\n </Container>\n );\n}\n\nPaneSectionHeader.displayName = 'PaneSectionHeader';\n","import styled from 'styled-components';\n\n// Colors based on NavVertical design\nconst NAV_BG = '#36393F';\nconst NAV_BG_HOVER = '#40444b';\n\nexport const Container = styled.button<{ $active?: boolean }>`\n /* Base button styling */\n width: 48px;\n height: 48px;\n border: none;\n padding: 4px;\n border-radius: ${({ $active }) => ($active ? '16px' : '50%')};\n background-color: ${NAV_BG};\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 0.15s ease-out;\n position: relative;\n overflow: hidden;\n\n /* Hover state */\n &:hover {\n border-radius: 16px;\n background-color: ${NAV_BG_HOVER};\n }\n\n /* Focus visible state for accessibility */\n &:focus-visible {\n outline: 2px solid #5865f2;\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: #ffffff;\n border-radius: 0 4px 4px 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';\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: 20px;\n background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%);\n border-radius: 20px;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08);\n gap: 12px;\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: 8px 4px;\n border: none;\n background: transparent;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu',\n 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;\n font-size: 16px;\n font-weight: 700;\n color: #2c3e50;\n text-align: left;\n cursor: pointer;\n transition: all 0.2s ease;\n\n &:hover {\n color: #1a252f;\n }\n\n &:focus-visible {\n outline: 2px solid #5b9fff;\n outline-offset: 2px;\n border-radius: 8px;\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 0.2s ease;\n color: #6c757d;\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: 8px;\n padding-left: 0;\n margin-top: 4px;\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: 12px;\n width: 100%;\n padding: ${(props) => (props.$isSelected ? '12px 16px' : '10px 12px')};\n border: none;\n cursor: pointer;\n text-align: left;\n transition: all 0.2s ease;\n border-radius: ${(props) => (props.$isSelected ? '12px' : '10px')};\n\n /* Default state - transparent background */\n background-color: ${(props) => (props.$isSelected ? '#2c3e50' : 'transparent')};\n\n /* Hover state */\n &:hover:not(:disabled) {\n background-color: ${(props) => (props.$isSelected ? '#1a252f' : 'rgba(255, 255, 255, 0.5)')};\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 ? '#ffffff' : '#5b9fff')};\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 ? '6px' : '50%')};\n background-color: ${(props) => props.$iconColor || 'transparent'};\n color: ${(props) => (props.$hasCustomIcon ? '#ffffff' : '#6c757d')};\n font-size: ${(props) => (props.$hasCustomIcon ? '16px' : '14px')};\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: 2px;\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: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu',\n 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;\n font-size: 15px;\n font-weight: ${(props) => (props.$isSelected ? '500' : '400')};\n color: ${(props) => (props.$isSelected ? '#ffffff' : '#5a5a5a')};\n line-height: 1.5;\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: 6px;\n background-color: transparent;\n color: #ffffff;\n cursor: pointer;\n transition: all 0.2s ease;\n flex-shrink: 0;\n\n &:hover:not(:disabled) {\n background-color: rgba(255, 255, 255, 0.15);\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 #ffffff;\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';\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: 12px 20px;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu',\n 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;\n font-size: 14px;\n font-weight: 400;\n line-height: 1.4;\n color: #ffffff;\n border: none;\n cursor: default;\n user-select: none;\n white-space: pre-wrap;\n word-wrap: break-word;\n position: relative;\n text-align: left;\n\n /* Pill shape - fully rounded ends */\n border-radius: 999px;\n\n /* Purple to blue gradient (left to right) */\n background: linear-gradient(90deg, #8B5CF6 0%, #5B8DEF 100%);\n\n /* Subtle shadow and glow effect */\n box-shadow:\n 0 2px 8px rgba(91, 141, 239, 0.25),\n 0 1px 3px rgba(139, 92, 246, 0.15);\n\n /* Smooth transitions */\n transition: all 0.2s ease-in-out;\n\n /* Speech bubble tail */\n &::after {\n content: '';\n position: absolute;\n bottom: -4px;\n right: -6px;\n width: 18px;\n height: 18px;\n background: #5B8DEF;\n transform: rotate(45deg);\n border-radius: 0 0 16px 0;\n box-shadow:\n 2px 2px 4px rgba(91, 141, 239, 0.15);\n transition: all 0.2s ease-in-out;\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:\n 0 4px 12px rgba(91, 141, 239, 0.35),\n 0 2px 6px rgba(139, 92, 246, 0.25);\n\n &::after {\n box-shadow:\n 3px 3px 6px rgba(91, 141, 239, 0.2);\n }\n }\n\n /* Active/Pressed state - only for button elements */\n &[role=\"button\"]:active:not(:disabled) {\n transform: translateY(0);\n box-shadow:\n 0 1px 4px rgba(91, 141, 239, 0.2),\n 0 1px 2px rgba(139, 92, 246, 0.1);\n\n &::after {\n box-shadow:\n 1px 1px 2px rgba(91, 141, 239, 0.1);\n }\n }\n\n ${({ $isPressed }) =>\n $isPressed &&\n css`\n transform: translateY(0) scale(0.98);\n box-shadow:\n 0 1px 4px rgba(91, 141, 239, 0.2),\n 0 1px 2px rgba(139, 92, 246, 0.1);\n\n &::after {\n box-shadow:\n 1px 1px 2px rgba(91, 141, 239, 0.1);\n }\n `}\n\n /* Focus state for accessibility */\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: 2px solid #5B8DEF;\n outline-offset: 3px;\n box-shadow:\n 0 4px 12px rgba(91, 141, 239, 0.35),\n 0 2px 6px rgba(139, 92, 246, 0.25),\n 0 0 0 3px rgba(91, 141, 239, 0.1);\n }\n\n /* Disabled state */\n &:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n transform: none;\n box-shadow: none;\n\n &::after {\n opacity: 0.5;\n box-shadow: none;\n }\n }\n`;\n","import type { AriaButtonProps } from '@react-aria/button';\nimport { useButton } from '@react-aria/button';\nimport { useRef } from 'react';\nimport { StyledUserMessage } from './UserMessage.styles';\n\nexport interface UserMessageProps extends AriaButtonProps {\n /**\n * The message text to display\n */\n children: React.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 * @example\n * ```tsx\n * <UserMessage onPress={() => console.log('clicked')}>\n * Can you export this as a CSV?\n * </UserMessage>\n * ```\n */\nexport function UserMessage({\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\n as=\"div\"\n className={className}\n $isPressed={isPressed}\n role=\"presentation\"\n >\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\nUserMessage.displayName = 'UserMessage';\n","export const tokens = {\n colors: {\n primary: { light: '#0066FF', dark: '#4D94FF' },\n surface: { light: '#FFFFFF', dark: '#1A1A1A' },\n text: { light: '#000000', dark: '#FFFFFF' },\n border: { light: '#E0E0E0', dark: '#333333' },\n },\n spacing: { xs: '4px', sm: '8px', md: '16px', lg: '24px', xl: '32px' },\n radii: { sm: '4px', md: '8px', lg: '12px' },\n fonts: { body: 'system-ui, sans-serif', mono: 'monospace' },\n};\n","import { tokens } from './tokens';\n\nexport const darkTheme = {\n name: 'dark',\n colors: {\n primary: tokens.colors.primary.dark,\n surface: tokens.colors.surface.dark,\n text: tokens.colors.text.dark,\n border: tokens.colors.border.dark,\n },\n spacing: tokens.spacing,\n radii: tokens.radii,\n fonts: tokens.fonts,\n};\n","import { createGlobalStyle } from 'styled-components';\n\nexport const GlobalStyle = createGlobalStyle`\n *,\n *::before,\n *::after {\n box-sizing: border-box;\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 }\n\n button {\n font-family: inherit;\n }\n`;\n","import { tokens } from './tokens';\n\nexport const lightTheme = {\n name: 'light',\n colors: {\n primary: tokens.colors.primary.light,\n surface: tokens.colors.surface.light,\n text: tokens.colors.text.light,\n border: tokens.colors.border.light,\n },\n spacing: tokens.spacing,\n radii: tokens.radii,\n fonts: tokens.fonts,\n};\n","import styled, { css } from 'styled-components';\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: ${({ theme }) => theme?.colors?.primary ?? '#0066FF'};\n color: white;\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 ${({ theme }) => theme?.colors?.primary ?? '#0066FF'};\n outline-offset: 2px;\n }\n `,\n secondary: css`\n background-color: transparent;\n color: ${({ theme }) => theme?.colors?.text ?? '#000000'};\n border: 1px solid ${({ theme }) => theme?.colors?.border ?? '#E0E0E0'};\n\n &:hover:not(:disabled) {\n background-color: ${({ theme }) => theme?.colors?.surface ?? '#ffffff'};\n border-color: ${({ theme }) => theme?.colors?.primary ?? '#0066FF'};\n }\n\n &:active:not(:disabled) {\n background-color: ${({ theme }) => theme?.colors?.border ?? '#E0E0E0'};\n }\n\n &:focus-visible {\n outline: 2px solid ${({ theme }) => theme?.colors?.primary ?? '#0066FF'};\n outline-offset: 2px;\n }\n `,\n icon: css`\n background-color: transparent;\n color: ${({ theme }) => theme?.colors?.text ?? '#000000'};\n border: none;\n padding: ${({ theme }) => theme?.spacing?.sm ?? '8px'};\n min-width: auto;\n\n &:hover:not(:disabled) {\n background-color: ${({ theme }) => theme?.colors?.border ?? '#E0E0E0'};\n opacity: 0.8;\n }\n\n &:active:not(:disabled) {\n opacity: 0.6;\n }\n\n &:focus-visible {\n outline: 2px solid ${({ theme }) => theme?.colors?.primary ?? '#0066FF'};\n outline-offset: 2px;\n }\n `,\n};\n\nconst sizeStyles = {\n small: css`\n padding: ${({ theme }) => theme?.spacing?.xs ?? '4px'} ${({ theme }) => theme?.spacing?.sm ?? '8px'};\n font-size: 0.875rem;\n min-width: 60px;\n height: 28px;\n `,\n medium: css`\n padding: ${({ theme }) => theme?.spacing?.sm ?? '8px'} ${({ theme }) => theme?.spacing?.md ?? '16px'};\n font-size: 1rem;\n min-width: 80px;\n height: 36px;\n `,\n large: css`\n padding: ${({ theme }) => theme?.spacing?.md ?? '16px'} ${({ theme }) => theme?.spacing?.lg ?? '24px'};\n font-size: 1.125rem;\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: ${({ theme }) => theme?.spacing?.xs ?? '4px'};\n font-family: ${({ theme }) => theme?.fonts?.body ?? 'system-ui, sans-serif'};\n font-weight: 500;\n border-radius: ${({ theme }) => theme?.radii?.md ?? '8px'};\n cursor: pointer;\n transition: all 0.2s ease-in-out;\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: ${({ theme }) => theme?.radii?.sm ?? '4px'};\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 { ButtonVariant, ButtonSize } from './Button.types';\n\n// Re-export types for public API\nexport type { ButtonVariant, ButtonSize } 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 type { ActionsLayout } from './Actions.types';\n\ninterface ActionsContainerProps {\n $layout: ActionsLayout;\n}\n\nexport const ActionsContainer = styled.div<ActionsContainerProps>`\n display: flex;\n gap: ${({ theme }) => theme?.spacing?.sm ?? '8px'};\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, ActionVariant, ActionsLayout } 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';\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: 12px;\n padding: 12px 16px;\n background-color: #2c2c2e;\n border-radius: 16px;\n box-shadow: none;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu',\n 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;\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: 4px;\n padding: 0 4px;\n`;\n\nexport const Dot = styled.span<{ delay: number }>`\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background-color: #8e8e93;\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: 4px;\n padding: 0 4px;\n\n ${Dot} {\n width: 6px;\n height: 6px;\n background-color: #8e8e93;\n animation: ${dotPulse} 1.4s ease-in-out infinite;\n }\n`;\n\nexport const Message = styled.span`\n font-size: 14px;\n color: #e5e5e7;\n font-weight: 400;\n line-height: 1.5;\n white-space: nowrap;\n`;\n\nexport const StreamingText = styled.div`\n font-size: 14px;\n line-height: 1.5;\n color: #e5e5e7;\n animation: ${fadeIn} 0.3s ease-in;\n position: relative;\n font-weight: 400;\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: #8e8e93;\n font-weight: 400;\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';\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: 12px;\n padding: 12px 16px;\n background-color: ${(props) => (props.isError ? '#3a1f1f' : '#2c2c2e')};\n border-radius: 16px;\n border: ${(props) => (props.isError ? '1px solid #7f1d1d' : 'none')};\n box-shadow: none;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu',\n 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;\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: 8px;\n align-items: center;\n width: 100%;\n`;\n\nexport const IdleIndicator = styled.div`\n width: 6px;\n height: 6px;\n background-color: #8e8e93;\n border-radius: 50%;\n animation: ${dotPulse} 2s infinite ease-in-out;\n`;\n\nexport const ErrorIndicator = styled.div`\n width: 6px;\n height: 6px;\n background-color: #ff6b6b;\n border-radius: 50%;\n animation: ${shake} 0.5s ease-in-out;\n`;\n\nexport const StateLabel = styled.span`\n font-size: 14px;\n font-weight: 400;\n color: #e5e5e7;\n line-height: 1.5;\n white-space: nowrap;\n`;\n\nexport const MessageText = styled.p`\n font-size: 14px;\n color: #8e8e93;\n line-height: 1.5;\n margin: 0;\n text-align: center;\n white-space: nowrap;\n`;\n\nexport const ProgressBar = styled.div`\n width: 100%;\n height: 4px;\n background-color: #3a3a3c;\n border-radius: 2px;\n overflow: hidden;\n margin-top: 4px;\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, #8B5CF6 0%, #EC4899 100%);\n border-radius: 2px;\n transition: width 0.3s ease-in-out;\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 (\n <Response\n isLoading\n message={message || 'Agent is thinking...'}\n className={className}\n />\n );\n }\n\n // Responding state - use Response component with typing indicator\n if (state === 'responding') {\n return (\n <Response\n isTyping\n message={message || 'Agent is responding...'}\n className={className}\n />\n );\n }\n\n return null;\n};\n","import styled from 'styled-components';\n\nexport const FooterContainer = styled.footer`\n display: flex;\n align-items: center;\n justify-content: center;\n padding: ${({ theme }) => theme?.spacing?.sm ?? '8px'} ${({ theme }) => theme?.spacing?.md ?? '16px'};\n background-color: ${({ theme }) => theme?.colors?.surface ?? '#ffffff'};\n border-top: 1px solid ${({ theme }) => theme?.colors?.border ?? '#E0E0E0'};\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: ${({ theme }) => theme?.spacing?.md ?? '16px'};\n width: 100%;\n max-width: 100%;\n font-size: 0.75rem;\n color: ${({ theme }) => theme?.colors?.text ?? '#000000'};\n opacity: 0.6;\n font-family: ${({ theme }) => theme?.fonts?.body ?? 'system-ui, sans-serif'};\n line-height: 1.4;\n`;\n\nexport const FooterBranding = styled.div`\n display: flex;\n align-items: center;\n gap: ${({ theme }) => theme?.spacing?.xs ?? '4px'};\n flex-shrink: 0;\n`;\n\nexport const FooterStatus = styled.div`\n display: flex;\n align-items: center;\n gap: ${({ theme }) => theme?.spacing?.xs ?? '4px'};\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: 0.75rem;\n opacity: 0.8;\n`;\n\nexport const FooterLink = styled.a`\n color: ${({ theme }) => theme?.colors?.primary ?? '#0066FF'};\n text-decoration: none;\n transition: opacity 150ms ease;\n cursor: pointer;\n\n &:hover {\n opacity: 0.8;\n text-decoration: underline;\n }\n\n &:focus-visible {\n outline: 2px solid ${({ theme }) => theme?.colors?.primary ?? '#0066FF'};\n outline-offset: 2px;\n border-radius: ${({ theme }) => theme?.radii?.sm ?? '4px'};\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","import styled from 'styled-components';\n\nexport const HeaderContainer = styled.header`\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px;\n background-color: #2c2c2e;\n border-bottom: 1px solid #3a3a3c;\n min-height: 60px;\n box-sizing: border-box;\n\n @media (min-width: 640px) {\n padding: 12px;\n }\n`;\n\nexport const HeaderContent = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${({ theme }) => theme?.spacing?.xs ?? '4px'};\n flex: 1;\n min-width: 0;\n`;\n\nexport const HeaderTitle = styled.h1`\n margin: 0;\n font-size: 1rem;\n font-weight: 600;\n color: #e5e5e7;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu',\n 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;\n line-height: 1.5;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nexport const HeaderSubtitle = styled.p`\n margin: 0;\n font-size: 0.875rem;\n color: #8e8e93;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu',\n 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;\n line-height: 1.4;\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: ${({ theme }) => theme?.spacing?.xs ?? '4px'};\n margin-left: ${({ theme }) => theme?.spacing?.md ?? '16px'};\n`;\n\nexport const ActionButton = styled.button`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n padding: 0;\n background-color: transparent;\n border: none;\n border-radius: 6px;\n color: #e5e5e7;\n cursor: pointer;\n transition: all 150ms ease;\n\n &:hover:not(:disabled) {\n background-color: #3a3a3c;\n }\n\n &:active:not(:disabled) {\n transform: scale(0.95);\n background-color: #48484a;\n }\n\n &:focus-visible {\n outline: 2px solid #5B9FFF;\n outline-offset: 2px;\n }\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.3;\n }\n\n svg {\n width: 16px;\n height: 16px;\n display: block;\n }\n`;\n","import { useButton } from '@react-aria/button';\nimport type React from 'react';\nimport { useRef } from 'react';\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 * 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 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 <HeaderTitle>{title}</HeaderTitle>\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';\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: 8px;\n\tpadding: 12px;\n\tbackground-color: #ffffff;\n\tborder: 1px solid #e5e7eb;\n\tborder-radius: 12px;\n\ttransition: all 0.2s ease;\n\n\t&:focus-within {\n\t\tborder-color: #3b82f6;\n\t\tbox-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n\t}\n\n\t&:hover:not(:focus-within) {\n\t\tborder-color: #d1d5db;\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: 24px;\n\tmax-height: ${(props) => `${(props.$maxRows || 5) * 24}px`};\n\tpadding: 0;\n\tborder: none;\n\toutline: none;\n\tresize: none;\n\tfont-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu',\n\t\t'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;\n\tfont-size: 14px;\n\tline-height: 24px;\n\tcolor: #111827;\n\tbackground: transparent;\n\toverflow-y: auto;\n\n\t&::placeholder {\n\t\tcolor: #9ca3af;\n\t}\n\n\t&:disabled {\n\t\tcolor: #9ca3af;\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: 6px;\n\t}\n\n\t&::-webkit-scrollbar-track {\n\t\tbackground: transparent;\n\t}\n\n\t&::-webkit-scrollbar-thumb {\n\t\tbackground: #d1d5db;\n\t\tborder-radius: 3px;\n\t}\n\n\t&::-webkit-scrollbar-thumb:hover {\n\t\tbackground: #9ca3af;\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: 8px;\n\tbackground-color: ${(props) => (props.disabled ? '#e5e7eb' : '#3b82f6')};\n\tcolor: ${(props) => (props.disabled ? '#9ca3af' : '#ffffff')};\n\tcursor: ${(props) => (props.disabled ? 'not-allowed' : 'pointer')};\n\ttransition: all 0.2s ease;\n\tflex-shrink: 0;\n\n\t&:hover:not(:disabled) {\n\t\tbackground-color: #2563eb;\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 #3b82f6;\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, { keyframes } from 'styled-components';\n\nexport const MessageContainer = styled.div`\n display: flex;\n gap: 12px;\n align-items: flex-start;\n padding: 8px 0;\n max-width: 100%;\n`;\n\nexport const AvatarContainer = styled.div`\n flex-shrink: 0;\n`;\n\nexport const Avatar = styled.img`\n width: 32px;\n height: 32px;\n border-radius: 50%;\n object-fit: cover;\n background-color: #e5e7eb;\n`;\n\nexport const AvatarInitials = styled.div`\n width: 32px;\n height: 32px;\n border-radius: 50%;\n background: linear-gradient(135deg, #8B5CF6 0%, #EC4899 100%);\n color: white;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n font-weight: 600;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',\n 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;\n\n svg {\n width: 18px;\n height: 18px;\n }\n`;\n\nexport const ContentContainer = styled.div`\n flex: 1;\n min-width: 0;\n`;\n\nexport const MessageContent = styled.div`\n background-color: #2c2c2e;\n padding: 12px 16px;\n border-radius: 16px;\n border-top-left-radius: 4px;\n color: #e5e5e7;\n font-size: 14px;\n line-height: 1.5;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',\n 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;\n word-wrap: break-word;\n white-space: pre-wrap;\n`;\n\nexport const LoadingDots = styled.div`\n display: flex;\n gap: 6px;\n padding: 12px 16px;\n background-color: #2c2c2e;\n border-radius: 16px;\n border-top-left-radius: 4px;\n width: fit-content;\n`;\n\nconst bounce = keyframes`\n 0%, 60%, 100% {\n transform: translateY(0);\n }\n 30% {\n transform: translateY(-8px);\n }\n`;\n\nexport const LoadingDot = styled.div<{ delay: number }>`\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background-color: #8e8e93;\n animation: ${bounce} 1.4s ease-in-out infinite;\n animation-delay: ${(props) => props.delay}s;\n`;\n","import styled from 'styled-components';\n\ninterface FileAttachmentContainerProps {\n $isInteractive?: boolean;\n}\n\nexport const FileAttachmentContainer = styled.div<FileAttachmentContainerProps>`\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px;\n background-color: #3a3a3c;\n border: 1px solid #48484a;\n border-radius: 8px;\n max-width: 320px;\n cursor: ${(props) => (props.$isInteractive ? 'pointer' : 'default')};\n transition: border-color 0.15s ease;\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: #5a5a5c;\n background-color: #48484a;\n }\n\n &:focus-visible {\n outline: 2px solid #5B9FFF;\n outline-offset: 2px;\n border-color: #5B9FFF;\n }\n\n &:active {\n border-color: #6a6a6c;\n }\n `}\n`;\n\nexport const FileIconContainer = styled.div`\n flex-shrink: 0;\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 24px;\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: 14px;\n font-weight: 500;\n color: #e5e5e7;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu',\n 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;\n line-height: 1.4;\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: 4px;\n font-size: 12px;\n color: #8e8e93;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu',\n 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;\n line-height: 1.4;\n overflow: hidden;\n`;\n\nexport const FileSubtitle = styled.span`\n color: #8e8e93;\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 type React from 'react';\nimport styled from 'styled-components';\nimport {\n Avatar,\n AvatarContainer,\n AvatarInitials,\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: 8px;\n margin-top: 12px;\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 /** 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}\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 * - Markdown support (optional)\n * - Clean, modern design\n */\nexport const AssistantMessage: React.FC<AssistantMessageProps> = ({\n content = '',\n avatarUrl,\n avatarInitials: _avatarInitials = 'AI',\n isLoading = false,\n className,\n attachments = [],\n enableMarkdown: _enableMarkdown = false,\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 // For now, render as plain text\n // TODO: Add markdown support when enableMarkdown is true\n return (\n <>\n {content && <MessageContent>{content}</MessageContent>}\n {attachments.length > 0 && (\n <AttachmentsContainer>\n {attachments.map((attachment, index) => (\n <FileAttachment key={`${attachment.title}-${index}`} {...attachment} />\n ))}\n </AttachmentsContainer>\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 <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\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 </svg>\n </AvatarInitials>\n )}\n </AvatarContainer>\n <ContentContainer>{renderContent()}</ContentContainer>\n </MessageContainer>\n );\n};\n\nexport default AssistantMessage;\n","import styled from 'styled-components';\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 background-color: #1c1c1e;\n padding: 8px;\n gap: 12px;\n box-sizing: border-box;\n\n /* Ensure proper scrolling behavior for child components */\n position: relative;\n min-height: 0;\n\n /* Desktop padding */\n @media (min-width: 640px) {\n padding: 12px;\n }\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';\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: #ffffff;\n border: 1px solid #e5e7eb;\n border-radius: 8px;\n scroll-behavior: smooth;\n\n /* Custom scrollbar styling */\n &::-webkit-scrollbar {\n width: 8px;\n }\n\n &::-webkit-scrollbar-track {\n background: #f1f5f9;\n border-radius: 4px;\n }\n\n &::-webkit-scrollbar-thumb {\n background: #cbd5e1;\n border-radius: 4px;\n transition: background 0.2s ease;\n }\n\n &::-webkit-scrollbar-thumb:hover {\n background: #94a3b8;\n }\n\n /* Firefox scrollbar styling */\n scrollbar-width: thin;\n scrollbar-color: #cbd5e1 #f1f5f9;\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: 12px;\n padding: 16px;\n min-height: min-content;\n\n /* Message styling */\n .message {\n display: flex;\n flex-direction: column;\n gap: 4px;\n padding: 12px 16px;\n border-radius: 8px;\n max-width: 85%;\n word-wrap: break-word;\n animation: messageSlideIn 0.2s ease-out;\n }\n\n @keyframes messageSlideIn {\n from {\n opacity: 0;\n transform: translateY(8px);\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: #3b82f6;\n color: #ffffff;\n border-bottom-right-radius: 4px;\n }\n\n .message--assistant {\n align-self: flex-start;\n background: #f1f5f9;\n color: #1e293b;\n border-bottom-left-radius: 4px;\n }\n\n .message--system {\n align-self: center;\n background: #fef3c7;\n color: #92400e;\n font-size: 0.875rem;\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';\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: 8px 0;\n padding: 0 16px;\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: 70%;\n padding: 12px 16px;\n border-radius: 18px 18px 4px 18px;\n\n /* User message colors - distinct from assistant messages */\n background-color: #007AFF;\n color: #FFFFFF;\n\n /* Box shadow for depth */\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);\n\n /* Smooth transitions */\n transition: all 0.2s ease-in-out;\n\n &:hover {\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15);\n }\n\n /* Username styling */\n strong {\n font-size: 12px;\n font-weight: 600;\n margin-bottom: 4px;\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: 14px;\n line-height: 1.5;\n word-wrap: break-word;\n white-space: pre-wrap;\n`;\n\n/**\n * Optional timestamp display\n */\nexport const MessageTime = styled.time`\n font-size: 11px;\n opacity: 0.7;\n margin-top: 4px;\n text-align: right;\n`;\n","import {\n MessageBubble,\n MessageContent,\n MessageTime,\n StyledUserMessage,\n} from './UserMessage.styles';\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}\n\n/**\n * UserMessage component displays a user's message in a chat interface.\n * Styled with right alignment and distinct styling from assistant messages.\n */\nexport const UserMessage = ({\n content,\n timestamp,\n className,\n avatarUrl,\n username,\n}: UserMessageProps) => {\n return (\n <StyledUserMessage className={className}>\n <MessageBubble>\n {username && <strong>{username}</strong>}\n <MessageContent>{content}</MessageContent>\n {timestamp && <MessageTime>{timestamp}</MessageTime>}\n </MessageBubble>\n {avatarUrl && (\n <img\n src={avatarUrl}\n alt={username || 'User'}\n style={{ width: '32px', height: '32px', borderRadius: '50%', marginLeft: '8px' }}\n />\n )}\n </StyledUserMessage>\n );\n};\n","import styled, { css } from 'styled-components';\n\nexport const SuggestionsContainer = styled.div`\n display: flex;\n flex-wrap: wrap;\n gap: ${({ theme }) => theme?.spacing?.sm ?? '8px'};\n padding: ${({ theme }) => theme?.spacing?.md ?? '16px'} 0;\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: ${({ theme }) => theme?.spacing?.sm ?? '8px'} ${({ theme }) => theme?.spacing?.md ?? '16px'};\n font-family: ${({ theme }) => theme?.fonts?.body ?? 'system-ui, sans-serif'};\n font-size: 0.875rem;\n font-weight: 500;\n color: ${({ theme }) => theme?.colors?.text ?? '#000000'};\n background-color: ${({ theme }) => theme?.colors?.surface ?? '#ffffff'};\n border: 1px solid ${({ theme }) => theme?.colors?.border ?? '#E0E0E0'};\n border-radius: ${({ theme }) => theme?.radii?.lg ?? '12px'};\n cursor: pointer;\n transition: all 0.2s ease-in-out;\n white-space: nowrap;\n user-select: none;\n\n /* Hover state */\n &:hover:not(:disabled) {\n background-color: ${({ theme }) => theme?.colors?.border ?? '#E0E0E0'};\n border-color: ${({ theme }) => theme?.colors?.primary ?? '#0066FF'};\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\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 ${({ theme }) => theme?.colors?.primary ?? '#0066FF'};\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';\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 background-color: #1c1c1e;\n border-radius: 0;\n box-shadow: none;\n overflow: hidden;\n transition: all 300ms cubic-bezier(0.4, 0, 0.2, 1);\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: 1000;\n `}\n\n /* Minimized state */\n ${({ $isMinimized }) =>\n $isMinimized &&\n css`\n height: 60px;\n width: 300px;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\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: 768px) {\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 ${({ theme }) => theme?.colors?.primary ?? '#0066FF'};\n outline-offset: 2px;\n }\n\n /* Ensure proper stacking context */\n z-index: ${({ $isFullscreen }) => ($isFullscreen ? 1000 : 100)};\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 styled from 'styled-components';\n\ninterface StyledInstagramIconProps {\n $size: number;\n}\n\nexport const StyledInstagramIcon = styled.button<StyledInstagramIconProps>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 0;\n margin: 0;\n background: transparent;\n border: none;\n cursor: pointer;\n width: ${(props) => props.$size}px;\n height: ${(props) => props.$size}px;\n border-radius: ${(props) => props.theme.radii?.sm || '4px'};\n transition: all 0.2s ease;\n\n /* Focus visible state for accessibility */\n &:focus-visible {\n outline: 2px solid ${(props) => props.theme.colors?.primary || '#007bff'};\n outline-offset: 2px;\n }\n\n /* Hover state */\n &:hover:not(:disabled) {\n opacity: 0.8;\n transform: scale(1.05);\n }\n\n /* Active/pressed state */\n &:active:not(:disabled) {\n transform: scale(0.95);\n }\n\n /* Disabled state */\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n /* Remove default button styles */\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n\n /* Ensure SVG is properly displayed */\n svg {\n display: block;\n pointer-events: none;\n }\n`;\n","import type { AriaButtonProps } from '@react-aria/button';\nimport { useButton } from '@react-aria/button';\nimport { useId, useRef } from 'react';\nimport { StyledInstagramIcon } from './InstagramIcon.styles';\n\nexport type InstagramVariant = 'colored' | 'black' | 'white';\n\nexport interface InstagramIconProps extends Omit<AriaButtonProps, 'children'> {\n /**\n * The variant of the Instagram icon\n * - 'colored': Instagram brand gradient (purple to yellow)\n * - 'black': Solid black icon\n * - 'white': Solid white icon\n * @default 'colored'\n */\n variant?: InstagramVariant;\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 * @default 'Instagram'\n */\n 'aria-label'?: string;\n}\n\n/**\n * InstagramIcon component - Displays the Instagram logo with multiple variants\n *\n * This component renders the Instagram logo with three visual variants:\n * colored (brand gradient), black, and white. It uses React ARIA for\n * accessibility and can function as both a decorative icon and an\n * interactive button.\n *\n * @example\n * ```tsx\n * // Colored variant (default)\n * <InstagramIcon />\n *\n * // Black variant with custom size\n * <InstagramIcon variant=\"black\" size={32} />\n *\n * // Interactive icon with click handler\n * <InstagramIcon\n * variant=\"colored\"\n * onPress={() => window.open('https://instagram.com')}\n * aria-label=\"Follow us on Instagram\"\n * />\n * ```\n */\nexport function InstagramIcon({\n variant = 'colored',\n size = 24,\n className,\n 'aria-label': ariaLabel = 'Instagram',\n onPress,\n ...ariaProps\n}: InstagramIconProps) {\n const ref = useRef<HTMLButtonElement>(null);\n const gradientId = useId();\n const isInteractive = Boolean(onPress || ariaProps.onPressStart || ariaProps.onPressEnd);\n\n const { buttonProps } = useButton(\n {\n ...ariaProps,\n onPress,\n 'aria-label': ariaLabel,\n // If not interactive, mark as presentation\n ...(isInteractive ? {} : { 'aria-hidden': true }),\n },\n ref\n );\n\n const renderSvgContent = () => {\n const paths = {\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 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 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 switch (variant) {\n case 'colored':\n return (\n <>\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\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d={paths.path1}\n fill={`url(#${gradientId})`}\n />\n <path d={paths.path2} fill={`url(#${gradientId})`} />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d={paths.path3}\n fill={`url(#${gradientId})`}\n />\n </>\n );\n case 'black':\n return (\n <>\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 </>\n );\n case 'white':\n return (\n <>\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 </>\n );\n default:\n return null;\n }\n };\n\n // If not interactive, render as a span instead of button\n if (!isInteractive) {\n return (\n <span className={className} aria-hidden=\"true\">\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 style={{ display: 'block' }}\n role=\"img\"\n aria-label={ariaLabel}\n >\n <title>{ariaLabel}</title>\n {renderSvgContent()}\n </svg>\n </span>\n );\n }\n\n return (\n <StyledInstagramIcon\n {...buttonProps}\n ref={ref}\n className={className}\n $size={size}\n role=\"button\"\n tabIndex={0}\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 style={{ display: 'block' }}\n role=\"img\"\n aria-label={ariaLabel}\n >\n <title>{ariaLabel}</title>\n {renderSvgContent()}\n </svg>\n </StyledInstagramIcon>\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 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';\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: 2px;\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"]}