@meridial/react 0.1.1 → 0.1.5
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/{chunk-RJFQIVZM.js → chunk-3DTMJFPY.js} +3 -2
- package/dist/chunk-3DTMJFPY.js.map +1 -0
- package/dist/{chunk-BWBGNRKO.js → chunk-N4DZEH4G.js} +819 -780
- package/dist/chunk-N4DZEH4G.js.map +1 -0
- package/dist/index.js +2 -2
- package/dist/recorder.js +1 -1
- package/dist/styles.css +153 -9
- package/dist/voicebox.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-BWBGNRKO.js.map +0 -1
- package/dist/chunk-RJFQIVZM.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/voicebox.tsx","../src/components/workflow-execution.tsx","../src/components/meridial-logo.tsx","../src/components/voicebox-badge.tsx","../src/components/voicebox-content.tsx","../../../node_modules/.pnpm/@base-ui+react@1.2.0_@types+react@19.2.14_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/@base-ui/react/esm/toggle/Toggle.js","../../../node_modules/.pnpm/@base-ui+utils@0.2.5_@types+react@19.2.14_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/@base-ui/utils/esm/useControlled.js","../../../node_modules/.pnpm/@base-ui+utils@0.2.5_@types+react@19.2.14_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/@base-ui/utils/esm/useId.js","../../../node_modules/.pnpm/@base-ui+react@1.2.0_@types+react@19.2.14_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/@base-ui/react/esm/utils/useBaseUiId.js","../../../node_modules/.pnpm/@base-ui+react@1.2.0_@types+react@19.2.14_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/@base-ui/react/esm/toggle-group/ToggleGroupContext.js","../../../node_modules/.pnpm/@base-ui+react@1.2.0_@types+react@19.2.14_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/@base-ui/react/esm/composite/item/useCompositeItem.js","../../../node_modules/.pnpm/@base-ui+react@1.2.0_@types+react@19.2.14_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/@base-ui/react/esm/composite/list/useCompositeListItem.js","../../../node_modules/.pnpm/@base-ui+react@1.2.0_@types+react@19.2.14_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/@base-ui/react/esm/composite/list/CompositeListContext.js","../../../node_modules/.pnpm/@base-ui+react@1.2.0_@types+react@19.2.14_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/@base-ui/react/esm/composite/item/CompositeItem.js","../../../node_modules/.pnpm/@base-ui+react@1.2.0_@types+react@19.2.14_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/@base-ui/react/esm/utils/reason-parts.js","../../../node_modules/.pnpm/@base-ui+react@1.2.0_@types+react@19.2.14_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/@base-ui/react/esm/utils/createBaseUIEventDetails.js","../../ui/src/components/toggle.tsx","../src/lib/schema-serializer.ts","../src/hooks/use-tool-registration.ts","../src/components/agent-session-provider.tsx","../src/components/agent-audio-visualizer-bar.tsx","../src/hooks/use-agent-audio-visualizer-bar.ts","../src/components/agent-track-toggle.tsx","../src/components/agent-track-control.tsx","../src/components/agent-disconnect-button.tsx","../src/components/agent-transcript-panel.tsx","../src/hooks/use-input-controls.ts","../src/components/start-audio-button.tsx","../src/components/outcome-bar.tsx","../src/components/voicebox-menu.tsx"],"sourcesContent":["\"use client\"\n\nimport { AnimatePresence } from \"motion/react\"\nimport { useState, useEffect } from \"react\"\nimport { cn } from \"@workspace/ui/lib/utils\"\nimport type { VoiceboxTool } from \"./types/tools.js\"\nimport { apiWorkflowsResponseSchema } from \"./schemas.js\"\nimport type { ApiWorkflow, Workflow } from \"./schemas.js\"\nimport { STORAGE_KEYS } from \"./constants.js\"\nimport { WorkflowExecution } from \"./components/workflow-execution.js\"\nimport { VoiceboxBadge } from \"./components/voicebox-badge.js\"\nimport { VoiceboxContent } from \"./components/voicebox-content.js\"\nimport {\n VoiceboxMenu,\n type TriggerPosition,\n} from \"./components/voicebox-menu.js\"\n\ninterface VoiceboxProps {\n firstMessage?: string\n instructions?: string\n baseUrl?: string\n publishableKey?: string\n identifier?: string | null\n attribute?: string\n tools?: VoiceboxTool[]\n triggerIcon?: React.ReactNode\n cursor?: React.ReactNode\n metadata?: Record<string, unknown>\n onError?: (error: string) => void\n}\n\ntype VoiceboxView = \"badge\" | \"menu\" | \"call\"\n\nconst BADGE_POSITION_CLASSES: Record<TriggerPosition, string> = {\n \"bottom-right\": \"right-6 bottom-6\",\n \"bottom-left\": \"left-6 bottom-6\",\n \"top-right\": \"right-6 top-6\",\n \"top-left\": \"left-6 top-6\",\n}\n\nexport function Voicebox({\n baseUrl = \"\",\n publishableKey,\n identifier,\n attribute,\n tools,\n triggerIcon,\n cursor,\n firstMessage,\n instructions,\n metadata,\n onError,\n}: VoiceboxProps) {\n const [view, setView] = useState<VoiceboxView>(\"badge\")\n const [hidden, setHidden] = useState(false)\n const [badgePosition, setBadgePosition] = useState<TriggerPosition>(() => {\n if (typeof window === \"undefined\") return \"bottom-right\"\n return (\n (localStorage.getItem(STORAGE_KEYS.triggerPos) as TriggerPosition) ||\n \"bottom-right\"\n )\n })\n const [allWorkflows, setAllWorkflows] = useState<ApiWorkflow[]>([])\n const [initialWorkflow, setInitialWorkflow] = useState<{\n id: string\n workflow: Workflow\n } | null>(null)\n const [guideWorkflow, setGuideWorkflow] = useState<Workflow | null>(null)\n const [playingWorkflowId, setPlayingWorkflowId] = useState<string | null>(\n null\n )\n const [playingStepIndex, setPlayingStepIndex] = useState(0)\n\n // Check sessionStorage on mount for hide-until-next-visit\n useEffect(() => {\n if (sessionStorage.getItem(STORAGE_KEYS.hidden) === \"true\") {\n setHidden(true)\n }\n }, [])\n\n // Fetch all workflows\n useEffect(() => {\n if (!publishableKey) return\n fetch(`${baseUrl}/api/workflows`, {\n headers: { Authorization: `Bearer ${publishableKey}` },\n })\n .then((r) => r.json())\n .then((data) => {\n const parsed = apiWorkflowsResponseSchema.safeParse(data)\n if (parsed.success && parsed.data.workflows) {\n setAllWorkflows(parsed.data.workflows)\n }\n })\n .catch(() => {})\n }, [baseUrl, publishableKey])\n\n const handleDisconnect = () => {\n setView(\"badge\")\n setInitialWorkflow(null)\n }\n\n const handlePositionChange = (pos: TriggerPosition) => {\n setBadgePosition(pos)\n localStorage.setItem(STORAGE_KEYS.triggerPos, pos)\n }\n\n const handleHide = () => {\n sessionStorage.setItem(STORAGE_KEYS.hidden, \"true\")\n setHidden(true)\n setView(\"badge\")\n }\n\n const handleAskMeridial = () => {\n setInitialWorkflow(null)\n setView(\"call\")\n }\n\n const handlePlayGuide = (wf: ApiWorkflow) => {\n setGuideWorkflow({\n id: wf.id,\n name: wf.name,\n steps: wf.steps,\n configured: true,\n createdAt: new Date().toISOString(),\n })\n setPlayingWorkflowId(wf.id)\n setPlayingStepIndex(0)\n }\n\n const handleAbortGuide = () => {\n setGuideWorkflow(null)\n setPlayingWorkflowId(null)\n setPlayingStepIndex(0)\n }\n\n const handleBadgeClick = () => {\n setView((prev) => (prev === \"menu\" ? \"badge\" : \"menu\"))\n }\n\n if (hidden) return null\n\n return (\n <>\n {guideWorkflow && (\n <WorkflowExecution\n workflow={guideWorkflow}\n attribute={attribute}\n cursor={cursor}\n onClose={() => {\n setGuideWorkflow(null)\n setPlayingWorkflowId(null)\n setPlayingStepIndex(0)\n }}\n onStepChange={(index) => setPlayingStepIndex(index)}\n onError={onError}\n />\n )}\n {view === \"call\" ? (\n <VoiceboxContent\n baseUrl={baseUrl}\n publishableKey={publishableKey}\n identifier={identifier}\n firstMessage={firstMessage}\n instructions={instructions}\n attribute={attribute}\n tools={tools}\n cursor={cursor}\n metadata={metadata}\n initialWorkflow={initialWorkflow}\n onDisconnect={handleDisconnect}\n onError={onError}\n />\n ) : (\n <div\n className={cn(\"fixed z-50\", BADGE_POSITION_CLASSES[badgePosition])}\n >\n <AnimatePresence>\n {view === \"menu\" && (\n <VoiceboxMenu\n workflows={allWorkflows}\n position={badgePosition}\n playingWorkflowId={playingWorkflowId}\n playingStepIndex={playingStepIndex}\n onPositionChange={handlePositionChange}\n onHide={handleHide}\n onAskMeridial={handleAskMeridial}\n onPlayGuide={handlePlayGuide}\n onAbortGuide={handleAbortGuide}\n />\n )}\n </AnimatePresence>\n <VoiceboxBadge triggerIcon={triggerIcon} onClick={handleBadgeClick} />\n </div>\n )}\n </>\n )\n}\n\nexport type { VoiceboxTool }\n","\"use client\"\n\nimport { useState, useCallback, useEffect, useRef } from \"react\"\nimport { createPortal } from \"react-dom\"\nimport {\n motion,\n useMotionValue,\n useSpring,\n AnimatePresence,\n} from \"motion/react\"\nimport {\n Cursor02Icon,\n ArrowLeft01Icon,\n ArrowRight01Icon,\n Tick01Icon,\n} from \"@hugeicons/core-free-icons\"\nimport { HugeiconsIcon } from \"@hugeicons/react\"\nimport { Button } from \"@workspace/ui/components/button\"\nimport { useElementTracker } from \"../hooks/use-element-tracker.js\"\nimport type { Workflow, Step } from \"../schemas.js\"\n\ninterface WorkflowExecutionProps {\n workflow: Workflow\n attribute?: string\n cursor?: React.ReactNode\n onClose: () => void\n onStepChange?: (index: number) => void\n onError?: (error: string) => void\n}\n\nconst SPRING_CONFIG = { stiffness: 120, damping: 20, mass: 0.8 }\nconst CURSOR_OFFSET = 16\n\nexport function WorkflowExecution({\n workflow,\n attribute = \"data-meridial-id\",\n cursor,\n onClose,\n onStepChange,\n onError,\n}: WorkflowExecutionProps) {\n const [currentIndex, setCurrentIndex] = useState(0)\n\n const steps = workflow.steps\n const currentStep: Step | undefined = steps[currentIndex]\n\n const isFirstStep = currentIndex === 0\n const isLastStep = currentIndex === steps.length - 1\n\n useEffect(() => {\n onStepChange?.(currentIndex)\n }, [currentIndex, onStepChange])\n\n const handleBack = useCallback(() => {\n setCurrentIndex((prev) => Math.max(0, prev - 1))\n }, [])\n\n const handleNext = useCallback(() => {\n setCurrentIndex((prev) => {\n if (prev >= steps.length - 1) {\n onClose()\n return prev\n }\n return prev + 1\n })\n }, [steps.length, onClose])\n\n if (!currentStep) return null\n\n return (\n <ExecutionOverlay\n step={currentStep}\n stepIndex={currentIndex}\n totalSteps={steps.length}\n isFirstStep={isFirstStep}\n isLastStep={isLastStep}\n attribute={attribute}\n cursor={cursor}\n onBack={handleBack}\n onNext={handleNext}\n onError={onError}\n />\n )\n}\n\ninterface ExecutionOverlayProps {\n step: Step\n stepIndex: number\n totalSteps: number\n isFirstStep: boolean\n isLastStep: boolean\n attribute: string\n cursor?: React.ReactNode\n onBack: () => void\n onNext: () => void\n onError?: (msg: string) => void\n}\n\nfunction ExecutionOverlay({\n step,\n stepIndex,\n totalSteps,\n isFirstStep,\n isLastStep,\n attribute,\n cursor,\n onBack,\n onNext,\n onError,\n}: ExecutionOverlayProps) {\n const cssSelector = `[${attribute}=\"${step.elementId}\"]`\n\n const { rect } = useElementTracker({\n selector: cssSelector,\n urlPath: step.urlPath,\n onError: onError\n ? (msg) => {\n if (msg !== null) onError(msg)\n }\n : undefined,\n onClick: onNext,\n })\n\n const hasAnimated = useRef(false)\n const springX = useSpring(useMotionValue(0), SPRING_CONFIG)\n const springY = useSpring(useMotionValue(0), SPRING_CONFIG)\n\n if (rect) {\n const targetX = rect.right + CURSOR_OFFSET\n const targetY = rect.bottom + CURSOR_OFFSET\n\n if (!hasAnimated.current) {\n springX.jump(targetX)\n springY.jump(targetY)\n hasAnimated.current = true\n } else {\n springX.set(targetX)\n springY.set(targetY)\n }\n } else {\n hasAnimated.current = false\n }\n\n return createPortal(\n <AnimatePresence>\n {rect && (\n <motion.div\n data-meridial-ui\n className=\"pointer-events-none fixed z-[99999] flex items-start gap-3\"\n style={{ top: springY, left: springX }}\n initial={{ opacity: 0, scale: 0.6 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.6 }}\n transition={{ duration: 0.2 }}\n >\n {cursor ?? (\n <HugeiconsIcon\n icon={Cursor02Icon}\n strokeWidth={2}\n size={32}\n className=\"mt-1 shrink-0 fill-primary/60 text-primary\"\n />\n )}\n\n <div\n data-meridial-ui\n className=\"pointer-events-auto w-72 overflow-hidden rounded-lg border border-border bg-card shadow-lg\"\n >\n <AnimatePresence mode=\"wait\">\n <motion.div\n key={step.id}\n initial={{ opacity: 0, y: 8 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -8 }}\n transition={{ duration: 0.2, ease: \"easeInOut\" }}\n className=\"px-4 pt-3 pb-2\"\n >\n <p className=\"text-sm leading-relaxed text-foreground\">\n {step.description || (\n <span className=\"text-muted-foreground italic\">\n No description\n </span>\n )}\n </p>\n <span className=\"mt-1 block text-xs text-muted-foreground\">\n Step {stepIndex + 1} of {totalSteps}\n </span>\n </motion.div>\n </AnimatePresence>\n\n <div\n data-meridial-ui\n className=\"flex justify-end gap-2 border-t px-3 py-2\"\n >\n <Button\n variant=\"outline\"\n size=\"sm\"\n data-meridial-ui\n onClick={onBack}\n disabled={isFirstStep}\n >\n <HugeiconsIcon icon={ArrowLeft01Icon} size={14} />\n Back\n </Button>\n <Button\n variant=\"default\"\n size=\"sm\"\n data-meridial-ui\n onClick={onNext}\n >\n {isLastStep ? (\n <>\n Finish\n <HugeiconsIcon icon={Tick01Icon} size={14} />\n </>\n ) : (\n <>\n Next\n <HugeiconsIcon icon={ArrowRight01Icon} size={14} />\n </>\n )}\n </Button>\n </div>\n </div>\n </motion.div>\n )}\n </AnimatePresence>,\n document.body\n )\n}\n","\"use client\"\n\nimport type { SVGProps } from \"react\"\n\nexport function MeridialLogo(props: SVGProps<SVGSVGElement>) {\n return (\n <svg\n viewBox=\"0 0 120 120\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M13.281 74.0881L15.7251 69.8003L37.7371 89.6218L83.4484 98.732L102.441 97.8991L83.2815 101.205L35.3287 95.2458L13.281 74.0881Z\"\n fill=\"#009EBC\"\n stroke=\"#009EBC\"\n strokeWidth=\"0.5\"\n />\n <path\n d=\"M88.6986 90.1613L15.4758 69.5032L36.8477 90.3775L83.0111 99.2024L102.445 97.7944L88.6986 90.1613Z\"\n fill=\"url(#fl-g0)\"\n />\n <path\n d=\"M9.59212 38.8499L12.934 33.2319L34.6462 62.7104L86.7973 80.1624L108.813 81.1994L86.6098 82.9394L33.6228 69.8917L9.59212 38.8499Z\"\n fill=\"#009EBC\"\n stroke=\"#009EBC\"\n strokeWidth=\"0.5\"\n />\n <path\n d=\"M94.1734 69.4478L12.7627 33.0524L34.7293 62.7357L86.5626 80.2897L109.003 81.1016L94.1734 69.4478Z\"\n fill=\"url(#fl-g1)\"\n />\n <path\n d=\"M28.3329 17.4895L33.7347 13.5331L45.9901 38.7534L78.8505 55.5351L93.5023 57.1106L78.3627 57.1381L38.9556 40.7981L28.3329 17.4895Z\"\n fill=\"#009EBC\"\n stroke=\"#009EBC\"\n strokeWidth=\"0.5\"\n />\n <path\n d=\"M84.6112 46.7121L33.6396 12.9639L46.1488 38.6786L78.9538 55.4676L93.5814 57.0605L84.6112 46.7121Z\"\n fill=\"url(#fl-g2)\"\n />\n <defs>\n <linearGradient\n id=\"fl-g0\"\n x1=\"57.7988\"\n y1=\"66.4369\"\n x2=\"60.2919\"\n y2=\"100.848\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#C3F6FF\" />\n <stop offset=\"1\" stopColor=\"#007B92\" />\n </linearGradient>\n <linearGradient\n id=\"fl-g1\"\n x1=\"61.633\"\n y1=\"34.8205\"\n x2=\"60.0227\"\n y2=\"79.3295\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#B8F3FF\" />\n <stop offset=\"1\" stopColor=\"#007F99\" />\n </linearGradient>\n <linearGradient\n id=\"fl-g2\"\n x1=\"65.4953\"\n y1=\"16.4329\"\n x2=\"61.4521\"\n y2=\"53.5618\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#D0F8FF\" />\n <stop offset=\"1\" stopColor=\"#009EBC\" />\n </linearGradient>\n </defs>\n </svg>\n )\n}\n","\"use client\"\n\nimport type React from \"react\"\nimport { MeridialLogo } from \"./meridial-logo.js\"\n\nexport function VoiceboxBadge({\n triggerIcon,\n onClick,\n}: {\n triggerIcon?: React.ReactNode\n onClick: () => void\n}) {\n return (\n <button\n data-meridial-ui\n onClick={onClick}\n aria-label=\"Open assistant menu\"\n className=\"group size-10 flex cursor-pointer items-center justify-center rounded-full border border-border bg-background shadow-lg transition-transform duration-200 ease-out hover:scale-110\"\n >\n {triggerIcon ?? <MeridialLogo className=\"size-6\" />}\n </button>\n )\n}\n","\"use client\"\n\nimport {\n useSession,\n useAgent,\n useSessionContext,\n useEnsureRoom,\n} from \"@livekit/components-react\"\nimport { AnimatePresence, motion } from \"motion/react\"\nimport { TokenSource, RpcError } from \"livekit-client\"\nimport { useDraggable } from \"@neodrag/react\"\nimport {\n useRef,\n useState,\n useMemo,\n useEffect,\n useCallback,\n type RefObject,\n} from \"react\"\nimport { ChatFeedback01Icon, Loading03Icon } from \"@hugeicons/core-free-icons\"\nimport { HugeiconsIcon } from \"@hugeicons/react\"\nimport { Separator } from \"@workspace/ui/components/separator\"\nimport { Toggle } from \"@workspace/ui/components/toggle\"\nimport { cn } from \"@workspace/ui/lib/utils\"\nimport type { VoiceboxTool } from \"../types/tools.js\"\nimport type { ApiWorkflow, Workflow } from \"../schemas.js\"\nimport { serializeTools } from \"../lib/schema-serializer.js\"\nimport { useToolRegistration } from \"../hooks/use-tool-registration.js\"\nimport { DragHandle } from \"./drag-handle.js\"\nimport { AgentSessionProvider } from \"./agent-session-provider.js\"\nimport { AgentTrackControl } from \"./agent-track-control.js\"\nimport { AgentDisconnectButton } from \"./agent-disconnect-button.js\"\nimport { AgentTranscriptPanel } from \"./agent-transcript-panel.js\"\nimport { useInputControls } from \"../hooks/use-input-controls.js\"\nimport { AgentAudioVisualizerBar } from \"./agent-audio-visualizer-bar.js\"\nimport { StartAudioButton } from \"./start-audio-button.js\"\nimport { Button } from \"@workspace/ui/components/button\"\nimport { WorkflowExecution } from \"./workflow-execution.js\"\nimport { OutcomeBar } from \"./outcome-bar.js\"\n\nexport interface VoiceboxContentProps {\n baseUrl: string\n publishableKey?: string\n identifier?: string | null\n firstMessage?: string\n instructions?: string\n attribute?: string\n tools?: VoiceboxTool[]\n cursor?: React.ReactNode\n metadata?: Record<string, unknown>\n initialWorkflow?: { id: string; workflow: Workflow } | null\n onDisconnect: () => void\n onError?: (error: string) => void\n}\n\n/**\n * Wraps VoiceboxContentInner with the session provider.\n * Token is only requested when this component mounts (i.e. when view === \"call\").\n */\nexport function VoiceboxContent({\n baseUrl,\n publishableKey,\n identifier,\n firstMessage,\n instructions,\n attribute,\n tools,\n cursor,\n metadata,\n initialWorkflow,\n onDisconnect,\n onError,\n}: VoiceboxContentProps) {\n const serializedTools = useMemo(\n () => (tools && tools.length > 0 ? serializeTools(tools) : []),\n [tools]\n )\n\n const tokenSource = useMemo(\n () =>\n TokenSource.custom(async () => {\n const response = await fetch(`${baseUrl}/api/auth/livekit`, {\n method: \"POST\",\n body: JSON.stringify({\n publishableKey,\n identifier,\n firstMessage,\n instructions,\n tools: serializedTools,\n metadata,\n }),\n })\n if (!response.ok) {\n const body = await response.json().catch(() => ({}))\n onError?.(body.error ?? `Token request failed (${response.status})`)\n return null\n }\n return response.json()\n }),\n [\n baseUrl,\n publishableKey,\n identifier,\n firstMessage,\n instructions,\n serializedTools,\n metadata,\n onError,\n ]\n )\n\n const session = useSession(tokenSource)\n\n return (\n <AgentSessionProvider session={session}>\n <VoiceboxContentInner\n baseUrl={baseUrl}\n publishableKey={publishableKey}\n attribute={attribute}\n tools={tools}\n cursor={cursor}\n initialWorkflow={initialWorkflow}\n onDisconnect={onDisconnect}\n onError={onError}\n />\n </AgentSessionProvider>\n )\n}\n\nfunction VoiceboxContentInner({\n baseUrl,\n publishableKey,\n attribute,\n tools,\n cursor,\n initialWorkflow,\n onDisconnect,\n onError,\n}: {\n baseUrl: string\n publishableKey?: string\n attribute?: string\n tools?: VoiceboxTool[]\n cursor?: React.ReactNode\n initialWorkflow?: { id: string; workflow: Workflow } | null\n onDisconnect: () => void\n onError?: (error: string) => void\n}) {\n const [showTranscript, setShowTranscript] = useState(false)\n const [showOutcomeBar, setShowOutcomeBar] = useState(false)\n const [activeWorkflow, setActiveWorkflow] = useState<{\n id: string\n workflow: Workflow\n } | null>(initialWorkflow ?? null)\n\n const workflowsRef = useRef<ApiWorkflow[]>([])\n const room = useEnsureRoom()\n const autoStarted = useRef(false)\n const outcomeShown = useRef(false)\n const draggableRef = useRef<HTMLDivElement>(null)\n\n const triggerOutcomeBar = useCallback(() => {\n if (!outcomeShown.current) {\n outcomeShown.current = true\n setShowOutcomeBar(true)\n }\n }, [])\n\n const handleOutcomeSubmit = useCallback(\n async (outcome: \"POSITIVE\" | \"NEGATIVE\" | \"NEUTRAL\") => {\n setShowOutcomeBar(false)\n try {\n const sessionId = await room.getSid()\n await fetch(`${baseUrl}/api/outcome`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ publishableKey, sessionId, outcome }),\n })\n } catch {\n // silently ignore outcome submission errors\n }\n },\n [room, baseUrl, publishableKey]\n )\n\n useToolRegistration(tools, triggerOutcomeBar)\n useDraggable(draggableRef as RefObject<HTMLElement>)\n\n useEffect(() => {\n if (!publishableKey) return\n fetch(`${baseUrl}/api/workflows`, {\n headers: { Authorization: `Bearer ${publishableKey}` },\n })\n .then((r) => r.json())\n .then((data: { workflows?: ApiWorkflow[] }) => {\n if (data.workflows) workflowsRef.current = data.workflows\n })\n .catch((error) => {\n onError?.(\n error instanceof Error ? error.message : \"Workflows fetch failed\"\n )\n })\n }, [baseUrl, publishableKey])\n\n useEffect(() => {\n room.registerRpcMethod(\"workflow:execute\", async (rpcData) => {\n try {\n const { slug } = JSON.parse(rpcData.payload) as { slug: string }\n const apiWf = workflowsRef.current.find((w) => w.slug === slug)\n if (!apiWf) throw new Error(`Workflow '${slug}' not found`)\n\n const workflow: Workflow = {\n id: apiWf.id,\n name: apiWf.name,\n steps: apiWf.steps,\n configured: true,\n createdAt: new Date().toISOString(),\n }\n setActiveWorkflow({ id: apiWf.id, workflow })\n triggerOutcomeBar()\n return JSON.stringify({ success: true })\n } catch (error) {\n onError?.(\n error instanceof Error ? error.message : \"Workflow execution failed\"\n )\n throw new RpcError(\n 1,\n error instanceof Error ? error.message : \"Workflow execution failed\"\n )\n }\n })\n\n return () => {\n room.unregisterRpcMethod(\"workflow:execute\")\n }\n }, [room])\n\n const { state } = useAgent()\n const { start } = useSessionContext()\n\n // Auto-start the session when the conversation bar first appears\n useEffect(() => {\n if (!autoStarted.current) {\n autoStarted.current = true\n start()\n }\n }, [start])\n\n const isConnecting =\n state === \"connecting\" ||\n state === \"initializing\" ||\n state === \"pre-connect-buffering\"\n const isDisconnected = state === \"disconnected\" || state === \"failed\"\n\n const { microphoneTrack, microphoneToggle } = useInputControls()\n\n return (\n <>\n {activeWorkflow && (\n <WorkflowExecution\n workflow={activeWorkflow.workflow}\n attribute={attribute}\n cursor={cursor}\n onClose={() => {\n setActiveWorkflow(null)\n triggerOutcomeBar()\n }}\n onError={onError}\n />\n )}\n <motion.div\n initial={{ opacity: 0, y: 20 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.3, ease: \"easeOut\" }}\n className=\"fixed inset-x-0 bottom-8 z-50 flex justify-center\"\n >\n <div\n ref={draggableRef}\n data-meridial-ui\n className=\"w-72 items-stretch rounded border border-border bg-card shadow-md\"\n >\n <AnimatePresence initial={false}>\n {showTranscript && (\n <motion.div\n initial={{ height: 0, opacity: 0 }}\n animate={{ height: \"auto\", opacity: 1 }}\n exit={{ height: 0, opacity: 0 }}\n transition={{ duration: 0.24, ease: \"easeOut\" }}\n style={{ overflow: \"hidden\" }}\n >\n <AgentTranscriptPanel />\n </motion.div>\n )}\n </AnimatePresence>\n <AnimatePresence initial={false}>\n {showOutcomeBar && (\n <motion.div\n initial={{ height: 0, opacity: 0 }}\n animate={{ height: \"auto\", opacity: 1 }}\n exit={{ height: 0, opacity: 0 }}\n transition={{ duration: 0.24, ease: \"easeOut\" }}\n style={{ overflow: \"hidden\" }}\n >\n <OutcomeBar onSubmit={handleOutcomeSubmit} />\n </motion.div>\n )}\n </AnimatePresence>\n <div data-meridial-ui className=\"flex h-12 items-center\">\n <DragHandle className=\"px-2\" />\n <Separator orientation=\"vertical\" className=\"h-full\" />\n\n <div className=\"relative flex h-full flex-1 items-center justify-between px-2\">\n <div className=\"flex items-center gap-2\">\n <AgentTrackControl\n source=\"microphone\"\n pressed={microphoneToggle.enabled}\n pending={microphoneToggle.pending}\n disabled={microphoneToggle.pending}\n audioTrack={microphoneTrack}\n onPressedChange={microphoneToggle.toggle}\n />\n <Toggle\n disabled={isDisconnected || isConnecting}\n pressed={showTranscript}\n aria-label=\"Toggle transcript\"\n onPressedChange={setShowTranscript}\n className={cn(\n \"size-9 rounded-lg\",\n showTranscript\n ? \"bg-muted text-foreground\"\n : \"bg-transparent text-muted-foreground hover:text-foreground\"\n )}\n >\n <HugeiconsIcon icon={ChatFeedback01Icon} />\n </Toggle>\n </div>\n <AgentAudioVisualizerBar\n barCount={16}\n state={state}\n audioTrack={microphoneTrack}\n />\n {isConnecting ? (\n <Button variant=\"outline\">\n <span>Connecting</span>\n <HugeiconsIcon\n icon={Loading03Icon}\n className=\"animate-spin\"\n />\n </Button>\n ) : (\n <AgentDisconnectButton onClick={onDisconnect} />\n )}\n <StartAudioButton label=\"Start Audio\" />\n </div>\n </div>\n </div>\n </motion.div>\n </>\n )\n}\n","'use client';\n\nimport * as React from 'react';\nimport { useStableCallback } from '@base-ui/utils/useStableCallback';\nimport { useControlled } from '@base-ui/utils/useControlled';\nimport { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';\nimport { error } from '@base-ui/utils/error';\nimport { useBaseUiId } from \"../utils/useBaseUiId.js\";\nimport { useRenderElement } from \"../utils/useRenderElement.js\";\nimport { useToggleGroupContext } from \"../toggle-group/ToggleGroupContext.js\";\nimport { useButton } from \"../use-button/useButton.js\";\nimport { CompositeItem } from \"../composite/item/CompositeItem.js\";\nimport { createChangeEventDetails } from \"../utils/createBaseUIEventDetails.js\";\nimport { REASONS } from \"../utils/reasons.js\";\n\n/**\n * A two-state button that can be on or off.\n * Renders a `<button>` element.\n *\n * Documentation: [Base UI Toggle](https://base-ui.com/react/components/toggle)\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport const Toggle = /*#__PURE__*/React.forwardRef(function Toggle(componentProps, forwardedRef) {\n const {\n className,\n defaultPressed: defaultPressedProp = false,\n disabled: disabledProp = false,\n form,\n // never participates in form validation\n onPressedChange: onPressedChangeProp,\n pressed: pressedProp,\n render,\n type,\n // cannot change button type\n value: valueProp,\n nativeButton = true,\n ...elementProps\n } = componentProps;\n\n // `|| undefined` handles cases, where value is falsy (i.e. \"\")\n const value = useBaseUiId(valueProp || undefined);\n const groupContext = useToggleGroupContext();\n const groupValue = groupContext?.value ?? [];\n const defaultPressed = groupContext ? undefined : defaultPressedProp;\n const disabled = (disabledProp || groupContext?.disabled) ?? false;\n if (process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useIsoLayoutEffect(() => {\n if (groupContext && valueProp === undefined && groupContext.isValueInitialized) {\n error('A `<Toggle>` component rendered in a `<ToggleGroup>` has no explicit `value` prop.', 'This will cause issues between the Toggle Group and Toggle values.', 'Provide the `<Toggle>` with a `value` prop matching the `<ToggleGroup>` values prop type.');\n }\n }, [groupContext, valueProp, groupContext?.isValueInitialized]);\n }\n const [pressed, setPressedState] = useControlled({\n controlled: groupContext ? value !== undefined && groupValue.indexOf(value) > -1 : pressedProp,\n default: defaultPressed,\n name: 'Toggle',\n state: 'pressed'\n });\n const onPressedChange = useStableCallback((nextPressed, eventDetails) => {\n if (value) {\n groupContext?.setGroupValue?.(value, nextPressed, eventDetails);\n }\n onPressedChangeProp?.(nextPressed, eventDetails);\n });\n const {\n getButtonProps,\n buttonRef\n } = useButton({\n disabled,\n native: nativeButton\n });\n const state = {\n disabled,\n pressed\n };\n const refs = [buttonRef, forwardedRef];\n const props = [{\n 'aria-pressed': pressed,\n onClick(event) {\n const nextPressed = !pressed;\n const details = createChangeEventDetails(REASONS.none, event.nativeEvent);\n onPressedChange(nextPressed, details);\n if (details.isCanceled) {\n return;\n }\n setPressedState(nextPressed);\n }\n }, elementProps, getButtonProps];\n const element = useRenderElement('button', componentProps, {\n enabled: !groupContext,\n state,\n ref: refs,\n props\n });\n if (groupContext) {\n return /*#__PURE__*/_jsx(CompositeItem, {\n tag: \"button\",\n render: render,\n className: className,\n state: state,\n refs: refs,\n props: props\n });\n }\n return element;\n});\nif (process.env.NODE_ENV !== \"production\") Toggle.displayName = \"Toggle\";","'use client';\n\n// TODO: uncomment once we enable eslint-plugin-react-compiler // eslint-disable-next-line react-compiler/react-compiler -- process.env never changes, dependency arrays are intentionally ignored\n/* eslint-disable react-hooks/rules-of-hooks, react-hooks/exhaustive-deps */\nimport * as React from 'react';\nexport function useControlled({\n controlled,\n default: defaultProp,\n name,\n state = 'value'\n}) {\n // isControlled is ignored in the hook dependency lists as it should never change.\n const {\n current: isControlled\n } = React.useRef(controlled !== undefined);\n const [valueState, setValue] = React.useState(defaultProp);\n const value = isControlled ? controlled : valueState;\n if (process.env.NODE_ENV !== 'production') {\n React.useEffect(() => {\n if (isControlled !== (controlled !== undefined)) {\n console.error([`Base UI: A component is changing the ${isControlled ? '' : 'un'}controlled ${state} state of ${name} to be ${isControlled ? 'un' : ''}controlled.`, 'Elements should not switch from uncontrolled to controlled (or vice versa).', `Decide between using a controlled or uncontrolled ${name} ` + 'element for the lifetime of the component.', \"The nature of the state is determined during the first render. It's considered controlled if the value is not `undefined`.\", 'More info: https://fb.me/react-controlled-components'].join('\\n'));\n }\n }, [state, name, controlled]);\n const {\n current: defaultValue\n } = React.useRef(defaultProp);\n React.useEffect(() => {\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is for more details.\n if (!isControlled && JSON.stringify(defaultValue) !== JSON.stringify(defaultProp)) {\n console.error([`Base UI: A component is changing the default ${state} state of an uncontrolled ${name} after being initialized. ` + `To suppress this warning opt to use a controlled ${name}.`].join('\\n'));\n }\n }, [JSON.stringify(defaultProp)]);\n }\n const setValueIfUncontrolled = React.useCallback(newValue => {\n if (!isControlled) {\n setValue(newValue);\n }\n }, []);\n return [value, setValueIfUncontrolled];\n}","'use client';\n\nimport * as React from 'react';\nimport { SafeReact } from \"./safeReact.js\";\nlet globalId = 0;\n\n// TODO React 17: Remove `useGlobalId` once React 17 support is removed\nfunction useGlobalId(idOverride, prefix = 'mui') {\n const [defaultId, setDefaultId] = React.useState(idOverride);\n const id = idOverride || defaultId;\n React.useEffect(() => {\n if (defaultId == null) {\n // Fallback to this default id when possible.\n // Use the incrementing value for client-side rendering only.\n // We can't use it server-side.\n // If you want to use random values please consider the Birthday Problem: https://en.wikipedia.org/wiki/Birthday_problem\n globalId += 1;\n setDefaultId(`${prefix}-${globalId}`);\n }\n }, [defaultId, prefix]);\n return id;\n}\nconst maybeReactUseId = SafeReact.useId;\n\n/**\n *\n * @example <div id={useId()} />\n * @param idOverride\n * @returns {string}\n */\nexport function useId(idOverride, prefix) {\n // React.useId() is only available from React 17.0.0.\n if (maybeReactUseId !== undefined) {\n const reactId = maybeReactUseId();\n return idOverride ?? (prefix ? `${prefix}-${reactId}` : reactId);\n }\n\n // TODO: uncomment once we enable eslint-plugin-react-compiler // eslint-disable-next-line react-compiler/react-compiler\n // eslint-disable-next-line react-hooks/rules-of-hooks -- `React.useId` is invariant at runtime.\n return useGlobalId(idOverride, prefix);\n}","'use client';\n\nimport { useId } from '@base-ui/utils/useId';\n\n/**\n * Wraps `useId` and prefixes generated `id`s with `base-ui-`\n * @param {string | undefined} idOverride overrides the generated id when provided\n * @returns {string | undefined}\n */\nexport function useBaseUiId(idOverride) {\n return useId(idOverride, 'base-ui');\n}","'use client';\n\nimport _formatErrorMessage from \"@base-ui/utils/formatErrorMessage\";\nimport * as React from 'react';\nexport const ToggleGroupContext = /*#__PURE__*/React.createContext(undefined);\nif (process.env.NODE_ENV !== \"production\") ToggleGroupContext.displayName = \"ToggleGroupContext\";\nexport function useToggleGroupContext(optional = true) {\n const context = React.useContext(ToggleGroupContext);\n if (context === undefined && !optional) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? 'Base UI: ToggleGroupContext is missing. ToggleGroup parts must be placed within <ToggleGroup>.' : _formatErrorMessage(7));\n }\n return context;\n}","'use client';\n\nimport * as React from 'react';\nimport { useMergedRefs } from '@base-ui/utils/useMergedRefs';\nimport { useCompositeRootContext } from \"../root/CompositeRootContext.js\";\nimport { useCompositeListItem } from \"../list/useCompositeListItem.js\";\nexport function useCompositeItem(params = {}) {\n const {\n highlightItemOnHover,\n highlightedIndex,\n onHighlightedIndexChange\n } = useCompositeRootContext();\n const {\n ref,\n index\n } = useCompositeListItem(params);\n const isHighlighted = highlightedIndex === index;\n const itemRef = React.useRef(null);\n const mergedRef = useMergedRefs(ref, itemRef);\n const compositeProps = React.useMemo(() => ({\n tabIndex: isHighlighted ? 0 : -1,\n onFocus() {\n onHighlightedIndexChange(index);\n },\n onMouseMove() {\n const item = itemRef.current;\n if (!highlightItemOnHover || !item) {\n return;\n }\n const disabled = item.hasAttribute('disabled') || item.ariaDisabled === 'true';\n if (!isHighlighted && !disabled) {\n item.focus();\n }\n }\n }), [isHighlighted, onHighlightedIndexChange, index, highlightItemOnHover]);\n return {\n compositeProps,\n compositeRef: mergedRef,\n index\n };\n}","'use client';\n\nimport * as React from 'react';\nimport { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';\nimport { useCompositeListContext } from \"./CompositeListContext.js\";\nexport let IndexGuessBehavior = /*#__PURE__*/function (IndexGuessBehavior) {\n IndexGuessBehavior[IndexGuessBehavior[\"None\"] = 0] = \"None\";\n IndexGuessBehavior[IndexGuessBehavior[\"GuessFromOrder\"] = 1] = \"GuessFromOrder\";\n return IndexGuessBehavior;\n}({});\n\n/**\n * Used to register a list item and its index (DOM position) in the `CompositeList`.\n */\nexport function useCompositeListItem(params = {}) {\n const {\n label,\n metadata,\n textRef,\n indexGuessBehavior,\n index: externalIndex\n } = params;\n const {\n register,\n unregister,\n subscribeMapChange,\n elementsRef,\n labelsRef,\n nextIndexRef\n } = useCompositeListContext();\n const indexRef = React.useRef(-1);\n const [index, setIndex] = React.useState(externalIndex ?? (indexGuessBehavior === IndexGuessBehavior.GuessFromOrder ? () => {\n if (indexRef.current === -1) {\n const newIndex = nextIndexRef.current;\n nextIndexRef.current += 1;\n indexRef.current = newIndex;\n }\n return indexRef.current;\n } : -1));\n const componentRef = React.useRef(null);\n const ref = React.useCallback(node => {\n componentRef.current = node;\n if (index !== -1 && node !== null) {\n elementsRef.current[index] = node;\n if (labelsRef) {\n const isLabelDefined = label !== undefined;\n labelsRef.current[index] = isLabelDefined ? label : textRef?.current?.textContent ?? node.textContent;\n }\n }\n }, [index, elementsRef, labelsRef, label, textRef]);\n useIsoLayoutEffect(() => {\n if (externalIndex != null) {\n return undefined;\n }\n const node = componentRef.current;\n if (node) {\n register(node, metadata);\n return () => {\n unregister(node);\n };\n }\n return undefined;\n }, [externalIndex, register, unregister, metadata]);\n useIsoLayoutEffect(() => {\n if (externalIndex != null) {\n return undefined;\n }\n return subscribeMapChange(map => {\n const i = componentRef.current ? map.get(componentRef.current)?.index : null;\n if (i != null) {\n setIndex(i);\n }\n });\n }, [externalIndex, subscribeMapChange, setIndex]);\n return React.useMemo(() => ({\n ref,\n index\n }), [index, ref]);\n}","'use client';\n\nimport * as React from 'react';\nexport const CompositeListContext = /*#__PURE__*/React.createContext({\n register: () => {},\n unregister: () => {},\n subscribeMapChange: () => {\n return () => {};\n },\n elementsRef: {\n current: []\n },\n nextIndexRef: {\n current: 0\n }\n});\nif (process.env.NODE_ENV !== \"production\") CompositeListContext.displayName = \"CompositeListContext\";\nexport function useCompositeListContext() {\n return React.useContext(CompositeListContext);\n}","'use client';\n\nimport { useRenderElement } from \"../../utils/useRenderElement.js\";\nimport { useCompositeItem } from \"./useCompositeItem.js\";\nimport { EMPTY_OBJECT, EMPTY_ARRAY } from \"../../utils/constants.js\";\n/**\n * @internal\n */\nexport function CompositeItem(componentProps) {\n const {\n render,\n className,\n state = EMPTY_OBJECT,\n props = EMPTY_ARRAY,\n refs = EMPTY_ARRAY,\n metadata,\n stateAttributesMapping,\n tag = 'div',\n ...elementProps\n } = componentProps;\n const {\n compositeProps,\n compositeRef\n } = useCompositeItem({\n metadata\n });\n return useRenderElement(tag, componentProps, {\n state,\n ref: [...refs, compositeRef],\n props: [compositeProps, ...props, elementProps],\n stateAttributesMapping\n });\n}","export const none = 'none';\nexport const triggerPress = 'trigger-press';\nexport const triggerHover = 'trigger-hover';\nexport const triggerFocus = 'trigger-focus';\nexport const outsidePress = 'outside-press';\nexport const itemPress = 'item-press';\nexport const closePress = 'close-press';\nexport const linkPress = 'link-press';\nexport const clearPress = 'clear-press';\nexport const chipRemovePress = 'chip-remove-press';\nexport const trackPress = 'track-press';\nexport const incrementPress = 'increment-press';\nexport const decrementPress = 'decrement-press';\nexport const inputChange = 'input-change';\nexport const inputClear = 'input-clear';\nexport const inputBlur = 'input-blur';\nexport const inputPaste = 'input-paste';\nexport const inputPress = 'input-press';\nexport const focusOut = 'focus-out';\nexport const escapeKey = 'escape-key';\nexport const closeWatcher = 'close-watcher';\nexport const listNavigation = 'list-navigation';\nexport const keyboard = 'keyboard';\nexport const pointer = 'pointer';\nexport const drag = 'drag';\nexport const wheel = 'wheel';\nexport const scrub = 'scrub';\nexport const cancelOpen = 'cancel-open';\nexport const siblingOpen = 'sibling-open';\nexport const disabled = 'disabled';\nexport const imperativeAction = 'imperative-action';\nexport const swipe = 'swipe';\nexport const windowResize = 'window-resize';","import { EMPTY_OBJECT } from \"./constants.js\";\nimport { REASONS } from \"./reasons.js\";\n\n/**\n * Maps a change `reason` string to the corresponding native event type.\n */\n\n/**\n * Details of custom change events emitted by Base UI components.\n */\n\n/**\n * Details of custom generic events emitted by Base UI components.\n */\n\n/**\n * Creates a Base UI event details object with the given reason and utilities\n * for preventing Base UI's internal event handling.\n */\nexport function createChangeEventDetails(reason, event, trigger, customProperties) {\n let canceled = false;\n let allowPropagation = false;\n const custom = customProperties ?? EMPTY_OBJECT;\n const details = {\n reason,\n event: event ?? new Event('base-ui'),\n cancel() {\n canceled = true;\n },\n allowPropagation() {\n allowPropagation = true;\n },\n get isCanceled() {\n return canceled;\n },\n get isPropagationAllowed() {\n return allowPropagation;\n },\n trigger,\n ...custom\n };\n return details;\n}\nexport function createGenericEventDetails(reason, event, customProperties) {\n const custom = customProperties ?? EMPTY_OBJECT;\n const details = {\n reason,\n event: event ?? new Event('base-ui'),\n ...custom\n };\n return details;\n}","\"use client\"\n\nimport { Toggle as TogglePrimitive } from \"@base-ui/react/toggle\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@workspace/ui/lib/utils\"\n\nconst toggleVariants = cva(\n \"group/toggle inline-flex items-center justify-center gap-1 rounded-lg text-sm font-medium whitespace-nowrap transition-all outline-none hover:bg-muted hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 aria-pressed:bg-muted data-[state=on]:bg-muted dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n outline: \"border border-input bg-transparent hover:bg-muted\",\n },\n size: {\n default: \"h-8 min-w-8 px-2\",\n sm: \"h-7 min-w-7 rounded-[min(var(--radius-md),12px)] px-1.5 text-[0.8rem]\",\n lg: \"h-9 min-w-9 px-2.5\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction Toggle({\n className,\n variant = \"default\",\n size = \"default\",\n ...props\n}: TogglePrimitive.Props & VariantProps<typeof toggleVariants>) {\n return (\n <TogglePrimitive\n data-slot=\"toggle\"\n className={cn(toggleVariants({ variant, size, className }))}\n {...props}\n />\n )\n}\n\nexport { Toggle, toggleVariants }\n","import { z } from \"zod\"\nimport type { VoiceboxTool } from \"../types/tools.js\"\n\nexport function serializeTools(tools: VoiceboxTool[]) {\n return tools.map((tool) => ({\n name: tool.name,\n description: tool.description,\n parameters: z.toJSONSchema(tool.parameters as z.ZodType, {\n target: \"openapi-3.0\",\n }),\n }))\n}\n","import { useEffect } from \"react\"\nimport { RpcError } from \"livekit-client\"\nimport { useEnsureRoom } from \"@livekit/components-react\"\nimport type { VoiceboxTool } from \"../types/tools.js\"\n\nexport function useToolRegistration(\n tools?: VoiceboxTool[],\n onToolComplete?: () => void\n) {\n const room = useEnsureRoom()\n\n useEffect(() => {\n if (!tools || tools.length === 0) return\n\n const cleanups: (() => void)[] = []\n\n for (const tool of tools) {\n const methodName = `tool:${tool.name}`\n\n room.registerRpcMethod(methodName, async (data) => {\n try {\n const params = JSON.parse(data.payload)\n const parsed = tool.parameters.parse(params)\n const result = await tool.execute(parsed)\n onToolComplete?.()\n return JSON.stringify(result)\n } catch (error) {\n const message =\n error instanceof Error ? error.message : \"Tool execution failed\"\n throw new RpcError(1, message)\n }\n })\n\n cleanups.push(() => {\n room.unregisterRpcMethod(methodName)\n })\n }\n\n return () => {\n for (const cleanup of cleanups) {\n cleanup()\n }\n }\n }, [room, tools, onToolComplete])\n}\n","\"use client\"\n\nimport type React from \"react\"\nimport {\n SessionProvider,\n type UseSessionReturn,\n RoomAudioRenderer,\n type SessionProviderProps,\n type RoomAudioRendererProps,\n} from \"@livekit/components-react\"\nimport type { Room } from \"livekit-client\"\n\nexport type AgentSessionProviderProps = SessionProviderProps &\n RoomAudioRendererProps & {\n room?: Room\n volume?: number\n muted?: boolean\n session: UseSessionReturn\n children: React.ReactNode\n }\n\nexport function AgentSessionProvider({\n session,\n children,\n ...roomAudioRendererProps\n}: AgentSessionProviderProps) {\n return (\n <SessionProvider session={session}>\n {children}\n <RoomAudioRenderer {...roomAudioRendererProps} />\n </SessionProvider>\n )\n}\n","\"use client\"\n\nimport { Fragment, useMemo, type ReactNode } from \"react\"\nimport {\n type AgentState,\n useMultibandTrackVolume,\n} from \"@livekit/components-react\"\nimport type { LocalAudioTrack, RemoteAudioTrack } from \"livekit-client\"\nimport type { TrackReferenceOrPlaceholder } from \"@livekit/components-react\"\nimport { cn } from \"@workspace/ui/lib/utils\"\nimport { useAgentAudioVisualizerBarAnimator } from \"../hooks/use-agent-audio-visualizer-bar.js\"\n\nexport interface AgentAudioVisualizerBarProps {\n state?: AgentState\n barCount?: number\n audioTrack?: LocalAudioTrack | RemoteAudioTrack | TrackReferenceOrPlaceholder\n className?: string\n children?: ReactNode\n}\n\nexport function AgentAudioVisualizerBar({\n state = \"connecting\",\n barCount = 3,\n audioTrack,\n className,\n children,\n}: AgentAudioVisualizerBarProps) {\n const sequencerInterval = useMemo(() => {\n switch (state) {\n case \"connecting\":\n return 2000 / barCount\n case \"initializing\":\n return 2000\n case \"listening\":\n return 500\n case \"thinking\":\n return 150\n default:\n return 1000\n }\n }, [state, barCount])\n\n const highlightedIndices = useAgentAudioVisualizerBarAnimator(\n state,\n barCount,\n sequencerInterval\n )\n\n const volumeBands = useMultibandTrackVolume(audioTrack, {\n bands: barCount,\n loPass: 100,\n hiPass: 200,\n })\n\n const bands = useMemo(\n () => (state === \"speaking\" ? volumeBands : new Array(barCount).fill(0)),\n [state, volumeBands, barCount]\n )\n\n return (\n <div\n data-lk-state={state}\n className={cn(\n \"relative flex h-6 items-center justify-center gap-0.5\",\n className\n )}\n >\n {bands.map((band: number, idx: number) =>\n children ? (\n <Fragment key={idx}>\n {/* clone child with animation data attrs */}\n {children}\n </Fragment>\n ) : (\n <div\n key={idx}\n data-lk-index={idx}\n data-lk-highlighted={highlightedIndices.includes(idx)}\n style={{ height: `${Math.max(4, band * 24)}px` }}\n className=\"min-h-1 w-1 rounded-full bg-primary/20 transition-[height] duration-100 ease-linear data-[lk-highlighted=true]:bg-primary\"\n />\n )\n )}\n </div>\n )\n}\n","import { useEffect, useRef, useState } from \"react\"\nimport type { AgentState } from \"@livekit/components-react\"\n\nfunction generateConnectingSequenceBar(columns: number): number[][] {\n const seq = []\n for (let x = 0; x < columns; x++) {\n seq.push([x, columns - 1 - x])\n }\n return seq\n}\n\nfunction generateListeningSequenceBar(columns: number): number[][] {\n const center = Math.floor(columns / 2)\n return [[center], [-1]]\n}\n\nexport function useAgentAudioVisualizerBarAnimator(\n state: AgentState | undefined,\n columns: number,\n interval: number\n): number[] {\n const [index, setIndex] = useState(0)\n const [sequence, setSequence] = useState<number[][]>([[]])\n\n useEffect(() => {\n if (state === \"thinking\") {\n setSequence(generateListeningSequenceBar(columns))\n } else if (state === \"connecting\" || state === \"initializing\") {\n setSequence([...generateConnectingSequenceBar(columns)])\n } else if (state === \"listening\") {\n setSequence(generateListeningSequenceBar(columns))\n } else if (state === undefined || state === \"speaking\") {\n setSequence([new Array(columns).fill(0).map((_, idx) => idx)])\n } else {\n setSequence([[]])\n }\n setIndex(0)\n }, [state, columns])\n\n const animationFrameId = useRef<number | null>(null)\n useEffect(() => {\n let startTime = performance.now()\n\n const animate = (time: DOMHighResTimeStamp) => {\n if (time - startTime >= interval) {\n setIndex((prev) => prev + 1)\n startTime = time\n }\n animationFrameId.current = requestAnimationFrame(animate)\n }\n\n animationFrameId.current = requestAnimationFrame(animate)\n\n return () => {\n if (animationFrameId.current !== null) {\n cancelAnimationFrame(animationFrameId.current)\n }\n }\n }, [interval, columns, state, sequence.length])\n\n return sequence[index % sequence.length] ?? []\n}\n","\"use client\"\n\nimport { Fragment, useMemo, useState, type ComponentProps } from \"react\"\nimport { Track } from \"livekit-client\"\nimport {\n MicIcon,\n MicOffIcon,\n Loading03Icon,\n VideoIcon,\n VideoOffIcon,\n} from \"@hugeicons/core-free-icons\"\nimport { HugeiconsIcon } from \"@hugeicons/react\"\nimport { Toggle } from \"@workspace/ui/components/toggle\"\nimport { cn } from \"@workspace/ui/lib/utils\"\n\nfunction getSourceIcon(\n source: Track.Source,\n enabled: boolean,\n pending = false\n) {\n if (pending) return Loading03Icon\n switch (source) {\n case Track.Source.Microphone:\n return enabled ? MicIcon : MicOffIcon\n case Track.Source.Camera:\n return enabled ? VideoIcon : VideoOffIcon\n default:\n return MicIcon\n }\n}\n\nexport interface AgentTrackToggleProps\n extends Omit<ComponentProps<\"button\">, \"value\"> {\n source: \"camera\" | \"microphone\" | \"screen_share\"\n pending?: boolean\n pressed?: boolean\n defaultPressed?: boolean\n onPressedChange?: (pressed: boolean) => void\n}\n\nexport function AgentTrackToggle({\n source,\n pending = false,\n pressed,\n defaultPressed = false,\n className,\n onPressedChange,\n ...props\n}: AgentTrackToggleProps) {\n const [uncontrolledPressed, setUncontrolledPressed] = useState(\n defaultPressed ?? false\n )\n const isControlled = pressed !== undefined\n const resolvedPressed = useMemo(\n () => (isControlled ? pressed : uncontrolledPressed) ?? false,\n [isControlled, pressed, uncontrolledPressed]\n )\n\n const IconComponent = getSourceIcon(\n source as Track.Source,\n resolvedPressed,\n pending\n )\n\n const handlePressedChange = (nextPressed: boolean) => {\n if (!isControlled) setUncontrolledPressed(nextPressed)\n onPressedChange?.(nextPressed)\n }\n\n return (\n <Toggle\n pressed={isControlled ? pressed : undefined}\n defaultPressed={isControlled ? undefined : defaultPressed}\n aria-label={`Toggle ${source}`}\n onPressedChange={handlePressedChange}\n className={cn(\n \"size-9 rounded-lg\",\n \"data-[state=on]:bg-muted data-[state=on]:text-foreground\",\n \"data-[state=off]:bg-destructive/10 data-[state=off]:text-destructive\",\n className\n )}\n {...props}\n >\n <HugeiconsIcon\n icon={IconComponent}\n className={cn(pending && \"animate-spin\")}\n />\n {props.children}\n </Toggle>\n )\n}\n","\"use client\"\n\nimport type { TrackReferenceOrPlaceholder } from \"@livekit/components-react\"\nimport { cn } from \"@workspace/ui/lib/utils\"\nimport { AgentAudioVisualizerBar } from \"./agent-audio-visualizer-bar.js\"\nimport { AgentTrackToggle } from \"./agent-track-toggle.js\"\n\nexport interface AgentTrackControlProps {\n source: \"camera\" | \"microphone\" | \"screen_share\"\n pressed?: boolean\n pending?: boolean\n disabled?: boolean\n className?: string\n audioTrack?: TrackReferenceOrPlaceholder\n onPressedChange?: (pressed: boolean) => void\n}\n\nexport function AgentTrackControl({\n source,\n pressed,\n pending,\n disabled,\n className,\n audioTrack,\n onPressedChange,\n}: AgentTrackControlProps) {\n return (\n <div className={cn(\"flex items-center gap-0 rounded-md\", className)}>\n <AgentTrackToggle\n source={source}\n pressed={pressed}\n pending={pending}\n disabled={disabled}\n onPressedChange={onPressedChange}\n className=\"peer/track group/track focus:z-10 has-[.audiovisualizer]:w-auto has-[.audiovisualizer]:px-3 has-[~_button]:rounded-r-none has-[~_button]:border-r-0 has-[~_button]:pr-2 has-[~_button]:pl-3\"\n >\n {audioTrack && (\n <AgentAudioVisualizerBar\n barCount={3}\n state={pressed ? \"speaking\" : \"disconnected\"}\n audioTrack={pressed ? audioTrack : undefined}\n className=\"audiovisualizer\"\n />\n )}\n </AgentTrackToggle>\n </div>\n )\n}\n","\"use client\"\n\nimport type React from \"react\"\nimport { useSessionContext } from \"@livekit/components-react\"\nimport { CallEnd03Icon } from \"@hugeicons/core-free-icons\"\nimport { HugeiconsIcon } from \"@hugeicons/react\"\nimport { Button } from \"@workspace/ui/components/button\"\n\nexport interface AgentDisconnectButtonProps\n extends React.ComponentProps<\"button\"> {\n onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void\n}\n\nexport function AgentDisconnectButton({\n children,\n onClick,\n className,\n ...props\n}: AgentDisconnectButtonProps) {\n const { end } = useSessionContext()\n\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(event)\n if (typeof end === \"function\") end()\n }\n\n return (\n <Button\n variant=\"destructive\"\n size=\"icon\"\n onClick={handleClick}\n className={className}\n {...props}\n >\n {children ?? <HugeiconsIcon icon={CallEnd03Icon} />}\n </Button>\n )\n}\n","\"use client\"\n\nimport { useState, type KeyboardEvent } from \"react\"\nimport { useChat } from \"@livekit/components-react\"\nimport { HugeiconsIcon } from \"@hugeicons/react\"\nimport { Loading03Icon, Navigation03Icon } from \"@hugeicons/core-free-icons\"\nimport { cn } from \"@workspace/ui/lib/utils\"\n\nexport function AgentTranscriptPanel() {\n const { send } = useChat()\n const [message, setMessage] = useState(\"\")\n const [isSending, setIsSending] = useState(false)\n const isDisabled = isSending || message.trim().length === 0\n\n const handleSend = async () => {\n if (isDisabled) return\n try {\n setIsSending(true)\n await send(message.trim())\n setMessage(\"\")\n } catch {\n // silent\n } finally {\n setIsSending(false)\n }\n }\n\n const handleKeyDown = (e: KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault()\n handleSend()\n }\n }\n\n return (\n <div className=\"flex items-end gap-1 px-2 py-1 border-b relative\">\n <textarea\n autoFocus\n value={message}\n disabled={isSending}\n maxLength={500}\n placeholder=\"Type something...\"\n onKeyDown={handleKeyDown}\n onChange={(e) => setMessage(e.target.value.slice(0, 500))}\n className=\"field-sizing-content h-16 min-h-6 flex-1 resize-none py-1 text-xs [scrollbar-width:thin] focus:outline-none disabled:cursor-not-allowed disabled:opacity-50\"\n />\n <button\n type=\"button\"\n disabled={isDisabled}\n onClick={handleSend}\n title={isSending ? \"Sending…\" : \"Send\"}\n className={cn(\n \"flex size-6 flex-shrink-0 items-center justify-center self-end rounded absolute bottom-2 right-2\",\n isDisabled\n ? \"cursor-not-allowed text-muted-foreground\"\n : \"cursor-pointer text-foreground hover:opacity-80\"\n )}\n >\n {isSending ? (\n <HugeiconsIcon\n icon={Loading03Icon}\n size={18}\n className=\"animate-spin\"\n />\n ) : (\n <HugeiconsIcon\n icon={Navigation03Icon}\n size={18}\n className=\"fill-primary/50 text-primary\"\n />\n )}\n </button>\n </div>\n )\n}\n","import { useCallback } from \"react\"\nimport { Track } from \"livekit-client\"\nimport {\n type TrackReference,\n useTrackToggle,\n usePersistentUserChoices,\n useLocalParticipantPermissions,\n useSessionContext,\n} from \"@livekit/components-react\"\n\nconst trackSourceToProtocol = (source: Track.Source) => {\n switch (source) {\n case Track.Source.Camera:\n return 1\n case Track.Source.Microphone:\n return 2\n case Track.Source.ScreenShare:\n return 3\n default:\n return 0\n }\n}\n\nexport interface PublishPermissions {\n camera: boolean\n microphone: boolean\n screenShare: boolean\n data: boolean\n}\n\nexport function usePublishPermissions(): PublishPermissions {\n const localPermissions = useLocalParticipantPermissions()\n\n const canPublishSource = (source: Track.Source) => {\n return (\n !!localPermissions?.canPublish &&\n (localPermissions.canPublishSources.length === 0 ||\n localPermissions.canPublishSources.includes(\n trackSourceToProtocol(source)\n ))\n )\n }\n\n return {\n camera: canPublishSource(Track.Source.Camera),\n microphone: canPublishSource(Track.Source.Microphone),\n screenShare: canPublishSource(Track.Source.ScreenShare),\n data: localPermissions?.canPublishData ?? false,\n }\n}\n\nexport interface UseInputControlsProps {\n saveUserChoices?: boolean\n onDeviceError?: (error: { source: Track.Source; error: Error }) => void\n}\n\nexport interface UseInputControlsReturn {\n microphoneTrack?: TrackReference\n microphoneToggle: ReturnType<typeof useTrackToggle<Track.Source.Microphone>>\n cameraToggle: ReturnType<typeof useTrackToggle<Track.Source.Camera>>\n screenShareToggle: ReturnType<typeof useTrackToggle<Track.Source.ScreenShare>>\n handleAudioDeviceChange: (deviceId: string) => void\n handleVideoDeviceChange: (deviceId: string) => void\n handleMicrophoneDeviceSelectError: (error: Error) => void\n handleCameraDeviceSelectError: (error: Error) => void\n}\n\nexport function useInputControls({\n saveUserChoices = true,\n onDeviceError,\n}: UseInputControlsProps = {}): UseInputControlsReturn {\n const {\n local: { microphoneTrack },\n } = useSessionContext()\n\n const microphoneToggle = useTrackToggle({\n source: Track.Source.Microphone,\n onDeviceError: (error) =>\n onDeviceError?.({ source: Track.Source.Microphone, error }),\n })\n\n const cameraToggle = useTrackToggle({\n source: Track.Source.Camera,\n onDeviceError: (error) =>\n onDeviceError?.({ source: Track.Source.Camera, error }),\n })\n\n const screenShareToggle = useTrackToggle({\n source: Track.Source.ScreenShare,\n onDeviceError: (error) =>\n onDeviceError?.({ source: Track.Source.ScreenShare, error }),\n })\n\n const {\n saveAudioInputEnabled,\n saveVideoInputEnabled,\n saveAudioInputDeviceId,\n saveVideoInputDeviceId,\n } = usePersistentUserChoices({ preventSave: !saveUserChoices })\n\n const handleAudioDeviceChange = useCallback(\n (deviceId: string) => {\n saveAudioInputDeviceId(deviceId ?? \"default\")\n },\n [saveAudioInputDeviceId]\n )\n\n const handleVideoDeviceChange = useCallback(\n (deviceId: string) => {\n saveVideoInputDeviceId(deviceId ?? \"default\")\n },\n [saveVideoInputDeviceId]\n )\n\n const handleToggleCamera = useCallback(\n async (enabled?: boolean) => {\n if (screenShareToggle.enabled) {\n screenShareToggle.toggle(false)\n }\n await cameraToggle.toggle(enabled)\n saveVideoInputEnabled(!cameraToggle.enabled)\n },\n [cameraToggle, screenShareToggle, saveVideoInputEnabled]\n )\n\n const handleToggleMicrophone = useCallback(\n async (enabled?: boolean) => {\n await microphoneToggle.toggle(enabled)\n saveAudioInputEnabled(!microphoneToggle.enabled)\n },\n [microphoneToggle, saveAudioInputEnabled]\n )\n\n const handleToggleScreenShare = useCallback(\n async (enabled?: boolean) => {\n if (cameraToggle.enabled) {\n cameraToggle.toggle(false)\n }\n await screenShareToggle.toggle(enabled)\n },\n [cameraToggle, screenShareToggle]\n )\n\n const handleMicrophoneDeviceSelectError = useCallback(\n (error: Error) =>\n onDeviceError?.({ source: Track.Source.Microphone, error }),\n [onDeviceError]\n )\n\n const handleCameraDeviceSelectError = useCallback(\n (error: Error) => onDeviceError?.({ source: Track.Source.Camera, error }),\n [onDeviceError]\n )\n\n return {\n microphoneTrack,\n cameraToggle: {\n ...cameraToggle,\n toggle: handleToggleCamera,\n },\n microphoneToggle: {\n ...microphoneToggle,\n toggle: handleToggleMicrophone,\n },\n screenShareToggle: {\n ...screenShareToggle,\n toggle: handleToggleScreenShare,\n },\n handleAudioDeviceChange,\n handleVideoDeviceChange,\n handleMicrophoneDeviceSelectError,\n handleCameraDeviceSelectError,\n }\n}\n","import type { ComponentProps } from \"react\"\nimport { useEnsureRoom, useStartAudio } from \"@livekit/components-react\"\nimport { Button } from \"@workspace/ui/components/button\"\nimport type { Room } from \"livekit-client\"\n\n/**\n * Props for the StartAudioButton component.\n */\nexport interface StartAudioButtonProps extends ComponentProps<\"button\"> {\n /**\n * The size of the button.\n * @defaultValue 'default'\n */\n size?: \"default\" | \"sm\" | \"lg\" | \"icon\" | \"icon-sm\" | \"icon-lg\"\n /**\n * The variant of the button.\n * @defaultValue 'default'\n */\n variant?:\n | \"default\"\n | \"destructive\"\n | \"outline\"\n | \"secondary\"\n | \"ghost\"\n | \"link\"\n /**\n * The LiveKit room instance. If not provided, uses the room from context.\n */\n room?: Room\n /**\n * The label text to display on the button.\n */\n label: string\n}\n\n/**\n * A button that allows users to start audio playback.\n * Required for browsers that block autoplay of audio.\n * Only renders when audio playback is blocked.\n *\n * @extends ComponentProps<'button'>\n *\n * @example\n * ```tsx\n * <StartAudioButton label=\"Click to allow audio playback\" />\n * ```\n */\nexport function StartAudioButton({\n size = \"default\",\n variant = \"default\",\n label,\n room,\n ...props\n}: StartAudioButtonProps) {\n const roomEnsured = useEnsureRoom(room)\n const { mergedProps } = useStartAudio({ room: roomEnsured, props })\n return (\n <Button size={size} variant={variant} {...props} {...mergedProps}>\n {label}\n </Button>\n )\n}\n","\"use client\"\n\nimport {\n ThumbsUpIcon,\n ThumbsDownIcon,\n MultiplicationSignIcon,\n} from \"@hugeicons/core-free-icons\"\nimport { HugeiconsIcon } from \"@hugeicons/react\"\nimport { Button } from \"@workspace/ui/components/button\"\n\ntype Outcome = \"POSITIVE\" | \"NEGATIVE\" | \"NEUTRAL\"\n\ninterface OutcomeBarProps {\n onSubmit: (outcome: Outcome) => void\n}\n\nexport function OutcomeBar({ onSubmit }: OutcomeBarProps) {\n return (\n <div className=\"flex items-center justify-between border-b px-3 py-2\">\n <span className=\"text-sm text-muted-foreground\">Did we help?</span>\n <div className=\"flex items-center gap-1\">\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={() => onSubmit(\"POSITIVE\")}\n aria-label=\"Yes, this helped\"\n >\n <HugeiconsIcon icon={ThumbsUpIcon} className=\"size-4\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={() => onSubmit(\"NEGATIVE\")}\n aria-label=\"No, this didn't help\"\n >\n <HugeiconsIcon icon={ThumbsDownIcon} className=\"size-4\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={() => onSubmit(\"NEUTRAL\")}\n aria-label=\"Dismiss\"\n >\n <HugeiconsIcon icon={MultiplicationSignIcon} className=\"size-4\" />\n </Button>\n </div>\n </div>\n )\n}\n","\"use client\"\n\nimport { useState } from \"react\"\nimport { motion, AnimatePresence } from \"motion/react\"\nimport { HugeiconsIcon } from \"@hugeicons/react\"\nimport {\n Call02Icon,\n ViewOffSlashIcon,\n PlayIcon,\n Cancel01Icon,\n StarIcon,\n} from \"@hugeicons/core-free-icons\"\nimport { cn } from \"@workspace/ui/lib/utils\"\nimport { Button } from \"@workspace/ui/components/button\"\nimport type { ApiWorkflow } from \"../schemas.js\"\n\nexport type TriggerPosition =\n | \"top-left\"\n | \"top-right\"\n | \"bottom-left\"\n | \"bottom-right\"\n\ninterface VoiceboxMenuProps {\n workflows: ApiWorkflow[]\n position: TriggerPosition\n playingWorkflowId?: string | null\n playingStepIndex?: number\n onPositionChange: (pos: TriggerPosition) => void\n onHide: () => void\n onAskMeridial: () => void\n onPlayGuide: (wf: ApiWorkflow) => void\n onAbortGuide: () => void\n}\n\nconst POSITION_LABELS: Record<TriggerPosition, string> = {\n \"top-left\": \"Top Left\",\n \"top-right\": \"Top Right\",\n \"bottom-left\": \"Bottom Left\",\n \"bottom-right\": \"Bottom Right\",\n}\n\nconst MENU_PLACEMENT: Record<\n TriggerPosition,\n { originX: number; originY: number; className: string }\n> = {\n \"bottom-right\": {\n originX: 1,\n originY: 1,\n className: \"right-0 bottom-full mb-3\",\n },\n \"bottom-left\": {\n originX: 0,\n originY: 1,\n className: \"left-0 bottom-full mb-3\",\n },\n \"top-right\": {\n originX: 1,\n originY: 0,\n className: \"right-0 top-full mt-3\",\n },\n \"top-left\": {\n originX: 0,\n originY: 0,\n className: \"left-0 top-full mt-3\",\n },\n}\n\nexport function VoiceboxMenu({\n workflows,\n position,\n playingWorkflowId,\n playingStepIndex = 0,\n onPositionChange,\n onHide,\n onAskMeridial,\n onPlayGuide,\n onAbortGuide,\n}: VoiceboxMenuProps) {\n const placement = MENU_PLACEMENT[position]\n const [activeTab, setActiveTab] = useState<\"settings\" | \"guides\">(\"settings\")\n\n // Sort: favorites first, then rest\n const sortedWorkflows = [...workflows].sort((a, b) => {\n if (a.isFavorite && !b.isFavorite) return -1\n if (!a.isFavorite && b.isFavorite) return 1\n return 0\n })\n\n return (\n <motion.div\n data-meridial-ui\n onClick={(e) => e.stopPropagation()}\n className={cn(\n \"absolute z-50 w-72 overflow-hidden rounded-lg border border-border bg-card shadow-lg\",\n \"[&::-webkit-scrollbar]:hidden scrollbar-none\",\n placement.className\n )}\n initial={{ opacity: 0, scale: 0.9 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.9 }}\n style={{\n transformOrigin: `${placement.originX * 100}% ${placement.originY * 100}%`,\n }}\n transition={{ duration: 0.15, ease: \"easeOut\" }}\n >\n {/* Tab bar */}\n <div data-meridial-ui className=\"flex border-b border-border\">\n <button\n data-meridial-ui\n onClick={() => setActiveTab(\"settings\")}\n className={cn(\n \"flex-1 cursor-pointer px-3 py-2 text-xs font-medium tracking-wider transition-colors\",\n activeTab === \"settings\"\n ? \"border-b-2 border-primary text-foreground\"\n : \"text-muted-foreground hover:text-foreground\"\n )}\n >\n Settings\n </button>\n <button\n data-meridial-ui\n onClick={() => setActiveTab(\"guides\")}\n className={cn(\n \"flex-1 cursor-pointer px-3 py-2 text-xs font-medium tracking-wider transition-colors\",\n activeTab === \"guides\"\n ? \"border-b-2 border-primary text-foreground\"\n : \"text-muted-foreground hover:text-foreground\"\n )}\n >\n Guides\n </button>\n </div>\n\n <AnimatePresence mode=\"wait\">\n {activeTab === \"settings\" ? (\n <motion.div\n key=\"settings\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.1 }}\n className=\"flex flex-col gap-0 h-[200px]\"\n >\n {/* Position */}\n <div\n data-meridial-ui\n className=\"border-b border-border px-3 py-2.5\"\n >\n <span className=\"mb-1.5 block text-xs font-medium tracking-wider text-muted-foreground\">\n Position\n </span>\n <div className=\"grid grid-cols-2 gap-1\">\n {(\n Object.entries(POSITION_LABELS) as [TriggerPosition, string][]\n ).map(([pos, label]) => (\n <button\n key={pos}\n data-meridial-ui\n onClick={() => onPositionChange(pos)}\n className={cn(\n \"cursor-pointer rounded px-2 py-1.5 text-xs font-medium transition-colors\",\n pos === position\n ? \"bg-primary text-primary-foreground\"\n : \"bg-muted text-muted-foreground hover:bg-muted/80 hover:text-foreground\"\n )}\n >\n {label}\n </button>\n ))}\n </div>\n </div>\n\n {/* Hide Until Next Visit */}\n <div className=\"flex items-center justify-between border-b border-border px-3 py-2.5\">\n <span className=\"text-xs font-medium tracking-wider text-muted-foreground\">\n Hide Until Next Visit\n </span>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n data-meridial-ui\n onClick={onHide}\n >\n <HugeiconsIcon\n icon={ViewOffSlashIcon}\n size={16}\n className=\"shrink-0\"\n />\n </Button>\n </div>\n\n {/* Ask For Help */}\n <div className=\"flex items-center justify-center p-2\">\n <Button\n data-meridial-ui\n onClick={onAskMeridial}\n variant=\"default\"\n className=\"w-full\"\n >\n <HugeiconsIcon\n icon={Call02Icon}\n size={16}\n className=\"shrink-0\"\n />\n Ask For Help\n </Button>\n </div>\n </motion.div>\n ) : (\n <motion.div\n key=\"guides\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.1 }}\n className=\"h-[200px] overflow-y-auto\"\n >\n {sortedWorkflows.length === 0 ? (\n <div className=\"flex h-full items-center justify-center text-xs text-muted-foreground\">\n No guides available\n </div>\n ) : (\n <div className=\"flex flex-col gap-0.5 p-2\">\n {sortedWorkflows.map((wf) => {\n const isPlaying = wf.id === playingWorkflowId\n const totalSteps = wf.steps.length\n const progressPercent =\n isPlaying && totalSteps > 0\n ? ((playingStepIndex + 1) / totalSteps) * 100\n : 0\n\n return (\n <div\n key={wf.id}\n data-meridial-ui\n className=\"relative overflow-hidden rounded-md px-3 py-2 hover:bg-muted\"\n >\n {/* Progress background fill */}\n {isPlaying && (\n <div\n className=\"absolute inset-0 bg-primary/10 transition-[width] duration-300 ease-out\"\n style={{ width: `${progressPercent}%` }}\n />\n )}\n\n <div className=\"relative flex items-start gap-2\">\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-1\">\n {wf.isFavorite && (\n <HugeiconsIcon\n icon={StarIcon}\n size={12}\n className=\"shrink-0 fill-amber-400 text-amber-400\"\n />\n )}\n <span className=\"line-clamp-1 text-sm font-medium text-foreground\">\n {wf.name}\n </span>\n </div>\n {wf.description && (\n <p className=\"line-clamp-2 mt-0.5 text-xs text-muted-foreground\">\n {wf.description}\n </p>\n )}\n </div>\n\n <Button\n variant=\"ghost\"\n size=\"icon\"\n data-meridial-ui\n onClick={() =>\n isPlaying ? onAbortGuide() : onPlayGuide(wf)\n }\n >\n <HugeiconsIcon\n icon={isPlaying ? Cancel01Icon : PlayIcon}\n size={16}\n className={\n isPlaying ? \"\" : \"fill-primary/60 text-primary\"\n }\n />\n </Button>\n </div>\n </div>\n )\n })}\n </div>\n )}\n </motion.div>\n )}\n </AnimatePresence>\n </motion.div>\n )\n}\n"],"mappings":"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","names":["AnimatePresence","useState","useEffect","jsx","jsxs","jsx","useSessionContext","useEnsureRoom","AnimatePresence","motion","RpcError","useRef","useState","useMemo","useEffect","useCallback","Loading03Icon","HugeiconsIcon","React","React","React","React","React","React","IndexGuessBehavior","disabled","Toggle","disabled","jsx","Toggle","useEffect","error","jsx","jsxs","Fragment","useMemo","useEffect","useRef","useState","jsx","useMemo","Fragment","useMemo","useState","HugeiconsIcon","jsx","jsxs","useState","useMemo","Toggle","HugeiconsIcon","jsx","disabled","HugeiconsIcon","jsx","HugeiconsIcon","useState","HugeiconsIcon","Loading03Icon","jsx","jsxs","useState","HugeiconsIcon","Loading03Icon","useCallback","Track","useSessionContext","useSessionContext","Track","error","useCallback","useEnsureRoom","jsx","useEnsureRoom","HugeiconsIcon","jsx","jsxs","HugeiconsIcon","Fragment","jsx","jsxs","useMemo","useState","useRef","useEnsureRoom","useCallback","useEffect","error","RpcError","useSessionContext","motion","AnimatePresence","Toggle","HugeiconsIcon","Loading03Icon","useState","motion","AnimatePresence","HugeiconsIcon","jsx","jsxs","useState","motion","AnimatePresence","HugeiconsIcon","Fragment","jsx","jsxs","useState","useEffect","AnimatePresence"]}
|
package/dist/index.js
CHANGED
package/dist/recorder.js
CHANGED
package/dist/styles.css
CHANGED
|
@@ -326,6 +326,9 @@
|
|
|
326
326
|
.bottom-1 {
|
|
327
327
|
bottom: calc(var(--spacing) * 1);
|
|
328
328
|
}
|
|
329
|
+
.bottom-2 {
|
|
330
|
+
bottom: calc(var(--spacing) * 2);
|
|
331
|
+
}
|
|
329
332
|
.bottom-4 {
|
|
330
333
|
bottom: calc(var(--spacing) * 4);
|
|
331
334
|
}
|
|
@@ -419,9 +422,6 @@
|
|
|
419
422
|
.mx-3\.5 {
|
|
420
423
|
margin-inline: calc(var(--spacing) * 3.5);
|
|
421
424
|
}
|
|
422
|
-
.mx-4 {
|
|
423
|
-
margin-inline: calc(var(--spacing) * 4);
|
|
424
|
-
}
|
|
425
425
|
.mx-auto {
|
|
426
426
|
margin-inline: auto;
|
|
427
427
|
}
|
|
@@ -655,6 +655,9 @@
|
|
|
655
655
|
.h-12 {
|
|
656
656
|
height: calc(var(--spacing) * 12);
|
|
657
657
|
}
|
|
658
|
+
.h-16 {
|
|
659
|
+
height: calc(var(--spacing) * 16);
|
|
660
|
+
}
|
|
658
661
|
.h-\[200px\] {
|
|
659
662
|
height: 200px;
|
|
660
663
|
}
|
|
@@ -673,9 +676,6 @@
|
|
|
673
676
|
.max-h-\(--available-height\) {
|
|
674
677
|
max-height: var(--available-height);
|
|
675
678
|
}
|
|
676
|
-
.max-h-20 {
|
|
677
|
-
max-height: calc(var(--spacing) * 20);
|
|
678
|
-
}
|
|
679
679
|
.max-h-60 {
|
|
680
680
|
max-height: calc(var(--spacing) * 60);
|
|
681
681
|
}
|
|
@@ -736,9 +736,6 @@
|
|
|
736
736
|
.w-72 {
|
|
737
737
|
width: calc(var(--spacing) * 72);
|
|
738
738
|
}
|
|
739
|
-
.w-96 {
|
|
740
|
-
width: calc(var(--spacing) * 96);
|
|
741
|
-
}
|
|
742
739
|
.w-\[100px\] {
|
|
743
740
|
width: 100px;
|
|
744
741
|
}
|
|
@@ -1270,6 +1267,12 @@
|
|
|
1270
1267
|
.bg-\(--color-bg\) {
|
|
1271
1268
|
background-color: var(--color-bg);
|
|
1272
1269
|
}
|
|
1270
|
+
.bg-alert\/10 {
|
|
1271
|
+
background-color: var(--alert);
|
|
1272
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
1273
|
+
background-color: color-mix(in oklab, var(--alert) 10%, transparent);
|
|
1274
|
+
}
|
|
1275
|
+
}
|
|
1273
1276
|
.bg-background {
|
|
1274
1277
|
background-color: var(--background);
|
|
1275
1278
|
}
|
|
@@ -1294,6 +1297,12 @@
|
|
|
1294
1297
|
.bg-foreground {
|
|
1295
1298
|
background-color: var(--foreground);
|
|
1296
1299
|
}
|
|
1300
|
+
.bg-info\/10 {
|
|
1301
|
+
background-color: var(--info);
|
|
1302
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
1303
|
+
background-color: color-mix(in oklab, var(--info) 10%, transparent);
|
|
1304
|
+
}
|
|
1305
|
+
}
|
|
1297
1306
|
.bg-input {
|
|
1298
1307
|
background-color: var(--input);
|
|
1299
1308
|
}
|
|
@@ -1345,6 +1354,12 @@
|
|
|
1345
1354
|
.bg-sidebar-border {
|
|
1346
1355
|
background-color: var(--sidebar-border);
|
|
1347
1356
|
}
|
|
1357
|
+
.bg-success\/10 {
|
|
1358
|
+
background-color: var(--success);
|
|
1359
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
1360
|
+
background-color: color-mix(in oklab, var(--success) 10%, transparent);
|
|
1361
|
+
}
|
|
1362
|
+
}
|
|
1348
1363
|
.bg-transparent {
|
|
1349
1364
|
background-color: transparent;
|
|
1350
1365
|
}
|
|
@@ -1599,6 +1614,9 @@
|
|
|
1599
1614
|
.whitespace-nowrap {
|
|
1600
1615
|
white-space: nowrap;
|
|
1601
1616
|
}
|
|
1617
|
+
.text-alert {
|
|
1618
|
+
color: var(--alert);
|
|
1619
|
+
}
|
|
1602
1620
|
.text-amber-400 {
|
|
1603
1621
|
color: var(--color-amber-400);
|
|
1604
1622
|
}
|
|
@@ -1623,6 +1641,9 @@
|
|
|
1623
1641
|
.text-green-500 {
|
|
1624
1642
|
color: var(--color-green-500);
|
|
1625
1643
|
}
|
|
1644
|
+
.text-info {
|
|
1645
|
+
color: var(--info);
|
|
1646
|
+
}
|
|
1626
1647
|
.text-muted-foreground {
|
|
1627
1648
|
color: var(--muted-foreground);
|
|
1628
1649
|
}
|
|
@@ -1650,6 +1671,9 @@
|
|
|
1650
1671
|
color: color-mix(in oklab, var(--sidebar-foreground) 70%, transparent);
|
|
1651
1672
|
}
|
|
1652
1673
|
}
|
|
1674
|
+
.text-success {
|
|
1675
|
+
color: var(--success);
|
|
1676
|
+
}
|
|
1653
1677
|
.capitalize {
|
|
1654
1678
|
text-transform: capitalize;
|
|
1655
1679
|
}
|
|
@@ -2691,6 +2715,14 @@
|
|
|
2691
2715
|
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
|
|
2692
2716
|
}
|
|
2693
2717
|
}
|
|
2718
|
+
.focus-visible\:ring-alert\/20 {
|
|
2719
|
+
&:focus-visible {
|
|
2720
|
+
--tw-ring-color: var(--alert);
|
|
2721
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
2722
|
+
--tw-ring-color: color-mix(in oklab, var(--alert) 20%, transparent);
|
|
2723
|
+
}
|
|
2724
|
+
}
|
|
2725
|
+
}
|
|
2694
2726
|
.focus-visible\:ring-destructive\/20 {
|
|
2695
2727
|
&:focus-visible {
|
|
2696
2728
|
--tw-ring-color: var(--destructive);
|
|
@@ -2699,6 +2731,14 @@
|
|
|
2699
2731
|
}
|
|
2700
2732
|
}
|
|
2701
2733
|
}
|
|
2734
|
+
.focus-visible\:ring-info\/20 {
|
|
2735
|
+
&:focus-visible {
|
|
2736
|
+
--tw-ring-color: var(--info);
|
|
2737
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
2738
|
+
--tw-ring-color: color-mix(in oklab, var(--info) 20%, transparent);
|
|
2739
|
+
}
|
|
2740
|
+
}
|
|
2741
|
+
}
|
|
2702
2742
|
.focus-visible\:ring-ring\/50 {
|
|
2703
2743
|
&:focus-visible {
|
|
2704
2744
|
--tw-ring-color: var(--ring);
|
|
@@ -2707,6 +2747,14 @@
|
|
|
2707
2747
|
}
|
|
2708
2748
|
}
|
|
2709
2749
|
}
|
|
2750
|
+
.focus-visible\:ring-success\/20 {
|
|
2751
|
+
&:focus-visible {
|
|
2752
|
+
--tw-ring-color: var(--success);
|
|
2753
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
2754
|
+
--tw-ring-color: color-mix(in oklab, var(--success) 20%, transparent);
|
|
2755
|
+
}
|
|
2756
|
+
}
|
|
2757
|
+
}
|
|
2710
2758
|
.focus-visible\:outline-1 {
|
|
2711
2759
|
&:focus-visible {
|
|
2712
2760
|
outline-style: var(--tw-outline-style);
|
|
@@ -4286,6 +4334,14 @@
|
|
|
4286
4334
|
border-color: var(--input);
|
|
4287
4335
|
}
|
|
4288
4336
|
}
|
|
4337
|
+
.dark\:bg-alert\/20 {
|
|
4338
|
+
&:is(.dark *) {
|
|
4339
|
+
background-color: var(--alert);
|
|
4340
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
4341
|
+
background-color: color-mix(in oklab, var(--alert) 20%, transparent);
|
|
4342
|
+
}
|
|
4343
|
+
}
|
|
4344
|
+
}
|
|
4289
4345
|
.dark\:bg-destructive\/20 {
|
|
4290
4346
|
&:is(.dark *) {
|
|
4291
4347
|
background-color: var(--destructive);
|
|
@@ -4294,6 +4350,14 @@
|
|
|
4294
4350
|
}
|
|
4295
4351
|
}
|
|
4296
4352
|
}
|
|
4353
|
+
.dark\:bg-info\/20 {
|
|
4354
|
+
&:is(.dark *) {
|
|
4355
|
+
background-color: var(--info);
|
|
4356
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
4357
|
+
background-color: color-mix(in oklab, var(--info) 20%, transparent);
|
|
4358
|
+
}
|
|
4359
|
+
}
|
|
4360
|
+
}
|
|
4297
4361
|
.dark\:bg-input\/30 {
|
|
4298
4362
|
&:is(.dark *) {
|
|
4299
4363
|
background-color: var(--input);
|
|
@@ -4310,6 +4374,14 @@
|
|
|
4310
4374
|
}
|
|
4311
4375
|
}
|
|
4312
4376
|
}
|
|
4377
|
+
.dark\:bg-success\/20 {
|
|
4378
|
+
&:is(.dark *) {
|
|
4379
|
+
background-color: var(--success);
|
|
4380
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
4381
|
+
background-color: color-mix(in oklab, var(--success) 20%, transparent);
|
|
4382
|
+
}
|
|
4383
|
+
}
|
|
4384
|
+
}
|
|
4313
4385
|
.dark\:bg-transparent {
|
|
4314
4386
|
&:is(.dark *) {
|
|
4315
4387
|
background-color: transparent;
|
|
@@ -4351,6 +4423,16 @@
|
|
|
4351
4423
|
}
|
|
4352
4424
|
}
|
|
4353
4425
|
}
|
|
4426
|
+
.dark\:focus-visible\:ring-alert\/40 {
|
|
4427
|
+
&:is(.dark *) {
|
|
4428
|
+
&:focus-visible {
|
|
4429
|
+
--tw-ring-color: var(--alert);
|
|
4430
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
4431
|
+
--tw-ring-color: color-mix(in oklab, var(--alert) 40%, transparent);
|
|
4432
|
+
}
|
|
4433
|
+
}
|
|
4434
|
+
}
|
|
4435
|
+
}
|
|
4354
4436
|
.dark\:focus-visible\:ring-destructive\/40 {
|
|
4355
4437
|
&:is(.dark *) {
|
|
4356
4438
|
&:focus-visible {
|
|
@@ -4361,6 +4443,26 @@
|
|
|
4361
4443
|
}
|
|
4362
4444
|
}
|
|
4363
4445
|
}
|
|
4446
|
+
.dark\:focus-visible\:ring-info\/40 {
|
|
4447
|
+
&:is(.dark *) {
|
|
4448
|
+
&:focus-visible {
|
|
4449
|
+
--tw-ring-color: var(--info);
|
|
4450
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
4451
|
+
--tw-ring-color: color-mix(in oklab, var(--info) 40%, transparent);
|
|
4452
|
+
}
|
|
4453
|
+
}
|
|
4454
|
+
}
|
|
4455
|
+
}
|
|
4456
|
+
.dark\:focus-visible\:ring-success\/40 {
|
|
4457
|
+
&:is(.dark *) {
|
|
4458
|
+
&:focus-visible {
|
|
4459
|
+
--tw-ring-color: var(--success);
|
|
4460
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
4461
|
+
--tw-ring-color: color-mix(in oklab, var(--success) 40%, transparent);
|
|
4462
|
+
}
|
|
4463
|
+
}
|
|
4464
|
+
}
|
|
4465
|
+
}
|
|
4364
4466
|
.dark\:disabled\:bg-input\/80 {
|
|
4365
4467
|
&:is(.dark *) {
|
|
4366
4468
|
&:disabled {
|
|
@@ -5064,6 +5166,18 @@
|
|
|
5064
5166
|
}
|
|
5065
5167
|
}
|
|
5066
5168
|
}
|
|
5169
|
+
.\[a\]\:hover\:bg-alert\/20 {
|
|
5170
|
+
&:is(a) {
|
|
5171
|
+
&:hover {
|
|
5172
|
+
@media (hover: hover) {
|
|
5173
|
+
background-color: var(--alert);
|
|
5174
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
5175
|
+
background-color: color-mix(in oklab, var(--alert) 20%, transparent);
|
|
5176
|
+
}
|
|
5177
|
+
}
|
|
5178
|
+
}
|
|
5179
|
+
}
|
|
5180
|
+
}
|
|
5067
5181
|
.\[a\]\:hover\:bg-destructive\/20 {
|
|
5068
5182
|
&:is(a) {
|
|
5069
5183
|
&:hover {
|
|
@@ -5076,6 +5190,18 @@
|
|
|
5076
5190
|
}
|
|
5077
5191
|
}
|
|
5078
5192
|
}
|
|
5193
|
+
.\[a\]\:hover\:bg-info\/20 {
|
|
5194
|
+
&:is(a) {
|
|
5195
|
+
&:hover {
|
|
5196
|
+
@media (hover: hover) {
|
|
5197
|
+
background-color: var(--info);
|
|
5198
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
5199
|
+
background-color: color-mix(in oklab, var(--info) 20%, transparent);
|
|
5200
|
+
}
|
|
5201
|
+
}
|
|
5202
|
+
}
|
|
5203
|
+
}
|
|
5204
|
+
}
|
|
5079
5205
|
.\[a\]\:hover\:bg-muted {
|
|
5080
5206
|
&:is(a) {
|
|
5081
5207
|
&:hover {
|
|
@@ -5109,6 +5235,18 @@
|
|
|
5109
5235
|
}
|
|
5110
5236
|
}
|
|
5111
5237
|
}
|
|
5238
|
+
.\[a\]\:hover\:bg-success\/20 {
|
|
5239
|
+
&:is(a) {
|
|
5240
|
+
&:hover {
|
|
5241
|
+
@media (hover: hover) {
|
|
5242
|
+
background-color: var(--success);
|
|
5243
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
5244
|
+
background-color: color-mix(in oklab, var(--success) 20%, transparent);
|
|
5245
|
+
}
|
|
5246
|
+
}
|
|
5247
|
+
}
|
|
5248
|
+
}
|
|
5249
|
+
}
|
|
5112
5250
|
.\[a\]\:hover\:text-muted-foreground {
|
|
5113
5251
|
&:is(a) {
|
|
5114
5252
|
&:hover {
|
|
@@ -5537,6 +5675,9 @@
|
|
|
5537
5675
|
--accent: oklch(0.97 0 0);
|
|
5538
5676
|
--accent-foreground: oklch(0.205 0 0);
|
|
5539
5677
|
--destructive: oklch(0.58 0.22 27);
|
|
5678
|
+
--success: oklch(0.62 0.18 159);
|
|
5679
|
+
--alert: oklch(0.72 0.18 84);
|
|
5680
|
+
--info: oklch(0.63 0.16 242);
|
|
5540
5681
|
--border: oklch(0.922 0 0);
|
|
5541
5682
|
--input: oklch(0.922 0 0);
|
|
5542
5683
|
--ring: oklch(0.708 0 0);
|
|
@@ -5571,6 +5712,9 @@
|
|
|
5571
5712
|
--accent: oklch(0.371 0 0);
|
|
5572
5713
|
--accent-foreground: oklch(0.985 0 0);
|
|
5573
5714
|
--destructive: oklch(0.704 0.191 22.216);
|
|
5715
|
+
--success: oklch(0.67 0.18 159);
|
|
5716
|
+
--alert: oklch(0.81 0.17 84);
|
|
5717
|
+
--info: oklch(0.68 0.16 242);
|
|
5574
5718
|
--border: oklch(1 0 0 / 10%);
|
|
5575
5719
|
--input: oklch(1 0 0 / 15%);
|
|
5576
5720
|
--ring: oklch(0.556 0 0);
|