@fiction/sdk 1.0.12 → 1.0.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/self.js +39 -43
- package/dist/self.js.map +1 -1
- package/package.json +2 -2
package/dist/self.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"self.js","sources":["../self/constants.ts","../self/ClientAudio.ts","../self/schema.ts","../self/utils.ts","../../ui/common/FSpinner.vue","../../utils/color.ts","../self/SelfController.ts","../self/ui/ElSelfButton.vue","../self/ui/SelfInputEmail.vue","../self/ui/SelfInputOneTimeCode.vue","../self/ui/ElAuthGate.vue","../self/ui/ElModeHeader.vue","../../../node_modules/.pnpm/tailwind-merge@3.3.1/node_modules/tailwind-merge/dist/bundle-mjs.mjs","../../ui/common/themes.ts","../../ui/common/FButton.vue","../self/ui/ElSelfAbout.vue","../self/ui/ElSelfChat.vue","../self/ui/ElSelfHeader.vue","../../ui/common/FClose.vue","../self/ui/ElSidebar.vue","../self/ui/ElSelfModeSidebar.vue","../self/ui/ElSelfSidebar.vue","../self/ui/ElAudioVisualizer.vue","../self/ui/ElSelfVoice.vue","../self/ui/SelfAgent.vue","../self/ui/SelfWrap.vue","../self/ui/FictionWidget.vue","../../ui/common/FModal.vue","../self/ui/SelfProvider.vue","../self/ui/SelfModal.vue"],"sourcesContent":["// UI constants and configuration from web project\nexport const AUDIO_FFT_SIZE = 256\nexport const AUDIO_SMOOTHING = 0.8\nexport const AUDIO_LEVEL_UPDATE_INTERVAL = 50 // 20fps\n\n// Voice visualizer constants\nexport const VISUALIZER_CONFIG = {\n bars: 64,\n barWidth: 3,\n barSpacing: 1,\n minHeight: 4,\n maxHeight: 80,\n\n // Enhanced physics constants\n STIFFNESS: 0.18,\n DAMPING: 0.22,\n PEAK_HOLD_TIME: 300, // ms to hold peaks\n PEAK_DECAY_STIFFNESS: 0.12,\n PEAK_DECAY_DAMPING: 0.15,\n}\n\n// Voice-optimized frequency bands for visualizer\nexport const VOICE_FREQUENCIES = [\n // Low fundamentals\n 85,\n 100,\n 120,\n 140,\n 155,\n 170,\n 185,\n 200,\n 215,\n 230,\n 245,\n 260,\n 275,\n 290,\n 315,\n 340,\n // Mid fundamentals (voice clarity)\n 355,\n 375,\n 400,\n 425,\n 450,\n 475,\n 500,\n 530,\n 560,\n 590,\n 630,\n 670,\n 700,\n 730,\n 780,\n 820,\n // Harmonics (speech intelligibility)\n 880,\n 940,\n 1000,\n 1100,\n 1200,\n 1300,\n 1400,\n 1500,\n 1600,\n 1700,\n 1800,\n 1900,\n 2000,\n 2200,\n // High harmonics (consonant clarity)\n 2300,\n 2500,\n 2600,\n 2800,\n 3000,\n 3200,\n 3500,\n 3800,\n 4000,\n 4300,\n 4500,\n 4800,\n 5000,\n 5300,\n // Presence/air (voice definition)\n 5500,\n 5800,\n 6000,\n 6500,\n 7000,\n 7500,\n 8000,\n 8500,\n]\n","import type { AudioLevel } from './schema'\nimport { ref } from 'vue'\nimport { SettingsObject } from '@/utils/base'\nimport { AUDIO_FFT_SIZE, AUDIO_LEVEL_UPDATE_INTERVAL, AUDIO_SMOOTHING } from './constants'\n\nexport type AudioPermissionOptions = {\n noiseSuppression?: boolean\n echoCancellation?: boolean\n autoGainControl?: boolean\n}\n\ntype ClientAudioSettings = {\n [key: string]: unknown\n}\n\nexport class ClientAudio extends SettingsObject<ClientAudioSettings> {\n private audioContext?: AudioContext\n private analyser?: AnalyserNode\n private microphone?: MediaStreamAudioSourceNode\n private audioLevelInterval?: number\n private stream?: MediaStream\n private visibilityChangeHandler?: () => void\n\n // Public reactive state\n audioLevels = ref<AudioLevel>({ inputLevel: 0, outputLevel: 0 })\n\n constructor(args: ClientAudioSettings) {\n super('ClientAudio', args)\n // Setup iOS visibility change handler for proper audio cleanup\n this.setupVisibilityHandler()\n }\n\n /**\n * Setup iOS-specific visibility change handler\n */\n private setupVisibilityHandler(): void {\n if (typeof document === 'undefined')\n return\n\n this.visibilityChangeHandler = () => {\n if (document.hidden) {\n this.logger.info('App backgrounded, suspending audio context')\n this.handleAppBackground()\n } else {\n this.logger.info('App foregrounded, resuming audio context')\n this.handleAppForeground()\n }\n }\n\n document.addEventListener('visibilitychange', this.visibilityChangeHandler, { passive: true })\n\n // Also listen for page beforeunload to cleanup properly\n window.addEventListener('beforeunload', () => {\n this.cleanup().catch(this.logger.error.bind(this, 'Error during beforeunload cleanup'))\n }, { passive: true })\n }\n\n /**\n * Handle app going to background (iOS microphone indicator fix)\n */\n private handleAppBackground(): void {\n // On iOS, pause audio context to stop microphone indicator\n if (this.audioContext && this.audioContext.state === 'running') {\n this.audioContext.suspend().catch(this.logger.error.bind(this, 'Error suspending audio context'))\n }\n\n // Temporarily pause audio monitoring\n if (this.audioLevelInterval) {\n clearInterval(this.audioLevelInterval)\n this.audioLevelInterval = undefined\n }\n }\n\n /**\n * Handle app returning to foreground\n */\n private handleAppForeground(): void {\n // Resume audio context if needed\n if (this.audioContext && this.audioContext.state === 'suspended') {\n this.audioContext.resume().catch(this.logger.error.bind(this, 'Error resuming audio context'))\n }\n\n // Restart audio monitoring if we were monitoring before\n if (this.analyser && !this.audioLevelInterval) {\n this.startAudioLevelMonitoring()\n }\n }\n\n /**\n * Request microphone permission and setup audio analysis\n */\n async requestMicrophonePermission(options: AudioPermissionOptions = {}): Promise<boolean> {\n try {\n const {\n noiseSuppression = true,\n echoCancellation = true,\n autoGainControl = true,\n } = options\n\n this.stream = await navigator.mediaDevices.getUserMedia({\n audio: {\n noiseSuppression,\n echoCancellation,\n autoGainControl,\n },\n })\n\n this.logger.info('Microphone permission granted')\n await this.setupAudioAnalysis()\n return true\n } catch (error) {\n this.logger.error('Microphone permission denied:', error)\n return false\n }\n }\n\n /**\n * Setup audio analysis for level monitoring\n */\n private async setupAudioAnalysis(): Promise<void> {\n if (!this.stream) {\n throw new Error('No audio stream available')\n }\n\n try {\n this.audioContext = new AudioContext()\n this.analyser = this.audioContext.createAnalyser()\n this.microphone = this.audioContext.createMediaStreamSource(this.stream)\n\n this.analyser.fftSize = AUDIO_FFT_SIZE\n this.analyser.smoothingTimeConstant = AUDIO_SMOOTHING\n\n this.microphone.connect(this.analyser)\n this.logger.info('Audio analysis setup complete')\n } catch (error) {\n this.logger.error('Failed to setup audio analysis:', error)\n throw error\n }\n }\n\n /**\n * Start monitoring audio levels\n */\n startAudioLevelMonitoring(isConnected?: () => boolean): void {\n if (!this.analyser) {\n this.logger.info('Audio level monitoring not started - missing analyser')\n return\n }\n\n this.logger.info('Starting audio level monitoring at timestamp:', Date.now())\n const inputDataArray = new Uint8Array(this.analyser.frequencyBinCount)\n\n const updateLevels = async (): Promise<void> => {\n if (!this.analyser) {\n this.logger.info('Stopping audio level monitoring - missing analyser')\n return\n }\n\n try {\n // Get microphone input levels\n this.analyser.getByteFrequencyData(inputDataArray)\n const inputAverage = inputDataArray.reduce((sum, value) => sum + value, 0) / inputDataArray.length\n const inputLevel = Math.min(inputAverage / 128, 1) // Normalize to 0-1\n\n // Simple output level estimation (SelfController will handle real ElevenLabs data)\n const outputLevel = isConnected?.() ? 0.3 : 0\n\n this.audioLevels.value = { inputLevel, outputLevel }\n } catch (error) {\n this.logger.error('Error in audio level monitoring:', error)\n this.stopAudioLevelMonitoring()\n }\n }\n\n // Use async interval for ElevenLabs API calls\n const intervalWrapper = () => {\n updateLevels().catch((error) => {\n this.logger.error('Async error in audio level monitoring:', error)\n })\n }\n\n this.audioLevelInterval = window.setInterval(intervalWrapper, AUDIO_LEVEL_UPDATE_INTERVAL)\n }\n\n /**\n * Stop monitoring audio levels\n */\n stopAudioLevelMonitoring(): void {\n if (this.audioLevelInterval) {\n this.logger.info('Stopping audio level monitoring interval')\n clearInterval(this.audioLevelInterval)\n this.audioLevelInterval = undefined\n } else {\n this.logger.info('No audio level monitoring interval to stop')\n }\n }\n\n /**\n * Reset audio levels to zero\n */\n resetAudioLevels(): void {\n this.audioLevels.value = { inputLevel: 0, outputLevel: 0 }\n }\n\n /**\n * Check if audio context is available\n */\n isAudioContextAvailable(): boolean {\n return !!this.audioContext\n }\n\n /**\n * Get current audio context state\n */\n getAudioContextState(): AudioContextState | undefined {\n return this.audioContext?.state\n }\n\n /**\n * Get shared analyser for AudioVisualizer (prevents duplicate audio contexts)\n */\n getSharedAnalyser(): AnalyserNode | undefined {\n return this.analyser\n }\n\n /**\n * Stop microphone and cleanup audio stream\n */\n async stopMicrophone(): Promise<void> {\n if (this.stream) {\n this.logger.info('Stopping microphone stream')\n this.stream.getTracks().forEach((track) => {\n track.stop()\n track.enabled = false\n })\n this.stream = undefined\n }\n\n this.stopAudioLevelMonitoring()\n this.resetAudioLevels()\n\n // Close audio context if open\n if (this.audioContext && this.audioContext.state !== 'closed') {\n await this.audioContext.close()\n this.audioContext = undefined\n }\n\n this.analyser = undefined\n this.microphone = undefined\n\n this.logger.info('Microphone stopped')\n }\n\n /**\n * Cleanup all audio resources (call on destroy)\n */\n async cleanup(): Promise<void> {\n // Stop microphone first\n await this.stopMicrophone()\n\n // Remove visibility change handler\n if (this.visibilityChangeHandler && typeof document !== 'undefined') {\n document.removeEventListener('visibilitychange', this.visibilityChangeHandler)\n this.visibilityChangeHandler = undefined\n }\n\n this.logger.info('Audio resources cleaned up')\n }\n}\n","// Re-export Self type from app for external consumers\nexport type { Self } from '@/modules/self/schema'\n\n// Chat message interface from web project\nexport interface ChatMessage {\n id: string\n text: string\n sender: 'user' | 'agent' | 'system'\n timestamp: Date\n}\n\n// Voice connection states from web project\nexport interface VoiceConnectionState {\n isActive: boolean\n isConnected: boolean\n isSpeaking: boolean\n isListening: boolean\n transcript?: string\n connectionStatus: 'connecting' | 'connected' | 'disconnected' | 'error'\n error?: string\n}\n\nexport interface TextConnectionState {\n isActive: boolean\n isConnected: boolean\n isThinking: boolean\n connectionStatus: 'connecting' | 'connected' | 'disconnected' | 'error'\n error?: string\n}\n\n// Audio level interface for visualizer\nexport interface AudioLevel {\n inputLevel: number\n outputLevel: number\n}\n\n// Agent mode configuration\nexport const AGENT_MODES = [\n {\n mode: 'self' as const,\n label: 'Mode',\n icon: 'i-tabler-north-star',\n },\n {\n mode: 'talk' as const,\n label: 'Talk',\n icon: 'i-tabler-phone',\n },\n {\n mode: 'chat' as const,\n label: 'Chat',\n icon: 'i-tabler-message-circle',\n },\n {\n mode: 'info' as const,\n label: 'About',\n icon: 'i-tabler-user-circle',\n },\n] as const\n\n// Agent modes from web project\nexport type AgentMode = (typeof AGENT_MODES)[number]['mode']\n","import type { Self } from '@/modules/self/schema'\n\n// Image utility functions - simplified for Self usage\nexport function getImageSrc(image: string | { src?: string } | undefined): string {\n if (!image)\n return ''\n if (typeof image === 'string')\n return image\n return image.src || ''\n}\n\nexport function getSelfAvatarUrl(self: Self): string {\n return getImageSrc(self.cover) || getImageSrc(self.avatar) || '/img/placeholder-avatar.png'\n}\n\nexport function getFallbackAvatarDataUrl(): string {\n return 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODAiIGhlaWdodD0iODAiIHZpZXdCb3g9IjAgMCA4MCA4MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3Qgd2lkdGg9IjgwIiBoZWlnaHQ9IjgwIiByeD0iNDAiIGZpbGw9IiM2MzY2RjEiLz4KPHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeD0iMjAiIHk9IjIwIj4KPHA0aCBkPSJNMTIgMTJjMi4yMSAwIDQtMS43OSA0LTRTNC4yMSA0IDIgNHMxLjc5IDQgNCA0em0wIDJjLTIuNjcgMC04IDEuMzQtOCA0djJoMTZ2LTJjMC0yLjY2LTUuMzMtNC04LTR6IiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4KPC9zdmc+'\n}\n\nexport function handleImageError(event: Event): void {\n const img = event.target as HTMLImageElement\n if (!img.dataset.fallbackUsed) {\n img.dataset.fallbackUsed = 'true'\n img.src = getFallbackAvatarDataUrl()\n }\n}\n\n// Voice message parsing from web project\nexport function parseVoiceMessage(args: { message: string, source: string }): { text: string, sender: 'user' | 'agent' } | null {\n const { message } = args\n if (!message)\n return null\n\n if (typeof message === 'string') {\n return message.trim() ? { text: message.trim(), sender: 'agent' } : null\n }\n\n if (typeof message !== 'object')\n return null\n\n const parsers: Array<(msg: { message: string, source: string }) => { text: string, sender: 'user' | 'agent' } | null> = [\n (msg) => {\n if (!('source' in msg))\n return null\n const senderMap: Record<string, 'user' | 'agent'> = {\n user: 'user',\n ai: 'agent',\n agent: 'agent',\n }\n const sender = senderMap[msg.source]\n return sender ? { text: msg.message || '', sender } : null\n },\n ]\n\n for (const parser of parsers) {\n const result = parser(message)\n if (result && result.text.trim()) {\n return { text: result.text.trim(), sender: result.sender }\n }\n }\n\n return null\n}\n\n// Removed selfToDigitalSelf - no longer needed since components use Self directly\n\n// Generate default first message based on context\nexport function generateFirstMessage(args: { name: string, context?: string }): string {\n const { name, context } = args\n\n if (context === 'welcome') {\n return `Welcome to Fiction! I'm ${name}, your digital self. I'm here to help you understand how I can represent you and assist with your daily tasks. What would you like to know about how I work?`\n }\n\n if (context === 'onboarding') {\n return `Hi! I'm ${name}, your newly created digital self. I can handle conversations, answer questions about your expertise, and represent you professionally. Ready to see what I can do?`\n }\n\n return `Hello! I'm ${name}. How can I help you today?`\n}\n","<script lang=\"ts\" setup>\ndefineProps({\n width: { type: String, default: '' },\n colorMode: { type: String, default: 'primary' },\n})\n</script>\n\n<template>\n <div class=\"spinner max-w-sm\">\n <svg\n class=\"ring-circular h-full w-full origin-center\"\n viewBox=\"25 25 50 50\"\n >\n <circle\n :class=\"colorMode\"\n class=\"ring-path\"\n cx=\"50\"\n cy=\"50\"\n r=\"20\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"5\"\n stroke-miterlimit=\"30\"\n />\n </svg>\n </div>\n</template>\n\n<style lang=\"less\">\n.ring-circular {\n animation: rotate 1s linear infinite;\n}\n\n.ring-path {\n will-change: stroke-dasharray;\n will-change: stroke-dashoffset;\n\n stroke-dasharray: 1, 200;\n stroke-dashoffset: 0;\n\n stroke-linecap: round;\n animation: dash 2s ease-in-out infinite;\n // &.placeholder {\n // stroke: var(--color-placeholder, var(--color-bg-contrast));\n // }\n // &.primary {\n // stroke: var(--color-primary);\n // }\n // &.secondary {\n // stroke: var(--color-secondary);\n // }\n // &.text {\n // stroke: var(--color-text);\n // }\n}\n\n@keyframes rotate {\n 100% {\n transform: rotate(360deg);\n }\n}\n@keyframes dash {\n 0% {\n stroke-dasharray: 1, 200;\n stroke-dashoffset: 0;\n }\n 50% {\n stroke-dasharray: 89, 200;\n stroke-dashoffset: -35px;\n }\n 100% {\n stroke-dasharray: 89, 200;\n stroke-dashoffset: -124px;\n }\n}\n</style>\n","/**\n * Tailwind v4 OKLCH color scales for theming\n * Values copied from Tailwind CSS v4 default theme\n */\n\nexport type ColorScale = 50 | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | 950\n\nexport type ColorName = 'green' | 'blue' | 'rose' | 'cyan' | 'purple' | 'amber' | 'indigo' | 'pink' | 'teal' | 'sky'\n\nexport type ColorScheme = Record<ColorScale, string>\n\nconst colorSchemes: Record<ColorName, ColorScheme> = {\n green: {\n 50: 'oklch(98.2% 0.018 155.826)',\n 100: 'oklch(96.2% 0.044 156.743)',\n 200: 'oklch(92.5% 0.084 155.995)',\n 300: 'oklch(87.1% 0.15 154.449)',\n 400: 'oklch(79.2% 0.209 151.711)',\n 500: 'oklch(72.3% 0.219 149.579)',\n 600: 'oklch(62.7% 0.194 149.214)',\n 700: 'oklch(52.7% 0.154 150.069)',\n 800: 'oklch(44.8% 0.119 151.328)',\n 900: 'oklch(39.3% 0.095 152.535)',\n 950: 'oklch(26.6% 0.065 152.934)',\n },\n blue: {\n 50: 'oklch(97% 0.014 254.604)',\n 100: 'oklch(93.2% 0.032 255.585)',\n 200: 'oklch(88.2% 0.059 254.128)',\n 300: 'oklch(80.9% 0.105 251.813)',\n 400: 'oklch(70.7% 0.165 254.624)',\n 500: 'oklch(62.3% 0.214 259.815)',\n 600: 'oklch(54.6% 0.245 262.881)',\n 700: 'oklch(48.8% 0.243 264.376)',\n 800: 'oklch(42.4% 0.199 265.638)',\n 900: 'oklch(37.9% 0.146 265.522)',\n 950: 'oklch(28.2% 0.091 267.935)',\n },\n rose: {\n 50: 'oklch(96.9% 0.015 12.422)',\n 100: 'oklch(94.1% 0.03 12.58)',\n 200: 'oklch(89.2% 0.058 10.001)',\n 300: 'oklch(81% 0.117 11.638)',\n 400: 'oklch(71.2% 0.194 13.428)',\n 500: 'oklch(64.5% 0.246 16.439)',\n 600: 'oklch(58.6% 0.253 17.585)',\n 700: 'oklch(51.4% 0.222 16.935)',\n 800: 'oklch(45.5% 0.188 13.697)',\n 900: 'oklch(41% 0.159 10.272)',\n 950: 'oklch(27.1% 0.105 12.094)',\n },\n cyan: {\n 50: 'oklch(98.4% 0.019 200.873)',\n 100: 'oklch(95.6% 0.045 203.388)',\n 200: 'oklch(91.7% 0.08 205.041)',\n 300: 'oklch(86.5% 0.127 207.078)',\n 400: 'oklch(78.9% 0.154 211.53)',\n 500: 'oklch(71.5% 0.143 215.221)',\n 600: 'oklch(60.9% 0.126 221.723)',\n 700: 'oklch(52% 0.105 223.128)',\n 800: 'oklch(45% 0.085 224.283)',\n 900: 'oklch(39.8% 0.07 227.392)',\n 950: 'oklch(30.2% 0.056 229.695)',\n },\n purple: {\n 50: 'oklch(97.7% 0.014 308.299)',\n 100: 'oklch(94.6% 0.033 307.174)',\n 200: 'oklch(90.2% 0.063 306.703)',\n 300: 'oklch(82.7% 0.119 306.383)',\n 400: 'oklch(71.4% 0.203 305.504)',\n 500: 'oklch(62.7% 0.265 303.9)',\n 600: 'oklch(55.8% 0.288 302.321)',\n 700: 'oklch(49.6% 0.265 301.924)',\n 800: 'oklch(43.8% 0.218 303.724)',\n 900: 'oklch(38.1% 0.176 304.987)',\n 950: 'oklch(29.1% 0.149 302.717)',\n },\n amber: {\n 50: 'oklch(98.7% 0.022 95.277)',\n 100: 'oklch(96.2% 0.059 95.617)',\n 200: 'oklch(92.4% 0.12 95.746)',\n 300: 'oklch(87.9% 0.169 91.605)',\n 400: 'oklch(82.8% 0.189 84.429)',\n 500: 'oklch(76.9% 0.188 70.08)',\n 600: 'oklch(66.6% 0.179 58.318)',\n 700: 'oklch(55.5% 0.163 48.998)',\n 800: 'oklch(47.3% 0.137 46.201)',\n 900: 'oklch(41.4% 0.112 45.904)',\n 950: 'oklch(27.9% 0.077 45.635)',\n },\n indigo: {\n 50: 'oklch(96.2% 0.018 272.314)',\n 100: 'oklch(93% 0.034 272.788)',\n 200: 'oklch(87% 0.065 274.039)',\n 300: 'oklch(78.5% 0.115 274.713)',\n 400: 'oklch(67.3% 0.182 276.935)',\n 500: 'oklch(58.5% 0.233 277.117)',\n 600: 'oklch(51.1% 0.262 276.966)',\n 700: 'oklch(45.7% 0.24 277.023)',\n 800: 'oklch(39.8% 0.195 277.366)',\n 900: 'oklch(35.9% 0.144 278.697)',\n 950: 'oklch(25.7% 0.09 281.288)',\n },\n pink: {\n 50: 'oklch(97.1% 0.014 343.198)',\n 100: 'oklch(94.8% 0.028 342.258)',\n 200: 'oklch(89.9% 0.061 343.231)',\n 300: 'oklch(82.3% 0.12 346.018)',\n 400: 'oklch(71.8% 0.202 349.761)',\n 500: 'oklch(65.6% 0.241 354.308)',\n 600: 'oklch(59.2% 0.249 0.584)',\n 700: 'oklch(52.5% 0.223 3.958)',\n 800: 'oklch(45.9% 0.187 3.815)',\n 900: 'oklch(40.8% 0.153 2.432)',\n 950: 'oklch(28.4% 0.109 3.907)',\n },\n teal: {\n 50: 'oklch(98.4% 0.014 180.72)',\n 100: 'oklch(95.3% 0.051 180.801)',\n 200: 'oklch(91% 0.096 180.426)',\n 300: 'oklch(85.5% 0.138 181.071)',\n 400: 'oklch(77.7% 0.152 181.912)',\n 500: 'oklch(70.4% 0.14 182.503)',\n 600: 'oklch(60% 0.118 184.704)',\n 700: 'oklch(51.1% 0.096 186.391)',\n 800: 'oklch(43.7% 0.078 188.216)',\n 900: 'oklch(38.6% 0.063 188.416)',\n 950: 'oklch(27.7% 0.046 192.524)',\n },\n sky: {\n 50: 'oklch(97.7% 0.013 236.62)',\n 100: 'oklch(95.1% 0.026 236.824)',\n 200: 'oklch(90.1% 0.058 230.902)',\n 300: 'oklch(82.8% 0.111 230.318)',\n 400: 'oklch(74.6% 0.16 232.661)',\n 500: 'oklch(68.5% 0.169 237.323)',\n 600: 'oklch(58.8% 0.158 241.966)',\n 700: 'oklch(50% 0.134 242.749)',\n 800: 'oklch(44.3% 0.11 240.79)',\n 900: 'oklch(39.1% 0.09 240.876)',\n 950: 'oklch(29.3% 0.066 243.157)',\n },\n}\n\n/**\n * Get OKLCH color scale for a given color name\n * Returns full scale (50-950) for use with CSS custom properties\n */\nexport function getColorSchemeOklch(colorName: ColorName): ColorScheme {\n return colorSchemes[colorName] || colorSchemes.blue\n}\n","import type { Ref } from 'vue'\nimport type { FictionSDK } from '../sdkClient'\nimport type { AgentMode, ChatMessage, Self, TextConnectionState, VoiceConnectionState } from './schema'\n// Direct import from ElevenLabs SDK - matches web project pattern\nimport { Conversation } from '@elevenlabs/client'\nimport { objectId } from '@fiction/utils'\nimport { ref, watch } from 'vue'\nimport { SettingsObject } from '@/utils/base'\nimport { ClientAudio } from './ClientAudio'\n\nimport { parseVoiceMessage } from './utils'\n\ntype ConnectionState = 'disconnected' | 'connecting' | 'connected' | 'error'\n\ninterface AgentState {\n isActive: boolean\n isConnected: boolean\n connectionStatus: ConnectionState\n error?: string\n}\n\ninterface AgentCallbacks {\n onConnect?: () => void\n onDisconnect?: () => void\n onError?: (error: Error) => void\n onModeChange?: (mode: string) => void\n onMessage?: (message: unknown) => void\n onAudioLevel?: (levels: { inputLevel: number, outputLevel: number }) => void\n}\n\ntype SelfControllerSettings = {\n sdk: FictionSDK\n self: Self\n context?: string\n firstMessage?: string\n}\n\nexport class SelfController extends SettingsObject<SelfControllerSettings> {\n private conversation?: Conversation\n private isTextMode = false\n private lastMessage = { hash: '', time: 0 }\n private clientAudio: ClientAudio\n private unwatchAudio?: () => void\n private isConnecting = false\n\n // Simple usage tracking\n private sessionId?: string\n private conversationStartTime?: Date\n private chatCharacterCount = 0\n\n // Participant IDs for message attribution\n private hostParticipantId?: string // The digital self\n private visitorParticipantId?: string // The user/anon\n\n voiceState: Ref<VoiceConnectionState> = ref({\n isActive: false,\n isConnected: false,\n isSpeaking: false,\n isListening: false,\n transcript: 'Tap to begin voice conversation',\n connectionStatus: 'disconnected',\n })\n\n textState: Ref<TextConnectionState> = ref({\n isActive: false,\n isConnected: false,\n isThinking: false,\n connectionStatus: 'disconnected',\n })\n\n agentMode: Ref<AgentMode> = ref('self')\n sharedMessages: Ref<ChatMessage[]> = ref([])\n\n constructor(settings: SelfControllerSettings) {\n super('SelfController', settings)\n\n // Fail fast - validate required configuration\n if (!settings.self.elevenlabsAgentId || settings.self.elevenlabsAgentId.trim() === '') {\n throw new Error(`Agent ID is required for SelfController. Self \"${settings.self.name}\" (${settings.self.selfId}) does not have a valid elevenlabsAgentId.`)\n }\n\n // Note: self.selfId, self.ownerId, self.orgId used for usage tracking\n // SelfController works without usage tracking if these are undefined\n\n this.clientAudio = new ClientAudio(settings)\n this.setupModeWatcher()\n }\n\n get audioLevels() {\n return this.clientAudio.audioLevels\n }\n\n getClientAudio() {\n return this.clientAudio\n }\n\n getOutputFrequencyData(): Uint8Array | null {\n if (!this.conversation) {\n console.warn('No ElevenLabs conversation available for frequency data')\n return null\n }\n\n try {\n const data = this.conversation.getOutputByteFrequencyData()\n if (data && data.length > 0) {\n const nonZeroCount = Array.from(data).filter((x) => Number(x) > 0).length\n const maxValue = Math.max(...Array.from(data))\n const avgValue = Array.from(data).reduce((sum, val) => sum + Number(val), 0) / data.length\n console.warn(`ElevenLabs frequency data: ${data.length} bins, ${nonZeroCount} with signal, max: ${maxValue}, avg: ${avgValue.toFixed(1)}`)\n\n return new Uint8Array(data)\n } else {\n console.warn('ElevenLabs returned empty frequency data')\n return null\n }\n } catch (error) {\n console.error('Failed to get ElevenLabs output frequency data:', error)\n return null\n }\n }\n\n private isDuplicateMessage(text: string, sender: string): boolean {\n const hash = `${sender}:${text.toLowerCase().trim()}`\n const now = Date.now()\n const isDupe = hash === this.lastMessage.hash && (now - this.lastMessage.time) < 500\n\n if (!isDupe) {\n this.lastMessage = { hash, time: now }\n }\n\n return isDupe\n }\n\n private addMessage(text: string, sender: 'user' | 'agent' | 'system') {\n if (this.isDuplicateMessage(text, sender))\n return\n\n this.sharedMessages.value = [\n ...this.sharedMessages.value,\n { id: Date.now().toString(), text, sender, timestamp: new Date() },\n ]\n }\n\n private getDynamicSettings() {\n return {\n dynamicVariables: {\n context: this.settings.context || '',\n firstMessage: this.settings.firstMessage || '',\n },\n overrides: {\n agent: this.settings.firstMessage ? { firstMessage: this.settings.firstMessage } : {},\n },\n }\n }\n\n private updateState<T extends AgentState>(state: Ref<T>, updates: Partial<T>) {\n state.value = { ...state.value, ...updates }\n }\n\n private resetState(isText: boolean) {\n if (isText) {\n this.updateState(this.textState, {\n isActive: false,\n isConnected: false,\n isThinking: false,\n connectionStatus: 'disconnected',\n error: undefined,\n })\n } else {\n this.updateState(this.voiceState, {\n isActive: false,\n isConnected: false,\n isSpeaking: false,\n isListening: false,\n transcript: 'Ready to start a call...',\n connectionStatus: 'disconnected',\n error: undefined,\n })\n this.clientAudio.resetAudioLevels()\n }\n }\n\n private setupModeWatcher() {\n watch(this.agentMode, async (newMode, oldMode) => {\n this.logger.info(`Mode changed from ${oldMode} to ${newMode}`)\n\n // End any active conversation when switching modes\n if (this.conversation && (oldMode === 'talk' || oldMode === 'chat')) {\n await this.endConversation()\n }\n\n // User must explicitly start conversations via buttons\n // No auto-start logic\n })\n }\n\n private handleMessage(message: { message: string, source: string }, isVoice: boolean) {\n const parsed = parseVoiceMessage(message)\n if (parsed) {\n this.addMessage(parsed.text, parsed.sender)\n if (!isVoice && parsed.sender === 'agent') {\n this.updateState(this.textState, { isThinking: false })\n }\n\n // Save message to database if we have participant IDs\n if (this.sessionId && this.hostParticipantId && this.visitorParticipantId) {\n const participantId = parsed.sender === 'agent' ? this.hostParticipantId : this.visitorParticipantId\n const { sdk } = this.settings\n\n sdk.saveMessage({\n conversationId: this.sessionId,\n participantId,\n content: parsed.text,\n role: parsed.sender === 'agent' ? 'agent' : 'user',\n }).catch((err) => {\n this.logger.warn('Failed to save message', { error: err })\n })\n }\n }\n }\n\n private handleError(error: unknown, isVoice: boolean) {\n const message = (error as Error).message\n this.logger.error('Conversation error:', error)\n\n this.resetState(isVoice)\n if (isVoice) {\n this.updateState(this.voiceState, {\n error: message,\n connectionStatus: 'error',\n transcript: 'Failed to start call.',\n })\n } else {\n this.updateState(this.textState, {\n error: message,\n connectionStatus: 'error',\n })\n }\n }\n\n async setMode(mode: AgentMode) {\n if (this.agentMode.value !== mode) {\n this.agentMode.value = mode\n }\n }\n\n async startVoiceConversation(callbacks: AgentCallbacks = {}) {\n // Prevent double calls\n if (this.isConnecting) {\n this.logger.info('Voice conversation already connecting, ignoring duplicate request')\n return\n }\n\n this.isConnecting = true\n this.isTextMode = false\n this.updateState(this.voiceState, {\n isActive: true,\n transcript: 'Connecting...',\n connectionStatus: 'connecting',\n })\n\n if (!(await this.clientAudio.requestMicrophonePermission())) {\n this.isConnecting = false\n this.updateState(this.voiceState, {\n isActive: false,\n error: 'Microphone permission required',\n transcript: 'Failed to get microphone permission',\n connectionStatus: 'error',\n })\n throw new Error('Microphone permission required')\n }\n\n // Start simple session tracking\n await this.startSession('voice')\n\n const dynamicSettings = this.getDynamicSettings()\n const agentId = this.settings.self.elevenlabsAgentId!\n this.logger.info('Starting voice conversation...', { agentId, dynamicSettings })\n\n try {\n this.conversation = await Conversation.startSession({\n agentId,\n connectionType: 'websocket',\n ...dynamicSettings,\n onConnect: () => {\n this.isConnecting = false\n this.clientAudio.startAudioLevelMonitoring(() => this.isVoiceConnected())\n this.updateState(this.voiceState, {\n isConnected: true,\n isListening: true,\n transcript: 'Connected! Start speaking...',\n connectionStatus: 'connected',\n })\n callbacks.onConnect?.()\n\n if (callbacks.onAudioLevel) {\n this.unwatchAudio = watch(this.audioLevels, callbacks.onAudioLevel, { immediate: true })\n }\n },\n onDisconnect: () => {\n this.logger.info('Voice conversation disconnected')\n this.conversation = undefined\n this.clientAudio.stopAudioLevelMonitoring()\n\n // End session tracking\n this.endSession().catch((error) => console.error('Failed to end session:', error))\n\n this.resetState(false)\n callbacks.onDisconnect?.()\n },\n onError: (msg: string) => {\n // Enhanced error message for common ElevenLabs issues\n let errorMessage = msg\n if (msg.includes('does not exist')) {\n errorMessage = `Agent not found: ${this.settings.self.elevenlabsAgentId}. Check ElevenLabs configuration.`\n } else if (msg.includes('limit') || msg.includes('quota')) {\n errorMessage = `ElevenLabs account limit reached. Check your subscription and usage.`\n } else if (msg.includes('unauthorized') || msg.includes('invalid')) {\n errorMessage = `ElevenLabs API authentication failed. Check ELEVENLABS_API_KEY.`\n }\n\n // End session tracking on error\n this.endSession().catch((error) => console.error('Failed to end session:', error))\n\n this.handleError(new Error(errorMessage), true)\n callbacks.onError?.(new Error(errorMessage))\n },\n onModeChange: (mode: { mode: string }) => {\n const isSpeaking = mode.mode === 'speaking'\n this.updateState(this.voiceState, {\n isSpeaking,\n isListening: !isSpeaking,\n transcript: isSpeaking ? 'Agent is speaking...' : 'Listening for your voice...',\n })\n callbacks.onModeChange?.(mode.mode)\n },\n onMessage: (message: any) => {\n this.handleMessage(message, true)\n callbacks.onMessage?.(message)\n },\n })\n } catch (error) {\n this.isConnecting = false\n // End session tracking on error\n this.endSession().catch((error) => console.error('Failed to end session:', error))\n this.handleError(error, true)\n throw error\n }\n }\n\n async startTextConversation(callbacks: AgentCallbacks = {}) {\n if (this.isConnecting) {\n this.logger.info('Text conversation already connecting, ignoring duplicate request')\n return\n }\n\n this.isConnecting = true\n this.isTextMode = true\n this.updateState(this.textState, { isActive: true, connectionStatus: 'connecting' })\n\n // Start simple session tracking\n await this.startSession('chat')\n\n try {\n this.conversation = await Conversation.startSession({\n agentId: this.settings.self.elevenlabsAgentId!,\n connectionType: 'websocket',\n ...this.getDynamicSettings(),\n textOnly: true,\n onConnect: () => {\n this.isConnecting = false\n this.updateState(this.textState, { isConnected: true, connectionStatus: 'connected' })\n callbacks.onConnect?.()\n },\n onDisconnect: () => {\n this.conversation = undefined\n\n // End session tracking\n this.endSession().catch((error) => console.error('Failed to end session:', error))\n\n this.resetState(true)\n callbacks.onDisconnect?.()\n },\n onError: (msg: string) => {\n // Enhanced error message for common ElevenLabs issues\n let errorMessage = msg\n if (msg.includes('does not exist')) {\n errorMessage = `Agent not found: ${this.settings.self.elevenlabsAgentId}. Check ElevenLabs configuration.`\n } else if (msg.includes('limit') || msg.includes('quota')) {\n errorMessage = `ElevenLabs account limit reached. Check your subscription and usage.`\n } else if (msg.includes('unauthorized') || msg.includes('invalid')) {\n errorMessage = `ElevenLabs API authentication failed. Check ELEVENLABS_API_KEY.`\n }\n\n // End session tracking on error\n this.endSession().catch((error) => console.error('Failed to end session:', error))\n\n this.handleError(new Error(errorMessage), false)\n callbacks.onError?.(new Error(errorMessage))\n },\n onModeChange: (mode: { mode: string }) => {\n callbacks.onModeChange?.(mode.mode)\n },\n onMessage: (messageArgs: any) => {\n this.handleMessage(messageArgs, false)\n callbacks.onMessage?.(messageArgs)\n },\n })\n } catch (error) {\n this.isConnecting = false\n // End session tracking on error\n this.endSession().catch((error) => console.error('Failed to end session:', error))\n this.handleError(error, false)\n throw error\n }\n }\n\n async endConversation() {\n if (!this.conversation) {\n this.resetState(this.isTextMode)\n // Ensure microphone is stopped even if no active conversation\n await this.clientAudio.stopMicrophone()\n return\n }\n\n try {\n await this.conversation.endSession()\n } finally {\n this.conversation = undefined\n this.unwatchAudio?.()\n this.unwatchAudio = undefined\n this.resetState(this.isTextMode)\n this.isTextMode = false\n // Stop microphone on all exit paths\n await this.clientAudio.stopMicrophone()\n }\n }\n\n async sendChatMessage(message: string) {\n if (!this.conversation || !this.isTextMode)\n return\n\n this.addMessage(message, 'user')\n\n // Track chat characters\n this.chatCharacterCount += message.length\n\n try {\n this.updateState(this.textState, { isThinking: true })\n this.conversation.sendUserMessage(message)\n } catch (error) {\n this.handleError(error, false)\n }\n }\n\n isConnected(): boolean {\n return !!this.conversation\n }\n\n isVoiceConnected(): boolean {\n return this.isConnected() && !this.isTextMode\n }\n\n isTextConnected(): boolean {\n return this.isConnected() && this.isTextMode\n }\n\n async destroy() {\n await this.endConversation()\n await this.clientAudio.cleanup()\n\n // End any active session tracking\n this.endSession().catch((error) => console.error('Failed to end session:', error))\n }\n\n // Simple session tracking - minimal implementation\n private async startSession(type: 'voice' | 'chat') {\n const { self, sdk } = this.settings\n this.conversationStartTime = new Date()\n this.chatCharacterCount = 0\n\n // Start conversation using SDK method (auto-creates conversation record)\n if (self.selfId && self.orgId) {\n const anonId = sdk.activeUser.value?.userId ? undefined : sdk.generateAnonId()\n const conversationData = await sdk.startConversation({\n selfId: self.selfId,\n userId: sdk.activeUser.value?.userId,\n anonId,\n })\n\n if (conversationData) {\n this.sessionId = conversationData.conversationId\n this.hostParticipantId = conversationData.hostParticipantId\n this.visitorParticipantId = conversationData.visitorParticipantId\n this.logger.info('Started conversation session', {\n sessionId: this.sessionId,\n type,\n userId: sdk.activeUser.value?.userId,\n anonId,\n hostParticipantId: this.hostParticipantId,\n visitorParticipantId: this.visitorParticipantId,\n })\n return\n }\n }\n\n // Fallback to simple sessionId if conversation creation fails\n this.sessionId = objectId()\n this.logger.info('Started conversation session (fallback)', {\n sessionId: this.sessionId,\n type,\n })\n }\n\n private async endSession() {\n if (!this.sessionId || !this.conversationStartTime)\n return\n\n const { self, sdk } = this.settings\n\n // Only record if we have the required context\n if (!self.orgId || !sdk.activeUser.value?.userId) {\n this.logger.info('No org/user context - skipping usage recording')\n this.resetSession()\n return\n }\n\n const duration = Math.round((Date.now() - this.conversationStartTime.getTime()) / 1000)\n const sessionType = this.isTextMode ? 'chat' : 'voice'\n const quantity = sessionType === 'voice' ? duration : this.chatCharacterCount\n\n // Validate selfId exists\n if (!self.selfId) {\n this.logger.warn('Cannot track usage: selfId is undefined')\n this.resetSession()\n return\n }\n\n // Use SDK method - handles orgId derivation, sessionId, and auth\n const success = await sdk.trackUsage({\n selfId: self.selfId,\n type: sessionType,\n quantity,\n participantId: sdk.activeUser.value?.userId, // Track authenticated user\n })\n\n if (success) {\n this.logger.info('Recorded usage', {\n sessionId: this.sessionId,\n type: sessionType,\n quantity,\n duration,\n })\n } else {\n this.logger.warn('Failed to record usage - continuing normally')\n }\n\n this.resetSession()\n }\n\n private resetSession() {\n this.sessionId = undefined\n this.conversationStartTime = undefined\n this.chatCharacterCount = 0\n }\n}\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ntype ButtonTheme = 'primary' | 'green' | 'red' | 'default'\ntype ButtonSize = 'sm' | 'md' | 'lg'\n\nconst {\n theme = 'primary',\n size = 'lg',\n loading = false,\n icon,\n iconAfter,\n} = defineProps<{\n theme?: ButtonTheme\n size?: ButtonSize\n loading?: boolean\n icon?: string\n iconAfter?: string\n}>()\n\n// Overlay-optimized themes (bright colors that pop against dark backgrounds)\n// 'primary' uses CSS variables set by parent component's theme\n// 'green' and 'rose' use standard Tailwind colors for UI conventions (start/end call)\nconst themeClasses = computed(() => {\n const themes = {\n primary: 'bg-primary-600 border-primary-400 hover:border-primary-300 hover:bg-primary-500',\n green: 'bg-green-600 border-green-400 hover:border-green-300 hover:bg-green-500',\n red: 'bg-red-600 border-red-400 hover:border-red-300 hover:bg-red-500',\n default: 'bg-white/10 border-white/20 hover:border-white/40 hover:bg-white/20',\n }\n return themes[theme]\n})\n\nconst sizeClasses = computed(() => {\n const sizes = {\n sm: 'px-4 py-2 text-sm',\n md: 'px-6 py-3 text-base',\n lg: 'px-8 py-4 text-base',\n }\n return sizes[size]\n})\n\nconst iconSizeClasses = computed(() => {\n const sizes = {\n sm: 'size-4',\n md: 'size-4',\n lg: 'size-5',\n }\n return sizes[size]\n})\n</script>\n\n<template>\n <button\n class=\"relative inline-flex items-center justify-center gap-2 font-medium rounded-full backdrop-blur-sm border-2 text-white transition-all duration-200 focus:outline-none active:opacity-80 disabled:opacity-50 disabled:cursor-not-allowed cursor-pointer\"\n :class=\"[themeClasses, sizeClasses]\"\n >\n <!-- Loading spinner overlay -->\n <div\n v-if=\"loading\"\n class=\"absolute inset-0 flex items-center justify-center\"\n >\n <i class=\"i-svg-spinners-90-ring-with-bg size-5\" />\n </div>\n\n <!-- Button content -->\n <span\n class=\"flex items-center gap-2 transition-opacity duration-200\"\n :class=\"loading ? 'opacity-0' : 'opacity-100'\"\n >\n <i v-if=\"icon\" :class=\"[icon, iconSizeClasses]\" />\n <slot />\n <i v-if=\"iconAfter\" :class=\"[iconAfter, iconSizeClasses]\" />\n </span>\n </button>\n</template>\n","<script setup lang=\"ts\">\nconst { modelValue = '' } = defineProps<{ modelValue?: string }>()\nconst emit = defineEmits<{ (event: 'update:modelValue', value: string): void }>()\n</script>\n\n<template>\n <input\n type=\"email\"\n autocomplete=\"email\"\n placeholder=\"Enter Your Email\"\n :value=\"modelValue\"\n class=\"w-full px-6 py-3 text-white/90 placeholder-white/40 bg-white/5 border-2 border-white/50 backdrop-blur-md rounded-full focus:outline-none focus:border-white/60 focus:bg-white/0 transition-colors\"\n style=\"font-size: 16px\"\n @input=\"emit('update:modelValue', ($event.target as HTMLInputElement).value)\"\n />\n</template>\n","<script setup lang=\"ts\">\nimport { onMounted, ref, watch } from 'vue'\n\nconst props = defineProps<{\n modelValue: string\n length: number\n focusFirst?: boolean\n}>()\n\nconst emit = defineEmits<{\n (event: 'update:modelValue', value: string): void\n (event: 'autoSubmit', value: string): void\n}>()\n\nconst inputs = ref<(HTMLInputElement | null)[]>([])\nconst values = ref<string[]>(Array.from({ length: props.length }).fill('') as string[])\nconst justPasted = ref(false)\n\nonMounted(() => {\n if (props.modelValue)\n values.value = props.modelValue.split('').slice(0, props.length)\n\n if (props.focusFirst && !('ontouchstart' in window))\n inputs.value[0]?.focus()\n})\n\nwatch(() => props.modelValue, (v) => {\n values.value = v ? v.split('').slice(0, props.length) : Array.from({ length: props.length }).fill('') as string[]\n})\n\nwatch(values, () => {\n const v = values.value.filter(Boolean).join('')\n emit('update:modelValue', v)\n if (v.length === props.length)\n emit('autoSubmit', v)\n}, { deep: true })\n\nfunction onPaste(i: number, e: ClipboardEvent) {\n e.preventDefault()\n justPasted.value = true\n\n const nums = (e.clipboardData?.getData('text') || '').replace(/\\D/g, '')\n\n if (nums.length === props.length) {\n values.value = nums.split('')\n // Focus after values are set, using nextTick-like delay\n setTimeout(() => {\n inputs.value[props.length - 1]?.focus()\n justPasted.value = false\n }, 10)\n } else {\n const newValues = [...values.value]\n nums.split('').slice(0, props.length - i).forEach((c, idx) => {\n newValues[i + idx] = c\n })\n values.value = newValues\n const nextPos = Math.min(i + nums.length, props.length - 1)\n setTimeout(() => {\n inputs.value[nextPos]?.focus()\n justPasted.value = false\n }, 10)\n }\n}\n\nfunction onInput(i: number, e: Event) {\n const val = (e.target as HTMLInputElement).value.slice(-1).replace(/\\D/g, '')\n values.value[i] = val\n if (val && i < props.length - 1)\n inputs.value[i + 1]?.focus()\n}\n\nfunction onKeydown(i: number, e: KeyboardEvent) {\n if (e.key === 'Backspace') {\n e.preventDefault()\n values.value[i] = ''\n if (i > 0)\n inputs.value[i - 1]?.focus()\n } else if (e.key === 'ArrowLeft' && i > 0) {\n inputs.value[i - 1]?.focus()\n } else if (e.key === 'ArrowRight' && i < props.length - 1) {\n inputs.value[i + 1]?.focus()\n }\n}\n\nfunction onFocus(i: number) {\n inputs.value[i]?.select()\n\n // Don't clear values if we just pasted\n if (justPasted.value)\n return\n\n if (values.value[i]) {\n for (let idx = i; idx < props.length; idx++)\n values.value[idx] = ''\n }\n}\n</script>\n\n<template>\n <div class=\"flex gap-2 justify-center\">\n <input\n v-for=\"i in length\"\n :key=\"i\"\n :ref=\"el => inputs[i - 1] = el as HTMLInputElement\"\n v-model=\"values[i - 1]\"\n type=\"text\"\n inputmode=\"numeric\"\n autocomplete=\"one-time-code\"\n class=\"size-12 text-center font-mono text-white/90 bg-white/5 border border-white/10 rounded-lg focus:outline-none focus:border-white/30 focus:bg-white/10 transition-colors\"\n style=\"font-size: 16px\"\n maxlength=\"1\"\n @input=\"onInput(i - 1, $event)\"\n @keydown=\"onKeydown(i - 1, $event)\"\n @paste=\"onPaste(i - 1, $event as ClipboardEvent)\"\n @focus=\"onFocus(i - 1)\"\n />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { FictionSDK } from '../../sdkClient'\nimport { computed, onMounted, ref } from 'vue'\nimport ElSelfButton from './ElSelfButton.vue'\nimport SelfInputEmail from './SelfInputEmail.vue'\nimport SelfInputOneTimeCode from './SelfInputOneTimeCode.vue'\n\nconst { sdk } = defineProps<{ sdk: FictionSDK }>()\n\nconst form = ref({ email: '', code: '' })\nconst step = ref<'email' | 'code'>('email')\n\nonMounted(async () => {\n if (sdk.token.value)\n await sdk.getCurrentUser()\n})\n\n// Engine array for step configuration\nconst stepConfig = {\n email: {\n title: 'Continue with Email',\n button: { label: 'Continue', disabled: () => !form.value.email },\n action: async () => {\n const success = await sdk.requestAuthCode({ email: form.value.email })\n if (success)\n step.value = 'code'\n },\n },\n code: {\n title: 'Enter Code',\n button: { label: 'Verify', disabled: () => form.value.code.length !== 6 },\n action: () => sdk.loginWithCode({ email: form.value.email, code: form.value.code }),\n },\n}\n\nconst currentStep = computed(() => stepConfig[step.value])\n</script>\n\n<template>\n <div class=\"flex flex-col items-center justify-center h-full p-6\">\n <div class=\"w-full max-w-xs space-y-12\">\n <p v-if=\"sdk.error.value\" class=\"text-xs text-red-400 text-center\">\n {{ sdk.error.value }}\n </p>\n\n <h3 class=\"text-lg font-light text-white text-center\">\n {{ currentStep.title }}\n </h3>\n\n <div class=\"space-y-6\">\n <SelfInputEmail\n v-if=\"step === 'email'\"\n v-model=\"form.email\"\n @keyup.enter=\"currentStep.action\"\n />\n <SelfInputOneTimeCode\n v-else\n v-model=\"form.code\"\n :length=\"6\"\n :focus-first=\"true\"\n @auto-submit=\"currentStep.action\"\n />\n\n <div class=\"space-y-4\">\n <ElSelfButton\n theme=\"primary\"\n size=\"md\"\n class=\"w-full\"\n :loading=\"sdk.loading.value\"\n :disabled=\"currentStep.button.disabled() || sdk.loading.value\"\n @click=\"currentStep.action\"\n >\n {{ currentStep.button.label }}\n </ElSelfButton>\n\n <button\n v-if=\"step === 'code'\"\n class=\"w-full text-xs text-white/50 hover:text-white/70 transition-colors py-2\"\n @click=\"step = 'email'\"\n >\n Change Email\n </button>\n </div>\n </div>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { Self } from '@/modules/self/schema'\nimport { getFallbackAvatarDataUrl, handleImageError } from '../utils'\n\ninterface Props {\n self: Self\n size?: 'md' | 'lg'\n showOnlineIndicator?: boolean\n layout?: 'centered' | 'horizontal'\n}\n\nconst {\n self,\n size = 'md',\n showOnlineIndicator = true,\n layout = 'centered',\n} = defineProps<Props>()\n\nfunction getAvatarSrc(): string {\n if (self.avatar?.src) {\n return self.avatar.src\n }\n return getFallbackAvatarDataUrl()\n}\n</script>\n\n<template>\n <div\n class=\"flex gap-4\"\n :class=\"[\n layout === 'centered' ? 'flex-col items-center text-center' : 'flex-row items-center justify-center',\n ]\"\n >\n <!-- Avatar with online indicator -->\n <div class=\"relative flex-shrink-0\">\n <div\n class=\"rounded-full overflow-hidden border-white\"\n :class=\"size === 'lg' ? 'w-20 h-20 sm:w-24 sm:h-24 border-4' : 'w-16 sm:size-16 border-2'\"\n >\n <img\n :src=\"getAvatarSrc()\"\n :alt=\"self.name\"\n class=\"w-full h-full object-cover\"\n @error=\"handleImageError\"\n />\n </div>\n <!-- Online indicator -->\n <div v-if=\"showOnlineIndicator\" class=\"absolute top-1 right-1\">\n <div class=\"size-3 bg-green-500 rounded-full ring-2 ring-white absolute animate-ping\" style=\"animation-duration: 3s;\" />\n <div class=\"size-3 bg-green-500 rounded-full ring-2 ring-white\" />\n </div>\n </div>\n\n <!-- Name and title -->\n <div class=\"min-w-0\">\n <h1\n class=\"font-light text-white mb-1 truncate\"\n :class=\"[\n size === 'lg' ? 'text-3xl mb-2' : 'text-xl sm:text-2xl tracking-wide leading-tight',\n layout === 'horizontal' ? 'text-white/95' : '',\n ]\"\n >\n {{ self.name }}\n </h1>\n <p\n class=\"font-light line-clamp-1\"\n :class=\"[\n size === 'lg' ? 'text-base text-white/60' : 'text-sm sm:text-base',\n layout === 'horizontal' ? 'text-white/70 truncate' : 'text-white/60',\n ]\"\n >\n {{ layout === 'horizontal' ? (self.title || 'Digital Self') : self.title }}\n </p>\n </div>\n </div>\n</template>\n","const CLASS_PART_SEPARATOR = '-';\nconst createClassGroupUtils = config => {\n const classMap = createClassMap(config);\n const {\n conflictingClassGroups,\n conflictingClassGroupModifiers\n } = config;\n const getClassGroupId = className => {\n const classParts = className.split(CLASS_PART_SEPARATOR);\n // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and remove it from classParts.\n if (classParts[0] === '' && classParts.length !== 1) {\n classParts.shift();\n }\n return getGroupRecursive(classParts, classMap) || getGroupIdForArbitraryProperty(className);\n };\n const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier) => {\n const conflicts = conflictingClassGroups[classGroupId] || [];\n if (hasPostfixModifier && conflictingClassGroupModifiers[classGroupId]) {\n return [...conflicts, ...conflictingClassGroupModifiers[classGroupId]];\n }\n return conflicts;\n };\n return {\n getClassGroupId,\n getConflictingClassGroupIds\n };\n};\nconst getGroupRecursive = (classParts, classPartObject) => {\n if (classParts.length === 0) {\n return classPartObject.classGroupId;\n }\n const currentClassPart = classParts[0];\n const nextClassPartObject = classPartObject.nextPart.get(currentClassPart);\n const classGroupFromNextClassPart = nextClassPartObject ? getGroupRecursive(classParts.slice(1), nextClassPartObject) : undefined;\n if (classGroupFromNextClassPart) {\n return classGroupFromNextClassPart;\n }\n if (classPartObject.validators.length === 0) {\n return undefined;\n }\n const classRest = classParts.join(CLASS_PART_SEPARATOR);\n return classPartObject.validators.find(({\n validator\n }) => validator(classRest))?.classGroupId;\n};\nconst arbitraryPropertyRegex = /^\\[(.+)\\]$/;\nconst getGroupIdForArbitraryProperty = className => {\n if (arbitraryPropertyRegex.test(className)) {\n const arbitraryPropertyClassName = arbitraryPropertyRegex.exec(className)[1];\n const property = arbitraryPropertyClassName?.substring(0, arbitraryPropertyClassName.indexOf(':'));\n if (property) {\n // I use two dots here because one dot is used as prefix for class groups in plugins\n return 'arbitrary..' + property;\n }\n }\n};\n/**\n * Exported for testing only\n */\nconst createClassMap = config => {\n const {\n theme,\n classGroups\n } = config;\n const classMap = {\n nextPart: new Map(),\n validators: []\n };\n for (const classGroupId in classGroups) {\n processClassesRecursively(classGroups[classGroupId], classMap, classGroupId, theme);\n }\n return classMap;\n};\nconst processClassesRecursively = (classGroup, classPartObject, classGroupId, theme) => {\n classGroup.forEach(classDefinition => {\n if (typeof classDefinition === 'string') {\n const classPartObjectToEdit = classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition);\n classPartObjectToEdit.classGroupId = classGroupId;\n return;\n }\n if (typeof classDefinition === 'function') {\n if (isThemeGetter(classDefinition)) {\n processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme);\n return;\n }\n classPartObject.validators.push({\n validator: classDefinition,\n classGroupId\n });\n return;\n }\n Object.entries(classDefinition).forEach(([key, classGroup]) => {\n processClassesRecursively(classGroup, getPart(classPartObject, key), classGroupId, theme);\n });\n });\n};\nconst getPart = (classPartObject, path) => {\n let currentClassPartObject = classPartObject;\n path.split(CLASS_PART_SEPARATOR).forEach(pathPart => {\n if (!currentClassPartObject.nextPart.has(pathPart)) {\n currentClassPartObject.nextPart.set(pathPart, {\n nextPart: new Map(),\n validators: []\n });\n }\n currentClassPartObject = currentClassPartObject.nextPart.get(pathPart);\n });\n return currentClassPartObject;\n};\nconst isThemeGetter = func => func.isThemeGetter;\n\n// LRU cache inspired from hashlru (https://github.com/dominictarr/hashlru/blob/v1.0.4/index.js) but object replaced with Map to improve performance\nconst createLruCache = maxCacheSize => {\n if (maxCacheSize < 1) {\n return {\n get: () => undefined,\n set: () => {}\n };\n }\n let cacheSize = 0;\n let cache = new Map();\n let previousCache = new Map();\n const update = (key, value) => {\n cache.set(key, value);\n cacheSize++;\n if (cacheSize > maxCacheSize) {\n cacheSize = 0;\n previousCache = cache;\n cache = new Map();\n }\n };\n return {\n get(key) {\n let value = cache.get(key);\n if (value !== undefined) {\n return value;\n }\n if ((value = previousCache.get(key)) !== undefined) {\n update(key, value);\n return value;\n }\n },\n set(key, value) {\n if (cache.has(key)) {\n cache.set(key, value);\n } else {\n update(key, value);\n }\n }\n };\n};\nconst IMPORTANT_MODIFIER = '!';\nconst MODIFIER_SEPARATOR = ':';\nconst MODIFIER_SEPARATOR_LENGTH = MODIFIER_SEPARATOR.length;\nconst createParseClassName = config => {\n const {\n prefix,\n experimentalParseClassName\n } = config;\n /**\n * Parse class name into parts.\n *\n * Inspired by `splitAtTopLevelOnly` used in Tailwind CSS\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\n */\n let parseClassName = className => {\n const modifiers = [];\n let bracketDepth = 0;\n let parenDepth = 0;\n let modifierStart = 0;\n let postfixModifierPosition;\n for (let index = 0; index < className.length; index++) {\n let currentCharacter = className[index];\n if (bracketDepth === 0 && parenDepth === 0) {\n if (currentCharacter === MODIFIER_SEPARATOR) {\n modifiers.push(className.slice(modifierStart, index));\n modifierStart = index + MODIFIER_SEPARATOR_LENGTH;\n continue;\n }\n if (currentCharacter === '/') {\n postfixModifierPosition = index;\n continue;\n }\n }\n if (currentCharacter === '[') {\n bracketDepth++;\n } else if (currentCharacter === ']') {\n bracketDepth--;\n } else if (currentCharacter === '(') {\n parenDepth++;\n } else if (currentCharacter === ')') {\n parenDepth--;\n }\n }\n const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.substring(modifierStart);\n const baseClassName = stripImportantModifier(baseClassNameWithImportantModifier);\n const hasImportantModifier = baseClassName !== baseClassNameWithImportantModifier;\n const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : undefined;\n return {\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition\n };\n };\n if (prefix) {\n const fullPrefix = prefix + MODIFIER_SEPARATOR;\n const parseClassNameOriginal = parseClassName;\n parseClassName = className => className.startsWith(fullPrefix) ? parseClassNameOriginal(className.substring(fullPrefix.length)) : {\n isExternal: true,\n modifiers: [],\n hasImportantModifier: false,\n baseClassName: className,\n maybePostfixModifierPosition: undefined\n };\n }\n if (experimentalParseClassName) {\n const parseClassNameOriginal = parseClassName;\n parseClassName = className => experimentalParseClassName({\n className,\n parseClassName: parseClassNameOriginal\n });\n }\n return parseClassName;\n};\nconst stripImportantModifier = baseClassName => {\n if (baseClassName.endsWith(IMPORTANT_MODIFIER)) {\n return baseClassName.substring(0, baseClassName.length - 1);\n }\n /**\n * In Tailwind CSS v3 the important modifier was at the start of the base class name. This is still supported for legacy reasons.\n * @see https://github.com/dcastil/tailwind-merge/issues/513#issuecomment-2614029864\n */\n if (baseClassName.startsWith(IMPORTANT_MODIFIER)) {\n return baseClassName.substring(1);\n }\n return baseClassName;\n};\n\n/**\n * Sorts modifiers according to following schema:\n * - Predefined modifiers are sorted alphabetically\n * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it\n */\nconst createSortModifiers = config => {\n const orderSensitiveModifiers = Object.fromEntries(config.orderSensitiveModifiers.map(modifier => [modifier, true]));\n const sortModifiers = modifiers => {\n if (modifiers.length <= 1) {\n return modifiers;\n }\n const sortedModifiers = [];\n let unsortedModifiers = [];\n modifiers.forEach(modifier => {\n const isPositionSensitive = modifier[0] === '[' || orderSensitiveModifiers[modifier];\n if (isPositionSensitive) {\n sortedModifiers.push(...unsortedModifiers.sort(), modifier);\n unsortedModifiers = [];\n } else {\n unsortedModifiers.push(modifier);\n }\n });\n sortedModifiers.push(...unsortedModifiers.sort());\n return sortedModifiers;\n };\n return sortModifiers;\n};\nconst createConfigUtils = config => ({\n cache: createLruCache(config.cacheSize),\n parseClassName: createParseClassName(config),\n sortModifiers: createSortModifiers(config),\n ...createClassGroupUtils(config)\n});\nconst SPLIT_CLASSES_REGEX = /\\s+/;\nconst mergeClassList = (classList, configUtils) => {\n const {\n parseClassName,\n getClassGroupId,\n getConflictingClassGroupIds,\n sortModifiers\n } = configUtils;\n /**\n * Set of classGroupIds in following format:\n * `{importantModifier}{variantModifiers}{classGroupId}`\n * @example 'float'\n * @example 'hover:focus:bg-color'\n * @example 'md:!pr'\n */\n const classGroupsInConflict = [];\n const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);\n let result = '';\n for (let index = classNames.length - 1; index >= 0; index -= 1) {\n const originalClassName = classNames[index];\n const {\n isExternal,\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition\n } = parseClassName(originalClassName);\n if (isExternal) {\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n let hasPostfixModifier = !!maybePostfixModifierPosition;\n let classGroupId = getClassGroupId(hasPostfixModifier ? baseClassName.substring(0, maybePostfixModifierPosition) : baseClassName);\n if (!classGroupId) {\n if (!hasPostfixModifier) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n classGroupId = getClassGroupId(baseClassName);\n if (!classGroupId) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n hasPostfixModifier = false;\n }\n const variantModifier = sortModifiers(modifiers).join(':');\n const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;\n const classId = modifierId + classGroupId;\n if (classGroupsInConflict.includes(classId)) {\n // Tailwind class omitted due to conflict\n continue;\n }\n classGroupsInConflict.push(classId);\n const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier);\n for (let i = 0; i < conflictGroups.length; ++i) {\n const group = conflictGroups[i];\n classGroupsInConflict.push(modifierId + group);\n }\n // Tailwind class not in conflict\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n }\n return result;\n};\n\n/**\n * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.\n *\n * Specifically:\n * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js\n * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts\n *\n * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n */\nfunction twJoin() {\n let index = 0;\n let argument;\n let resolvedValue;\n let string = '';\n while (index < arguments.length) {\n if (argument = arguments[index++]) {\n if (resolvedValue = toValue(argument)) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n}\nconst toValue = mix => {\n if (typeof mix === 'string') {\n return mix;\n }\n let resolvedValue;\n let string = '';\n for (let k = 0; k < mix.length; k++) {\n if (mix[k]) {\n if (resolvedValue = toValue(mix[k])) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n};\nfunction createTailwindMerge(createConfigFirst, ...createConfigRest) {\n let configUtils;\n let cacheGet;\n let cacheSet;\n let functionToCall = initTailwindMerge;\n function initTailwindMerge(classList) {\n const config = createConfigRest.reduce((previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig), createConfigFirst());\n configUtils = createConfigUtils(config);\n cacheGet = configUtils.cache.get;\n cacheSet = configUtils.cache.set;\n functionToCall = tailwindMerge;\n return tailwindMerge(classList);\n }\n function tailwindMerge(classList) {\n const cachedResult = cacheGet(classList);\n if (cachedResult) {\n return cachedResult;\n }\n const result = mergeClassList(classList, configUtils);\n cacheSet(classList, result);\n return result;\n }\n return function callTailwindMerge() {\n return functionToCall(twJoin.apply(null, arguments));\n };\n}\nconst fromTheme = key => {\n const themeGetter = theme => theme[key] || [];\n themeGetter.isThemeGetter = true;\n return themeGetter;\n};\nconst arbitraryValueRegex = /^\\[(?:(\\w[\\w-]*):)?(.+)\\]$/i;\nconst arbitraryVariableRegex = /^\\((?:(\\w[\\w-]*):)?(.+)\\)$/i;\nconst fractionRegex = /^\\d+\\/\\d+$/;\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/;\nconst lengthUnitRegex = /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/;\nconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\\(.+\\)$/;\n// Shadow always begins with x and y offset separated by underscore optionally prepended by inset\nconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/;\nconst imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/;\nconst isFraction = value => fractionRegex.test(value);\nconst isNumber = value => !!value && !Number.isNaN(Number(value));\nconst isInteger = value => !!value && Number.isInteger(Number(value));\nconst isPercent = value => value.endsWith('%') && isNumber(value.slice(0, -1));\nconst isTshirtSize = value => tshirtUnitRegex.test(value);\nconst isAny = () => true;\nconst isLengthOnly = value =>\n// `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\n// For example, `hsl(0 0% 0%)` would be classified as a length without this check.\n// I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\nlengthUnitRegex.test(value) && !colorFunctionRegex.test(value);\nconst isNever = () => false;\nconst isShadow = value => shadowRegex.test(value);\nconst isImage = value => imageRegex.test(value);\nconst isAnyNonArbitrary = value => !isArbitraryValue(value) && !isArbitraryVariable(value);\nconst isArbitrarySize = value => getIsArbitraryValue(value, isLabelSize, isNever);\nconst isArbitraryValue = value => arbitraryValueRegex.test(value);\nconst isArbitraryLength = value => getIsArbitraryValue(value, isLabelLength, isLengthOnly);\nconst isArbitraryNumber = value => getIsArbitraryValue(value, isLabelNumber, isNumber);\nconst isArbitraryPosition = value => getIsArbitraryValue(value, isLabelPosition, isNever);\nconst isArbitraryImage = value => getIsArbitraryValue(value, isLabelImage, isImage);\nconst isArbitraryShadow = value => getIsArbitraryValue(value, isLabelShadow, isShadow);\nconst isArbitraryVariable = value => arbitraryVariableRegex.test(value);\nconst isArbitraryVariableLength = value => getIsArbitraryVariable(value, isLabelLength);\nconst isArbitraryVariableFamilyName = value => getIsArbitraryVariable(value, isLabelFamilyName);\nconst isArbitraryVariablePosition = value => getIsArbitraryVariable(value, isLabelPosition);\nconst isArbitraryVariableSize = value => getIsArbitraryVariable(value, isLabelSize);\nconst isArbitraryVariableImage = value => getIsArbitraryVariable(value, isLabelImage);\nconst isArbitraryVariableShadow = value => getIsArbitraryVariable(value, isLabelShadow, true);\n// Helpers\nconst getIsArbitraryValue = (value, testLabel, testValue) => {\n const result = arbitraryValueRegex.exec(value);\n if (result) {\n if (result[1]) {\n return testLabel(result[1]);\n }\n return testValue(result[2]);\n }\n return false;\n};\nconst getIsArbitraryVariable = (value, testLabel, shouldMatchNoLabel = false) => {\n const result = arbitraryVariableRegex.exec(value);\n if (result) {\n if (result[1]) {\n return testLabel(result[1]);\n }\n return shouldMatchNoLabel;\n }\n return false;\n};\n// Labels\nconst isLabelPosition = label => label === 'position' || label === 'percentage';\nconst isLabelImage = label => label === 'image' || label === 'url';\nconst isLabelSize = label => label === 'length' || label === 'size' || label === 'bg-size';\nconst isLabelLength = label => label === 'length';\nconst isLabelNumber = label => label === 'number';\nconst isLabelFamilyName = label => label === 'family-name';\nconst isLabelShadow = label => label === 'shadow';\nconst validators = /*#__PURE__*/Object.defineProperty({\n __proto__: null,\n isAny,\n isAnyNonArbitrary,\n isArbitraryImage,\n isArbitraryLength,\n isArbitraryNumber,\n isArbitraryPosition,\n isArbitraryShadow,\n isArbitrarySize,\n isArbitraryValue,\n isArbitraryVariable,\n isArbitraryVariableFamilyName,\n isArbitraryVariableImage,\n isArbitraryVariableLength,\n isArbitraryVariablePosition,\n isArbitraryVariableShadow,\n isArbitraryVariableSize,\n isFraction,\n isInteger,\n isNumber,\n isPercent,\n isTshirtSize\n}, Symbol.toStringTag, {\n value: 'Module'\n});\nconst getDefaultConfig = () => {\n /**\n * Theme getters for theme variable namespaces\n * @see https://tailwindcss.com/docs/theme#theme-variable-namespaces\n */\n /***/\n const themeColor = fromTheme('color');\n const themeFont = fromTheme('font');\n const themeText = fromTheme('text');\n const themeFontWeight = fromTheme('font-weight');\n const themeTracking = fromTheme('tracking');\n const themeLeading = fromTheme('leading');\n const themeBreakpoint = fromTheme('breakpoint');\n const themeContainer = fromTheme('container');\n const themeSpacing = fromTheme('spacing');\n const themeRadius = fromTheme('radius');\n const themeShadow = fromTheme('shadow');\n const themeInsetShadow = fromTheme('inset-shadow');\n const themeTextShadow = fromTheme('text-shadow');\n const themeDropShadow = fromTheme('drop-shadow');\n const themeBlur = fromTheme('blur');\n const themePerspective = fromTheme('perspective');\n const themeAspect = fromTheme('aspect');\n const themeEase = fromTheme('ease');\n const themeAnimate = fromTheme('animate');\n /**\n * Helpers to avoid repeating the same scales\n *\n * We use functions that create a new array every time they're called instead of static arrays.\n * This ensures that users who modify any scale by mutating the array (e.g. with `array.push(element)`) don't accidentally mutate arrays in other parts of the config.\n */\n /***/\n const scaleBreak = () => ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'];\n const scalePosition = () => ['center', 'top', 'bottom', 'left', 'right', 'top-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-top', 'top-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-top', 'bottom-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-bottom', 'bottom-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-bottom'];\n const scalePositionWithArbitrary = () => [...scalePosition(), isArbitraryVariable, isArbitraryValue];\n const scaleOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'];\n const scaleOverscroll = () => ['auto', 'contain', 'none'];\n const scaleUnambiguousSpacing = () => [isArbitraryVariable, isArbitraryValue, themeSpacing];\n const scaleInset = () => [isFraction, 'full', 'auto', ...scaleUnambiguousSpacing()];\n const scaleGridTemplateColsRows = () => [isInteger, 'none', 'subgrid', isArbitraryVariable, isArbitraryValue];\n const scaleGridColRowStartAndEnd = () => ['auto', {\n span: ['full', isInteger, isArbitraryVariable, isArbitraryValue]\n }, isInteger, isArbitraryVariable, isArbitraryValue];\n const scaleGridColRowStartOrEnd = () => [isInteger, 'auto', isArbitraryVariable, isArbitraryValue];\n const scaleGridAutoColsRows = () => ['auto', 'min', 'max', 'fr', isArbitraryVariable, isArbitraryValue];\n const scaleAlignPrimaryAxis = () => ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch', 'baseline', 'center-safe', 'end-safe'];\n const scaleAlignSecondaryAxis = () => ['start', 'end', 'center', 'stretch', 'center-safe', 'end-safe'];\n const scaleMargin = () => ['auto', ...scaleUnambiguousSpacing()];\n const scaleSizing = () => [isFraction, 'auto', 'full', 'dvw', 'dvh', 'lvw', 'lvh', 'svw', 'svh', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];\n const scaleColor = () => [themeColor, isArbitraryVariable, isArbitraryValue];\n const scaleBgPosition = () => [...scalePosition(), isArbitraryVariablePosition, isArbitraryPosition, {\n position: [isArbitraryVariable, isArbitraryValue]\n }];\n const scaleBgRepeat = () => ['no-repeat', {\n repeat: ['', 'x', 'y', 'space', 'round']\n }];\n const scaleBgSize = () => ['auto', 'cover', 'contain', isArbitraryVariableSize, isArbitrarySize, {\n size: [isArbitraryVariable, isArbitraryValue]\n }];\n const scaleGradientStopPosition = () => [isPercent, isArbitraryVariableLength, isArbitraryLength];\n const scaleRadius = () => [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', 'full', themeRadius, isArbitraryVariable, isArbitraryValue];\n const scaleBorderWidth = () => ['', isNumber, isArbitraryVariableLength, isArbitraryLength];\n const scaleLineStyle = () => ['solid', 'dashed', 'dotted', 'double'];\n const scaleBlendMode = () => ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity'];\n const scaleMaskImagePosition = () => [isNumber, isPercent, isArbitraryVariablePosition, isArbitraryPosition];\n const scaleBlur = () => [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeBlur, isArbitraryVariable, isArbitraryValue];\n const scaleRotate = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleScale = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleSkew = () => [isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleTranslate = () => [isFraction, 'full', ...scaleUnambiguousSpacing()];\n return {\n cacheSize: 500,\n theme: {\n animate: ['spin', 'ping', 'pulse', 'bounce'],\n aspect: ['video'],\n blur: [isTshirtSize],\n breakpoint: [isTshirtSize],\n color: [isAny],\n container: [isTshirtSize],\n 'drop-shadow': [isTshirtSize],\n ease: ['in', 'out', 'in-out'],\n font: [isAnyNonArbitrary],\n 'font-weight': ['thin', 'extralight', 'light', 'normal', 'medium', 'semibold', 'bold', 'extrabold', 'black'],\n 'inset-shadow': [isTshirtSize],\n leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose'],\n perspective: ['dramatic', 'near', 'normal', 'midrange', 'distant', 'none'],\n radius: [isTshirtSize],\n shadow: [isTshirtSize],\n spacing: ['px', isNumber],\n text: [isTshirtSize],\n 'text-shadow': [isTshirtSize],\n tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest']\n },\n classGroups: {\n // --------------\n // --- Layout ---\n // --------------\n /**\n * Aspect Ratio\n * @see https://tailwindcss.com/docs/aspect-ratio\n */\n aspect: [{\n aspect: ['auto', 'square', isFraction, isArbitraryValue, isArbitraryVariable, themeAspect]\n }],\n /**\n * Container\n * @see https://tailwindcss.com/docs/container\n * @deprecated since Tailwind CSS v4.0.0\n */\n container: ['container'],\n /**\n * Columns\n * @see https://tailwindcss.com/docs/columns\n */\n columns: [{\n columns: [isNumber, isArbitraryValue, isArbitraryVariable, themeContainer]\n }],\n /**\n * Break After\n * @see https://tailwindcss.com/docs/break-after\n */\n 'break-after': [{\n 'break-after': scaleBreak()\n }],\n /**\n * Break Before\n * @see https://tailwindcss.com/docs/break-before\n */\n 'break-before': [{\n 'break-before': scaleBreak()\n }],\n /**\n * Break Inside\n * @see https://tailwindcss.com/docs/break-inside\n */\n 'break-inside': [{\n 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column']\n }],\n /**\n * Box Decoration Break\n * @see https://tailwindcss.com/docs/box-decoration-break\n */\n 'box-decoration': [{\n 'box-decoration': ['slice', 'clone']\n }],\n /**\n * Box Sizing\n * @see https://tailwindcss.com/docs/box-sizing\n */\n box: [{\n box: ['border', 'content']\n }],\n /**\n * Display\n * @see https://tailwindcss.com/docs/display\n */\n display: ['block', 'inline-block', 'inline', 'flex', 'inline-flex', 'table', 'inline-table', 'table-caption', 'table-cell', 'table-column', 'table-column-group', 'table-footer-group', 'table-header-group', 'table-row-group', 'table-row', 'flow-root', 'grid', 'inline-grid', 'contents', 'list-item', 'hidden'],\n /**\n * Screen Reader Only\n * @see https://tailwindcss.com/docs/display#screen-reader-only\n */\n sr: ['sr-only', 'not-sr-only'],\n /**\n * Floats\n * @see https://tailwindcss.com/docs/float\n */\n float: [{\n float: ['right', 'left', 'none', 'start', 'end']\n }],\n /**\n * Clear\n * @see https://tailwindcss.com/docs/clear\n */\n clear: [{\n clear: ['left', 'right', 'both', 'none', 'start', 'end']\n }],\n /**\n * Isolation\n * @see https://tailwindcss.com/docs/isolation\n */\n isolation: ['isolate', 'isolation-auto'],\n /**\n * Object Fit\n * @see https://tailwindcss.com/docs/object-fit\n */\n 'object-fit': [{\n object: ['contain', 'cover', 'fill', 'none', 'scale-down']\n }],\n /**\n * Object Position\n * @see https://tailwindcss.com/docs/object-position\n */\n 'object-position': [{\n object: scalePositionWithArbitrary()\n }],\n /**\n * Overflow\n * @see https://tailwindcss.com/docs/overflow\n */\n overflow: [{\n overflow: scaleOverflow()\n }],\n /**\n * Overflow X\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-x': [{\n 'overflow-x': scaleOverflow()\n }],\n /**\n * Overflow Y\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-y': [{\n 'overflow-y': scaleOverflow()\n }],\n /**\n * Overscroll Behavior\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n overscroll: [{\n overscroll: scaleOverscroll()\n }],\n /**\n * Overscroll Behavior X\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-x': [{\n 'overscroll-x': scaleOverscroll()\n }],\n /**\n * Overscroll Behavior Y\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-y': [{\n 'overscroll-y': scaleOverscroll()\n }],\n /**\n * Position\n * @see https://tailwindcss.com/docs/position\n */\n position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\n /**\n * Top / Right / Bottom / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n inset: [{\n inset: scaleInset()\n }],\n /**\n * Right / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-x': [{\n 'inset-x': scaleInset()\n }],\n /**\n * Top / Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-y': [{\n 'inset-y': scaleInset()\n }],\n /**\n * Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n start: [{\n start: scaleInset()\n }],\n /**\n * End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n end: [{\n end: scaleInset()\n }],\n /**\n * Top\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n top: [{\n top: scaleInset()\n }],\n /**\n * Right\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n right: [{\n right: scaleInset()\n }],\n /**\n * Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n bottom: [{\n bottom: scaleInset()\n }],\n /**\n * Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n left: [{\n left: scaleInset()\n }],\n /**\n * Visibility\n * @see https://tailwindcss.com/docs/visibility\n */\n visibility: ['visible', 'invisible', 'collapse'],\n /**\n * Z-Index\n * @see https://tailwindcss.com/docs/z-index\n */\n z: [{\n z: [isInteger, 'auto', isArbitraryVariable, isArbitraryValue]\n }],\n // ------------------------\n // --- Flexbox and Grid ---\n // ------------------------\n /**\n * Flex Basis\n * @see https://tailwindcss.com/docs/flex-basis\n */\n basis: [{\n basis: [isFraction, 'full', 'auto', themeContainer, ...scaleUnambiguousSpacing()]\n }],\n /**\n * Flex Direction\n * @see https://tailwindcss.com/docs/flex-direction\n */\n 'flex-direction': [{\n flex: ['row', 'row-reverse', 'col', 'col-reverse']\n }],\n /**\n * Flex Wrap\n * @see https://tailwindcss.com/docs/flex-wrap\n */\n 'flex-wrap': [{\n flex: ['nowrap', 'wrap', 'wrap-reverse']\n }],\n /**\n * Flex\n * @see https://tailwindcss.com/docs/flex\n */\n flex: [{\n flex: [isNumber, isFraction, 'auto', 'initial', 'none', isArbitraryValue]\n }],\n /**\n * Flex Grow\n * @see https://tailwindcss.com/docs/flex-grow\n */\n grow: [{\n grow: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Flex Shrink\n * @see https://tailwindcss.com/docs/flex-shrink\n */\n shrink: [{\n shrink: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Order\n * @see https://tailwindcss.com/docs/order\n */\n order: [{\n order: [isInteger, 'first', 'last', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Grid Template Columns\n * @see https://tailwindcss.com/docs/grid-template-columns\n */\n 'grid-cols': [{\n 'grid-cols': scaleGridTemplateColsRows()\n }],\n /**\n * Grid Column Start / End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start-end': [{\n col: scaleGridColRowStartAndEnd()\n }],\n /**\n * Grid Column Start\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start': [{\n 'col-start': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Column End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-end': [{\n 'col-end': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Template Rows\n * @see https://tailwindcss.com/docs/grid-template-rows\n */\n 'grid-rows': [{\n 'grid-rows': scaleGridTemplateColsRows()\n }],\n /**\n * Grid Row Start / End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start-end': [{\n row: scaleGridColRowStartAndEnd()\n }],\n /**\n * Grid Row Start\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start': [{\n 'row-start': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Row End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-end': [{\n 'row-end': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Auto Flow\n * @see https://tailwindcss.com/docs/grid-auto-flow\n */\n 'grid-flow': [{\n 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense']\n }],\n /**\n * Grid Auto Columns\n * @see https://tailwindcss.com/docs/grid-auto-columns\n */\n 'auto-cols': [{\n 'auto-cols': scaleGridAutoColsRows()\n }],\n /**\n * Grid Auto Rows\n * @see https://tailwindcss.com/docs/grid-auto-rows\n */\n 'auto-rows': [{\n 'auto-rows': scaleGridAutoColsRows()\n }],\n /**\n * Gap\n * @see https://tailwindcss.com/docs/gap\n */\n gap: [{\n gap: scaleUnambiguousSpacing()\n }],\n /**\n * Gap X\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-x': [{\n 'gap-x': scaleUnambiguousSpacing()\n }],\n /**\n * Gap Y\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-y': [{\n 'gap-y': scaleUnambiguousSpacing()\n }],\n /**\n * Justify Content\n * @see https://tailwindcss.com/docs/justify-content\n */\n 'justify-content': [{\n justify: [...scaleAlignPrimaryAxis(), 'normal']\n }],\n /**\n * Justify Items\n * @see https://tailwindcss.com/docs/justify-items\n */\n 'justify-items': [{\n 'justify-items': [...scaleAlignSecondaryAxis(), 'normal']\n }],\n /**\n * Justify Self\n * @see https://tailwindcss.com/docs/justify-self\n */\n 'justify-self': [{\n 'justify-self': ['auto', ...scaleAlignSecondaryAxis()]\n }],\n /**\n * Align Content\n * @see https://tailwindcss.com/docs/align-content\n */\n 'align-content': [{\n content: ['normal', ...scaleAlignPrimaryAxis()]\n }],\n /**\n * Align Items\n * @see https://tailwindcss.com/docs/align-items\n */\n 'align-items': [{\n items: [...scaleAlignSecondaryAxis(), {\n baseline: ['', 'last']\n }]\n }],\n /**\n * Align Self\n * @see https://tailwindcss.com/docs/align-self\n */\n 'align-self': [{\n self: ['auto', ...scaleAlignSecondaryAxis(), {\n baseline: ['', 'last']\n }]\n }],\n /**\n * Place Content\n * @see https://tailwindcss.com/docs/place-content\n */\n 'place-content': [{\n 'place-content': scaleAlignPrimaryAxis()\n }],\n /**\n * Place Items\n * @see https://tailwindcss.com/docs/place-items\n */\n 'place-items': [{\n 'place-items': [...scaleAlignSecondaryAxis(), 'baseline']\n }],\n /**\n * Place Self\n * @see https://tailwindcss.com/docs/place-self\n */\n 'place-self': [{\n 'place-self': ['auto', ...scaleAlignSecondaryAxis()]\n }],\n // Spacing\n /**\n * Padding\n * @see https://tailwindcss.com/docs/padding\n */\n p: [{\n p: scaleUnambiguousSpacing()\n }],\n /**\n * Padding X\n * @see https://tailwindcss.com/docs/padding\n */\n px: [{\n px: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Y\n * @see https://tailwindcss.com/docs/padding\n */\n py: [{\n py: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Start\n * @see https://tailwindcss.com/docs/padding\n */\n ps: [{\n ps: scaleUnambiguousSpacing()\n }],\n /**\n * Padding End\n * @see https://tailwindcss.com/docs/padding\n */\n pe: [{\n pe: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Top\n * @see https://tailwindcss.com/docs/padding\n */\n pt: [{\n pt: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Right\n * @see https://tailwindcss.com/docs/padding\n */\n pr: [{\n pr: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Bottom\n * @see https://tailwindcss.com/docs/padding\n */\n pb: [{\n pb: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Left\n * @see https://tailwindcss.com/docs/padding\n */\n pl: [{\n pl: scaleUnambiguousSpacing()\n }],\n /**\n * Margin\n * @see https://tailwindcss.com/docs/margin\n */\n m: [{\n m: scaleMargin()\n }],\n /**\n * Margin X\n * @see https://tailwindcss.com/docs/margin\n */\n mx: [{\n mx: scaleMargin()\n }],\n /**\n * Margin Y\n * @see https://tailwindcss.com/docs/margin\n */\n my: [{\n my: scaleMargin()\n }],\n /**\n * Margin Start\n * @see https://tailwindcss.com/docs/margin\n */\n ms: [{\n ms: scaleMargin()\n }],\n /**\n * Margin End\n * @see https://tailwindcss.com/docs/margin\n */\n me: [{\n me: scaleMargin()\n }],\n /**\n * Margin Top\n * @see https://tailwindcss.com/docs/margin\n */\n mt: [{\n mt: scaleMargin()\n }],\n /**\n * Margin Right\n * @see https://tailwindcss.com/docs/margin\n */\n mr: [{\n mr: scaleMargin()\n }],\n /**\n * Margin Bottom\n * @see https://tailwindcss.com/docs/margin\n */\n mb: [{\n mb: scaleMargin()\n }],\n /**\n * Margin Left\n * @see https://tailwindcss.com/docs/margin\n */\n ml: [{\n ml: scaleMargin()\n }],\n /**\n * Space Between X\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x': [{\n 'space-x': scaleUnambiguousSpacing()\n }],\n /**\n * Space Between X Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x-reverse': ['space-x-reverse'],\n /**\n * Space Between Y\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y': [{\n 'space-y': scaleUnambiguousSpacing()\n }],\n /**\n * Space Between Y Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y-reverse': ['space-y-reverse'],\n // --------------\n // --- Sizing ---\n // --------------\n /**\n * Size\n * @see https://tailwindcss.com/docs/width#setting-both-width-and-height\n */\n size: [{\n size: scaleSizing()\n }],\n /**\n * Width\n * @see https://tailwindcss.com/docs/width\n */\n w: [{\n w: [themeContainer, 'screen', ...scaleSizing()]\n }],\n /**\n * Min-Width\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-w': [{\n 'min-w': [themeContainer, 'screen', /** Deprecated. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'none', ...scaleSizing()]\n }],\n /**\n * Max-Width\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-w': [{\n 'max-w': [themeContainer, 'screen', 'none', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'prose', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n {\n screen: [themeBreakpoint]\n }, ...scaleSizing()]\n }],\n /**\n * Height\n * @see https://tailwindcss.com/docs/height\n */\n h: [{\n h: ['screen', 'lh', ...scaleSizing()]\n }],\n /**\n * Min-Height\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-h': [{\n 'min-h': ['screen', 'lh', 'none', ...scaleSizing()]\n }],\n /**\n * Max-Height\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-h': [{\n 'max-h': ['screen', 'lh', ...scaleSizing()]\n }],\n // ------------------\n // --- Typography ---\n // ------------------\n /**\n * Font Size\n * @see https://tailwindcss.com/docs/font-size\n */\n 'font-size': [{\n text: ['base', themeText, isArbitraryVariableLength, isArbitraryLength]\n }],\n /**\n * Font Smoothing\n * @see https://tailwindcss.com/docs/font-smoothing\n */\n 'font-smoothing': ['antialiased', 'subpixel-antialiased'],\n /**\n * Font Style\n * @see https://tailwindcss.com/docs/font-style\n */\n 'font-style': ['italic', 'not-italic'],\n /**\n * Font Weight\n * @see https://tailwindcss.com/docs/font-weight\n */\n 'font-weight': [{\n font: [themeFontWeight, isArbitraryVariable, isArbitraryNumber]\n }],\n /**\n * Font Stretch\n * @see https://tailwindcss.com/docs/font-stretch\n */\n 'font-stretch': [{\n 'font-stretch': ['ultra-condensed', 'extra-condensed', 'condensed', 'semi-condensed', 'normal', 'semi-expanded', 'expanded', 'extra-expanded', 'ultra-expanded', isPercent, isArbitraryValue]\n }],\n /**\n * Font Family\n * @see https://tailwindcss.com/docs/font-family\n */\n 'font-family': [{\n font: [isArbitraryVariableFamilyName, isArbitraryValue, themeFont]\n }],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-normal': ['normal-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-ordinal': ['ordinal'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-slashed-zero': ['slashed-zero'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-figure': ['lining-nums', 'oldstyle-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-spacing': ['proportional-nums', 'tabular-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],\n /**\n * Letter Spacing\n * @see https://tailwindcss.com/docs/letter-spacing\n */\n tracking: [{\n tracking: [themeTracking, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Line Clamp\n * @see https://tailwindcss.com/docs/line-clamp\n */\n 'line-clamp': [{\n 'line-clamp': [isNumber, 'none', isArbitraryVariable, isArbitraryNumber]\n }],\n /**\n * Line Height\n * @see https://tailwindcss.com/docs/line-height\n */\n leading: [{\n leading: [/** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n themeLeading, ...scaleUnambiguousSpacing()]\n }],\n /**\n * List Style Image\n * @see https://tailwindcss.com/docs/list-style-image\n */\n 'list-image': [{\n 'list-image': ['none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * List Style Position\n * @see https://tailwindcss.com/docs/list-style-position\n */\n 'list-style-position': [{\n list: ['inside', 'outside']\n }],\n /**\n * List Style Type\n * @see https://tailwindcss.com/docs/list-style-type\n */\n 'list-style-type': [{\n list: ['disc', 'decimal', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Text Alignment\n * @see https://tailwindcss.com/docs/text-align\n */\n 'text-alignment': [{\n text: ['left', 'center', 'right', 'justify', 'start', 'end']\n }],\n /**\n * Placeholder Color\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://v3.tailwindcss.com/docs/placeholder-color\n */\n 'placeholder-color': [{\n placeholder: scaleColor()\n }],\n /**\n * Text Color\n * @see https://tailwindcss.com/docs/text-color\n */\n 'text-color': [{\n text: scaleColor()\n }],\n /**\n * Text Decoration\n * @see https://tailwindcss.com/docs/text-decoration\n */\n 'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],\n /**\n * Text Decoration Style\n * @see https://tailwindcss.com/docs/text-decoration-style\n */\n 'text-decoration-style': [{\n decoration: [...scaleLineStyle(), 'wavy']\n }],\n /**\n * Text Decoration Thickness\n * @see https://tailwindcss.com/docs/text-decoration-thickness\n */\n 'text-decoration-thickness': [{\n decoration: [isNumber, 'from-font', 'auto', isArbitraryVariable, isArbitraryLength]\n }],\n /**\n * Text Decoration Color\n * @see https://tailwindcss.com/docs/text-decoration-color\n */\n 'text-decoration-color': [{\n decoration: scaleColor()\n }],\n /**\n * Text Underline Offset\n * @see https://tailwindcss.com/docs/text-underline-offset\n */\n 'underline-offset': [{\n 'underline-offset': [isNumber, 'auto', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Text Transform\n * @see https://tailwindcss.com/docs/text-transform\n */\n 'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],\n /**\n * Text Overflow\n * @see https://tailwindcss.com/docs/text-overflow\n */\n 'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],\n /**\n * Text Wrap\n * @see https://tailwindcss.com/docs/text-wrap\n */\n 'text-wrap': [{\n text: ['wrap', 'nowrap', 'balance', 'pretty']\n }],\n /**\n * Text Indent\n * @see https://tailwindcss.com/docs/text-indent\n */\n indent: [{\n indent: scaleUnambiguousSpacing()\n }],\n /**\n * Vertical Alignment\n * @see https://tailwindcss.com/docs/vertical-align\n */\n 'vertical-align': [{\n align: ['baseline', 'top', 'middle', 'bottom', 'text-top', 'text-bottom', 'sub', 'super', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Whitespace\n * @see https://tailwindcss.com/docs/whitespace\n */\n whitespace: [{\n whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces']\n }],\n /**\n * Word Break\n * @see https://tailwindcss.com/docs/word-break\n */\n break: [{\n break: ['normal', 'words', 'all', 'keep']\n }],\n /**\n * Overflow Wrap\n * @see https://tailwindcss.com/docs/overflow-wrap\n */\n wrap: [{\n wrap: ['break-word', 'anywhere', 'normal']\n }],\n /**\n * Hyphens\n * @see https://tailwindcss.com/docs/hyphens\n */\n hyphens: [{\n hyphens: ['none', 'manual', 'auto']\n }],\n /**\n * Content\n * @see https://tailwindcss.com/docs/content\n */\n content: [{\n content: ['none', isArbitraryVariable, isArbitraryValue]\n }],\n // -------------------\n // --- Backgrounds ---\n // -------------------\n /**\n * Background Attachment\n * @see https://tailwindcss.com/docs/background-attachment\n */\n 'bg-attachment': [{\n bg: ['fixed', 'local', 'scroll']\n }],\n /**\n * Background Clip\n * @see https://tailwindcss.com/docs/background-clip\n */\n 'bg-clip': [{\n 'bg-clip': ['border', 'padding', 'content', 'text']\n }],\n /**\n * Background Origin\n * @see https://tailwindcss.com/docs/background-origin\n */\n 'bg-origin': [{\n 'bg-origin': ['border', 'padding', 'content']\n }],\n /**\n * Background Position\n * @see https://tailwindcss.com/docs/background-position\n */\n 'bg-position': [{\n bg: scaleBgPosition()\n }],\n /**\n * Background Repeat\n * @see https://tailwindcss.com/docs/background-repeat\n */\n 'bg-repeat': [{\n bg: scaleBgRepeat()\n }],\n /**\n * Background Size\n * @see https://tailwindcss.com/docs/background-size\n */\n 'bg-size': [{\n bg: scaleBgSize()\n }],\n /**\n * Background Image\n * @see https://tailwindcss.com/docs/background-image\n */\n 'bg-image': [{\n bg: ['none', {\n linear: [{\n to: ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl']\n }, isInteger, isArbitraryVariable, isArbitraryValue],\n radial: ['', isArbitraryVariable, isArbitraryValue],\n conic: [isInteger, isArbitraryVariable, isArbitraryValue]\n }, isArbitraryVariableImage, isArbitraryImage]\n }],\n /**\n * Background Color\n * @see https://tailwindcss.com/docs/background-color\n */\n 'bg-color': [{\n bg: scaleColor()\n }],\n /**\n * Gradient Color Stops From Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from-pos': [{\n from: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops Via Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via-pos': [{\n via: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops To Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to-pos': [{\n to: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops From\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from': [{\n from: scaleColor()\n }],\n /**\n * Gradient Color Stops Via\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via': [{\n via: scaleColor()\n }],\n /**\n * Gradient Color Stops To\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to': [{\n to: scaleColor()\n }],\n // ---------------\n // --- Borders ---\n // ---------------\n /**\n * Border Radius\n * @see https://tailwindcss.com/docs/border-radius\n */\n rounded: [{\n rounded: scaleRadius()\n }],\n /**\n * Border Radius Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-s': [{\n 'rounded-s': scaleRadius()\n }],\n /**\n * Border Radius End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-e': [{\n 'rounded-e': scaleRadius()\n }],\n /**\n * Border Radius Top\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-t': [{\n 'rounded-t': scaleRadius()\n }],\n /**\n * Border Radius Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-r': [{\n 'rounded-r': scaleRadius()\n }],\n /**\n * Border Radius Bottom\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-b': [{\n 'rounded-b': scaleRadius()\n }],\n /**\n * Border Radius Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-l': [{\n 'rounded-l': scaleRadius()\n }],\n /**\n * Border Radius Start Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ss': [{\n 'rounded-ss': scaleRadius()\n }],\n /**\n * Border Radius Start End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-se': [{\n 'rounded-se': scaleRadius()\n }],\n /**\n * Border Radius End End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ee': [{\n 'rounded-ee': scaleRadius()\n }],\n /**\n * Border Radius End Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-es': [{\n 'rounded-es': scaleRadius()\n }],\n /**\n * Border Radius Top Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tl': [{\n 'rounded-tl': scaleRadius()\n }],\n /**\n * Border Radius Top Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tr': [{\n 'rounded-tr': scaleRadius()\n }],\n /**\n * Border Radius Bottom Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-br': [{\n 'rounded-br': scaleRadius()\n }],\n /**\n * Border Radius Bottom Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-bl': [{\n 'rounded-bl': scaleRadius()\n }],\n /**\n * Border Width\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w': [{\n border: scaleBorderWidth()\n }],\n /**\n * Border Width X\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-x': [{\n 'border-x': scaleBorderWidth()\n }],\n /**\n * Border Width Y\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-y': [{\n 'border-y': scaleBorderWidth()\n }],\n /**\n * Border Width Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-s': [{\n 'border-s': scaleBorderWidth()\n }],\n /**\n * Border Width End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-e': [{\n 'border-e': scaleBorderWidth()\n }],\n /**\n * Border Width Top\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-t': [{\n 'border-t': scaleBorderWidth()\n }],\n /**\n * Border Width Right\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-r': [{\n 'border-r': scaleBorderWidth()\n }],\n /**\n * Border Width Bottom\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-b': [{\n 'border-b': scaleBorderWidth()\n }],\n /**\n * Border Width Left\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-l': [{\n 'border-l': scaleBorderWidth()\n }],\n /**\n * Divide Width X\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x': [{\n 'divide-x': scaleBorderWidth()\n }],\n /**\n * Divide Width X Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x-reverse': ['divide-x-reverse'],\n /**\n * Divide Width Y\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y': [{\n 'divide-y': scaleBorderWidth()\n }],\n /**\n * Divide Width Y Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y-reverse': ['divide-y-reverse'],\n /**\n * Border Style\n * @see https://tailwindcss.com/docs/border-style\n */\n 'border-style': [{\n border: [...scaleLineStyle(), 'hidden', 'none']\n }],\n /**\n * Divide Style\n * @see https://tailwindcss.com/docs/border-style#setting-the-divider-style\n */\n 'divide-style': [{\n divide: [...scaleLineStyle(), 'hidden', 'none']\n }],\n /**\n * Border Color\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color': [{\n border: scaleColor()\n }],\n /**\n * Border Color X\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-x': [{\n 'border-x': scaleColor()\n }],\n /**\n * Border Color Y\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-y': [{\n 'border-y': scaleColor()\n }],\n /**\n * Border Color S\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-s': [{\n 'border-s': scaleColor()\n }],\n /**\n * Border Color E\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-e': [{\n 'border-e': scaleColor()\n }],\n /**\n * Border Color Top\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-t': [{\n 'border-t': scaleColor()\n }],\n /**\n * Border Color Right\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-r': [{\n 'border-r': scaleColor()\n }],\n /**\n * Border Color Bottom\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-b': [{\n 'border-b': scaleColor()\n }],\n /**\n * Border Color Left\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-l': [{\n 'border-l': scaleColor()\n }],\n /**\n * Divide Color\n * @see https://tailwindcss.com/docs/divide-color\n */\n 'divide-color': [{\n divide: scaleColor()\n }],\n /**\n * Outline Style\n * @see https://tailwindcss.com/docs/outline-style\n */\n 'outline-style': [{\n outline: [...scaleLineStyle(), 'none', 'hidden']\n }],\n /**\n * Outline Offset\n * @see https://tailwindcss.com/docs/outline-offset\n */\n 'outline-offset': [{\n 'outline-offset': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Outline Width\n * @see https://tailwindcss.com/docs/outline-width\n */\n 'outline-w': [{\n outline: ['', isNumber, isArbitraryVariableLength, isArbitraryLength]\n }],\n /**\n * Outline Color\n * @see https://tailwindcss.com/docs/outline-color\n */\n 'outline-color': [{\n outline: scaleColor()\n }],\n // ---------------\n // --- Effects ---\n // ---------------\n /**\n * Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow\n */\n shadow: [{\n shadow: [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-shadow-color\n */\n 'shadow-color': [{\n shadow: scaleColor()\n }],\n /**\n * Inset Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-shadow\n */\n 'inset-shadow': [{\n 'inset-shadow': ['none', themeInsetShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Inset Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-shadow-color\n */\n 'inset-shadow-color': [{\n 'inset-shadow': scaleColor()\n }],\n /**\n * Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-a-ring\n */\n 'ring-w': [{\n ring: scaleBorderWidth()\n }],\n /**\n * Ring Width Inset\n * @see https://v3.tailwindcss.com/docs/ring-width#inset-rings\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-w-inset': ['ring-inset'],\n /**\n * Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-ring-color\n */\n 'ring-color': [{\n ring: scaleColor()\n }],\n /**\n * Ring Offset Width\n * @see https://v3.tailwindcss.com/docs/ring-offset-width\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-w': [{\n 'ring-offset': [isNumber, isArbitraryLength]\n }],\n /**\n * Ring Offset Color\n * @see https://v3.tailwindcss.com/docs/ring-offset-color\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-color': [{\n 'ring-offset': scaleColor()\n }],\n /**\n * Inset Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-ring\n */\n 'inset-ring-w': [{\n 'inset-ring': scaleBorderWidth()\n }],\n /**\n * Inset Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-ring-color\n */\n 'inset-ring-color': [{\n 'inset-ring': scaleColor()\n }],\n /**\n * Text Shadow\n * @see https://tailwindcss.com/docs/text-shadow\n */\n 'text-shadow': [{\n 'text-shadow': ['none', themeTextShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Text Shadow Color\n * @see https://tailwindcss.com/docs/text-shadow#setting-the-shadow-color\n */\n 'text-shadow-color': [{\n 'text-shadow': scaleColor()\n }],\n /**\n * Opacity\n * @see https://tailwindcss.com/docs/opacity\n */\n opacity: [{\n opacity: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Mix Blend Mode\n * @see https://tailwindcss.com/docs/mix-blend-mode\n */\n 'mix-blend': [{\n 'mix-blend': [...scaleBlendMode(), 'plus-darker', 'plus-lighter']\n }],\n /**\n * Background Blend Mode\n * @see https://tailwindcss.com/docs/background-blend-mode\n */\n 'bg-blend': [{\n 'bg-blend': scaleBlendMode()\n }],\n /**\n * Mask Clip\n * @see https://tailwindcss.com/docs/mask-clip\n */\n 'mask-clip': [{\n 'mask-clip': ['border', 'padding', 'content', 'fill', 'stroke', 'view']\n }, 'mask-no-clip'],\n /**\n * Mask Composite\n * @see https://tailwindcss.com/docs/mask-composite\n */\n 'mask-composite': [{\n mask: ['add', 'subtract', 'intersect', 'exclude']\n }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image-linear-pos': [{\n 'mask-linear': [isNumber]\n }],\n 'mask-image-linear-from-pos': [{\n 'mask-linear-from': scaleMaskImagePosition()\n }],\n 'mask-image-linear-to-pos': [{\n 'mask-linear-to': scaleMaskImagePosition()\n }],\n 'mask-image-linear-from-color': [{\n 'mask-linear-from': scaleColor()\n }],\n 'mask-image-linear-to-color': [{\n 'mask-linear-to': scaleColor()\n }],\n 'mask-image-t-from-pos': [{\n 'mask-t-from': scaleMaskImagePosition()\n }],\n 'mask-image-t-to-pos': [{\n 'mask-t-to': scaleMaskImagePosition()\n }],\n 'mask-image-t-from-color': [{\n 'mask-t-from': scaleColor()\n }],\n 'mask-image-t-to-color': [{\n 'mask-t-to': scaleColor()\n }],\n 'mask-image-r-from-pos': [{\n 'mask-r-from': scaleMaskImagePosition()\n }],\n 'mask-image-r-to-pos': [{\n 'mask-r-to': scaleMaskImagePosition()\n }],\n 'mask-image-r-from-color': [{\n 'mask-r-from': scaleColor()\n }],\n 'mask-image-r-to-color': [{\n 'mask-r-to': scaleColor()\n }],\n 'mask-image-b-from-pos': [{\n 'mask-b-from': scaleMaskImagePosition()\n }],\n 'mask-image-b-to-pos': [{\n 'mask-b-to': scaleMaskImagePosition()\n }],\n 'mask-image-b-from-color': [{\n 'mask-b-from': scaleColor()\n }],\n 'mask-image-b-to-color': [{\n 'mask-b-to': scaleColor()\n }],\n 'mask-image-l-from-pos': [{\n 'mask-l-from': scaleMaskImagePosition()\n }],\n 'mask-image-l-to-pos': [{\n 'mask-l-to': scaleMaskImagePosition()\n }],\n 'mask-image-l-from-color': [{\n 'mask-l-from': scaleColor()\n }],\n 'mask-image-l-to-color': [{\n 'mask-l-to': scaleColor()\n }],\n 'mask-image-x-from-pos': [{\n 'mask-x-from': scaleMaskImagePosition()\n }],\n 'mask-image-x-to-pos': [{\n 'mask-x-to': scaleMaskImagePosition()\n }],\n 'mask-image-x-from-color': [{\n 'mask-x-from': scaleColor()\n }],\n 'mask-image-x-to-color': [{\n 'mask-x-to': scaleColor()\n }],\n 'mask-image-y-from-pos': [{\n 'mask-y-from': scaleMaskImagePosition()\n }],\n 'mask-image-y-to-pos': [{\n 'mask-y-to': scaleMaskImagePosition()\n }],\n 'mask-image-y-from-color': [{\n 'mask-y-from': scaleColor()\n }],\n 'mask-image-y-to-color': [{\n 'mask-y-to': scaleColor()\n }],\n 'mask-image-radial': [{\n 'mask-radial': [isArbitraryVariable, isArbitraryValue]\n }],\n 'mask-image-radial-from-pos': [{\n 'mask-radial-from': scaleMaskImagePosition()\n }],\n 'mask-image-radial-to-pos': [{\n 'mask-radial-to': scaleMaskImagePosition()\n }],\n 'mask-image-radial-from-color': [{\n 'mask-radial-from': scaleColor()\n }],\n 'mask-image-radial-to-color': [{\n 'mask-radial-to': scaleColor()\n }],\n 'mask-image-radial-shape': [{\n 'mask-radial': ['circle', 'ellipse']\n }],\n 'mask-image-radial-size': [{\n 'mask-radial': [{\n closest: ['side', 'corner'],\n farthest: ['side', 'corner']\n }]\n }],\n 'mask-image-radial-pos': [{\n 'mask-radial-at': scalePosition()\n }],\n 'mask-image-conic-pos': [{\n 'mask-conic': [isNumber]\n }],\n 'mask-image-conic-from-pos': [{\n 'mask-conic-from': scaleMaskImagePosition()\n }],\n 'mask-image-conic-to-pos': [{\n 'mask-conic-to': scaleMaskImagePosition()\n }],\n 'mask-image-conic-from-color': [{\n 'mask-conic-from': scaleColor()\n }],\n 'mask-image-conic-to-color': [{\n 'mask-conic-to': scaleColor()\n }],\n /**\n * Mask Mode\n * @see https://tailwindcss.com/docs/mask-mode\n */\n 'mask-mode': [{\n mask: ['alpha', 'luminance', 'match']\n }],\n /**\n * Mask Origin\n * @see https://tailwindcss.com/docs/mask-origin\n */\n 'mask-origin': [{\n 'mask-origin': ['border', 'padding', 'content', 'fill', 'stroke', 'view']\n }],\n /**\n * Mask Position\n * @see https://tailwindcss.com/docs/mask-position\n */\n 'mask-position': [{\n mask: scaleBgPosition()\n }],\n /**\n * Mask Repeat\n * @see https://tailwindcss.com/docs/mask-repeat\n */\n 'mask-repeat': [{\n mask: scaleBgRepeat()\n }],\n /**\n * Mask Size\n * @see https://tailwindcss.com/docs/mask-size\n */\n 'mask-size': [{\n mask: scaleBgSize()\n }],\n /**\n * Mask Type\n * @see https://tailwindcss.com/docs/mask-type\n */\n 'mask-type': [{\n 'mask-type': ['alpha', 'luminance']\n }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image': [{\n mask: ['none', isArbitraryVariable, isArbitraryValue]\n }],\n // ---------------\n // --- Filters ---\n // ---------------\n /**\n * Filter\n * @see https://tailwindcss.com/docs/filter\n */\n filter: [{\n filter: [\n // Deprecated since Tailwind CSS v3.0.0\n '', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Blur\n * @see https://tailwindcss.com/docs/blur\n */\n blur: [{\n blur: scaleBlur()\n }],\n /**\n * Brightness\n * @see https://tailwindcss.com/docs/brightness\n */\n brightness: [{\n brightness: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Contrast\n * @see https://tailwindcss.com/docs/contrast\n */\n contrast: [{\n contrast: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Drop Shadow\n * @see https://tailwindcss.com/docs/drop-shadow\n */\n 'drop-shadow': [{\n 'drop-shadow': [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeDropShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Drop Shadow Color\n * @see https://tailwindcss.com/docs/filter-drop-shadow#setting-the-shadow-color\n */\n 'drop-shadow-color': [{\n 'drop-shadow': scaleColor()\n }],\n /**\n * Grayscale\n * @see https://tailwindcss.com/docs/grayscale\n */\n grayscale: [{\n grayscale: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Hue Rotate\n * @see https://tailwindcss.com/docs/hue-rotate\n */\n 'hue-rotate': [{\n 'hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Invert\n * @see https://tailwindcss.com/docs/invert\n */\n invert: [{\n invert: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Saturate\n * @see https://tailwindcss.com/docs/saturate\n */\n saturate: [{\n saturate: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Sepia\n * @see https://tailwindcss.com/docs/sepia\n */\n sepia: [{\n sepia: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Filter\n * @see https://tailwindcss.com/docs/backdrop-filter\n */\n 'backdrop-filter': [{\n 'backdrop-filter': [\n // Deprecated since Tailwind CSS v3.0.0\n '', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Blur\n * @see https://tailwindcss.com/docs/backdrop-blur\n */\n 'backdrop-blur': [{\n 'backdrop-blur': scaleBlur()\n }],\n /**\n * Backdrop Brightness\n * @see https://tailwindcss.com/docs/backdrop-brightness\n */\n 'backdrop-brightness': [{\n 'backdrop-brightness': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Contrast\n * @see https://tailwindcss.com/docs/backdrop-contrast\n */\n 'backdrop-contrast': [{\n 'backdrop-contrast': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Grayscale\n * @see https://tailwindcss.com/docs/backdrop-grayscale\n */\n 'backdrop-grayscale': [{\n 'backdrop-grayscale': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Hue Rotate\n * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n */\n 'backdrop-hue-rotate': [{\n 'backdrop-hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Invert\n * @see https://tailwindcss.com/docs/backdrop-invert\n */\n 'backdrop-invert': [{\n 'backdrop-invert': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Opacity\n * @see https://tailwindcss.com/docs/backdrop-opacity\n */\n 'backdrop-opacity': [{\n 'backdrop-opacity': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Saturate\n * @see https://tailwindcss.com/docs/backdrop-saturate\n */\n 'backdrop-saturate': [{\n 'backdrop-saturate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Sepia\n * @see https://tailwindcss.com/docs/backdrop-sepia\n */\n 'backdrop-sepia': [{\n 'backdrop-sepia': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n // --------------\n // --- Tables ---\n // --------------\n /**\n * Border Collapse\n * @see https://tailwindcss.com/docs/border-collapse\n */\n 'border-collapse': [{\n border: ['collapse', 'separate']\n }],\n /**\n * Border Spacing\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing': [{\n 'border-spacing': scaleUnambiguousSpacing()\n }],\n /**\n * Border Spacing X\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-x': [{\n 'border-spacing-x': scaleUnambiguousSpacing()\n }],\n /**\n * Border Spacing Y\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-y': [{\n 'border-spacing-y': scaleUnambiguousSpacing()\n }],\n /**\n * Table Layout\n * @see https://tailwindcss.com/docs/table-layout\n */\n 'table-layout': [{\n table: ['auto', 'fixed']\n }],\n /**\n * Caption Side\n * @see https://tailwindcss.com/docs/caption-side\n */\n caption: [{\n caption: ['top', 'bottom']\n }],\n // ---------------------------------\n // --- Transitions and Animation ---\n // ---------------------------------\n /**\n * Transition Property\n * @see https://tailwindcss.com/docs/transition-property\n */\n transition: [{\n transition: ['', 'all', 'colors', 'opacity', 'shadow', 'transform', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Behavior\n * @see https://tailwindcss.com/docs/transition-behavior\n */\n 'transition-behavior': [{\n transition: ['normal', 'discrete']\n }],\n /**\n * Transition Duration\n * @see https://tailwindcss.com/docs/transition-duration\n */\n duration: [{\n duration: [isNumber, 'initial', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Timing Function\n * @see https://tailwindcss.com/docs/transition-timing-function\n */\n ease: [{\n ease: ['linear', 'initial', themeEase, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Delay\n * @see https://tailwindcss.com/docs/transition-delay\n */\n delay: [{\n delay: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Animation\n * @see https://tailwindcss.com/docs/animation\n */\n animate: [{\n animate: ['none', themeAnimate, isArbitraryVariable, isArbitraryValue]\n }],\n // ------------------\n // --- Transforms ---\n // ------------------\n /**\n * Backface Visibility\n * @see https://tailwindcss.com/docs/backface-visibility\n */\n backface: [{\n backface: ['hidden', 'visible']\n }],\n /**\n * Perspective\n * @see https://tailwindcss.com/docs/perspective\n */\n perspective: [{\n perspective: [themePerspective, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Perspective Origin\n * @see https://tailwindcss.com/docs/perspective-origin\n */\n 'perspective-origin': [{\n 'perspective-origin': scalePositionWithArbitrary()\n }],\n /**\n * Rotate\n * @see https://tailwindcss.com/docs/rotate\n */\n rotate: [{\n rotate: scaleRotate()\n }],\n /**\n * Rotate X\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-x': [{\n 'rotate-x': scaleRotate()\n }],\n /**\n * Rotate Y\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-y': [{\n 'rotate-y': scaleRotate()\n }],\n /**\n * Rotate Z\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-z': [{\n 'rotate-z': scaleRotate()\n }],\n /**\n * Scale\n * @see https://tailwindcss.com/docs/scale\n */\n scale: [{\n scale: scaleScale()\n }],\n /**\n * Scale X\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-x': [{\n 'scale-x': scaleScale()\n }],\n /**\n * Scale Y\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-y': [{\n 'scale-y': scaleScale()\n }],\n /**\n * Scale Z\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-z': [{\n 'scale-z': scaleScale()\n }],\n /**\n * Scale 3D\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-3d': ['scale-3d'],\n /**\n * Skew\n * @see https://tailwindcss.com/docs/skew\n */\n skew: [{\n skew: scaleSkew()\n }],\n /**\n * Skew X\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-x': [{\n 'skew-x': scaleSkew()\n }],\n /**\n * Skew Y\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-y': [{\n 'skew-y': scaleSkew()\n }],\n /**\n * Transform\n * @see https://tailwindcss.com/docs/transform\n */\n transform: [{\n transform: [isArbitraryVariable, isArbitraryValue, '', 'none', 'gpu', 'cpu']\n }],\n /**\n * Transform Origin\n * @see https://tailwindcss.com/docs/transform-origin\n */\n 'transform-origin': [{\n origin: scalePositionWithArbitrary()\n }],\n /**\n * Transform Style\n * @see https://tailwindcss.com/docs/transform-style\n */\n 'transform-style': [{\n transform: ['3d', 'flat']\n }],\n /**\n * Translate\n * @see https://tailwindcss.com/docs/translate\n */\n translate: [{\n translate: scaleTranslate()\n }],\n /**\n * Translate X\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-x': [{\n 'translate-x': scaleTranslate()\n }],\n /**\n * Translate Y\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-y': [{\n 'translate-y': scaleTranslate()\n }],\n /**\n * Translate Z\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-z': [{\n 'translate-z': scaleTranslate()\n }],\n /**\n * Translate None\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-none': ['translate-none'],\n // ---------------------\n // --- Interactivity ---\n // ---------------------\n /**\n * Accent Color\n * @see https://tailwindcss.com/docs/accent-color\n */\n accent: [{\n accent: scaleColor()\n }],\n /**\n * Appearance\n * @see https://tailwindcss.com/docs/appearance\n */\n appearance: [{\n appearance: ['none', 'auto']\n }],\n /**\n * Caret Color\n * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n */\n 'caret-color': [{\n caret: scaleColor()\n }],\n /**\n * Color Scheme\n * @see https://tailwindcss.com/docs/color-scheme\n */\n 'color-scheme': [{\n scheme: ['normal', 'dark', 'light', 'light-dark', 'only-dark', 'only-light']\n }],\n /**\n * Cursor\n * @see https://tailwindcss.com/docs/cursor\n */\n cursor: [{\n cursor: ['auto', 'default', 'pointer', 'wait', 'text', 'move', 'help', 'not-allowed', 'none', 'context-menu', 'progress', 'cell', 'crosshair', 'vertical-text', 'alias', 'copy', 'no-drop', 'grab', 'grabbing', 'all-scroll', 'col-resize', 'row-resize', 'n-resize', 'e-resize', 's-resize', 'w-resize', 'ne-resize', 'nw-resize', 'se-resize', 'sw-resize', 'ew-resize', 'ns-resize', 'nesw-resize', 'nwse-resize', 'zoom-in', 'zoom-out', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Field Sizing\n * @see https://tailwindcss.com/docs/field-sizing\n */\n 'field-sizing': [{\n 'field-sizing': ['fixed', 'content']\n }],\n /**\n * Pointer Events\n * @see https://tailwindcss.com/docs/pointer-events\n */\n 'pointer-events': [{\n 'pointer-events': ['auto', 'none']\n }],\n /**\n * Resize\n * @see https://tailwindcss.com/docs/resize\n */\n resize: [{\n resize: ['none', '', 'y', 'x']\n }],\n /**\n * Scroll Behavior\n * @see https://tailwindcss.com/docs/scroll-behavior\n */\n 'scroll-behavior': [{\n scroll: ['auto', 'smooth']\n }],\n /**\n * Scroll Margin\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-m': [{\n 'scroll-m': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin X\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mx': [{\n 'scroll-mx': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Y\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-my': [{\n 'scroll-my': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ms': [{\n 'scroll-ms': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-me': [{\n 'scroll-me': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Top\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mt': [{\n 'scroll-mt': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Right\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mr': [{\n 'scroll-mr': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Bottom\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mb': [{\n 'scroll-mb': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Left\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ml': [{\n 'scroll-ml': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-p': [{\n 'scroll-p': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding X\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-px': [{\n 'scroll-px': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Y\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-py': [{\n 'scroll-py': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-ps': [{\n 'scroll-ps': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pe': [{\n 'scroll-pe': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Top\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pt': [{\n 'scroll-pt': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Right\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pr': [{\n 'scroll-pr': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Bottom\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pb': [{\n 'scroll-pb': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Left\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pl': [{\n 'scroll-pl': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Snap Align\n * @see https://tailwindcss.com/docs/scroll-snap-align\n */\n 'snap-align': [{\n snap: ['start', 'end', 'center', 'align-none']\n }],\n /**\n * Scroll Snap Stop\n * @see https://tailwindcss.com/docs/scroll-snap-stop\n */\n 'snap-stop': [{\n snap: ['normal', 'always']\n }],\n /**\n * Scroll Snap Type\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-type': [{\n snap: ['none', 'x', 'y', 'both']\n }],\n /**\n * Scroll Snap Type Strictness\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-strictness': [{\n snap: ['mandatory', 'proximity']\n }],\n /**\n * Touch Action\n * @see https://tailwindcss.com/docs/touch-action\n */\n touch: [{\n touch: ['auto', 'none', 'manipulation']\n }],\n /**\n * Touch Action X\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-x': [{\n 'touch-pan': ['x', 'left', 'right']\n }],\n /**\n * Touch Action Y\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-y': [{\n 'touch-pan': ['y', 'up', 'down']\n }],\n /**\n * Touch Action Pinch Zoom\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-pz': ['touch-pinch-zoom'],\n /**\n * User Select\n * @see https://tailwindcss.com/docs/user-select\n */\n select: [{\n select: ['none', 'text', 'all', 'auto']\n }],\n /**\n * Will Change\n * @see https://tailwindcss.com/docs/will-change\n */\n 'will-change': [{\n 'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryVariable, isArbitraryValue]\n }],\n // -----------\n // --- SVG ---\n // -----------\n /**\n * Fill\n * @see https://tailwindcss.com/docs/fill\n */\n fill: [{\n fill: ['none', ...scaleColor()]\n }],\n /**\n * Stroke Width\n * @see https://tailwindcss.com/docs/stroke-width\n */\n 'stroke-w': [{\n stroke: [isNumber, isArbitraryVariableLength, isArbitraryLength, isArbitraryNumber]\n }],\n /**\n * Stroke\n * @see https://tailwindcss.com/docs/stroke\n */\n stroke: [{\n stroke: ['none', ...scaleColor()]\n }],\n // ---------------------\n // --- Accessibility ---\n // ---------------------\n /**\n * Forced Color Adjust\n * @see https://tailwindcss.com/docs/forced-color-adjust\n */\n 'forced-color-adjust': [{\n 'forced-color-adjust': ['auto', 'none']\n }]\n },\n conflictingClassGroups: {\n overflow: ['overflow-x', 'overflow-y'],\n overscroll: ['overscroll-x', 'overscroll-y'],\n inset: ['inset-x', 'inset-y', 'start', 'end', 'top', 'right', 'bottom', 'left'],\n 'inset-x': ['right', 'left'],\n 'inset-y': ['top', 'bottom'],\n flex: ['basis', 'grow', 'shrink'],\n gap: ['gap-x', 'gap-y'],\n p: ['px', 'py', 'ps', 'pe', 'pt', 'pr', 'pb', 'pl'],\n px: ['pr', 'pl'],\n py: ['pt', 'pb'],\n m: ['mx', 'my', 'ms', 'me', 'mt', 'mr', 'mb', 'ml'],\n mx: ['mr', 'ml'],\n my: ['mt', 'mb'],\n size: ['w', 'h'],\n 'font-size': ['leading'],\n 'fvn-normal': ['fvn-ordinal', 'fvn-slashed-zero', 'fvn-figure', 'fvn-spacing', 'fvn-fraction'],\n 'fvn-ordinal': ['fvn-normal'],\n 'fvn-slashed-zero': ['fvn-normal'],\n 'fvn-figure': ['fvn-normal'],\n 'fvn-spacing': ['fvn-normal'],\n 'fvn-fraction': ['fvn-normal'],\n 'line-clamp': ['display', 'overflow'],\n rounded: ['rounded-s', 'rounded-e', 'rounded-t', 'rounded-r', 'rounded-b', 'rounded-l', 'rounded-ss', 'rounded-se', 'rounded-ee', 'rounded-es', 'rounded-tl', 'rounded-tr', 'rounded-br', 'rounded-bl'],\n 'rounded-s': ['rounded-ss', 'rounded-es'],\n 'rounded-e': ['rounded-se', 'rounded-ee'],\n 'rounded-t': ['rounded-tl', 'rounded-tr'],\n 'rounded-r': ['rounded-tr', 'rounded-br'],\n 'rounded-b': ['rounded-br', 'rounded-bl'],\n 'rounded-l': ['rounded-tl', 'rounded-bl'],\n 'border-spacing': ['border-spacing-x', 'border-spacing-y'],\n 'border-w': ['border-w-x', 'border-w-y', 'border-w-s', 'border-w-e', 'border-w-t', 'border-w-r', 'border-w-b', 'border-w-l'],\n 'border-w-x': ['border-w-r', 'border-w-l'],\n 'border-w-y': ['border-w-t', 'border-w-b'],\n 'border-color': ['border-color-x', 'border-color-y', 'border-color-s', 'border-color-e', 'border-color-t', 'border-color-r', 'border-color-b', 'border-color-l'],\n 'border-color-x': ['border-color-r', 'border-color-l'],\n 'border-color-y': ['border-color-t', 'border-color-b'],\n translate: ['translate-x', 'translate-y', 'translate-none'],\n 'translate-none': ['translate', 'translate-x', 'translate-y', 'translate-z'],\n 'scroll-m': ['scroll-mx', 'scroll-my', 'scroll-ms', 'scroll-me', 'scroll-mt', 'scroll-mr', 'scroll-mb', 'scroll-ml'],\n 'scroll-mx': ['scroll-mr', 'scroll-ml'],\n 'scroll-my': ['scroll-mt', 'scroll-mb'],\n 'scroll-p': ['scroll-px', 'scroll-py', 'scroll-ps', 'scroll-pe', 'scroll-pt', 'scroll-pr', 'scroll-pb', 'scroll-pl'],\n 'scroll-px': ['scroll-pr', 'scroll-pl'],\n 'scroll-py': ['scroll-pt', 'scroll-pb'],\n touch: ['touch-x', 'touch-y', 'touch-pz'],\n 'touch-x': ['touch'],\n 'touch-y': ['touch'],\n 'touch-pz': ['touch']\n },\n conflictingClassGroupModifiers: {\n 'font-size': ['leading']\n },\n orderSensitiveModifiers: ['*', '**', 'after', 'backdrop', 'before', 'details-content', 'file', 'first-letter', 'first-line', 'marker', 'placeholder', 'selection']\n };\n};\n\n/**\n * @param baseConfig Config where other config will be merged into. This object will be mutated.\n * @param configExtension Partial config to merge into the `baseConfig`.\n */\nconst mergeConfigs = (baseConfig, {\n cacheSize,\n prefix,\n experimentalParseClassName,\n extend = {},\n override = {}\n}) => {\n overrideProperty(baseConfig, 'cacheSize', cacheSize);\n overrideProperty(baseConfig, 'prefix', prefix);\n overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName);\n overrideConfigProperties(baseConfig.theme, override.theme);\n overrideConfigProperties(baseConfig.classGroups, override.classGroups);\n overrideConfigProperties(baseConfig.conflictingClassGroups, override.conflictingClassGroups);\n overrideConfigProperties(baseConfig.conflictingClassGroupModifiers, override.conflictingClassGroupModifiers);\n overrideProperty(baseConfig, 'orderSensitiveModifiers', override.orderSensitiveModifiers);\n mergeConfigProperties(baseConfig.theme, extend.theme);\n mergeConfigProperties(baseConfig.classGroups, extend.classGroups);\n mergeConfigProperties(baseConfig.conflictingClassGroups, extend.conflictingClassGroups);\n mergeConfigProperties(baseConfig.conflictingClassGroupModifiers, extend.conflictingClassGroupModifiers);\n mergeArrayProperties(baseConfig, extend, 'orderSensitiveModifiers');\n return baseConfig;\n};\nconst overrideProperty = (baseObject, overrideKey, overrideValue) => {\n if (overrideValue !== undefined) {\n baseObject[overrideKey] = overrideValue;\n }\n};\nconst overrideConfigProperties = (baseObject, overrideObject) => {\n if (overrideObject) {\n for (const key in overrideObject) {\n overrideProperty(baseObject, key, overrideObject[key]);\n }\n }\n};\nconst mergeConfigProperties = (baseObject, mergeObject) => {\n if (mergeObject) {\n for (const key in mergeObject) {\n mergeArrayProperties(baseObject, mergeObject, key);\n }\n }\n};\nconst mergeArrayProperties = (baseObject, mergeObject, key) => {\n const mergeValue = mergeObject[key];\n if (mergeValue !== undefined) {\n baseObject[key] = baseObject[key] ? baseObject[key].concat(mergeValue) : mergeValue;\n }\n};\nconst extendTailwindMerge = (configExtension, ...createConfig) => typeof configExtension === 'function' ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig) : createTailwindMerge(() => mergeConfigs(getDefaultConfig(), configExtension), ...createConfig);\nconst twMerge = /*#__PURE__*/createTailwindMerge(getDefaultConfig);\nexport { createTailwindMerge, extendTailwindMerge, fromTheme, getDefaultConfig, mergeConfigs, twJoin, twMerge, validators };\n//# sourceMappingURL=bundle-mjs.mjs.map\n","export type ColorThemeUser = 'primary' | 'default' | 'overlay' | 'rose' | 'green' | 'muted' | 'theme' | 'orange' | 'indigo' | 'red'\nexport type ButtonDesign = 'solid' | 'ghost' | 'outline' | 'link'\n\nexport const themes: Record<ColorThemeUser, Record<ButtonDesign, {\n base?: string\n border?: string\n hover?: string\n icon?: string\n input?: string\n}>> = {\n default: {\n solid: {\n base: 'bg-theme-0 dark:bg-theme-700/40 text-theme-600 dark:text-theme-50',\n input: `bg-white dark:bg-theme-800/50\n ring-theme-200 dark:ring-theme-600/70\n focus:ring-theme-600 focus:bg-white\n dark:focus:ring-theme-500 dark:focus:bg-theme-800\n focus-within:ring-theme-600 dark:focus-within:ring-theme-500\n text-theme-900 dark:text-theme-100\n placeholder:text-theme-400 dark:placeholder:text-theme-500`,\n border: 'border-theme-300/80 dark:border-theme-600',\n hover: 'hover:border-theme-300 dark:hover:border-theme-500',\n icon: 'text-theme-600 dark:text-theme-50',\n },\n ghost: {\n base: 'bg-theme-50 dark:bg-theme-600/30 text-theme-700 dark:text-theme-50',\n border: 'border-theme-100 dark:border-theme-800/20',\n hover: 'hover:bg-theme-200 dark:hover:bg-theme-600/50 hover:border-theme-200 dark:hover:border-theme-600',\n icon: 'text-theme-500 dark:text-theme-500',\n },\n outline: {\n base: 'bg-transparent text-theme-700 dark:text-theme-50',\n border: 'border-theme-300 dark:border-theme-400',\n hover: 'hover:opacity-70',\n icon: 'text-theme-700 dark:text-theme-300',\n },\n link: {\n base: 'bg-transparent text-theme-600 dark:text-theme-50',\n border: 'border-transparent',\n hover: 'hover:opacity-70',\n icon: 'text-theme-600 dark:text-theme-400',\n },\n },\n muted: {\n solid: {\n base: 'bg-gray-100 dark:bg-gray-700/40 text-gray-900 dark:text-gray-50',\n input: `bg-white dark:bg-gray-800/50\n ring-gray-200 dark:ring-gray-600/70\n focus:ring-gray-600 focus:bg-white\n dark:focus:ring-gray-500 dark:focus:bg-gray-800\n focus-within:ring-gray-600 dark:focus-within:ring-gray-500\n text-gray-900 dark:text-gray-100\n placeholder:text-gray-400 dark:placeholder:text-gray-500`,\n border: 'border-gray-300/80 dark:border-gray-600',\n hover: 'hover:border-gray-300 dark:hover:border-gray-500',\n icon: 'text-gray-600 dark:text-gray-50',\n },\n ghost: {\n base: 'bg-gray-100 dark:bg-gray-600/30 text-gray-700 dark:text-gray-50',\n border: 'border-gray-100 dark:border-gray-800/20',\n hover: 'hover:bg-gray-200 dark:hover:bg-gray-600/50 hover:border-gray-200 dark:hover:border-gray-600',\n icon: 'text-gray-500 dark:text-gray-500',\n },\n outline: {\n base: 'bg-transparent text-gray-700 dark:text-gray-50',\n border: 'border-gray-500 dark:border-gray-400',\n hover: 'hover:opacity-70',\n icon: 'text-gray-700 dark:text-gray-300',\n },\n link: {\n base: 'bg-transparent text-gray-600 dark:text-gray-50',\n border: 'border-transparent',\n hover: 'hover:opacity-70',\n icon: 'text-gray-600 dark:text-gray-400',\n },\n },\n overlay: {\n solid: {\n base: 'bg-white/100 text-black backdrop-blur-sm shadow-sm mix-blend-overlay [text-shadow:_0_1px_1px_rgb(255_255_255_/_100%)]',\n border: 'border-white/100',\n input: `bg-white/10 ring-white\n focus:ring-white/90 focus:bg-white/20\n dark:focus:ring-white/70\n text-white\n placeholder:text-white/60`,\n hover: 'hover:bg-white/70 ',\n icon: 'text-black',\n },\n ghost: {\n base: 'bg-white/70 text-black backdrop-blur-sm shadow-sm mix-blend-overlay [text-shadow:_0_1px_1px_rgb(255_255_255_/_100%)]',\n border: 'border-white/100',\n hover: 'hover:bg-white/70 hover:border-white/90',\n icon: 'text-black',\n },\n outline: {\n base: 'bg-white/10 text-white backdrop-blur-sm shadow-sm [text-shadow:_0_0.5px_0_rgb(0_0_0_/_40%)]',\n border: 'border-white',\n hover: 'hover:border-white/80',\n icon: 'text-white',\n },\n link: {\n base: 'bg-transparent text-white [text-shadow:_0_0.5px_0_rgb(0_0_0_/_40%)]',\n border: 'border-transparent',\n hover: 'hover:opacity-70',\n icon: 'text-white',\n },\n },\n primary: {\n solid: {\n base: 'bg-primary-500 dark:bg-primary-700/70 text-primary-0 dark:text-primary-50',\n border: 'border-primary-600/80 dark:border-primary-600',\n input: `bg-primary-50 dark:bg-primary-800/20\n ring-primary-500 dark:ring-primary-600/70\n focus:ring-primary-700 focus:bg-primary-50/50\n dark:focus:ring-primary-600 dark:focus:bg-primary-800/40\n text-primary-800 dark:text-primary-0\n placeholder:text-primary-300 dark:placeholder:text-primary-600`,\n hover: 'hover:bg-primary-600 dark:hover:bg-primary-800',\n icon: 'text-primary-0 dark:text-primary-50',\n },\n ghost: {\n base: 'bg-primary-50 dark:bg-primary-800/40 text-primary-800 dark:text-primary-0',\n border: 'border-primary-100 dark:border-primary-800/20',\n hover: 'hover:bg-primary-100 dark:hover:bg-primary-800/60 hover:border-primary-200 dark:hover:border-primary-700',\n icon: 'text-primary-500 dark:text-primary-500',\n },\n outline: {\n base: 'bg-transparent text-primary-500 dark:text-primary-100',\n border: 'border-primary-500 dark:border-primary-500',\n hover: 'hover:bg-primary-500/10 dark:hover:bg-primary-500/20',\n icon: 'text-primary-700 dark:text-primary-100',\n },\n link: {\n base: 'bg-transparent text-primary-600 dark:text-primary-400',\n border: 'border-transparent',\n hover: 'hover:opacity-70',\n icon: 'text-primary-600 dark:text-primary-400',\n },\n },\n theme: {\n solid: {\n base: 'bg-theme-500 dark:bg-theme-600/70 text-theme-0 dark:text-theme-0',\n border: 'border-theme-600/80 dark:border-theme-600',\n hover: 'hover:bg-theme-600 dark:hover:bg-theme-800',\n icon: 'text-theme-50 dark:text-theme-50',\n },\n ghost: {\n base: 'bg-theme-100 dark:bg-theme-600/50 text-theme-900 dark:text-theme-100',\n border: 'border-theme-100 dark:border-theme-800/20',\n hover: 'hover:bg-theme-200 dark:hover:bg-theme-600/40 hover:border-theme-200 dark:hover:border-theme-600',\n icon: 'text-theme-500 dark:text-theme-500',\n },\n outline: {\n base: 'bg-transparent text-theme-500 dark:text-theme-300',\n border: 'border-theme-500 dark:border-theme-400',\n hover: 'hover:bg-theme-500/10 dark:hover:bg-theme-400/20',\n icon: 'text-theme-500 dark:text-theme-300',\n },\n link: {\n base: 'bg-transparent text-theme-600 dark:text-theme-400',\n border: 'border-transparent',\n hover: 'hover:opacity-70',\n icon: 'text-theme-600 dark:text-theme-400',\n },\n },\n green: {\n solid: {\n base: 'bg-green-600 dark:bg-green-700/70 text-green-50 dark:text-green-50',\n border: 'border-green-600 dark:border-green-600',\n hover: 'hover:bg-green-700 dark:hover:bg-green-800',\n icon: 'text-green-50 dark:text-green-50',\n },\n ghost: {\n base: 'bg-green-100 dark:bg-green-800/20 text-green-900 dark:text-green-100',\n border: 'border-green-100 dark:border-green-800/20',\n hover: 'hover:bg-green-200 dark:hover:bg-green-800/40 hover:border-green-200 dark:hover:border-green-700',\n icon: 'text-green-500 dark:text-green-500',\n },\n outline: {\n base: 'bg-transparent text-green-500 dark:text-green-50',\n border: 'border-green-500 dark:border-green-600',\n hover: 'hover:bg-green-500/10 dark:hover:bg-green-400/10',\n icon: 'text-green-500 dark:text-green-50',\n },\n link: {\n base: 'bg-transparent text-green-600 dark:text-green-400',\n border: 'border-transparent',\n hover: 'hover:opacity-70',\n icon: 'text-green-600 dark:text-green-400',\n },\n },\n orange: {\n solid: {\n base: 'bg-orange-500 dark:bg-orange-700/70 text-orange-50 dark:text-orange-50',\n border: 'border-orange-700 dark:border-orange-600',\n hover: 'hover:bg-orange-700 dark:hover:bg-orange-800',\n icon: 'text-orange-50 dark:text-orange-50',\n },\n ghost: {\n base: 'bg-orange-100 dark:bg-orange-800/20 text-orange-900 dark:text-orange-100',\n border: 'border-orange-100 dark:border-orange-800/20',\n hover: 'hover:bg-orange-200 dark:hover:bg-orange-800/40 hover:border-orange-200 dark:hover:border-orange-700',\n icon: 'text-orange-500 dark:text-orange-500',\n },\n outline: {\n base: 'bg-transparent text-orange-500 dark:text-orange-50',\n border: 'border-orange-500 dark:border-orange-600',\n hover: 'hover:bg-orange-500/10 dark:hover:bg-orange-400/10',\n icon: 'text-orange-500 dark:text-orange-50',\n },\n link: {\n base: 'bg-transparent text-orange-600 dark:text-orange-400',\n border: 'border-transparent',\n hover: 'hover:opacity-70',\n icon: 'text-orange-600 dark:text-orange-400',\n },\n },\n rose: {\n solid: {\n base: 'bg-rose-500 dark:bg-rose-700/70 text-rose-50 dark:text-rose-50',\n border: 'border-rose-600/80 dark:border-rose-600',\n hover: 'hover:bg-rose-600 dark:hover:bg-rose-800',\n icon: 'text-rose-50 dark:text-rose-50',\n },\n ghost: {\n base: 'bg-rose-100 dark:bg-rose-800/20 text-rose-900 dark:text-rose-100',\n border: 'border-rose-100 dark:border-rose-800/20',\n hover: 'hover:bg-rose-200 dark:hover:bg-rose-800/40 hover:border-rose-200 dark:hover:border-rose-700',\n icon: 'text-rose-500 dark:text-rose-500',\n },\n outline: {\n base: 'bg-transparent text-rose-500 dark:text-rose-50',\n border: 'border-rose-500 dark:border-rose-600',\n hover: 'hover:bg-rose-500/10 dark:hover:bg-rose-400/10',\n icon: 'text-rose-500 dark:text-rose-50',\n },\n link: {\n base: 'bg-transparent text-rose-600 dark:text-rose-400',\n border: 'border-transparent',\n hover: 'hover:opacity-70',\n icon: 'text-rose-600 dark:text-rose-400',\n },\n },\n indigo: {\n solid: {\n base: 'bg-indigo-500 dark:bg-indigo-700/70 text-indigo-50 dark:text-indigo-50',\n border: 'border-indigo-600/80 dark:border-indigo-600',\n hover: 'hover:bg-indigo-600 dark:hover:bg-indigo-800',\n icon: 'text-indigo-50 dark:text-indigo-50',\n },\n ghost: {\n base: 'bg-indigo-100 dark:bg-indigo-800/20 text-indigo-900 dark:text-indigo-100',\n border: 'border-indigo-100 dark:border-indigo-800/20',\n hover: 'hover:bg-indigo-200 dark:hover:bg-indigo-800/40 hover:border-indigo-200 dark:hover:border-indigo-700',\n icon: 'text-indigo-500 dark:text-indigo-500',\n },\n outline: {\n base: 'bg-transparent text-indigo-500 dark:text-indigo-50',\n border: 'border-indigo-500 dark:border-indigo-600',\n hover: 'hover:bg-indigo-500/10 dark:hover:bg-indigo-400/10',\n icon: 'text-indigo-500 dark:text-indigo-50',\n },\n link: {\n base: 'bg-transparent text-indigo-600 dark:text-indigo-400',\n border: 'border-transparent',\n hover: 'hover:opacity-70',\n icon: 'text-indigo-600 dark:text-indigo-400',\n },\n },\n red: {\n solid: {\n base: 'bg-red-500 dark:bg-red-700/70 text-red-50 dark:text-red-50',\n border: 'border-red-600/80 dark:border-red-600',\n hover: 'hover:bg-red-600 dark:hover:bg-red-800',\n icon: 'text-red-50 dark:text-red-50',\n },\n ghost: {\n base: 'bg-red-100 dark:bg-red-800/20 text-red-900 dark:text-red-100',\n border: 'border-red-100 dark:border-red-800/20',\n hover: 'hover:bg-red-200 dark:hover:bg-red-800/40 hover:border-red-200 dark:hover:border-red-700',\n icon: 'text-red-500 dark:text-red-500',\n },\n outline: {\n base: 'bg-transparent text-red-500 dark:text-red-50',\n border: 'border-red-500 dark:border-red-600',\n hover: 'hover:bg-red-500/10 dark:hover:bg-red-400/10',\n icon: 'text-red-500 dark:text-red-50',\n },\n link: {\n base: 'bg-transparent text-red-600 dark:text-red-400',\n border: 'border-transparent',\n hover: 'hover:opacity-70',\n icon: 'text-red-600 dark:text-red-400',\n },\n },\n}\n","<script lang=\"ts\" setup>\nimport type { ButtonDesign, ColorThemeUser } from './themes'\nimport type { MediaObject } from '@/types'\nimport { twMerge } from 'tailwind-merge'\nimport { computed } from 'vue'\nimport FSpinner from './FSpinner.vue'\nimport { themes } from './themes'\n\ninterface ButtonProps {\n theme?: ColorThemeUser\n design?: ButtonDesign\n size?: 'xxs' | 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n rounding?: 'md' | 'lg' | 'full'\n href?: string\n icon?: string | MediaObject\n iconAfter?: string | MediaObject\n tag?: 'button' | 'div' | 'a'\n loading?: boolean\n class?: string\n}\n\nconst {\n theme = 'default',\n design = 'solid',\n size = 'md',\n rounding = 'full',\n href,\n icon,\n iconAfter,\n tag = 'button',\n loading = false,\n class: className = '',\n} = defineProps<ButtonProps>()\n\nconst icons = computed(() => {\n return {\n icon: typeof icon === 'string' ? icon : icon?.className,\n iconAfter: typeof iconAfter === 'string' ? iconAfter : iconAfter?.className,\n }\n})\n\nconst componentTag = computed(() => {\n if (href)\n return 'a'\n return tag\n})\n\nconst spinnerSize = computed(() => {\n const sizes = {\n xxs: 'size-2.5',\n xs: 'size-3',\n sm: 'size-3.5',\n md: 'size-4',\n lg: 'size-5',\n xl: 'size-6',\n }\n return sizes[size]\n})\n\nconst buttonClass = computed(() => {\n const baseClasses = 'relative inline-flex items-center justify-center gap-2 font-medium transition-all duration-200 focus:outline-none active:opacity-80 cursor-pointer'\n\n // Size classes\n const sizeClasses = {\n xxs: 'px-2 py-0.5 text-[10px]',\n xs: 'px-3 py-1 text-[11px]',\n sm: 'px-3 py-1.5 text-xs',\n md: 'px-4 py-2 text-sm',\n lg: 'px-6 py-3 text-base',\n xl: 'px-8 py-4 text-base',\n }\n\n // Override padding for link design\n const linkPadding = design === 'link' ? '!px-1' : ''\n\n // Rounding classes\n const roundingClasses = {\n md: 'rounded-md',\n lg: 'rounded-lg',\n full: 'rounded-full',\n }\n\n // Get theme classes\n const themeClasses = themes[theme]?.[design] || themes.default[design]\n\n const out = [\n baseClasses,\n sizeClasses[size],\n linkPadding,\n roundingClasses[rounding],\n themeClasses.base,\n `border ${themeClasses.border}`,\n themeClasses.hover,\n ].filter(Boolean).join(' ')\n\n return twMerge(out, className)\n})\n\nconst iconClass = computed(() => {\n const themeClasses = themes[theme]?.[design] || themes.default[design]\n return {\n design: themeClasses.icon || '',\n\n }\n})\n</script>\n\n<template>\n <component\n :is=\"componentTag\"\n :href=\"href\"\n :class=\"buttonClass\"\n >\n <!-- Loading spinner overlay -->\n <div\n v-if=\"loading\"\n class=\"absolute inset-0 flex items-center justify-center\"\n >\n <FSpinner :class=\"spinnerSize\" />\n </div>\n\n <!-- Button content -->\n <span\n class=\"flex items-center gap-2 transition-opacity duration-200 whitespace-nowrap\"\n :class=\"loading ? 'opacity-0' : 'opacity-100'\"\n >\n <span v-if=\"icons.icon\" class=\"flex items-center size-[1.1em] mt-[-.07em]\" :class=\"[icons.icon, iconClass]\" />\n <slot />\n <span v-if=\"icons.iconAfter\" class=\"flex items-center size-[1.1em] mt-[-.07em]\" :class=\"[icons.iconAfter, iconClass]\" />\n </span>\n </component>\n</template>\n","<script setup lang=\"ts\">\nimport type { Self } from '@/modules/self/schema'\nimport { computed } from 'vue'\nimport FButton from '@/ui/common/FButton.vue'\n\nconst { self } = defineProps<{\n self: Self\n}>()\n\n// Generate real social links using engine array pattern\nconst links = computed(() => {\n const linkEngines = [\n {\n key: 'email',\n condition: () => !!self.email,\n generate: () => ({\n title: 'Contact',\n url: `mailto:${self.email}`,\n icon: 'i-heroicons-envelope',\n }),\n },\n {\n key: 'linkedin',\n condition: () => !!self.accounts?.linkedin?.handle,\n generate: () => ({\n title: 'LinkedIn',\n url: self.accounts?.linkedin?.url || `https://linkedin.com/in/${self.accounts?.linkedin?.handle}`,\n icon: 'i-simple-icons-linkedin',\n }),\n },\n {\n key: 'x',\n condition: () => !!self.accounts?.x?.handle,\n generate: () => ({\n title: 'X (Twitter)',\n url: self.accounts?.x?.url || `https://x.com/${self.accounts?.x?.handle}`,\n icon: 'i-simple-icons-x',\n }),\n },\n {\n key: 'github',\n condition: () => !!self.accounts?.github?.handle,\n generate: () => ({\n title: 'GitHub',\n url: self.accounts?.github?.url || `https://github.com/${self.accounts?.github?.handle}`,\n icon: 'i-simple-icons-github',\n }),\n },\n {\n key: 'website',\n condition: () => !!self.accounts?.website?.url,\n generate: () => ({\n title: 'Website',\n url: self.accounts?.website?.url,\n icon: 'i-heroicons-globe-alt',\n }),\n },\n ]\n\n return linkEngines\n .filter((engine) => engine.condition())\n .map((engine) => engine.generate())\n})\n</script>\n\n<template>\n <div class=\"flex-1 flex flex-col min-h-0 py-6 space-y-6 h-full overflow-scroll [scrollbar-width:none] [-ms-overflow-style:none] [&::-webkit-scrollbar]:hidden relative\">\n <div class=\"flex-1 space-y-6\">\n <!-- Headline Section -->\n <div v-if=\"self.headline\" class=\"bg-white/5 backdrop-blur-sm rounded-2xl p-4 border border-white/10\">\n <h3 class=\"text-sm font-medium text-white/90 mb-2\">\n Professional Tagline\n </h3>\n <div class=\"text-sm text-white/70 leading-relaxed\">\n {{ self.headline }}\n </div>\n </div>\n\n <!-- About Section -->\n <div v-if=\"self.summary\" class=\"bg-white/5 backdrop-blur-sm rounded-2xl p-4 border border-white/10\">\n <h3 class=\"text-sm font-medium text-white/90 mb-2\">\n About\n </h3>\n <div class=\"text-sm text-white/70 leading-relaxed\" v-html=\"self.summary\" />\n </div>\n\n <!-- Entity Type Info -->\n <div v-if=\"self.entityType === 'company'\" class=\"bg-white/5 backdrop-blur-sm rounded-2xl p-4 border border-white/10\">\n <h3 class=\"text-sm font-medium text-white/90 mb-2\">\n Company Info\n </h3>\n <p class=\"text-sm text-white/70 leading-relaxed\">\n This is a company digital self representing {{ self.name }}.\n </p>\n </div>\n\n <!-- Connect Section -->\n <div v-if=\"links.length > 0\" class=\"space-y-3\">\n <h3 class=\"text-sm font-medium text-white/90\">\n Connect\n </h3>\n <div class=\"grid grid-cols-2 gap-3\">\n <FButton\n v-for=\"link in links\"\n :key=\"link.title\"\n design=\"ghost\"\n theme=\"default\"\n size=\"sm\"\n class=\"bg-white/5 hover:bg-white/10 border border-white/10 text-white/80 text-sm justify-start h-10\"\n :href=\"link.url\"\n target=\"_blank\"\n >\n <i :class=\"link.icon\" class=\"size-4 mr-2\" />\n {{ link.title }}\n </FButton>\n </div>\n </div>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { SelfController } from '../SelfController'\nimport type { Self } from '@/modules/self/schema'\nimport { computed, nextTick, onMounted, ref, watch } from 'vue'\nimport FSpinner from '@/ui/common/FSpinner.vue'\nimport { getFallbackAvatarDataUrl, getSelfAvatarUrl } from '../utils'\n\nconst { selfController, self } = defineProps<{\n selfController?: SelfController\n self: Self\n}>()\n\nconst message = ref('')\nconst messagesContainer = ref<HTMLElement>()\nconst textarea = ref<HTMLTextAreaElement>()\n\nconst selfAvatarUrl = computed(() => {\n return getSelfAvatarUrl(self) || getFallbackAvatarDataUrl()\n})\n\n// Group consecutive messages and determine if avatar should show\nfunction shouldShowAvatar(messages: any[], index: number): boolean {\n const currentMsg = messages[index]\n const nextMsg = messages[index + 1]\n\n // Show avatar if this is the last message in a group (next message is from different sender or doesn't exist)\n return !nextMsg || nextMsg.sender !== currentMsg.sender\n}\n\n// Auto-start text conversation when component mounts (no permissions needed)\nonMounted(async () => {\n if (selfController && !selfController.textState.value.isConnected) {\n try {\n await selfController.startTextConversation()\n } catch (error) {\n console.error('Failed to start text conversation:', error)\n }\n }\n})\n\nasync function sendMessage() {\n if (!message.value.trim() || !selfController || !selfController.textState.value.isConnected)\n return\n\n const messageText = message.value\n message.value = ''\n\n // Reset textarea height and refocus immediately\n if (textarea.value) {\n textarea.value.style.height = 'auto'\n textarea.value.focus()\n }\n\n try {\n await selfController.sendChatMessage(messageText)\n scrollToBottom()\n } catch (error) {\n console.error('Error sending message:', error)\n }\n}\n\nfunction handleKeydown(event: KeyboardEvent) {\n if (event.key === 'Enter' && !event.shiftKey) {\n event.preventDefault()\n sendMessage()\n }\n}\n\nfunction scrollToBottom() {\n if (messagesContainer.value) {\n nextTick(() => {\n const container = messagesContainer.value!\n container.scrollTop = container.scrollHeight\n })\n }\n}\n\n// Auto-grow textarea as user types\nfunction adjustTextareaHeight() {\n if (!textarea.value)\n return\n\n // Reset height to auto to get the correct scrollHeight\n textarea.value.style.height = 'auto'\n\n // Set height to scrollHeight, but cap at 150px\n const newHeight = Math.min(textarea.value.scrollHeight, 150)\n textarea.value.style.height = `${newHeight}px`\n}\n\n// Watch message input to auto-grow textarea\nwatch(message, () => {\n nextTick(() => adjustTextareaHeight())\n})\n\n// Watch for new messages to auto-scroll\nwatch(() => selfController?.sharedMessages.value, (messages) => {\n if (messages && messages.length > 0) {\n nextTick(() => scrollToBottom())\n }\n}, { immediate: true, deep: true })\n</script>\n\n<template>\n <div class=\"flex flex-col h-full relative\">\n <!-- Connection Status Badge -->\n <div\n v-if=\"selfController?.textState.value.connectionStatus !== 'connected'\"\n class=\"text-theme-600 py-16 flex flex-col items-center justify-center gap-2 text-sm\"\n >\n <FSpinner class=\"size-4\" />\n </div>\n\n <div\n ref=\"messagesContainer\"\n class=\"flex-1 overflow-y-auto overflow-x-hidden py-8 space-y-1 min-h-0 [scrollbar-width:none] [-ms-overflow-style:none] [&::-webkit-scrollbar]:hidden\"\n >\n <div\n v-for=\"(msg, index) in selfController?.sharedMessages.value.filter(m => m.sender !== 'system') ?? []\"\n :key=\"msg.id\"\n class=\"flex gap-2 items-end\"\n :class=\"{\n 'justify-end': msg.sender === 'user',\n 'justify-start': msg.sender === 'agent',\n 'mb-4': shouldShowAvatar(selfController?.sharedMessages.value.filter(m => m.sender !== 'system') ?? [], index),\n }\"\n >\n <!-- Avatar - only show for agent messages on last message of group -->\n <div v-if=\"msg.sender === 'agent'\" class=\"flex-shrink-0 size-8\">\n <img\n v-if=\"shouldShowAvatar(selfController?.sharedMessages.value.filter(m => m.sender !== 'system') ?? [], index)\"\n :src=\"selfAvatarUrl\"\n :alt=\"self.name\"\n class=\"size-7 rounded-full object-cover\"\n />\n </div>\n\n <!-- Message bubble -->\n <div class=\"max-w-[70%]\">\n <div\n class=\"rounded-2xl px-3.5 py-1.5 backdrop-blur-sm\"\n :class=\"msg.sender === 'user'\n ? 'bg-primary-500/80 text-white'\n : 'bg-white/15 text-white/95'\"\n >\n <p class=\"text-sm leading-[1.5] whitespace-pre-wrap break-words\">\n {{ msg.text }}\n </p>\n </div>\n </div>\n </div>\n\n <!-- Thinking indicator -->\n <div v-if=\"selfController?.textState.value.isThinking\" class=\"flex gap-2 justify-start items-end mb-4\">\n <div class=\"flex-shrink-0\">\n <img\n :src=\"selfAvatarUrl\"\n :alt=\"self.name\"\n class=\"size-8 rounded-full object-cover\"\n />\n </div>\n <div class=\"rounded-2xl px-4 py-2.5 bg-white/15 backdrop-blur-sm flex items-center\">\n <i class=\"i-svg-spinners-3-dots-fade size-6 text-white/70\" />\n </div>\n </div>\n </div>\n\n <div class=\"flex-shrink-0 pt-6 pb-2\">\n <textarea\n ref=\"textarea\"\n v-model=\"message\"\n rows=\"1\"\n :placeholder=\"selfController?.textState.value.isConnected ? 'Message' : 'Connecting...'\"\n :disabled=\"!selfController?.textState.value.isConnected\"\n style=\"font-size: 16px; resize: none;\"\n class=\"w-full bg-white/10 backdrop-blur-sm border border-white/20 rounded-3xl px-5 py-3 text-white placeholder-white/50 focus:outline-none focus:border-white/40 disabled:opacity-50 overflow-y-auto [scrollbar-width:none] [-ms-overflow-style:none] [&::-webkit-scrollbar]:hidden\"\n @keydown=\"handleKeydown\"\n />\n <div class=\"text-[10px] text-white/40 text-center mt-2\">\n Press Enter to send, Shift+Enter for new line\n </div>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { Self } from '@/modules/self/schema'\nimport { getFallbackAvatarDataUrl, handleImageError } from '../utils'\n\ninterface Props {\n self: Self\n}\n\nconst { self } = defineProps<Props>()\n\nfunction getAvatarSrc(): string {\n if (self.avatar?.src) {\n return self.avatar.src\n }\n return getFallbackAvatarDataUrl()\n}\n</script>\n\n<template>\n <!-- Centered layout for default \"self\" mode with large avatar and online indicator -->\n <div class=\"flex flex-col items-center text-center gap-4\">\n <!-- Avatar with online indicator -->\n <div class=\"relative flex-shrink-0\">\n <div class=\"w-20 h-20 sm:w-24 sm:h-24 rounded-full overflow-hidden border-4 border-white\">\n <img\n :src=\"getAvatarSrc()\"\n :alt=\"self.name\"\n class=\"w-full h-full object-cover\"\n @error=\"handleImageError\"\n />\n </div>\n\n <div class=\"absolute top-1.5 right-1.5\">\n <div class=\"size-4 bg-green-500 rounded-full ring-2 ring-white absolute animate-ping\" style=\"animation-duration: 3s;\" />\n <div class=\"size-4 bg-green-500 rounded-full ring-2 ring-white\" />\n </div>\n </div>\n\n <!-- Name and title -->\n <div class=\"min-w-0\">\n <h1 class=\"text-3xl font-light text-white mb-2 truncate\">\n {{ self.name }}\n </h1>\n <p class=\"text-base font-light text-white/60 line-clamp-1\">\n {{ self.title }}\n </p>\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { onMounted, ref } from 'vue'\n\ndefineOptions({ name: 'FClose' })\n\ndefineEmits<{\n click: [event: MouseEvent]\n}>()\n\nconst inView = ref(false)\n\nonMounted(() => {\n setTimeout(() => {\n inView.value = true\n }, 100)\n})\n</script>\n\n<template>\n <a\n class=\"close block cursor-pointer w-[60px] h-[60px] rounded-full transition-all duration-1000 ease-[cubic-bezier(0.25,1,0.33,1)] hover:scale-110 active:scale-90 hover:rotate-90\"\n @click=\"$emit('click', $event)\"\n >\n <!-- Background circle (invisible, for hover area) -->\n <span class=\"absolute inset-0 rounded-full transition-all\" />\n\n <!-- Close lines container -->\n <span class=\"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[28px] h-[28px] overflow-hidden\">\n <!-- Line 1 - animates from bottom-left to center, rotates 45deg -->\n <span\n class=\"absolute h-full w-[3px] rounded-[5px] left-[13px] transition-all duration-[400ms] ease-[cubic-bezier(0.52,0.01,0.16,1)]\"\n :class=\"inView ? 'translate-y-0 translate-x-0 rotate-45' : 'translate-y-[30px] -translate-x-[30px] rotate-0'\"\n style=\"background-color: currentColor; transition-delay: 0.15s\"\n />\n\n <!-- Line 2 - animates from top-left to center, rotates -45deg -->\n <span\n class=\"absolute h-full w-[3px] rounded-[5px] left-[13px] transition-all duration-[400ms] ease-[cubic-bezier(0.52,0.01,0.16,1)]\"\n :class=\"inView ? 'translate-y-0 translate-x-0 -rotate-45' : '-translate-y-[30px] -translate-x-[30px] rotate-0'\"\n style=\"background-color: currentColor; transition-delay: 0.45s\"\n />\n </span>\n </a>\n</template>\n","<script lang=\"ts\" setup>\nimport type { NavItem } from '@/types/navItem'\nimport { computed } from 'vue'\nimport FClose from '@/ui/common/FClose.vue'\n\ndefineOptions({ name: 'ElSidebar' })\n\nconst props = defineProps<{\n modelValue: boolean\n items: NavItem[]\n position?: 'left' | 'right'\n title?: string\n widthClasses?: string\n}>()\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: boolean]\n}>()\n\nconst position = props.position || 'left'\nconst widthClasses = props.widthClasses || 'w-[80%] max-w-[300px]'\n\nconst isOpen = computed({\n get: () => props.modelValue,\n set: (value) => emit('update:modelValue', value),\n})\n\nconst visibleItems = computed(() => props.items.filter((item) => !item.isHidden))\n\nfunction handleItemClick(item: NavItem) {\n if (item.isDisabled)\n return\n\n if (item.onClick) {\n item.onClick({ item, event: new MouseEvent('click') })\n } else if (item.href) {\n if (item.href.includes('http')) {\n window.open(item.href, item.target || '_self')?.focus()\n } else {\n window.location.href = item.href\n }\n }\n\n isOpen.value = false\n}\n\n// Position-specific classes\nconst transitionClasses = computed(() => {\n if (position === 'left') {\n return {\n enter: '-translate-x-full',\n leave: '-translate-x-full',\n position: 'justify-start',\n closeButton: '-right-16',\n }\n } else {\n return {\n enter: 'translate-x-full',\n leave: 'translate-x-full',\n position: 'justify-end',\n closeButton: '-left-16',\n }\n }\n})\n</script>\n\n<template>\n <!-- Backdrop -->\n <Transition\n enter-active-class=\"transition-opacity duration-300 ease-out\"\n leave-active-class=\"transition-opacity duration-200 ease-in\"\n enter-from-class=\"opacity-0\"\n enter-to-class=\"opacity-100\"\n leave-from-class=\"opacity-100\"\n leave-to-class=\"opacity-0\"\n >\n <div\n v-if=\"isOpen\"\n class=\"absolute inset-0 z-40 bg-black/50 backdrop-blur-sm\"\n @click=\"isOpen = false\"\n />\n </Transition>\n\n <!-- Sidebar -->\n <Transition\n enter-active-class=\"transition-all duration-500 ease-[cubic-bezier(0.25,1,0.33,1)]\"\n leave-active-class=\"transition-all duration-400 ease-[cubic-bezier(0.25,1,0.33,1)]\"\n :enter-from-class=\"transitionClasses.enter\"\n enter-to-class=\"translate-x-0\"\n leave-from-class=\"translate-x-0\"\n :leave-to-class=\"transitionClasses.leave\"\n >\n <div\n v-if=\"isOpen\"\n class=\"absolute inset-0 z-50 flex\"\n :class=\"transitionClasses.position\"\n @click=\"isOpen = false\"\n >\n <!-- Menu Panel -->\n <div\n class=\"relative h-full shadow-2xl bg-black/30 backdrop-blur-xl flex flex-col justify-center\"\n :class=\"widthClasses\"\n @click.stop\n >\n <FClose\n class=\"absolute top-4 z-10 text-white\"\n :class=\"transitionClasses.closeButton\"\n @click=\"isOpen = false\"\n />\n\n <!-- Title -->\n <div v-if=\"title\" class=\"px-9 pt-12 pb-4\">\n <h3 class=\"text-base font-medium text-theme-400\">\n {{ title }}\n </h3>\n </div>\n\n <!-- Header Slot -->\n <div v-if=\"$slots.header\" class=\"px-4 pb-8 border-b border-white/10\">\n <slot name=\"header\" />\n </div>\n\n <!-- Menu Items -->\n <div class=\"flex-1 p-6 space-y-2 overflow-y-auto\" :class=\"{ 'pt-6': !title && !$slots.header, 'pt-4': title || $slots.header }\">\n <TransitionGroup\n enter-active-class=\"transition-all duration-400 ease-[cubic-bezier(0.25,1,0.33,1)]\"\n leave-active-class=\"transition-all duration-200 ease-[cubic-bezier(0.25,1,0.33,1)]\"\n :enter-from-class=\"position === 'left' ? '-translate-x-4 opacity-0' : 'translate-x-4 opacity-0'\"\n enter-to-class=\"translate-x-0 opacity-100\"\n leave-from-class=\"translate-x-0 opacity-100\"\n :leave-to-class=\"position === 'left' ? '-translate-x-4 opacity-0' : 'translate-x-4 opacity-0'\"\n >\n <button\n v-for=\"(item, index) in visibleItems\"\n :key=\"item.key || item.label || index\"\n :style=\"{ transitionDelay: `${index * 40}ms` }\"\n class=\"cursor-pointer w-full text-left p-3 rounded-xl transition-all duration-200 ease-[cubic-bezier(0.25,1,0.33,1)] group\"\n :class=\"[\n item.isActive\n ? 'bg-primary-500/20 border border-primary-500/40'\n : 'hover:bg-white/10',\n item.isDisabled && 'opacity-50 cursor-not-allowed',\n ]\"\n :disabled=\"item.isDisabled\"\n @click=\"handleItemClick(item)\"\n >\n <div class=\"flex items-center gap-3\">\n <i\n v-if=\"item.icon?.src\"\n class=\"size-5 flex-shrink-0 transition-transform duration-200 ease-[cubic-bezier(0.25,1,0.33,1)] group-hover:scale-110\"\n :class=\"[\n item.icon.src,\n item.isActive ? 'text-primary-400' : 'text-white/70 group-hover:text-white',\n ]\"\n />\n <div class=\"flex-1\">\n <div\n class=\"font-medium text-sm\"\n :class=\"item.isActive ? 'text-primary-300' : 'text-white'\"\n >\n {{ item.label }}\n </div>\n <div v-if=\"item.subLabel\" class=\"text-xs text-white/50 mt-0.5\">\n {{ item.subLabel }}\n </div>\n </div>\n </div>\n </button>\n </TransitionGroup>\n </div>\n\n <!-- Footer -->\n <div class=\"p-6\">\n <slot name=\"footer\">\n <div class=\"text-center\">\n <p class=\"text-[10px] text-white/40 font-sans\">\n Digital Self by <a href=\"https://www.fiction.com\" target=\"_blank\" class=\"text-white/60 hover:text-white/80 transition-colors\">Fiction</a>\n </p>\n </div>\n </slot>\n </div>\n </div>\n </div>\n </Transition>\n</template>\n","<script lang=\"ts\" setup>\nimport type { AgentMode } from '../schema'\nimport type { SelfController } from '../SelfController'\nimport type { NavItem } from '@/types/navItem'\nimport { computed } from 'vue'\nimport { AGENT_MODES } from '../schema'\nimport ElSidebar from './ElSidebar.vue'\n\ndefineOptions({ name: 'SelfModeSidebar' })\n\nconst props = defineProps<{\n modelValue: boolean\n selfController?: SelfController\n}>()\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: boolean]\n}>()\n\nconst isOpen = computed({\n get: () => props.modelValue,\n set: (value) => emit('update:modelValue', value),\n})\n\nconst currentMode = computed(() => props.selfController?.agentMode?.value ?? 'self')\n\nconst modeItems = computed<NavItem[]>(() => AGENT_MODES.map((mode) => ({\n key: mode.mode,\n icon: { src: mode.icon },\n label: mode.label,\n isActive: currentMode.value === mode.mode,\n onClick: () => {\n props.selfController?.setMode(mode.mode as AgentMode)\n },\n})))\n</script>\n\n<template>\n <ElSidebar\n v-model=\"isOpen\"\n :items=\"modeItems\"\n position=\"right\"\n title=\"Mode\"\n width-classes=\"w-[80%] max-w-[255px]\"\n />\n</template>\n","<script lang=\"ts\" setup>\nimport type { FictionSDK } from '../../sdkClient'\nimport type { Self } from '../schema'\nimport type { NavItem } from '@/types/navItem'\nimport { computed } from 'vue'\nimport ElSidebar from './ElSidebar.vue'\n\ndefineOptions({ name: 'SelfSidebar' })\n\nconst props = defineProps<{\n modelValue: boolean\n self: Self\n sdk: FictionSDK\n title?: string\n}>()\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: boolean]\n}>()\n\nconst isOpen = computed({\n get: () => props.modelValue,\n set: (value) => emit('update:modelValue', value),\n})\n\nconst menuItems = computed<NavItem[]>(() => {\n const items: NavItem[] = [\n {\n key: 'share',\n icon: { src: 'i-tabler-share' },\n label: 'Share This Digital Self',\n onClick: () => {\n const url = `${window.location.origin}/@${props.self.handle || props.self.selfId}`\n navigator.clipboard.writeText(url)\n // TODO: Show notification that URL was copied\n },\n },\n {\n key: 'profile',\n icon: { src: 'i-tabler-user' },\n label: 'Visit Full Profile',\n onClick: () => {\n window.open(`/@${props.self.handle || props.self.selfId}`, '_blank')\n },\n },\n {\n key: 'create',\n icon: { src: 'i-tabler-sparkles' },\n label: 'Create Your Own',\n onClick: () => {\n window.open('/auth', '_blank')\n },\n },\n ]\n\n // Add logout option if user is authenticated\n if (props.sdk.activeUser.value) {\n items.push({\n key: 'logout',\n icon: { src: 'i-tabler-logout' },\n label: 'Logout',\n onClick: async () => {\n await props.sdk.logout()\n },\n })\n }\n\n return items\n})\n</script>\n\n<template>\n <ElSidebar\n v-model=\"isOpen\"\n :items=\"menuItems\"\n position=\"left\"\n :title=\"title || 'Menu'\"\n />\n</template>\n","<script setup lang=\"ts\">\nimport type { AudioLevel } from '../schema'\nimport type { SelfController } from '../SelfController'\nimport { onMounted, onUnmounted, ref, watch } from 'vue'\nimport { VISUALIZER_CONFIG, VOICE_FREQUENCIES } from '../constants'\n\ninterface AudioVisualizerProps {\n rms?: number\n color?: string\n isActive?: boolean\n audioLevels?: AudioLevel\n isListening?: boolean\n isSpeaking?: boolean\n isConnected?: boolean\n enableRealAudio?: boolean\n selfController?: SelfController\n enableWaveMotion?: boolean\n enableScrollingWave?: boolean\n}\n\nconst props = defineProps<AudioVisualizerProps>()\n\nconst canvasRef = ref<HTMLCanvasElement>()\nlet ctx: CanvasRenderingContext2D | null = null\nlet animationFrame: number | null = null\n\n// Mobile optimization\nconst isMobile = ref(false)\nconst isVisible = ref(true)\n\n// Gradient caching for performance\nconst gradientCache = new Map<string, CanvasGradient>()\nlet backgroundGradient: CanvasGradient | null = null\n\n// Web Audio API for real frequency analysis\nlet analyser: AnalyserNode | null = null\nlet frequencyData: Uint8Array | null = null\nconst audioPermission = ref(false)\nconst audioError = ref<string | null>(null)\n\n// Physics state\nconst { bars, barWidth, barSpacing, minHeight, maxHeight, STIFFNESS, DAMPING, PEAK_HOLD_TIME, PEAK_DECAY_STIFFNESS, PEAK_DECAY_DAMPING } = VISUALIZER_CONFIG\n\nconst heights = new Float32Array(bars).fill(minHeight)\nconst velocities = new Float32Array(bars).fill(0)\nconst targets = new Float32Array(bars).fill(minHeight)\nconst peaks = new Float32Array(bars).fill(minHeight)\nconst peakHoldTime = new Float32Array(bars).fill(0)\nconst peakDecayVelocity = new Float32Array(bars).fill(0)\n\n// Frequency-specific physics modifiers\nfunction getFrequencyPhysics(freq: number) {\n if (freq < 200)\n return { stiffnessMultiplier: 0.7, dampingMultiplier: 1.2 }\n if (freq < 1000)\n return { stiffnessMultiplier: 1.0, dampingMultiplier: 1.0 }\n if (freq < 4000)\n return { stiffnessMultiplier: 1.3, dampingMultiplier: 0.8 }\n return { stiffnessMultiplier: 1.5, dampingMultiplier: 0.6 }\n}\n\n// Audio setup using shared context from SelfController\nasync function setupAudio() {\n if (typeof window === 'undefined' || !props.enableRealAudio || !props.selfController)\n return\n\n try {\n const clientAudio = props.selfController.getClientAudio()\n\n if (clientAudio?.isAudioContextAvailable()) {\n const sharedAnalyser = clientAudio.getSharedAnalyser()\n if (sharedAnalyser) {\n analyser = sharedAnalyser\n const arrayBuffer = new ArrayBuffer(sharedAnalyser.frequencyBinCount)\n frequencyData = new Uint8Array(arrayBuffer)\n audioPermission.value = true\n audioError.value = null\n console.warn('AudioVisualizer: Using shared audio context from ClientAudio')\n return\n }\n }\n\n console.warn('AudioVisualizer: Could not use shared context, creating independent audio analysis')\n audioPermission.value = false\n audioError.value = 'Shared audio context not available'\n } catch (err) {\n audioError.value = err instanceof Error ? err.message : 'Failed to setup shared audio'\n audioPermission.value = false\n console.error('Shared audio setup failed:', err)\n }\n}\n\nfunction cleanupAudio() {\n analyser = null\n frequencyData = null\n audioPermission.value = false\n audioError.value = null\n}\n\n// DPR scaling\nlet dpr = 1\nfunction resizeCanvas() {\n if (!canvasRef.value)\n return\n\n if (typeof window !== 'undefined') {\n dpr = Math.max(1, Math.min(2, window.devicePixelRatio || 1))\n }\n\n const cssW = (barWidth + barSpacing) * bars - barSpacing\n const cssH = maxHeight\n canvasRef.value.width = Math.floor(cssW * dpr)\n canvasRef.value.height = Math.floor(cssH * dpr)\n canvasRef.value.style.width = `${cssW}px`\n canvasRef.value.style.height = `${cssH}px`\n if (ctx)\n ctx.setTransform(dpr, 0, 0, dpr, 0, 0)\n\n clearGradientCache()\n}\n\n// Generate real frequency bands from microphone input\nfunction generateRealInputFrequencyBands(): number[] {\n if (!analyser || !frequencyData || !audioPermission.value) {\n return Array.from({ length: VOICE_FREQUENCIES.length }, () => 0)\n }\n\n analyser.getByteFrequencyData(frequencyData as Uint8Array<ArrayBuffer>)\n return mapFrequencyDataToBands(frequencyData)\n}\n\n// Generate real frequency bands from ElevenLabs output\nfunction generateRealOutputFrequencyBands(): number[] {\n if (!props.selfController) {\n return Array.from({ length: VOICE_FREQUENCIES.length }, () => 0)\n }\n\n try {\n const outputFrequencyData = props.selfController.getOutputFrequencyData()\n if (outputFrequencyData && outputFrequencyData.length > 0) {\n return mapFrequencyDataToBands(outputFrequencyData)\n }\n } catch (error) {\n console.warn('Failed to get output frequency data:', error)\n }\n\n return Array.from({ length: VOICE_FREQUENCIES.length }, () => 0)\n}\n\n// Map frequency data to voice-optimized bands\nfunction mapFrequencyDataToBands(frequencyData: Uint8Array): number[] {\n const bands = Array.from({ length: VOICE_FREQUENCIES.length }, (_, i) => {\n const targetFreq = VOICE_FREQUENCIES[i]\n const estimatedNyquist = 12000\n const binIndex = Math.floor((targetFreq / estimatedNyquist) * frequencyData.length)\n const binWidth = Math.max(1, Math.floor(frequencyData.length / VOICE_FREQUENCIES.length / 2))\n\n let amplitude = 0\n for (let j = 0; j < binWidth && (binIndex + j) < frequencyData.length; j++) {\n amplitude += frequencyData[binIndex + j]\n }\n amplitude = (amplitude / binWidth) / 255\n\n // Voice-specific frequency weighting\n let weight = 1.0\n if (targetFreq < 150) {\n weight = 0.1\n } else if (targetFreq < 200) {\n weight = 0.3\n } else if (targetFreq >= 400 && targetFreq <= 600) {\n weight = 1.4\n } else if (targetFreq >= 1400 && targetFreq <= 1600) {\n weight = 1.3\n } else if (targetFreq >= 2400 && targetFreq <= 2600) {\n weight = 1.2\n } else if (targetFreq >= 200 && targetFreq <= 2000) {\n weight = 1.1\n } else if (targetFreq >= 2000 && targetFreq <= 4000) {\n weight = 0.9\n } else if (targetFreq > 6000) {\n weight = 0.4\n } else {\n weight = 0.7\n }\n\n const compressed = amplitude ** 0.5\n const scaled = compressed * 0.6\n const finalAmplitude = scaled * weight\n\n return Math.min(0.85, finalAmplitude)\n })\n\n return bands\n}\n\n// Speech pattern simulation\nlet currentPhoneme = 0\nlet phonemeTimer = 0\nlet speechCadence = 0\n\nconst phonemePatterns = [\n { name: 'a', f1: 730, f2: 1090, f3: 2440, duration: 120, energy: 0.9 },\n { name: 'e', f1: 530, f2: 1840, f3: 2480, duration: 100, energy: 0.8 },\n { name: 'i', f1: 270, f2: 2290, f3: 3010, duration: 110, energy: 0.85 },\n { name: 'o', f1: 570, f2: 840, f3: 2410, duration: 130, energy: 0.9 },\n { name: 'u', f1: 300, f2: 870, f3: 2240, duration: 140, energy: 0.8 },\n { name: 's', f1: 4000, f2: 6000, f3: 8000, duration: 80, energy: 0.4 },\n { name: 't', f1: 1500, f2: 4000, f3: 6000, duration: 60, energy: 0.3 },\n { name: 'n', f1: 280, f2: 1700, f3: 2600, duration: 70, energy: 0.6 },\n { name: 'r', f1: 350, f2: 1200, f3: 1650, duration: 90, energy: 0.7 },\n { name: 'pause', f1: 0, f2: 0, f3: 0, duration: 150, energy: 0.05 },\n]\n\nfunction generateSpeechPatterns(intensity: number): number[] {\n const bands = Array.from({ length: VOICE_FREQUENCIES.length }, () => 0)\n\n if (intensity <= 0) {\n return bands\n }\n\n phonemeTimer += 16.67\n speechCadence += 0.02\n\n if (phonemeTimer > phonemePatterns[currentPhoneme].duration) {\n currentPhoneme = (currentPhoneme + 1) % phonemePatterns.length\n phonemeTimer = 0\n }\n\n const currentPattern = phonemePatterns[currentPhoneme]\n const nextPattern = phonemePatterns[(currentPhoneme + 1) % phonemePatterns.length]\n const transitionProgress = phonemeTimer / currentPattern.duration\n const smoothProgress = 0.5 * (1 + Math.cos(Math.PI + transitionProgress * Math.PI))\n const breathingPattern = 0.7 + 0.3 * Math.sin(speechCadence * 0.5)\n const microRhythm = 0.9 + 0.1 * Math.sin(speechCadence * 8)\n\n for (let i = 0; i < VOICE_FREQUENCIES.length; i++) {\n const freq = VOICE_FREQUENCIES[i]\n let amplitude = 0\n\n const f1Response = getFormantResponse(freq, currentPattern.f1, nextPattern.f1, smoothProgress, 200)\n const f2Response = getFormantResponse(freq, currentPattern.f2, nextPattern.f2, smoothProgress, 300)\n const f3Response = getFormantResponse(freq, currentPattern.f3, nextPattern.f3, smoothProgress, 400)\n\n amplitude = (f1Response * 0.4 + f2Response * 0.35 + f3Response * 0.25)\n * (currentPattern.energy * (1 - smoothProgress) + nextPattern.energy * smoothProgress)\n\n const fundamental = 150 + 50 * Math.sin(speechCadence * 0.3)\n if (Math.abs(freq - fundamental) < 20\n || Math.abs(freq - fundamental * 2) < 30\n || Math.abs(freq - fundamental * 3) < 40) {\n amplitude += 0.3 * currentPattern.energy\n }\n\n amplitude *= intensity * breathingPattern * microRhythm\n amplitude *= (0.85 + Math.random() * 0.3)\n\n bands[i] = Math.max(0, Math.min(1, amplitude))\n }\n\n return bands\n}\n\nfunction getFormantResponse(freq: number, currentFormant: number, nextFormant: number, progress: number, bandwidth: number): number {\n if (currentFormant === 0 && nextFormant === 0)\n return 0\n\n const interpolatedFormant = currentFormant * (1 - progress) + nextFormant * progress\n if (interpolatedFormant === 0)\n return 0\n\n const distance = Math.abs(freq - interpolatedFormant)\n return Math.exp(-((distance / bandwidth) ** 2))\n}\n\n// Cached data for performance\nlet cachedOutputBands: number[] = []\nlet lastOutputFetch = 0\nlet apiErrorCount = 0\n\nfunction getApiThrottleInterval() {\n const baseInterval = isMobile.value ? 100 : 50\n const errorMultiplier = Math.min(2 ** apiErrorCount, 8)\n return baseInterval * errorMultiplier\n}\n\n// Main frequency generation function\nfunction generateFrequencyBands(intensity: number): number[] {\n let baseBands: number[] = []\n\n // For listening mode with real audio\n if (props.enableRealAudio && props.isListening && audioPermission.value && analyser && frequencyData) {\n const realBands = generateRealInputFrequencyBands()\n const hasSignal = realBands.some((band) => band > 0.05)\n if (hasSignal) {\n baseBands = realBands\n }\n }\n\n // For speaking mode with ElevenLabs\n if (!baseBands.length && props.isSpeaking && props.selfController) {\n const hasOutputActivity = props.audioLevels && props.audioLevels.outputLevel > 0.05\n\n if (hasOutputActivity) {\n const now = Date.now()\n const throttleInterval = getApiThrottleInterval()\n\n if (now - lastOutputFetch > throttleInterval) {\n lastOutputFetch = now\n try {\n const bands = generateRealOutputFrequencyBands()\n const hasSignal = bands.some((band) => band > 0.05)\n if (hasSignal) {\n cachedOutputBands = bands\n apiErrorCount = 0\n }\n } catch (error) {\n console.warn('Error fetching frequency data:', error)\n apiErrorCount++\n }\n }\n\n const hasSignal = cachedOutputBands.some((band) => band > 0.05)\n if (hasSignal) {\n baseBands = cachedOutputBands\n }\n }\n }\n\n // Fallback patterns\n if (!baseBands.length) {\n if (intensity > 0 && (props.isListening || props.isSpeaking)) {\n baseBands = props.isSpeaking ? generateSpeechPatterns(intensity) : generateIntensityBasedBands(intensity)\n } else if (props.isConnected) {\n baseBands = generateIntensityBasedBands(0.02)\n } else {\n // Idle state - zeros base, wave overlay provides simple algorithmic pattern\n baseBands = Array.from({ length: VOICE_FREQUENCIES.length }, () => 0)\n }\n }\n\n // Add wave motion overlay\n if (props.enableWaveMotion && typeof window !== 'undefined') {\n baseBands = addWaveMotionOverlay(baseBands, intensity)\n }\n\n return baseBands\n}\n\nfunction addWaveMotionOverlay(bands: number[], intensity: number): number[] {\n const time = performance.now() * 0.001\n const enhancedBands = [...bands]\n\n for (let i = 0; i < bands.length; i++) {\n const frequency = i * (2 * Math.PI) / bands.length\n let waveMotion = 0\n\n if (props.isListening || props.isSpeaking) {\n const primaryWave = Math.sin(time * 4.2 + frequency * 0.6 - (props.enableScrollingWave ? time * 2 : 0)) * 0.15\n const secondaryWave = Math.sin(time * 6.8 + frequency * 1.2 - (props.enableScrollingWave ? time * 1.5 : 0)) * 0.08\n const breathing = Math.sin(time * 0.8) * 0.05\n waveMotion = primaryWave + secondaryWave + breathing\n } else if (props.isConnected) {\n const gentleBreath = Math.sin(time * 0.6) * 0.1\n const subtleWave = Math.sin(time * 2 + frequency * 0.3) * 0.05\n waveMotion = gentleBreath + subtleWave\n } else {\n // Idle state - simple algorithmic sine wave\n const sineWave = Math.sin(time * 1.5 + frequency) * 0.12\n const breathing = Math.sin(time * 0.4) * 0.05\n waveMotion = sineWave + breathing\n }\n\n const motionIntensity = Math.max(0.3, intensity)\n enhancedBands[i] = Math.max(0, Math.min(0.9, bands[i] + waveMotion * motionIntensity))\n }\n\n return enhancedBands\n}\n\nfunction generateIntensityBasedBands(intensity: number): number[] {\n const bands = Array.from({ length: VOICE_FREQUENCIES.length }, () => 0)\n\n if (intensity <= 0) {\n return bands\n }\n\n for (let i = 0; i < VOICE_FREQUENCIES.length; i++) {\n const freq = VOICE_FREQUENCIES[i]\n let amplitude = 0\n\n if (freq >= 400 && freq <= 600) {\n amplitude = intensity * 0.9\n } else if (freq >= 1400 && freq <= 1600) {\n amplitude = intensity * 0.8\n } else if (freq >= 2400 && freq <= 2600) {\n amplitude = intensity * 0.7\n } else if (freq >= 200 && freq <= 2000) {\n amplitude = intensity * 0.6\n } else if (freq >= 85 && freq <= 300) {\n amplitude = intensity * 0.4\n } else {\n amplitude = intensity * 0.2\n }\n\n amplitude *= (0.8 + Math.random() * 0.4)\n bands[i] = Math.max(0, Math.min(1, amplitude))\n }\n\n return bands\n}\n\nfunction detectMobile() {\n if (typeof window === 'undefined')\n return\n\n const userAgent = navigator.userAgent.toLowerCase()\n const mobile = /android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini/i.test(userAgent)\n isMobile.value = mobile\n}\n\nfunction getGradient(key: string, createGradient: () => CanvasGradient): CanvasGradient {\n if (!gradientCache.has(key)) {\n gradientCache.set(key, createGradient())\n }\n return gradientCache.get(key)!\n}\n\nfunction clearGradientCache() {\n gradientCache.clear()\n backgroundGradient = null\n}\n\nfunction startAnimation() {\n if (typeof window === 'undefined' || !ctx || !canvasRef.value)\n return\n\n detectMobile()\n\n const canvas = canvasRef.value\n const width = canvas.width / dpr\n const height = canvas.height / dpr\n\n function animate(_currentTime: number) {\n if (!ctx)\n return\n\n if (!isVisible.value) {\n animationFrame = requestAnimationFrame(animate)\n return\n }\n\n ctx.clearRect(0, 0, width, height)\n\n // Compute intensity\n let intensity = 0\n if (props.audioLevels) {\n if (props.isListening)\n intensity = Math.min(props.audioLevels.inputLevel * 1.5, 1)\n else if (props.isSpeaking)\n intensity = Math.min(props.audioLevels.outputLevel * 1.8, 1)\n } else if (props.rms !== undefined) {\n intensity = Math.min(props.rms / 70, 1)\n }\n\n const bandLevels = generateFrequencyBands(intensity)\n\n // Update target heights\n for (let i = 0; i < bars; i++) {\n targets[i] = minHeight + bandLevels[i] * (maxHeight - minHeight)\n }\n\n // Physics simulation\n const deltaTime = 16.67\n\n for (let i = 0; i < bars; i++) {\n const freq = VOICE_FREQUENCIES[i]\n const physics = getFrequencyPhysics(freq)\n\n const delta = targets[i] - heights[i]\n const stiffness = STIFFNESS * physics.stiffnessMultiplier\n const damping = DAMPING * physics.dampingMultiplier\n const accel = delta * stiffness - velocities[i] * damping\n velocities[i] += accel\n heights[i] += velocities[i]\n\n // Peak tracking\n if (heights[i] > peaks[i]) {\n peaks[i] = heights[i]\n peakHoldTime[i] = PEAK_HOLD_TIME\n peakDecayVelocity[i] = 0\n } else {\n peakHoldTime[i] = Math.max(0, peakHoldTime[i] - deltaTime)\n\n if (peakHoldTime[i] <= 0) {\n const peakDelta = Math.max(minHeight, heights[i] * 1.1) - peaks[i]\n const peakAccel = peakDelta * PEAK_DECAY_STIFFNESS - peakDecayVelocity[i] * PEAK_DECAY_DAMPING\n peakDecayVelocity[i] += peakAccel\n peaks[i] = Math.max(minHeight, peaks[i] + peakDecayVelocity[i])\n }\n }\n }\n\n // Edge fade distance\n const edgeFadeDistance = bars * 0.15\n\n // Background effects\n function drawBackground() {\n if (!ctx)\n return\n\n if (!backgroundGradient) {\n backgroundGradient = ctx.createRadialGradient(\n width * 0.5,\n height * 0.6,\n height * 0.1,\n width * 0.5,\n height * 0.6,\n height * 0.9,\n )\n backgroundGradient.addColorStop(0, 'rgba(255,255,255,0.02)')\n backgroundGradient.addColorStop(1, 'rgba(0,0,0,0.08)')\n }\n\n ctx.fillStyle = backgroundGradient\n ctx.fillRect(0, 0, width, height)\n }\n\n drawBackground()\n\n // Optional glow effect for active states\n if ((props.isListening || props.isSpeaking) && !isMobile.value) {\n const time = performance.now() * 0.001\n const glowIntensity = 0.1 + (Math.sin(time * 2) * 0.05)\n\n ctx.save()\n ctx.globalCompositeOperation = 'lighter'\n ctx.globalAlpha = glowIntensity\n\n const glowColor = props.isSpeaking\n ? 'rgba(34,197,94,0.4)'\n : 'rgba(59,130,246,0.4)'\n\n ctx.fillStyle = glowColor\n for (let i = 0; i < bars; i++) {\n const x = i * (barWidth + barSpacing)\n const h = heights[i]\n const y = height - h\n ctx.beginPath()\n ctx.roundRect(x - 1, y - 1, barWidth + 2, h + 2, [2, 2, 0, 0])\n ctx.fill()\n }\n ctx.restore()\n }\n\n // Draw frequency bars\n for (let i = 0; i < bars; i++) {\n const x = i * (barWidth + barSpacing)\n const h = heights[i]\n const y = height - h\n const freq = VOICE_FREQUENCIES[i]\n\n // Edge fading\n const distFromEdge = Math.min(i, bars - 1 - i)\n const edgeFade = Math.min(1, distFromEdge / edgeFadeDistance)\n\n const intensity = Math.min(1, h / maxHeight)\n const alpha1 = (0.8 + intensity * 0.2) * edgeFade\n const alpha2 = (0.6 + intensity * 0.2) * edgeFade\n const alpha3 = (0.3 + intensity * 0.1) * edgeFade\n\n const intensityKey = Math.round(intensity * 10) / 10\n const edgeKey = Math.round(edgeFade * 10) / 10\n const cacheKey = `${props.isSpeaking ? 'speaking' : props.isListening ? 'listening' : 'idle'}-${intensityKey}-${edgeKey}-${h}`\n\n const gradient = getGradient(cacheKey, () => {\n const grad = ctx!.createLinearGradient(0, y, 0, y + h)\n\n if (props.isSpeaking) {\n grad.addColorStop(0, `rgba(34, 197, 94, ${alpha1})`)\n grad.addColorStop(0.5, `rgba(34, 197, 94, ${alpha2})`)\n grad.addColorStop(1, `rgba(34, 197, 94, ${alpha3})`)\n\n if ((freq >= 400 && freq <= 600) || (freq >= 1400 && freq <= 1600)) {\n grad.addColorStop(0, `rgba(74, 222, 128, ${Math.min(1, alpha1 + 0.2)})`)\n }\n } else if (props.isListening) {\n grad.addColorStop(0, `rgba(59, 130, 246, ${alpha1})`)\n grad.addColorStop(0.5, `rgba(59, 130, 246, ${alpha2})`)\n grad.addColorStop(1, `rgba(59, 130, 246, ${alpha3})`)\n } else {\n const a1 = 0.6 * edgeFade\n const a2 = 0.4 * edgeFade\n const a3 = 0.2 * edgeFade\n grad.addColorStop(0, `rgba(156, 163, 175, ${a1})`)\n grad.addColorStop(0.6, `rgba(156, 163, 175, ${a2})`)\n grad.addColorStop(1, `rgba(156, 163, 175, ${a3})`)\n }\n\n return grad\n })\n\n ctx.fillStyle = gradient\n ctx.beginPath()\n ctx.roundRect(x, y, barWidth, h, [1, 1, 0, 0])\n ctx.fill()\n\n // Peak indicators\n if (peaks[i] > minHeight + 2) {\n const peakY = height - peaks[i]\n const peakAlpha = peakHoldTime[i] > 0 ? 0.9 : Math.max(0.3, peakHoldTime[i] / PEAK_HOLD_TIME)\n\n ctx.fillStyle = `rgba(255, 255, 255, ${peakAlpha})`\n ctx.fillRect(x, peakY - 1, barWidth, 2)\n\n if (peakAlpha > 0.5 && !isMobile.value) {\n ctx.shadowColor = props.isSpeaking ? 'rgba(34, 197, 94, 0.5)' : 'rgba(59, 130, 246, 0.5)'\n ctx.shadowBlur = 3\n ctx.fillRect(x, peakY - 1, barWidth, 2)\n ctx.shadowBlur = 0\n }\n }\n }\n\n animationFrame = requestAnimationFrame(animate)\n }\n\n animationFrame = requestAnimationFrame(animate)\n}\n\nonMounted(() => {\n if (canvasRef.value) {\n ctx = canvasRef.value.getContext('2d')\n resizeCanvas()\n if (typeof window !== 'undefined') {\n window.addEventListener('resize', onResize, { passive: true })\n\n const handleVisibilityChange = () => {\n isVisible.value = !document.hidden\n }\n document.addEventListener('visibilitychange', handleVisibilityChange, { passive: true })\n }\n // Start animation immediately on mount\n startAnimation()\n }\n\n // Setup real audio if enabled\n if (props.enableRealAudio && props.isListening) {\n setTimeout(() => {\n setupAudio().catch(console.error)\n }, 100)\n }\n})\n\nfunction onResize() {\n if (typeof window !== 'undefined') {\n const next = Math.max(1, Math.min(2, window.devicePixelRatio || 1))\n if (next !== dpr) { dpr = next }\n }\n resizeCanvas()\n}\n\nonUnmounted(() => {\n if (animationFrame)\n cancelAnimationFrame(animationFrame)\n if (typeof window !== 'undefined') {\n window.removeEventListener('resize', onResize)\n document.removeEventListener('visibilitychange', () => {\n isVisible.value = !document.hidden\n })\n }\n\n cleanupAudio()\n})\n\nwatch(\n [() => props.isActive, () => props.isConnected, () => props.isListening, () => props.isSpeaking, () => props.rms],\n () => {\n if (!ctx && canvasRef.value)\n ctx = canvasRef.value.getContext('2d')\n if (animationFrame)\n cancelAnimationFrame(animationFrame)\n startAnimation()\n },\n { immediate: true },\n)\n\nwatch(\n [() => props.enableRealAudio, () => props.isListening],\n async ([enableRealAudio, isListening], [prevEnableRealAudio, prevIsListening]) => {\n if (enableRealAudio && isListening && (!prevEnableRealAudio || !prevIsListening)) {\n if (!audioPermission.value) {\n await setupAudio().catch(console.error)\n }\n }\n\n if ((!enableRealAudio || !isListening) && (prevEnableRealAudio && prevIsListening)) {\n cleanupAudio()\n }\n },\n { immediate: false },\n)\n\nwatch(canvasRef, (c) => {\n if (c && !ctx) {\n ctx = c.getContext('2d')\n resizeCanvas()\n startAnimation()\n }\n})\n</script>\n\n<template>\n <div class=\"w-full max-w-full flex items-center justify-center\">\n <canvas\n ref=\"canvasRef\"\n :width=\"(barWidth + barSpacing) * bars - barSpacing\"\n :height=\"maxHeight\"\n class=\"w-full max-w-full [image-rendering:-webkit-optimize-contrast]\"\n :style=\"{ height: `${maxHeight}px` }\"\n />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { SelfController } from '../SelfController'\nimport { computed } from 'vue'\nimport ElAudioVisualizer from './ElAudioVisualizer.vue'\nimport ElSelfButton from './ElSelfButton.vue'\n\nconst { selfController } = defineProps<{\n selfController?: SelfController\n}>()\n\nconst state = computed(() => selfController?.voiceState.value)\n\nconst callButtonTheme = computed(() => {\n if (state.value?.isConnected) {\n return 'red' // End call - red for destructive action\n }\n return 'green' // Start call - green for positive action\n})\n\nconst callButtonIcon = computed(() => {\n if (state.value?.isConnected) {\n return 'i-heroicons-phone-x-mark'\n }\n return 'i-heroicons-phone'\n})\n\nconst callButtonText = computed(() => {\n if (state.value?.isConnected) {\n return 'End Call'\n }\n return 'Start a Call'\n})\n\nconst isButtonDisabled = computed(() => {\n const state = selfController?.voiceState.value\n return !!state?.error || state?.connectionStatus === 'connecting'\n})\n\nconst isButtonLoading = computed(() => {\n return state.value?.connectionStatus === 'connecting'\n})\n\nasync function toggleCall() {\n if (!selfController)\n return\n\n try {\n if (selfController.voiceState.value.isConnected) {\n await selfController.endConversation()\n } else {\n // End any existing conversation first\n if (selfController.isConnected()) {\n await selfController.endConversation()\n }\n await selfController.startVoiceConversation()\n selfController.agentMode.value = 'talk'\n }\n } catch (error) {\n console.error('Error toggling call:', error)\n }\n}\n</script>\n\n<template>\n <div class=\"flex flex-col h-full items-center justify-center px-6 py-8\">\n <div class=\"flex-1 flex flex-col items-center justify-center space-y-8 py-4\">\n <div class=\"h-32 w-full max-w-md\">\n <ElAudioVisualizer\n :audio-levels=\"selfController?.audioLevels.value ?? { inputLevel: 0, outputLevel: 0 }\"\n :is-listening=\"selfController?.voiceState.value.isListening ?? false\"\n :is-speaking=\"selfController?.voiceState.value.isSpeaking ?? false\"\n :is-connected=\"selfController?.voiceState.value.isConnected ?? false\"\n :enable-real-audio=\"true\"\n :enable-wave-motion=\"true\"\n :enable-scrolling-wave=\"true\"\n :self-controller=\"selfController\"\n />\n </div>\n\n <div class=\"text-center flex gap-2 items-center text-xs\">\n <div class=\"flex items-center justify-center gap-2\">\n <div\n v-if=\"selfController?.voiceState.value.isListening\"\n class=\"size-2 bg-blue-500 rounded-full animate-pulse\"\n />\n <div\n v-else-if=\"selfController?.voiceState.value.isSpeaking\"\n class=\"size-2 bg-green-500 rounded-full animate-pulse\"\n />\n <div\n v-else-if=\"selfController?.voiceState.value.isConnected && !selfController?.voiceState.value.isListening && !selfController?.voiceState.value.isSpeaking\"\n class=\"size-2 bg-white/50 rounded-full\"\n />\n <div\n v-else-if=\"selfController?.voiceState.value.error\"\n class=\"size-2 bg-red-500 rounded-full\"\n />\n </div>\n <p class=\"text-white/70 text-sm max-w-xs leading-relaxed\">\n {{ selfController?.voiceState.value.error\n ? `Error: ${selfController.voiceState.value.error}`\n : (selfController?.voiceState.value.transcript || 'Ready to start a call...') }}\n </p>\n </div>\n </div>\n\n <div class=\"flex flex-col items-center space-y-6\">\n <ElSelfButton\n :theme=\"callButtonTheme\"\n :icon=\"callButtonIcon\"\n size=\"lg\"\n :loading=\"isButtonLoading\"\n :disabled=\"isButtonDisabled\"\n @click=\"toggleCall\"\n >\n {{ callButtonText }}\n </ElSelfButton>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { FictionSDK } from '../../sdkClient'\nimport type { Self } from '@/modules/self/schema'\nimport type { ColorName } from '@/utils/color'\nimport { computed, onMounted, onUnmounted, ref, shallowRef, watch } from 'vue'\nimport FSpinner from '@/ui/common/FSpinner.vue'\nimport { getColorSchemeOklch } from '@/utils/color'\nimport { AGENT_MODES } from '../schema'\nimport { SelfController } from '../SelfController'\nimport { getFallbackAvatarDataUrl, getSelfAvatarUrl } from '../utils'\nimport ElAuthGate from './ElAuthGate.vue'\nimport ElModeHeader from './ElModeHeader.vue'\nimport ElSelfAbout from './ElSelfAbout.vue'\nimport ElSelfButton from './ElSelfButton.vue'\nimport ElSelfChat from './ElSelfChat.vue'\nimport ElSelfHeader from './ElSelfHeader.vue'\nimport ElSelfModeSidebar from './ElSelfModeSidebar.vue'\nimport ElSelfSidebar from './ElSelfSidebar.vue'\nimport ElSelfVoice from './ElSelfVoice.vue'\n\nconst {\n sdk,\n self,\n context,\n firstMessage,\n hasClose = false,\n isActive = true,\n loading = false,\n theme = 'green',\n} = defineProps<{\n sdk: FictionSDK\n self: Self\n context?: string\n firstMessage?: string\n hasClose?: boolean\n isActive?: boolean\n loading?: boolean\n theme?: ColorName\n}>()\n\nconst emit = defineEmits<{\n close: [value: string]\n error: [message: string]\n}>()\n\nconst selfController = shallowRef<SelfController>()\nconst isSidebarOpen = ref(false)\nconst isModeSidebarOpen = ref(false)\nconst initError = ref<string>()\nconst rootElement = ref<HTMLElement>()\n\nconst agentMode = computed(() => selfController.value?.agentMode?.value ?? 'self')\n\n// Check if user is authenticated\nconst isAuthenticated = computed(() => sdk.activeUser.value !== undefined)\n\n// Current mode for button display\nconst currentMode = computed(() => {\n const m = AGENT_MODES.find((btn) => btn.mode === agentMode.value)\n return m\n})\n\nfunction createSelfController() {\n if (selfController.value) {\n selfController.value.destroy()\n }\n\n try {\n // SelfController validates agent configuration internally\n selfController.value = new SelfController({\n sdk,\n self,\n context,\n firstMessage,\n })\n } catch (error) {\n console.error('SelfController creation failed:', error)\n throw error\n }\n}\n\n// Set theme CSS variables\nfunction applyTheme(themeName: ColorName) {\n if (!rootElement.value)\n return\n\n const colorScheme = getColorSchemeOklch(themeName)\n\n // Set --primary-* CSS variables on component root for Shadow DOM compatibility\n Object.entries(colorScheme).forEach(([scale, value]) => {\n rootElement.value!.style.setProperty(`--primary-${scale}`, value)\n })\n}\n\nonMounted(() => {\n try {\n createSelfController()\n applyTheme(theme)\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Failed to initialize digital self'\n initError.value = message\n emit('error', message)\n }\n})\n\nonUnmounted(() => {\n if (selfController.value) {\n selfController.value.destroy()\n }\n})\n\n// Watch theme changes and reapply\nwatch(() => theme, (newTheme) => {\n applyTheme(newTheme)\n})\n</script>\n\n<template>\n <div\n ref=\"rootElement\"\n :key=\"getSelfAvatarUrl(self)\"\n class=\"@container/agent self-agent w-full h-full overflow-hidden relative\"\n data-test=\"self-agent\"\n >\n <div v-if=\"loading\" class=\"absolute inset-0 flex items-center justify-center bg-gradient-to-br from-theme-800 to-theme-950 rounded-3xl z-10\">\n <FSpinner class=\"text-white size-8\" />\n </div>\n\n <div\n v-else-if=\"self && !initError\"\n class=\"absolute inset-0 bg-cover bg-center bg-no-repeat\"\n :style=\"{ backgroundImage: `url(${getSelfAvatarUrl(self) || getFallbackAvatarDataUrl()})` }\"\n >\n <div\n class=\"absolute inset-0 bg-gradient-to-br z-0\"\n :class=\"agentMode === 'self' ? 'from-black/70 via-black/50 to-black/80' : 'from-black/90 via-black/90 to-black/100'\"\n />\n <div\n class=\"relative z-10 flex flex-col h-full transition-all duration-500 ease-[cubic-bezier(0.25,1,0.33,1)] will-change-transform\"\n :class=\"isActive ? 'opacity-100 translate-y-0' : 'opacity-0 translate-y-2'\"\n >\n <div class=\"relative z-30 p-2 \" :class=\"agentMode !== 'self' ? 'backdrop-blur-lg' : ''\">\n <div class=\"flex items-center\" :class=\"hasClose ? '' : 'justify-between'\">\n <!-- Left side: Sidebar toggle with user avatar -->\n <div :class=\"hasClose ? 'flex-1 basis-0' : ''\">\n <button\n class=\"cursor-pointer p-2 flex items-center gap-2 rounded-2xl text-white/70 hover:bg-white/10 transition-all duration-300 ease-[cubic-bezier(0.25,1,0.33,1)] hover:scale-105 active:scale-95\"\n @click=\"isSidebarOpen = true\"\n >\n <i class=\"i-tabler-menu size-7\" />\n </button>\n </div>\n\n <!-- Center: Mode selector button (centered when hasClose=true) -->\n <button\n class=\"flex items-center gap-2 px-3.5 py-3 rounded-2xl text-white/90 hover:bg-white/10 transition-all cursor-pointer flex-grow-0\"\n :class=\"{ 'bg-white/10': isModeSidebarOpen }\"\n @click=\"isModeSidebarOpen = true\"\n >\n <i :class=\"currentMode?.icon\" class=\"size-4 opacity-60\" />\n <span class=\"text-sm\">{{ currentMode?.label }}</span>\n <i class=\"i-tabler-chevron-down size-4\" />\n </button>\n\n <!-- Right side: Close button (only in widget mode) -->\n <div v-if=\"hasClose\" class=\"flex-1 basis-0 flex justify-end\">\n <button\n class=\"cursor-pointer flex items-center p-3 rounded-2xl text-white/70 hover:bg-white/10 transition-colors\"\n @click.stop=\"emit('close', 'button')\"\n >\n <i class=\"size-6 i-tabler-x\" />\n </button>\n </div>\n </div>\n </div>\n\n <div\n v-if=\"agentMode === 'self'\"\n class=\"h-full pb-12 flex-1 flex flex-col relative z-20 min-h-0 px-4 @[480px]/agent:px-6 max-w-md mx-auto w-full\"\n >\n <!-- Top spacer -->\n <div class=\"flex-1 basis-0 mb-36\" />\n\n <!-- Avatar header -->\n <ElSelfHeader :self=\"self\" />\n\n <!-- Bottom section with button -->\n <div class=\"flex-1 basis-0 flex flex-col justify-start pt-6\">\n <ElSelfButton\n theme=\"primary\"\n size=\"lg\"\n class=\"w-full\"\n icon=\"i-heroicons-phone\"\n data-test=\"voice-button\"\n @click=\"selfController?.setMode('talk')\"\n >\n Talk to {{ self.name }}\n </ElSelfButton>\n </div>\n </div>\n <div\n v-else-if=\"agentMode === 'talk'\"\n class=\"flex-1 flex flex-col relative z-20 min-h-0 w-full\"\n >\n <ElAuthGate v-if=\"!isAuthenticated\" :sdk=\"sdk\" />\n <template v-else>\n <!-- Sticky header with backdrop blur - full width -->\n <div>\n <div class=\"px-4 pt-4 pb-4 max-w-md mx-auto\">\n <ElModeHeader :self=\"self\" />\n </div>\n </div>\n <ElSelfVoice\n :self-controller=\"selfController\"\n />\n </template>\n </div>\n <div\n v-else\n class=\"flex-1 flex flex-col relative z-20 min-h-0 w-full px-4 @[480px]/agent:px-6\"\n >\n <div class=\"flex-1 min-h-0 max-w-md mx-auto w-full\">\n <template v-if=\"agentMode === 'chat'\">\n <ElAuthGate v-if=\"!isAuthenticated\" :sdk=\"sdk\" />\n <ElSelfChat\n v-else\n :self-controller=\"selfController\"\n :self=\"self\"\n />\n </template>\n <ElSelfAbout\n v-else-if=\"agentMode === 'info'\"\n :self=\"self\"\n />\n </div>\n </div>\n\n <div class=\"relative z-20 text-center py-5 px-6\" :class=\"agentMode === 'info' ? 'hidden' : ''\">\n <a\n href=\"https://www.fiction.com\"\n class=\"flex items-center justify-center gap-1.5 text-[10px] font-sans font-normal text-white/50 hover:text-white/70 transition-colors\"\n >\n <span class=\"\">Digital Self™</span>\n <span class=\"text-white/20\">by</span>\n <span>Fiction.com</span>\n </a>\n </div>\n </div>\n </div>\n <div v-else-if=\"initError\" class=\"bg-gradient-to-br from-theme-800 to-theme-950 text-white flex items-center justify-center h-full p-8\">\n <div class=\"text-center max-w-md space-y-4\">\n <div class=\"flex justify-center\">\n <div class=\"rounded-full bg-red-500/20 flex items-center justify-center size-10\">\n <i class=\"i-tabler-alert-circle size-6 text-red-400\" />\n </div>\n </div>\n <h3 class=\"text-lg font-medium\">\n Self Error\n </h3>\n <p class=\"text-sm text-white/70 leading-relaxed\">\n {{ initError }}\n </p>\n </div>\n </div>\n <div v-else class=\"bg-white/10 backdrop-blur-sm text-white/70 flex items-center justify-center h-full\">\n There was an error loading the digital self. Please try again later.\n </div>\n\n <!-- Self Sidebar (left) -->\n <ElSelfSidebar\n v-model=\"isSidebarOpen\"\n :self=\"self\"\n :sdk=\"sdk\"\n :title=\"self.name\"\n />\n\n <!-- Mode Sidebar (right) -->\n <ElSelfModeSidebar\n v-model=\"isModeSidebarOpen\"\n :self-controller=\"selfController\"\n />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { FictionSDK } from '../../sdkClient'\nimport type { Self } from '../schema'\nimport { onMounted, ref } from 'vue'\n\nconst props = defineProps<{\n sdk: FictionSDK\n self?: Self\n handle?: string\n context?: string\n firstMessage?: string\n hasClose?: boolean\n}>()\n\nconst loading = ref(!props.self)\nconst self = ref<Self | undefined>(props.self)\nconst error = ref<string>()\n\nonMounted(async () => {\n // If self already provided, skip fetch\n if (props.self) {\n loading.value = false\n return\n }\n\n // Otherwise fetch using handle\n if (!props.handle) {\n error.value = 'No handle or self provided'\n loading.value = false\n return\n }\n\n try {\n loading.value = true\n\n // Use SDK's clean wrapper method instead of raw apiClient\n const result = await props.sdk.getPublicSelf({ handle: props.handle })\n\n if (result) {\n // SDK returns a compatible Self type from server\n self.value = result as Self\n } else {\n error.value = props.sdk.error.value || 'Self not found'\n console.error('Failed to fetch digital self:', props.sdk.error.value)\n }\n } catch (err) {\n error.value = err instanceof Error ? err.message : 'Failed to fetch self'\n console.error('Error fetching digital self:', err)\n } finally {\n loading.value = false\n }\n})\n</script>\n\n<template>\n <div class=\"self-wrap\">\n <div v-if=\"loading\" class=\"flex items-center justify-center h-full\">\n <div class=\"animate-spin rounded-full size-6 border-b-2 border-white\" />\n </div>\n\n <template v-else-if=\"self\">\n <slot\n :self=\"self\"\n :context=\"context\"\n :first-message=\"firstMessage\"\n :loading=\"loading\"\n />\n </template>\n <div v-else-if=\"error\" class=\"flex items-center justify-center h-full text-theme-500 text-xs\">\n <div class=\"flex flex-col items-center gap-2\">\n <div>\n <div class=\"i-tabler-user-off size-8\" />\n </div>\n <div>{{ error }}</div>\n </div>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { FictionSDK } from '../../sdkClient'\nimport { nextTick, ref, watch } from 'vue'\nimport { getFallbackAvatarDataUrl, getSelfAvatarUrl } from '../utils'\nimport SelfAgent from './SelfAgent.vue'\nimport SelfWrap from './SelfWrap.vue'\n\ninterface Props {\n sdk: FictionSDK\n handle: string\n context?: string\n firstMessage?: string\n position?: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left'\n}\n\nconst props = defineProps<Props>()\nconst isOpen = ref(false)\nconst isAgentActive = ref(false)\n\nfunction toggle() {\n isOpen.value = !isOpen.value\n}\n\n// Watch isOpen to delay agent activation for smooth transition\nwatch(isOpen, async (newValue) => {\n if (newValue) {\n // When opening, delay agent activation until transition starts\n await nextTick()\n setTimeout(() => {\n isAgentActive.value = true\n }, 400) // Delay to let container expand first\n } else {\n // When closing, immediately deactivate agent\n isAgentActive.value = false\n }\n})\n\nfunction open() {\n isOpen.value = true\n}\n\nfunction close() {\n isOpen.value = false\n}\n\nfunction handleClose() {\n close()\n}\n\ndefineExpose({\n toggle,\n open,\n close,\n})\n</script>\n\n<template>\n <SelfWrap\n v-slot=\"{ self }\"\n :sdk=\"sdk\"\n :handle=\"handle\"\n :context=\"context\"\n :first-message=\"firstMessage\"\n >\n <!-- Fixed Widget Wrapper -->\n <div\n v-if=\"self\"\n class=\"fixed z-[999999] pointer-events-auto\"\n :class=\"[\n props.position === 'bottom-left' ? 'bottom-6 left-6'\n : props.position === 'top-right' ? 'top-6 right-6'\n : props.position === 'top-left' ? 'top-6 left-6'\n : 'bottom-6 right-6',\n ]\"\n >\n <!-- Widget Content with Transition -->\n <div\n class=\"transition-all duration-500 ease-[cubic-bezier(0.25,1,0.33,1)] transform-gpu\"\n :class=\"[\n isOpen\n ? 'widget-expanded w-96 h-[600px] max-w-[calc(100vw-48px)] max-h-[calc(100vh-48px)] rounded-3xl opacity-100 scale-100'\n : 'widget-button w-[80px] h-[80px] opacity-100 scale-100 flex items-center justify-center cursor-pointer',\n ]\"\n :style=\"{\n 'transform-origin':\n props.position === 'bottom-left' ? 'bottom left'\n : props.position === 'top-right' ? 'top right'\n : props.position === 'top-left' ? 'top left'\n : 'bottom right',\n }\"\n @click=\"!isOpen ? toggle() : undefined\"\n >\n <!-- Button Content (visible when closed) -->\n <div v-if=\"!isOpen\" class=\"relative h-full w-full\">\n <div class=\"group relative h-full w-full rounded-3xl overflow-hidden shadow-lg transition-all duration-300 ease-[cubic-bezier(0.25,1,0.33,1)] hover:shadow-2xl hover:translate-y-[-1px] hover:brightness-110 active:scale-[1.06] active:-translate-y-0.5 active:duration-100\">\n <img\n :src=\"getSelfAvatarUrl(self) || getFallbackAvatarDataUrl()\"\n :alt=\"`${self.name} avatar`\"\n class=\"h-full w-full object-cover pointer-events-none\"\n />\n <!-- Gradient overlay for contrast -->\n <div class=\"absolute inset-0 pointer-events-none bg-gradient-to-br from-transparent via-black/10 to-black/40 opacity-60 transition-opacity duration-300 group-hover:opacity-40\" />\n </div>\n <!-- Online indicator -->\n <div class=\"absolute top-0.5 right-0.5\">\n <div class=\"size-3 bg-green-500 rounded-full ring-2 ring-white absolute animate-ping\" style=\"animation-duration: 3s;\" />\n <div class=\"size-3 bg-green-500 rounded-full ring-2 ring-white\" />\n </div>\n </div>\n\n <!-- Chat Content (visible when open) -->\n <SelfAgent\n v-if=\"isOpen && self\"\n class=\"rounded-3xl shadow-2xl border border-white/10\"\n :sdk=\"sdk\"\n :self=\"self\"\n :context=\"context\"\n :first-message=\"firstMessage\"\n :has-close=\"true\"\n :is-active=\"isAgentActive\"\n @close=\"handleClose\"\n />\n </div>\n </div>\n </SelfWrap>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, onMounted, onUnmounted, ref, watch } from 'vue'\nimport FClose from './FClose.vue'\n\ndefineOptions({ name: 'FModal' })\n\nconst {\n vis = false,\n modalClass,\n styleClass,\n fullScreen = false,\n hasClose = false,\n title = '',\n transitionMode = 'modal',\n teleportTo = 'body',\n} = defineProps<{\n vis?: boolean\n modalClass?: string\n styleClass?: string\n fullScreen?: boolean\n hasClose?: boolean\n title?: string\n transitionMode?: 'modal' | 'slideUp'\n teleportTo?: string | Element\n}>()\n\nconst emit = defineEmits<{\n 'update:vis': [value: boolean]\n 'close': [value: boolean]\n 'escape': [value: boolean]\n}>()\n\nconst isMounted = ref(false)\n\nfunction close(args: { reason: 'escape' | 'reset' }): void {\n const { reason } = args\n emit('update:vis', false)\n emit('close', true)\n if (reason === 'escape')\n emit('escape', true)\n}\n\nconst cls = modalClass ? [modalClass] : ['max-w-screen-md p-24']\nconst defaultStyleClass = styleClass ? [styleClass] : ['bg-theme-0 text-theme-900', 'shadow-xl']\n\nif (fullScreen)\n cls.push('fixed inset-0')\nelse\n cls.push('rounded-xl my-6 mx-3')\n\nconst classes = [\n 'relative',\n 'text-left',\n 'transform',\n 'transition-all',\n 'w-full',\n ...cls,\n ...defaultStyleClass,\n]\n\nconst afterVisible = ref(false)\nconst cleanups: (() => void)[] = []\n\nonMounted(async () => {\n isMounted.value = true\n\n const unwatch = watch(\n () => vis,\n (vis) => {\n if (vis) {\n setTimeout(() => (afterVisible.value = true), 300)\n } else {\n afterVisible.value = false\n }\n },\n { immediate: true },\n )\n\n cleanups.push(unwatch)\n})\n\nonUnmounted(() => {\n cleanups.forEach((c) => c())\n})\n\nconst modalTransition = computed(() => {\n if (transitionMode === 'slideUp') {\n return {\n enterActiveClass: 'ease-[cubic-bezier(0.25,1,0.33,1)] duration-500',\n enterFromClass: 'opacity-0 translate-y-full scale-95',\n enterToClass: 'opacity-100 translate-y-0 scale-100',\n leaveActiveClass: 'ease-[cubic-bezier(0.25,1,0.33,1)] duration-500',\n leaveFromClass: 'opacity-100 translate-y-0 scale-100',\n leaveToClass: 'opacity-0 translate-y-full scale-95',\n }\n }\n return {\n enterActiveClass: 'ease-[cubic-bezier(0.25,1,0.33,1)] duration-500',\n enterFromClass: 'opacity-0 scale-75',\n enterToClass: 'opacity-100 translate-y-0 scale-100',\n leaveActiveClass: 'ease-[cubic-bezier(0.25,1,0.33,1)] duration-500',\n leaveFromClass: 'opacity-100 translate-y-0 scale-100',\n leaveToClass: 'opacity-0 scale-75',\n }\n})\n</script>\n\n<script lang=\"ts\">\nexport default {\n inheritAttrs: false,\n}\n</script>\n\n<template>\n <Teleport v-if=\"isMounted\" :to=\"teleportTo\">\n <div\n class=\"fixed inset-0 z-50\"\n aria-labelledby=\"modal-title\"\n role=\"dialog\"\n aria-modal=\"true\"\n :class=\"!vis ? 'pointer-events-none' : ''\"\n >\n <Transition\n enter-active-class=\"ease-out duration-300\"\n enter-from-class=\"opacity-0\"\n enter-to-class=\"opacity-100\"\n leave-active-class=\"ease-in duration-200\"\n leave-from-class=\"opacity-100\"\n leave-to-class=\"opacity-0\"\n >\n <div\n v-if=\"vis\"\n class=\"fixed inset-0 bg-theme-800/60 active:bg-theme-800/80 cursor-pointer dark:bg-theme-600/90 backdrop-blur-sm transition-opacity\"\n @click=\"close({ reason: 'escape' })\"\n />\n </Transition>\n <div\n class=\"fixed inset-0 z-40 overflow-y-auto\"\n @click=\"close({ reason: 'escape' })\"\n >\n <div class=\"flex min-h-full items-center justify-center text-center p-4 py-8\">\n <Transition v-bind=\"modalTransition\">\n <div\n v-if=\"vis\"\n :class=\"classes\"\n class=\"overflow-visible w-full\"\n @click.stop\n >\n <div\n v-if=\"hasClose || title || $slots.actions\"\n :class=\"!title && (hasClose || $slots.actions) ? 'absolute top-0 right-0 z-10' : 'flex justify-between items-center'\"\n >\n <h2 v-if=\"title\" class=\"text-base p-4 font-semibold\">\n {{ title }}\n </h2>\n <div v-if=\"hasClose || $slots.actions\" class=\"flex items-center gap-2 px-2\">\n <slot name=\"actions\" />\n <FClose\n v-if=\"hasClose\"\n class=\"relative\"\n data-test-id=\"close-modal\"\n @click.stop=\"close({ reason: 'escape' })\"\n />\n </div>\n </div>\n <slot />\n </div>\n </Transition>\n </div>\n </div>\n </div>\n </Teleport>\n</template>\n","<script setup lang=\"ts\">\nimport type { FictionSDK } from '../../sdkClient'\nimport type { Self } from '../schema'\nimport SelfAgent from './SelfAgent.vue'\nimport SelfWrap from './SelfWrap.vue'\n\nconst props = defineProps<{\n sdk: FictionSDK\n self?: Self\n handle?: string\n context?: string\n firstMessage?: string\n hasClose?: boolean\n}>()\n</script>\n\n<template>\n <SelfWrap\n v-slot=\"slotProps\"\n v-bind=\"props\"\n class=\"self-provider size-full relative\"\n >\n <SelfAgent\n v-bind=\"props\"\n :self=\"slotProps.self\"\n :is-active=\"true\"\n class=\"size-full\"\n />\n </SelfWrap>\n</template>\n","<script setup lang=\"ts\">\nimport type { FictionSDK } from '../../sdkClient'\nimport type { Self } from '../schema'\nimport { ref, watch } from 'vue'\nimport FModal from '@/ui/common/FModal.vue'\nimport SelfProvider from './SelfProvider.vue'\n\ndefineOptions({ name: 'SelfModal' })\n\nconst {\n modelValue = false,\n sdk,\n self,\n handle,\n context,\n firstMessage,\n} = defineProps<{\n modelValue?: boolean\n sdk: FictionSDK\n self?: Self\n handle?: string\n context?: string\n firstMessage?: string\n}>()\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: boolean]\n}>()\n\nconst isVisible = ref(modelValue)\n\nwatch(() => modelValue, (newVal) => {\n isVisible.value = newVal\n})\n\nwatch(isVisible, (newVal) => {\n emit('update:modelValue', newVal)\n})\n</script>\n\n<template>\n <FModal\n v-model:vis=\"isVisible\"\n modal-class=\"max-w-4xl p-0\"\n style-class=\"bg-transparent shadow-2xl\"\n :has-close=\"false\"\n >\n <div class=\"relative w-full h-[80vh] md:h-[600px]\">\n <SelfProvider\n :sdk=\"sdk\"\n :self=\"self\"\n :handle=\"handle\"\n :context=\"context\"\n :first-message=\"firstMessage\"\n :has-close=\"true\"\n @close=\"isVisible = false\"\n />\n </div>\n </FModal>\n</template>\n"],"names":["AUDIO_FFT_SIZE","AUDIO_SMOOTHING","AUDIO_LEVEL_UPDATE_INTERVAL","VISUALIZER_CONFIG","VOICE_FREQUENCIES","_ClientAudio","SettingsObject","args","__publicField","ref","options","noiseSuppression","echoCancellation","autoGainControl","error","isConnected","inputDataArray","updateLevels","__name","inputAverage","sum","value","inputLevel","outputLevel","intervalWrapper","track","ClientAudio","AGENT_MODES","getImageSrc","image","getSelfAvatarUrl","self","getFallbackAvatarDataUrl","handleImageError","event","img","parseVoiceMessage","message","parsers","msg","sender","parser","result","generateFirstMessage","name","context","_openBlock","_createElementBlock","_hoisted_1","_hoisted_2","_createElementVNode","_normalizeClass","__props","colorSchemes","getColorSchemeOklch","colorName","_SelfController","settings","data","nonZeroCount","x","maxValue","avgValue","val","text","hash","now","isDupe","state","updates","isText","watch","newMode","oldMode","isVoice","parsed","participantId","sdk","err","mode","callbacks","dynamicSettings","agentId","Conversation","errorMessage","isSpeaking","messageArgs","type","anonId","conversationData","objectId","duration","sessionType","quantity","SelfController","themeClasses","computed","sizeClasses","iconSizeClasses","_cache","_renderSlot","_ctx","emit","__emit","$event","props","inputs","values","justPasted","onMounted","v","onPaste","i","e","nums","newValues","c","idx","nextPos","onInput","onKeydown","onFocus","_Fragment","_renderList","el","_vModelText","form","step","stepConfig","currentStep","_hoisted_3","_toDisplayString","_hoisted_4","_hoisted_5","_createBlock","SelfInputEmail","_withKeys","SelfInputOneTimeCode","_hoisted_6","_createVNode","ElSelfButton","getAvatarSrc","_unref","CLASS_PART_SEPARATOR","createClassGroupUtils","config","classMap","createClassMap","conflictingClassGroups","conflictingClassGroupModifiers","className","classParts","getGroupRecursive","getGroupIdForArbitraryProperty","classGroupId","hasPostfixModifier","conflicts","classPartObject","currentClassPart","nextClassPartObject","classGroupFromNextClassPart","classRest","validator","arbitraryPropertyRegex","arbitraryPropertyClassName","property","theme","classGroups","processClassesRecursively","classGroup","classDefinition","classPartObjectToEdit","getPart","isThemeGetter","key","path","currentClassPartObject","pathPart","func","createLruCache","maxCacheSize","cacheSize","cache","previousCache","update","IMPORTANT_MODIFIER","MODIFIER_SEPARATOR","MODIFIER_SEPARATOR_LENGTH","createParseClassName","prefix","experimentalParseClassName","parseClassName","modifiers","bracketDepth","parenDepth","modifierStart","postfixModifierPosition","index","currentCharacter","baseClassNameWithImportantModifier","baseClassName","stripImportantModifier","hasImportantModifier","maybePostfixModifierPosition","fullPrefix","parseClassNameOriginal","createSortModifiers","orderSensitiveModifiers","modifier","sortedModifiers","unsortedModifiers","createConfigUtils","SPLIT_CLASSES_REGEX","mergeClassList","classList","configUtils","getClassGroupId","getConflictingClassGroupIds","sortModifiers","classGroupsInConflict","classNames","originalClassName","isExternal","variantModifier","modifierId","classId","conflictGroups","group","twJoin","argument","resolvedValue","string","toValue","mix","k","createTailwindMerge","createConfigFirst","createConfigRest","cacheGet","cacheSet","functionToCall","initTailwindMerge","previousConfig","createConfigCurrent","tailwindMerge","cachedResult","fromTheme","themeGetter","arbitraryValueRegex","arbitraryVariableRegex","fractionRegex","tshirtUnitRegex","lengthUnitRegex","colorFunctionRegex","shadowRegex","imageRegex","isFraction","isNumber","isInteger","isPercent","isTshirtSize","isAny","isLengthOnly","isNever","isShadow","isImage","isAnyNonArbitrary","isArbitraryValue","isArbitraryVariable","isArbitrarySize","getIsArbitraryValue","isLabelSize","isArbitraryLength","isLabelLength","isArbitraryNumber","isLabelNumber","isArbitraryPosition","isLabelPosition","isArbitraryImage","isLabelImage","isArbitraryShadow","isLabelShadow","isArbitraryVariableLength","getIsArbitraryVariable","isArbitraryVariableFamilyName","isLabelFamilyName","isArbitraryVariablePosition","isArbitraryVariableSize","isArbitraryVariableImage","isArbitraryVariableShadow","testLabel","testValue","shouldMatchNoLabel","label","getDefaultConfig","themeColor","themeFont","themeText","themeFontWeight","themeTracking","themeLeading","themeBreakpoint","themeContainer","themeSpacing","themeRadius","themeShadow","themeInsetShadow","themeTextShadow","themeDropShadow","themeBlur","themePerspective","themeAspect","themeEase","themeAnimate","scaleBreak","scalePosition","scalePositionWithArbitrary","scaleOverflow","scaleOverscroll","scaleUnambiguousSpacing","scaleInset","scaleGridTemplateColsRows","scaleGridColRowStartAndEnd","scaleGridColRowStartOrEnd","scaleGridAutoColsRows","scaleAlignPrimaryAxis","scaleAlignSecondaryAxis","scaleMargin","scaleSizing","scaleColor","scaleBgPosition","scaleBgRepeat","scaleBgSize","scaleGradientStopPosition","scaleRadius","scaleBorderWidth","scaleLineStyle","scaleBlendMode","scaleMaskImagePosition","scaleBlur","scaleRotate","scaleScale","scaleSkew","scaleTranslate","twMerge","themes","icons","componentTag","spinnerSize","buttonClass","baseClasses","linkPadding","roundingClasses","out","iconClass","_resolveDynamicComponent","FSpinner","links","engine","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","link","FButton","messagesContainer","textarea","selfAvatarUrl","shouldShowAvatar","messages","currentMsg","nextMsg","sendMessage","messageText","scrollToBottom","handleKeydown","nextTick","container","adjustTextareaHeight","newHeight","m","inView","$emit","position","widthClasses","isOpen","visibleItems","item","handleItemClick","transitionClasses","_Transition","FClose","$slots","_TransitionGroup","currentMode","modeItems","ElSidebar","menuItems","items","url","canvasRef","ctx","animationFrame","isMobile","isVisible","gradientCache","backgroundGradient","analyser","frequencyData","audioPermission","audioError","bars","barWidth","barSpacing","minHeight","maxHeight","STIFFNESS","DAMPING","PEAK_HOLD_TIME","PEAK_DECAY_STIFFNESS","PEAK_DECAY_DAMPING","heights","velocities","targets","peaks","peakHoldTime","peakDecayVelocity","getFrequencyPhysics","freq","setupAudio","clientAudio","sharedAnalyser","arrayBuffer","cleanupAudio","dpr","resizeCanvas","cssW","cssH","clearGradientCache","generateRealInputFrequencyBands","mapFrequencyDataToBands","generateRealOutputFrequencyBands","outputFrequencyData","_","targetFreq","binIndex","binWidth","amplitude","j","weight","finalAmplitude","currentPhoneme","phonemeTimer","speechCadence","phonemePatterns","generateSpeechPatterns","intensity","bands","currentPattern","nextPattern","transitionProgress","smoothProgress","breathingPattern","microRhythm","f1Response","getFormantResponse","f2Response","f3Response","fundamental","currentFormant","nextFormant","progress","bandwidth","interpolatedFormant","distance","cachedOutputBands","lastOutputFetch","apiErrorCount","getApiThrottleInterval","baseInterval","errorMultiplier","generateFrequencyBands","baseBands","realBands","band","throttleInterval","generateIntensityBasedBands","addWaveMotionOverlay","time","enhancedBands","frequency","waveMotion","primaryWave","secondaryWave","breathing","gentleBreath","subtleWave","sineWave","motionIntensity","detectMobile","userAgent","mobile","getGradient","createGradient","startAnimation","canvas","width","height","animate","_currentTime","bandLevels","deltaTime","physics","delta","stiffness","damping","accel","peakAccel","edgeFadeDistance","drawBackground","glowIntensity","glowColor","h","y","distFromEdge","edgeFade","alpha1","alpha2","alpha3","intensityKey","edgeKey","cacheKey","gradient","grad","a1","a2","a3","peakY","peakAlpha","onResize","handleVisibilityChange","next","onUnmounted","enableRealAudio","isListening","prevEnableRealAudio","prevIsListening","callButtonTheme","callButtonIcon","callButtonText","isButtonDisabled","isButtonLoading","toggleCall","ElAudioVisualizer","_hoisted_11","selfController","shallowRef","isSidebarOpen","isModeSidebarOpen","initError","rootElement","agentMode","isAuthenticated","btn","createSelfController","applyTheme","themeName","colorScheme","scale","newTheme","_normalizeStyle","ElSelfHeader","ElModeHeader","ElSelfVoice","ElAuthGate","ElSelfChat","ElSelfAbout","_hoisted_12","_hoisted_13","ElSelfSidebar","ElSelfModeSidebar","loading","isAgentActive","toggle","newValue","open","close","handleClose","__expose","SelfWrap","_withCtx","SelfAgent","__default__","isMounted","reason","cls","defaultStyleClass","classes","afterVisible","cleanups","unwatch","vis","modalTransition","_Teleport","_mergeProps","slotProps","newVal","FModal","SelfProvider"],"mappings":"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","x_google_ignoreList":[12]}
|
|
1
|
+
{"version":3,"file":"self.js","sources":["../self/constants.ts","../self/ClientAudio.ts","../self/schema.ts","../self/utils.ts","../../ui/common/FSpinner.vue","../../utils/color.ts","../self/SelfController.ts","../self/ui/ElSelfButton.vue","../self/ui/SelfInputEmail.vue","../self/ui/SelfInputOneTimeCode.vue","../self/ui/ElAuthGate.vue","../self/ui/ElModeHeader.vue","../../../node_modules/.pnpm/tailwind-merge@3.3.1/node_modules/tailwind-merge/dist/bundle-mjs.mjs","../../ui/common/themes.ts","../../ui/common/FButton.vue","../self/ui/ElSelfAbout.vue","../self/ui/ElSelfChat.vue","../self/ui/ElSelfHeader.vue","../../ui/common/FClose.vue","../self/ui/ElSidebar.vue","../self/ui/ElSelfModeSidebar.vue","../self/ui/ElSelfSidebar.vue","../self/ui/ElAudioVisualizer.vue","../self/ui/ElSelfVoice.vue","../self/ui/SelfAgent.vue","../self/ui/SelfWrap.vue","../self/ui/FictionWidget.vue","../../ui/common/FModal.vue","../self/ui/SelfProvider.vue","../self/ui/SelfModal.vue"],"sourcesContent":["// UI constants and configuration from web project\nexport const AUDIO_FFT_SIZE = 256\nexport const AUDIO_SMOOTHING = 0.8\nexport const AUDIO_LEVEL_UPDATE_INTERVAL = 50 // 20fps\n\n// Voice visualizer constants\nexport const VISUALIZER_CONFIG = {\n bars: 64,\n barWidth: 3,\n barSpacing: 1,\n minHeight: 4,\n maxHeight: 80,\n\n // Enhanced physics constants\n STIFFNESS: 0.18,\n DAMPING: 0.22,\n PEAK_HOLD_TIME: 300, // ms to hold peaks\n PEAK_DECAY_STIFFNESS: 0.12,\n PEAK_DECAY_DAMPING: 0.15,\n}\n\n// Voice-optimized frequency bands for visualizer\nexport const VOICE_FREQUENCIES = [\n // Low fundamentals\n 85,\n 100,\n 120,\n 140,\n 155,\n 170,\n 185,\n 200,\n 215,\n 230,\n 245,\n 260,\n 275,\n 290,\n 315,\n 340,\n // Mid fundamentals (voice clarity)\n 355,\n 375,\n 400,\n 425,\n 450,\n 475,\n 500,\n 530,\n 560,\n 590,\n 630,\n 670,\n 700,\n 730,\n 780,\n 820,\n // Harmonics (speech intelligibility)\n 880,\n 940,\n 1000,\n 1100,\n 1200,\n 1300,\n 1400,\n 1500,\n 1600,\n 1700,\n 1800,\n 1900,\n 2000,\n 2200,\n // High harmonics (consonant clarity)\n 2300,\n 2500,\n 2600,\n 2800,\n 3000,\n 3200,\n 3500,\n 3800,\n 4000,\n 4300,\n 4500,\n 4800,\n 5000,\n 5300,\n // Presence/air (voice definition)\n 5500,\n 5800,\n 6000,\n 6500,\n 7000,\n 7500,\n 8000,\n 8500,\n]\n","import type { AudioLevel } from './schema'\nimport { ref } from 'vue'\nimport { SettingsObject } from '@/utils/base'\nimport { AUDIO_FFT_SIZE, AUDIO_LEVEL_UPDATE_INTERVAL, AUDIO_SMOOTHING } from './constants'\n\nexport type AudioPermissionOptions = {\n noiseSuppression?: boolean\n echoCancellation?: boolean\n autoGainControl?: boolean\n}\n\ntype ClientAudioSettings = {\n [key: string]: unknown\n}\n\nexport class ClientAudio extends SettingsObject<ClientAudioSettings> {\n private audioContext?: AudioContext\n private analyser?: AnalyserNode\n private microphone?: MediaStreamAudioSourceNode\n private audioLevelInterval?: number\n private stream?: MediaStream\n private visibilityChangeHandler?: () => void\n\n // Public reactive state\n audioLevels = ref<AudioLevel>({ inputLevel: 0, outputLevel: 0 })\n\n constructor(args: ClientAudioSettings) {\n super('ClientAudio', args)\n // Setup iOS visibility change handler for proper audio cleanup\n this.setupVisibilityHandler()\n }\n\n /**\n * Setup iOS-specific visibility change handler\n */\n private setupVisibilityHandler(): void {\n if (typeof document === 'undefined')\n return\n\n this.visibilityChangeHandler = () => {\n if (document.hidden) {\n this.logger.info('App backgrounded, suspending audio context')\n this.handleAppBackground()\n } else {\n this.logger.info('App foregrounded, resuming audio context')\n this.handleAppForeground()\n }\n }\n\n document.addEventListener('visibilitychange', this.visibilityChangeHandler, { passive: true })\n\n // Also listen for page beforeunload to cleanup properly\n window.addEventListener('beforeunload', () => {\n this.cleanup().catch(this.logger.error.bind(this, 'Error during beforeunload cleanup'))\n }, { passive: true })\n }\n\n /**\n * Handle app going to background (iOS microphone indicator fix)\n */\n private handleAppBackground(): void {\n // On iOS, pause audio context to stop microphone indicator\n if (this.audioContext && this.audioContext.state === 'running') {\n this.audioContext.suspend().catch(this.logger.error.bind(this, 'Error suspending audio context'))\n }\n\n // Temporarily pause audio monitoring\n if (this.audioLevelInterval) {\n clearInterval(this.audioLevelInterval)\n this.audioLevelInterval = undefined\n }\n }\n\n /**\n * Handle app returning to foreground\n */\n private handleAppForeground(): void {\n // Resume audio context if needed\n if (this.audioContext && this.audioContext.state === 'suspended') {\n this.audioContext.resume().catch(this.logger.error.bind(this, 'Error resuming audio context'))\n }\n\n // Restart audio monitoring if we were monitoring before\n if (this.analyser && !this.audioLevelInterval) {\n this.startAudioLevelMonitoring()\n }\n }\n\n /**\n * Request microphone permission and setup audio analysis\n */\n async requestMicrophonePermission(options: AudioPermissionOptions = {}): Promise<boolean> {\n try {\n const {\n noiseSuppression = true,\n echoCancellation = true,\n autoGainControl = true,\n } = options\n\n this.stream = await navigator.mediaDevices.getUserMedia({\n audio: {\n noiseSuppression,\n echoCancellation,\n autoGainControl,\n },\n })\n\n this.logger.info('Microphone permission granted')\n await this.setupAudioAnalysis()\n return true\n } catch (error) {\n this.logger.error('Microphone permission denied:', error)\n return false\n }\n }\n\n /**\n * Setup audio analysis for level monitoring\n */\n private async setupAudioAnalysis(): Promise<void> {\n if (!this.stream) {\n throw new Error('No audio stream available')\n }\n\n try {\n this.audioContext = new AudioContext()\n this.analyser = this.audioContext.createAnalyser()\n this.microphone = this.audioContext.createMediaStreamSource(this.stream)\n\n this.analyser.fftSize = AUDIO_FFT_SIZE\n this.analyser.smoothingTimeConstant = AUDIO_SMOOTHING\n\n this.microphone.connect(this.analyser)\n this.logger.info('Audio analysis setup complete')\n } catch (error) {\n this.logger.error('Failed to setup audio analysis:', error)\n throw error\n }\n }\n\n /**\n * Start monitoring audio levels\n */\n startAudioLevelMonitoring(isConnected?: () => boolean): void {\n if (!this.analyser) {\n this.logger.info('Audio level monitoring not started - missing analyser')\n return\n }\n\n this.logger.info('Starting audio level monitoring at timestamp:', Date.now())\n const inputDataArray = new Uint8Array(this.analyser.frequencyBinCount)\n\n const updateLevels = async (): Promise<void> => {\n if (!this.analyser) {\n this.logger.info('Stopping audio level monitoring - missing analyser')\n return\n }\n\n try {\n // Get microphone input levels\n this.analyser.getByteFrequencyData(inputDataArray)\n const inputAverage = inputDataArray.reduce((sum, value) => sum + value, 0) / inputDataArray.length\n const inputLevel = Math.min(inputAverage / 128, 1) // Normalize to 0-1\n\n // Simple output level estimation (SelfController will handle real ElevenLabs data)\n const outputLevel = isConnected?.() ? 0.3 : 0\n\n this.audioLevels.value = { inputLevel, outputLevel }\n } catch (error) {\n this.logger.error('Error in audio level monitoring:', error)\n this.stopAudioLevelMonitoring()\n }\n }\n\n // Use async interval for ElevenLabs API calls\n const intervalWrapper = () => {\n updateLevels().catch((error) => {\n this.logger.error('Async error in audio level monitoring:', error)\n })\n }\n\n this.audioLevelInterval = window.setInterval(intervalWrapper, AUDIO_LEVEL_UPDATE_INTERVAL)\n }\n\n /**\n * Stop monitoring audio levels\n */\n stopAudioLevelMonitoring(): void {\n if (this.audioLevelInterval) {\n this.logger.info('Stopping audio level monitoring interval')\n clearInterval(this.audioLevelInterval)\n this.audioLevelInterval = undefined\n } else {\n this.logger.info('No audio level monitoring interval to stop')\n }\n }\n\n /**\n * Reset audio levels to zero\n */\n resetAudioLevels(): void {\n this.audioLevels.value = { inputLevel: 0, outputLevel: 0 }\n }\n\n /**\n * Check if audio context is available\n */\n isAudioContextAvailable(): boolean {\n return !!this.audioContext\n }\n\n /**\n * Get current audio context state\n */\n getAudioContextState(): AudioContextState | undefined {\n return this.audioContext?.state\n }\n\n /**\n * Get shared analyser for AudioVisualizer (prevents duplicate audio contexts)\n */\n getSharedAnalyser(): AnalyserNode | undefined {\n return this.analyser\n }\n\n /**\n * Stop microphone and cleanup audio stream\n */\n async stopMicrophone(): Promise<void> {\n if (this.stream) {\n this.logger.info('Stopping microphone stream')\n this.stream.getTracks().forEach((track) => {\n track.stop()\n track.enabled = false\n })\n this.stream = undefined\n }\n\n this.stopAudioLevelMonitoring()\n this.resetAudioLevels()\n\n // Close audio context if open\n if (this.audioContext && this.audioContext.state !== 'closed') {\n await this.audioContext.close()\n this.audioContext = undefined\n }\n\n this.analyser = undefined\n this.microphone = undefined\n\n this.logger.info('Microphone stopped')\n }\n\n /**\n * Cleanup all audio resources (call on destroy)\n */\n async cleanup(): Promise<void> {\n // Stop microphone first\n await this.stopMicrophone()\n\n // Remove visibility change handler\n if (this.visibilityChangeHandler && typeof document !== 'undefined') {\n document.removeEventListener('visibilitychange', this.visibilityChangeHandler)\n this.visibilityChangeHandler = undefined\n }\n\n this.logger.info('Audio resources cleaned up')\n }\n}\n","// Re-export Self type from app for external consumers\nexport type { Self } from '@/modules/self/schema'\n\n// Chat message interface from web project\nexport interface ChatMessage {\n id: string\n text: string\n sender: 'user' | 'agent' | 'system'\n timestamp: Date\n}\n\n// Voice connection states from web project\nexport interface VoiceConnectionState {\n isActive: boolean\n isConnected: boolean\n isSpeaking: boolean\n isListening: boolean\n transcript?: string\n connectionStatus: 'connecting' | 'connected' | 'disconnected' | 'error'\n error?: string\n}\n\nexport interface TextConnectionState {\n isActive: boolean\n isConnected: boolean\n isThinking: boolean\n connectionStatus: 'connecting' | 'connected' | 'disconnected' | 'error'\n error?: string\n}\n\n// Audio level interface for visualizer\nexport interface AudioLevel {\n inputLevel: number\n outputLevel: number\n}\n\n// Agent mode configuration\nexport const AGENT_MODES = [\n {\n mode: 'self' as const,\n label: 'Mode',\n icon: 'i-tabler-north-star',\n },\n {\n mode: 'talk' as const,\n label: 'Talk',\n icon: 'i-tabler-phone',\n },\n {\n mode: 'chat' as const,\n label: 'Chat',\n icon: 'i-tabler-message-circle',\n },\n {\n mode: 'info' as const,\n label: 'About',\n icon: 'i-tabler-user-circle',\n },\n] as const\n\n// Agent modes from web project\nexport type AgentMode = (typeof AGENT_MODES)[number]['mode']\n","import type { Self } from '@/modules/self/schema'\n\n// Image utility functions - simplified for Self usage\nexport function getImageSrc(image: string | { src?: string } | undefined): string {\n if (!image)\n return ''\n if (typeof image === 'string')\n return image\n return image.src || ''\n}\n\nexport function getSelfAvatarUrl(self: Self): string {\n return getImageSrc(self.cover) || getImageSrc(self.avatar) || '/img/placeholder-avatar.png'\n}\n\nexport function getFallbackAvatarDataUrl(): string {\n return 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODAiIGhlaWdodD0iODAiIHZpZXdCb3g9IjAgMCA4MCA4MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3Qgd2lkdGg9IjgwIiBoZWlnaHQ9IjgwIiByeD0iNDAiIGZpbGw9IiM2MzY2RjEiLz4KPHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeD0iMjAiIHk9IjIwIj4KPHA0aCBkPSJNMTIgMTJjMi4yMSAwIDQtMS43OSA0LTRTNC4yMSA0IDIgNHMxLjc5IDQgNCA0em0wIDJjLTIuNjcgMC04IDEuMzQtOCA0djJoMTZ2LTJjMC0yLjY2LTUuMzMtNC04LTR6IiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4KPC9zdmc+'\n}\n\nexport function handleImageError(event: Event): void {\n const img = event.target as HTMLImageElement\n if (!img.dataset.fallbackUsed) {\n img.dataset.fallbackUsed = 'true'\n img.src = getFallbackAvatarDataUrl()\n }\n}\n\n// Voice message parsing from web project\nexport function parseVoiceMessage(args: { message: string, source: string }): { text: string, sender: 'user' | 'agent' } | null {\n const { message } = args\n if (!message)\n return null\n\n if (typeof message === 'string') {\n return message.trim() ? { text: message.trim(), sender: 'agent' } : null\n }\n\n if (typeof message !== 'object')\n return null\n\n const parsers: Array<(msg: { message: string, source: string }) => { text: string, sender: 'user' | 'agent' } | null> = [\n (msg) => {\n if (!('source' in msg))\n return null\n const senderMap: Record<string, 'user' | 'agent'> = {\n user: 'user',\n ai: 'agent',\n agent: 'agent',\n }\n const sender = senderMap[msg.source]\n return sender ? { text: msg.message || '', sender } : null\n },\n ]\n\n for (const parser of parsers) {\n const result = parser(message)\n if (result && result.text.trim()) {\n return { text: result.text.trim(), sender: result.sender }\n }\n }\n\n return null\n}\n\n// Removed selfToDigitalSelf - no longer needed since components use Self directly\n\n// Generate default first message based on context\nexport function generateFirstMessage(args: { name: string, context?: string }): string {\n const { name, context } = args\n\n if (context === 'welcome') {\n return `Welcome to Fiction! I'm ${name}, your digital self. I'm here to help you understand how I can represent you and assist with your daily tasks. What would you like to know about how I work?`\n }\n\n if (context === 'onboarding') {\n return `Hi! I'm ${name}, your newly created digital self. I can handle conversations, answer questions about your expertise, and represent you professionally. Ready to see what I can do?`\n }\n\n return `Hello! I'm ${name}. How can I help you today?`\n}\n","<script lang=\"ts\" setup>\ndefineProps({\n width: { type: String, default: '' },\n colorMode: { type: String, default: 'primary' },\n})\n</script>\n\n<template>\n <div class=\"spinner max-w-sm\">\n <svg\n class=\"ring-circular h-full w-full origin-center\"\n viewBox=\"25 25 50 50\"\n >\n <circle\n :class=\"colorMode\"\n class=\"ring-path\"\n cx=\"50\"\n cy=\"50\"\n r=\"20\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"5\"\n stroke-miterlimit=\"30\"\n />\n </svg>\n </div>\n</template>\n\n<style lang=\"less\">\n.ring-circular {\n animation: rotate 1s linear infinite;\n}\n\n.ring-path {\n will-change: stroke-dasharray;\n will-change: stroke-dashoffset;\n\n stroke-dasharray: 1, 200;\n stroke-dashoffset: 0;\n\n stroke-linecap: round;\n animation: dash 2s ease-in-out infinite;\n // &.placeholder {\n // stroke: var(--color-placeholder, var(--color-bg-contrast));\n // }\n // &.primary {\n // stroke: var(--color-primary);\n // }\n // &.secondary {\n // stroke: var(--color-secondary);\n // }\n // &.text {\n // stroke: var(--color-text);\n // }\n}\n\n@keyframes rotate {\n 100% {\n transform: rotate(360deg);\n }\n}\n@keyframes dash {\n 0% {\n stroke-dasharray: 1, 200;\n stroke-dashoffset: 0;\n }\n 50% {\n stroke-dasharray: 89, 200;\n stroke-dashoffset: -35px;\n }\n 100% {\n stroke-dasharray: 89, 200;\n stroke-dashoffset: -124px;\n }\n}\n</style>\n","/**\n * Tailwind v4 OKLCH color scales for theming\n * Values copied from Tailwind CSS v4 default theme\n */\n\nexport type ColorScale = 50 | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | 950\n\nexport type ColorName = 'green' | 'blue' | 'rose' | 'cyan' | 'purple' | 'amber' | 'indigo' | 'pink' | 'teal' | 'sky'\n\nexport type ColorScheme = Record<ColorScale, string>\n\nconst colorSchemes: Record<ColorName, ColorScheme> = {\n green: {\n 50: 'oklch(98.2% 0.018 155.826)',\n 100: 'oklch(96.2% 0.044 156.743)',\n 200: 'oklch(92.5% 0.084 155.995)',\n 300: 'oklch(87.1% 0.15 154.449)',\n 400: 'oklch(79.2% 0.209 151.711)',\n 500: 'oklch(72.3% 0.219 149.579)',\n 600: 'oklch(62.7% 0.194 149.214)',\n 700: 'oklch(52.7% 0.154 150.069)',\n 800: 'oklch(44.8% 0.119 151.328)',\n 900: 'oklch(39.3% 0.095 152.535)',\n 950: 'oklch(26.6% 0.065 152.934)',\n },\n blue: {\n 50: 'oklch(97% 0.014 254.604)',\n 100: 'oklch(93.2% 0.032 255.585)',\n 200: 'oklch(88.2% 0.059 254.128)',\n 300: 'oklch(80.9% 0.105 251.813)',\n 400: 'oklch(70.7% 0.165 254.624)',\n 500: 'oklch(62.3% 0.214 259.815)',\n 600: 'oklch(54.6% 0.245 262.881)',\n 700: 'oklch(48.8% 0.243 264.376)',\n 800: 'oklch(42.4% 0.199 265.638)',\n 900: 'oklch(37.9% 0.146 265.522)',\n 950: 'oklch(28.2% 0.091 267.935)',\n },\n rose: {\n 50: 'oklch(96.9% 0.015 12.422)',\n 100: 'oklch(94.1% 0.03 12.58)',\n 200: 'oklch(89.2% 0.058 10.001)',\n 300: 'oklch(81% 0.117 11.638)',\n 400: 'oklch(71.2% 0.194 13.428)',\n 500: 'oklch(64.5% 0.246 16.439)',\n 600: 'oklch(58.6% 0.253 17.585)',\n 700: 'oklch(51.4% 0.222 16.935)',\n 800: 'oklch(45.5% 0.188 13.697)',\n 900: 'oklch(41% 0.159 10.272)',\n 950: 'oklch(27.1% 0.105 12.094)',\n },\n cyan: {\n 50: 'oklch(98.4% 0.019 200.873)',\n 100: 'oklch(95.6% 0.045 203.388)',\n 200: 'oklch(91.7% 0.08 205.041)',\n 300: 'oklch(86.5% 0.127 207.078)',\n 400: 'oklch(78.9% 0.154 211.53)',\n 500: 'oklch(71.5% 0.143 215.221)',\n 600: 'oklch(60.9% 0.126 221.723)',\n 700: 'oklch(52% 0.105 223.128)',\n 800: 'oklch(45% 0.085 224.283)',\n 900: 'oklch(39.8% 0.07 227.392)',\n 950: 'oklch(30.2% 0.056 229.695)',\n },\n purple: {\n 50: 'oklch(97.7% 0.014 308.299)',\n 100: 'oklch(94.6% 0.033 307.174)',\n 200: 'oklch(90.2% 0.063 306.703)',\n 300: 'oklch(82.7% 0.119 306.383)',\n 400: 'oklch(71.4% 0.203 305.504)',\n 500: 'oklch(62.7% 0.265 303.9)',\n 600: 'oklch(55.8% 0.288 302.321)',\n 700: 'oklch(49.6% 0.265 301.924)',\n 800: 'oklch(43.8% 0.218 303.724)',\n 900: 'oklch(38.1% 0.176 304.987)',\n 950: 'oklch(29.1% 0.149 302.717)',\n },\n amber: {\n 50: 'oklch(98.7% 0.022 95.277)',\n 100: 'oklch(96.2% 0.059 95.617)',\n 200: 'oklch(92.4% 0.12 95.746)',\n 300: 'oklch(87.9% 0.169 91.605)',\n 400: 'oklch(82.8% 0.189 84.429)',\n 500: 'oklch(76.9% 0.188 70.08)',\n 600: 'oklch(66.6% 0.179 58.318)',\n 700: 'oklch(55.5% 0.163 48.998)',\n 800: 'oklch(47.3% 0.137 46.201)',\n 900: 'oklch(41.4% 0.112 45.904)',\n 950: 'oklch(27.9% 0.077 45.635)',\n },\n indigo: {\n 50: 'oklch(96.2% 0.018 272.314)',\n 100: 'oklch(93% 0.034 272.788)',\n 200: 'oklch(87% 0.065 274.039)',\n 300: 'oklch(78.5% 0.115 274.713)',\n 400: 'oklch(67.3% 0.182 276.935)',\n 500: 'oklch(58.5% 0.233 277.117)',\n 600: 'oklch(51.1% 0.262 276.966)',\n 700: 'oklch(45.7% 0.24 277.023)',\n 800: 'oklch(39.8% 0.195 277.366)',\n 900: 'oklch(35.9% 0.144 278.697)',\n 950: 'oklch(25.7% 0.09 281.288)',\n },\n pink: {\n 50: 'oklch(97.1% 0.014 343.198)',\n 100: 'oklch(94.8% 0.028 342.258)',\n 200: 'oklch(89.9% 0.061 343.231)',\n 300: 'oklch(82.3% 0.12 346.018)',\n 400: 'oklch(71.8% 0.202 349.761)',\n 500: 'oklch(65.6% 0.241 354.308)',\n 600: 'oklch(59.2% 0.249 0.584)',\n 700: 'oklch(52.5% 0.223 3.958)',\n 800: 'oklch(45.9% 0.187 3.815)',\n 900: 'oklch(40.8% 0.153 2.432)',\n 950: 'oklch(28.4% 0.109 3.907)',\n },\n teal: {\n 50: 'oklch(98.4% 0.014 180.72)',\n 100: 'oklch(95.3% 0.051 180.801)',\n 200: 'oklch(91% 0.096 180.426)',\n 300: 'oklch(85.5% 0.138 181.071)',\n 400: 'oklch(77.7% 0.152 181.912)',\n 500: 'oklch(70.4% 0.14 182.503)',\n 600: 'oklch(60% 0.118 184.704)',\n 700: 'oklch(51.1% 0.096 186.391)',\n 800: 'oklch(43.7% 0.078 188.216)',\n 900: 'oklch(38.6% 0.063 188.416)',\n 950: 'oklch(27.7% 0.046 192.524)',\n },\n sky: {\n 50: 'oklch(97.7% 0.013 236.62)',\n 100: 'oklch(95.1% 0.026 236.824)',\n 200: 'oklch(90.1% 0.058 230.902)',\n 300: 'oklch(82.8% 0.111 230.318)',\n 400: 'oklch(74.6% 0.16 232.661)',\n 500: 'oklch(68.5% 0.169 237.323)',\n 600: 'oklch(58.8% 0.158 241.966)',\n 700: 'oklch(50% 0.134 242.749)',\n 800: 'oklch(44.3% 0.11 240.79)',\n 900: 'oklch(39.1% 0.09 240.876)',\n 950: 'oklch(29.3% 0.066 243.157)',\n },\n}\n\n/**\n * Get OKLCH color scale for a given color name\n * Returns full scale (50-950) for use with CSS custom properties\n */\nexport function getColorSchemeOklch(colorName: ColorName): ColorScheme {\n return colorSchemes[colorName] || colorSchemes.blue\n}\n","import type { Ref } from 'vue'\nimport type { FictionSDK } from '../sdkClient'\nimport type { AgentMode, ChatMessage, Self, TextConnectionState, VoiceConnectionState } from './schema'\n// Direct import from ElevenLabs SDK - matches web project pattern\nimport { Conversation } from '@elevenlabs/client'\nimport { objectId } from '@fiction/utils'\nimport { ref, watch } from 'vue'\nimport { SettingsObject } from '@/utils/base'\nimport { ClientAudio } from './ClientAudio'\n\nimport { parseVoiceMessage } from './utils'\n\ntype ConnectionState = 'disconnected' | 'connecting' | 'connected' | 'error'\n\ninterface AgentState {\n isActive: boolean\n isConnected: boolean\n connectionStatus: ConnectionState\n error?: string\n}\n\ninterface AgentCallbacks {\n onConnect?: () => void\n onDisconnect?: () => void\n onError?: (error: Error) => void\n onModeChange?: (mode: string) => void\n onMessage?: (message: unknown) => void\n onAudioLevel?: (levels: { inputLevel: number, outputLevel: number }) => void\n}\n\ntype SelfControllerSettings = {\n sdk: FictionSDK\n self: Self\n context?: string\n firstMessage?: string\n}\n\nexport class SelfController extends SettingsObject<SelfControllerSettings> {\n private conversation?: Conversation\n private isTextMode = false\n private lastMessage = { hash: '', time: 0 }\n private clientAudio: ClientAudio\n private unwatchAudio?: () => void\n private isConnecting = false\n\n // Simple usage tracking\n private sessionId?: string\n private conversationStartTime?: Date\n private chatCharacterCount = 0\n\n // Participant IDs for message attribution\n private hostParticipantId?: string // The digital self\n private visitorParticipantId?: string // The user/anon\n\n voiceState: Ref<VoiceConnectionState> = ref({\n isActive: false,\n isConnected: false,\n isSpeaking: false,\n isListening: false,\n transcript: 'Tap to begin voice conversation',\n connectionStatus: 'disconnected',\n })\n\n textState: Ref<TextConnectionState> = ref({\n isActive: false,\n isConnected: false,\n isThinking: false,\n connectionStatus: 'disconnected',\n })\n\n agentMode: Ref<AgentMode> = ref('self')\n sharedMessages: Ref<ChatMessage[]> = ref([])\n\n constructor(settings: SelfControllerSettings) {\n super('SelfController', settings)\n\n // Fail fast - validate required configuration\n if (!settings.self.elevenlabsAgentId || settings.self.elevenlabsAgentId.trim() === '') {\n throw new Error(`Agent ID is required for SelfController. Self \"${settings.self.name}\" (${settings.self.selfId}) does not have a valid elevenlabsAgentId.`)\n }\n\n // Note: self.selfId, self.ownerId, self.orgId used for usage tracking\n // SelfController works without usage tracking if these are undefined\n\n this.clientAudio = new ClientAudio(settings)\n this.setupModeWatcher()\n }\n\n get audioLevels() {\n return this.clientAudio.audioLevels\n }\n\n getClientAudio() {\n return this.clientAudio\n }\n\n getOutputFrequencyData(): Uint8Array | null {\n if (!this.conversation) {\n console.warn('No ElevenLabs conversation available for frequency data')\n return null\n }\n\n try {\n const data = this.conversation.getOutputByteFrequencyData()\n if (data && data.length > 0) {\n const nonZeroCount = Array.from(data).filter((x) => Number(x) > 0).length\n const maxValue = Math.max(...Array.from(data))\n const avgValue = Array.from(data).reduce((sum, val) => sum + Number(val), 0) / data.length\n console.warn(`ElevenLabs frequency data: ${data.length} bins, ${nonZeroCount} with signal, max: ${maxValue}, avg: ${avgValue.toFixed(1)}`)\n\n return new Uint8Array(data)\n } else {\n console.warn('ElevenLabs returned empty frequency data')\n return null\n }\n } catch (error) {\n console.error('Failed to get ElevenLabs output frequency data:', error)\n return null\n }\n }\n\n private isDuplicateMessage(text: string, sender: string): boolean {\n const hash = `${sender}:${text.toLowerCase().trim()}`\n const now = Date.now()\n const isDupe = hash === this.lastMessage.hash && (now - this.lastMessage.time) < 500\n\n if (!isDupe) {\n this.lastMessage = { hash, time: now }\n }\n\n return isDupe\n }\n\n private addMessage(text: string, sender: 'user' | 'agent' | 'system') {\n if (this.isDuplicateMessage(text, sender))\n return\n\n this.sharedMessages.value = [\n ...this.sharedMessages.value,\n { id: Date.now().toString(), text, sender, timestamp: new Date() },\n ]\n }\n\n private getDynamicSettings() {\n return {\n dynamicVariables: {\n context: this.settings.context || '',\n firstMessage: this.settings.firstMessage || '',\n },\n overrides: {\n agent: this.settings.firstMessage ? { firstMessage: this.settings.firstMessage } : {},\n },\n }\n }\n\n private updateState<T extends AgentState>(state: Ref<T>, updates: Partial<T>) {\n state.value = { ...state.value, ...updates }\n }\n\n private resetState(isText: boolean) {\n if (isText) {\n this.updateState(this.textState, {\n isActive: false,\n isConnected: false,\n isThinking: false,\n connectionStatus: 'disconnected',\n error: undefined,\n })\n } else {\n this.updateState(this.voiceState, {\n isActive: false,\n isConnected: false,\n isSpeaking: false,\n isListening: false,\n transcript: 'Ready to start a call...',\n connectionStatus: 'disconnected',\n error: undefined,\n })\n this.clientAudio.resetAudioLevels()\n }\n }\n\n private setupModeWatcher() {\n watch(this.agentMode, async (newMode, oldMode) => {\n this.logger.info(`Mode changed from ${oldMode} to ${newMode}`)\n\n // End any active conversation when switching modes\n if (this.conversation && (oldMode === 'talk' || oldMode === 'chat')) {\n await this.endConversation()\n }\n\n // User must explicitly start conversations via buttons\n // No auto-start logic\n })\n }\n\n private handleMessage(message: { message: string, source: string }, isVoice: boolean) {\n const parsed = parseVoiceMessage(message)\n if (parsed) {\n this.addMessage(parsed.text, parsed.sender)\n if (!isVoice && parsed.sender === 'agent') {\n this.updateState(this.textState, { isThinking: false })\n }\n\n // Save message to database if we have participant IDs\n if (this.sessionId && this.hostParticipantId && this.visitorParticipantId) {\n const participantId = parsed.sender === 'agent' ? this.hostParticipantId : this.visitorParticipantId\n const { sdk } = this.settings\n\n sdk.saveMessage({\n conversationId: this.sessionId,\n participantId,\n content: parsed.text,\n role: parsed.sender === 'agent' ? 'agent' : 'user',\n }).catch((err) => {\n this.logger.warn('Failed to save message', { error: err })\n })\n }\n }\n }\n\n private handleError(error: unknown, isVoice: boolean) {\n const message = (error as Error).message\n this.logger.error('Conversation error:', error)\n\n this.resetState(isVoice)\n if (isVoice) {\n this.updateState(this.voiceState, {\n error: message,\n connectionStatus: 'error',\n transcript: 'Failed to start call.',\n })\n } else {\n this.updateState(this.textState, {\n error: message,\n connectionStatus: 'error',\n })\n }\n }\n\n async setMode(mode: AgentMode) {\n if (this.agentMode.value !== mode) {\n this.agentMode.value = mode\n }\n }\n\n async startVoiceConversation(callbacks: AgentCallbacks = {}) {\n // Prevent double calls\n if (this.isConnecting) {\n this.logger.info('Voice conversation already connecting, ignoring duplicate request')\n return\n }\n\n this.isConnecting = true\n this.isTextMode = false\n this.updateState(this.voiceState, {\n isActive: true,\n transcript: 'Connecting...',\n connectionStatus: 'connecting',\n })\n\n if (!(await this.clientAudio.requestMicrophonePermission())) {\n this.isConnecting = false\n this.updateState(this.voiceState, {\n isActive: false,\n error: 'Microphone permission required',\n transcript: 'Failed to get microphone permission',\n connectionStatus: 'error',\n })\n throw new Error('Microphone permission required')\n }\n\n // Start simple session tracking\n await this.startSession('voice')\n\n const dynamicSettings = this.getDynamicSettings()\n const agentId = this.settings.self.elevenlabsAgentId!\n this.logger.info('Starting voice conversation...', { agentId, dynamicSettings })\n\n try {\n this.conversation = await Conversation.startSession({\n agentId,\n connectionType: 'websocket',\n ...dynamicSettings,\n onConnect: () => {\n this.isConnecting = false\n this.clientAudio.startAudioLevelMonitoring(() => this.isVoiceConnected())\n this.updateState(this.voiceState, {\n isConnected: true,\n isListening: true,\n transcript: 'Connected! Start speaking...',\n connectionStatus: 'connected',\n })\n callbacks.onConnect?.()\n\n if (callbacks.onAudioLevel) {\n this.unwatchAudio = watch(this.audioLevels, callbacks.onAudioLevel, { immediate: true })\n }\n },\n onDisconnect: () => {\n this.logger.info('Voice conversation disconnected')\n this.conversation = undefined\n this.clientAudio.stopAudioLevelMonitoring()\n\n // End session tracking\n this.endSession().catch((error) => console.error('Failed to end session:', error))\n\n this.resetState(false)\n callbacks.onDisconnect?.()\n },\n onError: (msg: string) => {\n // Enhanced error message for common ElevenLabs issues\n let errorMessage = msg\n if (msg.includes('does not exist')) {\n errorMessage = `Agent not found: ${this.settings.self.elevenlabsAgentId}. Check ElevenLabs configuration.`\n } else if (msg.includes('limit') || msg.includes('quota')) {\n errorMessage = `ElevenLabs account limit reached. Check your subscription and usage.`\n } else if (msg.includes('unauthorized') || msg.includes('invalid')) {\n errorMessage = `ElevenLabs API authentication failed. Check ELEVENLABS_API_KEY.`\n }\n\n // End session tracking on error\n this.endSession().catch((error) => console.error('Failed to end session:', error))\n\n this.handleError(new Error(errorMessage), true)\n callbacks.onError?.(new Error(errorMessage))\n },\n onModeChange: (mode: { mode: string }) => {\n const isSpeaking = mode.mode === 'speaking'\n this.updateState(this.voiceState, {\n isSpeaking,\n isListening: !isSpeaking,\n transcript: isSpeaking ? 'Agent is speaking...' : 'Listening for your voice...',\n })\n callbacks.onModeChange?.(mode.mode)\n },\n onMessage: (message: any) => {\n this.handleMessage(message, true)\n callbacks.onMessage?.(message)\n },\n })\n } catch (error) {\n this.isConnecting = false\n // End session tracking on error\n this.endSession().catch((error) => console.error('Failed to end session:', error))\n this.handleError(error, true)\n throw error\n }\n }\n\n async startTextConversation(callbacks: AgentCallbacks = {}) {\n if (this.isConnecting) {\n this.logger.info('Text conversation already connecting, ignoring duplicate request')\n return\n }\n\n this.isConnecting = true\n this.isTextMode = true\n this.updateState(this.textState, { isActive: true, connectionStatus: 'connecting' })\n\n // Start simple session tracking\n await this.startSession('chat')\n\n try {\n this.conversation = await Conversation.startSession({\n agentId: this.settings.self.elevenlabsAgentId!,\n connectionType: 'websocket',\n ...this.getDynamicSettings(),\n textOnly: true,\n onConnect: () => {\n this.isConnecting = false\n this.updateState(this.textState, { isConnected: true, connectionStatus: 'connected' })\n callbacks.onConnect?.()\n },\n onDisconnect: () => {\n this.conversation = undefined\n\n // End session tracking\n this.endSession().catch((error) => console.error('Failed to end session:', error))\n\n this.resetState(true)\n callbacks.onDisconnect?.()\n },\n onError: (msg: string) => {\n // Enhanced error message for common ElevenLabs issues\n let errorMessage = msg\n if (msg.includes('does not exist')) {\n errorMessage = `Agent not found: ${this.settings.self.elevenlabsAgentId}. Check ElevenLabs configuration.`\n } else if (msg.includes('limit') || msg.includes('quota')) {\n errorMessage = `ElevenLabs account limit reached. Check your subscription and usage.`\n } else if (msg.includes('unauthorized') || msg.includes('invalid')) {\n errorMessage = `ElevenLabs API authentication failed. Check ELEVENLABS_API_KEY.`\n }\n\n // End session tracking on error\n this.endSession().catch((error) => console.error('Failed to end session:', error))\n\n this.handleError(new Error(errorMessage), false)\n callbacks.onError?.(new Error(errorMessage))\n },\n onModeChange: (mode: { mode: string }) => {\n callbacks.onModeChange?.(mode.mode)\n },\n onMessage: (messageArgs: any) => {\n this.handleMessage(messageArgs, false)\n callbacks.onMessage?.(messageArgs)\n },\n })\n } catch (error) {\n this.isConnecting = false\n // End session tracking on error\n this.endSession().catch((error) => console.error('Failed to end session:', error))\n this.handleError(error, false)\n throw error\n }\n }\n\n async endConversation() {\n if (!this.conversation) {\n this.resetState(this.isTextMode)\n // Ensure microphone is stopped even if no active conversation\n await this.clientAudio.stopMicrophone()\n return\n }\n\n try {\n await this.conversation.endSession()\n } finally {\n this.conversation = undefined\n this.unwatchAudio?.()\n this.unwatchAudio = undefined\n this.resetState(this.isTextMode)\n this.isTextMode = false\n // Stop microphone on all exit paths\n await this.clientAudio.stopMicrophone()\n }\n }\n\n async sendChatMessage(message: string) {\n if (!this.conversation || !this.isTextMode)\n return\n\n this.addMessage(message, 'user')\n\n // Track chat characters\n this.chatCharacterCount += message.length\n\n try {\n this.updateState(this.textState, { isThinking: true })\n this.conversation.sendUserMessage(message)\n } catch (error) {\n this.handleError(error, false)\n }\n }\n\n isConnected(): boolean {\n return !!this.conversation\n }\n\n isVoiceConnected(): boolean {\n return this.isConnected() && !this.isTextMode\n }\n\n isTextConnected(): boolean {\n return this.isConnected() && this.isTextMode\n }\n\n async destroy() {\n await this.endConversation()\n await this.clientAudio.cleanup()\n\n // End any active session tracking\n this.endSession().catch((error) => console.error('Failed to end session:', error))\n }\n\n // Simple session tracking - minimal implementation\n private async startSession(type: 'voice' | 'chat') {\n const { self, sdk } = this.settings\n this.conversationStartTime = new Date()\n this.chatCharacterCount = 0\n\n // Start conversation using SDK method (auto-creates conversation record)\n if (self.selfId && self.orgId) {\n const anonId = sdk.activeUser.value?.userId ? undefined : sdk.generateAnonId()\n const conversationData = await sdk.startConversation({\n selfId: self.selfId,\n userId: sdk.activeUser.value?.userId,\n anonId,\n })\n\n if (conversationData) {\n this.sessionId = conversationData.conversationId\n this.hostParticipantId = conversationData.hostParticipantId\n this.visitorParticipantId = conversationData.visitorParticipantId\n this.logger.info('Started conversation session', {\n sessionId: this.sessionId,\n type,\n userId: sdk.activeUser.value?.userId,\n anonId,\n hostParticipantId: this.hostParticipantId,\n visitorParticipantId: this.visitorParticipantId,\n })\n return\n }\n }\n\n // Fallback to simple sessionId if conversation creation fails\n this.sessionId = objectId()\n this.logger.info('Started conversation session (fallback)', {\n sessionId: this.sessionId,\n type,\n })\n }\n\n private async endSession() {\n if (!this.sessionId || !this.conversationStartTime)\n return\n\n const { self, sdk } = this.settings\n\n // Only record if we have the required context\n if (!self.orgId || !sdk.activeUser.value?.userId) {\n this.logger.info('No org/user context - skipping usage recording')\n this.resetSession()\n return\n }\n\n const duration = Math.round((Date.now() - this.conversationStartTime.getTime()) / 1000)\n const sessionType = this.isTextMode ? 'chat' : 'voice'\n const quantity = sessionType === 'voice' ? duration : this.chatCharacterCount\n\n // Validate selfId exists\n if (!self.selfId) {\n this.logger.warn('Cannot track usage: selfId is undefined')\n this.resetSession()\n return\n }\n\n // Use SDK method - handles orgId derivation, sessionId, and auth\n const success = await sdk.trackUsage({\n selfId: self.selfId,\n type: sessionType,\n quantity,\n participantId: sdk.activeUser.value?.userId, // Track authenticated user\n })\n\n if (success) {\n this.logger.info('Recorded usage', {\n sessionId: this.sessionId,\n type: sessionType,\n quantity,\n duration,\n })\n } else {\n this.logger.warn('Failed to record usage - continuing normally')\n }\n\n this.resetSession()\n }\n\n private resetSession() {\n this.sessionId = undefined\n this.conversationStartTime = undefined\n this.chatCharacterCount = 0\n }\n}\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ntype ButtonTheme = 'primary' | 'green' | 'red' | 'default'\ntype ButtonSize = 'sm' | 'md' | 'lg'\n\nconst {\n theme = 'primary',\n size = 'lg',\n loading = false,\n icon,\n iconAfter,\n} = defineProps<{\n theme?: ButtonTheme\n size?: ButtonSize\n loading?: boolean\n icon?: string\n iconAfter?: string\n}>()\n\n// Overlay-optimized themes (bright colors that pop against dark backgrounds)\n// 'primary' uses CSS variables set by parent component's theme\n// 'green' and 'rose' use standard Tailwind colors for UI conventions (start/end call)\nconst themeClasses = computed(() => {\n const themes = {\n primary: 'bg-primary-600 border-primary-400 hover:border-primary-300 hover:bg-primary-500',\n green: 'bg-green-600 border-green-400 hover:border-green-300 hover:bg-green-500',\n red: 'bg-red-600 border-red-400 hover:border-red-300 hover:bg-red-500',\n default: 'bg-white/10 border-white/20 hover:border-white/40 hover:bg-white/20',\n }\n return themes[theme]\n})\n\nconst sizeClasses = computed(() => {\n const sizes = {\n sm: 'px-4 py-2 text-sm',\n md: 'px-6 py-3 text-base',\n lg: 'px-8 py-4 text-base',\n }\n return sizes[size]\n})\n\nconst iconSizeClasses = computed(() => {\n const sizes = {\n sm: 'size-4',\n md: 'size-4',\n lg: 'size-5',\n }\n return sizes[size]\n})\n</script>\n\n<template>\n <button\n class=\"relative inline-flex items-center justify-center gap-2 font-medium rounded-full backdrop-blur-sm border-2 text-white transition-all duration-200 focus:outline-none active:opacity-80 disabled:opacity-50 disabled:cursor-not-allowed cursor-pointer\"\n :class=\"[themeClasses, sizeClasses]\"\n >\n <!-- Loading spinner overlay -->\n <div\n v-if=\"loading\"\n class=\"absolute inset-0 flex items-center justify-center\"\n >\n <i class=\"i-svg-spinners-90-ring-with-bg size-5\" />\n </div>\n\n <!-- Button content -->\n <span\n class=\"flex items-center gap-2 transition-opacity duration-200\"\n :class=\"loading ? 'opacity-0' : 'opacity-100'\"\n >\n <i v-if=\"icon\" :class=\"[icon, iconSizeClasses]\" />\n <slot />\n <i v-if=\"iconAfter\" :class=\"[iconAfter, iconSizeClasses]\" />\n </span>\n </button>\n</template>\n","<script setup lang=\"ts\">\nconst { modelValue = '' } = defineProps<{ modelValue?: string }>()\nconst emit = defineEmits<{ (event: 'update:modelValue', value: string): void }>()\n</script>\n\n<template>\n <input\n type=\"email\"\n autocomplete=\"email\"\n placeholder=\"Enter Your Email\"\n :value=\"modelValue\"\n class=\"w-full px-6 py-3 text-white/90 placeholder-white/40 bg-white/5 border-2 border-white/50 backdrop-blur-md rounded-full focus:outline-none focus:border-white/60 focus:bg-white/0 transition-colors\"\n style=\"font-size: 16px\"\n @input=\"emit('update:modelValue', ($event.target as HTMLInputElement).value)\"\n />\n</template>\n","<script setup lang=\"ts\">\nimport { onMounted, ref, watch } from 'vue'\n\nconst props = defineProps<{\n modelValue: string\n length: number\n focusFirst?: boolean\n}>()\n\nconst emit = defineEmits<{\n (event: 'update:modelValue', value: string): void\n (event: 'autoSubmit', value: string): void\n}>()\n\nconst inputs = ref<(HTMLInputElement | null)[]>([])\nconst values = ref<string[]>(Array.from({ length: props.length }).fill('') as string[])\nconst justPasted = ref(false)\n\nonMounted(() => {\n if (props.modelValue)\n values.value = props.modelValue.split('').slice(0, props.length)\n\n if (props.focusFirst && !('ontouchstart' in window))\n inputs.value[0]?.focus()\n})\n\nwatch(() => props.modelValue, (v) => {\n values.value = v ? v.split('').slice(0, props.length) : Array.from({ length: props.length }).fill('') as string[]\n})\n\nwatch(values, () => {\n const v = values.value.filter(Boolean).join('')\n emit('update:modelValue', v)\n if (v.length === props.length)\n emit('autoSubmit', v)\n}, { deep: true })\n\nfunction onPaste(i: number, e: ClipboardEvent) {\n e.preventDefault()\n justPasted.value = true\n\n const nums = (e.clipboardData?.getData('text') || '').replace(/\\D/g, '')\n\n if (nums.length === props.length) {\n values.value = nums.split('')\n // Focus after values are set, using nextTick-like delay\n setTimeout(() => {\n inputs.value[props.length - 1]?.focus()\n justPasted.value = false\n }, 10)\n } else {\n const newValues = [...values.value]\n nums.split('').slice(0, props.length - i).forEach((c, idx) => {\n newValues[i + idx] = c\n })\n values.value = newValues\n const nextPos = Math.min(i + nums.length, props.length - 1)\n setTimeout(() => {\n inputs.value[nextPos]?.focus()\n justPasted.value = false\n }, 10)\n }\n}\n\nfunction onInput(i: number, e: Event) {\n const val = (e.target as HTMLInputElement).value.slice(-1).replace(/\\D/g, '')\n values.value[i] = val\n if (val && i < props.length - 1)\n inputs.value[i + 1]?.focus()\n}\n\nfunction onKeydown(i: number, e: KeyboardEvent) {\n if (e.key === 'Backspace') {\n e.preventDefault()\n values.value[i] = ''\n if (i > 0)\n inputs.value[i - 1]?.focus()\n } else if (e.key === 'ArrowLeft' && i > 0) {\n inputs.value[i - 1]?.focus()\n } else if (e.key === 'ArrowRight' && i < props.length - 1) {\n inputs.value[i + 1]?.focus()\n }\n}\n\nfunction onFocus(i: number) {\n inputs.value[i]?.select()\n\n // Don't clear values if we just pasted\n if (justPasted.value)\n return\n\n if (values.value[i]) {\n for (let idx = i; idx < props.length; idx++)\n values.value[idx] = ''\n }\n}\n</script>\n\n<template>\n <div class=\"flex gap-2 justify-center\">\n <input\n v-for=\"i in length\"\n :key=\"i\"\n :ref=\"el => inputs[i - 1] = el as HTMLInputElement\"\n v-model=\"values[i - 1]\"\n type=\"text\"\n inputmode=\"numeric\"\n autocomplete=\"one-time-code\"\n class=\"size-12 text-center font-mono text-white/90 bg-white/5 border border-white/10 rounded-lg focus:outline-none focus:border-white/30 focus:bg-white/10 transition-colors\"\n style=\"font-size: 16px\"\n maxlength=\"1\"\n @input=\"onInput(i - 1, $event)\"\n @keydown=\"onKeydown(i - 1, $event)\"\n @paste=\"onPaste(i - 1, $event as ClipboardEvent)\"\n @focus=\"onFocus(i - 1)\"\n />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { FictionSDK } from '../../sdkClient'\nimport { computed, ref } from 'vue'\nimport ElSelfButton from './ElSelfButton.vue'\nimport SelfInputEmail from './SelfInputEmail.vue'\nimport SelfInputOneTimeCode from './SelfInputOneTimeCode.vue'\n\nconst { sdk } = defineProps<{ sdk: FictionSDK }>()\n\nconst form = ref({ email: '', code: '' })\nconst step = ref<'email' | 'code'>('email')\n\n// Engine array for step configuration\nconst stepConfig = {\n email: {\n title: 'Continue with Email',\n button: { label: 'Continue', disabled: () => !form.value.email },\n action: async () => {\n const success = await sdk.requestAuthCode({ email: form.value.email })\n if (success)\n step.value = 'code'\n },\n },\n code: {\n title: 'Enter Code',\n button: { label: 'Verify', disabled: () => form.value.code.length !== 6 },\n action: () => sdk.loginWithCode({ email: form.value.email, code: form.value.code }),\n },\n}\n\nconst currentStep = computed(() => stepConfig[step.value])\n</script>\n\n<template>\n <div class=\"flex flex-col items-center justify-center h-full p-6\">\n <div class=\"w-full max-w-xs space-y-12\">\n <p v-if=\"sdk.error.value\" class=\"text-xs text-theme-400 text-center\">\n {{ sdk.error.value }}\n </p>\n\n <h3 class=\"text-lg font-light text-white text-center\">\n {{ currentStep.title }}\n </h3>\n\n <div class=\"space-y-6\">\n <SelfInputEmail\n v-if=\"step === 'email'\"\n v-model=\"form.email\"\n @keyup.enter=\"currentStep.action\"\n />\n <SelfInputOneTimeCode\n v-else\n v-model=\"form.code\"\n :length=\"6\"\n :focus-first=\"true\"\n @auto-submit=\"currentStep.action\"\n />\n\n <div class=\"space-y-4\">\n <ElSelfButton\n theme=\"primary\"\n size=\"md\"\n class=\"w-full\"\n :loading=\"sdk.loading.value\"\n :disabled=\"currentStep.button.disabled() || sdk.loading.value\"\n @click=\"currentStep.action\"\n >\n {{ currentStep.button.label }}\n </ElSelfButton>\n\n <button\n v-if=\"step === 'code'\"\n class=\"w-full text-xs text-white/50 hover:text-white/70 transition-colors py-2\"\n @click=\"step = 'email'\"\n >\n Change Email\n </button>\n </div>\n </div>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { Self } from '@/modules/self/schema'\nimport { getFallbackAvatarDataUrl, handleImageError } from '../utils'\n\ninterface Props {\n self: Self\n size?: 'md' | 'lg'\n showOnlineIndicator?: boolean\n layout?: 'centered' | 'horizontal'\n}\n\nconst {\n self,\n size = 'md',\n showOnlineIndicator = true,\n layout = 'centered',\n} = defineProps<Props>()\n\nfunction getAvatarSrc(): string {\n if (self.avatar?.src) {\n return self.avatar.src\n }\n return getFallbackAvatarDataUrl()\n}\n</script>\n\n<template>\n <div\n class=\"flex gap-4\"\n :class=\"[\n layout === 'centered' ? 'flex-col items-center text-center' : 'flex-row items-center justify-center',\n ]\"\n >\n <!-- Avatar with online indicator -->\n <div class=\"relative flex-shrink-0\">\n <div\n class=\"rounded-full overflow-hidden border-white\"\n :class=\"size === 'lg' ? 'w-20 h-20 sm:w-24 sm:h-24 border-4' : 'w-16 sm:size-16 border-2'\"\n >\n <img\n :src=\"getAvatarSrc()\"\n :alt=\"self.name\"\n class=\"w-full h-full object-cover\"\n @error=\"handleImageError\"\n />\n </div>\n <!-- Online indicator -->\n <div v-if=\"showOnlineIndicator\" class=\"absolute top-1 right-1\">\n <div class=\"size-3 bg-green-500 rounded-full ring-2 ring-white absolute animate-ping\" style=\"animation-duration: 3s;\" />\n <div class=\"size-3 bg-green-500 rounded-full ring-2 ring-white\" />\n </div>\n </div>\n\n <!-- Name and title -->\n <div class=\"min-w-0\">\n <h1\n class=\"font-light text-white mb-1 truncate\"\n :class=\"[\n size === 'lg' ? 'text-3xl mb-2' : 'text-xl sm:text-2xl tracking-wide leading-tight',\n layout === 'horizontal' ? 'text-white/95' : '',\n ]\"\n >\n {{ self.name }}\n </h1>\n <p\n class=\"font-light line-clamp-1\"\n :class=\"[\n size === 'lg' ? 'text-base text-white/60' : 'text-sm sm:text-base',\n layout === 'horizontal' ? 'text-white/70 truncate' : 'text-white/60',\n ]\"\n >\n {{ layout === 'horizontal' ? (self.title || 'Digital Self') : self.title }}\n </p>\n </div>\n </div>\n</template>\n","const CLASS_PART_SEPARATOR = '-';\nconst createClassGroupUtils = config => {\n const classMap = createClassMap(config);\n const {\n conflictingClassGroups,\n conflictingClassGroupModifiers\n } = config;\n const getClassGroupId = className => {\n const classParts = className.split(CLASS_PART_SEPARATOR);\n // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and remove it from classParts.\n if (classParts[0] === '' && classParts.length !== 1) {\n classParts.shift();\n }\n return getGroupRecursive(classParts, classMap) || getGroupIdForArbitraryProperty(className);\n };\n const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier) => {\n const conflicts = conflictingClassGroups[classGroupId] || [];\n if (hasPostfixModifier && conflictingClassGroupModifiers[classGroupId]) {\n return [...conflicts, ...conflictingClassGroupModifiers[classGroupId]];\n }\n return conflicts;\n };\n return {\n getClassGroupId,\n getConflictingClassGroupIds\n };\n};\nconst getGroupRecursive = (classParts, classPartObject) => {\n if (classParts.length === 0) {\n return classPartObject.classGroupId;\n }\n const currentClassPart = classParts[0];\n const nextClassPartObject = classPartObject.nextPart.get(currentClassPart);\n const classGroupFromNextClassPart = nextClassPartObject ? getGroupRecursive(classParts.slice(1), nextClassPartObject) : undefined;\n if (classGroupFromNextClassPart) {\n return classGroupFromNextClassPart;\n }\n if (classPartObject.validators.length === 0) {\n return undefined;\n }\n const classRest = classParts.join(CLASS_PART_SEPARATOR);\n return classPartObject.validators.find(({\n validator\n }) => validator(classRest))?.classGroupId;\n};\nconst arbitraryPropertyRegex = /^\\[(.+)\\]$/;\nconst getGroupIdForArbitraryProperty = className => {\n if (arbitraryPropertyRegex.test(className)) {\n const arbitraryPropertyClassName = arbitraryPropertyRegex.exec(className)[1];\n const property = arbitraryPropertyClassName?.substring(0, arbitraryPropertyClassName.indexOf(':'));\n if (property) {\n // I use two dots here because one dot is used as prefix for class groups in plugins\n return 'arbitrary..' + property;\n }\n }\n};\n/**\n * Exported for testing only\n */\nconst createClassMap = config => {\n const {\n theme,\n classGroups\n } = config;\n const classMap = {\n nextPart: new Map(),\n validators: []\n };\n for (const classGroupId in classGroups) {\n processClassesRecursively(classGroups[classGroupId], classMap, classGroupId, theme);\n }\n return classMap;\n};\nconst processClassesRecursively = (classGroup, classPartObject, classGroupId, theme) => {\n classGroup.forEach(classDefinition => {\n if (typeof classDefinition === 'string') {\n const classPartObjectToEdit = classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition);\n classPartObjectToEdit.classGroupId = classGroupId;\n return;\n }\n if (typeof classDefinition === 'function') {\n if (isThemeGetter(classDefinition)) {\n processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme);\n return;\n }\n classPartObject.validators.push({\n validator: classDefinition,\n classGroupId\n });\n return;\n }\n Object.entries(classDefinition).forEach(([key, classGroup]) => {\n processClassesRecursively(classGroup, getPart(classPartObject, key), classGroupId, theme);\n });\n });\n};\nconst getPart = (classPartObject, path) => {\n let currentClassPartObject = classPartObject;\n path.split(CLASS_PART_SEPARATOR).forEach(pathPart => {\n if (!currentClassPartObject.nextPart.has(pathPart)) {\n currentClassPartObject.nextPart.set(pathPart, {\n nextPart: new Map(),\n validators: []\n });\n }\n currentClassPartObject = currentClassPartObject.nextPart.get(pathPart);\n });\n return currentClassPartObject;\n};\nconst isThemeGetter = func => func.isThemeGetter;\n\n// LRU cache inspired from hashlru (https://github.com/dominictarr/hashlru/blob/v1.0.4/index.js) but object replaced with Map to improve performance\nconst createLruCache = maxCacheSize => {\n if (maxCacheSize < 1) {\n return {\n get: () => undefined,\n set: () => {}\n };\n }\n let cacheSize = 0;\n let cache = new Map();\n let previousCache = new Map();\n const update = (key, value) => {\n cache.set(key, value);\n cacheSize++;\n if (cacheSize > maxCacheSize) {\n cacheSize = 0;\n previousCache = cache;\n cache = new Map();\n }\n };\n return {\n get(key) {\n let value = cache.get(key);\n if (value !== undefined) {\n return value;\n }\n if ((value = previousCache.get(key)) !== undefined) {\n update(key, value);\n return value;\n }\n },\n set(key, value) {\n if (cache.has(key)) {\n cache.set(key, value);\n } else {\n update(key, value);\n }\n }\n };\n};\nconst IMPORTANT_MODIFIER = '!';\nconst MODIFIER_SEPARATOR = ':';\nconst MODIFIER_SEPARATOR_LENGTH = MODIFIER_SEPARATOR.length;\nconst createParseClassName = config => {\n const {\n prefix,\n experimentalParseClassName\n } = config;\n /**\n * Parse class name into parts.\n *\n * Inspired by `splitAtTopLevelOnly` used in Tailwind CSS\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\n */\n let parseClassName = className => {\n const modifiers = [];\n let bracketDepth = 0;\n let parenDepth = 0;\n let modifierStart = 0;\n let postfixModifierPosition;\n for (let index = 0; index < className.length; index++) {\n let currentCharacter = className[index];\n if (bracketDepth === 0 && parenDepth === 0) {\n if (currentCharacter === MODIFIER_SEPARATOR) {\n modifiers.push(className.slice(modifierStart, index));\n modifierStart = index + MODIFIER_SEPARATOR_LENGTH;\n continue;\n }\n if (currentCharacter === '/') {\n postfixModifierPosition = index;\n continue;\n }\n }\n if (currentCharacter === '[') {\n bracketDepth++;\n } else if (currentCharacter === ']') {\n bracketDepth--;\n } else if (currentCharacter === '(') {\n parenDepth++;\n } else if (currentCharacter === ')') {\n parenDepth--;\n }\n }\n const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.substring(modifierStart);\n const baseClassName = stripImportantModifier(baseClassNameWithImportantModifier);\n const hasImportantModifier = baseClassName !== baseClassNameWithImportantModifier;\n const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : undefined;\n return {\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition\n };\n };\n if (prefix) {\n const fullPrefix = prefix + MODIFIER_SEPARATOR;\n const parseClassNameOriginal = parseClassName;\n parseClassName = className => className.startsWith(fullPrefix) ? parseClassNameOriginal(className.substring(fullPrefix.length)) : {\n isExternal: true,\n modifiers: [],\n hasImportantModifier: false,\n baseClassName: className,\n maybePostfixModifierPosition: undefined\n };\n }\n if (experimentalParseClassName) {\n const parseClassNameOriginal = parseClassName;\n parseClassName = className => experimentalParseClassName({\n className,\n parseClassName: parseClassNameOriginal\n });\n }\n return parseClassName;\n};\nconst stripImportantModifier = baseClassName => {\n if (baseClassName.endsWith(IMPORTANT_MODIFIER)) {\n return baseClassName.substring(0, baseClassName.length - 1);\n }\n /**\n * In Tailwind CSS v3 the important modifier was at the start of the base class name. This is still supported for legacy reasons.\n * @see https://github.com/dcastil/tailwind-merge/issues/513#issuecomment-2614029864\n */\n if (baseClassName.startsWith(IMPORTANT_MODIFIER)) {\n return baseClassName.substring(1);\n }\n return baseClassName;\n};\n\n/**\n * Sorts modifiers according to following schema:\n * - Predefined modifiers are sorted alphabetically\n * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it\n */\nconst createSortModifiers = config => {\n const orderSensitiveModifiers = Object.fromEntries(config.orderSensitiveModifiers.map(modifier => [modifier, true]));\n const sortModifiers = modifiers => {\n if (modifiers.length <= 1) {\n return modifiers;\n }\n const sortedModifiers = [];\n let unsortedModifiers = [];\n modifiers.forEach(modifier => {\n const isPositionSensitive = modifier[0] === '[' || orderSensitiveModifiers[modifier];\n if (isPositionSensitive) {\n sortedModifiers.push(...unsortedModifiers.sort(), modifier);\n unsortedModifiers = [];\n } else {\n unsortedModifiers.push(modifier);\n }\n });\n sortedModifiers.push(...unsortedModifiers.sort());\n return sortedModifiers;\n };\n return sortModifiers;\n};\nconst createConfigUtils = config => ({\n cache: createLruCache(config.cacheSize),\n parseClassName: createParseClassName(config),\n sortModifiers: createSortModifiers(config),\n ...createClassGroupUtils(config)\n});\nconst SPLIT_CLASSES_REGEX = /\\s+/;\nconst mergeClassList = (classList, configUtils) => {\n const {\n parseClassName,\n getClassGroupId,\n getConflictingClassGroupIds,\n sortModifiers\n } = configUtils;\n /**\n * Set of classGroupIds in following format:\n * `{importantModifier}{variantModifiers}{classGroupId}`\n * @example 'float'\n * @example 'hover:focus:bg-color'\n * @example 'md:!pr'\n */\n const classGroupsInConflict = [];\n const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);\n let result = '';\n for (let index = classNames.length - 1; index >= 0; index -= 1) {\n const originalClassName = classNames[index];\n const {\n isExternal,\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition\n } = parseClassName(originalClassName);\n if (isExternal) {\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n let hasPostfixModifier = !!maybePostfixModifierPosition;\n let classGroupId = getClassGroupId(hasPostfixModifier ? baseClassName.substring(0, maybePostfixModifierPosition) : baseClassName);\n if (!classGroupId) {\n if (!hasPostfixModifier) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n classGroupId = getClassGroupId(baseClassName);\n if (!classGroupId) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n hasPostfixModifier = false;\n }\n const variantModifier = sortModifiers(modifiers).join(':');\n const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;\n const classId = modifierId + classGroupId;\n if (classGroupsInConflict.includes(classId)) {\n // Tailwind class omitted due to conflict\n continue;\n }\n classGroupsInConflict.push(classId);\n const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier);\n for (let i = 0; i < conflictGroups.length; ++i) {\n const group = conflictGroups[i];\n classGroupsInConflict.push(modifierId + group);\n }\n // Tailwind class not in conflict\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n }\n return result;\n};\n\n/**\n * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.\n *\n * Specifically:\n * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js\n * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts\n *\n * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n */\nfunction twJoin() {\n let index = 0;\n let argument;\n let resolvedValue;\n let string = '';\n while (index < arguments.length) {\n if (argument = arguments[index++]) {\n if (resolvedValue = toValue(argument)) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n}\nconst toValue = mix => {\n if (typeof mix === 'string') {\n return mix;\n }\n let resolvedValue;\n let string = '';\n for (let k = 0; k < mix.length; k++) {\n if (mix[k]) {\n if (resolvedValue = toValue(mix[k])) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n};\nfunction createTailwindMerge(createConfigFirst, ...createConfigRest) {\n let configUtils;\n let cacheGet;\n let cacheSet;\n let functionToCall = initTailwindMerge;\n function initTailwindMerge(classList) {\n const config = createConfigRest.reduce((previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig), createConfigFirst());\n configUtils = createConfigUtils(config);\n cacheGet = configUtils.cache.get;\n cacheSet = configUtils.cache.set;\n functionToCall = tailwindMerge;\n return tailwindMerge(classList);\n }\n function tailwindMerge(classList) {\n const cachedResult = cacheGet(classList);\n if (cachedResult) {\n return cachedResult;\n }\n const result = mergeClassList(classList, configUtils);\n cacheSet(classList, result);\n return result;\n }\n return function callTailwindMerge() {\n return functionToCall(twJoin.apply(null, arguments));\n };\n}\nconst fromTheme = key => {\n const themeGetter = theme => theme[key] || [];\n themeGetter.isThemeGetter = true;\n return themeGetter;\n};\nconst arbitraryValueRegex = /^\\[(?:(\\w[\\w-]*):)?(.+)\\]$/i;\nconst arbitraryVariableRegex = /^\\((?:(\\w[\\w-]*):)?(.+)\\)$/i;\nconst fractionRegex = /^\\d+\\/\\d+$/;\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/;\nconst lengthUnitRegex = /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/;\nconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\\(.+\\)$/;\n// Shadow always begins with x and y offset separated by underscore optionally prepended by inset\nconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/;\nconst imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/;\nconst isFraction = value => fractionRegex.test(value);\nconst isNumber = value => !!value && !Number.isNaN(Number(value));\nconst isInteger = value => !!value && Number.isInteger(Number(value));\nconst isPercent = value => value.endsWith('%') && isNumber(value.slice(0, -1));\nconst isTshirtSize = value => tshirtUnitRegex.test(value);\nconst isAny = () => true;\nconst isLengthOnly = value =>\n// `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\n// For example, `hsl(0 0% 0%)` would be classified as a length without this check.\n// I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\nlengthUnitRegex.test(value) && !colorFunctionRegex.test(value);\nconst isNever = () => false;\nconst isShadow = value => shadowRegex.test(value);\nconst isImage = value => imageRegex.test(value);\nconst isAnyNonArbitrary = value => !isArbitraryValue(value) && !isArbitraryVariable(value);\nconst isArbitrarySize = value => getIsArbitraryValue(value, isLabelSize, isNever);\nconst isArbitraryValue = value => arbitraryValueRegex.test(value);\nconst isArbitraryLength = value => getIsArbitraryValue(value, isLabelLength, isLengthOnly);\nconst isArbitraryNumber = value => getIsArbitraryValue(value, isLabelNumber, isNumber);\nconst isArbitraryPosition = value => getIsArbitraryValue(value, isLabelPosition, isNever);\nconst isArbitraryImage = value => getIsArbitraryValue(value, isLabelImage, isImage);\nconst isArbitraryShadow = value => getIsArbitraryValue(value, isLabelShadow, isShadow);\nconst isArbitraryVariable = value => arbitraryVariableRegex.test(value);\nconst isArbitraryVariableLength = value => getIsArbitraryVariable(value, isLabelLength);\nconst isArbitraryVariableFamilyName = value => getIsArbitraryVariable(value, isLabelFamilyName);\nconst isArbitraryVariablePosition = value => getIsArbitraryVariable(value, isLabelPosition);\nconst isArbitraryVariableSize = value => getIsArbitraryVariable(value, isLabelSize);\nconst isArbitraryVariableImage = value => getIsArbitraryVariable(value, isLabelImage);\nconst isArbitraryVariableShadow = value => getIsArbitraryVariable(value, isLabelShadow, true);\n// Helpers\nconst getIsArbitraryValue = (value, testLabel, testValue) => {\n const result = arbitraryValueRegex.exec(value);\n if (result) {\n if (result[1]) {\n return testLabel(result[1]);\n }\n return testValue(result[2]);\n }\n return false;\n};\nconst getIsArbitraryVariable = (value, testLabel, shouldMatchNoLabel = false) => {\n const result = arbitraryVariableRegex.exec(value);\n if (result) {\n if (result[1]) {\n return testLabel(result[1]);\n }\n return shouldMatchNoLabel;\n }\n return false;\n};\n// Labels\nconst isLabelPosition = label => label === 'position' || label === 'percentage';\nconst isLabelImage = label => label === 'image' || label === 'url';\nconst isLabelSize = label => label === 'length' || label === 'size' || label === 'bg-size';\nconst isLabelLength = label => label === 'length';\nconst isLabelNumber = label => label === 'number';\nconst isLabelFamilyName = label => label === 'family-name';\nconst isLabelShadow = label => label === 'shadow';\nconst validators = /*#__PURE__*/Object.defineProperty({\n __proto__: null,\n isAny,\n isAnyNonArbitrary,\n isArbitraryImage,\n isArbitraryLength,\n isArbitraryNumber,\n isArbitraryPosition,\n isArbitraryShadow,\n isArbitrarySize,\n isArbitraryValue,\n isArbitraryVariable,\n isArbitraryVariableFamilyName,\n isArbitraryVariableImage,\n isArbitraryVariableLength,\n isArbitraryVariablePosition,\n isArbitraryVariableShadow,\n isArbitraryVariableSize,\n isFraction,\n isInteger,\n isNumber,\n isPercent,\n isTshirtSize\n}, Symbol.toStringTag, {\n value: 'Module'\n});\nconst getDefaultConfig = () => {\n /**\n * Theme getters for theme variable namespaces\n * @see https://tailwindcss.com/docs/theme#theme-variable-namespaces\n */\n /***/\n const themeColor = fromTheme('color');\n const themeFont = fromTheme('font');\n const themeText = fromTheme('text');\n const themeFontWeight = fromTheme('font-weight');\n const themeTracking = fromTheme('tracking');\n const themeLeading = fromTheme('leading');\n const themeBreakpoint = fromTheme('breakpoint');\n const themeContainer = fromTheme('container');\n const themeSpacing = fromTheme('spacing');\n const themeRadius = fromTheme('radius');\n const themeShadow = fromTheme('shadow');\n const themeInsetShadow = fromTheme('inset-shadow');\n const themeTextShadow = fromTheme('text-shadow');\n const themeDropShadow = fromTheme('drop-shadow');\n const themeBlur = fromTheme('blur');\n const themePerspective = fromTheme('perspective');\n const themeAspect = fromTheme('aspect');\n const themeEase = fromTheme('ease');\n const themeAnimate = fromTheme('animate');\n /**\n * Helpers to avoid repeating the same scales\n *\n * We use functions that create a new array every time they're called instead of static arrays.\n * This ensures that users who modify any scale by mutating the array (e.g. with `array.push(element)`) don't accidentally mutate arrays in other parts of the config.\n */\n /***/\n const scaleBreak = () => ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'];\n const scalePosition = () => ['center', 'top', 'bottom', 'left', 'right', 'top-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-top', 'top-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-top', 'bottom-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-bottom', 'bottom-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-bottom'];\n const scalePositionWithArbitrary = () => [...scalePosition(), isArbitraryVariable, isArbitraryValue];\n const scaleOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'];\n const scaleOverscroll = () => ['auto', 'contain', 'none'];\n const scaleUnambiguousSpacing = () => [isArbitraryVariable, isArbitraryValue, themeSpacing];\n const scaleInset = () => [isFraction, 'full', 'auto', ...scaleUnambiguousSpacing()];\n const scaleGridTemplateColsRows = () => [isInteger, 'none', 'subgrid', isArbitraryVariable, isArbitraryValue];\n const scaleGridColRowStartAndEnd = () => ['auto', {\n span: ['full', isInteger, isArbitraryVariable, isArbitraryValue]\n }, isInteger, isArbitraryVariable, isArbitraryValue];\n const scaleGridColRowStartOrEnd = () => [isInteger, 'auto', isArbitraryVariable, isArbitraryValue];\n const scaleGridAutoColsRows = () => ['auto', 'min', 'max', 'fr', isArbitraryVariable, isArbitraryValue];\n const scaleAlignPrimaryAxis = () => ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch', 'baseline', 'center-safe', 'end-safe'];\n const scaleAlignSecondaryAxis = () => ['start', 'end', 'center', 'stretch', 'center-safe', 'end-safe'];\n const scaleMargin = () => ['auto', ...scaleUnambiguousSpacing()];\n const scaleSizing = () => [isFraction, 'auto', 'full', 'dvw', 'dvh', 'lvw', 'lvh', 'svw', 'svh', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];\n const scaleColor = () => [themeColor, isArbitraryVariable, isArbitraryValue];\n const scaleBgPosition = () => [...scalePosition(), isArbitraryVariablePosition, isArbitraryPosition, {\n position: [isArbitraryVariable, isArbitraryValue]\n }];\n const scaleBgRepeat = () => ['no-repeat', {\n repeat: ['', 'x', 'y', 'space', 'round']\n }];\n const scaleBgSize = () => ['auto', 'cover', 'contain', isArbitraryVariableSize, isArbitrarySize, {\n size: [isArbitraryVariable, isArbitraryValue]\n }];\n const scaleGradientStopPosition = () => [isPercent, isArbitraryVariableLength, isArbitraryLength];\n const scaleRadius = () => [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', 'full', themeRadius, isArbitraryVariable, isArbitraryValue];\n const scaleBorderWidth = () => ['', isNumber, isArbitraryVariableLength, isArbitraryLength];\n const scaleLineStyle = () => ['solid', 'dashed', 'dotted', 'double'];\n const scaleBlendMode = () => ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity'];\n const scaleMaskImagePosition = () => [isNumber, isPercent, isArbitraryVariablePosition, isArbitraryPosition];\n const scaleBlur = () => [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeBlur, isArbitraryVariable, isArbitraryValue];\n const scaleRotate = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleScale = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleSkew = () => [isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleTranslate = () => [isFraction, 'full', ...scaleUnambiguousSpacing()];\n return {\n cacheSize: 500,\n theme: {\n animate: ['spin', 'ping', 'pulse', 'bounce'],\n aspect: ['video'],\n blur: [isTshirtSize],\n breakpoint: [isTshirtSize],\n color: [isAny],\n container: [isTshirtSize],\n 'drop-shadow': [isTshirtSize],\n ease: ['in', 'out', 'in-out'],\n font: [isAnyNonArbitrary],\n 'font-weight': ['thin', 'extralight', 'light', 'normal', 'medium', 'semibold', 'bold', 'extrabold', 'black'],\n 'inset-shadow': [isTshirtSize],\n leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose'],\n perspective: ['dramatic', 'near', 'normal', 'midrange', 'distant', 'none'],\n radius: [isTshirtSize],\n shadow: [isTshirtSize],\n spacing: ['px', isNumber],\n text: [isTshirtSize],\n 'text-shadow': [isTshirtSize],\n tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest']\n },\n classGroups: {\n // --------------\n // --- Layout ---\n // --------------\n /**\n * Aspect Ratio\n * @see https://tailwindcss.com/docs/aspect-ratio\n */\n aspect: [{\n aspect: ['auto', 'square', isFraction, isArbitraryValue, isArbitraryVariable, themeAspect]\n }],\n /**\n * Container\n * @see https://tailwindcss.com/docs/container\n * @deprecated since Tailwind CSS v4.0.0\n */\n container: ['container'],\n /**\n * Columns\n * @see https://tailwindcss.com/docs/columns\n */\n columns: [{\n columns: [isNumber, isArbitraryValue, isArbitraryVariable, themeContainer]\n }],\n /**\n * Break After\n * @see https://tailwindcss.com/docs/break-after\n */\n 'break-after': [{\n 'break-after': scaleBreak()\n }],\n /**\n * Break Before\n * @see https://tailwindcss.com/docs/break-before\n */\n 'break-before': [{\n 'break-before': scaleBreak()\n }],\n /**\n * Break Inside\n * @see https://tailwindcss.com/docs/break-inside\n */\n 'break-inside': [{\n 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column']\n }],\n /**\n * Box Decoration Break\n * @see https://tailwindcss.com/docs/box-decoration-break\n */\n 'box-decoration': [{\n 'box-decoration': ['slice', 'clone']\n }],\n /**\n * Box Sizing\n * @see https://tailwindcss.com/docs/box-sizing\n */\n box: [{\n box: ['border', 'content']\n }],\n /**\n * Display\n * @see https://tailwindcss.com/docs/display\n */\n display: ['block', 'inline-block', 'inline', 'flex', 'inline-flex', 'table', 'inline-table', 'table-caption', 'table-cell', 'table-column', 'table-column-group', 'table-footer-group', 'table-header-group', 'table-row-group', 'table-row', 'flow-root', 'grid', 'inline-grid', 'contents', 'list-item', 'hidden'],\n /**\n * Screen Reader Only\n * @see https://tailwindcss.com/docs/display#screen-reader-only\n */\n sr: ['sr-only', 'not-sr-only'],\n /**\n * Floats\n * @see https://tailwindcss.com/docs/float\n */\n float: [{\n float: ['right', 'left', 'none', 'start', 'end']\n }],\n /**\n * Clear\n * @see https://tailwindcss.com/docs/clear\n */\n clear: [{\n clear: ['left', 'right', 'both', 'none', 'start', 'end']\n }],\n /**\n * Isolation\n * @see https://tailwindcss.com/docs/isolation\n */\n isolation: ['isolate', 'isolation-auto'],\n /**\n * Object Fit\n * @see https://tailwindcss.com/docs/object-fit\n */\n 'object-fit': [{\n object: ['contain', 'cover', 'fill', 'none', 'scale-down']\n }],\n /**\n * Object Position\n * @see https://tailwindcss.com/docs/object-position\n */\n 'object-position': [{\n object: scalePositionWithArbitrary()\n }],\n /**\n * Overflow\n * @see https://tailwindcss.com/docs/overflow\n */\n overflow: [{\n overflow: scaleOverflow()\n }],\n /**\n * Overflow X\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-x': [{\n 'overflow-x': scaleOverflow()\n }],\n /**\n * Overflow Y\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-y': [{\n 'overflow-y': scaleOverflow()\n }],\n /**\n * Overscroll Behavior\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n overscroll: [{\n overscroll: scaleOverscroll()\n }],\n /**\n * Overscroll Behavior X\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-x': [{\n 'overscroll-x': scaleOverscroll()\n }],\n /**\n * Overscroll Behavior Y\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-y': [{\n 'overscroll-y': scaleOverscroll()\n }],\n /**\n * Position\n * @see https://tailwindcss.com/docs/position\n */\n position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\n /**\n * Top / Right / Bottom / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n inset: [{\n inset: scaleInset()\n }],\n /**\n * Right / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-x': [{\n 'inset-x': scaleInset()\n }],\n /**\n * Top / Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-y': [{\n 'inset-y': scaleInset()\n }],\n /**\n * Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n start: [{\n start: scaleInset()\n }],\n /**\n * End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n end: [{\n end: scaleInset()\n }],\n /**\n * Top\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n top: [{\n top: scaleInset()\n }],\n /**\n * Right\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n right: [{\n right: scaleInset()\n }],\n /**\n * Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n bottom: [{\n bottom: scaleInset()\n }],\n /**\n * Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n left: [{\n left: scaleInset()\n }],\n /**\n * Visibility\n * @see https://tailwindcss.com/docs/visibility\n */\n visibility: ['visible', 'invisible', 'collapse'],\n /**\n * Z-Index\n * @see https://tailwindcss.com/docs/z-index\n */\n z: [{\n z: [isInteger, 'auto', isArbitraryVariable, isArbitraryValue]\n }],\n // ------------------------\n // --- Flexbox and Grid ---\n // ------------------------\n /**\n * Flex Basis\n * @see https://tailwindcss.com/docs/flex-basis\n */\n basis: [{\n basis: [isFraction, 'full', 'auto', themeContainer, ...scaleUnambiguousSpacing()]\n }],\n /**\n * Flex Direction\n * @see https://tailwindcss.com/docs/flex-direction\n */\n 'flex-direction': [{\n flex: ['row', 'row-reverse', 'col', 'col-reverse']\n }],\n /**\n * Flex Wrap\n * @see https://tailwindcss.com/docs/flex-wrap\n */\n 'flex-wrap': [{\n flex: ['nowrap', 'wrap', 'wrap-reverse']\n }],\n /**\n * Flex\n * @see https://tailwindcss.com/docs/flex\n */\n flex: [{\n flex: [isNumber, isFraction, 'auto', 'initial', 'none', isArbitraryValue]\n }],\n /**\n * Flex Grow\n * @see https://tailwindcss.com/docs/flex-grow\n */\n grow: [{\n grow: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Flex Shrink\n * @see https://tailwindcss.com/docs/flex-shrink\n */\n shrink: [{\n shrink: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Order\n * @see https://tailwindcss.com/docs/order\n */\n order: [{\n order: [isInteger, 'first', 'last', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Grid Template Columns\n * @see https://tailwindcss.com/docs/grid-template-columns\n */\n 'grid-cols': [{\n 'grid-cols': scaleGridTemplateColsRows()\n }],\n /**\n * Grid Column Start / End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start-end': [{\n col: scaleGridColRowStartAndEnd()\n }],\n /**\n * Grid Column Start\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start': [{\n 'col-start': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Column End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-end': [{\n 'col-end': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Template Rows\n * @see https://tailwindcss.com/docs/grid-template-rows\n */\n 'grid-rows': [{\n 'grid-rows': scaleGridTemplateColsRows()\n }],\n /**\n * Grid Row Start / End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start-end': [{\n row: scaleGridColRowStartAndEnd()\n }],\n /**\n * Grid Row Start\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start': [{\n 'row-start': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Row End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-end': [{\n 'row-end': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Auto Flow\n * @see https://tailwindcss.com/docs/grid-auto-flow\n */\n 'grid-flow': [{\n 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense']\n }],\n /**\n * Grid Auto Columns\n * @see https://tailwindcss.com/docs/grid-auto-columns\n */\n 'auto-cols': [{\n 'auto-cols': scaleGridAutoColsRows()\n }],\n /**\n * Grid Auto Rows\n * @see https://tailwindcss.com/docs/grid-auto-rows\n */\n 'auto-rows': [{\n 'auto-rows': scaleGridAutoColsRows()\n }],\n /**\n * Gap\n * @see https://tailwindcss.com/docs/gap\n */\n gap: [{\n gap: scaleUnambiguousSpacing()\n }],\n /**\n * Gap X\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-x': [{\n 'gap-x': scaleUnambiguousSpacing()\n }],\n /**\n * Gap Y\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-y': [{\n 'gap-y': scaleUnambiguousSpacing()\n }],\n /**\n * Justify Content\n * @see https://tailwindcss.com/docs/justify-content\n */\n 'justify-content': [{\n justify: [...scaleAlignPrimaryAxis(), 'normal']\n }],\n /**\n * Justify Items\n * @see https://tailwindcss.com/docs/justify-items\n */\n 'justify-items': [{\n 'justify-items': [...scaleAlignSecondaryAxis(), 'normal']\n }],\n /**\n * Justify Self\n * @see https://tailwindcss.com/docs/justify-self\n */\n 'justify-self': [{\n 'justify-self': ['auto', ...scaleAlignSecondaryAxis()]\n }],\n /**\n * Align Content\n * @see https://tailwindcss.com/docs/align-content\n */\n 'align-content': [{\n content: ['normal', ...scaleAlignPrimaryAxis()]\n }],\n /**\n * Align Items\n * @see https://tailwindcss.com/docs/align-items\n */\n 'align-items': [{\n items: [...scaleAlignSecondaryAxis(), {\n baseline: ['', 'last']\n }]\n }],\n /**\n * Align Self\n * @see https://tailwindcss.com/docs/align-self\n */\n 'align-self': [{\n self: ['auto', ...scaleAlignSecondaryAxis(), {\n baseline: ['', 'last']\n }]\n }],\n /**\n * Place Content\n * @see https://tailwindcss.com/docs/place-content\n */\n 'place-content': [{\n 'place-content': scaleAlignPrimaryAxis()\n }],\n /**\n * Place Items\n * @see https://tailwindcss.com/docs/place-items\n */\n 'place-items': [{\n 'place-items': [...scaleAlignSecondaryAxis(), 'baseline']\n }],\n /**\n * Place Self\n * @see https://tailwindcss.com/docs/place-self\n */\n 'place-self': [{\n 'place-self': ['auto', ...scaleAlignSecondaryAxis()]\n }],\n // Spacing\n /**\n * Padding\n * @see https://tailwindcss.com/docs/padding\n */\n p: [{\n p: scaleUnambiguousSpacing()\n }],\n /**\n * Padding X\n * @see https://tailwindcss.com/docs/padding\n */\n px: [{\n px: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Y\n * @see https://tailwindcss.com/docs/padding\n */\n py: [{\n py: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Start\n * @see https://tailwindcss.com/docs/padding\n */\n ps: [{\n ps: scaleUnambiguousSpacing()\n }],\n /**\n * Padding End\n * @see https://tailwindcss.com/docs/padding\n */\n pe: [{\n pe: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Top\n * @see https://tailwindcss.com/docs/padding\n */\n pt: [{\n pt: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Right\n * @see https://tailwindcss.com/docs/padding\n */\n pr: [{\n pr: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Bottom\n * @see https://tailwindcss.com/docs/padding\n */\n pb: [{\n pb: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Left\n * @see https://tailwindcss.com/docs/padding\n */\n pl: [{\n pl: scaleUnambiguousSpacing()\n }],\n /**\n * Margin\n * @see https://tailwindcss.com/docs/margin\n */\n m: [{\n m: scaleMargin()\n }],\n /**\n * Margin X\n * @see https://tailwindcss.com/docs/margin\n */\n mx: [{\n mx: scaleMargin()\n }],\n /**\n * Margin Y\n * @see https://tailwindcss.com/docs/margin\n */\n my: [{\n my: scaleMargin()\n }],\n /**\n * Margin Start\n * @see https://tailwindcss.com/docs/margin\n */\n ms: [{\n ms: scaleMargin()\n }],\n /**\n * Margin End\n * @see https://tailwindcss.com/docs/margin\n */\n me: [{\n me: scaleMargin()\n }],\n /**\n * Margin Top\n * @see https://tailwindcss.com/docs/margin\n */\n mt: [{\n mt: scaleMargin()\n }],\n /**\n * Margin Right\n * @see https://tailwindcss.com/docs/margin\n */\n mr: [{\n mr: scaleMargin()\n }],\n /**\n * Margin Bottom\n * @see https://tailwindcss.com/docs/margin\n */\n mb: [{\n mb: scaleMargin()\n }],\n /**\n * Margin Left\n * @see https://tailwindcss.com/docs/margin\n */\n ml: [{\n ml: scaleMargin()\n }],\n /**\n * Space Between X\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x': [{\n 'space-x': scaleUnambiguousSpacing()\n }],\n /**\n * Space Between X Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x-reverse': ['space-x-reverse'],\n /**\n * Space Between Y\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y': [{\n 'space-y': scaleUnambiguousSpacing()\n }],\n /**\n * Space Between Y Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y-reverse': ['space-y-reverse'],\n // --------------\n // --- Sizing ---\n // --------------\n /**\n * Size\n * @see https://tailwindcss.com/docs/width#setting-both-width-and-height\n */\n size: [{\n size: scaleSizing()\n }],\n /**\n * Width\n * @see https://tailwindcss.com/docs/width\n */\n w: [{\n w: [themeContainer, 'screen', ...scaleSizing()]\n }],\n /**\n * Min-Width\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-w': [{\n 'min-w': [themeContainer, 'screen', /** Deprecated. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'none', ...scaleSizing()]\n }],\n /**\n * Max-Width\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-w': [{\n 'max-w': [themeContainer, 'screen', 'none', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'prose', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n {\n screen: [themeBreakpoint]\n }, ...scaleSizing()]\n }],\n /**\n * Height\n * @see https://tailwindcss.com/docs/height\n */\n h: [{\n h: ['screen', 'lh', ...scaleSizing()]\n }],\n /**\n * Min-Height\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-h': [{\n 'min-h': ['screen', 'lh', 'none', ...scaleSizing()]\n }],\n /**\n * Max-Height\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-h': [{\n 'max-h': ['screen', 'lh', ...scaleSizing()]\n }],\n // ------------------\n // --- Typography ---\n // ------------------\n /**\n * Font Size\n * @see https://tailwindcss.com/docs/font-size\n */\n 'font-size': [{\n text: ['base', themeText, isArbitraryVariableLength, isArbitraryLength]\n }],\n /**\n * Font Smoothing\n * @see https://tailwindcss.com/docs/font-smoothing\n */\n 'font-smoothing': ['antialiased', 'subpixel-antialiased'],\n /**\n * Font Style\n * @see https://tailwindcss.com/docs/font-style\n */\n 'font-style': ['italic', 'not-italic'],\n /**\n * Font Weight\n * @see https://tailwindcss.com/docs/font-weight\n */\n 'font-weight': [{\n font: [themeFontWeight, isArbitraryVariable, isArbitraryNumber]\n }],\n /**\n * Font Stretch\n * @see https://tailwindcss.com/docs/font-stretch\n */\n 'font-stretch': [{\n 'font-stretch': ['ultra-condensed', 'extra-condensed', 'condensed', 'semi-condensed', 'normal', 'semi-expanded', 'expanded', 'extra-expanded', 'ultra-expanded', isPercent, isArbitraryValue]\n }],\n /**\n * Font Family\n * @see https://tailwindcss.com/docs/font-family\n */\n 'font-family': [{\n font: [isArbitraryVariableFamilyName, isArbitraryValue, themeFont]\n }],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-normal': ['normal-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-ordinal': ['ordinal'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-slashed-zero': ['slashed-zero'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-figure': ['lining-nums', 'oldstyle-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-spacing': ['proportional-nums', 'tabular-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],\n /**\n * Letter Spacing\n * @see https://tailwindcss.com/docs/letter-spacing\n */\n tracking: [{\n tracking: [themeTracking, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Line Clamp\n * @see https://tailwindcss.com/docs/line-clamp\n */\n 'line-clamp': [{\n 'line-clamp': [isNumber, 'none', isArbitraryVariable, isArbitraryNumber]\n }],\n /**\n * Line Height\n * @see https://tailwindcss.com/docs/line-height\n */\n leading: [{\n leading: [/** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n themeLeading, ...scaleUnambiguousSpacing()]\n }],\n /**\n * List Style Image\n * @see https://tailwindcss.com/docs/list-style-image\n */\n 'list-image': [{\n 'list-image': ['none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * List Style Position\n * @see https://tailwindcss.com/docs/list-style-position\n */\n 'list-style-position': [{\n list: ['inside', 'outside']\n }],\n /**\n * List Style Type\n * @see https://tailwindcss.com/docs/list-style-type\n */\n 'list-style-type': [{\n list: ['disc', 'decimal', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Text Alignment\n * @see https://tailwindcss.com/docs/text-align\n */\n 'text-alignment': [{\n text: ['left', 'center', 'right', 'justify', 'start', 'end']\n }],\n /**\n * Placeholder Color\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://v3.tailwindcss.com/docs/placeholder-color\n */\n 'placeholder-color': [{\n placeholder: scaleColor()\n }],\n /**\n * Text Color\n * @see https://tailwindcss.com/docs/text-color\n */\n 'text-color': [{\n text: scaleColor()\n }],\n /**\n * Text Decoration\n * @see https://tailwindcss.com/docs/text-decoration\n */\n 'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],\n /**\n * Text Decoration Style\n * @see https://tailwindcss.com/docs/text-decoration-style\n */\n 'text-decoration-style': [{\n decoration: [...scaleLineStyle(), 'wavy']\n }],\n /**\n * Text Decoration Thickness\n * @see https://tailwindcss.com/docs/text-decoration-thickness\n */\n 'text-decoration-thickness': [{\n decoration: [isNumber, 'from-font', 'auto', isArbitraryVariable, isArbitraryLength]\n }],\n /**\n * Text Decoration Color\n * @see https://tailwindcss.com/docs/text-decoration-color\n */\n 'text-decoration-color': [{\n decoration: scaleColor()\n }],\n /**\n * Text Underline Offset\n * @see https://tailwindcss.com/docs/text-underline-offset\n */\n 'underline-offset': [{\n 'underline-offset': [isNumber, 'auto', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Text Transform\n * @see https://tailwindcss.com/docs/text-transform\n */\n 'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],\n /**\n * Text Overflow\n * @see https://tailwindcss.com/docs/text-overflow\n */\n 'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],\n /**\n * Text Wrap\n * @see https://tailwindcss.com/docs/text-wrap\n */\n 'text-wrap': [{\n text: ['wrap', 'nowrap', 'balance', 'pretty']\n }],\n /**\n * Text Indent\n * @see https://tailwindcss.com/docs/text-indent\n */\n indent: [{\n indent: scaleUnambiguousSpacing()\n }],\n /**\n * Vertical Alignment\n * @see https://tailwindcss.com/docs/vertical-align\n */\n 'vertical-align': [{\n align: ['baseline', 'top', 'middle', 'bottom', 'text-top', 'text-bottom', 'sub', 'super', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Whitespace\n * @see https://tailwindcss.com/docs/whitespace\n */\n whitespace: [{\n whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces']\n }],\n /**\n * Word Break\n * @see https://tailwindcss.com/docs/word-break\n */\n break: [{\n break: ['normal', 'words', 'all', 'keep']\n }],\n /**\n * Overflow Wrap\n * @see https://tailwindcss.com/docs/overflow-wrap\n */\n wrap: [{\n wrap: ['break-word', 'anywhere', 'normal']\n }],\n /**\n * Hyphens\n * @see https://tailwindcss.com/docs/hyphens\n */\n hyphens: [{\n hyphens: ['none', 'manual', 'auto']\n }],\n /**\n * Content\n * @see https://tailwindcss.com/docs/content\n */\n content: [{\n content: ['none', isArbitraryVariable, isArbitraryValue]\n }],\n // -------------------\n // --- Backgrounds ---\n // -------------------\n /**\n * Background Attachment\n * @see https://tailwindcss.com/docs/background-attachment\n */\n 'bg-attachment': [{\n bg: ['fixed', 'local', 'scroll']\n }],\n /**\n * Background Clip\n * @see https://tailwindcss.com/docs/background-clip\n */\n 'bg-clip': [{\n 'bg-clip': ['border', 'padding', 'content', 'text']\n }],\n /**\n * Background Origin\n * @see https://tailwindcss.com/docs/background-origin\n */\n 'bg-origin': [{\n 'bg-origin': ['border', 'padding', 'content']\n }],\n /**\n * Background Position\n * @see https://tailwindcss.com/docs/background-position\n */\n 'bg-position': [{\n bg: scaleBgPosition()\n }],\n /**\n * Background Repeat\n * @see https://tailwindcss.com/docs/background-repeat\n */\n 'bg-repeat': [{\n bg: scaleBgRepeat()\n }],\n /**\n * Background Size\n * @see https://tailwindcss.com/docs/background-size\n */\n 'bg-size': [{\n bg: scaleBgSize()\n }],\n /**\n * Background Image\n * @see https://tailwindcss.com/docs/background-image\n */\n 'bg-image': [{\n bg: ['none', {\n linear: [{\n to: ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl']\n }, isInteger, isArbitraryVariable, isArbitraryValue],\n radial: ['', isArbitraryVariable, isArbitraryValue],\n conic: [isInteger, isArbitraryVariable, isArbitraryValue]\n }, isArbitraryVariableImage, isArbitraryImage]\n }],\n /**\n * Background Color\n * @see https://tailwindcss.com/docs/background-color\n */\n 'bg-color': [{\n bg: scaleColor()\n }],\n /**\n * Gradient Color Stops From Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from-pos': [{\n from: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops Via Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via-pos': [{\n via: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops To Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to-pos': [{\n to: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops From\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from': [{\n from: scaleColor()\n }],\n /**\n * Gradient Color Stops Via\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via': [{\n via: scaleColor()\n }],\n /**\n * Gradient Color Stops To\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to': [{\n to: scaleColor()\n }],\n // ---------------\n // --- Borders ---\n // ---------------\n /**\n * Border Radius\n * @see https://tailwindcss.com/docs/border-radius\n */\n rounded: [{\n rounded: scaleRadius()\n }],\n /**\n * Border Radius Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-s': [{\n 'rounded-s': scaleRadius()\n }],\n /**\n * Border Radius End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-e': [{\n 'rounded-e': scaleRadius()\n }],\n /**\n * Border Radius Top\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-t': [{\n 'rounded-t': scaleRadius()\n }],\n /**\n * Border Radius Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-r': [{\n 'rounded-r': scaleRadius()\n }],\n /**\n * Border Radius Bottom\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-b': [{\n 'rounded-b': scaleRadius()\n }],\n /**\n * Border Radius Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-l': [{\n 'rounded-l': scaleRadius()\n }],\n /**\n * Border Radius Start Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ss': [{\n 'rounded-ss': scaleRadius()\n }],\n /**\n * Border Radius Start End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-se': [{\n 'rounded-se': scaleRadius()\n }],\n /**\n * Border Radius End End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ee': [{\n 'rounded-ee': scaleRadius()\n }],\n /**\n * Border Radius End Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-es': [{\n 'rounded-es': scaleRadius()\n }],\n /**\n * Border Radius Top Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tl': [{\n 'rounded-tl': scaleRadius()\n }],\n /**\n * Border Radius Top Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tr': [{\n 'rounded-tr': scaleRadius()\n }],\n /**\n * Border Radius Bottom Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-br': [{\n 'rounded-br': scaleRadius()\n }],\n /**\n * Border Radius Bottom Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-bl': [{\n 'rounded-bl': scaleRadius()\n }],\n /**\n * Border Width\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w': [{\n border: scaleBorderWidth()\n }],\n /**\n * Border Width X\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-x': [{\n 'border-x': scaleBorderWidth()\n }],\n /**\n * Border Width Y\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-y': [{\n 'border-y': scaleBorderWidth()\n }],\n /**\n * Border Width Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-s': [{\n 'border-s': scaleBorderWidth()\n }],\n /**\n * Border Width End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-e': [{\n 'border-e': scaleBorderWidth()\n }],\n /**\n * Border Width Top\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-t': [{\n 'border-t': scaleBorderWidth()\n }],\n /**\n * Border Width Right\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-r': [{\n 'border-r': scaleBorderWidth()\n }],\n /**\n * Border Width Bottom\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-b': [{\n 'border-b': scaleBorderWidth()\n }],\n /**\n * Border Width Left\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-l': [{\n 'border-l': scaleBorderWidth()\n }],\n /**\n * Divide Width X\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x': [{\n 'divide-x': scaleBorderWidth()\n }],\n /**\n * Divide Width X Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x-reverse': ['divide-x-reverse'],\n /**\n * Divide Width Y\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y': [{\n 'divide-y': scaleBorderWidth()\n }],\n /**\n * Divide Width Y Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y-reverse': ['divide-y-reverse'],\n /**\n * Border Style\n * @see https://tailwindcss.com/docs/border-style\n */\n 'border-style': [{\n border: [...scaleLineStyle(), 'hidden', 'none']\n }],\n /**\n * Divide Style\n * @see https://tailwindcss.com/docs/border-style#setting-the-divider-style\n */\n 'divide-style': [{\n divide: [...scaleLineStyle(), 'hidden', 'none']\n }],\n /**\n * Border Color\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color': [{\n border: scaleColor()\n }],\n /**\n * Border Color X\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-x': [{\n 'border-x': scaleColor()\n }],\n /**\n * Border Color Y\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-y': [{\n 'border-y': scaleColor()\n }],\n /**\n * Border Color S\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-s': [{\n 'border-s': scaleColor()\n }],\n /**\n * Border Color E\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-e': [{\n 'border-e': scaleColor()\n }],\n /**\n * Border Color Top\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-t': [{\n 'border-t': scaleColor()\n }],\n /**\n * Border Color Right\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-r': [{\n 'border-r': scaleColor()\n }],\n /**\n * Border Color Bottom\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-b': [{\n 'border-b': scaleColor()\n }],\n /**\n * Border Color Left\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-l': [{\n 'border-l': scaleColor()\n }],\n /**\n * Divide Color\n * @see https://tailwindcss.com/docs/divide-color\n */\n 'divide-color': [{\n divide: scaleColor()\n }],\n /**\n * Outline Style\n * @see https://tailwindcss.com/docs/outline-style\n */\n 'outline-style': [{\n outline: [...scaleLineStyle(), 'none', 'hidden']\n }],\n /**\n * Outline Offset\n * @see https://tailwindcss.com/docs/outline-offset\n */\n 'outline-offset': [{\n 'outline-offset': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Outline Width\n * @see https://tailwindcss.com/docs/outline-width\n */\n 'outline-w': [{\n outline: ['', isNumber, isArbitraryVariableLength, isArbitraryLength]\n }],\n /**\n * Outline Color\n * @see https://tailwindcss.com/docs/outline-color\n */\n 'outline-color': [{\n outline: scaleColor()\n }],\n // ---------------\n // --- Effects ---\n // ---------------\n /**\n * Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow\n */\n shadow: [{\n shadow: [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-shadow-color\n */\n 'shadow-color': [{\n shadow: scaleColor()\n }],\n /**\n * Inset Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-shadow\n */\n 'inset-shadow': [{\n 'inset-shadow': ['none', themeInsetShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Inset Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-shadow-color\n */\n 'inset-shadow-color': [{\n 'inset-shadow': scaleColor()\n }],\n /**\n * Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-a-ring\n */\n 'ring-w': [{\n ring: scaleBorderWidth()\n }],\n /**\n * Ring Width Inset\n * @see https://v3.tailwindcss.com/docs/ring-width#inset-rings\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-w-inset': ['ring-inset'],\n /**\n * Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-ring-color\n */\n 'ring-color': [{\n ring: scaleColor()\n }],\n /**\n * Ring Offset Width\n * @see https://v3.tailwindcss.com/docs/ring-offset-width\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-w': [{\n 'ring-offset': [isNumber, isArbitraryLength]\n }],\n /**\n * Ring Offset Color\n * @see https://v3.tailwindcss.com/docs/ring-offset-color\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-color': [{\n 'ring-offset': scaleColor()\n }],\n /**\n * Inset Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-ring\n */\n 'inset-ring-w': [{\n 'inset-ring': scaleBorderWidth()\n }],\n /**\n * Inset Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-ring-color\n */\n 'inset-ring-color': [{\n 'inset-ring': scaleColor()\n }],\n /**\n * Text Shadow\n * @see https://tailwindcss.com/docs/text-shadow\n */\n 'text-shadow': [{\n 'text-shadow': ['none', themeTextShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Text Shadow Color\n * @see https://tailwindcss.com/docs/text-shadow#setting-the-shadow-color\n */\n 'text-shadow-color': [{\n 'text-shadow': scaleColor()\n }],\n /**\n * Opacity\n * @see https://tailwindcss.com/docs/opacity\n */\n opacity: [{\n opacity: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Mix Blend Mode\n * @see https://tailwindcss.com/docs/mix-blend-mode\n */\n 'mix-blend': [{\n 'mix-blend': [...scaleBlendMode(), 'plus-darker', 'plus-lighter']\n }],\n /**\n * Background Blend Mode\n * @see https://tailwindcss.com/docs/background-blend-mode\n */\n 'bg-blend': [{\n 'bg-blend': scaleBlendMode()\n }],\n /**\n * Mask Clip\n * @see https://tailwindcss.com/docs/mask-clip\n */\n 'mask-clip': [{\n 'mask-clip': ['border', 'padding', 'content', 'fill', 'stroke', 'view']\n }, 'mask-no-clip'],\n /**\n * Mask Composite\n * @see https://tailwindcss.com/docs/mask-composite\n */\n 'mask-composite': [{\n mask: ['add', 'subtract', 'intersect', 'exclude']\n }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image-linear-pos': [{\n 'mask-linear': [isNumber]\n }],\n 'mask-image-linear-from-pos': [{\n 'mask-linear-from': scaleMaskImagePosition()\n }],\n 'mask-image-linear-to-pos': [{\n 'mask-linear-to': scaleMaskImagePosition()\n }],\n 'mask-image-linear-from-color': [{\n 'mask-linear-from': scaleColor()\n }],\n 'mask-image-linear-to-color': [{\n 'mask-linear-to': scaleColor()\n }],\n 'mask-image-t-from-pos': [{\n 'mask-t-from': scaleMaskImagePosition()\n }],\n 'mask-image-t-to-pos': [{\n 'mask-t-to': scaleMaskImagePosition()\n }],\n 'mask-image-t-from-color': [{\n 'mask-t-from': scaleColor()\n }],\n 'mask-image-t-to-color': [{\n 'mask-t-to': scaleColor()\n }],\n 'mask-image-r-from-pos': [{\n 'mask-r-from': scaleMaskImagePosition()\n }],\n 'mask-image-r-to-pos': [{\n 'mask-r-to': scaleMaskImagePosition()\n }],\n 'mask-image-r-from-color': [{\n 'mask-r-from': scaleColor()\n }],\n 'mask-image-r-to-color': [{\n 'mask-r-to': scaleColor()\n }],\n 'mask-image-b-from-pos': [{\n 'mask-b-from': scaleMaskImagePosition()\n }],\n 'mask-image-b-to-pos': [{\n 'mask-b-to': scaleMaskImagePosition()\n }],\n 'mask-image-b-from-color': [{\n 'mask-b-from': scaleColor()\n }],\n 'mask-image-b-to-color': [{\n 'mask-b-to': scaleColor()\n }],\n 'mask-image-l-from-pos': [{\n 'mask-l-from': scaleMaskImagePosition()\n }],\n 'mask-image-l-to-pos': [{\n 'mask-l-to': scaleMaskImagePosition()\n }],\n 'mask-image-l-from-color': [{\n 'mask-l-from': scaleColor()\n }],\n 'mask-image-l-to-color': [{\n 'mask-l-to': scaleColor()\n }],\n 'mask-image-x-from-pos': [{\n 'mask-x-from': scaleMaskImagePosition()\n }],\n 'mask-image-x-to-pos': [{\n 'mask-x-to': scaleMaskImagePosition()\n }],\n 'mask-image-x-from-color': [{\n 'mask-x-from': scaleColor()\n }],\n 'mask-image-x-to-color': [{\n 'mask-x-to': scaleColor()\n }],\n 'mask-image-y-from-pos': [{\n 'mask-y-from': scaleMaskImagePosition()\n }],\n 'mask-image-y-to-pos': [{\n 'mask-y-to': scaleMaskImagePosition()\n }],\n 'mask-image-y-from-color': [{\n 'mask-y-from': scaleColor()\n }],\n 'mask-image-y-to-color': [{\n 'mask-y-to': scaleColor()\n }],\n 'mask-image-radial': [{\n 'mask-radial': [isArbitraryVariable, isArbitraryValue]\n }],\n 'mask-image-radial-from-pos': [{\n 'mask-radial-from': scaleMaskImagePosition()\n }],\n 'mask-image-radial-to-pos': [{\n 'mask-radial-to': scaleMaskImagePosition()\n }],\n 'mask-image-radial-from-color': [{\n 'mask-radial-from': scaleColor()\n }],\n 'mask-image-radial-to-color': [{\n 'mask-radial-to': scaleColor()\n }],\n 'mask-image-radial-shape': [{\n 'mask-radial': ['circle', 'ellipse']\n }],\n 'mask-image-radial-size': [{\n 'mask-radial': [{\n closest: ['side', 'corner'],\n farthest: ['side', 'corner']\n }]\n }],\n 'mask-image-radial-pos': [{\n 'mask-radial-at': scalePosition()\n }],\n 'mask-image-conic-pos': [{\n 'mask-conic': [isNumber]\n }],\n 'mask-image-conic-from-pos': [{\n 'mask-conic-from': scaleMaskImagePosition()\n }],\n 'mask-image-conic-to-pos': [{\n 'mask-conic-to': scaleMaskImagePosition()\n }],\n 'mask-image-conic-from-color': [{\n 'mask-conic-from': scaleColor()\n }],\n 'mask-image-conic-to-color': [{\n 'mask-conic-to': scaleColor()\n }],\n /**\n * Mask Mode\n * @see https://tailwindcss.com/docs/mask-mode\n */\n 'mask-mode': [{\n mask: ['alpha', 'luminance', 'match']\n }],\n /**\n * Mask Origin\n * @see https://tailwindcss.com/docs/mask-origin\n */\n 'mask-origin': [{\n 'mask-origin': ['border', 'padding', 'content', 'fill', 'stroke', 'view']\n }],\n /**\n * Mask Position\n * @see https://tailwindcss.com/docs/mask-position\n */\n 'mask-position': [{\n mask: scaleBgPosition()\n }],\n /**\n * Mask Repeat\n * @see https://tailwindcss.com/docs/mask-repeat\n */\n 'mask-repeat': [{\n mask: scaleBgRepeat()\n }],\n /**\n * Mask Size\n * @see https://tailwindcss.com/docs/mask-size\n */\n 'mask-size': [{\n mask: scaleBgSize()\n }],\n /**\n * Mask Type\n * @see https://tailwindcss.com/docs/mask-type\n */\n 'mask-type': [{\n 'mask-type': ['alpha', 'luminance']\n }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image': [{\n mask: ['none', isArbitraryVariable, isArbitraryValue]\n }],\n // ---------------\n // --- Filters ---\n // ---------------\n /**\n * Filter\n * @see https://tailwindcss.com/docs/filter\n */\n filter: [{\n filter: [\n // Deprecated since Tailwind CSS v3.0.0\n '', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Blur\n * @see https://tailwindcss.com/docs/blur\n */\n blur: [{\n blur: scaleBlur()\n }],\n /**\n * Brightness\n * @see https://tailwindcss.com/docs/brightness\n */\n brightness: [{\n brightness: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Contrast\n * @see https://tailwindcss.com/docs/contrast\n */\n contrast: [{\n contrast: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Drop Shadow\n * @see https://tailwindcss.com/docs/drop-shadow\n */\n 'drop-shadow': [{\n 'drop-shadow': [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeDropShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Drop Shadow Color\n * @see https://tailwindcss.com/docs/filter-drop-shadow#setting-the-shadow-color\n */\n 'drop-shadow-color': [{\n 'drop-shadow': scaleColor()\n }],\n /**\n * Grayscale\n * @see https://tailwindcss.com/docs/grayscale\n */\n grayscale: [{\n grayscale: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Hue Rotate\n * @see https://tailwindcss.com/docs/hue-rotate\n */\n 'hue-rotate': [{\n 'hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Invert\n * @see https://tailwindcss.com/docs/invert\n */\n invert: [{\n invert: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Saturate\n * @see https://tailwindcss.com/docs/saturate\n */\n saturate: [{\n saturate: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Sepia\n * @see https://tailwindcss.com/docs/sepia\n */\n sepia: [{\n sepia: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Filter\n * @see https://tailwindcss.com/docs/backdrop-filter\n */\n 'backdrop-filter': [{\n 'backdrop-filter': [\n // Deprecated since Tailwind CSS v3.0.0\n '', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Blur\n * @see https://tailwindcss.com/docs/backdrop-blur\n */\n 'backdrop-blur': [{\n 'backdrop-blur': scaleBlur()\n }],\n /**\n * Backdrop Brightness\n * @see https://tailwindcss.com/docs/backdrop-brightness\n */\n 'backdrop-brightness': [{\n 'backdrop-brightness': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Contrast\n * @see https://tailwindcss.com/docs/backdrop-contrast\n */\n 'backdrop-contrast': [{\n 'backdrop-contrast': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Grayscale\n * @see https://tailwindcss.com/docs/backdrop-grayscale\n */\n 'backdrop-grayscale': [{\n 'backdrop-grayscale': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Hue Rotate\n * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n */\n 'backdrop-hue-rotate': [{\n 'backdrop-hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Invert\n * @see https://tailwindcss.com/docs/backdrop-invert\n */\n 'backdrop-invert': [{\n 'backdrop-invert': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Opacity\n * @see https://tailwindcss.com/docs/backdrop-opacity\n */\n 'backdrop-opacity': [{\n 'backdrop-opacity': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Saturate\n * @see https://tailwindcss.com/docs/backdrop-saturate\n */\n 'backdrop-saturate': [{\n 'backdrop-saturate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Sepia\n * @see https://tailwindcss.com/docs/backdrop-sepia\n */\n 'backdrop-sepia': [{\n 'backdrop-sepia': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n // --------------\n // --- Tables ---\n // --------------\n /**\n * Border Collapse\n * @see https://tailwindcss.com/docs/border-collapse\n */\n 'border-collapse': [{\n border: ['collapse', 'separate']\n }],\n /**\n * Border Spacing\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing': [{\n 'border-spacing': scaleUnambiguousSpacing()\n }],\n /**\n * Border Spacing X\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-x': [{\n 'border-spacing-x': scaleUnambiguousSpacing()\n }],\n /**\n * Border Spacing Y\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-y': [{\n 'border-spacing-y': scaleUnambiguousSpacing()\n }],\n /**\n * Table Layout\n * @see https://tailwindcss.com/docs/table-layout\n */\n 'table-layout': [{\n table: ['auto', 'fixed']\n }],\n /**\n * Caption Side\n * @see https://tailwindcss.com/docs/caption-side\n */\n caption: [{\n caption: ['top', 'bottom']\n }],\n // ---------------------------------\n // --- Transitions and Animation ---\n // ---------------------------------\n /**\n * Transition Property\n * @see https://tailwindcss.com/docs/transition-property\n */\n transition: [{\n transition: ['', 'all', 'colors', 'opacity', 'shadow', 'transform', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Behavior\n * @see https://tailwindcss.com/docs/transition-behavior\n */\n 'transition-behavior': [{\n transition: ['normal', 'discrete']\n }],\n /**\n * Transition Duration\n * @see https://tailwindcss.com/docs/transition-duration\n */\n duration: [{\n duration: [isNumber, 'initial', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Timing Function\n * @see https://tailwindcss.com/docs/transition-timing-function\n */\n ease: [{\n ease: ['linear', 'initial', themeEase, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Delay\n * @see https://tailwindcss.com/docs/transition-delay\n */\n delay: [{\n delay: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Animation\n * @see https://tailwindcss.com/docs/animation\n */\n animate: [{\n animate: ['none', themeAnimate, isArbitraryVariable, isArbitraryValue]\n }],\n // ------------------\n // --- Transforms ---\n // ------------------\n /**\n * Backface Visibility\n * @see https://tailwindcss.com/docs/backface-visibility\n */\n backface: [{\n backface: ['hidden', 'visible']\n }],\n /**\n * Perspective\n * @see https://tailwindcss.com/docs/perspective\n */\n perspective: [{\n perspective: [themePerspective, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Perspective Origin\n * @see https://tailwindcss.com/docs/perspective-origin\n */\n 'perspective-origin': [{\n 'perspective-origin': scalePositionWithArbitrary()\n }],\n /**\n * Rotate\n * @see https://tailwindcss.com/docs/rotate\n */\n rotate: [{\n rotate: scaleRotate()\n }],\n /**\n * Rotate X\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-x': [{\n 'rotate-x': scaleRotate()\n }],\n /**\n * Rotate Y\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-y': [{\n 'rotate-y': scaleRotate()\n }],\n /**\n * Rotate Z\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-z': [{\n 'rotate-z': scaleRotate()\n }],\n /**\n * Scale\n * @see https://tailwindcss.com/docs/scale\n */\n scale: [{\n scale: scaleScale()\n }],\n /**\n * Scale X\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-x': [{\n 'scale-x': scaleScale()\n }],\n /**\n * Scale Y\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-y': [{\n 'scale-y': scaleScale()\n }],\n /**\n * Scale Z\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-z': [{\n 'scale-z': scaleScale()\n }],\n /**\n * Scale 3D\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-3d': ['scale-3d'],\n /**\n * Skew\n * @see https://tailwindcss.com/docs/skew\n */\n skew: [{\n skew: scaleSkew()\n }],\n /**\n * Skew X\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-x': [{\n 'skew-x': scaleSkew()\n }],\n /**\n * Skew Y\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-y': [{\n 'skew-y': scaleSkew()\n }],\n /**\n * Transform\n * @see https://tailwindcss.com/docs/transform\n */\n transform: [{\n transform: [isArbitraryVariable, isArbitraryValue, '', 'none', 'gpu', 'cpu']\n }],\n /**\n * Transform Origin\n * @see https://tailwindcss.com/docs/transform-origin\n */\n 'transform-origin': [{\n origin: scalePositionWithArbitrary()\n }],\n /**\n * Transform Style\n * @see https://tailwindcss.com/docs/transform-style\n */\n 'transform-style': [{\n transform: ['3d', 'flat']\n }],\n /**\n * Translate\n * @see https://tailwindcss.com/docs/translate\n */\n translate: [{\n translate: scaleTranslate()\n }],\n /**\n * Translate X\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-x': [{\n 'translate-x': scaleTranslate()\n }],\n /**\n * Translate Y\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-y': [{\n 'translate-y': scaleTranslate()\n }],\n /**\n * Translate Z\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-z': [{\n 'translate-z': scaleTranslate()\n }],\n /**\n * Translate None\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-none': ['translate-none'],\n // ---------------------\n // --- Interactivity ---\n // ---------------------\n /**\n * Accent Color\n * @see https://tailwindcss.com/docs/accent-color\n */\n accent: [{\n accent: scaleColor()\n }],\n /**\n * Appearance\n * @see https://tailwindcss.com/docs/appearance\n */\n appearance: [{\n appearance: ['none', 'auto']\n }],\n /**\n * Caret Color\n * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n */\n 'caret-color': [{\n caret: scaleColor()\n }],\n /**\n * Color Scheme\n * @see https://tailwindcss.com/docs/color-scheme\n */\n 'color-scheme': [{\n scheme: ['normal', 'dark', 'light', 'light-dark', 'only-dark', 'only-light']\n }],\n /**\n * Cursor\n * @see https://tailwindcss.com/docs/cursor\n */\n cursor: [{\n cursor: ['auto', 'default', 'pointer', 'wait', 'text', 'move', 'help', 'not-allowed', 'none', 'context-menu', 'progress', 'cell', 'crosshair', 'vertical-text', 'alias', 'copy', 'no-drop', 'grab', 'grabbing', 'all-scroll', 'col-resize', 'row-resize', 'n-resize', 'e-resize', 's-resize', 'w-resize', 'ne-resize', 'nw-resize', 'se-resize', 'sw-resize', 'ew-resize', 'ns-resize', 'nesw-resize', 'nwse-resize', 'zoom-in', 'zoom-out', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Field Sizing\n * @see https://tailwindcss.com/docs/field-sizing\n */\n 'field-sizing': [{\n 'field-sizing': ['fixed', 'content']\n }],\n /**\n * Pointer Events\n * @see https://tailwindcss.com/docs/pointer-events\n */\n 'pointer-events': [{\n 'pointer-events': ['auto', 'none']\n }],\n /**\n * Resize\n * @see https://tailwindcss.com/docs/resize\n */\n resize: [{\n resize: ['none', '', 'y', 'x']\n }],\n /**\n * Scroll Behavior\n * @see https://tailwindcss.com/docs/scroll-behavior\n */\n 'scroll-behavior': [{\n scroll: ['auto', 'smooth']\n }],\n /**\n * Scroll Margin\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-m': [{\n 'scroll-m': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin X\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mx': [{\n 'scroll-mx': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Y\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-my': [{\n 'scroll-my': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ms': [{\n 'scroll-ms': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-me': [{\n 'scroll-me': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Top\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mt': [{\n 'scroll-mt': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Right\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mr': [{\n 'scroll-mr': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Bottom\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mb': [{\n 'scroll-mb': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Left\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ml': [{\n 'scroll-ml': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-p': [{\n 'scroll-p': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding X\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-px': [{\n 'scroll-px': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Y\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-py': [{\n 'scroll-py': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-ps': [{\n 'scroll-ps': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pe': [{\n 'scroll-pe': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Top\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pt': [{\n 'scroll-pt': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Right\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pr': [{\n 'scroll-pr': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Bottom\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pb': [{\n 'scroll-pb': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Left\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pl': [{\n 'scroll-pl': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Snap Align\n * @see https://tailwindcss.com/docs/scroll-snap-align\n */\n 'snap-align': [{\n snap: ['start', 'end', 'center', 'align-none']\n }],\n /**\n * Scroll Snap Stop\n * @see https://tailwindcss.com/docs/scroll-snap-stop\n */\n 'snap-stop': [{\n snap: ['normal', 'always']\n }],\n /**\n * Scroll Snap Type\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-type': [{\n snap: ['none', 'x', 'y', 'both']\n }],\n /**\n * Scroll Snap Type Strictness\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-strictness': [{\n snap: ['mandatory', 'proximity']\n }],\n /**\n * Touch Action\n * @see https://tailwindcss.com/docs/touch-action\n */\n touch: [{\n touch: ['auto', 'none', 'manipulation']\n }],\n /**\n * Touch Action X\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-x': [{\n 'touch-pan': ['x', 'left', 'right']\n }],\n /**\n * Touch Action Y\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-y': [{\n 'touch-pan': ['y', 'up', 'down']\n }],\n /**\n * Touch Action Pinch Zoom\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-pz': ['touch-pinch-zoom'],\n /**\n * User Select\n * @see https://tailwindcss.com/docs/user-select\n */\n select: [{\n select: ['none', 'text', 'all', 'auto']\n }],\n /**\n * Will Change\n * @see https://tailwindcss.com/docs/will-change\n */\n 'will-change': [{\n 'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryVariable, isArbitraryValue]\n }],\n // -----------\n // --- SVG ---\n // -----------\n /**\n * Fill\n * @see https://tailwindcss.com/docs/fill\n */\n fill: [{\n fill: ['none', ...scaleColor()]\n }],\n /**\n * Stroke Width\n * @see https://tailwindcss.com/docs/stroke-width\n */\n 'stroke-w': [{\n stroke: [isNumber, isArbitraryVariableLength, isArbitraryLength, isArbitraryNumber]\n }],\n /**\n * Stroke\n * @see https://tailwindcss.com/docs/stroke\n */\n stroke: [{\n stroke: ['none', ...scaleColor()]\n }],\n // ---------------------\n // --- Accessibility ---\n // ---------------------\n /**\n * Forced Color Adjust\n * @see https://tailwindcss.com/docs/forced-color-adjust\n */\n 'forced-color-adjust': [{\n 'forced-color-adjust': ['auto', 'none']\n }]\n },\n conflictingClassGroups: {\n overflow: ['overflow-x', 'overflow-y'],\n overscroll: ['overscroll-x', 'overscroll-y'],\n inset: ['inset-x', 'inset-y', 'start', 'end', 'top', 'right', 'bottom', 'left'],\n 'inset-x': ['right', 'left'],\n 'inset-y': ['top', 'bottom'],\n flex: ['basis', 'grow', 'shrink'],\n gap: ['gap-x', 'gap-y'],\n p: ['px', 'py', 'ps', 'pe', 'pt', 'pr', 'pb', 'pl'],\n px: ['pr', 'pl'],\n py: ['pt', 'pb'],\n m: ['mx', 'my', 'ms', 'me', 'mt', 'mr', 'mb', 'ml'],\n mx: ['mr', 'ml'],\n my: ['mt', 'mb'],\n size: ['w', 'h'],\n 'font-size': ['leading'],\n 'fvn-normal': ['fvn-ordinal', 'fvn-slashed-zero', 'fvn-figure', 'fvn-spacing', 'fvn-fraction'],\n 'fvn-ordinal': ['fvn-normal'],\n 'fvn-slashed-zero': ['fvn-normal'],\n 'fvn-figure': ['fvn-normal'],\n 'fvn-spacing': ['fvn-normal'],\n 'fvn-fraction': ['fvn-normal'],\n 'line-clamp': ['display', 'overflow'],\n rounded: ['rounded-s', 'rounded-e', 'rounded-t', 'rounded-r', 'rounded-b', 'rounded-l', 'rounded-ss', 'rounded-se', 'rounded-ee', 'rounded-es', 'rounded-tl', 'rounded-tr', 'rounded-br', 'rounded-bl'],\n 'rounded-s': ['rounded-ss', 'rounded-es'],\n 'rounded-e': ['rounded-se', 'rounded-ee'],\n 'rounded-t': ['rounded-tl', 'rounded-tr'],\n 'rounded-r': ['rounded-tr', 'rounded-br'],\n 'rounded-b': ['rounded-br', 'rounded-bl'],\n 'rounded-l': ['rounded-tl', 'rounded-bl'],\n 'border-spacing': ['border-spacing-x', 'border-spacing-y'],\n 'border-w': ['border-w-x', 'border-w-y', 'border-w-s', 'border-w-e', 'border-w-t', 'border-w-r', 'border-w-b', 'border-w-l'],\n 'border-w-x': ['border-w-r', 'border-w-l'],\n 'border-w-y': ['border-w-t', 'border-w-b'],\n 'border-color': ['border-color-x', 'border-color-y', 'border-color-s', 'border-color-e', 'border-color-t', 'border-color-r', 'border-color-b', 'border-color-l'],\n 'border-color-x': ['border-color-r', 'border-color-l'],\n 'border-color-y': ['border-color-t', 'border-color-b'],\n translate: ['translate-x', 'translate-y', 'translate-none'],\n 'translate-none': ['translate', 'translate-x', 'translate-y', 'translate-z'],\n 'scroll-m': ['scroll-mx', 'scroll-my', 'scroll-ms', 'scroll-me', 'scroll-mt', 'scroll-mr', 'scroll-mb', 'scroll-ml'],\n 'scroll-mx': ['scroll-mr', 'scroll-ml'],\n 'scroll-my': ['scroll-mt', 'scroll-mb'],\n 'scroll-p': ['scroll-px', 'scroll-py', 'scroll-ps', 'scroll-pe', 'scroll-pt', 'scroll-pr', 'scroll-pb', 'scroll-pl'],\n 'scroll-px': ['scroll-pr', 'scroll-pl'],\n 'scroll-py': ['scroll-pt', 'scroll-pb'],\n touch: ['touch-x', 'touch-y', 'touch-pz'],\n 'touch-x': ['touch'],\n 'touch-y': ['touch'],\n 'touch-pz': ['touch']\n },\n conflictingClassGroupModifiers: {\n 'font-size': ['leading']\n },\n orderSensitiveModifiers: ['*', '**', 'after', 'backdrop', 'before', 'details-content', 'file', 'first-letter', 'first-line', 'marker', 'placeholder', 'selection']\n };\n};\n\n/**\n * @param baseConfig Config where other config will be merged into. This object will be mutated.\n * @param configExtension Partial config to merge into the `baseConfig`.\n */\nconst mergeConfigs = (baseConfig, {\n cacheSize,\n prefix,\n experimentalParseClassName,\n extend = {},\n override = {}\n}) => {\n overrideProperty(baseConfig, 'cacheSize', cacheSize);\n overrideProperty(baseConfig, 'prefix', prefix);\n overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName);\n overrideConfigProperties(baseConfig.theme, override.theme);\n overrideConfigProperties(baseConfig.classGroups, override.classGroups);\n overrideConfigProperties(baseConfig.conflictingClassGroups, override.conflictingClassGroups);\n overrideConfigProperties(baseConfig.conflictingClassGroupModifiers, override.conflictingClassGroupModifiers);\n overrideProperty(baseConfig, 'orderSensitiveModifiers', override.orderSensitiveModifiers);\n mergeConfigProperties(baseConfig.theme, extend.theme);\n mergeConfigProperties(baseConfig.classGroups, extend.classGroups);\n mergeConfigProperties(baseConfig.conflictingClassGroups, extend.conflictingClassGroups);\n mergeConfigProperties(baseConfig.conflictingClassGroupModifiers, extend.conflictingClassGroupModifiers);\n mergeArrayProperties(baseConfig, extend, 'orderSensitiveModifiers');\n return baseConfig;\n};\nconst overrideProperty = (baseObject, overrideKey, overrideValue) => {\n if (overrideValue !== undefined) {\n baseObject[overrideKey] = overrideValue;\n }\n};\nconst overrideConfigProperties = (baseObject, overrideObject) => {\n if (overrideObject) {\n for (const key in overrideObject) {\n overrideProperty(baseObject, key, overrideObject[key]);\n }\n }\n};\nconst mergeConfigProperties = (baseObject, mergeObject) => {\n if (mergeObject) {\n for (const key in mergeObject) {\n mergeArrayProperties(baseObject, mergeObject, key);\n }\n }\n};\nconst mergeArrayProperties = (baseObject, mergeObject, key) => {\n const mergeValue = mergeObject[key];\n if (mergeValue !== undefined) {\n baseObject[key] = baseObject[key] ? baseObject[key].concat(mergeValue) : mergeValue;\n }\n};\nconst extendTailwindMerge = (configExtension, ...createConfig) => typeof configExtension === 'function' ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig) : createTailwindMerge(() => mergeConfigs(getDefaultConfig(), configExtension), ...createConfig);\nconst twMerge = /*#__PURE__*/createTailwindMerge(getDefaultConfig);\nexport { createTailwindMerge, extendTailwindMerge, fromTheme, getDefaultConfig, mergeConfigs, twJoin, twMerge, validators };\n//# sourceMappingURL=bundle-mjs.mjs.map\n","export type ColorThemeUser = 'primary' | 'default' | 'overlay' | 'rose' | 'green' | 'muted' | 'theme' | 'orange' | 'indigo' | 'red'\nexport type ButtonDesign = 'solid' | 'ghost' | 'outline' | 'link'\n\nexport const themes: Record<ColorThemeUser, Record<ButtonDesign, {\n base?: string\n border?: string\n hover?: string\n icon?: string\n input?: string\n}>> = {\n default: {\n solid: {\n base: 'bg-theme-0 dark:bg-theme-700/40 text-theme-600 dark:text-theme-50',\n input: `bg-white dark:bg-theme-800/50\n ring-theme-200 dark:ring-theme-600/70\n focus:ring-theme-600 focus:bg-white\n dark:focus:ring-theme-500 dark:focus:bg-theme-800\n focus-within:ring-theme-600 dark:focus-within:ring-theme-500\n text-theme-900 dark:text-theme-100\n placeholder:text-theme-400 dark:placeholder:text-theme-500`,\n border: 'border-theme-300/80 dark:border-theme-600',\n hover: 'hover:border-theme-300 dark:hover:border-theme-500',\n icon: 'text-theme-600 dark:text-theme-50',\n },\n ghost: {\n base: 'bg-theme-50 dark:bg-theme-600/30 text-theme-700 dark:text-theme-50',\n border: 'border-theme-100 dark:border-theme-800/20',\n hover: 'hover:bg-theme-200 dark:hover:bg-theme-600/50 hover:border-theme-200 dark:hover:border-theme-600',\n icon: 'text-theme-500 dark:text-theme-500',\n },\n outline: {\n base: 'bg-transparent text-theme-700 dark:text-theme-50',\n border: 'border-theme-300 dark:border-theme-400',\n hover: 'hover:opacity-70',\n icon: 'text-theme-700 dark:text-theme-300',\n },\n link: {\n base: 'bg-transparent text-theme-600 dark:text-theme-50',\n border: 'border-transparent',\n hover: 'hover:opacity-70',\n icon: 'text-theme-600 dark:text-theme-400',\n },\n },\n muted: {\n solid: {\n base: 'bg-gray-100 dark:bg-gray-700/40 text-gray-900 dark:text-gray-50',\n input: `bg-white dark:bg-gray-800/50\n ring-gray-200 dark:ring-gray-600/70\n focus:ring-gray-600 focus:bg-white\n dark:focus:ring-gray-500 dark:focus:bg-gray-800\n focus-within:ring-gray-600 dark:focus-within:ring-gray-500\n text-gray-900 dark:text-gray-100\n placeholder:text-gray-400 dark:placeholder:text-gray-500`,\n border: 'border-gray-300/80 dark:border-gray-600',\n hover: 'hover:border-gray-300 dark:hover:border-gray-500',\n icon: 'text-gray-600 dark:text-gray-50',\n },\n ghost: {\n base: 'bg-gray-100 dark:bg-gray-600/30 text-gray-700 dark:text-gray-50',\n border: 'border-gray-100 dark:border-gray-800/20',\n hover: 'hover:bg-gray-200 dark:hover:bg-gray-600/50 hover:border-gray-200 dark:hover:border-gray-600',\n icon: 'text-gray-500 dark:text-gray-500',\n },\n outline: {\n base: 'bg-transparent text-gray-700 dark:text-gray-50',\n border: 'border-gray-500 dark:border-gray-400',\n hover: 'hover:opacity-70',\n icon: 'text-gray-700 dark:text-gray-300',\n },\n link: {\n base: 'bg-transparent text-gray-600 dark:text-gray-50',\n border: 'border-transparent',\n hover: 'hover:opacity-70',\n icon: 'text-gray-600 dark:text-gray-400',\n },\n },\n overlay: {\n solid: {\n base: 'bg-white/100 text-black backdrop-blur-sm shadow-sm mix-blend-overlay [text-shadow:_0_1px_1px_rgb(255_255_255_/_100%)]',\n border: 'border-white/100',\n input: `bg-white/10 ring-white\n focus:ring-white/90 focus:bg-white/20\n dark:focus:ring-white/70\n text-white\n placeholder:text-white/60`,\n hover: 'hover:bg-white/70 ',\n icon: 'text-black',\n },\n ghost: {\n base: 'bg-white/70 text-black backdrop-blur-sm shadow-sm mix-blend-overlay [text-shadow:_0_1px_1px_rgb(255_255_255_/_100%)]',\n border: 'border-white/100',\n hover: 'hover:bg-white/70 hover:border-white/90',\n icon: 'text-black',\n },\n outline: {\n base: 'bg-white/10 text-white backdrop-blur-sm shadow-sm [text-shadow:_0_0.5px_0_rgb(0_0_0_/_40%)]',\n border: 'border-white',\n hover: 'hover:border-white/80',\n icon: 'text-white',\n },\n link: {\n base: 'bg-transparent text-white [text-shadow:_0_0.5px_0_rgb(0_0_0_/_40%)]',\n border: 'border-transparent',\n hover: 'hover:opacity-70',\n icon: 'text-white',\n },\n },\n primary: {\n solid: {\n base: 'bg-primary-500 dark:bg-primary-700/70 text-primary-0 dark:text-primary-50',\n border: 'border-primary-600/80 dark:border-primary-600',\n input: `bg-primary-50 dark:bg-primary-800/20\n ring-primary-500 dark:ring-primary-600/70\n focus:ring-primary-700 focus:bg-primary-50/50\n dark:focus:ring-primary-600 dark:focus:bg-primary-800/40\n text-primary-800 dark:text-primary-0\n placeholder:text-primary-300 dark:placeholder:text-primary-600`,\n hover: 'hover:bg-primary-600 dark:hover:bg-primary-800',\n icon: 'text-primary-0 dark:text-primary-50',\n },\n ghost: {\n base: 'bg-primary-50 dark:bg-primary-800/40 text-primary-800 dark:text-primary-0',\n border: 'border-primary-100 dark:border-primary-800/20',\n hover: 'hover:bg-primary-100 dark:hover:bg-primary-800/60 hover:border-primary-200 dark:hover:border-primary-700',\n icon: 'text-primary-500 dark:text-primary-500',\n },\n outline: {\n base: 'bg-transparent text-primary-500 dark:text-primary-100',\n border: 'border-primary-500 dark:border-primary-500',\n hover: 'hover:bg-primary-500/10 dark:hover:bg-primary-500/20',\n icon: 'text-primary-700 dark:text-primary-100',\n },\n link: {\n base: 'bg-transparent text-primary-600 dark:text-primary-400',\n border: 'border-transparent',\n hover: 'hover:opacity-70',\n icon: 'text-primary-600 dark:text-primary-400',\n },\n },\n theme: {\n solid: {\n base: 'bg-theme-500 dark:bg-theme-600/70 text-theme-0 dark:text-theme-0',\n border: 'border-theme-600/80 dark:border-theme-600',\n hover: 'hover:bg-theme-600 dark:hover:bg-theme-800',\n icon: 'text-theme-50 dark:text-theme-50',\n },\n ghost: {\n base: 'bg-theme-100 dark:bg-theme-600/50 text-theme-900 dark:text-theme-100',\n border: 'border-theme-100 dark:border-theme-800/20',\n hover: 'hover:bg-theme-200 dark:hover:bg-theme-600/40 hover:border-theme-200 dark:hover:border-theme-600',\n icon: 'text-theme-500 dark:text-theme-500',\n },\n outline: {\n base: 'bg-transparent text-theme-500 dark:text-theme-300',\n border: 'border-theme-500 dark:border-theme-400',\n hover: 'hover:bg-theme-500/10 dark:hover:bg-theme-400/20',\n icon: 'text-theme-500 dark:text-theme-300',\n },\n link: {\n base: 'bg-transparent text-theme-600 dark:text-theme-400',\n border: 'border-transparent',\n hover: 'hover:opacity-70',\n icon: 'text-theme-600 dark:text-theme-400',\n },\n },\n green: {\n solid: {\n base: 'bg-green-600 dark:bg-green-700/70 text-green-50 dark:text-green-50',\n border: 'border-green-600 dark:border-green-600',\n hover: 'hover:bg-green-700 dark:hover:bg-green-800',\n icon: 'text-green-50 dark:text-green-50',\n },\n ghost: {\n base: 'bg-green-100 dark:bg-green-800/20 text-green-900 dark:text-green-100',\n border: 'border-green-100 dark:border-green-800/20',\n hover: 'hover:bg-green-200 dark:hover:bg-green-800/40 hover:border-green-200 dark:hover:border-green-700',\n icon: 'text-green-500 dark:text-green-500',\n },\n outline: {\n base: 'bg-transparent text-green-500 dark:text-green-50',\n border: 'border-green-500 dark:border-green-600',\n hover: 'hover:bg-green-500/10 dark:hover:bg-green-400/10',\n icon: 'text-green-500 dark:text-green-50',\n },\n link: {\n base: 'bg-transparent text-green-600 dark:text-green-400',\n border: 'border-transparent',\n hover: 'hover:opacity-70',\n icon: 'text-green-600 dark:text-green-400',\n },\n },\n orange: {\n solid: {\n base: 'bg-orange-500 dark:bg-orange-700/70 text-orange-50 dark:text-orange-50',\n border: 'border-orange-700 dark:border-orange-600',\n hover: 'hover:bg-orange-700 dark:hover:bg-orange-800',\n icon: 'text-orange-50 dark:text-orange-50',\n },\n ghost: {\n base: 'bg-orange-100 dark:bg-orange-800/20 text-orange-900 dark:text-orange-100',\n border: 'border-orange-100 dark:border-orange-800/20',\n hover: 'hover:bg-orange-200 dark:hover:bg-orange-800/40 hover:border-orange-200 dark:hover:border-orange-700',\n icon: 'text-orange-500 dark:text-orange-500',\n },\n outline: {\n base: 'bg-transparent text-orange-500 dark:text-orange-50',\n border: 'border-orange-500 dark:border-orange-600',\n hover: 'hover:bg-orange-500/10 dark:hover:bg-orange-400/10',\n icon: 'text-orange-500 dark:text-orange-50',\n },\n link: {\n base: 'bg-transparent text-orange-600 dark:text-orange-400',\n border: 'border-transparent',\n hover: 'hover:opacity-70',\n icon: 'text-orange-600 dark:text-orange-400',\n },\n },\n rose: {\n solid: {\n base: 'bg-rose-500 dark:bg-rose-700/70 text-rose-50 dark:text-rose-50',\n border: 'border-rose-600/80 dark:border-rose-600',\n hover: 'hover:bg-rose-600 dark:hover:bg-rose-800',\n icon: 'text-rose-50 dark:text-rose-50',\n },\n ghost: {\n base: 'bg-rose-100 dark:bg-rose-800/20 text-rose-900 dark:text-rose-100',\n border: 'border-rose-100 dark:border-rose-800/20',\n hover: 'hover:bg-rose-200 dark:hover:bg-rose-800/40 hover:border-rose-200 dark:hover:border-rose-700',\n icon: 'text-rose-500 dark:text-rose-500',\n },\n outline: {\n base: 'bg-transparent text-rose-500 dark:text-rose-50',\n border: 'border-rose-500 dark:border-rose-600',\n hover: 'hover:bg-rose-500/10 dark:hover:bg-rose-400/10',\n icon: 'text-rose-500 dark:text-rose-50',\n },\n link: {\n base: 'bg-transparent text-rose-600 dark:text-rose-400',\n border: 'border-transparent',\n hover: 'hover:opacity-70',\n icon: 'text-rose-600 dark:text-rose-400',\n },\n },\n indigo: {\n solid: {\n base: 'bg-indigo-500 dark:bg-indigo-700/70 text-indigo-50 dark:text-indigo-50',\n border: 'border-indigo-600/80 dark:border-indigo-600',\n hover: 'hover:bg-indigo-600 dark:hover:bg-indigo-800',\n icon: 'text-indigo-50 dark:text-indigo-50',\n },\n ghost: {\n base: 'bg-indigo-100 dark:bg-indigo-800/20 text-indigo-900 dark:text-indigo-100',\n border: 'border-indigo-100 dark:border-indigo-800/20',\n hover: 'hover:bg-indigo-200 dark:hover:bg-indigo-800/40 hover:border-indigo-200 dark:hover:border-indigo-700',\n icon: 'text-indigo-500 dark:text-indigo-500',\n },\n outline: {\n base: 'bg-transparent text-indigo-500 dark:text-indigo-50',\n border: 'border-indigo-500 dark:border-indigo-600',\n hover: 'hover:bg-indigo-500/10 dark:hover:bg-indigo-400/10',\n icon: 'text-indigo-500 dark:text-indigo-50',\n },\n link: {\n base: 'bg-transparent text-indigo-600 dark:text-indigo-400',\n border: 'border-transparent',\n hover: 'hover:opacity-70',\n icon: 'text-indigo-600 dark:text-indigo-400',\n },\n },\n red: {\n solid: {\n base: 'bg-red-500 dark:bg-red-700/70 text-red-50 dark:text-red-50',\n border: 'border-red-600/80 dark:border-red-600',\n hover: 'hover:bg-red-600 dark:hover:bg-red-800',\n icon: 'text-red-50 dark:text-red-50',\n },\n ghost: {\n base: 'bg-red-100 dark:bg-red-800/20 text-red-900 dark:text-red-100',\n border: 'border-red-100 dark:border-red-800/20',\n hover: 'hover:bg-red-200 dark:hover:bg-red-800/40 hover:border-red-200 dark:hover:border-red-700',\n icon: 'text-red-500 dark:text-red-500',\n },\n outline: {\n base: 'bg-transparent text-red-500 dark:text-red-50',\n border: 'border-red-500 dark:border-red-600',\n hover: 'hover:bg-red-500/10 dark:hover:bg-red-400/10',\n icon: 'text-red-500 dark:text-red-50',\n },\n link: {\n base: 'bg-transparent text-red-600 dark:text-red-400',\n border: 'border-transparent',\n hover: 'hover:opacity-70',\n icon: 'text-red-600 dark:text-red-400',\n },\n },\n}\n","<script lang=\"ts\" setup>\nimport type { ButtonDesign, ColorThemeUser } from './themes'\nimport type { MediaObject } from '@/types'\nimport { twMerge } from 'tailwind-merge'\nimport { computed } from 'vue'\nimport FSpinner from './FSpinner.vue'\nimport { themes } from './themes'\n\ninterface ButtonProps {\n theme?: ColorThemeUser\n design?: ButtonDesign\n size?: 'xxs' | 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n rounding?: 'md' | 'lg' | 'full'\n href?: string\n icon?: string | MediaObject\n iconAfter?: string | MediaObject\n tag?: 'button' | 'div' | 'a'\n loading?: boolean\n class?: string\n}\n\nconst {\n theme = 'default',\n design = 'solid',\n size = 'md',\n rounding = 'full',\n href,\n icon,\n iconAfter,\n tag = 'button',\n loading = false,\n class: className = '',\n} = defineProps<ButtonProps>()\n\nconst icons = computed(() => {\n return {\n icon: typeof icon === 'string' ? icon : icon?.className,\n iconAfter: typeof iconAfter === 'string' ? iconAfter : iconAfter?.className,\n }\n})\n\nconst componentTag = computed(() => {\n if (href)\n return 'a'\n return tag\n})\n\nconst spinnerSize = computed(() => {\n const sizes = {\n xxs: 'size-2.5',\n xs: 'size-3',\n sm: 'size-3.5',\n md: 'size-4',\n lg: 'size-5',\n xl: 'size-6',\n }\n return sizes[size]\n})\n\nconst buttonClass = computed(() => {\n const baseClasses = 'relative inline-flex items-center justify-center gap-2 font-medium transition-all duration-200 focus:outline-none active:opacity-80 cursor-pointer'\n\n // Size classes\n const sizeClasses = {\n xxs: 'px-2 py-0.5 text-[10px]',\n xs: 'px-3 py-1 text-[11px]',\n sm: 'px-3 py-1.5 text-xs',\n md: 'px-4 py-2 text-sm',\n lg: 'px-6 py-3 text-base',\n xl: 'px-8 py-4 text-base',\n }\n\n // Override padding for link design\n const linkPadding = design === 'link' ? '!px-1' : ''\n\n // Rounding classes\n const roundingClasses = {\n md: 'rounded-md',\n lg: 'rounded-lg',\n full: 'rounded-full',\n }\n\n // Get theme classes\n const themeClasses = themes[theme]?.[design] || themes.default[design]\n\n const out = [\n baseClasses,\n sizeClasses[size],\n linkPadding,\n roundingClasses[rounding],\n themeClasses.base,\n `border ${themeClasses.border}`,\n themeClasses.hover,\n ].filter(Boolean).join(' ')\n\n return twMerge(out, className)\n})\n\nconst iconClass = computed(() => {\n const themeClasses = themes[theme]?.[design] || themes.default[design]\n return {\n design: themeClasses.icon || '',\n\n }\n})\n</script>\n\n<template>\n <component\n :is=\"componentTag\"\n :href=\"href\"\n :class=\"buttonClass\"\n >\n <!-- Loading spinner overlay -->\n <div\n v-if=\"loading\"\n class=\"absolute inset-0 flex items-center justify-center\"\n >\n <FSpinner :class=\"spinnerSize\" />\n </div>\n\n <!-- Button content -->\n <span\n class=\"flex items-center gap-2 transition-opacity duration-200 whitespace-nowrap\"\n :class=\"loading ? 'opacity-0' : 'opacity-100'\"\n >\n <span v-if=\"icons.icon\" class=\"flex items-center size-[1.1em] mt-[-.07em]\" :class=\"[icons.icon, iconClass]\" />\n <slot />\n <span v-if=\"icons.iconAfter\" class=\"flex items-center size-[1.1em] mt-[-.07em]\" :class=\"[icons.iconAfter, iconClass]\" />\n </span>\n </component>\n</template>\n","<script setup lang=\"ts\">\nimport type { Self } from '@/modules/self/schema'\nimport { computed } from 'vue'\nimport FButton from '@/ui/common/FButton.vue'\n\nconst { self } = defineProps<{\n self: Self\n}>()\n\n// Generate real social links using engine array pattern\nconst links = computed(() => {\n const linkEngines = [\n {\n key: 'email',\n condition: () => !!self.email,\n generate: () => ({\n title: 'Contact',\n url: `mailto:${self.email}`,\n icon: 'i-heroicons-envelope',\n }),\n },\n {\n key: 'linkedin',\n condition: () => !!self.accounts?.linkedin?.handle,\n generate: () => ({\n title: 'LinkedIn',\n url: self.accounts?.linkedin?.url || `https://linkedin.com/in/${self.accounts?.linkedin?.handle}`,\n icon: 'i-simple-icons-linkedin',\n }),\n },\n {\n key: 'x',\n condition: () => !!self.accounts?.x?.handle,\n generate: () => ({\n title: 'X (Twitter)',\n url: self.accounts?.x?.url || `https://x.com/${self.accounts?.x?.handle}`,\n icon: 'i-simple-icons-x',\n }),\n },\n {\n key: 'github',\n condition: () => !!self.accounts?.github?.handle,\n generate: () => ({\n title: 'GitHub',\n url: self.accounts?.github?.url || `https://github.com/${self.accounts?.github?.handle}`,\n icon: 'i-simple-icons-github',\n }),\n },\n {\n key: 'website',\n condition: () => !!self.accounts?.website?.url,\n generate: () => ({\n title: 'Website',\n url: self.accounts?.website?.url,\n icon: 'i-heroicons-globe-alt',\n }),\n },\n ]\n\n return linkEngines\n .filter((engine) => engine.condition())\n .map((engine) => engine.generate())\n})\n</script>\n\n<template>\n <div class=\"flex-1 flex flex-col min-h-0 py-6 space-y-6 h-full overflow-scroll [scrollbar-width:none] [-ms-overflow-style:none] [&::-webkit-scrollbar]:hidden relative\">\n <div class=\"flex-1 space-y-6\">\n <!-- Headline Section -->\n <div v-if=\"self.headline\" class=\"bg-white/5 backdrop-blur-sm rounded-2xl p-4 border border-white/10\">\n <h3 class=\"text-sm font-medium text-white/90 mb-2\">\n Professional Tagline\n </h3>\n <div class=\"text-sm text-white/70 leading-relaxed\">\n {{ self.headline }}\n </div>\n </div>\n\n <!-- About Section -->\n <div v-if=\"self.summary\" class=\"bg-white/5 backdrop-blur-sm rounded-2xl p-4 border border-white/10\">\n <h3 class=\"text-sm font-medium text-white/90 mb-2\">\n About\n </h3>\n <div class=\"text-sm text-white/70 leading-relaxed\" v-html=\"self.summary\" />\n </div>\n\n <!-- Entity Type Info -->\n <div v-if=\"self.entityType === 'company'\" class=\"bg-white/5 backdrop-blur-sm rounded-2xl p-4 border border-white/10\">\n <h3 class=\"text-sm font-medium text-white/90 mb-2\">\n Company Info\n </h3>\n <p class=\"text-sm text-white/70 leading-relaxed\">\n This is a company digital self representing {{ self.name }}.\n </p>\n </div>\n\n <!-- Connect Section -->\n <div v-if=\"links.length > 0\" class=\"space-y-3\">\n <h3 class=\"text-sm font-medium text-white/90\">\n Connect\n </h3>\n <div class=\"grid grid-cols-2 gap-3\">\n <FButton\n v-for=\"link in links\"\n :key=\"link.title\"\n design=\"ghost\"\n theme=\"default\"\n size=\"sm\"\n class=\"bg-white/5 hover:bg-white/10 border border-white/10 text-white/80 text-sm justify-start h-10\"\n :href=\"link.url\"\n target=\"_blank\"\n >\n <i :class=\"link.icon\" class=\"size-4 mr-2\" />\n {{ link.title }}\n </FButton>\n </div>\n </div>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { SelfController } from '../SelfController'\nimport type { Self } from '@/modules/self/schema'\nimport { computed, nextTick, onMounted, ref, watch } from 'vue'\nimport FSpinner from '@/ui/common/FSpinner.vue'\nimport { getFallbackAvatarDataUrl, getSelfAvatarUrl } from '../utils'\n\nconst { selfController, self } = defineProps<{\n selfController?: SelfController\n self: Self\n}>()\n\nconst message = ref('')\nconst messagesContainer = ref<HTMLElement>()\nconst textarea = ref<HTMLTextAreaElement>()\n\nconst selfAvatarUrl = computed(() => {\n return getSelfAvatarUrl(self) || getFallbackAvatarDataUrl()\n})\n\n// Group consecutive messages and determine if avatar should show\nfunction shouldShowAvatar(messages: any[], index: number): boolean {\n const currentMsg = messages[index]\n const nextMsg = messages[index + 1]\n\n // Show avatar if this is the last message in a group (next message is from different sender or doesn't exist)\n return !nextMsg || nextMsg.sender !== currentMsg.sender\n}\n\n// Auto-start text conversation when component mounts (no permissions needed)\nonMounted(async () => {\n if (selfController && !selfController.textState.value.isConnected) {\n try {\n await selfController.startTextConversation()\n } catch (error) {\n console.error('Failed to start text conversation:', error)\n }\n }\n})\n\nasync function sendMessage() {\n if (!message.value.trim() || !selfController || !selfController.textState.value.isConnected)\n return\n\n const messageText = message.value\n message.value = ''\n\n // Reset textarea height and refocus immediately\n if (textarea.value) {\n textarea.value.style.height = 'auto'\n textarea.value.focus()\n }\n\n try {\n await selfController.sendChatMessage(messageText)\n scrollToBottom()\n } catch (error) {\n console.error('Error sending message:', error)\n }\n}\n\nfunction handleKeydown(event: KeyboardEvent) {\n if (event.key === 'Enter' && !event.shiftKey) {\n event.preventDefault()\n sendMessage()\n }\n}\n\nfunction scrollToBottom() {\n if (messagesContainer.value) {\n nextTick(() => {\n const container = messagesContainer.value!\n container.scrollTop = container.scrollHeight\n })\n }\n}\n\n// Auto-grow textarea as user types\nfunction adjustTextareaHeight() {\n if (!textarea.value)\n return\n\n // Reset height to auto to get the correct scrollHeight\n textarea.value.style.height = 'auto'\n\n // Set height to scrollHeight, but cap at 150px\n const newHeight = Math.min(textarea.value.scrollHeight, 150)\n textarea.value.style.height = `${newHeight}px`\n}\n\n// Watch message input to auto-grow textarea\nwatch(message, () => {\n nextTick(() => adjustTextareaHeight())\n})\n\n// Watch for new messages to auto-scroll\nwatch(() => selfController?.sharedMessages.value, (messages) => {\n if (messages && messages.length > 0) {\n nextTick(() => scrollToBottom())\n }\n}, { immediate: true, deep: true })\n</script>\n\n<template>\n <div class=\"flex flex-col h-full relative\">\n <!-- Connection Status Badge -->\n <div\n v-if=\"selfController?.textState.value.connectionStatus !== 'connected'\"\n class=\"text-theme-600 py-16 flex flex-col items-center justify-center gap-2 text-sm\"\n >\n <FSpinner class=\"size-4\" />\n </div>\n\n <div\n ref=\"messagesContainer\"\n class=\"flex-1 overflow-y-auto overflow-x-hidden py-8 space-y-1 min-h-0 [scrollbar-width:none] [-ms-overflow-style:none] [&::-webkit-scrollbar]:hidden\"\n >\n <div\n v-for=\"(msg, index) in selfController?.sharedMessages.value.filter(m => m.sender !== 'system') ?? []\"\n :key=\"msg.id\"\n class=\"flex gap-2 items-end\"\n :class=\"{\n 'justify-end': msg.sender === 'user',\n 'justify-start': msg.sender === 'agent',\n 'mb-4': shouldShowAvatar(selfController?.sharedMessages.value.filter(m => m.sender !== 'system') ?? [], index),\n }\"\n >\n <!-- Avatar - only show for agent messages on last message of group -->\n <div v-if=\"msg.sender === 'agent'\" class=\"flex-shrink-0 size-8\">\n <img\n v-if=\"shouldShowAvatar(selfController?.sharedMessages.value.filter(m => m.sender !== 'system') ?? [], index)\"\n :src=\"selfAvatarUrl\"\n :alt=\"self.name\"\n class=\"size-7 rounded-full object-cover\"\n />\n </div>\n\n <!-- Message bubble -->\n <div class=\"max-w-[70%]\">\n <div\n class=\"rounded-2xl px-3.5 py-1.5 backdrop-blur-sm\"\n :class=\"msg.sender === 'user'\n ? 'bg-primary-500/80 text-white'\n : 'bg-white/15 text-white/95'\"\n >\n <p class=\"text-sm leading-[1.5] whitespace-pre-wrap break-words\">\n {{ msg.text }}\n </p>\n </div>\n </div>\n </div>\n\n <!-- Thinking indicator -->\n <div v-if=\"selfController?.textState.value.isThinking\" class=\"flex gap-2 justify-start items-end mb-4\">\n <div class=\"flex-shrink-0\">\n <img\n :src=\"selfAvatarUrl\"\n :alt=\"self.name\"\n class=\"size-8 rounded-full object-cover\"\n />\n </div>\n <div class=\"rounded-2xl px-4 py-2.5 bg-white/15 backdrop-blur-sm flex items-center\">\n <i class=\"i-svg-spinners-3-dots-fade size-6 text-white/70\" />\n </div>\n </div>\n </div>\n\n <div class=\"flex-shrink-0 pt-6 pb-2\">\n <textarea\n ref=\"textarea\"\n v-model=\"message\"\n rows=\"1\"\n :placeholder=\"selfController?.textState.value.isConnected ? 'Message' : 'Connecting...'\"\n :disabled=\"!selfController?.textState.value.isConnected\"\n style=\"font-size: 16px; resize: none;\"\n class=\"w-full bg-white/10 backdrop-blur-sm border border-white/20 rounded-3xl px-5 py-3 text-white placeholder-white/50 focus:outline-none focus:border-white/40 disabled:opacity-50 overflow-y-auto [scrollbar-width:none] [-ms-overflow-style:none] [&::-webkit-scrollbar]:hidden\"\n @keydown=\"handleKeydown\"\n />\n <div class=\"text-[10px] text-white/40 text-center mt-2\">\n Press Enter to send, Shift+Enter for new line\n </div>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { Self } from '@/modules/self/schema'\nimport { getFallbackAvatarDataUrl, handleImageError } from '../utils'\n\ninterface Props {\n self: Self\n}\n\nconst { self } = defineProps<Props>()\n\nfunction getAvatarSrc(): string {\n if (self.avatar?.src) {\n return self.avatar.src\n }\n return getFallbackAvatarDataUrl()\n}\n</script>\n\n<template>\n <!-- Centered layout for default \"self\" mode with large avatar and online indicator -->\n <div class=\"flex flex-col items-center text-center gap-4\">\n <!-- Avatar with online indicator -->\n <div class=\"relative flex-shrink-0\">\n <div class=\"w-20 h-20 sm:w-24 sm:h-24 rounded-full overflow-hidden border-4 border-white\">\n <img\n :src=\"getAvatarSrc()\"\n :alt=\"self.name\"\n class=\"w-full h-full object-cover\"\n @error=\"handleImageError\"\n />\n </div>\n\n <div class=\"absolute top-1.5 right-1.5\">\n <div class=\"size-4 bg-green-500 rounded-full ring-2 ring-white absolute animate-ping\" style=\"animation-duration: 3s;\" />\n <div class=\"size-4 bg-green-500 rounded-full ring-2 ring-white\" />\n </div>\n </div>\n\n <!-- Name and title -->\n <div class=\"min-w-0\">\n <h1 class=\"text-3xl font-light text-white mb-2 truncate\">\n {{ self.name }}\n </h1>\n <p class=\"text-base font-light text-white/60 line-clamp-1\">\n {{ self.title }}\n </p>\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { onMounted, ref } from 'vue'\n\ndefineOptions({ name: 'FClose' })\n\ndefineEmits<{\n click: [event: MouseEvent]\n}>()\n\nconst inView = ref(false)\n\nonMounted(() => {\n setTimeout(() => {\n inView.value = true\n }, 100)\n})\n</script>\n\n<template>\n <a\n class=\"close block cursor-pointer w-[60px] h-[60px] rounded-full transition-all duration-1000 ease-[cubic-bezier(0.25,1,0.33,1)] hover:scale-110 active:scale-90 hover:rotate-90\"\n @click=\"$emit('click', $event)\"\n >\n <!-- Background circle (invisible, for hover area) -->\n <span class=\"absolute inset-0 rounded-full transition-all\" />\n\n <!-- Close lines container -->\n <span class=\"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[28px] h-[28px] overflow-hidden\">\n <!-- Line 1 - animates from bottom-left to center, rotates 45deg -->\n <span\n class=\"absolute h-full w-[3px] rounded-[5px] left-[13px] transition-all duration-[400ms] ease-[cubic-bezier(0.52,0.01,0.16,1)]\"\n :class=\"inView ? 'translate-y-0 translate-x-0 rotate-45' : 'translate-y-[30px] -translate-x-[30px] rotate-0'\"\n style=\"background-color: currentColor; transition-delay: 0.15s\"\n />\n\n <!-- Line 2 - animates from top-left to center, rotates -45deg -->\n <span\n class=\"absolute h-full w-[3px] rounded-[5px] left-[13px] transition-all duration-[400ms] ease-[cubic-bezier(0.52,0.01,0.16,1)]\"\n :class=\"inView ? 'translate-y-0 translate-x-0 -rotate-45' : '-translate-y-[30px] -translate-x-[30px] rotate-0'\"\n style=\"background-color: currentColor; transition-delay: 0.45s\"\n />\n </span>\n </a>\n</template>\n","<script lang=\"ts\" setup>\nimport type { NavItem } from '@/types/navItem'\nimport { computed } from 'vue'\nimport FClose from '@/ui/common/FClose.vue'\n\ndefineOptions({ name: 'ElSidebar' })\n\nconst props = defineProps<{\n modelValue: boolean\n items: NavItem[]\n position?: 'left' | 'right'\n title?: string\n widthClasses?: string\n}>()\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: boolean]\n}>()\n\nconst position = props.position || 'left'\nconst widthClasses = props.widthClasses || 'w-[80%] max-w-[300px]'\n\nconst isOpen = computed({\n get: () => props.modelValue,\n set: (value) => emit('update:modelValue', value),\n})\n\nconst visibleItems = computed(() => props.items.filter((item) => !item.isHidden))\n\nfunction handleItemClick(item: NavItem) {\n if (item.isDisabled)\n return\n\n if (item.onClick) {\n item.onClick({ item, event: new MouseEvent('click') })\n } else if (item.href) {\n if (item.href.includes('http')) {\n window.open(item.href, item.target || '_self')?.focus()\n } else {\n window.location.href = item.href\n }\n }\n\n isOpen.value = false\n}\n\n// Position-specific classes\nconst transitionClasses = computed(() => {\n if (position === 'left') {\n return {\n enter: '-translate-x-full',\n leave: '-translate-x-full',\n position: 'justify-start',\n closeButton: '-right-16',\n }\n } else {\n return {\n enter: 'translate-x-full',\n leave: 'translate-x-full',\n position: 'justify-end',\n closeButton: '-left-16',\n }\n }\n})\n</script>\n\n<template>\n <!-- Backdrop -->\n <Transition\n enter-active-class=\"transition-opacity duration-300 ease-out\"\n leave-active-class=\"transition-opacity duration-200 ease-in\"\n enter-from-class=\"opacity-0\"\n enter-to-class=\"opacity-100\"\n leave-from-class=\"opacity-100\"\n leave-to-class=\"opacity-0\"\n >\n <div\n v-if=\"isOpen\"\n class=\"absolute inset-0 z-40 bg-black/50 backdrop-blur-sm\"\n @click=\"isOpen = false\"\n />\n </Transition>\n\n <!-- Sidebar -->\n <Transition\n enter-active-class=\"transition-all duration-500 ease-[cubic-bezier(0.25,1,0.33,1)]\"\n leave-active-class=\"transition-all duration-400 ease-[cubic-bezier(0.25,1,0.33,1)]\"\n :enter-from-class=\"transitionClasses.enter\"\n enter-to-class=\"translate-x-0\"\n leave-from-class=\"translate-x-0\"\n :leave-to-class=\"transitionClasses.leave\"\n >\n <div\n v-if=\"isOpen\"\n class=\"absolute inset-0 z-50 flex\"\n :class=\"transitionClasses.position\"\n @click=\"isOpen = false\"\n >\n <!-- Menu Panel -->\n <div\n class=\"relative h-full shadow-2xl bg-black/30 backdrop-blur-xl flex flex-col justify-center\"\n :class=\"widthClasses\"\n @click.stop\n >\n <FClose\n class=\"absolute top-4 z-10 text-white\"\n :class=\"transitionClasses.closeButton\"\n @click=\"isOpen = false\"\n />\n\n <!-- Title -->\n <div v-if=\"title\" class=\"px-9 pt-12 pb-4\">\n <h3 class=\"text-base font-medium text-theme-400\">\n {{ title }}\n </h3>\n </div>\n\n <!-- Header Slot -->\n <div v-if=\"$slots.header\" class=\"px-4 pb-8 border-b border-white/10\">\n <slot name=\"header\" />\n </div>\n\n <!-- Menu Items -->\n <div class=\"flex-1 p-6 space-y-2 overflow-y-auto\" :class=\"{ 'pt-6': !title && !$slots.header, 'pt-4': title || $slots.header }\">\n <TransitionGroup\n enter-active-class=\"transition-all duration-400 ease-[cubic-bezier(0.25,1,0.33,1)]\"\n leave-active-class=\"transition-all duration-200 ease-[cubic-bezier(0.25,1,0.33,1)]\"\n :enter-from-class=\"position === 'left' ? '-translate-x-4 opacity-0' : 'translate-x-4 opacity-0'\"\n enter-to-class=\"translate-x-0 opacity-100\"\n leave-from-class=\"translate-x-0 opacity-100\"\n :leave-to-class=\"position === 'left' ? '-translate-x-4 opacity-0' : 'translate-x-4 opacity-0'\"\n >\n <button\n v-for=\"(item, index) in visibleItems\"\n :key=\"item.key || item.label || index\"\n :style=\"{ transitionDelay: `${index * 40}ms` }\"\n class=\"cursor-pointer w-full text-left p-3 rounded-xl transition-all duration-200 ease-[cubic-bezier(0.25,1,0.33,1)] group\"\n :class=\"[\n item.isActive\n ? 'bg-primary-500/20 border border-primary-500/40'\n : 'hover:bg-white/10',\n item.isDisabled && 'opacity-50 cursor-not-allowed',\n ]\"\n :disabled=\"item.isDisabled\"\n @click=\"handleItemClick(item)\"\n >\n <div class=\"flex items-center gap-3\">\n <i\n v-if=\"item.icon?.src\"\n class=\"size-5 flex-shrink-0 transition-transform duration-200 ease-[cubic-bezier(0.25,1,0.33,1)] group-hover:scale-110\"\n :class=\"[\n item.icon.src,\n item.isActive ? 'text-primary-400' : 'text-white/70 group-hover:text-white',\n ]\"\n />\n <div class=\"flex-1\">\n <div\n class=\"font-medium text-sm\"\n :class=\"item.isActive ? 'text-primary-300' : 'text-white'\"\n >\n {{ item.label }}\n </div>\n <div v-if=\"item.subLabel\" class=\"text-xs text-white/50 mt-0.5\">\n {{ item.subLabel }}\n </div>\n </div>\n </div>\n </button>\n </TransitionGroup>\n </div>\n\n <!-- Footer -->\n <div class=\"p-6\">\n <slot name=\"footer\">\n <div class=\"text-center\">\n <p class=\"text-[10px] text-white/40 font-sans\">\n Digital Self by <a href=\"https://www.fiction.com\" target=\"_blank\" class=\"text-white/60 hover:text-white/80 transition-colors\">Fiction</a>\n </p>\n </div>\n </slot>\n </div>\n </div>\n </div>\n </Transition>\n</template>\n","<script lang=\"ts\" setup>\nimport type { AgentMode } from '../schema'\nimport type { SelfController } from '../SelfController'\nimport type { NavItem } from '@/types/navItem'\nimport { computed } from 'vue'\nimport { AGENT_MODES } from '../schema'\nimport ElSidebar from './ElSidebar.vue'\n\ndefineOptions({ name: 'SelfModeSidebar' })\n\nconst props = defineProps<{\n modelValue: boolean\n selfController?: SelfController\n}>()\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: boolean]\n}>()\n\nconst isOpen = computed({\n get: () => props.modelValue,\n set: (value) => emit('update:modelValue', value),\n})\n\nconst currentMode = computed(() => props.selfController?.agentMode?.value ?? 'self')\n\nconst modeItems = computed<NavItem[]>(() => AGENT_MODES.map((mode) => ({\n key: mode.mode,\n icon: { src: mode.icon },\n label: mode.label,\n isActive: currentMode.value === mode.mode,\n onClick: () => {\n props.selfController?.setMode(mode.mode as AgentMode)\n },\n})))\n</script>\n\n<template>\n <ElSidebar\n v-model=\"isOpen\"\n :items=\"modeItems\"\n position=\"right\"\n title=\"Mode\"\n width-classes=\"w-[80%] max-w-[255px]\"\n />\n</template>\n","<script lang=\"ts\" setup>\nimport type { FictionSDK } from '../../sdkClient'\nimport type { Self } from '../schema'\nimport type { NavItem } from '@/types/navItem'\nimport { computed } from 'vue'\nimport ElSidebar from './ElSidebar.vue'\n\ndefineOptions({ name: 'SelfSidebar' })\n\nconst props = defineProps<{\n modelValue: boolean\n self: Self\n sdk: FictionSDK\n title?: string\n}>()\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: boolean]\n}>()\n\nconst isOpen = computed({\n get: () => props.modelValue,\n set: (value) => emit('update:modelValue', value),\n})\n\nconst menuItems = computed<NavItem[]>(() => {\n const items: NavItem[] = [\n {\n key: 'share',\n icon: { src: 'i-tabler-share' },\n label: 'Share This Digital Self',\n onClick: () => {\n const url = `${window.location.origin}/@${props.self.handle || props.self.selfId}`\n navigator.clipboard.writeText(url)\n // TODO: Show notification that URL was copied\n },\n },\n {\n key: 'profile',\n icon: { src: 'i-tabler-user' },\n label: 'Visit Full Profile',\n onClick: () => {\n window.open(`/@${props.self.handle || props.self.selfId}`, '_blank')\n },\n },\n {\n key: 'create',\n icon: { src: 'i-tabler-sparkles' },\n label: 'Create Your Own',\n onClick: () => {\n window.open('/auth', '_blank')\n },\n },\n ]\n\n // Add logout option if user is authenticated\n if (props.sdk.activeUser.value) {\n items.push({\n key: 'logout',\n icon: { src: 'i-tabler-logout' },\n label: 'Logout',\n onClick: async () => {\n await props.sdk.logout()\n },\n })\n }\n\n return items\n})\n</script>\n\n<template>\n <ElSidebar\n v-model=\"isOpen\"\n :items=\"menuItems\"\n position=\"left\"\n :title=\"title || 'Menu'\"\n />\n</template>\n","<script setup lang=\"ts\">\nimport type { AudioLevel } from '../schema'\nimport type { SelfController } from '../SelfController'\nimport { onMounted, onUnmounted, ref, watch } from 'vue'\nimport { VISUALIZER_CONFIG, VOICE_FREQUENCIES } from '../constants'\n\ninterface AudioVisualizerProps {\n rms?: number\n color?: string\n isActive?: boolean\n audioLevels?: AudioLevel\n isListening?: boolean\n isSpeaking?: boolean\n isConnected?: boolean\n enableRealAudio?: boolean\n selfController?: SelfController\n enableWaveMotion?: boolean\n enableScrollingWave?: boolean\n}\n\nconst props = defineProps<AudioVisualizerProps>()\n\nconst canvasRef = ref<HTMLCanvasElement>()\nlet ctx: CanvasRenderingContext2D | null = null\nlet animationFrame: number | null = null\n\n// Mobile optimization\nconst isMobile = ref(false)\nconst isVisible = ref(true)\n\n// Gradient caching for performance\nconst gradientCache = new Map<string, CanvasGradient>()\nlet backgroundGradient: CanvasGradient | null = null\n\n// Web Audio API for real frequency analysis\nlet analyser: AnalyserNode | null = null\nlet frequencyData: Uint8Array | null = null\nconst audioPermission = ref(false)\nconst audioError = ref<string | null>(null)\n\n// Physics state\nconst { bars, barWidth, barSpacing, minHeight, maxHeight, STIFFNESS, DAMPING, PEAK_HOLD_TIME, PEAK_DECAY_STIFFNESS, PEAK_DECAY_DAMPING } = VISUALIZER_CONFIG\n\nconst heights = new Float32Array(bars).fill(minHeight)\nconst velocities = new Float32Array(bars).fill(0)\nconst targets = new Float32Array(bars).fill(minHeight)\nconst peaks = new Float32Array(bars).fill(minHeight)\nconst peakHoldTime = new Float32Array(bars).fill(0)\nconst peakDecayVelocity = new Float32Array(bars).fill(0)\n\n// Frequency-specific physics modifiers\nfunction getFrequencyPhysics(freq: number) {\n if (freq < 200)\n return { stiffnessMultiplier: 0.7, dampingMultiplier: 1.2 }\n if (freq < 1000)\n return { stiffnessMultiplier: 1.0, dampingMultiplier: 1.0 }\n if (freq < 4000)\n return { stiffnessMultiplier: 1.3, dampingMultiplier: 0.8 }\n return { stiffnessMultiplier: 1.5, dampingMultiplier: 0.6 }\n}\n\n// Audio setup using shared context from SelfController\nasync function setupAudio() {\n if (typeof window === 'undefined' || !props.enableRealAudio || !props.selfController)\n return\n\n try {\n const clientAudio = props.selfController.getClientAudio()\n\n if (clientAudio?.isAudioContextAvailable()) {\n const sharedAnalyser = clientAudio.getSharedAnalyser()\n if (sharedAnalyser) {\n analyser = sharedAnalyser\n const arrayBuffer = new ArrayBuffer(sharedAnalyser.frequencyBinCount)\n frequencyData = new Uint8Array(arrayBuffer)\n audioPermission.value = true\n audioError.value = null\n console.warn('AudioVisualizer: Using shared audio context from ClientAudio')\n return\n }\n }\n\n console.warn('AudioVisualizer: Could not use shared context, creating independent audio analysis')\n audioPermission.value = false\n audioError.value = 'Shared audio context not available'\n } catch (err) {\n audioError.value = err instanceof Error ? err.message : 'Failed to setup shared audio'\n audioPermission.value = false\n console.error('Shared audio setup failed:', err)\n }\n}\n\nfunction cleanupAudio() {\n analyser = null\n frequencyData = null\n audioPermission.value = false\n audioError.value = null\n}\n\n// DPR scaling\nlet dpr = 1\nfunction resizeCanvas() {\n if (!canvasRef.value)\n return\n\n if (typeof window !== 'undefined') {\n dpr = Math.max(1, Math.min(2, window.devicePixelRatio || 1))\n }\n\n const cssW = (barWidth + barSpacing) * bars - barSpacing\n const cssH = maxHeight\n canvasRef.value.width = Math.floor(cssW * dpr)\n canvasRef.value.height = Math.floor(cssH * dpr)\n canvasRef.value.style.width = `${cssW}px`\n canvasRef.value.style.height = `${cssH}px`\n if (ctx)\n ctx.setTransform(dpr, 0, 0, dpr, 0, 0)\n\n clearGradientCache()\n}\n\n// Generate real frequency bands from microphone input\nfunction generateRealInputFrequencyBands(): number[] {\n if (!analyser || !frequencyData || !audioPermission.value) {\n return Array.from({ length: VOICE_FREQUENCIES.length }, () => 0)\n }\n\n analyser.getByteFrequencyData(frequencyData as Uint8Array<ArrayBuffer>)\n return mapFrequencyDataToBands(frequencyData)\n}\n\n// Generate real frequency bands from ElevenLabs output\nfunction generateRealOutputFrequencyBands(): number[] {\n if (!props.selfController) {\n return Array.from({ length: VOICE_FREQUENCIES.length }, () => 0)\n }\n\n try {\n const outputFrequencyData = props.selfController.getOutputFrequencyData()\n if (outputFrequencyData && outputFrequencyData.length > 0) {\n return mapFrequencyDataToBands(outputFrequencyData)\n }\n } catch (error) {\n console.warn('Failed to get output frequency data:', error)\n }\n\n return Array.from({ length: VOICE_FREQUENCIES.length }, () => 0)\n}\n\n// Map frequency data to voice-optimized bands\nfunction mapFrequencyDataToBands(frequencyData: Uint8Array): number[] {\n const bands = Array.from({ length: VOICE_FREQUENCIES.length }, (_, i) => {\n const targetFreq = VOICE_FREQUENCIES[i]\n const estimatedNyquist = 12000\n const binIndex = Math.floor((targetFreq / estimatedNyquist) * frequencyData.length)\n const binWidth = Math.max(1, Math.floor(frequencyData.length / VOICE_FREQUENCIES.length / 2))\n\n let amplitude = 0\n for (let j = 0; j < binWidth && (binIndex + j) < frequencyData.length; j++) {\n amplitude += frequencyData[binIndex + j]\n }\n amplitude = (amplitude / binWidth) / 255\n\n // Voice-specific frequency weighting\n let weight = 1.0\n if (targetFreq < 150) {\n weight = 0.1\n } else if (targetFreq < 200) {\n weight = 0.3\n } else if (targetFreq >= 400 && targetFreq <= 600) {\n weight = 1.4\n } else if (targetFreq >= 1400 && targetFreq <= 1600) {\n weight = 1.3\n } else if (targetFreq >= 2400 && targetFreq <= 2600) {\n weight = 1.2\n } else if (targetFreq >= 200 && targetFreq <= 2000) {\n weight = 1.1\n } else if (targetFreq >= 2000 && targetFreq <= 4000) {\n weight = 0.9\n } else if (targetFreq > 6000) {\n weight = 0.4\n } else {\n weight = 0.7\n }\n\n const compressed = amplitude ** 0.5\n const scaled = compressed * 0.6\n const finalAmplitude = scaled * weight\n\n return Math.min(0.85, finalAmplitude)\n })\n\n return bands\n}\n\n// Speech pattern simulation\nlet currentPhoneme = 0\nlet phonemeTimer = 0\nlet speechCadence = 0\n\nconst phonemePatterns = [\n { name: 'a', f1: 730, f2: 1090, f3: 2440, duration: 120, energy: 0.9 },\n { name: 'e', f1: 530, f2: 1840, f3: 2480, duration: 100, energy: 0.8 },\n { name: 'i', f1: 270, f2: 2290, f3: 3010, duration: 110, energy: 0.85 },\n { name: 'o', f1: 570, f2: 840, f3: 2410, duration: 130, energy: 0.9 },\n { name: 'u', f1: 300, f2: 870, f3: 2240, duration: 140, energy: 0.8 },\n { name: 's', f1: 4000, f2: 6000, f3: 8000, duration: 80, energy: 0.4 },\n { name: 't', f1: 1500, f2: 4000, f3: 6000, duration: 60, energy: 0.3 },\n { name: 'n', f1: 280, f2: 1700, f3: 2600, duration: 70, energy: 0.6 },\n { name: 'r', f1: 350, f2: 1200, f3: 1650, duration: 90, energy: 0.7 },\n { name: 'pause', f1: 0, f2: 0, f3: 0, duration: 150, energy: 0.05 },\n]\n\nfunction generateSpeechPatterns(intensity: number): number[] {\n const bands = Array.from({ length: VOICE_FREQUENCIES.length }, () => 0)\n\n if (intensity <= 0) {\n return bands\n }\n\n phonemeTimer += 16.67\n speechCadence += 0.02\n\n if (phonemeTimer > phonemePatterns[currentPhoneme].duration) {\n currentPhoneme = (currentPhoneme + 1) % phonemePatterns.length\n phonemeTimer = 0\n }\n\n const currentPattern = phonemePatterns[currentPhoneme]\n const nextPattern = phonemePatterns[(currentPhoneme + 1) % phonemePatterns.length]\n const transitionProgress = phonemeTimer / currentPattern.duration\n const smoothProgress = 0.5 * (1 + Math.cos(Math.PI + transitionProgress * Math.PI))\n const breathingPattern = 0.7 + 0.3 * Math.sin(speechCadence * 0.5)\n const microRhythm = 0.9 + 0.1 * Math.sin(speechCadence * 8)\n\n for (let i = 0; i < VOICE_FREQUENCIES.length; i++) {\n const freq = VOICE_FREQUENCIES[i]\n let amplitude = 0\n\n const f1Response = getFormantResponse(freq, currentPattern.f1, nextPattern.f1, smoothProgress, 200)\n const f2Response = getFormantResponse(freq, currentPattern.f2, nextPattern.f2, smoothProgress, 300)\n const f3Response = getFormantResponse(freq, currentPattern.f3, nextPattern.f3, smoothProgress, 400)\n\n amplitude = (f1Response * 0.4 + f2Response * 0.35 + f3Response * 0.25)\n * (currentPattern.energy * (1 - smoothProgress) + nextPattern.energy * smoothProgress)\n\n const fundamental = 150 + 50 * Math.sin(speechCadence * 0.3)\n if (Math.abs(freq - fundamental) < 20\n || Math.abs(freq - fundamental * 2) < 30\n || Math.abs(freq - fundamental * 3) < 40) {\n amplitude += 0.3 * currentPattern.energy\n }\n\n amplitude *= intensity * breathingPattern * microRhythm\n amplitude *= (0.85 + Math.random() * 0.3)\n\n bands[i] = Math.max(0, Math.min(1, amplitude))\n }\n\n return bands\n}\n\nfunction getFormantResponse(freq: number, currentFormant: number, nextFormant: number, progress: number, bandwidth: number): number {\n if (currentFormant === 0 && nextFormant === 0)\n return 0\n\n const interpolatedFormant = currentFormant * (1 - progress) + nextFormant * progress\n if (interpolatedFormant === 0)\n return 0\n\n const distance = Math.abs(freq - interpolatedFormant)\n return Math.exp(-((distance / bandwidth) ** 2))\n}\n\n// Cached data for performance\nlet cachedOutputBands: number[] = []\nlet lastOutputFetch = 0\nlet apiErrorCount = 0\n\nfunction getApiThrottleInterval() {\n const baseInterval = isMobile.value ? 100 : 50\n const errorMultiplier = Math.min(2 ** apiErrorCount, 8)\n return baseInterval * errorMultiplier\n}\n\n// Main frequency generation function\nfunction generateFrequencyBands(intensity: number): number[] {\n let baseBands: number[] = []\n\n // For listening mode with real audio\n if (props.enableRealAudio && props.isListening && audioPermission.value && analyser && frequencyData) {\n const realBands = generateRealInputFrequencyBands()\n const hasSignal = realBands.some((band) => band > 0.05)\n if (hasSignal) {\n baseBands = realBands\n }\n }\n\n // For speaking mode with ElevenLabs\n if (!baseBands.length && props.isSpeaking && props.selfController) {\n const hasOutputActivity = props.audioLevels && props.audioLevels.outputLevel > 0.05\n\n if (hasOutputActivity) {\n const now = Date.now()\n const throttleInterval = getApiThrottleInterval()\n\n if (now - lastOutputFetch > throttleInterval) {\n lastOutputFetch = now\n try {\n const bands = generateRealOutputFrequencyBands()\n const hasSignal = bands.some((band) => band > 0.05)\n if (hasSignal) {\n cachedOutputBands = bands\n apiErrorCount = 0\n }\n } catch (error) {\n console.warn('Error fetching frequency data:', error)\n apiErrorCount++\n }\n }\n\n const hasSignal = cachedOutputBands.some((band) => band > 0.05)\n if (hasSignal) {\n baseBands = cachedOutputBands\n }\n }\n }\n\n // Fallback patterns\n if (!baseBands.length) {\n if (intensity > 0 && (props.isListening || props.isSpeaking)) {\n baseBands = props.isSpeaking ? generateSpeechPatterns(intensity) : generateIntensityBasedBands(intensity)\n } else if (props.isConnected) {\n baseBands = generateIntensityBasedBands(0.02)\n } else {\n // Idle state - zeros base, wave overlay provides simple algorithmic pattern\n baseBands = Array.from({ length: VOICE_FREQUENCIES.length }, () => 0)\n }\n }\n\n // Add wave motion overlay\n if (props.enableWaveMotion && typeof window !== 'undefined') {\n baseBands = addWaveMotionOverlay(baseBands, intensity)\n }\n\n return baseBands\n}\n\nfunction addWaveMotionOverlay(bands: number[], intensity: number): number[] {\n const time = performance.now() * 0.001\n const enhancedBands = [...bands]\n\n for (let i = 0; i < bands.length; i++) {\n const frequency = i * (2 * Math.PI) / bands.length\n let waveMotion = 0\n\n if (props.isListening || props.isSpeaking) {\n const primaryWave = Math.sin(time * 4.2 + frequency * 0.6 - (props.enableScrollingWave ? time * 2 : 0)) * 0.15\n const secondaryWave = Math.sin(time * 6.8 + frequency * 1.2 - (props.enableScrollingWave ? time * 1.5 : 0)) * 0.08\n const breathing = Math.sin(time * 0.8) * 0.05\n waveMotion = primaryWave + secondaryWave + breathing\n } else if (props.isConnected) {\n const gentleBreath = Math.sin(time * 0.6) * 0.1\n const subtleWave = Math.sin(time * 2 + frequency * 0.3) * 0.05\n waveMotion = gentleBreath + subtleWave\n } else {\n // Idle state - simple algorithmic sine wave\n const sineWave = Math.sin(time * 1.5 + frequency) * 0.12\n const breathing = Math.sin(time * 0.4) * 0.05\n waveMotion = sineWave + breathing\n }\n\n const motionIntensity = Math.max(0.3, intensity)\n enhancedBands[i] = Math.max(0, Math.min(0.9, bands[i] + waveMotion * motionIntensity))\n }\n\n return enhancedBands\n}\n\nfunction generateIntensityBasedBands(intensity: number): number[] {\n const bands = Array.from({ length: VOICE_FREQUENCIES.length }, () => 0)\n\n if (intensity <= 0) {\n return bands\n }\n\n for (let i = 0; i < VOICE_FREQUENCIES.length; i++) {\n const freq = VOICE_FREQUENCIES[i]\n let amplitude = 0\n\n if (freq >= 400 && freq <= 600) {\n amplitude = intensity * 0.9\n } else if (freq >= 1400 && freq <= 1600) {\n amplitude = intensity * 0.8\n } else if (freq >= 2400 && freq <= 2600) {\n amplitude = intensity * 0.7\n } else if (freq >= 200 && freq <= 2000) {\n amplitude = intensity * 0.6\n } else if (freq >= 85 && freq <= 300) {\n amplitude = intensity * 0.4\n } else {\n amplitude = intensity * 0.2\n }\n\n amplitude *= (0.8 + Math.random() * 0.4)\n bands[i] = Math.max(0, Math.min(1, amplitude))\n }\n\n return bands\n}\n\nfunction detectMobile() {\n if (typeof window === 'undefined')\n return\n\n const userAgent = navigator.userAgent.toLowerCase()\n const mobile = /android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini/i.test(userAgent)\n isMobile.value = mobile\n}\n\nfunction getGradient(key: string, createGradient: () => CanvasGradient): CanvasGradient {\n if (!gradientCache.has(key)) {\n gradientCache.set(key, createGradient())\n }\n return gradientCache.get(key)!\n}\n\nfunction clearGradientCache() {\n gradientCache.clear()\n backgroundGradient = null\n}\n\nfunction startAnimation() {\n if (typeof window === 'undefined' || !ctx || !canvasRef.value)\n return\n\n detectMobile()\n\n const canvas = canvasRef.value\n const width = canvas.width / dpr\n const height = canvas.height / dpr\n\n function animate(_currentTime: number) {\n if (!ctx)\n return\n\n if (!isVisible.value) {\n animationFrame = requestAnimationFrame(animate)\n return\n }\n\n ctx.clearRect(0, 0, width, height)\n\n // Compute intensity\n let intensity = 0\n if (props.audioLevels) {\n if (props.isListening)\n intensity = Math.min(props.audioLevels.inputLevel * 1.5, 1)\n else if (props.isSpeaking)\n intensity = Math.min(props.audioLevels.outputLevel * 1.8, 1)\n } else if (props.rms !== undefined) {\n intensity = Math.min(props.rms / 70, 1)\n }\n\n const bandLevels = generateFrequencyBands(intensity)\n\n // Update target heights\n for (let i = 0; i < bars; i++) {\n targets[i] = minHeight + bandLevels[i] * (maxHeight - minHeight)\n }\n\n // Physics simulation\n const deltaTime = 16.67\n\n for (let i = 0; i < bars; i++) {\n const freq = VOICE_FREQUENCIES[i]\n const physics = getFrequencyPhysics(freq)\n\n const delta = targets[i] - heights[i]\n const stiffness = STIFFNESS * physics.stiffnessMultiplier\n const damping = DAMPING * physics.dampingMultiplier\n const accel = delta * stiffness - velocities[i] * damping\n velocities[i] += accel\n heights[i] += velocities[i]\n\n // Peak tracking\n if (heights[i] > peaks[i]) {\n peaks[i] = heights[i]\n peakHoldTime[i] = PEAK_HOLD_TIME\n peakDecayVelocity[i] = 0\n } else {\n peakHoldTime[i] = Math.max(0, peakHoldTime[i] - deltaTime)\n\n if (peakHoldTime[i] <= 0) {\n const peakDelta = Math.max(minHeight, heights[i] * 1.1) - peaks[i]\n const peakAccel = peakDelta * PEAK_DECAY_STIFFNESS - peakDecayVelocity[i] * PEAK_DECAY_DAMPING\n peakDecayVelocity[i] += peakAccel\n peaks[i] = Math.max(minHeight, peaks[i] + peakDecayVelocity[i])\n }\n }\n }\n\n // Edge fade distance\n const edgeFadeDistance = bars * 0.15\n\n // Background effects\n function drawBackground() {\n if (!ctx)\n return\n\n if (!backgroundGradient) {\n backgroundGradient = ctx.createRadialGradient(\n width * 0.5,\n height * 0.6,\n height * 0.1,\n width * 0.5,\n height * 0.6,\n height * 0.9,\n )\n backgroundGradient.addColorStop(0, 'rgba(255,255,255,0.02)')\n backgroundGradient.addColorStop(1, 'rgba(0,0,0,0.08)')\n }\n\n ctx.fillStyle = backgroundGradient\n ctx.fillRect(0, 0, width, height)\n }\n\n drawBackground()\n\n // Optional glow effect for active states\n if ((props.isListening || props.isSpeaking) && !isMobile.value) {\n const time = performance.now() * 0.001\n const glowIntensity = 0.1 + (Math.sin(time * 2) * 0.05)\n\n ctx.save()\n ctx.globalCompositeOperation = 'lighter'\n ctx.globalAlpha = glowIntensity\n\n const glowColor = props.isSpeaking\n ? 'rgba(34,197,94,0.4)'\n : 'rgba(59,130,246,0.4)'\n\n ctx.fillStyle = glowColor\n for (let i = 0; i < bars; i++) {\n const x = i * (barWidth + barSpacing)\n const h = heights[i]\n const y = height - h\n ctx.beginPath()\n ctx.roundRect(x - 1, y - 1, barWidth + 2, h + 2, [2, 2, 0, 0])\n ctx.fill()\n }\n ctx.restore()\n }\n\n // Draw frequency bars\n for (let i = 0; i < bars; i++) {\n const x = i * (barWidth + barSpacing)\n const h = heights[i]\n const y = height - h\n const freq = VOICE_FREQUENCIES[i]\n\n // Edge fading\n const distFromEdge = Math.min(i, bars - 1 - i)\n const edgeFade = Math.min(1, distFromEdge / edgeFadeDistance)\n\n const intensity = Math.min(1, h / maxHeight)\n const alpha1 = (0.8 + intensity * 0.2) * edgeFade\n const alpha2 = (0.6 + intensity * 0.2) * edgeFade\n const alpha3 = (0.3 + intensity * 0.1) * edgeFade\n\n const intensityKey = Math.round(intensity * 10) / 10\n const edgeKey = Math.round(edgeFade * 10) / 10\n const cacheKey = `${props.isSpeaking ? 'speaking' : props.isListening ? 'listening' : 'idle'}-${intensityKey}-${edgeKey}-${h}`\n\n const gradient = getGradient(cacheKey, () => {\n const grad = ctx!.createLinearGradient(0, y, 0, y + h)\n\n if (props.isSpeaking) {\n grad.addColorStop(0, `rgba(34, 197, 94, ${alpha1})`)\n grad.addColorStop(0.5, `rgba(34, 197, 94, ${alpha2})`)\n grad.addColorStop(1, `rgba(34, 197, 94, ${alpha3})`)\n\n if ((freq >= 400 && freq <= 600) || (freq >= 1400 && freq <= 1600)) {\n grad.addColorStop(0, `rgba(74, 222, 128, ${Math.min(1, alpha1 + 0.2)})`)\n }\n } else if (props.isListening) {\n grad.addColorStop(0, `rgba(59, 130, 246, ${alpha1})`)\n grad.addColorStop(0.5, `rgba(59, 130, 246, ${alpha2})`)\n grad.addColorStop(1, `rgba(59, 130, 246, ${alpha3})`)\n } else {\n const a1 = 0.6 * edgeFade\n const a2 = 0.4 * edgeFade\n const a3 = 0.2 * edgeFade\n grad.addColorStop(0, `rgba(156, 163, 175, ${a1})`)\n grad.addColorStop(0.6, `rgba(156, 163, 175, ${a2})`)\n grad.addColorStop(1, `rgba(156, 163, 175, ${a3})`)\n }\n\n return grad\n })\n\n ctx.fillStyle = gradient\n ctx.beginPath()\n ctx.roundRect(x, y, barWidth, h, [1, 1, 0, 0])\n ctx.fill()\n\n // Peak indicators\n if (peaks[i] > minHeight + 2) {\n const peakY = height - peaks[i]\n const peakAlpha = peakHoldTime[i] > 0 ? 0.9 : Math.max(0.3, peakHoldTime[i] / PEAK_HOLD_TIME)\n\n ctx.fillStyle = `rgba(255, 255, 255, ${peakAlpha})`\n ctx.fillRect(x, peakY - 1, barWidth, 2)\n\n if (peakAlpha > 0.5 && !isMobile.value) {\n ctx.shadowColor = props.isSpeaking ? 'rgba(34, 197, 94, 0.5)' : 'rgba(59, 130, 246, 0.5)'\n ctx.shadowBlur = 3\n ctx.fillRect(x, peakY - 1, barWidth, 2)\n ctx.shadowBlur = 0\n }\n }\n }\n\n animationFrame = requestAnimationFrame(animate)\n }\n\n animationFrame = requestAnimationFrame(animate)\n}\n\nonMounted(() => {\n if (canvasRef.value) {\n ctx = canvasRef.value.getContext('2d')\n resizeCanvas()\n if (typeof window !== 'undefined') {\n window.addEventListener('resize', onResize, { passive: true })\n\n const handleVisibilityChange = () => {\n isVisible.value = !document.hidden\n }\n document.addEventListener('visibilitychange', handleVisibilityChange, { passive: true })\n }\n // Start animation immediately on mount\n startAnimation()\n }\n\n // Setup real audio if enabled\n if (props.enableRealAudio && props.isListening) {\n setTimeout(() => {\n setupAudio().catch(console.error)\n }, 100)\n }\n})\n\nfunction onResize() {\n if (typeof window !== 'undefined') {\n const next = Math.max(1, Math.min(2, window.devicePixelRatio || 1))\n if (next !== dpr) { dpr = next }\n }\n resizeCanvas()\n}\n\nonUnmounted(() => {\n if (animationFrame)\n cancelAnimationFrame(animationFrame)\n if (typeof window !== 'undefined') {\n window.removeEventListener('resize', onResize)\n document.removeEventListener('visibilitychange', () => {\n isVisible.value = !document.hidden\n })\n }\n\n cleanupAudio()\n})\n\nwatch(\n [() => props.isActive, () => props.isConnected, () => props.isListening, () => props.isSpeaking, () => props.rms],\n () => {\n if (!ctx && canvasRef.value)\n ctx = canvasRef.value.getContext('2d')\n if (animationFrame)\n cancelAnimationFrame(animationFrame)\n startAnimation()\n },\n { immediate: true },\n)\n\nwatch(\n [() => props.enableRealAudio, () => props.isListening],\n async ([enableRealAudio, isListening], [prevEnableRealAudio, prevIsListening]) => {\n if (enableRealAudio && isListening && (!prevEnableRealAudio || !prevIsListening)) {\n if (!audioPermission.value) {\n await setupAudio().catch(console.error)\n }\n }\n\n if ((!enableRealAudio || !isListening) && (prevEnableRealAudio && prevIsListening)) {\n cleanupAudio()\n }\n },\n { immediate: false },\n)\n\nwatch(canvasRef, (c) => {\n if (c && !ctx) {\n ctx = c.getContext('2d')\n resizeCanvas()\n startAnimation()\n }\n})\n</script>\n\n<template>\n <div class=\"w-full max-w-full flex items-center justify-center\">\n <canvas\n ref=\"canvasRef\"\n :width=\"(barWidth + barSpacing) * bars - barSpacing\"\n :height=\"maxHeight\"\n class=\"w-full max-w-full [image-rendering:-webkit-optimize-contrast]\"\n :style=\"{ height: `${maxHeight}px` }\"\n />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { SelfController } from '../SelfController'\nimport { computed } from 'vue'\nimport ElAudioVisualizer from './ElAudioVisualizer.vue'\nimport ElSelfButton from './ElSelfButton.vue'\n\nconst { selfController } = defineProps<{\n selfController?: SelfController\n}>()\n\nconst state = computed(() => selfController?.voiceState.value)\n\nconst callButtonTheme = computed(() => {\n if (state.value?.isConnected) {\n return 'red' // End call - red for destructive action\n }\n return 'green' // Start call - green for positive action\n})\n\nconst callButtonIcon = computed(() => {\n if (state.value?.isConnected) {\n return 'i-heroicons-phone-x-mark'\n }\n return 'i-heroicons-phone'\n})\n\nconst callButtonText = computed(() => {\n if (state.value?.isConnected) {\n return 'End Call'\n }\n return 'Start a Call'\n})\n\nconst isButtonDisabled = computed(() => {\n const state = selfController?.voiceState.value\n return !!state?.error || state?.connectionStatus === 'connecting'\n})\n\nconst isButtonLoading = computed(() => {\n return state.value?.connectionStatus === 'connecting'\n})\n\nasync function toggleCall() {\n if (!selfController)\n return\n\n try {\n if (selfController.voiceState.value.isConnected) {\n await selfController.endConversation()\n } else {\n // End any existing conversation first\n if (selfController.isConnected()) {\n await selfController.endConversation()\n }\n await selfController.startVoiceConversation()\n selfController.agentMode.value = 'talk'\n }\n } catch (error) {\n console.error('Error toggling call:', error)\n }\n}\n</script>\n\n<template>\n <div class=\"flex flex-col h-full items-center justify-center px-6 py-8\">\n <div class=\"flex-1 flex flex-col items-center justify-center space-y-8 py-4\">\n <div class=\"h-32 w-full max-w-md\">\n <ElAudioVisualizer\n :audio-levels=\"selfController?.audioLevels.value ?? { inputLevel: 0, outputLevel: 0 }\"\n :is-listening=\"selfController?.voiceState.value.isListening ?? false\"\n :is-speaking=\"selfController?.voiceState.value.isSpeaking ?? false\"\n :is-connected=\"selfController?.voiceState.value.isConnected ?? false\"\n :enable-real-audio=\"true\"\n :enable-wave-motion=\"true\"\n :enable-scrolling-wave=\"true\"\n :self-controller=\"selfController\"\n />\n </div>\n\n <div class=\"text-center flex gap-2 items-center text-xs\">\n <div class=\"flex items-center justify-center gap-2\">\n <div\n v-if=\"selfController?.voiceState.value.isListening\"\n class=\"size-2 bg-blue-500 rounded-full animate-pulse\"\n />\n <div\n v-else-if=\"selfController?.voiceState.value.isSpeaking\"\n class=\"size-2 bg-green-500 rounded-full animate-pulse\"\n />\n <div\n v-else-if=\"selfController?.voiceState.value.isConnected && !selfController?.voiceState.value.isListening && !selfController?.voiceState.value.isSpeaking\"\n class=\"size-2 bg-white/50 rounded-full\"\n />\n <div\n v-else-if=\"selfController?.voiceState.value.error\"\n class=\"size-2 bg-red-500 rounded-full\"\n />\n </div>\n <p class=\"text-white/70 text-sm max-w-xs leading-relaxed\">\n {{ selfController?.voiceState.value.error\n ? `Error: ${selfController.voiceState.value.error}`\n : (selfController?.voiceState.value.transcript || 'Ready to start a call...') }}\n </p>\n </div>\n </div>\n\n <div class=\"flex flex-col items-center space-y-6\">\n <ElSelfButton\n :theme=\"callButtonTheme\"\n :icon=\"callButtonIcon\"\n size=\"lg\"\n :loading=\"isButtonLoading\"\n :disabled=\"isButtonDisabled\"\n @click=\"toggleCall\"\n >\n {{ callButtonText }}\n </ElSelfButton>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { FictionSDK } from '../../sdkClient'\nimport type { Self } from '@/modules/self/schema'\nimport type { ColorName } from '@/utils/color'\nimport { computed, onMounted, onUnmounted, ref, shallowRef, watch } from 'vue'\nimport FSpinner from '@/ui/common/FSpinner.vue'\nimport { getColorSchemeOklch } from '@/utils/color'\nimport { AGENT_MODES } from '../schema'\nimport { SelfController } from '../SelfController'\nimport { getFallbackAvatarDataUrl, getSelfAvatarUrl } from '../utils'\nimport ElAuthGate from './ElAuthGate.vue'\nimport ElModeHeader from './ElModeHeader.vue'\nimport ElSelfAbout from './ElSelfAbout.vue'\nimport ElSelfButton from './ElSelfButton.vue'\nimport ElSelfChat from './ElSelfChat.vue'\nimport ElSelfHeader from './ElSelfHeader.vue'\nimport ElSelfModeSidebar from './ElSelfModeSidebar.vue'\nimport ElSelfSidebar from './ElSelfSidebar.vue'\nimport ElSelfVoice from './ElSelfVoice.vue'\n\nconst {\n sdk,\n self,\n context,\n firstMessage,\n hasClose = false,\n isActive = true,\n loading = false,\n theme = 'green',\n} = defineProps<{\n sdk: FictionSDK\n self: Self\n context?: string\n firstMessage?: string\n hasClose?: boolean\n isActive?: boolean\n loading?: boolean\n theme?: ColorName\n}>()\n\nconst emit = defineEmits<{\n close: [value: string]\n error: [message: string]\n}>()\n\nconst selfController = shallowRef<SelfController>()\nconst isSidebarOpen = ref(false)\nconst isModeSidebarOpen = ref(false)\nconst initError = ref<string>()\nconst rootElement = ref<HTMLElement>()\n\nconst agentMode = computed(() => selfController.value?.agentMode?.value ?? 'self')\n\n// Check if user is authenticated\nconst isAuthenticated = computed(() => sdk.activeUser.value !== undefined)\n\n// Current mode for button display\nconst currentMode = computed(() => {\n const m = AGENT_MODES.find((btn) => btn.mode === agentMode.value)\n return m\n})\n\nfunction createSelfController() {\n if (selfController.value) {\n selfController.value.destroy()\n }\n\n try {\n // SelfController validates agent configuration internally\n selfController.value = new SelfController({\n sdk,\n self,\n context,\n firstMessage,\n })\n } catch (error) {\n console.error('SelfController creation failed:', error)\n throw error\n }\n}\n\n// Set theme CSS variables\nfunction applyTheme(themeName: ColorName) {\n if (!rootElement.value)\n return\n\n const colorScheme = getColorSchemeOklch(themeName)\n\n // Set --primary-* CSS variables on component root for Shadow DOM compatibility\n Object.entries(colorScheme).forEach(([scale, value]) => {\n rootElement.value!.style.setProperty(`--primary-${scale}`, value)\n })\n}\n\nonMounted(() => {\n try {\n createSelfController()\n applyTheme(theme)\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Failed to initialize digital self'\n initError.value = message\n emit('error', message)\n }\n})\n\nonUnmounted(() => {\n if (selfController.value) {\n selfController.value.destroy()\n }\n})\n\n// Watch theme changes and reapply\nwatch(() => theme, (newTheme) => {\n applyTheme(newTheme)\n})\n</script>\n\n<template>\n <div\n ref=\"rootElement\"\n :key=\"getSelfAvatarUrl(self)\"\n class=\"@container/agent self-agent w-full h-full overflow-hidden relative\"\n data-test=\"self-agent\"\n >\n <div v-if=\"loading\" class=\"absolute inset-0 flex items-center justify-center bg-gradient-to-br from-theme-800 to-theme-950 rounded-3xl z-10\">\n <FSpinner class=\"text-white size-8\" />\n </div>\n\n <div\n v-else-if=\"self && !initError\"\n class=\"absolute inset-0 bg-cover bg-center bg-no-repeat\"\n :style=\"{ backgroundImage: `url(${getSelfAvatarUrl(self) || getFallbackAvatarDataUrl()})` }\"\n >\n <div\n class=\"absolute inset-0 bg-gradient-to-br z-0\"\n :class=\"agentMode === 'self' ? 'from-black/70 via-black/50 to-black/80' : 'from-black/90 via-black/90 to-black/100'\"\n />\n <div\n class=\"relative z-10 flex flex-col h-full transition-all duration-500 ease-[cubic-bezier(0.25,1,0.33,1)] will-change-transform\"\n :class=\"isActive ? 'opacity-100 translate-y-0' : 'opacity-0 translate-y-2'\"\n >\n <div class=\"relative z-30 p-2 \" :class=\"agentMode !== 'self' ? 'backdrop-blur-lg' : ''\">\n <div class=\"flex items-center\" :class=\"hasClose ? '' : 'justify-between'\">\n <!-- Left side: Sidebar toggle with user avatar -->\n <div :class=\"hasClose ? 'flex-1 basis-0' : ''\">\n <button\n class=\"cursor-pointer p-2 flex items-center gap-2 rounded-2xl text-white/70 hover:bg-white/10 transition-all duration-300 ease-[cubic-bezier(0.25,1,0.33,1)] hover:scale-105 active:scale-95\"\n @click=\"isSidebarOpen = true\"\n >\n <i class=\"i-tabler-menu size-7\" />\n </button>\n </div>\n\n <!-- Center: Mode selector button (centered when hasClose=true) -->\n <button\n class=\"flex items-center gap-2 px-3.5 py-3 rounded-2xl text-white/90 hover:bg-white/10 transition-all cursor-pointer flex-grow-0\"\n :class=\"{ 'bg-white/10': isModeSidebarOpen }\"\n @click=\"isModeSidebarOpen = true\"\n >\n <i :class=\"currentMode?.icon\" class=\"size-4 opacity-60\" />\n <span class=\"text-sm\">{{ currentMode?.label }}</span>\n <i class=\"i-tabler-chevron-down size-4\" />\n </button>\n\n <!-- Right side: Close button (only in widget mode) -->\n <div v-if=\"hasClose\" class=\"flex-1 basis-0 flex justify-end\">\n <button\n class=\"cursor-pointer flex items-center p-3 rounded-2xl text-white/70 hover:bg-white/10 transition-colors\"\n @click.stop=\"emit('close', 'button')\"\n >\n <i class=\"size-6 i-tabler-x\" />\n </button>\n </div>\n </div>\n </div>\n\n <div\n v-if=\"agentMode === 'self'\"\n class=\"h-full pb-12 flex-1 flex flex-col relative z-20 min-h-0 px-4 @[480px]/agent:px-6 max-w-md mx-auto w-full\"\n >\n <!-- Top spacer -->\n <div class=\"flex-1 basis-0 mb-36\" />\n\n <!-- Avatar header -->\n <ElSelfHeader :self=\"self\" />\n\n <!-- Bottom section with button -->\n <div class=\"flex-1 basis-0 flex flex-col justify-start pt-6\">\n <ElSelfButton\n theme=\"primary\"\n size=\"lg\"\n class=\"w-full\"\n icon=\"i-heroicons-phone\"\n data-test=\"voice-button\"\n @click=\"selfController?.setMode('talk')\"\n >\n Talk to {{ self.name }}\n </ElSelfButton>\n </div>\n </div>\n <div\n v-else-if=\"agentMode === 'talk'\"\n class=\"flex-1 flex flex-col relative z-20 min-h-0 w-full\"\n >\n <ElAuthGate v-if=\"!isAuthenticated\" :sdk=\"sdk\" />\n <template v-else>\n <!-- Sticky header with backdrop blur - full width -->\n <div>\n <div class=\"px-4 pt-4 pb-4 max-w-md mx-auto\">\n <ElModeHeader :self=\"self\" />\n </div>\n </div>\n <ElSelfVoice\n :self-controller=\"selfController\"\n />\n </template>\n </div>\n <div\n v-else\n class=\"flex-1 flex flex-col relative z-20 min-h-0 w-full px-4 @[480px]/agent:px-6\"\n >\n <div class=\"flex-1 min-h-0 max-w-md mx-auto w-full\">\n <template v-if=\"agentMode === 'chat'\">\n <ElAuthGate v-if=\"!isAuthenticated\" :sdk=\"sdk\" />\n <ElSelfChat\n v-else\n :self-controller=\"selfController\"\n :self=\"self\"\n />\n </template>\n <ElSelfAbout\n v-else-if=\"agentMode === 'info'\"\n :self=\"self\"\n />\n </div>\n </div>\n\n <div class=\"relative z-20 text-center py-5 px-6\" :class=\"agentMode === 'info' ? 'hidden' : ''\">\n <a\n href=\"https://www.fiction.com\"\n class=\"flex items-center justify-center gap-1.5 text-[10px] font-sans font-normal text-white/50 hover:text-white/70 transition-colors\"\n >\n <span class=\"\">Digital Self™</span>\n <span class=\"text-white/20\">by</span>\n <span>Fiction.com</span>\n </a>\n </div>\n </div>\n </div>\n <div v-else-if=\"initError\" class=\"bg-gradient-to-br from-theme-800 to-theme-950 text-white flex items-center justify-center h-full p-8\">\n <div class=\"text-center max-w-md space-y-4\">\n <div class=\"flex justify-center\">\n <div class=\"rounded-full bg-red-500/20 flex items-center justify-center size-10\">\n <i class=\"i-tabler-alert-circle size-6 text-red-400\" />\n </div>\n </div>\n <h3 class=\"text-lg font-medium\">\n Self Error\n </h3>\n <p class=\"text-sm text-white/70 leading-relaxed\">\n {{ initError }}\n </p>\n </div>\n </div>\n <div v-else class=\"bg-white/10 backdrop-blur-sm text-white/70 flex items-center justify-center h-full\">\n There was an error loading the digital self. Please try again later.\n </div>\n\n <!-- Self Sidebar (left) -->\n <ElSelfSidebar\n v-model=\"isSidebarOpen\"\n :self=\"self\"\n :sdk=\"sdk\"\n :title=\"self.name\"\n />\n\n <!-- Mode Sidebar (right) -->\n <ElSelfModeSidebar\n v-model=\"isModeSidebarOpen\"\n :self-controller=\"selfController\"\n />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { FictionSDK } from '../../sdkClient'\nimport type { Self } from '../schema'\nimport { onMounted, ref } from 'vue'\n\nconst props = defineProps<{\n sdk: FictionSDK\n self?: Self\n handle?: string\n context?: string\n firstMessage?: string\n hasClose?: boolean\n}>()\n\nconst loading = ref(!props.self)\nconst self = ref<Self | undefined>(props.self)\nconst error = ref<string>()\n\nonMounted(async () => {\n // If self already provided, skip fetch\n if (props.self) {\n loading.value = false\n return\n }\n\n // Otherwise fetch using handle\n if (!props.handle) {\n error.value = 'No handle or self provided'\n loading.value = false\n return\n }\n\n try {\n loading.value = true\n\n // Use SDK's clean wrapper method instead of raw apiClient\n const result = await props.sdk.getPublicSelf({ handle: props.handle })\n\n if (result) {\n // SDK returns a compatible Self type from server\n self.value = result as Self\n } else {\n error.value = props.sdk.error.value || 'Self not found'\n console.error('Failed to fetch digital self:', props.sdk.error.value)\n }\n } catch (err) {\n error.value = err instanceof Error ? err.message : 'Failed to fetch self'\n console.error('Error fetching digital self:', err)\n } finally {\n loading.value = false\n }\n})\n</script>\n\n<template>\n <div class=\"self-wrap\">\n <div v-if=\"loading\" class=\"flex items-center justify-center h-full\">\n <div class=\"animate-spin rounded-full size-6 border-b-2 border-white\" />\n </div>\n\n <template v-else-if=\"self\">\n <slot\n :self=\"self\"\n :context=\"context\"\n :first-message=\"firstMessage\"\n :loading=\"loading\"\n />\n </template>\n <div v-else-if=\"error\" class=\"flex items-center justify-center h-full text-theme-500 text-xs\">\n <div class=\"flex flex-col items-center gap-2\">\n <div>\n <div class=\"i-tabler-user-off size-8\" />\n </div>\n <div>{{ error }}</div>\n </div>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { FictionSDK } from '../../sdkClient'\nimport { nextTick, ref, watch } from 'vue'\nimport { getFallbackAvatarDataUrl, getSelfAvatarUrl } from '../utils'\nimport SelfAgent from './SelfAgent.vue'\nimport SelfWrap from './SelfWrap.vue'\n\ninterface Props {\n sdk: FictionSDK\n handle: string\n context?: string\n firstMessage?: string\n position?: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left'\n}\n\nconst props = defineProps<Props>()\nconst isOpen = ref(false)\nconst isAgentActive = ref(false)\n\nfunction toggle() {\n isOpen.value = !isOpen.value\n}\n\n// Watch isOpen to delay agent activation for smooth transition\nwatch(isOpen, async (newValue) => {\n if (newValue) {\n // When opening, delay agent activation until transition starts\n await nextTick()\n setTimeout(() => {\n isAgentActive.value = true\n }, 400) // Delay to let container expand first\n } else {\n // When closing, immediately deactivate agent\n isAgentActive.value = false\n }\n})\n\nfunction open() {\n isOpen.value = true\n}\n\nfunction close() {\n isOpen.value = false\n}\n\nfunction handleClose() {\n close()\n}\n\ndefineExpose({\n toggle,\n open,\n close,\n})\n</script>\n\n<template>\n <SelfWrap\n v-slot=\"{ self }\"\n :sdk=\"sdk\"\n :handle=\"handle\"\n :context=\"context\"\n :first-message=\"firstMessage\"\n >\n <!-- Fixed Widget Wrapper -->\n <div\n v-if=\"self\"\n class=\"fixed z-[999999] pointer-events-auto\"\n :class=\"[\n props.position === 'bottom-left' ? 'bottom-6 left-6'\n : props.position === 'top-right' ? 'top-6 right-6'\n : props.position === 'top-left' ? 'top-6 left-6'\n : 'bottom-6 right-6',\n ]\"\n >\n <!-- Widget Content with Transition -->\n <div\n class=\"transition-all duration-500 ease-[cubic-bezier(0.25,1,0.33,1)] transform-gpu\"\n :class=\"[\n isOpen\n ? 'widget-expanded w-96 h-[600px] max-w-[calc(100vw-48px)] max-h-[calc(100vh-48px)] rounded-3xl opacity-100 scale-100'\n : 'widget-button w-[80px] h-[80px] opacity-100 scale-100 flex items-center justify-center cursor-pointer',\n ]\"\n :style=\"{\n 'transform-origin':\n props.position === 'bottom-left' ? 'bottom left'\n : props.position === 'top-right' ? 'top right'\n : props.position === 'top-left' ? 'top left'\n : 'bottom right',\n }\"\n @click=\"!isOpen ? toggle() : undefined\"\n >\n <!-- Button Content (visible when closed) -->\n <div v-if=\"!isOpen\" class=\"relative h-full w-full\">\n <div class=\"group relative h-full w-full rounded-3xl overflow-hidden shadow-lg transition-all duration-300 ease-[cubic-bezier(0.25,1,0.33,1)] hover:shadow-2xl hover:translate-y-[-1px] hover:brightness-110 active:scale-[1.06] active:-translate-y-0.5 active:duration-100\">\n <img\n :src=\"getSelfAvatarUrl(self) || getFallbackAvatarDataUrl()\"\n :alt=\"`${self.name} avatar`\"\n class=\"h-full w-full object-cover pointer-events-none\"\n />\n <!-- Gradient overlay for contrast -->\n <div class=\"absolute inset-0 pointer-events-none bg-gradient-to-br from-transparent via-black/10 to-black/40 opacity-60 transition-opacity duration-300 group-hover:opacity-40\" />\n </div>\n <!-- Online indicator -->\n <div class=\"absolute top-0.5 right-0.5\">\n <div class=\"size-3 bg-green-500 rounded-full ring-2 ring-white absolute animate-ping\" style=\"animation-duration: 3s;\" />\n <div class=\"size-3 bg-green-500 rounded-full ring-2 ring-white\" />\n </div>\n </div>\n\n <!-- Chat Content (visible when open) -->\n <SelfAgent\n v-if=\"isOpen && self\"\n class=\"rounded-3xl shadow-2xl border border-white/10\"\n :sdk=\"sdk\"\n :self=\"self\"\n :context=\"context\"\n :first-message=\"firstMessage\"\n :has-close=\"true\"\n :is-active=\"isAgentActive\"\n @close=\"handleClose\"\n />\n </div>\n </div>\n </SelfWrap>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, onMounted, onUnmounted, ref, watch } from 'vue'\nimport FClose from './FClose.vue'\n\ndefineOptions({ name: 'FModal' })\n\nconst {\n vis = false,\n modalClass,\n styleClass,\n fullScreen = false,\n hasClose = false,\n title = '',\n transitionMode = 'modal',\n teleportTo = 'body',\n} = defineProps<{\n vis?: boolean\n modalClass?: string\n styleClass?: string\n fullScreen?: boolean\n hasClose?: boolean\n title?: string\n transitionMode?: 'modal' | 'slideUp'\n teleportTo?: string | Element\n}>()\n\nconst emit = defineEmits<{\n 'update:vis': [value: boolean]\n 'close': [value: boolean]\n 'escape': [value: boolean]\n}>()\n\nconst isMounted = ref(false)\n\nfunction close(args: { reason: 'escape' | 'reset' }): void {\n const { reason } = args\n emit('update:vis', false)\n emit('close', true)\n if (reason === 'escape')\n emit('escape', true)\n}\n\nconst cls = modalClass ? [modalClass] : ['max-w-screen-md p-24']\nconst defaultStyleClass = styleClass ? [styleClass] : ['bg-theme-0 text-theme-900', 'shadow-xl']\n\nif (fullScreen)\n cls.push('fixed inset-0')\nelse\n cls.push('rounded-xl my-6 mx-3')\n\nconst classes = [\n 'relative',\n 'text-left',\n 'transform',\n 'transition-all',\n 'w-full',\n ...cls,\n ...defaultStyleClass,\n]\n\nconst afterVisible = ref(false)\nconst cleanups: (() => void)[] = []\n\nonMounted(async () => {\n isMounted.value = true\n\n const unwatch = watch(\n () => vis,\n (vis) => {\n if (vis) {\n setTimeout(() => (afterVisible.value = true), 300)\n } else {\n afterVisible.value = false\n }\n },\n { immediate: true },\n )\n\n cleanups.push(unwatch)\n})\n\nonUnmounted(() => {\n cleanups.forEach((c) => c())\n})\n\nconst modalTransition = computed(() => {\n if (transitionMode === 'slideUp') {\n return {\n enterActiveClass: 'ease-[cubic-bezier(0.25,1,0.33,1)] duration-500',\n enterFromClass: 'opacity-0 translate-y-full scale-95',\n enterToClass: 'opacity-100 translate-y-0 scale-100',\n leaveActiveClass: 'ease-[cubic-bezier(0.25,1,0.33,1)] duration-500',\n leaveFromClass: 'opacity-100 translate-y-0 scale-100',\n leaveToClass: 'opacity-0 translate-y-full scale-95',\n }\n }\n return {\n enterActiveClass: 'ease-[cubic-bezier(0.25,1,0.33,1)] duration-500',\n enterFromClass: 'opacity-0 scale-75',\n enterToClass: 'opacity-100 translate-y-0 scale-100',\n leaveActiveClass: 'ease-[cubic-bezier(0.25,1,0.33,1)] duration-500',\n leaveFromClass: 'opacity-100 translate-y-0 scale-100',\n leaveToClass: 'opacity-0 scale-75',\n }\n})\n</script>\n\n<script lang=\"ts\">\nexport default {\n inheritAttrs: false,\n}\n</script>\n\n<template>\n <Teleport v-if=\"isMounted\" :to=\"teleportTo\">\n <div\n class=\"fixed inset-0 z-50\"\n aria-labelledby=\"modal-title\"\n role=\"dialog\"\n aria-modal=\"true\"\n :class=\"!vis ? 'pointer-events-none' : ''\"\n >\n <Transition\n enter-active-class=\"ease-out duration-300\"\n enter-from-class=\"opacity-0\"\n enter-to-class=\"opacity-100\"\n leave-active-class=\"ease-in duration-200\"\n leave-from-class=\"opacity-100\"\n leave-to-class=\"opacity-0\"\n >\n <div\n v-if=\"vis\"\n class=\"fixed inset-0 bg-theme-800/60 active:bg-theme-800/80 cursor-pointer dark:bg-theme-600/90 backdrop-blur-sm transition-opacity\"\n @click=\"close({ reason: 'escape' })\"\n />\n </Transition>\n <div\n class=\"fixed inset-0 z-40 overflow-y-auto\"\n @click=\"close({ reason: 'escape' })\"\n >\n <div class=\"flex min-h-full items-center justify-center text-center p-4 py-8\">\n <Transition v-bind=\"modalTransition\">\n <div\n v-if=\"vis\"\n :class=\"classes\"\n class=\"overflow-visible w-full\"\n @click.stop\n >\n <div\n v-if=\"hasClose || title || $slots.actions\"\n :class=\"!title && (hasClose || $slots.actions) ? 'absolute top-0 right-0 z-10' : 'flex justify-between items-center'\"\n >\n <h2 v-if=\"title\" class=\"text-base p-4 font-semibold\">\n {{ title }}\n </h2>\n <div v-if=\"hasClose || $slots.actions\" class=\"flex items-center gap-2 px-2\">\n <slot name=\"actions\" />\n <FClose\n v-if=\"hasClose\"\n class=\"relative\"\n data-test-id=\"close-modal\"\n @click.stop=\"close({ reason: 'escape' })\"\n />\n </div>\n </div>\n <slot />\n </div>\n </Transition>\n </div>\n </div>\n </div>\n </Teleport>\n</template>\n","<script setup lang=\"ts\">\nimport type { FictionSDK } from '../../sdkClient'\nimport type { Self } from '../schema'\nimport SelfAgent from './SelfAgent.vue'\nimport SelfWrap from './SelfWrap.vue'\n\nconst props = defineProps<{\n sdk: FictionSDK\n self?: Self\n handle?: string\n context?: string\n firstMessage?: string\n hasClose?: boolean\n}>()\n</script>\n\n<template>\n <SelfWrap\n v-slot=\"slotProps\"\n v-bind=\"props\"\n class=\"self-provider size-full relative\"\n >\n <SelfAgent\n v-bind=\"props\"\n :self=\"slotProps.self\"\n :is-active=\"true\"\n class=\"size-full\"\n />\n </SelfWrap>\n</template>\n","<script setup lang=\"ts\">\nimport type { FictionSDK } from '../../sdkClient'\nimport type { Self } from '../schema'\nimport { ref, watch } from 'vue'\nimport FModal from '@/ui/common/FModal.vue'\nimport SelfProvider from './SelfProvider.vue'\n\ndefineOptions({ name: 'SelfModal' })\n\nconst {\n modelValue = false,\n sdk,\n self,\n handle,\n context,\n firstMessage,\n} = defineProps<{\n modelValue?: boolean\n sdk: FictionSDK\n self?: Self\n handle?: string\n context?: string\n firstMessage?: string\n}>()\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: boolean]\n}>()\n\nconst isVisible = ref(modelValue)\n\nwatch(() => modelValue, (newVal) => {\n isVisible.value = newVal\n})\n\nwatch(isVisible, (newVal) => {\n emit('update:modelValue', newVal)\n})\n</script>\n\n<template>\n <FModal\n v-model:vis=\"isVisible\"\n modal-class=\"max-w-4xl p-0\"\n style-class=\"bg-transparent shadow-2xl\"\n :has-close=\"false\"\n >\n <div class=\"relative w-full h-[80vh] md:h-[600px]\">\n <SelfProvider\n :sdk=\"sdk\"\n :self=\"self\"\n :handle=\"handle\"\n :context=\"context\"\n :first-message=\"firstMessage\"\n :has-close=\"true\"\n @close=\"isVisible = false\"\n />\n </div>\n </FModal>\n</template>\n"],"names":["AUDIO_FFT_SIZE","AUDIO_SMOOTHING","AUDIO_LEVEL_UPDATE_INTERVAL","VISUALIZER_CONFIG","VOICE_FREQUENCIES","_ClientAudio","SettingsObject","args","__publicField","ref","options","noiseSuppression","echoCancellation","autoGainControl","error","isConnected","inputDataArray","updateLevels","__name","inputAverage","sum","value","inputLevel","outputLevel","intervalWrapper","track","ClientAudio","AGENT_MODES","getImageSrc","image","getSelfAvatarUrl","self","getFallbackAvatarDataUrl","handleImageError","event","img","parseVoiceMessage","message","parsers","msg","sender","parser","result","generateFirstMessage","name","context","_openBlock","_createElementBlock","_hoisted_1","_hoisted_2","_createElementVNode","_normalizeClass","__props","colorSchemes","getColorSchemeOklch","colorName","_SelfController","settings","data","nonZeroCount","x","maxValue","avgValue","val","text","hash","now","isDupe","state","updates","isText","watch","newMode","oldMode","isVoice","parsed","participantId","sdk","err","mode","callbacks","dynamicSettings","agentId","Conversation","errorMessage","isSpeaking","messageArgs","type","anonId","conversationData","objectId","duration","sessionType","quantity","SelfController","themeClasses","computed","sizeClasses","iconSizeClasses","_cache","_renderSlot","_ctx","emit","__emit","$event","props","inputs","values","justPasted","onMounted","v","onPaste","i","e","nums","newValues","c","idx","nextPos","onInput","onKeydown","onFocus","_Fragment","_renderList","el","_vModelText","form","step","stepConfig","currentStep","_hoisted_3","_toDisplayString","_hoisted_4","_hoisted_5","_createBlock","SelfInputEmail","_withKeys","SelfInputOneTimeCode","_hoisted_6","_createVNode","ElSelfButton","getAvatarSrc","_unref","CLASS_PART_SEPARATOR","createClassGroupUtils","config","classMap","createClassMap","conflictingClassGroups","conflictingClassGroupModifiers","className","classParts","getGroupRecursive","getGroupIdForArbitraryProperty","classGroupId","hasPostfixModifier","conflicts","classPartObject","currentClassPart","nextClassPartObject","classGroupFromNextClassPart","classRest","validator","arbitraryPropertyRegex","arbitraryPropertyClassName","property","theme","classGroups","processClassesRecursively","classGroup","classDefinition","classPartObjectToEdit","getPart","isThemeGetter","key","path","currentClassPartObject","pathPart","func","createLruCache","maxCacheSize","cacheSize","cache","previousCache","update","IMPORTANT_MODIFIER","MODIFIER_SEPARATOR","MODIFIER_SEPARATOR_LENGTH","createParseClassName","prefix","experimentalParseClassName","parseClassName","modifiers","bracketDepth","parenDepth","modifierStart","postfixModifierPosition","index","currentCharacter","baseClassNameWithImportantModifier","baseClassName","stripImportantModifier","hasImportantModifier","maybePostfixModifierPosition","fullPrefix","parseClassNameOriginal","createSortModifiers","orderSensitiveModifiers","modifier","sortedModifiers","unsortedModifiers","createConfigUtils","SPLIT_CLASSES_REGEX","mergeClassList","classList","configUtils","getClassGroupId","getConflictingClassGroupIds","sortModifiers","classGroupsInConflict","classNames","originalClassName","isExternal","variantModifier","modifierId","classId","conflictGroups","group","twJoin","argument","resolvedValue","string","toValue","mix","k","createTailwindMerge","createConfigFirst","createConfigRest","cacheGet","cacheSet","functionToCall","initTailwindMerge","previousConfig","createConfigCurrent","tailwindMerge","cachedResult","fromTheme","themeGetter","arbitraryValueRegex","arbitraryVariableRegex","fractionRegex","tshirtUnitRegex","lengthUnitRegex","colorFunctionRegex","shadowRegex","imageRegex","isFraction","isNumber","isInteger","isPercent","isTshirtSize","isAny","isLengthOnly","isNever","isShadow","isImage","isAnyNonArbitrary","isArbitraryValue","isArbitraryVariable","isArbitrarySize","getIsArbitraryValue","isLabelSize","isArbitraryLength","isLabelLength","isArbitraryNumber","isLabelNumber","isArbitraryPosition","isLabelPosition","isArbitraryImage","isLabelImage","isArbitraryShadow","isLabelShadow","isArbitraryVariableLength","getIsArbitraryVariable","isArbitraryVariableFamilyName","isLabelFamilyName","isArbitraryVariablePosition","isArbitraryVariableSize","isArbitraryVariableImage","isArbitraryVariableShadow","testLabel","testValue","shouldMatchNoLabel","label","getDefaultConfig","themeColor","themeFont","themeText","themeFontWeight","themeTracking","themeLeading","themeBreakpoint","themeContainer","themeSpacing","themeRadius","themeShadow","themeInsetShadow","themeTextShadow","themeDropShadow","themeBlur","themePerspective","themeAspect","themeEase","themeAnimate","scaleBreak","scalePosition","scalePositionWithArbitrary","scaleOverflow","scaleOverscroll","scaleUnambiguousSpacing","scaleInset","scaleGridTemplateColsRows","scaleGridColRowStartAndEnd","scaleGridColRowStartOrEnd","scaleGridAutoColsRows","scaleAlignPrimaryAxis","scaleAlignSecondaryAxis","scaleMargin","scaleSizing","scaleColor","scaleBgPosition","scaleBgRepeat","scaleBgSize","scaleGradientStopPosition","scaleRadius","scaleBorderWidth","scaleLineStyle","scaleBlendMode","scaleMaskImagePosition","scaleBlur","scaleRotate","scaleScale","scaleSkew","scaleTranslate","twMerge","themes","icons","componentTag","spinnerSize","buttonClass","baseClasses","linkPadding","roundingClasses","out","iconClass","_resolveDynamicComponent","FSpinner","links","engine","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","link","FButton","messagesContainer","textarea","selfAvatarUrl","shouldShowAvatar","messages","currentMsg","nextMsg","sendMessage","messageText","scrollToBottom","handleKeydown","nextTick","container","adjustTextareaHeight","newHeight","m","inView","$emit","position","widthClasses","isOpen","visibleItems","item","handleItemClick","transitionClasses","_Transition","FClose","$slots","_TransitionGroup","currentMode","modeItems","ElSidebar","menuItems","items","url","canvasRef","ctx","animationFrame","isMobile","isVisible","gradientCache","backgroundGradient","analyser","frequencyData","audioPermission","audioError","bars","barWidth","barSpacing","minHeight","maxHeight","STIFFNESS","DAMPING","PEAK_HOLD_TIME","PEAK_DECAY_STIFFNESS","PEAK_DECAY_DAMPING","heights","velocities","targets","peaks","peakHoldTime","peakDecayVelocity","getFrequencyPhysics","freq","setupAudio","clientAudio","sharedAnalyser","arrayBuffer","cleanupAudio","dpr","resizeCanvas","cssW","cssH","clearGradientCache","generateRealInputFrequencyBands","mapFrequencyDataToBands","generateRealOutputFrequencyBands","outputFrequencyData","_","targetFreq","binIndex","binWidth","amplitude","j","weight","finalAmplitude","currentPhoneme","phonemeTimer","speechCadence","phonemePatterns","generateSpeechPatterns","intensity","bands","currentPattern","nextPattern","transitionProgress","smoothProgress","breathingPattern","microRhythm","f1Response","getFormantResponse","f2Response","f3Response","fundamental","currentFormant","nextFormant","progress","bandwidth","interpolatedFormant","distance","cachedOutputBands","lastOutputFetch","apiErrorCount","getApiThrottleInterval","baseInterval","errorMultiplier","generateFrequencyBands","baseBands","realBands","band","throttleInterval","generateIntensityBasedBands","addWaveMotionOverlay","time","enhancedBands","frequency","waveMotion","primaryWave","secondaryWave","breathing","gentleBreath","subtleWave","sineWave","motionIntensity","detectMobile","userAgent","mobile","getGradient","createGradient","startAnimation","canvas","width","height","animate","_currentTime","bandLevels","deltaTime","physics","delta","stiffness","damping","accel","peakAccel","edgeFadeDistance","drawBackground","glowIntensity","glowColor","h","y","distFromEdge","edgeFade","alpha1","alpha2","alpha3","intensityKey","edgeKey","cacheKey","gradient","grad","a1","a2","a3","peakY","peakAlpha","onResize","handleVisibilityChange","next","onUnmounted","enableRealAudio","isListening","prevEnableRealAudio","prevIsListening","callButtonTheme","callButtonIcon","callButtonText","isButtonDisabled","isButtonLoading","toggleCall","ElAudioVisualizer","_hoisted_11","selfController","shallowRef","isSidebarOpen","isModeSidebarOpen","initError","rootElement","agentMode","isAuthenticated","btn","createSelfController","applyTheme","themeName","colorScheme","scale","newTheme","_normalizeStyle","ElSelfHeader","ElModeHeader","ElSelfVoice","ElAuthGate","ElSelfChat","ElSelfAbout","_hoisted_12","_hoisted_13","ElSelfSidebar","ElSelfModeSidebar","loading","isAgentActive","toggle","newValue","open","close","handleClose","__expose","SelfWrap","_withCtx","SelfAgent","__default__","isMounted","reason","cls","defaultStyleClass","classes","afterVisible","cleanups","unwatch","vis","modalTransition","_Teleport","_mergeProps","slotProps","newVal","FModal","SelfProvider"],"mappings":"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","x_google_ignoreList":[12]}
|