@backbay/glia 0.2.0-alpha.6 → 0.2.0-alpha.8
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/audio/index.js +1145 -5
- package/dist/audio/index.js.map +1 -1
- package/dist/components/index.js +3187 -10
- package/dist/components/index.js.map +1 -1
- package/dist/core.js +19714 -12
- package/dist/core.js.map +1 -1
- package/dist/emotion/index.js +1 -1
- package/dist/emotion/index.js.map +1 -1
- package/dist/hooks/index.js +941 -6
- package/dist/hooks/index.js.map +1 -1
- package/dist/index.js +31841 -183
- package/dist/index.js.map +1 -1
- package/dist/primitives/index.js +21111 -57
- package/dist/primitives/index.js.map +1 -1
- package/dist/protocol/index.js +360 -2
- package/dist/protocol/index.js.map +1 -1
- package/dist/speakeasy/index.js +2786 -38
- package/dist/speakeasy/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/theme/index.js +1150 -3
- package/dist/theme/index.js.map +1 -1
- package/dist/vision/index.js +370 -2
- package/dist/vision/index.js.map +1 -1
- package/dist/workspace/index.js +16824 -2
- package/dist/workspace/index.js.map +1 -1
- package/package.json +16 -10
- package/dist/AuroraBackground-AP6ZHVFA.js +0 -6
- package/dist/AuroraBackground-AP6ZHVFA.js.map +0 -1
- package/dist/BentoGrid-CDARICNM.js +0 -6
- package/dist/BentoGrid-CDARICNM.js.map +0 -1
- package/dist/CommandPalette-JCWJKRBY.js +0 -6
- package/dist/CommandPalette-JCWJKRBY.js.map +0 -1
- package/dist/Glass-H4X4ZI4P.js +0 -7
- package/dist/Glass-H4X4ZI4P.js.map +0 -1
- package/dist/GlitchText-KLQ57PPY.js +0 -6
- package/dist/GlitchText-KLQ57PPY.js.map +0 -1
- package/dist/GlowButton-VGBPMZO7.js +0 -6
- package/dist/GlowButton-VGBPMZO7.js.map +0 -1
- package/dist/Graph3D-GO7N2EZQ.js +0 -540
- package/dist/Graph3D-GO7N2EZQ.js.map +0 -1
- package/dist/HUDProgressRing-N6C5NAEV.js +0 -6
- package/dist/HUDProgressRing-N6C5NAEV.js.map +0 -1
- package/dist/KPIStat-PBQK27ZB.js +0 -6
- package/dist/KPIStat-PBQK27ZB.js.map +0 -1
- package/dist/NeonToast-W5F7MU3U.js +0 -6
- package/dist/NeonToast-W5F7MU3U.js.map +0 -1
- package/dist/ParticleField-WK6CNHWU.js +0 -51
- package/dist/ParticleField-WK6CNHWU.js.map +0 -1
- package/dist/TextGenerateEffect-EUCEIIUJ.js +0 -6
- package/dist/TextGenerateEffect-EUCEIIUJ.js.map +0 -1
- package/dist/ThreeDCard-VH5I3SSY.js +0 -6
- package/dist/ThreeDCard-VH5I3SSY.js.map +0 -1
- package/dist/TypingAnimation-GIWOHPIX.js +0 -6
- package/dist/TypingAnimation-GIWOHPIX.js.map +0 -1
- package/dist/alert-dialog-QOSYBIIE.js +0 -19
- package/dist/alert-dialog-QOSYBIIE.js.map +0 -1
- package/dist/avatar-N5R37PCU.js +0 -10
- package/dist/avatar-N5R37PCU.js.map +0 -1
- package/dist/badge-GTVIIGPY.js +0 -8
- package/dist/badge-GTVIIGPY.js.map +0 -1
- package/dist/button-D7IMSV2D.js +0 -8
- package/dist/button-D7IMSV2D.js.map +0 -1
- package/dist/chunk-3CMPQOMY.js +0 -69
- package/dist/chunk-3CMPQOMY.js.map +0 -1
- package/dist/chunk-3OQT6IYR.js +0 -41
- package/dist/chunk-3OQT6IYR.js.map +0 -1
- package/dist/chunk-43B2WVLS.js +0 -85
- package/dist/chunk-43B2WVLS.js.map +0 -1
- package/dist/chunk-4SRFO5W3.js +0 -121
- package/dist/chunk-4SRFO5W3.js.map +0 -1
- package/dist/chunk-5IZELOOU.js +0 -362
- package/dist/chunk-5IZELOOU.js.map +0 -1
- package/dist/chunk-6DM4ACSS.js +0 -154
- package/dist/chunk-6DM4ACSS.js.map +0 -1
- package/dist/chunk-6IGT34PC.js +0 -50
- package/dist/chunk-6IGT34PC.js.map +0 -1
- package/dist/chunk-6RKBCJHN.js +0 -194
- package/dist/chunk-6RKBCJHN.js.map +0 -1
- package/dist/chunk-6RX2WGCO.js +0 -108
- package/dist/chunk-6RX2WGCO.js.map +0 -1
- package/dist/chunk-7K4WZM3U.js +0 -189
- package/dist/chunk-7K4WZM3U.js.map +0 -1
- package/dist/chunk-7MDBHJPT.js +0 -407
- package/dist/chunk-7MDBHJPT.js.map +0 -1
- package/dist/chunk-7UQD6ROV.js +0 -9
- package/dist/chunk-7UQD6ROV.js.map +0 -1
- package/dist/chunk-AFNIVLZP.js +0 -1069
- package/dist/chunk-AFNIVLZP.js.map +0 -1
- package/dist/chunk-ANWYRO6A.js +0 -407
- package/dist/chunk-ANWYRO6A.js.map +0 -1
- package/dist/chunk-DIXPOHDO.js +0 -71
- package/dist/chunk-DIXPOHDO.js.map +0 -1
- package/dist/chunk-DWYMKYPI.js +0 -3
- package/dist/chunk-DWYMKYPI.js.map +0 -1
- package/dist/chunk-E3NVDCZG.js +0 -280
- package/dist/chunk-E3NVDCZG.js.map +0 -1
- package/dist/chunk-EBM7YBKL.js +0 -399
- package/dist/chunk-EBM7YBKL.js.map +0 -1
- package/dist/chunk-EPAM7IWW.js +0 -294
- package/dist/chunk-EPAM7IWW.js.map +0 -1
- package/dist/chunk-EXQ7GYRS.js +0 -134
- package/dist/chunk-EXQ7GYRS.js.map +0 -1
- package/dist/chunk-F4QTUZ3C.js +0 -136
- package/dist/chunk-F4QTUZ3C.js.map +0 -1
- package/dist/chunk-FEW533R2.js +0 -105
- package/dist/chunk-FEW533R2.js.map +0 -1
- package/dist/chunk-FFZLJKC7.js +0 -270
- package/dist/chunk-FFZLJKC7.js.map +0 -1
- package/dist/chunk-GEAMOBF7.js +0 -8486
- package/dist/chunk-GEAMOBF7.js.map +0 -1
- package/dist/chunk-GRTRSCTD.js +0 -74
- package/dist/chunk-GRTRSCTD.js.map +0 -1
- package/dist/chunk-IKGYOGLK.js +0 -16
- package/dist/chunk-IKGYOGLK.js.map +0 -1
- package/dist/chunk-IQ7WYWVJ.js +0 -73
- package/dist/chunk-IQ7WYWVJ.js.map +0 -1
- package/dist/chunk-IXIVWQLF.js +0 -543
- package/dist/chunk-IXIVWQLF.js.map +0 -1
- package/dist/chunk-JCJU57RC.js +0 -115
- package/dist/chunk-JCJU57RC.js.map +0 -1
- package/dist/chunk-KORSTBU4.js +0 -117
- package/dist/chunk-KORSTBU4.js.map +0 -1
- package/dist/chunk-KSEZ6UM2.js +0 -235
- package/dist/chunk-KSEZ6UM2.js.map +0 -1
- package/dist/chunk-MHPF7R3O.js +0 -1376
- package/dist/chunk-MHPF7R3O.js.map +0 -1
- package/dist/chunk-MPC5IH7E.js +0 -81
- package/dist/chunk-MPC5IH7E.js.map +0 -1
- package/dist/chunk-MQIU2NYA.js +0 -114
- package/dist/chunk-MQIU2NYA.js.map +0 -1
- package/dist/chunk-NYMBJOGR.js +0 -2192
- package/dist/chunk-NYMBJOGR.js.map +0 -1
- package/dist/chunk-OBZD2M3C.js +0 -169
- package/dist/chunk-OBZD2M3C.js.map +0 -1
- package/dist/chunk-ODM2AG6G.js +0 -176
- package/dist/chunk-ODM2AG6G.js.map +0 -1
- package/dist/chunk-ONDKF5LP.js +0 -53
- package/dist/chunk-ONDKF5LP.js.map +0 -1
- package/dist/chunk-P25YCWQB.js +0 -41
- package/dist/chunk-P25YCWQB.js.map +0 -1
- package/dist/chunk-PFYVNM6H.js +0 -14
- package/dist/chunk-PFYVNM6H.js.map +0 -1
- package/dist/chunk-PWNNSGFL.js +0 -20
- package/dist/chunk-PWNNSGFL.js.map +0 -1
- package/dist/chunk-Q2PGZVOT.js +0 -36
- package/dist/chunk-Q2PGZVOT.js.map +0 -1
- package/dist/chunk-Q2XDMV7U.js +0 -76
- package/dist/chunk-Q2XDMV7U.js.map +0 -1
- package/dist/chunk-QG7FH2FI.js +0 -45
- package/dist/chunk-QG7FH2FI.js.map +0 -1
- package/dist/chunk-R7HUOK2D.js +0 -1914
- package/dist/chunk-R7HUOK2D.js.map +0 -1
- package/dist/chunk-REUYY7G5.js +0 -773
- package/dist/chunk-REUYY7G5.js.map +0 -1
- package/dist/chunk-RHC2Z2HT.js +0 -199
- package/dist/chunk-RHC2Z2HT.js.map +0 -1
- package/dist/chunk-RMCVLIFE.js +0 -23
- package/dist/chunk-RMCVLIFE.js.map +0 -1
- package/dist/chunk-ROZLTXGR.js +0 -234
- package/dist/chunk-ROZLTXGR.js.map +0 -1
- package/dist/chunk-RSS2C2O3.js +0 -17
- package/dist/chunk-RSS2C2O3.js.map +0 -1
- package/dist/chunk-SAGCG5SH.js +0 -355
- package/dist/chunk-SAGCG5SH.js.map +0 -1
- package/dist/chunk-TM6AOUSD.js +0 -40
- package/dist/chunk-TM6AOUSD.js.map +0 -1
- package/dist/chunk-TPK4BYCO.js +0 -970
- package/dist/chunk-TPK4BYCO.js.map +0 -1
- package/dist/chunk-UNQIL4K2.js +0 -34
- package/dist/chunk-UNQIL4K2.js.map +0 -1
- package/dist/chunk-UUG6L75Y.js +0 -47
- package/dist/chunk-UUG6L75Y.js.map +0 -1
- package/dist/chunk-V2SYMV4W.js +0 -114
- package/dist/chunk-V2SYMV4W.js.map +0 -1
- package/dist/chunk-V7EN5CTH.js +0 -130
- package/dist/chunk-V7EN5CTH.js.map +0 -1
- package/dist/chunk-VITKG2HL.js +0 -1125
- package/dist/chunk-VITKG2HL.js.map +0 -1
- package/dist/chunk-VYEWU5LO.js +0 -2631
- package/dist/chunk-VYEWU5LO.js.map +0 -1
- package/dist/chunk-W67QAGSH.js +0 -178
- package/dist/chunk-W67QAGSH.js.map +0 -1
- package/dist/chunk-WWBIN6KV.js +0 -1353
- package/dist/chunk-WWBIN6KV.js.map +0 -1
- package/dist/chunk-X77Z4PFB.js +0 -224
- package/dist/chunk-X77Z4PFB.js.map +0 -1
- package/dist/chunk-X7VG7OTT.js +0 -8
- package/dist/chunk-X7VG7OTT.js.map +0 -1
- package/dist/chunk-XE4K2SGI.js +0 -74
- package/dist/chunk-XE4K2SGI.js.map +0 -1
- package/dist/chunk-YIUG7IJK.js +0 -628
- package/dist/chunk-YIUG7IJK.js.map +0 -1
- package/dist/chunk-YNVN3V4Y.js +0 -13
- package/dist/chunk-YNVN3V4Y.js.map +0 -1
- package/dist/chunk-Z2S54IZX.js +0 -198
- package/dist/chunk-Z2S54IZX.js.map +0 -1
- package/dist/chunk-ZR6AH25Z.js +0 -17
- package/dist/chunk-ZR6AH25Z.js.map +0 -1
- package/dist/dialog-SPM3DTTI.js +0 -17
- package/dist/dialog-SPM3DTTI.js.map +0 -1
- package/dist/dropdown-menu-HMTWKWGK.js +0 -21
- package/dist/dropdown-menu-HMTWKWGK.js.map +0 -1
- package/dist/input-BH4P4S26.js +0 -6
- package/dist/input-BH4P4S26.js.map +0 -1
- package/dist/label-5Z4Q6VER.js +0 -8
- package/dist/label-5Z4Q6VER.js.map +0 -1
- package/dist/popover-IFOUXYLI.js +0 -18
- package/dist/popover-IFOUXYLI.js.map +0 -1
- package/dist/scroll-area-DJXNW6QX.js +0 -14
- package/dist/scroll-area-DJXNW6QX.js.map +0 -1
- package/dist/select-FZ277C3G.js +0 -22
- package/dist/select-FZ277C3G.js.map +0 -1
- package/dist/separator-BTMLN4NB.js +0 -8
- package/dist/separator-BTMLN4NB.js.map +0 -1
- package/dist/skeleton-DXIWBH4W.js +0 -6
- package/dist/skeleton-DXIWBH4W.js.map +0 -1
- package/dist/switch-4MCXIZBY.js +0 -13
- package/dist/switch-4MCXIZBY.js.map +0 -1
- package/dist/tabs-O7AW3APK.js +0 -17
- package/dist/tabs-O7AW3APK.js.map +0 -1
- package/dist/textarea-IB5WAFDO.js +0 -6
- package/dist/textarea-IB5WAFDO.js.map +0 -1
- package/dist/toggle-XVPPG6P4.js +0 -10
- package/dist/toggle-XVPPG6P4.js.map +0 -1
- package/dist/tooltip-JICZTD4F.js +0 -18
- package/dist/tooltip-JICZTD4F.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/audio/hooks/useRunSpeechCues.ts","../src/cognition/types.ts","../src/cognition/reducers.ts","../src/cognition/controller.ts","../src/cognition/hooks/useCognition.ts","../src/audio/types.ts","../src/audio/planner.ts","../src/audio/schema.ts","../src/audio/hooks/useAudioPlayer.ts","../src/audio/hooks/useBargeIn.ts","../src/audio/hooks/useSpeechSynthesis.ts","../src/audio/hooks/useCognitionSpeech.ts"],"names":["useRef","useEffect","clamp01","useState","useCallback"],"mappings":"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","file":"chunk-TPK4BYCO.js","sourcesContent":["import { useEffect, useRef } from 'react';\nimport { useRunStream } from '../../hooks/useRunStream.js';\nimport type { RunStatus } from '../../protocol/types.js';\nimport type { OverlayToken } from '../overlay.js';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface RunSpeechCueMap {\n onStart?: OverlayToken;\n onComplete?: OverlayToken;\n onFail?: OverlayToken;\n onCancel?: OverlayToken;\n}\n\nexport interface UseRunSpeechCuesOptions {\n runId: string | null;\n enabled?: boolean;\n\n /**\n * Called with the selected overlay token. Typical implementation calls\n * `overlay.speakToken(token, { runId })`.\n */\n emit: (token: OverlayToken, args: { runId: string; status: RunStatus }) => void | Promise<void>;\n\n cues?: RunSpeechCueMap;\n\n /**\n * Minimum time between cue emissions (prevents spam on flappy status updates).\n */\n cooldownMs?: number;\n}\n\n// =============================================================================\n// Defaults\n// =============================================================================\n\nexport const DEFAULT_RUN_SPEECH_CUES: Required<RunSpeechCueMap> = {\n onStart: 'hold',\n onComplete: 'done',\n onFail: 'error',\n onCancel: 'warning',\n};\n\n// =============================================================================\n// Hook\n// =============================================================================\n\nexport function useRunSpeechCues(options: UseRunSpeechCuesOptions): void {\n const { runId, enabled = true, emit, cues, cooldownMs = 800 } = options;\n\n const { status } = useRunStream(runId);\n\n const prevStatusRef = useRef<RunStatus | null>(null);\n const lastEmitAtRef = useRef<number>(0);\n\n useEffect(() => {\n if (!enabled) return;\n if (!runId) return;\n\n const prev = prevStatusRef.current;\n prevStatusRef.current = status;\n\n if (prev === status) return;\n\n const now = Date.now();\n if (now - lastEmitAtRef.current < cooldownMs) return;\n\n const cueMap = { ...DEFAULT_RUN_SPEECH_CUES, ...(cues ?? {}) };\n\n let token: OverlayToken | null = null;\n if (status === 'running') token = cueMap.onStart;\n if (status === 'completed') token = cueMap.onComplete;\n if (status === 'failed') token = cueMap.onFail;\n if (status === 'cancelled') token = cueMap.onCancel;\n\n if (!token) return;\n\n lastEmitAtRef.current = now;\n void emit(token, { runId, status });\n }, [enabled, runId, status, emit, cues, cooldownMs]);\n}\n\n","import type { AVO } from '../emotion/types.js';\n\n// =============================================================================\n// Cognitive Mode\n// =============================================================================\n\nexport type CognitiveMode =\n | 'idle'\n | 'listening'\n | 'deliberating'\n | 'acting'\n | 'explaining'\n | 'recovering'\n | 'blocked';\n\nexport type CognitiveSubmode =\n | 'reading'\n | 'searching'\n | 'verifying'\n | 'waiting'\n | 'writing'\n | 'tool_call';\n\n// =============================================================================\n// Continuous Signals (all normalized 0..1)\n// =============================================================================\n\nexport interface CognitionSignals {\n attention: number;\n workload: number;\n timePressure: number;\n planDrift: number;\n costPressure: number;\n risk: number;\n uncertainty: number;\n confidence: number;\n errorStress: number;\n}\n\n// =============================================================================\n// Persona Signals\n// =============================================================================\n\nexport interface PersonaSignals {\n personaAnchor: number;\n personaDriftRisk: number;\n personaStyle?: string[];\n}\n\n// =============================================================================\n// Dynamics (kernel integration)\n// =============================================================================\n\nexport interface TrapWarning {\n stateId: string;\n reason: string;\n recommendation: string;\n severity?: 'info' | 'warning' | 'danger';\n}\n\nexport interface DetailedBalance {\n chi2PerNdf: number;\n passed: boolean;\n threshold: number;\n}\n\nexport interface DynamicsState {\n potentialV?: number;\n actionRate?: number;\n detailedBalance?: DetailedBalance;\n traps?: TrapWarning[];\n}\n\n// =============================================================================\n// Personality + Policy (cockpit integration)\n// =============================================================================\n\nexport interface PersonalityConfig {\n style: 'professional' | 'casual' | 'terse' | 'verbose';\n riskTolerance: 'conservative' | 'moderate' | 'aggressive';\n autonomy: 'low' | 'medium' | 'high' | 'full';\n}\n\nexport interface PolicyConfig {\n safetyMode: boolean;\n trustTier?: string;\n}\n\n// =============================================================================\n// Evidence (verification-first)\n// =============================================================================\n\nexport type EvidenceRef =\n | { type: 'run'; runId: string }\n | { type: 'run_receipt'; receiptHash: string }\n | { type: 'artifact'; path: string; digest?: string }\n | { type: 'ui'; componentId: string; note?: string };\n\n// =============================================================================\n// Full Cognition State\n// =============================================================================\n\nexport interface CognitionState extends CognitionSignals, PersonaSignals {\n mode: CognitiveMode;\n submode?: CognitiveSubmode;\n focusRunId?: string;\n\n dynamics?: DynamicsState;\n personality?: PersonalityConfig;\n policy?: PolicyConfig;\n\n moodAVO: AVO;\n emotionAVO: AVO;\n}\n\n// =============================================================================\n// Cognition Events\n// =============================================================================\n\nexport type CognitionEvent =\n | { type: 'ui.input_received'; intensity?: number }\n | { type: 'ui.user_idle' }\n | { type: 'ui.interrupt'; intensity?: number }\n | { type: 'run.event'; runId: string; status: string; progress?: number }\n | { type: 'run.started'; runId: string }\n | { type: 'run.completed'; runId: string; success: boolean }\n | { type: 'intensity.update'; values: Partial<CognitionSignals> }\n | { type: 'signals.update'; signals: Partial<CognitionSignals> }\n | { type: 'dynamics.update'; dynamics: DynamicsState }\n | { type: 'policy.update'; policy?: PolicyConfig; personality?: PersonalityConfig }\n | { type: 'text.user_message'; text: string; categories?: string[] }\n | { type: 'tick'; deltaMs: number };\n\n// =============================================================================\n// Cognition Snapshot (serialization)\n// =============================================================================\n\nexport interface CognitionSnapshot {\n version: '1.0';\n timestamp: number;\n state: CognitionState;\n recentEvents?: Array<{ t: number; event: CognitionEvent }>;\n}\n\n// =============================================================================\n// Helpers\n// =============================================================================\n\nexport function clamp01(value: number): number {\n return Math.max(0, Math.min(1, value));\n}\n\nconst DEFAULT_AVO: AVO = { arousal: 0.25, valence: 0.6, openness: 0.35 };\n\nexport function createInitialCognitionState(\n overrides?: Partial<CognitionState>\n): CognitionState {\n return {\n mode: 'idle',\n attention: 0.3,\n workload: 0,\n timePressure: 0,\n planDrift: 0,\n costPressure: 0,\n risk: 0,\n uncertainty: 0.2,\n confidence: 0.8,\n errorStress: 0,\n personaAnchor: 1,\n personaDriftRisk: 0,\n moodAVO: { ...DEFAULT_AVO },\n emotionAVO: { ...DEFAULT_AVO },\n ...overrides,\n };\n}\n","// packages/bb-ui/src/cognition/reducers.ts\n\n/**\n * Cognition State Reducers\n *\n * Pure functions for updating cognition state based on events and time decay.\n */\n\nimport type {\n CognitionState,\n CognitionEvent,\n CognitiveMode,\n CognitionSignals,\n DynamicsState,\n PolicyConfig,\n PersonalityConfig,\n} from './types.js';\nimport { clamp01 } from './types.js';\n\n/**\n * Trigger types that cause mode transitions\n */\nexport type CognitionTrigger =\n | 'ui.input_received'\n | 'ui.user_idle'\n | 'ui.interrupt'\n | 'run.started'\n | 'run.completed'\n | 'run.event';\n\n/**\n * Maps trigger events to resulting cognitive modes\n */\nexport const MODE_TRANSITION_MAP: Record<CognitionTrigger, CognitiveMode> = {\n 'ui.input_received': 'listening',\n 'ui.user_idle': 'idle',\n 'ui.interrupt': 'listening',\n 'run.started': 'deliberating',\n 'run.completed': 'idle',\n 'run.event': 'deliberating',\n};\n\n/**\n * Decay rates per second for various signals\n */\nexport const DECAY_RATES: Record<'errorStress' | 'timePressure' | 'planDrift', number> = {\n errorStress: 0.1, // Decays 10% per second\n timePressure: 0.05, // Decays 5% per second\n planDrift: 0.08, // Decays 8% per second\n};\n\n/**\n * Reduce signals from a signals.update event\n */\nfunction reduceSignals(\n state: CognitionState,\n signals: Partial<CognitionSignals>\n): CognitionState {\n return {\n ...state,\n attention: signals.attention !== undefined ? clamp01(signals.attention) : state.attention,\n workload: signals.workload !== undefined ? clamp01(signals.workload) : state.workload,\n risk: signals.risk !== undefined ? clamp01(signals.risk) : state.risk,\n timePressure: signals.timePressure !== undefined ? clamp01(signals.timePressure) : state.timePressure,\n errorStress: signals.errorStress !== undefined ? clamp01(signals.errorStress) : state.errorStress,\n planDrift: signals.planDrift !== undefined ? clamp01(signals.planDrift) : state.planDrift,\n costPressure: signals.costPressure !== undefined ? clamp01(signals.costPressure) : state.costPressure,\n uncertainty: signals.uncertainty !== undefined ? clamp01(signals.uncertainty) : state.uncertainty,\n confidence: signals.confidence !== undefined ? clamp01(signals.confidence) : state.confidence,\n };\n}\n\n/**\n * Reduce dynamics state update\n */\nfunction reduceDynamicsUpdate(\n state: CognitionState,\n dynamics: DynamicsState\n): CognitionState {\n return {\n ...state,\n dynamics,\n };\n}\n\n/**\n * Reduce policy/personality update\n */\nfunction reducePolicyUpdate(\n state: CognitionState,\n policy?: PolicyConfig,\n personality?: PersonalityConfig\n): CognitionState {\n return {\n ...state,\n policy: policy ?? state.policy,\n personality: personality ?? state.personality,\n };\n}\n\n/**\n * Reduce mode transitions based on events\n */\nfunction reduceModeTransition(\n state: CognitionState,\n event: CognitionEvent\n): CognitionState {\n const trigger = event.type as CognitionTrigger;\n const newMode = MODE_TRANSITION_MAP[trigger];\n\n if (!newMode) {\n return state;\n }\n\n let focusRunId = state.focusRunId;\n let errorStress = state.errorStress;\n let mode = newMode;\n\n // Handle run-related events\n if (event.type === 'run.started') {\n focusRunId = event.runId;\n } else if (event.type === 'run.completed') {\n focusRunId = undefined;\n if (!event.success) {\n errorStress = clamp01(state.errorStress + 0.2);\n mode = 'recovering';\n }\n } else if (event.type === 'run.event') {\n focusRunId = event.runId;\n }\n\n return {\n ...state,\n mode,\n focusRunId,\n errorStress,\n };\n}\n\n/**\n * Apply exponential decay to time-based signals\n */\nexport function reduceDecay(\n state: CognitionState,\n deltaMs: number\n): CognitionState {\n const deltaSec = deltaMs / 1000;\n\n // Exponential decay: value * e^(-rate * time)\n const errorStress = clamp01(\n state.errorStress * Math.exp(-DECAY_RATES.errorStress * deltaSec)\n );\n const timePressure = clamp01(\n state.timePressure * Math.exp(-DECAY_RATES.timePressure * deltaSec)\n );\n const planDrift = clamp01(\n state.planDrift * Math.exp(-DECAY_RATES.planDrift * deltaSec)\n );\n\n return {\n ...state,\n errorStress,\n timePressure,\n planDrift,\n };\n}\n\n/**\n * Main event reducer - handles all cognition events\n */\nexport function reduceEvent(\n state: CognitionState,\n event: CognitionEvent\n): CognitionState {\n switch (event.type) {\n case 'signals.update':\n return reduceSignals(state, event.signals);\n\n case 'intensity.update':\n return reduceSignals(state, event.values);\n\n case 'dynamics.update':\n return reduceDynamicsUpdate(state, event.dynamics);\n\n case 'policy.update':\n return reducePolicyUpdate(state, event.policy, event.personality);\n\n case 'tick':\n return reduceDecay(state, event.deltaMs);\n\n case 'ui.input_received':\n case 'ui.user_idle':\n case 'ui.interrupt':\n case 'run.started':\n case 'run.completed':\n case 'run.event':\n return reduceModeTransition(state, event);\n\n case 'text.user_message': {\n // Text messages transition to listening mode and update persona drift risk\n // based on message categories per spec section 7.5\n const categories = event.categories ?? [];\n const driftRisk = categories.includes('meta_reflection')\n ? 0.3\n : categories.includes('vulnerable_disclosure')\n ? 0.4\n : 0;\n\n // Exponential smoothing: 70% previous, 30% new\n const newPersonaDriftRisk = clamp01(\n state.personaDriftRisk * 0.7 + driftRisk * 0.3\n );\n\n return {\n ...state,\n mode: 'listening',\n personaDriftRisk: newPersonaDriftRisk,\n };\n }\n\n default: {\n // Exhaustive check - TypeScript will error if we miss a case\n const _exhaustive: never = event;\n return state;\n }\n }\n}\n","// packages/bb-ui/src/cognition/controller.ts\n\n/**\n * CognitionController manages the cognitive state lifecycle for the Glyph character.\n *\n * It handles:\n * - Cognitive mode transitions (idle, listening, deliberating, acting, etc.)\n * - Continuous signal processing (attention, workload, risk, etc.)\n * - Event-driven state changes from UI and kernel events\n * - Emotion bridge (mood and emotion AVO dimensions)\n * - Time-based decay of stress signals\n */\n\nimport type { AVO, AnchorState } from '../emotion/types.js';\nimport type {\n CognitionState,\n CognitionEvent,\n CognitiveMode,\n} from './types.js';\nimport { createInitialCognitionState } from './types.js';\nimport { reduceEvent, reduceDecay } from './reducers.js';\n\n// =============================================================================\n// Mode Mappings\n// =============================================================================\n\n/**\n * Maps cognitive modes to emotion anchor states for visual representation\n */\nexport const MODE_TO_ANCHOR: Record<CognitiveMode, AnchorState> = {\n idle: 'idle',\n listening: 'listening',\n deliberating: 'thinking',\n acting: 'focused',\n explaining: 'explaining',\n recovering: 'recovering',\n blocked: 'concerned',\n};\n\n/**\n * Default AVO values for each cognitive mode\n * These are the target emotional states for each mode\n */\nexport const MODE_TO_AVO: Record<CognitiveMode, AVO> = {\n idle: { arousal: 0.25, valence: 0.60, openness: 0.35 },\n listening: { arousal: 0.45, valence: 0.70, openness: 0.05 },\n deliberating: { arousal: 0.60, valence: 0.60, openness: 0.40 },\n acting: { arousal: 0.70, valence: 0.70, openness: 0.50 },\n explaining: { arousal: 0.55, valence: 0.80, openness: 0.85 },\n recovering: { arousal: 0.40, valence: 0.45, openness: 0.40 },\n blocked: { arousal: 0.55, valence: 0.30, openness: 0.30 },\n};\n\n// =============================================================================\n// Types\n// =============================================================================\n\ntype EventHandler<T> = (data: T) => void;\n\nexport interface CognitionControllerEvents {\n /** Emitted when any state change occurs */\n change: CognitionState;\n /** Emitted when mode changes */\n modeChange: { from: CognitiveMode; to: CognitiveMode };\n}\n\nexport interface CognitionControllerOptions {\n /** Initial state overrides */\n initial?: Partial<CognitionState>;\n}\n\nexport interface EmotionTarget {\n /** The anchor state name for the current mode */\n anchor: AnchorState;\n /** The target AVO values adjusted by signals */\n avo: AVO;\n}\n\n/**\n * CognitionController manages the cognitive state lifecycle for the Glyph character.\n */\nexport class CognitionController {\n private _state: CognitionState;\n private _listeners: Map<keyof CognitionControllerEvents, Set<EventHandler<unknown>>> = new Map();\n private _disposed: boolean = false;\n\n constructor(options: CognitionControllerOptions = {}) {\n this._state = createInitialCognitionState(options.initial);\n }\n\n /**\n * Get current cognition state\n */\n getState(): CognitionState {\n return { ...this._state };\n }\n\n /**\n * Get the emotion target for the current cognitive state\n * Returns anchor state and AVO values adjusted by signals\n */\n getEmotionTarget(): EmotionTarget {\n const anchor = MODE_TO_ANCHOR[this._state.mode];\n const baseAVO = MODE_TO_AVO[this._state.mode];\n\n // Adjust AVO based on signals\n const avo = this._adjustAVOBySignals(baseAVO);\n\n return { anchor, avo };\n }\n\n /**\n * Get emotion bridge - derives anchor and AVO from cognitive state\n * @deprecated Use getEmotionTarget() instead\n */\n getEmotionBridge(): { anchor?: AnchorState; avo?: AVO } {\n const target = this.getEmotionTarget();\n return { anchor: target.anchor, avo: target.avo };\n }\n\n /**\n * Handle a cognition event and update state\n */\n handleEvent(event: CognitionEvent): void {\n if (this._disposed) return;\n\n const prevMode = this._state.mode;\n this._state = reduceEvent(this._state, event);\n\n if (this._state.mode !== prevMode) {\n this._emitEvent('modeChange', { from: prevMode, to: this._state.mode });\n }\n\n this._emitEvent('change', this._state);\n }\n\n /**\n * Process an event and update state\n * @deprecated Use handleEvent() instead\n */\n emit(event: CognitionEvent): void {\n this.handleEvent(event);\n }\n\n /**\n * Update tick - call each frame with delta time in milliseconds\n * Applies time-based decay to stress signals\n */\n tick(deltaMs: number): void {\n if (this._disposed) return;\n\n const prevState = this._state;\n this._state = reduceDecay(this._state, deltaMs);\n\n // Only emit change if state actually changed\n if (\n prevState.errorStress !== this._state.errorStress ||\n prevState.timePressure !== this._state.timePressure ||\n prevState.planDrift !== this._state.planDrift\n ) {\n this._emitEvent('change', this._state);\n }\n }\n\n /**\n * Subscribe to controller events\n * Returns unsubscribe function\n */\n on<K extends keyof CognitionControllerEvents>(\n event: K,\n handler: EventHandler<CognitionControllerEvents[K]>\n ): () => void {\n if (!this._listeners.has(event)) {\n this._listeners.set(event, new Set());\n }\n this._listeners.get(event)!.add(handler as EventHandler<unknown>);\n\n return () => {\n this._listeners.get(event)?.delete(handler as EventHandler<unknown>);\n };\n }\n\n /**\n * Dispose controller and clean up resources\n */\n dispose(): void {\n this._disposed = true;\n this._listeners.clear();\n }\n\n /**\n * Adjust AVO values based on current signal levels\n */\n private _adjustAVOBySignals(baseAVO: AVO): AVO {\n const { errorStress, workload, timePressure, uncertainty, confidence, personaDriftRisk } = this._state;\n\n // Arousal increases with workload, time pressure, and error stress\n const arousalBoost = (workload * 0.2) + (timePressure * 0.15) + (errorStress * 0.1);\n\n // Valence decreases with error stress and uncertainty\n const valenceDrops = (errorStress * 0.3) + (uncertainty * 0.15);\n const valenceBoost = (confidence - 0.5) * 0.2; // Confidence above 0.5 boosts valence\n\n // Openness decreases with persona drift risk (more grounded when drift risk is high)\n // Per spec section 7.6: high drift risk should reduce openness to signal groundedness\n const opennessDrop = personaDriftRisk * 0.3;\n\n return {\n arousal: Math.max(0, Math.min(1, baseAVO.arousal + arousalBoost)),\n valence: Math.max(0, Math.min(1, baseAVO.valence - valenceDrops + valenceBoost)),\n openness: Math.max(0, Math.min(1, baseAVO.openness - opennessDrop)),\n };\n }\n\n private _emitEvent<K extends keyof CognitionControllerEvents>(\n event: K,\n data: CognitionControllerEvents[K]\n ): void {\n this._listeners.get(event)?.forEach((handler) => handler(data));\n }\n}\n","'use client';\n\nimport { useState, useEffect, useCallback, useRef } from 'react';\nimport type { AVO, AnchorState } from '../../emotion/types.js';\nimport type { CognitionState, CognitionEvent } from '../types.js';\nimport { CognitionController, type CognitionControllerOptions, type EmotionTarget } from '../controller.js';\n\nexport interface UseCognitionOptions extends CognitionControllerOptions {\n onChange?: (state: CognitionState) => void;\n autoTick?: boolean;\n}\n\nexport interface UseCognitionResult {\n state: CognitionState;\n emotion: EmotionTarget;\n handleEvent: (event: CognitionEvent) => void;\n tick: (deltaMs: number) => void;\n /** @deprecated Use handleEvent instead */\n emit: (event: CognitionEvent) => void;\n}\n\n/**\n * React hook for managing Glyph cognition state.\n *\n * Creates a CognitionController and provides reactive state updates.\n * Automatically handles RAF-based animation when autoTick is true (default).\n *\n * @example\n * ```tsx\n * const { state, emotion, emit, tick } = useCognition({\n * initial: { mode: 'idle' },\n * onChange: (state) => console.log('Cognition changed:', state),\n * });\n *\n * // Handle agent events\n * emit({ type: 'run.started', runId: 'r1' });\n *\n * // Access emotion bridge for rendering\n * console.log(emotion.anchor, emotion.avo);\n * ```\n */\nexport function useCognition(options: UseCognitionOptions = {}): UseCognitionResult {\n const { initial, onChange, autoTick = true } = options;\n\n // Create controller ref (stable across renders)\n const controllerRef = useRef<CognitionController | null>(null);\n\n if (!controllerRef.current) {\n controllerRef.current = new CognitionController({ initial });\n }\n\n const controller = controllerRef.current;\n\n // State for React reactivity\n const [state, setState] = useState<CognitionState>(controller.getState());\n const [emotion, setEmotion] = useState<EmotionTarget>(\n controller.getEmotionTarget()\n );\n\n // Store onChange in ref to avoid effect dependency changes\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n // Subscribe to controller events\n useEffect(() => {\n const unsub = controller.on('change', (newState) => {\n setState({ ...newState });\n setEmotion(controller.getEmotionTarget());\n onChangeRef.current?.(newState);\n });\n\n return () => {\n unsub();\n };\n }, [controller]);\n\n // Auto-tick with RAF\n useEffect(() => {\n if (!autoTick) return;\n\n let lastTime = performance.now();\n let rafId: number;\n\n const tickFn = (time: number) => {\n const delta = time - lastTime;\n lastTime = time;\n\n controller.tick(delta);\n\n rafId = requestAnimationFrame(tickFn);\n };\n\n rafId = requestAnimationFrame(tickFn);\n\n return () => {\n cancelAnimationFrame(rafId);\n };\n }, [controller, autoTick]);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n controller.dispose();\n };\n }, [controller]);\n\n // Stable callbacks\n const handleEvent = useCallback(\n (event: CognitionEvent) => {\n controller.handleEvent(event);\n },\n [controller]\n );\n\n const tick = useCallback(\n (deltaMs: number) => {\n controller.tick(deltaMs);\n },\n [controller]\n );\n\n // Deprecated alias for backwards compatibility\n const emit = handleEvent;\n\n return {\n state,\n emotion,\n handleEvent,\n tick,\n emit,\n };\n}\n","import type { AVO } from '../emotion/types.js';\n\n// =============================================================================\n// Core Types\n// =============================================================================\n\nexport type AudioFormat = 'wav' | 'pcm_s16le' | 'opus' | 'mp3' | 'flac';\n\nexport type VoiceLicenseCategory = 'cc0' | 'cc-by' | 'cc-by-nc' | 'custom' | 'unknown';\n\nexport const DEFAULT_TARGET_AVO: AVO = {\n // Match the emotion system's \"idle\" anchor for a stable neutral baseline.\n arousal: 0.25,\n valence: 0.6,\n openness: 0.35,\n};\n\nexport interface VoiceCatalogEntry {\n voiceId: string;\n displayName?: string;\n language?: string;\n tags?: string[];\n licenseCategory: VoiceLicenseCategory;\n licenseText?: string;\n source?: string;\n}\n\nexport interface VoiceCatalog {\n get: (voiceId: string) => VoiceCatalogEntry | null;\n list: () => VoiceCatalogEntry[];\n}\n\n// =============================================================================\n// Policy\n// =============================================================================\n\nexport interface AudioPolicy {\n safetyMode: boolean;\n trustTier?: string;\n voiceCloningAllowed: boolean;\n\n /**\n * If true, callers should avoid playing unverified audio.\n * Typically derived from trust tier and safety mode.\n */\n requireProofBeforePlayback?: boolean;\n\n /**\n * Optional allowlist; if set, speech plans must use one of these voice IDs.\n */\n allowedVoiceIds?: string[];\n}\n\n// =============================================================================\n// Planning + Synthesis\n// =============================================================================\n\nexport type AudioPlannerMode =\n | 'idle'\n | 'listening'\n | 'deliberating'\n | 'acting'\n | 'explaining'\n | 'recovering'\n | 'blocked';\n\nexport interface SpeechControls {\n /**\n * Expressiveness/diversity knob, when supported by the backend.\n * Recommended range: 0..1 (provider may map differently).\n */\n temperature?: number;\n\n /**\n * Decode quality / steps knob, when supported by the backend.\n */\n quality?: number;\n\n /**\n * Free-form provider-specific controls.\n */\n [key: string]: unknown;\n}\n\nexport interface SpeechSynthesisRequest {\n traceId: string;\n runId?: string;\n\n text: string;\n language?: string;\n\n voiceId: string;\n targetAffect: AVO;\n controls?: SpeechControls;\n\n /**\n * Optional client policy context. Including this enables the server to emit a more accurate\n * `AudioProof.manifest.policy` without having to guess.\n */\n policy?: {\n safetyMode: boolean;\n trustTier?: string;\n voiceCloningAllowed: boolean;\n };\n}\n\nexport interface AudioArtifact {\n id: string;\n uri?: string;\n format: AudioFormat;\n sha256: string;\n durationMs: number;\n sampleRateHz?: number;\n channels?: number;\n}\n\nexport interface SpeechSynthesisResult {\n audio: Blob;\n artifact: AudioArtifact;\n proof?: AudioProof;\n}\n\nexport interface SpeechSynthesisProvider {\n providerId: string;\n synthesizeSpeech: (\n request: SpeechSynthesisRequest,\n options?: { signal?: AbortSignal }\n ) => Promise<SpeechSynthesisResult>;\n}\n\nexport interface AudioVerifier {\n verifierId: string;\n verifySpeech: (args: {\n request: SpeechSynthesisRequest;\n result: SpeechSynthesisResult;\n policy: AudioPolicy;\n }) => Promise<AudioProof>;\n}\n\n// =============================================================================\n// AudioProof (verification-first artifact)\n// =============================================================================\n\nexport interface AudioGateResult {\n passed: boolean;\n metrics?: Record<string, unknown>;\n reason?: string;\n}\n\nexport interface AudioGates {\n quality: AudioGateResult;\n semantic: AudioGateResult;\n affect: AudioGateResult;\n\n multimodalConsistency?: AudioGateResult;\n watermark?: AudioGateResult;\n speakerConsistency?: AudioGateResult;\n antiSpoof?: AudioGateResult;\n mos?: AudioGateResult;\n safetyText?: AudioGateResult;\n safetyAudio?: AudioGateResult;\n}\n\nexport interface EvidenceRef {\n type: 'run' | 'run_receipt' | 'artifact' | 'ui';\n runId?: string;\n receiptHash?: string;\n path?: string;\n digest?: string;\n componentId?: string;\n note?: string;\n}\n\nexport interface AudioProof {\n version: '1.0';\n createdAt: string;\n\n manifest: {\n traceId?: string;\n runId?: string;\n text: string;\n language?: string;\n targetAffect: AVO;\n policy: {\n safetyMode: boolean;\n trustTier?: string;\n voiceCloningAllowed: boolean;\n };\n cognitionSnapshot?: {\n snapshotVersion?: string;\n snapshotId?: string;\n [key: string]: unknown;\n };\n };\n\n proof: {\n synthesis: {\n providerId: string;\n model: {\n id: string;\n revision?: string;\n sha256?: string;\n };\n voice: {\n voiceId: string;\n licenseCategory: VoiceLicenseCategory;\n licenseText?: string;\n source?: string;\n };\n controls?: SpeechControls;\n seed?: number;\n };\n\n attempts?: Array<{\n attempt: number;\n artifactRef: string;\n notes?: string;\n gates: AudioGates;\n }>;\n\n artifacts: AudioArtifact[];\n gates: AudioGates;\n evidence?: EvidenceRef[];\n };\n\n verdict: {\n passed: boolean;\n reason?: string;\n score?: number;\n };\n}\n\n// =============================================================================\n// Helpers\n// =============================================================================\n\nexport function clamp01(value: number): number {\n return Math.max(0, Math.min(1, value));\n}\n\nexport function createTraceId(): string {\n if (typeof crypto !== 'undefined' && 'randomUUID' in crypto) {\n return crypto.randomUUID();\n }\n return `trace_${Date.now()}_${Math.random().toString(16).slice(2)}`;\n}\n","import type { AVO } from '../emotion/types.js';\nimport type { CognitionState } from '../cognition/types.js';\nimport type {\n AudioPolicy,\n AudioPlannerMode,\n SpeechControls,\n SpeechSynthesisRequest,\n VoiceCatalog,\n} from './types.js';\nimport { clamp01, createTraceId, DEFAULT_TARGET_AVO } from './types.js';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface AudioPlannerSignals {\n mode?: AudioPlannerMode;\n personaDriftRisk?: number;\n confidence?: number;\n risk?: number;\n}\n\nexport interface AudioPlannerInput {\n text: string;\n language?: string;\n runId?: string;\n\n targetAffect?: AVO;\n\n policy: AudioPolicy;\n voices: VoiceCatalog;\n\n signals?: AudioPlannerSignals;\n defaults?: {\n voiceId?: string;\n groundedVoiceTag?: string;\n defaultVoiceTag?: string;\n temperature?: number;\n };\n}\n\n// =============================================================================\n// Planning Helpers\n// =============================================================================\n\nfunction pickFirstAllowedVoiceId(voices: VoiceCatalog, allowedVoiceIds?: string[]): string | null {\n const list = voices.list();\n for (const entry of list) {\n if (!allowedVoiceIds || allowedVoiceIds.includes(entry.voiceId)) {\n return entry.voiceId;\n }\n }\n return null;\n}\n\nfunction pickVoiceId(args: {\n voices: VoiceCatalog;\n allowedVoiceIds?: string[];\n preferredVoiceId?: string;\n requiredTag?: string;\n}): string | null {\n const { voices, allowedVoiceIds, preferredVoiceId, requiredTag } = args;\n\n if (preferredVoiceId) {\n const entry = voices.get(preferredVoiceId);\n if (entry && (!allowedVoiceIds || allowedVoiceIds.includes(entry.voiceId))) {\n if (!requiredTag || (entry.tags ?? []).includes(requiredTag)) {\n return entry.voiceId;\n }\n }\n }\n\n for (const entry of voices.list()) {\n if (allowedVoiceIds && !allowedVoiceIds.includes(entry.voiceId)) continue;\n if (requiredTag && !(entry.tags ?? []).includes(requiredTag)) continue;\n return entry.voiceId;\n }\n\n return null;\n}\n\nfunction stripExcessPunctuation(text: string): string {\n return (\n text\n // Collapse repeated punctuation which can cause prosody weirdness.\n .replace(/[!?]{2,}/g, (m) => m[0] ?? '!')\n .replace(/\\.{3,}/g, '…')\n );\n}\n\nfunction clampTextForSafetyMode(text: string): string {\n // Keep semantics unchanged; only reduce overly-emphatic punctuation.\n return stripExcessPunctuation(text).replace(/!/g, '.');\n}\n\n// =============================================================================\n// Public API\n// =============================================================================\n\n/**\n * Default planner for Architecture A (modular pipeline).\n *\n * Produces a `SpeechSynthesisRequest` that a self-hosted backend can execute.\n */\nexport function planSpeech(input: AudioPlannerInput): SpeechSynthesisRequest {\n const {\n text,\n language,\n runId,\n targetAffect,\n policy,\n voices,\n signals,\n defaults,\n } = input;\n\n const personaDriftRisk = clamp01(signals?.personaDriftRisk ?? 0);\n const confidence = clamp01(signals?.confidence ?? 0.8);\n const risk = clamp01(signals?.risk ?? (1 - confidence));\n\n const groundedVoiceTag = defaults?.groundedVoiceTag ?? 'grounded';\n const defaultVoiceTag = defaults?.defaultVoiceTag ?? 'default';\n\n const requireGrounded =\n policy.safetyMode || personaDriftRisk >= 0.6 || (risk >= 0.7 && confidence <= 0.5);\n\n const voiceId =\n (requireGrounded\n ? pickVoiceId({\n voices,\n allowedVoiceIds: policy.allowedVoiceIds,\n preferredVoiceId: defaults?.voiceId,\n requiredTag: groundedVoiceTag,\n })\n : pickVoiceId({\n voices,\n allowedVoiceIds: policy.allowedVoiceIds,\n preferredVoiceId: defaults?.voiceId,\n requiredTag: defaultVoiceTag,\n })) ??\n pickVoiceId({\n voices,\n allowedVoiceIds: policy.allowedVoiceIds,\n preferredVoiceId: defaults?.voiceId,\n }) ??\n pickFirstAllowedVoiceId(voices, policy.allowedVoiceIds);\n\n if (!voiceId) {\n throw new Error('No available voices (voice catalog is empty or policy blocks all voices)');\n }\n\n const baseTemperature = clamp01(defaults?.temperature ?? 0.65);\n const temperature = requireGrounded ? Math.min(baseTemperature, 0.25) : baseTemperature;\n\n const controls: SpeechControls = {\n temperature,\n };\n\n const plannedText =\n policy.safetyMode || personaDriftRisk >= 0.7\n ? clampTextForSafetyMode(text)\n : stripExcessPunctuation(text);\n\n return {\n traceId: createTraceId(),\n runId,\n text: plannedText,\n language,\n voiceId,\n targetAffect: targetAffect ?? DEFAULT_TARGET_AVO,\n controls,\n policy: {\n safetyMode: policy.safetyMode,\n trustTier: policy.trustTier,\n voiceCloningAllowed: policy.voiceCloningAllowed,\n },\n };\n}\n\n// =============================================================================\n// CognitionState Integration\n// =============================================================================\n\nexport interface AudioPlannerCognitionInput {\n text: string;\n language?: string;\n runId?: string;\n targetAffect?: AVO;\n cognition: CognitionState;\n policy: AudioPolicy;\n voices: VoiceCatalog;\n defaults?: {\n voiceId?: string;\n groundedVoiceTag?: string;\n defaultVoiceTag?: string;\n temperature?: number;\n };\n}\n\n/**\n * Plan speech from full CognitionState.\n * Extracts relevant signals and delegates to planSpeech.\n */\nexport function planSpeechFromCognition(\n input: AudioPlannerCognitionInput\n): SpeechSynthesisRequest {\n const { cognition, ...rest } = input;\n\n const signals: AudioPlannerSignals = {\n mode: cognition.mode,\n personaDriftRisk: cognition.personaDriftRisk,\n confidence: cognition.confidence,\n risk: cognition.risk,\n };\n\n const targetAffect = rest.targetAffect ?? cognition.emotionAVO;\n\n return planSpeech({\n ...rest,\n targetAffect,\n signals,\n });\n}\n","/**\n * Zod schemas for audio proof validation.\n *\n * This is the runtime counterpart of `docs/schemas/audio-proof.schema.json`.\n */\n\nimport { z } from 'zod';\n\n// =============================================================================\n// Enums\n// =============================================================================\n\nexport const AudioProofVersionSchema = z.enum(['1.0']);\nexport const AudioFormatSchema = z.enum(['wav', 'pcm_s16le', 'opus', 'mp3', 'flac']);\nexport const VoiceLicenseCategorySchema = z.enum(['cc0', 'cc-by', 'cc-by-nc', 'custom', 'unknown']);\n\n// =============================================================================\n// Nested Schemas\n// =============================================================================\n\nexport const AvoSchema = z.object({\n valence: z.number().min(0).max(1),\n arousal: z.number().min(0).max(1),\n openness: z.number().min(0).max(1),\n});\n\nexport const AudioArtifactSchema = z.object({\n id: z.string().min(1),\n uri: z.string().optional(),\n format: AudioFormatSchema,\n sha256: z.string().min(32),\n sampleRateHz: z.number().int().min(8000).optional(),\n channels: z.number().int().min(1).max(8).optional(),\n durationMs: z.number().int().min(1),\n});\n\nexport const AudioGateResultSchema = z.object({\n passed: z.boolean(),\n metrics: z.record(z.string(), z.unknown()).optional(),\n reason: z.string().optional(),\n});\n\nexport const AudioGatesSchema = z.object({\n quality: AudioGateResultSchema,\n semantic: AudioGateResultSchema,\n affect: AudioGateResultSchema,\n\n multimodalConsistency: AudioGateResultSchema.optional(),\n watermark: AudioGateResultSchema.optional(),\n speakerConsistency: AudioGateResultSchema.optional(),\n antiSpoof: AudioGateResultSchema.optional(),\n mos: AudioGateResultSchema.optional(),\n safetyText: AudioGateResultSchema.optional(),\n safetyAudio: AudioGateResultSchema.optional(),\n});\n\nexport const EvidenceRefSchema = z.object({\n type: z.enum(['run', 'run_receipt', 'artifact', 'ui']),\n runId: z.string().optional(),\n receiptHash: z.string().optional(),\n path: z.string().optional(),\n digest: z.string().optional(),\n componentId: z.string().optional(),\n note: z.string().optional(),\n});\n\n// =============================================================================\n// Main Schema\n// =============================================================================\n\nexport const AudioProofSchema = z.object({\n version: AudioProofVersionSchema,\n createdAt: z.string().datetime(),\n\n manifest: z.object({\n traceId: z.string().optional(),\n runId: z.string().optional(),\n text: z.string().min(1),\n language: z.string().optional(),\n targetAffect: AvoSchema,\n policy: z.object({\n safetyMode: z.boolean(),\n trustTier: z.string().optional(),\n voiceCloningAllowed: z.boolean(),\n }),\n cognitionSnapshot: z.record(z.string(), z.unknown()).optional(),\n }),\n\n proof: z.object({\n synthesis: z.object({\n providerId: z.string().min(1),\n model: z.object({\n id: z.string().min(1),\n revision: z.string().optional(),\n sha256: z.string().optional(),\n }),\n voice: z.object({\n voiceId: z.string().min(1),\n licenseCategory: VoiceLicenseCategorySchema,\n licenseText: z.string().optional(),\n source: z.string().optional(),\n }),\n controls: z.record(z.string(), z.unknown()).optional(),\n seed: z.number().int().min(0).optional(),\n }),\n\n attempts: z\n .array(\n z.object({\n attempt: z.number().int().min(1),\n artifactRef: z.string().min(1),\n notes: z.string().optional(),\n gates: AudioGatesSchema,\n })\n )\n .optional(),\n\n artifacts: z.array(AudioArtifactSchema).min(1),\n gates: AudioGatesSchema,\n evidence: z.array(EvidenceRefSchema).optional(),\n }),\n\n verdict: z.object({\n passed: z.boolean(),\n reason: z.string().optional(),\n score: z.number().optional(),\n }),\n});\n\nexport type AudioProofInput = z.input<typeof AudioProofSchema>;\nexport type AudioProofOutput = z.output<typeof AudioProofSchema>;\n\nexport type AudioProofValidationResult =\n | { success: true; data: AudioProofOutput }\n | { success: false; errors: z.ZodError };\n\nexport function validateAudioProof(audioProof: unknown): AudioProofValidationResult {\n const result = AudioProofSchema.safeParse(audioProof);\n if (result.success) {\n return { success: true, data: result.data };\n }\n return { success: false, errors: result.error };\n}\n\n","import { useCallback, useEffect, useRef, useState } from 'react';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface UseAudioPlayerOptions {\n volume?: number;\n onEnded?: () => void;\n onError?: (error: Error) => void;\n}\n\nexport interface UseAudioPlayerReturn {\n isPlaying: boolean;\n error: string | null;\n play: (source: Blob | string) => Promise<void>;\n stop: () => void;\n audioElement: HTMLAudioElement | null;\n}\n\n// =============================================================================\n// Hook\n// =============================================================================\n\nexport function useAudioPlayer(options: UseAudioPlayerOptions = {}): UseAudioPlayerReturn {\n const { volume = 1, onEnded, onError } = options;\n\n const audioRef = useRef<HTMLAudioElement | null>(null);\n const objectUrlRef = useRef<string | null>(null);\n\n const [isPlaying, setIsPlaying] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n // Ensure we have an audio element.\n if (!audioRef.current && typeof Audio !== 'undefined') {\n audioRef.current = new Audio();\n }\n\n const stop = useCallback(() => {\n const audio = audioRef.current;\n if (!audio) return;\n\n try {\n audio.pause();\n audio.currentTime = 0;\n } catch {\n // Ignore.\n } finally {\n setIsPlaying(false);\n }\n }, []);\n\n const play = useCallback(\n async (source: Blob | string) => {\n const audio = audioRef.current;\n if (!audio) {\n throw new Error('Audio playback not supported in this environment');\n }\n\n setError(null);\n\n // Clean up previous object URL.\n if (objectUrlRef.current) {\n URL.revokeObjectURL(objectUrlRef.current);\n objectUrlRef.current = null;\n }\n\n const src = typeof source === 'string' ? source : URL.createObjectURL(source);\n if (typeof source !== 'string') {\n objectUrlRef.current = src;\n }\n\n audio.volume = volume;\n audio.src = src;\n\n try {\n await audio.play();\n setIsPlaying(true);\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Failed to play audio';\n setIsPlaying(false);\n setError(message);\n onError?.(err instanceof Error ? err : new Error(message));\n throw err instanceof Error ? err : new Error(message);\n }\n },\n [volume, onError]\n );\n\n useEffect(() => {\n const audio = audioRef.current;\n if (!audio) return;\n\n const handleEnded = () => {\n setIsPlaying(false);\n onEnded?.();\n };\n\n const handleError = () => {\n setIsPlaying(false);\n const message = 'Audio element error';\n setError(message);\n onError?.(new Error(message));\n };\n\n audio.addEventListener('ended', handleEnded);\n audio.addEventListener('error', handleError);\n\n return () => {\n audio.removeEventListener('ended', handleEnded);\n audio.removeEventListener('error', handleError);\n };\n }, [onEnded, onError]);\n\n useEffect(() => {\n return () => {\n stop();\n if (objectUrlRef.current) {\n URL.revokeObjectURL(objectUrlRef.current);\n objectUrlRef.current = null;\n }\n };\n }, [stop]);\n\n return {\n isPlaying,\n error,\n play,\n stop,\n audioElement: audioRef.current,\n };\n}\n\n","import { useEffect, useRef, useState } from 'react';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface UseBargeInOptions {\n /**\n * Microphone or remote user stream.\n * You must request user consent in the host app (getUserMedia) and pass it in.\n */\n stream: MediaStream | null;\n\n enabled?: boolean;\n\n /**\n * RMS threshold in 0..1.\n * Typical values are small; start around 0.02 and calibrate per environment.\n */\n threshold?: number;\n\n /**\n * Keep \"speaking\" true for this long after signal drops below threshold.\n */\n hangoverMs?: number;\n\n /**\n * Called on the rising edge (silence -> speaking).\n */\n onBargeIn?: () => void;\n}\n\nexport interface UseBargeInReturn {\n isUserSpeaking: boolean;\n levelRms: number;\n}\n\n// =============================================================================\n// Hook\n// =============================================================================\n\nexport function useBargeIn(options: UseBargeInOptions): UseBargeInReturn {\n const { stream, enabled = true, threshold = 0.02, hangoverMs = 250, onBargeIn } = options;\n\n const [isUserSpeaking, setIsUserSpeaking] = useState(false);\n const [levelRms, setLevelRms] = useState(0);\n\n const rafRef = useRef<number | null>(null);\n const lastAboveRef = useRef<number>(0);\n const prevSpeakingRef = useRef(false);\n\n useEffect(() => {\n if (!enabled || !stream) {\n setIsUserSpeaking(false);\n setLevelRms(0);\n return;\n }\n\n if (typeof AudioContext === 'undefined') {\n // Cannot compute RMS without Web Audio; degrade gracefully.\n return;\n }\n\n const audioContext = new AudioContext();\n const source = audioContext.createMediaStreamSource(stream);\n const analyser = audioContext.createAnalyser();\n analyser.fftSize = 2048;\n source.connect(analyser);\n\n const buffer = new Float32Array(analyser.fftSize);\n\n const tick = () => {\n analyser.getFloatTimeDomainData(buffer);\n let sum = 0;\n for (let i = 0; i < buffer.length; i++) {\n const x = buffer[i];\n sum += x * x;\n }\n const rms = Math.sqrt(sum / buffer.length);\n setLevelRms(rms);\n\n const now = performance.now();\n\n if (rms >= threshold) {\n lastAboveRef.current = now;\n }\n\n const speaking = rms >= threshold || now - lastAboveRef.current <= hangoverMs;\n setIsUserSpeaking(speaking);\n\n if (!prevSpeakingRef.current && speaking) {\n onBargeIn?.();\n }\n prevSpeakingRef.current = speaking;\n\n rafRef.current = requestAnimationFrame(tick);\n };\n\n rafRef.current = requestAnimationFrame(tick);\n\n return () => {\n if (rafRef.current) cancelAnimationFrame(rafRef.current);\n rafRef.current = null;\n try {\n source.disconnect();\n analyser.disconnect();\n } catch {\n // Ignore.\n }\n audioContext.close().catch(() => {});\n };\n }, [stream, enabled, threshold, hangoverMs, onBargeIn]);\n\n return { isUserSpeaking, levelRms };\n}\n\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport type { AVO } from '../../emotion/types.js';\nimport { planSpeech, type AudioPlannerSignals } from '../planner.js';\nimport { validateAudioProof } from '../schema.js';\nimport type {\n AudioPolicy,\n AudioProof,\n AudioVerifier,\n SpeechSynthesisProvider,\n SpeechSynthesisRequest,\n SpeechSynthesisResult,\n VoiceCatalog,\n} from '../types.js';\nimport { useAudioPlayer } from './useAudioPlayer.js';\nimport { useBargeIn } from './useBargeIn.js';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface UseSpeechSynthesisOptions {\n provider: SpeechSynthesisProvider;\n verifier?: AudioVerifier;\n\n voices: VoiceCatalog;\n policy: AudioPolicy;\n\n signals?: AudioPlannerSignals;\n defaults?: {\n voiceId?: string;\n groundedVoiceTag?: string;\n defaultVoiceTag?: string;\n temperature?: number;\n };\n\n /**\n * If provided, enables barge-in (user speech cancels synthesis and playback).\n */\n bargeIn?: {\n stream: MediaStream | null;\n threshold?: number;\n hangoverMs?: number;\n };\n\n /**\n * Playback volume 0..1\n */\n volume?: number;\n\n /**\n * Controls when verification happens.\n *\n * - \"before_playback\": verify first; only play if verified (best for high-trust lanes)\n * - \"after_playback\": play immediately; verify in background (best UX when trust allows)\n * - \"never\": do not verify (not recommended)\n *\n * Default: derived from policy (`requireProofBeforePlayback`).\n */\n verificationMode?: 'before_playback' | 'after_playback' | 'never';\n\n onProof?: (proof: AudioProof) => void;\n onBargeIn?: () => void;\n onError?: (error: Error) => void;\n}\n\nexport interface SpeakOptions {\n runId?: string;\n language?: string;\n targetAffect?: AVO;\n}\n\nexport interface UseSpeechSynthesisReturn {\n isSynthesizing: boolean;\n isSpeaking: boolean;\n error: string | null;\n\n lastRequest: SpeechSynthesisRequest | null;\n lastResult: SpeechSynthesisResult | null;\n lastProof: AudioProof | null;\n\n speak: (text: string, options?: SpeakOptions) => Promise<void>;\n cancel: () => void;\n}\n\n// =============================================================================\n// Hook\n// =============================================================================\n\nexport function useSpeechSynthesis(options: UseSpeechSynthesisOptions): UseSpeechSynthesisReturn {\n const {\n provider,\n verifier,\n voices,\n policy,\n signals,\n defaults,\n bargeIn,\n volume = 1,\n verificationMode,\n onProof,\n onBargeIn,\n onError,\n } = options;\n\n const effectiveVerificationMode = useMemo(() => {\n if (verificationMode) return verificationMode;\n if (policy.requireProofBeforePlayback) return 'before_playback';\n if (verifier) return 'after_playback';\n return 'never';\n }, [verificationMode, policy.requireProofBeforePlayback, verifier]);\n\n const abortRef = useRef<AbortController | null>(null);\n\n const [isSynthesizing, setIsSynthesizing] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const [lastRequest, setLastRequest] = useState<SpeechSynthesisRequest | null>(null);\n const [lastResult, setLastResult] = useState<SpeechSynthesisResult | null>(null);\n const [lastProof, setLastProof] = useState<AudioProof | null>(null);\n\n const player = useAudioPlayer({\n volume,\n onError: (err) => {\n setError(err.message);\n onError?.(err);\n },\n });\n\n const bargeInState = useBargeIn({\n stream: bargeIn?.stream ?? null,\n enabled: !!bargeIn?.stream,\n threshold: bargeIn?.threshold,\n hangoverMs: bargeIn?.hangoverMs,\n onBargeIn: () => {\n onBargeIn?.();\n },\n });\n\n const cancel = useCallback(() => {\n abortRef.current?.abort();\n abortRef.current = null;\n setIsSynthesizing(false);\n player.stop();\n }, [player]);\n\n useEffect(() => {\n if (!bargeIn?.stream) return;\n if (!bargeInState.isUserSpeaking) return;\n\n cancel();\n }, [bargeIn?.stream, bargeInState.isUserSpeaking, cancel]);\n\n const speak = useCallback(\n async (text: string, speakOptions?: SpeakOptions) => {\n cancel();\n setError(null);\n setIsSynthesizing(true);\n\n const controller = new AbortController();\n abortRef.current = controller;\n\n try {\n const request = planSpeech({\n text,\n language: speakOptions?.language,\n runId: speakOptions?.runId,\n targetAffect: speakOptions?.targetAffect,\n policy,\n voices,\n signals,\n defaults,\n });\n\n setLastRequest(request);\n\n const result = await provider.synthesizeSpeech(request, { signal: controller.signal });\n setLastResult(result);\n\n // If provider included proof, validate it before trusting it.\n let proof: AudioProof | undefined = result.proof;\n if (proof) {\n const parsed = validateAudioProof(proof);\n if (!parsed.success) {\n throw new Error('Provider returned invalid AudioProof');\n }\n proof = parsed.data as AudioProof;\n }\n\n const verifyNow =\n effectiveVerificationMode === 'before_playback' &&\n (!proof || !proof.verdict?.passed) &&\n !!verifier;\n\n if (verifyNow && verifier) {\n proof = await verifier.verifySpeech({ request, result, policy });\n const parsed = validateAudioProof(proof);\n if (!parsed.success) {\n throw new Error('Verifier returned invalid AudioProof');\n }\n proof = parsed.data as AudioProof;\n }\n\n if (policy.requireProofBeforePlayback && (!proof || proof.verdict.passed !== true)) {\n throw new Error('Playback blocked by policy: missing or failing AudioProof');\n }\n\n // Playback\n await player.play(result.audio);\n\n // Background verification (if allowed).\n if (effectiveVerificationMode === 'after_playback' && verifier && !proof) {\n void (async () => {\n try {\n const p = await verifier.verifySpeech({ request, result, policy });\n const parsed = validateAudioProof(p);\n if (!parsed.success) return;\n setLastProof(parsed.data as AudioProof);\n onProof?.(parsed.data as AudioProof);\n } catch {\n // Ignore background verification errors.\n }\n })();\n }\n\n if (proof) {\n setLastProof(proof);\n onProof?.(proof);\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Speech synthesis failed';\n setError(message);\n onError?.(err instanceof Error ? err : new Error(message));\n throw err instanceof Error ? err : new Error(message);\n } finally {\n setIsSynthesizing(false);\n abortRef.current = null;\n }\n },\n [\n cancel,\n policy,\n voices,\n signals,\n defaults,\n provider,\n verifier,\n effectiveVerificationMode,\n player,\n onProof,\n onError,\n ]\n );\n\n return {\n isSynthesizing,\n isSpeaking: player.isPlaying,\n error,\n\n lastRequest,\n lastResult,\n lastProof,\n\n speak,\n cancel,\n };\n}\n\n","'use client';\n\nimport { useCallback } from 'react';\nimport type { AVO } from '../../emotion/types.js';\nimport type { CognitionState, CognitionEvent } from '../../cognition/types.js';\nimport { useCognition, type UseCognitionOptions } from '../../cognition/hooks/useCognition.js';\nimport type { EmotionTarget } from '../../cognition/controller.js';\nimport { planSpeechFromCognition } from '../planner.js';\nimport type {\n AudioPolicy,\n AudioProof,\n AudioVerifier,\n SpeechSynthesisProvider,\n SpeechSynthesisRequest,\n SpeechSynthesisResult,\n VoiceCatalog,\n} from '../types.js';\nimport { useSpeechSynthesis, type UseSpeechSynthesisOptions } from './useSpeechSynthesis.js';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface UseCognitionSpeechOptions {\n // Speech synthesis options\n provider: SpeechSynthesisProvider;\n verifier?: AudioVerifier;\n voices: VoiceCatalog;\n policy: AudioPolicy;\n volume?: number;\n verificationMode?: 'before_playback' | 'after_playback' | 'never';\n\n // Cognition options\n initialCognition?: Partial<CognitionState>;\n autoTick?: boolean;\n onCognitionChange?: (state: CognitionState) => void;\n\n // Barge-in\n bargeIn?: {\n stream: MediaStream | null;\n threshold?: number;\n hangoverMs?: number;\n };\n\n // Voice defaults\n defaults?: {\n voiceId?: string;\n groundedVoiceTag?: string;\n defaultVoiceTag?: string;\n temperature?: number;\n };\n\n // Callbacks\n onProof?: (proof: AudioProof) => void;\n onBargeIn?: () => void;\n onError?: (error: Error) => void;\n}\n\nexport interface SpeakWithCognitionOptions {\n runId?: string;\n language?: string;\n targetAffect?: AVO;\n}\n\nexport interface UseCognitionSpeechReturn {\n // Cognition\n cognition: CognitionState;\n emotion: EmotionTarget;\n handleCognition: (event: CognitionEvent) => void;\n /** @deprecated Use handleCognition instead */\n emitCognition: (event: CognitionEvent) => void;\n tickCognition: (deltaMs: number) => void;\n\n // Speech\n isSynthesizing: boolean;\n isSpeaking: boolean;\n error: string | null;\n lastRequest: SpeechSynthesisRequest | null;\n lastResult: SpeechSynthesisResult | null;\n lastProof: AudioProof | null;\n\n speak: (text: string, options?: SpeakWithCognitionOptions) => Promise<void>;\n cancel: () => void;\n}\n\n// =============================================================================\n// Hook\n// =============================================================================\n\nexport function useCognitionSpeech(\n options: UseCognitionSpeechOptions\n): UseCognitionSpeechReturn {\n const {\n provider,\n verifier,\n voices,\n policy,\n volume,\n verificationMode,\n initialCognition,\n autoTick = true,\n onCognitionChange,\n bargeIn,\n defaults,\n onProof,\n onBargeIn,\n onError,\n } = options;\n\n // Cognition state\n const cognitionResult = useCognition({\n initial: initialCognition,\n autoTick,\n onChange: onCognitionChange,\n });\n\n // Speech synthesis - uses signals derived from cognition\n const speechResult = useSpeechSynthesis({\n provider,\n verifier,\n voices,\n policy,\n volume,\n verificationMode,\n signals: {\n mode: cognitionResult.state.mode,\n personaDriftRisk: cognitionResult.state.personaDriftRisk,\n confidence: cognitionResult.state.confidence,\n risk: cognitionResult.state.risk,\n },\n defaults,\n bargeIn,\n onProof,\n onBargeIn: () => {\n // On barge-in, emit interrupt to cognition\n cognitionResult.handleEvent({ type: 'ui.interrupt' });\n onBargeIn?.();\n },\n onError,\n });\n\n // Speak using full cognition state\n const speak = useCallback(\n async (text: string, speakOptions?: SpeakWithCognitionOptions) => {\n // Plan using full cognition state\n const request = planSpeechFromCognition({\n text,\n language: speakOptions?.language,\n runId: speakOptions?.runId,\n targetAffect: speakOptions?.targetAffect,\n cognition: cognitionResult.state,\n policy,\n voices,\n defaults,\n });\n\n // Synthesize and play\n await speechResult.speak(text, {\n ...speakOptions,\n targetAffect: request.targetAffect,\n });\n },\n [cognitionResult.state, policy, voices, defaults, speechResult]\n );\n\n return {\n // Cognition\n cognition: cognitionResult.state,\n emotion: cognitionResult.emotion,\n handleCognition: cognitionResult.handleEvent,\n emitCognition: cognitionResult.handleEvent, // deprecated alias\n tickCognition: cognitionResult.tick,\n\n // Speech\n isSynthesizing: speechResult.isSynthesizing,\n isSpeaking: speechResult.isSpeaking,\n error: speechResult.error,\n lastRequest: speechResult.lastRequest,\n lastResult: speechResult.lastResult,\n lastProof: speechResult.lastProof,\n\n speak,\n cancel: speechResult.cancel,\n };\n}\n"]}
|
package/dist/chunk-UNQIL4K2.js
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { Slot } from './chunk-FEW533R2.js';
|
|
2
|
-
import { cn } from './chunk-6RX2WGCO.js';
|
|
3
|
-
import { cva } from 'class-variance-authority';
|
|
4
|
-
import { jsx } from 'react/jsx-runtime';
|
|
5
|
-
|
|
6
|
-
var badgeVariants = cva(
|
|
7
|
-
"inline-flex items-center justify-center rounded-full border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden",
|
|
8
|
-
{
|
|
9
|
-
variants: {
|
|
10
|
-
variant: {
|
|
11
|
-
default: "border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90",
|
|
12
|
-
secondary: "border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90",
|
|
13
|
-
destructive: "border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
|
|
14
|
-
outline: "text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground"
|
|
15
|
-
}
|
|
16
|
-
},
|
|
17
|
-
defaultVariants: {
|
|
18
|
-
variant: "default"
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
);
|
|
22
|
-
function Badge({
|
|
23
|
-
className,
|
|
24
|
-
variant,
|
|
25
|
-
asChild = false,
|
|
26
|
-
...props
|
|
27
|
-
}) {
|
|
28
|
-
const Comp = asChild ? Slot : "span";
|
|
29
|
-
return /* @__PURE__ */ jsx(Comp, { "data-slot": "badge", className: cn(badgeVariants({ variant }), className), ...props });
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
export { Badge, badgeVariants };
|
|
33
|
-
//# sourceMappingURL=chunk-UNQIL4K2.js.map
|
|
34
|
-
//# sourceMappingURL=chunk-UNQIL4K2.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/primitives/ui/badge.tsx"],"names":[],"mappings":";;;;;AAMA,IAAM,aAAA,GAAgB,GAAA;AAAA,EACpB,kZAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,gFAAA;AAAA,QACT,SAAA,EACE,sFAAA;AAAA,QACF,WAAA,EACE,2KAAA;AAAA,QACF,OAAA,EAAS;AAAA;AACX,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS;AAAA;AACX;AAEJ;AAEA,SAAS,KAAA,CAAM;AAAA,EACb,SAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA,GAAU,KAAA;AAAA,EACV,GAAG;AACL,CAAA,EAA8F;AAC5F,EAAA,MAAM,IAAA,GAAO,UAAU,IAAA,GAAO,MAAA;AAE9B,EAAA,uBACE,GAAA,CAAC,IAAA,EAAA,EAAK,WAAA,EAAU,OAAA,EAAQ,WAAW,EAAA,CAAG,aAAA,CAAc,EAAE,OAAA,EAAS,CAAA,EAAG,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AAE7F","file":"chunk-UNQIL4K2.js","sourcesContent":["import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst badgeVariants = cva(\n \"inline-flex items-center justify-center rounded-full border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden\",\n {\n variants: {\n variant: {\n default: \"border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90\",\n secondary:\n \"border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90\",\n destructive:\n \"border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline: \"text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n);\n\nfunction Badge({\n className,\n variant,\n asChild = false,\n ...props\n}: React.ComponentProps<\"span\"> & VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : \"span\";\n\n return (\n <Comp data-slot=\"badge\" className={cn(badgeVariants({ variant }), className)} {...props} />\n );\n}\n\nexport { Badge, badgeVariants };\n"]}
|
package/dist/chunk-UUG6L75Y.js
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { cn } from './chunk-6RX2WGCO.js';
|
|
2
|
-
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
3
|
-
|
|
4
|
-
var BentoGrid = ({
|
|
5
|
-
className,
|
|
6
|
-
children
|
|
7
|
-
}) => {
|
|
8
|
-
return /* @__PURE__ */ jsx(
|
|
9
|
-
"div",
|
|
10
|
-
{
|
|
11
|
-
className: cn(
|
|
12
|
-
"grid md:auto-rows-[18rem] grid-cols-1 md:grid-cols-3 gap-4 max-w-7xl mx-auto ",
|
|
13
|
-
className
|
|
14
|
-
),
|
|
15
|
-
children
|
|
16
|
-
}
|
|
17
|
-
);
|
|
18
|
-
};
|
|
19
|
-
var BentoGridItem = ({
|
|
20
|
-
className,
|
|
21
|
-
title,
|
|
22
|
-
description,
|
|
23
|
-
header,
|
|
24
|
-
icon
|
|
25
|
-
}) => {
|
|
26
|
-
return /* @__PURE__ */ jsxs(
|
|
27
|
-
"div",
|
|
28
|
-
{
|
|
29
|
-
className: cn(
|
|
30
|
-
"row-span-1 rounded-xl group/bento transition duration-200 shadow-[inset_0_1px_0_rgba(255,255,255,0.02)] hover:shadow-[0_0_20px_rgba(34,211,238,0.15)] p-4 bg-[rgba(2,4,10,0.85)] backdrop-blur-xl border border-white/[0.06] justify-between flex flex-col space-y-4",
|
|
31
|
-
className
|
|
32
|
-
),
|
|
33
|
-
children: [
|
|
34
|
-
header,
|
|
35
|
-
/* @__PURE__ */ jsxs("div", { className: "group-hover/bento:translate-x-2 transition duration-200", children: [
|
|
36
|
-
icon,
|
|
37
|
-
/* @__PURE__ */ jsx("div", { className: "font-sans font-bold text-[var(--glia-color-text-primary,#CBD5E1)] mb-2 mt-2", children: title }),
|
|
38
|
-
/* @__PURE__ */ jsx("div", { className: "font-sans font-normal text-[var(--glia-color-text-soft,#64748B)] text-xs", children: description })
|
|
39
|
-
] })
|
|
40
|
-
]
|
|
41
|
-
}
|
|
42
|
-
);
|
|
43
|
-
};
|
|
44
|
-
|
|
45
|
-
export { BentoGrid, BentoGridItem };
|
|
46
|
-
//# sourceMappingURL=chunk-UUG6L75Y.js.map
|
|
47
|
-
//# sourceMappingURL=chunk-UUG6L75Y.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/primitives/organisms/BentoGrid/BentoGrid.tsx"],"names":[],"mappings":";;;AAIO,IAAM,YAAY,CAAC;AAAA,EACxB,SAAA;AAAA,EACA;AACF,CAAA,KAGM;AACJ,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,+EAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEC;AAAA;AAAA,GACH;AAEJ;AAEO,IAAM,gBAAgB,CAAC;AAAA,EAC5B,SAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,KAMM;AACJ,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,sQAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,MAAA;AAAA,wBACD,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yDAAA,EACZ,QAAA,EAAA;AAAA,UAAA,IAAA;AAAA,0BACD,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6EAAA,EACZ,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,0BACA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0EAAA,EACZ,QAAA,EAAA,WAAA,EACH;AAAA,SAAA,EACF;AAAA;AAAA;AAAA,GACF;AAEJ","file":"chunk-UUG6L75Y.js","sourcesContent":["\"use client\";\nimport type { ReactNode } from \"react\";\nimport { cn } from \"../../../lib/utils\";\n\nexport const BentoGrid = ({\n className,\n children,\n}: {\n className?: string;\n children?: ReactNode;\n}) => {\n return (\n <div\n className={cn(\n \"grid md:auto-rows-[18rem] grid-cols-1 md:grid-cols-3 gap-4 max-w-7xl mx-auto \",\n className\n )}\n >\n {children}\n </div>\n );\n};\n\nexport const BentoGridItem = ({\n className,\n title,\n description,\n header,\n icon,\n}: {\n className?: string;\n title?: string | ReactNode;\n description?: string | ReactNode;\n header?: ReactNode;\n icon?: ReactNode;\n}) => {\n return (\n <div\n className={cn(\n \"row-span-1 rounded-xl group/bento transition duration-200 shadow-[inset_0_1px_0_rgba(255,255,255,0.02)] hover:shadow-[0_0_20px_rgba(34,211,238,0.15)] p-4 bg-[rgba(2,4,10,0.85)] backdrop-blur-xl border border-white/[0.06] justify-between flex flex-col space-y-4\",\n className\n )}\n >\n {header}\n <div className=\"group-hover/bento:translate-x-2 transition duration-200\">\n {icon}\n <div className=\"font-sans font-bold text-[var(--glia-color-text-primary,#CBD5E1)] mb-2 mt-2\">\n {title}\n </div>\n <div className=\"font-sans font-normal text-[var(--glia-color-text-soft,#64748B)] text-xs\">\n {description}\n </div>\n </div>\n </div>\n );\n};\n"]}
|
package/dist/chunk-V2SYMV4W.js
DELETED
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
import { cn } from './chunk-6RX2WGCO.js';
|
|
2
|
-
import { motion } from 'framer-motion';
|
|
3
|
-
import { useState, useRef, useEffect } from 'react';
|
|
4
|
-
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
5
|
-
|
|
6
|
-
var TypingAnimation = ({
|
|
7
|
-
words = [],
|
|
8
|
-
className,
|
|
9
|
-
whitespaceClassName = "whitespace-pre",
|
|
10
|
-
typeSpeed = 50,
|
|
11
|
-
deleteSpeed = 30,
|
|
12
|
-
delay = 0,
|
|
13
|
-
pauseDelay = 1200,
|
|
14
|
-
loop = true,
|
|
15
|
-
showCursor = true,
|
|
16
|
-
blinkCursor = true,
|
|
17
|
-
cursorStyle = "line",
|
|
18
|
-
onFinish,
|
|
19
|
-
...props
|
|
20
|
-
}) => {
|
|
21
|
-
const [displayText, setDisplayText] = useState("");
|
|
22
|
-
const [wordIndex, setWordIndex] = useState(0);
|
|
23
|
-
const [isDeleting, setIsDeleting] = useState(false);
|
|
24
|
-
const [started, setStarted] = useState(delay === 0);
|
|
25
|
-
const [isComplete, setIsComplete] = useState(false);
|
|
26
|
-
const hasCompletedRef = useRef(false);
|
|
27
|
-
useEffect(() => {
|
|
28
|
-
if (delay > 0) {
|
|
29
|
-
const timer = setTimeout(() => setStarted(true), delay);
|
|
30
|
-
return () => clearTimeout(timer);
|
|
31
|
-
}
|
|
32
|
-
}, [delay]);
|
|
33
|
-
useEffect(() => {
|
|
34
|
-
if (isComplete || !started) return;
|
|
35
|
-
if (typeSpeed === 0 || deleteSpeed === 0) {
|
|
36
|
-
const currentWord2 = words[wordIndex] ?? "";
|
|
37
|
-
setDisplayText(currentWord2);
|
|
38
|
-
if (!loop && wordIndex === words.length - 1) {
|
|
39
|
-
setIsComplete(true);
|
|
40
|
-
return;
|
|
41
|
-
}
|
|
42
|
-
setIsDeleting(false);
|
|
43
|
-
setWordIndex((prev) => (prev + 1) % words.length);
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
const currentWord = words[wordIndex] ?? "";
|
|
47
|
-
let timeout;
|
|
48
|
-
if (!isDeleting) {
|
|
49
|
-
if (displayText.length < currentWord.length) {
|
|
50
|
-
timeout = setTimeout(() => {
|
|
51
|
-
setDisplayText(currentWord.slice(0, displayText.length + 1));
|
|
52
|
-
}, typeSpeed);
|
|
53
|
-
} else {
|
|
54
|
-
if (!loop && wordIndex === words.length - 1) {
|
|
55
|
-
const doneTimer = setTimeout(() => setIsComplete(true), pauseDelay);
|
|
56
|
-
return () => clearTimeout(doneTimer);
|
|
57
|
-
}
|
|
58
|
-
timeout = setTimeout(() => setIsDeleting(true), pauseDelay);
|
|
59
|
-
}
|
|
60
|
-
} else {
|
|
61
|
-
if (displayText.length > 0) {
|
|
62
|
-
timeout = setTimeout(() => {
|
|
63
|
-
setDisplayText(currentWord.slice(0, displayText.length - 1));
|
|
64
|
-
}, deleteSpeed);
|
|
65
|
-
} else {
|
|
66
|
-
setIsDeleting(false);
|
|
67
|
-
setWordIndex((prev) => (prev + 1) % words.length);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
return () => {
|
|
71
|
-
if (timeout) clearTimeout(timeout);
|
|
72
|
-
};
|
|
73
|
-
}, [
|
|
74
|
-
displayText,
|
|
75
|
-
isDeleting,
|
|
76
|
-
isComplete,
|
|
77
|
-
started,
|
|
78
|
-
words,
|
|
79
|
-
wordIndex,
|
|
80
|
-
typeSpeed,
|
|
81
|
-
deleteSpeed,
|
|
82
|
-
pauseDelay,
|
|
83
|
-
loop
|
|
84
|
-
]);
|
|
85
|
-
useEffect(() => {
|
|
86
|
-
if (isComplete && !hasCompletedRef.current) {
|
|
87
|
-
hasCompletedRef.current = true;
|
|
88
|
-
onFinish?.();
|
|
89
|
-
}
|
|
90
|
-
}, [isComplete, onFinish]);
|
|
91
|
-
const cursorChar = cursorStyle === "block" ? "\u25AE" : cursorStyle === "underscore" ? "_" : "|";
|
|
92
|
-
return /* @__PURE__ */ jsxs(
|
|
93
|
-
motion.span,
|
|
94
|
-
{
|
|
95
|
-
...props,
|
|
96
|
-
className: cn("relative inline-flex items-center gap-1", whitespaceClassName, className),
|
|
97
|
-
children: [
|
|
98
|
-
/* @__PURE__ */ jsx("span", { children: displayText }),
|
|
99
|
-
showCursor && /* @__PURE__ */ jsx(
|
|
100
|
-
"span",
|
|
101
|
-
{
|
|
102
|
-
className: cn("inline-block text-cyan-neon", blinkCursor && "animate-pulse"),
|
|
103
|
-
"aria-hidden": "true",
|
|
104
|
-
children: cursorChar
|
|
105
|
-
}
|
|
106
|
-
)
|
|
107
|
-
]
|
|
108
|
-
}
|
|
109
|
-
);
|
|
110
|
-
};
|
|
111
|
-
|
|
112
|
-
export { TypingAnimation };
|
|
113
|
-
//# sourceMappingURL=chunk-V2SYMV4W.js.map
|
|
114
|
-
//# sourceMappingURL=chunk-V2SYMV4W.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/primitives/atoms/TypingAnimation/TypingAnimation.tsx"],"names":["currentWord"],"mappings":";;;;;AAsBO,IAAM,kBAAkB,CAAC;AAAA,EAC9B,QAAQ,EAAC;AAAA,EACT,SAAA;AAAA,EACA,mBAAA,GAAsB,gBAAA;AAAA,EACtB,SAAA,GAAY,EAAA;AAAA,EACZ,WAAA,GAAc,EAAA;AAAA,EACd,KAAA,GAAQ,CAAA;AAAA,EACR,UAAA,GAAa,IAAA;AAAA,EACb,IAAA,GAAO,IAAA;AAAA,EACP,UAAA,GAAa,IAAA;AAAA,EACb,WAAA,GAAc,IAAA;AAAA,EACd,WAAA,GAAc,MAAA;AAAA,EACd,QAAA;AAAA,EACA,GAAG;AACL,CAAA,KAA4B;AAC1B,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAS,EAAE,CAAA;AACjD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAS,CAAC,CAAA;AAC5C,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,KAAK,CAAA;AAClD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,QAAA,CAAS,UAAU,CAAC,CAAA;AAClD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,KAAK,CAAA;AAClD,EAAA,MAAM,eAAA,GAAkB,OAAO,KAAK,CAAA;AAEpC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,QAAQ,CAAA,EAAG;AACb,MAAA,MAAM,QAAQ,UAAA,CAAW,MAAM,UAAA,CAAW,IAAI,GAAG,KAAK,CAAA;AACtD,MAAA,OAAO,MAAM,aAAa,KAAK,CAAA;AAAA,IACjC;AAAA,EACF,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,UAAA,IAAc,CAAC,OAAA,EAAS;AAG5B,IAAA,IAAI,SAAA,KAAc,CAAA,IAAK,WAAA,KAAgB,CAAA,EAAG;AACxC,MAAA,MAAMA,YAAAA,GAAc,KAAA,CAAM,SAAS,CAAA,IAAK,EAAA;AACxC,MAAA,cAAA,CAAeA,YAAW,CAAA;AAC1B,MAAA,IAAI,CAAC,IAAA,IAAQ,SAAA,KAAc,KAAA,CAAM,SAAS,CAAA,EAAG;AAC3C,QAAA,aAAA,CAAc,IAAI,CAAA;AAClB,QAAA;AAAA,MACF;AACA,MAAA,aAAA,CAAc,KAAK,CAAA;AACnB,MAAA,YAAA,CAAa,CAAC,IAAA,KAAA,CAAU,IAAA,GAAO,CAAA,IAAK,MAAM,MAAM,CAAA;AAChD,MAAA;AAAA,IACF;AACA,IAAA,MAAM,WAAA,GAAc,KAAA,CAAM,SAAS,CAAA,IAAK,EAAA;AACxC,IAAA,IAAI,OAAA;AAEJ,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,IAAI,WAAA,CAAY,MAAA,GAAS,WAAA,CAAY,MAAA,EAAQ;AAC3C,QAAA,OAAA,GAAU,WAAW,MAAM;AACzB,UAAA,cAAA,CAAe,YAAY,KAAA,CAAM,CAAA,EAAG,WAAA,CAAY,MAAA,GAAS,CAAC,CAAC,CAAA;AAAA,QAC7D,GAAG,SAAS,CAAA;AAAA,MACd,CAAA,MAAO;AACL,QAAA,IAAI,CAAC,IAAA,IAAQ,SAAA,KAAc,KAAA,CAAM,SAAS,CAAA,EAAG;AAC3C,UAAA,MAAM,YAAY,UAAA,CAAW,MAAM,aAAA,CAAc,IAAI,GAAG,UAAU,CAAA;AAClE,UAAA,OAAO,MAAM,aAAa,SAAS,CAAA;AAAA,QACrC;AACA,QAAA,OAAA,GAAU,UAAA,CAAW,MAAM,aAAA,CAAc,IAAI,GAAG,UAAU,CAAA;AAAA,MAC5D;AAAA,IACF,CAAA,MAAO;AACL,MAAA,IAAI,WAAA,CAAY,SAAS,CAAA,EAAG;AAC1B,QAAA,OAAA,GAAU,WAAW,MAAM;AACzB,UAAA,cAAA,CAAe,YAAY,KAAA,CAAM,CAAA,EAAG,WAAA,CAAY,MAAA,GAAS,CAAC,CAAC,CAAA;AAAA,QAC7D,GAAG,WAAW,CAAA;AAAA,MAChB,CAAA,MAAO;AACL,QAAA,aAAA,CAAc,KAAK,CAAA;AACnB,QAAA,YAAA,CAAa,CAAC,IAAA,KAAA,CAAU,IAAA,GAAO,CAAA,IAAK,MAAM,MAAM,CAAA;AAAA,MAClD;AAAA,IACF;AAEA,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,OAAA,eAAsB,OAAO,CAAA;AAAA,IACnC,CAAA;AAAA,EACF,CAAA,EAAG;AAAA,IACD,WAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,WAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,UAAA,IAAc,CAAC,eAAA,CAAgB,OAAA,EAAS;AAC1C,MAAA,eAAA,CAAgB,OAAA,GAAU,IAAA;AAC1B,MAAA,QAAA,IAAW;AAAA,IACb;AAAA,EACF,CAAA,EAAG,CAAC,UAAA,EAAY,QAAQ,CAAC,CAAA;AAEzB,EAAA,MAAM,aAAa,WAAA,KAAgB,OAAA,GAAU,QAAA,GAAM,WAAA,KAAgB,eAAe,GAAA,GAAM,GAAA;AAExF,EAAA,uBACE,IAAA;AAAA,IAAC,MAAA,CAAO,IAAA;AAAA,IAAP;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,SAAA,EAAW,EAAA,CAAG,yCAAA,EAA2C,mBAAA,EAAqB,SAAS,CAAA;AAAA,MAEvF,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,UAAM,QAAA,EAAA,WAAA,EAAY,CAAA;AAAA,QAClB,UAAA,oBACC,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,EAAA,CAAG,6BAAA,EAA+B,WAAA,IAAe,eAAe,CAAA;AAAA,YAC3E,aAAA,EAAY,MAAA;AAAA,YAEX,QAAA,EAAA;AAAA;AAAA;AACH;AAAA;AAAA,GAEJ;AAEJ","file":"chunk-V2SYMV4W.js","sourcesContent":["import { cn } from \"../../../lib/utils\";\nimport { MotionProps, motion } from \"framer-motion\";\nimport { useEffect, useRef, useState } from \"react\";\n\nexport interface TypingAnimationProps extends MotionProps {\n children?: string;\n words?: string[];\n className?: string;\n duration?: number;\n typeSpeed?: number;\n deleteSpeed?: number;\n delay?: number;\n pauseDelay?: number;\n loop?: boolean;\n startOnView?: boolean;\n showCursor?: boolean;\n blinkCursor?: boolean;\n cursorStyle?: \"line\" | \"block\" | \"underscore\";\n whitespaceClassName?: string;\n onFinish?: () => void;\n}\n\nexport const TypingAnimation = ({\n words = [],\n className,\n whitespaceClassName = \"whitespace-pre\",\n typeSpeed = 50,\n deleteSpeed = 30,\n delay = 0,\n pauseDelay = 1200,\n loop = true,\n showCursor = true,\n blinkCursor = true,\n cursorStyle = \"line\",\n onFinish,\n ...props\n}: TypingAnimationProps) => {\n const [displayText, setDisplayText] = useState(\"\");\n const [wordIndex, setWordIndex] = useState(0);\n const [isDeleting, setIsDeleting] = useState(false);\n const [started, setStarted] = useState(delay === 0);\n const [isComplete, setIsComplete] = useState(false);\n const hasCompletedRef = useRef(false);\n\n useEffect(() => {\n if (delay > 0) {\n const timer = setTimeout(() => setStarted(true), delay);\n return () => clearTimeout(timer);\n }\n }, [delay]);\n\n useEffect(() => {\n if (isComplete || !started) return;\n\n // Reduced-motion / instant render: if speeds are zero, show full word immediately.\n if (typeSpeed === 0 || deleteSpeed === 0) {\n const currentWord = words[wordIndex] ?? \"\";\n setDisplayText(currentWord);\n if (!loop && wordIndex === words.length - 1) {\n setIsComplete(true);\n return;\n }\n setIsDeleting(false);\n setWordIndex((prev) => (prev + 1) % words.length);\n return;\n }\n const currentWord = words[wordIndex] ?? \"\";\n let timeout: ReturnType<typeof setTimeout> | undefined;\n\n if (!isDeleting) {\n if (displayText.length < currentWord.length) {\n timeout = setTimeout(() => {\n setDisplayText(currentWord.slice(0, displayText.length + 1));\n }, typeSpeed);\n } else {\n if (!loop && wordIndex === words.length - 1) {\n const doneTimer = setTimeout(() => setIsComplete(true), pauseDelay);\n return () => clearTimeout(doneTimer);\n }\n timeout = setTimeout(() => setIsDeleting(true), pauseDelay);\n }\n } else {\n if (displayText.length > 0) {\n timeout = setTimeout(() => {\n setDisplayText(currentWord.slice(0, displayText.length - 1));\n }, deleteSpeed);\n } else {\n setIsDeleting(false);\n setWordIndex((prev) => (prev + 1) % words.length);\n }\n }\n\n return () => {\n if (timeout) clearTimeout(timeout);\n };\n }, [\n displayText,\n isDeleting,\n isComplete,\n started,\n words,\n wordIndex,\n typeSpeed,\n deleteSpeed,\n pauseDelay,\n loop,\n ]);\n\n useEffect(() => {\n if (isComplete && !hasCompletedRef.current) {\n hasCompletedRef.current = true;\n onFinish?.();\n }\n }, [isComplete, onFinish]);\n\n const cursorChar = cursorStyle === \"block\" ? \"▮\" : cursorStyle === \"underscore\" ? \"_\" : \"|\";\n\n return (\n <motion.span\n {...props}\n className={cn(\"relative inline-flex items-center gap-1\", whitespaceClassName, className)}\n >\n <span>{displayText}</span>\n {showCursor && (\n <span\n className={cn(\"inline-block text-cyan-neon\", blinkCursor && \"animate-pulse\")}\n aria-hidden=\"true\"\n >\n {cursorChar}\n </span>\n )}\n </motion.span>\n );\n};\n"]}
|
package/dist/chunk-V7EN5CTH.js
DELETED
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
import { useLayoutEffect2 } from './chunk-7UQD6ROV.js';
|
|
2
|
-
import { useComposedRefs } from './chunk-P25YCWQB.js';
|
|
3
|
-
import * as React2 from 'react';
|
|
4
|
-
|
|
5
|
-
function useStateMachine(initialState, machine) {
|
|
6
|
-
return React2.useReducer((state, event) => {
|
|
7
|
-
const nextState = machine[state][event];
|
|
8
|
-
return nextState ?? state;
|
|
9
|
-
}, initialState);
|
|
10
|
-
}
|
|
11
|
-
var Presence = (props) => {
|
|
12
|
-
const { present, children } = props;
|
|
13
|
-
const presence = usePresence(present);
|
|
14
|
-
const child = typeof children === "function" ? children({ present: presence.isPresent }) : React2.Children.only(children);
|
|
15
|
-
const ref = useComposedRefs(presence.ref, getElementRef(child));
|
|
16
|
-
const forceMount = typeof children === "function";
|
|
17
|
-
return forceMount || presence.isPresent ? React2.cloneElement(child, { ref }) : null;
|
|
18
|
-
};
|
|
19
|
-
Presence.displayName = "Presence";
|
|
20
|
-
function usePresence(present) {
|
|
21
|
-
const [node, setNode] = React2.useState();
|
|
22
|
-
const stylesRef = React2.useRef(null);
|
|
23
|
-
const prevPresentRef = React2.useRef(present);
|
|
24
|
-
const prevAnimationNameRef = React2.useRef("none");
|
|
25
|
-
const initialState = present ? "mounted" : "unmounted";
|
|
26
|
-
const [state, send] = useStateMachine(initialState, {
|
|
27
|
-
mounted: {
|
|
28
|
-
UNMOUNT: "unmounted",
|
|
29
|
-
ANIMATION_OUT: "unmountSuspended"
|
|
30
|
-
},
|
|
31
|
-
unmountSuspended: {
|
|
32
|
-
MOUNT: "mounted",
|
|
33
|
-
ANIMATION_END: "unmounted"
|
|
34
|
-
},
|
|
35
|
-
unmounted: {
|
|
36
|
-
MOUNT: "mounted"
|
|
37
|
-
}
|
|
38
|
-
});
|
|
39
|
-
React2.useEffect(() => {
|
|
40
|
-
const currentAnimationName = getAnimationName(stylesRef.current);
|
|
41
|
-
prevAnimationNameRef.current = state === "mounted" ? currentAnimationName : "none";
|
|
42
|
-
}, [state]);
|
|
43
|
-
useLayoutEffect2(() => {
|
|
44
|
-
const styles = stylesRef.current;
|
|
45
|
-
const wasPresent = prevPresentRef.current;
|
|
46
|
-
const hasPresentChanged = wasPresent !== present;
|
|
47
|
-
if (hasPresentChanged) {
|
|
48
|
-
const prevAnimationName = prevAnimationNameRef.current;
|
|
49
|
-
const currentAnimationName = getAnimationName(styles);
|
|
50
|
-
if (present) {
|
|
51
|
-
send("MOUNT");
|
|
52
|
-
} else if (currentAnimationName === "none" || styles?.display === "none") {
|
|
53
|
-
send("UNMOUNT");
|
|
54
|
-
} else {
|
|
55
|
-
const isAnimating = prevAnimationName !== currentAnimationName;
|
|
56
|
-
if (wasPresent && isAnimating) {
|
|
57
|
-
send("ANIMATION_OUT");
|
|
58
|
-
} else {
|
|
59
|
-
send("UNMOUNT");
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
prevPresentRef.current = present;
|
|
63
|
-
}
|
|
64
|
-
}, [present, send]);
|
|
65
|
-
useLayoutEffect2(() => {
|
|
66
|
-
if (node) {
|
|
67
|
-
let timeoutId;
|
|
68
|
-
const ownerWindow = node.ownerDocument.defaultView ?? window;
|
|
69
|
-
const handleAnimationEnd = (event) => {
|
|
70
|
-
const currentAnimationName = getAnimationName(stylesRef.current);
|
|
71
|
-
const isCurrentAnimation = currentAnimationName.includes(CSS.escape(event.animationName));
|
|
72
|
-
if (event.target === node && isCurrentAnimation) {
|
|
73
|
-
send("ANIMATION_END");
|
|
74
|
-
if (!prevPresentRef.current) {
|
|
75
|
-
const currentFillMode = node.style.animationFillMode;
|
|
76
|
-
node.style.animationFillMode = "forwards";
|
|
77
|
-
timeoutId = ownerWindow.setTimeout(() => {
|
|
78
|
-
if (node.style.animationFillMode === "forwards") {
|
|
79
|
-
node.style.animationFillMode = currentFillMode;
|
|
80
|
-
}
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
};
|
|
85
|
-
const handleAnimationStart = (event) => {
|
|
86
|
-
if (event.target === node) {
|
|
87
|
-
prevAnimationNameRef.current = getAnimationName(stylesRef.current);
|
|
88
|
-
}
|
|
89
|
-
};
|
|
90
|
-
node.addEventListener("animationstart", handleAnimationStart);
|
|
91
|
-
node.addEventListener("animationcancel", handleAnimationEnd);
|
|
92
|
-
node.addEventListener("animationend", handleAnimationEnd);
|
|
93
|
-
return () => {
|
|
94
|
-
ownerWindow.clearTimeout(timeoutId);
|
|
95
|
-
node.removeEventListener("animationstart", handleAnimationStart);
|
|
96
|
-
node.removeEventListener("animationcancel", handleAnimationEnd);
|
|
97
|
-
node.removeEventListener("animationend", handleAnimationEnd);
|
|
98
|
-
};
|
|
99
|
-
} else {
|
|
100
|
-
send("ANIMATION_END");
|
|
101
|
-
}
|
|
102
|
-
}, [node, send]);
|
|
103
|
-
return {
|
|
104
|
-
isPresent: ["mounted", "unmountSuspended"].includes(state),
|
|
105
|
-
ref: React2.useCallback((node2) => {
|
|
106
|
-
stylesRef.current = node2 ? getComputedStyle(node2) : null;
|
|
107
|
-
setNode(node2);
|
|
108
|
-
}, [])
|
|
109
|
-
};
|
|
110
|
-
}
|
|
111
|
-
function getAnimationName(styles) {
|
|
112
|
-
return styles?.animationName || "none";
|
|
113
|
-
}
|
|
114
|
-
function getElementRef(element) {
|
|
115
|
-
let getter = Object.getOwnPropertyDescriptor(element.props, "ref")?.get;
|
|
116
|
-
let mayWarn = getter && "isReactWarning" in getter && getter.isReactWarning;
|
|
117
|
-
if (mayWarn) {
|
|
118
|
-
return element.ref;
|
|
119
|
-
}
|
|
120
|
-
getter = Object.getOwnPropertyDescriptor(element, "ref")?.get;
|
|
121
|
-
mayWarn = getter && "isReactWarning" in getter && getter.isReactWarning;
|
|
122
|
-
if (mayWarn) {
|
|
123
|
-
return element.props.ref;
|
|
124
|
-
}
|
|
125
|
-
return element.props.ref || element.ref;
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
export { Presence };
|
|
129
|
-
//# sourceMappingURL=chunk-V7EN5CTH.js.map
|
|
130
|
-
//# sourceMappingURL=chunk-V7EN5CTH.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../node_modules/@radix-ui/react-presence/src/use-state-machine.tsx","../../../node_modules/@radix-ui/react-presence/src/presence.tsx"],"names":["React","node"],"mappings":"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","file":"chunk-V7EN5CTH.js","sourcesContent":["import * as React from 'react';\n\ntype Machine<S> = { [k: string]: { [k: string]: S } };\ntype MachineState<T> = keyof T;\ntype MachineEvent<T> = keyof UnionToIntersection<T[keyof T]>;\n\n// 🤯 https://fettblog.eu/typescript-union-to-intersection/\ntype UnionToIntersection<T> = (T extends any ? (x: T) => any : never) extends (x: infer R) => any\n ? R\n : never;\n\nexport function useStateMachine<M>(\n initialState: MachineState<M>,\n machine: M & Machine<MachineState<M>>\n) {\n return React.useReducer((state: MachineState<M>, event: MachineEvent<M>): MachineState<M> => {\n const nextState = (machine[state] as any)[event];\n return nextState ?? state;\n }, initialState);\n}\n","import * as React from 'react';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\nimport { useStateMachine } from './use-state-machine';\n\ninterface PresenceProps {\n children: React.ReactElement | ((props: { present: boolean }) => React.ReactElement);\n present: boolean;\n}\n\nconst Presence: React.FC<PresenceProps> = (props) => {\n const { present, children } = props;\n const presence = usePresence(present);\n\n const child = (\n typeof children === 'function'\n ? children({ present: presence.isPresent })\n : React.Children.only(children)\n ) as React.ReactElement<{ ref?: React.Ref<HTMLElement> }>;\n\n const ref = useComposedRefs(presence.ref, getElementRef(child));\n const forceMount = typeof children === 'function';\n return forceMount || presence.isPresent ? React.cloneElement(child, { ref }) : null;\n};\n\nPresence.displayName = 'Presence';\n\n/* -------------------------------------------------------------------------------------------------\n * usePresence\n * -----------------------------------------------------------------------------------------------*/\n\nfunction usePresence(present: boolean) {\n const [node, setNode] = React.useState<HTMLElement>();\n const stylesRef = React.useRef<CSSStyleDeclaration | null>(null);\n const prevPresentRef = React.useRef(present);\n const prevAnimationNameRef = React.useRef<string>('none');\n const initialState = present ? 'mounted' : 'unmounted';\n const [state, send] = useStateMachine(initialState, {\n mounted: {\n UNMOUNT: 'unmounted',\n ANIMATION_OUT: 'unmountSuspended',\n },\n unmountSuspended: {\n MOUNT: 'mounted',\n ANIMATION_END: 'unmounted',\n },\n unmounted: {\n MOUNT: 'mounted',\n },\n });\n\n React.useEffect(() => {\n const currentAnimationName = getAnimationName(stylesRef.current);\n prevAnimationNameRef.current = state === 'mounted' ? currentAnimationName : 'none';\n }, [state]);\n\n useLayoutEffect(() => {\n const styles = stylesRef.current;\n const wasPresent = prevPresentRef.current;\n const hasPresentChanged = wasPresent !== present;\n\n if (hasPresentChanged) {\n const prevAnimationName = prevAnimationNameRef.current;\n const currentAnimationName = getAnimationName(styles);\n\n if (present) {\n send('MOUNT');\n } else if (currentAnimationName === 'none' || styles?.display === 'none') {\n // If there is no exit animation or the element is hidden, animations won't run\n // so we unmount instantly\n send('UNMOUNT');\n } else {\n /**\n * When `present` changes to `false`, we check changes to animation-name to\n * determine whether an animation has started. We chose this approach (reading\n * computed styles) because there is no `animationrun` event and `animationstart`\n * fires after `animation-delay` has expired which would be too late.\n */\n const isAnimating = prevAnimationName !== currentAnimationName;\n\n if (wasPresent && isAnimating) {\n send('ANIMATION_OUT');\n } else {\n send('UNMOUNT');\n }\n }\n\n prevPresentRef.current = present;\n }\n }, [present, send]);\n\n useLayoutEffect(() => {\n if (node) {\n let timeoutId: number;\n const ownerWindow = node.ownerDocument.defaultView ?? window;\n /**\n * Triggering an ANIMATION_OUT during an ANIMATION_IN will fire an `animationcancel`\n * event for ANIMATION_IN after we have entered `unmountSuspended` state. So, we\n * make sure we only trigger ANIMATION_END for the currently active animation.\n */\n const handleAnimationEnd = (event: AnimationEvent) => {\n const currentAnimationName = getAnimationName(stylesRef.current);\n // The event.animationName is unescaped for CSS syntax,\n // so we need to escape it to compare with the animationName computed from the style.\n const isCurrentAnimation = currentAnimationName.includes(CSS.escape(event.animationName));\n if (event.target === node && isCurrentAnimation) {\n // With React 18 concurrency this update is applied a frame after the\n // animation ends, creating a flash of visible content. By setting the\n // animation fill mode to \"forwards\", we force the node to keep the\n // styles of the last keyframe, removing the flash.\n //\n // Previously we flushed the update via ReactDom.flushSync, but with\n // exit animations this resulted in the node being removed from the\n // DOM before the synthetic animationEnd event was dispatched, meaning\n // user-provided event handlers would not be called.\n // https://github.com/radix-ui/primitives/pull/1849\n send('ANIMATION_END');\n if (!prevPresentRef.current) {\n const currentFillMode = node.style.animationFillMode;\n node.style.animationFillMode = 'forwards';\n // Reset the style after the node had time to unmount (for cases\n // where the component chooses not to unmount). Doing this any\n // sooner than `setTimeout` (e.g. with `requestAnimationFrame`)\n // still causes a flash.\n timeoutId = ownerWindow.setTimeout(() => {\n if (node.style.animationFillMode === 'forwards') {\n node.style.animationFillMode = currentFillMode;\n }\n });\n }\n }\n };\n const handleAnimationStart = (event: AnimationEvent) => {\n if (event.target === node) {\n // if animation occurred, store its name as the previous animation.\n prevAnimationNameRef.current = getAnimationName(stylesRef.current);\n }\n };\n node.addEventListener('animationstart', handleAnimationStart);\n node.addEventListener('animationcancel', handleAnimationEnd);\n node.addEventListener('animationend', handleAnimationEnd);\n return () => {\n ownerWindow.clearTimeout(timeoutId);\n node.removeEventListener('animationstart', handleAnimationStart);\n node.removeEventListener('animationcancel', handleAnimationEnd);\n node.removeEventListener('animationend', handleAnimationEnd);\n };\n } else {\n // Transition to the unmounted state if the node is removed prematurely.\n // We avoid doing so during cleanup as the node may change but still exist.\n send('ANIMATION_END');\n }\n }, [node, send]);\n\n return {\n isPresent: ['mounted', 'unmountSuspended'].includes(state),\n ref: React.useCallback((node: HTMLElement) => {\n stylesRef.current = node ? getComputedStyle(node) : null;\n setNode(node);\n }, []),\n };\n}\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction getAnimationName(styles: CSSStyleDeclaration | null) {\n return styles?.animationName || 'none';\n}\n\n// Before React 19 accessing `element.props.ref` will throw a warning and suggest using `element.ref`\n// After React 19 accessing `element.ref` does the opposite.\n// https://github.com/facebook/react/pull/28348\n//\n// Access the ref using the method that doesn't yield a warning.\nfunction getElementRef(element: React.ReactElement<{ ref?: React.Ref<unknown> }>) {\n // React <=18 in DEV\n let getter = Object.getOwnPropertyDescriptor(element.props, 'ref')?.get;\n let mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n if (mayWarn) {\n return (element as any).ref;\n }\n\n // React 19 in DEV\n getter = Object.getOwnPropertyDescriptor(element, 'ref')?.get;\n mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n\n // Not DEV\n return element.props.ref || (element as any).ref;\n}\n\nconst Root = Presence;\n\nexport {\n Presence,\n //\n Root,\n};\nexport type { PresenceProps };\n"]}
|