@agentiffai/design 0.1.0 → 0.1.1

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.
Files changed (65) hide show
  1. package/dist/{chunk-MNXQDDWP.js → chunk-6NGVSBJZ.js} +71 -10
  2. package/dist/chunk-6NGVSBJZ.js.map +1 -0
  3. package/dist/{chunk-P4Q3MHIY.cjs → chunk-TI5EB3ER.cjs} +29 -6
  4. package/dist/chunk-TI5EB3ER.cjs.map +1 -0
  5. package/dist/{chunk-KNSPBTTJ.cjs → chunk-ULL2LDN3.cjs} +71 -10
  6. package/dist/chunk-ULL2LDN3.cjs.map +1 -0
  7. package/dist/{chunk-CNVJ5UF2.js → chunk-YX4PWMZ6.js} +29 -6
  8. package/dist/chunk-YX4PWMZ6.js.map +1 -0
  9. package/dist/copilotkit/index.cjs +129 -119
  10. package/dist/copilotkit/index.cjs.map +1 -1
  11. package/dist/copilotkit/index.js +105 -95
  12. package/dist/copilotkit/index.js.map +1 -1
  13. package/dist/index.cjs +31 -31
  14. package/dist/index.js +2 -2
  15. package/dist/layout/index.cjs +11 -11
  16. package/dist/layout/index.js +1 -1
  17. package/package.json +8 -7
  18. package/CHANGELOG.md +0 -35
  19. package/LICENSE +0 -21
  20. package/assets/layout/main-pane-section.png +0 -0
  21. package/assets/layout/nav-complete.png +0 -0
  22. package/assets/layout/nav-horizontal-section.png +0 -0
  23. package/assets/layout/nav-vertical-section.png +0 -0
  24. package/assets/layout/pane-section-dropdowns.png +0 -0
  25. package/assets/layout/pane-section-header.png +0 -0
  26. package/dist/Window-B6e_UfLV.d.ts +0 -429
  27. package/dist/Window-CgGFIYHS.d.cts +0 -429
  28. package/dist/chunk-CNVJ5UF2.js.map +0 -1
  29. package/dist/chunk-KNSPBTTJ.cjs.map +0 -1
  30. package/dist/chunk-MNXQDDWP.js.map +0 -1
  31. package/dist/chunk-P4Q3MHIY.cjs.map +0 -1
  32. package/dist/copilotkit/index.d.cts +0 -162
  33. package/dist/copilotkit/index.d.ts +0 -162
  34. package/dist/icons/index.d.cts +0 -375
  35. package/dist/icons/index.d.ts +0 -375
  36. package/dist/index.d-DYU1eVeb.d.cts +0 -252
  37. package/dist/index.d-DYU1eVeb.d.ts +0 -252
  38. package/dist/index.d.cts +0 -185
  39. package/dist/index.d.ts +0 -185
  40. package/dist/layout/index.d.cts +0 -206
  41. package/dist/layout/index.d.ts +0 -206
  42. package/dist/theme/index.d.cts +0 -95
  43. package/dist/theme/index.d.ts +0 -95
  44. package/public/assets/bg-set/brand-logos/Google.svg +0 -1
  45. package/public/assets/bg-set/brand-logos/Google2.svg +0 -1
  46. package/public/assets/bg-set/brand-logos/Microsoft.svg +0 -1
  47. package/public/assets/bg-set/brand-logos/Microsoft2.svg +0 -1
  48. package/public/assets/bg-set/brand-logos/Slack.svg +0 -1
  49. package/public/assets/bg-set/brand-logos/Slack2.svg +0 -1
  50. package/public/assets/bg-set/brand-logos/YouTube.svg +0 -1
  51. package/public/assets/bg-set/brand-logos/YouTube2.svg +0 -1
  52. package/public/assets/bg-set/pattern/Size=lg, Type=Waves Rays2.svg +0 -1
  53. package/public/assets/bg-set/pattern/Size=md, Type=Waves Rays2.svg +0 -1
  54. package/public/assets/bg-set/pattern/Size=sm, Type=Waves Rays2.svg +0 -1
  55. package/public/assets/bg-set/pattern/Size=xl, Type=Waves Rays2.svg +0 -1
  56. package/public/assets/bg-set/pattern/Size=xs, Type=Waves Rays2.svg +0 -1
  57. package/public/assets/icon-set/Icon-add-circle-fill.svg +0 -1
  58. package/public/assets/icon-set/Icon-calendar-fill.svg +0 -1
  59. package/public/assets/icon-set/Icon-chat-1-fill.svg +0 -1
  60. package/public/assets/icon-set/Icon-download-2-fill.svg +0 -1
  61. package/public/assets/icon-set/Icon-home-fill.svg +0 -1
  62. package/public/assets/icon-set/Icon-mic-fill.svg +0 -1
  63. package/public/assets/icon-set/Icon-settings-3-fill.svg +0 -1
  64. package/public/assets/icon-set/Icon-settings-fill.svg +0 -1
  65. package/public/assets/icon-set/Icon-settings-line.svg +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/AssistantThinking/AssistantThinking.styles.ts","../src/components/AssistantThinking/AssistantThinking.tsx","../src/components/ChatInput/ChatInput.styles.ts","../src/components/ChatInput/ChatInput.tsx","../src/components/UserMessage/UserMessage.styles.ts","../src/components/UserMessage/UserMessage.tsx","../src/components/copilotkit/Button/Button.styles.ts","../src/components/copilotkit/Button/Button.tsx","../src/components/copilotkit/Actions/Actions.styles.ts","../src/components/copilotkit/Actions/Actions.tsx","../src/components/copilotkit/Response/Response.styles.ts","../src/components/copilotkit/Response/Response.tsx","../src/components/copilotkit/AgentState/AgentState.styles.ts","../src/components/copilotkit/AgentState/AgentState.tsx","../src/components/copilotkit/Footer/Footer.styles.ts","../src/components/copilotkit/Footer/Footer.tsx","../src/components/copilotkit/Header/Header.styles.ts","../src/components/copilotkit/Header/Header.tsx","../src/components/copilotkit/Input/Input.styles.ts","../src/components/copilotkit/Input/Input.tsx","../src/components/copilotkit/Messages/FileAttachment.styles.ts","../src/components/copilotkit/Messages/FileAttachment.tsx","../src/components/copilotkit/Messages/AssistantMessage.styles.ts","../src/components/copilotkit/Messages/AssistantMessage.tsx","../src/components/copilotkit/Messages/Messages.styles.ts","../src/components/copilotkit/Messages/Messages.tsx","../src/components/copilotkit/Messages/MessagesList.styles.ts","../src/components/copilotkit/Messages/MessagesList.tsx","../src/components/copilotkit/Messages/UserMessage.styles.ts","../src/components/copilotkit/Messages/UserMessage.tsx","../src/components/copilotkit/Suggestions/Suggestions.styles.ts","../src/components/copilotkit/Suggestions/Suggestions.tsx","../src/components/copilotkit/Window/Window.styles.ts","../src/components/copilotkit/Window/Window.tsx"],"names":["styled","useRef","jsxs","jsx","useButton","css","dotPulse","keyframes","LoadingDots","Dot","Message","InputWrapper","useTextField","Avatar","StyledUserMessage","MessageContent","UserMessage"],"mappings":"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","file":"chunk-CNVJ5UF2.js","sourcesContent":["import styled, { keyframes } from 'styled-components';\n\nconst dotPulse = keyframes`\n 0%, 100% {\n opacity: 0.3;\n transform: scale(0.8);\n }\n 50% {\n opacity: 1;\n transform: scale(1);\n }\n`;\n\nexport const Container = styled.div`\n display: inline-flex;\n align-items: center;\n gap: 12px;\n padding: 12px 16px;\n background-color: #2c2c2e;\n border-radius: 16px;\n box-shadow: none;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu',\n 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;\n max-width: fit-content;\n margin: 0 auto;\n`;\n\nexport const Avatar = styled.div`\n width: 40px;\n height: 40px;\n border-radius: 50%;\n background: linear-gradient(135deg, #8B5CF6 0%, #EC4899 100%);\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n box-shadow: 0 2px 8px rgba(139, 92, 246, 0.3);\n`;\n\nexport const HeadphonesIcon = styled.svg`\n width: 20px;\n height: 20px;\n color: #FFFFFF;\n`;\n\nexport const Content = styled.div`\n display: flex;\n align-items: center;\n gap: 8px;\n`;\n\nexport const LoadingDots = styled.div`\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 0 4px;\n`;\n\nexport const Dot = styled.span`\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background-color: #8e8e93;\n animation: ${dotPulse} 1.4s ease-in-out infinite;\n`;\n\nexport const Message = styled.span`\n font-size: 14px;\n color: #e5e5e7;\n font-weight: 400;\n line-height: 1.5;\n white-space: nowrap;\n`;\n","import { useRef } from 'react';\nimport {\n Avatar,\n Container,\n Content,\n Dot,\n HeadphonesIcon,\n LoadingDots,\n Message,\n} from './AssistantThinking.styles';\n\nexport interface AssistantThinkingProps {\n message?: string;\n className?: string;\n ariaLabel?: string;\n}\n\nexport function AssistantThinking({\n message = 'Analyzing data, please wait...',\n className,\n ariaLabel = 'Assistant is thinking',\n}: AssistantThinkingProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n\n return (\n <Container\n ref={containerRef}\n className={className}\n role=\"status\"\n aria-live=\"polite\"\n aria-label={ariaLabel}\n >\n <Avatar aria-hidden=\"true\">\n <HeadphonesIcon viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M17 13a4 4 0 0 1 0 8c-2.142 0-4-1.79-4-4h-2a4 4 0 1 1-.535-2h3.07A4 4 0 0 1 17 13M2 12v-2h2V7a4 4 0 0 1 4-4h8a4 4 0 0 1 4 4v3h2v2z\" />\n </HeadphonesIcon>\n </Avatar>\n <Content>\n <LoadingDots aria-hidden=\"true\">\n <Dot style={{ animationDelay: '0ms' }} />\n <Dot style={{ animationDelay: '150ms' }} />\n <Dot style={{ animationDelay: '300ms' }} />\n </LoadingDots>\n <Message>{message}</Message>\n </Content>\n </Container>\n );\n}\n\nAssistantThinking.displayName = 'AssistantThinking';\n","import styled from 'styled-components';\n\n/**\n * Main container for the chat input component with dark theme\n */\nexport const ChatInputContainer = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n padding: 8px;\n background: transparent;\n border-radius: 0;\n box-shadow: none;\n box-sizing: border-box;\n\n @media (min-width: 640px) {\n padding: 12px;\n }\n`;\n\n/**\n * Container for suggestion buttons - horizontal layout with wrapping\n */\nexport const SuggestionsWrapper = styled.div`\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n gap: 8px;\n margin-bottom: 12px;\n width: 100%;\n box-sizing: border-box;\n`;\n\n/**\n * Minimal pill-shaped suggestion button - Dark theme\n */\nexport const SuggestionButton = styled.button`\n padding: 8px 16px;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu',\n 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;\n font-size: 13px;\n font-weight: 400;\n text-align: center;\n border: 1px solid #3a3a3c;\n border-radius: 20px;\n cursor: pointer;\n transition: all 0.15s ease;\n white-space: nowrap;\n\n /* Dark theme colors */\n background-color: #2c2c2e;\n color: #e5e5e7;\n\n /* Hover state */\n &:hover:not(:disabled) {\n background-color: #3a3a3c;\n border-color: #48484a;\n }\n\n /* Active state */\n &:active:not(:disabled) {\n background-color: #48484a;\n }\n\n /* Focus state */\n &:focus-visible {\n outline: 2px solid #5B9FFF;\n outline-offset: 2px;\n }\n\n /* Disabled state */\n &:disabled {\n cursor: not-allowed;\n opacity: 0.4;\n }\n`;\n\n/**\n * Input wrapper with dark theme\n */\nexport const InputWrapper = styled.div`\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 14px;\n background-color: #2c2c2e;\n border: 1px solid #3a3a3c;\n border-radius: 12px;\n transition: all 0.2s ease;\n width: 100%;\n box-sizing: border-box;\n\n &:focus-within {\n border-color: #5B9FFF;\n background-color: #323234;\n }\n`;\n\n/**\n * Text input field - Dark theme\n */\nexport const InputField = styled.input`\n flex: 1;\n border: none;\n outline: none;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu',\n 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;\n font-size: 14px;\n color: #e5e5e7;\n background: transparent;\n\n &::placeholder {\n color: #6e6e73;\n }\n\n &:disabled {\n color: #6e6e73;\n cursor: not-allowed;\n }\n`;\n\n/**\n * Circular submit button with arrow icon\n */\ninterface SubmitButtonProps {\n disabled?: boolean;\n}\n\nexport const SubmitButton = styled.button<SubmitButtonProps>`\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n padding: 0;\n border: none;\n border-radius: 50%;\n background-color: ${(props) => (props.disabled ? '#3a3a3c' : '#5B9FFF')};\n color: ${(props) => (props.disabled ? '#6e6e73' : '#ffffff')};\n cursor: ${(props) => (props.disabled ? 'not-allowed' : 'pointer')};\n transition: all 0.2s ease;\n flex-shrink: 0;\n\n &:hover:not(:disabled) {\n background-color: #4A8FEF;\n transform: scale(1.05);\n }\n\n &:active:not(:disabled) {\n transform: scale(0.98);\n }\n\n &:focus-visible {\n outline: 2px solid #5B9FFF;\n outline-offset: 2px;\n }\n\n svg {\n width: 18px;\n height: 18px;\n }\n`;\n","import { useButton } from '@react-aria/button';\nimport type { AriaTextFieldProps } from '@react-aria/textfield';\nimport { useTextField } from '@react-aria/textfield';\nimport React, { type KeyboardEvent, useRef, useState } from 'react';\nimport {\n ChatInputContainer,\n InputField,\n InputWrapper,\n SubmitButton,\n SuggestionButton,\n SuggestionsWrapper,\n} from './ChatInput.styles';\n\nexport interface Suggestion {\n /** The text content of the suggestion */\n text: string;\n}\n\nexport interface ChatInputProps extends Omit<AriaTextFieldProps, 'onChange'> {\n /** Array of suggestion items to display above the input */\n suggestions?: Suggestion[];\n /** Callback when a suggestion is selected */\n onSuggestionSelect?: (suggestion: string) => void;\n /** Current message value */\n value?: string;\n /** Callback when message value changes */\n onChange?: (value: string) => void;\n /** Callback when message is submitted */\n onSubmit?: (message: string) => void;\n /** Placeholder text */\n placeholder?: string;\n /** Whether the input is disabled */\n isDisabled?: boolean;\n /** Whether the input is read-only */\n isReadOnly?: boolean;\n /** Whether to auto-focus the input */\n autoFocus?: boolean;\n /** Additional CSS class name */\n className?: string;\n /** ARIA label for the input */\n 'aria-label'?: string;\n}\n\n/**\n * ChatInput component with minimal pill-shaped suggestion buttons\n *\n * Features:\n * - Horizontal pill-shaped suggestion buttons with minimal design\n * - Single-line input with submit button\n * - React ARIA for accessibility\n * - Keyboard navigation support\n * - Clean, modern design matching vendor image\n *\n * @example\n * ```tsx\n * <ChatInput\n * suggestions={[\n * { text: \"Create in-depth analysis\" },\n * { text: \"Identify actionable tasks\" }\n * ]}\n * placeholder=\"Ask, write or search for anything...\"\n * onSubmit={(message) => console.log(message)}\n * onSuggestionSelect={(suggestion) => console.log(suggestion)}\n * />\n * ```\n */\nexport const ChatInput: React.FC<ChatInputProps> = ({\n suggestions = [],\n onSuggestionSelect,\n value = '',\n onChange,\n onSubmit,\n placeholder = 'Ask, write or search for anything...',\n isDisabled = false,\n isReadOnly = false,\n autoFocus = false,\n className,\n 'aria-label': ariaLabel = 'Chat message input',\n ...ariaProps\n}) => {\n const [internalValue, setInternalValue] = useState(value);\n const inputRef = useRef<HTMLInputElement>(null);\n\n // Use controlled value if provided, otherwise use internal state\n const currentValue = value !== undefined ? value : internalValue;\n const setValue = onChange || setInternalValue;\n\n // React ARIA hook for accessibility\n const { inputProps } = useTextField(\n {\n ...ariaProps,\n 'aria-label': ariaLabel,\n value: currentValue,\n onChange: (newValue: string) => {\n setValue(newValue);\n },\n isDisabled,\n isReadOnly,\n },\n inputRef\n );\n\n // Handle keyboard events\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n // Submit on Enter\n if (e.key === 'Enter') {\n e.preventDefault();\n handleSubmit();\n }\n };\n\n // Handle submit\n const handleSubmit = () => {\n if (currentValue.trim() && onSubmit && !isDisabled && !isReadOnly) {\n onSubmit(currentValue.trim());\n setValue('');\n // Refocus the input after sending\n inputRef.current?.focus();\n }\n };\n\n // Handle suggestion selection\n const handleSuggestionClick = (suggestionText: string) => {\n if (onSuggestionSelect && !isDisabled && !isReadOnly) {\n onSuggestionSelect(suggestionText);\n // Optionally set the suggestion as the input value\n setValue(suggestionText);\n inputRef.current?.focus();\n }\n };\n\n const canSubmit = currentValue.trim().length > 0 && !isDisabled && !isReadOnly;\n\n return (\n <ChatInputContainer className={className}>\n {/* Suggestions */}\n {suggestions.length > 0 && (\n <SuggestionsWrapper role=\"list\" aria-label=\"Suggested prompts\">\n {suggestions.map((suggestion, index) => (\n <SuggestionButtonComponent\n key={`${suggestion.text}-${index}`}\n suggestion={suggestion}\n onSelect={handleSuggestionClick}\n isDisabled={isDisabled || isReadOnly}\n />\n ))}\n </SuggestionsWrapper>\n )}\n\n {/* Input field */}\n <InputWrapper>\n <InputField\n {...inputProps}\n ref={inputRef}\n type=\"text\"\n placeholder={placeholder}\n onKeyDown={handleKeyDown}\n autoFocus={autoFocus}\n disabled={isDisabled}\n readOnly={isReadOnly}\n />\n <SubmitButtonComponent\n onPress={handleSubmit}\n isDisabled={!canSubmit}\n ariaLabel=\"Send message\"\n />\n </InputWrapper>\n </ChatInputContainer>\n );\n};\n\n/**\n * Individual suggestion button component\n */\ninterface SuggestionButtonComponentProps {\n suggestion: Suggestion;\n onSelect: (text: string) => void;\n isDisabled?: boolean;\n}\n\nconst SuggestionButtonComponent: React.FC<SuggestionButtonComponentProps> = ({\n suggestion,\n onSelect,\n isDisabled = false,\n}) => {\n const ref = useRef<HTMLButtonElement>(null);\n const { buttonProps } = useButton(\n {\n onPress: () => onSelect(suggestion.text),\n isDisabled,\n 'aria-label': `Select suggestion: ${suggestion.text}`,\n },\n ref\n );\n\n return (\n <SuggestionButton {...buttonProps} ref={ref} role=\"listitem\">\n {suggestion.text}\n </SuggestionButton>\n );\n};\n\n/**\n * Submit button component with arrow icon\n */\ninterface SubmitButtonComponentProps {\n onPress: () => void;\n isDisabled?: boolean;\n ariaLabel?: string;\n}\n\nconst SubmitButtonComponent: React.FC<SubmitButtonComponentProps> = ({\n onPress,\n isDisabled = false,\n ariaLabel = 'Send message',\n}) => {\n const ref = useRef<HTMLButtonElement>(null);\n const { buttonProps } = useButton(\n {\n onPress,\n isDisabled,\n 'aria-label': ariaLabel,\n },\n ref\n );\n\n return (\n <SubmitButton {...buttonProps} ref={ref} disabled={isDisabled} title={ariaLabel}>\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n role=\"img\"\n aria-hidden=\"true\"\n >\n <title>Arrow Right Icon</title>\n <path\n d=\"M4 10H16M16 10L10 4M16 10L10 16\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </SubmitButton>\n );\n};\n\nChatInput.displayName = 'ChatInput';\n","import styled, { css } from 'styled-components';\n\ninterface StyledUserMessageProps {\n $isPressed: boolean;\n}\n\nexport const StyledUserMessage = styled.button<StyledUserMessageProps>`\n /* Base styles */\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 12px 20px;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu',\n 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;\n font-size: 14px;\n font-weight: 400;\n line-height: 1.4;\n color: #ffffff;\n border: none;\n cursor: default;\n user-select: none;\n white-space: pre-wrap;\n word-wrap: break-word;\n position: relative;\n text-align: left;\n\n /* Pill shape - fully rounded ends */\n border-radius: 999px;\n\n /* Purple to blue gradient (left to right) */\n background: linear-gradient(90deg, #8B5CF6 0%, #5B8DEF 100%);\n\n /* Subtle shadow and glow effect */\n box-shadow:\n 0 2px 8px rgba(91, 141, 239, 0.25),\n 0 1px 3px rgba(139, 92, 246, 0.15);\n\n /* Smooth transitions */\n transition: all 0.2s ease-in-out;\n\n /* Speech bubble tail */\n &::after {\n content: '';\n position: absolute;\n bottom: -4px;\n right: -6px;\n width: 18px;\n height: 18px;\n background: #5B8DEF;\n transform: rotate(45deg);\n border-radius: 0 0 16px 0;\n box-shadow:\n 2px 2px 4px rgba(91, 141, 239, 0.15);\n transition: all 0.2s ease-in-out;\n }\n\n /* Hover state - only for button elements */\n &[role=\"button\"]:hover:not(:disabled) {\n transform: translateY(-1px);\n cursor: pointer;\n box-shadow:\n 0 4px 12px rgba(91, 141, 239, 0.35),\n 0 2px 6px rgba(139, 92, 246, 0.25);\n\n &::after {\n box-shadow:\n 3px 3px 6px rgba(91, 141, 239, 0.2);\n }\n }\n\n /* Active/Pressed state - only for button elements */\n &[role=\"button\"]:active:not(:disabled) {\n transform: translateY(0);\n box-shadow:\n 0 1px 4px rgba(91, 141, 239, 0.2),\n 0 1px 2px rgba(139, 92, 246, 0.1);\n\n &::after {\n box-shadow:\n 1px 1px 2px rgba(91, 141, 239, 0.1);\n }\n }\n\n ${({ $isPressed }) =>\n $isPressed &&\n css`\n transform: translateY(0) scale(0.98);\n box-shadow:\n 0 1px 4px rgba(91, 141, 239, 0.2),\n 0 1px 2px rgba(139, 92, 246, 0.1);\n\n &::after {\n box-shadow:\n 1px 1px 2px rgba(91, 141, 239, 0.1);\n }\n `}\n\n /* Focus state for accessibility */\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: 2px solid #5B8DEF;\n outline-offset: 3px;\n box-shadow:\n 0 4px 12px rgba(91, 141, 239, 0.35),\n 0 2px 6px rgba(139, 92, 246, 0.25),\n 0 0 0 3px rgba(91, 141, 239, 0.1);\n }\n\n /* Disabled state */\n &:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n transform: none;\n box-shadow: none;\n\n &::after {\n opacity: 0.5;\n box-shadow: none;\n }\n }\n`;\n","import type { AriaButtonProps } from '@react-aria/button';\nimport { useButton } from '@react-aria/button';\nimport { useRef } from 'react';\nimport { StyledUserMessage } from './UserMessage.styles';\n\nexport interface UserMessageProps extends AriaButtonProps {\n /**\n * The message text to display\n */\n children: React.ReactNode;\n /**\n * Additional CSS class name\n */\n className?: string;\n /**\n * Whether the message is in a pressed state\n */\n isPressed?: boolean;\n /**\n * Optional click handler\n */\n onPress?: () => void;\n}\n\n/**\n * UserMessage component - Displays a user message in a gradient pill\n *\n * This component renders a user message with a purple-to-blue gradient background,\n * pill-shaped design with fully rounded ends, and white text. It uses React ARIA\n * for accessibility and supports keyboard navigation.\n *\n * @example\n * ```tsx\n * <UserMessage onPress={() => console.log('clicked')}>\n * Can you export this as a CSV?\n * </UserMessage>\n * ```\n */\nexport function UserMessage({\n children,\n className,\n isPressed = false,\n onPress,\n ...ariaProps\n}: UserMessageProps) {\n const ref = useRef<HTMLButtonElement>(null);\n\n // If no onPress handler, render as non-interactive div\n if (!onPress) {\n return (\n <StyledUserMessage as=\"div\" className={className} $isPressed={isPressed} role=\"presentation\">\n {children}\n </StyledUserMessage>\n );\n }\n\n // Otherwise render as interactive button with React ARIA\n const { buttonProps, isPressed: ariaPressedState } = useButton(\n {\n ...ariaProps,\n onPress,\n },\n ref\n );\n\n return (\n <StyledUserMessage\n {...buttonProps}\n ref={ref}\n className={className}\n $isPressed={isPressed || ariaPressedState}\n role=\"button\"\n tabIndex={0}\n >\n {children}\n </StyledUserMessage>\n );\n}\n\nUserMessage.displayName = 'UserMessage';\n","import styled, { css } from 'styled-components';\nimport type { ButtonSize, ButtonVariant } from './Button';\n\ninterface StyledButtonProps {\n $variant: ButtonVariant;\n $size: ButtonSize;\n $isPressed: boolean;\n $isLoading: boolean;\n}\n\nconst variantStyles = {\n primary: css`\n background-color: ${({ theme }) => theme?.colors?.primary ?? '#0066FF'};\n color: white;\n border: none;\n\n &:hover:not(:disabled) {\n opacity: 0.9;\n transform: translateY(-1px);\n }\n\n &:active:not(:disabled) {\n opacity: 0.8;\n transform: translateY(0);\n }\n\n &:focus-visible {\n outline: 2px solid ${({ theme }) => theme?.colors?.primary ?? '#0066FF'};\n outline-offset: 2px;\n }\n `,\n secondary: css`\n background-color: transparent;\n color: ${({ theme }) => theme?.colors?.text ?? '#000000'};\n border: 1px solid ${({ theme }) => theme?.colors?.border ?? '#E0E0E0'};\n\n &:hover:not(:disabled) {\n background-color: ${({ theme }) => theme?.colors?.surface ?? '#ffffff'};\n border-color: ${({ theme }) => theme?.colors?.primary ?? '#0066FF'};\n }\n\n &:active:not(:disabled) {\n background-color: ${({ theme }) => theme?.colors?.border ?? '#E0E0E0'};\n }\n\n &:focus-visible {\n outline: 2px solid ${({ theme }) => theme?.colors?.primary ?? '#0066FF'};\n outline-offset: 2px;\n }\n `,\n icon: css`\n background-color: transparent;\n color: ${({ theme }) => theme?.colors?.text ?? '#000000'};\n border: none;\n padding: ${({ theme }) => theme?.spacing?.sm ?? '8px'};\n min-width: auto;\n\n &:hover:not(:disabled) {\n background-color: ${({ theme }) => theme?.colors?.border ?? '#E0E0E0'};\n opacity: 0.8;\n }\n\n &:active:not(:disabled) {\n opacity: 0.6;\n }\n\n &:focus-visible {\n outline: 2px solid ${({ theme }) => theme?.colors?.primary ?? '#0066FF'};\n outline-offset: 2px;\n }\n `,\n};\n\nconst sizeStyles = {\n small: css`\n padding: ${({ theme }) => theme?.spacing?.xs ?? '4px'} ${({ theme }) => theme?.spacing?.sm ?? '8px'};\n font-size: 0.875rem;\n min-width: 60px;\n height: 28px;\n `,\n medium: css`\n padding: ${({ theme }) => theme?.spacing?.sm ?? '8px'} ${({ theme }) => theme?.spacing?.md ?? '16px'};\n font-size: 1rem;\n min-width: 80px;\n height: 36px;\n `,\n large: css`\n padding: ${({ theme }) => theme?.spacing?.md ?? '16px'} ${({ theme }) => theme?.spacing?.lg ?? '24px'};\n font-size: 1.125rem;\n min-width: 100px;\n height: 44px;\n `,\n};\n\nexport const StyledButton = styled.button<StyledButtonProps>`\n /* Base styles */\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: ${({ theme }) => theme?.spacing?.xs ?? '4px'};\n font-family: ${({ theme }) => theme?.fonts?.body ?? 'system-ui, sans-serif'};\n font-weight: 500;\n border-radius: ${({ theme }) => theme?.radii?.md ?? '8px'};\n cursor: pointer;\n transition: all 0.2s ease-in-out;\n white-space: nowrap;\n user-select: none;\n\n /* Variant styles */\n ${({ $variant }) => variantStyles[$variant]}\n\n /* Size styles */\n ${({ $size, $variant }) => $variant !== 'icon' && sizeStyles[$size]}\n\n /* Icon variant size overrides */\n ${({ $variant, $size }) =>\n $variant === 'icon' &&\n css`\n width: ${$size === 'small' ? '28px' : $size === 'large' ? '44px' : '36px'};\n height: ${$size === 'small' ? '28px' : $size === 'large' ? '44px' : '36px'};\n border-radius: ${({ theme }) => theme?.radii?.sm ?? '4px'};\n `}\n\n /* Pressed state */\n ${({ $isPressed }) =>\n $isPressed &&\n css`\n transform: scale(0.98);\n `}\n\n /* Loading state */\n ${({ $isLoading }) =>\n $isLoading &&\n css`\n cursor: wait;\n opacity: 0.7;\n `}\n\n /* Disabled state */\n &:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n transform: none;\n }\n\n /* Remove default focus outline, using focus-visible instead */\n &:focus {\n outline: none;\n }\n`;\n","import type { AriaButtonProps } from '@react-aria/button';\nimport { useButton } from '@react-aria/button';\nimport { useRef } from 'react';\nimport { StyledButton } from './Button.styles';\n\nexport type ButtonVariant = 'primary' | 'secondary' | 'icon';\nexport type ButtonSize = 'small' | 'medium' | 'large';\n\nexport interface ButtonProps extends AriaButtonProps {\n variant?: ButtonVariant;\n size?: ButtonSize;\n children: React.ReactNode;\n className?: string;\n disabled?: boolean;\n isLoading?: boolean;\n}\n\nexport function Button({\n variant = 'primary',\n size = 'medium',\n children,\n className,\n disabled = false,\n isLoading = false,\n ...ariaProps\n}: ButtonProps) {\n const ref = useRef<HTMLButtonElement>(null);\n const { buttonProps, isPressed } = useButton(\n {\n ...ariaProps,\n isDisabled: disabled || isLoading,\n },\n ref\n );\n\n return (\n <StyledButton\n {...buttonProps}\n ref={ref}\n className={className}\n $variant={variant}\n $size={size}\n $isPressed={isPressed}\n $isLoading={isLoading}\n disabled={disabled || isLoading}\n >\n {isLoading ? (\n <span aria-live=\"polite\" aria-busy=\"true\">\n Loading...\n </span>\n ) : (\n children\n )}\n </StyledButton>\n );\n}\n\nButton.displayName = 'Button';\n","import styled, { css } from 'styled-components';\nimport type { ActionsLayout } from './Actions';\n\ninterface ActionsContainerProps {\n $layout: ActionsLayout;\n}\n\nexport const ActionsContainer = styled.div<ActionsContainerProps>`\n display: flex;\n gap: ${({ theme }) => theme?.spacing?.sm ?? '8px'};\n align-items: center;\n\n ${({ $layout }) =>\n $layout === 'horizontal'\n ? css`\n flex-direction: row;\n flex-wrap: wrap;\n `\n : css`\n flex-direction: column;\n align-items: stretch;\n\n button {\n width: 100%;\n }\n `}\n`;\n","import type React from 'react';\nimport { Button } from '../Button';\nimport { ActionsContainer } from './Actions.styles';\n\nexport type ActionVariant = 'primary' | 'secondary' | 'icon';\nexport type ActionsLayout = 'horizontal' | 'vertical';\n\nexport interface Action {\n id: string;\n label: string;\n onClick: () => void;\n variant?: ActionVariant;\n disabled?: boolean;\n icon?: React.ReactNode;\n}\n\nexport interface ActionsProps {\n actions: Action[];\n layout?: ActionsLayout;\n className?: string;\n}\n\nexport function Actions({ actions, layout = 'horizontal', className }: ActionsProps) {\n return (\n <ActionsContainer $layout={layout} className={className}>\n {actions.map((action) => (\n <Button\n key={action.id}\n variant={action.variant || 'secondary'}\n onPress={action.onClick}\n isDisabled={action.disabled}\n aria-label={action.label}\n >\n {action.icon && <span aria-hidden=\"true\">{action.icon}</span>}\n {action.variant !== 'icon' && action.label}\n </Button>\n ))}\n </ActionsContainer>\n );\n}\n\nActions.displayName = 'Actions';\n","import styled, { keyframes } from 'styled-components';\n\n// Pulse animation matching AssistantThinking\nconst dotPulse = keyframes`\n 0%, 100% {\n opacity: 0.3;\n transform: scale(0.8);\n }\n 50% {\n opacity: 1;\n transform: scale(1);\n }\n`;\n\n// Fade in animation for streaming text\nconst fadeIn = keyframes`\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n`;\n\n// Cursor blink animation for streaming\nconst blink = keyframes`\n 0%, 49% {\n opacity: 1;\n }\n 50%, 100% {\n opacity: 0;\n }\n`;\n\nexport const ResponseContainer = styled.div`\n display: inline-flex;\n align-items: center;\n gap: 12px;\n padding: 12px 16px;\n background-color: #2c2c2e;\n border-radius: 16px;\n box-shadow: none;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu',\n 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;\n max-width: fit-content;\n margin: 0 auto;\n`;\n\nexport const LoadingDots = styled.div`\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 0 4px;\n`;\n\nexport const Dot = styled.span<{ delay: number }>`\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background-color: #8e8e93;\n animation: ${dotPulse} 1.4s ease-in-out infinite;\n animation-delay: ${(props) => props.delay}s;\n`;\n\nexport const TypingIndicator = styled.div`\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 0 4px;\n\n ${Dot} {\n width: 6px;\n height: 6px;\n background-color: #8e8e93;\n animation: ${dotPulse} 1.4s ease-in-out infinite;\n }\n`;\n\nexport const Message = styled.span`\n font-size: 14px;\n color: #e5e5e7;\n font-weight: 400;\n line-height: 1.5;\n white-space: nowrap;\n`;\n\nexport const StreamingText = styled.div`\n font-size: 14px;\n line-height: 1.5;\n color: #e5e5e7;\n animation: ${fadeIn} 0.3s ease-in;\n position: relative;\n font-weight: 400;\n white-space: nowrap;\n\n /* Blinking cursor effect */\n &::after {\n content: '|';\n margin-left: 0.125rem;\n animation: ${blink} 1s infinite;\n color: #8e8e93;\n font-weight: 400;\n }\n`;\n","import {\n Dot,\n LoadingDots,\n Message,\n ResponseContainer,\n StreamingText,\n TypingIndicator,\n} from './Response.styles';\n\nexport interface ResponseProps {\n /** Loading state - shows animated dots */\n isLoading?: boolean;\n /** Typing state - shows typing indicator */\n isTyping?: boolean;\n /** Streaming state - shows text being typed */\n isStreaming?: boolean;\n /** Content to display when streaming */\n streamingContent?: string;\n /** Message to display with loading/typing state */\n message?: string;\n /** Additional CSS class name */\n className?: string;\n}\n\n/**\n * Response component for displaying loading and streaming states\n * Shows animated loading dots, typing indicators, and streaming text\n */\nexport const Response = ({\n isLoading = false,\n isTyping = false,\n isStreaming = false,\n streamingContent = '',\n message = 'Thinking...',\n className,\n}: ResponseProps) => {\n // Show loading dots\n if (isLoading) {\n return (\n <ResponseContainer className={className} data-testid=\"response-loading\">\n <LoadingDots aria-hidden=\"true\">\n <Dot delay={0} />\n <Dot delay={0.15} />\n <Dot delay={0.3} />\n </LoadingDots>\n <Message>{message}</Message>\n </ResponseContainer>\n );\n }\n\n // Show typing indicator\n if (isTyping) {\n return (\n <ResponseContainer className={className} data-testid=\"response-typing\">\n <TypingIndicator aria-hidden=\"true\">\n <Dot delay={0} />\n <Dot delay={0.15} />\n <Dot delay={0.3} />\n </TypingIndicator>\n <Message>{message}</Message>\n </ResponseContainer>\n );\n }\n\n // Show streaming text\n if (isStreaming && streamingContent) {\n return (\n <ResponseContainer className={className} data-testid=\"response-streaming\">\n <StreamingText>{streamingContent}</StreamingText>\n </ResponseContainer>\n );\n }\n\n // Empty state\n return null;\n};\n","import styled, { keyframes } from 'styled-components';\n\n// Pulse animation matching AssistantThinking\nconst dotPulse = keyframes`\n 0%, 100% {\n opacity: 0.3;\n transform: scale(0.8);\n }\n 50% {\n opacity: 1;\n transform: scale(1);\n }\n`;\n\n// Shake animation for error indicator\nconst shake = keyframes`\n 0%, 100% {\n transform: translateX(0);\n }\n 25% {\n transform: translateX(-5px);\n }\n 75% {\n transform: translateX(5px);\n }\n`;\n\nexport const AgentStateContainer = styled.div<{ isError?: boolean }>`\n display: inline-flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n padding: 12px 16px;\n background-color: ${(props) => (props.isError ? '#3a1f1f' : '#2c2c2e')};\n border-radius: 16px;\n border: ${(props) => (props.isError ? '1px solid #7f1d1d' : 'none')};\n box-shadow: none;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu',\n 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;\n max-width: fit-content;\n margin: 0 auto;\n`;\n\nexport const StateContent = styled.div`\n display: flex;\n flex-direction: column;\n gap: 8px;\n align-items: center;\n width: 100%;\n`;\n\nexport const IdleIndicator = styled.div`\n width: 6px;\n height: 6px;\n background-color: #8e8e93;\n border-radius: 50%;\n animation: ${dotPulse} 2s infinite ease-in-out;\n`;\n\nexport const ErrorIndicator = styled.div`\n width: 6px;\n height: 6px;\n background-color: #ff6b6b;\n border-radius: 50%;\n animation: ${shake} 0.5s ease-in-out;\n`;\n\nexport const StateLabel = styled.span`\n font-size: 14px;\n font-weight: 400;\n color: #e5e5e7;\n line-height: 1.5;\n white-space: nowrap;\n`;\n\nexport const MessageText = styled.p`\n font-size: 14px;\n color: #8e8e93;\n line-height: 1.5;\n margin: 0;\n text-align: center;\n white-space: nowrap;\n`;\n\nexport const ProgressBar = styled.div`\n width: 100%;\n height: 4px;\n background-color: #3a3a3c;\n border-radius: 2px;\n overflow: hidden;\n margin-top: 4px;\n`;\n\nexport const ProgressBarFill = styled.div<{ progress: number }>`\n height: 100%;\n width: ${(props) => Math.min(Math.max(props.progress, 0), 100)}%;\n background: linear-gradient(135deg, #8B5CF6 0%, #EC4899 100%);\n border-radius: 2px;\n transition: width 0.3s ease-in-out;\n`;\n","import { Response } from '../Response';\nimport {\n AgentStateContainer,\n ErrorIndicator,\n IdleIndicator,\n ProgressBar,\n ProgressBarFill,\n StateContent,\n StateLabel,\n} from './AgentState.styles';\n\nexport interface AgentStateProps {\n /** Current agent state */\n state: 'idle' | 'thinking' | 'responding' | 'error';\n /** Optional message to display */\n message?: string;\n /** Optional progress percentage (0-100) */\n progress?: number;\n /** Additional CSS class name */\n className?: string;\n}\n\n/**\n * AgentState component for displaying agent status\n * Styled to match AssistantThinking and Response components with dark theme\n */\nexport const AgentState = ({ state, message, progress, className }: AgentStateProps) => {\n // Idle state - show pulsing indicator\n if (state === 'idle') {\n return (\n <AgentStateContainer className={className} data-testid=\"agent-state-idle\">\n <StateContent>\n <IdleIndicator />\n <StateLabel>{message || 'Agent is idle'}</StateLabel>\n {progress !== undefined && (\n <ProgressBar>\n <ProgressBarFill progress={progress} />\n </ProgressBar>\n )}\n </StateContent>\n </AgentStateContainer>\n );\n }\n\n // Error state - show error indicator\n if (state === 'error') {\n return (\n <AgentStateContainer className={className} data-testid=\"agent-state-error\" isError>\n <StateContent>\n <ErrorIndicator />\n <StateLabel>{message || 'Error occurred'}</StateLabel>\n </StateContent>\n </AgentStateContainer>\n );\n }\n\n // Thinking state - use Response component with loading dots\n if (state === 'thinking') {\n return <Response isLoading message={message || 'Agent is thinking...'} className={className} />;\n }\n\n // Responding state - use Response component with typing indicator\n if (state === 'responding') {\n return (\n <Response isTyping message={message || 'Agent is responding...'} className={className} />\n );\n }\n\n return null;\n};\n","import styled from 'styled-components';\n\nexport const FooterContainer = styled.footer`\n display: flex;\n align-items: center;\n justify-content: center;\n padding: ${({ theme }) => theme?.spacing?.sm ?? '8px'} ${({ theme }) => theme?.spacing?.md ?? '16px'};\n background-color: ${({ theme }) => theme?.colors?.surface ?? '#ffffff'};\n border-top: 1px solid ${({ theme }) => theme?.colors?.border ?? '#E0E0E0'};\n min-height: 44px;\n`;\n\nexport const FooterContent = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: ${({ theme }) => theme?.spacing?.md ?? '16px'};\n width: 100%;\n max-width: 100%;\n font-size: 0.75rem;\n color: ${({ theme }) => theme?.colors?.text ?? '#000000'};\n opacity: 0.6;\n font-family: ${({ theme }) => theme?.fonts?.body ?? 'system-ui, sans-serif'};\n line-height: 1.4;\n`;\n\nexport const FooterBranding = styled.div`\n display: flex;\n align-items: center;\n gap: ${({ theme }) => theme?.spacing?.xs ?? '4px'};\n flex-shrink: 0;\n`;\n\nexport const FooterStatus = styled.div`\n display: flex;\n align-items: center;\n gap: ${({ theme }) => theme?.spacing?.xs ?? '4px'};\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: 0.75rem;\n opacity: 0.8;\n`;\n\nexport const FooterLink = styled.a`\n color: ${({ theme }) => theme?.colors?.primary ?? '#0066FF'};\n text-decoration: none;\n transition: opacity 150ms ease;\n cursor: pointer;\n\n &:hover {\n opacity: 0.8;\n text-decoration: underline;\n }\n\n &:focus-visible {\n outline: 2px solid ${({ theme }) => theme?.colors?.primary ?? '#0066FF'};\n outline-offset: 2px;\n border-radius: ${({ theme }) => theme?.radii?.sm ?? '4px'};\n }\n`;\n","import type React from 'react';\nimport {\n FooterBranding,\n FooterContainer,\n FooterContent,\n FooterLink,\n FooterStatus,\n} from './Footer.styles';\n\nexport interface FooterProps {\n /**\n * Branding text to display (e.g., \"Powered by CopilotKit\")\n */\n branding?: string;\n\n /**\n * Optional status text (e.g., \"Connected\", \"Typing...\", \"3 tokens remaining\")\n */\n status?: string;\n\n /**\n * Optional link URL for the branding text\n */\n brandingUrl?: string;\n\n /**\n * Callback when branding link is clicked\n */\n onBrandingClick?: () => void;\n\n /**\n * Additional CSS class name for custom styling\n */\n className?: string;\n}\n\n/**\n * Footer Component\n *\n * A chat footer component that displays branding, status information, and optional links.\n * Typically used at the bottom of a chat interface to show provider information or connection status.\n *\n * @example\n * ```tsx\n * <Footer\n * branding=\"Powered by CopilotKit\"\n * status=\"Connected\"\n * brandingUrl=\"https://copilotkit.ai\"\n * />\n * ```\n */\nexport const Footer: React.FC<FooterProps> = ({\n branding,\n status,\n brandingUrl,\n onBrandingClick,\n className,\n}) => {\n // If no content, don't render\n if (!branding && !status) {\n return null;\n }\n\n const handleBrandingClick = (e: React.MouseEvent<HTMLAnchorElement>) => {\n if (onBrandingClick) {\n e.preventDefault();\n onBrandingClick();\n }\n };\n\n return (\n <FooterContainer className={className}>\n <FooterContent>\n {branding && (\n <FooterBranding>\n {brandingUrl ? (\n <FooterLink\n href={brandingUrl}\n onClick={handleBrandingClick}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {branding}\n </FooterLink>\n ) : (\n branding\n )}\n </FooterBranding>\n )}\n\n {status && <FooterStatus>{status}</FooterStatus>}\n </FooterContent>\n </FooterContainer>\n );\n};\n\nFooter.displayName = 'Footer';\n","import styled from 'styled-components';\n\nexport const HeaderContainer = styled.header`\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px;\n background-color: #2c2c2e;\n border-bottom: 1px solid #3a3a3c;\n min-height: 60px;\n box-sizing: border-box;\n\n @media (min-width: 640px) {\n padding: 12px;\n }\n`;\n\nexport const HeaderContent = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${({ theme }) => theme?.spacing?.xs ?? '4px'};\n flex: 1;\n min-width: 0;\n`;\n\nexport const HeaderTitle = styled.h1`\n margin: 0;\n font-size: 1rem;\n font-weight: 600;\n color: #e5e5e7;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu',\n 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;\n line-height: 1.5;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nexport const HeaderSubtitle = styled.p`\n margin: 0;\n font-size: 0.875rem;\n color: #8e8e93;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu',\n 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;\n line-height: 1.4;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nexport const HeaderActions = styled.div`\n display: flex;\n align-items: center;\n gap: ${({ theme }) => theme?.spacing?.xs ?? '4px'};\n margin-left: ${({ theme }) => theme?.spacing?.md ?? '16px'};\n`;\n\nexport const ActionButton = styled.button`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n padding: 0;\n background-color: transparent;\n border: none;\n border-radius: 6px;\n color: #e5e5e7;\n cursor: pointer;\n transition: all 150ms ease;\n\n &:hover:not(:disabled) {\n background-color: #3a3a3c;\n }\n\n &:active:not(:disabled) {\n transform: scale(0.95);\n background-color: #48484a;\n }\n\n &:focus-visible {\n outline: 2px solid #5B9FFF;\n outline-offset: 2px;\n }\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.3;\n }\n\n svg {\n width: 16px;\n height: 16px;\n display: block;\n }\n`;\n","import { useButton } from '@react-aria/button';\nimport type React from 'react';\nimport { useRef } from 'react';\nimport {\n ActionButton,\n HeaderActions,\n HeaderContainer,\n HeaderContent,\n HeaderSubtitle,\n HeaderTitle,\n} from './Header.styles';\n\nexport interface HeaderProps {\n /**\n * The main title text displayed in the header\n */\n title: string;\n\n /**\n * Optional subtitle text displayed below the title\n */\n subtitle?: string;\n\n /**\n * Callback function triggered when the close button is clicked\n */\n onClose?: () => void;\n\n /**\n * Callback function triggered when the minimize button is clicked\n */\n onMinimize?: () => void;\n\n /**\n * Additional CSS class name for custom styling\n */\n className?: string;\n}\n\n/**\n * Header Component\n *\n * A chat header component that displays a title, optional subtitle, and action buttons.\n * Built with React ARIA for accessibility and Styled Components for theming.\n *\n * @example\n * ```tsx\n * <Header\n * title=\"AI Assistant\"\n * subtitle=\"How can I help you today?\"\n * onClose={() => console.log('Close clicked')}\n * onMinimize={() => console.log('Minimize clicked')}\n * />\n * ```\n */\nexport const Header: React.FC<HeaderProps> = ({\n title,\n subtitle,\n onClose,\n onMinimize,\n className,\n}) => {\n const minimizeRef = useRef<HTMLButtonElement>(null);\n const closeRef = useRef<HTMLButtonElement>(null);\n\n const { buttonProps: minimizeProps } = useButton(\n {\n onPress: onMinimize,\n 'aria-label': 'Minimize',\n isDisabled: !onMinimize,\n },\n minimizeRef\n );\n\n const { buttonProps: closeProps } = useButton(\n {\n onPress: onClose,\n 'aria-label': 'Close',\n isDisabled: !onClose,\n },\n closeRef\n );\n\n return (\n <HeaderContainer className={className}>\n <HeaderContent>\n <HeaderTitle>{title}</HeaderTitle>\n {subtitle && <HeaderSubtitle>{subtitle}</HeaderSubtitle>}\n </HeaderContent>\n\n <HeaderActions>\n {onMinimize && (\n <ActionButton ref={minimizeRef} {...minimizeProps} data-action=\"minimize\">\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <title>Minimize</title>\n <line x1=\"3\" y1=\"8\" x2=\"13\" y2=\"8\" stroke=\"currentColor\" strokeWidth=\"2\" />\n </svg>\n </ActionButton>\n )}\n\n {onClose && (\n <ActionButton ref={closeRef} {...closeProps} data-action=\"close\">\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <title>Close</title>\n <line x1=\"4\" y1=\"4\" x2=\"12\" y2=\"12\" stroke=\"currentColor\" strokeWidth=\"2\" />\n <line x1=\"12\" y1=\"4\" x2=\"4\" y2=\"12\" stroke=\"currentColor\" strokeWidth=\"2\" />\n </svg>\n </ActionButton>\n )}\n </HeaderActions>\n </HeaderContainer>\n );\n};\n\nHeader.displayName = 'Header';\n","import styled from 'styled-components';\n\nexport const InputContainer = styled.div`\n\tdisplay: flex;\n\tflex-direction: column;\n\twidth: 100%;\n\tposition: relative;\n`;\n\nexport const InputWrapper = styled.div`\n\tdisplay: flex;\n\talign-items: flex-end;\n\tgap: 8px;\n\tpadding: 12px;\n\tbackground-color: #ffffff;\n\tborder: 1px solid #e5e7eb;\n\tborder-radius: 12px;\n\ttransition: all 0.2s ease;\n\n\t&:focus-within {\n\t\tborder-color: #3b82f6;\n\t\tbox-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n\t}\n\n\t&:hover:not(:focus-within) {\n\t\tborder-color: #d1d5db;\n\t}\n`;\n\ninterface TextAreaProps {\n $maxRows?: number;\n disabled?: boolean;\n readOnly?: boolean;\n}\n\nexport const TextArea = styled.textarea<TextAreaProps>`\n\tflex: 1;\n\tmin-height: 24px;\n\tmax-height: ${(props) => `${(props.$maxRows || 5) * 24}px`};\n\tpadding: 0;\n\tborder: none;\n\toutline: none;\n\tresize: none;\n\tfont-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu',\n\t\t'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;\n\tfont-size: 14px;\n\tline-height: 24px;\n\tcolor: #111827;\n\tbackground: transparent;\n\toverflow-y: auto;\n\n\t&::placeholder {\n\t\tcolor: #9ca3af;\n\t}\n\n\t&:disabled {\n\t\tcolor: #9ca3af;\n\t\tcursor: not-allowed;\n\t}\n\n\t&:read-only {\n\t\tcursor: default;\n\t}\n\n\t/* Custom scrollbar */\n\t&::-webkit-scrollbar {\n\t\twidth: 6px;\n\t}\n\n\t&::-webkit-scrollbar-track {\n\t\tbackground: transparent;\n\t}\n\n\t&::-webkit-scrollbar-thumb {\n\t\tbackground: #d1d5db;\n\t\tborder-radius: 3px;\n\t}\n\n\t&::-webkit-scrollbar-thumb:hover {\n\t\tbackground: #9ca3af;\n\t}\n`;\n\ninterface SendButtonProps {\n disabled?: boolean;\n}\n\nexport const SendButton = styled.button<SendButtonProps>`\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: 36px;\n\theight: 36px;\n\tpadding: 0;\n\tborder: none;\n\tborder-radius: 8px;\n\tbackground-color: ${(props) => (props.disabled ? '#e5e7eb' : '#3b82f6')};\n\tcolor: ${(props) => (props.disabled ? '#9ca3af' : '#ffffff')};\n\tcursor: ${(props) => (props.disabled ? 'not-allowed' : 'pointer')};\n\ttransition: all 0.2s ease;\n\tflex-shrink: 0;\n\n\t&:hover:not(:disabled) {\n\t\tbackground-color: #2563eb;\n\t\ttransform: translateY(-1px);\n\t}\n\n\t&:active:not(:disabled) {\n\t\ttransform: translateY(0);\n\t}\n\n\t&:focus-visible {\n\t\toutline: 2px solid #3b82f6;\n\t\toutline-offset: 2px;\n\t}\n\n\tsvg {\n\t\twidth: 20px;\n\t\theight: 20px;\n\t}\n`;\n","import type { AriaTextFieldProps } from '@react-aria/textfield';\nimport { useTextField } from '@react-aria/textfield';\nimport React, { type KeyboardEvent, useRef } from 'react';\nimport { InputContainer, InputWrapper, SendButton, TextArea } from './Input.styles';\n\nexport interface InputProps\n extends Omit<AriaTextFieldProps, 'onChange' | 'onFocus' | 'onBlur' | 'onKeyDown' | 'onKeyUp'> {\n /** Current message value */\n value?: string;\n /** Callback when message value changes */\n onChange?: (value: string) => void;\n /** Callback when message is submitted */\n onSubmit?: (message: string) => void;\n /** Placeholder text */\n placeholder?: string;\n /** Whether the input is disabled */\n isDisabled?: boolean;\n /** Whether the input is read-only */\n isReadOnly?: boolean;\n /** Maximum number of rows before scrolling */\n maxRows?: number;\n /** Whether to auto-focus the input */\n autoFocus?: boolean;\n /** Additional CSS class name */\n className?: string;\n /** ARIA label for the input */\n 'aria-label'?: string;\n}\n\n/**\n * Input component for chat interfaces\n * Features:\n * - Multi-line text support\n * - Submit on Enter, Shift+Enter for new line\n * - React ARIA for accessibility\n * - Auto-growing textarea\n * - Integrated send button\n */\nexport const Input: React.FC<InputProps> = ({\n value = '',\n onChange,\n onSubmit,\n placeholder = 'Type a message...',\n isDisabled = false,\n isReadOnly = false,\n maxRows = 5,\n autoFocus = false,\n className,\n 'aria-label': ariaLabel = 'Message input',\n ...ariaProps\n}) => {\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n\n // React ARIA hook for accessibility\n const { inputProps } = useTextField(\n {\n ...ariaProps,\n 'aria-label': ariaLabel,\n value,\n onChange: (newValue: string) => {\n onChange?.(newValue);\n },\n isDisabled,\n isReadOnly,\n inputElementType: 'textarea',\n },\n textareaRef\n );\n\n // Handle keyboard events\n const handleKeyDown = (e: KeyboardEvent<HTMLTextAreaElement>) => {\n // Submit on Enter (without Shift)\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n if (value.trim() && onSubmit && !isDisabled && !isReadOnly) {\n onSubmit(value.trim());\n // Clear the input after submission\n onChange?.('');\n }\n }\n // Shift+Enter adds a new line (default behavior)\n };\n\n // Handle send button click\n const handleSend = () => {\n if (value.trim() && onSubmit && !isDisabled && !isReadOnly) {\n onSubmit(value.trim());\n onChange?.('');\n // Refocus the textarea after sending\n textareaRef.current?.focus();\n }\n };\n\n const canSend = value.trim().length > 0 && !isDisabled && !isReadOnly;\n\n return (\n <InputContainer className={className}>\n <InputWrapper>\n <TextArea\n {...inputProps}\n ref={textareaRef}\n placeholder={placeholder}\n onKeyDown={handleKeyDown}\n $maxRows={maxRows}\n autoFocus={autoFocus}\n disabled={isDisabled}\n readOnly={isReadOnly}\n />\n <SendButton\n type=\"button\"\n onClick={handleSend}\n disabled={!canSend}\n aria-label=\"Send message\"\n title=\"Send message (Enter)\"\n >\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n role=\"img\"\n aria-hidden=\"true\"\n >\n <title>Send Icon</title>\n <path\n d=\"M2.5 10L17.5 3.75L11.25 18.75L10 12.5L2.5 10Z\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </SendButton>\n </InputWrapper>\n </InputContainer>\n );\n};\n","import styled from 'styled-components';\n\ninterface FileAttachmentContainerProps {\n $isInteractive?: boolean;\n}\n\nexport const FileAttachmentContainer = styled.div<FileAttachmentContainerProps>`\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px;\n background-color: #3a3a3c;\n border: 1px solid #48484a;\n border-radius: 8px;\n max-width: 320px;\n cursor: ${(props) => (props.$isInteractive ? 'pointer' : 'default')};\n transition: border-color 0.15s ease;\n\n /* Remove default button styles when used as button */\n ${(props) =>\n props.$isInteractive &&\n `\n font: inherit;\n color: inherit;\n text-align: left;\n appearance: none;\n -webkit-appearance: none;\n\n &:hover {\n border-color: #5a5a5c;\n background-color: #48484a;\n }\n\n &:focus-visible {\n outline: 2px solid #5B9FFF;\n outline-offset: 2px;\n border-color: #5B9FFF;\n }\n\n &:active {\n border-color: #6a6a6c;\n }\n `}\n`;\n\nexport const FileIconContainer = styled.div`\n flex-shrink: 0;\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 24px;\n line-height: 1;\n`;\n\nexport const FileInfo = styled.div`\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 2px;\n`;\n\nexport const FileTitle = styled.div`\n font-size: 14px;\n font-weight: 500;\n color: #e5e5e7;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu',\n 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;\n line-height: 1.4;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nexport const FileMetadata = styled.div`\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 12px;\n color: #8e8e93;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu',\n 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;\n line-height: 1.4;\n overflow: hidden;\n`;\n\nexport const FileSubtitle = styled.span`\n color: #8e8e93;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n\n &:last-child {\n flex-shrink: 0;\n }\n`;\n","import { useButton } from '@react-aria/button';\nimport type { AriaButtonProps } from '@react-types/button';\nimport type { PressEvent } from '@react-types/shared';\nimport type React from 'react';\nimport { useRef } from 'react';\nimport {\n FileAttachmentContainer,\n FileIconContainer,\n FileInfo,\n FileMetadata,\n FileSubtitle,\n FileTitle,\n} from './FileAttachment.styles';\n\nexport interface FileAttachmentProps extends Omit<AriaButtonProps, 'children'> {\n /** File name/title */\n title: string;\n /** File subtitle/category (e.g., \"Downloads\", \"Documents\") */\n subtitle?: string;\n /** File size in human-readable format (e.g., \"500 KB\", \"2.5 MB\") */\n size?: string;\n /** File icon emoji or Unicode character */\n icon?: string;\n /** Click handler for file interaction */\n onClick?: () => void;\n /** Custom className for styling */\n className?: string;\n}\n\n/**\n * FileAttachment component displays file information in assistant messages\n *\n * Features:\n * - File icon display (emoji or Unicode)\n * - File metadata (title, subtitle, size)\n * - Accessible keyboard navigation via React ARIA\n * - Clean, minimal card-based design\n * - WCAG 2.1 AA compliant\n *\n * @example\n * ```tsx\n * <FileAttachment\n * title=\"Example File\"\n * subtitle=\"Downloads\"\n * size=\"500 KB\"\n * icon=\"📄\"\n * onPress={() => console.log('File clicked')}\n * />\n * ```\n */\nexport const FileAttachment: React.FC<FileAttachmentProps> = ({\n title,\n subtitle,\n size,\n icon = '📄',\n onClick,\n onPress,\n className,\n ...ariaProps\n}) => {\n const ref = useRef<HTMLButtonElement>(null);\n const isInteractive = !!(onClick || onPress);\n\n // Combine onClick and onPress handlers\n const handlePress = (e: PressEvent) => {\n if (onClick) onClick();\n if (onPress) onPress(e);\n };\n\n const { buttonProps } = useButton(\n {\n ...ariaProps,\n onPress: isInteractive ? handlePress : undefined,\n isDisabled: !isInteractive,\n },\n ref\n );\n\n return (\n <FileAttachmentContainer\n {...(isInteractive ? buttonProps : {})}\n ref={isInteractive ? ref : undefined}\n className={className}\n $isInteractive={isInteractive}\n as={isInteractive ? 'button' : 'div'}\n >\n <FileIconContainer>{icon}</FileIconContainer>\n <FileInfo>\n <FileTitle>{title}</FileTitle>\n <FileMetadata>\n {subtitle && <FileSubtitle>{subtitle}</FileSubtitle>}\n {size && subtitle && <FileSubtitle aria-hidden=\"true\"> • </FileSubtitle>}\n {size && <FileSubtitle>{size}</FileSubtitle>}\n </FileMetadata>\n </FileInfo>\n </FileAttachmentContainer>\n );\n};\n\nexport default FileAttachment;\n","import styled, { keyframes } from 'styled-components';\n\nexport const MessageContainer = styled.div`\n display: flex;\n gap: 12px;\n align-items: flex-start;\n padding: 8px 0;\n max-width: 100%;\n`;\n\nexport const AvatarContainer = styled.div`\n flex-shrink: 0;\n`;\n\nexport const Avatar = styled.img`\n width: 32px;\n height: 32px;\n border-radius: 50%;\n object-fit: cover;\n background-color: #e5e7eb;\n`;\n\nexport const AvatarInitials = styled.div`\n width: 32px;\n height: 32px;\n border-radius: 50%;\n background: linear-gradient(135deg, #8B5CF6 0%, #EC4899 100%);\n color: white;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n font-weight: 600;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',\n 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;\n\n svg {\n width: 18px;\n height: 18px;\n }\n`;\n\nexport const ContentContainer = styled.div`\n flex: 1;\n min-width: 0;\n`;\n\nexport const MessageContent = styled.div`\n background-color: #2c2c2e;\n padding: 12px 16px;\n border-radius: 16px;\n border-top-left-radius: 4px;\n color: #e5e5e7;\n font-size: 14px;\n line-height: 1.5;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',\n 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;\n word-wrap: break-word;\n white-space: pre-wrap;\n`;\n\nexport const LoadingDots = styled.div`\n display: flex;\n gap: 6px;\n padding: 12px 16px;\n background-color: #2c2c2e;\n border-radius: 16px;\n border-top-left-radius: 4px;\n width: fit-content;\n`;\n\nconst bounce = keyframes`\n 0%, 60%, 100% {\n transform: translateY(0);\n }\n 30% {\n transform: translateY(-8px);\n }\n`;\n\nexport const LoadingDot = styled.div<{ delay: number }>`\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background-color: #8e8e93;\n animation: ${bounce} 1.4s ease-in-out infinite;\n animation-delay: ${(props) => props.delay}s;\n`;\n","import type React from 'react';\nimport styled from 'styled-components';\nimport {\n Avatar,\n AvatarContainer,\n AvatarInitials,\n ContentContainer,\n LoadingDot,\n LoadingDots,\n MessageContainer,\n MessageContent,\n} from './AssistantMessage.styles';\nimport { FileAttachment, type FileAttachmentProps } from './FileAttachment';\n\nconst AttachmentsContainer = styled.div`\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-top: 12px;\n`;\n\nexport interface AssistantMessageProps {\n /** Message content to display */\n content?: string;\n /** Avatar image URL */\n avatarUrl?: string;\n /** Avatar initials when no image is provided */\n avatarInitials?: string;\n /** Whether to show loading state */\n isLoading?: boolean;\n /** Custom className for styling */\n className?: string;\n /** Support for markdown rendering (future enhancement) */\n enableMarkdown?: boolean;\n /** File attachments to display below the message */\n attachments?: FileAttachmentProps[];\n}\n\n/**\n * AssistantMessage component displays AI assistant messages with avatar\n *\n * Features:\n * - Avatar with image or initials fallback\n * - Loading state with animated dots\n * - Markdown support (optional)\n * - Clean, modern design\n */\nexport const AssistantMessage: React.FC<AssistantMessageProps> = ({\n content = '',\n avatarUrl,\n avatarInitials: _avatarInitials = 'AI',\n isLoading = false,\n className,\n attachments = [],\n enableMarkdown: _enableMarkdown = false,\n}) => {\n const renderContent = () => {\n if (isLoading) {\n return (\n <LoadingDots>\n <LoadingDot delay={0} />\n <LoadingDot delay={0.2} />\n <LoadingDot delay={0.4} />\n </LoadingDots>\n );\n }\n\n // For now, render as plain text\n // TODO: Add markdown support when enableMarkdown is true\n return (\n <>\n {content && <MessageContent>{content}</MessageContent>}\n {attachments.length > 0 && (\n <AttachmentsContainer>\n {attachments.map((attachment, index) => (\n <FileAttachment key={`${attachment.title}-${index}`} {...attachment} />\n ))}\n </AttachmentsContainer>\n )}\n </>\n );\n };\n\n return (\n <MessageContainer className={className}>\n <AvatarContainer>\n {avatarUrl ? (\n <Avatar src={avatarUrl} alt=\"Assistant avatar\" />\n ) : (\n <AvatarInitials>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M17 13a4 4 0 0 1 0 8c-2.142 0-4-1.79-4-4h-2a4 4 0 1 1-.535-2h3.07A4 4 0 0 1 17 13M2 12v-2h2V7a4 4 0 0 1 4-4h8a4 4 0 0 1 4 4v3h2v2z\" />\n </svg>\n </AvatarInitials>\n )}\n </AvatarContainer>\n <ContentContainer>{renderContent()}</ContentContainer>\n </MessageContainer>\n );\n};\n\nexport default AssistantMessage;\n","import styled from 'styled-components';\n\n/**\n * Styled container for the messages area\n * Provides flexible layout and responsive spacing\n */\nexport const MessagesContainer = styled.div`\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow: hidden;\n background-color: #1c1c1e;\n padding: 8px;\n gap: 12px;\n box-sizing: border-box;\n\n /* Ensure proper scrolling behavior for child components */\n position: relative;\n min-height: 0;\n\n /* Desktop padding */\n @media (min-width: 640px) {\n padding: 12px;\n }\n`;\n","import type React from 'react';\nimport { MessagesContainer } from './Messages.styles';\n\nexport interface MessagesProps {\n /**\n * Children elements to be rendered inside the messages container\n */\n children?: React.ReactNode;\n /**\n * Additional CSS class name\n */\n className?: string;\n /**\n * ARIA label for accessibility\n */\n ariaLabel?: string;\n}\n\n/**\n * Messages component - Container for message list\n *\n * This component serves as a wrapper for the messages area,\n * providing consistent spacing and layout for chat messages.\n *\n * @example\n * ```tsx\n * <Messages ariaLabel=\"Chat messages\">\n * <MessagesList messages={messages} />\n * </Messages>\n * ```\n */\nexport const Messages: React.FC<MessagesProps> = ({\n children,\n className,\n ariaLabel = 'Messages',\n}) => {\n return (\n <MessagesContainer className={className} role=\"region\" aria-label={ariaLabel}>\n {children}\n </MessagesContainer>\n );\n};\n\nMessages.displayName = 'Messages';\n","import styled from 'styled-components';\n\nexport const MessagesListContainer = styled.div<{ $maxHeight: string }>`\n display: flex;\n flex-direction: column;\n width: 100%;\n max-height: ${(props) => props.$maxHeight};\n overflow-y: auto;\n overflow-x: hidden;\n position: relative;\n background: #ffffff;\n border: 1px solid #e5e7eb;\n border-radius: 8px;\n scroll-behavior: smooth;\n\n /* Custom scrollbar styling */\n &::-webkit-scrollbar {\n width: 8px;\n }\n\n &::-webkit-scrollbar-track {\n background: #f1f5f9;\n border-radius: 4px;\n }\n\n &::-webkit-scrollbar-thumb {\n background: #cbd5e1;\n border-radius: 4px;\n transition: background 0.2s ease;\n }\n\n &::-webkit-scrollbar-thumb:hover {\n background: #94a3b8;\n }\n\n /* Firefox scrollbar styling */\n scrollbar-width: thin;\n scrollbar-color: #cbd5e1 #f1f5f9;\n\n /* Ensure proper rendering on mobile */\n -webkit-overflow-scrolling: touch;\n`;\n\nexport const MessagesListContent = styled.div`\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 16px;\n min-height: min-content;\n\n /* Message styling */\n .message {\n display: flex;\n flex-direction: column;\n gap: 4px;\n padding: 12px 16px;\n border-radius: 8px;\n max-width: 85%;\n word-wrap: break-word;\n animation: messageSlideIn 0.2s ease-out;\n }\n\n @keyframes messageSlideIn {\n from {\n opacity: 0;\n transform: translateY(8px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n\n /* Role-specific message styling */\n .message--user {\n align-self: flex-end;\n background: #3b82f6;\n color: #ffffff;\n border-bottom-right-radius: 4px;\n }\n\n .message--assistant {\n align-self: flex-start;\n background: #f1f5f9;\n color: #1e293b;\n border-bottom-left-radius: 4px;\n }\n\n .message--system {\n align-self: center;\n background: #fef3c7;\n color: #92400e;\n font-size: 0.875rem;\n font-style: italic;\n max-width: 100%;\n text-align: center;\n }\n`;\n","import { type ReactNode, useEffect, useRef } from 'react';\nimport { MessagesListContainer, MessagesListContent } from './MessagesList.styles';\n\nexport interface Message {\n id: string;\n content: ReactNode;\n role: 'user' | 'assistant' | 'system';\n timestamp?: Date;\n}\n\nexport interface MessagesListProps {\n /** Array of messages to display */\n messages: Message[];\n /** Whether to automatically scroll to the bottom when new messages arrive */\n autoScroll?: boolean;\n /** Custom class name for the container */\n className?: string;\n /** Custom render function for individual messages */\n renderMessage?: (message: Message) => ReactNode;\n /** Callback when scroll reaches the top (for loading more messages) */\n onScrollTop?: () => void;\n /** Maximum height of the messages list */\n maxHeight?: string;\n}\n\n/**\n * MessagesList Component\n *\n * A scrollable message list component with auto-scroll functionality.\n * Designed for chat interfaces where messages need to be displayed\n * in a scrollable container with automatic scrolling to the latest message.\n *\n * Features:\n * - Auto-scroll to bottom on new messages\n * - Overflow handling with custom scrollbar\n * - Flexible message rendering\n * - Scroll event handling for pagination\n */\nexport const MessagesList = ({\n messages,\n autoScroll = true,\n className,\n renderMessage,\n onScrollTop,\n maxHeight = '600px',\n}: MessagesListProps) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const isUserScrollingRef = useRef(false);\n const scrollTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Auto-scroll to bottom when new messages arrive\n // biome-ignore lint/correctness/useExhaustiveDependencies: We need messages.length to trigger scroll on new messages\n useEffect(() => {\n if (autoScroll && !isUserScrollingRef.current && containerRef.current) {\n const container = containerRef.current;\n container.scrollTop = container.scrollHeight;\n }\n }, [messages.length, autoScroll]);\n\n // Handle scroll events\n const handleScroll = () => {\n if (!containerRef.current) return;\n\n const container = containerRef.current;\n const isAtBottom = container.scrollHeight - container.scrollTop - container.clientHeight < 10;\n\n // User is scrolling manually\n isUserScrollingRef.current = !isAtBottom;\n\n // Clear existing timeout\n if (scrollTimeoutRef.current) {\n clearTimeout(scrollTimeoutRef.current);\n }\n\n // Reset user scrolling flag after 1 second of no scrolling\n scrollTimeoutRef.current = setTimeout(() => {\n isUserScrollingRef.current = false;\n }, 1000);\n\n // Check if scrolled to top\n if (container.scrollTop === 0 && onScrollTop) {\n onScrollTop();\n }\n };\n\n // Cleanup timeout on unmount\n useEffect(() => {\n return () => {\n if (scrollTimeoutRef.current) {\n clearTimeout(scrollTimeoutRef.current);\n }\n };\n }, []);\n\n // Default message renderer\n const defaultRenderMessage = (message: Message) => (\n <div\n key={message.id}\n className={`message message--${message.role}`}\n data-message-id={message.id}\n data-role={message.role}\n >\n {message.content}\n </div>\n );\n\n return (\n <MessagesListContainer\n ref={containerRef}\n onScroll={handleScroll}\n className={className}\n $maxHeight={maxHeight}\n >\n <MessagesListContent ref={contentRef}>\n {messages.map(renderMessage || defaultRenderMessage)}\n </MessagesListContent>\n </MessagesListContainer>\n );\n};\n","import styled from 'styled-components';\n\n/**\n * Container for the user message, aligned to the right\n */\nexport const StyledUserMessage = styled.div`\n display: flex;\n justify-content: flex-end;\n align-items: flex-start;\n margin: 8px 0;\n padding: 0 16px;\n width: 100%;\n`;\n\n/**\n * The message bubble containing the user's text\n */\nexport const MessageBubble = styled.div`\n display: flex;\n flex-direction: column;\n max-width: 70%;\n padding: 12px 16px;\n border-radius: 18px 18px 4px 18px;\n\n /* User message colors - distinct from assistant messages */\n background-color: #007AFF;\n color: #FFFFFF;\n\n /* Box shadow for depth */\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);\n\n /* Smooth transitions */\n transition: all 0.2s ease-in-out;\n\n &:hover {\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15);\n }\n\n /* Username styling */\n strong {\n font-size: 12px;\n font-weight: 600;\n margin-bottom: 4px;\n opacity: 0.9;\n }\n`;\n\n/**\n * The actual message text content\n */\nexport const MessageContent = styled.p`\n margin: 0;\n font-size: 14px;\n line-height: 1.5;\n word-wrap: break-word;\n white-space: pre-wrap;\n`;\n\n/**\n * Optional timestamp display\n */\nexport const MessageTime = styled.time`\n font-size: 11px;\n opacity: 0.7;\n margin-top: 4px;\n text-align: right;\n`;\n","import {\n MessageBubble,\n MessageContent,\n MessageTime,\n StyledUserMessage,\n} from './UserMessage.styles';\n\nexport interface UserMessageProps {\n /** The message content to display */\n content: string;\n /** Optional timestamp for the message */\n timestamp?: string;\n /** Optional CSS class name */\n className?: string;\n /** Optional avatar URL */\n avatarUrl?: string;\n /** Optional username */\n username?: string;\n}\n\n/**\n * UserMessage component displays a user's message in a chat interface.\n * Styled with right alignment and distinct styling from assistant messages.\n */\nexport const UserMessage = ({\n content,\n timestamp,\n className,\n avatarUrl,\n username,\n}: UserMessageProps) => {\n return (\n <StyledUserMessage className={className}>\n <MessageBubble>\n {username && <strong>{username}</strong>}\n <MessageContent>{content}</MessageContent>\n {timestamp && <MessageTime>{timestamp}</MessageTime>}\n </MessageBubble>\n {avatarUrl && (\n <img\n src={avatarUrl}\n alt={username || 'User'}\n style={{ width: '32px', height: '32px', borderRadius: '50%', marginLeft: '8px' }}\n />\n )}\n </StyledUserMessage>\n );\n};\n","import styled, { css } from 'styled-components';\n\nexport const SuggestionsContainer = styled.div`\n display: flex;\n flex-wrap: wrap;\n gap: ${({ theme }) => theme?.spacing?.sm ?? '8px'};\n padding: ${({ theme }) => theme?.spacing?.md ?? '16px'} 0;\n`;\n\ninterface StyledSuggestionProps {\n $isPressed: boolean;\n}\n\nexport const StyledSuggestion = styled.button<StyledSuggestionProps>`\n /* Base styles */\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: ${({ theme }) => theme?.spacing?.sm ?? '8px'} ${({ theme }) => theme?.spacing?.md ?? '16px'};\n font-family: ${({ theme }) => theme?.fonts?.body ?? 'system-ui, sans-serif'};\n font-size: 0.875rem;\n font-weight: 500;\n color: ${({ theme }) => theme?.colors?.text ?? '#000000'};\n background-color: ${({ theme }) => theme?.colors?.surface ?? '#ffffff'};\n border: 1px solid ${({ theme }) => theme?.colors?.border ?? '#E0E0E0'};\n border-radius: ${({ theme }) => theme?.radii?.lg ?? '12px'};\n cursor: pointer;\n transition: all 0.2s ease-in-out;\n white-space: nowrap;\n user-select: none;\n\n /* Hover state */\n &:hover:not(:disabled) {\n background-color: ${({ theme }) => theme?.colors?.border ?? '#E0E0E0'};\n border-color: ${({ theme }) => theme?.colors?.primary ?? '#0066FF'};\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n }\n\n /* Active/Pressed state */\n &:active:not(:disabled) {\n transform: translateY(0);\n box-shadow: none;\n }\n\n ${({ $isPressed }) =>\n $isPressed &&\n css`\n transform: scale(0.98);\n `}\n\n /* Focus state */\n &:focus-visible {\n outline: 2px solid ${({ theme }) => theme?.colors?.primary ?? '#0066FF'};\n outline-offset: 2px;\n }\n\n /* Remove default focus outline */\n &:focus {\n outline: none;\n }\n\n /* Disabled state */\n &:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n transform: none;\n }\n`;\n","import { useButton } from '@react-aria/button';\nimport { useRef } from 'react';\nimport { StyledSuggestion, SuggestionsContainer } from './Suggestions.styles';\n\nexport interface SuggestionsProps {\n suggestions: string[];\n onSelect: (suggestion: string) => void;\n className?: string;\n}\n\nexport function Suggestions({ suggestions, onSelect, className }: SuggestionsProps) {\n if (suggestions.length === 0) {\n return null;\n }\n\n return (\n <SuggestionsContainer className={className} role=\"list\" aria-label=\"Suggested prompts\">\n {suggestions.map((suggestion) => (\n <SuggestionChip key={suggestion} suggestion={suggestion} onSelect={onSelect} />\n ))}\n </SuggestionsContainer>\n );\n}\n\ninterface SuggestionChipProps {\n suggestion: string;\n onSelect: (suggestion: string) => void;\n}\n\nfunction SuggestionChip({ suggestion, onSelect }: SuggestionChipProps) {\n const ref = useRef<HTMLButtonElement>(null);\n const { buttonProps, isPressed } = useButton(\n {\n onPress: () => onSelect(suggestion),\n 'aria-label': `Select suggestion: ${suggestion}`,\n },\n ref\n );\n\n return (\n <StyledSuggestion {...buttonProps} ref={ref} $isPressed={isPressed} role=\"listitem\">\n {suggestion}\n </StyledSuggestion>\n );\n}\n\nSuggestions.displayName = 'Suggestions';\n","import styled, { css } from 'styled-components';\n\ninterface WindowContainerProps {\n $isMinimized: boolean;\n $isFullscreen: boolean;\n $width: string;\n $height: string;\n}\n\nexport const WindowContainer = styled.div<WindowContainerProps>`\n display: flex;\n flex-direction: column;\n background-color: #1c1c1e;\n border-radius: 0;\n box-shadow: none;\n overflow: hidden;\n transition: all 300ms cubic-bezier(0.4, 0, 0.2, 1);\n position: relative;\n\n /* Default dimensions */\n width: ${({ $width }) => $width};\n height: ${({ $height }) => $height};\n\n /* Fullscreen state */\n ${({ $isFullscreen }) =>\n $isFullscreen &&\n css`\n width: 100vw;\n height: 100vh;\n border-radius: 0;\n box-shadow: none;\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1000;\n `}\n\n /* Minimized state */\n ${({ $isMinimized }) =>\n $isMinimized &&\n css`\n height: 60px;\n width: 300px;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n cursor: pointer;\n\n /* Hide all content except header when minimized */\n > *:not(:first-child) {\n display: none;\n }\n\n /* Keep header visible but adjust styling */\n > *:first-child {\n border-bottom: none;\n }\n `}\n\n /* Responsive behavior for smaller screens */\n @media (max-width: 768px) {\n ${({ $isFullscreen, $isMinimized }) =>\n !$isFullscreen &&\n !$isMinimized &&\n css`\n width: 100vw;\n height: 100vh;\n border-radius: 0;\n max-width: 100%;\n max-height: 100%;\n `}\n }\n\n /* Focus states for accessibility */\n &:focus-visible {\n outline: 2px solid ${({ theme }) => theme?.colors?.primary ?? '#0066FF'};\n outline-offset: 2px;\n }\n\n /* Ensure proper stacking context */\n z-index: ${({ $isFullscreen }) => ($isFullscreen ? 1000 : 100)};\n`;\n","import type React from 'react';\nimport { WindowContainer } from './Window.styles';\n\nexport interface WindowProps {\n /**\n * Whether the window is minimized to a small bar\n */\n isMinimized?: boolean;\n\n /**\n * Whether the window is fullscreen (100vw x 100vh)\n */\n isFullscreen?: boolean;\n\n /**\n * Custom width for the window (e.g., \"400px\", \"50vw\")\n * @default \"400px\"\n */\n width?: string;\n\n /**\n * Custom height for the window (e.g., \"600px\", \"80vh\")\n * @default \"600px\"\n */\n height?: string;\n\n /**\n * Children elements to be rendered inside the window\n */\n children: React.ReactNode;\n\n /**\n * Additional CSS class name for custom styling\n */\n className?: string;\n\n /**\n * ARIA label for the window\n */\n ariaLabel?: string;\n}\n\n/**\n * Window Component\n *\n * Main container/window wrapper for the CopilotKit chat interface.\n * This component holds the Header, Messages, Input, and Footer components.\n *\n * Features:\n * - Default: 400px width x 600px height with rounded corners and shadow\n * - Minimized: Collapsed to a small bar\n * - Fullscreen: Takes full viewport (100vw x 100vh)\n * - Smooth transitions between states\n * - Customizable dimensions via width/height props\n *\n * @example\n * ```tsx\n * // Default window\n * <Window>\n * <Header title=\"AI Assistant\" />\n * <Messages>...</Messages>\n * <MessageInput />\n * <Footer />\n * </Window>\n *\n * // Minimized window\n * <Window isMinimized>\n * <Header title=\"AI Assistant\" />\n * </Window>\n *\n * // Fullscreen window\n * <Window isFullscreen>\n * <Header title=\"AI Assistant\" />\n * <Messages>...</Messages>\n * <MessageInput />\n * </Window>\n *\n * // Custom dimensions\n * <Window width=\"500px\" height=\"700px\">\n * ...\n * </Window>\n * ```\n */\nexport const Window: React.FC<WindowProps> = ({\n isMinimized = false,\n isFullscreen = false,\n width = '400px',\n height = '600px',\n children,\n className,\n ariaLabel = 'Chat window',\n}) => {\n return (\n <WindowContainer\n className={className}\n $isMinimized={isMinimized}\n $isFullscreen={isFullscreen}\n $width={width}\n $height={height}\n role=\"dialog\"\n aria-label={ariaLabel}\n aria-modal=\"false\"\n >\n {children}\n </WindowContainer>\n );\n};\n\nWindow.displayName = 'Window';\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../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","jsx","jsxs","NAV_BG","Container","useRef","useButton","css","IconWrapper","useState","BG_TERTIARY","TEXT_PRIMARY","TEXT_SECONDARY","TEXT_MUTED","ACCENT_COLOR","HOVER_BG","DisclosureGroup","Disclosure","Button","DisclosurePanel","Heading","useMeter","useTab","useTabList","useTabPanel","useTabListState","Fragment","Item","BackButton"],"mappings":";;;;;;;;;;;;;;;;;AAOO,IAAM,cAAcA,wBAAA,CAAO,IAAA;AAAA;AAAA;AAAA;AAAA,SAAA,EAIvB,CAAC,EAAE,KAAA,EAAM,KAAM,KAAK,CAAA;AAAA,UAAA,EACnB,CAAC,EAAE,KAAA,EAAM,KAAM,KAAK,CAAA;AAAA,SAAA,EACrB,CAAC,EAAE,MAAA,EAAO,KAAM,MAAM,CAAA;AAAA;;AAAA;AAAA;AAAA;AAAA,YAAA,EAMnB,CAAC,EAAE,MAAA,EAAO,KAAM;AACxB,EAAA,IAAI,MAAA,KAAW,cAAA,IAAkB,CAAC,MAAA,EAAQ,OAAO,SAAA;AACjD,EAAA,IAAI,MAAA,KAAW,OAAA,IAAW,MAAA,KAAW,SAAA,IAAa,WAAW,MAAA,EAAQ;AACnE,IAAA,OAAO,2CAAA;AAAA,EACT;AACA,EAAA,IAAI,WAAW,SAAA,EAAW;AAExB,IAAA,OAAO,oHAAA;AAAA,EACT;AACA,EAAA,IAAI,MAAA,KAAW,SAAA,IAAa,MAAA,KAAW,SAAA,EAAW;AAEhD,IAAA,OAAO,sHAAA;AAAA,EACT;AACA,EAAA,OAAO,MAAA;AACT,CAAC,CAAA;AAAA;AAAA,CAAA;;;AC3BE,IAAM,cAAA,GAAiB,kBAAA;AAGvB,IAAM,SAAA,GAAY;AAAA,EACvB,GAAA,EAAK,UAAA;AAAA,EACL,OAAA,EAAS,cAAA;AAAA,EACT,SAAA,EAAW,gBAAA;AAAA,EACX,WAAA,EAAa,kBAAA;AAAA,EACb,QAAA,EAAU,iBAAA;AAAA,EACV,aAAA,EAAe,eAAA;AAAA,EACf,aAAA,EAAe,eAAA;AAAA,EACf,IAAA,EAAM,WAAA;AAAA,EACN,UAAA,EAAY,iBAAA;AAAA,EACZ,gBAAA,EAAkB,uBAAA;AAAA,EAClB,QAAA,EAAU,iBAAA;AAAA,EACV,UAAA,EAAY,iBAAA;AAAA,EACZ,QAAA,EAAU,eAAA;AAAA,EACV,IAAA,EAAM;AACR;AAKO,IAAM,SAAA,GAAsC;AAAA,EACjD,UAAA,EAAY,mBAAA;AAAA,EACZ,cAAA,EAAgB,uBAAA;AAAA,EAChB,gBAAA,EAAkB,yBAAA;AAAA,EAClB,kBAAA,EAAoB,2BAAA;AAAA,EACpB,iBAAA,EAAmB,0BAAA;AAAA,EACnB,eAAA,EAAiB,wBAAA;AAAA,EACjB,eAAA,EAAiB,wBAAA;AAAA,EACjB,WAAA,EAAa,oBAAA;AAAA,EACb,iBAAA,EAAmB,0BAAA;AAAA,EACnB,uBAAA,EAAyB,gCAAA;AAAA,EACzB,iBAAA,EAAmB,0BAAA;AAAA,EACnB,iBAAA,EAAmB,0BAAA;AAAA,EACnB,eAAA,EAAiB,wBAAA;AAAA,EACjB,aAAA,EAAe;AACjB,CAAA;AAGO,SAAS,YAAY,IAAA,EAAwB;AAClD,EAAA,OAAO,CAAA,EAAG,cAAc,CAAA,CAAA,EAAI,SAAA,CAAU,IAAI,CAAC,CAAA,CAAA;AAC7C;ACtCO,SAAS,IAAA,CAAK;AAAA,EACnB,IAAA;AAAA,EACA,IAAA,GAAO,EAAA;AAAA,EACP,KAAA,GAAQ,cAAA;AAAA,EACR,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAc;AACZ,EAAA,MAAM,QAAA,GAAW,YAAY,IAAI,CAAA;AAEjC,EAAA,uBACEC,cAAA,CAAC,eAAY,KAAA,EAAO,IAAA,EAAM,QAAQ,KAAA,EAAO,SAAA,EAAsB,eAAY,MAAA,EACzE,QAAA,kBAAAA,cAAA,CAAC,SAAI,GAAA,EAAK,QAAA,EAAU,KAAI,EAAA,EAAG,KAAA,EAAO,MAAM,MAAA,EAAQ,IAAA,EAAO,GAAG,QAAA,EAAU,CAAA,EACtE,CAAA;AAEJ;AAEA,IAAA,CAAK,WAAA,GAAc,MAAA;ACxBnB,IAAM,MAAA,GAAS,SAAA;AACf,IAAM,UAAA,GAAa,SAAA;AAEZ,IAAM,YAAYD,wBAAAA,CAAO,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAA,EAKV,MAAM,CAAA;AAAA,wBAAA,EACF,UAAU,CAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAU7B,IAAM,iBAAiBA,wBAAAA,CAAO,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAc9B,IAAM,iBAAiBA,wBAAAA,CAAO,GAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAc9B,IAAM,oBAAoBA,wBAAAA,CAAO,GAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;ACnCjC,SAAS,aAAA,CAAc;AAAA,EAC5B,cAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,cAAc,SAAA,GAAY;AAC5B,CAAA,EAAuB;AACrB,EAAA,uBACEC,eAAC,SAAA,EAAA,EAAU,SAAA,EAAsB,MAAK,YAAA,EAAa,YAAA,EAAY,SAAA,EAC7D,QAAA,kBAAAC,eAAA,CAAC,cAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAD,cAAAA,CAAC,kBAAgB,QAAA,EAAA,cAAA,EAAe,CAAA;AAAA,oBAChCA,cAAAA,CAAC,iBAAA,EAAA,EAAmB,QAAA,EAAA,WAAA,EAAY;AAAA,GAAA,EAClC,CAAA,EACF,CAAA;AAEJ;AAEA,aAAA,CAAc,WAAA,GAAc,eAAA;AC5B5B,IAAME,OAAAA,GAAS,SAAA;AACf,IAAM,aAAA,GAAgB,SAAA;AAEf,IAAMC,aAAYJ,wBAAAA,CAAO,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAA,EAMVG,OAAM,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAwBrB,IAAM,aAAaH,wBAAAA,CAAO,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA,CAAA;AAc1B,IAAM,aAAaA,wBAAAA,CAAO,MAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAA,EASX,aAAa,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AA0BLA,wBAAAA,CAAO,IAAA;AAAA;AAAA;AAAA;AAAA;AAM9B,IAAM,YAAYA,wBAAAA,CAAO,GAAA;AAAA;AAAA;AAAA,oBAAA,EAGV,aAAa,CAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAM5B,IAAM,mBAAmBA,wBAAAA,CAAO,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AChFhC,SAAS,WAAA,CAAY;AAAA,EAC1B,WAAA;AAAA,EACA,WAAA;AAAA,EACA,gBAAA;AAAA,EACA,SAAA;AAAA,EACA,cAAc,SAAA,GAAY;AAC5B,CAAA,EAAqB;AACnB,EAAA,MAAM,aAAA,GAAgBK,aAA0B,IAAI,CAAA;AACpD,EAAA,MAAM,aAAA,GAAgBA,aAA0B,IAAI,CAAA;AAEpD,EAAA,MAAM,EAAE,WAAA,EAAa,eAAA,EAAgB,GAAIC,gBAAA;AAAA,IACvC;AAAA,MACE,OAAA,EAAS,WAAA;AAAA,MACT,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,GACF;AAEA,EAAA,MAAM,EAAE,WAAA,EAAa,eAAA,EAAgB,GAAIA,gBAAA;AAAA,IACvC;AAAA,MACE,OAAA,EAAS,WAAA;AAAA,MACT,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,GACF;AAEA,EAAA,uBACEJ,gBAACE,UAAAA,EAAA,EAAU,WAAsB,IAAA,EAAK,YAAA,EAAa,cAAY,SAAA,EAC7D,QAAA,EAAA;AAAA,oBAAAH,eAAC,UAAA,EAAA,EACE,QAAA,EAAA,WAAA,mBACCA,cAAAA,CAAC,UAAA,EAAA,EAAY,GAAG,eAAA,EAAiB,GAAA,EAAK,aAAA,EACpC,QAAA,kBAAAA,eAAC,IAAA,EAAA,EAAK,IAAA,EAAK,mBAAkB,IAAA,EAAM,EAAA,EAAI,OAAM,OAAA,EAAQ,CAAA,EACvD,CAAA,GACE,WAAA,mBACFA,cAAAA,CAAC,UAAA,EAAA,EAAY,GAAG,eAAA,EAAiB,GAAA,EAAK,eACpC,QAAA,kBAAAA,cAAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,aAAY,IAAA,EAAM,EAAA,EAAI,OAAM,OAAA,EAAQ,CAAA,EACjD,IACE,IAAA,EACN,CAAA;AAAA,oBAEAA,eAAC,SAAA,EAAA,EAAU,CAAA;AAAA,oBAEXA,cAAAA,CAAC,gBAAA,EAAA,EAAkB,QAAA,EAAA,gBAAA,EAAiB;AAAA,GAAA,EACtC,CAAA;AAEJ;AAEA,WAAA,CAAY,WAAA,GAAc,aAAA;ACjEnB,IAAMG,aAAYJ,wBAAAA,CAAO,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAazB,IAAM,WAAWA,wBAAAA,CAAO,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;ACDxB,SAAS,MAAA,CAAO;AAAA,EACrB,YAAA;AAAA,EACA,eAAA;AAAA,EACA,qBAAA;AAAA,EACA,wBAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAA,EAAgB;AACd,EAAA,uBACEE,eAAAA,CAACE,UAAAA,EAAA,EAAU,SAAA,EACT,QAAA,EAAA;AAAA,oBAAAH,cAAAA,CAAC,WAAA,EAAA,EAAY,gBAAA,EAAkB,eAAA,EAAiB,aAAa,cAAA,EAAgB,CAAA;AAAA,oBAC7EA,cAAAA,CAAC,QAAA,EAAA,EAAU,QAAA,EAAA,YAAA,EAAa,CAAA;AAAA,oBACxBA,cAAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,cAAA,EAAgB,qBAAA;AAAA,QAChB,WAAA,EAAa;AAAA;AAAA;AACf,GAAA,EACF,CAAA;AAEJ;AAEA,MAAA,CAAO,WAAA,GAAc,QAAA;AChCd,IAAMG,aAAYJ,wBAAAA,CAAO,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAazB,IAAM,eAAeA,wBAAAA,CAAO,MAAA;AAAA,SAAA,EACxB,CAAC,EAAE,KAAA,GAAQ,EAAA,OAAS,KAAK,CAAA;AAAA,UAAA,EACxB,CAAC,EAAE,KAAA,GAAQ,EAAA,OAAS,KAAK,CAAA;AAAA,aAAA,EACtB,CAAC,EAAE,KAAA,GAAQ,EAAA,OAAS,KAAK,CAAA;AAAA,cAAA,EACxB,CAAC,EAAE,KAAA,GAAQ,EAAA,OAAS,KAAK,CAAA;AAAA,iBAAA,EACtB,CAAC,EAAE,UAAA,EAAW,KAAO,UAAA,GAAa,QAAQ,KAAM,CAAA;AAAA;AAAA,oBAAA,EAE7C,CAAC,EAAE,UAAA,EAAW,KAAO,UAAA,GAAa,YAAY,aAAc,CAAA;AAAA,SAAA,EACvE,CAAC,EAAE,UAAA,EAAW,KAAO,UAAA,GAAa,YAAY,SAAU,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,sBAAA,EAS3C,CAAC,EAAE,UAAA,EAAW,KAAO,UAAA,GAAa,YAAY,0BAA2B,CAAA;AAAA,WAAA,EACpF,CAAC,EAAE,UAAA,EAAW,KAAO,UAAA,GAAa,YAAY,SAAU,CAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA,EAAA,EAOjE,CAAC,EAAE,SAAA,EAAW,YAAW,KACzB,SAAA,IACA,CAAC,UAAA,IACDO,WAAA;AAAA;AAAA;AAAA,IAAA,CAGC;;AAAA,EAAA,EAED,CAAC,EAAE,SAAA,EAAW,UAAA,EAAW,KACzB,aACA,UAAA,IACAA,WAAA;AAAA;AAAA;AAAA,IAAA,CAGC;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AC7BL,SAAS,gBAAA,CAAiB,EAAE,IAAA,EAAM,KAAA,EAAO,SAAS,QAAA,EAAU,IAAA,EAAM,WAAU,EAAgB;AAC1F,EAAA,MAAM,GAAA,GAAMF,aAA0B,IAAI,CAAA;AAC1C,EAAA,MAAM,EAAE,aAAY,GAAIC,gBAAAA;AAAA,IACtB;AAAA,MACE,OAAA,EAAS,OAAA;AAAA,MACT,YAAA,EAAc,KAAA;AAAA,MACd,cAAA,EAAgB;AAAA,KAClB;AAAA,IACA;AAAA,GACF;AAEA,EAAA,uBACEL,cAAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACE,GAAG,WAAA;AAAA,MACJ,GAAA;AAAA,MACA,SAAA,EAAW,QAAA;AAAA,MACX,KAAA,EAAO,IAAA;AAAA,MACP,UAAA,EAAY,SAAA;AAAA,MAEX,QAAA,EAAA;AAAA;AAAA,GACH;AAEJ;AAEO,SAAS,aAAA,CAAc;AAAA,EAC5B,eAAA;AAAA,EACA,eAAA;AAAA,EACA,WAAA,EAAa,YAAA;AAAA,EACb,gBAAA,GAAmB,KAAA;AAAA,EACnB,gBAAA,GAAmB,KAAA;AAAA,EACnB,cAAc,aAAA,GAAgB,KAAA;AAAA,EAC9B;AACF,CAAA,EAAuB;AACrB,EAAA,uBACEC,eAAAA,CAACE,UAAAA,EAAA,EAAU,SAAA,EACT,QAAA,EAAA;AAAA,oBAAAH,cAAAA;AAAA,MAAC,gBAAA;AAAA,MAAA;AAAA,QACC,IAAA,kBAAMA,cAAAA,CAAC,IAAA,EAAA,EAAK,MAAK,eAAA,EAAgB,IAAA,EAAM,EAAA,EAAI,KAAA,EAAM,SAAA,EAAU,CAAA;AAAA,QAC3D,KAAA,EAAM,UAAA;AAAA,QACN,OAAA,EAAS,eAAA;AAAA,QACT,QAAA,EAAU,gBAAA;AAAA,QACV,IAAA,EAAM;AAAA;AAAA,KACR;AAAA,oBACAA,cAAAA;AAAA,MAAC,gBAAA;AAAA,MAAA;AAAA,QACC,IAAA,kBAAMA,cAAAA,CAAC,IAAA,EAAA,EAAK,MAAK,iBAAA,EAAkB,IAAA,EAAM,EAAA,EAAI,KAAA,EAAM,SAAA,EAAU,CAAA;AAAA,QAC7D,KAAA,EAAM,UAAA;AAAA,QACN,OAAA,EAAS,eAAA;AAAA,QACT,QAAA,EAAU,gBAAA;AAAA,QACV,IAAA,EAAM;AAAA;AAAA,KACR;AAAA,oBAEAA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ,UAAA,EAAY,QAAA,EAAS,EAAG,eAAY,MAAA,EAAO;AAAA,GAAA,EAC1F,CAAA;AAEJ;AAEA,aAAA,CAAc,WAAA,GAAc,eAAA;AC9E5B,IAAM,YAAA,GAAe;AAAA,EACnB,MAAA,EAAQ,SAAA;AAAA,EACR,IAAA,EAAM,SAAA;AAAA,EACN,IAAA,EAAM,SAAA;AAAA,EACN,OAAA,EAAS;AACX,CAAA;AAUO,IAAMG,aAAYJ,wBAAAA,CAAO,MAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAAA,EAWpB,CAAC,KAAA,KAAW,KAAA,CAAM,WAAA,GAAc,gBAAgB,SAAU,CAAA;AAAA,WAAA,EACzD,CAAC,KAAA,KAAW,KAAA,CAAM,WAAA,GAAc,MAAM,CAAE,CAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA,CAAA;AAkB9C,IAAMQ,eAAcR,wBAAAA,CAAO,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAa3B,IAAM,eAAeA,wBAAAA,CAAO,GAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAM5B,IAAM,eAAeA,wBAAAA,CAAO,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAU5B,IAAM,iBAAiBA,wBAAAA,CAAO,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAS9B,IAAM,uBAAuBA,wBAAAA,CAAO,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAcpC,IAAM,uBAAuBA,wBAAAA,CAAO,IAAA;AAAA;AAAA;AAAA;AAAA,oBAAA,EAIrB,CAAC,EAAE,OAAA,EAAQ,KAAM,YAAA,CAAa,OAAO,CAAC,CAAA;AAAA;AAAA,CAAA;AChFrD,SAAS,kBAAA,CAAmB;AAAA,EACjC,IAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA,GAAS,SAAA;AAAA,EACT,UAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA4B;AAC1B,EAAA,MAAM,gBAAgB,UAAA,IAAc,MAAA;AACpC,EAAA,MAAM,GAAA,GAAMK,aAA0B,IAAI,CAAA;AAG1C,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,IAAI,SAAS,OAAA,EAAQ;AACrB,IAAA,IAAI,OAAA,EAAS,OAAA,CAAQ,EAAW,CAAA;AAAA,EAClC,CAAA;AAEA,EAAA,MAAM,EAAE,aAAY,GAAIC,gBAAAA;AAAA,IACtB;AAAA,MACE,GAAG,SAAA;AAAA,MACH,OAAA,EAAS,WAAA;AAAA,MACT,UAAA;AAAA,MACA,cAAc,SAAA,CAAU,YAAY,KAAK,CAAA,EAAG,YAAY,sBAAsB,aAAa,CAAA;AAAA,KAC7F;AAAA,IACA;AAAA,GACF;AAEA,EAAA,uBACEJ,gBAACE,UAAAA,EAAA,EAAW,GAAG,WAAA,EAAa,GAAA,EAAU,SAAA,EAAsB,WAAA,EAAa,UAAA,EACvE,QAAA,EAAA;AAAA,oBAAAF,eAAAA,CAACM,cAAA,EACE,QAAA,EAAA;AAAA,MAAA,IAAA;AAAA,sBACDP,cAAAA,CAAC,oBAAA,EAAA,EAAqB,OAAA,EAAS,MAAA,EAC7B,0BAAAA,cAAAA,CAAC,oBAAA,EAAA,EAAqB,OAAA,EAAS,MAAA,EAAQ,CAAA,EACzC;AAAA,KAAA,EACF,CAAA;AAAA,oBACAC,gBAAC,YAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAD,cAAAA,CAAC,gBAAc,QAAA,EAAA,YAAA,EAAa,CAAA;AAAA,sBAC5BA,cAAAA,CAAC,cAAA,EAAA,EAAgB,QAAA,EAAA,aAAA,EAAc;AAAA,KAAA,EACjC;AAAA,GAAA,EACF,CAAA;AAEJ;AAEA,kBAAA,CAAmB,WAAA,GAAc,oBAAA;AChEjC,IAAM,WAAA,GAAc,SAAA;AACpB,IAAM,YAAA,GAAe,SAAA;AACrB,IAAM,cAAA,GAAiB,SAAA;AACvB,IAAM,UAAA,GAAa,SAAA;AACnB,IAAM,YAAA,GAAe,SAAA;AACrB,IAAM,QAAA,GAAW,2BAAA;AAKV,IAAM,gCAAgCD,wBAAAA,CAAO,GAAA;AAAA;AAAA;AAAA;AAAA,cAAA,EAIpC,WAAW,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAWpB,IAAM,oBAAoBA,wBAAAA,CAAO,MAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAAA,EAQvB,CAAC,KAAA,KAAU,KAAA,CAAM,KAAA,EAAO,KAAA,EAAO,QAAQ,uBAAuB,CAAA;AAAA;AAAA;AAAA,SAAA,EAGpE,cAAc,CAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,WAAA,EAMZ,YAAY,CAAA;AAAA;;AAAA;AAAA,uBAAA,EAIA,YAAY,CAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAa9B,IAAM,kBAAkBA,wBAAAA,CAAO,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAAA,EAK3B,UAAU,CAAA;;AAAA,EAAA,EAEjB,CAAC,KAAA,KACD,KAAA,CAAM,WAAA,GACF;AAAA;AAAA,EAAA,CAAA,GAGA;AAAA;AAAA,EAAA,CAEL;;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAWI,IAAM,qBAAqBA,wBAAAA,CAAO,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAkBlC,IAAM,8BAA8BA,wBAAAA,CAAO,MAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,oBAAA,EAe5B,CAAC,KAAA,KAAW,KAAA,CAAM,WAAA,GAAc,eAAe,aAAc,CAAA;;AAAA;AAAA;AAAA,sBAAA,EAI3D,CAAC,KAAA,KAAW,KAAA,CAAM,WAAA,GAAc,YAAY,QAAS,CAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA,uBAAA,EAUpD,YAAY,CAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAmB9B,IAAM,eAAeA,wBAAAA,CAAO,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAAA,EAOhB,CAAC,KAAA,KAAW,KAAA,CAAM,cAAA,GAAiB,QAAQ,KAAM,CAAA;AAAA,oBAAA,EAC9C,CAAC,KAAA,KAAU,KAAA,CAAM,UAAA,IAAc,aAAa,CAAA;AAAA,SAAA,EACvD,CAAC,KAAA,KAAW,KAAA,CAAM,cAAA,GAAiB,eAAe,UAAW,CAAA;AAAA;;AAAA;AAAA,EAAA,EAIpE,CAAC,KAAA,KACD,CAAC,KAAA,CAAM,cAAA,IACP;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA,CAKD;;AAAA;AAAA,EAAA,EAGC,CAAC,KAAA,KACD,KAAA,CAAM,cAAA,IACN;AAAA;AAAA,EAAA,CAED;AAAA,CAAA;AAUI,IAAM,eAAeA,wBAAAA,CAAO,IAAA;AAAA;AAAA,eAAA,EAElB,CAAC,KAAA,KAAU,KAAA,CAAM,KAAA,EAAO,KAAA,EAAO,QAAQ,uBAAuB,CAAA;AAAA;AAAA,eAAA,EAE9D,CAAC,KAAA,KAAW,KAAA,CAAM,WAAA,GAAc,QAAQ,KAAM,CAAA;AAAA,SAAA,EACpD,CAAC,KAAA,KAAW,KAAA,CAAM,WAAA,GAAc,eAAe,cAAe,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAWlE,IAAM,iBAAiBA,wBAAAA,CAAO,MAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAAA,EAU1B,YAAY,CAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,uBAAA,EAeE,YAAY,CAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAa9B,IAAM,gBAAgBA,wBAAAA,CAAO,IAAA;AAAA;AAAA,SAAA,EAEzB,UAAU,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AC9Nd,IAAM,uBAAwD,CAAC;AAAA,EACpE,QAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,cAAc,SAAA,GAAY;AAC5B,CAAA,KAAM;AAEJ,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAoB,CAAA,GAAIS,eAAkC,MAAM;AACxF,IAAA,MAAM,UAAmC,EAAC;AAC1C,IAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,MAAA,OAAA,CAAQ,OAAA,CAAQ,KAAK,CAAA,GAAI,OAAA,CAAQ,WAAA,IAAe,KAAA;AAAA,IAClD;AACA,IAAA,OAAO,OAAA;AAAA,EACT,CAAC,CAAA;AAED,EAAA,MAAM,aAAA,GAAgB,CAAC,YAAA,KAAyB;AAC9C,IAAA,oBAAA,CAAqB,CAAC,IAAA,MAAU;AAAA,MAC9B,GAAG,IAAA;AAAA,MACH,CAAC,YAAY,GAAG,CAAC,KAAK,YAAY;AAAA,KACpC,CAAE,CAAA;AAAA,EACJ,CAAA;AAEA,EAAA,uBACER,cAAAA,CAAC,6BAAA,EAAA,EAA8B,SAAA,EAAsB,YAAA,EAAY,SAAA,EAAW,IAAA,EAAK,QAAA,EAC9E,QAAA,EAAA,QAAA,CAAS,GAAA,CAAI,CAAC,OAAA,qBACbA,cAAAA;AAAA,IAAC,oBAAA;AAAA,IAAA;AAAA,MAEC,OAAA;AAAA,MACA,WAAA,EAAa,iBAAA,CAAkB,OAAA,CAAQ,KAAK,CAAA,IAAK,KAAA;AAAA,MACjD,QAAA,EAAU,MAAM,aAAA,CAAc,OAAA,CAAQ,KAAK,CAAA;AAAA,MAC3C,WAAA;AAAA,MACA,cAAA;AAAA,MACA;AAAA,KAAA;AAAA,IANK,OAAA,CAAQ;AAAA,GAQhB,CAAA,EACH,CAAA;AAEJ,CAAA;AAcA,IAAM,uBAA4D,CAAC;AAAA,EACjE,OAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,SAAA,GAAYI,aAA0B,IAAI,CAAA;AAChD,EAAA,MAAM,EAAE,aAAY,GAAIC,gBAAAA;AAAA,IACtB;AAAA,MACE,OAAA,EAAS,QAAA;AAAA,MACT,cAAc,CAAA,EAAG,OAAA,CAAQ,KAAK,CAAA,UAAA,EAAa,WAAA,GAAc,cAAc,UAAU,CAAA,CAAA;AAAA,MACjF,iBAAiB,CAAC;AAAA,KACpB;AAAA,IACA;AAAA,GACF;AAEA,EAAA,uBACEJ,eAAAA,CAAC,SAAA,EAAA,EAAQ,cAAY,CAAA,EAAG,OAAA,CAAQ,KAAK,CAAA,QAAA,CAAA,EACnC,QAAA,EAAA;AAAA,oBAAAA,eAAAA,CAAC,iBAAA,EAAA,EAAmB,GAAG,WAAA,EAAa,KAAK,SAAA,EACtC,QAAA,EAAA;AAAA,MAAA,OAAA,CAAQ,KAAA;AAAA,sBACTD,eAAC,eAAA,EAAA,EAAgB,WAAA,EAAa,CAAC,WAAA,EAAa,aAAA,EAAY,QACtD,QAAA,kBAAAC,eAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAM,IAAA;AAAA,UACN,MAAA,EAAO,IAAA;AAAA,UACP,OAAA,EAAQ,WAAA;AAAA,UACR,IAAA,EAAK,MAAA;AAAA,UACL,KAAA,EAAM,4BAAA;AAAA,UACN,IAAA,EAAK,KAAA;AAAA,UACL,YAAA,EAAW,sBAAA;AAAA,UAEX,QAAA,EAAA;AAAA,4BAAAD,cAAAA,CAAC,WAAM,QAAA,EAAA,sBAAA,EAAoB,CAAA;AAAA,4BAC3BA,cAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,CAAA,EAAE,eAAA;AAAA,gBACF,MAAA,EAAO,cAAA;AAAA,gBACP,WAAA,EAAY,KAAA;AAAA,gBACZ,aAAA,EAAc,OAAA;AAAA,gBACd,cAAA,EAAe;AAAA;AAAA;AACjB;AAAA;AAAA,OACF,EACF;AAAA,KAAA,EACF,CAAA;AAAA,IAEC,CAAC,WAAA,oBACAA,cAAAA,CAAC,kBAAA,EAAA,EAAmB,IAAA,EAAK,MAAA,EACtB,QAAA,EAAA,OAAA,CAAQ,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,qBAClBA,cAAAA;AAAA,MAAC,6BAAA;AAAA,MAAA;AAAA,QAEC,IAAA;AAAA,QACA,UAAA,EAAY,KAAK,EAAA,KAAO,cAAA;AAAA,QACxB,WAAA;AAAA,QACA;AAAA,OAAA;AAAA,MAJK,IAAA,CAAK;AAAA,KAMb,CAAA,EACH;AAAA,GAAA,EAEJ,CAAA;AAEJ,CAAA;AAYA,IAAM,gCAA8E,CAAC;AAAA,EACnF,IAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,OAAA,GAAUI,aAA0B,IAAI,CAAA;AAC9C,EAAA,MAAM,OAAA,GAAUA,aAA0B,IAAI,CAAA;AAE9C,EAAA,MAAM,EAAE,WAAA,EAAa,eAAA,EAAgB,GAAIC,gBAAAA;AAAA,IACvC;AAAA,MACE,OAAA,EAAS,MAAM,WAAA,GAAc,IAAI,CAAA;AAAA,MACjC,YAAA,EAAc,CAAA,QAAA,EAAW,IAAA,CAAK,IAAI,CAAA,CAAA;AAAA,MAClC,cAAA,EAAgB,aAAa,MAAA,GAAS;AAAA,KACxC;AAAA,IACA;AAAA,GACF;AAEA,EAAA,MAAM,EAAE,WAAA,EAAa,eAAA,EAAgB,GAAIA,gBAAAA;AAAA,IACvC;AAAA,MACE,OAAA,EAAS,MAAM,WAAA,GAAc,IAAI,CAAA;AAAA,MACjC,YAAA,EAAc,CAAA,YAAA,EAAe,IAAA,CAAK,IAAI,CAAA;AAAA,KACxC;AAAA,IACA;AAAA,GACF;AAGA,EAAA,MAAM,iBAAA,GAAoB,CAAC,CAAA,KAAwC;AACjE,IAAA,IAAI,cAAc,CAAA,CAAE,GAAA,KAAQ,KAAA,IAAS,CAAC,EAAE,QAAA,EAAU;AAEhD,MAAA;AAAA,IACF;AAAA,EACF,CAAA;AAEA,EAAA,uBACEJ,eAAAA;AAAA,IAAC,2BAAA;AAAA,IAAA;AAAA,MACE,GAAG,eAAA;AAAA,MACJ,GAAA,EAAK,OAAA;AAAA,MACL,WAAA,EAAa,UAAA;AAAA,MACb,QAAA,EAAU,CAAC,CAAC,IAAA,CAAK,IAAA;AAAA,MACjB,IAAA,EAAK,UAAA;AAAA,MACL,SAAA,EAAW,iBAAA;AAAA,MAEX,QAAA,EAAA;AAAA,wBAAAD,cAAAA,CAAC,YAAA,EAAA,EAAa,UAAA,EAAY,IAAA,CAAK,SAAA,EAAW,cAAA,EAAgB,CAAC,CAAC,IAAA,CAAK,IAAA,EAC9D,QAAA,EAAA,IAAA,CAAK,IAAA,oBACJA,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,IAAA;AAAA,YACN,MAAA,EAAO,IAAA;AAAA,YACP,OAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAK,MAAA;AAAA,YACL,KAAA,EAAM,4BAAA;AAAA,YACN,aAAA,EAAY,MAAA;AAAA,YAEZ,QAAA,kBAAAA,cAAAA,CAAC,QAAA,EAAA,EAAO,EAAA,EAAG,GAAA,EAAI,EAAA,EAAG,GAAA,EAAI,CAAA,EAAE,GAAA,EAAI,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,KAAA,EAAM;AAAA;AAAA,SACtE,EAEJ,CAAA;AAAA,wBACAA,cAAAA,CAAC,YAAA,EAAA,EAAa,WAAA,EAAa,UAAA,EAAa,eAAK,IAAA,EAAK,CAAA;AAAA,QACjD,KAAK,SAAA,oBAAaA,cAAAA,CAAC,aAAA,EAAA,EAAe,eAAK,SAAA,EAAU,CAAA;AAAA,QACjD,UAAA,IAAc,+BACbA,cAAAA;AAAA,UAAC,cAAA;AAAA,UAAA;AAAA,YACE,GAAG,eAAA;AAAA,YACJ,GAAA,EAAK,OAAA;AAAA,YACL,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,cAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,cAAA,eAAA,CAAgB,UAAU,CAAC,CAAA;AAAA,YAC7B,CAAA;AAAA,YAEA,QAAA,kBAAAC,eAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAM,IAAA;AAAA,gBACN,MAAA,EAAO,IAAA;AAAA,gBACP,OAAA,EAAQ,WAAA;AAAA,gBACR,IAAA,EAAK,MAAA;AAAA,gBACL,KAAA,EAAM,4BAAA;AAAA,gBACN,aAAA,EAAY,MAAA;AAAA,gBAEZ,QAAA,EAAA;AAAA,kCAAAD,cAAAA,CAAC,WAAM,QAAA,EAAA,cAAA,EAAY,CAAA;AAAA,kCACnBA,cAAAA,CAAC,QAAA,EAAA,EAAO,EAAA,EAAG,GAAA,EAAI,IAAG,GAAA,EAAI,CAAA,EAAE,GAAA,EAAI,IAAA,EAAK,cAAA,EAAe,CAAA;AAAA,kCAChDA,cAAAA,CAAC,QAAA,EAAA,EAAO,EAAA,EAAG,GAAA,EAAI,IAAG,GAAA,EAAI,CAAA,EAAE,GAAA,EAAI,IAAA,EAAK,cAAA,EAAe,CAAA;AAAA,kCAChDA,cAAAA,CAAC,QAAA,EAAA,EAAO,EAAA,EAAG,GAAA,EAAI,IAAG,IAAA,EAAK,CAAA,EAAE,GAAA,EAAI,IAAA,EAAK,cAAA,EAAe;AAAA;AAAA;AAAA;AACnD;AAAA;AACF;AAAA;AAAA,GAEJ;AAEJ,CAAA;AAEA,oBAAA,CAAqB,WAAA,GAAc,sBAAA;ACzOnC,IAAM,UAAA,GAAa,SAAA;AACnB,IAAM,YAAA,GAAe,SAAA;AACrB,IAAMS,YAAAA,GAAc,SAAA;AACpB,IAAMC,aAAAA,GAAe,SAAA;AACrB,IAAMC,eAAAA,GAAiB,SAAA;AACvB,IAAMC,WAAAA,GAAa,SAAA;AACnB,IAAMC,aAAAA,GAAe,SAAA;AACrB,IAAMC,SAAAA,GAAW,2BAAA;AAEV,IAAMX,aAAYJ,wBAAAA,CAAO,GAAA;AAAA;AAAA;AAAA,oBAAA,EAGV,UAAU,CAAA;AAAA,SAAA,EACrBW,aAAY,CAAA;AAAA;AAAA;AAAA,eAAA,EAGN,CAAC,KAAA,KAAU,KAAA,CAAM,KAAA,EAAO,KAAA,EAAO,QAAQ,uBAAuB,CAAA;AAAA;AAAA,CAAA;AAIxE,IAAM,iBAAiBX,wBAAAA,CAAO,GAAA;AAAA;AAAA,2BAAA,EAERU,YAAW,CAAA;AAAA,oBAAA,EAClB,YAAY,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAkB3B,IAAM,YAAYV,wBAAAA,CAAO,MAAA;AAAA;AAAA;AAAA;AAAA,SAAA,EAIrB,CAAC,KAAA,KAAW,KAAA,CAAM,WAAA,GAAcW,gBAAeC,eAAe,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,WAAA,EAe5DD,aAAY,CAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA,uBAAA,EAQAG,aAAY,CAAA;AAAA;AAAA;AAAA;;AAAA,EAAA,EAKjC,CAAC,KAAA,KACD,KAAA,CAAM,WAAA,IACN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAAA,EAQsBA,aAAY,CAAA;AAAA;AAAA,EAAA,CAEnC;AAAA,CAAA;AAGI,IAAM,kBAAkBd,wBAAAA,CAAO,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAA,EAKhB,UAAU,CAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA,mBAAA,EAaXU,YAAW,IAAI,UAAU,CAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA,gBAAA,EAO5B,UAAU,CAAA;AAAA;;AAAA;AAAA,gBAAA,EAIVA,YAAW,CAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA,CAAA;AAUtB,IAAM,gBAAgBV,wBAAAA,CAAO,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA,CAAA;AAe7B,IAAM,eAAeA,wBAAAA,CAAO,MAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAA,EAMb,YAAY,CAAA;AAAA,oBAAA,EACZU,YAAW,CAAA;AAAA;AAAA,SAAA,EAEtBE,eAAc,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,sBAAA,EAeDG,SAAQ,CAAA;AAAA,WAAA,EACnBJ,aAAY,CAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA,uBAAA,EAQAG,aAAY,CAAA;AAAA;AAAA;AAAA,CAAA;AAM9B,IAAM,qBAAA,GAAwBd,yBAAOgB,mCAAe,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAWpD,IAAM,kBAAA,GAAqBhB,yBAAOiB,8BAAU,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAoB5C,IAAM,cAAA,GAAiBjB,yBAAOkB,0BAAM,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAAA,EAKhCN,eAAc,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,WAAA,EAYZD,aAAY,CAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA,uBAAA,EAQAG,aAAY,CAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAO9B,IAAM,gBAAgBd,wBAAAA,CAAO,GAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA,CAAA;AAWRA,wBAAAA,CAAO,GAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAa5B,IAAM,cAAcA,wBAAAA,CAAO,GAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAa3B,IAAM,cAAcA,wBAAAA,CAAO,GAAA;AAAA;AAAA;AAAA;AAAA,aAAA,EAInB,CAAC,KAAA,KAAW,KAAA,CAAM,WAAA,GAAc,iBAAiB,gBAAiB,CAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAmB1E,IAAM,uBAAA,GAA0BA,yBAAOmB,mCAAe,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AA+BtD,IAAM,gBAAgBnB,wBAAAA,CAAO,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,sBAAA,EAiBZe,SAAQ,CAAA;AAAA;AAAA,CAAA;AAKzB,IAAM,cAAA,GAAiBf,yBAAOiB,8BAAU,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,sBAAA,EAWvB,YAAY,CAAA;AAAA;AAAA;AAAA,CAAA;AAM7B,IAAM,UAAA,GAAajB,yBAAOkB,0BAAM,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA,uBAAA,EAadJ,aAAY,CAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAO9B,IAAM,mBAAA,GAAsBd,yBAAOmB,mCAAe,CAAA;AAAA;AAAA,oBAAA,EAEnC,YAAY,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AA8B3B,IAAM,WAAWnB,wBAAAA,CAAO,GAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAaxB,IAAM,WAAWA,wBAAAA,CAAO,IAAA;AAAA;AAAA;AAAA,SAAA,EAGpB,CAAC,KAAA,KAAW,KAAA,CAAM,OAAA,GAAUa,cAAaD,eAAe,CAAA;AAAA,eAAA,EAClD,CAAC,KAAA,KAAW,KAAA,CAAM,OAAA,GAAU,WAAW,KAAM,CAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA,EAAA,EAU1D,aAAa,CAAA;AAAA,WAAA,EACJ,CAAC,KAAA,KAAW,KAAA,CAAM,OAAA,GAAUA,kBAAiBD,aAAa,CAAA;AAAA;AAAA,CAAA;AAKhE,IAAM,YAAYX,wBAAAA,CAAO,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAAA,EAKrB,CAAC,KAAA,KAAU;AAClB,EAAA,QAAQ,MAAM,OAAA;AAAS,IACrB,KAAK,WAAA;AACH,MAAA,OAAO,SAAA;AAAA;AAAA,IACT,KAAK,SAAA;AACH,MAAA,OAAO,SAAA;AAAA;AAAA,IACT,KAAK,QAAA;AACH,MAAA,OAAO,SAAA;AAAA;AAAA,IACT;AACE,MAAA,OAAOY,eAAAA;AAAA;AAEb,CAAC,CAAA;;AAAA;AAAA;AAAA;AAAA,CAAA;AAQgCZ,wBAAAA,CAAO,GAAA;AAAA;AAAA;AAAA,oBAAA,EAGpB,YAAY,CAAA;AAAA;AAAA;AAIFA,wBAAAA,CAAO,MAAA;AAAA;AAAA;AAAA,cAAA,EAGvB,YAAY,CAAA;AAAA;AAAA,SAAA,EAEjBW,aAAY,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,sBAAA,EASCI,SAAQ,CAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA,uBAAA,EAQPD,aAAY,CAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAePd,wBAAAA,CAAO,IAAA;AAAA;AAAA,SAAA,EAE1BY,eAAc,CAAA;AAAA;AAAA,aAAA,EAEV,CAAC,KAAA,KAAW,KAAA,CAAM,WAAA,GAAc,mBAAmB,cAAe,CAAA;AAAA;AAGhDZ,wBAAAA,CAAO,GAAA;AAAA;AAAA;AAAA,oBAAA,EAGlBU,YAAW,CAAA;AAAA,SAAA,EACtBE,eAAc,CAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBlB,IAAM,iBAAiBZ,wBAAAA,CAAO,GAAA;AAAA;AAAA;AAAA,CAAA;AAK9B,IAAM,aAAaA,wBAAAA,CAAO,GAAA;AAAA;AAAA;AAAA;AAAA,SAAA,EAItBW,aAAY,CAAA;AAAA,CAAA;AAGhB,IAAM,WAAWX,wBAAAA,CAAO,GAAA;AAAA;AAAA;AAAA,oBAAA,EAGT,YAAY,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAO3B,IAAM,YAAYA,wBAAAA,CAAO,GAAA;AAAA;AAAA,SAAA,EAErB,CAAC,KAAA,KAAU,KAAA,CAAM,WAAW,CAAA;AAAA,qCAAA,EACA,CAAC,UAAU,KAAA,CAAM,MAAM,OAAO,CAAC,KAAA,KAAU,MAAM,MAAM,CAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AA0BrF,IAAM,aAAaA,wBAAAA,CAAO,GAAA;AAAA;AAAA,SAAA,EAEtBY,eAAc,CAAA;AAAA;;AAAA;AAAA;AAAA,WAAA,EAKZA,eAAc,CAAA;AAAA;AAAA;AAAA,CAAA;AAMpB,IAAM,uBAAuBZ,wBAAAA,CAAO,GAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAMpC,IAAM,wBAAwBA,wBAAAA,CAAO,CAAA;AAAA;AAAA,SAAA,EAEjCY,eAAc,CAAA;AAAA;AAAA;AAAA,CAAA;AAKlB,IAAM,eAAeZ,wBAAAA,CAAO,MAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAAA,EAKxB,CAAC,KAAA,KAAW,KAAA,CAAM,YAAA,GAAeW,gBAAe,SAAU,CAAA;AAAA,cAAA,EACrD,CAAC,KAAA,KAAW,KAAA,CAAM,YAAA,GAAeD,eAAc,2CAA4C,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA,uBAAA,EAwBlFI,aAAY,CAAA;AAAA;AAAA;;AAAA,EAAA,EAIjC,CAAC,KAAA,KACD,KAAA,CAAM,YAAA,IACN;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA,CAKD;AAAA,CAAA;AC5nBH,IAAM,KAAA,GAAQ;AAAA,EACZ,OAAA,EAAS,mCAAA;AAAA,EACT,IAAA,EAAM,qCAAA;AAAA,EACN,IAAA,EAAM,uCAAA;AAAA,EACN,IAAA,EAAM,8CAAA;AAAA,EACN,IAAA,EAAM,uCAAA;AAAA,EACN,SAAA,EAAW,0CAAA;AAAA,EACX,GAAA,EAAK,oCAAA;AAAA,EACL,WAAA,EAAa,6CAAA;AAAA,EACb,OAAA,EAAS;AACX,CAAA;AAyCA,SAAS,YAAA,CAAa,EAAE,GAAA,EAAI,EAAqB;AAC/C,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIL,eAAS,KAAK,CAAA;AAGlD,EAAA,MAAM,WAAA,GAAqC,IAAI,IAAA,GAC3C;AAAA,IACE;AAAA,MACE,KAAA,EAAO,gBAAA;AAAA,MACP,KAAA,EAAO,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,MAAS;AAAA,QAC5B,IAAI,GAAA,CAAI,EAAA;AAAA,QACR,MAAM,GAAA,CAAI,IAAA;AAAA,QACV,MAAM,GAAA,CAAI,IAAA;AAAA,QACV,WAAW,GAAA,CAAI,SAAA;AAAA,QACf,WAAW,GAAA,CAAI;AAAA,OACjB,CAAE;AAAA;AACJ,MAEF,EAAC;AAEL,EAAA,uBACEP,eAAAA,CAAC,cAAA,EAAA,EAAe,EAAA,EAAI,IAAI,EAAA,EACtB,QAAA,EAAA;AAAA,oBAAAD,cAAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,SAAA;AAAA,QACL,OAAA,EAAS,MAAM,aAAA,CAAc,CAAC,UAAU,CAAA;AAAA,QACxC,WAAA,EAAa,UAAA;AAAA,QAEb,QAAA,kBAAAC,eAAAA,CAAC,aAAA,EAAA,EAAc,EAAA,EAAG,KAAA,EAChB,QAAA,EAAA;AAAA,0BAAAD,cAAAA,CAAC,YAAS,GAAA,EAAK,KAAA,CAAM,IAAI,IAAA,IAAQ,MAAM,CAAA,EAAG,GAAA,EAAI,EAAA,EAAG,CAAA;AAAA,0BACjDA,cAAAA,CAAC,QAAA,EAAA,EAAU,QAAA,EAAA,GAAA,CAAI,IAAA,EAAK,CAAA;AAAA,0BACpBC,eAAAA,CAAC,SAAA,EAAA,EAAU,OAAA,EAAS,IAAI,MAAA,EACrB,QAAA,EAAA;AAAA,YAAA,GAAA,CAAI,WAAW,WAAA,IAAe,QAAA;AAAA,YAC9B,GAAA,CAAI,WAAW,SAAA,IAAa,QAAA;AAAA,YAC5B,GAAA,CAAI,WAAW,QAAA,IAAY;AAAA,WAAA,EAC9B,CAAA;AAAA,0BACAD,cAAAA,CAAC,WAAA,EAAA,EAAY,WAAA,EAAa,UAAA,EACxB,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,KAAA,CAAM,WAAA,EAAa,GAAA,EAAI,IAAG,CAAA,EACtC;AAAA,SAAA,EACF;AAAA;AAAA,KACF;AAAA,IACC,UAAA,oBACCA,cAAAA,CAAC,mBAAA,EAAA,EACE,QAAA,EAAA,GAAA,CAAI,IAAA,IAAQ,GAAA,CAAI,IAAA,CAAK,MAAA,GAAS,CAAA,mBAC7BA,cAAAA,CAAC,oBAAA,EAAA,EAAqB,QAAA,EAAU,WAAA,EAAa,CAAA,mBAE7CA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,KAAA,EAAO,SAAA,EAAW,QAAA,EAAU,MAAA,EAAQ,OAAA,EAAS,KAAA,EAAM,EAAG,sCAEpE,CAAA,EAEJ;AAAA,GAAA,EAEJ,CAAA;AAEJ;AAGA,SAAS,cAAA,CAAe;AAAA,EACtB,IAAA;AAAA,EACA;AACF,CAAA,EAGG;AACD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIQ,cAAAA;AAAA,wBAClC,GAAA,CAAI,CAAC,WAAA,EAAa,WAAA,EAAa,QAAQ,CAAC;AAAA;AAAA,GAC9C;AAGA,EAAA,MAAM,gBAAgB,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa,WAAW,CAAA;AACnE,EAAA,MAAM,gBAAgB,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa,WAAW,CAAA;AACnE,EAAA,MAAM,aAAa,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa,QAAQ,CAAA;AAE7D,EAAA,MAAM,SAAA,GAAYJ,aAA0B,IAAI,CAAA;AAChD,EAAA,MAAM,EAAE,aAAY,GAAIC,gBAAAA;AAAA,IACtB;AAAA,MACE,OAAA,EAAS;AAAA,KACX;AAAA,IACA;AAAA,GACF;AAEA,EAAA,uBACEJ,gBAAC,aAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAA,eAAAA,CAAC,YAAA,EAAA,EAAc,GAAG,WAAA,EAAa,KAAK,SAAA,EAClC,QAAA,EAAA;AAAA,sBAAAD,eAAC,QAAA,EAAA,EAAS,GAAA,EAAK,KAAA,CAAM,GAAA,EAAK,KAAI,EAAA,EAAG,CAAA;AAAA,sBACjCA,cAAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAA,oBAAA,EAAkB;AAAA,KAAA,EAC1B,CAAA;AAAA,oBAEAC,eAAAA;AAAA,MAAC,qBAAA;AAAA,MAAA;AAAA,QACC,YAAA;AAAA,QACA,gBAAA,EAAkB,eAAA;AAAA,QAClB,sBAAA,EAAsB,IAAA;AAAA,QACtB,YAAA,EAAW,cAAA;AAAA,QAGX,QAAA,EAAA;AAAA,0BAAAA,eAAAA,CAAC,kBAAA,EAAA,EAAmB,EAAA,EAAG,WAAA,EACrB,QAAA,EAAA;AAAA,4BAAAD,cAAAA,CAACmB,+BAAQ,KAAA,EAAO,CAAA,EACd,0BAAAlB,eAAAA,CAAC,cAAA,EAAA,EAAe,MAAK,SAAA,EACnB,QAAA,EAAA;AAAA,8BAAAA,gBAAC,aAAA,EAAA,EACC,QAAA,EAAA;AAAA,gCAAAD,eAAC,WAAA,EAAA,EAAY,GAAA,EAAK,KAAA,CAAM,OAAA,EAAS,KAAI,EAAA,EAAG,CAAA;AAAA,gCACxCA,cAAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAA,WAAA,EAAS;AAAA,eAAA,EACjB,CAAA;AAAA,8BACAA,cAAAA,CAAC,WAAA,EAAA,EAAY,WAAA,EAAa,YAAA,CAAa,IAAI,WAAW,CAAA,EACpD,QAAA,kBAAAA,cAAAA,CAAC,SAAI,GAAA,EAAK,KAAA,CAAM,WAAA,EAAa,GAAA,EAAI,IAAG,CAAA,EACtC;AAAA,aAAA,EACF,CAAA,EACF,CAAA;AAAA,4BACAA,cAAAA,CAAC,uBAAA,EAAA,EACE,QAAA,EAAA,aAAA,CAAc,MAAA,GAAS,CAAA,GACtB,aAAA,CAAc,GAAA,CAAI,CAAC,GAAA,qBAAQA,cAAAA,CAAC,YAAA,EAAA,EAA0B,GAAA,EAAA,EAAR,GAAA,CAAI,EAAc,CAAE,CAAA,mBAElEA,cAAAA,CAAC,aAAA,EAAA,EACC,QAAA,kBAAAA,cAAAA,CAAC,QAAA,EAAA,EAAS,OAAA,EAAO,IAAA,EAAC,QAAA,EAAA,oBAAA,EAAkB,CAAA,EACtC,CAAA,EAEJ;AAAA,WAAA,EACF,CAAA;AAAA,0BAGAC,eAAAA,CAAC,kBAAA,EAAA,EAAmB,EAAA,EAAG,WAAA,EACrB,QAAA,EAAA;AAAA,4BAAAD,cAAAA,CAACmB,+BAAQ,KAAA,EAAO,CAAA,EACd,0BAAAlB,eAAAA,CAAC,cAAA,EAAA,EAAe,MAAK,SAAA,EACnB,QAAA,EAAA;AAAA,8BAAAA,gBAAC,aAAA,EAAA,EACC,QAAA,EAAA;AAAA,gCAAAD,eAAC,WAAA,EAAA,EAAY,GAAA,EAAK,KAAA,CAAM,OAAA,EAAS,KAAI,EAAA,EAAG,CAAA;AAAA,gCACxCA,cAAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAA,WAAA,EAAS;AAAA,eAAA,EACjB,CAAA;AAAA,8BACAA,cAAAA,CAAC,WAAA,EAAA,EAAY,WAAA,EAAa,YAAA,CAAa,IAAI,WAAW,CAAA,EACpD,QAAA,kBAAAA,cAAAA,CAAC,SAAI,GAAA,EAAK,KAAA,CAAM,WAAA,EAAa,GAAA,EAAI,IAAG,CAAA,EACtC;AAAA,aAAA,EACF,CAAA,EACF,CAAA;AAAA,4BACAA,cAAAA,CAAC,uBAAA,EAAA,EACE,QAAA,EAAA,aAAA,CAAc,MAAA,GAAS,CAAA,GACtB,aAAA,CAAc,GAAA,CAAI,CAAC,GAAA,qBAAQA,cAAAA,CAAC,YAAA,EAAA,EAA0B,GAAA,EAAA,EAAR,GAAA,CAAI,EAAc,CAAE,CAAA,mBAElEA,cAAAA,CAAC,aAAA,EAAA,EACC,QAAA,kBAAAA,cAAAA,CAAC,QAAA,EAAA,EAAS,OAAA,EAAO,IAAA,EAAC,QAAA,EAAA,oBAAA,EAAkB,CAAA,EACtC,CAAA,EAEJ;AAAA,WAAA,EACF,CAAA;AAAA,0BAGAC,eAAAA,CAAC,kBAAA,EAAA,EAAmB,EAAA,EAAG,QAAA,EACrB,QAAA,EAAA;AAAA,4BAAAD,cAAAA,CAACmB,+BAAQ,KAAA,EAAO,CAAA,EACd,0BAAAlB,eAAAA,CAAC,cAAA,EAAA,EAAe,MAAK,SAAA,EACnB,QAAA,EAAA;AAAA,8BAAAA,gBAAC,aAAA,EAAA,EACC,QAAA,EAAA;AAAA,gCAAAD,eAAC,WAAA,EAAA,EAAY,GAAA,EAAK,KAAA,CAAM,OAAA,EAAS,KAAI,EAAA,EAAG,CAAA;AAAA,gCACxCA,cAAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAA,QAAA,EAAM;AAAA,eAAA,EACd,CAAA;AAAA,8BACAA,cAAAA,CAAC,WAAA,EAAA,EAAY,WAAA,EAAa,YAAA,CAAa,IAAI,QAAQ,CAAA,EACjD,QAAA,kBAAAA,cAAAA,CAAC,SAAI,GAAA,EAAK,KAAA,CAAM,WAAA,EAAa,GAAA,EAAI,IAAG,CAAA,EACtC;AAAA,aAAA,EACF,CAAA,EACF,CAAA;AAAA,4BACAA,cAAAA,CAAC,uBAAA,EAAA,EACE,QAAA,EAAA,UAAA,CAAW,MAAA,GAAS,CAAA,GACnB,UAAA,CAAW,GAAA,CAAI,CAAC,GAAA,qBAAQA,cAAAA,CAAC,YAAA,EAAA,EAA0B,GAAA,EAAA,EAAR,GAAA,CAAI,EAAc,CAAE,CAAA,mBAE/DA,cAAAA,CAAC,aAAA,EAAA,EACC,QAAA,kBAAAA,cAAAA,CAAC,QAAA,EAAA,EAAS,OAAA,EAAO,IAAA,EAAC,QAAA,EAAA,WAAA,EAAS,CAAA,EAC7B,CAAA,EAEJ;AAAA,WAAA,EACF;AAAA;AAAA;AAAA;AACF,GAAA,EACF,CAAA;AAEJ;AAGA,SAAS,eAAA,CAAgB;AAAA,EACvB,YAAA,GAAe,CAAA;AAAA,EACf,QAAA,GAAW;AACb,CAAA,EAGG;AACD,EAAA,MAAM,GAAA,GAAMI,aAAuB,IAAI,CAAA;AACvC,EAAA,MAAM,EAAE,UAAA,EAAY,UAAA,EAAW,GAAIgB,cAAA,CAAS;AAAA,IAC1C,KAAA,EAAO,aAAA;AAAA,IACP,KAAA,EAAO,YAAA;AAAA,IACP,QAAA,EAAU,CAAA;AAAA,IACV,QAAA,EAAU;AAAA,GACX,CAAA;AAED,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,KAAA,CAAO,YAAA,GAAe,WAAY,GAAG,CAAA;AAG7D,EAAA,IAAI,KAAA,GAAQ,SAAA;AACZ,EAAA,IAAI,UAAA,IAAc,EAAA;AAChB,IAAA,KAAA,GAAQ,SAAA;AAAA,OAAA,IACD,UAAA,IAAc,IAAI,KAAA,GAAQ,SAAA;AAEnC,EAAA,uBACEnB,gBAAC,cAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAD,cAAAA,CAAC,UAAA,EAAA,EAAY,GAAG,UAAA,EAAY,QAAA,EAAA,aAAA,EAAW,CAAA;AAAA,oBACvCA,cAAAA,CAAC,QAAA,EAAA,EAAU,GAAG,UAAA,EAAY,GAAA,EACxB,QAAA,kBAAAA,cAAAA,CAAC,SAAA,EAAA,EAAU,WAAA,EAAa,UAAA,EAAY,MAAA,EAAQ,OAAO,CAAA,EACrD,CAAA;AAAA,oBACAC,gBAAC,UAAA,EAAA,EACE,QAAA,EAAA;AAAA,MAAA,UAAA;AAAA,MAAW,OAAA;AAAA,MAAM,SAAS,cAAA,EAAe;AAAA,MAAE,cAAA;AAAA,sBAC5CD,eAAC,IAAA,EAAA,EAAG,CAAA;AAAA,sBACJC,gBAAC,OAAA,EAAA,EACE,QAAA,EAAA;AAAA,QAAA,YAAA,CAAa,cAAA,EAAe;AAAA,QAAE,KAAA;AAAA,QAAI,SAAS,cAAA,EAAe;AAAA,QAAE;AAAA,OAAA,EAC/D;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AAGA,SAAS,qBAAA,CAAsB;AAAA,EAC7B,iBAAA,GAAoB,KAAA;AAAA,EACpB,eAAA;AAAA,EACA;AACF,CAAA,EAIG;AACD,EAAA,MAAM,GAAA,GAAMG,aAA0B,IAAI,CAAA;AAC1C,EAAA,MAAM,EAAE,aAAY,GAAIC,gBAAAA;AAAA,IACtB;AAAA,MACE,OAAA,EAAS,oBAAoB,kBAAA,GAAqB;AAAA,KACpD;AAAA,IACA;AAAA,GACF;AAEA,EAAA,uBACEJ,gBAAC,oBAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAD,cAAAA,CAAC,qBAAA,EAAA,EACE,QAAA,EAAA,iBAAA,GACG,4EAAA,GACA,0FAAA,EACN,CAAA;AAAA,oBACAA,cAAAA,CAAC,YAAA,EAAA,EAAc,GAAG,WAAA,EAAa,KAAU,YAAA,EAAc,iBAAA,EACpD,QAAA,EAAA,iBAAA,GAAoB,+BAAA,GAA6B,qBAAA,EACpD;AAAA,GAAA,EACF,CAAA;AAEJ;AAGA,SAAS,GAAA,CAAI,EAAE,IAAA,EAAM,KAAA,EAAM,EAA6D;AACtF,EAAA,MAAM,GAAA,GAAMI,aAA0B,IAAI,CAAA;AAC1C,EAAA,MAAM,EAAE,QAAA,EAAS,GAAIiB,aAAA,CAAO,EAAE,KAAK,IAAA,CAAK,GAAA,EAAI,EAAG,KAAA,EAAO,GAAG,CAAA;AAEzD,EAAA,uBACErB,cAAAA,CAAC,SAAA,EAAA,EAAW,GAAG,QAAA,EAAU,GAAA,EAAU,WAAA,EAAa,KAAA,CAAM,WAAA,KAAgB,IAAA,CAAK,GAAA,EACxE,QAAA,EAAA,IAAA,CAAK,QAAA,EACR,CAAA;AAEJ;AAGA,SAAS,OAAA,CAAQ;AAAA,EACf,KAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAyF;AACvF,EAAA,MAAM,GAAA,GAAMI,aAAuB,IAAI,CAAA;AACvC,EAAA,MAAM,EAAE,YAAA,EAAa,GAAIkB,iBAAA,CAAW,KAAA,EAAO,OAAO,GAAG,CAAA;AAErD,EAAA,uBACEtB,eAAC,cAAA,EAAA,EAAgB,GAAG,cAAc,GAAA,EAC/B,QAAA,EAAA,CAAC,GAAG,KAAA,CAAM,UAAU,CAAA,CAAE,IAAI,CAAC,IAAA,qBAC1BA,cAAAA,CAAC,GAAA,EAAA,EAAmB,MAAY,KAAA,EAAA,EAAtB,IAAA,CAAK,GAA+B,CAC/C,CAAA,EACH,CAAA;AAEJ;AAGA,SAAS,QAAA,CAAS;AAAA,EAChB,KAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAyF;AACvF,EAAA,MAAM,GAAA,GAAMI,aAAuB,IAAI,CAAA;AACvC,EAAA,MAAM,EAAE,aAAA,EAAc,GAAImB,kBAAA,CAAY,KAAA,EAAO,OAAO,GAAG,CAAA;AAEvD,EAAA,uBACEvB,eAAC,eAAA,EAAA,EAAiB,GAAG,eAAe,GAAA,EACjC,QAAA,EAAA,KAAA,CAAM,YAAA,EAAc,KAAA,CAAM,QAAA,EAC7B,CAAA;AAEJ;AAEO,SAAS,SAAA,CAAU;AAAA,EACxB,SAAA,GAAY,MAAA;AAAA,EACZ,WAAA;AAAA,EACA,OAAO,EAAC;AAAA,EACR,YAAA,GAAe,CAAA;AAAA,EACf,QAAA,GAAW,GAAA;AAAA,EACX,iBAAA,GAAoB,KAAA;AAAA,EACpB,eAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACF,CAAA,EAAmB;AACjB,EAAA,MAAM,QAAQwB,oBAAA,CAAgB;AAAA,IAC5B,kBAAA,EAAoB,SAAA;AAAA,IACpB,iBAAA,EAAmB,CAAC,GAAA,KAAQ;AAC1B,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,WAAA,CAAY,GAAuC,CAAA;AAAA,MACrD;AAAA,IACF,CAAA;AAAA,IACA,QAAA,kBACEvB,eAAAA,CAAAwB,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAAzB,cAAAA,CAAC0B,gBAAA,EAAA,EAAgB,KAAA,EAAM,MAAA,EACrB,QAAA,kBAAA1B,eAAC,cAAA,EAAA,EAAe,IAAA,EAAY,mBAAA,EAA0C,CAAA,EAAA,EAD9D,MAEV,CAAA;AAAA,sBACAA,cAAAA,CAAC0B,gBAAA,EAAA,EAAiB,KAAA,EAAM,OAAA,EACtB,QAAA,kBAAA1B,cAAAA,CAAC,eAAA,EAAA,EAAgB,YAAA,EAA4B,QAAA,EAAoB,CAAA,EAAA,EADzD,OAEV,CAAA;AAAA,sBACAA,cAAAA,CAAC0B,gBAAA,EAAA,EAAuB,KAAA,EAAM,eAC5B,QAAA,kBAAA1B,cAAAA;AAAA,QAAC,qBAAA;AAAA,QAAA;AAAA,UACC,iBAAA;AAAA,UACA,eAAA;AAAA,UACA;AAAA;AAAA,WAJM,aAMV;AAAA,KAAA,EACF;AAAA,GAEH,CAAA;AAED,EAAA,uBACEC,eAAAA,CAACE,UAAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAH,cAAAA,CAAC,OAAA,EAAA,EAAQ,KAAA,EAAc,YAAA,EAAW,gBAAA,EAAiB,CAAA;AAAA,oBACnDA,cAAAA,CAAC,QAAA,EAAA,EAAuC,KAAA,EAAA,EAAzB,KAAA,CAAM,cAAc,GAAmB;AAAA,GAAA,EACxD,CAAA;AAEJ;AClaA,IAAM,SAAA,GAAY,SAAA;AAClB,IAAM,cAAA,GAAiB,SAAA;AACvB,IAAM,SAAA,GAAY,SAAA;AAClB,IAAM,eAAA,GAAkB,SAAA;AAGxB,IAAM,WAAA,GAAc;AAAA,EAClB,EAAA,EAAI,OAAA;AAAA,EACJ,EAAA,EAAI,OAAA;AAAA,EACJ,EAAA,EAAI,QAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AAEO,IAAMG,aAAYJ,wBAAAA,CAAO,MAAA;AAAA;AAAA;AAAA;AAAA,oBAAA,EAIV,SAAS,CAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,qBAAA,EAuBR,YAAY,EAAE,CAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,qBAAA,EAOd,YAAY,EAAE,CAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,qBAAA,EASd,YAAY,EAAE,CAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,qBAAA,EAOd,YAAY,EAAE,CAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA,sBAAA,EAQb,cAAc,CAAA;AAAA;AAAA,CAAA;AAI/B,IAAM,YAAYA,wBAAAA,CAAO,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,qBAAA,EAWT,YAAY,EAAE,CAAA;AAAA;AAAA;AAAA,CAAA;AAK9B,IAAM,iBAAiBA,wBAAAA,CAAO,MAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAA,EAYf,SAAS,CAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA,sBAAA,EAaP,eAAe,CAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,qBAAA,EAqBhB,YAAY,EAAE,CAAA;AAAA;AAAA;;AAAA,qBAAA,EAId,YAAY,EAAE,CAAA;AAAA;AAAA;AAAA,CAAA;AAK9B,IAAM4B,cAAa5B,wBAAAA,CAAO,MAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAA,EAYX,SAAS,CAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA,sBAAA,EAaP,eAAe,CAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,qBAAA,EAqBhB,YAAY,EAAE,CAAA;AAAA;AAAA;;AAAA,qBAAA,EAId,YAAY,EAAE,CAAA;AAAA;AAAA;AAAA,CAAA;ACzJ9B,SAAS,iBAAA,CAAkB;AAAA,EAChC,KAAA,GAAQ,QAAA;AAAA,EACR,WAAA;AAAA,EACA,eAAA;AAAA,EACA,SAAA;AAAA,EACA,cAAc,SAAA,GAAY;AAC5B,CAAA,EAA2B;AACzB,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIS,eAAS,KAAK,CAAA;AACxD,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAoB,CAAA,GAAIA,eAAS,KAAK,CAAA;AAChE,EAAA,MAAM,aAAA,GAAgBJ,aAA0B,IAAI,CAAA;AACpD,EAAA,MAAM,iBAAA,GAAoBA,aAA0B,IAAI,CAAA;AAExD,EAAA,MAAM,EAAE,WAAA,EAAa,eAAA,EAAgB,GAAIC,gBAAAA;AAAA,IACvC;AAAA,MACE,OAAA,EAAS,WAAA;AAAA,MACT,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,GACF;AAEA,EAAA,MAAM,EAAE,WAAA,EAAa,mBAAA,EAAoB,GAAIA,gBAAAA;AAAA,IAC3C;AAAA,MACE,OAAA,EAAS,eAAA;AAAA,MACT,YAAA,EAAc;AAAA,KAChB;AAAA,IACA;AAAA,GACF;AAEA,EAAA,uBACEJ,gBAACE,UAAAA,EAAA,EAAU,WAAsB,IAAA,EAAK,QAAA,EAAS,cAAY,SAAA,EAExD,QAAA,EAAA;AAAA,IAAA,WAAA,oBACCH,cAAAA;AAAA,MAAC2B,WAAAA;AAAA,MAAA;AAAA,QACE,GAAG,eAAA;AAAA,QACJ,GAAA,EAAK,aAAA;AAAA,QACL,YAAA,EAAc,MAAM,gBAAA,CAAiB,IAAI,CAAA;AAAA,QACzC,YAAA,EAAc,MAAM,gBAAA,CAAiB,KAAK,CAAA;AAAA,QAC1C,UAAA,EAAY,aAAA;AAAA,QAEZ,QAAA,kBAAA3B,eAAC,IAAA,EAAA,EAAK,IAAA,EAAK,mBAAkB,IAAA,EAAM,EAAA,EAAI,OAAM,SAAA,EAAU;AAAA;AAAA,KACzD;AAAA,oBAIFA,eAAC,SAAA,EAAA,EAAU,GAAA,EAAK,8BAA8B,KAAK,CAAA,KAAA,CAAA,EAAS,KAAK,KAAA,EAAO,CAAA;AAAA,oBAGxEA,cAAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACE,GAAG,mBAAA;AAAA,QACJ,GAAA,EAAK,iBAAA;AAAA,QACL,YAAA,EAAc,MAAM,oBAAA,CAAqB,IAAI,CAAA;AAAA,QAC7C,YAAA,EAAc,MAAM,oBAAA,CAAqB,KAAK,CAAA;AAAA,QAC9C,UAAA,EAAY,iBAAA;AAAA,QAEZ,QAAA,kBAAAA,cAAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAM,oBAAoB,eAAA,GAAkB,eAAA;AAAA,YAC5C,IAAA,EAAM,EAAA;AAAA,YACN,KAAA,EAAM;AAAA;AAAA;AACR;AAAA;AACF,GAAA,EACF,CAAA;AAEJ;AAEA,iBAAA,CAAkB,WAAA,GAAc,mBAAA;AC3GhC,IAAME,OAAAA,GAAS,SAAA;AACf,IAAM,YAAA,GAAe,SAAA;AAEd,IAAMC,aAAYJ,wBAAAA,CAAO,MAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAAA,EAMb,CAAC,EAAE,OAAA,EAAQ,KAAO,OAAA,GAAU,SAAS,KAAM,CAAA;AAAA,oBAAA,EACxCG,OAAM,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA,sBAAA,EAYJ,YAAY,CAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,EAAA,EAUhC,CAAC,EAAE,OAAA,EAAQ,KACX,OAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA,CAYD;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AASI,IAAM,YAAYH,wBAAAA,CAAO,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;ACVzB,SAAS,WAAA,CAAY,EAAE,KAAA,EAAO,MAAA,GAAS,OAAO,SAAA,EAAW,GAAG,WAAU,EAAqB;AAChG,EAAA,MAAM,GAAA,GAAMK,aAA0B,IAAI,CAAA;AAC1C,EAAA,MAAM,EAAE,aAAY,GAAIC,gBAAAA;AAAA,IACtB;AAAA,MACE,GAAG,SAAA;AAAA,MACH,cAAA,EAAgB;AAAA,KAClB;AAAA,IACA;AAAA,GACF;AAEA,EAAA,uBACEL,cAAAA,CAACG,UAAAA,EAAA,EAAW,GAAG,WAAA,EAAa,KAAU,OAAA,EAAS,MAAA,EAAQ,WACrD,QAAA,kBAAAH,cAAAA,CAAC,aAAU,GAAA,EAAK,CAAA,oBAAA,EAAuB,KAAK,CAAA,IAAA,CAAA,EAAQ,GAAA,EAAK,OAAO,CAAA,EAClE,CAAA;AAEJ;AAEA,WAAA,CAAY,WAAA,GAAc,aAAA","file":"chunk-KNSPBTTJ.cjs","sourcesContent":["import styled from 'styled-components';\n\ninterface IconWrapperProps {\n $size: number;\n $color: string;\n}\n\nexport const IconWrapper = styled.span<IconWrapperProps>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: ${({ $size }) => $size}px;\n height: ${({ $size }) => $size}px;\n color: ${({ $color }) => $color};\n line-height: 1;\n\n img {\n width: 100%;\n height: 100%;\n filter: ${({ $color }) => {\n if ($color === 'currentColor' || !$color) return 'inherit';\n if ($color === 'white' || $color === '#ffffff' || $color === '#fff') {\n return 'brightness(0) saturate(100%) invert(100%)';\n }\n if ($color === '#b9bbbe') {\n // Discord gray\n return 'brightness(0) saturate(100%) invert(75%) sepia(8%) saturate(223%) hue-rotate(180deg) brightness(94%) contrast(86%)';\n }\n if ($color === '#ed4245' || $color === '#f04747') {\n // Discord red\n return 'brightness(0) saturate(100%) invert(38%) sepia(97%) saturate(1459%) hue-rotate(334deg) brightness(95%) contrast(93%)';\n }\n return 'none';\n }};\n }\n`;\n","/**\n * Icon configuration and type definitions\n * Using @icon-set alias for cleaner imports\n */\n\n// Base path for all icons (served from public directory)\nexport const ICON_BASE_PATH = '/assets/icon-set' as const;\n\n// Available icon names as const for type safety\nexport const IconNames = {\n MIC: 'mic-fill',\n MIC_OFF: 'mic-off-fill',\n HEADPHONE: 'headphone-fill',\n VOLUME_MUTE: 'volume-mute-fill',\n SETTINGS: 'settings-3-fill',\n SETTINGS_FILL: 'settings-fill',\n SETTINGS_LINE: 'settings-line',\n HOME: 'home-fill',\n ADD_CIRCLE: 'add-circle-fill',\n COMPASS_DISCOVER: 'compass-discover-fill',\n DOWNLOAD: 'download-2-fill',\n ARROW_LEFT: 'arrow-left-fill',\n CALENDAR: 'calendar-fill',\n CHAT: 'chat-1-fill',\n} as const;\n\nexport type IconName = (typeof IconNames)[keyof typeof IconNames];\n\n// Icon file mapping\nexport const iconFiles: Record<IconName, string> = {\n 'mic-fill': 'Icon-mic-fill.svg',\n 'mic-off-fill': 'Icon-mic-off-fill.svg',\n 'headphone-fill': 'Icon-headphone-fill.svg',\n 'volume-mute-fill': 'Icon-volume-mute-fill.svg',\n 'settings-3-fill': 'Icon-settings-3-fill.svg',\n 'settings-fill': 'Icon-settings-fill.svg',\n 'settings-line': 'Icon-settings-line.svg',\n 'home-fill': 'Icon-home-fill.svg',\n 'add-circle-fill': 'Icon-add-circle-fill.svg',\n 'compass-discover-fill': 'Icon-compass-discover-fill.svg',\n 'download-2-fill': 'Icon-download-2-fill.svg',\n 'arrow-left-fill': 'Icon-arrow-left-fill.svg',\n 'calendar-fill': 'Icon-calendar-fill.svg',\n 'chat-1-fill': 'Icon-chat-1-fill.svg',\n};\n\n// Helper function to get full icon path\nexport function getIconPath(name: IconName): string {\n return `${ICON_BASE_PATH}/${iconFiles[name]}`;\n}\n","import type { ImgHTMLAttributes } from 'react';\nimport { IconWrapper } from './Icon.styles';\nimport { getIconPath, type IconName } from './icons';\n\nexport interface IconProps extends Omit<ImgHTMLAttributes<HTMLImageElement>, 'src' | 'alt'> {\n name: IconName;\n size?: number;\n color?: string;\n className?: string;\n}\n\nexport function Icon({\n name,\n size = 20,\n color = 'currentColor',\n className,\n ...imgProps\n}: IconProps) {\n const iconPath = getIconPath(name);\n\n return (\n <IconWrapper $size={size} $color={color} className={className} aria-hidden=\"true\">\n <img src={iconPath} alt=\"\" width={size} height={size} {...imgProps} />\n </IconWrapper>\n );\n}\n\nIcon.displayName = 'Icon';\n","import styled from 'styled-components';\n\n// Colors based on the design\nconst NAV_BG = '#232428';\nconst NAV_BORDER = '#1E1F22';\n\nexport const Container = styled.nav`\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n background-color: ${NAV_BG};\n border-top: 1px solid ${NAV_BORDER};\n height: 52px;\n z-index: 10;\n\n /* Dark theme support */\n @media (prefers-color-scheme: dark) {\n background-color: #1a1b1e;\n }\n`;\n\nexport const ContentWrapper = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n height: 100%;\n padding: 0 8px;\n max-width: 100%;\n\n /* Responsive padding */\n @media (min-width: 768px) {\n padding: 0 16px;\n }\n`;\n\nexport const UserStatusSlot = styled.div`\n display: flex;\n align-items: center;\n min-width: 0; /* Allow flex item to shrink */\n flex: 0 1 auto;\n\n /* Handle overflow for long usernames */\n > * {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n`;\n\nexport const ActionButtonsSlot = styled.div`\n display: flex;\n align-items: center;\n gap: 4px;\n flex-shrink: 0;\n\n /* Ensure buttons stay visible */\n @media (min-width: 480px) {\n gap: 8px;\n }\n`;\n","import type { ReactNode } from 'react';\nimport {\n ActionButtonsSlot,\n Container,\n ContentWrapper,\n UserStatusSlot,\n} from './NavHorizontal.styles';\n\nexport interface NavHorizontalProps {\n userStatusSlot?: ReactNode;\n actionsSlot?: ReactNode;\n className?: string;\n 'aria-label'?: string;\n}\n\nexport function NavHorizontal({\n userStatusSlot,\n actionsSlot,\n className,\n 'aria-label': ariaLabel = 'Horizontal navigation bar',\n}: NavHorizontalProps) {\n return (\n <Container className={className} role=\"navigation\" aria-label={ariaLabel}>\n <ContentWrapper>\n <UserStatusSlot>{userStatusSlot}</UserStatusSlot>\n <ActionButtonsSlot>{actionsSlot}</ActionButtonsSlot>\n </ContentWrapper>\n </Container>\n );\n}\n\nNavHorizontal.displayName = 'NavHorizontal';\n","import styled from 'styled-components';\n\n// Colors based on the design\nconst NAV_BG = '#202225';\nconst NAV_SEPARATOR = '#36393F';\n\nexport const Container = styled.nav`\n position: absolute;\n top: 0;\n left: 0;\n bottom: 52px; /* Account for horizontal nav height */\n width: 72px;\n background-color: ${NAV_BG};\n display: flex;\n flex-direction: column;\n z-index: 9; /* Below horizontal nav and chat sidebar */\n overflow-y: auto;\n overflow-x: hidden;\n scrollbar-width: none; /* Firefox */\n\n /* Hide scrollbar for Chrome, Safari and Opera */\n &::-webkit-scrollbar {\n display: none;\n }\n\n /* Dark theme support */\n @media (prefers-color-scheme: dark) {\n background-color: #1a1b1e;\n }\n\n /* Responsive adjustments */\n @media (max-width: 768px) {\n width: 60px; /* Match MainPane left offset on mobile */\n }\n`;\n\nexport const TopSection = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 56px; /* Same as PaneSectionHeader on mobile */\n padding: 0;\n flex-shrink: 0;\n position: relative;\n\n @media (min-width: 768px) {\n height: 64px; /* Same as PaneSectionHeader on desktop */\n }\n`;\n\nexport const BackButton = styled.button`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 40px;\n height: 40px;\n border-radius: 50%;\n border: none;\n background-color: ${NAV_SEPARATOR};\n color: #ffffff;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.2s ease-in-out;\n\n &:hover {\n background-color: #5865F2;\n }\n\n &:active {\n transform: translate(-50%, -50%) scale(0.95);\n }\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: 2px solid #5865F2;\n outline-offset: 2px;\n }\n`;\n\nexport const BackButtonIcon = styled.span`\n font-size: 20px;\n line-height: 1;\n font-weight: bold;\n`;\n\nexport const Separator = styled.div`\n width: 32px;\n height: 2px;\n background-color: ${NAV_SEPARATOR};\n align-self: center;\n margin: 8px auto 12px;\n border-radius: 1px;\n`;\n\nexport const FolderGroupsSlot = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n padding: 0 12px 12px;\n flex: 1;\n\n /* Server/workspace icons styling */\n > * {\n width: 48px;\n height: 48px;\n border-radius: 50%;\n transition: border-radius 0.15s ease-out;\n cursor: pointer;\n\n &:hover {\n border-radius: 16px;\n }\n }\n\n /* Responsive adjustments */\n @media (max-width: 768px) {\n padding: 0 6px 12px; /* Reduce horizontal padding on mobile */\n }\n`;\n","import { useButton } from '@react-aria/button';\nimport type { ReactNode } from 'react';\nimport { useRef } from 'react';\nimport { Icon } from '../Icon';\nimport {\n BackButton,\n Container,\n FolderGroupsSlot,\n Separator,\n TopSection,\n} from './NavVertical.styles';\n\nexport interface NavVerticalProps {\n onBackClick?: () => void;\n onHomeClick?: () => void;\n folderGroupsSlot?: ReactNode;\n className?: string;\n 'aria-label'?: string;\n}\n\nexport function NavVertical({\n onBackClick,\n onHomeClick,\n folderGroupsSlot,\n className,\n 'aria-label': ariaLabel = 'Vertical navigation sidebar',\n}: NavVerticalProps) {\n const backButtonRef = useRef<HTMLButtonElement>(null);\n const homeButtonRef = useRef<HTMLButtonElement>(null);\n\n const { buttonProps: backButtonProps } = useButton(\n {\n onPress: onBackClick,\n 'aria-label': 'Go back',\n },\n backButtonRef\n );\n\n const { buttonProps: homeButtonProps } = useButton(\n {\n onPress: onHomeClick,\n 'aria-label': 'Home',\n },\n homeButtonRef\n );\n\n return (\n <Container className={className} role=\"navigation\" aria-label={ariaLabel}>\n <TopSection>\n {onBackClick ? (\n <BackButton {...backButtonProps} ref={backButtonRef}>\n <Icon name=\"arrow-left-fill\" size={20} color=\"white\" />\n </BackButton>\n ) : onHomeClick ? (\n <BackButton {...homeButtonProps} ref={homeButtonRef}>\n <Icon name=\"home-fill\" size={24} color=\"white\" />\n </BackButton>\n ) : null}\n </TopSection>\n\n <Separator />\n\n <FolderGroupsSlot>{folderGroupsSlot}</FolderGroupsSlot>\n </Container>\n );\n}\n\nNavVertical.displayName = 'NavVertical';\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n position: relative;\n width: 100%;\n height: 100vh;\n background-color: #36393f;\n overflow: hidden;\n\n /* Dark theme support */\n @media (prefers-color-scheme: dark) {\n background-color: #2f3136;\n }\n`;\n\nexport const MainPane = styled.main`\n position: absolute;\n top: 0;\n left: 72px; /* Width of vertical nav */\n right: 0;\n bottom: 52px; /* Height of horizontal nav */\n background-color: #36393f;\n overflow: auto;\n\n /* Custom scrollbar styling */\n &::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n }\n\n &::-webkit-scrollbar-track {\n background: transparent;\n }\n\n &::-webkit-scrollbar-thumb {\n background-color: #202225;\n border-radius: 4px;\n }\n\n &::-webkit-scrollbar-thumb:hover {\n background-color: #18191c;\n }\n\n /* Firefox scrollbar */\n scrollbar-width: thin;\n scrollbar-color: #202225 transparent;\n\n /* Dark theme support */\n @media (prefers-color-scheme: dark) {\n background-color: #2f3136;\n }\n\n /* Responsive adjustments */\n @media (max-width: 768px) {\n left: 60px; /* Smaller nav on mobile */\n }\n`;\n","import type { ReactNode } from 'react';\nimport { NavHorizontal } from '../NavHorizontal';\nimport { NavVertical } from '../NavVertical';\nimport { Container, MainPane } from './Layout.styles';\n\nexport interface LayoutProps {\n mainPaneSlot: ReactNode;\n navVerticalSlot?: ReactNode;\n navHorizontalUserSlot?: ReactNode;\n navHorizontalActionsSlot?: ReactNode;\n onNavBackClick?: () => void;\n className?: string;\n}\n\nexport function Layout({\n mainPaneSlot,\n navVerticalSlot,\n navHorizontalUserSlot,\n navHorizontalActionsSlot,\n onNavBackClick,\n className,\n}: LayoutProps) {\n return (\n <Container className={className}>\n <NavVertical folderGroupsSlot={navVerticalSlot} onBackClick={onNavBackClick} />\n <MainPane>{mainPaneSlot}</MainPane>\n <NavHorizontal\n userStatusSlot={navHorizontalUserSlot}\n actionsSlot={navHorizontalActionsSlot}\n />\n </Container>\n );\n}\n\nLayout.displayName = 'Layout';\n","import styled, { css } from 'styled-components';\n\nexport const Container = styled.div`\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 4px;\n`;\n\ninterface ActionButtonProps {\n $isActive?: boolean;\n $size?: number;\n $isPrimary?: boolean;\n}\n\nexport const ActionButton = styled.button<ActionButtonProps>`\n width: ${({ $size = 32 }) => $size}px;\n height: ${({ $size = 32 }) => $size}px;\n min-width: ${({ $size = 32 }) => $size}px;\n min-height: ${({ $size = 32 }) => $size}px;\n border-radius: ${({ $isPrimary }) => ($isPrimary ? '50%' : '4px')};\n border: none;\n background-color: ${({ $isPrimary }) => ($isPrimary ? '#5865F2' : 'transparent')};\n color: ${({ $isPrimary }) => ($isPrimary ? '#FFFFFF' : '#b9bbbe')};\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.15s ease;\n font-size: 16px;\n\n &:hover {\n background-color: ${({ $isPrimary }) => ($isPrimary ? '#4752C4' : 'rgba(255, 255, 255, 0.1)')};\n color: ${({ $isPrimary }) => ($isPrimary ? '#FFFFFF' : '#dcddde')};\n }\n\n &:active {\n transform: scale(0.95);\n }\n\n ${({ $isActive, $isPrimary }) =>\n $isActive &&\n !$isPrimary &&\n css`\n background-color: rgba(255, 255, 255, 0.08);\n color: #ffffff;\n `}\n\n ${({ $isActive, $isPrimary }) =>\n $isActive &&\n $isPrimary &&\n css`\n background-color: #4752C4;\n color: #ffffff;\n `}\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: 2px solid #5865f2;\n outline-offset: 2px;\n }\n`;\n","import { useButton } from '@react-aria/button';\nimport type { ReactNode } from 'react';\nimport { useRef } from 'react';\nimport { Icon } from '../Icon';\nimport { ActionButton, Container } from './ActionButtons.styles';\n\nexport interface ActionButtonsProps {\n onCalendarClick?: () => void;\n onSettingsClick?: () => void;\n onChatClick?: () => void;\n isCalendarActive?: boolean;\n isSettingsActive?: boolean;\n isChatActive?: boolean;\n className?: string;\n}\n\ninterface ButtonProps {\n icon: ReactNode;\n label: string;\n onClick?: () => void;\n isActive?: boolean;\n size?: number;\n isPrimary?: boolean;\n}\n\nfunction ActionButtonItem({ icon, label, onClick, isActive, size, isPrimary }: ButtonProps) {\n const ref = useRef<HTMLButtonElement>(null);\n const { buttonProps } = useButton(\n {\n onPress: onClick,\n 'aria-label': label,\n 'aria-pressed': isActive,\n },\n ref\n );\n\n return (\n <ActionButton\n {...buttonProps}\n ref={ref}\n $isActive={isActive}\n $size={size}\n $isPrimary={isPrimary}\n >\n {icon}\n </ActionButton>\n );\n}\n\nexport function ActionButtons({\n onCalendarClick,\n onSettingsClick,\n onChatClick: _onChatClick,\n isCalendarActive = false,\n isSettingsActive = false,\n isChatActive: _isChatActive = false,\n className,\n}: ActionButtonsProps) {\n return (\n <Container className={className}>\n <ActionButtonItem\n icon={<Icon name=\"calendar-fill\" size={16} color=\"#b9bbbe\" />}\n label=\"Calendar\"\n onClick={onCalendarClick}\n isActive={isCalendarActive}\n size={32}\n />\n <ActionButtonItem\n icon={<Icon name=\"settings-3-fill\" size={16} color=\"#b9bbbe\" />}\n label=\"Settings\"\n onClick={onSettingsClick}\n isActive={isSettingsActive}\n size={32}\n />\n {/* Empty space to maintain layout - actual chat button is handled by CopilotKit */}\n <div style={{ width: '36px', height: '36px', visibility: 'hidden' }} aria-hidden=\"true\" />\n </Container>\n );\n}\n\nActionButtons.displayName = 'ActionButtons';\n","import styled from 'styled-components';\n\nconst statusColors = {\n online: '#43B581',\n idle: '#FAA61A',\n busy: '#F04747',\n offline: '#747F8D',\n};\n\ninterface StatusIndicatorProps {\n $status: 'online' | 'idle' | 'busy' | 'offline';\n}\n\ninterface ContainerProps {\n $isDisabled?: boolean;\n}\n\nexport const Container = styled.button<ContainerProps>`\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 4px 6px;\n border-radius: 4px;\n border: none;\n background: transparent;\n color: inherit;\n font: inherit;\n transition: background-color 0.2s ease, opacity 0.2s ease;\n cursor: ${(props) => (props.$isDisabled ? 'not-allowed' : 'pointer')};\n opacity: ${(props) => (props.$isDisabled ? 0.5 : 1)};\n text-align: left;\n width: 100%;\n\n &:hover:not(:disabled) {\n background-color: rgba(255, 255, 255, 0.05);\n }\n\n &:focus-visible {\n outline: 2px solid #5865F2;\n outline-offset: 2px;\n }\n\n &:active:not(:disabled) {\n background-color: rgba(255, 255, 255, 0.08);\n }\n`;\n\nexport const IconWrapper = styled.div`\n position: relative;\n width: 32px;\n height: 32px;\n border-radius: 8px;\n background-color: #36393f;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n overflow: hidden;\n`;\n\nexport const WorkflowInfo = styled.div`\n display: flex;\n flex-direction: column;\n min-width: 0;\n`;\n\nexport const WorkflowName = styled.span`\n color: #ffffff;\n font-size: 13px;\n font-weight: 600;\n line-height: 1.2;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nexport const WorkflowStatus = styled.div`\n display: flex;\n align-items: center;\n gap: 4px;\n color: #b9bbbe;\n font-size: 11px;\n line-height: 1.2;\n`;\n\nexport const StatusIndicatorOuter = styled.span<StatusIndicatorProps>`\n position: absolute;\n bottom: -2px;\n right: -2px;\n width: 10px;\n height: 10px;\n border-radius: 50%;\n background-color: #232428;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n`;\n\nexport const StatusIndicatorInner = styled.span<StatusIndicatorProps>`\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background-color: ${({ $status }) => statusColors[$status]};\n flex-shrink: 0;\n`;\n","import { useButton } from '@react-aria/button';\nimport type { AriaButtonProps } from '@react-types/button';\nimport type { ReactNode } from 'react';\nimport { useRef } from 'react';\nimport {\n Container,\n IconWrapper,\n StatusIndicatorInner,\n StatusIndicatorOuter,\n WorkflowInfo,\n WorkflowName,\n WorkflowStatus,\n} from './WorkflowStatusCard.styles';\n\nexport interface WorkflowStatusCardProps extends Omit<AriaButtonProps, 'children'> {\n icon: ReactNode;\n workflowName: string;\n status?: 'online' | 'idle' | 'busy' | 'offline';\n statusText?: string;\n className?: string;\n onClick?: () => void;\n}\n\nexport function WorkflowStatusCard({\n icon,\n workflowName,\n status = 'offline',\n statusText,\n className,\n onClick,\n onPress,\n isDisabled,\n ...ariaProps\n}: WorkflowStatusCardProps) {\n const displayStatus = statusText || status;\n const ref = useRef<HTMLButtonElement>(null);\n\n // Combine onClick with onPress for React Aria compatibility\n const handlePress = () => {\n if (onClick) onClick();\n if (onPress) onPress({} as never);\n };\n\n const { buttonProps } = useButton(\n {\n ...ariaProps,\n onPress: handlePress,\n isDisabled,\n 'aria-label': ariaProps['aria-label'] || `${workflowName} workflow, status: ${displayStatus}`,\n },\n ref\n );\n\n return (\n <Container {...buttonProps} ref={ref} className={className} $isDisabled={isDisabled}>\n <IconWrapper>\n {icon}\n <StatusIndicatorOuter $status={status}>\n <StatusIndicatorInner $status={status} />\n </StatusIndicatorOuter>\n </IconWrapper>\n <WorkflowInfo>\n <WorkflowName>{workflowName}</WorkflowName>\n <WorkflowStatus>{displayStatus}</WorkflowStatus>\n </WorkflowInfo>\n </Container>\n );\n}\n\nWorkflowStatusCard.displayName = 'WorkflowStatusCard';\n","import styled from 'styled-components';\n\n// Dark theme colors matching MainPaneMenu\nconst _BG_PRIMARY = '#2F3136';\nconst _BG_SECONDARY = '#202225';\nconst BG_TERTIARY = '#36393F';\nconst TEXT_PRIMARY = '#FFFFFF';\nconst TEXT_SECONDARY = '#B9BBBE';\nconst TEXT_MUTED = '#72767D';\nconst ACCENT_COLOR = '#5865F2';\nconst HOVER_BG = 'rgba(255, 255, 255, 0.05)';\n\n/**\n * Main container for the notification card with dark theme\n */\nexport const DarkNotificationCardContainer = styled.div`\n display: flex;\n flex-direction: column;\n padding: 6px;\n background: ${BG_TERTIARY};\n border-radius: 8px;\n gap: 4px;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n`;\n\n/**\n * Section header button (collapsible) - dark theme\n */\nexport const DarkSectionHeader = styled.button`\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n padding: 4px 2px;\n border: none;\n background: transparent;\n font-family: ${(props) => props.theme?.fonts?.body || 'system-ui, sans-serif'};\n font-size: 11px;\n font-weight: 600;\n color: ${TEXT_SECONDARY};\n text-align: left;\n cursor: pointer;\n transition: all 0.2s ease;\n\n &:hover {\n color: ${TEXT_PRIMARY};\n }\n\n &:focus-visible {\n outline: 2px solid ${ACCENT_COLOR};\n outline-offset: 2px;\n border-radius: 4px;\n }\n`;\n\n/**\n * Chevron icon for section header with rotation animation - dark theme\n */\ninterface ChevronIconProps {\n $isExpanded: boolean;\n}\n\nexport const DarkChevronIcon = styled.span<ChevronIconProps>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n transition: transform 0.2s ease;\n color: ${TEXT_MUTED};\n\n ${(props) =>\n props.$isExpanded\n ? `\n transform: rotate(0deg);\n `\n : `\n transform: rotate(-90deg);\n `}\n\n svg {\n width: 12px;\n height: 12px;\n }\n`;\n\n/**\n * Container for section content (list of notification items) - dark theme\n */\nexport const DarkSectionContent = styled.div`\n display: flex;\n flex-direction: column;\n gap: 2px;\n padding-left: 4px;\n margin-top: 2px;\n min-width: 0;\n overflow: hidden;\n`;\n\n/**\n * Individual notification item wrapper (button) - dark theme\n */\ninterface NotificationItemWrapperProps {\n $isSelected: boolean;\n $hasIcon: boolean;\n}\n\nexport const DarkNotificationItemWrapper = styled.button<NotificationItemWrapperProps>`\n display: flex;\n align-items: center;\n gap: 6px;\n width: 100%;\n padding: 4px 6px;\n border: none;\n cursor: pointer;\n text-align: left;\n transition: all 0.2s ease;\n border-radius: 4px;\n min-width: 0;\n overflow: hidden;\n\n /* Default state - transparent background */\n background-color: ${(props) => (props.$isSelected ? ACCENT_COLOR : 'transparent')};\n\n /* Hover state */\n &:hover:not(:disabled) {\n background-color: ${(props) => (props.$isSelected ? '#4752C4' : HOVER_BG)};\n }\n\n /* Active state */\n &:active:not(:disabled) {\n transform: scale(0.99);\n }\n\n /* Focus state */\n &:focus-visible {\n outline: 2px solid ${ACCENT_COLOR};\n outline-offset: 2px;\n }\n\n /* Disabled state */\n &:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n`;\n\n/**\n * Icon container for notification items - dark theme\n */\ninterface ItemIconProps {\n $iconColor?: string;\n $hasCustomIcon: boolean;\n}\n\nexport const DarkItemIcon = styled.span<ItemIconProps>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n flex-shrink: 0;\n border-radius: ${(props) => (props.$hasCustomIcon ? '4px' : '50%')};\n background-color: ${(props) => props.$iconColor || 'transparent'};\n color: ${(props) => (props.$hasCustomIcon ? TEXT_PRIMARY : TEXT_MUTED)};\n font-size: 12px;\n\n /* Default circle icon styling */\n ${(props) =>\n !props.$hasCustomIcon &&\n `\n svg {\n width: 14px;\n height: 14px;\n }\n `}\n\n /* Custom icon (emoji or colored icon) styling */\n ${(props) =>\n props.$hasCustomIcon &&\n `\n padding: 2px;\n `}\n`;\n\n/**\n * Text content for notification items - dark theme\n */\ninterface ItemTextProps {\n $isSelected: boolean;\n}\n\nexport const DarkItemText = styled.span<ItemTextProps>`\n flex: 1;\n font-family: ${(props) => props.theme?.fonts?.body || 'system-ui, sans-serif'};\n font-size: 11px;\n font-weight: ${(props) => (props.$isSelected ? '500' : '400')};\n color: ${(props) => (props.$isSelected ? TEXT_PRIMARY : TEXT_SECONDARY)};\n line-height: 1.3;\n word-wrap: break-word;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n`;\n\n/**\n * Three-dot menu button (shown on selected items) - dark theme\n */\nexport const DarkMenuButton = styled.button`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n padding: 0;\n border: none;\n border-radius: 4px;\n background-color: transparent;\n color: ${TEXT_PRIMARY};\n cursor: pointer;\n transition: all 0.2s ease;\n flex-shrink: 0;\n\n &:hover:not(:disabled) {\n background-color: rgba(255, 255, 255, 0.1);\n }\n\n &:active:not(:disabled) {\n background-color: rgba(255, 255, 255, 0.15);\n transform: scale(0.95);\n }\n\n &:focus-visible {\n outline: 2px solid ${ACCENT_COLOR};\n outline-offset: 2px;\n }\n\n svg {\n width: 14px;\n height: 14px;\n }\n`;\n\n/**\n * Timestamp text for action logs\n */\nexport const DarkTimestamp = styled.span`\n font-size: 10px;\n color: ${TEXT_MUTED};\n white-space: normal;\n word-wrap: break-word;\n text-align: right;\n max-width: 60px;\n`;\n","import { useButton } from '@react-aria/button';\nimport React, { type KeyboardEvent, useRef, useState } from 'react';\nimport type {\n NotificationCardProps,\n NotificationItem,\n NotificationSection,\n} from './NotificationCard';\nimport {\n DarkChevronIcon,\n DarkItemIcon,\n DarkItemText,\n DarkMenuButton,\n DarkNotificationCardContainer,\n DarkNotificationItemWrapper,\n DarkSectionContent,\n DarkSectionHeader,\n DarkTimestamp,\n} from './NotificationCard.dark.styles';\n\n/**\n * Dark-themed NotificationCard component for MainPaneMenu\n *\n * A dark variant of the NotificationCard component specifically designed\n * for use within the MainPaneMenu component. Features the same functionality\n * but with colors matching the dark theme.\n */\nexport const DarkNotificationCard: React.FC<NotificationCardProps> = ({\n sections,\n onItemClick,\n selectedItemId,\n onMenuClick,\n className,\n 'aria-label': ariaLabel = 'Action log history',\n}) => {\n // Track collapsed state for each section\n const [collapsedSections, setCollapsedSections] = useState<Record<string, boolean>>(() => {\n const initial: Record<string, boolean> = {};\n for (const section of sections) {\n initial[section.title] = section.isCollapsed || false;\n }\n return initial;\n });\n\n const toggleSection = (sectionTitle: string) => {\n setCollapsedSections((prev) => ({\n ...prev,\n [sectionTitle]: !prev[sectionTitle],\n }));\n };\n\n return (\n <DarkNotificationCardContainer className={className} aria-label={ariaLabel} role=\"region\">\n {sections.map((section) => (\n <DarkSectionComponent\n key={section.title}\n section={section}\n isCollapsed={collapsedSections[section.title] ?? false}\n onToggle={() => toggleSection(section.title)}\n onItemClick={onItemClick}\n selectedItemId={selectedItemId}\n onMenuClick={onMenuClick}\n />\n ))}\n </DarkNotificationCardContainer>\n );\n};\n\n/**\n * Individual section component with collapsible header - dark theme\n */\ninterface DarkSectionComponentProps {\n section: NotificationSection;\n isCollapsed: boolean;\n onToggle: () => void;\n onItemClick?: (item: NotificationItem) => void;\n selectedItemId?: string;\n onMenuClick?: (item: NotificationItem) => void;\n}\n\nconst DarkSectionComponent: React.FC<DarkSectionComponentProps> = ({\n section,\n isCollapsed,\n onToggle,\n onItemClick,\n selectedItemId,\n onMenuClick,\n}) => {\n const headerRef = useRef<HTMLButtonElement>(null);\n const { buttonProps } = useButton(\n {\n onPress: onToggle,\n 'aria-label': `${section.title} section, ${isCollapsed ? 'collapsed' : 'expanded'}`,\n 'aria-expanded': !isCollapsed,\n },\n headerRef\n );\n\n return (\n <section aria-label={`${section.title} actions`}>\n <DarkSectionHeader {...buttonProps} ref={headerRef}>\n {section.title}\n <DarkChevronIcon $isExpanded={!isCollapsed} aria-hidden=\"true\">\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n role=\"img\"\n aria-label=\"Expand/collapse icon\"\n >\n <title>Expand/collapse icon</title>\n <path\n d=\"M4 5L7 8L10 5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </DarkChevronIcon>\n </DarkSectionHeader>\n\n {!isCollapsed && (\n <DarkSectionContent role=\"list\">\n {section.items.map((item) => (\n <DarkNotificationItemComponent\n key={item.id}\n item={item}\n isSelected={item.id === selectedItemId}\n onItemClick={onItemClick}\n onMenuClick={onMenuClick}\n />\n ))}\n </DarkSectionContent>\n )}\n </section>\n );\n};\n\n/**\n * Individual notification item component - dark theme\n */\ninterface DarkNotificationItemComponentProps {\n item: NotificationItem & { timestamp?: string };\n isSelected: boolean;\n onItemClick?: (item: NotificationItem) => void;\n onMenuClick?: (item: NotificationItem) => void;\n}\n\nconst DarkNotificationItemComponent: React.FC<DarkNotificationItemComponentProps> = ({\n item,\n isSelected,\n onItemClick,\n onMenuClick,\n}) => {\n const itemRef = useRef<HTMLButtonElement>(null);\n const menuRef = useRef<HTMLButtonElement>(null);\n\n const { buttonProps: itemButtonProps } = useButton(\n {\n onPress: () => onItemClick?.(item),\n 'aria-label': `Action: ${item.text}`,\n 'aria-current': isSelected ? 'true' : undefined,\n },\n itemRef\n );\n\n const { buttonProps: menuButtonProps } = useButton(\n {\n onPress: () => onMenuClick?.(item),\n 'aria-label': `Options for ${item.text}`,\n },\n menuRef\n );\n\n // Handle keyboard navigation between item and menu button\n const handleItemKeyDown = (e: KeyboardEvent<HTMLButtonElement>) => {\n if (isSelected && e.key === 'Tab' && !e.shiftKey) {\n // Allow natural tab to menu button\n return;\n }\n };\n\n return (\n <DarkNotificationItemWrapper\n {...itemButtonProps}\n ref={itemRef}\n $isSelected={isSelected}\n $hasIcon={!!item.icon}\n role=\"listitem\"\n onKeyDown={handleItemKeyDown}\n >\n <DarkItemIcon $iconColor={item.iconColor} $hasCustomIcon={!!item.icon}>\n {item.icon || (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <circle cx=\"8\" cy=\"8\" r=\"6\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n </svg>\n )}\n </DarkItemIcon>\n <DarkItemText $isSelected={isSelected}>{item.text}</DarkItemText>\n {item.timestamp && <DarkTimestamp>{item.timestamp}</DarkTimestamp>}\n {isSelected && onMenuClick && (\n <DarkMenuButton\n {...menuButtonProps}\n ref={menuRef}\n onClick={(e) => {\n e.stopPropagation();\n menuButtonProps.onClick?.(e);\n }}\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <title>More options</title>\n <circle cx=\"8\" cy=\"3\" r=\"1\" fill=\"currentColor\" />\n <circle cx=\"8\" cy=\"8\" r=\"1\" fill=\"currentColor\" />\n <circle cx=\"8\" cy=\"13\" r=\"1\" fill=\"currentColor\" />\n </svg>\n </DarkMenuButton>\n )}\n </DarkNotificationItemWrapper>\n );\n};\n\nDarkNotificationCard.displayName = 'DarkNotificationCard';\n","import { Button, Disclosure, DisclosureGroup, DisclosurePanel } from 'react-aria-components';\nimport styled from 'styled-components';\n\n// Main color constants matching the dark theme\nconst BG_PRIMARY = '#2F3136';\nconst BG_SECONDARY = '#202225';\nconst BG_TERTIARY = '#36393F';\nconst TEXT_PRIMARY = '#FFFFFF';\nconst TEXT_SECONDARY = '#B9BBBE';\nconst TEXT_MUTED = '#72767D';\nconst ACCENT_COLOR = '#5865F2';\nconst HOVER_BG = 'rgba(255, 255, 255, 0.05)';\n\nexport const Container = styled.div`\n width: 100%;\n height: 100%;\n background-color: ${BG_PRIMARY};\n color: ${TEXT_PRIMARY};\n display: flex;\n flex-direction: column;\n font-family: ${(props) => props.theme?.fonts?.body || 'system-ui, sans-serif'};\n overflow: hidden; // Prevent content from escaping container bounds\n`;\n\nexport const TabListWrapper = styled.div`\n display: flex;\n border-bottom: 2px solid ${BG_TERTIARY};\n background-color: ${BG_SECONDARY};\n padding: 0 16px;\n gap: 8px;\n overflow-x: auto;\n scrollbar-width: none;\n -ms-overflow-style: none;\n flex-shrink: 0; // Prevent shrinking when content overflows\n\n &::-webkit-scrollbar {\n display: none;\n }\n\n @media (max-width: 640px) {\n padding: 0 8px;\n gap: 4px;\n }\n`;\n\nexport const TabButton = styled.button<{ $isSelected?: boolean }>`\n padding: 12px 20px;\n background: none;\n border: none;\n color: ${(props) => (props.$isSelected ? TEXT_PRIMARY : TEXT_SECONDARY)};\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n position: relative;\n transition: color 0.2s ease;\n white-space: nowrap;\n flex-shrink: 0;\n\n @media (max-width: 640px) {\n padding: 10px 12px;\n font-size: 12px;\n }\n\n &:hover {\n color: ${TEXT_PRIMARY};\n }\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: 2px solid ${ACCENT_COLOR};\n outline-offset: -2px;\n border-radius: 4px;\n }\n\n ${(props) =>\n props.$isSelected &&\n `\n &::after {\n content: '';\n position: absolute;\n bottom: -2px;\n left: 0;\n right: 0;\n height: 2px;\n background-color: ${ACCENT_COLOR};\n }\n `}\n`;\n\nexport const TabPanelWrapper = styled.div`\n flex: 1;\n padding: 24px;\n overflow-y: auto;\n overflow-x: hidden; // Prevent horizontal overflow\n background-color: ${BG_PRIMARY};\n min-height: 0; // Enable proper flex shrinking and scrolling\n\n @media (max-width: 640px) {\n padding: 16px;\n }\n\n @media (max-width: 480px) {\n padding: 12px;\n }\n\n /* Custom scrollbar */\n scrollbar-width: thin;\n scrollbar-color: ${BG_TERTIARY} ${BG_PRIMARY};\n\n &::-webkit-scrollbar {\n width: 8px;\n }\n\n &::-webkit-scrollbar-track {\n background: ${BG_PRIMARY};\n }\n\n &::-webkit-scrollbar-thumb {\n background: ${BG_TERTIARY};\n border-radius: 4px;\n }\n\n &::-webkit-scrollbar-thumb:hover {\n background: #4a4d52;\n }\n`;\n\n// Runs tab container\nexport const RunsContainer = styled.div`\n display: flex;\n flex-direction: column;\n gap: 20px;\n width: 100%;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n\n @media (max-width: 640px) {\n gap: 16px;\n }\n`;\n\n// Browse Automations button\nexport const BrowseButton = styled.button`\n display: flex;\n align-items: center;\n gap: 12px;\n width: 100%;\n padding: 12px 16px;\n background-color: ${BG_SECONDARY};\n border: 1px solid ${BG_TERTIARY};\n border-radius: 8px;\n color: ${TEXT_SECONDARY};\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n white-space: nowrap;\n overflow: hidden;\n\n @media (max-width: 640px) {\n padding: 10px 12px;\n font-size: 13px;\n gap: 8px;\n }\n\n &:hover {\n background-color: ${HOVER_BG};\n color: ${TEXT_PRIMARY};\n }\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: 2px solid ${ACCENT_COLOR};\n outline-offset: 2px;\n }\n`;\n\n// DisclosureGroup styles\nexport const StyledDisclosureGroup = styled(DisclosureGroup)`\n display: flex;\n flex-direction: column;\n gap: 8px;\n width: 100%;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n`;\n\n// Category Disclosure (Information, Community)\nexport const CategoryDisclosure = styled(Disclosure)`\n background-color: transparent;\n display: flex;\n flex-direction: column;\n width: 100%;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n\n &[data-expanded] {\n /* Styles when expanded */\n }\n\n &[data-disabled] {\n opacity: 0.5;\n cursor: not-allowed;\n }\n`;\n\n// Category Header (trigger button)\nexport const CategoryHeader = styled(Button)`\n width: 100%;\n padding: 4px 0;\n background: none;\n border: none;\n color: ${TEXT_SECONDARY};\n display: flex;\n justify-content: space-between;\n align-items: center;\n cursor: pointer;\n transition: color 0.2s ease;\n font-size: 12px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n\n &:hover {\n color: ${TEXT_PRIMARY};\n }\n\n &:focus {\n outline: none;\n }\n\n &[data-focus-visible] {\n outline: 2px solid ${ACCENT_COLOR};\n outline-offset: 2px;\n border-radius: 4px;\n }\n`;\n\n// Category Title with icon\nexport const CategoryTitle = styled.div`\n display: flex;\n align-items: center;\n gap: 8px;\n\n @media (max-width: 640px) {\n gap: 6px;\n }\n`;\n\n// Category Icon\nexport const CategoryIcon = styled.img`\n width: 16px;\n height: 16px;\n opacity: 0.6;\n flex-shrink: 0;\n\n @media (max-width: 640px) {\n width: 14px;\n height: 14px;\n }\n`;\n\n// Hashtag Icon\nexport const HashtagIcon = styled.img`\n width: 14px;\n height: 14px;\n opacity: 0.6;\n flex-shrink: 0;\n\n @media (max-width: 640px) {\n width: 12px;\n height: 12px;\n }\n`;\n\n// Chevron icon\nexport const ChevronIcon = styled.div<{ $isExpanded: boolean }>`\n display: flex;\n align-items: center;\n transition: transform 0.2s ease;\n transform: ${(props) => (props.$isExpanded ? 'rotate(0deg)' : 'rotate(-90deg)')};\n flex-shrink: 0;\n margin-left: 4px;\n\n img {\n width: 16px;\n height: 16px;\n opacity: 0.6;\n }\n\n @media (max-width: 640px) {\n img {\n width: 14px;\n height: 14px;\n }\n }\n`;\n\n// Category content panel\nexport const CategoryDisclosurePanel = styled(DisclosurePanel)`\n display: flex;\n flex-direction: column;\n gap: 2px;\n padding-left: 4px;\n width: 100%;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n\n @media (max-width: 640px) {\n padding-left: 2px;\n }\n\n &[data-entering] {\n animation: slideDown 0.2s ease;\n }\n\n @keyframes slideDown {\n from {\n opacity: 0;\n transform: translateY(-8px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n`;\n\n// Item container (announcements, server-rules, etc.)\nexport const ItemContainer = styled.div`\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 4px 8px;\n border-radius: 4px;\n cursor: pointer;\n transition: background-color 0.1s ease;\n min-width: 0;\n overflow: hidden;\n\n @media (max-width: 640px) {\n gap: 6px;\n padding: 4px 6px;\n }\n\n &:hover {\n background-color: ${HOVER_BG};\n }\n`;\n\n// Nested item disclosure (for individual items)\nexport const ItemDisclosure = styled(Disclosure)`\n background-color: transparent;\n margin-bottom: 4px;\n display: flex;\n flex-direction: column;\n width: 100%;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n\n &[data-expanded] {\n background-color: ${BG_SECONDARY};\n border-radius: 8px;\n }\n`;\n\n// Item header for nested disclosure\nexport const ItemHeader = styled(Button)<{ $isExpanded: boolean }>`\n width: 100%;\n padding: 0;\n background: none;\n border: none;\n cursor: pointer;\n transition: all 0.1s ease;\n\n &:focus {\n outline: none;\n }\n\n &[data-focus-visible] {\n outline: 2px solid ${ACCENT_COLOR};\n outline-offset: 2px;\n border-radius: 4px;\n }\n`;\n\n// Item disclosure panel for logs\nexport const ItemDisclosurePanel = styled(DisclosurePanel)`\n padding: 6px;\n background-color: ${BG_SECONDARY};\n border-radius: 0 0 8px 8px;\n margin-top: -4px;\n display: flex;\n flex-direction: column;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n\n @media (max-width: 640px) {\n padding: 6px;\n }\n\n &[data-entering] {\n animation: slideDown 0.2s ease;\n }\n\n @keyframes slideDown {\n from {\n opacity: 0;\n transform: translateY(-8px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n`;\n\n// Item icon\nexport const ItemIcon = styled.img`\n width: 20px;\n height: 20px;\n opacity: 0.6;\n flex-shrink: 0;\n\n @media (max-width: 640px) {\n width: 18px;\n height: 18px;\n }\n`;\n\n// Item name\nexport const ItemName = styled.span<{ $dimmed?: boolean }>`\n flex: 1;\n font-size: 14px;\n color: ${(props) => (props.$dimmed ? TEXT_MUTED : TEXT_SECONDARY)};\n font-weight: ${(props) => (props.$dimmed ? 'normal' : '500')};\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n min-width: 0;\n\n @media (max-width: 640px) {\n font-size: 13px;\n }\n\n ${ItemContainer}:hover & {\n color: ${(props) => (props.$dimmed ? TEXT_SECONDARY : TEXT_PRIMARY)};\n }\n`;\n\n// Run status indicator\nexport const RunStatus = styled.span<{ $status: 'completed' | 'running' | 'failed' }>`\n font-size: 14px;\n font-weight: 500;\n flex-shrink: 0;\n margin-left: auto;\n color: ${(props) => {\n switch (props.$status) {\n case 'completed':\n return '#10b981'; // green\n case 'running':\n return '#f59e0b'; // yellow\n case 'failed':\n return '#ef4444'; // red\n default:\n return TEXT_SECONDARY;\n }\n }};\n\n @media (max-width: 640px) {\n font-size: 12px;\n }\n`;\n\n// Old Disclosure styles (kept for backward compatibility)\nexport const DisclosureContainer = styled.div`\n margin-bottom: 12px;\n border-radius: 12px;\n background-color: ${BG_SECONDARY};\n overflow: hidden;\n`;\n\nexport const DisclosureHeader = styled.button`\n width: 100%;\n padding: 16px;\n background: ${BG_SECONDARY};\n border: none;\n color: ${TEXT_PRIMARY};\n display: flex;\n justify-content: space-between;\n align-items: center;\n cursor: pointer;\n transition: background-color 0.2s ease;\n text-align: left;\n\n &:hover {\n background-color: ${HOVER_BG};\n }\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: 2px solid ${ACCENT_COLOR};\n outline-offset: -2px;\n }\n\n > div {\n flex: 1;\n }\n\n strong {\n display: block;\n font-size: 14px;\n margin-bottom: 4px;\n }\n`;\n\nexport const DisclosureIcon = styled.span<{ $isExpanded: boolean }>`\n font-size: 12px;\n color: ${TEXT_SECONDARY};\n transition: transform 0.2s ease;\n transform: ${(props) => (props.$isExpanded ? 'rotate(180deg)' : 'rotate(0deg)')};\n`;\n\nexport const DisclosureContent = styled.div`\n padding: 16px;\n padding-top: 0;\n background-color: ${BG_TERTIARY};\n color: ${TEXT_SECONDARY};\n font-size: 13px;\n line-height: 1.6;\n animation: slideDown 0.2s ease;\n\n @keyframes slideDown {\n from {\n opacity: 0;\n transform: translateY(-8px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n`;\n\n// Meter (Usage tab) styles\nexport const MeterContainer = styled.div`\n max-width: 600px;\n margin: 0 auto;\n`;\n\nexport const MeterLabel = styled.div`\n font-size: 16px;\n font-weight: 600;\n margin-bottom: 16px;\n color: ${TEXT_PRIMARY};\n`;\n\nexport const MeterBar = styled.div`\n width: 100%;\n height: 24px;\n background-color: ${BG_SECONDARY};\n border-radius: 12px;\n overflow: hidden;\n position: relative;\n margin-bottom: 12px;\n`;\n\nexport const MeterFill = styled.div<{ $percentage: number; $color: string }>`\n height: 100%;\n width: ${(props) => props.$percentage}%;\n background: linear-gradient(90deg, ${(props) => props.$color}dd, ${(props) => props.$color});\n border-radius: 12px;\n transition: width 0.3s ease, background 0.3s ease;\n position: relative;\n\n &::after {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);\n animation: shimmer 2s infinite;\n }\n\n @keyframes shimmer {\n 0% {\n transform: translateX(-100%);\n }\n 100% {\n transform: translateX(100%);\n }\n }\n`;\n\nexport const MeterStats = styled.div`\n font-size: 14px;\n color: ${TEXT_SECONDARY};\n text-align: center;\n\n small {\n font-size: 12px;\n color: ${TEXT_SECONDARY};\n opacity: 0.8;\n }\n`;\n\n// Connections tab styles\nexport const ConnectionsContainer = styled.div`\n max-width: 500px;\n margin: 0 auto;\n text-align: center;\n`;\n\nexport const ConnectionDescription = styled.p`\n font-size: 14px;\n color: ${TEXT_SECONDARY};\n line-height: 1.6;\n margin-bottom: 24px;\n`;\n\nexport const GoogleButton = styled.button<{ $isConnected?: boolean }>`\n width: 100%;\n padding: 16px 24px;\n font-size: 15px;\n font-weight: 600;\n color: ${(props) => (props.$isConnected ? TEXT_PRIMARY : '#FFFFFF')};\n background: ${(props) => (props.$isConnected ? BG_TERTIARY : 'linear-gradient(135deg, #4285F4, #34A853)')};\n border: none;\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n\n &:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 12px rgba(66, 133, 244, 0.3);\n }\n\n &:active {\n transform: translateY(0);\n }\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: 2px solid ${ACCENT_COLOR};\n outline-offset: 2px;\n }\n\n ${(props) =>\n props.$isConnected &&\n `\n &:hover {\n background-color: #ef4444;\n box-shadow: 0 4px 12px rgba(239, 68, 68, 0.3);\n }\n `}\n`;\n","import { useButton } from '@react-aria/button';\nimport { useMeter } from '@react-aria/meter';\nimport { useTab, useTabList, useTabPanel } from '@react-aria/tabs';\nimport { Item } from '@react-stately/collections';\nimport { useTabListState } from '@react-stately/tabs';\nimport { useRef, useState } from 'react';\nimport type { Key } from 'react-aria-components';\nimport { Heading } from 'react-aria-components';\nimport { DarkNotificationCard } from '../../NotificationCard/DarkNotificationCard';\nimport type { NotificationSection } from '../../NotificationCard/NotificationCard';\nimport {\n BrowseButton,\n CategoryDisclosure,\n CategoryDisclosurePanel,\n CategoryHeader,\n CategoryTitle,\n ChevronIcon,\n ConnectionDescription,\n ConnectionsContainer,\n Container,\n GoogleButton,\n HashtagIcon,\n ItemContainer,\n ItemDisclosure,\n ItemDisclosurePanel,\n ItemHeader,\n ItemIcon,\n ItemName,\n MeterBar,\n MeterContainer,\n MeterFill,\n MeterLabel,\n MeterStats,\n RunStatus,\n RunsContainer,\n StyledDisclosureGroup,\n TabButton,\n TabListWrapper,\n TabPanelWrapper,\n} from './PaneMenus.styles';\n\n// Icons from assets/icon-set\nconst ICONS = {\n hashtag: '/assets/icon-set/Icon-hashtag.svg',\n bell: '/assets/icon-set/Icon-bell-fill.svg',\n file: '/assets/icon-set/Icon-file-3-fill.svg',\n link: '/assets/icon-set/Icon-external-link-fill.svg',\n chat: '/assets/icon-set/Icon-chat-1-fill.svg',\n community: '/assets/icon-set/Icon-community-fill.svg',\n cpu: '/assets/icon-set/Icon-cpu-fill.svg',\n chevronDown: '/assets/icon-set/Icon-arrow-down-s-fill.svg',\n warning: '/assets/icon-set/Icon-error-warning-fill.svg',\n};\n\nexport interface ActionLog {\n id: string;\n text: string;\n timestamp: string;\n icon?: React.ReactNode;\n iconColor?: string;\n}\n\nexport interface RunItem {\n id: string;\n name: string;\n status: 'completed' | 'running' | 'failed';\n details: string;\n category: 'scheduled' | 'completed' | 'issues';\n icon?: 'bell' | 'file' | 'link' | 'chat' | 'warning';\n logs?: ActionLog[];\n}\n\nexport interface PaneMenusProps {\n activeTab?: 'runs' | 'usage' | 'connections';\n onTabChange?: (tab: 'runs' | 'usage' | 'connections') => void;\n\n // Runs tab props\n runs?: RunItem[];\n\n // Usage tab props\n currentUsage?: number;\n maxUsage?: number;\n\n // Connections tab props\n isGoogleConnected?: boolean;\n onGoogleConnect?: () => void;\n onGoogleDisconnect?: () => void;\n\n // Browse action\n onBrowseAutomations?: () => void;\n}\n\n// Individual item with nested disclosure for logs\nfunction ItemWithLogs({ run }: { run: RunItem }) {\n const [isExpanded, setIsExpanded] = useState(false);\n\n // Format logs into NotificationSection format\n const logSections: NotificationSection[] = run.logs\n ? [\n {\n title: 'Action History',\n items: run.logs.map((log) => ({\n id: log.id,\n text: log.text,\n icon: log.icon,\n iconColor: log.iconColor,\n timestamp: log.timestamp,\n })),\n },\n ]\n : [];\n\n return (\n <ItemDisclosure id={run.id}>\n <ItemHeader\n slot=\"trigger\"\n onClick={() => setIsExpanded(!isExpanded)}\n $isExpanded={isExpanded}\n >\n <ItemContainer as=\"div\">\n <ItemIcon src={ICONS[run.icon || 'bell']} alt=\"\" />\n <ItemName>{run.name}</ItemName>\n <RunStatus $status={run.status}>\n {run.status === 'completed' && '✓'}\n {run.status === 'running' && '⟳'}\n {run.status === 'failed' && '✕'}\n </RunStatus>\n <ChevronIcon $isExpanded={isExpanded}>\n <img src={ICONS.chevronDown} alt=\"\" />\n </ChevronIcon>\n </ItemContainer>\n </ItemHeader>\n {isExpanded && (\n <ItemDisclosurePanel>\n {run.logs && run.logs.length > 0 ? (\n <DarkNotificationCard sections={logSections} />\n ) : (\n <div style={{ color: '#72767D', fontSize: '13px', padding: '8px' }}>\n No action logs available\n </div>\n )}\n </ItemDisclosurePanel>\n )}\n </ItemDisclosure>\n );\n}\n\n// Runs tab content with DisclosureGroup\nfunction RunsTabContent({\n runs,\n onBrowseAutomations,\n}: {\n runs: RunItem[];\n onBrowseAutomations?: () => void;\n}) {\n const [expandedKeys, setExpandedKeys] = useState<Set<Key>>(\n new Set(['scheduled', 'completed', 'issues']) // All sections open by default\n );\n\n // Group runs by category\n const scheduledRuns = runs.filter((r) => r.category === 'scheduled');\n const completedRuns = runs.filter((r) => r.category === 'completed');\n const issuesRuns = runs.filter((r) => r.category === 'issues');\n\n const buttonRef = useRef<HTMLButtonElement>(null);\n const { buttonProps } = useButton(\n {\n onPress: onBrowseAutomations,\n },\n buttonRef\n );\n\n return (\n <RunsContainer>\n <BrowseButton {...buttonProps} ref={buttonRef}>\n <ItemIcon src={ICONS.cpu} alt=\"\" />\n <span>Browse Automations</span>\n </BrowseButton>\n\n <StyledDisclosureGroup\n expandedKeys={expandedKeys}\n onExpandedChange={setExpandedKeys}\n allowsMultipleExpanded\n aria-label=\"Run sections\"\n >\n {/* Scheduled Section */}\n <CategoryDisclosure id=\"scheduled\">\n <Heading level={3}>\n <CategoryHeader slot=\"trigger\">\n <CategoryTitle>\n <HashtagIcon src={ICONS.hashtag} alt=\"\" />\n <span>SCHEDULED</span>\n </CategoryTitle>\n <ChevronIcon $isExpanded={expandedKeys.has('scheduled')}>\n <img src={ICONS.chevronDown} alt=\"\" />\n </ChevronIcon>\n </CategoryHeader>\n </Heading>\n <CategoryDisclosurePanel>\n {scheduledRuns.length > 0 ? (\n scheduledRuns.map((run) => <ItemWithLogs key={run.id} run={run} />)\n ) : (\n <ItemContainer>\n <ItemName $dimmed>No scheduled items</ItemName>\n </ItemContainer>\n )}\n </CategoryDisclosurePanel>\n </CategoryDisclosure>\n\n {/* Completed Section */}\n <CategoryDisclosure id=\"completed\">\n <Heading level={3}>\n <CategoryHeader slot=\"trigger\">\n <CategoryTitle>\n <HashtagIcon src={ICONS.hashtag} alt=\"\" />\n <span>COMPLETED</span>\n </CategoryTitle>\n <ChevronIcon $isExpanded={expandedKeys.has('completed')}>\n <img src={ICONS.chevronDown} alt=\"\" />\n </ChevronIcon>\n </CategoryHeader>\n </Heading>\n <CategoryDisclosurePanel>\n {completedRuns.length > 0 ? (\n completedRuns.map((run) => <ItemWithLogs key={run.id} run={run} />)\n ) : (\n <ItemContainer>\n <ItemName $dimmed>No completed items</ItemName>\n </ItemContainer>\n )}\n </CategoryDisclosurePanel>\n </CategoryDisclosure>\n\n {/* Issues Section */}\n <CategoryDisclosure id=\"issues\">\n <Heading level={3}>\n <CategoryHeader slot=\"trigger\">\n <CategoryTitle>\n <HashtagIcon src={ICONS.hashtag} alt=\"\" />\n <span>ISSUES</span>\n </CategoryTitle>\n <ChevronIcon $isExpanded={expandedKeys.has('issues')}>\n <img src={ICONS.chevronDown} alt=\"\" />\n </ChevronIcon>\n </CategoryHeader>\n </Heading>\n <CategoryDisclosurePanel>\n {issuesRuns.length > 0 ? (\n issuesRuns.map((run) => <ItemWithLogs key={run.id} run={run} />)\n ) : (\n <ItemContainer>\n <ItemName $dimmed>No issues</ItemName>\n </ItemContainer>\n )}\n </CategoryDisclosurePanel>\n </CategoryDisclosure>\n </StyledDisclosureGroup>\n </RunsContainer>\n );\n}\n\n// Usage tab content with meter\nfunction UsageTabContent({\n currentUsage = 0,\n maxUsage = 100000,\n}: {\n currentUsage?: number;\n maxUsage?: number;\n}) {\n const ref = useRef<HTMLDivElement>(null);\n const { meterProps, labelProps } = useMeter({\n label: 'Token Usage',\n value: currentUsage,\n minValue: 0,\n maxValue: maxUsage,\n });\n\n const percentage = Math.round((currentUsage / maxUsage) * 100);\n\n // Determine color based on usage\n let color = '#10b981'; // green\n if (percentage >= 75)\n color = '#ef4444'; // red\n else if (percentage >= 50) color = '#f59e0b'; // yellow\n\n return (\n <MeterContainer>\n <MeterLabel {...labelProps}>Token Usage</MeterLabel>\n <MeterBar {...meterProps} ref={ref}>\n <MeterFill $percentage={percentage} $color={color} />\n </MeterBar>\n <MeterStats>\n {percentage}% of {maxUsage.toLocaleString()} tokens used\n <br />\n <small>\n {currentUsage.toLocaleString()} / {maxUsage.toLocaleString()} tokens\n </small>\n </MeterStats>\n </MeterContainer>\n );\n}\n\n// Connections tab content\nfunction ConnectionsTabContent({\n isGoogleConnected = false,\n onGoogleConnect,\n onGoogleDisconnect,\n}: {\n isGoogleConnected?: boolean;\n onGoogleConnect?: () => void;\n onGoogleDisconnect?: () => void;\n}) {\n const ref = useRef<HTMLButtonElement>(null);\n const { buttonProps } = useButton(\n {\n onPress: isGoogleConnected ? onGoogleDisconnect : onGoogleConnect,\n },\n ref\n );\n\n return (\n <ConnectionsContainer>\n <ConnectionDescription>\n {isGoogleConnected\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 </ConnectionDescription>\n <GoogleButton {...buttonProps} ref={ref} $isConnected={isGoogleConnected}>\n {isGoogleConnected ? '✓ Disconnect from Google' : 'Connect with Google'}\n </GoogleButton>\n </ConnectionsContainer>\n );\n}\n\n// Tab component\nfunction Tab({ item, state }: { item: any; state: ReturnType<typeof useTabListState> }) {\n const ref = useRef<HTMLButtonElement>(null);\n const { tabProps } = useTab({ key: item.key }, state, ref);\n\n return (\n <TabButton {...tabProps} ref={ref} $isSelected={state.selectedKey === item.key}>\n {item.rendered}\n </TabButton>\n );\n}\n\n// TabList component\nfunction TabList({\n state,\n ...props\n}: { state: ReturnType<typeof useTabListState> } & React.HTMLAttributes<HTMLDivElement>) {\n const ref = useRef<HTMLDivElement>(null);\n const { tabListProps } = useTabList(props, state, ref);\n\n return (\n <TabListWrapper {...tabListProps} ref={ref}>\n {[...state.collection].map((item) => (\n <Tab key={item.key} item={item} state={state} />\n ))}\n </TabListWrapper>\n );\n}\n\n// TabPanel component\nfunction TabPanel({\n state,\n ...props\n}: { state: ReturnType<typeof useTabListState> } & React.HTMLAttributes<HTMLDivElement>) {\n const ref = useRef<HTMLDivElement>(null);\n const { tabPanelProps } = useTabPanel(props, state, ref);\n\n return (\n <TabPanelWrapper {...tabPanelProps} ref={ref}>\n {state.selectedItem?.props.children}\n </TabPanelWrapper>\n );\n}\n\nexport function PaneMenus({\n activeTab = 'runs',\n onTabChange,\n runs = [],\n currentUsage = 0,\n maxUsage = 100000,\n isGoogleConnected = false,\n onGoogleConnect,\n onGoogleDisconnect,\n onBrowseAutomations,\n}: PaneMenusProps) {\n const state = useTabListState({\n defaultSelectedKey: activeTab,\n onSelectionChange: (key) => {\n if (onTabChange) {\n onTabChange(key as 'runs' | 'usage' | 'connections');\n }\n },\n children: (\n <>\n <Item key=\"runs\" title=\"Runs\">\n <RunsTabContent runs={runs} onBrowseAutomations={onBrowseAutomations} />\n </Item>\n <Item key=\"usage\" title=\"Usage\">\n <UsageTabContent currentUsage={currentUsage} maxUsage={maxUsage} />\n </Item>\n <Item key=\"connections\" title=\"Connections\">\n <ConnectionsTabContent\n isGoogleConnected={isGoogleConnected}\n onGoogleConnect={onGoogleConnect}\n onGoogleDisconnect={onGoogleDisconnect}\n />\n </Item>\n </>\n ),\n });\n\n return (\n <Container>\n <TabList state={state} aria-label=\"Main pane menu\" />\n <TabPanel key={state.selectedItem?.key} state={state} />\n </Container>\n );\n}\n","import styled from 'styled-components';\n\n// Color palette from Layout.styles.ts\nconst HEADER_BG = '#202225';\nconst HEADER_BG_DARK = '#18191c';\nconst BUTTON_BG = '#36393f';\nconst BUTTON_BG_HOVER = '#40444b';\n\n// Breakpoints for responsive pattern sizes\nconst breakpoints = {\n xs: '640px',\n sm: '768px',\n md: '1024px',\n lg: '1280px',\n};\n\nexport const Container = styled.header`\n position: relative;\n width: 100%;\n height: 56px;\n background-color: ${HEADER_BG};\n overflow: hidden;\n display: flex;\n align-items: center;\n justify-content: center;\n\n /* Background pattern - responsive sizes */\n &::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-image: url('/assets/bg-set/pattern/Size=xs, Type=Waves Rays2.svg');\n background-size: cover;\n background-position: center;\n background-repeat: no-repeat;\n opacity: 0.6;\n z-index: 0;\n }\n\n /* Small screens */\n @media (min-width: ${breakpoints.xs}) {\n &::before {\n background-image: url('/assets/bg-set/pattern/Size=sm, Type=Waves Rays2.svg');\n }\n }\n\n /* Medium screens */\n @media (min-width: ${breakpoints.sm}) {\n height: 64px;\n\n &::before {\n background-image: url('/assets/bg-set/pattern/Size=md, Type=Waves Rays2.svg');\n }\n }\n\n /* Large screens */\n @media (min-width: ${breakpoints.md}) {\n &::before {\n background-image: url('/assets/bg-set/pattern/Size=lg, Type=Waves Rays2.svg');\n }\n }\n\n /* Extra large screens */\n @media (min-width: ${breakpoints.lg}) {\n &::before {\n background-image: url('/assets/bg-set/pattern/Size=xl, Type=Waves Rays2.svg');\n }\n }\n\n /* Dark theme support */\n @media (prefers-color-scheme: dark) {\n background-color: ${HEADER_BG_DARK};\n }\n`;\n\nexport const BrandLogo = styled.img`\n position: relative;\n z-index: 1;\n max-height: 28px;\n height: auto;\n width: auto;\n object-fit: contain;\n pointer-events: none;\n user-select: none;\n\n /* Slightly larger on desktop */\n @media (min-width: ${breakpoints.sm}) {\n max-height: 32px;\n }\n`;\n\nexport const SettingsButton = styled.button<{ $isHovered?: boolean }>`\n position: absolute;\n top: 50%;\n right: 12px;\n transform: translateY(-50%);\n z-index: 2;\n\n /* Button appearance */\n width: 40px;\n height: 40px;\n border-radius: 50%;\n border: none;\n background-color: ${BUTTON_BG};\n cursor: pointer;\n\n /* Center the icon */\n display: flex;\n align-items: center;\n justify-content: center;\n\n /* Smooth transitions */\n transition: background-color 0.2s ease, transform 0.1s ease;\n\n /* Hover state */\n &:hover {\n background-color: ${BUTTON_BG_HOVER};\n }\n\n /* Active state */\n &:active {\n transform: translateY(-50%) scale(0.95);\n }\n\n /* Focus visible state for accessibility */\n &:focus-visible {\n outline: 2px solid #5865f2;\n outline-offset: 2px;\n }\n\n /* Disabled state */\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n /* Responsive positioning */\n @media (min-width: ${breakpoints.sm}) {\n right: 16px;\n }\n\n @media (min-width: ${breakpoints.md}) {\n right: 24px;\n }\n`;\n\nexport const BackButton = styled.button<{ $isHovered?: boolean }>`\n position: absolute;\n top: 50%;\n left: 12px;\n transform: translateY(-50%);\n z-index: 2;\n\n /* Button appearance */\n width: 40px;\n height: 40px;\n border-radius: 50%;\n border: none;\n background-color: ${BUTTON_BG};\n cursor: pointer;\n\n /* Center the icon */\n display: flex;\n align-items: center;\n justify-content: center;\n\n /* Smooth transitions */\n transition: background-color 0.2s ease, transform 0.1s ease;\n\n /* Hover state */\n &:hover {\n background-color: ${BUTTON_BG_HOVER};\n }\n\n /* Active state */\n &:active {\n transform: translateY(-50%) scale(0.95);\n }\n\n /* Focus visible state for accessibility */\n &:focus-visible {\n outline: 2px solid #5865f2;\n outline-offset: 2px;\n }\n\n /* Disabled state */\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n /* Responsive positioning */\n @media (min-width: ${breakpoints.sm}) {\n left: 16px;\n }\n\n @media (min-width: ${breakpoints.md}) {\n left: 24px;\n }\n`;\n","import { useButton } from '@react-aria/button';\nimport { useRef, useState } from 'react';\nimport { Icon } from '../Icon';\nimport { BackButton, BrandLogo, Container, SettingsButton } from './PaneSectionHeader.styles';\n\nexport type BrandType = 'Google' | 'Microsoft' | 'Slack' | 'YouTube';\n\nexport interface PaneSectionHeaderProps {\n /**\n * Brand logo to display in the center of the header\n * @default 'Google'\n */\n brand?: BrandType;\n /**\n * Callback fired when back button is clicked\n */\n onBackClick?: () => void;\n /**\n * Callback fired when settings button is clicked\n */\n onSettingsClick?: () => void;\n /**\n * Additional CSS class name\n */\n className?: string;\n /**\n * Accessible label for the header\n */\n 'aria-label'?: string;\n}\n\n/**\n * PaneSectionHeader component\n *\n * A fixed-height header positioned at the top of the main pane section.\n * Features a centered brand logo and a settings button in the top-right corner.\n * Background includes responsive Rays2 pattern from the design system.\n *\n * @example\n * ```tsx\n * <PaneSectionHeader\n * brand=\"Google\"\n * onSettingsClick={() => console.log('Settings clicked')}\n * />\n * ```\n */\nexport function PaneSectionHeader({\n brand = 'Google',\n onBackClick,\n onSettingsClick,\n className,\n 'aria-label': ariaLabel = 'Pane section header',\n}: PaneSectionHeaderProps) {\n const [isBackHovered, setIsBackHovered] = useState(false);\n const [isSettingsHovered, setIsSettingsHovered] = useState(false);\n const backButtonRef = useRef<HTMLButtonElement>(null);\n const settingsButtonRef = useRef<HTMLButtonElement>(null);\n\n const { buttonProps: backButtonProps } = useButton(\n {\n onPress: onBackClick,\n 'aria-label': 'Go back',\n },\n backButtonRef\n );\n\n const { buttonProps: settingsButtonProps } = useButton(\n {\n onPress: onSettingsClick,\n 'aria-label': 'Settings',\n },\n settingsButtonRef\n );\n\n return (\n <Container className={className} role=\"banner\" aria-label={ariaLabel}>\n {/* Back button - top left */}\n {onBackClick && (\n <BackButton\n {...backButtonProps}\n ref={backButtonRef}\n onMouseEnter={() => setIsBackHovered(true)}\n onMouseLeave={() => setIsBackHovered(false)}\n $isHovered={isBackHovered}\n >\n <Icon name=\"arrow-left-fill\" size={20} color=\"#b9bbbe\" />\n </BackButton>\n )}\n\n {/* Brand logo centered - using white variant for better contrast on dark background */}\n <BrandLogo src={`/assets/bg-set/brand-logos/${brand}2.svg`} alt={brand} />\n\n {/* Settings button - top right */}\n <SettingsButton\n {...settingsButtonProps}\n ref={settingsButtonRef}\n onMouseEnter={() => setIsSettingsHovered(true)}\n onMouseLeave={() => setIsSettingsHovered(false)}\n $isHovered={isSettingsHovered}\n >\n <Icon\n name={isSettingsHovered ? 'settings-line' : 'settings-fill'}\n size={20}\n color=\"#b9bbbe\"\n />\n </SettingsButton>\n </Container>\n );\n}\n\nPaneSectionHeader.displayName = 'PaneSectionHeader';\n","import styled from 'styled-components';\n\n// Colors based on NavVertical design\nconst NAV_BG = '#36393F';\nconst NAV_BG_HOVER = '#40444b';\n\nexport const Container = styled.button<{ $active?: boolean }>`\n /* Base button styling */\n width: 48px;\n height: 48px;\n border: none;\n padding: 4px;\n border-radius: ${({ $active }) => ($active ? '16px' : '50%')};\n background-color: ${NAV_BG};\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 0.15s ease-out;\n position: relative;\n overflow: hidden;\n\n /* Hover state */\n &:hover {\n border-radius: 16px;\n background-color: ${NAV_BG_HOVER};\n }\n\n /* Focus visible state for accessibility */\n &:focus-visible {\n outline: 2px solid #5865f2;\n outline-offset: 2px;\n }\n\n /* Active indicator */\n ${({ $active }) =>\n $active &&\n `\n &::before {\n content: '';\n position: absolute;\n left: -16px;\n top: 50%;\n transform: translateY(-50%);\n width: 4px;\n height: 40px;\n background-color: #ffffff;\n border-radius: 0 4px 4px 0;\n }\n `}\n\n /* Disabled state */\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n`;\n\nexport const LogoImage = styled.img`\n width: 100%;\n height: 100%;\n object-fit: contain;\n pointer-events: none;\n user-select: none;\n`;\n","import { useButton } from '@react-aria/button';\nimport type { AriaButtonProps } from '@react-types/button';\nimport { useRef } from 'react';\nimport { Container, LogoImage } from './ServiceIcon.styles';\n\nexport type ServiceBrand =\n | 'Facebook'\n | 'Gmail'\n | 'Instagram'\n | 'LinkedIn'\n | 'Reddit'\n | 'Slack'\n | 'Telegram'\n | 'WhatsApp'\n | 'X'\n | 'YouTube';\n\nexport interface ServiceIconProps extends AriaButtonProps {\n /**\n * Brand logo to display\n */\n brand: ServiceBrand;\n /**\n * Whether the service icon is active/selected\n */\n active?: boolean;\n /**\n * Additional CSS class name\n */\n className?: string;\n}\n\n/**\n * ServiceIcon component\n *\n * Displays a circular brand logo icon that can be used as a service selector.\n * Uses colored brand logos from assets/icons/Brand and supports active/hover states.\n *\n * @example\n * ```tsx\n * <ServiceIcon\n * brand=\"Gmail\"\n * active={true}\n * onPress={() => console.log('Gmail clicked')}\n * aria-label=\"Gmail service\"\n * />\n * ```\n */\nexport function ServiceIcon({ brand, active = false, className, ...ariaProps }: ServiceIconProps) {\n const ref = useRef<HTMLButtonElement>(null);\n const { buttonProps } = useButton(\n {\n ...ariaProps,\n 'aria-pressed': active,\n },\n ref\n );\n\n return (\n <Container {...buttonProps} ref={ref} $active={active} className={className}>\n <LogoImage src={`/assets/icons/Brand/${brand}.svg`} alt={brand} />\n </Container>\n );\n}\n\nServiceIcon.displayName = 'ServiceIcon';\n"]}