@agentiffai/design 1.3.21 → 1.3.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/copilotkit/index.cjs +34 -33
- package/dist/copilotkit/index.cjs.map +1 -1
- package/dist/copilotkit/index.js +34 -33
- package/dist/copilotkit/index.js.map +1 -1
- package/dist/index.cjs +124 -21
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +8 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +124 -21
- package/dist/index.js.map +1 -1
- package/dist/layout/index.cjs +1 -1
- package/dist/layout/index.cjs.map +1 -1
- package/dist/layout/index.js +1 -1
- package/dist/layout/index.js.map +1 -1
- package/dist/workflow/index.cjs +0 -1
- package/dist/workflow/index.cjs.map +1 -1
- package/dist/workflow/index.js +0 -1
- package/dist/workflow/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/theme/tokens.ts","../../src/components/layout/CategoryNav/CategoryNav.styles.ts","../../src/components/layout/CategoryNav/CategoryNav.tsx","../../src/components/layout/Icon/Icon.styles.ts","../../src/components/layout/Icon/icons.ts","../../src/components/layout/Icon/Icon.tsx","../../src/components/layout/NavHorizontal/NavHorizontal.styles.ts","../../src/components/layout/NavHorizontal/NavHorizontal.tsx","../../src/components/layout/NavVertical/NavVertical.styles.ts","../../src/components/layout/NavVertical/NavVertical.tsx","../../src/components/layout/Layout/Layout.styles.ts","../../src/components/layout/Layout/Layout.tsx","../../src/components/layout/NavHorizontal/ActionButtons.styles.ts","../../src/components/layout/NavHorizontal/ActionButtons.tsx","../../src/components/layout/NavHorizontal/WorkflowStatusCard.styles.ts","../../src/components/layout/NavHorizontal/WorkflowStatusCard.tsx","../../src/components/NotificationCard/NotificationCard.dark.styles.ts","../../src/components/NotificationCard/DarkNotificationCard.tsx","../../src/components/layout/PaneMenus/PaneMenus.styles.ts","../../src/components/layout/PaneMenus/PaneMenus.tsx","../../src/components/layout/PaneSectionHeader/PaneSectionHeader.styles.ts","../../src/components/layout/PaneSectionHeader/PaneSectionHeader.tsx","../../src/components/layout/ServiceIcon/ServiceIcon.styles.ts","../../src/components/layout/ServiceIcon/ServiceIcon.tsx"],"names":["styled","keyframes","jsxs","jsx","useState","useCallback","Container","useRef","useButton","css","IconWrapper","DisclosureGroup","Disclosure","Button","DisclosurePanel","Heading","Fragment","useMeter","useTab","useTabList","useTabPanel","useTabListState","Item","BackButton"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Design Tokens\n * Centralized design system tokens for colors, typography, spacing, etc.\n * These tokens are the single source of truth for styling across all components.\n */\n\nexport const tokens = {\n colors: {\n // Brand colors\n primary: '#2CB0AB', // Teal (main brand color)\n secondary: '#264E68', // Deep Blue\n accent: '#459FB9', // Sky Blue\n seaGreen: '#4EB999', // Sea Green (additional brand color)\n\n // Backgrounds - dark theme optimized\n background: {\n darkest: '#0a1b2a', // Darkest Blue (brand color)\n darker: '#151a26', // Discord gray (preserved)\n dark: '#1b2230', // Discord surface gray (preserved)\n light: '#252d3d', // Discord border gray (preserved)\n },\n\n // Text hierarchy\n text: {\n primary: '#FFFFFF',\n secondary: '#B4B8C5',\n tertiary: '#6B7280',\n disabled: '#4B5563',\n },\n\n // Semantic colors\n success: '#2CB0AB', // Teal (brand aligned)\n error: '#EF4444',\n warning: '#F59E0B',\n info: '#459FB9', // Sky Blue (brand aligned)\n\n // Status colors (for workflow/SSE events)\n status: {\n pending: '#6B7280',\n editing: '#3B82F6',\n idle: '#6B7280',\n running: '#459FB9', // Sky Blue (brand aligned)\n completed: '#2CB0AB', // Teal (brand aligned)\n failed: '#EF4444',\n timeout: '#F59E0B',\n // Badge status (online/offline pattern)\n online: '#2CB0AB',\n offline: '#EF4444',\n busy: '#459FB9',\n },\n\n // Connection status\n connection: {\n connected: '#2CB0AB', // Teal (brand aligned)\n streaming: '#459FB9', // Sky Blue (brand aligned)\n disconnected: '#EF4444',\n reconnecting: '#F59E0B',\n },\n\n // Surface variants (for overlays, cards, panels)\n surface: {\n base: '#1b2230',\n elevated: '#252d3d',\n overlay: 'rgba(255, 255, 255, 0.05)',\n overlayHover: 'rgba(255, 255, 255, 0.1)',\n overlayActive: 'rgba(255, 255, 255, 0.15)',\n subtle: 'rgba(255, 255, 255, 0.02)',\n glass: 'rgba(255, 255, 255, 0.26)',\n glassBorder: 'rgba(255, 255, 255, 0.3)',\n },\n\n // UI Element colors\n border: {\n default: 'rgba(255, 255, 255, 0.1)',\n subtle: 'rgba(255, 255, 255, 0.05)',\n hover: 'rgba(255, 255, 255, 0.2)',\n focus: '#2CB0AB', // Teal (brand aligned)\n error: '#EF4444',\n },\n\n // Scrollbar colors\n scrollbar: {\n track: 'transparent',\n thumb: 'rgba(255, 255, 255, 0.2)',\n thumbHover: 'rgba(255, 255, 255, 0.3)',\n },\n\n // Message bubbles\n message: {\n user: '#264E68', // Deep Blue (brand color)\n ai: '#1b2230', // Dark background\n system: '#151a26', // Darker background\n },\n\n // Overlays and backdrops\n overlay: 'rgba(0, 0, 0, 0.5)',\n backdrop: 'rgba(27, 34, 48, 0.95)',\n\n // Icon colors\n icon: {\n default: '#B4B8C5',\n muted: '#6B7280',\n active: '#2CB0AB',\n },\n\n // Platform brand colors (for social media icons)\n platform: {\n facebook: '#1877F2',\n instagram: '#E4405F',\n linkedin: '#0A66C2',\n x: '#000000',\n twitter: '#1DA1F2',\n youtube: '#FF0000',\n reddit: '#FF4500',\n slack: '#4A154B',\n telegram: '#0088CC',\n whatsapp: '#25D366',\n gmail: '#EA4335',\n },\n },\n\n typography: {\n fontFamily: {\n primary:\n \"'Roboto', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Helvetica Neue', sans-serif\",\n heading:\n \"'Roboto', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Helvetica Neue', sans-serif\",\n monospace: \"'Roboto Mono', 'Monaco', 'Menlo', 'Ubuntu Mono', monospace\",\n },\n fontSize: {\n xs: '0.875rem', // 14px (was 12px, increased for better readability)\n sm: '1rem', // 16px (was 14px, increased for better readability)\n base: '1.125rem', // 18px (was 16px, increased for better readability)\n lg: '1.125rem', // 18px (heading size, unchanged)\n xl: '1.25rem', // 20px (heading size, unchanged)\n '2xl': '1.5rem', // 24px (heading size, unchanged)\n '3xl': '1.875rem', // 30px (heading size, unchanged)\n '4xl': '2.25rem', // 36px (heading size, unchanged)\n },\n fontWeight: {\n light: 300,\n regular: 400,\n medium: 500,\n semibold: 600,\n bold: 700,\n },\n lineHeight: {\n tight: 1.25,\n normal: 1.5,\n relaxed: 1.75,\n },\n },\n\n spacing: {\n xs: '0.25rem', // 4px\n sm: '0.5rem', // 8px\n md: '1rem', // 16px\n lg: '1.5rem', // 24px\n xl: '2rem', // 32px\n '2xl': '3rem', // 48px\n '3xl': '4rem', // 64px\n },\n\n borderRadius: {\n none: '0',\n sm: '0.25rem', // 4px\n md: '0.5rem', // 8px\n lg: '0.75rem', // 12px\n xl: '1rem', // 16px\n '2xl': '1.5rem', // 24px\n full: '9999px', // Fully rounded\n },\n\n shadows: {\n none: 'none',\n sm: '0 1px 2px 0 rgba(0, 0, 0, 0.05)',\n md: '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)',\n lg: '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)',\n xl: '0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)',\n card: '0 4px 20px rgba(0, 0, 0, 0.3)',\n glow: {\n primary: '0 0 20px rgba(44, 176, 171, 0.3)',\n secondary: '0 0 20px rgba(38, 78, 104, 0.3)',\n accent: '0 0 20px rgba(69, 159, 185, 0.3)',\n },\n },\n\n transitions: {\n fast: '150ms ease-in-out',\n normal: '250ms ease-in-out',\n slow: '350ms ease-in-out',\n },\n\n animation: {\n duration: {\n micro: '150ms',\n short: '200ms',\n medium: '300ms',\n long: '500ms',\n },\n easing: {\n enter: 'cubic-bezier(0.4, 0, 0.2, 1)',\n exit: 'cubic-bezier(0.4, 0, 1, 1)',\n smooth: 'cubic-bezier(0.4, 0, 0.2, 1)',\n linear: 'linear',\n },\n },\n\n zIndex: {\n base: 0,\n dropdown: 1000,\n sticky: 1020,\n fixed: 1030,\n overlay: 1100,\n modal: 1200,\n popover: 1300,\n tooltip: 1400,\n toast: 1500,\n },\n\n breakpoints: {\n mobile: 640,\n tablet: 1024,\n desktop: 1280,\n },\n} as const;\n\nexport type Tokens = typeof tokens;\n","import styled, { keyframes } from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\nexport const NavigationContainer = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n padding-top: ${tokens.spacing.xs};\n gap: ${tokens.spacing.xs};\n width: 100%;\n height: 100%;\n overflow-y: auto;\n overflow-x: hidden;\n\n &:hover {\n background: transparent !important;\n border-radius: 0 !important;\n box-shadow: none !important;\n }\n`;\n\nexport const CategoryGroup = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n padding-bottom: ${tokens.spacing.md};\n\n &:hover {\n background: transparent !important;\n border-radius: 0 !important;\n }\n`;\n\nexport const CategoryButton = styled.button<{ $active: boolean; $expanded: boolean }>`\n width: 48px;\n height: 48px;\n border: none;\n padding: 0;\n border-radius: ${({ $active }) => ($active ? tokens.borderRadius.xl : tokens.borderRadius.full)};\n background-color: ${({ $active }) => ($active ? tokens.colors.primary : tokens.colors.background.light)};\n color: ${tokens.colors.text.primary};\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all ${tokens.transitions.fast};\n position: relative;\n\n &:hover {\n border-radius: ${tokens.borderRadius.xl};\n background-color: ${({ $active }) => ($active ? tokens.colors.primary : tokens.colors.surface.overlayHover)};\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n`;\n\nexport const CategoryLabel = styled.span`\n font-size: 9px;\n color: ${tokens.colors.text.tertiary};\n margin-top: ${tokens.spacing.xs};\n text-align: center;\n max-width: 56px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nexport const SubItemList = styled.div<{ $expanded: boolean }>`\n display: ${({ $expanded }) => ($expanded ? 'flex' : 'none')};\n flex-direction: column;\n align-items: center;\n gap: ${tokens.spacing.xs};\n margin-top: ${tokens.spacing.xs};\n width: 100%;\n`;\n\nexport const SubItemButton = styled.button<{ $active: boolean }>`\n width: 32px;\n height: 32px;\n border: none;\n padding: 0;\n border-radius: ${({ $active }) => ($active ? tokens.borderRadius.md : tokens.borderRadius.full)};\n background-color: ${({ $active }) => ($active ? tokens.colors.surface.overlayActive : tokens.colors.surface.overlay)};\n color: ${tokens.colors.text.primary};\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all ${tokens.transitions.fast};\n\n &:hover {\n border-radius: ${tokens.borderRadius.md};\n background-color: ${({ $active }) =>\n $active ? tokens.colors.surface.overlayActive : tokens.colors.surface.overlayHover};\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n`;\n\nexport const CountBadge = styled.span`\n position: absolute;\n top: -2px;\n right: -2px;\n background: ${tokens.colors.accent};\n color: ${tokens.colors.text.primary};\n font-size: 10px;\n font-weight: ${tokens.typography.fontWeight.semibold};\n min-width: 16px;\n height: 16px;\n border-radius: ${tokens.borderRadius.md};\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0 ${tokens.spacing.xs};\n`;\n\nconst filterBadgeIn = keyframes`\n from {\n opacity: 0;\n transform: scale(0.5);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n`;\n\nexport const FilterBadge = styled.div`\n position: absolute;\n bottom: -${tokens.spacing.xs};\n right: -${tokens.spacing.xs};\n width: 18px;\n height: 18px;\n background: ${tokens.colors.background.darker};\n border-radius: ${tokens.borderRadius.full};\n display: flex;\n align-items: center;\n justify-content: center;\n animation: ${filterBadgeIn} ${tokens.transitions.normal};\n\n svg {\n width: 10px;\n height: 10px;\n fill: ${tokens.colors.text.primary};\n }\n`;\n\nexport const CategoryIconImg = styled.img<{ $size?: number; $active?: boolean }>`\n width: ${({ $size }) => $size || 24}px;\n height: ${({ $size }) => $size || 24}px;\n object-fit: contain;\n filter: ${({ $active }) => ($active ? 'brightness(0) invert(1)' : 'none')};\n`;\n\nexport const SubItemIconImg = styled.img<{ $size: number; $active?: boolean }>`\n width: ${({ $size }) => $size}px;\n height: ${({ $size }) => $size}px;\n object-fit: contain;\n filter: ${({ $active }) => ($active ? 'brightness(0) invert(1)' : 'none')};\n`;\n","/**\n * CategoryNav Component\n *\n * Vertical navigation bar displaying categories with expandable sub-items.\n * Generic component that can be used for any category-based navigation.\n */\n\nimport type React from 'react';\nimport { useCallback, useState } from 'react';\nimport {\n CategoryButton,\n CategoryGroup,\n CategoryIconImg,\n CategoryLabel,\n CountBadge,\n FilterBadge,\n NavigationContainer,\n SubItemButton,\n SubItemIconImg,\n SubItemList,\n} from './CategoryNav.styles';\n\n// =============================================================================\n// Types\n// =============================================================================\n\n/**\n * Represents a sub-item within a category\n */\nexport interface CategorySubItem {\n /** Unique identifier */\n id: string;\n /** Display name */\n name: string;\n /** Icon element or image path */\n icon: React.ReactNode | string;\n}\n\n/**\n * Represents a category in the navigation\n */\nexport interface CategoryItem<T extends string = string> {\n /** Unique identifier */\n id: T;\n /** Display label */\n label: string;\n /** Icon path (SVG) */\n iconPath: string;\n /** Sub-items within this category */\n subItems?: CategorySubItem[];\n}\n\nexport interface CategoryNavProps<T extends string = string> {\n /** List of categories to display */\n categories: CategoryItem<T>[];\n /** Currently selected category (null = none) */\n selectedCategory: T | null;\n /** Currently selected sub-item within category (null = all in category) */\n selectedSubItem: string | null;\n /** Callback when category is selected */\n onCategorySelect: (category: T | null) => void;\n /** Callback when sub-item is selected */\n onSubItemSelect: (subItem: string | null) => void;\n /** Optional counts per category */\n categoryCounts?: Record<T, number>;\n /** Optional set of enabled categories (if provided, hides categories not in set) */\n enabledCategories?: Set<T>;\n /** Test ID prefix for testing */\n testIdPrefix?: string;\n}\n\n// Filter icon for the badge\nconst FilterIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-label=\"Filter active\">\n <title>Filter active</title>\n <path d=\"M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z\" />\n </svg>\n);\n\n// =============================================================================\n// Component\n// =============================================================================\n\nexport function CategoryNav<T extends string = string>({\n categories,\n selectedCategory,\n selectedSubItem,\n onCategorySelect,\n onSubItemSelect,\n categoryCounts,\n enabledCategories,\n testIdPrefix = 'category',\n}: CategoryNavProps<T>): React.ReactElement {\n const [expandedCategory, setExpandedCategory] = useState<T | null>(selectedCategory);\n\n const hasSubItemFilterForCategory = useCallback(\n (categoryId: T): boolean => {\n if (!selectedSubItem) return false;\n const category = categories.find((c) => c.id === categoryId);\n return category?.subItems?.some((s) => s.id === selectedSubItem) ?? false;\n },\n [selectedSubItem, categories]\n );\n\n const handleCategoryClick = useCallback(\n (categoryId: T) => {\n // If this category is selected and has a sub-item filter, clear the filter\n if (selectedCategory === categoryId && hasSubItemFilterForCategory(categoryId)) {\n onSubItemSelect(null);\n return;\n }\n\n if (selectedCategory === categoryId) {\n // Toggle expansion without changing selection\n setExpandedCategory((prev) => (prev === categoryId ? null : categoryId));\n } else {\n // Select category and expand it\n onCategorySelect(categoryId);\n onSubItemSelect(null);\n setExpandedCategory(categoryId);\n }\n },\n [selectedCategory, onCategorySelect, onSubItemSelect, hasSubItemFilterForCategory]\n );\n\n const handleSubItemClick = useCallback(\n (subItemId: string) => {\n if (selectedSubItem === subItemId) {\n onSubItemSelect(null);\n } else {\n onSubItemSelect(subItemId);\n }\n },\n [selectedSubItem, onSubItemSelect]\n );\n\n // Filter categories by enabled set if provided\n const visibleCategories =\n enabledCategories && enabledCategories.size > 0\n ? categories.filter((cat) => enabledCategories.has(cat.id))\n : categories;\n\n const renderSubItemIcon = (subItem: CategorySubItem, isActive: boolean) => {\n if (typeof subItem.icon === 'string') {\n return <SubItemIconImg src={subItem.icon} alt={subItem.name} $size={16} $active={isActive} />;\n }\n return subItem.icon;\n };\n\n return (\n <NavigationContainer data-testid={`${testIdPrefix}-navigation`}>\n {visibleCategories.map((category) => {\n const isSelected = selectedCategory === category.id;\n const isExpanded = expandedCategory === category.id;\n const count = categoryCounts?.[category.id];\n const hasSubItemFilter = hasSubItemFilterForCategory(category.id);\n\n return (\n <CategoryGroup key={category.id}>\n <CategoryButton\n $active={isSelected}\n $expanded={isExpanded}\n onClick={() => handleCategoryClick(category.id)}\n aria-label={\n hasSubItemFilter ? `${category.label} (filtered - click to clear)` : category.label\n }\n aria-expanded={isExpanded}\n aria-pressed={isSelected}\n title={\n hasSubItemFilter ? `${category.label} - Click to clear filter` : category.label\n }\n data-testid={`${testIdPrefix}-${category.id}`}\n data-active={isSelected}\n >\n <CategoryIconImg\n src={category.iconPath}\n alt={category.label}\n $size={24}\n $active={isSelected}\n />\n {count !== undefined && count > 0 && <CountBadge>{count}</CountBadge>}\n {hasSubItemFilter && (\n <FilterBadge>\n <FilterIcon />\n </FilterBadge>\n )}\n </CategoryButton>\n <CategoryLabel>{category.label}</CategoryLabel>\n\n {category.subItems && category.subItems.length > 0 && (\n <SubItemList $expanded={isExpanded}>\n {category.subItems.map((subItem) => {\n const isSubItemActive = selectedSubItem === subItem.id;\n return (\n <SubItemButton\n key={subItem.id}\n $active={isSubItemActive}\n onClick={() => handleSubItemClick(subItem.id)}\n aria-label={subItem.name}\n title={subItem.name}\n data-testid={`${testIdPrefix}-subitem-${subItem.id}`}\n >\n {renderSubItemIcon(subItem, isSubItemActive)}\n </SubItemButton>\n );\n })}\n </SubItemList>\n )}\n </CategoryGroup>\n );\n })}\n </NavigationContainer>\n );\n}\n\nCategoryNav.displayName = 'CategoryNav';\n\nexport default CategoryNav;\n","import styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\ninterface IconWrapperProps {\n $size: number;\n $color: string;\n}\n\nexport const IconWrapper = styled.span<IconWrapperProps>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: ${({ $size }) => $size}px;\n height: ${({ $size }) => $size}px;\n color: ${({ $color }) => $color};\n line-height: 1;\n\n img {\n width: 100%;\n height: 100%;\n filter: ${({ $color }) => {\n if ($color === 'currentColor' || !$color) return 'inherit';\n if ($color === 'white' || $color === tokens.colors.text.primary || $color === '#fff') {\n return 'brightness(0) saturate(100%) invert(100%)';\n }\n if ($color === tokens.colors.text.secondary || $color === '#b9bbbe') {\n // Secondary text color (gray)\n return 'brightness(0) saturate(100%) invert(75%) sepia(8%) saturate(223%) hue-rotate(180deg) brightness(94%) contrast(86%)';\n }\n if ($color === tokens.colors.error || $color === '#ed4245' || $color === '#f04747') {\n // Error red\n return 'brightness(0) saturate(100%) invert(38%) sepia(97%) saturate(1459%) hue-rotate(334deg) brightness(95%) contrast(93%)';\n }\n return 'none';\n }};\n }\n`;\n","/**\n * Icon configuration and type definitions\n * Using @icon-set alias for cleaner imports\n */\n\n// Base path for all icons (served from public directory)\nexport const ICON_BASE_PATH = '/assets/icon-set' as const;\n\n// Available icon names as const for type safety\nexport const IconNames = {\n MIC: 'mic-fill',\n MIC_OFF: 'mic-off-fill',\n HEADPHONE: 'headphone-fill',\n VOLUME_MUTE: 'volume-mute-fill',\n SETTINGS_3_LINE: 'settings-3-line',\n HOME: 'home-fill',\n ADD_CIRCLE: 'add-circle-fill',\n COMPASS_DISCOVER: 'compass-discover-fill',\n DOWNLOAD: 'download-2-fill',\n ARROW_LEFT: 'arrow-left-fill',\n CALENDAR: 'calendar-fill',\n CHAT: 'chat-1-fill',\n FLOW_CHART: 'flow-chart',\n LOGOUT_CIRCLE_R_FILL: 'logout-circle-r-fill',\n LOGOUT_CIRCLE_R_LINE: 'logout-circle-r-line',\n SIDE_BAR_FILL: 'side-bar-fill',\n CHECK: 'check-fill',\n CHECK_CIRCLE: 'checkbox-circle-fill',\n CLOSE_CIRCLE: 'close-circle-fill',\n ERROR_WARNING: 'error-warning-fill',\n HAMMER: 'hammer-fill',\n ROCKET: 'rocket-fill',\n TICKET: 'coupon-2-fill',\n CLIPBOARD: 'clipboard-fill',\n} as const;\n\nexport type IconName = (typeof IconNames)[keyof typeof IconNames];\n\n// Icon file mapping\nexport const iconFiles: Record<IconName, string> = {\n 'mic-fill': 'Icon-mic-fill.svg',\n 'mic-off-fill': 'Icon-mic-off-fill.svg',\n 'headphone-fill': 'Icon-headphone-fill.svg',\n 'volume-mute-fill': 'Icon-volume-mute-fill.svg',\n 'settings-3-line': 'Icon-settings-3-line.svg',\n 'home-fill': 'Icon-home-fill.svg',\n 'add-circle-fill': 'Icon-add-circle-fill.svg',\n 'compass-discover-fill': 'Icon-compass-discover-fill.svg',\n 'download-2-fill': 'Icon-download-2-fill.svg',\n 'arrow-left-fill': 'Icon-arrow-left-fill.svg',\n 'calendar-fill': 'Icon-calendar-fill.svg',\n 'chat-1-fill': 'Icon-chat-1-fill.svg',\n 'flow-chart': 'Icon-flow-chart.svg',\n 'logout-circle-r-fill': 'Icon-logout-circle-r-fill.svg',\n 'logout-circle-r-line': 'Icon-logout-circle-r-line.svg',\n 'side-bar-fill': 'Icon-side-bar-fill.svg',\n 'check-fill': 'Icon-check-fill.svg',\n 'checkbox-circle-fill': 'Icon-checkbox-circle-fill.svg',\n 'close-circle-fill': 'Icon-close-circle-fill.svg',\n 'error-warning-fill': 'Icon-error-warning-fill.svg',\n 'hammer-fill': 'Icon-hammer-fill.svg',\n 'rocket-fill': 'Icon-rocket-fill.svg',\n 'coupon-2-fill': 'Icon-coupon-2-fill.svg',\n 'clipboard-fill': 'Icon-clipboard-fill.svg',\n};\n\n// Helper function to get full icon path\nexport function getIconPath(name: IconName): string {\n return `${ICON_BASE_PATH}/${iconFiles[name]}`;\n}\n","import type { ImgHTMLAttributes } from 'react';\nimport { IconWrapper } from './Icon.styles';\nimport { getIconPath, type IconName } from './icons';\n\nexport interface IconProps extends Omit<ImgHTMLAttributes<HTMLImageElement>, 'src' | 'alt'> {\n name: IconName;\n size?: number;\n color?: string;\n className?: string;\n}\n\nexport function Icon({\n name,\n size = 20,\n color = 'currentColor',\n className,\n ...imgProps\n}: IconProps) {\n const iconPath = getIconPath(name);\n\n return (\n <IconWrapper $size={size} $color={color} className={className} aria-hidden=\"true\">\n <img src={iconPath} alt=\"\" width={size} height={size} {...imgProps} />\n </IconWrapper>\n );\n}\n\nIcon.displayName = 'Icon';\n","import styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\nexport const Container = styled.nav`\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n background-color: ${tokens.colors.background.darker};\n border-top: 1px solid ${tokens.colors.border.subtle};\n /* Add vertical padding to prevent content overlap */\n padding-top: 4px;\n /* Use --safe-area-bottom CSS variable for Android navigation buttons.\n Android WebView doesn't support env(), so we use CSS custom properties\n injected by the native app. Fallback to 0 if not set. */\n padding-bottom: var(--safe-area-bottom, 0px);\n z-index: ${tokens.zIndex.sticky};\n\n /* Dark theme support */\n @media (prefers-color-scheme: dark) {\n background-color: ${tokens.colors.background.darkest};\n }\n`;\n\nexport const ContentWrapper = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n /* Fixed height for actual navbar content - keeps vertical centering */\n height: 52px;\n /* Left padding aligns WorkflowStatusCard icon with NavVertical icons (center at 36px) */\n /* Icon is 36px with 6px card padding, so card edge at 12px, icon center at 12+6+18=36px */\n padding: 0 ${tokens.spacing.xs} 0 12px;\n gap: ${tokens.spacing.xs}; /* 4px gap between status card and action buttons */\n max-width: 100%;\n\n /* Responsive padding - adjust for mobile nav width (60px, center at 30px) */\n @media (max-width: ${tokens.breakpoints.tablet}px) {\n /* Card edge at 6px, icon center at 6+6+18=30px to match 60px nav */\n padding: 0 ${tokens.spacing.xs} 0 6px;\n }\n`;\n\nexport const UserStatusSlot = styled.div`\n display: flex;\n align-items: center;\n min-width: 0; /* Allow flex item to shrink */\n flex: 1 1 auto; /* Allow slot to grow and take available space */\n\n /* Handle overflow for long usernames */\n > * {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n`;\n\nexport const ActionButtonsSlot = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n flex-shrink: 0;\n\n /* Ensure buttons stay visible */\n @media (min-width: 480px) {\n gap: ${tokens.spacing.sm};\n }\n`;\n","import type { ReactNode } from 'react';\nimport {\n ActionButtonsSlot,\n Container,\n ContentWrapper,\n UserStatusSlot,\n} from './NavHorizontal.styles';\n\nexport interface NavHorizontalProps {\n userStatusSlot?: ReactNode;\n actionsSlot?: ReactNode;\n className?: string;\n 'aria-label'?: string;\n}\n\nexport function NavHorizontal({\n userStatusSlot,\n actionsSlot,\n className,\n 'aria-label': ariaLabel = 'Horizontal navigation bar',\n}: NavHorizontalProps) {\n return (\n <Container className={className} role=\"navigation\" aria-label={ariaLabel}>\n <ContentWrapper>\n <UserStatusSlot>{userStatusSlot}</UserStatusSlot>\n <ActionButtonsSlot>{actionsSlot}</ActionButtonsSlot>\n </ContentWrapper>\n </Container>\n );\n}\n\nNavHorizontal.displayName = 'NavHorizontal';\n","import styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\nexport const Container = styled.nav`\n position: absolute;\n top: 0;\n left: 0;\n bottom: 52px; /* Account for horizontal nav height */\n width: 72px;\n background-color: ${tokens.colors.background.darker};\n display: flex;\n flex-direction: column;\n z-index: ${tokens.zIndex.base + 9}; /* Below horizontal nav and chat sidebar */\n overflow-y: auto;\n overflow-x: hidden;\n scrollbar-width: none; /* Firefox */\n /* Use CSS custom property for coordinated animations with MainPane */\n transition: transform var(--layout-transition-duration, 0.3s) var(--layout-transition-easing, ease-out);\n\n /* Hide scrollbar for Chrome, Safari and Opera */\n &::-webkit-scrollbar {\n display: none;\n }\n\n /* Dark theme support */\n @media (prefers-color-scheme: dark) {\n background-color: ${tokens.colors.background.darkest};\n }\n\n /* Responsive adjustments */\n @media (max-width: ${tokens.breakpoints.tablet}px) {\n width: 60px; /* Match MainPane left offset on mobile */\n }\n\n /* Mobile landscape: allow content to overflow and scroll with thin scrollbar */\n @media (orientation: landscape) and (max-height: 500px) {\n width: 60px;\n overflow-y: auto;\n overflow-x: hidden;\n scrollbar-width: thin; /* Firefox - show thin scrollbar */\n\n /* Show thin scrollbar for Chrome, Safari */\n &::-webkit-scrollbar {\n display: block;\n width: 3px;\n height: 3px;\n }\n\n &::-webkit-scrollbar-track {\n background: transparent;\n }\n\n &::-webkit-scrollbar-thumb {\n background: ${tokens.colors.border.default};\n border-radius: 2px;\n }\n }\n`;\n\nexport const TopSection = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 56px; /* Same as PaneSectionHeader on mobile */\n padding: 0;\n flex-shrink: 0;\n position: relative;\n\n @media (min-width: ${tokens.breakpoints.tablet}px) {\n height: 64px; /* Same as PaneSectionHeader on desktop */\n }\n`;\n\nexport const BackButton = styled.button`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 40px;\n height: 40px;\n border-radius: ${tokens.borderRadius.full};\n border: none;\n background-color: ${tokens.colors.background.light};\n color: ${tokens.colors.text.primary};\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all ${tokens.transitions.normal};\n -webkit-tap-highlight-color: transparent;\n\n &:hover {\n background-color: ${tokens.colors.primary};\n }\n\n &:active {\n transform: translate(-50%, -50%) scale(0.95);\n opacity: 0.8;\n }\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n`;\n\nexport const BackButtonIcon = styled.span`\n font-size: ${tokens.typography.fontSize.xl};\n line-height: ${tokens.typography.lineHeight.tight};\n font-weight: ${tokens.typography.fontWeight.bold};\n`;\n\nexport const Separator = styled.div`\n width: 32px;\n height: 2px;\n background-color: ${tokens.colors.background.light};\n align-self: center;\n margin: ${tokens.spacing.sm} auto ${tokens.spacing.md};\n border-radius: 1px;\n`;\n\nexport const FolderGroupsSlot = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: ${tokens.spacing.sm};\n padding: 0 ${tokens.spacing.md} ${tokens.spacing.md};\n flex: 1;\n padding-bottom: 120px; /* Prevent overlap with bottom section (2 buttons @ 40px + 1 gap @ 8px + padding @ 32px) */\n\n /* Server/workspace icons styling */\n > * {\n width: 48px;\n height: 48px;\n border-radius: ${tokens.borderRadius.full};\n transition: border-radius ${tokens.transitions.fast};\n cursor: pointer;\n\n &:hover {\n border-radius: ${tokens.borderRadius.xl};\n }\n }\n\n /* Responsive adjustments */\n @media (max-width: ${tokens.breakpoints.tablet}px) {\n padding: 0 6px ${tokens.spacing.md} 96px; /* Reduce horizontal padding on mobile */\n }\n\n /* Mobile landscape: remove extra padding since BottomSection flows with content */\n @media (orientation: landscape) and (max-height: 500px) {\n padding-bottom: ${tokens.spacing.md};\n flex: 0 0 auto; /* Don't flex-grow, allow natural height */\n }\n`;\n\nexport const BottomSection = styled.div`\n position: absolute;\n bottom: 0; /* At the bottom of the nav container */\n left: 0;\n right: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: ${tokens.spacing.sm};\n padding: ${tokens.spacing.md} 0;\n background-color: ${tokens.colors.background.darker};\n\n @media (prefers-color-scheme: dark) {\n background-color: ${tokens.colors.background.darkest};\n }\n\n /* Mobile landscape: make bottom section flow with content instead of fixed */\n @media (orientation: landscape) and (max-height: 500px) {\n position: relative;\n bottom: auto;\n margin-top: auto; /* Push to bottom of flex container */\n flex-shrink: 0;\n }\n`;\n\nexport const BottomButton = styled.button`\n width: 40px;\n height: 40px;\n border-radius: ${tokens.borderRadius.full};\n border: none;\n background-color: transparent;\n color: white;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all ${tokens.transitions.normal};\n -webkit-tap-highlight-color: transparent;\n\n &:hover {\n opacity: 0.7;\n }\n\n &:active {\n transform: scale(0.95);\n opacity: 0.8;\n }\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n border-radius: ${tokens.borderRadius.full};\n }\n`;\n","import { useButton } from '@react-aria/button';\nimport type { ReactNode } from 'react';\nimport { useRef } from 'react';\nimport { Icon } from '../Icon';\nimport {\n BackButton,\n BottomButton,\n BottomSection,\n Container,\n FolderGroupsSlot,\n Separator,\n TopSection,\n} from './NavVertical.styles';\n\nexport interface NavVerticalProps {\n onBackClick?: () => void;\n onHomeClick?: () => void;\n onSettingsClick?: () => void;\n onLogoutClick?: () => void;\n folderGroupsSlot?: ReactNode;\n className?: string;\n 'aria-label'?: string;\n}\n\nexport function NavVertical({\n onBackClick,\n onHomeClick,\n onSettingsClick,\n onLogoutClick,\n folderGroupsSlot,\n className,\n 'aria-label': ariaLabel = 'Vertical navigation sidebar',\n}: NavVerticalProps) {\n const backButtonRef = useRef<HTMLButtonElement>(null);\n const homeButtonRef = useRef<HTMLButtonElement>(null);\n const settingsButtonRef = useRef<HTMLButtonElement>(null);\n const logoutButtonRef = useRef<HTMLButtonElement>(null);\n\n const { buttonProps: backButtonProps } = useButton(\n {\n onPress: onBackClick,\n 'aria-label': 'Go back',\n },\n backButtonRef\n );\n\n const { buttonProps: homeButtonProps } = useButton(\n {\n onPress: onHomeClick,\n 'aria-label': 'Home',\n },\n homeButtonRef\n );\n\n const { buttonProps: settingsButtonProps } = useButton(\n {\n onPress: onSettingsClick,\n 'aria-label': 'Settings',\n },\n settingsButtonRef\n );\n\n const { buttonProps: logoutButtonProps } = useButton(\n {\n onPress: onLogoutClick,\n 'aria-label': 'Logout',\n },\n logoutButtonRef\n );\n\n return (\n <Container className={className} role=\"navigation\" aria-label={ariaLabel}>\n <TopSection>\n {onBackClick ? (\n <BackButton {...backButtonProps} ref={backButtonRef}>\n <Icon name=\"side-bar-fill\" size={20} color=\"white\" />\n </BackButton>\n ) : onHomeClick ? (\n <BackButton {...homeButtonProps} ref={homeButtonRef}>\n <Icon name=\"side-bar-fill\" size={24} color=\"white\" />\n </BackButton>\n ) : null}\n </TopSection>\n\n <Separator />\n\n <FolderGroupsSlot>{folderGroupsSlot}</FolderGroupsSlot>\n\n {(onSettingsClick || onLogoutClick) && (\n <BottomSection>\n {onSettingsClick && (\n <BottomButton {...settingsButtonProps} ref={settingsButtonRef}>\n <Icon name=\"settings-3-line\" size={24} color=\"white\" />\n </BottomButton>\n )}\n {onLogoutClick && (\n <BottomButton {...logoutButtonProps} ref={logoutButtonRef}>\n <Icon name=\"logout-circle-r-line\" size={24} color=\"white\" />\n </BottomButton>\n )}\n </BottomSection>\n )}\n </Container>\n );\n}\n\nNavVertical.displayName = 'NavVertical';\n","import styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\nexport const Container = styled.div`\n position: relative;\n width: 100%;\n height: 100vh;\n background-color: ${tokens.colors.surface.subtle};\n overflow: hidden;\n\n /* Ensure content is clipped on mobile */\n @media (max-width: ${tokens.breakpoints.tablet}px) {\n overflow: hidden;\n position: relative;\n }\n`;\n\n/**\n * BackgroundPane - Renders behind MainPane, visible when MainPane slides away\n * Used for displaying content like post previews that appear behind the main content\n */\nexport const BackgroundPane = styled.div`\n position: absolute;\n top: 0;\n left: 72px; /* Width of vertical nav */\n right: 0;\n bottom: 52px; /* Height of horizontal nav */\n background-color: transparent;\n overflow: auto;\n scrollbar-gutter: stable; /* Reserve space for scrollbar to prevent layout shift */\n z-index: ${tokens.zIndex.base}; /* Lower than MainPane */\n /* Use CSS custom property for coordinated animations with NavVertical */\n transition: transform var(--layout-transition-duration, 0.3s) var(--layout-transition-easing, ease-out);\n\n /* Custom scrollbar styling */\n &::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n }\n\n &::-webkit-scrollbar-track {\n background: ${tokens.colors.scrollbar.track};\n }\n\n &::-webkit-scrollbar-thumb {\n background-color: ${tokens.colors.scrollbar.thumb};\n border-radius: ${tokens.borderRadius.sm};\n }\n\n &::-webkit-scrollbar-thumb:hover {\n background-color: ${tokens.colors.scrollbar.thumbHover};\n }\n\n /* Firefox scrollbar */\n scrollbar-width: thin;\n scrollbar-color: ${tokens.colors.scrollbar.thumb} transparent;\n\n /* Responsive adjustments */\n @media (max-width: ${tokens.breakpoints.tablet}px) {\n left: 60px; /* Smaller nav on mobile */\n }\n`;\n\nexport const MainPane = styled.main`\n position: absolute;\n top: 0;\n left: 72px; /* Width of vertical nav */\n right: 0;\n bottom: 52px; /* Height of horizontal nav */\n background-color: ${tokens.colors.surface.overlay};\n overflow: auto;\n scrollbar-gutter: stable; /* Reserve space for scrollbar to prevent layout shift */\n z-index: ${tokens.zIndex.base + 1}; /* Higher than BackgroundPane */\n /* Use CSS custom property for coordinated animations with NavVertical */\n transition: transform var(--layout-transition-duration, 0.3s) var(--layout-transition-easing, ease-out);\n\n /* Custom scrollbar styling */\n &::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n }\n\n &::-webkit-scrollbar-track {\n background: ${tokens.colors.scrollbar.track};\n }\n\n &::-webkit-scrollbar-thumb {\n background-color: ${tokens.colors.scrollbar.thumb};\n border-radius: ${tokens.borderRadius.sm};\n }\n\n &::-webkit-scrollbar-thumb:hover {\n background-color: ${tokens.colors.scrollbar.thumbHover};\n }\n\n /* Firefox scrollbar */\n scrollbar-width: thin;\n scrollbar-color: ${tokens.colors.scrollbar.thumb} transparent;\n\n /* Responsive adjustments */\n @media (max-width: ${tokens.breakpoints.tablet}px) {\n left: 60px; /* Smaller nav on mobile */\n }\n`;\n","import type { ReactNode } from 'react';\nimport { NavHorizontal } from '../NavHorizontal';\nimport { NavVertical } from '../NavVertical';\nimport { BackgroundPane, Container, MainPane } from './Layout.styles';\n\nexport interface LayoutProps {\n mainPaneSlot: ReactNode;\n /** Background content rendered behind MainPane, visible when MainPane slides away */\n backgroundSlot?: ReactNode;\n navVerticalSlot?: ReactNode;\n navHorizontalUserSlot?: ReactNode;\n navHorizontalActionsSlot?: ReactNode;\n onNavBackClick?: () => void;\n onNavHomeClick?: () => void;\n onNavSettingsClick?: () => void;\n onNavLogoutClick?: () => void;\n className?: string;\n}\n\nexport function Layout({\n mainPaneSlot,\n backgroundSlot,\n navVerticalSlot,\n navHorizontalUserSlot,\n navHorizontalActionsSlot,\n onNavBackClick,\n onNavHomeClick,\n onNavSettingsClick,\n onNavLogoutClick,\n className,\n}: LayoutProps) {\n return (\n <Container className={className}>\n <NavVertical\n folderGroupsSlot={navVerticalSlot}\n onBackClick={onNavBackClick}\n onHomeClick={onNavHomeClick}\n onSettingsClick={onNavSettingsClick}\n onLogoutClick={onNavLogoutClick}\n />\n {backgroundSlot && <BackgroundPane>{backgroundSlot}</BackgroundPane>}\n <MainPane>{mainPaneSlot}</MainPane>\n <NavHorizontal\n userStatusSlot={navHorizontalUserSlot}\n actionsSlot={navHorizontalActionsSlot}\n />\n </Container>\n );\n}\n\nLayout.displayName = 'Layout';\n","import styled, { css } from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\nexport const Container = styled.div`\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: ${tokens.spacing.xs};\n`;\n\ninterface ActionButtonProps {\n $isActive?: boolean;\n $size?: number;\n $isPrimary?: boolean;\n}\n\nexport const ActionButton = styled.button<ActionButtonProps>`\n width: ${({ $size = 32 }) => $size}px;\n height: ${({ $size = 32 }) => $size}px;\n min-width: ${({ $size = 32 }) => $size}px;\n min-height: ${({ $size = 32 }) => $size}px;\n border-radius: ${({ $isPrimary }) => ($isPrimary ? tokens.borderRadius.full : tokens.borderRadius.md)};\n border: none;\n background-color: ${({ $isPrimary }) => ($isPrimary ? tokens.colors.primary : 'transparent')};\n color: ${({ $isPrimary }) => ($isPrimary ? tokens.colors.text.primary : tokens.colors.text.secondary)};\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all ${tokens.transitions.fast};\n font-size: ${tokens.typography.fontSize.base};\n -webkit-tap-highlight-color: transparent;\n\n &:hover {\n background-color: ${({ $isPrimary }) => ($isPrimary ? tokens.colors.secondary : tokens.colors.surface.overlayHover)};\n color: ${({ $isPrimary }) => ($isPrimary ? tokens.colors.text.primary : tokens.colors.text.primary)};\n }\n\n &:active {\n transform: scale(0.95);\n opacity: 0.8;\n }\n\n ${({ $isActive, $isPrimary }) =>\n $isActive &&\n !$isPrimary &&\n css`\n background-color: ${tokens.colors.surface.overlay};\n color: ${tokens.colors.text.primary};\n `}\n\n ${({ $isActive, $isPrimary }) =>\n $isActive &&\n $isPrimary &&\n css`\n background-color: ${tokens.colors.secondary};\n color: ${tokens.colors.text.primary};\n `}\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n`;\n","import { useButton } from '@react-aria/button';\nimport type { ReactNode } from 'react';\nimport { useRef } from 'react';\nimport { tokens } from '../../../theme/tokens';\nimport { Icon } from '../Icon';\nimport { ActionButton, Container } from './ActionButtons.styles';\n\nexport interface ActionButtonsProps {\n onCalendarClick?: () => void;\n onChatClick?: () => void;\n isCalendarActive?: boolean;\n isChatActive?: boolean;\n className?: string;\n}\n\ninterface ButtonProps {\n icon: ReactNode;\n label: string;\n onClick?: () => void;\n isActive?: boolean;\n size?: number;\n isPrimary?: boolean;\n}\n\nfunction ActionButtonItem({ icon, label, onClick, isActive, size, isPrimary }: ButtonProps) {\n const ref = useRef<HTMLButtonElement>(null);\n const { buttonProps } = useButton(\n {\n onPress: onClick,\n 'aria-label': label,\n 'aria-pressed': isActive,\n },\n ref\n );\n\n return (\n <ActionButton\n {...buttonProps}\n ref={ref}\n $isActive={isActive}\n $size={size}\n $isPrimary={isPrimary}\n >\n {icon}\n </ActionButton>\n );\n}\n\nexport function ActionButtons({\n onCalendarClick,\n onChatClick,\n isCalendarActive = false,\n isChatActive = false,\n className,\n}: ActionButtonsProps) {\n return (\n <Container className={className}>\n <ActionButtonItem\n icon={<Icon name=\"calendar-fill\" size={16} color={tokens.colors.text.secondary} />}\n label=\"Calendar\"\n onClick={onCalendarClick}\n isActive={isCalendarActive}\n size={32}\n />\n <ActionButtonItem\n icon={<Icon name=\"chat-1-fill\" size={16} color={tokens.colors.text.secondary} />}\n label=\"Chat\"\n onClick={onChatClick}\n isActive={isChatActive}\n size={32}\n />\n </Container>\n );\n}\n\nActionButtons.displayName = 'ActionButtons';\n","import styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\n// Status colors using design tokens\nconst statusColors = {\n online: tokens.colors.status.online,\n idle: tokens.colors.status.idle,\n busy: tokens.colors.status.busy,\n offline: tokens.colors.status.offline,\n};\n\ninterface StatusIndicatorProps {\n $status: 'online' | 'idle' | 'busy' | 'offline';\n}\n\ninterface ContainerProps {\n $isDisabled?: boolean;\n}\n\nexport const Container = styled.button<ContainerProps>`\n display: grid;\n grid-template-columns: auto 1fr;\n align-items: center;\n gap: ${tokens.spacing.sm};\n padding: 6px;\n margin: 0; /* No margin - positioning handled by parent slot */\n border-radius: ${tokens.borderRadius.md};\n border: none;\n background: ${tokens.colors.surface.subtle};\n color: inherit;\n font-family: ${tokens.typography.fontFamily.primary};\n transition: background-color ${tokens.transitions.fast}, opacity ${tokens.transitions.fast};\n cursor: ${(props) => (props.$isDisabled ? 'default' : 'pointer')};\n opacity: ${(props) => (props.$isDisabled ? 0.7 : 1)};\n text-align: left;\n width: 100%; /* Fill available slot width */\n /* Remove mobile tap highlight that causes blue flash */\n -webkit-tap-highlight-color: transparent;\n\n &:hover:not(:disabled) {\n background-color: ${(props) => (props.$isDisabled ? tokens.colors.surface.subtle : tokens.colors.surface.overlay)};\n }\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: none;\n /* Subtle focus ring instead of bright color */\n box-shadow: inset 0 0 0 1px ${tokens.colors.border.default};\n }\n\n &:active:not(:disabled) {\n /* Subtle press feedback - no color flash */\n opacity: 0.9;\n }\n`;\n\nexport const IconWrapper = styled.div`\n position: relative;\n width: 36px;\n height: 36px;\n border-radius: ${tokens.borderRadius.md};\n background-color: ${tokens.colors.background.light};\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n`;\n\nexport const WorkflowInfo = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.xs};\n min-width: 0;\n`;\n\nexport const WorkflowName = styled.span`\n color: ${tokens.colors.text.primary};\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.semibold};\n line-height: ${tokens.typography.lineHeight.tight};\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nexport const WorkflowStatus = styled.span`\n color: ${tokens.colors.text.tertiary};\n font-size: ${tokens.typography.fontSize.xs};\n font-weight: ${tokens.typography.fontWeight.regular};\n line-height: ${tokens.typography.lineHeight.tight};\n text-transform: capitalize;\n`;\n\nexport const WorkflowSubtitle = styled.span`\n color: ${tokens.colors.text.tertiary};\n font-size: ${tokens.typography.fontSize.xs};\n font-weight: ${tokens.typography.fontWeight.regular};\n line-height: ${tokens.typography.lineHeight.tight};\n opacity: 0.7;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nexport const StatusIndicatorOuter = styled.span<StatusIndicatorProps>`\n position: absolute;\n bottom: -2px;\n right: -2px;\n width: 12px;\n height: 12px;\n border-radius: ${tokens.borderRadius.full};\n background-color: ${tokens.colors.background.darker};\n display: flex;\n align-items: center;\n justify-content: center;\n`;\n\nexport const StatusIndicatorInner = styled.span<StatusIndicatorProps>`\n width: 8px;\n height: 8px;\n border-radius: ${tokens.borderRadius.full};\n background-color: ${({ $status }) => statusColors[$status]};\n`;\n","import { useButton } from '@react-aria/button';\nimport type { AriaButtonProps } from '@react-types/button';\nimport type { ReactNode } from 'react';\nimport { useRef } from 'react';\nimport {\n Container,\n IconWrapper,\n StatusIndicatorInner,\n StatusIndicatorOuter,\n WorkflowInfo,\n WorkflowName,\n WorkflowStatus,\n WorkflowSubtitle,\n} from './WorkflowStatusCard.styles';\n\nexport interface WorkflowStatusCardProps extends Omit<AriaButtonProps, 'children'> {\n icon: ReactNode;\n workflowName: string;\n status?: 'online' | 'idle' | 'busy' | 'offline';\n statusText?: string;\n /** Optional subtitle shown below status (e.g., time triggered) */\n subtitle?: string;\n className?: string;\n onClick?: () => void;\n}\n\nexport function WorkflowStatusCard({\n icon,\n workflowName,\n status = 'offline',\n statusText,\n subtitle,\n className,\n onClick,\n onPress,\n isDisabled,\n ...ariaProps\n}: WorkflowStatusCardProps) {\n const displayStatus = statusText || status;\n const ref = useRef<HTMLButtonElement>(null);\n\n // Combine onClick with onPress for React Aria compatibility\n const handlePress = () => {\n if (onClick) onClick();\n if (onPress) onPress({} as never);\n };\n\n const { buttonProps } = useButton(\n {\n ...ariaProps,\n onPress: handlePress,\n isDisabled,\n 'aria-label': ariaProps['aria-label'] || `${workflowName} workflow, status: ${displayStatus}`,\n },\n ref\n );\n\n return (\n <Container {...buttonProps} ref={ref} className={className} $isDisabled={isDisabled}>\n <IconWrapper>\n {icon}\n <StatusIndicatorOuter $status={status}>\n <StatusIndicatorInner $status={status} />\n </StatusIndicatorOuter>\n </IconWrapper>\n <WorkflowInfo>\n <WorkflowName>{workflowName}</WorkflowName>\n <WorkflowStatus>{displayStatus}</WorkflowStatus>\n {subtitle && <WorkflowSubtitle>{subtitle}</WorkflowSubtitle>}\n </WorkflowInfo>\n </Container>\n );\n}\n\nWorkflowStatusCard.displayName = 'WorkflowStatusCard';\n","import styled from 'styled-components';\nimport { tokens } from '../../theme/tokens';\n\n/**\n * Main container for the notification card with dark theme\n */\nexport const DarkNotificationCardContainer = styled.div`\n display: flex;\n flex-direction: column;\n padding: ${tokens.spacing.xs};\n background: ${tokens.colors.surface.base};\n border-radius: ${tokens.borderRadius.md};\n gap: ${tokens.spacing.xs};\n flex: 1;\n min-width: 0;\n overflow: hidden;\n`;\n\n/**\n * Section header button (collapsible) - dark theme\n */\nexport const DarkSectionHeader = styled.button`\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n padding: ${tokens.spacing.xs} ${tokens.spacing.xs};\n border: none;\n background: transparent;\n font-family: ${tokens.typography.fontFamily.primary};\n font-size: 11px;\n font-weight: ${tokens.typography.fontWeight.semibold};\n color: ${tokens.colors.text.secondary};\n text-align: left;\n cursor: pointer;\n transition: all ${tokens.transitions.normal};\n\n &:hover {\n color: ${tokens.colors.text.primary};\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.primary};\n outline-offset: 2px;\n border-radius: ${tokens.borderRadius.sm};\n }\n`;\n\n/**\n * Chevron icon for section header with rotation animation - dark theme\n */\ninterface ChevronIconProps {\n $isExpanded: boolean;\n}\n\nexport const DarkChevronIcon = styled.span<ChevronIconProps>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n transition: transform ${tokens.transitions.normal};\n color: ${tokens.colors.text.tertiary};\n\n ${(props) =>\n props.$isExpanded\n ? `\n transform: rotate(0deg);\n `\n : `\n transform: rotate(-90deg);\n `}\n\n svg {\n width: 12px;\n height: 12px;\n }\n`;\n\n/**\n * Container for section content (list of notification items) - dark theme\n */\nexport const DarkSectionContent = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.xs};\n padding-left: ${tokens.spacing.xs};\n margin-top: ${tokens.spacing.xs};\n min-width: 0;\n overflow: hidden;\n`;\n\n/**\n * Individual notification item wrapper (button) - dark theme\n */\ninterface NotificationItemWrapperProps {\n $isSelected: boolean;\n $hasIcon: boolean;\n}\n\nexport const DarkNotificationItemWrapper = styled.button<NotificationItemWrapperProps>`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n width: 100%;\n padding: ${tokens.spacing.xs} ${tokens.spacing.xs};\n border: none;\n cursor: pointer;\n text-align: left;\n transition: all ${tokens.transitions.normal};\n border-radius: ${tokens.borderRadius.sm};\n min-width: 0;\n overflow: hidden;\n\n /* Default state - transparent background */\n background-color: ${(props) => (props.$isSelected ? tokens.colors.primary : 'transparent')};\n\n /* Hover state */\n &:hover:not(:disabled) {\n background-color: ${(props) => (props.$isSelected ? tokens.colors.accent : tokens.colors.surface.overlay)};\n }\n\n /* Active state */\n &:active:not(:disabled) {\n transform: scale(0.99);\n }\n\n /* Focus state */\n &:focus-visible {\n outline: 2px solid ${tokens.colors.primary};\n outline-offset: 2px;\n }\n\n /* Disabled state */\n &:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n`;\n\n/**\n * Icon container for notification items - dark theme\n */\ninterface ItemIconProps {\n $iconColor?: string;\n $hasCustomIcon: boolean;\n}\n\nexport const DarkItemIcon = styled.span<ItemIconProps>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n flex-shrink: 0;\n border-radius: ${(props) => (props.$hasCustomIcon ? tokens.borderRadius.sm : tokens.borderRadius.full)};\n background-color: ${(props) => props.$iconColor || 'transparent'};\n color: ${(props) => (props.$hasCustomIcon ? tokens.colors.text.primary : tokens.colors.text.tertiary)};\n font-size: ${tokens.typography.fontSize.xs};\n\n /* Default circle icon styling */\n ${(props) =>\n !props.$hasCustomIcon &&\n `\n svg {\n width: 14px;\n height: 14px;\n }\n `}\n\n /* Custom icon (emoji or colored icon) styling */\n ${(props) =>\n props.$hasCustomIcon &&\n `\n padding: ${tokens.spacing.xs};\n `}\n`;\n\n/**\n * Text content for notification items - dark theme\n */\ninterface ItemTextProps {\n $isSelected: boolean;\n}\n\nexport const DarkItemText = styled.span<ItemTextProps>`\n flex: 1;\n font-family: ${tokens.typography.fontFamily.primary};\n font-size: 11px;\n font-weight: ${(props) => (props.$isSelected ? tokens.typography.fontWeight.medium : tokens.typography.fontWeight.regular)};\n color: ${(props) => (props.$isSelected ? tokens.colors.text.primary : tokens.colors.text.secondary)};\n line-height: ${tokens.typography.lineHeight.tight};\n word-wrap: break-word;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n`;\n\n/**\n * Three-dot menu button (shown on selected items) - dark theme\n */\nexport const DarkMenuButton = styled.button`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n padding: 0;\n border: none;\n border-radius: ${tokens.borderRadius.sm};\n background-color: transparent;\n color: ${tokens.colors.text.primary};\n cursor: pointer;\n transition: all ${tokens.transitions.normal};\n flex-shrink: 0;\n\n &:hover:not(:disabled) {\n background-color: ${tokens.colors.surface.overlayHover};\n }\n\n &:active:not(:disabled) {\n background-color: ${tokens.colors.surface.overlayActive};\n transform: scale(0.95);\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.primary};\n outline-offset: 2px;\n }\n\n svg {\n width: 14px;\n height: 14px;\n }\n`;\n\n/**\n * Timestamp text for action logs\n */\nexport const DarkTimestamp = styled.span`\n font-size: 10px;\n color: ${tokens.colors.text.tertiary};\n white-space: normal;\n word-wrap: break-word;\n text-align: right;\n max-width: 60px;\n`;\n","import { useButton } from '@react-aria/button';\nimport React, { type KeyboardEvent, useRef, useState } from 'react';\nimport type {\n NotificationCardProps,\n NotificationItem,\n NotificationSection,\n} from './NotificationCard';\nimport {\n DarkChevronIcon,\n DarkItemIcon,\n DarkItemText,\n DarkMenuButton,\n DarkNotificationCardContainer,\n DarkNotificationItemWrapper,\n DarkSectionContent,\n DarkSectionHeader,\n DarkTimestamp,\n} from './NotificationCard.dark.styles';\n\n/**\n * Dark-themed NotificationCard component for MainPaneMenu\n *\n * A dark variant of the NotificationCard component specifically designed\n * for use within the MainPaneMenu component. Features the same functionality\n * but with colors matching the dark theme.\n */\nexport const DarkNotificationCard: React.FC<NotificationCardProps> = ({\n sections,\n onItemClick,\n selectedItemId,\n onMenuClick,\n className,\n 'aria-label': ariaLabel = 'Action log history',\n}) => {\n // Track collapsed state for each section\n const [collapsedSections, setCollapsedSections] = useState<Record<string, boolean>>(() => {\n const initial: Record<string, boolean> = {};\n for (const section of sections) {\n initial[section.title] = section.isCollapsed || false;\n }\n return initial;\n });\n\n const toggleSection = (sectionTitle: string) => {\n setCollapsedSections((prev) => ({\n ...prev,\n [sectionTitle]: !prev[sectionTitle],\n }));\n };\n\n return (\n <DarkNotificationCardContainer className={className} aria-label={ariaLabel} role=\"region\">\n {sections.map((section) => (\n <DarkSectionComponent\n key={section.title}\n section={section}\n isCollapsed={collapsedSections[section.title] ?? false}\n onToggle={() => toggleSection(section.title)}\n onItemClick={onItemClick}\n selectedItemId={selectedItemId}\n onMenuClick={onMenuClick}\n />\n ))}\n </DarkNotificationCardContainer>\n );\n};\n\n/**\n * Individual section component with collapsible header - dark theme\n */\ninterface DarkSectionComponentProps {\n section: NotificationSection;\n isCollapsed: boolean;\n onToggle: () => void;\n onItemClick?: (item: NotificationItem) => void;\n selectedItemId?: string;\n onMenuClick?: (item: NotificationItem) => void;\n}\n\nconst DarkSectionComponent: React.FC<DarkSectionComponentProps> = ({\n section,\n isCollapsed,\n onToggle,\n onItemClick,\n selectedItemId,\n onMenuClick,\n}) => {\n const headerRef = useRef<HTMLButtonElement>(null);\n const { buttonProps } = useButton(\n {\n onPress: onToggle,\n 'aria-label': `${section.title} section, ${isCollapsed ? 'collapsed' : 'expanded'}`,\n 'aria-expanded': !isCollapsed,\n },\n headerRef\n );\n\n return (\n <section aria-label={`${section.title} actions`}>\n <DarkSectionHeader {...buttonProps} ref={headerRef}>\n {section.title}\n <DarkChevronIcon $isExpanded={!isCollapsed} aria-hidden=\"true\">\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n role=\"img\"\n aria-label=\"Expand/collapse icon\"\n >\n <title>Expand/collapse icon</title>\n <path\n d=\"M4 5L7 8L10 5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </DarkChevronIcon>\n </DarkSectionHeader>\n\n {!isCollapsed && (\n <DarkSectionContent role=\"list\">\n {section.items.map((item) => (\n <DarkNotificationItemComponent\n key={item.id}\n item={item}\n isSelected={item.id === selectedItemId}\n onItemClick={onItemClick}\n onMenuClick={onMenuClick}\n />\n ))}\n </DarkSectionContent>\n )}\n </section>\n );\n};\n\n/**\n * Individual notification item component - dark theme\n */\ninterface DarkNotificationItemComponentProps {\n item: NotificationItem & { timestamp?: string };\n isSelected: boolean;\n onItemClick?: (item: NotificationItem) => void;\n onMenuClick?: (item: NotificationItem) => void;\n}\n\nconst DarkNotificationItemComponent: React.FC<DarkNotificationItemComponentProps> = ({\n item,\n isSelected,\n onItemClick,\n onMenuClick,\n}) => {\n const itemRef = useRef<HTMLButtonElement>(null);\n const menuRef = useRef<HTMLButtonElement>(null);\n\n const { buttonProps: itemButtonProps } = useButton(\n {\n onPress: () => onItemClick?.(item),\n 'aria-label': `Action: ${item.text}`,\n 'aria-current': isSelected ? 'true' : undefined,\n },\n itemRef\n );\n\n const { buttonProps: menuButtonProps } = useButton(\n {\n onPress: () => onMenuClick?.(item),\n 'aria-label': `Options for ${item.text}`,\n },\n menuRef\n );\n\n // Handle keyboard navigation between item and menu button\n const handleItemKeyDown = (e: KeyboardEvent<HTMLButtonElement>) => {\n if (isSelected && e.key === 'Tab' && !e.shiftKey) {\n // Allow natural tab to menu button\n return;\n }\n };\n\n return (\n <DarkNotificationItemWrapper\n {...itemButtonProps}\n ref={itemRef}\n $isSelected={isSelected}\n $hasIcon={!!item.icon}\n role=\"listitem\"\n onKeyDown={handleItemKeyDown}\n >\n <DarkItemIcon $iconColor={item.iconColor} $hasCustomIcon={!!item.icon}>\n {item.icon || (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <circle cx=\"8\" cy=\"8\" r=\"6\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n </svg>\n )}\n </DarkItemIcon>\n <DarkItemText $isSelected={isSelected}>{item.text}</DarkItemText>\n {item.timestamp && <DarkTimestamp>{item.timestamp}</DarkTimestamp>}\n {isSelected && onMenuClick && (\n <DarkMenuButton\n {...menuButtonProps}\n ref={menuRef}\n onClick={(e) => {\n e.stopPropagation();\n menuButtonProps.onClick?.(e);\n }}\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <title>More options</title>\n <circle cx=\"8\" cy=\"3\" r=\"1\" fill=\"currentColor\" />\n <circle cx=\"8\" cy=\"8\" r=\"1\" fill=\"currentColor\" />\n <circle cx=\"8\" cy=\"13\" r=\"1\" fill=\"currentColor\" />\n </svg>\n </DarkMenuButton>\n )}\n </DarkNotificationItemWrapper>\n );\n};\n\nDarkNotificationCard.displayName = 'DarkNotificationCard';\n","import { Button, Disclosure, DisclosureGroup, DisclosurePanel } from 'react-aria-components';\nimport styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\nexport const Container = styled.div`\n width: 100%;\n height: 100%;\n background-color: transparent;\n color: ${tokens.colors.text.primary};\n display: flex;\n flex-direction: column;\n font-family: ${tokens.typography.fontFamily.primary};\n overflow: hidden; // Prevent content from escaping container bounds\n`;\n\nexport const TabListWrapper = styled.div`\n display: flex;\n border-bottom: 2px solid ${tokens.colors.border.default};\n background-color: ${tokens.colors.surface.subtle};\n padding: 0 ${tokens.spacing.md};\n gap: ${tokens.spacing.sm};\n overflow-x: auto;\n scrollbar-width: none;\n -ms-overflow-style: none;\n flex-shrink: 0; // Prevent shrinking when content overflows\n\n &::-webkit-scrollbar {\n display: none;\n }\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n padding: 0 ${tokens.spacing.sm};\n gap: ${tokens.spacing.xs};\n }\n`;\n\nexport const TabButton = styled.button<{ $isSelected?: boolean }>`\n padding: ${tokens.spacing.md} ${tokens.spacing.lg};\n background: none;\n border: none;\n color: ${(props) => (props.$isSelected ? tokens.colors.text.primary : tokens.colors.text.secondary)};\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.semibold};\n cursor: pointer;\n position: relative;\n transition: color ${tokens.transitions.normal};\n white-space: nowrap;\n flex-shrink: 0;\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n font-size: ${tokens.typography.fontSize.xs};\n }\n\n &:hover {\n color: ${tokens.colors.text.primary};\n }\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: -2px;\n border-radius: ${tokens.borderRadius.sm};\n }\n\n ${(props) =>\n props.$isSelected &&\n `\n &::after {\n content: '';\n position: absolute;\n bottom: -2px;\n left: 0;\n right: 0;\n height: 2px;\n background-color: ${tokens.colors.primary};\n }\n `}\n`;\n\nexport const TabPanelWrapper = styled.div`\n flex: 1;\n padding: ${tokens.spacing.lg};\n overflow-y: auto;\n overflow-x: hidden; // Prevent horizontal overflow\n scrollbar-gutter: stable; // Always reserve space for scrollbar to prevent width jump\n background-color: ${tokens.colors.surface.overlay};\n min-height: 0; // Enable proper flex shrinking and scrolling\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n padding: ${tokens.spacing.md};\n }\n\n @media (max-width: 480px) {\n padding: ${tokens.spacing.md};\n }\n\n /* Custom scrollbar */\n scrollbar-width: thin;\n scrollbar-color: ${tokens.colors.scrollbar.thumb} ${tokens.colors.scrollbar.track};\n\n &::-webkit-scrollbar {\n width: 8px;\n }\n\n &::-webkit-scrollbar-track {\n background: ${tokens.colors.background.dark};\n }\n\n &::-webkit-scrollbar-thumb {\n background: ${tokens.colors.background.light};\n border-radius: ${tokens.borderRadius.sm};\n }\n\n &::-webkit-scrollbar-thumb:hover {\n background: ${tokens.colors.scrollbar.thumbHover};\n }\n`;\n\n// Runs tab container\nexport const RunsContainer = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.lg};\n width: 100%;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n gap: ${tokens.spacing.md};\n }\n`;\n\n// Browse Automations button\nexport const BrowseButton = styled.button`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.md};\n width: 100%;\n padding: ${tokens.spacing.md} ${tokens.spacing.md};\n background-color: ${tokens.colors.surface.overlay};\n border: 1px solid ${tokens.colors.border.default};\n border-radius: ${tokens.borderRadius.md};\n color: ${tokens.colors.text.secondary};\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.medium};\n cursor: pointer;\n transition: all ${tokens.transitions.normal};\n white-space: nowrap;\n overflow: hidden;\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n font-size: ${tokens.typography.fontSize.sm};\n gap: ${tokens.spacing.sm};\n }\n\n &:hover {\n background-color: ${tokens.colors.surface.overlayHover};\n color: ${tokens.colors.text.primary};\n }\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n`;\n\n// DisclosureGroup styles\nexport const StyledDisclosureGroup = styled(DisclosureGroup)`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.sm};\n width: 100%;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n`;\n\n// Category Disclosure (Information, Community)\nexport const CategoryDisclosure = styled(Disclosure)`\n background-color: transparent;\n display: flex;\n flex-direction: column;\n width: 100%;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n\n &[data-expanded] {\n /* Styles when expanded */\n }\n\n &[data-disabled] {\n opacity: 0.5;\n cursor: not-allowed;\n }\n`;\n\n// Category Header (trigger button)\nexport const CategoryHeader = styled(Button)`\n width: 100%;\n padding: ${tokens.spacing.xs} 0;\n background: none;\n border: none;\n color: ${tokens.colors.text.secondary};\n display: flex;\n justify-content: space-between;\n align-items: center;\n cursor: pointer;\n transition: color ${tokens.transitions.normal};\n font-size: ${tokens.typography.fontSize.xs};\n font-weight: ${tokens.typography.fontWeight.semibold};\n text-transform: uppercase;\n letter-spacing: 0.5px;\n\n &:hover {\n color: ${tokens.colors.text.primary};\n }\n\n &:focus {\n outline: none;\n }\n\n &[data-focus-visible] {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n border-radius: ${tokens.borderRadius.sm};\n }\n`;\n\n// Category Title with icon\nexport const CategoryTitle = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.sm};\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n gap: ${tokens.spacing.xs};\n }\n`;\n\n// Category Icon\nexport const CategoryIcon = styled.img`\n width: 16px;\n height: 16px;\n opacity: 0.6;\n flex-shrink: 0;\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n width: 14px;\n height: 14px;\n }\n`;\n\n// Hashtag Icon\nexport const HashtagIcon = styled.img`\n width: 14px;\n height: 14px;\n opacity: 0.6;\n flex-shrink: 0;\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n width: 12px;\n height: 12px;\n }\n`;\n\n// Chevron icon\nexport const ChevronIcon = styled.div<{ $isExpanded: boolean }>`\n display: flex;\n align-items: center;\n transition: transform ${tokens.transitions.normal};\n transform: ${(props) => (props.$isExpanded ? 'rotate(0deg)' : 'rotate(-90deg)')};\n flex-shrink: 0;\n margin-left: ${tokens.spacing.xs};\n\n img {\n width: 16px;\n height: 16px;\n opacity: 0.6;\n }\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n img {\n width: 14px;\n height: 14px;\n }\n }\n`;\n\n// Category content panel\nexport const CategoryDisclosurePanel = styled(DisclosurePanel)`\n display: flex;\n flex-direction: column;\n gap: 2px;\n padding-left: ${tokens.spacing.xs};\n width: 100%;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n padding-left: ${tokens.spacing.xs};\n }\n\n &[data-entering] {\n animation: slideDown ${tokens.transitions.normal};\n }\n\n @keyframes slideDown {\n from {\n opacity: 0;\n transform: translateY(-${tokens.spacing.sm});\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n`;\n\n// Item container (announcements, server-rules, etc.)\nexport const ItemContainer = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.sm};\n padding: ${tokens.spacing.sm} ${tokens.spacing.sm}; // Increased vertical padding from 4px to 8px for better breathing room\n border-radius: ${tokens.borderRadius.sm};\n cursor: pointer;\n transition: background-color ${tokens.transitions.fast};\n min-width: 0;\n overflow: hidden;\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n gap: ${tokens.spacing.xs};\n padding: ${tokens.spacing.sm} ${tokens.spacing.xs}; // Increased vertical padding from 4px to 8px for mobile\n }\n\n &:hover {\n background-color: ${tokens.colors.surface.overlayHover};\n }\n`;\n\n// Nested item disclosure (for individual items)\nexport const ItemDisclosure = styled(Disclosure)`\n background-color: transparent;\n margin-bottom: ${tokens.spacing.xs};\n display: flex;\n flex-direction: column;\n width: 100%;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n\n &[data-expanded] {\n background-color: ${tokens.colors.surface.overlay};\n border-radius: ${tokens.borderRadius.md};\n }\n`;\n\n// Item header for nested disclosure\nexport const ItemHeader = styled(Button)<{ $isExpanded: boolean }>`\n width: 100%;\n padding: 0;\n background: none;\n border: none;\n cursor: pointer;\n transition: all ${tokens.transitions.fast};\n\n &:focus {\n outline: none;\n }\n\n &[data-focus-visible] {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n border-radius: ${tokens.borderRadius.sm};\n }\n`;\n\n// Item disclosure panel for logs\nexport const ItemDisclosurePanel = styled(DisclosurePanel)`\n padding: ${tokens.spacing.xs};\n background-color: ${tokens.colors.overlay};\n border-radius: 0 0 ${tokens.borderRadius.md} ${tokens.borderRadius.md};\n margin-top: -${tokens.spacing.xs};\n display: flex;\n flex-direction: column;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n padding: ${tokens.spacing.xs};\n }\n\n &[data-entering] {\n animation: slideDown ${tokens.transitions.normal};\n }\n\n @keyframes slideDown {\n from {\n opacity: 0;\n transform: translateY(-${tokens.spacing.sm});\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n`;\n\n// Item icon\nexport const ItemIcon = styled.img`\n width: 20px;\n height: 20px;\n opacity: 0.6;\n flex-shrink: 0;\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n width: 18px;\n height: 18px;\n }\n`;\n\n// Item name\nexport const ItemName = styled.span<{ $dimmed?: boolean }>`\n flex: 1;\n font-size: ${tokens.typography.fontSize.sm};\n color: ${(props) => (props.$dimmed ? tokens.colors.text.tertiary : tokens.colors.text.secondary)};\n font-weight: ${(props) => (props.$dimmed ? tokens.typography.fontWeight.regular : tokens.typography.fontWeight.medium)};\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n min-width: 0;\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n font-size: ${tokens.typography.fontSize.sm};\n }\n\n ${ItemContainer}:hover & {\n color: ${(props) => (props.$dimmed ? tokens.colors.text.secondary : tokens.colors.text.primary)};\n }\n`;\n\n// Run status indicator\nexport const RunStatus = styled.span<{ $status: 'completed' | 'running' | 'failed' }>`\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.medium};\n flex-shrink: 0;\n margin-left: auto;\n\n /* Color for SVG icons - using token colors for status */\n img {\n filter: ${(props) => {\n switch (props.$status) {\n case 'completed':\n return 'brightness(0) saturate(100%) invert(73%) sepia(34%) saturate(547%) hue-rotate(99deg) brightness(91%) contrast(89%)'; // success green\n case 'running':\n return 'brightness(0) saturate(100%) invert(78%) sepia(60%) saturate(1839%) hue-rotate(360deg) brightness(100%) contrast(94%)'; // warning yellow\n case 'failed':\n return 'brightness(0) saturate(100%) invert(34%) sepia(94%) saturate(3446%) hue-rotate(343deg) brightness(94%) contrast(94%)'; // error red\n default:\n return 'none';\n }\n }};\n }\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n font-size: ${tokens.typography.fontSize.xs};\n }\n`;\n\n// Old Disclosure styles (kept for backward compatibility)\nexport const DisclosureContainer = styled.div`\n margin-bottom: ${tokens.spacing.md};\n border-radius: ${tokens.borderRadius.lg};\n background-color: ${tokens.colors.surface.overlay};\n overflow: hidden;\n`;\n\nexport const DisclosureHeader = styled.button`\n width: 100%;\n padding: ${tokens.spacing.md};\n background: ${tokens.colors.surface.overlay};\n border: none;\n color: ${tokens.colors.text.primary};\n display: flex;\n justify-content: space-between;\n align-items: center;\n cursor: pointer;\n transition: background-color ${tokens.transitions.normal};\n text-align: left;\n\n &:hover {\n background-color: ${tokens.colors.surface.overlayHover};\n }\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: -2px;\n }\n\n > div {\n flex: 1;\n }\n\n strong {\n display: block;\n font-size: ${tokens.typography.fontSize.sm};\n margin-bottom: ${tokens.spacing.xs};\n }\n`;\n\nexport const DisclosureIcon = styled.span<{ $isExpanded: boolean }>`\n font-size: ${tokens.typography.fontSize.xs};\n color: ${tokens.colors.text.secondary};\n transition: transform ${tokens.transitions.normal};\n transform: ${(props) => (props.$isExpanded ? 'rotate(180deg)' : 'rotate(0deg)')};\n`;\n\nexport const DisclosureContent = styled.div`\n padding: ${tokens.spacing.md};\n padding-top: 0;\n background-color: ${tokens.colors.overlay};\n color: ${tokens.colors.text.secondary};\n font-size: ${tokens.typography.fontSize.sm};\n line-height: ${tokens.typography.lineHeight.relaxed};\n animation: slideDown ${tokens.transitions.normal};\n\n @keyframes slideDown {\n from {\n opacity: 0;\n transform: translateY(-${tokens.spacing.sm});\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n`;\n\n// Meter (Usage tab) styles\nexport const MeterContainer = styled.div`\n max-width: 600px;\n margin: 0 auto;\n`;\n\nexport const MeterLabel = styled.div`\n font-size: ${tokens.typography.fontSize.base};\n font-weight: ${tokens.typography.fontWeight.semibold};\n margin-bottom: ${tokens.spacing.md};\n color: ${tokens.colors.text.primary};\n`;\n\nexport const MeterBar = styled.div`\n width: 100%;\n height: 24px;\n background-color: ${tokens.colors.background.darker};\n border-radius: ${tokens.borderRadius.lg};\n overflow: hidden;\n position: relative;\n margin-bottom: ${tokens.spacing.md};\n`;\n\nexport const MeterFill = styled.div<{ $percentage: number; $color: string }>`\n height: 100%;\n width: ${(props) => props.$percentage}%;\n background: linear-gradient(90deg, ${(props) => props.$color}dd, ${(props) => props.$color});\n border-radius: ${tokens.borderRadius.lg};\n transition: width ${tokens.transitions.slow}, background ${tokens.transitions.slow};\n position: relative;\n\n &::after {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: linear-gradient(90deg, transparent, ${tokens.colors.surface.overlay}, transparent);\n animation: shimmer 2s infinite;\n }\n\n @keyframes shimmer {\n 0% {\n transform: translateX(-100%);\n }\n 100% {\n transform: translateX(100%);\n }\n }\n`;\n\nexport const MeterStats = styled.div`\n font-size: ${tokens.typography.fontSize.sm};\n color: ${tokens.colors.text.secondary};\n text-align: center;\n\n small {\n font-size: ${tokens.typography.fontSize.xs};\n color: ${tokens.colors.text.secondary};\n opacity: 0.8;\n }\n`;\n\n// Connections tab styles\nexport const ConnectionsContainer = styled.div`\n max-width: 500px;\n margin: 0 auto;\n text-align: center;\n`;\n\nexport const ConnectionDescription = styled.p`\n font-size: ${tokens.typography.fontSize.sm};\n color: ${tokens.colors.text.secondary};\n line-height: ${tokens.typography.lineHeight.relaxed};\n margin-bottom: ${tokens.spacing.lg};\n`;\n\nexport const GoogleButton = styled.button<{ $isConnected?: boolean }>`\n width: 100%;\n padding: ${tokens.spacing.md} ${tokens.spacing.lg};\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.semibold};\n color: ${(props) => (props.$isConnected ? tokens.colors.text.primary : tokens.colors.text.primary)};\n background: ${(props) => (props.$isConnected ? tokens.colors.background.light : `linear-gradient(135deg, ${tokens.colors.platform.facebook}, ${tokens.colors.platform.whatsapp})`)};\n border: none;\n border-radius: ${tokens.borderRadius.md};\n cursor: pointer;\n transition: all ${tokens.transitions.normal};\n display: flex;\n align-items: center;\n justify-content: center;\n gap: ${tokens.spacing.sm};\n\n &:hover {\n transform: translateY(-2px);\n box-shadow: ${tokens.shadows.lg};\n }\n\n &:active {\n transform: translateY(0);\n }\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n\n ${(props) =>\n props.$isConnected &&\n `\n &:hover {\n background-color: ${tokens.colors.error};\n box-shadow: ${tokens.shadows.lg};\n }\n `}\n`;\n","import { useButton } from '@react-aria/button';\nimport { useMeter } from '@react-aria/meter';\nimport { useTab, useTabList, useTabPanel } from '@react-aria/tabs';\nimport { Item } from '@react-stately/collections';\nimport { useTabListState } from '@react-stately/tabs';\nimport { useRef, useState } from 'react';\nimport type { Key } from 'react-aria-components';\nimport { Heading } from 'react-aria-components';\nimport { tokens } from '../../../theme/tokens';\nimport { DarkNotificationCard } from '../../NotificationCard/DarkNotificationCard';\nimport type { NotificationSection } from '../../NotificationCard/NotificationCard';\nimport {\n CategoryDisclosure,\n CategoryDisclosurePanel,\n CategoryHeader,\n CategoryTitle,\n ChevronIcon,\n ConnectionDescription,\n ConnectionsContainer,\n Container,\n GoogleButton,\n HashtagIcon,\n ItemContainer,\n ItemDisclosure,\n ItemDisclosurePanel,\n ItemHeader,\n ItemIcon,\n ItemName,\n MeterBar,\n MeterContainer,\n MeterFill,\n MeterLabel,\n MeterStats,\n RunStatus,\n RunsContainer,\n StyledDisclosureGroup,\n TabButton,\n TabListWrapper,\n TabPanelWrapper,\n} from './PaneMenus.styles';\n\n// Icons from assets/icon-set\nconst ICONS = {\n hashtag: '/assets/icon-set/Icon-hashtag.svg',\n // State icons - left side\n loader: '/assets/icon-set/Icon-loader-2-line.svg', // Pending\n radioButton: '/assets/icon-set/Icon-radio-button-line.svg', // Running\n shieldCheck: '/assets/icon-set/Icon-shield-check-fill.svg', // Completed\n shieldCross: '/assets/icon-set/Icon-shield-cross-fill.svg', // Failed\n // Status indicator icons - right side (before chevron)\n checkFill: '/assets/icon-set/Icon-check-fill.svg', // Completed status\n hourglass: '/assets/icon-set/Icon-hourglass-line.svg', // Running status\n closeFill: '/assets/icon-set/Icon-close-fill.svg', // Failed status\n // Legacy icons (kept for backward compatibility)\n bell: '/assets/icon-set/Icon-bell-fill.svg',\n file: '/assets/icon-set/Icon-file-3-fill.svg',\n link: '/assets/icon-set/Icon-external-link-fill.svg',\n chat: '/assets/icon-set/Icon-chat-1-fill.svg',\n logout: '/assets/icon-set/logout-box-fill.svg',\n community: '/assets/icon-set/Icon-community-fill.svg',\n cpu: '/assets/icon-set/Icon-cpu-fill.svg',\n chevronDown: '/assets/icon-set/Icon-arrow-down-s-fill.svg',\n warning: '/assets/icon-set/Icon-error-warning-fill.svg',\n};\n\nexport interface ActionLog {\n id: string;\n text: string;\n timestamp: string;\n icon?: React.ReactNode;\n iconColor?: string;\n}\n\nexport interface RunItem {\n id: string;\n name: string;\n status: 'completed' | 'running' | 'failed';\n details: string;\n /** @deprecated Use 'executing' | 'completed' | 'failed' instead. 'scheduled' maps to 'executing', 'issues' maps to 'failed' */\n category: 'scheduled' | 'completed' | 'issues' | 'executing' | 'failed';\n /** Workflow name for grouping executions under their parent workflow */\n workflowName?: string;\n /** Workflow ID for grouping */\n workflowId?: string;\n icon?:\n | 'loader'\n | 'radioButton'\n | 'shieldCheck'\n | 'shieldCross'\n | 'bell'\n | 'file'\n | 'link'\n | 'chat'\n | 'warning';\n logs?: ActionLog[];\n /** Whether logs are currently being loaded */\n logsLoading?: boolean;\n customContent?: React.ReactNode;\n}\n\nexport interface OAuthConnectionData {\n id: string;\n provider: string;\n connected: boolean;\n displayName?: string;\n scopes?: string[];\n}\n\nexport interface PaneMenusProps {\n activeTab?: 'workflows' | 'runs' | 'usage' | 'connections';\n onTabChange?: (tab: 'workflows' | 'runs' | 'usage' | 'connections') => void;\n\n // Runs tab props\n runs?: RunItem[];\n onRunSelect?: (runId: string) => void;\n\n // Usage tab props\n currentUsage?: number;\n maxUsage?: number;\n\n // Connections tab props\n isGoogleConnected?: boolean;\n onGoogleConnect?: () => void;\n onGoogleDisconnect?: () => void;\n\n // New: Real OAuth connection data support\n oauthConnections?: OAuthConnectionData[];\n onOAuthConnect?: (provider: string) => void;\n onOAuthDisconnect?: (connectionId: string) => void;\n isOAuthConnecting?: boolean;\n isOAuthLoading?: boolean;\n\n // Slot for custom connections tab content (replaces default ConnectionsTabContent)\n connectionsSlot?: React.ReactNode;\n\n // Slot for custom workflows tab content (adds new Workflows tab)\n workflowsSlot?: React.ReactNode;\n\n // Slot for custom usage tab content (replaces default UsageTabContent)\n usageSlot?: React.ReactNode;\n}\n\n// Individual item with nested disclosure for logs\nfunction ItemWithLogs({\n run,\n onRunSelect,\n}: {\n run: RunItem;\n onRunSelect?: (runId: string) => void;\n}) {\n const [isExpanded, setIsExpanded] = useState(false);\n\n // Format logs into NotificationSection format\n const logSections: NotificationSection[] = run.logs\n ? [\n {\n title: 'Action History',\n items: run.logs.map((log) => ({\n id: log.id,\n text: log.text,\n icon: log.icon,\n iconColor: log.iconColor,\n timestamp: log.timestamp,\n })),\n },\n ]\n : [];\n\n const handleClick = () => {\n setIsExpanded(!isExpanded);\n onRunSelect?.(run.id);\n };\n\n return (\n <ItemDisclosure id={run.id} data-testid={`run-item-${run.id}`}>\n <ItemHeader slot=\"trigger\" onClick={handleClick} $isExpanded={isExpanded}>\n <ItemContainer as=\"div\">\n <ItemIcon src={ICONS[run.icon || 'loader']} alt=\"\" data-testid={`run-icon-${run.status}`} />\n <ItemName data-testid=\"run-name\">{run.name}</ItemName>\n <RunStatus $status={run.status} data-testid={`run-status-${run.status}`}>\n {run.status === 'completed' && (\n <img src={ICONS.checkFill} alt=\"\" style={{ width: '16px', height: '16px' }} />\n )}\n {run.status === 'running' && (\n <img src={ICONS.hourglass} alt=\"\" style={{ width: '16px', height: '16px' }} />\n )}\n {run.status === 'failed' && (\n <img src={ICONS.closeFill} alt=\"\" style={{ width: '16px', height: '16px' }} />\n )}\n </RunStatus>\n <ChevronIcon $isExpanded={isExpanded}>\n <img src={ICONS.chevronDown} alt=\"\" />\n </ChevronIcon>\n </ItemContainer>\n </ItemHeader>\n {isExpanded && (\n <ItemDisclosurePanel>\n {run.customContent ? (\n // Render custom content directly\n <div style={{ padding: '16px' }}>{run.customContent}</div>\n ) : run.logsLoading ? (\n // Show loading spinner while logs are being fetched\n <div style={{ display: 'flex', justifyContent: 'center', padding: '16px' }}>\n <div\n style={{\n width: '24px',\n height: '24px',\n border: `2px solid ${tokens.colors.border.default}`,\n borderTopColor: tokens.colors.primary,\n borderRadius: '50%',\n animation: 'spin 1s linear infinite',\n }}\n />\n <style>{`@keyframes spin { to { transform: rotate(360deg); } }`}</style>\n </div>\n ) : run.logs && run.logs.length > 0 ? (\n <DarkNotificationCard sections={logSections} />\n ) : (\n <div style={{ color: tokens.colors.text.tertiary, fontSize: '13px', padding: '8px' }}>\n No action logs available\n </div>\n )}\n </ItemDisclosurePanel>\n )}\n </ItemDisclosure>\n );\n}\n\n// Helper to normalize category (backward compatibility)\nfunction normalizeCategory(category: RunItem['category']): 'executing' | 'completed' | 'failed' {\n if (category === 'scheduled') return 'executing';\n if (category === 'issues') return 'failed';\n return category as 'executing' | 'completed' | 'failed';\n}\n\n// Group runs by workflow name within a category\ninterface WorkflowGroup {\n workflowName: string;\n workflowId: string;\n runs: RunItem[];\n}\n\nfunction groupRunsByWorkflow(runs: RunItem[]): WorkflowGroup[] {\n const groups = new Map<string, WorkflowGroup>();\n\n for (const run of runs) {\n // Always use workflowId as the primary grouping key\n // Fallback to a normalized workflowName only if workflowId is missing\n const groupKey = run.workflowId || run.workflowName || 'ungrouped';\n\n if (!groups.has(groupKey)) {\n // Use the first workflowName encountered for this workflowId\n // This prevents duplicate groups when workflowName varies slightly\n const displayName = run.workflowName || run.name;\n\n groups.set(groupKey, {\n workflowId: groupKey,\n workflowName: displayName,\n runs: [],\n });\n }\n groups.get(groupKey)!.runs.push(run);\n }\n\n return Array.from(groups.values());\n}\n\n// Workflow group component with nested executions\nfunction WorkflowGroupItem({\n group,\n onRunSelect,\n expandedKeys,\n}: {\n group: WorkflowGroup;\n onRunSelect?: (runId: string) => void;\n expandedKeys: Set<Key>;\n}) {\n const groupId = `workflow-${group.workflowId}`;\n const isExpanded = expandedKeys.has(groupId);\n\n return (\n <CategoryDisclosure id={groupId}>\n <Heading level={4}>\n <CategoryHeader slot=\"trigger\" style={{ paddingLeft: '8px' }}>\n <CategoryTitle>\n <span style={{ fontSize: tokens.typography.fontSize.sm, fontWeight: 400 }}>{group.workflowName}</span>\n <span style={{ fontSize: tokens.typography.fontSize.xs, color: tokens.colors.text.tertiary, marginLeft: '8px' }}>\n ({group.runs.length})\n </span>\n </CategoryTitle>\n <ChevronIcon $isExpanded={isExpanded}>\n <img src={ICONS.chevronDown} alt=\"\" />\n </ChevronIcon>\n </CategoryHeader>\n </Heading>\n <CategoryDisclosurePanel>\n {group.runs.map((run) => (\n <ItemWithLogs key={run.id} run={run} onRunSelect={onRunSelect} />\n ))}\n </CategoryDisclosurePanel>\n </CategoryDisclosure>\n );\n}\n\n// Helper to render grouped runs with proper nesting\nfunction GroupedRunsRenderer({\n groups,\n onRunSelect,\n expandedKeys,\n setExpandedKeys,\n ariaLabel,\n emptyMessage,\n}: {\n groups: WorkflowGroup[];\n onRunSelect?: (runId: string) => void;\n expandedKeys: Set<Key>;\n setExpandedKeys: (keys: Set<Key>) => void;\n ariaLabel: string;\n emptyMessage: string;\n}) {\n if (groups.length === 0) {\n return (\n <ItemContainer>\n <ItemName $dimmed>{emptyMessage}</ItemName>\n </ItemContainer>\n );\n }\n\n // If single workflow with single execution, show directly\n const firstGroup = groups[0];\n if (groups.length === 1 && firstGroup && firstGroup.runs.length === 1) {\n return (\n <>\n {firstGroup.runs.map((run) => (\n <ItemWithLogs key={run.id} run={run} onRunSelect={onRunSelect} />\n ))}\n </>\n );\n }\n\n // Multiple executions - group by workflow\n return (\n <StyledDisclosureGroup\n expandedKeys={expandedKeys}\n onExpandedChange={setExpandedKeys}\n allowsMultipleExpanded\n aria-label={ariaLabel}\n >\n {groups.map((group) => (\n <WorkflowGroupItem\n key={group.workflowId}\n group={group}\n onRunSelect={onRunSelect}\n expandedKeys={expandedKeys}\n />\n ))}\n </StyledDisclosureGroup>\n );\n}\n\n// Runs tab content with DisclosureGroup - 3-level hierarchy\nfunction RunsTabContent({\n runs,\n onRunSelect,\n}: {\n runs: RunItem[];\n onRunSelect?: (runId: string) => void;\n}) {\n const [expandedKeys, setExpandedKeys] = useState<Set<Key>>(\n new Set(['executing', 'completed', 'failed']) // All status sections open by default\n );\n\n // Group runs by normalized category, then by workflow\n const executingRuns = runs.filter((r) => normalizeCategory(r.category) === 'executing');\n const completedRuns = runs.filter((r) => normalizeCategory(r.category) === 'completed');\n const failedRuns = runs.filter((r) => normalizeCategory(r.category) === 'failed');\n\n // Group each category by workflow\n const executingGroups = groupRunsByWorkflow(executingRuns);\n const completedGroups = groupRunsByWorkflow(completedRuns);\n const failedGroups = groupRunsByWorkflow(failedRuns);\n\n return (\n <RunsContainer>\n <StyledDisclosureGroup\n expandedKeys={expandedKeys}\n onExpandedChange={setExpandedKeys}\n allowsMultipleExpanded\n aria-label=\"Run sections\"\n >\n {/* Executing Section (was Scheduled) */}\n <CategoryDisclosure id=\"executing\" data-testid=\"category-executing\">\n <Heading level={3}>\n <CategoryHeader slot=\"trigger\" data-testid=\"category-header-executing\">\n <CategoryTitle>\n <HashtagIcon src={ICONS.hashtag} alt=\"\" />\n <span>EXECUTING</span>\n </CategoryTitle>\n <ChevronIcon $isExpanded={expandedKeys.has('executing')}>\n <img src={ICONS.chevronDown} alt=\"\" />\n </ChevronIcon>\n </CategoryHeader>\n </Heading>\n <CategoryDisclosurePanel>\n <GroupedRunsRenderer\n groups={executingGroups}\n onRunSelect={onRunSelect}\n expandedKeys={expandedKeys}\n setExpandedKeys={setExpandedKeys}\n ariaLabel=\"Executing workflows\"\n emptyMessage=\"No executing items\"\n />\n </CategoryDisclosurePanel>\n </CategoryDisclosure>\n\n {/* Completed Section */}\n <CategoryDisclosure id=\"completed\" data-testid=\"category-completed\">\n <Heading level={3}>\n <CategoryHeader slot=\"trigger\" data-testid=\"category-header-completed\">\n <CategoryTitle>\n <HashtagIcon src={ICONS.hashtag} alt=\"\" />\n <span>COMPLETED</span>\n </CategoryTitle>\n <ChevronIcon $isExpanded={expandedKeys.has('completed')}>\n <img src={ICONS.chevronDown} alt=\"\" />\n </ChevronIcon>\n </CategoryHeader>\n </Heading>\n <CategoryDisclosurePanel>\n <GroupedRunsRenderer\n groups={completedGroups}\n onRunSelect={onRunSelect}\n expandedKeys={expandedKeys}\n setExpandedKeys={setExpandedKeys}\n ariaLabel=\"Completed workflows\"\n emptyMessage=\"No completed items\"\n />\n </CategoryDisclosurePanel>\n </CategoryDisclosure>\n\n {/* Failed Section (was Issues) */}\n <CategoryDisclosure id=\"failed\" data-testid=\"category-failed\">\n <Heading level={3}>\n <CategoryHeader slot=\"trigger\" data-testid=\"category-header-failed\">\n <CategoryTitle>\n <HashtagIcon src={ICONS.hashtag} alt=\"\" />\n <span>FAILED</span>\n </CategoryTitle>\n <ChevronIcon $isExpanded={expandedKeys.has('failed')}>\n <img src={ICONS.chevronDown} alt=\"\" />\n </ChevronIcon>\n </CategoryHeader>\n </Heading>\n <CategoryDisclosurePanel>\n <GroupedRunsRenderer\n groups={failedGroups}\n onRunSelect={onRunSelect}\n expandedKeys={expandedKeys}\n setExpandedKeys={setExpandedKeys}\n ariaLabel=\"Failed workflows\"\n emptyMessage=\"No failed items\"\n />\n </CategoryDisclosurePanel>\n </CategoryDisclosure>\n </StyledDisclosureGroup>\n </RunsContainer>\n );\n}\n\n// Usage tab content with meter\nfunction UsageTabContent({\n currentUsage = 0,\n maxUsage = 100000,\n}: {\n currentUsage?: number;\n maxUsage?: number;\n}) {\n const ref = useRef<HTMLDivElement>(null);\n const { meterProps, labelProps } = useMeter({\n label: 'Token Usage',\n value: currentUsage,\n minValue: 0,\n maxValue: maxUsage,\n });\n\n const percentage = Math.round((currentUsage / maxUsage) * 100);\n\n // Determine color based on usage\n let color = '#10b981'; // green\n if (percentage >= 75)\n color = '#ef4444'; // red\n else if (percentage >= 50) color = '#f59e0b'; // yellow\n\n return (\n <MeterContainer>\n <MeterLabel {...labelProps}>Token Usage</MeterLabel>\n <MeterBar {...meterProps} ref={ref}>\n <MeterFill $percentage={percentage} $color={color} />\n </MeterBar>\n <MeterStats>\n {percentage}% of {maxUsage.toLocaleString()} tokens used\n <br />\n <small>\n {currentUsage.toLocaleString()} / {maxUsage.toLocaleString()} tokens\n </small>\n </MeterStats>\n </MeterContainer>\n );\n}\n\n// Connections tab content\nfunction ConnectionsTabContent({\n isGoogleConnected = false,\n onGoogleConnect,\n onGoogleDisconnect,\n oauthConnections,\n onOAuthConnect,\n onOAuthDisconnect,\n isOAuthConnecting = false,\n isOAuthLoading = false,\n}: {\n isGoogleConnected?: boolean;\n onGoogleConnect?: () => void;\n onGoogleDisconnect?: () => void;\n oauthConnections?: OAuthConnectionData[];\n onOAuthConnect?: (provider: string) => void;\n onOAuthDisconnect?: (connectionId: string) => void;\n isOAuthConnecting?: boolean;\n isOAuthLoading?: boolean;\n}) {\n const ref = useRef<HTMLButtonElement>(null);\n\n // Use real OAuth data if available, otherwise fall back to simple boolean prop\n const useRealOAuthData = oauthConnections && onOAuthConnect && onOAuthDisconnect;\n const googleConnection = useRealOAuthData\n ? oauthConnections.find((c) => c.provider === 'google')\n : undefined;\n const isConnected = useRealOAuthData ? googleConnection?.connected || false : isGoogleConnected;\n\n const handlePress = () => {\n if (useRealOAuthData) {\n if (isConnected && googleConnection) {\n onOAuthDisconnect(googleConnection.id);\n } else {\n onOAuthConnect('google');\n }\n } else {\n // Fall back to old simple callbacks\n if (isConnected && onGoogleDisconnect) {\n onGoogleDisconnect();\n } else if (!isConnected && onGoogleConnect) {\n onGoogleConnect();\n }\n }\n };\n\n const isButtonDisabled = isOAuthLoading || isOAuthConnecting;\n\n const { buttonProps } = useButton(\n {\n onPress: handlePress,\n isDisabled: isButtonDisabled,\n },\n ref\n );\n\n if (isOAuthLoading) {\n return (\n <ConnectionsContainer>\n <ConnectionDescription>Loading connections...</ConnectionDescription>\n </ConnectionsContainer>\n );\n }\n\n const buttonText = isOAuthConnecting\n ? 'Connecting...'\n : isConnected\n ? '✓ Disconnect from Google'\n : 'Connect with Google';\n\n const descriptionText = isConnected\n ? googleConnection?.displayName\n ? `Connected as ${googleConnection.displayName}. You can access Google services and data.`\n : 'Your Google account is connected. You can access Google services and data.'\n : 'Connect your Google account to access Google services and integrate with your workflows.';\n\n return (\n <ConnectionsContainer>\n <ConnectionDescription>{descriptionText}</ConnectionDescription>\n <GoogleButton {...buttonProps} ref={ref} $isConnected={isConnected}>\n {buttonText}\n </GoogleButton>\n {isConnected && googleConnection?.scopes && googleConnection.scopes.length > 0 && (\n <div style={{ marginTop: '16px', fontSize: '13px', color: tokens.colors.text.secondary }}>\n Connected services: {googleConnection.scopes.join(', ')}\n </div>\n )}\n </ConnectionsContainer>\n );\n}\n\n// Tab component\nfunction Tab({ item, state }: { item: any; state: ReturnType<typeof useTabListState> }) {\n const ref = useRef<HTMLButtonElement>(null);\n const { tabProps } = useTab({ key: item.key }, state, ref);\n\n return (\n <TabButton\n {...tabProps}\n ref={ref}\n $isSelected={state.selectedKey === item.key}\n data-testid={`tab-${item.key}`}\n >\n {item.rendered}\n </TabButton>\n );\n}\n\n// TabList component\nfunction TabList({\n state,\n ...props\n}: { state: ReturnType<typeof useTabListState> } & React.HTMLAttributes<HTMLDivElement>) {\n const ref = useRef<HTMLDivElement>(null);\n const { tabListProps } = useTabList(props, state, ref);\n\n return (\n <TabListWrapper {...tabListProps} ref={ref}>\n {[...state.collection].map((item) => (\n <Tab key={item.key} item={item} state={state} />\n ))}\n </TabListWrapper>\n );\n}\n\n// TabPanel component\nfunction TabPanel({\n state,\n ...props\n}: { state: ReturnType<typeof useTabListState> } & React.HTMLAttributes<HTMLDivElement>) {\n const ref = useRef<HTMLDivElement>(null);\n const { tabPanelProps } = useTabPanel(props, state, ref);\n\n return (\n <TabPanelWrapper {...tabPanelProps} ref={ref} data-testid={`tabpanel-${state.selectedKey}`}>\n {state.selectedItem?.props.children}\n </TabPanelWrapper>\n );\n}\n\nexport function PaneMenus({\n activeTab = 'runs',\n onTabChange,\n runs = [],\n onRunSelect,\n currentUsage = 0,\n maxUsage = 100000,\n isGoogleConnected = false,\n onGoogleConnect,\n onGoogleDisconnect,\n oauthConnections,\n onOAuthConnect,\n onOAuthDisconnect,\n isOAuthConnecting = false,\n isOAuthLoading = false,\n connectionsSlot,\n workflowsSlot,\n usageSlot,\n}: PaneMenusProps) {\n const state = useTabListState({\n selectedKey: activeTab,\n onSelectionChange: (key) => {\n if (onTabChange) {\n onTabChange(key as 'workflows' | 'runs' | 'usage' | 'connections');\n }\n },\n children: (\n <>\n {workflowsSlot && (\n <Item key=\"workflows\" title=\"Workflows\">\n {workflowsSlot}\n </Item>\n )}\n <Item key=\"runs\" title=\"Runs\">\n <RunsTabContent runs={runs} onRunSelect={onRunSelect} />\n </Item>\n <Item key=\"usage\" title=\"Usage\">\n {usageSlot || <UsageTabContent currentUsage={currentUsage} maxUsage={maxUsage} />}\n </Item>\n <Item key=\"connections\" title=\"Connections\">\n {connectionsSlot || (\n <ConnectionsTabContent\n isGoogleConnected={isGoogleConnected}\n onGoogleConnect={onGoogleConnect}\n onGoogleDisconnect={onGoogleDisconnect}\n oauthConnections={oauthConnections}\n onOAuthConnect={onOAuthConnect}\n onOAuthDisconnect={onOAuthDisconnect}\n isOAuthConnecting={isOAuthConnecting}\n isOAuthLoading={isOAuthLoading}\n />\n )}\n </Item>\n </>\n ),\n });\n\n return (\n <Container>\n <TabList state={state} aria-label=\"Main pane menu\" />\n <TabPanel key={state.selectedItem?.key} state={state} />\n </Container>\n );\n}\n","import styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\nexport const Container = styled.header`\n position: relative;\n width: 100%;\n height: 56px;\n background-color: ${tokens.colors.surface.subtle};\n backdrop-filter: blur(10px);\n -webkit-backdrop-filter: blur(10px);\n overflow: hidden;\n display: flex;\n align-items: center;\n justify-content: center;\n\n /* Background pattern - responsive sizes */\n &::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-image: url('/assets/bg-set/pattern/Size=xs, Type=Waves Rays2.svg');\n background-size: cover;\n background-position: center;\n background-repeat: no-repeat;\n opacity: 0.6;\n z-index: 0;\n }\n\n /* Small screens */\n @media (min-width: ${tokens.breakpoints.mobile}px) {\n &::before {\n background-image: url('/assets/bg-set/pattern/Size=sm, Type=Waves Rays2.svg');\n }\n }\n\n /* Medium screens */\n @media (min-width: ${tokens.breakpoints.tablet}px) {\n height: 64px;\n\n &::before {\n background-image: url('/assets/bg-set/pattern/Size=md, Type=Waves Rays2.svg');\n }\n }\n\n /* Large screens */\n @media (min-width: ${tokens.breakpoints.desktop}px) {\n &::before {\n background-image: url('/assets/bg-set/pattern/Size=lg, Type=Waves Rays2.svg');\n }\n }\n\n /* Extra large screens */\n @media (min-width: 1440px) {\n &::before {\n background-image: url('/assets/bg-set/pattern/Size=xl, Type=Waves Rays2.svg');\n }\n }\n\n /* Dark theme support */\n @media (prefers-color-scheme: dark) {\n background-color: ${tokens.colors.backdrop};\n }\n`;\n\nexport const BrandLogo = styled.img`\n position: relative;\n z-index: 1;\n max-height: 28px;\n height: auto;\n width: auto;\n object-fit: contain;\n pointer-events: none;\n user-select: none;\n\n /* Slightly larger on desktop */\n @media (min-width: ${tokens.breakpoints.tablet}px) {\n max-height: 32px;\n }\n`;\n\nexport const SettingsButton = styled.button<{ $isHovered?: boolean }>`\n position: absolute;\n top: 50%;\n right: ${tokens.spacing.md};\n transform: translateY(-50%);\n z-index: 2;\n\n /* Button appearance */\n width: 40px;\n height: 40px;\n border-radius: ${tokens.borderRadius.full};\n border: none;\n background-color: ${tokens.colors.surface.glass};\n cursor: pointer;\n\n /* Center the icon */\n display: flex;\n align-items: center;\n justify-content: center;\n\n /* Smooth transitions */\n transition: background-color ${tokens.transitions.normal}, transform ${tokens.transitions.fast};\n\n /* Hover state */\n &:hover {\n background-color: ${tokens.colors.surface.overlayHover};\n }\n\n /* Active state */\n &:active {\n transform: translateY(-50%) scale(0.95);\n }\n\n /* Focus visible state for accessibility */\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n\n /* Disabled state */\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n /* Responsive positioning */\n @media (min-width: ${tokens.breakpoints.tablet}px) {\n right: ${tokens.spacing.md};\n }\n\n @media (min-width: ${tokens.breakpoints.desktop}px) {\n right: ${tokens.spacing.lg};\n }\n`;\n\nexport const BackButton = styled.button<{ $isHovered?: boolean }>`\n position: absolute;\n top: 50%;\n left: ${tokens.spacing.md};\n transform: translateY(-50%);\n z-index: 2;\n\n /* Button appearance */\n width: 40px;\n height: 40px;\n border-radius: ${tokens.borderRadius.full};\n border: none;\n background-color: ${tokens.colors.surface.glass};\n cursor: pointer;\n\n /* Center the icon */\n display: flex;\n align-items: center;\n justify-content: center;\n\n /* Smooth transitions */\n transition: background-color ${tokens.transitions.normal}, transform ${tokens.transitions.fast};\n\n /* Hover state */\n &:hover {\n background-color: ${tokens.colors.surface.overlayHover};\n }\n\n /* Active state */\n &:active {\n transform: translateY(-50%) scale(0.95);\n }\n\n /* Focus visible state for accessibility */\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n\n /* Disabled state */\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n /* Responsive positioning */\n @media (min-width: ${tokens.breakpoints.tablet}px) {\n left: ${tokens.spacing.md};\n }\n\n @media (min-width: ${tokens.breakpoints.desktop}px) {\n left: ${tokens.spacing.lg};\n }\n`;\n","import { useButton } from '@react-aria/button';\nimport { useRef, useState } from 'react';\nimport { tokens } from '../../../theme/tokens';\nimport { Icon } from '../Icon';\nimport type { IconName } from '../Icon/icons';\nimport { BackButton, BrandLogo, Container, SettingsButton } from './PaneSectionHeader.styles';\n\nexport type BrandType = 'Google' | 'Microsoft' | 'Slack' | 'YouTube';\n\nexport interface PaneSectionHeaderProps {\n /**\n * Brand logo to display in the center of the header\n * @default 'Google'\n */\n brand?: BrandType;\n /**\n * Callback fired when back button is clicked\n */\n onBackClick?: () => void;\n /**\n * Callback fired when settings button is clicked\n */\n onSettingsClick?: () => void;\n /**\n * Icon name for the settings button\n * @default 'flow-chart'\n */\n settingsIcon?: string;\n /**\n * Additional CSS class name\n */\n className?: string;\n /**\n * Accessible label for the header\n */\n 'aria-label'?: string;\n}\n\n/**\n * PaneSectionHeader component\n *\n * A fixed-height header positioned at the top of the main pane section.\n * Features a centered brand logo and a settings button in the top-right corner.\n * Background includes responsive Rays2 pattern from the design system.\n *\n * @example\n * ```tsx\n * <PaneSectionHeader\n * brand=\"Google\"\n * onSettingsClick={() => console.log('Settings clicked')}\n * />\n * ```\n */\nexport function PaneSectionHeader({\n brand = 'Google',\n onBackClick,\n onSettingsClick,\n settingsIcon = 'flow-chart',\n className,\n 'aria-label': ariaLabel = 'Pane section header',\n}: PaneSectionHeaderProps) {\n const [isBackHovered, setIsBackHovered] = useState(false);\n const [isSettingsHovered, setIsSettingsHovered] = useState(false);\n const backButtonRef = useRef<HTMLButtonElement>(null);\n const settingsButtonRef = useRef<HTMLButtonElement>(null);\n\n const { buttonProps: backButtonProps } = useButton(\n {\n onPress: onBackClick,\n 'aria-label': 'Go back',\n },\n backButtonRef\n );\n\n const { buttonProps: settingsButtonProps } = useButton(\n {\n onPress: onSettingsClick,\n 'aria-label': 'Workflow configuration',\n },\n settingsButtonRef\n );\n\n return (\n <Container className={className} role=\"banner\" aria-label={ariaLabel}>\n {/* Back button - top left */}\n {onBackClick && (\n <BackButton\n {...backButtonProps}\n ref={backButtonRef}\n onMouseEnter={() => setIsBackHovered(true)}\n onMouseLeave={() => setIsBackHovered(false)}\n $isHovered={isBackHovered}\n >\n <Icon name=\"arrow-left-fill\" size={20} color={tokens.colors.text.secondary} />\n </BackButton>\n )}\n\n {/* Brand logo centered - using white variant for better contrast on dark background */}\n <BrandLogo src={`/assets/bg-set/brand-logos/${brand}2.svg`} alt={brand} />\n\n {/* Settings button - top right */}\n <SettingsButton\n {...settingsButtonProps}\n ref={settingsButtonRef}\n onMouseEnter={() => setIsSettingsHovered(true)}\n onMouseLeave={() => setIsSettingsHovered(false)}\n $isHovered={isSettingsHovered}\n >\n <Icon name={settingsIcon as IconName} size={20} color={tokens.colors.text.secondary} />\n </SettingsButton>\n </Container>\n );\n}\n\nPaneSectionHeader.displayName = 'PaneSectionHeader';\n","import styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\nexport const Container = styled.button<{ $active?: boolean }>`\n /* Base button styling */\n width: 48px;\n height: 48px;\n border: none;\n padding: ${tokens.spacing.xs};\n border-radius: ${({ $active }) => ($active ? tokens.borderRadius.xl : tokens.borderRadius.full)};\n background-color: ${tokens.colors.background.light};\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all ${tokens.transitions.fast};\n position: relative;\n overflow: hidden;\n\n /* Hover state */\n &:hover {\n border-radius: ${tokens.borderRadius.xl};\n background-color: ${tokens.colors.surface.overlayHover};\n }\n\n /* Focus visible state for accessibility */\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n\n /* Active indicator */\n ${({ $active }) =>\n $active &&\n `\n &::before {\n content: '';\n position: absolute;\n left: -16px;\n top: 50%;\n transform: translateY(-50%);\n width: 4px;\n height: 40px;\n background-color: ${tokens.colors.text.primary};\n border-radius: 0 ${tokens.borderRadius.sm} ${tokens.borderRadius.sm} 0;\n }\n `}\n\n /* Disabled state */\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n`;\n\nexport const LogoImage = styled.img`\n width: 100%;\n height: 100%;\n object-fit: contain;\n pointer-events: none;\n user-select: none;\n`;\n","import { useButton } from '@react-aria/button';\nimport type { AriaButtonProps } from '@react-types/button';\nimport { useRef } from 'react';\nimport { Container, LogoImage } from './ServiceIcon.styles';\n\nexport type ServiceBrand =\n | 'Facebook'\n | 'Gmail'\n | 'Instagram'\n | 'LinkedIn'\n | 'Reddit'\n | 'Slack'\n | 'Telegram'\n | 'WhatsApp'\n | 'X'\n | 'YouTube';\n\nexport interface ServiceIconProps extends AriaButtonProps {\n /**\n * Brand logo to display\n */\n brand: ServiceBrand;\n /**\n * Whether the service icon is active/selected\n */\n active?: boolean;\n /**\n * Additional CSS class name\n */\n className?: string;\n}\n\n/**\n * ServiceIcon component\n *\n * Displays a circular brand logo icon that can be used as a service selector.\n * Uses colored brand logos from assets/icons/Brand and supports active/hover states.\n *\n * @example\n * ```tsx\n * <ServiceIcon\n * brand=\"Gmail\"\n * active={true}\n * onPress={() => console.log('Gmail clicked')}\n * aria-label=\"Gmail service\"\n * />\n * ```\n */\nexport function ServiceIcon({ brand, active = false, className, ...ariaProps }: ServiceIconProps) {\n const ref = useRef<HTMLButtonElement>(null);\n const { buttonProps } = useButton(\n {\n ...ariaProps,\n 'aria-pressed': active,\n },\n ref\n );\n\n return (\n <Container {...buttonProps} ref={ref} $active={active} className={className}>\n <LogoImage src={`/assets/icons/Brand/${brand}.svg`} alt={brand} />\n </Container>\n );\n}\n\nServiceIcon.displayName = 'ServiceIcon';\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/theme/tokens.ts","../../src/components/layout/CategoryNav/CategoryNav.styles.ts","../../src/components/layout/CategoryNav/CategoryNav.tsx","../../src/components/layout/Icon/Icon.styles.ts","../../src/components/layout/Icon/icons.ts","../../src/components/layout/Icon/Icon.tsx","../../src/components/layout/NavHorizontal/NavHorizontal.styles.ts","../../src/components/layout/NavHorizontal/NavHorizontal.tsx","../../src/components/layout/NavVertical/NavVertical.styles.ts","../../src/components/layout/NavVertical/NavVertical.tsx","../../src/components/layout/Layout/Layout.styles.ts","../../src/components/layout/Layout/Layout.tsx","../../src/components/layout/NavHorizontal/ActionButtons.styles.ts","../../src/components/layout/NavHorizontal/ActionButtons.tsx","../../src/components/layout/NavHorizontal/WorkflowStatusCard.styles.ts","../../src/components/layout/NavHorizontal/WorkflowStatusCard.tsx","../../src/components/NotificationCard/NotificationCard.dark.styles.ts","../../src/components/NotificationCard/DarkNotificationCard.tsx","../../src/components/layout/PaneMenus/PaneMenus.styles.ts","../../src/components/layout/PaneMenus/PaneMenus.tsx","../../src/components/layout/PaneSectionHeader/PaneSectionHeader.styles.ts","../../src/components/layout/PaneSectionHeader/PaneSectionHeader.tsx","../../src/components/layout/ServiceIcon/ServiceIcon.styles.ts","../../src/components/layout/ServiceIcon/ServiceIcon.tsx"],"names":["styled","keyframes","jsxs","jsx","useState","useCallback","Container","useRef","useButton","css","IconWrapper","DisclosureGroup","Disclosure","Button","DisclosurePanel","Heading","Fragment","useMeter","useTab","useTabList","useTabPanel","useTabListState","Item","BackButton"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Design Tokens\n * Centralized design system tokens for colors, typography, spacing, etc.\n * These tokens are the single source of truth for styling across all components.\n */\n\nexport const tokens = {\n colors: {\n // Brand colors\n primary: '#2CB0AB', // Teal (main brand color)\n secondary: '#264E68', // Deep Blue\n accent: '#459FB9', // Sky Blue\n seaGreen: '#4EB999', // Sea Green (additional brand color)\n\n // Backgrounds - dark theme optimized\n background: {\n darkest: '#0a1b2a', // Darkest Blue (brand color)\n darker: '#151a26', // Discord gray (preserved)\n dark: '#1b2230', // Discord surface gray (preserved)\n light: '#252d3d', // Discord border gray (preserved)\n },\n\n // Text hierarchy\n text: {\n primary: '#FFFFFF',\n secondary: '#B4B8C5',\n tertiary: '#6B7280',\n disabled: '#4B5563',\n },\n\n // Semantic colors\n success: '#2CB0AB', // Teal (brand aligned)\n error: '#EF4444',\n warning: '#F59E0B',\n info: '#459FB9', // Sky Blue (brand aligned)\n\n // Status colors (for workflow/SSE events)\n status: {\n pending: '#6B7280',\n editing: '#3B82F6',\n idle: '#6B7280',\n running: '#459FB9', // Sky Blue (brand aligned)\n completed: '#2CB0AB', // Teal (brand aligned)\n failed: '#EF4444',\n timeout: '#F59E0B',\n // Badge status (online/offline pattern)\n online: '#2CB0AB',\n offline: '#EF4444',\n busy: '#459FB9',\n },\n\n // Connection status\n connection: {\n connected: '#2CB0AB', // Teal (brand aligned)\n streaming: '#459FB9', // Sky Blue (brand aligned)\n disconnected: '#EF4444',\n reconnecting: '#F59E0B',\n },\n\n // Surface variants (for overlays, cards, panels)\n surface: {\n base: '#1b2230',\n elevated: '#252d3d',\n overlay: 'rgba(255, 255, 255, 0.05)',\n overlayHover: 'rgba(255, 255, 255, 0.1)',\n overlayActive: 'rgba(255, 255, 255, 0.15)',\n subtle: 'rgba(255, 255, 255, 0.02)',\n glass: 'rgba(255, 255, 255, 0.26)',\n glassBorder: 'rgba(255, 255, 255, 0.3)',\n },\n\n // UI Element colors\n border: {\n default: 'rgba(255, 255, 255, 0.1)',\n subtle: 'rgba(255, 255, 255, 0.05)',\n hover: 'rgba(255, 255, 255, 0.2)',\n focus: '#2CB0AB', // Teal (brand aligned)\n error: '#EF4444',\n },\n\n // Scrollbar colors\n scrollbar: {\n track: 'transparent',\n thumb: 'rgba(255, 255, 255, 0.2)',\n thumbHover: 'rgba(255, 255, 255, 0.3)',\n },\n\n // Message bubbles\n message: {\n user: '#264E68', // Deep Blue (brand color)\n ai: '#1b2230', // Dark background\n system: '#151a26', // Darker background\n },\n\n // Overlays and backdrops\n overlay: 'rgba(0, 0, 0, 0.5)',\n backdrop: 'rgba(27, 34, 48, 0.95)',\n\n // Icon colors\n icon: {\n default: '#B4B8C5',\n muted: '#6B7280',\n active: '#2CB0AB',\n },\n\n // Platform brand colors (for social media icons)\n platform: {\n facebook: '#1877F2',\n instagram: '#E4405F',\n linkedin: '#0A66C2',\n x: '#000000',\n twitter: '#1DA1F2',\n youtube: '#FF0000',\n reddit: '#FF4500',\n slack: '#4A154B',\n telegram: '#0088CC',\n whatsapp: '#25D366',\n gmail: '#EA4335',\n },\n },\n\n typography: {\n fontFamily: {\n primary:\n \"'Roboto', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Helvetica Neue', sans-serif\",\n heading:\n \"'Roboto', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Helvetica Neue', sans-serif\",\n monospace: \"'Roboto Mono', 'Monaco', 'Menlo', 'Ubuntu Mono', monospace\",\n },\n fontSize: {\n xs: '0.875rem', // 14px (was 12px, increased for better readability)\n sm: '1rem', // 16px (was 14px, increased for better readability)\n base: '1.125rem', // 18px (was 16px, increased for better readability)\n lg: '1.125rem', // 18px (heading size, unchanged)\n xl: '1.25rem', // 20px (heading size, unchanged)\n '2xl': '1.5rem', // 24px (heading size, unchanged)\n '3xl': '1.875rem', // 30px (heading size, unchanged)\n '4xl': '2.25rem', // 36px (heading size, unchanged)\n },\n fontWeight: {\n light: 300,\n regular: 400,\n medium: 500,\n semibold: 600,\n bold: 700,\n },\n lineHeight: {\n tight: 1.25,\n normal: 1.5,\n relaxed: 1.75,\n },\n },\n\n spacing: {\n xs: '0.25rem', // 4px\n sm: '0.5rem', // 8px\n md: '1rem', // 16px\n lg: '1.5rem', // 24px\n xl: '2rem', // 32px\n '2xl': '3rem', // 48px\n '3xl': '4rem', // 64px\n },\n\n borderRadius: {\n none: '0',\n sm: '0.25rem', // 4px\n md: '0.5rem', // 8px\n lg: '0.75rem', // 12px\n xl: '1rem', // 16px\n '2xl': '1.5rem', // 24px\n full: '9999px', // Fully rounded\n },\n\n shadows: {\n none: 'none',\n sm: '0 1px 2px 0 rgba(0, 0, 0, 0.05)',\n md: '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)',\n lg: '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)',\n xl: '0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)',\n card: '0 4px 20px rgba(0, 0, 0, 0.3)',\n glow: {\n primary: '0 0 20px rgba(44, 176, 171, 0.3)',\n secondary: '0 0 20px rgba(38, 78, 104, 0.3)',\n accent: '0 0 20px rgba(69, 159, 185, 0.3)',\n },\n },\n\n transitions: {\n fast: '150ms ease-in-out',\n normal: '250ms ease-in-out',\n slow: '350ms ease-in-out',\n },\n\n animation: {\n duration: {\n micro: '150ms',\n short: '200ms',\n medium: '300ms',\n long: '500ms',\n },\n easing: {\n enter: 'cubic-bezier(0.4, 0, 0.2, 1)',\n exit: 'cubic-bezier(0.4, 0, 1, 1)',\n smooth: 'cubic-bezier(0.4, 0, 0.2, 1)',\n linear: 'linear',\n },\n },\n\n zIndex: {\n base: 0,\n dropdown: 1000,\n sticky: 1020,\n fixed: 1030,\n overlay: 1100,\n modal: 1200,\n popover: 1300,\n tooltip: 1400,\n toast: 1500,\n },\n\n breakpoints: {\n mobile: 640,\n tablet: 1024,\n desktop: 1280,\n },\n} as const;\n\nexport type Tokens = typeof tokens;\n","import styled, { keyframes } from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\nexport const NavigationContainer = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n padding-top: ${tokens.spacing.xs};\n gap: ${tokens.spacing.xs};\n width: 100%;\n height: 100%;\n overflow-y: auto;\n overflow-x: hidden;\n\n &:hover {\n background: transparent !important;\n border-radius: 0 !important;\n box-shadow: none !important;\n }\n`;\n\nexport const CategoryGroup = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n padding-bottom: ${tokens.spacing.md};\n\n &:hover {\n background: transparent !important;\n border-radius: 0 !important;\n }\n`;\n\nexport const CategoryButton = styled.button<{ $active: boolean; $expanded: boolean }>`\n width: 48px;\n height: 48px;\n border: none;\n padding: 0;\n border-radius: ${({ $active }) => ($active ? tokens.borderRadius.xl : tokens.borderRadius.full)};\n background-color: ${({ $active }) => ($active ? tokens.colors.primary : tokens.colors.background.light)};\n color: ${tokens.colors.text.primary};\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all ${tokens.transitions.fast};\n position: relative;\n\n &:hover {\n border-radius: ${tokens.borderRadius.xl};\n background-color: ${({ $active }) => ($active ? tokens.colors.primary : tokens.colors.surface.overlayHover)};\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n`;\n\nexport const CategoryLabel = styled.span`\n font-size: 9px;\n color: ${tokens.colors.text.tertiary};\n margin-top: ${tokens.spacing.xs};\n text-align: center;\n max-width: 56px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nexport const SubItemList = styled.div<{ $expanded: boolean }>`\n display: ${({ $expanded }) => ($expanded ? 'flex' : 'none')};\n flex-direction: column;\n align-items: center;\n gap: ${tokens.spacing.xs};\n margin-top: ${tokens.spacing.xs};\n width: 100%;\n`;\n\nexport const SubItemButton = styled.button<{ $active: boolean }>`\n width: 32px;\n height: 32px;\n border: none;\n padding: 0;\n border-radius: ${({ $active }) => ($active ? tokens.borderRadius.md : tokens.borderRadius.full)};\n background-color: ${({ $active }) => ($active ? tokens.colors.surface.overlayActive : tokens.colors.surface.overlay)};\n color: ${tokens.colors.text.primary};\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all ${tokens.transitions.fast};\n\n &:hover {\n border-radius: ${tokens.borderRadius.md};\n background-color: ${({ $active }) =>\n $active ? tokens.colors.surface.overlayActive : tokens.colors.surface.overlayHover};\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n`;\n\nexport const CountBadge = styled.span`\n position: absolute;\n top: -2px;\n right: -2px;\n background: ${tokens.colors.accent};\n color: ${tokens.colors.text.primary};\n font-size: 10px;\n font-weight: ${tokens.typography.fontWeight.semibold};\n min-width: 16px;\n height: 16px;\n border-radius: ${tokens.borderRadius.md};\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0 ${tokens.spacing.xs};\n`;\n\nconst filterBadgeIn = keyframes`\n from {\n opacity: 0;\n transform: scale(0.5);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n`;\n\nexport const FilterBadge = styled.div`\n position: absolute;\n bottom: -${tokens.spacing.xs};\n right: -${tokens.spacing.xs};\n width: 18px;\n height: 18px;\n background: ${tokens.colors.background.darker};\n border-radius: ${tokens.borderRadius.full};\n display: flex;\n align-items: center;\n justify-content: center;\n animation: ${filterBadgeIn} ${tokens.transitions.normal};\n\n svg {\n width: 10px;\n height: 10px;\n fill: ${tokens.colors.text.primary};\n }\n`;\n\nexport const CategoryIconImg = styled.img<{ $size?: number; $active?: boolean }>`\n width: ${({ $size }) => $size || 24}px;\n height: ${({ $size }) => $size || 24}px;\n object-fit: contain;\n filter: ${({ $active }) => ($active ? 'brightness(0) invert(1)' : 'none')};\n`;\n\nexport const SubItemIconImg = styled.img<{ $size: number; $active?: boolean }>`\n width: ${({ $size }) => $size}px;\n height: ${({ $size }) => $size}px;\n object-fit: contain;\n filter: ${({ $active }) => ($active ? 'brightness(0) invert(1)' : 'none')};\n`;\n","/**\n * CategoryNav Component\n *\n * Vertical navigation bar displaying categories with expandable sub-items.\n * Generic component that can be used for any category-based navigation.\n */\n\nimport type React from 'react';\nimport { useCallback, useState } from 'react';\nimport {\n CategoryButton,\n CategoryGroup,\n CategoryIconImg,\n CategoryLabel,\n CountBadge,\n FilterBadge,\n NavigationContainer,\n SubItemButton,\n SubItemIconImg,\n SubItemList,\n} from './CategoryNav.styles';\n\n// =============================================================================\n// Types\n// =============================================================================\n\n/**\n * Represents a sub-item within a category\n */\nexport interface CategorySubItem {\n /** Unique identifier */\n id: string;\n /** Display name */\n name: string;\n /** Icon element or image path */\n icon: React.ReactNode | string;\n}\n\n/**\n * Represents a category in the navigation\n */\nexport interface CategoryItem<T extends string = string> {\n /** Unique identifier */\n id: T;\n /** Display label */\n label: string;\n /** Icon path (SVG) */\n iconPath: string;\n /** Sub-items within this category */\n subItems?: CategorySubItem[];\n}\n\nexport interface CategoryNavProps<T extends string = string> {\n /** List of categories to display */\n categories: CategoryItem<T>[];\n /** Currently selected category (null = none) */\n selectedCategory: T | null;\n /** Currently selected sub-item within category (null = all in category) */\n selectedSubItem: string | null;\n /** Callback when category is selected */\n onCategorySelect: (category: T | null) => void;\n /** Callback when sub-item is selected */\n onSubItemSelect: (subItem: string | null) => void;\n /** Optional counts per category */\n categoryCounts?: Record<T, number>;\n /** Optional set of enabled categories (if provided, hides categories not in set) */\n enabledCategories?: Set<T>;\n /** Test ID prefix for testing */\n testIdPrefix?: string;\n}\n\n// Filter icon for the badge\nconst FilterIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-label=\"Filter active\">\n <title>Filter active</title>\n <path d=\"M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z\" />\n </svg>\n);\n\n// =============================================================================\n// Component\n// =============================================================================\n\nexport function CategoryNav<T extends string = string>({\n categories,\n selectedCategory,\n selectedSubItem,\n onCategorySelect,\n onSubItemSelect,\n categoryCounts,\n enabledCategories,\n testIdPrefix = 'category',\n}: CategoryNavProps<T>): React.ReactElement {\n const [expandedCategory, setExpandedCategory] = useState<T | null>(selectedCategory);\n\n const hasSubItemFilterForCategory = useCallback(\n (categoryId: T): boolean => {\n if (!selectedSubItem) return false;\n const category = categories.find((c) => c.id === categoryId);\n return category?.subItems?.some((s) => s.id === selectedSubItem) ?? false;\n },\n [selectedSubItem, categories]\n );\n\n const handleCategoryClick = useCallback(\n (categoryId: T) => {\n // If this category is selected and has a sub-item filter, clear the filter\n if (selectedCategory === categoryId && hasSubItemFilterForCategory(categoryId)) {\n onSubItemSelect(null);\n return;\n }\n\n if (selectedCategory === categoryId) {\n // Toggle expansion without changing selection\n setExpandedCategory((prev) => (prev === categoryId ? null : categoryId));\n } else {\n // Select category and expand it\n onCategorySelect(categoryId);\n onSubItemSelect(null);\n setExpandedCategory(categoryId);\n }\n },\n [selectedCategory, onCategorySelect, onSubItemSelect, hasSubItemFilterForCategory]\n );\n\n const handleSubItemClick = useCallback(\n (subItemId: string) => {\n if (selectedSubItem === subItemId) {\n onSubItemSelect(null);\n } else {\n onSubItemSelect(subItemId);\n }\n },\n [selectedSubItem, onSubItemSelect]\n );\n\n // Filter categories by enabled set if provided\n const visibleCategories =\n enabledCategories && enabledCategories.size > 0\n ? categories.filter((cat) => enabledCategories.has(cat.id))\n : categories;\n\n const renderSubItemIcon = (subItem: CategorySubItem, isActive: boolean) => {\n if (typeof subItem.icon === 'string') {\n return <SubItemIconImg src={subItem.icon} alt={subItem.name} $size={16} $active={isActive} />;\n }\n return subItem.icon;\n };\n\n return (\n <NavigationContainer data-testid={`${testIdPrefix}-navigation`}>\n {visibleCategories.map((category) => {\n const isSelected = selectedCategory === category.id;\n const isExpanded = expandedCategory === category.id;\n const count = categoryCounts?.[category.id];\n const hasSubItemFilter = hasSubItemFilterForCategory(category.id);\n\n return (\n <CategoryGroup key={category.id}>\n <CategoryButton\n $active={isSelected}\n $expanded={isExpanded}\n onClick={() => handleCategoryClick(category.id)}\n aria-label={\n hasSubItemFilter ? `${category.label} (filtered - click to clear)` : category.label\n }\n aria-expanded={isExpanded}\n aria-pressed={isSelected}\n title={\n hasSubItemFilter ? `${category.label} - Click to clear filter` : category.label\n }\n data-testid={`${testIdPrefix}-${category.id}`}\n data-active={isSelected}\n >\n <CategoryIconImg\n src={category.iconPath}\n alt={category.label}\n $size={24}\n $active={isSelected}\n />\n {count !== undefined && count > 0 && <CountBadge>{count}</CountBadge>}\n {hasSubItemFilter && (\n <FilterBadge>\n <FilterIcon />\n </FilterBadge>\n )}\n </CategoryButton>\n <CategoryLabel>{category.label}</CategoryLabel>\n\n {category.subItems && category.subItems.length > 0 && (\n <SubItemList $expanded={isExpanded}>\n {category.subItems.map((subItem) => {\n const isSubItemActive = selectedSubItem === subItem.id;\n return (\n <SubItemButton\n key={subItem.id}\n $active={isSubItemActive}\n onClick={() => handleSubItemClick(subItem.id)}\n aria-label={subItem.name}\n title={subItem.name}\n data-testid={`${testIdPrefix}-subitem-${subItem.id}`}\n >\n {renderSubItemIcon(subItem, isSubItemActive)}\n </SubItemButton>\n );\n })}\n </SubItemList>\n )}\n </CategoryGroup>\n );\n })}\n </NavigationContainer>\n );\n}\n\nCategoryNav.displayName = 'CategoryNav';\n\nexport default CategoryNav;\n","import styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\ninterface IconWrapperProps {\n $size: number;\n $color: string;\n}\n\nexport const IconWrapper = styled.span<IconWrapperProps>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: ${({ $size }) => $size}px;\n height: ${({ $size }) => $size}px;\n color: ${({ $color }) => $color};\n line-height: 1;\n\n img {\n width: 100%;\n height: 100%;\n filter: ${({ $color }) => {\n if ($color === 'currentColor' || !$color) return 'inherit';\n if ($color === 'white' || $color === tokens.colors.text.primary || $color === '#fff') {\n return 'brightness(0) saturate(100%) invert(100%)';\n }\n if ($color === tokens.colors.text.secondary || $color === '#b9bbbe') {\n // Secondary text color (gray)\n return 'brightness(0) saturate(100%) invert(75%) sepia(8%) saturate(223%) hue-rotate(180deg) brightness(94%) contrast(86%)';\n }\n if ($color === tokens.colors.error || $color === '#ed4245' || $color === '#f04747') {\n // Error red\n return 'brightness(0) saturate(100%) invert(38%) sepia(97%) saturate(1459%) hue-rotate(334deg) brightness(95%) contrast(93%)';\n }\n return 'none';\n }};\n }\n`;\n","/**\n * Icon configuration and type definitions\n * Using @icon-set alias for cleaner imports\n */\n\n// Base path for all icons (served from public directory)\nexport const ICON_BASE_PATH = '/assets/icon-set' as const;\n\n// Available icon names as const for type safety\nexport const IconNames = {\n MIC: 'mic-fill',\n MIC_OFF: 'mic-off-fill',\n HEADPHONE: 'headphone-fill',\n VOLUME_MUTE: 'volume-mute-fill',\n SETTINGS_3_LINE: 'settings-3-line',\n HOME: 'home-fill',\n ADD_CIRCLE: 'add-circle-fill',\n COMPASS_DISCOVER: 'compass-discover-fill',\n DOWNLOAD: 'download-2-fill',\n ARROW_LEFT: 'arrow-left-fill',\n CALENDAR: 'calendar-fill',\n CHAT: 'chat-1-fill',\n FLOW_CHART: 'flow-chart',\n LOGOUT_CIRCLE_R_FILL: 'logout-circle-r-fill',\n LOGOUT_CIRCLE_R_LINE: 'logout-circle-r-line',\n SIDE_BAR_FILL: 'side-bar-fill',\n CHECK: 'check-fill',\n CHECK_CIRCLE: 'checkbox-circle-fill',\n CLOSE_CIRCLE: 'close-circle-fill',\n ERROR_WARNING: 'error-warning-fill',\n HAMMER: 'hammer-fill',\n ROCKET: 'rocket-fill',\n TICKET: 'coupon-2-fill',\n CLIPBOARD: 'clipboard-fill',\n} as const;\n\nexport type IconName = (typeof IconNames)[keyof typeof IconNames];\n\n// Icon file mapping\nexport const iconFiles: Record<IconName, string> = {\n 'mic-fill': 'Icon-mic-fill.svg',\n 'mic-off-fill': 'Icon-mic-off-fill.svg',\n 'headphone-fill': 'Icon-headphone-fill.svg',\n 'volume-mute-fill': 'Icon-volume-mute-fill.svg',\n 'settings-3-line': 'Icon-settings-3-line.svg',\n 'home-fill': 'Icon-home-fill.svg',\n 'add-circle-fill': 'Icon-add-circle-fill.svg',\n 'compass-discover-fill': 'Icon-compass-discover-fill.svg',\n 'download-2-fill': 'Icon-download-2-fill.svg',\n 'arrow-left-fill': 'Icon-arrow-left-fill.svg',\n 'calendar-fill': 'Icon-calendar-fill.svg',\n 'chat-1-fill': 'Icon-chat-1-fill.svg',\n 'flow-chart': 'Icon-flow-chart.svg',\n 'logout-circle-r-fill': 'Icon-logout-circle-r-fill.svg',\n 'logout-circle-r-line': 'Icon-logout-circle-r-line.svg',\n 'side-bar-fill': 'Icon-side-bar-fill.svg',\n 'check-fill': 'Icon-check-fill.svg',\n 'checkbox-circle-fill': 'Icon-checkbox-circle-fill.svg',\n 'close-circle-fill': 'Icon-close-circle-fill.svg',\n 'error-warning-fill': 'Icon-error-warning-fill.svg',\n 'hammer-fill': 'Icon-hammer-fill.svg',\n 'rocket-fill': 'Icon-rocket-fill.svg',\n 'coupon-2-fill': 'Icon-coupon-2-fill.svg',\n 'clipboard-fill': 'Icon-clipboard-fill.svg',\n};\n\n// Helper function to get full icon path\nexport function getIconPath(name: IconName): string {\n return `${ICON_BASE_PATH}/${iconFiles[name]}`;\n}\n","import type { ImgHTMLAttributes } from 'react';\nimport { IconWrapper } from './Icon.styles';\nimport { getIconPath, type IconName } from './icons';\n\nexport interface IconProps extends Omit<ImgHTMLAttributes<HTMLImageElement>, 'src' | 'alt'> {\n name: IconName;\n size?: number;\n color?: string;\n className?: string;\n}\n\nexport function Icon({\n name,\n size = 20,\n color = 'currentColor',\n className,\n ...imgProps\n}: IconProps) {\n const iconPath = getIconPath(name);\n\n return (\n <IconWrapper $size={size} $color={color} className={className} aria-hidden=\"true\">\n <img src={iconPath} alt=\"\" width={size} height={size} {...imgProps} />\n </IconWrapper>\n );\n}\n\nIcon.displayName = 'Icon';\n","import styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\nexport const Container = styled.nav`\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n background-color: ${tokens.colors.background.darker};\n border-top: 1px solid ${tokens.colors.border.subtle};\n /* Add vertical padding to prevent content overlap */\n padding-top: 4px;\n /* Use --safe-area-bottom CSS variable for Android navigation buttons.\n Android WebView doesn't support env(), so we use CSS custom properties\n injected by the native app. Fallback to 0 if not set. */\n padding-bottom: var(--safe-area-bottom, 0px);\n z-index: ${tokens.zIndex.sticky};\n\n /* Dark theme support */\n @media (prefers-color-scheme: dark) {\n background-color: ${tokens.colors.background.darkest};\n }\n`;\n\nexport const ContentWrapper = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n /* Fixed height for actual navbar content - keeps vertical centering */\n height: 52px;\n /* Left padding aligns WorkflowStatusCard icon with NavVertical icons (center at 36px) */\n /* Icon is 36px with 6px card padding, so card edge at 12px, icon center at 12+6+18=36px */\n padding: 0 ${tokens.spacing.xs} 0 12px;\n gap: ${tokens.spacing.xs}; /* 4px gap between status card and action buttons */\n max-width: 100%;\n\n /* Responsive padding - adjust for mobile nav width (60px, center at 30px) */\n @media (max-width: ${tokens.breakpoints.tablet}px) {\n /* Card edge at 6px, icon center at 6+6+18=30px to match 60px nav */\n padding: 0 ${tokens.spacing.xs} 0 6px;\n }\n`;\n\nexport const UserStatusSlot = styled.div`\n display: flex;\n align-items: center;\n min-width: 0; /* Allow flex item to shrink */\n flex: 1 1 auto; /* Allow slot to grow and take available space */\n\n /* Handle overflow for long usernames */\n > * {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n`;\n\nexport const ActionButtonsSlot = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n flex-shrink: 0;\n\n /* Ensure buttons stay visible */\n @media (min-width: 480px) {\n gap: ${tokens.spacing.sm};\n }\n`;\n","import type { ReactNode } from 'react';\nimport {\n ActionButtonsSlot,\n Container,\n ContentWrapper,\n UserStatusSlot,\n} from './NavHorizontal.styles';\n\nexport interface NavHorizontalProps {\n userStatusSlot?: ReactNode;\n actionsSlot?: ReactNode;\n className?: string;\n 'aria-label'?: string;\n}\n\nexport function NavHorizontal({\n userStatusSlot,\n actionsSlot,\n className,\n 'aria-label': ariaLabel = 'Horizontal navigation bar',\n}: NavHorizontalProps) {\n return (\n <Container className={className} role=\"navigation\" aria-label={ariaLabel}>\n <ContentWrapper>\n <UserStatusSlot>{userStatusSlot}</UserStatusSlot>\n <ActionButtonsSlot>{actionsSlot}</ActionButtonsSlot>\n </ContentWrapper>\n </Container>\n );\n}\n\nNavHorizontal.displayName = 'NavHorizontal';\n","import styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\nexport const Container = styled.nav`\n position: absolute;\n top: 0;\n left: 0;\n bottom: 52px; /* Account for horizontal nav height */\n width: 72px;\n background-color: ${tokens.colors.background.darker};\n display: flex;\n flex-direction: column;\n z-index: ${tokens.zIndex.base + 9}; /* Below horizontal nav and chat sidebar */\n overflow-y: auto;\n overflow-x: hidden;\n scrollbar-width: none; /* Firefox */\n /* Use CSS custom property for coordinated animations with MainPane */\n transition: transform var(--layout-transition-duration, 0.3s) var(--layout-transition-easing, ease-out);\n\n /* Hide scrollbar for Chrome, Safari and Opera */\n &::-webkit-scrollbar {\n display: none;\n }\n\n /* Dark theme support */\n @media (prefers-color-scheme: dark) {\n background-color: ${tokens.colors.background.darkest};\n }\n\n /* Responsive adjustments */\n @media (max-width: ${tokens.breakpoints.tablet}px) {\n width: 60px; /* Match MainPane left offset on mobile */\n }\n\n /* Mobile landscape: allow content to overflow and scroll with thin scrollbar */\n @media (orientation: landscape) and (max-height: 500px) {\n width: 60px;\n overflow-y: auto;\n overflow-x: hidden;\n scrollbar-width: thin; /* Firefox - show thin scrollbar */\n\n /* Show thin scrollbar for Chrome, Safari */\n &::-webkit-scrollbar {\n display: block;\n width: 3px;\n height: 3px;\n }\n\n &::-webkit-scrollbar-track {\n background: transparent;\n }\n\n &::-webkit-scrollbar-thumb {\n background: ${tokens.colors.border.default};\n border-radius: 2px;\n }\n }\n`;\n\nexport const TopSection = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 56px; /* Same as PaneSectionHeader on mobile */\n padding: 0;\n flex-shrink: 0;\n position: relative;\n\n @media (min-width: ${tokens.breakpoints.tablet}px) {\n height: 64px; /* Same as PaneSectionHeader on desktop */\n }\n`;\n\nexport const BackButton = styled.button`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 40px;\n height: 40px;\n border-radius: ${tokens.borderRadius.full};\n border: none;\n background-color: ${tokens.colors.background.light};\n color: ${tokens.colors.text.primary};\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all ${tokens.transitions.normal};\n -webkit-tap-highlight-color: transparent;\n\n &:hover {\n background-color: ${tokens.colors.primary};\n }\n\n &:active {\n transform: translate(-50%, -50%) scale(0.95);\n opacity: 0.8;\n }\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n`;\n\nexport const BackButtonIcon = styled.span`\n font-size: ${tokens.typography.fontSize.xl};\n line-height: ${tokens.typography.lineHeight.tight};\n font-weight: ${tokens.typography.fontWeight.bold};\n`;\n\nexport const Separator = styled.div`\n width: 32px;\n height: 2px;\n background-color: ${tokens.colors.background.light};\n align-self: center;\n margin: ${tokens.spacing.sm} auto ${tokens.spacing.md};\n border-radius: 1px;\n`;\n\nexport const FolderGroupsSlot = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: ${tokens.spacing.sm};\n padding: 0 ${tokens.spacing.md} ${tokens.spacing.md};\n flex: 1;\n padding-bottom: 120px; /* Prevent overlap with bottom section (2 buttons @ 40px + 1 gap @ 8px + padding @ 32px) */\n\n /* Server/workspace icons styling */\n > * {\n width: 48px;\n height: 48px;\n border-radius: ${tokens.borderRadius.full};\n transition: border-radius ${tokens.transitions.fast};\n cursor: pointer;\n\n &:hover {\n border-radius: ${tokens.borderRadius.xl};\n }\n }\n\n /* Responsive adjustments */\n @media (max-width: ${tokens.breakpoints.tablet}px) {\n padding: 0 6px ${tokens.spacing.md} 96px; /* Reduce horizontal padding on mobile */\n }\n\n /* Mobile landscape: remove extra padding since BottomSection flows with content */\n @media (orientation: landscape) and (max-height: 500px) {\n padding-bottom: ${tokens.spacing.md};\n flex: 0 0 auto; /* Don't flex-grow, allow natural height */\n }\n`;\n\nexport const BottomSection = styled.div`\n position: absolute;\n bottom: 0; /* At the bottom of the nav container */\n left: 0;\n right: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: ${tokens.spacing.sm};\n padding: ${tokens.spacing.md} 0;\n background-color: ${tokens.colors.background.darker};\n\n @media (prefers-color-scheme: dark) {\n background-color: ${tokens.colors.background.darkest};\n }\n\n /* Mobile landscape: make bottom section flow with content instead of fixed */\n @media (orientation: landscape) and (max-height: 500px) {\n position: relative;\n bottom: auto;\n margin-top: auto; /* Push to bottom of flex container */\n flex-shrink: 0;\n }\n`;\n\nexport const BottomButton = styled.button`\n width: 40px;\n height: 40px;\n border-radius: ${tokens.borderRadius.full};\n border: none;\n background-color: transparent;\n color: white;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all ${tokens.transitions.normal};\n -webkit-tap-highlight-color: transparent;\n\n &:hover {\n opacity: 0.7;\n }\n\n &:active {\n transform: scale(0.95);\n opacity: 0.8;\n }\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n border-radius: ${tokens.borderRadius.full};\n }\n`;\n","import { useButton } from '@react-aria/button';\nimport type { ReactNode } from 'react';\nimport { useRef } from 'react';\nimport { Icon } from '../Icon';\nimport {\n BackButton,\n BottomButton,\n BottomSection,\n Container,\n FolderGroupsSlot,\n Separator,\n TopSection,\n} from './NavVertical.styles';\n\nexport interface NavVerticalProps {\n onBackClick?: () => void;\n onHomeClick?: () => void;\n onSettingsClick?: () => void;\n onLogoutClick?: () => void;\n folderGroupsSlot?: ReactNode;\n className?: string;\n 'aria-label'?: string;\n}\n\nexport function NavVertical({\n onBackClick,\n onHomeClick,\n onSettingsClick,\n onLogoutClick,\n folderGroupsSlot,\n className,\n 'aria-label': ariaLabel = 'Vertical navigation sidebar',\n}: NavVerticalProps) {\n const backButtonRef = useRef<HTMLButtonElement>(null);\n const homeButtonRef = useRef<HTMLButtonElement>(null);\n const settingsButtonRef = useRef<HTMLButtonElement>(null);\n const logoutButtonRef = useRef<HTMLButtonElement>(null);\n\n const { buttonProps: backButtonProps } = useButton(\n {\n onPress: onBackClick,\n 'aria-label': 'Go back',\n },\n backButtonRef\n );\n\n const { buttonProps: homeButtonProps } = useButton(\n {\n onPress: onHomeClick,\n 'aria-label': 'Home',\n },\n homeButtonRef\n );\n\n const { buttonProps: settingsButtonProps } = useButton(\n {\n onPress: onSettingsClick,\n 'aria-label': 'Settings',\n },\n settingsButtonRef\n );\n\n const { buttonProps: logoutButtonProps } = useButton(\n {\n onPress: onLogoutClick,\n 'aria-label': 'Logout',\n },\n logoutButtonRef\n );\n\n return (\n <Container className={className} role=\"navigation\" aria-label={ariaLabel}>\n <TopSection>\n {onBackClick ? (\n <BackButton {...backButtonProps} ref={backButtonRef}>\n <Icon name=\"side-bar-fill\" size={20} color=\"white\" />\n </BackButton>\n ) : onHomeClick ? (\n <BackButton {...homeButtonProps} ref={homeButtonRef}>\n <Icon name=\"side-bar-fill\" size={24} color=\"white\" />\n </BackButton>\n ) : null}\n </TopSection>\n\n <Separator />\n\n <FolderGroupsSlot>{folderGroupsSlot}</FolderGroupsSlot>\n\n {(onSettingsClick || onLogoutClick) && (\n <BottomSection>\n {onSettingsClick && (\n <BottomButton {...settingsButtonProps} ref={settingsButtonRef}>\n <Icon name=\"settings-3-line\" size={24} color=\"white\" />\n </BottomButton>\n )}\n {onLogoutClick && (\n <BottomButton {...logoutButtonProps} ref={logoutButtonRef}>\n <Icon name=\"logout-circle-r-line\" size={24} color=\"white\" />\n </BottomButton>\n )}\n </BottomSection>\n )}\n </Container>\n );\n}\n\nNavVertical.displayName = 'NavVertical';\n","import styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\nexport const Container = styled.div`\n position: relative;\n width: 100%;\n height: 100vh;\n background-color: ${tokens.colors.surface.subtle};\n overflow: hidden;\n\n /* Ensure content is clipped on mobile */\n @media (max-width: ${tokens.breakpoints.tablet}px) {\n overflow: hidden;\n position: relative;\n }\n`;\n\n/**\n * BackgroundPane - Renders behind MainPane, visible when MainPane slides away\n * Used for displaying content like post previews that appear behind the main content\n */\nexport const BackgroundPane = styled.div`\n position: absolute;\n top: 0;\n left: 72px; /* Width of vertical nav */\n right: 0;\n bottom: 52px; /* Height of horizontal nav */\n background-color: transparent;\n overflow: auto;\n scrollbar-gutter: stable; /* Reserve space for scrollbar to prevent layout shift */\n z-index: ${tokens.zIndex.base}; /* Lower than MainPane */\n /* Use CSS custom property for coordinated animations with NavVertical */\n transition: transform var(--layout-transition-duration, 0.3s) var(--layout-transition-easing, ease-out);\n\n /* Custom scrollbar styling */\n &::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n }\n\n &::-webkit-scrollbar-track {\n background: ${tokens.colors.scrollbar.track};\n }\n\n &::-webkit-scrollbar-thumb {\n background-color: ${tokens.colors.scrollbar.thumb};\n border-radius: ${tokens.borderRadius.sm};\n }\n\n &::-webkit-scrollbar-thumb:hover {\n background-color: ${tokens.colors.scrollbar.thumbHover};\n }\n\n /* Firefox scrollbar */\n scrollbar-width: thin;\n scrollbar-color: ${tokens.colors.scrollbar.thumb} transparent;\n\n /* Responsive adjustments */\n @media (max-width: ${tokens.breakpoints.tablet}px) {\n left: 60px; /* Smaller nav on mobile */\n }\n`;\n\nexport const MainPane = styled.main`\n position: absolute;\n top: 0;\n left: 72px; /* Width of vertical nav */\n right: 0;\n bottom: 52px; /* Height of horizontal nav */\n background-color: ${tokens.colors.surface.overlay};\n overflow: auto;\n scrollbar-gutter: stable; /* Reserve space for scrollbar to prevent layout shift */\n z-index: ${tokens.zIndex.base + 1}; /* Higher than BackgroundPane */\n /* Use CSS custom property for coordinated animations with NavVertical */\n transition: transform var(--layout-transition-duration, 0.3s) var(--layout-transition-easing, ease-out);\n\n /* Custom scrollbar styling */\n &::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n }\n\n &::-webkit-scrollbar-track {\n background: ${tokens.colors.scrollbar.track};\n }\n\n &::-webkit-scrollbar-thumb {\n background-color: ${tokens.colors.scrollbar.thumb};\n border-radius: ${tokens.borderRadius.sm};\n }\n\n &::-webkit-scrollbar-thumb:hover {\n background-color: ${tokens.colors.scrollbar.thumbHover};\n }\n\n /* Firefox scrollbar */\n scrollbar-width: thin;\n scrollbar-color: ${tokens.colors.scrollbar.thumb} transparent;\n\n /* Responsive adjustments */\n @media (max-width: ${tokens.breakpoints.tablet}px) {\n left: 60px; /* Smaller nav on mobile */\n }\n`;\n","import type { ReactNode } from 'react';\nimport { NavHorizontal } from '../NavHorizontal';\nimport { NavVertical } from '../NavVertical';\nimport { BackgroundPane, Container, MainPane } from './Layout.styles';\n\nexport interface LayoutProps {\n mainPaneSlot: ReactNode;\n /** Background content rendered behind MainPane, visible when MainPane slides away */\n backgroundSlot?: ReactNode;\n navVerticalSlot?: ReactNode;\n navHorizontalUserSlot?: ReactNode;\n navHorizontalActionsSlot?: ReactNode;\n onNavBackClick?: () => void;\n onNavHomeClick?: () => void;\n onNavSettingsClick?: () => void;\n onNavLogoutClick?: () => void;\n className?: string;\n}\n\nexport function Layout({\n mainPaneSlot,\n backgroundSlot,\n navVerticalSlot,\n navHorizontalUserSlot,\n navHorizontalActionsSlot,\n onNavBackClick,\n onNavHomeClick,\n onNavSettingsClick,\n onNavLogoutClick,\n className,\n}: LayoutProps) {\n return (\n <Container className={className}>\n <NavVertical\n folderGroupsSlot={navVerticalSlot}\n onBackClick={onNavBackClick}\n onHomeClick={onNavHomeClick}\n onSettingsClick={onNavSettingsClick}\n onLogoutClick={onNavLogoutClick}\n />\n {backgroundSlot && <BackgroundPane>{backgroundSlot}</BackgroundPane>}\n <MainPane>{mainPaneSlot}</MainPane>\n <NavHorizontal\n userStatusSlot={navHorizontalUserSlot}\n actionsSlot={navHorizontalActionsSlot}\n />\n </Container>\n );\n}\n\nLayout.displayName = 'Layout';\n","import styled, { css } from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\nexport const Container = styled.div`\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: ${tokens.spacing.xs};\n`;\n\ninterface ActionButtonProps {\n $isActive?: boolean;\n $size?: number;\n $isPrimary?: boolean;\n}\n\nexport const ActionButton = styled.button<ActionButtonProps>`\n width: ${({ $size = 32 }) => $size}px;\n height: ${({ $size = 32 }) => $size}px;\n min-width: ${({ $size = 32 }) => $size}px;\n min-height: ${({ $size = 32 }) => $size}px;\n border-radius: ${({ $isPrimary }) => ($isPrimary ? tokens.borderRadius.full : tokens.borderRadius.md)};\n border: none;\n background-color: ${({ $isPrimary }) => ($isPrimary ? tokens.colors.primary : 'transparent')};\n color: ${({ $isPrimary }) => ($isPrimary ? tokens.colors.text.primary : tokens.colors.text.secondary)};\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all ${tokens.transitions.fast};\n font-size: ${tokens.typography.fontSize.base};\n -webkit-tap-highlight-color: transparent;\n\n &:hover {\n background-color: ${({ $isPrimary }) => ($isPrimary ? tokens.colors.secondary : tokens.colors.surface.overlayHover)};\n color: ${({ $isPrimary }) => ($isPrimary ? tokens.colors.text.primary : tokens.colors.text.primary)};\n }\n\n &:active {\n transform: scale(0.95);\n opacity: 0.8;\n }\n\n ${({ $isActive, $isPrimary }) =>\n $isActive &&\n !$isPrimary &&\n css`\n background-color: ${tokens.colors.surface.overlay};\n color: ${tokens.colors.text.primary};\n `}\n\n ${({ $isActive, $isPrimary }) =>\n $isActive &&\n $isPrimary &&\n css`\n background-color: ${tokens.colors.secondary};\n color: ${tokens.colors.text.primary};\n `}\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n`;\n","import { useButton } from '@react-aria/button';\nimport type { ReactNode } from 'react';\nimport { useRef } from 'react';\nimport { tokens } from '../../../theme/tokens';\nimport { Icon } from '../Icon';\nimport { ActionButton, Container } from './ActionButtons.styles';\n\nexport interface ActionButtonsProps {\n onCalendarClick?: () => void;\n onChatClick?: () => void;\n isCalendarActive?: boolean;\n isChatActive?: boolean;\n className?: string;\n}\n\ninterface ButtonProps {\n icon: ReactNode;\n label: string;\n onClick?: () => void;\n isActive?: boolean;\n size?: number;\n isPrimary?: boolean;\n}\n\nfunction ActionButtonItem({ icon, label, onClick, isActive, size, isPrimary }: ButtonProps) {\n const ref = useRef<HTMLButtonElement>(null);\n const { buttonProps } = useButton(\n {\n onPress: onClick,\n 'aria-label': label,\n 'aria-pressed': isActive,\n },\n ref\n );\n\n return (\n <ActionButton\n {...buttonProps}\n ref={ref}\n $isActive={isActive}\n $size={size}\n $isPrimary={isPrimary}\n >\n {icon}\n </ActionButton>\n );\n}\n\nexport function ActionButtons({\n onCalendarClick,\n onChatClick,\n isCalendarActive = false,\n isChatActive = false,\n className,\n}: ActionButtonsProps) {\n return (\n <Container className={className}>\n <ActionButtonItem\n icon={<Icon name=\"calendar-fill\" size={16} color={tokens.colors.text.secondary} />}\n label=\"Calendar\"\n onClick={onCalendarClick}\n isActive={isCalendarActive}\n size={32}\n />\n <ActionButtonItem\n icon={<Icon name=\"chat-1-fill\" size={16} color={tokens.colors.text.secondary} />}\n label=\"Chat\"\n onClick={onChatClick}\n isActive={isChatActive}\n size={32}\n />\n </Container>\n );\n}\n\nActionButtons.displayName = 'ActionButtons';\n","import styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\n// Status colors using design tokens\nconst statusColors = {\n online: tokens.colors.status.online,\n idle: tokens.colors.status.idle,\n busy: tokens.colors.status.busy,\n offline: tokens.colors.status.offline,\n};\n\ninterface StatusIndicatorProps {\n $status: 'online' | 'idle' | 'busy' | 'offline';\n}\n\ninterface ContainerProps {\n $isDisabled?: boolean;\n}\n\nexport const Container = styled.button<ContainerProps>`\n display: grid;\n grid-template-columns: auto 1fr;\n align-items: center;\n gap: ${tokens.spacing.sm};\n padding: 6px;\n margin: 0; /* No margin - positioning handled by parent slot */\n border-radius: ${tokens.borderRadius.md};\n border: none;\n background: ${tokens.colors.surface.subtle};\n color: inherit;\n font-family: ${tokens.typography.fontFamily.primary};\n transition: background-color ${tokens.transitions.fast}, opacity ${tokens.transitions.fast};\n cursor: ${(props) => (props.$isDisabled ? 'default' : 'pointer')};\n opacity: ${(props) => (props.$isDisabled ? 0.7 : 1)};\n text-align: left;\n width: 100%; /* Fill available slot width */\n /* Remove mobile tap highlight that causes blue flash */\n -webkit-tap-highlight-color: transparent;\n\n &:hover:not(:disabled) {\n background-color: ${(props) => (props.$isDisabled ? tokens.colors.surface.subtle : tokens.colors.surface.overlay)};\n }\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: none;\n /* Subtle focus ring instead of bright color */\n box-shadow: inset 0 0 0 1px ${tokens.colors.border.default};\n }\n\n &:active:not(:disabled) {\n /* Subtle press feedback - no color flash */\n opacity: 0.9;\n }\n`;\n\nexport const IconWrapper = styled.div`\n position: relative;\n width: 36px;\n height: 36px;\n border-radius: ${tokens.borderRadius.md};\n background-color: ${tokens.colors.background.light};\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n`;\n\nexport const WorkflowInfo = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.xs};\n min-width: 0;\n`;\n\nexport const WorkflowName = styled.span`\n color: ${tokens.colors.text.primary};\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.semibold};\n line-height: ${tokens.typography.lineHeight.tight};\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nexport const WorkflowStatus = styled.span`\n color: ${tokens.colors.text.tertiary};\n font-size: ${tokens.typography.fontSize.xs};\n font-weight: ${tokens.typography.fontWeight.regular};\n line-height: ${tokens.typography.lineHeight.tight};\n text-transform: capitalize;\n`;\n\nexport const WorkflowSubtitle = styled.span`\n color: ${tokens.colors.text.tertiary};\n font-size: ${tokens.typography.fontSize.xs};\n font-weight: ${tokens.typography.fontWeight.regular};\n line-height: ${tokens.typography.lineHeight.tight};\n opacity: 0.7;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nexport const StatusIndicatorOuter = styled.span<StatusIndicatorProps>`\n position: absolute;\n bottom: -2px;\n right: -2px;\n width: 12px;\n height: 12px;\n border-radius: ${tokens.borderRadius.full};\n background-color: ${tokens.colors.background.darker};\n display: flex;\n align-items: center;\n justify-content: center;\n`;\n\nexport const StatusIndicatorInner = styled.span<StatusIndicatorProps>`\n width: 8px;\n height: 8px;\n border-radius: ${tokens.borderRadius.full};\n background-color: ${({ $status }) => statusColors[$status]};\n`;\n","import { useButton } from '@react-aria/button';\nimport type { AriaButtonProps } from '@react-types/button';\nimport type { ReactNode } from 'react';\nimport { useRef } from 'react';\nimport {\n Container,\n IconWrapper,\n StatusIndicatorInner,\n StatusIndicatorOuter,\n WorkflowInfo,\n WorkflowName,\n WorkflowStatus,\n WorkflowSubtitle,\n} from './WorkflowStatusCard.styles';\n\nexport interface WorkflowStatusCardProps extends Omit<AriaButtonProps, 'children'> {\n icon: ReactNode;\n workflowName: string;\n status?: 'online' | 'idle' | 'busy' | 'offline';\n statusText?: string;\n /** Optional subtitle shown below status (e.g., time triggered) */\n subtitle?: string;\n className?: string;\n onClick?: () => void;\n}\n\nexport function WorkflowStatusCard({\n icon,\n workflowName,\n status = 'offline',\n statusText,\n subtitle,\n className,\n onClick,\n onPress,\n isDisabled,\n ...ariaProps\n}: WorkflowStatusCardProps) {\n const displayStatus = statusText || status;\n const ref = useRef<HTMLButtonElement>(null);\n\n // Combine onClick with onPress for React Aria compatibility\n const handlePress = () => {\n if (onClick) onClick();\n if (onPress) onPress({} as never);\n };\n\n const { buttonProps } = useButton(\n {\n ...ariaProps,\n onPress: handlePress,\n isDisabled,\n 'aria-label': ariaProps['aria-label'] || `${workflowName} workflow, status: ${displayStatus}`,\n },\n ref\n );\n\n return (\n <Container {...buttonProps} ref={ref} className={className} $isDisabled={isDisabled}>\n <IconWrapper>\n {icon}\n <StatusIndicatorOuter $status={status}>\n <StatusIndicatorInner $status={status} />\n </StatusIndicatorOuter>\n </IconWrapper>\n <WorkflowInfo>\n <WorkflowName>{workflowName}</WorkflowName>\n <WorkflowStatus>{displayStatus}</WorkflowStatus>\n {subtitle && <WorkflowSubtitle>{subtitle}</WorkflowSubtitle>}\n </WorkflowInfo>\n </Container>\n );\n}\n\nWorkflowStatusCard.displayName = 'WorkflowStatusCard';\n","import styled from 'styled-components';\nimport { tokens } from '../../theme/tokens';\n\n/**\n * Main container for the notification card with dark theme\n */\nexport const DarkNotificationCardContainer = styled.div`\n display: flex;\n flex-direction: column;\n padding: ${tokens.spacing.xs};\n background: ${tokens.colors.surface.base};\n border-radius: ${tokens.borderRadius.md};\n gap: ${tokens.spacing.xs};\n flex: 1;\n min-width: 0;\n overflow: hidden;\n`;\n\n/**\n * Section header button (collapsible) - dark theme\n */\nexport const DarkSectionHeader = styled.button`\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n padding: ${tokens.spacing.xs} ${tokens.spacing.xs};\n border: none;\n background: transparent;\n font-family: ${tokens.typography.fontFamily.primary};\n font-size: 11px;\n font-weight: ${tokens.typography.fontWeight.semibold};\n color: ${tokens.colors.text.secondary};\n text-align: left;\n cursor: pointer;\n transition: all ${tokens.transitions.normal};\n\n &:hover {\n color: ${tokens.colors.text.primary};\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.primary};\n outline-offset: 2px;\n border-radius: ${tokens.borderRadius.sm};\n }\n`;\n\n/**\n * Chevron icon for section header with rotation animation - dark theme\n */\ninterface ChevronIconProps {\n $isExpanded: boolean;\n}\n\nexport const DarkChevronIcon = styled.span<ChevronIconProps>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n transition: transform ${tokens.transitions.normal};\n color: ${tokens.colors.text.tertiary};\n\n ${(props) =>\n props.$isExpanded\n ? `\n transform: rotate(0deg);\n `\n : `\n transform: rotate(-90deg);\n `}\n\n svg {\n width: 12px;\n height: 12px;\n }\n`;\n\n/**\n * Container for section content (list of notification items) - dark theme\n */\nexport const DarkSectionContent = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.xs};\n padding-left: ${tokens.spacing.xs};\n margin-top: ${tokens.spacing.xs};\n min-width: 0;\n overflow: hidden;\n`;\n\n/**\n * Individual notification item wrapper (button) - dark theme\n */\ninterface NotificationItemWrapperProps {\n $isSelected: boolean;\n $hasIcon: boolean;\n}\n\nexport const DarkNotificationItemWrapper = styled.button<NotificationItemWrapperProps>`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.xs};\n width: 100%;\n padding: ${tokens.spacing.xs} ${tokens.spacing.xs};\n border: none;\n cursor: pointer;\n text-align: left;\n transition: all ${tokens.transitions.normal};\n border-radius: ${tokens.borderRadius.sm};\n min-width: 0;\n overflow: hidden;\n\n /* Default state - transparent background */\n background-color: ${(props) => (props.$isSelected ? tokens.colors.primary : 'transparent')};\n\n /* Hover state */\n &:hover:not(:disabled) {\n background-color: ${(props) => (props.$isSelected ? tokens.colors.accent : tokens.colors.surface.overlay)};\n }\n\n /* Active state */\n &:active:not(:disabled) {\n transform: scale(0.99);\n }\n\n /* Focus state */\n &:focus-visible {\n outline: 2px solid ${tokens.colors.primary};\n outline-offset: 2px;\n }\n\n /* Disabled state */\n &:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n`;\n\n/**\n * Icon container for notification items - dark theme\n */\ninterface ItemIconProps {\n $iconColor?: string;\n $hasCustomIcon: boolean;\n}\n\nexport const DarkItemIcon = styled.span<ItemIconProps>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n flex-shrink: 0;\n border-radius: ${(props) => (props.$hasCustomIcon ? tokens.borderRadius.sm : tokens.borderRadius.full)};\n background-color: ${(props) => props.$iconColor || 'transparent'};\n color: ${(props) => (props.$hasCustomIcon ? tokens.colors.text.primary : tokens.colors.text.tertiary)};\n font-size: ${tokens.typography.fontSize.xs};\n\n /* Default circle icon styling */\n ${(props) =>\n !props.$hasCustomIcon &&\n `\n svg {\n width: 14px;\n height: 14px;\n }\n `}\n\n /* Custom icon (emoji or colored icon) styling */\n ${(props) =>\n props.$hasCustomIcon &&\n `\n padding: ${tokens.spacing.xs};\n `}\n`;\n\n/**\n * Text content for notification items - dark theme\n */\ninterface ItemTextProps {\n $isSelected: boolean;\n}\n\nexport const DarkItemText = styled.span<ItemTextProps>`\n flex: 1;\n font-family: ${tokens.typography.fontFamily.primary};\n font-size: 11px;\n font-weight: ${(props) => (props.$isSelected ? tokens.typography.fontWeight.medium : tokens.typography.fontWeight.regular)};\n color: ${(props) => (props.$isSelected ? tokens.colors.text.primary : tokens.colors.text.secondary)};\n line-height: ${tokens.typography.lineHeight.tight};\n word-wrap: break-word;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n`;\n\n/**\n * Three-dot menu button (shown on selected items) - dark theme\n */\nexport const DarkMenuButton = styled.button`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n padding: 0;\n border: none;\n border-radius: ${tokens.borderRadius.sm};\n background-color: transparent;\n color: ${tokens.colors.text.primary};\n cursor: pointer;\n transition: all ${tokens.transitions.normal};\n flex-shrink: 0;\n\n &:hover:not(:disabled) {\n background-color: ${tokens.colors.surface.overlayHover};\n }\n\n &:active:not(:disabled) {\n background-color: ${tokens.colors.surface.overlayActive};\n transform: scale(0.95);\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.primary};\n outline-offset: 2px;\n }\n\n svg {\n width: 14px;\n height: 14px;\n }\n`;\n\n/**\n * Timestamp text for action logs\n */\nexport const DarkTimestamp = styled.span`\n font-size: 10px;\n color: ${tokens.colors.text.tertiary};\n white-space: normal;\n word-wrap: break-word;\n text-align: right;\n max-width: 60px;\n`;\n","import { useButton } from '@react-aria/button';\nimport React, { type KeyboardEvent, useRef, useState } from 'react';\nimport type {\n NotificationCardProps,\n NotificationItem,\n NotificationSection,\n} from './NotificationCard';\nimport {\n DarkChevronIcon,\n DarkItemIcon,\n DarkItemText,\n DarkMenuButton,\n DarkNotificationCardContainer,\n DarkNotificationItemWrapper,\n DarkSectionContent,\n DarkSectionHeader,\n DarkTimestamp,\n} from './NotificationCard.dark.styles';\n\n/**\n * Dark-themed NotificationCard component for MainPaneMenu\n *\n * A dark variant of the NotificationCard component specifically designed\n * for use within the MainPaneMenu component. Features the same functionality\n * but with colors matching the dark theme.\n */\nexport const DarkNotificationCard: React.FC<NotificationCardProps> = ({\n sections,\n onItemClick,\n selectedItemId,\n onMenuClick,\n className,\n 'aria-label': ariaLabel = 'Action log history',\n}) => {\n // Track collapsed state for each section\n const [collapsedSections, setCollapsedSections] = useState<Record<string, boolean>>(() => {\n const initial: Record<string, boolean> = {};\n for (const section of sections) {\n initial[section.title] = section.isCollapsed || false;\n }\n return initial;\n });\n\n const toggleSection = (sectionTitle: string) => {\n setCollapsedSections((prev) => ({\n ...prev,\n [sectionTitle]: !prev[sectionTitle],\n }));\n };\n\n return (\n <DarkNotificationCardContainer className={className} aria-label={ariaLabel} role=\"region\">\n {sections.map((section) => (\n <DarkSectionComponent\n key={section.title}\n section={section}\n isCollapsed={collapsedSections[section.title] ?? false}\n onToggle={() => toggleSection(section.title)}\n onItemClick={onItemClick}\n selectedItemId={selectedItemId}\n onMenuClick={onMenuClick}\n />\n ))}\n </DarkNotificationCardContainer>\n );\n};\n\n/**\n * Individual section component with collapsible header - dark theme\n */\ninterface DarkSectionComponentProps {\n section: NotificationSection;\n isCollapsed: boolean;\n onToggle: () => void;\n onItemClick?: (item: NotificationItem) => void;\n selectedItemId?: string;\n onMenuClick?: (item: NotificationItem) => void;\n}\n\nconst DarkSectionComponent: React.FC<DarkSectionComponentProps> = ({\n section,\n isCollapsed,\n onToggle,\n onItemClick,\n selectedItemId,\n onMenuClick,\n}) => {\n const headerRef = useRef<HTMLButtonElement>(null);\n const { buttonProps } = useButton(\n {\n onPress: onToggle,\n 'aria-label': `${section.title} section, ${isCollapsed ? 'collapsed' : 'expanded'}`,\n 'aria-expanded': !isCollapsed,\n },\n headerRef\n );\n\n return (\n <section aria-label={`${section.title} actions`}>\n <DarkSectionHeader {...buttonProps} ref={headerRef}>\n {section.title}\n <DarkChevronIcon $isExpanded={!isCollapsed} aria-hidden=\"true\">\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n role=\"img\"\n aria-label=\"Expand/collapse icon\"\n >\n <title>Expand/collapse icon</title>\n <path\n d=\"M4 5L7 8L10 5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </DarkChevronIcon>\n </DarkSectionHeader>\n\n {!isCollapsed && (\n <DarkSectionContent role=\"list\">\n {section.items.map((item) => (\n <DarkNotificationItemComponent\n key={item.id}\n item={item}\n isSelected={item.id === selectedItemId}\n onItemClick={onItemClick}\n onMenuClick={onMenuClick}\n />\n ))}\n </DarkSectionContent>\n )}\n </section>\n );\n};\n\n/**\n * Individual notification item component - dark theme\n */\ninterface DarkNotificationItemComponentProps {\n item: NotificationItem & { timestamp?: string };\n isSelected: boolean;\n onItemClick?: (item: NotificationItem) => void;\n onMenuClick?: (item: NotificationItem) => void;\n}\n\nconst DarkNotificationItemComponent: React.FC<DarkNotificationItemComponentProps> = ({\n item,\n isSelected,\n onItemClick,\n onMenuClick,\n}) => {\n const itemRef = useRef<HTMLButtonElement>(null);\n const menuRef = useRef<HTMLButtonElement>(null);\n\n const { buttonProps: itemButtonProps } = useButton(\n {\n onPress: () => onItemClick?.(item),\n 'aria-label': `Action: ${item.text}`,\n 'aria-current': isSelected ? 'true' : undefined,\n },\n itemRef\n );\n\n const { buttonProps: menuButtonProps } = useButton(\n {\n onPress: () => onMenuClick?.(item),\n 'aria-label': `Options for ${item.text}`,\n },\n menuRef\n );\n\n // Handle keyboard navigation between item and menu button\n const handleItemKeyDown = (e: KeyboardEvent<HTMLButtonElement>) => {\n if (isSelected && e.key === 'Tab' && !e.shiftKey) {\n // Allow natural tab to menu button\n return;\n }\n };\n\n return (\n <DarkNotificationItemWrapper\n {...itemButtonProps}\n ref={itemRef}\n $isSelected={isSelected}\n $hasIcon={!!item.icon}\n role=\"listitem\"\n onKeyDown={handleItemKeyDown}\n >\n <DarkItemIcon $iconColor={item.iconColor} $hasCustomIcon={!!item.icon}>\n {item.icon || (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <circle cx=\"8\" cy=\"8\" r=\"6\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n </svg>\n )}\n </DarkItemIcon>\n <DarkItemText $isSelected={isSelected}>{item.text}</DarkItemText>\n {item.timestamp && <DarkTimestamp>{item.timestamp}</DarkTimestamp>}\n {isSelected && onMenuClick && (\n <DarkMenuButton\n {...menuButtonProps}\n ref={menuRef}\n onClick={(e) => {\n e.stopPropagation();\n menuButtonProps.onClick?.(e);\n }}\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <title>More options</title>\n <circle cx=\"8\" cy=\"3\" r=\"1\" fill=\"currentColor\" />\n <circle cx=\"8\" cy=\"8\" r=\"1\" fill=\"currentColor\" />\n <circle cx=\"8\" cy=\"13\" r=\"1\" fill=\"currentColor\" />\n </svg>\n </DarkMenuButton>\n )}\n </DarkNotificationItemWrapper>\n );\n};\n\nDarkNotificationCard.displayName = 'DarkNotificationCard';\n","import { Button, Disclosure, DisclosureGroup, DisclosurePanel } from 'react-aria-components';\nimport styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\nexport const Container = styled.div`\n width: 100%;\n height: 100%;\n background-color: transparent;\n color: ${tokens.colors.text.primary};\n display: flex;\n flex-direction: column;\n font-family: ${tokens.typography.fontFamily.primary};\n overflow: hidden; // Prevent content from escaping container bounds\n`;\n\nexport const TabListWrapper = styled.div`\n display: flex;\n border-bottom: 2px solid ${tokens.colors.border.default};\n background-color: ${tokens.colors.surface.subtle};\n padding: 0 ${tokens.spacing.md};\n gap: ${tokens.spacing.sm};\n overflow-x: auto;\n scrollbar-width: none;\n -ms-overflow-style: none;\n flex-shrink: 0; // Prevent shrinking when content overflows\n\n &::-webkit-scrollbar {\n display: none;\n }\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n padding: 0 ${tokens.spacing.sm};\n gap: ${tokens.spacing.xs};\n }\n`;\n\nexport const TabButton = styled.button<{ $isSelected?: boolean }>`\n padding: ${tokens.spacing.md} ${tokens.spacing.lg};\n background: none;\n border: none;\n color: ${(props) => (props.$isSelected ? tokens.colors.text.primary : tokens.colors.text.secondary)};\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.semibold};\n cursor: pointer;\n position: relative;\n transition: color ${tokens.transitions.normal};\n white-space: nowrap;\n flex-shrink: 0;\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n font-size: ${tokens.typography.fontSize.xs};\n }\n\n &:hover {\n color: ${tokens.colors.text.primary};\n }\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: -2px;\n border-radius: ${tokens.borderRadius.sm};\n }\n\n ${(props) =>\n props.$isSelected &&\n `\n &::after {\n content: '';\n position: absolute;\n bottom: -2px;\n left: 0;\n right: 0;\n height: 2px;\n background-color: ${tokens.colors.primary};\n }\n `}\n`;\n\nexport const TabPanelWrapper = styled.div`\n flex: 1;\n padding: ${tokens.spacing.lg};\n overflow-y: auto;\n overflow-x: hidden; // Prevent horizontal overflow\n scrollbar-gutter: stable; // Always reserve space for scrollbar to prevent width jump\n background-color: ${tokens.colors.background.dark};\n min-height: 0; // Enable proper flex shrinking and scrolling\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n padding: ${tokens.spacing.md};\n }\n\n @media (max-width: 480px) {\n padding: ${tokens.spacing.md};\n }\n\n /* Custom scrollbar */\n scrollbar-width: thin;\n scrollbar-color: ${tokens.colors.scrollbar.thumb} ${tokens.colors.scrollbar.track};\n\n &::-webkit-scrollbar {\n width: 8px;\n }\n\n &::-webkit-scrollbar-track {\n background: ${tokens.colors.background.dark};\n }\n\n &::-webkit-scrollbar-thumb {\n background: ${tokens.colors.background.light};\n border-radius: ${tokens.borderRadius.sm};\n }\n\n &::-webkit-scrollbar-thumb:hover {\n background: ${tokens.colors.scrollbar.thumbHover};\n }\n`;\n\n// Runs tab container\nexport const RunsContainer = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.lg};\n width: 100%;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n gap: ${tokens.spacing.md};\n }\n`;\n\n// Browse Automations button\nexport const BrowseButton = styled.button`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.md};\n width: 100%;\n padding: ${tokens.spacing.md} ${tokens.spacing.md};\n background-color: ${tokens.colors.surface.overlay};\n border: 1px solid ${tokens.colors.border.default};\n border-radius: ${tokens.borderRadius.md};\n color: ${tokens.colors.text.secondary};\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.medium};\n cursor: pointer;\n transition: all ${tokens.transitions.normal};\n white-space: nowrap;\n overflow: hidden;\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n padding: ${tokens.spacing.sm} ${tokens.spacing.md};\n font-size: ${tokens.typography.fontSize.sm};\n gap: ${tokens.spacing.sm};\n }\n\n &:hover {\n background-color: ${tokens.colors.surface.overlayHover};\n color: ${tokens.colors.text.primary};\n }\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n`;\n\n// DisclosureGroup styles\nexport const StyledDisclosureGroup = styled(DisclosureGroup)`\n display: flex;\n flex-direction: column;\n gap: ${tokens.spacing.sm};\n width: 100%;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n`;\n\n// Category Disclosure (Information, Community)\nexport const CategoryDisclosure = styled(Disclosure)`\n background-color: transparent;\n display: flex;\n flex-direction: column;\n width: 100%;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n\n &[data-expanded] {\n /* Styles when expanded */\n }\n\n &[data-disabled] {\n opacity: 0.5;\n cursor: not-allowed;\n }\n`;\n\n// Category Header (trigger button)\nexport const CategoryHeader = styled(Button)`\n width: 100%;\n padding: ${tokens.spacing.xs} 0;\n background: none;\n border: none;\n color: ${tokens.colors.text.secondary};\n display: flex;\n justify-content: space-between;\n align-items: center;\n cursor: pointer;\n transition: color ${tokens.transitions.normal};\n font-size: ${tokens.typography.fontSize.xs};\n font-weight: ${tokens.typography.fontWeight.semibold};\n text-transform: uppercase;\n letter-spacing: 0.5px;\n\n &:hover {\n color: ${tokens.colors.text.primary};\n }\n\n &:focus {\n outline: none;\n }\n\n &[data-focus-visible] {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n border-radius: ${tokens.borderRadius.sm};\n }\n`;\n\n// Category Title with icon\nexport const CategoryTitle = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.sm};\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n gap: ${tokens.spacing.xs};\n }\n`;\n\n// Category Icon\nexport const CategoryIcon = styled.img`\n width: 16px;\n height: 16px;\n opacity: 0.6;\n flex-shrink: 0;\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n width: 14px;\n height: 14px;\n }\n`;\n\n// Hashtag Icon\nexport const HashtagIcon = styled.img`\n width: 14px;\n height: 14px;\n opacity: 0.6;\n flex-shrink: 0;\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n width: 12px;\n height: 12px;\n }\n`;\n\n// Chevron icon\nexport const ChevronIcon = styled.div<{ $isExpanded: boolean }>`\n display: flex;\n align-items: center;\n transition: transform ${tokens.transitions.normal};\n transform: ${(props) => (props.$isExpanded ? 'rotate(0deg)' : 'rotate(-90deg)')};\n flex-shrink: 0;\n margin-left: ${tokens.spacing.xs};\n\n img {\n width: 16px;\n height: 16px;\n opacity: 0.6;\n }\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n img {\n width: 14px;\n height: 14px;\n }\n }\n`;\n\n// Category content panel\nexport const CategoryDisclosurePanel = styled(DisclosurePanel)`\n display: flex;\n flex-direction: column;\n gap: 2px;\n padding-left: ${tokens.spacing.xs};\n width: 100%;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n padding-left: ${tokens.spacing.xs};\n }\n\n &[data-entering] {\n animation: slideDown ${tokens.transitions.normal};\n }\n\n @keyframes slideDown {\n from {\n opacity: 0;\n transform: translateY(-${tokens.spacing.sm});\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n`;\n\n// Item container (announcements, server-rules, etc.)\nexport const ItemContainer = styled.div`\n display: flex;\n align-items: center;\n gap: ${tokens.spacing.sm};\n padding: ${tokens.spacing.sm} ${tokens.spacing.sm}; // Increased vertical padding from 4px to 8px for better breathing room\n border-radius: ${tokens.borderRadius.sm};\n cursor: pointer;\n transition: background-color ${tokens.transitions.fast};\n min-width: 0;\n overflow: hidden;\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n gap: ${tokens.spacing.xs};\n padding: ${tokens.spacing.sm} ${tokens.spacing.xs}; // Increased vertical padding from 4px to 8px for mobile\n }\n\n &:hover {\n background-color: ${tokens.colors.surface.overlayHover};\n }\n`;\n\n// Nested item disclosure (for individual items)\nexport const ItemDisclosure = styled(Disclosure)`\n background-color: transparent;\n margin-bottom: ${tokens.spacing.xs};\n display: flex;\n flex-direction: column;\n width: 100%;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n\n &[data-expanded] {\n background-color: ${tokens.colors.surface.overlay};\n border-radius: ${tokens.borderRadius.md};\n }\n`;\n\n// Item header for nested disclosure\nexport const ItemHeader = styled(Button)<{ $isExpanded: boolean }>`\n width: 100%;\n padding: 0;\n background: none;\n border: none;\n cursor: pointer;\n transition: all ${tokens.transitions.fast};\n\n &:focus {\n outline: none;\n }\n\n &[data-focus-visible] {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n border-radius: ${tokens.borderRadius.sm};\n }\n`;\n\n// Item disclosure panel for logs\nexport const ItemDisclosurePanel = styled(DisclosurePanel)`\n padding: ${tokens.spacing.xs};\n background-color: ${tokens.colors.overlay};\n border-radius: 0 0 ${tokens.borderRadius.md} ${tokens.borderRadius.md};\n margin-top: -${tokens.spacing.xs};\n display: flex;\n flex-direction: column;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n padding: ${tokens.spacing.xs};\n }\n\n &[data-entering] {\n animation: slideDown ${tokens.transitions.normal};\n }\n\n @keyframes slideDown {\n from {\n opacity: 0;\n transform: translateY(-${tokens.spacing.sm});\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n`;\n\n// Item icon\nexport const ItemIcon = styled.img`\n width: 20px;\n height: 20px;\n opacity: 0.6;\n flex-shrink: 0;\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n width: 18px;\n height: 18px;\n }\n`;\n\n// Item name\nexport const ItemName = styled.span<{ $dimmed?: boolean }>`\n flex: 1;\n font-size: ${tokens.typography.fontSize.sm};\n color: ${(props) => (props.$dimmed ? tokens.colors.text.tertiary : tokens.colors.text.secondary)};\n font-weight: ${(props) => (props.$dimmed ? tokens.typography.fontWeight.regular : tokens.typography.fontWeight.medium)};\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n min-width: 0;\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n font-size: ${tokens.typography.fontSize.sm};\n }\n\n ${ItemContainer}:hover & {\n color: ${(props) => (props.$dimmed ? tokens.colors.text.secondary : tokens.colors.text.primary)};\n }\n`;\n\n// Run status indicator\nexport const RunStatus = styled.span<{ $status: 'completed' | 'running' | 'failed' }>`\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.medium};\n flex-shrink: 0;\n margin-left: auto;\n\n /* Color for SVG icons - using token colors for status */\n img {\n filter: ${(props) => {\n switch (props.$status) {\n case 'completed':\n return 'brightness(0) saturate(100%) invert(73%) sepia(34%) saturate(547%) hue-rotate(99deg) brightness(91%) contrast(89%)'; // success green\n case 'running':\n return 'brightness(0) saturate(100%) invert(78%) sepia(60%) saturate(1839%) hue-rotate(360deg) brightness(100%) contrast(94%)'; // warning yellow\n case 'failed':\n return 'brightness(0) saturate(100%) invert(34%) sepia(94%) saturate(3446%) hue-rotate(343deg) brightness(94%) contrast(94%)'; // error red\n default:\n return 'none';\n }\n }};\n }\n\n @media (max-width: ${tokens.breakpoints.mobile}px) {\n font-size: ${tokens.typography.fontSize.xs};\n }\n`;\n\n// Old Disclosure styles (kept for backward compatibility)\nexport const DisclosureContainer = styled.div`\n margin-bottom: ${tokens.spacing.md};\n border-radius: ${tokens.borderRadius.lg};\n background-color: ${tokens.colors.surface.overlay};\n overflow: hidden;\n`;\n\nexport const DisclosureHeader = styled.button`\n width: 100%;\n padding: ${tokens.spacing.md};\n background: ${tokens.colors.surface.overlay};\n border: none;\n color: ${tokens.colors.text.primary};\n display: flex;\n justify-content: space-between;\n align-items: center;\n cursor: pointer;\n transition: background-color ${tokens.transitions.normal};\n text-align: left;\n\n &:hover {\n background-color: ${tokens.colors.surface.overlayHover};\n }\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: -2px;\n }\n\n > div {\n flex: 1;\n }\n\n strong {\n display: block;\n font-size: ${tokens.typography.fontSize.sm};\n margin-bottom: ${tokens.spacing.xs};\n }\n`;\n\nexport const DisclosureIcon = styled.span<{ $isExpanded: boolean }>`\n font-size: ${tokens.typography.fontSize.xs};\n color: ${tokens.colors.text.secondary};\n transition: transform ${tokens.transitions.normal};\n transform: ${(props) => (props.$isExpanded ? 'rotate(180deg)' : 'rotate(0deg)')};\n`;\n\nexport const DisclosureContent = styled.div`\n padding: ${tokens.spacing.md};\n padding-top: 0;\n background-color: ${tokens.colors.overlay};\n color: ${tokens.colors.text.secondary};\n font-size: ${tokens.typography.fontSize.sm};\n line-height: ${tokens.typography.lineHeight.relaxed};\n animation: slideDown ${tokens.transitions.normal};\n\n @keyframes slideDown {\n from {\n opacity: 0;\n transform: translateY(-${tokens.spacing.sm});\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n`;\n\n// Meter (Usage tab) styles\nexport const MeterContainer = styled.div`\n max-width: 600px;\n margin: 0 auto;\n`;\n\nexport const MeterLabel = styled.div`\n font-size: ${tokens.typography.fontSize.base};\n font-weight: ${tokens.typography.fontWeight.semibold};\n margin-bottom: ${tokens.spacing.md};\n color: ${tokens.colors.text.primary};\n`;\n\nexport const MeterBar = styled.div`\n width: 100%;\n height: 24px;\n background-color: ${tokens.colors.background.darker};\n border-radius: ${tokens.borderRadius.lg};\n overflow: hidden;\n position: relative;\n margin-bottom: ${tokens.spacing.md};\n`;\n\nexport const MeterFill = styled.div<{ $percentage: number; $color: string }>`\n height: 100%;\n width: ${(props) => props.$percentage}%;\n background: linear-gradient(90deg, ${(props) => props.$color}dd, ${(props) => props.$color});\n border-radius: ${tokens.borderRadius.lg};\n transition: width ${tokens.transitions.slow}, background ${tokens.transitions.slow};\n position: relative;\n\n &::after {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: linear-gradient(90deg, transparent, ${tokens.colors.surface.overlay}, transparent);\n animation: shimmer 2s infinite;\n }\n\n @keyframes shimmer {\n 0% {\n transform: translateX(-100%);\n }\n 100% {\n transform: translateX(100%);\n }\n }\n`;\n\nexport const MeterStats = styled.div`\n font-size: ${tokens.typography.fontSize.sm};\n color: ${tokens.colors.text.secondary};\n text-align: center;\n\n small {\n font-size: ${tokens.typography.fontSize.xs};\n color: ${tokens.colors.text.secondary};\n opacity: 0.8;\n }\n`;\n\n// Connections tab styles\nexport const ConnectionsContainer = styled.div`\n max-width: 500px;\n margin: 0 auto;\n text-align: center;\n`;\n\nexport const ConnectionDescription = styled.p`\n font-size: ${tokens.typography.fontSize.sm};\n color: ${tokens.colors.text.secondary};\n line-height: ${tokens.typography.lineHeight.relaxed};\n margin-bottom: ${tokens.spacing.lg};\n`;\n\nexport const GoogleButton = styled.button<{ $isConnected?: boolean }>`\n width: 100%;\n padding: ${tokens.spacing.md} ${tokens.spacing.lg};\n font-size: ${tokens.typography.fontSize.sm};\n font-weight: ${tokens.typography.fontWeight.semibold};\n color: ${(props) => (props.$isConnected ? tokens.colors.text.primary : tokens.colors.text.primary)};\n background: ${(props) => (props.$isConnected ? tokens.colors.background.light : `linear-gradient(135deg, ${tokens.colors.platform.facebook}, ${tokens.colors.platform.whatsapp})`)};\n border: none;\n border-radius: ${tokens.borderRadius.md};\n cursor: pointer;\n transition: all ${tokens.transitions.normal};\n display: flex;\n align-items: center;\n justify-content: center;\n gap: ${tokens.spacing.sm};\n\n &:hover {\n transform: translateY(-2px);\n box-shadow: ${tokens.shadows.lg};\n }\n\n &:active {\n transform: translateY(0);\n }\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n\n ${(props) =>\n props.$isConnected &&\n `\n &:hover {\n background-color: ${tokens.colors.error};\n box-shadow: ${tokens.shadows.lg};\n }\n `}\n`;\n","import { useButton } from '@react-aria/button';\nimport { useMeter } from '@react-aria/meter';\nimport { useTab, useTabList, useTabPanel } from '@react-aria/tabs';\nimport { Item } from '@react-stately/collections';\nimport { useTabListState } from '@react-stately/tabs';\nimport { useRef, useState } from 'react';\nimport type { Key } from 'react-aria-components';\nimport { Heading } from 'react-aria-components';\nimport { tokens } from '../../../theme/tokens';\nimport { DarkNotificationCard } from '../../NotificationCard/DarkNotificationCard';\nimport type { NotificationSection } from '../../NotificationCard/NotificationCard';\nimport {\n CategoryDisclosure,\n CategoryDisclosurePanel,\n CategoryHeader,\n CategoryTitle,\n ChevronIcon,\n ConnectionDescription,\n ConnectionsContainer,\n Container,\n GoogleButton,\n HashtagIcon,\n ItemContainer,\n ItemDisclosure,\n ItemDisclosurePanel,\n ItemHeader,\n ItemIcon,\n ItemName,\n MeterBar,\n MeterContainer,\n MeterFill,\n MeterLabel,\n MeterStats,\n RunStatus,\n RunsContainer,\n StyledDisclosureGroup,\n TabButton,\n TabListWrapper,\n TabPanelWrapper,\n} from './PaneMenus.styles';\n\n// Icons from assets/icon-set\nconst ICONS = {\n hashtag: '/assets/icon-set/Icon-hashtag.svg',\n // State icons - left side\n loader: '/assets/icon-set/Icon-loader-2-line.svg', // Pending\n radioButton: '/assets/icon-set/Icon-radio-button-line.svg', // Running\n shieldCheck: '/assets/icon-set/Icon-shield-check-fill.svg', // Completed\n shieldCross: '/assets/icon-set/Icon-shield-cross-fill.svg', // Failed\n // Status indicator icons - right side (before chevron)\n checkFill: '/assets/icon-set/Icon-check-fill.svg', // Completed status\n hourglass: '/assets/icon-set/Icon-hourglass-line.svg', // Running status\n closeFill: '/assets/icon-set/Icon-close-fill.svg', // Failed status\n // Legacy icons (kept for backward compatibility)\n bell: '/assets/icon-set/Icon-bell-fill.svg',\n file: '/assets/icon-set/Icon-file-3-fill.svg',\n link: '/assets/icon-set/Icon-external-link-fill.svg',\n chat: '/assets/icon-set/Icon-chat-1-fill.svg',\n logout: '/assets/icon-set/logout-box-fill.svg',\n community: '/assets/icon-set/Icon-community-fill.svg',\n cpu: '/assets/icon-set/Icon-cpu-fill.svg',\n chevronDown: '/assets/icon-set/Icon-arrow-down-s-fill.svg',\n warning: '/assets/icon-set/Icon-error-warning-fill.svg',\n};\n\nexport interface ActionLog {\n id: string;\n text: string;\n timestamp: string;\n icon?: React.ReactNode;\n iconColor?: string;\n}\n\nexport interface RunItem {\n id: string;\n name: string;\n status: 'completed' | 'running' | 'failed';\n details: string;\n /** @deprecated Use 'executing' | 'completed' | 'failed' instead. 'scheduled' maps to 'executing', 'issues' maps to 'failed' */\n category: 'scheduled' | 'completed' | 'issues' | 'executing' | 'failed';\n /** Workflow name for grouping executions under their parent workflow */\n workflowName?: string;\n /** Workflow ID for grouping */\n workflowId?: string;\n icon?:\n | 'loader'\n | 'radioButton'\n | 'shieldCheck'\n | 'shieldCross'\n | 'bell'\n | 'file'\n | 'link'\n | 'chat'\n | 'warning';\n logs?: ActionLog[];\n /** Whether logs are currently being loaded */\n logsLoading?: boolean;\n customContent?: React.ReactNode;\n}\n\nexport interface OAuthConnectionData {\n id: string;\n provider: string;\n connected: boolean;\n displayName?: string;\n scopes?: string[];\n}\n\nexport interface PaneMenusProps {\n activeTab?: 'workflows' | 'runs' | 'usage' | 'connections';\n onTabChange?: (tab: 'workflows' | 'runs' | 'usage' | 'connections') => void;\n\n // Runs tab props\n runs?: RunItem[];\n onRunSelect?: (runId: string) => void;\n\n // Usage tab props\n currentUsage?: number;\n maxUsage?: number;\n\n // Connections tab props\n isGoogleConnected?: boolean;\n onGoogleConnect?: () => void;\n onGoogleDisconnect?: () => void;\n\n // New: Real OAuth connection data support\n oauthConnections?: OAuthConnectionData[];\n onOAuthConnect?: (provider: string) => void;\n onOAuthDisconnect?: (connectionId: string) => void;\n isOAuthConnecting?: boolean;\n isOAuthLoading?: boolean;\n\n // Slot for custom connections tab content (replaces default ConnectionsTabContent)\n connectionsSlot?: React.ReactNode;\n\n // Slot for custom workflows tab content (adds new Workflows tab)\n workflowsSlot?: React.ReactNode;\n\n // Slot for custom usage tab content (replaces default UsageTabContent)\n usageSlot?: React.ReactNode;\n}\n\n// Individual item with nested disclosure for logs\nfunction ItemWithLogs({\n run,\n onRunSelect,\n}: {\n run: RunItem;\n onRunSelect?: (runId: string) => void;\n}) {\n const [isExpanded, setIsExpanded] = useState(false);\n\n // Format logs into NotificationSection format\n const logSections: NotificationSection[] = run.logs\n ? [\n {\n title: 'Action History',\n items: run.logs.map((log) => ({\n id: log.id,\n text: log.text,\n icon: log.icon,\n iconColor: log.iconColor,\n timestamp: log.timestamp,\n })),\n },\n ]\n : [];\n\n const handleClick = () => {\n setIsExpanded(!isExpanded);\n onRunSelect?.(run.id);\n };\n\n return (\n <ItemDisclosure id={run.id} data-testid={`run-item-${run.id}`}>\n <ItemHeader slot=\"trigger\" onClick={handleClick} $isExpanded={isExpanded}>\n <ItemContainer as=\"div\">\n <ItemIcon src={ICONS[run.icon || 'loader']} alt=\"\" data-testid={`run-icon-${run.status}`} />\n <ItemName data-testid=\"run-name\">{run.name}</ItemName>\n <RunStatus $status={run.status} data-testid={`run-status-${run.status}`}>\n {run.status === 'completed' && (\n <img src={ICONS.checkFill} alt=\"\" style={{ width: '16px', height: '16px' }} />\n )}\n {run.status === 'running' && (\n <img src={ICONS.hourglass} alt=\"\" style={{ width: '16px', height: '16px' }} />\n )}\n {run.status === 'failed' && (\n <img src={ICONS.closeFill} alt=\"\" style={{ width: '16px', height: '16px' }} />\n )}\n </RunStatus>\n <ChevronIcon $isExpanded={isExpanded}>\n <img src={ICONS.chevronDown} alt=\"\" />\n </ChevronIcon>\n </ItemContainer>\n </ItemHeader>\n {isExpanded && (\n <ItemDisclosurePanel>\n {run.customContent ? (\n // Render custom content directly\n <div style={{ padding: '16px' }}>{run.customContent}</div>\n ) : run.logsLoading ? (\n // Show loading spinner while logs are being fetched\n <div style={{ display: 'flex', justifyContent: 'center', padding: '16px' }}>\n <div\n style={{\n width: '24px',\n height: '24px',\n border: `2px solid ${tokens.colors.border.default}`,\n borderTopColor: tokens.colors.primary,\n borderRadius: '50%',\n animation: 'spin 1s linear infinite',\n }}\n />\n <style>{`@keyframes spin { to { transform: rotate(360deg); } }`}</style>\n </div>\n ) : run.logs && run.logs.length > 0 ? (\n <DarkNotificationCard sections={logSections} />\n ) : (\n <div style={{ color: tokens.colors.text.tertiary, fontSize: '13px', padding: '8px' }}>\n No action logs available\n </div>\n )}\n </ItemDisclosurePanel>\n )}\n </ItemDisclosure>\n );\n}\n\n// Helper to normalize category (backward compatibility)\nfunction normalizeCategory(category: RunItem['category']): 'executing' | 'completed' | 'failed' {\n if (category === 'scheduled') return 'executing';\n if (category === 'issues') return 'failed';\n return category as 'executing' | 'completed' | 'failed';\n}\n\n// Group runs by workflow name within a category\ninterface WorkflowGroup {\n workflowName: string;\n workflowId: string;\n runs: RunItem[];\n}\n\nfunction groupRunsByWorkflow(runs: RunItem[]): WorkflowGroup[] {\n const groups = new Map<string, WorkflowGroup>();\n\n for (const run of runs) {\n // Always use workflowId as the primary grouping key\n // Fallback to a normalized workflowName only if workflowId is missing\n const groupKey = run.workflowId || run.workflowName || 'ungrouped';\n\n if (!groups.has(groupKey)) {\n // Use the first workflowName encountered for this workflowId\n // This prevents duplicate groups when workflowName varies slightly\n const displayName = run.workflowName || run.name;\n\n groups.set(groupKey, {\n workflowId: groupKey,\n workflowName: displayName,\n runs: [],\n });\n }\n groups.get(groupKey)!.runs.push(run);\n }\n\n return Array.from(groups.values());\n}\n\n// Workflow group component with nested executions\nfunction WorkflowGroupItem({\n group,\n onRunSelect,\n expandedKeys,\n}: {\n group: WorkflowGroup;\n onRunSelect?: (runId: string) => void;\n expandedKeys: Set<Key>;\n}) {\n const groupId = `workflow-${group.workflowId}`;\n const isExpanded = expandedKeys.has(groupId);\n\n return (\n <CategoryDisclosure id={groupId}>\n <Heading level={4}>\n <CategoryHeader slot=\"trigger\" style={{ paddingLeft: '8px' }}>\n <CategoryTitle>\n <span style={{ fontSize: tokens.typography.fontSize.sm, fontWeight: 400 }}>{group.workflowName}</span>\n <span style={{ fontSize: tokens.typography.fontSize.xs, color: tokens.colors.text.tertiary, marginLeft: '8px' }}>\n ({group.runs.length})\n </span>\n </CategoryTitle>\n <ChevronIcon $isExpanded={isExpanded}>\n <img src={ICONS.chevronDown} alt=\"\" />\n </ChevronIcon>\n </CategoryHeader>\n </Heading>\n <CategoryDisclosurePanel>\n {group.runs.map((run) => (\n <ItemWithLogs key={run.id} run={run} onRunSelect={onRunSelect} />\n ))}\n </CategoryDisclosurePanel>\n </CategoryDisclosure>\n );\n}\n\n// Helper to render grouped runs with proper nesting\nfunction GroupedRunsRenderer({\n groups,\n onRunSelect,\n expandedKeys,\n setExpandedKeys,\n ariaLabel,\n emptyMessage,\n}: {\n groups: WorkflowGroup[];\n onRunSelect?: (runId: string) => void;\n expandedKeys: Set<Key>;\n setExpandedKeys: (keys: Set<Key>) => void;\n ariaLabel: string;\n emptyMessage: string;\n}) {\n if (groups.length === 0) {\n return (\n <ItemContainer>\n <ItemName $dimmed>{emptyMessage}</ItemName>\n </ItemContainer>\n );\n }\n\n // If single workflow with single execution, show directly\n const firstGroup = groups[0];\n if (groups.length === 1 && firstGroup && firstGroup.runs.length === 1) {\n return (\n <>\n {firstGroup.runs.map((run) => (\n <ItemWithLogs key={run.id} run={run} onRunSelect={onRunSelect} />\n ))}\n </>\n );\n }\n\n // Multiple executions - group by workflow\n return (\n <StyledDisclosureGroup\n expandedKeys={expandedKeys}\n onExpandedChange={setExpandedKeys}\n allowsMultipleExpanded\n aria-label={ariaLabel}\n >\n {groups.map((group) => (\n <WorkflowGroupItem\n key={group.workflowId}\n group={group}\n onRunSelect={onRunSelect}\n expandedKeys={expandedKeys}\n />\n ))}\n </StyledDisclosureGroup>\n );\n}\n\n// Runs tab content with DisclosureGroup - 3-level hierarchy\nfunction RunsTabContent({\n runs,\n onRunSelect,\n}: {\n runs: RunItem[];\n onRunSelect?: (runId: string) => void;\n}) {\n const [expandedKeys, setExpandedKeys] = useState<Set<Key>>(\n new Set(['executing', 'completed', 'failed']) // All status sections open by default\n );\n\n // Group runs by normalized category, then by workflow\n const executingRuns = runs.filter((r) => normalizeCategory(r.category) === 'executing');\n const completedRuns = runs.filter((r) => normalizeCategory(r.category) === 'completed');\n const failedRuns = runs.filter((r) => normalizeCategory(r.category) === 'failed');\n\n // Group each category by workflow\n const executingGroups = groupRunsByWorkflow(executingRuns);\n const completedGroups = groupRunsByWorkflow(completedRuns);\n const failedGroups = groupRunsByWorkflow(failedRuns);\n\n return (\n <RunsContainer>\n <StyledDisclosureGroup\n expandedKeys={expandedKeys}\n onExpandedChange={setExpandedKeys}\n allowsMultipleExpanded\n aria-label=\"Run sections\"\n >\n {/* Executing Section (was Scheduled) */}\n <CategoryDisclosure id=\"executing\" data-testid=\"category-executing\">\n <Heading level={3}>\n <CategoryHeader slot=\"trigger\" data-testid=\"category-header-executing\">\n <CategoryTitle>\n <HashtagIcon src={ICONS.hashtag} alt=\"\" />\n <span>EXECUTING</span>\n </CategoryTitle>\n <ChevronIcon $isExpanded={expandedKeys.has('executing')}>\n <img src={ICONS.chevronDown} alt=\"\" />\n </ChevronIcon>\n </CategoryHeader>\n </Heading>\n <CategoryDisclosurePanel>\n <GroupedRunsRenderer\n groups={executingGroups}\n onRunSelect={onRunSelect}\n expandedKeys={expandedKeys}\n setExpandedKeys={setExpandedKeys}\n ariaLabel=\"Executing workflows\"\n emptyMessage=\"No executing items\"\n />\n </CategoryDisclosurePanel>\n </CategoryDisclosure>\n\n {/* Completed Section */}\n <CategoryDisclosure id=\"completed\" data-testid=\"category-completed\">\n <Heading level={3}>\n <CategoryHeader slot=\"trigger\" data-testid=\"category-header-completed\">\n <CategoryTitle>\n <HashtagIcon src={ICONS.hashtag} alt=\"\" />\n <span>COMPLETED</span>\n </CategoryTitle>\n <ChevronIcon $isExpanded={expandedKeys.has('completed')}>\n <img src={ICONS.chevronDown} alt=\"\" />\n </ChevronIcon>\n </CategoryHeader>\n </Heading>\n <CategoryDisclosurePanel>\n <GroupedRunsRenderer\n groups={completedGroups}\n onRunSelect={onRunSelect}\n expandedKeys={expandedKeys}\n setExpandedKeys={setExpandedKeys}\n ariaLabel=\"Completed workflows\"\n emptyMessage=\"No completed items\"\n />\n </CategoryDisclosurePanel>\n </CategoryDisclosure>\n\n {/* Failed Section (was Issues) */}\n <CategoryDisclosure id=\"failed\" data-testid=\"category-failed\">\n <Heading level={3}>\n <CategoryHeader slot=\"trigger\" data-testid=\"category-header-failed\">\n <CategoryTitle>\n <HashtagIcon src={ICONS.hashtag} alt=\"\" />\n <span>FAILED</span>\n </CategoryTitle>\n <ChevronIcon $isExpanded={expandedKeys.has('failed')}>\n <img src={ICONS.chevronDown} alt=\"\" />\n </ChevronIcon>\n </CategoryHeader>\n </Heading>\n <CategoryDisclosurePanel>\n <GroupedRunsRenderer\n groups={failedGroups}\n onRunSelect={onRunSelect}\n expandedKeys={expandedKeys}\n setExpandedKeys={setExpandedKeys}\n ariaLabel=\"Failed workflows\"\n emptyMessage=\"No failed items\"\n />\n </CategoryDisclosurePanel>\n </CategoryDisclosure>\n </StyledDisclosureGroup>\n </RunsContainer>\n );\n}\n\n// Usage tab content with meter\nfunction UsageTabContent({\n currentUsage = 0,\n maxUsage = 100000,\n}: {\n currentUsage?: number;\n maxUsage?: number;\n}) {\n const ref = useRef<HTMLDivElement>(null);\n const { meterProps, labelProps } = useMeter({\n label: 'Token Usage',\n value: currentUsage,\n minValue: 0,\n maxValue: maxUsage,\n });\n\n const percentage = Math.round((currentUsage / maxUsage) * 100);\n\n // Determine color based on usage\n let color = '#10b981'; // green\n if (percentage >= 75)\n color = '#ef4444'; // red\n else if (percentage >= 50) color = '#f59e0b'; // yellow\n\n return (\n <MeterContainer>\n <MeterLabel {...labelProps}>Token Usage</MeterLabel>\n <MeterBar {...meterProps} ref={ref}>\n <MeterFill $percentage={percentage} $color={color} />\n </MeterBar>\n <MeterStats>\n {percentage}% of {maxUsage.toLocaleString()} tokens used\n <br />\n <small>\n {currentUsage.toLocaleString()} / {maxUsage.toLocaleString()} tokens\n </small>\n </MeterStats>\n </MeterContainer>\n );\n}\n\n// Connections tab content\nfunction ConnectionsTabContent({\n isGoogleConnected = false,\n onGoogleConnect,\n onGoogleDisconnect,\n oauthConnections,\n onOAuthConnect,\n onOAuthDisconnect,\n isOAuthConnecting = false,\n isOAuthLoading = false,\n}: {\n isGoogleConnected?: boolean;\n onGoogleConnect?: () => void;\n onGoogleDisconnect?: () => void;\n oauthConnections?: OAuthConnectionData[];\n onOAuthConnect?: (provider: string) => void;\n onOAuthDisconnect?: (connectionId: string) => void;\n isOAuthConnecting?: boolean;\n isOAuthLoading?: boolean;\n}) {\n const ref = useRef<HTMLButtonElement>(null);\n\n // Use real OAuth data if available, otherwise fall back to simple boolean prop\n const useRealOAuthData = oauthConnections && onOAuthConnect && onOAuthDisconnect;\n const googleConnection = useRealOAuthData\n ? oauthConnections.find((c) => c.provider === 'google')\n : undefined;\n const isConnected = useRealOAuthData ? googleConnection?.connected || false : isGoogleConnected;\n\n const handlePress = () => {\n if (useRealOAuthData) {\n if (isConnected && googleConnection) {\n onOAuthDisconnect(googleConnection.id);\n } else {\n onOAuthConnect('google');\n }\n } else {\n // Fall back to old simple callbacks\n if (isConnected && onGoogleDisconnect) {\n onGoogleDisconnect();\n } else if (!isConnected && onGoogleConnect) {\n onGoogleConnect();\n }\n }\n };\n\n const isButtonDisabled = isOAuthLoading || isOAuthConnecting;\n\n const { buttonProps } = useButton(\n {\n onPress: handlePress,\n isDisabled: isButtonDisabled,\n },\n ref\n );\n\n if (isOAuthLoading) {\n return (\n <ConnectionsContainer>\n <ConnectionDescription>Loading connections...</ConnectionDescription>\n </ConnectionsContainer>\n );\n }\n\n const buttonText = isOAuthConnecting\n ? 'Connecting...'\n : isConnected\n ? '✓ Disconnect from Google'\n : 'Connect with Google';\n\n const descriptionText = isConnected\n ? googleConnection?.displayName\n ? `Connected as ${googleConnection.displayName}. You can access Google services and data.`\n : 'Your Google account is connected. You can access Google services and data.'\n : 'Connect your Google account to access Google services and integrate with your workflows.';\n\n return (\n <ConnectionsContainer>\n <ConnectionDescription>{descriptionText}</ConnectionDescription>\n <GoogleButton {...buttonProps} ref={ref} $isConnected={isConnected}>\n {buttonText}\n </GoogleButton>\n {isConnected && googleConnection?.scopes && googleConnection.scopes.length > 0 && (\n <div style={{ marginTop: '16px', fontSize: '13px', color: tokens.colors.text.secondary }}>\n Connected services: {googleConnection.scopes.join(', ')}\n </div>\n )}\n </ConnectionsContainer>\n );\n}\n\n// Tab component\nfunction Tab({ item, state }: { item: any; state: ReturnType<typeof useTabListState> }) {\n const ref = useRef<HTMLButtonElement>(null);\n const { tabProps } = useTab({ key: item.key }, state, ref);\n\n return (\n <TabButton\n {...tabProps}\n ref={ref}\n $isSelected={state.selectedKey === item.key}\n data-testid={`tab-${item.key}`}\n >\n {item.rendered}\n </TabButton>\n );\n}\n\n// TabList component\nfunction TabList({\n state,\n ...props\n}: { state: ReturnType<typeof useTabListState> } & React.HTMLAttributes<HTMLDivElement>) {\n const ref = useRef<HTMLDivElement>(null);\n const { tabListProps } = useTabList(props, state, ref);\n\n return (\n <TabListWrapper {...tabListProps} ref={ref}>\n {[...state.collection].map((item) => (\n <Tab key={item.key} item={item} state={state} />\n ))}\n </TabListWrapper>\n );\n}\n\n// TabPanel component\nfunction TabPanel({\n state,\n ...props\n}: { state: ReturnType<typeof useTabListState> } & React.HTMLAttributes<HTMLDivElement>) {\n const ref = useRef<HTMLDivElement>(null);\n const { tabPanelProps } = useTabPanel(props, state, ref);\n\n return (\n <TabPanelWrapper {...tabPanelProps} ref={ref} data-testid={`tabpanel-${state.selectedKey}`}>\n {state.selectedItem?.props.children}\n </TabPanelWrapper>\n );\n}\n\nexport function PaneMenus({\n activeTab = 'runs',\n onTabChange,\n runs = [],\n onRunSelect,\n currentUsage = 0,\n maxUsage = 100000,\n isGoogleConnected = false,\n onGoogleConnect,\n onGoogleDisconnect,\n oauthConnections,\n onOAuthConnect,\n onOAuthDisconnect,\n isOAuthConnecting = false,\n isOAuthLoading = false,\n connectionsSlot,\n workflowsSlot,\n usageSlot,\n}: PaneMenusProps) {\n const state = useTabListState({\n selectedKey: activeTab,\n onSelectionChange: (key) => {\n if (onTabChange) {\n onTabChange(key as 'workflows' | 'runs' | 'usage' | 'connections');\n }\n },\n children: (\n <>\n {workflowsSlot && (\n <Item key=\"workflows\" title=\"Workflows\">\n {workflowsSlot}\n </Item>\n )}\n <Item key=\"runs\" title=\"Runs\">\n <RunsTabContent runs={runs} onRunSelect={onRunSelect} />\n </Item>\n <Item key=\"usage\" title=\"Usage\">\n {usageSlot || <UsageTabContent currentUsage={currentUsage} maxUsage={maxUsage} />}\n </Item>\n <Item key=\"connections\" title=\"Connections\">\n {connectionsSlot || (\n <ConnectionsTabContent\n isGoogleConnected={isGoogleConnected}\n onGoogleConnect={onGoogleConnect}\n onGoogleDisconnect={onGoogleDisconnect}\n oauthConnections={oauthConnections}\n onOAuthConnect={onOAuthConnect}\n onOAuthDisconnect={onOAuthDisconnect}\n isOAuthConnecting={isOAuthConnecting}\n isOAuthLoading={isOAuthLoading}\n />\n )}\n </Item>\n </>\n ),\n });\n\n return (\n <Container>\n <TabList state={state} aria-label=\"Main pane menu\" />\n <TabPanel key={state.selectedItem?.key} state={state} />\n </Container>\n );\n}\n","import styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\nexport const Container = styled.header`\n position: relative;\n width: 100%;\n height: 56px;\n background-color: ${tokens.colors.surface.subtle};\n backdrop-filter: blur(10px);\n -webkit-backdrop-filter: blur(10px);\n overflow: hidden;\n display: flex;\n align-items: center;\n justify-content: center;\n\n /* Background pattern - responsive sizes */\n &::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-image: url('/assets/bg-set/pattern/Size=xs, Type=Waves Rays2.svg');\n background-size: cover;\n background-position: center;\n background-repeat: no-repeat;\n opacity: 0.6;\n z-index: 0;\n }\n\n /* Small screens */\n @media (min-width: ${tokens.breakpoints.mobile}px) {\n &::before {\n background-image: url('/assets/bg-set/pattern/Size=sm, Type=Waves Rays2.svg');\n }\n }\n\n /* Medium screens */\n @media (min-width: ${tokens.breakpoints.tablet}px) {\n height: 64px;\n\n &::before {\n background-image: url('/assets/bg-set/pattern/Size=md, Type=Waves Rays2.svg');\n }\n }\n\n /* Large screens */\n @media (min-width: ${tokens.breakpoints.desktop}px) {\n &::before {\n background-image: url('/assets/bg-set/pattern/Size=lg, Type=Waves Rays2.svg');\n }\n }\n\n /* Extra large screens */\n @media (min-width: 1440px) {\n &::before {\n background-image: url('/assets/bg-set/pattern/Size=xl, Type=Waves Rays2.svg');\n }\n }\n\n /* Dark theme support */\n @media (prefers-color-scheme: dark) {\n background-color: ${tokens.colors.backdrop};\n }\n`;\n\nexport const BrandLogo = styled.img`\n position: relative;\n z-index: 1;\n max-height: 28px;\n height: auto;\n width: auto;\n object-fit: contain;\n pointer-events: none;\n user-select: none;\n\n /* Slightly larger on desktop */\n @media (min-width: ${tokens.breakpoints.tablet}px) {\n max-height: 32px;\n }\n`;\n\nexport const SettingsButton = styled.button<{ $isHovered?: boolean }>`\n position: absolute;\n top: 50%;\n right: ${tokens.spacing.md};\n transform: translateY(-50%);\n z-index: 2;\n\n /* Button appearance */\n width: 40px;\n height: 40px;\n border-radius: ${tokens.borderRadius.full};\n border: none;\n background-color: ${tokens.colors.surface.glass};\n cursor: pointer;\n\n /* Center the icon */\n display: flex;\n align-items: center;\n justify-content: center;\n\n /* Smooth transitions */\n transition: background-color ${tokens.transitions.normal}, transform ${tokens.transitions.fast};\n\n /* Hover state */\n &:hover {\n background-color: ${tokens.colors.surface.overlayHover};\n }\n\n /* Active state */\n &:active {\n transform: translateY(-50%) scale(0.95);\n }\n\n /* Focus visible state for accessibility */\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n\n /* Disabled state */\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n /* Responsive positioning */\n @media (min-width: ${tokens.breakpoints.tablet}px) {\n right: ${tokens.spacing.md};\n }\n\n @media (min-width: ${tokens.breakpoints.desktop}px) {\n right: ${tokens.spacing.lg};\n }\n`;\n\nexport const BackButton = styled.button<{ $isHovered?: boolean }>`\n position: absolute;\n top: 50%;\n left: ${tokens.spacing.md};\n transform: translateY(-50%);\n z-index: 2;\n\n /* Button appearance */\n width: 40px;\n height: 40px;\n border-radius: ${tokens.borderRadius.full};\n border: none;\n background-color: ${tokens.colors.surface.glass};\n cursor: pointer;\n\n /* Center the icon */\n display: flex;\n align-items: center;\n justify-content: center;\n\n /* Smooth transitions */\n transition: background-color ${tokens.transitions.normal}, transform ${tokens.transitions.fast};\n\n /* Hover state */\n &:hover {\n background-color: ${tokens.colors.surface.overlayHover};\n }\n\n /* Active state */\n &:active {\n transform: translateY(-50%) scale(0.95);\n }\n\n /* Focus visible state for accessibility */\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n\n /* Disabled state */\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n /* Responsive positioning */\n @media (min-width: ${tokens.breakpoints.tablet}px) {\n left: ${tokens.spacing.md};\n }\n\n @media (min-width: ${tokens.breakpoints.desktop}px) {\n left: ${tokens.spacing.lg};\n }\n`;\n","import { useButton } from '@react-aria/button';\nimport { useRef, useState } from 'react';\nimport { tokens } from '../../../theme/tokens';\nimport { Icon } from '../Icon';\nimport type { IconName } from '../Icon/icons';\nimport { BackButton, BrandLogo, Container, SettingsButton } from './PaneSectionHeader.styles';\n\nexport type BrandType = 'Google' | 'Microsoft' | 'Slack' | 'YouTube';\n\nexport interface PaneSectionHeaderProps {\n /**\n * Brand logo to display in the center of the header\n * @default 'Google'\n */\n brand?: BrandType;\n /**\n * Callback fired when back button is clicked\n */\n onBackClick?: () => void;\n /**\n * Callback fired when settings button is clicked\n */\n onSettingsClick?: () => void;\n /**\n * Icon name for the settings button\n * @default 'flow-chart'\n */\n settingsIcon?: string;\n /**\n * Additional CSS class name\n */\n className?: string;\n /**\n * Accessible label for the header\n */\n 'aria-label'?: string;\n}\n\n/**\n * PaneSectionHeader component\n *\n * A fixed-height header positioned at the top of the main pane section.\n * Features a centered brand logo and a settings button in the top-right corner.\n * Background includes responsive Rays2 pattern from the design system.\n *\n * @example\n * ```tsx\n * <PaneSectionHeader\n * brand=\"Google\"\n * onSettingsClick={() => console.log('Settings clicked')}\n * />\n * ```\n */\nexport function PaneSectionHeader({\n brand = 'Google',\n onBackClick,\n onSettingsClick,\n settingsIcon = 'flow-chart',\n className,\n 'aria-label': ariaLabel = 'Pane section header',\n}: PaneSectionHeaderProps) {\n const [isBackHovered, setIsBackHovered] = useState(false);\n const [isSettingsHovered, setIsSettingsHovered] = useState(false);\n const backButtonRef = useRef<HTMLButtonElement>(null);\n const settingsButtonRef = useRef<HTMLButtonElement>(null);\n\n const { buttonProps: backButtonProps } = useButton(\n {\n onPress: onBackClick,\n 'aria-label': 'Go back',\n },\n backButtonRef\n );\n\n const { buttonProps: settingsButtonProps } = useButton(\n {\n onPress: onSettingsClick,\n 'aria-label': 'Workflow configuration',\n },\n settingsButtonRef\n );\n\n return (\n <Container className={className} role=\"banner\" aria-label={ariaLabel}>\n {/* Back button - top left */}\n {onBackClick && (\n <BackButton\n {...backButtonProps}\n ref={backButtonRef}\n onMouseEnter={() => setIsBackHovered(true)}\n onMouseLeave={() => setIsBackHovered(false)}\n $isHovered={isBackHovered}\n >\n <Icon name=\"arrow-left-fill\" size={20} color={tokens.colors.text.secondary} />\n </BackButton>\n )}\n\n {/* Brand logo centered - using white variant for better contrast on dark background */}\n <BrandLogo src={`/assets/bg-set/brand-logos/${brand}2.svg`} alt={brand} />\n\n {/* Settings button - top right */}\n <SettingsButton\n {...settingsButtonProps}\n ref={settingsButtonRef}\n onMouseEnter={() => setIsSettingsHovered(true)}\n onMouseLeave={() => setIsSettingsHovered(false)}\n $isHovered={isSettingsHovered}\n >\n <Icon name={settingsIcon as IconName} size={20} color={tokens.colors.text.secondary} />\n </SettingsButton>\n </Container>\n );\n}\n\nPaneSectionHeader.displayName = 'PaneSectionHeader';\n","import styled from 'styled-components';\nimport { tokens } from '../../../theme/tokens';\n\nexport const Container = styled.button<{ $active?: boolean }>`\n /* Base button styling */\n width: 48px;\n height: 48px;\n border: none;\n padding: ${tokens.spacing.xs};\n border-radius: ${({ $active }) => ($active ? tokens.borderRadius.xl : tokens.borderRadius.full)};\n background-color: ${tokens.colors.background.light};\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all ${tokens.transitions.fast};\n position: relative;\n overflow: hidden;\n\n /* Hover state */\n &:hover {\n border-radius: ${tokens.borderRadius.xl};\n background-color: ${tokens.colors.surface.overlayHover};\n }\n\n /* Focus visible state for accessibility */\n &:focus-visible {\n outline: 2px solid ${tokens.colors.border.focus};\n outline-offset: 2px;\n }\n\n /* Active indicator */\n ${({ $active }) =>\n $active &&\n `\n &::before {\n content: '';\n position: absolute;\n left: -16px;\n top: 50%;\n transform: translateY(-50%);\n width: 4px;\n height: 40px;\n background-color: ${tokens.colors.text.primary};\n border-radius: 0 ${tokens.borderRadius.sm} ${tokens.borderRadius.sm} 0;\n }\n `}\n\n /* Disabled state */\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n`;\n\nexport const LogoImage = styled.img`\n width: 100%;\n height: 100%;\n object-fit: contain;\n pointer-events: none;\n user-select: none;\n`;\n","import { useButton } from '@react-aria/button';\nimport type { AriaButtonProps } from '@react-types/button';\nimport { useRef } from 'react';\nimport { Container, LogoImage } from './ServiceIcon.styles';\n\nexport type ServiceBrand =\n | 'Facebook'\n | 'Gmail'\n | 'Instagram'\n | 'LinkedIn'\n | 'Reddit'\n | 'Slack'\n | 'Telegram'\n | 'WhatsApp'\n | 'X'\n | 'YouTube';\n\nexport interface ServiceIconProps extends AriaButtonProps {\n /**\n * Brand logo to display\n */\n brand: ServiceBrand;\n /**\n * Whether the service icon is active/selected\n */\n active?: boolean;\n /**\n * Additional CSS class name\n */\n className?: string;\n}\n\n/**\n * ServiceIcon component\n *\n * Displays a circular brand logo icon that can be used as a service selector.\n * Uses colored brand logos from assets/icons/Brand and supports active/hover states.\n *\n * @example\n * ```tsx\n * <ServiceIcon\n * brand=\"Gmail\"\n * active={true}\n * onPress={() => console.log('Gmail clicked')}\n * aria-label=\"Gmail service\"\n * />\n * ```\n */\nexport function ServiceIcon({ brand, active = false, className, ...ariaProps }: ServiceIconProps) {\n const ref = useRef<HTMLButtonElement>(null);\n const { buttonProps } = useButton(\n {\n ...ariaProps,\n 'aria-pressed': active,\n },\n ref\n );\n\n return (\n <Container {...buttonProps} ref={ref} $active={active} className={className}>\n <LogoImage src={`/assets/icons/Brand/${brand}.svg`} alt={brand} />\n </Container>\n );\n}\n\nServiceIcon.displayName = 'ServiceIcon';\n"]}
|