@livo-tv/sdk 1.2.3 → 1.2.4
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/studio/index.cjs +166 -57
- package/dist/studio/index.cjs.map +1 -1
- package/dist/studio/index.d.cts +6 -0
- package/dist/studio/index.d.ts +6 -0
- package/dist/studio/index.js +166 -57
- package/dist/studio/index.js.map +1 -1
- package/package.json +1 -1
package/dist/studio/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/public-api.ts","../../src/studio/control.ts","../../src/studio/lib/cn.ts","../../src/studio/ui/button.tsx","../../src/studio/ui/alert-dialog.tsx","../../src/studio/ui/confirm-action.tsx","../../src/studio/hooks/use-before-unload.ts","../../src/studio/hooks/use-document-picture-in-picture.ts","../../src/studio/hooks/use-wake-lock.ts","../../src/studio/ui/empty-state.tsx","../../src/studio/lib/meeting.ts","../../src/studio/lib/screen-share-support.ts","../../src/studio/lib/parse.ts","../../src/studio/lib/studio-sounds.ts","../../src/studio/lib/bridge.ts","../../src/studio/lib/embed-urls.ts","../../src/studio/lib/clipboard.ts","../../src/studio/lib/share.ts","../../src/studio/lib/status.ts","../../src/studio/lib/window-lock.ts","../../src/studio/hooks/use-studio-window-lock.ts","../../src/studio/components/studio-skeleton.tsx","../../src/studio/components/studio-window-gate.tsx","../../src/studio/lib/devices.ts","../../src/studio/components/audio-waveform.tsx","../../src/studio/ui/tooltip.tsx","../../src/studio/components/studio-control-icon.tsx","../../src/studio/ui/dialog.tsx","../../src/studio/ui/input.tsx","../../src/studio/ui/label.tsx","../../src/studio/hooks/use-media-devices.ts","../../src/studio/lib/speaker-test.ts","../../src/studio/components/studio-device-select.tsx","../../src/studio/components/studio-settings-dialog.tsx","../../src/studio/components/studio-guest-waiting.tsx","../../src/studio/components/studio-live-badge.tsx","../../src/studio/ui/badge.tsx","../../src/studio/components/studio-pip-panel.tsx","../../src/studio/components/studio-remote-audio.tsx","../../src/studio/ui/bubble.tsx","../../src/studio/lib/chat-groups.ts","../../src/studio/components/studio-chat-panel.tsx","../../src/studio/components/studio-waiting-room.tsx","../../src/studio/components/studio-side-panel.tsx","../../src/studio/ui/dropdown-menu.tsx","../../src/studio/components/studio-tile-menu.tsx","../../src/studio/components/studio-tile.tsx","../../src/studio/components/studio-stage.tsx","../../src/studio/components/studio-toolbar.tsx","../../src/studio/components/studio-room.tsx","../../src/studio/components/studio-device-preflight.tsx","../../src/studio/components/studio-guest-lobby.tsx","../../src/studio/hooks/use-prefers-reduced-motion.ts","../../src/studio/lib/guest-identity.ts","../../src/studio/lib/realtimekit-adapter.ts","../../src/studio/hooks/use-realtimekit-meeting.ts","../../src/theme.ts","../../src/studio/public-session.ts","../../src/studio/host.tsx","../../src/studio/guest.tsx","../../src/studio/lib/labels.ts"],"names":["ButtonPrimitive","jsx","jsxs","useEffect","useState","useRef","useCallback","ctx","TooltipPrimitive","InputPrimitive","Mic","Video","cva","Fragment","MicOff","VideoOff","isModerator","toast","X","MenuPrimitive","MonitorUp","Settings","self","useMemo","Loader2","defaultStorage","joined","POLL_INTERVAL_MS"],"mappings":"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","file":"index.js","sourcesContent":["export type PublicStream = {\n\tid: string;\n\ttitle: string;\n\tstatus: string;\n\tplaybackUrl: string | null;\n\tposterUrl?: string | null;\n\tcaptionsUrl: string | null;\n\tviewers: number;\n\tstartsAt: number | null;\n\tdurationSeconds: number | null;\n\torganization: { name: string | null; image: string | null };\n\tcurtain: PublicCurtain | null;\n};\n\nexport type PublicCurtain = {\n\tkind: \"image\" | \"video\" | \"shader\";\n\turl: string;\n\thideBranding: boolean;\n\thideStatus: boolean;\n\tconfig?: Record<string, unknown>;\n\tenvBasePath?: string;\n};\n\nexport type PublicVod = {\n\tid: string;\n\ttitle: string;\n\tstatus: string;\n\tplaybackUrl: string | null;\n\tposterUrl: string | null;\n\tcurtain: PublicCurtain | null;\n\tcaptionsEnabled: boolean;\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function defaultApiUrl(): string {\n\treturn \"https://media-svc.livo.tv\";\n}\n\nexport function parsePublicStream(value: unknown): PublicStream | null {\n\tif (!isRecord(value) || typeof value.id !== \"string\") return null;\n\tif (typeof value.title !== \"string\" || typeof value.status !== \"string\") {\n\t\treturn null;\n\t}\n\tconst organization = isRecord(value.organization)\n\t\t? {\n\t\t\t\tname:\n\t\t\t\t\ttypeof value.organization.name === \"string\"\n\t\t\t\t\t\t? value.organization.name\n\t\t\t\t\t\t: null,\n\t\t\t\timage:\n\t\t\t\t\ttypeof value.organization.image === \"string\"\n\t\t\t\t\t\t? value.organization.image\n\t\t\t\t\t\t: null,\n\t\t\t}\n\t\t: { name: null, image: null };\n\treturn {\n\t\tid: value.id,\n\t\ttitle: value.title,\n\t\tstatus: value.status,\n\t\tplaybackUrl:\n\t\t\ttypeof value.playbackUrl === \"string\" ? value.playbackUrl : null,\n\t\tposterUrl: typeof value.posterUrl === \"string\" ? value.posterUrl : null,\n\t\tcaptionsUrl:\n\t\t\ttypeof value.captionsUrl === \"string\" ? value.captionsUrl : null,\n\t\tviewers: typeof value.viewers === \"number\" ? value.viewers : 0,\n\t\tstartsAt: typeof value.startsAt === \"number\" ? value.startsAt : null,\n\t\tdurationSeconds:\n\t\t\ttypeof value.durationSeconds === \"number\" ? value.durationSeconds : null,\n\t\torganization,\n\t\tcurtain: parsePublicCurtain(value.curtain),\n\t};\n}\n\nfunction parsePublicCurtain(value: unknown): PublicCurtain | null {\n\tif (!isRecord(value) || typeof value.url !== \"string\") return null;\n\tconst kind =\n\t\tvalue.kind === \"video\"\n\t\t\t? \"video\"\n\t\t\t: value.kind === \"shader\"\n\t\t\t\t? \"shader\"\n\t\t\t\t: value.kind === \"image\"\n\t\t\t\t\t? \"image\"\n\t\t\t\t\t: null;\n\tif (!kind) return null;\n\treturn {\n\t\tkind,\n\t\turl: value.url,\n\t\thideBranding: value.hideBranding === true,\n\t\thideStatus: value.hideStatus === true,\n\t\tconfig: isRecord(value.config) ? value.config : undefined,\n\t\tenvBasePath:\n\t\t\ttypeof value.envBasePath === \"string\" ? value.envBasePath : undefined,\n\t};\n}\n\nexport function parsePublicVod(value: unknown): PublicVod | null {\n\tif (!isRecord(value) || typeof value.id !== \"string\") return null;\n\tif (typeof value.title !== \"string\" || typeof value.status !== \"string\") {\n\t\treturn null;\n\t}\n\treturn {\n\t\tid: value.id,\n\t\ttitle: value.title,\n\t\tstatus: value.status,\n\t\tplaybackUrl:\n\t\t\ttypeof value.playbackUrl === \"string\" ? value.playbackUrl : null,\n\t\tposterUrl: typeof value.posterUrl === \"string\" ? value.posterUrl : null,\n\t\tcurtain: parsePublicCurtain(value.curtain),\n\t\tcaptionsEnabled: value.captionsEnabled === true,\n\t};\n}\n\nexport async function fetchPublicStream(\n\tapiUrl: string,\n\tstreamId: string,\n\tfetchFn: typeof fetch = fetch,\n): Promise<PublicStream | null> {\n\tconst res = await fetchFn(\n\t\t`${apiUrl.replace(/\\/$/, \"\")}/public/streams/${encodeURIComponent(streamId)}`,\n\t\t{ cache: \"no-store\" },\n\t);\n\tif (!res.ok) return null;\n\treturn parsePublicStream(await res.json());\n}\n\nexport async function fetchPublicVod(\n\tapiUrl: string,\n\tvodId: string,\n\tfetchFn: typeof fetch = fetch,\n): Promise<PublicVod | null> {\n\tconst res = await fetchFn(\n\t\t`${apiUrl.replace(/\\/$/, \"\")}/public/vods/${encodeURIComponent(vodId)}`,\n\t\t{ cache: \"no-store\" },\n\t);\n\tif (!res.ok) return null;\n\treturn parsePublicVod(await res.json());\n}\n\nexport async function heartbeatPresence(\n\tapiUrl: string,\n\tstreamId: string,\n\tsessionId: string,\n\tfetchFn: typeof fetch = fetch,\n): Promise<void> {\n\tawait fetchFn(\n\t\t`${apiUrl.replace(/\\/$/, \"\")}/public/streams/${encodeURIComponent(streamId)}/presence`,\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\theaders: { \"content-type\": \"application/json\" },\n\t\t\tbody: JSON.stringify({ sessionId }),\n\t\t},\n\t).catch(() => undefined);\n}\n","import { defaultApiUrl } from \"../public-api\";\nimport type { StudioControlActions } from \"./lib/control-actions\";\n\nexport type StudioControlClientOptions = {\n\tapiUrl?: string;\n\ttoken: string;\n\tfetchFn?: typeof fetch;\n};\n\nexport class StudioControlError extends Error {\n\treadonly status: number;\n\treadonly body: unknown;\n\n\tconstructor(status: number, message: string, body: unknown) {\n\t\tsuper(message);\n\t\tthis.name = \"StudioControlError\";\n\t\tthis.status = status;\n\t\tthis.body = body;\n\t}\n}\n\nexport class StudioControlClient {\n\tprivate token: string;\n\tprivate readonly apiUrl: string;\n\tprivate readonly fetchFn: typeof fetch;\n\n\tconstructor(options: StudioControlClientOptions) {\n\t\tthis.token = options.token;\n\t\tthis.apiUrl = (options.apiUrl ?? defaultApiUrl()).replace(/\\/$/, \"\");\n\t\tthis.fetchFn = options.fetchFn ?? fetch;\n\t}\n\n\tget currentToken(): string {\n\t\treturn this.token;\n\t}\n\n\tprivate url(suffix: string): string {\n\t\treturn `${this.apiUrl}/public/studio/control/${encodeURIComponent(this.token)}${suffix}`;\n\t}\n\n\tprivate async request<T>(suffix: string, method = \"GET\"): Promise<T> {\n\t\tconst res = await this.fetchFn(this.url(suffix), {\n\t\t\tmethod,\n\t\t\theaders: { accept: \"application/json\" },\n\t\t\tcache: \"no-store\",\n\t\t});\n\t\tconst body: unknown = await res.json().catch(() => ({}));\n\t\tif (!res.ok) {\n\t\t\tconst message =\n\t\t\t\tbody &&\n\t\t\t\ttypeof body === \"object\" &&\n\t\t\t\t\"error\" in body &&\n\t\t\t\ttypeof (body as { error: unknown }).error === \"string\"\n\t\t\t\t\t? (body as { error: string }).error\n\t\t\t\t\t: `Livo studio control ${res.status}`;\n\t\t\tthrow new StudioControlError(res.status, message, body);\n\t\t}\n\t\treturn body as T;\n\t}\n\n\tlivestream() {\n\t\treturn this.request<{ ok: true; egress: \"live\" | \"starting\" }>(\n\t\t\t\"/livestream\",\n\t\t\t\"POST\",\n\t\t);\n\t}\n\n\tpublish() {\n\t\treturn this.request<{ stream: { id: string; status: string } }>(\n\t\t\t\"/publish\",\n\t\t\t\"POST\",\n\t\t);\n\t}\n\n\tstop() {\n\t\treturn this.request<{ stream: { id: string; status: string } }>(\n\t\t\t\"/stop\",\n\t\t\t\"POST\",\n\t\t);\n\t}\n\n\tstate() {\n\t\treturn this.request<{\n\t\t\tstream: { id: string; title: string; status: string };\n\t\t}>(\"/state\");\n\t}\n\n\tasync refresh() {\n\t\tconst next = await this.request<{\n\t\t\tstudioControlToken: string;\n\t\t\texpiresAt: number;\n\t\t}>(\"/refresh\", \"POST\");\n\t\tthis.token = next.studioControlToken;\n\t\treturn next;\n\t}\n}\n\nexport function createStudioControlClient(options: StudioControlClientOptions) {\n\treturn new StudioControlClient(options);\n}\n\nexport function controlActionsFromClient(\n\tclient: StudioControlClient,\n): StudioControlActions {\n\treturn {\n\t\tasync livestream() {\n\t\t\tconst result = await client.livestream();\n\t\t\treturn result.egress;\n\t\t},\n\t\tasync publish() {\n\t\t\tawait client.publish();\n\t\t},\n\t\tasync stop() {\n\t\t\tawait client.stop();\n\t\t},\n\t};\n}\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs));\n}\n","import { Button as ButtonPrimitive } from \"@base-ui/react/button\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../lib/cn\";\n\nconst buttonVariants = cva(\n\t\"group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n\t{\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tdefault: \"bg-primary text-primary-foreground hover:bg-primary/80\",\n\t\t\t\toutline:\n\t\t\t\t\t\"border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50\",\n\t\t\t\tsecondary:\n\t\t\t\t\t\"bg-secondary text-secondary-foreground hover:bg-[color-mix(in_oklch,var(--secondary),var(--foreground)_5%)] aria-expanded:bg-secondary aria-expanded:text-secondary-foreground\",\n\t\t\t\tghost:\n\t\t\t\t\t\"hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50\",\n\t\t\t\tdestructive:\n\t\t\t\t\t\"bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40\",\n\t\t\t\tlink: \"text-primary underline-offset-4 hover:underline\",\n\t\t\t},\n\t\t\tsize: {\n\t\t\t\tdefault:\n\t\t\t\t\t\"h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2\",\n\t\t\t\txs: \"h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3\",\n\t\t\t\tsm: \"h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5\",\n\t\t\t\tlg: \"h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2\",\n\t\t\t\ticon: \"size-8\",\n\t\t\t\t\"icon-xs\":\n\t\t\t\t\t\"size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3\",\n\t\t\t\t\"icon-sm\":\n\t\t\t\t\t\"size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg\",\n\t\t\t\t\"icon-lg\": \"size-9\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tvariant: \"default\",\n\t\t\tsize: \"default\",\n\t\t},\n\t},\n);\n\nfunction Button({\n\tclassName,\n\tvariant = \"default\",\n\tsize = \"default\",\n\t...props\n}: ButtonPrimitive.Props & VariantProps<typeof buttonVariants>) {\n\treturn (\n\t\t<ButtonPrimitive\n\t\t\tdata-slot=\"button\"\n\t\t\tclassName={cn(buttonVariants({ variant, size, className }))}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport { Button, buttonVariants };\n","\"use client\";\n\nimport * as AlertDialogPrimitive from \"@radix-ui/react-alert-dialog\";\nimport type { ComponentProps } from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { buttonVariants } from \"./button\";\n\nfunction AlertDialog({\n\t...props\n}: ComponentProps<typeof AlertDialogPrimitive.Root>) {\n\treturn <AlertDialogPrimitive.Root data-slot=\"alert-dialog\" {...props} />;\n}\n\nfunction AlertDialogTrigger({\n\t...props\n}: ComponentProps<typeof AlertDialogPrimitive.Trigger>) {\n\treturn (\n\t\t<AlertDialogPrimitive.Trigger data-slot=\"alert-dialog-trigger\" {...props} />\n\t);\n}\n\nfunction AlertDialogPortal({\n\t...props\n}: ComponentProps<typeof AlertDialogPrimitive.Portal>) {\n\treturn (\n\t\t<AlertDialogPrimitive.Portal data-slot=\"alert-dialog-portal\" {...props} />\n\t);\n}\n\nfunction AlertDialogOverlay({\n\tclassName,\n\t...props\n}: ComponentProps<typeof AlertDialogPrimitive.Overlay>) {\n\treturn (\n\t\t<AlertDialogPrimitive.Overlay\n\t\t\tdata-slot=\"alert-dialog-overlay\"\n\t\t\tclassName={cn(\n\t\t\t\t\"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction AlertDialogContent({\n\tclassName,\n\t...props\n}: ComponentProps<typeof AlertDialogPrimitive.Content>) {\n\treturn (\n\t\t<AlertDialogPortal>\n\t\t\t<AlertDialogOverlay />\n\t\t\t<AlertDialogPrimitive.Content\n\t\t\t\tdata-slot=\"alert-dialog-content\"\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t</AlertDialogPortal>\n\t);\n}\n\nfunction AlertDialogHeader({ className, ...props }: ComponentProps<\"div\">) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"alert-dialog-header\"\n\t\t\tclassName={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction AlertDialogFooter({ className, ...props }: ComponentProps<\"div\">) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"alert-dialog-footer\"\n\t\t\tclassName={cn(\n\t\t\t\t\"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction AlertDialogTitle({\n\tclassName,\n\t...props\n}: ComponentProps<typeof AlertDialogPrimitive.Title>) {\n\treturn (\n\t\t<AlertDialogPrimitive.Title\n\t\t\tdata-slot=\"alert-dialog-title\"\n\t\t\tclassName={cn(\"text-lg font-semibold\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction AlertDialogDescription({\n\tclassName,\n\t...props\n}: ComponentProps<typeof AlertDialogPrimitive.Description>) {\n\treturn (\n\t\t<AlertDialogPrimitive.Description\n\t\t\tdata-slot=\"alert-dialog-description\"\n\t\t\tclassName={cn(\"text-muted-foreground text-sm\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction AlertDialogAction({\n\tclassName,\n\t...props\n}: ComponentProps<typeof AlertDialogPrimitive.Action>) {\n\treturn (\n\t\t<AlertDialogPrimitive.Action\n\t\t\tclassName={cn(buttonVariants(), className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction AlertDialogCancel({\n\tclassName,\n\t...props\n}: ComponentProps<typeof AlertDialogPrimitive.Cancel>) {\n\treturn (\n\t\t<AlertDialogPrimitive.Cancel\n\t\t\tclassName={cn(buttonVariants({ variant: \"outline\" }), className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport {\n\tAlertDialog,\n\tAlertDialogAction,\n\tAlertDialogCancel,\n\tAlertDialogContent,\n\tAlertDialogDescription,\n\tAlertDialogFooter,\n\tAlertDialogHeader,\n\tAlertDialogTitle,\n\tAlertDialogTrigger,\n};\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport {\n\tAlertDialog,\n\tAlertDialogAction,\n\tAlertDialogCancel,\n\tAlertDialogContent,\n\tAlertDialogDescription,\n\tAlertDialogFooter,\n\tAlertDialogHeader,\n\tAlertDialogTitle,\n\tAlertDialogTrigger,\n} from \"./alert-dialog\";\nimport { Button } from \"./button\";\n\nexport function ConfirmAction({\n\ttriggerLabel,\n\ttitle,\n\tdescription,\n\tconfirmLabel,\n\tcancelLabel = \"Cancel\",\n\tpending = false,\n\tonConfirm,\n\ttrigger,\n\topen,\n\tonOpenChange,\n}: {\n\ttriggerLabel: string;\n\ttitle: string;\n\tdescription: string;\n\tconfirmLabel: string;\n\tcancelLabel?: string;\n\tpending?: boolean;\n\tonConfirm: () => void;\n\ttrigger?: ReactNode;\n\topen?: boolean;\n\tonOpenChange?: (open: boolean) => void;\n}) {\n\tconst controlled = open !== undefined;\n\n\treturn (\n\t\t<AlertDialog open={open} onOpenChange={onOpenChange}>\n\t\t\t{controlled && trigger == null ? null : (\n\t\t\t\t<AlertDialogTrigger asChild>\n\t\t\t\t\t{trigger ?? (\n\t\t\t\t\t\t<Button type=\"button\" variant=\"destructive\" disabled={pending}>\n\t\t\t\t\t\t\t{triggerLabel}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t)}\n\t\t\t\t</AlertDialogTrigger>\n\t\t\t)}\n\t\t\t<AlertDialogContent>\n\t\t\t\t<AlertDialogHeader>\n\t\t\t\t\t<AlertDialogTitle>{title}</AlertDialogTitle>\n\t\t\t\t\t<AlertDialogDescription>{description}</AlertDialogDescription>\n\t\t\t\t</AlertDialogHeader>\n\t\t\t\t<AlertDialogFooter>\n\t\t\t\t\t<AlertDialogCancel>{cancelLabel}</AlertDialogCancel>\n\t\t\t\t\t<AlertDialogAction\n\t\t\t\t\t\tclassName=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n\t\t\t\t\t\tdisabled={pending}\n\t\t\t\t\t\tonClick={onConfirm}\n\t\t\t\t\t>\n\t\t\t\t\t\t{confirmLabel}\n\t\t\t\t\t</AlertDialogAction>\n\t\t\t\t</AlertDialogFooter>\n\t\t\t</AlertDialogContent>\n\t\t</AlertDialog>\n\t);\n}\n","import { useEffect } from \"react\";\n\n/** Prompt before tab close / refresh. Browsers ignore a custom message. */\nexport function useBeforeUnload(enabled: boolean) {\n\tuseEffect(() => {\n\t\tif (!enabled) return;\n\t\tfunction onBeforeUnload(event: BeforeUnloadEvent) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.returnValue = \"\";\n\t\t}\n\t\twindow.addEventListener(\"beforeunload\", onBeforeUnload);\n\t\treturn () => window.removeEventListener(\"beforeunload\", onBeforeUnload);\n\t}, [enabled]);\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useRef, useState } from \"react\";\n\ntype DocumentPictureInPicture = {\n\trequestWindow: (options?: {\n\t\twidth?: number;\n\t\theight?: number;\n\t}) => Promise<Window>;\n};\n\nconst DEFAULT_WIDTH = 400;\nconst DEFAULT_HEIGHT = 500;\n\nconst PIP_BASE_STYLE =\n\t\"html,body{height:100%;margin:0;overflow:hidden}body{display:flex;flex-direction:column}\";\n\nexport function isDocumentPictureInPictureSupported(): boolean {\n\treturn typeof window !== \"undefined\" && \"documentPictureInPicture\" in window;\n}\n\nexport function copyDocumentPictureInPictureChrome(\n\tfrom: Document,\n\tto: Document,\n): void {\n\tto.documentElement.className = from.documentElement.className;\n\tfor (const node of from.head.querySelectorAll(\n\t\t\"style, link[rel='stylesheet']\",\n\t)) {\n\t\tto.head.appendChild(node.cloneNode(true));\n\t}\n\tconst base = to.createElement(\"style\");\n\tbase.textContent = PIP_BASE_STYLE;\n\tto.head.appendChild(base);\n}\n\nexport function observeDocumentPictureInPictureTheme(\n\tfrom: Document,\n\tto: Document,\n): MutationObserver {\n\tconst sync = () => {\n\t\tto.documentElement.className = from.documentElement.className;\n\t};\n\tconst observer = new MutationObserver(sync);\n\tobserver.observe(from.documentElement, {\n\t\tattributes: true,\n\t\tattributeFilter: [\"class\"],\n\t});\n\treturn observer;\n}\n\nfunction documentPictureInPicture(): DocumentPictureInPicture | null {\n\tif (!isDocumentPictureInPictureSupported()) return null;\n\treturn (\n\t\twindow as unknown as {\n\t\t\tdocumentPictureInPicture: DocumentPictureInPicture;\n\t\t}\n\t).documentPictureInPicture;\n}\n\nexport function useDocumentPictureInPicture(options?: {\n\twidth?: number;\n\theight?: number;\n}) {\n\tconst [pipWindow, setPipWindow] = useState<Window | null>(null);\n\tconst pipRef = useRef<Window | null>(null);\n\tconst themeObserverRef = useRef<MutationObserver | null>(null);\n\tconst width = options?.width ?? DEFAULT_WIDTH;\n\tconst height = options?.height ?? DEFAULT_HEIGHT;\n\n\tconst disconnectTheme = useCallback(() => {\n\t\tthemeObserverRef.current?.disconnect();\n\t\tthemeObserverRef.current = null;\n\t}, []);\n\n\tconst open = useCallback(async () => {\n\t\tconst api = documentPictureInPicture();\n\t\tif (!api) {\n\t\t\tthrow new Error(\"Document Picture-in-Picture is not supported\");\n\t\t}\n\t\tif (pipRef.current && !pipRef.current.closed) {\n\t\t\treturn pipRef.current;\n\t\t}\n\t\tconst win = await api.requestWindow({ width, height });\n\t\tcopyDocumentPictureInPictureChrome(document, win.document);\n\t\tdisconnectTheme();\n\t\tthemeObserverRef.current = observeDocumentPictureInPictureTheme(\n\t\t\tdocument,\n\t\t\twin.document,\n\t\t);\n\t\tconst onPageHide = () => {\n\t\t\tdisconnectTheme();\n\t\t\tpipRef.current = null;\n\t\t\tsetPipWindow(null);\n\t\t};\n\t\twin.addEventListener(\"pagehide\", onPageHide);\n\t\tpipRef.current = win;\n\t\tsetPipWindow(win);\n\t\treturn win;\n\t}, [disconnectTheme, height, width]);\n\n\tconst close = useCallback(() => {\n\t\tdisconnectTheme();\n\t\tpipRef.current?.close();\n\t\tpipRef.current = null;\n\t\tsetPipWindow(null);\n\t\twindow.focus();\n\t}, [disconnectTheme]);\n\n\tuseEffect(() => {\n\t\tconst action = \"enterpictureinpicture\" as MediaSessionAction;\n\t\ttry {\n\t\t\tnavigator.mediaSession.setActionHandler(action, () => {\n\t\t\t\tvoid open();\n\t\t\t});\n\t\t} catch {\n\t\t\t/* action unsupported on this browser */\n\t\t}\n\t\treturn () => {\n\t\t\ttry {\n\t\t\t\tnavigator.mediaSession.setActionHandler(action, null);\n\t\t\t} catch {\n\t\t\t\t/* already unsupported */\n\t\t\t}\n\t\t\tdisconnectTheme();\n\t\t\tpipRef.current?.close();\n\t\t\tpipRef.current = null;\n\t\t};\n\t}, [disconnectTheme, open]);\n\n\treturn {\n\t\tsupported: isDocumentPictureInPictureSupported(),\n\t\tpipWindow,\n\t\topen,\n\t\tclose,\n\t};\n}\n","import { useEffect } from \"react\";\n\n/** Keep the screen awake while the studio is live. */\nexport function useWakeLock(enabled: boolean) {\n\tuseEffect(() => {\n\t\tif (!enabled || typeof navigator === \"undefined\") return;\n\t\tconst nav = navigator as Navigator & {\n\t\t\twakeLock?: {\n\t\t\t\trequest: (type: \"screen\") => Promise<{ release: () => Promise<void> }>;\n\t\t\t};\n\t\t};\n\t\tif (!nav.wakeLock) return;\n\t\tlet released = false;\n\t\tlet sentinel: { release: () => Promise<void> } | null = null;\n\t\tvoid nav.wakeLock\n\t\t\t.request(\"screen\")\n\t\t\t.then((lock) => {\n\t\t\t\tif (released) {\n\t\t\t\t\tvoid lock.release();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tsentinel = lock;\n\t\t\t})\n\t\t\t.catch(() => {\n\t\t\t\t/* browsers may deny Wake Lock without a user gesture */\n\t\t\t});\n\t\treturn () => {\n\t\t\treleased = true;\n\t\t\tvoid sentinel?.release();\n\t\t};\n\t}, [enabled]);\n}\n","import { Button } from \"./button\";\n\nexport function EmptyState({\n\ttitle,\n\tdescription,\n\tactionLabel,\n\tonAction,\n\tactionHref,\n}: {\n\ttitle: string;\n\tdescription: string;\n\tactionLabel?: string;\n\tonAction?: () => void;\n\tactionHref?: string;\n}) {\n\tconst action =\n\t\tactionLabel && actionHref ? (\n\t\t\t<Button render={<a href={actionHref} />}>{actionLabel}</Button>\n\t\t) : actionLabel ? (\n\t\t\t<Button type=\"button\" onClick={onAction}>\n\t\t\t\t{actionLabel}\n\t\t\t</Button>\n\t\t) : null;\n\treturn (\n\t\t<div\n\t\t\tclassName=\"flex flex-col items-start gap-3 rounded-xl border border-dashed p-8\"\n\t\t\trole=\"status\"\n\t\t>\n\t\t\t<h2 className=\"text-lg font-semibold\">{title}</h2>\n\t\t\t<p className=\"text-muted-foreground max-w-md text-sm\">{description}</p>\n\t\t\t{action}\n\t\t</div>\n\t);\n}\n","import type {\n\tStudioChatMessage,\n\tStudioDisplayTile,\n\tStudioMediaFlags,\n\tStudioParticipantTile,\n\tStudioSourceMode,\n\tStudioStageRequest,\n\tStudioStageStatus,\n\tStudioTileKind,\n\tStudioWaitlistedGuest,\n} from \"./types\";\n\nexport type {\n\tStudioChatMessage,\n\tStudioDisplayTile,\n\tStudioMediaFlags,\n\tStudioParticipantTile,\n\tStudioStageRequest,\n\tStudioStageStatus,\n\tStudioTileKind,\n\tStudioWaitlistedGuest,\n};\n\nexport const STUDIO_MODERATOR_PRESET = \"studio-moderator\";\nexport const STUDIO_GUEST_PRESET = \"studio-guest\";\n\nexport const STUDIO_DISPLAY_NAME_MAX = 80;\n\nexport const SHARE_REQUEST_TIMEOUT_MS = 45_000;\n\nexport type StudioDeviceKind = \"audio\" | \"video\" | \"speaker\";\n\nexport type StudioDeviceOption = {\n\tdeviceId: string;\n\tlabel: string;\n};\n\nexport type StudioDevices = {\n\taudio: StudioDeviceOption[];\n\tvideo: StudioDeviceOption[];\n\tspeaker: StudioDeviceOption[];\n};\n\nexport type StudioVideoKind = \"camera\" | \"screen\";\n\nexport type StudioHostMediaKind = \"audio\" | \"video\" | \"screen\";\n\nexport type StudioScreenSharePermission =\n\t\"ALLOWED\" | \"NOT_ALLOWED\" | \"CAN_REQUEST\";\n\nexport type StudioBroadcast =\n\t| { type: \"host-media\"; kind: StudioHostMediaKind }\n\t| { type: \"share-request\"; participantId: string; name: string }\n\t| { type: \"share-response\"; participantId: string; granted: boolean }\n\t| { type: \"display-name\"; participantId: string; name: string };\n\nexport type StudioBroadcastTarget =\n\t{ participantIds: string[] } | { presetNames: string[] };\n\nexport type StudioPipSpotlight = {\n\tparticipantId: string;\n\tname: string;\n\tkind: StudioTileKind;\n\tpicture: string | null;\n};\n\nexport type StudioMeetingHandle = {\n\tjoin: () => Promise<void>;\n\tleave: () => Promise<void>;\n\tsetAudioEnabled: (enabled: boolean) => Promise<void>;\n\tsetVideoEnabled: (enabled: boolean) => Promise<void>;\n\tsetScreenShareEnabled: (enabled: boolean) => Promise<void>;\n\tadmit: (participantId: string) => Promise<void>;\n\tdeny: (participantId: string) => Promise<void>;\n\tkick: (participantId: string) => Promise<void>;\n\tdisableParticipantMedia: (\n\t\tparticipantId: string,\n\t\tkind: StudioHostMediaKind,\n\t) => Promise<void>;\n\tsendBroadcast: (\n\t\tmessage: StudioBroadcast,\n\t\ttarget?: StudioBroadcastTarget,\n\t) => Promise<void>;\n\tsubscribeBroadcast: (cb: (message: StudioBroadcast) => void) => () => void;\n\tadmitAs: (\n\t\tparticipantId: string,\n\t\tas: \"panelist\" | \"audience\",\n\t) => Promise<void>;\n\tadmitAll: (as: \"panelist\" | \"audience\") => Promise<void>;\n\tsetStageAccess: (userId: string, on: boolean) => Promise<void>;\n\tdenyStageAccess: (userId: string) => Promise<void>;\n\trequestStageAccess: () => Promise<void>;\n\tjoinStage: () => Promise<void>;\n\tleaveStage: () => Promise<void>;\n\tstageStatus: () => StudioStageStatus;\n\tstageRequests: () => StudioStageRequest[];\n\tsubscribeStage: (cb: () => void) => () => void;\n\tcanManageStage: () => boolean;\n\tstageEnabled: () => boolean;\n\tensureStageJoined: () => Promise<void>;\n\tsetParticipantPinned: (\n\t\tparticipantId: string,\n\t\tpinned: boolean,\n\t) => Promise<void>;\n\tpinnedIds: () => string[];\n\tsubscribePinned: (cb: () => void) => () => void;\n\tsetParticipantChat: (\n\t\tparticipantId: string,\n\t\tenabled: boolean,\n\t) => Promise<void>;\n\tsendChatMessage: (text: string, participantIds?: string[]) => Promise<void>;\n\teditChatMessage: (id: string, text: string) => Promise<void>;\n\tdeleteChatMessage: (id: string) => Promise<void>;\n\tpinChatMessage: (id: string, pinned: boolean) => Promise<void>;\n\tfetchChatHistory: (opts?: {\n\t\ttimestamp?: number;\n\t\tuserId?: string;\n\t}) => Promise<StudioChatMessage[]>;\n\tpinnedChatMessages: () => StudioChatMessage[];\n\tchatMaxTextLimit: () => number;\n\tsubscribeParticipants: (cb: () => void) => () => void;\n\tparticipants: () => StudioParticipantTile[];\n\twaitlisted: () => StudioWaitlistedGuest[];\n\tinWaitingRoom: () => boolean;\n\tmoderatorIds: () => string[];\n\tlocalAudioTrack: () => MediaStreamTrack | null;\n\tlocalVideoTrack: () => MediaStreamTrack | null;\n\tparticipantVideoTrack: (participantId: string) => MediaStreamTrack | null;\n\tparticipantScreenTrack: (participantId: string) => MediaStreamTrack | null;\n\tactiveSpeakerId: () => string | null;\n\tsubscribeActiveSpeaker: (cb: () => void) => () => void;\n\tscreenSharePermission: () => StudioScreenSharePermission;\n\tsubscribePermissions: (cb: () => void) => () => void;\n\tattachVideo: (\n\t\tparticipantId: string,\n\t\tel: HTMLVideoElement | null,\n\t\tkind?: StudioVideoKind,\n\t) => void;\n\tattachAudio: (participantId: string, el: HTMLAudioElement | null) => void;\n\tsubscribeMedia: (cb: () => void) => () => void;\n\tsubscribeRoomLeft: (cb: (state: string) => void) => () => void;\n\tchatMessages: () => StudioChatMessage[];\n\tsubscribeChat: (cb: () => void) => () => void;\n\tlistDevices: () => Promise<StudioDevices>;\n\tsetDevice: (kind: StudioDeviceKind, deviceId: string) => Promise<void>;\n\tsetDisplayName: (name: string) => Promise<void>;\n\tlivestreamState: () => string | null;\n\troomState: () => string | null;\n\tstartLivestream: () => Promise<void>;\n};\n\nconst HOST_MEDIA_KINDS: ReadonlySet<string> = new Set([\n\t\"audio\",\n\t\"video\",\n\t\"screen\",\n]);\n\nexport function parseStudioBroadcast(value: unknown): StudioBroadcast | null {\n\tif (!value || typeof value !== \"object\") return null;\n\tconst row = value as Record<string, unknown>;\n\tconst nested =\n\t\trow.payload && typeof row.payload === \"object\"\n\t\t\t? (row.payload as Record<string, unknown>)\n\t\t\t: null;\n\tconst body = nested ? { ...nested, type: nested.type ?? row.type } : row;\n\tconst type = body.type;\n\tif (type === \"host-media\") {\n\t\tconst kind = body.kind;\n\t\tif (typeof kind === \"string\" && HOST_MEDIA_KINDS.has(kind)) {\n\t\t\treturn { type, kind: kind as StudioHostMediaKind };\n\t\t}\n\t\treturn null;\n\t}\n\tif (type === \"share-request\") {\n\t\tconst participantId =\n\t\t\ttypeof body.participantId === \"string\" ? body.participantId : \"\";\n\t\tconst name = typeof body.name === \"string\" ? body.name : \"\";\n\t\tif (!participantId || !name) return null;\n\t\treturn { type, participantId, name };\n\t}\n\tif (type === \"share-response\") {\n\t\tconst participantId =\n\t\t\ttypeof body.participantId === \"string\" ? body.participantId : \"\";\n\t\tif (!participantId || typeof body.granted !== \"boolean\") return null;\n\t\treturn { type, participantId, granted: body.granted };\n\t}\n\tif (type === \"display-name\") {\n\t\tconst participantId =\n\t\t\ttypeof body.participantId === \"string\" ? body.participantId : \"\";\n\t\tconst name = typeof body.name === \"string\" ? body.name.trim() : \"\";\n\t\tif (!participantId || !name) return null;\n\t\treturn {\n\t\t\ttype,\n\t\t\tparticipantId,\n\t\t\tname: name.slice(0, STUDIO_DISPLAY_NAME_MAX),\n\t\t};\n\t}\n\treturn null;\n}\n\nexport function isOnStage(status: StudioStageStatus | undefined): boolean {\n\treturn status == null || status === \"ON_STAGE\";\n}\n\nexport function canTakeOffAir(\n\ttiles: Pick<StudioParticipantTile, \"id\" | \"stageStatus\">[],\n\tparticipantId: string,\n\tonAir: boolean,\n): boolean {\n\tif (!onAir) return true;\n\treturn tiles.some(\n\t\t(tile) => tile.id !== participantId && isOnStage(tile.stageStatus),\n\t);\n}\n\nexport function resolveStudioPipSpotlight(\n\ttiles: StudioParticipantTile[],\n\tactiveSpeakerId: string | null,\n): StudioPipSpotlight | null {\n\tconst visible = tiles.filter((tile) => isOnStage(tile.stageStatus));\n\tconst pinned = visible.find((tile) => tile.pinned === true);\n\tif (pinned) {\n\t\treturn {\n\t\t\tparticipantId: pinned.id,\n\t\t\tname: pinned.name,\n\t\t\tkind: pinned.screenShareEnabled\n\t\t\t\t? \"screen\"\n\t\t\t\t: pinned.videoEnabled\n\t\t\t\t\t? \"camera\"\n\t\t\t\t\t: \"idle\",\n\t\t\tpicture: pinned.picture,\n\t\t};\n\t}\n\tconst sharing = visible.find((tile) => tile.screenShareEnabled);\n\tif (sharing) {\n\t\treturn {\n\t\t\tparticipantId: sharing.id,\n\t\t\tname: sharing.name,\n\t\t\tkind: \"screen\",\n\t\t\tpicture: sharing.picture,\n\t\t};\n\t}\n\tconst speaker = activeSpeakerId\n\t\t? visible.find((tile) => tile.id === activeSpeakerId && tile.videoEnabled)\n\t\t: undefined;\n\tif (speaker) {\n\t\treturn {\n\t\t\tparticipantId: speaker.id,\n\t\t\tname: speaker.name,\n\t\t\tkind: \"camera\",\n\t\t\tpicture: speaker.picture,\n\t\t};\n\t}\n\tconst remoteCam = visible.find((tile) => !tile.isSelf && tile.videoEnabled);\n\tif (remoteCam) {\n\t\treturn {\n\t\t\tparticipantId: remoteCam.id,\n\t\t\tname: remoteCam.name,\n\t\t\tkind: \"camera\",\n\t\t\tpicture: remoteCam.picture,\n\t\t};\n\t}\n\tconst self = visible.find((tile) => tile.isSelf);\n\tif (!self) return null;\n\treturn {\n\t\tparticipantId: self.id,\n\t\tname: self.name,\n\t\tkind: self.videoEnabled ? \"camera\" : \"idle\",\n\t\tpicture: self.picture,\n\t};\n}\n\nexport function resolveStudioPipSelfView(\n\ttiles: StudioParticipantTile[],\n\tspotlight: StudioPipSpotlight | null,\n): StudioParticipantTile | null {\n\tconst self = tiles.find((tile) => tile.isSelf);\n\tif (!self || !self.videoEnabled) return null;\n\tif (spotlight?.participantId === self.id) return null;\n\treturn self;\n}\n\nexport function formatStudioElapsed(elapsedMs: number): string {\n\tconst total = Math.max(0, Math.floor(elapsedMs / 1000));\n\tconst hours = Math.floor(total / 3600);\n\tconst minutes = Math.floor((total % 3600) / 60);\n\tconst seconds = total % 60;\n\tif (hours > 0) {\n\t\treturn `${hours}:${String(minutes).padStart(2, \"0\")}:${String(seconds).padStart(2, \"0\")}`;\n\t}\n\treturn `${String(minutes).padStart(2, \"0\")}:${String(seconds).padStart(2, \"0\")}`;\n}\n\nexport function nextSourceMode(\n\tcurrent: StudioSourceMode,\n\ttarget: StudioSourceMode,\n): StudioSourceMode {\n\treturn target === current ? current : target;\n}\n\nexport function sourceFlags(mode: StudioSourceMode): {\n\taudio: boolean;\n\tvideo: boolean;\n\tscreen: boolean;\n} {\n\tswitch (mode) {\n\t\tcase \"camera\":\n\t\t\treturn { audio: true, video: true, screen: false };\n\t\tcase \"screen\":\n\t\t\treturn { audio: true, video: false, screen: true };\n\t\tcase \"audio\":\n\t\t\treturn { audio: true, video: false, screen: false };\n\t\tdefault: {\n\t\t\tconst _exhaustive: never = mode;\n\t\t\treturn _exhaustive;\n\t\t}\n\t}\n}\n\nexport function canStartScreenShare(tiles: StudioParticipantTile[]): boolean {\n\treturn !tiles.some((tile) => tile.screenShareEnabled && !tile.isSelf);\n}\n\nexport const DUPLICATE_SELF_DEBOUNCE_MS = 4_000;\n\nexport function duplicateSelfParticipant(\n\ttiles: StudioParticipantTile[],\n): StudioParticipantTile | null {\n\tconst self = tiles.find((tile) => tile.isSelf);\n\tconst userId = self?.userId?.trim();\n\tif (!self || !userId) return null;\n\treturn tiles.find((tile) => !tile.isSelf && tile.userId === userId) ?? null;\n}\n\nexport function losesDuplicateTiebreak(\n\tselfId: string,\n\totherId: string,\n): boolean {\n\treturn selfId > otherId;\n}\n\nexport function isStudioSessionOver(\n\tstreamStatus: string,\n\troomState: string | null,\n): boolean {\n\tif (streamStatus === \"ended\" || streamStatus === \"error\") return true;\n\treturn (\n\t\troomState === \"ended\" || roomState === \"kicked\" || roomState === \"left\"\n\t);\n}\n\nexport function isStudioRejected(roomState: string | null): boolean {\n\treturn roomState === \"rejected\" || roomState === \"denied\";\n}\n\nexport function expandStudioTiles(\n\ttiles: StudioParticipantTile[],\n): StudioDisplayTile[] {\n\tconst out: StudioDisplayTile[] = [];\n\tfor (const tile of tiles) {\n\t\tif (tile.videoEnabled) {\n\t\t\tout.push({ ...tile, kind: \"camera\", tileId: `${tile.id}:camera` });\n\t\t} else {\n\t\t\tout.push({ ...tile, kind: \"idle\", tileId: `${tile.id}:idle` });\n\t\t}\n\t\tif (tile.screenShareEnabled) {\n\t\t\tout.push({ ...tile, kind: \"screen\", tileId: `${tile.id}:screen` });\n\t\t}\n\t}\n\treturn out;\n}\n\nexport const STAGE_STRIP_MAX = 6;\nexport const STAGE_GRID_MAX = 9;\n\nexport type StudioStageLayoutOptions = {\n\tactiveSpeakerId?: string | null;\n\tmax?: number;\n};\n\nfunction stripRank(\n\ttile: StudioDisplayTile,\n\tactiveSpeakerId: string | null,\n): number {\n\tif (tile.pinned) return 0;\n\tif (tile.kind === \"screen\") return 1;\n\tif (tile.isSelf) return 2;\n\tif (activeSpeakerId && tile.id === activeSpeakerId) return 3;\n\tif (tile.kind === \"camera\") return 4;\n\treturn 5;\n}\n\nfunction rankStripTiles(\n\ttiles: StudioDisplayTile[],\n\tactiveSpeakerId: string | null,\n): StudioDisplayTile[] {\n\treturn [...tiles].sort((a, b) => {\n\t\tconst diff = stripRank(a, activeSpeakerId) - stripRank(b, activeSpeakerId);\n\t\tif (diff !== 0) return diff;\n\t\treturn a.tileId.localeCompare(b.tileId);\n\t});\n}\n\nfunction takeCappedStrip(\n\tranked: StudioDisplayTile[],\n\tcap: number,\n): StudioDisplayTile[] {\n\tconst self = ranked.filter((tile) => tile.isSelf);\n\tconst others = ranked.filter((tile) => !tile.isSelf);\n\tconst reserved = Math.min(self.length, cap);\n\treturn [...self, ...others.slice(0, cap - reserved)];\n}\n\nexport function studioStageLayout(\n\ttiles: StudioDisplayTile[],\n\toptions: StudioStageLayoutOptions = {},\n): {\n\tspotlight: StudioDisplayTile[];\n\tstrip: StudioDisplayTile[];\n\toverflow: number;\n} {\n\tconst pinned = tiles.find((tile) => tile.pinned === true);\n\tlet spotlight: StudioDisplayTile[];\n\tlet remaining: StudioDisplayTile[];\n\tif (pinned) {\n\t\tconst pinTiles = tiles.filter((tile) => tile.id === pinned.id);\n\t\tconst focus =\n\t\t\tpinTiles.find((tile) => tile.kind === \"screen\") ??\n\t\t\tpinTiles.find((tile) => tile.kind === \"camera\") ??\n\t\t\tpinTiles[0];\n\t\tif (!focus) {\n\t\t\tspotlight = [];\n\t\t\tremaining = tiles;\n\t\t} else {\n\t\t\tspotlight = [focus];\n\t\t\tremaining = tiles.filter((tile) => tile.tileId !== focus.tileId);\n\t\t}\n\t} else {\n\t\tspotlight = tiles.filter((tile) => tile.kind === \"screen\");\n\t\tremaining = tiles.filter((tile) => tile.kind !== \"screen\");\n\t}\n\tconst cap =\n\t\toptions.max ?? (spotlight.length > 0 ? STAGE_STRIP_MAX : STAGE_GRID_MAX);\n\tconst ranked = rankStripTiles(remaining, options.activeSpeakerId ?? null);\n\tif (ranked.length <= cap) {\n\t\treturn { spotlight, strip: ranked, overflow: 0 };\n\t}\n\tconst kept = takeCappedStrip(ranked, cap);\n\treturn {\n\t\tspotlight,\n\t\tstrip: kept,\n\t\toverflow: ranked.length - kept.length,\n\t};\n}\n\nexport async function applySourceFlags(\n\tmeeting: StudioMeetingHandle,\n\tflags: StudioMediaFlags,\n): Promise<{ camera: boolean; screen: boolean }> {\n\tconst allowScreen =\n\t\t!flags.screen || canStartScreenShare(meeting.participants());\n\tconst [camera, screen] = await Promise.allSettled([\n\t\tmeeting.setVideoEnabled(flags.camera),\n\t\tmeeting.setScreenShareEnabled(allowScreen && flags.screen),\n\t]);\n\treturn {\n\t\tcamera: camera.status === \"fulfilled\",\n\t\tscreen: screen.status === \"fulfilled\",\n\t};\n}\n\nexport async function applySourceMode(\n\tmeeting: StudioMeetingHandle,\n\tmode: StudioSourceMode,\n): Promise<void> {\n\tconst flags = sourceFlags(mode);\n\tawait meeting.setAudioEnabled(flags.audio);\n\tawait applySourceFlags(meeting, {\n\t\tcamera: flags.video,\n\t\tscreen: flags.screen,\n\t});\n}\n","import type { StudioScreenSharePermission } from \"./meeting\";\n\nexport type ScreenShareBlock = \"device\" | \"permission\" | null;\n\ntype MediaQuery = { matches: boolean };\n\nexport function detectScreenCaptureSupport(\n\tmedia: { getDisplayMedia?: unknown } | undefined = typeof navigator ===\n\t\"undefined\"\n\t\t? undefined\n\t\t: navigator.mediaDevices,\n\tmatchMedia: (query: string) => MediaQuery = typeof window === \"undefined\"\n\t\t? () => ({ matches: false })\n\t\t: (query) => window.matchMedia(query),\n): boolean {\n\tif (typeof media?.getDisplayMedia !== \"function\") return false;\n\tconst coarse = matchMedia(\"(pointer: coarse)\").matches;\n\tconst anyHover = matchMedia(\"(any-hover: hover)\").matches;\n\tif (coarse && !anyHover) return false;\n\treturn true;\n}\n\nexport function screenShareBlock(\n\tcaptureSupported: boolean,\n\tpermission: StudioScreenSharePermission,\n): ScreenShareBlock {\n\tif (!captureSupported) return \"device\";\n\tif (permission === \"NOT_ALLOWED\") return \"permission\";\n\treturn null;\n}\n","import type { Stream } from \"./status\";\nimport type { StudioRole, StudioSession, StudioStreamSummary } from \"./types\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction readString(value: unknown, key: string): string | null {\n\tif (!isRecord(value)) return null;\n\tconst raw = value[key];\n\treturn typeof raw === \"string\" && raw.length > 0 ? raw : null;\n}\n\nexport function parseStudioRole(value: unknown): StudioRole | null {\n\treturn value === \"moderator\" || value === \"guest\" ? value : null;\n}\n\nexport function parseStudioStreamSummary(\n\tvalue: unknown,\n): StudioStreamSummary | null {\n\tconst id = readString(value, \"id\");\n\tconst title = readString(value, \"title\");\n\tconst status = readString(value, \"status\");\n\tif (!id || !title || !status) return null;\n\tconst encoderLostAt = isRecord(value)\n\t\t? typeof value.encoderLostAt === \"number\"\n\t\t\t? value.encoderLostAt\n\t\t\t: value.encoderLostAt === null\n\t\t\t\t? null\n\t\t\t\t: undefined\n\t\t: undefined;\n\treturn { id, title, status, encoderLostAt };\n}\n\nexport function parseStudioSession(value: unknown): StudioSession | null {\n\tif (!isRecord(value)) return null;\n\tconst authToken = readString(value, \"authToken\");\n\tconst meetingId = readString(value, \"meetingId\");\n\tconst role = parseStudioRole(value.role);\n\tif (!authToken || !meetingId || !role) return null;\n\tconst fromSummary = parseStudioStreamSummary(value.stream);\n\tconst fromFull = isRecord(value.stream)\n\t\t? parseStudioStreamSummary({\n\t\t\t\tid: value.stream.id,\n\t\t\t\ttitle: value.stream.title,\n\t\t\t\tstatus: value.stream.status,\n\t\t\t})\n\t\t: null;\n\tconst stream = fromSummary ?? fromFull;\n\tif (!stream) return null;\n\tconst expiresAt =\n\t\ttypeof value.expiresAt === \"number\" ? value.expiresAt : null;\n\treturn {\n\t\tauthToken,\n\t\tmeetingId,\n\t\trole,\n\t\tguestUrl: readString(value, \"guestUrl\"),\n\t\tstudioControlToken: readString(value, \"studioControlToken\"),\n\t\texpiresAt,\n\t\tstream,\n\t};\n}\n\nexport function studioGuestShareUrl(\n\torigin: string,\n\ttoken: string | null | undefined,\n): string | null {\n\tif (!token) return null;\n\treturn `${origin.replace(/\\/$/, \"\")}/studio/join/${token}`;\n}\n\nexport function isStudioActiveStatus(status: string): boolean {\n\treturn status === \"preview\" || status === \"public\";\n}\n\nexport function isLiveStudioStatus(status: string): boolean {\n\treturn status === \"public\";\n}\n\nexport type StudioLivestreamEgress = \"live\" | \"starting\";\n\nexport function parseStudioLivestream(\n\tvalue: unknown,\n): StudioLivestreamEgress | null {\n\tif (!isRecord(value) || value.ok !== true) return null;\n\tif (value.egress === \"live\" || value.egress === \"starting\") {\n\t\treturn value.egress;\n\t}\n\treturn \"starting\";\n}\n\nexport function parseStudioJoinStatus(\n\tvalue: unknown,\n): { ready: boolean; streamStatus: string | null } | null {\n\tif (!isRecord(value) || typeof value.ready !== \"boolean\") return null;\n\tconst streamStatus =\n\t\tvalue.streamStatus === null\n\t\t\t? null\n\t\t\t: typeof value.streamStatus === \"string\"\n\t\t\t\t? value.streamStatus\n\t\t\t\t: null;\n\tif (value.streamStatus !== null && streamStatus === null) return null;\n\treturn { ready: value.ready, streamStatus };\n}\n\nexport function parsePublicStreamStatus(value: unknown): string | null {\n\tif (!isRecord(value)) return null;\n\tconst nested = isRecord(value.stream) ? value.stream : value;\n\tconst status = readString(nested, \"status\");\n\treturn status;\n}\n\nexport function studioErrorCode(error: unknown): string | null {\n\tif (!error || typeof error !== \"object\") return null;\n\tconst body = \"body\" in error ? error.body : null;\n\tif (!isRecord(body) || typeof body.error !== \"string\") return null;\n\treturn body.error;\n}\n\nexport function canOpenStudioFromStream(stream: Stream): boolean {\n\tif (stream.source !== \"studio\") return false;\n\tswitch (stream.status) {\n\t\tcase \"ended\":\n\t\tcase \"error\":\n\t\t\treturn false;\n\t\tcase \"scheduled\":\n\t\tcase \"idle\":\n\t\tcase \"spawning\":\n\t\tcase \"ingest_ready\":\n\t\tcase \"preview\":\n\t\tcase \"public\":\n\t\t\treturn true;\n\t\tdefault: {\n\t\t\tconst _exhaustive: never = stream.status;\n\t\t\treturn _exhaustive;\n\t\t}\n\t}\n}\n","export type StudioSoundKind = \"chat\" | \"request\";\n\nconst CHAT_DEBOUNCE_MS = 400;\nconst CHAT_HZ = 880;\nconst CHAT_MS = 80;\nconst REQUEST_LOW_HZ = 660;\nconst REQUEST_HIGH_HZ = 880;\nconst REQUEST_NOTE_MS = 80;\nconst GAIN = 0.1;\n\ntype AudioContextCtor = typeof AudioContext;\n\nlet ctx: AudioContext | null = null;\nlet lastChatAt = 0;\n\nfunction audioContextCtor(): AudioContextCtor | null {\n\tif (typeof window === \"undefined\") return null;\n\treturn (\n\t\twindow.AudioContext ||\n\t\t(window as Window & { webkitAudioContext?: AudioContextCtor })\n\t\t\t.webkitAudioContext ||\n\t\tnull\n\t);\n}\n\nfunction prefersReducedMotion(): boolean {\n\tif (\n\t\ttypeof window === \"undefined\" ||\n\t\ttypeof window.matchMedia !== \"function\"\n\t) {\n\t\treturn false;\n\t}\n\treturn window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n}\n\nfunction ensureContext(): AudioContext | null {\n\tconst AudioCtx = audioContextCtor();\n\tif (!AudioCtx) return null;\n\tif (!ctx || ctx.state === \"closed\") {\n\t\tctx = new AudioCtx();\n\t}\n\treturn ctx;\n}\n\nexport function unlockStudioSounds(): void {\n\tconst context = ensureContext();\n\tif (!context) return;\n\tvoid context.resume();\n}\n\nfunction playTone(\n\tcontext: AudioContext,\n\tfrequency: number,\n\tstartAt: number,\n\tdurationSec: number,\n): void {\n\tconst oscillator = context.createOscillator();\n\tconst gain = context.createGain();\n\toscillator.type = \"sine\";\n\toscillator.frequency.value = frequency;\n\tgain.gain.setValueAtTime(GAIN, startAt);\n\tgain.gain.exponentialRampToValueAtTime(0.001, startAt + durationSec);\n\toscillator.connect(gain);\n\tgain.connect(context.destination);\n\toscillator.start(startAt);\n\toscillator.stop(startAt + durationSec);\n}\n\nfunction playNow(context: AudioContext, kind: StudioSoundKind): void {\n\tconst now = context.currentTime;\n\tif (kind === \"chat\") {\n\t\tplayTone(context, CHAT_HZ, now, CHAT_MS / 1000);\n\t\treturn;\n\t}\n\tplayTone(context, REQUEST_LOW_HZ, now, REQUEST_NOTE_MS / 1000);\n\tplayTone(\n\t\tcontext,\n\t\tREQUEST_HIGH_HZ,\n\t\tnow + REQUEST_NOTE_MS / 1000,\n\t\tREQUEST_NOTE_MS / 1000,\n\t);\n}\n\nexport function playStudioSound(kind: StudioSoundKind): void {\n\tif (prefersReducedMotion()) return;\n\tif (kind === \"chat\") {\n\t\tconst at = Date.now();\n\t\tif (at - lastChatAt < CHAT_DEBOUNCE_MS) return;\n\t\tlastChatAt = at;\n\t}\n\tconst context = ensureContext();\n\tif (!context) return;\n\tconst run = () => {\n\t\tif (context.state !== \"running\") return;\n\t\tplayNow(context, kind);\n\t};\n\tif (context.state === \"running\") {\n\t\trun();\n\t\treturn;\n\t}\n\tvoid context.resume().then(run, () => undefined);\n}\n\nexport function resetStudioSoundsForTests(): void {\n\tlastChatAt = 0;\n\tif (ctx) {\n\t\tvoid ctx.close();\n\t\tctx = null;\n\t}\n}\n\nif (typeof document !== \"undefined\") {\n\tdocument.addEventListener(\"pointerdown\", unlockStudioSounds, {\n\t\tpassive: true,\n\t});\n}\n","export function postLivoEvent(type: string, payload?: unknown): void {\n\tif (typeof window === \"undefined\") return;\n\tif (window.parent === window) return;\n\twindow.parent.postMessage({ source: \"livo\", type, payload }, \"*\");\n}\n","export function playerWatchUrl(\n\tstreamId: string,\n\torigin = \"https://player.livo.tv\",\n): string {\n\treturn `${origin.replace(/\\/$/, \"\")}/${streamId}`;\n}\n","export async function copyText(\n\tvalue: string,\n\tclipboard: Pick<Clipboard, \"writeText\"> | null = globalThis.navigator\n\t\t?.clipboard ?? null,\n): Promise<boolean> {\n\tif (!clipboard) return false;\n\ttry {\n\t\tawait clipboard.writeText(value);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n","import { copyText } from \"./clipboard\";\n\nexport type ShareLinkResult = \"shared\" | \"copied\" | \"cancelled\" | \"failed\";\n\nexport type ShareApi = {\n\tshare: (data: ShareData) => Promise<void>;\n\tcanShare?: (data: ShareData) => boolean;\n};\n\nfunction isAbort(error: unknown): boolean {\n\treturn (\n\t\ttypeof error === \"object\" &&\n\t\terror !== null &&\n\t\t\"name\" in error &&\n\t\terror.name === \"AbortError\"\n\t);\n}\n\nexport function resolveShareApi(\n\tshare: ShareApi | null | undefined = typeof navigator === \"undefined\"\n\t\t? null\n\t\t: typeof navigator.share === \"function\"\n\t\t\t? navigator\n\t\t\t: null,\n): ShareApi | null {\n\treturn share ?? null;\n}\n\nexport function canNativeShare(\n\tdata: ShareData,\n\tshare: ShareApi | null = resolveShareApi(),\n): boolean {\n\tif (!share) return false;\n\tif (typeof share.canShare !== \"function\") return true;\n\ttry {\n\t\treturn share.canShare(data);\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nexport async function shareOrCopyLink(\n\toptions: { url: string; title?: string; text?: string },\n\tdeps?: {\n\t\tshare?: ShareApi | null;\n\t\tcopy?: typeof copyText;\n\t},\n): Promise<ShareLinkResult> {\n\tconst data: ShareData = {\n\t\turl: options.url,\n\t\t...(options.title ? { title: options.title } : {}),\n\t\t...(options.text ? { text: options.text } : {}),\n\t};\n\tconst share = resolveShareApi(deps?.share);\n\tif (canNativeShare(data, share) && share) {\n\t\ttry {\n\t\t\tawait share.share(data);\n\t\t\treturn \"shared\";\n\t\t} catch (error) {\n\t\t\tif (isAbort(error)) return \"cancelled\";\n\t\t}\n\t}\n\tconst copy = deps?.copy ?? copyText;\n\tconst ok = await copy(options.url);\n\treturn ok ? \"copied\" : \"failed\";\n}\n","export type StreamStatus =\n\t| \"scheduled\"\n\t| \"idle\"\n\t| \"spawning\"\n\t| \"ingest_ready\"\n\t| \"preview\"\n\t| \"public\"\n\t| \"ended\"\n\t| \"error\";\n\nexport type Stream = {\n\tsource: string;\n\tstatus: StreamStatus;\n};\n\nexport function canPublish(status: string): boolean {\n\treturn status === \"preview\";\n}\n","export const STUDIO_ELECTION_MS = 300;\nexport const STUDIO_WINDOW_CHANNEL = \"livo-studio-window\";\n\nexport type StudioWindowState = \"electing\" | \"owner\" | \"blocked\" | \"taken-over\";\n\nexport type StudioWindowMessage =\n\t| { kind: \"probe\"; key: string; from: string }\n\t| { kind: \"claimed\"; key: string; from: string }\n\t| { kind: \"takeover\"; key: string; from: string }\n\t| { kind: \"released\"; key: string; from: string };\n\nexport type StudioWindowChannel = {\n\tpost: (message: StudioWindowMessage) => void;\n\tsubscribe: (handler: (message: StudioWindowMessage) => void) => () => void;\n};\n\nconst MESSAGE_KINDS = new Set([\"probe\", \"claimed\", \"takeover\", \"released\"]);\n\nexport function isStudioWindowMessage(\n\tvalue: unknown,\n): value is StudioWindowMessage {\n\tif (!value || typeof value !== \"object\") return false;\n\tconst row = value as Record<string, unknown>;\n\treturn (\n\t\ttypeof row.kind === \"string\" &&\n\t\tMESSAGE_KINDS.has(row.kind) &&\n\t\ttypeof row.key === \"string\" &&\n\t\ttypeof row.from === \"string\"\n\t);\n}\n\nexport function createBroadcastStudioChannel(\n\tname = STUDIO_WINDOW_CHANNEL,\n): StudioWindowChannel | null {\n\tif (typeof BroadcastChannel === \"undefined\") return null;\n\ttry {\n\t\tconst channel = new BroadcastChannel(name);\n\t\treturn {\n\t\t\tpost(message) {\n\t\t\t\tchannel.postMessage(message);\n\t\t\t},\n\t\t\tsubscribe(handler) {\n\t\t\t\tconst onMessage = (event: MessageEvent) => {\n\t\t\t\t\tif (isStudioWindowMessage(event.data)) handler(event.data);\n\t\t\t\t};\n\t\t\t\tchannel.addEventListener(\"message\", onMessage);\n\t\t\t\treturn () => {\n\t\t\t\t\tchannel.removeEventListener(\"message\", onMessage);\n\t\t\t\t\tchannel.close();\n\t\t\t\t};\n\t\t\t},\n\t\t};\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nexport function createStudioWindowLock(options: {\n\tkey: string;\n\tid: string;\n\tchannel: StudioWindowChannel;\n\tonState: (state: StudioWindowState) => void;\n}): {\n\tstart: () => void;\n\thandle: (message: StudioWindowMessage) => void;\n\tclaimOwner: () => void;\n\tbecomeOwner: () => void;\n\trequestTakeover: () => void;\n\trelease: () => void;\n\tgetState: () => StudioWindowState;\n} {\n\tlet state: StudioWindowState = \"electing\";\n\tlet relinquished = false;\n\n\tfunction setState(next: StudioWindowState) {\n\t\tif (state === next) return;\n\t\tstate = next;\n\t\toptions.onState(state);\n\t}\n\n\tfunction announce() {\n\t\toptions.channel.post({\n\t\t\tkind: \"claimed\",\n\t\t\tkey: options.key,\n\t\t\tfrom: options.id,\n\t\t});\n\t}\n\n\tfunction handle(message: StudioWindowMessage) {\n\t\tif (message.key !== options.key || message.from === options.id) return;\n\t\tswitch (message.kind) {\n\t\t\tcase \"probe\":\n\t\t\t\tif (state === \"owner\" && !relinquished) announce();\n\t\t\t\treturn;\n\t\t\tcase \"claimed\":\n\t\t\t\tif (state === \"electing\") {\n\t\t\t\t\tsetState(\"blocked\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (state === \"owner\" && message.from < options.id) {\n\t\t\t\t\tsetState(\"blocked\");\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\tcase \"takeover\":\n\t\t\t\tif (state === \"owner\") setState(\"taken-over\");\n\t\t\t\treturn;\n\t\t\tcase \"released\":\n\t\t\t\tif (state === \"blocked\" || state === \"taken-over\") {\n\t\t\t\t\tsetState(\"electing\");\n\t\t\t\t\toptions.channel.post({\n\t\t\t\t\t\tkind: \"probe\",\n\t\t\t\t\t\tkey: options.key,\n\t\t\t\t\t\tfrom: options.id,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\tdefault: {\n\t\t\t\tconst _exhaustive: never = message;\n\t\t\t\treturn _exhaustive;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn {\n\t\tstart() {\n\t\t\toptions.channel.post({\n\t\t\t\tkind: \"probe\",\n\t\t\t\tkey: options.key,\n\t\t\t\tfrom: options.id,\n\t\t\t});\n\t\t},\n\t\thandle,\n\t\tclaimOwner() {\n\t\t\tif (state !== \"electing\") return;\n\t\t\trelinquished = false;\n\t\t\tsetState(\"owner\");\n\t\t\tannounce();\n\t\t},\n\t\tbecomeOwner() {\n\t\t\trelinquished = false;\n\t\t\tsetState(\"owner\");\n\t\t\tannounce();\n\t\t},\n\t\trequestTakeover() {\n\t\t\toptions.channel.post({\n\t\t\t\tkind: \"takeover\",\n\t\t\t\tkey: options.key,\n\t\t\t\tfrom: options.id,\n\t\t\t});\n\t\t},\n\t\trelease() {\n\t\t\tif (state !== \"owner\" || relinquished) return;\n\t\t\trelinquished = true;\n\t\t\toptions.channel.post({\n\t\t\t\tkind: \"released\",\n\t\t\t\tkey: options.key,\n\t\t\t\tfrom: options.id,\n\t\t\t});\n\t\t},\n\t\tgetState() {\n\t\t\treturn state;\n\t\t},\n\t};\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport {\n\tSTUDIO_ELECTION_MS,\n\tcreateBroadcastStudioChannel,\n\tcreateStudioWindowLock,\n\ttype StudioWindowState,\n} from \"../lib/window-lock\";\n\nexport function useStudioWindowLock(lockKey: string): {\n\tstate: StudioWindowState;\n\ttakeover: () => void;\n} {\n\tconst [state, setState] = useState<StudioWindowState>(\"electing\");\n\tconst lockRef = useRef<ReturnType<typeof createStudioWindowLock> | null>(\n\t\tnull,\n\t);\n\tconst takeoverTimer = useRef<number | null>(null);\n\n\tuseEffect(() => {\n\t\tconst channel = createBroadcastStudioChannel();\n\t\tif (!channel) {\n\t\t\tsetState(\"owner\");\n\t\t\treturn;\n\t\t}\n\t\tconst id = crypto.randomUUID();\n\t\tconst lock = createStudioWindowLock({\n\t\t\tkey: lockKey,\n\t\t\tid,\n\t\t\tchannel,\n\t\t\tonState: setState,\n\t\t});\n\t\tlockRef.current = lock;\n\t\tsetState(lock.getState());\n\t\tconst unsubscribe = channel.subscribe((message) => lock.handle(message));\n\t\tlock.start();\n\t\tconst electionTimer = window.setTimeout(() => {\n\t\t\tlock.claimOwner();\n\t\t}, STUDIO_ELECTION_MS);\n\t\tconst onPageHide = () => {\n\t\t\tlock.release();\n\t\t};\n\t\twindow.addEventListener(\"pagehide\", onPageHide);\n\t\treturn () => {\n\t\t\twindow.clearTimeout(electionTimer);\n\t\t\tif (takeoverTimer.current !== null) {\n\t\t\t\twindow.clearTimeout(takeoverTimer.current);\n\t\t\t\ttakeoverTimer.current = null;\n\t\t\t}\n\t\t\twindow.removeEventListener(\"pagehide\", onPageHide);\n\t\t\tlock.release();\n\t\t\tlockRef.current = null;\n\t\t\tunsubscribe();\n\t\t};\n\t}, [lockKey]);\n\n\tconst takeover = useCallback(() => {\n\t\tconst lock = lockRef.current;\n\t\tif (!lock) {\n\t\t\tsetState(\"owner\");\n\t\t\treturn;\n\t\t}\n\t\tlock.requestTakeover();\n\t\tif (takeoverTimer.current !== null) {\n\t\t\twindow.clearTimeout(takeoverTimer.current);\n\t\t}\n\t\ttakeoverTimer.current = window.setTimeout(() => {\n\t\t\tlock.becomeOwner();\n\t\t\ttakeoverTimer.current = null;\n\t\t}, STUDIO_ELECTION_MS);\n\t}, []);\n\n\treturn { state, takeover };\n}\n","export function StudioSkeleton() {\n\treturn (\n\t\t<div className=\"bg-background flex h-dvh flex-col\" aria-busy=\"true\">\n\t\t\t<div className=\"flex h-12 items-center justify-between border-b px-4\">\n\t\t\t\t<div className=\"bg-skeleton h-4 w-40 rounded\" />\n\t\t\t\t<div className=\"flex gap-2\">\n\t\t\t\t\t<div className=\"bg-skeleton size-8 rounded-md\" />\n\t\t\t\t\t<div className=\"bg-skeleton size-8 rounded-md\" />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div className=\"grid flex-1 grid-cols-1 gap-3 p-4 md:grid-cols-2\">\n\t\t\t\t<div className=\"bg-skeleton rounded-xl\" />\n\t\t\t\t<div className=\"bg-skeleton rounded-xl\" />\n\t\t\t</div>\n\t\t\t<div className=\"flex h-20 items-center justify-center gap-3 border-t\">\n\t\t\t\t<div className=\"bg-skeleton size-10 rounded-full\" />\n\t\t\t\t<div className=\"bg-skeleton size-10 rounded-full\" />\n\t\t\t\t<div className=\"bg-skeleton size-10 rounded-full\" />\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","\"use client\";\n\nimport {\n\tcreateContext,\n\tuseCallback,\n\tuseContext,\n\tuseEffect,\n\tuseRef,\n\tuseState,\n\ttype ReactNode,\n} from \"react\";\nimport { EmptyState } from \"../ui/empty-state\";\nimport { useStudioWindowLock } from \"../hooks/use-studio-window-lock\";\nimport { StudioSkeleton } from \"./studio-skeleton\";\n\ntype StudioWindowGateContextValue = {\n\treportDuplicate: () => void;\n};\n\nexport const StudioWindowGateContext =\n\tcreateContext<StudioWindowGateContextValue>({\n\t\treportDuplicate: () => undefined,\n\t});\n\nexport function useStudioWindowGate(): StudioWindowGateContextValue {\n\treturn useContext(StudioWindowGateContext);\n}\n\nexport function StudioWindowGate({\n\tlockKey,\n\tallowTakeover = true,\n\tlabels,\n\tchildren,\n}: {\n\tlockKey: string;\n\tallowTakeover?: boolean;\n\tlabels: {\n\t\tduplicateTitle: string;\n\t\tduplicateDescription: string;\n\t\tduplicateDescriptionNoTakeover: string;\n\t\tduplicateTakenOver: string;\n\t\tduplicateAction: string;\n\t};\n\tchildren: ReactNode;\n}) {\n\tconst { state, takeover } = useStudioWindowLock(lockKey);\n\tconst [meetingDuplicate, setMeetingDuplicate] = useState(false);\n\tconst [generation, setGeneration] = useState(0);\n\tconst previousState = useRef(state);\n\n\tuseEffect(() => {\n\t\tif (\n\t\t\tstate === \"owner\" &&\n\t\t\t(previousState.current === \"blocked\" ||\n\t\t\t\tpreviousState.current === \"taken-over\")\n\t\t) {\n\t\t\tsetMeetingDuplicate(false);\n\t\t}\n\t\tpreviousState.current = state;\n\t}, [state]);\n\n\tconst reportDuplicate = useCallback(() => {\n\t\tsetMeetingDuplicate(true);\n\t}, []);\n\n\tconst onContinue = useCallback(() => {\n\t\tsetMeetingDuplicate(false);\n\t\tsetGeneration((n) => n + 1);\n\t\ttakeover();\n\t}, [takeover]);\n\n\tif (state === \"electing\") {\n\t\treturn <StudioSkeleton />;\n\t}\n\n\tconst blocked =\n\t\tstate === \"blocked\" || state === \"taken-over\" || meetingDuplicate;\n\tif (blocked) {\n\t\tconst takenOver = state === \"taken-over\";\n\t\treturn (\n\t\t\t<div className=\"flex h-dvh flex-col items-center justify-center p-6\">\n\t\t\t\t<EmptyState\n\t\t\t\t\ttitle={labels.duplicateTitle}\n\t\t\t\t\tdescription={\n\t\t\t\t\t\ttakenOver\n\t\t\t\t\t\t\t? labels.duplicateTakenOver\n\t\t\t\t\t\t\t: allowTakeover\n\t\t\t\t\t\t\t\t? labels.duplicateDescription\n\t\t\t\t\t\t\t\t: labels.duplicateDescriptionNoTakeover\n\t\t\t\t\t}\n\t\t\t\t\tactionLabel={allowTakeover ? labels.duplicateAction : undefined}\n\t\t\t\t\tonAction={allowTakeover ? onContinue : undefined}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<StudioWindowGateContext.Provider value={{ reportDuplicate }}>\n\t\t\t<div key={generation}>{children}</div>\n\t\t</StudioWindowGateContext.Provider>\n\t);\n}\n","import type {\n\tStudioDeviceKind,\n\tStudioDeviceOption,\n\tStudioDevices,\n} from \"./meeting\";\n\nexport type { StudioDeviceKind, StudioDeviceOption, StudioDevices };\n\nexport type StudioDeviceSelection = {\n\taudio: string;\n\tvideo: string;\n\tspeaker: string;\n};\n\nexport const EMPTY_STUDIO_DEVICE_SELECTION: StudioDeviceSelection = {\n\taudio: \"\",\n\tvideo: \"\",\n\tspeaker: \"\",\n};\n\nexport const STUDIO_DEVICE_CHANGE_DEBOUNCE_MS = 250;\n\nconst STORAGE_KEYS: Record<StudioDeviceKind, string> = {\n\taudio: \"livo-studio-device-audio\",\n\tvideo: \"livo-studio-device-video\",\n\tspeaker: \"livo-studio-device-speaker\",\n};\n\nconst DEVICE_KINDS: readonly StudioDeviceKind[] = [\"audio\", \"video\", \"speaker\"];\n\ntype DeviceStorage = Pick<Storage, \"getItem\" | \"setItem\">;\n\nexport function readStudioDeviceSelection(\n\tstorage: DeviceStorage | null = defaultStorage(),\n): StudioDeviceSelection {\n\treturn {\n\t\taudio: storage?.getItem(STORAGE_KEYS.audio)?.trim() ?? \"\",\n\t\tvideo: storage?.getItem(STORAGE_KEYS.video)?.trim() ?? \"\",\n\t\tspeaker: storage?.getItem(STORAGE_KEYS.speaker)?.trim() ?? \"\",\n\t};\n}\n\nexport function persistStudioDeviceSelection(\n\tkind: StudioDeviceKind,\n\tdeviceId: string,\n\tstorage: DeviceStorage | null = defaultStorage(),\n): void {\n\tstorage?.setItem(STORAGE_KEYS[kind], deviceId.trim());\n}\n\nexport function mapMediaDevices(\n\tdevices: Array<Pick<MediaDeviceInfo, \"deviceId\" | \"kind\" | \"label\">>,\n): StudioDevices {\n\tconst next: StudioDevices = { audio: [], video: [], speaker: [] };\n\tfor (const device of devices) {\n\t\tconst kind = mediaKindToStudio(device.kind);\n\t\tif (!kind || !device.deviceId) continue;\n\t\tnext[kind].push({\n\t\t\tdeviceId: device.deviceId,\n\t\t\tlabel: device.label.trim() || `Device ${next[kind].length + 1}`,\n\t\t});\n\t}\n\treturn next;\n}\n\nexport function resolveDeviceSelection(\n\tsaved: StudioDeviceSelection,\n\tdevices: StudioDevices,\n): {\n\teffective: StudioDeviceSelection;\n\tmissing: Record<StudioDeviceKind, boolean>;\n} {\n\tconst effective: StudioDeviceSelection = {\n\t\taudio: \"\",\n\t\tvideo: \"\",\n\t\tspeaker: \"\",\n\t};\n\tconst missing: Record<StudioDeviceKind, boolean> = {\n\t\taudio: false,\n\t\tvideo: false,\n\t\tspeaker: false,\n\t};\n\tfor (const kind of DEVICE_KINDS) {\n\t\tconst id = saved[kind];\n\t\tif (!id) continue;\n\t\tif (devices[kind].some((option) => option.deviceId === id)) {\n\t\t\teffective[kind] = id;\n\t\t\tcontinue;\n\t\t}\n\t\tmissing[kind] = true;\n\t}\n\treturn { effective, missing };\n}\n\nexport function displayDeviceId(\n\tvalue: string,\n\toptions: StudioDeviceOption[],\n): string {\n\tif (options.some((option) => option.deviceId === value)) return value;\n\treturn options[0]?.deviceId ?? \"\";\n}\n\nexport async function applyStudioDeviceSelection(\n\tsetDevice: (kind: StudioDeviceKind, deviceId: string) => Promise<void>,\n\tsaved: StudioDeviceSelection,\n\tlisted: StudioDevices,\n): Promise<void> {\n\tconst { effective } = resolveDeviceSelection(saved, listed);\n\tawait Promise.allSettled(\n\t\tDEVICE_KINDS.filter((kind) => effective[kind]).map((kind) =>\n\t\t\tsetDevice(kind, effective[kind]),\n\t\t),\n\t);\n}\n\nfunction mediaKindToStudio(kind: MediaDeviceKind): StudioDeviceKind | null {\n\tswitch (kind) {\n\t\tcase \"audioinput\":\n\t\t\treturn \"audio\";\n\t\tcase \"videoinput\":\n\t\t\treturn \"video\";\n\t\tcase \"audiooutput\":\n\t\t\treturn \"speaker\";\n\t\tdefault: {\n\t\t\tconst _exhaustive: never = kind;\n\t\t\treturn _exhaustive;\n\t\t}\n\t}\n}\n\nfunction defaultStorage(): DeviceStorage | null {\n\tif (typeof window === \"undefined\") return null;\n\ttry {\n\t\treturn window.localStorage;\n\t} catch {\n\t\treturn null;\n\t}\n}\n","\"use client\";\n\nimport { useEffect, useRef } from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport function AudioWaveform({\n\ttrack,\n\treducedMotion,\n\tclassName,\n}: {\n\ttrack: MediaStreamTrack | null;\n\treducedMotion: boolean;\n\tclassName?: string;\n}) {\n\tconst canvasRef = useRef<HTMLCanvasElement | null>(null);\n\n\tuseEffect(() => {\n\t\tconst canvas = canvasRef.current;\n\t\tif (!canvas || !track || reducedMotion) return;\n\t\tconst AudioCtx =\n\t\t\twindow.AudioContext ||\n\t\t\t(window as Window & { webkitAudioContext?: typeof AudioContext })\n\t\t\t\t.webkitAudioContext;\n\t\tif (!AudioCtx) return;\n\t\tconst ctx = new AudioCtx();\n\t\tconst source = ctx.createMediaStreamSource(new MediaStream([track]));\n\t\tconst analyser = ctx.createAnalyser();\n\t\tanalyser.fftSize = 64;\n\t\tsource.connect(analyser);\n\t\tconst data = new Uint8Array(analyser.frequencyBinCount);\n\t\tconst graphic = canvas.getContext(\"2d\");\n\t\tconst surface = canvas;\n\t\tlet frame = 0;\n\n\t\tfunction draw() {\n\t\t\tif (!graphic) return;\n\t\t\tanalyser.getByteFrequencyData(data);\n\t\t\tconst { width, height } = surface;\n\t\t\tgraphic.clearRect(0, 0, width, height);\n\t\t\tconst barWidth = width / data.length;\n\t\t\tfor (let i = 0; i < data.length; i += 1) {\n\t\t\t\tconst value = data[i] ?? 0;\n\t\t\t\tconst barHeight = (value / 255) * height;\n\t\t\t\tgraphic.fillStyle = \"currentColor\";\n\t\t\t\tgraphic.fillRect(\n\t\t\t\t\ti * barWidth,\n\t\t\t\t\theight - barHeight,\n\t\t\t\t\tbarWidth - 1,\n\t\t\t\t\tbarHeight,\n\t\t\t\t);\n\t\t\t}\n\t\t\tframe = requestAnimationFrame(draw);\n\t\t}\n\t\tframe = requestAnimationFrame(draw);\n\t\treturn () => {\n\t\t\tcancelAnimationFrame(frame);\n\t\t\tvoid ctx.close();\n\t\t};\n\t}, [track, reducedMotion]);\n\n\tif (reducedMotion) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"bg-muted flex h-12 items-end justify-center gap-1 px-3\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\taria-hidden\n\t\t\t>\n\t\t\t\t<span className=\"bg-foreground/40 h-3 w-1 rounded-sm\" />\n\t\t\t\t<span className=\"bg-foreground/60 h-6 w-1 rounded-sm\" />\n\t\t\t\t<span className=\"bg-foreground/40 h-4 w-1 rounded-sm\" />\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<canvas\n\t\t\tref={canvasRef}\n\t\t\twidth={160}\n\t\t\theight={48}\n\t\t\tclassName={cn(\"text-foreground h-12 w-40\", className)}\n\t\t\taria-hidden\n\t\t/>\n\t);\n}\n","\"use client\";\n\nimport { Tooltip as TooltipPrimitive } from \"@base-ui/react/tooltip\";\n\nimport { cn } from \"../lib/cn\";\n\nfunction TooltipProvider({\n\tdelay = 0,\n\t...props\n}: TooltipPrimitive.Provider.Props) {\n\treturn (\n\t\t<TooltipPrimitive.Provider\n\t\t\tdata-slot=\"tooltip-provider\"\n\t\t\tdelay={delay}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction Tooltip({ ...props }: TooltipPrimitive.Root.Props) {\n\treturn <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />;\n}\n\nfunction TooltipTrigger({ ...props }: TooltipPrimitive.Trigger.Props) {\n\treturn <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />;\n}\n\nfunction TooltipContent({\n\tclassName,\n\tside = \"top\",\n\tsideOffset = 4,\n\talign = \"center\",\n\talignOffset = 0,\n\tchildren,\n\t...props\n}: TooltipPrimitive.Popup.Props &\n\tPick<\n\t\tTooltipPrimitive.Positioner.Props,\n\t\t\"align\" | \"alignOffset\" | \"side\" | \"sideOffset\"\n\t>) {\n\treturn (\n\t\t<TooltipPrimitive.Portal>\n\t\t\t<TooltipPrimitive.Positioner\n\t\t\t\talign={align}\n\t\t\t\talignOffset={alignOffset}\n\t\t\t\tside={side}\n\t\t\t\tsideOffset={sideOffset}\n\t\t\t\tclassName=\"isolate z-50\"\n\t\t\t>\n\t\t\t\t<TooltipPrimitive.Popup\n\t\t\t\t\tdata-slot=\"tooltip-content\"\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"z-50 inline-flex w-fit max-w-xs origin-(--transform-origin) items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs text-background has-data-[slot=kbd]:pr-1.5 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\t{...props}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t\t<TooltipPrimitive.Arrow className=\"z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground data-[side=bottom]:top-1 data-[side=inline-end]:top-1/2! data-[side=inline-end]:-left-1 data-[side=inline-end]:-translate-y-1/2 data-[side=inline-start]:top-1/2! data-[side=inline-start]:-right-1 data-[side=inline-start]:-translate-y-1/2 data-[side=left]:top-1/2! data-[side=left]:-right-1 data-[side=left]:-translate-y-1/2 data-[side=right]:top-1/2! data-[side=right]:-left-1 data-[side=right]:-translate-y-1/2 data-[side=top]:-bottom-2.5\" />\n\t\t\t\t</TooltipPrimitive.Popup>\n\t\t\t</TooltipPrimitive.Positioner>\n\t\t</TooltipPrimitive.Portal>\n\t);\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { Loader2 } from \"lucide-react\";\nimport { Button } from \"../ui/button\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"../ui/tooltip\";\n\nexport function ControlIcon({\n\tlabel,\n\tpressed = false,\n\tdisabled = false,\n\tpending = false,\n\ttone = \"default\",\n\tbadge,\n\tonClick,\n\tchildren,\n}: {\n\tlabel: string;\n\tpressed?: boolean;\n\tdisabled?: boolean;\n\tpending?: boolean;\n\ttone?: \"default\" | \"danger\";\n\tbadge?: number;\n\tonClick: () => void;\n\tchildren: ReactNode;\n}) {\n\treturn (\n\t\t<Tooltip>\n\t\t\t<TooltipTrigger\n\t\t\t\trender={\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tsize=\"icon-lg\"\n\t\t\t\t\t\tvariant={\n\t\t\t\t\t\t\ttone === \"danger\"\n\t\t\t\t\t\t\t\t? \"destructive\"\n\t\t\t\t\t\t\t\t: pressed\n\t\t\t\t\t\t\t\t\t? \"default\"\n\t\t\t\t\t\t\t\t\t: \"secondary\"\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclassName=\"overflow-visible\"\n\t\t\t\t\t\taria-label={label}\n\t\t\t\t\t\taria-pressed={pressed}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tonClick={onClick}\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t<span className=\"relative overflow-visible\">\n\t\t\t\t\t{pending ? (\n\t\t\t\t\t\t<Loader2 className=\"animate-spin motion-reduce:animate-none\" />\n\t\t\t\t\t) : (\n\t\t\t\t\t\tchildren\n\t\t\t\t\t)}\n\t\t\t\t\t{badge != null && badge > 0 ? (\n\t\t\t\t\t\t<span className=\"bg-primary text-primary-foreground absolute -top-2 -right-2 flex h-4 min-w-4 items-center justify-center rounded-full px-1 text-[0.65rem]\">\n\t\t\t\t\t\t\t{badge}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t) : null}\n\t\t\t\t</span>\n\t\t\t</TooltipTrigger>\n\t\t\t<TooltipContent>{label}</TooltipContent>\n\t\t</Tooltip>\n\t);\n}\n\nexport function TileIcon({\n\tlabel,\n\tdisabled = false,\n\ttone = \"default\",\n\tonClick,\n\tchildren,\n}: {\n\tlabel: string;\n\tdisabled?: boolean;\n\ttone?: \"default\" | \"danger\";\n\tonClick: () => void;\n\tchildren: ReactNode;\n}) {\n\treturn (\n\t\t<Tooltip>\n\t\t\t<TooltipTrigger\n\t\t\t\trender={\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tsize=\"icon-xs\"\n\t\t\t\t\t\tvariant={tone === \"danger\" ? \"destructive\" : \"secondary\"}\n\t\t\t\t\t\tclassName=\"bg-black/70 text-white hover:bg-black/90 hover:text-white\"\n\t\t\t\t\t\taria-label={label}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tonClick={onClick}\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</TooltipTrigger>\n\t\t\t<TooltipContent>{label}</TooltipContent>\n\t\t</Tooltip>\n\t);\n}\n","\"use client\";\n\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { XIcon } from \"lucide-react\";\nimport type { ComponentProps } from \"react\";\nimport { cn } from \"../lib/cn\";\n\nfunction Dialog({ ...props }: ComponentProps<typeof DialogPrimitive.Root>) {\n\treturn <DialogPrimitive.Root data-slot=\"dialog\" {...props} />;\n}\n\nfunction DialogTrigger({\n\t...props\n}: ComponentProps<typeof DialogPrimitive.Trigger>) {\n\treturn <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />;\n}\n\nfunction DialogPortal({\n\t...props\n}: ComponentProps<typeof DialogPrimitive.Portal>) {\n\treturn <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />;\n}\n\nfunction DialogClose({\n\t...props\n}: ComponentProps<typeof DialogPrimitive.Close>) {\n\treturn <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />;\n}\n\nfunction DialogOverlay({\n\tclassName,\n\t...props\n}: ComponentProps<typeof DialogPrimitive.Overlay>) {\n\treturn (\n\t\t<DialogPrimitive.Overlay\n\t\t\tdata-slot=\"dialog-overlay\"\n\t\t\tclassName={cn(\n\t\t\t\t\"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction DialogContent({\n\tclassName,\n\tchildren,\n\tshowCloseButton = true,\n\t...props\n}: ComponentProps<typeof DialogPrimitive.Content> & {\n\tshowCloseButton?: boolean;\n}) {\n\treturn (\n\t\t<DialogPortal>\n\t\t\t<DialogOverlay />\n\t\t\t<DialogPrimitive.Content\n\t\t\t\tdata-slot=\"dialog-content\"\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t\t{showCloseButton ? (\n\t\t\t\t\t<DialogPrimitive.Close className=\"ring-offset-background focus:ring-ring absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none\">\n\t\t\t\t\t\t<XIcon className=\"size-4\" />\n\t\t\t\t\t\t<span className=\"sr-only\">Close</span>\n\t\t\t\t\t</DialogPrimitive.Close>\n\t\t\t\t) : null}\n\t\t\t</DialogPrimitive.Content>\n\t\t</DialogPortal>\n\t);\n}\n\nfunction DialogHeader({ className, ...props }: ComponentProps<\"div\">) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"dialog-header\"\n\t\t\tclassName={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction DialogFooter({ className, ...props }: ComponentProps<\"div\">) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"dialog-footer\"\n\t\t\tclassName={cn(\n\t\t\t\t\"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction DialogTitle({\n\tclassName,\n\t...props\n}: ComponentProps<typeof DialogPrimitive.Title>) {\n\treturn (\n\t\t<DialogPrimitive.Title\n\t\t\tdata-slot=\"dialog-title\"\n\t\t\tclassName={cn(\"text-lg leading-none font-semibold\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction DialogDescription({\n\tclassName,\n\t...props\n}: ComponentProps<typeof DialogPrimitive.Description>) {\n\treturn (\n\t\t<DialogPrimitive.Description\n\t\t\tdata-slot=\"dialog-description\"\n\t\t\tclassName={cn(\"text-muted-foreground text-sm\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport {\n\tDialog,\n\tDialogClose,\n\tDialogContent,\n\tDialogDescription,\n\tDialogFooter,\n\tDialogHeader,\n\tDialogTitle,\n\tDialogTrigger,\n};\n","import * as React from \"react\";\nimport { Input as InputPrimitive } from \"@base-ui/react/input\";\n\nimport { cn } from \"../lib/cn\";\n\nfunction Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\n\treturn (\n\t\t<InputPrimitive\n\t\t\ttype={type}\n\t\t\tdata-slot=\"input\"\n\t\t\tclassName={cn(\n\t\t\t\t\"h-8 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport { Input };\n","\"use client\";\n\nimport * as LabelPrimitive from \"@radix-ui/react-label\";\nimport type { ComponentProps } from \"react\";\nimport { cn } from \"../lib/cn\";\n\nfunction Label({\n\tclassName,\n\t...props\n}: ComponentProps<typeof LabelPrimitive.Root>) {\n\treturn (\n\t\t<LabelPrimitive.Root\n\t\t\tdata-slot=\"label\"\n\t\t\tclassName={cn(\n\t\t\t\t\"flex items-center gap-2 text-sm leading-none font-medium select-none peer-disabled:cursor-not-allowed peer-disabled:opacity-50\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport { Label };\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport {\n\tmapMediaDevices,\n\tSTUDIO_DEVICE_CHANGE_DEBOUNCE_MS,\n} from \"../lib/devices\";\nimport type { StudioDevices } from \"../lib/meeting\";\n\nconst EMPTY_DEVICES: StudioDevices = {\n\taudio: [],\n\tvideo: [],\n\tspeaker: [],\n};\n\nexport function useMediaDevices(refreshKey = 0, enabled = true): StudioDevices {\n\tconst [devices, setDevices] = useState<StudioDevices>(EMPTY_DEVICES);\n\n\tuseEffect(() => {\n\t\tif (!enabled) return;\n\t\tif (typeof navigator === \"undefined\" || !navigator.mediaDevices) {\n\t\t\treturn;\n\t\t}\n\t\tlet cancelled = false;\n\t\tlet timer: number | undefined;\n\n\t\tconst load = async () => {\n\t\t\ttry {\n\t\t\t\tconst list = await navigator.mediaDevices.enumerateDevices();\n\t\t\t\tif (!cancelled) setDevices(mapMediaDevices(list));\n\t\t\t} catch {\n\t\t\t\tif (!cancelled) setDevices(EMPTY_DEVICES);\n\t\t\t}\n\t\t};\n\n\t\tconst onChange = () => {\n\t\t\twindow.clearTimeout(timer);\n\t\t\ttimer = window.setTimeout(() => {\n\t\t\t\tvoid load();\n\t\t\t}, STUDIO_DEVICE_CHANGE_DEBOUNCE_MS);\n\t\t};\n\n\t\tvoid load();\n\t\tnavigator.mediaDevices.addEventListener(\"devicechange\", onChange);\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t\twindow.clearTimeout(timer);\n\t\t\tnavigator.mediaDevices.removeEventListener(\"devicechange\", onChange);\n\t\t};\n\t}, [enabled, refreshKey]);\n\n\treturn devices;\n}\n","const TEST_MS = 400;\nconst TEST_HZ = 440;\n\ntype SinkAudioElement = HTMLAudioElement & {\n\tsetSinkId?: (id: string) => Promise<void>;\n\tplaysInline?: boolean;\n};\n\nexport async function playSpeakerTest(deviceId?: string): Promise<void> {\n\tconst AudioCtx =\n\t\twindow.AudioContext ||\n\t\t(window as Window & { webkitAudioContext?: typeof AudioContext })\n\t\t\t.webkitAudioContext;\n\tif (!AudioCtx) {\n\t\tthrow new Error(\"AudioContext unavailable\");\n\t}\n\n\tconst ctx = new AudioCtx();\n\tvoid ctx.resume();\n\n\tconst oscillator = ctx.createOscillator();\n\tconst gain = ctx.createGain();\n\toscillator.type = \"sine\";\n\toscillator.frequency.value = TEST_HZ;\n\tgain.gain.value = 0.18;\n\toscillator.connect(gain);\n\n\tlet audio: SinkAudioElement | null = null;\n\n\ttry {\n\t\tconst probe = document.createElement(\"audio\") as SinkAudioElement;\n\t\tconst canRoute = Boolean(deviceId) && typeof probe.setSinkId === \"function\";\n\t\tif (canRoute && deviceId) {\n\t\t\tconst destination = ctx.createMediaStreamDestination();\n\t\t\tgain.connect(destination);\n\t\t\taudio = probe;\n\t\t\taudio.autoplay = true;\n\t\t\taudio.playsInline = true;\n\t\t\taudio.srcObject = destination.stream;\n\t\t\ttry {\n\t\t\t\tawait audio.setSinkId?.(deviceId);\n\t\t\t\tawait audio.play();\n\t\t\t} catch {\n\t\t\t\tgain.disconnect();\n\t\t\t\tgain.connect(ctx.destination);\n\t\t\t\taudio.srcObject = null;\n\t\t\t\taudio.remove();\n\t\t\t\taudio = null;\n\t\t\t}\n\t\t} else {\n\t\t\tgain.connect(ctx.destination);\n\t\t}\n\n\t\toscillator.start();\n\t\tawait new Promise<void>((resolve) => {\n\t\t\twindow.setTimeout(resolve, TEST_MS);\n\t\t});\n\t\toscillator.stop();\n\t} finally {\n\t\tif (audio) {\n\t\t\taudio.srcObject = null;\n\t\t\taudio.remove();\n\t\t}\n\t\tawait ctx.close();\n\t}\n}\n","\"use client\";\n\nimport { Mic, Video, Volume2 } from \"lucide-react\";\nimport { type ReactNode } from \"react\";\nimport { displayDeviceId } from \"../lib/devices\";\nimport type {\n\tStudioDeviceKind,\n\tStudioDeviceOption,\n\tStudioDevices,\n} from \"../lib/meeting\";\nimport { cn } from \"../lib/cn\";\n\nexport type StudioDeviceSelectLabels = {\n\tcameraDevice: string;\n\tmicDevice: string;\n\tspeakerDevice: string;\n};\n\nexport function StudioDeviceSelectGroup({\n\tdevices,\n\tselected,\n\tlabels,\n\tonChange,\n\tspeakerAction,\n}: {\n\tdevices: StudioDevices;\n\tselected: { audio: string; video: string; speaker: string };\n\tlabels: StudioDeviceSelectLabels;\n\tonChange: (kind: StudioDeviceKind, deviceId: string) => void;\n\tspeakerAction?: ReactNode;\n}) {\n\treturn (\n\t\t<div className=\"grid grid-cols-[8.5rem_minmax(0,1fr)] items-center gap-x-3 gap-y-3\">\n\t\t\t<DeviceRow\n\t\t\t\ticon={<Video />}\n\t\t\t\tlabel={labels.cameraDevice}\n\t\t\t\toptions={devices.video}\n\t\t\t\tvalue={selected.video}\n\t\t\t\tonChange={(id) => onChange(\"video\", id)}\n\t\t\t/>\n\t\t\t<DeviceRow\n\t\t\t\ticon={<Mic />}\n\t\t\t\tlabel={labels.micDevice}\n\t\t\t\toptions={devices.audio}\n\t\t\t\tvalue={selected.audio}\n\t\t\t\tonChange={(id) => onChange(\"audio\", id)}\n\t\t\t/>\n\t\t\t<DeviceRow\n\t\t\t\ticon={<Volume2 />}\n\t\t\t\tlabel={labels.speakerDevice}\n\t\t\t\toptions={devices.speaker}\n\t\t\t\tvalue={selected.speaker}\n\t\t\t\tonChange={(id) => onChange(\"speaker\", id)}\n\t\t\t\taction={speakerAction}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nfunction DeviceRow({\n\ticon,\n\tlabel,\n\toptions,\n\tvalue,\n\tonChange,\n\taction,\n}: {\n\ticon: ReactNode;\n\tlabel: string;\n\toptions: StudioDeviceOption[];\n\tvalue: string;\n\tonChange: (deviceId: string) => void;\n\taction?: ReactNode;\n}) {\n\tconst display = displayDeviceId(value, options);\n\treturn (\n\t\t<>\n\t\t\t<span className=\"text-muted-foreground flex min-w-0 items-center gap-2 text-sm\">\n\t\t\t\t<span className=\"[&_svg]:size-4\" aria-hidden>\n\t\t\t\t\t{icon}\n\t\t\t\t</span>\n\t\t\t\t<span className=\"truncate\">{label}</span>\n\t\t\t</span>\n\t\t\t<div className=\"flex min-w-0 items-center gap-2\">\n\t\t\t\t{options.length > 0 ? (\n\t\t\t\t\t<select\n\t\t\t\t\t\taria-label={label}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"border-input bg-background h-8 min-w-0 flex-1 rounded-md border px-2 text-base md:text-sm\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t\tvalue={display}\n\t\t\t\t\t\tonChange={(event) => onChange(event.target.value)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{options.map((option) => (\n\t\t\t\t\t\t\t<option key={option.deviceId} value={option.deviceId}>\n\t\t\t\t\t\t\t\t{option.label}\n\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</select>\n\t\t\t\t) : null}\n\t\t\t\t{action}\n\t\t\t</div>\n\t\t</>\n\t);\n}\n","\"use client\";\n\nimport { useEffect, useRef, useState } from \"react\";\nimport { toast } from \"sonner\";\nimport { Button } from \"../ui/button\";\nimport {\n\tDialog,\n\tDialogContent,\n\tDialogDescription,\n\tDialogHeader,\n\tDialogTitle,\n} from \"../ui/dialog\";\nimport { Input } from \"../ui/input\";\nimport { Label } from \"../ui/label\";\nimport { useMediaDevices } from \"../hooks/use-media-devices\";\nimport {\n\tpersistStudioDeviceSelection,\n\treadStudioDeviceSelection,\n\tresolveDeviceSelection,\n\ttype StudioDeviceSelection,\n} from \"../lib/devices\";\nimport type { StudioDeviceKind, StudioMeetingHandle } from \"../lib/meeting\";\nimport { STUDIO_DISPLAY_NAME_MAX } from \"../lib/meeting\";\nimport { playSpeakerTest } from \"../lib/speaker-test\";\nimport { AudioWaveform } from \"./audio-waveform\";\nimport { StudioDeviceSelectGroup } from \"./studio-device-select\";\n\nexport type StudioSettingsLabels = {\n\tsettingsTitle: string;\n\tsettingsDescription: string;\n\tguestName: string;\n\tdisplayNameSave: string;\n\tdisplayNameSaved: string;\n\tdisplayNameError: string;\n\tcameraDevice: string;\n\tmicDevice: string;\n\tspeakerDevice: string;\n\ttestSpeaker: string;\n\ttestSpeakerError: string;\n\tcameraOff: string;\n\tmicLevel: string;\n};\n\nexport function StudioSettingsDialog({\n\topen,\n\tonOpenChange,\n\tmeeting,\n\tlabels,\n\treducedMotion,\n\tcameraOn,\n}: {\n\topen: boolean;\n\tonOpenChange: (open: boolean) => void;\n\tmeeting: StudioMeetingHandle;\n\tlabels: StudioSettingsLabels;\n\treducedMotion: boolean;\n\tcameraOn: boolean;\n}) {\n\tconst devices = useMediaDevices(open ? 1 : 0, open);\n\tconst [saved, setSaved] = useState<StudioDeviceSelection>(() =>\n\t\treadStudioDeviceSelection(),\n\t);\n\tconst [audioTrack, setAudioTrack] = useState<MediaStreamTrack | null>(null);\n\tconst [videoTrack, setVideoTrack] = useState<MediaStreamTrack | null>(null);\n\tconst [testingSpeaker, setTestingSpeaker] = useState(false);\n\tconst [displayName, setDisplayName] = useState(\"\");\n\tconst [savedDisplayName, setSavedDisplayName] = useState(\"\");\n\tconst [savingDisplayName, setSavingDisplayName] = useState(false);\n\tconst { effective } = resolveDeviceSelection(saved, devices);\n\n\tuseEffect(() => {\n\t\tif (!open) return;\n\t\tsetSaved(readStudioDeviceSelection());\n\t}, [open]);\n\n\tuseEffect(() => {\n\t\tif (!open) return;\n\t\tconst selfName =\n\t\t\tmeeting\n\t\t\t\t.participants()\n\t\t\t\t.find((row) => row.isSelf)\n\t\t\t\t?.name?.trim() ?? \"\";\n\t\tsetDisplayName(selfName);\n\t\tsetSavedDisplayName(selfName);\n\t}, [meeting, open]);\n\n\tuseEffect(() => {\n\t\tif (!open) return;\n\t\tconst sync = () => {\n\t\t\tsetAudioTrack(meeting.localAudioTrack());\n\t\t\tsetVideoTrack(meeting.localVideoTrack());\n\t\t};\n\t\tsync();\n\t\treturn meeting.subscribeMedia(sync);\n\t}, [meeting, open]);\n\n\tconst trimmedDisplayName = displayName.trim();\n\tconst displayNameUnchanged = trimmedDisplayName === savedDisplayName;\n\tconst displayNameSaveDisabled =\n\t\t!trimmedDisplayName || displayNameUnchanged || savingDisplayName;\n\n\tasync function onChange(kind: StudioDeviceKind, deviceId: string) {\n\t\tpersistStudioDeviceSelection(kind, deviceId);\n\t\tsetSaved((prev) => ({ ...prev, [kind]: deviceId }));\n\t\ttry {\n\t\t\tawait meeting.setDevice(kind, deviceId);\n\t\t} catch {\n\t\t\t/* device may have vanished between enumerate and switch */\n\t\t}\n\t}\n\n\tasync function onSaveDisplayName() {\n\t\tif (displayNameSaveDisabled) return;\n\t\tsetSavingDisplayName(true);\n\t\ttry {\n\t\t\tawait meeting.setDisplayName(trimmedDisplayName);\n\t\t\tsetSavedDisplayName(trimmedDisplayName);\n\t\t\tsetDisplayName(trimmedDisplayName);\n\t\t\ttoast.success(labels.displayNameSaved);\n\t\t} catch {\n\t\t\ttoast.error(labels.displayNameError);\n\t\t} finally {\n\t\t\tsetSavingDisplayName(false);\n\t\t}\n\t}\n\n\tasync function onTestSpeaker() {\n\t\tif (testingSpeaker) return;\n\t\tconst speakerId = effective.speaker || devices.speaker[0]?.deviceId;\n\t\tsetTestingSpeaker(true);\n\t\ttry {\n\t\t\tawait playSpeakerTest(speakerId || undefined);\n\t\t} catch {\n\t\t\ttoast.error(labels.testSpeakerError);\n\t\t} finally {\n\t\t\tsetTestingSpeaker(false);\n\t\t}\n\t}\n\n\treturn (\n\t\t<Dialog open={open} onOpenChange={onOpenChange}>\n\t\t\t<DialogContent className=\"sm:max-w-md\">\n\t\t\t\t<DialogHeader>\n\t\t\t\t\t<DialogTitle>{labels.settingsTitle}</DialogTitle>\n\t\t\t\t\t<DialogDescription>{labels.settingsDescription}</DialogDescription>\n\t\t\t\t</DialogHeader>\n\t\t\t\t<div className=\"space-y-2\">\n\t\t\t\t\t<Label htmlFor=\"studio-display-name\">{labels.guestName}</Label>\n\t\t\t\t\t<div className=\"flex gap-2\">\n\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\tid=\"studio-display-name\"\n\t\t\t\t\t\t\tvalue={displayName}\n\t\t\t\t\t\t\tmaxLength={STUDIO_DISPLAY_NAME_MAX}\n\t\t\t\t\t\t\tonChange={(event) => setDisplayName(event.target.value)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\tdisabled={displayNameSaveDisabled}\n\t\t\t\t\t\t\tonClick={() => void onSaveDisplayName()}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{labels.displayNameSave}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<SettingsCameraPreview\n\t\t\t\t\ttrack={videoTrack}\n\t\t\t\t\topen={open}\n\t\t\t\t\tcameraOn={cameraOn}\n\t\t\t\t\tcameraOffLabel={labels.cameraOff}\n\t\t\t\t/>\n\t\t\t\t<div>\n\t\t\t\t\t<p className=\"sr-only\">{labels.micLevel}</p>\n\t\t\t\t\t<AudioWaveform\n\t\t\t\t\t\ttrack={audioTrack}\n\t\t\t\t\t\treducedMotion={reducedMotion}\n\t\t\t\t\t\tclassName=\"w-full\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t<StudioDeviceSelectGroup\n\t\t\t\t\tdevices={devices}\n\t\t\t\t\tselected={effective}\n\t\t\t\t\tlabels={labels}\n\t\t\t\t\tonChange={(kind, id) => void onChange(kind, id)}\n\t\t\t\t\tspeakerAction={\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\tdisabled={testingSpeaker}\n\t\t\t\t\t\t\tonClick={() => void onTestSpeaker()}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{labels.testSpeaker}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t</DialogContent>\n\t\t</Dialog>\n\t);\n}\n\nfunction SettingsCameraPreview({\n\ttrack,\n\topen,\n\tcameraOn,\n\tcameraOffLabel,\n}: {\n\ttrack: MediaStreamTrack | null;\n\topen: boolean;\n\tcameraOn: boolean;\n\tcameraOffLabel: string;\n}) {\n\tconst ref = useRef<HTMLVideoElement | null>(null);\n\n\tuseEffect(() => {\n\t\tconst el = ref.current;\n\t\tif (!el) return;\n\t\tif (!open || !cameraOn || !track) {\n\t\t\tel.srcObject = null;\n\t\t\treturn;\n\t\t}\n\t\tel.setAttribute(\"webkit-playsinline\", \"\");\n\t\tel.srcObject = new MediaStream([track]);\n\t\tvoid el.play().catch(() => undefined);\n\t\treturn () => {\n\t\t\tel.srcObject = null;\n\t\t};\n\t}, [cameraOn, open, track]);\n\n\tif (!cameraOn) {\n\t\treturn (\n\t\t\t<div className=\"bg-muted flex aspect-video w-full items-center justify-center rounded-xl\">\n\t\t\t\t<p className=\"text-muted-foreground text-sm\">{cameraOffLabel}</p>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif (!track) {\n\t\treturn (\n\t\t\t<div className=\"bg-muted aspect-video w-full rounded-xl\" aria-hidden />\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className=\"bg-muted relative aspect-video w-full overflow-hidden rounded-xl\">\n\t\t\t<video\n\t\t\t\tref={ref}\n\t\t\t\tautoPlay\n\t\t\t\tmuted\n\t\t\t\tplaysInline\n\t\t\t\tclassName=\"livo-studio-inline-video absolute inset-0 size-full -scale-x-100 object-cover\"\n\t\t\t/>\n\t\t</div>\n\t);\n}\n","\"use client\";\n\nimport { useEffect, useRef, useState } from \"react\";\nimport { Mic, MicOff, Settings, Video, VideoOff } from \"lucide-react\";\nimport type { StudioRoomLabels } from \"../lib/labels\";\nimport type { StudioMeetingHandle } from \"../lib/meeting\";\nimport { AudioWaveform } from \"./audio-waveform\";\nimport { ControlIcon } from \"./studio-control-icon\";\nimport { StudioSettingsDialog } from \"./studio-settings-dialog\";\nimport { TooltipProvider } from \"../ui/tooltip\";\n\nexport function StudioGuestWaiting({\n\tmeeting,\n\treducedMotion,\n\tcameraOn,\n\tmuted,\n\tlabels,\n\tsettingsOpen,\n\tonToggleCamera,\n\tonToggleMute,\n\tonOpenSettings,\n\tonCloseSettings,\n}: {\n\tmeeting: StudioMeetingHandle;\n\treducedMotion: boolean;\n\tcameraOn: boolean;\n\tmuted: boolean;\n\tlabels: StudioRoomLabels;\n\tsettingsOpen: boolean;\n\tonToggleCamera: () => void;\n\tonToggleMute: () => void;\n\tonOpenSettings: () => void;\n\tonCloseSettings: (open: boolean) => void;\n}) {\n\tconst [audioTrack, setAudioTrack] = useState<MediaStreamTrack | null>(null);\n\tconst [videoTrack, setVideoTrack] = useState<MediaStreamTrack | null>(null);\n\n\tuseEffect(() => {\n\t\tconst sync = () => {\n\t\t\tsetAudioTrack(meeting.localAudioTrack());\n\t\t\tsetVideoTrack(meeting.localVideoTrack());\n\t\t};\n\t\tsync();\n\t\treturn meeting.subscribeMedia(sync);\n\t}, [meeting]);\n\n\treturn (\n\t\t<div className=\"mx-auto flex min-h-dvh w-full max-w-lg flex-col justify-center gap-6 p-6\">\n\t\t\t<WaitingCameraPreview\n\t\t\t\ttrack={videoTrack}\n\t\t\t\tcameraOn={cameraOn}\n\t\t\t\tcameraOffLabel={labels.cameraOff}\n\t\t\t/>\n\t\t\t<AudioWaveform\n\t\t\t\ttrack={muted ? null : audioTrack}\n\t\t\t\treducedMotion={reducedMotion}\n\t\t\t/>\n\t\t\t<p className=\"text-muted-foreground text-center text-sm\" role=\"status\">\n\t\t\t\t{labels.waitingHost}\n\t\t\t</p>\n\t\t\t<TooltipProvider>\n\t\t\t\t<div className=\"flex justify-center gap-2\">\n\t\t\t\t\t<ControlIcon\n\t\t\t\t\t\tlabel={muted ? labels.unmute : labels.mute}\n\t\t\t\t\t\tpressed={muted}\n\t\t\t\t\t\ttone={muted ? \"danger\" : \"default\"}\n\t\t\t\t\t\tonClick={onToggleMute}\n\t\t\t\t\t>\n\t\t\t\t\t\t{muted ? <MicOff /> : <Mic />}\n\t\t\t\t\t</ControlIcon>\n\t\t\t\t\t<ControlIcon\n\t\t\t\t\t\tlabel={labels.camera}\n\t\t\t\t\t\tpressed={cameraOn}\n\t\t\t\t\t\tonClick={onToggleCamera}\n\t\t\t\t\t>\n\t\t\t\t\t\t{cameraOn ? <Video /> : <VideoOff />}\n\t\t\t\t\t</ControlIcon>\n\t\t\t\t\t<ControlIcon\n\t\t\t\t\t\tlabel={labels.settings}\n\t\t\t\t\t\tpressed={settingsOpen}\n\t\t\t\t\t\tonClick={onOpenSettings}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Settings />\n\t\t\t\t\t</ControlIcon>\n\t\t\t\t</div>\n\t\t\t</TooltipProvider>\n\t\t\t<StudioSettingsDialog\n\t\t\t\topen={settingsOpen}\n\t\t\t\tonOpenChange={onCloseSettings}\n\t\t\t\tmeeting={meeting}\n\t\t\t\tlabels={labels}\n\t\t\t\treducedMotion={reducedMotion}\n\t\t\t\tcameraOn={cameraOn}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nfunction WaitingCameraPreview({\n\ttrack,\n\tcameraOn,\n\tcameraOffLabel,\n}: {\n\ttrack: MediaStreamTrack | null;\n\tcameraOn: boolean;\n\tcameraOffLabel: string;\n}) {\n\tconst ref = useRef<HTMLVideoElement | null>(null);\n\n\tuseEffect(() => {\n\t\tconst el = ref.current;\n\t\tif (!el) return;\n\t\tif (!cameraOn || !track) {\n\t\t\tel.srcObject = null;\n\t\t\treturn;\n\t\t}\n\t\tel.setAttribute(\"webkit-playsinline\", \"\");\n\t\tel.srcObject = new MediaStream([track]);\n\t\tvoid el.play().catch(() => undefined);\n\t\treturn () => {\n\t\t\tel.srcObject = null;\n\t\t};\n\t}, [cameraOn, track]);\n\n\tif (!cameraOn) {\n\t\treturn (\n\t\t\t<div className=\"bg-muted flex aspect-video w-full items-center justify-center rounded-xl\">\n\t\t\t\t<p className=\"text-muted-foreground text-sm\">{cameraOffLabel}</p>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif (!track) {\n\t\treturn (\n\t\t\t<div className=\"bg-muted aspect-video w-full rounded-xl\" aria-hidden />\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className=\"bg-muted relative aspect-video w-full overflow-hidden rounded-xl\">\n\t\t\t<video\n\t\t\t\tref={ref}\n\t\t\t\tautoPlay\n\t\t\t\tmuted\n\t\t\t\tplaysInline\n\t\t\t\tclassName=\"livo-studio-inline-video absolute inset-0 size-full -scale-x-100 object-cover\"\n\t\t\t/>\n\t\t</div>\n\t);\n}\n","import type { ReactNode } from \"react\";\n\nexport function StudioLiveBadge({\n\tchildren,\n\trole,\n}: {\n\tchildren: ReactNode;\n\trole?: \"status\";\n}) {\n\treturn (\n\t\t<span\n\t\t\trole={role}\n\t\t\tclassName=\"flex items-center gap-1.5 rounded bg-red-600 px-2 py-0.5 text-xs font-semibold tracking-wide text-white\"\n\t\t>\n\t\t\t<span className=\"size-1.5 animate-pulse rounded-full bg-white motion-reduce:animate-none\" />\n\t\t\t{children}\n\t\t</span>\n\t);\n}\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport type { HTMLAttributes } from \"react\";\nimport { cn } from \"../lib/cn\";\n\nconst badgeVariants = cva(\n\t\"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors\",\n\t{\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tdefault: \"border-transparent bg-primary text-primary-foreground\",\n\t\t\t\tsecondary: \"border-transparent bg-secondary text-secondary-foreground\",\n\t\t\t\tdestructive:\n\t\t\t\t\t\"border-transparent bg-destructive text-destructive-foreground\",\n\t\t\t\toutline: \"text-foreground\",\n\t\t\t\tsuccess:\n\t\t\t\t\t\"border-transparent bg-chart-5/15 text-chart-5 dark:bg-chart-5/25\",\n\t\t\t\twarning:\n\t\t\t\t\t\"border-transparent bg-chart-4/15 text-chart-4 dark:bg-chart-4/25\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: { variant: \"default\" },\n\t},\n);\n\ninterface BadgeProps\n\textends HTMLAttributes<HTMLSpanElement>, VariantProps<typeof badgeVariants> {}\n\nfunction Badge({ className, variant, ...props }: BadgeProps) {\n\treturn (\n\t\t<span className={cn(badgeVariants({ variant }), className)} {...props} />\n\t);\n}\n\nexport { Badge, badgeVariants };\n","\"use client\";\n\nimport {\n\tMic,\n\tMicOff,\n\tMonitorUp,\n\tUndo2,\n\tVideo,\n\tVideoOff,\n\tX,\n} from \"lucide-react\";\nimport { useEffect, useRef, type ReactNode } from \"react\";\nimport { Badge } from \"../ui/badge\";\nimport { Button } from \"../ui/button\";\nimport {\n\tresolveStudioPipSelfView,\n\tresolveStudioPipSpotlight,\n\ttype StudioMeetingHandle,\n\ttype StudioPipSpotlight,\n} from \"../lib/meeting\";\nimport { cn } from \"../lib/cn\";\nimport { StudioLiveBadge } from \"./studio-live-badge\";\n\nexport type StudioPipPanelLabels = {\n\tlive: string;\n\tmute: string;\n\tunmute: string;\n\tcamera: string;\n\tscreen: string;\n\tstopScreen: string;\n\taskToShare: string;\n\tshareRequested: string;\n\tcancelShareRequest: string;\n\tbackToStudio: string;\n\tpipTitle: string;\n\tcameraOff: string;\n};\n\nexport function StudioPipPanel({\n\tmeeting,\n\tlabels,\n\tcameraOn,\n\tmuted,\n\tscreenOn,\n\tshowMediaControls = true,\n\tshowScreenControl = false,\n\tcanShareFreely = false,\n\tscreenAvailable = true,\n\tscreenPending = false,\n\tshareGrant = \"idle\",\n\tonAir,\n\telapsed,\n\tunread = 0,\n\tonToggleMute,\n\tonToggleCamera,\n\tonToggleScreen,\n\tonAskToShare,\n\tonCancelShareRequest,\n\tonBack,\n}: {\n\tmeeting: StudioMeetingHandle;\n\tlabels: StudioPipPanelLabels;\n\tcameraOn: boolean;\n\tmuted: boolean;\n\tscreenOn: boolean;\n\tshowMediaControls?: boolean;\n\tshowScreenControl?: boolean;\n\tcanShareFreely?: boolean;\n\tscreenAvailable?: boolean;\n\tscreenPending?: boolean;\n\tshareGrant?: \"idle\" | \"requested\" | \"granted\";\n\tonAir: boolean;\n\telapsed: string | null;\n\tunread?: number;\n\tonToggleMute: () => void;\n\tonToggleCamera: () => void;\n\tonToggleScreen: () => void;\n\tonAskToShare?: () => void;\n\tonCancelShareRequest?: () => void;\n\tonBack: () => void;\n}) {\n\tconst tiles = meeting.participants();\n\tconst spotlight = resolveStudioPipSpotlight(tiles, meeting.activeSpeakerId());\n\tconst selfView = resolveStudioPipSelfView(tiles, spotlight);\n\tconst speaking =\n\t\tspotlight !== null && spotlight.participantId === meeting.activeSpeakerId();\n\tconst backLabel =\n\t\tunread > 0 ? `${labels.backToStudio} (${unread})` : labels.backToStudio;\n\n\treturn (\n\t\t<div\n\t\t\trole=\"region\"\n\t\t\taria-label={labels.pipTitle}\n\t\t\tclassName=\"bg-background flex h-full min-h-0 flex-col gap-2 p-2 text-foreground\"\n\t\t>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"bg-muted relative min-h-0 flex-1 overflow-hidden rounded-xl\",\n\t\t\t\t\tspeaking && \"ring-2 ring-primary\",\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<PipSpotlight\n\t\t\t\t\tmeeting={meeting}\n\t\t\t\t\tspotlight={spotlight}\n\t\t\t\t\tcameraOffLabel={labels.cameraOff}\n\t\t\t\t/>\n\t\t\t\t{onAir ? (\n\t\t\t\t\t<div className=\"absolute top-2 left-2 flex items-center gap-2\">\n\t\t\t\t\t\t<StudioLiveBadge>{labels.live}</StudioLiveBadge>\n\t\t\t\t\t\t{elapsed ? (\n\t\t\t\t\t\t\t<span className=\"text-muted-foreground tabular-nums text-xs\">\n\t\t\t\t\t\t\t\t{elapsed}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t</div>\n\t\t\t\t) : null}\n\t\t\t\t{selfView ? (\n\t\t\t\t\t<div\n\t\t\t\t\t\tdata-testid=\"pip-self-view\"\n\t\t\t\t\t\tclassName=\"absolute right-2 bottom-2 aspect-video w-[30%] overflow-hidden rounded-lg ring-1 ring-white/40\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<PipTrackVideo track={meeting.localVideoTrack()} fit=\"cover\" />\n\t\t\t\t\t</div>\n\t\t\t\t) : null}\n\t\t\t</div>\n\t\t\t<footer className=\"flex flex-wrap items-center justify-center gap-2\">\n\t\t\t\t{showMediaControls ? (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<PipControl\n\t\t\t\t\t\t\tlabel={muted ? labels.unmute : labels.mute}\n\t\t\t\t\t\t\toff={muted}\n\t\t\t\t\t\t\tonClick={onToggleMute}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{muted ? <MicOff /> : <Mic />}\n\t\t\t\t\t\t</PipControl>\n\t\t\t\t\t\t<PipControl\n\t\t\t\t\t\t\tlabel={labels.camera}\n\t\t\t\t\t\t\toff={!cameraOn}\n\t\t\t\t\t\t\tonClick={onToggleCamera}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{cameraOn ? <Video /> : <VideoOff />}\n\t\t\t\t\t\t</PipControl>\n\t\t\t\t\t</>\n\t\t\t\t) : null}\n\t\t\t\t{showMediaControls && (showScreenControl || screenOn)\n\t\t\t\t\t? pipScreenControls({\n\t\t\t\t\t\t\tlabels,\n\t\t\t\t\t\t\tscreenOn,\n\t\t\t\t\t\t\tcanShareFreely,\n\t\t\t\t\t\t\tscreenAvailable,\n\t\t\t\t\t\t\tscreenPending,\n\t\t\t\t\t\t\tshareGrant,\n\t\t\t\t\t\t\tonToggleScreen,\n\t\t\t\t\t\t\tonAskToShare,\n\t\t\t\t\t\t\tonCancelShareRequest,\n\t\t\t\t\t\t})\n\t\t\t\t\t: null}\n\t\t\t\t<PipControl label={backLabel} onClick={onBack}>\n\t\t\t\t\t<span className=\"relative\">\n\t\t\t\t\t\t<Undo2 />\n\t\t\t\t\t\t{unread > 0 ? (\n\t\t\t\t\t\t\t<Badge className=\"absolute -top-2 -right-2 h-4 min-w-4 px-1 text-[0.65rem]\">\n\t\t\t\t\t\t\t\t{unread}\n\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t</span>\n\t\t\t\t</PipControl>\n\t\t\t</footer>\n\t\t</div>\n\t);\n}\n\nfunction PipSpotlight({\n\tmeeting,\n\tspotlight,\n\tcameraOffLabel,\n}: {\n\tmeeting: StudioMeetingHandle;\n\tspotlight: StudioPipSpotlight | null;\n\tcameraOffLabel: string;\n}) {\n\tif (!spotlight || spotlight.kind === \"idle\") {\n\t\treturn (\n\t\t\t<div className=\"absolute inset-0 flex flex-col items-center justify-center gap-2\">\n\t\t\t\t{spotlight?.picture ? (\n\t\t\t\t\t<img\n\t\t\t\t\t\tsrc={spotlight.picture}\n\t\t\t\t\t\talt=\"\"\n\t\t\t\t\t\tclassName=\"size-14 rounded-full object-cover\"\n\t\t\t\t\t/>\n\t\t\t\t) : (\n\t\t\t\t\t<div className=\"bg-background flex size-14 items-center justify-center rounded-full text-lg\">\n\t\t\t\t\t\t{(spotlight?.name ?? \"?\").slice(0, 1).toUpperCase()}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t\t<p className=\"text-muted-foreground text-xs\">\n\t\t\t\t\t{spotlight?.name ?? cameraOffLabel}\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tconst track =\n\t\tspotlight.kind === \"screen\"\n\t\t\t? meeting.participantScreenTrack(spotlight.participantId)\n\t\t\t: meeting.participantVideoTrack(spotlight.participantId);\n\n\treturn (\n\t\t<>\n\t\t\t<PipTrackVideo\n\t\t\t\ttrack={track}\n\t\t\t\tfit={spotlight.kind === \"screen\" ? \"contain\" : \"cover\"}\n\t\t\t/>\n\t\t\t<p className=\"absolute inset-x-0 bottom-0 bg-linear-to-t from-black/70 to-transparent p-2 text-xs font-medium text-white\">\n\t\t\t\t{spotlight.name}\n\t\t\t</p>\n\t\t</>\n\t);\n}\n\nfunction PipTrackVideo({\n\ttrack,\n\tfit,\n}: {\n\ttrack: MediaStreamTrack | null;\n\tfit: \"contain\" | \"cover\";\n}) {\n\tconst ref = useRef<HTMLVideoElement | null>(null);\n\n\tuseEffect(() => {\n\t\tconst el = ref.current;\n\t\tif (!el) return;\n\t\tif (!track) {\n\t\t\tel.srcObject = null;\n\t\t\treturn;\n\t\t}\n\t\tel.setAttribute(\"webkit-playsinline\", \"\");\n\t\tel.srcObject = new MediaStream([track]);\n\t\tvoid el.play().catch(() => undefined);\n\t\treturn () => {\n\t\t\tel.srcObject = null;\n\t\t};\n\t}, [track]);\n\n\treturn (\n\t\t<video\n\t\t\tref={ref}\n\t\t\tautoPlay\n\t\t\tplaysInline\n\t\t\tmuted\n\t\t\tclassName={cn(\n\t\t\t\t\"livo-studio-inline-video absolute inset-0 size-full\",\n\t\t\t\tfit === \"contain\" ? \"object-contain\" : \"object-cover\",\n\t\t\t)}\n\t\t/>\n\t);\n}\n\nfunction pipScreenControls({\n\tlabels,\n\tscreenOn,\n\tcanShareFreely,\n\tscreenAvailable,\n\tscreenPending,\n\tshareGrant,\n\tonToggleScreen,\n\tonAskToShare,\n\tonCancelShareRequest,\n}: {\n\tlabels: StudioPipPanelLabels;\n\tscreenOn: boolean;\n\tcanShareFreely: boolean;\n\tscreenAvailable: boolean;\n\tscreenPending: boolean;\n\tshareGrant: \"idle\" | \"requested\" | \"granted\";\n\tonToggleScreen: () => void;\n\tonAskToShare?: () => void;\n\tonCancelShareRequest?: () => void;\n}): ReactNode {\n\tif (canShareFreely || screenOn) {\n\t\treturn (\n\t\t\t<PipControl\n\t\t\t\tlabel={screenOn ? labels.stopScreen : labels.screen}\n\t\t\t\toff={screenOn}\n\t\t\t\tdisabled={screenPending || (!screenAvailable && !screenOn)}\n\t\t\t\tonClick={onToggleScreen}\n\t\t\t>\n\t\t\t\t<MonitorUp />\n\t\t\t</PipControl>\n\t\t);\n\t}\n\tif (shareGrant === \"requested\") {\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<PipControl\n\t\t\t\t\tlabel={labels.shareRequested}\n\t\t\t\t\toff\n\t\t\t\t\tdisabled\n\t\t\t\t\tonClick={() => undefined}\n\t\t\t\t>\n\t\t\t\t\t<MonitorUp />\n\t\t\t\t</PipControl>\n\t\t\t\t<PipControl\n\t\t\t\t\tlabel={labels.cancelShareRequest}\n\t\t\t\t\tonClick={() => onCancelShareRequest?.()}\n\t\t\t\t>\n\t\t\t\t\t<X />\n\t\t\t\t</PipControl>\n\t\t\t</>\n\t\t);\n\t}\n\treturn (\n\t\t<PipControl label={labels.askToShare} onClick={() => onAskToShare?.()}>\n\t\t\t<MonitorUp />\n\t\t</PipControl>\n\t);\n}\n\nfunction PipControl({\n\tlabel,\n\tonClick,\n\toff = false,\n\tdisabled = false,\n\tchildren,\n}: {\n\tlabel: string;\n\tonClick: () => void;\n\toff?: boolean;\n\tdisabled?: boolean;\n\tchildren: ReactNode;\n}) {\n\treturn (\n\t\t<Button\n\t\t\ttype=\"button\"\n\t\t\tsize=\"icon-lg\"\n\t\t\tvariant={off ? \"destructive\" : \"secondary\"}\n\t\t\tclassName=\"size-10 rounded-full\"\n\t\t\taria-label={label}\n\t\t\tdisabled={disabled}\n\t\t\tonClick={onClick}\n\t\t>\n\t\t\t{children}\n\t\t</Button>\n\t);\n}\n","\"use client\";\n\nimport { useEffect, useRef } from \"react\";\nimport type { StudioMeetingHandle } from \"../lib/meeting\";\n\nexport function StudioRemoteAudio({\n\tmeeting,\n\tparticipantId,\n}: {\n\tmeeting: StudioMeetingHandle;\n\tparticipantId: string;\n}) {\n\tconst ref = useRef<HTMLAudioElement | null>(null);\n\n\tuseEffect(() => {\n\t\tmeeting.attachAudio(participantId, ref.current);\n\t\treturn () => meeting.attachAudio(participantId, null);\n\t}, [meeting, participantId]);\n\n\treturn <audio ref={ref} autoPlay className=\"sr-only\" />;\n}\n","import * as React from \"react\";\nimport { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../lib/cn\";\n\nfunction BubbleGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"bubble-group\"\n\t\t\tclassName={cn(\"flex min-w-min flex-col gap-2\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nconst bubbleVariants = cva(\n\t\"group/bubble relative flex w-fit min-w-min max-w-full flex-col gap-1 group-data-[align=end]/message:self-end data-[align=end]:self-end data-[variant=ghost]:max-w-full\",\n\t{\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tdefault:\n\t\t\t\t\t\"*:data-[slot=bubble-content]:bg-primary *:data-[slot=bubble-content]:text-primary-foreground [&>[data-slot=bubble-content]:is(button,a):hover]:bg-primary/80\",\n\t\t\t\tsecondary:\n\t\t\t\t\t\"*:data-[slot=bubble-content]:bg-secondary *:data-[slot=bubble-content]:text-secondary-foreground [&>[data-slot=bubble-content]:is(button,a):hover]:bg-[color-mix(in_oklch,var(--secondary),var(--foreground)_5%)]\",\n\t\t\t\tmuted:\n\t\t\t\t\t\"*:data-[slot=bubble-content]:bg-muted [&>[data-slot=bubble-content]:is(button,a):hover]:bg-[color-mix(in_oklch,var(--muted),var(--foreground)_5%)]\",\n\t\t\t\ttinted:\n\t\t\t\t\t\"*:data-[slot=bubble-content]:bg-[oklch(from_var(--primary)_0.93_calc(c*0.4)_h)] *:data-[slot=bubble-content]:text-foreground dark:*:data-[slot=bubble-content]:bg-[oklch(from_var(--primary)_0.3_calc(c*0.4)_h)] [&>[data-slot=bubble-content]:is(button,a):hover]:bg-[oklch(from_var(--primary)_0.88_calc(c*0.5)_h)] dark:[&>[data-slot=bubble-content]:is(button,a):hover]:bg-[oklch(from_var(--primary)_0.35_calc(c*0.5)_h)]\",\n\t\t\t\toutline:\n\t\t\t\t\t\"*:data-[slot=bubble-content]:border-border *:data-[slot=bubble-content]:bg-background [&>[data-slot=bubble-content]:is(button,a):hover]:bg-muted [&>[data-slot=bubble-content]:is(button,a):hover]:text-foreground dark:[&>[data-slot=bubble-content]:is(button,a):hover]:bg-input/30\",\n\t\t\t\tghost:\n\t\t\t\t\t\"border-none *:data-[slot=bubble-content]:rounded-none *:data-[slot=bubble-content]:bg-transparent *:data-[slot=bubble-content]:p-0 [&>[data-slot=bubble-content]:is(button,a):hover]:bg-muted [&>[data-slot=bubble-content]:is(button,a):hover]:text-foreground dark:[&>[data-slot=bubble-content]:is(button,a):hover]:bg-muted/50\",\n\t\t\t\tdestructive:\n\t\t\t\t\t\"*:data-[slot=bubble-content]:bg-destructive/10 *:data-[slot=bubble-content]:text-destructive dark:*:data-[slot=bubble-content]:bg-destructive/20 [&>[data-slot=bubble-content]:is(button,a):hover]:bg-destructive/20 dark:[&>[data-slot=bubble-content]:is(button,a):hover]:bg-destructive/30\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tvariant: \"default\",\n\t\t},\n\t},\n);\n\nfunction Bubble({\n\tvariant = \"default\",\n\talign = \"start\",\n\tclassName,\n\t...props\n}: React.ComponentProps<\"div\"> &\n\tVariantProps<typeof bubbleVariants> & {\n\t\talign?: \"start\" | \"end\";\n\t}) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"bubble\"\n\t\t\tdata-variant={variant}\n\t\t\tdata-align={align}\n\t\t\tclassName={cn(bubbleVariants({ variant }), className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction BubbleContent({\n\tclassName,\n\trender,\n\t...props\n}: useRender.ComponentProps<\"div\">) {\n\treturn useRender({\n\t\tdefaultTagName: \"div\",\n\t\tprops: mergeProps<\"div\">(\n\t\t\t{\n\t\t\t\tclassName: cn(\n\t\t\t\t\t\"w-auto max-w-full whitespace-pre-wrap rounded-xl border border-transparent px-3 py-2 text-sm leading-relaxed [overflow-wrap:break-word] group-data-[align=end]/bubble:self-end [button]:text-left [button,a]:transition-colors [button,a]:outline-none [button,a]:focus-visible:border-ring [button,a]:focus-visible:ring-3 [button,a]:focus-visible:ring-ring/50\",\n\t\t\t\t\tclassName,\n\t\t\t\t),\n\t\t\t},\n\t\t\tprops,\n\t\t),\n\t\trender,\n\t\tstate: {\n\t\t\tslot: \"bubble-content\",\n\t\t},\n\t});\n}\n\nconst bubbleReactionsVariants = cva(\n\t\"absolute z-10 flex w-fit shrink-0 items-center justify-center gap-1 rounded-full bg-muted px-1.5 py-0.5 text-sm ring-3 ring-card has-[button]:p-0\",\n\t{\n\t\tvariants: {\n\t\t\tside: {\n\t\t\t\ttop: \"top-0 -translate-y-3/4\",\n\t\t\t\tbottom: \"bottom-0 translate-y-3/4\",\n\t\t\t},\n\t\t\talign: {\n\t\t\t\tstart: \"left-3\",\n\t\t\t\tend: \"right-3\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tside: \"bottom\",\n\t\t\talign: \"end\",\n\t\t},\n\t},\n);\n\nfunction BubbleReactions({\n\tside = \"bottom\",\n\talign = \"end\",\n\tclassName,\n\t...props\n}: React.ComponentProps<\"div\"> & {\n\talign?: \"start\" | \"end\";\n\tside?: \"top\" | \"bottom\";\n}) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"bubble-reactions\"\n\t\t\tdata-align={align}\n\t\t\tdata-side={side}\n\t\t\tclassName={cn(bubbleReactionsVariants({ side, align }), className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport { BubbleGroup, Bubble, BubbleContent, BubbleReactions };\n","import type { StudioChatMessage } from \"./types\";\n\nexport type ChatMessageGroup = {\n\tuserId: string;\n\tname: string;\n\tmine: boolean;\n\trows: StudioChatMessage[];\n};\n\nexport function groupChatMessages(\n\tmessages: StudioChatMessage[],\n\tselfUserId: string | null,\n): ChatMessageGroup[] {\n\tconst groups: ChatMessageGroup[] = [];\n\tfor (const row of messages) {\n\t\tconst mine = Boolean(selfUserId) && row.userId === selfUserId;\n\t\tconst last = groups[groups.length - 1];\n\t\tif (last && last.userId === row.userId && last.mine === mine) {\n\t\t\tlast.rows.push(row);\n\t\t\tcontinue;\n\t\t}\n\t\tgroups.push({\n\t\t\tuserId: row.userId,\n\t\t\tname: row.name,\n\t\t\tmine,\n\t\t\trows: [row],\n\t\t});\n\t}\n\treturn groups;\n}\n\nexport function senderInitials(name: string): string {\n\tconst parts = name\n\t\t.trim()\n\t\t.split(/\\s+/)\n\t\t.filter((part) => part.length > 0);\n\tif (parts.length === 0) return \"?\";\n\tconst first = parts[0]!;\n\tif (parts.length === 1) return first.slice(0, 2).toUpperCase();\n\treturn `${first[0]!}${parts[1]![0]!}`.toUpperCase();\n}\n","\"use client\";\n\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport { toast } from \"sonner\";\nimport { Bubble, BubbleContent, BubbleGroup } from \"../ui/bubble\";\nimport { Button } from \"../ui/button\";\nimport { Input } from \"../ui/input\";\nimport { groupChatMessages, senderInitials } from \"../lib/chat-groups\";\nimport type { StudioRoomLabels } from \"../lib/labels\";\nimport type { StudioMeetingHandle } from \"../lib/meeting\";\nimport type { StudioChatMessage, StudioParticipantTile } from \"../lib/types\";\n\nexport function StudioChatPanel({\n\tmeeting,\n\tselfUserId,\n\tparticipants,\n\tisModerator,\n\tlabels,\n}: {\n\tmeeting: StudioMeetingHandle;\n\tselfUserId: string | null;\n\tparticipants: StudioParticipantTile[];\n\tisModerator: boolean;\n\tlabels: Pick<\n\t\tStudioRoomLabels,\n\t\t| \"chat\"\n\t\t| \"chatSend\"\n\t\t| \"chatPlaceholder\"\n\t\t| \"chatError\"\n\t\t| \"chatEveryone\"\n\t\t| \"chatEdited\"\n\t\t| \"chatPinned\"\n\t\t| \"chatLoadOlder\"\n\t\t| \"chatRateLimited\"\n\t\t| \"chatDelete\"\n\t\t| \"chatEdit\"\n\t\t| \"chatPin\"\n\t\t| \"chatUnpin\"\n\t\t| \"chatSave\"\n\t>;\n}) {\n\tconst [tick, setTick] = useState(0);\n\tconst [draft, setDraft] = useState(\"\");\n\tconst [editingId, setEditingId] = useState<string | null>(null);\n\tconst listRef = useRef<HTMLDivElement | null>(null);\n\n\tuseEffect(\n\t\t() => meeting.subscribeChat(() => setTick((n) => n + 1)),\n\t\t[meeting],\n\t);\n\n\tconst messages = useMemo(\n\t\t() => meeting.chatMessages().filter((row) => !row.targetUserIds?.length),\n\t\t[meeting, tick],\n\t);\n\tconst pinned = useMemo(() => meeting.pinnedChatMessages(), [meeting, tick]);\n\tconst limit = meeting.chatMaxTextLimit();\n\tconst pictures = useMemo(() => {\n\t\tconst map = new Map<string, string | null>();\n\t\tfor (const row of participants) {\n\t\t\tif (row.userId) map.set(row.userId, row.picture);\n\t\t}\n\t\treturn map;\n\t}, [participants]);\n\tconst groups = useMemo(\n\t\t() => groupChatMessages(messages, selfUserId),\n\t\t[messages, selfUserId],\n\t);\n\n\tuseEffect(() => {\n\t\tconst list = listRef.current;\n\t\tif (!list) return;\n\t\tlist.scrollTop = list.scrollHeight;\n\t}, [messages.length]);\n\n\tasync function onSend() {\n\t\tconst text = draft.trim();\n\t\tif (!text) return;\n\t\tsetDraft(\"\");\n\t\ttry {\n\t\t\tif (editingId) {\n\t\t\t\tawait meeting.editChatMessage(editingId, text);\n\t\t\t\tsetEditingId(null);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait meeting.sendChatMessage(text);\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message.toLowerCase() : \"\";\n\t\t\ttoast.error(\n\t\t\t\tmessage.includes(\"rate\") ? labels.chatRateLimited : labels.chatError,\n\t\t\t);\n\t\t}\n\t}\n\n\tfunction messageActions(row: StudioChatMessage, mine: boolean) {\n\t\treturn (\n\t\t\t<p\n\t\t\t\tclassName={\n\t\t\t\t\tmine\n\t\t\t\t\t\t? \"text-muted-foreground flex flex-wrap justify-end gap-2 text-xs\"\n\t\t\t\t\t\t: \"text-muted-foreground flex flex-wrap gap-2 text-xs\"\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t{row.isEdited ? <span>{labels.chatEdited}</span> : null}\n\t\t\t\t{mine ? (\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tsetEditingId(row.id);\n\t\t\t\t\t\t\tsetDraft(row.text);\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{labels.chatEdit}\n\t\t\t\t\t</button>\n\t\t\t\t) : null}\n\t\t\t\t{isModerator || mine ? (\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonClick={() =>\n\t\t\t\t\t\t\tvoid meeting\n\t\t\t\t\t\t\t\t.deleteChatMessage(row.id)\n\t\t\t\t\t\t\t\t.catch(() => toast.error(labels.chatError))\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\t{labels.chatDelete}\n\t\t\t\t\t</button>\n\t\t\t\t) : null}\n\t\t\t\t{isModerator ? (\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonClick={() =>\n\t\t\t\t\t\t\tvoid meeting\n\t\t\t\t\t\t\t\t.pinChatMessage(row.id, row.pinned !== true)\n\t\t\t\t\t\t\t\t.catch(() => toast.error(labels.chatError))\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\t{row.pinned ? labels.chatUnpin : labels.chatPin}\n\t\t\t\t\t</button>\n\t\t\t\t) : null}\n\t\t\t</p>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className=\"flex min-h-0 flex-1 flex-col\">\n\t\t\t{pinned[0] ? (\n\t\t\t\t<div role=\"status\" className=\"bg-muted border-b px-3 py-2 text-sm\">\n\t\t\t\t\t<p className=\"text-muted-foreground text-xs\">{labels.chatPinned}</p>\n\t\t\t\t\t<p>{pinned[0].text}</p>\n\t\t\t\t</div>\n\t\t\t) : null}\n\t\t\t<div\n\t\t\t\tref={listRef}\n\t\t\t\trole=\"log\"\n\t\t\t\taria-live=\"polite\"\n\t\t\t\tclassName=\"flex min-h-0 flex-1 flex-col gap-3 overflow-auto p-3\"\n\t\t\t>\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\tclassName=\"self-center\"\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tconst oldest = messages[0]?.time;\n\t\t\t\t\t\tvoid meeting.fetchChatHistory({\n\t\t\t\t\t\t\ttimestamp: oldest,\n\t\t\t\t\t\t});\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{labels.chatLoadOlder}\n\t\t\t\t</Button>\n\t\t\t\t{groups.map((group) => {\n\t\t\t\t\tconst bubbles = group.rows.map((row) => (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tkey={row.id}\n\t\t\t\t\t\t\tclassName={\n\t\t\t\t\t\t\t\tgroup.mine\n\t\t\t\t\t\t\t\t\t? \"ml-auto flex max-w-[80%] flex-col gap-1 self-end\"\n\t\t\t\t\t\t\t\t\t: \"flex max-w-[80%] flex-col gap-1 self-start\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Bubble\n\t\t\t\t\t\t\t\talign={group.mine ? \"end\" : \"start\"}\n\t\t\t\t\t\t\t\tvariant={group.mine ? \"default\" : \"secondary\"}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<BubbleContent>{row.text}</BubbleContent>\n\t\t\t\t\t\t\t</Bubble>\n\t\t\t\t\t\t\t{messageActions(row, group.mine)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t));\n\t\t\t\t\tif (group.mine) {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<BubbleGroup key={group.rows[0]!.id} className=\"items-end\">\n\t\t\t\t\t\t\t\t{bubbles}\n\t\t\t\t\t\t\t</BubbleGroup>\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tconst picture = pictures.get(group.userId) ?? null;\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tkey={group.rows[0]!.id}\n\t\t\t\t\t\t\tclassName=\"flex max-w-full gap-2 self-start\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{picture ? (\n\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\tsrc={picture}\n\t\t\t\t\t\t\t\t\talt=\"\"\n\t\t\t\t\t\t\t\t\tclassName=\"mt-0.5 size-7 shrink-0 rounded-full object-cover\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<span className=\"bg-muted text-muted-foreground mt-0.5 flex size-7 shrink-0 items-center justify-center rounded-full text-xs\">\n\t\t\t\t\t\t\t\t\t{senderInitials(group.name)}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t<div className=\"min-w-0 flex-1\">\n\t\t\t\t\t\t\t\t<p className=\"text-muted-foreground mb-1 text-xs\">\n\t\t\t\t\t\t\t\t\t{group.name}\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t<BubbleGroup>{bubbles}</BubbleGroup>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</div>\n\t\t\t<form\n\t\t\t\tclassName=\"flex flex-col gap-2 border-t p-3\"\n\t\t\t\tonSubmit={(event) => {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tvoid onSend();\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<Input\n\t\t\t\t\tclassName=\"min-w-0 flex-1\"\n\t\t\t\t\tvalue={draft}\n\t\t\t\t\tmaxLength={limit}\n\t\t\t\t\tonChange={(event) => setDraft(event.target.value)}\n\t\t\t\t\tplaceholder={labels.chatPlaceholder}\n\t\t\t\t\taria-label={labels.chatPlaceholder}\n\t\t\t\t/>\n\t\t\t\t<div className=\"flex items-center justify-between gap-2\">\n\t\t\t\t\t<p className=\"text-muted-foreground text-xs\">\n\t\t\t\t\t\t{draft.length}/{limit}\n\t\t\t\t\t</p>\n\t\t\t\t\t<Button type=\"submit\" size=\"sm\">\n\t\t\t\t\t\t{editingId ? labels.chatSave : labels.chatSend}\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t</form>\n\t\t</div>\n\t);\n}\n","\"use client\";\n\nimport { Button } from \"../ui/button\";\nimport type { StudioRoomLabels } from \"../lib/labels\";\nimport type { StudioWaitlistedGuest } from \"../lib/types\";\n\nexport function StudioWaitingRoom({\n\twaitlisted,\n\tlabels,\n\tonAdmitAs,\n\tonAdmitAll,\n\tonDeny,\n}: {\n\twaitlisted: StudioWaitlistedGuest[];\n\tlabels: Pick<\n\t\tStudioRoomLabels,\n\t\t| \"waiting\"\n\t\t| \"admitAsPanelist\"\n\t\t| \"admitAsAudience\"\n\t\t| \"admitAllPanelists\"\n\t\t| \"admitAllAudience\"\n\t\t| \"deny\"\n\t\t| \"waitingSkeleton\"\n\t\t| \"noWaiting\"\n\t>;\n\tonAdmitAs: (participantId: string, as: \"panelist\" | \"audience\") => void;\n\tonAdmitAll: (as: \"panelist\" | \"audience\") => void;\n\tonDeny: (participantId: string) => void;\n}) {\n\treturn (\n\t\t<section aria-label={labels.waiting} className=\"space-y-3\">\n\t\t\t<p className=\"text-sm font-medium\">{labels.waiting}</p>\n\t\t\t{waitlisted.length === 0 ? (\n\t\t\t\t<p className=\"text-muted-foreground text-sm\">{labels.noWaiting}</p>\n\t\t\t) : (\n\t\t\t\t<>\n\t\t\t\t\t<div className=\"grid gap-2\">\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\tclassName=\"w-full\"\n\t\t\t\t\t\t\tonClick={() => onAdmitAll(\"panelist\")}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{labels.admitAllPanelists}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\tclassName=\"w-full\"\n\t\t\t\t\t\t\tonClick={() => onAdmitAll(\"audience\")}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{labels.admitAllAudience}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</div>\n\t\t\t\t\t<ul className=\"space-y-2\">\n\t\t\t\t\t\t{waitlisted.map((guest) => (\n\t\t\t\t\t\t\t<li key={guest.id} className=\"space-y-2 rounded-md border p-2\">\n\t\t\t\t\t\t\t\t<span className=\"block truncate text-sm\">{guest.name}</span>\n\t\t\t\t\t\t\t\t<div className=\"grid gap-2\">\n\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\t\t\t\tclassName=\"w-full\"\n\t\t\t\t\t\t\t\t\t\tonClick={() => onAdmitAs(guest.id, \"panelist\")}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{labels.admitAsPanelist}\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\t\t\t\tclassName=\"w-full\"\n\t\t\t\t\t\t\t\t\t\tonClick={() => onAdmitAs(guest.id, \"audience\")}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{labels.admitAsAudience}\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\t\t\tclassName=\"w-full\"\n\t\t\t\t\t\t\t\t\t\tonClick={() => onDeny(guest.id)}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{labels.deny}\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</ul>\n\t\t\t\t</>\n\t\t\t)}\n\t\t</section>\n\t);\n}\n","\"use client\";\n\nimport { Link2, X } from \"lucide-react\";\nimport { Button } from \"../ui/button\";\nimport type { StudioRoomLabels } from \"../lib/labels\";\nimport type { StudioMeetingHandle, StudioStageRequest } from \"../lib/meeting\";\nimport type {\n\tStudioParticipantTile,\n\tStudioWaitlistedGuest,\n} from \"../lib/types\";\nimport { isOnStage } from \"../lib/meeting\";\nimport { StudioChatPanel } from \"./studio-chat-panel\";\nimport { StudioWaitingRoom } from \"./studio-waiting-room\";\n\nexport type StudioSideTab = \"chat\" | \"people\";\n\nexport function StudioSidePanel({\n\ttab,\n\tonTabChange,\n\tonClose,\n\tmeeting,\n\tselfUserId,\n\tparticipants,\n\twaitlisted,\n\tstageRequests,\n\tisModerator,\n\tchatBadge,\n\tpeopleBadge,\n\tlabels,\n\tonAdmitAs,\n\tonAdmitAll,\n\tonDeny,\n\tonGrantStage,\n\tonDenyStage,\n\tonTakeOffAir,\n\tguestUrl,\n\tonShareGuestLink,\n}: {\n\ttab: StudioSideTab;\n\tonTabChange: (tab: StudioSideTab) => void;\n\tonClose: () => void;\n\tmeeting: StudioMeetingHandle;\n\tselfUserId: string | null;\n\tparticipants: StudioParticipantTile[];\n\twaitlisted: StudioWaitlistedGuest[];\n\tstageRequests: StudioStageRequest[];\n\tisModerator: boolean;\n\tchatBadge: number;\n\tpeopleBadge: number;\n\tlabels: StudioRoomLabels;\n\tonAdmitAs: (participantId: string, as: \"panelist\" | \"audience\") => void;\n\tonAdmitAll: (as: \"panelist\" | \"audience\") => void;\n\tonDeny: (participantId: string) => void;\n\tonGrantStage: (userId: string) => void;\n\tonDenyStage: (userId: string) => void;\n\tonTakeOffAir: (userId: string) => void;\n\tguestUrl?: string | null;\n\tonShareGuestLink: () => void;\n}) {\n\tconst panelists = participants.filter((row) => isOnStage(row.stageStatus));\n\tconst audience = participants.filter((row) => !isOnStage(row.stageStatus));\n\n\treturn (\n\t\t<aside className=\"bg-background flex min-h-0 w-full flex-1 flex-col border-t md:w-80 md:flex-none md:border-l md:border-t-0\">\n\t\t\t<div className=\"flex\">\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\tvariant={tab === \"chat\" ? \"secondary\" : \"ghost\"}\n\t\t\t\t\tclassName=\"relative flex-1 rounded-none\"\n\t\t\t\t\tonClick={() => onTabChange(\"chat\")}\n\t\t\t\t>\n\t\t\t\t\t{labels.chat}\n\t\t\t\t\t{chatBadge > 0 ? (\n\t\t\t\t\t\t<span className=\"bg-primary text-primary-foreground ml-2 inline-flex h-4 min-w-4 items-center justify-center rounded-full px-1 text-[0.65rem]\">\n\t\t\t\t\t\t\t{chatBadge}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t) : null}\n\t\t\t\t</Button>\n\t\t\t\t{isModerator ? (\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\tvariant={tab === \"people\" ? \"secondary\" : \"ghost\"}\n\t\t\t\t\t\tclassName=\"relative flex-1 rounded-none\"\n\t\t\t\t\t\tonClick={() => onTabChange(\"people\")}\n\t\t\t\t\t>\n\t\t\t\t\t\t{labels.people}\n\t\t\t\t\t\t{peopleBadge > 0 ? (\n\t\t\t\t\t\t\t<span className=\"bg-primary text-primary-foreground ml-2 inline-flex h-4 min-w-4 items-center justify-center rounded-full px-1 text-[0.65rem]\">\n\t\t\t\t\t\t\t\t{peopleBadge}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t</Button>\n\t\t\t\t) : null}\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tsize=\"icon-xs\"\n\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\tclassName=\"m-1 shrink-0\"\n\t\t\t\t\taria-label={labels.closePanel}\n\t\t\t\t\tonClick={onClose}\n\t\t\t\t>\n\t\t\t\t\t<X />\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t\t{tab === \"chat\" ? (\n\t\t\t\t<StudioChatPanel\n\t\t\t\t\tmeeting={meeting}\n\t\t\t\t\tselfUserId={selfUserId}\n\t\t\t\t\tparticipants={participants}\n\t\t\t\t\tisModerator={isModerator}\n\t\t\t\t\tlabels={labels}\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<div className=\"flex min-h-0 flex-1 flex-col gap-4 overflow-auto p-3\">\n\t\t\t\t\t{guestUrl ? (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\tclassName=\"w-full\"\n\t\t\t\t\t\t\tonClick={onShareGuestLink}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Link2 />\n\t\t\t\t\t\t\t{labels.shareLink}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t) : null}\n\t\t\t\t\t<StudioWaitingRoom\n\t\t\t\t\t\twaitlisted={waitlisted}\n\t\t\t\t\t\tlabels={labels}\n\t\t\t\t\t\tonAdmitAs={onAdmitAs}\n\t\t\t\t\t\tonAdmitAll={onAdmitAll}\n\t\t\t\t\t\tonDeny={onDeny}\n\t\t\t\t\t/>\n\t\t\t\t\t{stageRequests.length > 0 ? (\n\t\t\t\t\t\t<section aria-label={labels.stageRequests} className=\"space-y-2\">\n\t\t\t\t\t\t\t<p className=\"text-sm font-medium\">{labels.stageRequests}</p>\n\t\t\t\t\t\t\t<ul className=\"space-y-2\">\n\t\t\t\t\t\t\t\t{stageRequests.map((request) => (\n\t\t\t\t\t\t\t\t\t<li\n\t\t\t\t\t\t\t\t\t\tkey={request.userId}\n\t\t\t\t\t\t\t\t\t\tclassName=\"space-y-2 rounded-md border p-2\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<span className=\"block truncate text-sm\">\n\t\t\t\t\t\t\t\t\t\t\t{request.name}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t<div className=\"grid gap-2\">\n\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"w-full\"\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => onGrantStage(request.userId)}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{labels.bringOnAir}\n\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"w-full\"\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => onDenyStage(request.userId)}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{labels.deny}\n\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t</section>\n\t\t\t\t\t) : null}\n\t\t\t\t\t<section aria-label={labels.panelists} className=\"space-y-2\">\n\t\t\t\t\t\t<p className=\"text-sm font-medium\">{labels.panelists}</p>\n\t\t\t\t\t\t{panelists.length === 0 ? (\n\t\t\t\t\t\t\t<p className=\"text-muted-foreground text-sm\">\n\t\t\t\t\t\t\t\t{labels.noPanelists}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<ul className=\"space-y-2\">\n\t\t\t\t\t\t\t\t{panelists.map((row) => {\n\t\t\t\t\t\t\t\t\tconst userId = row.userId;\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<li\n\t\t\t\t\t\t\t\t\t\t\tkey={row.id}\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"space-y-2 rounded-md border p-2\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"block truncate text-sm\">{row.name}</span>\n\t\t\t\t\t\t\t\t\t\t\t{!row.isSelf && userId ? (\n\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"w-full\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => onTakeOffAir(userId)}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{labels.offAir}\n\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</section>\n\t\t\t\t\t<section aria-label={labels.audience} className=\"space-y-2\">\n\t\t\t\t\t\t<p className=\"text-sm font-medium\">{labels.audience}</p>\n\t\t\t\t\t\t{audience.length === 0 ? (\n\t\t\t\t\t\t\t<p className=\"text-muted-foreground text-sm\">\n\t\t\t\t\t\t\t\t{labels.noAudience}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<ul className=\"space-y-2\">\n\t\t\t\t\t\t\t\t{audience.map((row) => {\n\t\t\t\t\t\t\t\t\tconst userId = row.userId;\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<li\n\t\t\t\t\t\t\t\t\t\t\tkey={row.id}\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"space-y-2 rounded-md border p-2\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"block truncate text-sm\">{row.name}</span>\n\t\t\t\t\t\t\t\t\t\t\t{!row.isSelf && userId ? (\n\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"w-full\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => onGrantStage(userId)}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{labels.bringOnAir}\n\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</section>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</aside>\n\t);\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Menu as MenuPrimitive } from \"@base-ui/react/menu\";\n\nimport { cn } from \"../lib/cn\";\nimport { ChevronRightIcon, CheckIcon } from \"lucide-react\";\n\nfunction DropdownMenu({ ...props }: MenuPrimitive.Root.Props) {\n\treturn <MenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />;\n}\n\nfunction DropdownMenuPortal({ ...props }: MenuPrimitive.Portal.Props) {\n\treturn <MenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />;\n}\n\nfunction DropdownMenuTrigger({ ...props }: MenuPrimitive.Trigger.Props) {\n\treturn <MenuPrimitive.Trigger data-slot=\"dropdown-menu-trigger\" {...props} />;\n}\n\nfunction DropdownMenuContent({\n\talign = \"start\",\n\talignOffset = 0,\n\tside = \"bottom\",\n\tsideOffset = 4,\n\tclassName,\n\t...props\n}: MenuPrimitive.Popup.Props &\n\tPick<\n\t\tMenuPrimitive.Positioner.Props,\n\t\t\"align\" | \"alignOffset\" | \"side\" | \"sideOffset\"\n\t>) {\n\treturn (\n\t\t<MenuPrimitive.Portal>\n\t\t\t<MenuPrimitive.Positioner\n\t\t\t\tclassName=\"isolate z-50 outline-none\"\n\t\t\t\talign={align}\n\t\t\t\talignOffset={alignOffset}\n\t\t\t\tside={side}\n\t\t\t\tsideOffset={sideOffset}\n\t\t\t>\n\t\t\t\t<MenuPrimitive.Popup\n\t\t\t\t\tdata-slot=\"dropdown-menu-content\"\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"z-50 max-h-(--available-height) w-(--anchor-width) min-w-32 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 outline-none data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:overflow-hidden data-closed:fade-out-0 data-closed:zoom-out-95\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\t{...props}\n\t\t\t\t/>\n\t\t\t</MenuPrimitive.Positioner>\n\t\t</MenuPrimitive.Portal>\n\t);\n}\n\nfunction DropdownMenuGroup({ ...props }: MenuPrimitive.Group.Props) {\n\treturn <MenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />;\n}\n\nfunction DropdownMenuLabel({\n\tclassName,\n\tinset,\n\t...props\n}: MenuPrimitive.GroupLabel.Props & {\n\tinset?: boolean;\n}) {\n\treturn (\n\t\t<MenuPrimitive.GroupLabel\n\t\t\tdata-slot=\"dropdown-menu-label\"\n\t\t\tdata-inset={inset}\n\t\t\tclassName={cn(\n\t\t\t\t\"px-1.5 py-1 text-xs font-medium text-muted-foreground data-inset:pl-7\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction DropdownMenuItem({\n\tclassName,\n\tinset,\n\tvariant = \"default\",\n\t...props\n}: MenuPrimitive.Item.Props & {\n\tinset?: boolean;\n\tvariant?: \"default\" | \"destructive\";\n}) {\n\treturn (\n\t\t<MenuPrimitive.Item\n\t\t\tdata-slot=\"dropdown-menu-item\"\n\t\t\tdata-inset={inset}\n\t\t\tdata-variant={variant}\n\t\t\tclassName={cn(\n\t\t\t\t\"group/dropdown-menu-item relative flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-7 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-destructive\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction DropdownMenuSub({ ...props }: MenuPrimitive.SubmenuRoot.Props) {\n\treturn <MenuPrimitive.SubmenuRoot data-slot=\"dropdown-menu-sub\" {...props} />;\n}\n\nfunction DropdownMenuSubTrigger({\n\tclassName,\n\tinset,\n\tchildren,\n\t...props\n}: MenuPrimitive.SubmenuTrigger.Props & {\n\tinset?: boolean;\n}) {\n\treturn (\n\t\t<MenuPrimitive.SubmenuTrigger\n\t\t\tdata-slot=\"dropdown-menu-sub-trigger\"\n\t\t\tdata-inset={inset}\n\t\t\tclassName={cn(\n\t\t\t\t\"flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-7 data-popup-open:bg-accent data-popup-open:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t\t<ChevronRightIcon className=\"ml-auto\" />\n\t\t</MenuPrimitive.SubmenuTrigger>\n\t);\n}\n\nfunction DropdownMenuSubContent({\n\talign = \"start\",\n\talignOffset = -3,\n\tside = \"right\",\n\tsideOffset = 0,\n\tclassName,\n\t...props\n}: React.ComponentProps<typeof DropdownMenuContent>) {\n\treturn (\n\t\t<DropdownMenuContent\n\t\t\tdata-slot=\"dropdown-menu-sub-content\"\n\t\t\tclassName={cn(\n\t\t\t\t\"w-auto min-w-[96px] rounded-lg bg-popover p-1 text-popover-foreground shadow-lg ring-1 ring-foreground/10 duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\talign={align}\n\t\t\talignOffset={alignOffset}\n\t\t\tside={side}\n\t\t\tsideOffset={sideOffset}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction DropdownMenuCheckboxItem({\n\tclassName,\n\tchildren,\n\tchecked,\n\tinset,\n\t...props\n}: MenuPrimitive.CheckboxItem.Props & {\n\tinset?: boolean;\n}) {\n\treturn (\n\t\t<MenuPrimitive.CheckboxItem\n\t\t\tdata-slot=\"dropdown-menu-checkbox-item\"\n\t\t\tdata-inset={inset}\n\t\t\tclassName={cn(\n\t\t\t\t\"relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tchecked={checked}\n\t\t\t{...props}\n\t\t>\n\t\t\t<span\n\t\t\t\tclassName=\"pointer-events-none absolute right-2 flex items-center justify-center\"\n\t\t\t\tdata-slot=\"dropdown-menu-checkbox-item-indicator\"\n\t\t\t>\n\t\t\t\t<MenuPrimitive.CheckboxItemIndicator>\n\t\t\t\t\t<CheckIcon />\n\t\t\t\t</MenuPrimitive.CheckboxItemIndicator>\n\t\t\t</span>\n\t\t\t{children}\n\t\t</MenuPrimitive.CheckboxItem>\n\t);\n}\n\nfunction DropdownMenuRadioGroup({ ...props }: MenuPrimitive.RadioGroup.Props) {\n\treturn (\n\t\t<MenuPrimitive.RadioGroup\n\t\t\tdata-slot=\"dropdown-menu-radio-group\"\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction DropdownMenuRadioItem({\n\tclassName,\n\tchildren,\n\tinset,\n\t...props\n}: MenuPrimitive.RadioItem.Props & {\n\tinset?: boolean;\n}) {\n\treturn (\n\t\t<MenuPrimitive.RadioItem\n\t\t\tdata-slot=\"dropdown-menu-radio-item\"\n\t\t\tdata-inset={inset}\n\t\t\tclassName={cn(\n\t\t\t\t\"relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<span\n\t\t\t\tclassName=\"pointer-events-none absolute right-2 flex items-center justify-center\"\n\t\t\t\tdata-slot=\"dropdown-menu-radio-item-indicator\"\n\t\t\t>\n\t\t\t\t<MenuPrimitive.RadioItemIndicator>\n\t\t\t\t\t<CheckIcon />\n\t\t\t\t</MenuPrimitive.RadioItemIndicator>\n\t\t\t</span>\n\t\t\t{children}\n\t\t</MenuPrimitive.RadioItem>\n\t);\n}\n\nfunction DropdownMenuSeparator({\n\tclassName,\n\t...props\n}: MenuPrimitive.Separator.Props) {\n\treturn (\n\t\t<MenuPrimitive.Separator\n\t\t\tdata-slot=\"dropdown-menu-separator\"\n\t\t\tclassName={cn(\"-mx-1 my-1 h-px bg-border\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction DropdownMenuShortcut({\n\tclassName,\n\t...props\n}: React.ComponentProps<\"span\">) {\n\treturn (\n\t\t<span\n\t\t\tdata-slot=\"dropdown-menu-shortcut\"\n\t\t\tclassName={cn(\n\t\t\t\t\"ml-auto text-xs tracking-widest text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport {\n\tDropdownMenu,\n\tDropdownMenuPortal,\n\tDropdownMenuTrigger,\n\tDropdownMenuContent,\n\tDropdownMenuGroup,\n\tDropdownMenuLabel,\n\tDropdownMenuItem,\n\tDropdownMenuCheckboxItem,\n\tDropdownMenuRadioGroup,\n\tDropdownMenuRadioItem,\n\tDropdownMenuSeparator,\n\tDropdownMenuShortcut,\n\tDropdownMenuSub,\n\tDropdownMenuSubTrigger,\n\tDropdownMenuSubContent,\n};\n","\"use client\";\n\nimport {\n\tDropdownMenu,\n\tDropdownMenuContent,\n\tDropdownMenuItem,\n\tDropdownMenuSeparator,\n\tDropdownMenuTrigger,\n} from \"../ui/dropdown-menu\";\nimport { Button } from \"../ui/button\";\nimport { MoreVertical } from \"lucide-react\";\nimport type { StudioDisplayTile } from \"../lib/types\";\nimport { isOnStage } from \"../lib/meeting\";\nimport type { StudioTileLabels } from \"./studio-tile\";\n\nexport function StudioTileMenu({\n\ttile,\n\tcanModerate,\n\tcanManageStage,\n\ttakeOffBlocked,\n\tlabels,\n\tonKick,\n\tonMute,\n\tonStopCamera,\n\tonStopScreen,\n\tonToggleStage,\n\tonTogglePin,\n\tonToggleChat,\n}: {\n\ttile: StudioDisplayTile;\n\tcanModerate: boolean;\n\tcanManageStage: boolean;\n\ttakeOffBlocked: boolean;\n\tlabels: StudioTileLabels;\n\tonKick: () => void;\n\tonMute: () => void;\n\tonStopCamera: () => void;\n\tonStopScreen: () => void;\n\tonToggleStage: () => void;\n\tonTogglePin: () => void;\n\tonToggleChat: () => void;\n}) {\n\tconst onStage = isOnStage(tile.stageStatus);\n\tconst showPersonItems = canModerate && tile.kind !== \"screen\";\n\tconst showScreenItems = canModerate && tile.kind === \"screen\";\n\tconst showStageItems = canManageStage && tile.kind !== \"screen\";\n\tif (!showPersonItems && !showScreenItems && !showStageItems) return null;\n\n\treturn (\n\t\t<DropdownMenu>\n\t\t\t<DropdownMenuTrigger\n\t\t\t\trender={\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tsize=\"icon-xs\"\n\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\tclassName=\"text-white hover:text-white\"\n\t\t\t\t\t\taria-label={labels.tileMenu}\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t<MoreVertical className=\"size-3.5\" />\n\t\t\t</DropdownMenuTrigger>\n\t\t\t<DropdownMenuContent align=\"end\" className=\"min-w-44\">\n\t\t\t\t{showScreenItems ? (\n\t\t\t\t\t<DropdownMenuItem onClick={onStopScreen}>\n\t\t\t\t\t\t{labels.stopScreen}\n\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t) : null}\n\t\t\t\t{showPersonItems && tile.audioEnabled ? (\n\t\t\t\t\t<DropdownMenuItem onClick={onMute}>{labels.mute}</DropdownMenuItem>\n\t\t\t\t) : null}\n\t\t\t\t{showPersonItems && tile.kind === \"camera\" && tile.videoEnabled ? (\n\t\t\t\t\t<DropdownMenuItem onClick={onStopCamera}>\n\t\t\t\t\t\t{labels.stopCamera}\n\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t) : null}\n\t\t\t\t{showPersonItems || showScreenItems ? (\n\t\t\t\t\t<DropdownMenuItem onClick={onTogglePin}>\n\t\t\t\t\t\t{tile.pinned ? labels.unpin : labels.pin}\n\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t) : null}\n\t\t\t\t{showPersonItems ? (\n\t\t\t\t\t<DropdownMenuItem onClick={onToggleChat}>\n\t\t\t\t\t\t{tile.chatCanSend === false ? labels.allowChat : labels.muteChat}\n\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t) : null}\n\t\t\t\t{showStageItems ? (\n\t\t\t\t\t<DropdownMenuItem\n\t\t\t\t\t\tdisabled={onStage && takeOffBlocked}\n\t\t\t\t\t\tonClick={onToggleStage}\n\t\t\t\t\t>\n\t\t\t\t\t\t{onStage\n\t\t\t\t\t\t\t? takeOffBlocked\n\t\t\t\t\t\t\t\t? labels.offAirLastVisible\n\t\t\t\t\t\t\t\t: labels.takeOffAir\n\t\t\t\t\t\t\t: labels.bringOnAir}\n\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t) : null}\n\t\t\t\t{showPersonItems ? (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<DropdownMenuSeparator />\n\t\t\t\t\t\t<DropdownMenuItem variant=\"destructive\" onClick={onKick}>\n\t\t\t\t\t\t\t{labels.kick}\n\t\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t\t</>\n\t\t\t\t) : null}\n\t\t\t</DropdownMenuContent>\n\t\t</DropdownMenu>\n\t);\n}\n","\"use client\";\n\nimport {\n\tMessageSquareOff,\n\tMicOff,\n\tMonitorUp,\n\tPin,\n\tVideoOff,\n} from \"lucide-react\";\nimport { useEffect, useRef, useState, type ReactNode } from \"react\";\nimport { ConfirmAction } from \"../ui/confirm-action\";\nimport {\n\tisOnStage,\n\ttype StudioMeetingHandle,\n\ttype StudioVideoKind,\n} from \"../lib/meeting\";\nimport type { StudioRoomLabels } from \"../lib/labels\";\nimport type { StudioDisplayTile } from \"../lib/types\";\nimport { cn } from \"../lib/cn\";\nimport { AudioWaveform } from \"./audio-waveform\";\nimport { StudioTileMenu } from \"./studio-tile-menu\";\n\nexport type StudioTileLabels = Pick<\n\tStudioRoomLabels,\n\t| \"kick\"\n\t| \"mute\"\n\t| \"stopCamera\"\n\t| \"stopScreen\"\n\t| \"takeOffAir\"\n\t| \"bringOnAir\"\n\t| \"offAir\"\n\t| \"offAirLastVisible\"\n\t| \"takeOffAirTitle\"\n\t| \"takeOffAirDescription\"\n\t| \"takeOffAirConfirm\"\n\t| \"muteChat\"\n\t| \"allowChat\"\n\t| \"pin\"\n\t| \"unpin\"\n\t| \"kickTitle\"\n\t| \"kickDescription\"\n\t| \"kickConfirm\"\n\t| \"tileMenu\"\n\t| \"cameraOff\"\n>;\n\nexport function StudioTile({\n\ttile,\n\tmeeting,\n\treducedMotion,\n\tcompact,\n\tfill = false,\n\tcanModerate,\n\tcanManageStage,\n\ttakeOffBlocked,\n\tconfirmTakeOff,\n\tlabels,\n\tonKick,\n\tonMute,\n\tonStopCamera,\n\tonStopScreen,\n\tonToggleStage,\n\tonTogglePin,\n\tonToggleChat,\n}: {\n\ttile: StudioDisplayTile;\n\tmeeting: StudioMeetingHandle;\n\treducedMotion: boolean;\n\tcompact: boolean;\n\tfill?: boolean;\n\tcanModerate: boolean;\n\tcanManageStage: boolean;\n\ttakeOffBlocked: boolean;\n\tconfirmTakeOff: boolean;\n\tlabels: StudioTileLabels;\n\tonKick: () => void;\n\tonMute: () => void;\n\tonStopCamera: () => void;\n\tonStopScreen: () => void;\n\tonToggleStage: () => void;\n\tonTogglePin: () => void;\n\tonToggleChat: () => void;\n}) {\n\tconst onStage = isOnStage(tile.stageStatus);\n\tconst [confirm, setConfirm] = useState<\"kick\" | \"takeOff\" | null>(null);\n\tconst showMenu = (canModerate || canManageStage) && !tile.isSelf;\n\n\treturn (\n\t\t<article\n\t\t\taria-label={tile.name}\n\t\t\tclassName={cn(\n\t\t\t\t\"bg-muted relative overflow-hidden rounded-xl\",\n\t\t\t\tcompact\n\t\t\t\t\t? \"aspect-video w-40 shrink-0 md:w-full\"\n\t\t\t\t\t: tile.kind === \"screen\"\n\t\t\t\t\t\t? \"min-h-0 flex-1 md:min-h-48\"\n\t\t\t\t\t\t: fill\n\t\t\t\t\t\t\t? \"size-full min-h-0 md:aspect-video md:h-auto\"\n\t\t\t\t\t\t\t: \"aspect-video\",\n\t\t\t)}\n\t\t>\n\t\t\t{tile.kind === \"idle\" ? (\n\t\t\t\t<div className=\"absolute inset-0 flex flex-col items-center justify-center gap-3\">\n\t\t\t\t\t{tile.picture ? (\n\t\t\t\t\t\t<img\n\t\t\t\t\t\t\tsrc={tile.picture}\n\t\t\t\t\t\t\talt=\"\"\n\t\t\t\t\t\t\tclassName=\"size-16 rounded-full object-cover\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<div className=\"bg-background flex size-16 items-center justify-center rounded-full text-xl\">\n\t\t\t\t\t\t\t{tile.name.slice(0, 1).toUpperCase()}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t\t<AudioWaveform\n\t\t\t\t\t\ttrack={tile.isSelf ? meeting.localAudioTrack() : null}\n\t\t\t\t\t\treducedMotion={reducedMotion}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t) : (\n\t\t\t\t<StudioTileVideo\n\t\t\t\t\tmeeting={meeting}\n\t\t\t\t\tparticipantId={tile.id}\n\t\t\t\t\tkind={tile.kind}\n\t\t\t\t\tmirror={tile.kind === \"camera\" && tile.isSelf}\n\t\t\t\t\tcontain={tile.kind === \"screen\"}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t<div className=\"absolute inset-x-0 bottom-0 z-10 flex items-end justify-between gap-2 bg-linear-to-t from-black/70 to-transparent p-2\">\n\t\t\t\t<p className=\"min-w-0 truncate text-xs font-medium text-white\">\n\t\t\t\t\t{tile.name}\n\t\t\t\t\t{!onStage ? (\n\t\t\t\t\t\t<span className=\"ml-1 rounded-full border border-white/40 px-1.5 py-0.5 text-[0.65rem]\">\n\t\t\t\t\t\t\t{labels.offAir}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t) : null}\n\t\t\t\t</p>\n\t\t\t\t<div className=\"flex items-center gap-1\">\n\t\t\t\t\t<TileStatusIcons tile={tile} labels={labels} />\n\t\t\t\t\t{showMenu ? (\n\t\t\t\t\t\t<StudioTileMenu\n\t\t\t\t\t\t\ttile={tile}\n\t\t\t\t\t\t\tcanModerate={canModerate}\n\t\t\t\t\t\t\tcanManageStage={canManageStage}\n\t\t\t\t\t\t\ttakeOffBlocked={takeOffBlocked}\n\t\t\t\t\t\t\tlabels={labels}\n\t\t\t\t\t\t\tonKick={() => setConfirm(\"kick\")}\n\t\t\t\t\t\t\tonMute={onMute}\n\t\t\t\t\t\t\tonStopCamera={onStopCamera}\n\t\t\t\t\t\t\tonStopScreen={onStopScreen}\n\t\t\t\t\t\t\tonToggleStage={() => {\n\t\t\t\t\t\t\t\tif (onStage && confirmTakeOff && !takeOffBlocked) {\n\t\t\t\t\t\t\t\t\tsetConfirm(\"takeOff\");\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tonToggleStage();\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tonTogglePin={onTogglePin}\n\t\t\t\t\t\t\tonToggleChat={onToggleChat}\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : null}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<ConfirmAction\n\t\t\t\topen={confirm === \"kick\"}\n\t\t\t\tonOpenChange={(open) => {\n\t\t\t\t\tif (!open) setConfirm(null);\n\t\t\t\t}}\n\t\t\t\ttriggerLabel={labels.kick}\n\t\t\t\ttitle={labels.kickTitle}\n\t\t\t\tdescription={labels.kickDescription}\n\t\t\t\tconfirmLabel={labels.kickConfirm}\n\t\t\t\tonConfirm={() => {\n\t\t\t\t\tsetConfirm(null);\n\t\t\t\t\tonKick();\n\t\t\t\t}}\n\t\t\t/>\n\t\t\t<ConfirmAction\n\t\t\t\topen={confirm === \"takeOff\"}\n\t\t\t\tonOpenChange={(open) => {\n\t\t\t\t\tif (!open) setConfirm(null);\n\t\t\t\t}}\n\t\t\t\ttriggerLabel={labels.takeOffAir}\n\t\t\t\ttitle={labels.takeOffAirTitle}\n\t\t\t\tdescription={labels.takeOffAirDescription}\n\t\t\t\tconfirmLabel={labels.takeOffAirConfirm}\n\t\t\t\tonConfirm={() => {\n\t\t\t\t\tsetConfirm(null);\n\t\t\t\t\tonToggleStage();\n\t\t\t\t}}\n\t\t\t/>\n\t\t</article>\n\t);\n}\n\nfunction TileStatusIcons({\n\ttile,\n\tlabels,\n}: {\n\ttile: StudioDisplayTile;\n\tlabels: StudioTileLabels;\n}) {\n\treturn (\n\t\t<>\n\t\t\t{tile.audioEnabled ? null : (\n\t\t\t\t<StatusIcon label={labels.mute}>\n\t\t\t\t\t<MicOff />\n\t\t\t\t</StatusIcon>\n\t\t\t)}\n\t\t\t{tile.kind !== \"screen\" && !tile.videoEnabled ? (\n\t\t\t\t<StatusIcon label={labels.cameraOff}>\n\t\t\t\t\t<VideoOff />\n\t\t\t\t</StatusIcon>\n\t\t\t) : null}\n\t\t\t{tile.kind !== \"screen\" && tile.screenShareEnabled ? (\n\t\t\t\t<StatusIcon label={labels.stopScreen}>\n\t\t\t\t\t<MonitorUp />\n\t\t\t\t</StatusIcon>\n\t\t\t) : null}\n\t\t\t{tile.pinned ? (\n\t\t\t\t<StatusIcon label={labels.pin}>\n\t\t\t\t\t<Pin />\n\t\t\t\t</StatusIcon>\n\t\t\t) : null}\n\t\t\t{tile.chatCanSend === false ? (\n\t\t\t\t<StatusIcon label={labels.muteChat}>\n\t\t\t\t\t<MessageSquareOff />\n\t\t\t\t</StatusIcon>\n\t\t\t) : null}\n\t\t</>\n\t);\n}\n\nfunction StatusIcon({\n\tlabel,\n\tchildren,\n}: {\n\tlabel: string;\n\tchildren: ReactNode;\n}) {\n\treturn (\n\t\t<span className=\"inline-flex text-white\">\n\t\t\t<span aria-hidden=\"true\" className=\"[&_svg]:size-3.5\">\n\t\t\t\t{children}\n\t\t\t</span>\n\t\t\t<span className=\"sr-only\">{label}</span>\n\t\t</span>\n\t);\n}\n\nfunction StudioTileVideo({\n\tmeeting,\n\tparticipantId,\n\tkind,\n\tmirror,\n\tcontain,\n}: {\n\tmeeting: StudioMeetingHandle;\n\tparticipantId: string;\n\tkind: StudioVideoKind;\n\tmirror: boolean;\n\tcontain: boolean;\n}) {\n\tconst ref = useRef<HTMLVideoElement | null>(null);\n\n\tuseEffect(() => {\n\t\tconst el = ref.current;\n\t\tel?.setAttribute(\"webkit-playsinline\", \"\");\n\t\tmeeting.attachVideo(participantId, el, kind);\n\t\treturn () => meeting.attachVideo(participantId, null, kind);\n\t}, [kind, meeting, participantId]);\n\n\treturn (\n\t\t<video\n\t\t\tref={ref}\n\t\t\tautoPlay\n\t\t\tplaysInline\n\t\t\tmuted\n\t\t\tdisablePictureInPicture\n\t\t\tcontrolsList=\"nodownload noplaybackrate noremoteplayback\"\n\t\t\tclassName={cn(\n\t\t\t\t\"livo-studio-tile-video absolute inset-0 size-full\",\n\t\t\t\t\"pointer-events-none\",\n\t\t\t\tcontain ? \"object-contain\" : \"object-cover\",\n\t\t\t\tmirror && \"-scale-x-100\",\n\t\t\t)}\n\t\t/>\n\t);\n}\n","\"use client\";\n\nimport { expandStudioTiles, studioStageLayout } from \"../lib/meeting\";\nimport type { StudioMeetingHandle } from \"../lib/meeting\";\nimport type { StudioParticipantTile } from \"../lib/types\";\nimport { cn } from \"../lib/cn\";\nimport { StudioTile, type StudioTileLabels } from \"./studio-tile\";\nimport { Button } from \"../ui/button\";\n\nexport function StudioStage({\n\tparticipants,\n\tmeeting,\n\treducedMotion,\n\tcanModerate,\n\tcanManageStage,\n\tonAir,\n\tlabels,\n\tonKick,\n\tonMute,\n\tonStopCamera,\n\tonStopScreen,\n\tonToggleStage,\n\tonTogglePin,\n\tonToggleChat,\n\tcanTakeOff,\n\tonOpenPeople,\n}: {\n\tparticipants: StudioParticipantTile[];\n\tmeeting: StudioMeetingHandle;\n\treducedMotion: boolean;\n\tcanModerate: boolean;\n\tcanManageStage: boolean;\n\tonAir: boolean;\n\tlabels: StudioTileLabels & { stageOverflow: string };\n\tonKick: (participantId: string) => void;\n\tonMute: (participantId: string) => void;\n\tonStopCamera: (participantId: string) => void;\n\tonStopScreen: (participantId: string) => void;\n\tonToggleStage: (tile: StudioParticipantTile) => void;\n\tonTogglePin: (tile: StudioParticipantTile) => void;\n\tonToggleChat: (tile: StudioParticipantTile) => void;\n\tcanTakeOff: (participantId: string) => boolean;\n\tonOpenPeople?: () => void;\n}) {\n\tconst displayTiles = expandStudioTiles(participants);\n\tconst stage = studioStageLayout(displayTiles, {\n\t\tactiveSpeakerId: meeting.activeSpeakerId(),\n\t});\n\tconst sharing = stage.spotlight.length > 0;\n\tconst overflowLabel = labels.stageOverflow.replace(\n\t\t\"{count}\",\n\t\tString(stage.overflow),\n\t);\n\n\tfunction renderTile(\n\t\ttile: (typeof displayTiles)[number],\n\t\tcompact: boolean,\n\t\tfill = false,\n\t) {\n\t\tconst takeOffBlocked = !canTakeOff(tile.id);\n\t\treturn (\n\t\t\t<StudioTile\n\t\t\t\tkey={tile.tileId}\n\t\t\t\ttile={tile}\n\t\t\t\tmeeting={meeting}\n\t\t\t\treducedMotion={reducedMotion}\n\t\t\t\tcompact={compact}\n\t\t\t\tfill={fill}\n\t\t\t\tcanModerate={canModerate && !tile.isSelf}\n\t\t\t\tcanManageStage={canManageStage && !tile.isSelf}\n\t\t\t\ttakeOffBlocked={takeOffBlocked}\n\t\t\t\tconfirmTakeOff={onAir}\n\t\t\t\tlabels={labels}\n\t\t\t\tonKick={() => onKick(tile.id)}\n\t\t\t\tonMute={() => onMute(tile.id)}\n\t\t\t\tonStopCamera={() => onStopCamera(tile.id)}\n\t\t\t\tonStopScreen={() => onStopScreen(tile.id)}\n\t\t\t\tonToggleStage={() => onToggleStage(tile)}\n\t\t\t\tonTogglePin={() => onTogglePin(tile)}\n\t\t\t\tonToggleChat={() => onToggleChat(tile)}\n\t\t\t/>\n\t\t);\n\t}\n\n\tfunction overflowChip(compact: boolean) {\n\t\tif (stage.overflow <= 0) return null;\n\t\treturn (\n\t\t\t<Button\n\t\t\t\ttype=\"button\"\n\t\t\t\tvariant=\"secondary\"\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"shrink-0\",\n\t\t\t\t\tcompact ? \"aspect-video w-40 md:w-full\" : \"aspect-video min-h-24\",\n\t\t\t\t)}\n\t\t\t\tonClick={onOpenPeople}\n\t\t\t>\n\t\t\t\t{overflowLabel}\n\t\t\t</Button>\n\t\t);\n\t}\n\n\tif (sharing) {\n\t\treturn (\n\t\t\t<div className=\"flex min-h-0 flex-1 flex-col overflow-hidden md:flex-row\">\n\t\t\t\t<div className=\"flex min-h-0 min-w-0 flex-1 flex-col gap-2 bg-black p-3\">\n\t\t\t\t\t{stage.spotlight.map((tile) => renderTile(tile, false))}\n\t\t\t\t</div>\n\t\t\t\t<div className=\"flex shrink-0 gap-2 overflow-x-auto p-2 md:w-64 md:flex-col md:overflow-auto\">\n\t\t\t\t\t{stage.strip.map((tile) => renderTile(tile, true))}\n\t\t\t\t\t{overflowChip(true)}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"mx-auto grid min-h-0 w-full flex-1 auto-rows-fr gap-2 overflow-hidden p-2 md:auto-rows-auto md:content-center md:gap-3 md:overflow-auto md:p-4\",\n\t\t\t\tstage.strip.length <= 1\n\t\t\t\t\t? \"max-w-3xl grid-cols-1\"\n\t\t\t\t\t: stage.strip.length <= 2\n\t\t\t\t\t\t? \"max-w-5xl grid-cols-1 sm:grid-cols-2\"\n\t\t\t\t\t\t: stage.strip.length <= 4\n\t\t\t\t\t\t\t? \"max-w-5xl grid-cols-2 sm:grid-cols-2\"\n\t\t\t\t\t\t\t: stage.strip.length <= 6\n\t\t\t\t\t\t\t\t? \"max-w-6xl grid-cols-2 sm:grid-cols-2 xl:grid-cols-3\"\n\t\t\t\t\t\t\t\t: \"grid-cols-2 sm:grid-cols-2 xl:grid-cols-3 2xl:grid-cols-4\",\n\t\t\t)}\n\t\t>\n\t\t\t{stage.strip.map((tile) => renderTile(tile, false, true))}\n\t\t\t{overflowChip(false)}\n\t\t</div>\n\t);\n}\n","\"use client\";\n\nimport {\n\tEye,\n\tEyeOff,\n\tMaximize,\n\tMessageSquare,\n\tMic,\n\tMicOff,\n\tMonitorUp,\n\tPhoneOff,\n\tPictureInPicture2,\n\tSettings,\n\tUsers,\n\tVideo,\n\tVideoOff,\n\tX,\n} from \"lucide-react\";\nimport { toast } from \"sonner\";\nimport { ConfirmAction } from \"../ui/confirm-action\";\nimport { Button } from \"../ui/button\";\nimport { TooltipProvider } from \"../ui/tooltip\";\nimport type { StudioRoomLabels } from \"../lib/labels\";\nimport type { StudioMeetingHandle } from \"../lib/meeting\";\nimport type { StudioSession } from \"../lib/types\";\nimport { StudioSettingsDialog } from \"./studio-settings-dialog\";\nimport { ControlIcon } from \"./studio-control-icon\";\n\ntype ShareGrant = \"idle\" | \"requested\" | \"granted\";\n\nexport function StudioToolbar({\n\tsession,\n\tmeeting,\n\tlabels,\n\tmuted,\n\tcameraOn,\n\tscreenOn,\n\tchatOpen,\n\tpeopleOpen,\n\tsettingsOpen,\n\tunreadChat,\n\tpeopleBadge,\n\tpending,\n\tshareGrant,\n\tshowScreenControl,\n\tshowMediaControls,\n\tscreenPending,\n\tcanShareFreely,\n\tscreenAvailable,\n\tpipSupported,\n\tpipOpen,\n\tselfStageStatus,\n\tcanManageStage,\n\tstageEnabled,\n\tcanLeaveStage,\n\treducedMotion,\n\tonToggleMute,\n\tonToggleCamera,\n\tonToggleScreen,\n\tonAskToShare,\n\tonCancelShareRequest,\n\tonAskStage,\n\tonLeaveStage,\n\tonToggleChat,\n\tonTogglePeople,\n\tonOpenSettings,\n\tonCloseSettings,\n\tonOpenPip,\n\tonClosePip,\n\tonLeave,\n}: {\n\tsession: StudioSession;\n\tmeeting: StudioMeetingHandle;\n\tlabels: StudioRoomLabels;\n\tmuted: boolean;\n\tcameraOn: boolean;\n\tscreenOn: boolean;\n\tchatOpen: boolean;\n\tpeopleOpen: boolean;\n\tsettingsOpen: boolean;\n\tunreadChat: number;\n\tpeopleBadge: number;\n\tpending: boolean;\n\tshareGrant: ShareGrant;\n\tshowScreenControl: boolean;\n\tshowMediaControls: boolean;\n\tscreenPending: boolean;\n\tcanShareFreely: boolean;\n\tscreenAvailable: boolean;\n\tpipSupported: boolean;\n\tpipOpen: boolean;\n\tselfStageStatus: string;\n\tcanManageStage: boolean;\n\tstageEnabled: boolean;\n\tcanLeaveStage: boolean;\n\treducedMotion: boolean;\n\tonToggleMute: () => void;\n\tonToggleCamera: () => void;\n\tonToggleScreen: () => void;\n\tonAskToShare: () => void;\n\tonCancelShareRequest: () => void;\n\tonAskStage: () => void;\n\tonLeaveStage: () => void;\n\tonToggleChat: () => void;\n\tonTogglePeople: () => void;\n\tonOpenSettings: () => void;\n\tonCloseSettings: (open: boolean) => void;\n\tonOpenPip: () => void;\n\tonClosePip: () => void;\n\tonLeave: () => void;\n}) {\n\tconst fullscreenSupported =\n\t\tdocument.fullscreenEnabled === true &&\n\t\ttypeof document.documentElement.requestFullscreen === \"function\";\n\n\tasync function enterFullscreen() {\n\t\ttry {\n\t\t\tawait document.documentElement.requestFullscreen();\n\t\t} catch {\n\t\t\t/* user gesture / policy */\n\t\t}\n\t}\n\n\treturn (\n\t\t<footer className=\"flex flex-wrap items-center justify-center gap-2 border-t px-3 py-3\">\n\t\t\t<TooltipProvider>\n\t\t\t\t{showMediaControls ? (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<ControlIcon\n\t\t\t\t\t\t\tlabel={muted ? labels.unmute : labels.mute}\n\t\t\t\t\t\t\tpressed={muted}\n\t\t\t\t\t\t\ttone={muted ? \"danger\" : \"default\"}\n\t\t\t\t\t\t\tonClick={onToggleMute}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{muted ? <MicOff /> : <Mic />}\n\t\t\t\t\t\t</ControlIcon>\n\t\t\t\t\t\t<ControlIcon\n\t\t\t\t\t\t\tlabel={labels.camera}\n\t\t\t\t\t\t\tpressed={cameraOn}\n\t\t\t\t\t\t\tonClick={onToggleCamera}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{cameraOn ? <Video /> : <VideoOff />}\n\t\t\t\t\t\t</ControlIcon>\n\t\t\t\t\t</>\n\t\t\t\t) : null}\n\t\t\t\t{session.role === \"moderator\" && canManageStage ? (\n\t\t\t\t\t<ControlIcon\n\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\tselfStageStatus === \"ON_STAGE\" ? labels.goOffAir : labels.goOnAir\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpressed={selfStageStatus !== \"ON_STAGE\"}\n\t\t\t\t\t\tdisabled={selfStageStatus === \"ON_STAGE\" && !canLeaveStage}\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tif (selfStageStatus === \"ON_STAGE\") {\n\t\t\t\t\t\t\t\tif (!canLeaveStage) {\n\t\t\t\t\t\t\t\t\ttoast.message(labels.offAirLastVisible);\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tonLeaveStage();\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tonAskStage();\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{selfStageStatus === \"ON_STAGE\" ? <EyeOff /> : <Eye />}\n\t\t\t\t\t</ControlIcon>\n\t\t\t\t) : null}\n\t\t\t\t{session.role === \"guest\" && stageEnabled ? (\n\t\t\t\t\t<ControlIcon\n\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\tselfStageStatus === \"ON_STAGE\"\n\t\t\t\t\t\t\t\t? labels.goOffAir\n\t\t\t\t\t\t\t\t: selfStageStatus === \"REQUESTED_TO_JOIN_STAGE\"\n\t\t\t\t\t\t\t\t\t? labels.stageRequested\n\t\t\t\t\t\t\t\t\t: labels.askToGoOnAir\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpressed={selfStageStatus === \"REQUESTED_TO_JOIN_STAGE\"}\n\t\t\t\t\t\tdisabled={\n\t\t\t\t\t\t\tselfStageStatus === \"REQUESTED_TO_JOIN_STAGE\" ||\n\t\t\t\t\t\t\t(selfStageStatus === \"ON_STAGE\" && !canLeaveStage)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tif (selfStageStatus === \"ON_STAGE\") {\n\t\t\t\t\t\t\t\tif (!canLeaveStage) {\n\t\t\t\t\t\t\t\t\ttoast.message(labels.offAirLastVisible);\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tonLeaveStage();\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tonAskStage();\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{selfStageStatus === \"ON_STAGE\" ? <EyeOff /> : <Eye />}\n\t\t\t\t\t</ControlIcon>\n\t\t\t\t) : null}\n\t\t\t\t{showScreenControl ? (\n\t\t\t\t\tcanShareFreely ? (\n\t\t\t\t\t\t<ControlIcon\n\t\t\t\t\t\t\tlabel={labels.screen}\n\t\t\t\t\t\t\tpressed={screenOn}\n\t\t\t\t\t\t\tdisabled={screenPending || (!screenAvailable && !screenOn)}\n\t\t\t\t\t\t\tpending={screenPending}\n\t\t\t\t\t\t\tonClick={onToggleScreen}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<MonitorUp />\n\t\t\t\t\t\t</ControlIcon>\n\t\t\t\t\t) : shareGrant === \"requested\" ? (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<ControlIcon\n\t\t\t\t\t\t\t\tlabel={labels.shareRequested}\n\t\t\t\t\t\t\t\tpressed\n\t\t\t\t\t\t\t\tdisabled\n\t\t\t\t\t\t\t\tonClick={() => undefined}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<MonitorUp />\n\t\t\t\t\t\t\t</ControlIcon>\n\t\t\t\t\t\t\t<ControlIcon\n\t\t\t\t\t\t\t\tlabel={labels.cancelShareRequest}\n\t\t\t\t\t\t\t\tonClick={onCancelShareRequest}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<X />\n\t\t\t\t\t\t\t</ControlIcon>\n\t\t\t\t\t\t</>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<ControlIcon label={labels.askToShare} onClick={onAskToShare}>\n\t\t\t\t\t\t\t<MonitorUp />\n\t\t\t\t\t\t</ControlIcon>\n\t\t\t\t\t)\n\t\t\t\t) : null}\n\t\t\t\t<ControlIcon\n\t\t\t\t\tlabel={\n\t\t\t\t\t\tunreadChat > 0 ? `${labels.chat} (${unreadChat})` : labels.chat\n\t\t\t\t\t}\n\t\t\t\t\tpressed={chatOpen}\n\t\t\t\t\tbadge={unreadChat}\n\t\t\t\t\tonClick={onToggleChat}\n\t\t\t\t>\n\t\t\t\t\t<MessageSquare />\n\t\t\t\t</ControlIcon>\n\t\t\t\t{session.role === \"moderator\" ? (\n\t\t\t\t\t<ControlIcon\n\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\tpeopleBadge > 0\n\t\t\t\t\t\t\t\t? `${labels.people} (${peopleBadge})`\n\t\t\t\t\t\t\t\t: labels.people\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpressed={peopleOpen}\n\t\t\t\t\t\tbadge={peopleBadge}\n\t\t\t\t\t\tonClick={onTogglePeople}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Users />\n\t\t\t\t\t</ControlIcon>\n\t\t\t\t) : null}\n\t\t\t\t{fullscreenSupported ? (\n\t\t\t\t\t<ControlIcon\n\t\t\t\t\t\tlabel={labels.fullscreen}\n\t\t\t\t\t\tonClick={() => void enterFullscreen()}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Maximize />\n\t\t\t\t\t</ControlIcon>\n\t\t\t\t) : null}\n\t\t\t\t{pipSupported ? (\n\t\t\t\t\t<ControlIcon\n\t\t\t\t\t\tlabel={pipOpen ? labels.closePip : labels.openPip}\n\t\t\t\t\t\tpressed={pipOpen}\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tif (pipOpen) onClosePip();\n\t\t\t\t\t\t\telse onOpenPip();\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<PictureInPicture2 />\n\t\t\t\t\t</ControlIcon>\n\t\t\t\t) : null}\n\t\t\t\t<ControlIcon\n\t\t\t\t\tlabel={labels.settings}\n\t\t\t\t\tpressed={settingsOpen}\n\t\t\t\t\tonClick={onOpenSettings}\n\t\t\t\t>\n\t\t\t\t\t<Settings />\n\t\t\t\t</ControlIcon>\n\t\t\t\t<StudioSettingsDialog\n\t\t\t\t\topen={settingsOpen}\n\t\t\t\t\tonOpenChange={onCloseSettings}\n\t\t\t\t\tmeeting={meeting}\n\t\t\t\t\treducedMotion={reducedMotion}\n\t\t\t\t\tcameraOn={cameraOn}\n\t\t\t\t\tlabels={{\n\t\t\t\t\t\tsettingsTitle: labels.settingsTitle,\n\t\t\t\t\t\tsettingsDescription: labels.settingsDescription,\n\t\t\t\t\t\tguestName: labels.guestName,\n\t\t\t\t\t\tdisplayNameSave: labels.displayNameSave,\n\t\t\t\t\t\tdisplayNameSaved: labels.displayNameSaved,\n\t\t\t\t\t\tdisplayNameError: labels.displayNameError,\n\t\t\t\t\t\tcameraDevice: labels.cameraDevice,\n\t\t\t\t\t\tmicDevice: labels.micDevice,\n\t\t\t\t\t\tspeakerDevice: labels.speakerDevice,\n\t\t\t\t\t\ttestSpeaker: labels.testSpeaker,\n\t\t\t\t\t\ttestSpeakerError: labels.testSpeakerError,\n\t\t\t\t\t\tcameraOff: labels.cameraOff,\n\t\t\t\t\t\tmicLevel: labels.micLevel,\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t{session.role === \"guest\" ? (\n\t\t\t\t\t<ConfirmAction\n\t\t\t\t\t\ttriggerLabel={labels.leave}\n\t\t\t\t\t\ttitle={labels.leaveTitle}\n\t\t\t\t\t\tdescription={labels.leaveDescription}\n\t\t\t\t\t\tconfirmLabel={labels.leaveConfirm}\n\t\t\t\t\t\tpending={pending}\n\t\t\t\t\t\tonConfirm={onLeave}\n\t\t\t\t\t\ttrigger={\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tvariant=\"destructive\"\n\t\t\t\t\t\t\t\tsize=\"icon-lg\"\n\t\t\t\t\t\t\t\tdisabled={pending}\n\t\t\t\t\t\t\t\taria-label={labels.leave}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<PhoneOff />\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t) : null}\n\t\t\t</TooltipProvider>\n\t\t</footer>\n\t);\n}\n","\"use client\";\n\nimport {\n\tuseCallback,\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n\ttype ReactNode,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { Loader2, Share2 } from \"lucide-react\";\nimport { toast } from \"sonner\";\nimport { ConfirmAction } from \"../ui/confirm-action\";\nimport { Button } from \"../ui/button\";\nimport { useBeforeUnload } from \"../hooks/use-before-unload\";\nimport { useDocumentPictureInPicture } from \"../hooks/use-document-picture-in-picture\";\nimport { useWakeLock } from \"../hooks/use-wake-lock\";\nimport { EmptyState } from \"../ui/empty-state\";\nimport {\n\tcanStartScreenShare,\n\tcanTakeOffAir,\n\tduplicateSelfParticipant,\n\tDUPLICATE_SELF_DEBOUNCE_MS,\n\tisOnStage,\n\tisStudioRejected,\n\tisStudioSessionOver,\n\tlosesDuplicateTiebreak,\n\tSHARE_REQUEST_TIMEOUT_MS,\n\tSTUDIO_MODERATOR_PRESET,\n\ttype StudioHostMediaKind,\n\ttype StudioMeetingHandle,\n\ttype StudioParticipantTile,\n} from \"../lib/meeting\";\nimport {\n\tdetectScreenCaptureSupport,\n\tscreenShareBlock,\n\ttype ScreenShareBlock,\n} from \"../lib/screen-share-support\";\nimport { isLiveStudioStatus, isStudioActiveStatus } from \"../lib/parse\";\nimport type { StudioRoomLabels } from \"../lib/labels\";\nimport { playStudioSound, unlockStudioSounds } from \"../lib/studio-sounds\";\nimport type { StudioSession, StudioStageStatus } from \"../lib/types\";\nimport type { StudioControlActions } from \"../lib/control-actions\";\nimport { postLivoEvent } from \"../lib/bridge\";\nimport { playerWatchUrl } from \"../lib/embed-urls\";\nimport { shareOrCopyLink } from \"../lib/share\";\nimport { canPublish } from \"../lib/status\";\nimport { formatStudioElapsed } from \"../lib/meeting\";\nimport { useStudioWindowGate } from \"./studio-window-gate\";\nimport {\n\tapplyStudioDeviceSelection,\n\treadStudioDeviceSelection,\n\ttype StudioDeviceSelection,\n} from \"../lib/devices\";\nimport { StudioGuestWaiting } from \"./studio-guest-waiting\";\nimport { StudioLiveBadge } from \"./studio-live-badge\";\nimport { StudioPipPanel } from \"./studio-pip-panel\";\nimport { StudioRemoteAudio } from \"./studio-remote-audio\";\nimport { StudioSidePanel, type StudioSideTab } from \"./studio-side-panel\";\nimport { StudioSkeleton } from \"./studio-skeleton\";\nimport { StudioStage } from \"./studio-stage\";\nimport { StudioToolbar } from \"./studio-toolbar\";\n\ntype ShareGrant = \"idle\" | \"requested\" | \"granted\";\n\nconst STAGE_GRANT_VERIFY_MS = 4_000;\n\nexport function StudioRoom({\n\tsession,\n\tmeeting,\n\tcontrol,\n\tonRefreshStatus,\n\tonRejoin,\n\tlabels,\n\treducedMotion,\n\tembed = false,\n\tchrome,\n\tplayerOrigin,\n\twindowGate,\n\tinitialCameraOn = true,\n\tinitialMuted = false,\n\tinitialDevices,\n}: {\n\tsession: StudioSession;\n\tmeeting: StudioMeetingHandle;\n\tcontrol: StudioControlActions;\n\tonRefreshStatus?: () => Promise<void>;\n\tonRejoin?: () => void;\n\treducedMotion: boolean;\n\tlabels: StudioRoomLabels;\n\tembed?: boolean;\n\tchrome?: ReactNode;\n\tplayerOrigin?: string;\n\twindowGate?: { reportDuplicate: () => void };\n\tinitialCameraOn?: boolean;\n\tinitialMuted?: boolean;\n\tinitialDevices?: StudioDeviceSelection;\n}) {\n\tconst [cameraOn, setCameraOn] = useState(initialCameraOn);\n\tconst [screenOn, setScreenOn] = useState(false);\n\tconst [muted, setMuted] = useState(initialMuted);\n\tconst [screenRequestPending, setScreenRequestPending] = useState(false);\n\tconst [pending, setPending] = useState(false);\n\tconst [publishing, setPublishing] = useState(false);\n\tconst [tick, setTick] = useState(0);\n\tconst [leaveState, setLeaveState] = useState<string | null>(null);\n\tconst [sideTab, setSideTab] = useState<StudioSideTab | null>(null);\n\tconst [settingsOpen, setSettingsOpen] = useState(false);\n\tconst [seenIncoming, setSeenIncoming] = useState(0);\n\tconst [egressPending, setEgressPending] = useState(\n\t\tsession.role === \"moderator\",\n\t);\n\tconst [egressStarted, setEgressStarted] = useState(\n\t\tsession.role === \"moderator\" && isStudioActiveStatus(session.stream.status),\n\t);\n\tconst [egressError, setEgressError] = useState<string | null>(null);\n\tconst [shareGrant, setShareGrant] = useState<ShareGrant>(\"idle\");\n\tconst [screenPermission, setScreenPermission] = useState(() =>\n\t\tmeeting.screenSharePermission(),\n\t);\n\tconst [captureSupported] = useState(() => detectScreenCaptureSupport());\n\tconst liveStartedAtRef = useRef<number | null>(null);\n\tconst seenWaitlisted = useRef(new Set<string>());\n\tconst knockPrimed = useRef(false);\n\tconst peopleAutoOpened = useRef(false);\n\tconst seenChatIds = useRef(new Set<string>());\n\tconst chatSoundPrimed = useRef(false);\n\tconst seenStageRequests = useRef(new Set<string>());\n\tconst stageRequestPrimed = useRef(false);\n\tconst awaitingStageDecision = useRef(false);\n\tconst prevStageStatus = useRef<StudioStageStatus | null>(null);\n\tconst grantCheckTimers = useRef<number[]>([]);\n\tconst screenNoticePrimed = useRef(false);\n\tconst lastSelfMedia = useRef({\n\t\tvideo: false,\n\t\taudio: true,\n\t\tscreen: false,\n\t});\n\tconst pip = useDocumentPictureInPicture();\n\tconst gateFromContext = useStudioWindowGate();\n\tconst { reportDuplicate } = windowGate ?? gateFromContext;\n\tconst onAir = isLiveStudioStatus(session.stream.status);\n\tconst active = isStudioActiveStatus(session.stream.status);\n\tif (onAir && liveStartedAtRef.current === null) {\n\t\tliveStartedAtRef.current = Date.now();\n\t}\n\tif (!onAir) {\n\t\tliveStartedAtRef.current = null;\n\t}\n\tconst livestreamState = meeting.livestreamState();\n\tconst starting = egressPending || livestreamState === \"STARTING\";\n\tconst sending = egressStarted || livestreamState === \"LIVESTREAMING\";\n\tconst encoderLost = session.stream.encoderLostAt != null;\n\tconst egressLost =\n\t\tsession.role === \"moderator\" &&\n\t\t(encoderLost || (Boolean(egressError) && !active && !starting && !sending));\n\tconst roomState = leaveState ?? meeting.roomState();\n\tconst sessionOver = isStudioSessionOver(session.stream.status, roomState);\n\tconst rejected = isStudioRejected(roomState);\n\tuseBeforeUnload(active && !sessionOver);\n\tuseWakeLock(active && !sessionOver);\n\n\tuseEffect(() => {\n\t\tunlockStudioSounds();\n\t}, []);\n\n\tuseEffect(() => {\n\t\tif (onAir) {\n\t\t\tsetPublishing(false);\n\t\t\tpostLivoEvent(\"live\", { streamId: session.stream.id });\n\t\t}\n\t}, [onAir, session.stream.id]);\n\n\tuseEffect(() => {\n\t\tconst saved = initialDevices ?? readStudioDeviceSelection();\n\t\tlet cancelled = false;\n\t\tvoid (async () => {\n\t\t\ttry {\n\t\t\t\tconst listed = await meeting.listDevices();\n\t\t\t\tif (cancelled) return;\n\t\t\t\tawait applyStudioDeviceSelection(meeting.setDevice, saved, listed);\n\t\t\t} catch {\n\t\t\t\t/* listDevices may fail before permission */\n\t\t\t}\n\t\t})();\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t};\n\t}, [initialDevices, meeting]);\n\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tfor (const id of grantCheckTimers.current) window.clearTimeout(id);\n\t\t};\n\t}, []);\n\n\tuseEffect(() => {\n\t\tif (!sessionOver) return;\n\t\tpostLivoEvent(\"ended\", { streamId: session.stream.id });\n\t\tif (leaveState === \"left\") {\n\t\t\tpostLivoEvent(\"left\", { streamId: session.stream.id });\n\t\t}\n\t}, [leaveState, session.stream.id, sessionOver]);\n\n\tuseEffect(() => {\n\t\tconst id = window.setInterval(() => {\n\t\t\tsetTick((n) => n + 1);\n\t\t\tif (session.role === \"guest\") {\n\t\t\t\tvoid meeting.ensureStageJoined();\n\t\t\t}\n\t\t}, 1000);\n\t\treturn () => window.clearInterval(id);\n\t}, [meeting, session.role]);\n\n\tuseEffect(\n\t\t() => meeting.subscribeMedia(() => setTick((n) => n + 1)),\n\t\t[meeting],\n\t);\n\n\tuseEffect(\n\t\t() => meeting.subscribeRoomLeft((state) => setLeaveState(state)),\n\t\t[meeting],\n\t);\n\n\tuseEffect(\n\t\t() => meeting.subscribeChat(() => setTick((n) => n + 1)),\n\t\t[meeting],\n\t);\n\n\tuseEffect(\n\t\t() =>\n\t\t\tmeeting.subscribePermissions(() => {\n\t\t\t\tsetScreenPermission(meeting.screenSharePermission());\n\t\t\t\tsetTick((n) => n + 1);\n\t\t\t}),\n\t\t[meeting],\n\t);\n\n\tuseEffect(\n\t\t() =>\n\t\t\tmeeting.subscribeActiveSpeaker(() => {\n\t\t\t\tsetTick((n) => n + 1);\n\t\t\t}),\n\t\t[meeting],\n\t);\n\n\tuseEffect(\n\t\t() => meeting.subscribeParticipants(() => setTick((n) => n + 1)),\n\t\t[meeting],\n\t);\n\n\tuseEffect(\n\t\t() => meeting.subscribeStage(() => setTick((n) => n + 1)),\n\t\t[meeting],\n\t);\n\n\tuseEffect(\n\t\t() =>\n\t\t\tmeeting.subscribePinned(() => {\n\t\t\t\tconst self = meeting.participants().find((row) => row.isSelf);\n\t\t\t\tif (self?.pinned) toast.message(labels.pinnedToast);\n\t\t\t\tsetTick((n) => n + 1);\n\t\t\t}),\n\t\t[labels.pinnedToast, meeting],\n\t);\n\n\tuseEffect(() => {\n\t\tif (shareGrant !== \"requested\") return;\n\t\tconst id = window.setTimeout(() => {\n\t\t\tsetShareGrant(\"idle\");\n\t\t\ttoast.message(labels.shareRequestTimeout);\n\t\t}, SHARE_REQUEST_TIMEOUT_MS);\n\t\treturn () => window.clearTimeout(id);\n\t}, [labels.shareRequestTimeout, shareGrant]);\n\n\tconst guestOffStage = (() => {\n\t\tif (session.role !== \"guest\") return false;\n\t\tconst current = meeting.participants().find((row) => row.isSelf);\n\t\treturn current != null && !isOnStage(current.stageStatus);\n\t})();\n\n\tuseEffect(() => {\n\t\tif (sessionOver || rejected || guestOffStage) return;\n\t\tlet cancelled = false;\n\t\tvoid Promise.resolve(meeting.setVideoEnabled(cameraOn)).then(\n\t\t\t() => undefined,\n\t\t\t() => {\n\t\t\t\tif (cancelled) return;\n\t\t\t\tif (cameraOn) {\n\t\t\t\t\tsetCameraOn(false);\n\t\t\t\t\ttoast.error(labels.cameraError);\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t};\n\t}, [\n\t\tmeeting,\n\t\tcameraOn,\n\t\tsessionOver,\n\t\trejected,\n\t\tguestOffStage,\n\t\tlabels.cameraError,\n\t]);\n\n\tuseEffect(() => {\n\t\tif (sessionOver || rejected || guestOffStage) {\n\t\t\tsetScreenRequestPending(false);\n\t\t\treturn;\n\t\t}\n\t\tif (!screenOn) {\n\t\t\tvoid meeting.setScreenShareEnabled(false);\n\t\t\tsetScreenRequestPending(false);\n\t\t\treturn;\n\t\t}\n\t\tlet cancelled = false;\n\t\tsetScreenRequestPending(true);\n\t\tvoid Promise.resolve(meeting.setScreenShareEnabled(true)).then(\n\t\t\t() => {\n\t\t\t\tif (!cancelled) setScreenRequestPending(false);\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tif (cancelled) return;\n\t\t\t\tsetScreenRequestPending(false);\n\t\t\t\tsetScreenOn(false);\n\t\t\t},\n\t\t);\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t};\n\t}, [meeting, screenOn, sessionOver, rejected, guestOffStage]);\n\n\tuseEffect(() => {\n\t\tif (sessionOver || rejected || guestOffStage) return;\n\t\tvoid Promise.resolve(meeting.setAudioEnabled(!muted)).catch(() => {\n\t\t\t/* device permission errors surface as muted tiles */\n\t\t});\n\t}, [meeting, muted, sessionOver, rejected, guestOffStage]);\n\n\tuseEffect(() => {\n\t\tif (!guestOffStage) return;\n\t\tvoid meeting.setAudioEnabled(false);\n\t\tvoid meeting.setVideoEnabled(false);\n\t\tvoid meeting.setScreenShareEnabled(false);\n\t}, [guestOffStage, meeting]);\n\n\tuseEffect(() => {\n\t\tif (!sessionOver && !rejected) return;\n\t\tsetShareGrant(\"idle\");\n\t\tvoid meeting.setAudioEnabled(false);\n\t\tvoid meeting.setVideoEnabled(false);\n\t\tvoid meeting.setScreenShareEnabled(false);\n\t}, [meeting, rejected, sessionOver]);\n\n\tuseEffect(() => {\n\t\treturn meeting.subscribeMedia(() => {\n\t\t\tconst self = meeting.participants().find((row) => row.isSelf);\n\t\t\tif (!self) return;\n\t\t\tif (lastSelfMedia.current.video && !self.videoEnabled) {\n\t\t\t\tsetCameraOn(false);\n\t\t\t}\n\t\t\tif (lastSelfMedia.current.audio && !self.audioEnabled) {\n\t\t\t\tsetMuted(true);\n\t\t\t}\n\t\t\tif (lastSelfMedia.current.screen && !self.screenShareEnabled) {\n\t\t\t\tsetScreenOn(false);\n\t\t\t}\n\t\t\tlastSelfMedia.current = {\n\t\t\t\tvideo: self.videoEnabled,\n\t\t\t\taudio: self.audioEnabled,\n\t\t\t\tscreen: self.screenShareEnabled,\n\t\t\t};\n\t\t});\n\t}, [meeting]);\n\n\tconst sawParticipants = useRef(false);\n\tconst participants = useMemo(() => meeting.participants(), [meeting, tick]);\n\tuseEffect(() => {\n\t\tconst other = duplicateSelfParticipant(participants);\n\t\tif (!other) return;\n\t\tconst self = participants.find((tile) => tile.isSelf);\n\t\tif (!self || !losesDuplicateTiebreak(self.id, other.id)) return;\n\t\tconst id = window.setTimeout(() => {\n\t\t\treportDuplicate();\n\t\t}, DUPLICATE_SELF_DEBOUNCE_MS);\n\t\treturn () => window.clearTimeout(id);\n\t}, [participants, reportDuplicate]);\n\tconst stageParticipants = useMemo(\n\t\t() => participants.filter((row) => isOnStage(row.stageStatus)),\n\t\t[participants],\n\t);\n\tconst waitlisted = useMemo(() => meeting.waitlisted(), [meeting, tick]);\n\tconst canManageStage = meeting.canManageStage();\n\tconst stageEnabled = meeting.stageEnabled();\n\tconst stageRequests = useMemo(\n\t\t() => (canManageStage ? meeting.stageRequests() : []),\n\t\t[canManageStage, meeting, tick],\n\t);\n\tconst chatMessages = useMemo(() => meeting.chatMessages(), [meeting, tick]);\n\tconst inWaitingRoom = meeting.inWaitingRoom();\n\tconst screenAvailable = canStartScreenShare(participants);\n\tconst durableScreenBlock: ScreenShareBlock = screenShareBlock(\n\t\tcaptureSupported,\n\t\tscreenPermission,\n\t);\n\tconst showScreenControl = durableScreenBlock === null;\n\tconst canGoLive =\n\t\tsession.role === \"moderator\" && canPublish(session.stream.status);\n\tconst showPublishButton =\n\t\tsession.role === \"moderator\" &&\n\t\t!onAir &&\n\t\tsession.stream.status !== \"ended\" &&\n\t\tsession.stream.status !== \"error\";\n\tconst self = participants.find((row) => row.isSelf);\n\tconst canShareFreely =\n\t\tsession.role === \"moderator\" ||\n\t\tself?.stageStatus === \"ON_STAGE\" ||\n\t\tshareGrant === \"granted\";\n\tconst selfId = self?.id ?? null;\n\tconst selfUserId = self?.userId || null;\n\tconst remoteParticipants = participants.filter((row) => !row.isSelf);\n\tconst incoming = chatMessages.filter((row) => row.userId !== selfUserId);\n\tconst unread =\n\t\tsideTab === \"chat\" ? 0 : Math.max(0, incoming.length - seenIncoming);\n\tconst peopleBadge = waitlisted.length + stageRequests.length;\n\tconst selfStageStatus = self?.stageStatus ?? meeting.stageStatus();\n\n\tuseEffect(() => {\n\t\tif (sideTab === \"chat\") setSeenIncoming(incoming.length);\n\t}, [incoming.length, sideTab]);\n\n\tuseEffect(() => {\n\t\tif (!chatSoundPrimed.current) {\n\t\t\tfor (const row of incoming) seenChatIds.current.add(row.id);\n\t\t\tchatSoundPrimed.current = true;\n\t\t\treturn;\n\t\t}\n\t\tfor (const row of incoming) {\n\t\t\tif (seenChatIds.current.has(row.id)) continue;\n\t\t\tseenChatIds.current.add(row.id);\n\t\t\tplayStudioSound(\"chat\");\n\t\t}\n\t}, [incoming]);\n\n\tuseEffect(() => {\n\t\tif (session.role !== \"moderator\") return;\n\t\tif (!stageRequestPrimed.current) {\n\t\t\tfor (const row of stageRequests) {\n\t\t\t\tseenStageRequests.current.add(row.userId);\n\t\t\t}\n\t\t\tstageRequestPrimed.current = true;\n\t\t\treturn;\n\t\t}\n\t\tfor (const row of stageRequests) {\n\t\t\tif (seenStageRequests.current.has(row.userId)) continue;\n\t\t\tseenStageRequests.current.add(row.userId);\n\t\t\tplayStudioSound(\"request\");\n\t\t}\n\t}, [session.role, stageRequests]);\n\n\tuseEffect(() => {\n\t\tconst next = selfStageStatus;\n\t\tconst prev = prevStageStatus.current;\n\t\tprevStageStatus.current = next;\n\t\tif (session.role !== \"guest\") return;\n\t\tif (next === \"REQUESTED_TO_JOIN_STAGE\") {\n\t\t\tawaitingStageDecision.current = true;\n\t\t\treturn;\n\t\t}\n\t\tif (!awaitingStageDecision.current) return;\n\t\tif (next === \"ACCEPTED_TO_JOIN_STAGE\" || next === \"ON_STAGE\") {\n\t\t\tawaitingStageDecision.current = false;\n\t\t\ttoast.success(labels.stageApproved);\n\t\t\treturn;\n\t\t}\n\t\tif (next === \"OFF_STAGE\" && prev === \"REQUESTED_TO_JOIN_STAGE\") {\n\t\t\tawaitingStageDecision.current = false;\n\t\t\ttoast.message(labels.stageDenied);\n\t\t}\n\t}, [labels.stageApproved, labels.stageDenied, selfStageStatus, session.role]);\n\n\tuseEffect(() => {\n\t\tif (\n\t\t\tsession.role === \"moderator\" &&\n\t\t\twaitlisted.length > 0 &&\n\t\t\t!peopleAutoOpened.current\n\t\t) {\n\t\t\tpeopleAutoOpened.current = true;\n\t\t\tsetSideTab(\"people\");\n\t\t}\n\t}, [session.role, waitlisted.length]);\n\n\tuseEffect(() => {\n\t\tif (!knockPrimed.current) {\n\t\t\tfor (const guest of waitlisted) seenWaitlisted.current.add(guest.id);\n\t\t\tknockPrimed.current = true;\n\t\t\treturn;\n\t\t}\n\t\tfor (const guest of waitlisted) {\n\t\t\tif (seenWaitlisted.current.has(guest.id)) continue;\n\t\t\tseenWaitlisted.current.add(guest.id);\n\t\t\ttoast.message(labels.knock.replace(\"{name}\", guest.name));\n\t\t\tif (session.role === \"moderator\") {\n\t\t\t\tplayStudioSound(\"request\");\n\t\t\t\tsetSideTab(\"people\");\n\t\t\t}\n\t\t}\n\t}, [labels.knock, session.role, waitlisted]);\n\n\tuseEffect(() => {\n\t\tif (inWaitingRoom || screenNoticePrimed.current) return;\n\t\tif (!durableScreenBlock) return;\n\t\tscreenNoticePrimed.current = true;\n\t\ttoast.message(\n\t\t\tdurableScreenBlock === \"device\"\n\t\t\t\t? labels.screenUnsupportedDevice\n\t\t\t\t: labels.screenNotAllowed,\n\t\t);\n\t}, [\n\t\tdurableScreenBlock,\n\t\tinWaitingRoom,\n\t\tlabels.screenNotAllowed,\n\t\tlabels.screenUnsupportedDevice,\n\t]);\n\n\tuseEffect(() => {\n\t\treturn meeting.subscribeBroadcast((message) => {\n\t\t\tif (message.type === \"host-media\") {\n\t\t\t\tif (session.role === \"moderator\") return;\n\t\t\t\tif (message.kind === \"audio\") {\n\t\t\t\t\tsetMuted(true);\n\t\t\t\t\ttoast.message(labels.hostMutedYou);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (message.kind === \"video\") {\n\t\t\t\t\tsetCameraOn(false);\n\t\t\t\t\ttoast.message(labels.hostStoppedYourCamera);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tsetScreenOn(false);\n\t\t\t\tsetShareGrant(\"idle\");\n\t\t\t\ttoast.message(labels.hostStoppedYourScreen);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (message.type === \"share-request\") {\n\t\t\t\tif (session.role !== \"moderator\") return;\n\t\t\t\tplayStudioSound(\"request\");\n\t\t\t\ttoast.message(labels.shareRequestFrom.replace(\"{name}\", message.name), {\n\t\t\t\t\tid: `share-request:${message.participantId}`,\n\t\t\t\t\taction: {\n\t\t\t\t\t\tlabel: labels.approve,\n\t\t\t\t\t\tonClick: () => {\n\t\t\t\t\t\t\tvoid Promise.resolve(\n\t\t\t\t\t\t\t\tmeeting.sendBroadcast(\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttype: \"share-response\",\n\t\t\t\t\t\t\t\t\t\tparticipantId: message.participantId,\n\t\t\t\t\t\t\t\t\t\tgranted: true,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{ participantIds: [message.participantId] },\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t).catch(() => {\n\t\t\t\t\t\t\t\ttoast.error(labels.shareRespondError);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tcancel: {\n\t\t\t\t\t\tlabel: labels.deny,\n\t\t\t\t\t\tonClick: () => {\n\t\t\t\t\t\t\tvoid Promise.resolve(\n\t\t\t\t\t\t\t\tmeeting.sendBroadcast(\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttype: \"share-response\",\n\t\t\t\t\t\t\t\t\t\tparticipantId: message.participantId,\n\t\t\t\t\t\t\t\t\t\tgranted: false,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{ participantIds: [message.participantId] },\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t).catch(() => {\n\t\t\t\t\t\t\t\ttoast.error(labels.shareRespondError);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (message.type !== \"share-response\") return;\n\t\t\tconst local = meeting.participants().find((row) => row.isSelf);\n\t\t\tif (!local || message.participantId !== local.id) return;\n\t\t\tif (message.granted) {\n\t\t\t\tsetShareGrant(\"granted\");\n\t\t\t\ttoast.message(labels.shareApproved);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetShareGrant(\"idle\");\n\t\t\ttoast.message(labels.shareDenied);\n\t\t});\n\t}, [\n\t\tlabels.approve,\n\t\tlabels.deny,\n\t\tlabels.hostMutedYou,\n\t\tlabels.hostStoppedYourCamera,\n\t\tlabels.hostStoppedYourScreen,\n\t\tlabels.shareApproved,\n\t\tlabels.shareDenied,\n\t\tlabels.shareRequestFrom,\n\t\tlabels.shareRespondError,\n\t\tmeeting,\n\t\tsession.role,\n\t]);\n\n\tconst startEgress = useCallback(async () => {\n\t\tif (session.role !== \"moderator\" || sessionOver) return;\n\t\tsetEgressPending(true);\n\t\tsetEgressError(null);\n\t\ttry {\n\t\t\tconst egress = await control.livestream();\n\t\t\tsetEgressStarted(true);\n\t\t\tif (egress === \"live\") setEgressError(null);\n\t\t} catch (error) {\n\t\t\tconst message =\n\t\t\t\terror instanceof Error ? error.message : labels.livestreamError;\n\t\t\tsetEgressError(message);\n\t\t\ttoast.error(message);\n\t\t} finally {\n\t\t\tsetEgressPending(false);\n\t\t}\n\t}, [control, labels.livestreamError, session.role, sessionOver]);\n\n\tuseEffect(() => {\n\t\tvoid startEgress();\n\t}, [startEgress]);\n\n\tconst onToggleCamera = useCallback(() => {\n\t\tsetCameraOn((current) => !current);\n\t}, []);\n\n\tconst onToggleScreen = useCallback(() => {\n\t\tif (!canShareFreely || screenRequestPending) return;\n\t\tif (!screenOn && !canStartScreenShare(meeting.participants())) {\n\t\t\ttoast.message(labels.screenBusy);\n\t\t\treturn;\n\t\t}\n\t\tif (!screenOn) setScreenRequestPending(true);\n\t\tsetScreenOn((current) => !current);\n\t}, [\n\t\tcanShareFreely,\n\t\tlabels.screenBusy,\n\t\tmeeting,\n\t\tscreenOn,\n\t\tscreenRequestPending,\n\t]);\n\n\tconst onAskToShare = useCallback(async () => {\n\t\tconst local = meeting.participants().find((row) => row.isSelf);\n\t\tif (!local) return;\n\t\ttry {\n\t\t\tawait meeting.sendBroadcast(\n\t\t\t\t{\n\t\t\t\t\ttype: \"share-request\",\n\t\t\t\t\tparticipantId: local.id,\n\t\t\t\t\tname: local.name,\n\t\t\t\t},\n\t\t\t\t{ presetNames: [STUDIO_MODERATOR_PRESET] },\n\t\t\t);\n\t\t\tsetShareGrant(\"requested\");\n\t\t\ttoast.message(labels.shareRequestSent);\n\t\t} catch {\n\t\t\ttoast.error(labels.shareRequestError);\n\t\t}\n\t}, [labels.shareRequestError, labels.shareRequestSent, meeting]);\n\n\tconst verifyGrantTookEffect = useCallback(\n\t\t(userId: string, retried = false) => {\n\t\t\tconst id = window.setTimeout(() => {\n\t\t\t\tconst target = meeting\n\t\t\t\t\t.participants()\n\t\t\t\t\t.find((row) => row.userId === userId);\n\t\t\t\tif (!target || isOnStage(target.stageStatus)) return;\n\t\t\t\tif (!retried && target.stageStatus === \"ACCEPTED_TO_JOIN_STAGE\") {\n\t\t\t\t\tvoid meeting\n\t\t\t\t\t\t.setStageAccess(userId, true)\n\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\tverifyGrantTookEffect(userId, true);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch(() => {\n\t\t\t\t\t\t\ttoast.error(labels.stageGrantNoEffect);\n\t\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\ttoast.error(labels.stageGrantNoEffect);\n\t\t\t}, STAGE_GRANT_VERIFY_MS);\n\t\t\tgrantCheckTimers.current.push(id);\n\t\t},\n\t\t[labels.stageGrantNoEffect, meeting],\n\t);\n\n\tconst onSetStage = useCallback(\n\t\tasync (tile: StudioParticipantTile, on: boolean) => {\n\t\t\tconst userId = tile.userId;\n\t\t\tif (!userId) return;\n\t\t\tif (!on && !canTakeOffAir(participants, tile.id, onAir)) {\n\t\t\t\ttoast.message(labels.offAirLastVisible);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tif (!on) {\n\t\t\t\t\tawait meeting.disableParticipantMedia(tile.id, \"screen\");\n\t\t\t\t}\n\t\t\t\tawait meeting.setStageAccess(userId, on);\n\t\t\t\ttoast.success(on ? labels.offAirShown : labels.offAirHidden);\n\t\t\t\tif (on) verifyGrantTookEffect(userId);\n\t\t\t} catch {\n\t\t\t\ttoast.error(labels.stageError);\n\t\t\t}\n\t\t},\n\t\t[\n\t\t\tlabels.offAirHidden,\n\t\t\tlabels.offAirLastVisible,\n\t\t\tlabels.offAirShown,\n\t\t\tlabels.stageError,\n\t\t\tmeeting,\n\t\t\tonAir,\n\t\t\tparticipants,\n\t\t\tverifyGrantTookEffect,\n\t\t],\n\t);\n\n\tconst onHostMedia = useCallback(\n\t\tasync (participantId: string, kind: StudioHostMediaKind) => {\n\t\t\ttry {\n\t\t\t\tawait meeting.disableParticipantMedia(participantId, kind);\n\t\t\t} catch {\n\t\t\t\ttoast.error(labels.hostMediaError);\n\t\t\t}\n\t\t},\n\t\t[labels.hostMediaError, meeting],\n\t);\n\n\tconst onKick = useCallback(\n\t\tasync (participantId: string) => {\n\t\t\ttry {\n\t\t\t\tawait meeting.kick(participantId);\n\t\t\t} catch {\n\t\t\t\ttoast.error(labels.kickError);\n\t\t\t}\n\t\t},\n\t\t[labels.kickError, meeting],\n\t);\n\n\tconst onTogglePin = useCallback(\n\t\tasync (tile: StudioParticipantTile) => {\n\t\t\ttry {\n\t\t\t\tawait meeting.setParticipantPinned(tile.id, tile.pinned !== true);\n\t\t\t} catch {\n\t\t\t\ttoast.error(labels.pinError);\n\t\t\t}\n\t\t},\n\t\t[labels.pinError, meeting],\n\t);\n\n\tconst onToggleChat = useCallback(\n\t\tasync (tile: StudioParticipantTile) => {\n\t\t\ttry {\n\t\t\t\tawait meeting.setParticipantChat(tile.id, tile.chatCanSend === false);\n\t\t\t} catch {\n\t\t\t\ttoast.error(labels.hostMediaError);\n\t\t\t}\n\t\t},\n\t\t[labels.hostMediaError, meeting],\n\t);\n\n\tconst onOpenPip = useCallback(() => {\n\t\tvoid pip.open().catch(() => {\n\t\t\ttoast.error(labels.pipError);\n\t\t});\n\t}, [labels.pipError, pip]);\n\n\tasync function onToggleMute() {\n\t\tconst next = !muted;\n\t\tsetMuted(next);\n\t\tawait meeting.setAudioEnabled(!next);\n\t}\n\n\tasync function onPublish() {\n\t\tsetPublishing(true);\n\t\ttry {\n\t\t\tawait control.publish();\n\t\t\ttoast.success(labels.published);\n\t\t\tawait onRefreshStatus?.();\n\t\t} catch (error) {\n\t\t\tsetPublishing(false);\n\t\t\ttoast.error(error instanceof Error ? error.message : labels.publishError);\n\t\t}\n\t}\n\n\tasync function onStop() {\n\t\tsetPending(true);\n\t\ttry {\n\t\t\tawait control.stop();\n\t\t\ttoast.success(labels.stopped);\n\t\t\tawait Promise.all(\n\t\t\t\tmeeting\n\t\t\t\t\t.participants()\n\t\t\t\t\t.filter((row) => !row.isSelf)\n\t\t\t\t\t.map((row) =>\n\t\t\t\t\t\tPromise.resolve(meeting.kick(row.id)).catch(() => undefined),\n\t\t\t\t\t),\n\t\t\t);\n\t\t\tawait meeting.leave();\n\t\t\tawait onRefreshStatus?.();\n\t\t} catch (error) {\n\t\t\ttoast.error(error instanceof Error ? error.message : labels.stopError);\n\t\t} finally {\n\t\t\tsetPending(false);\n\t\t}\n\t}\n\n\tasync function onLeave() {\n\t\tsetPending(true);\n\t\ttry {\n\t\t\tawait meeting.leave();\n\t\t\tsetLeaveState(\"left\");\n\t\t} finally {\n\t\t\tsetPending(false);\n\t\t}\n\t}\n\n\tconst statusChip = onAir\n\t\t? labels.live\n\t\t: encoderLost\n\t\t\t? labels.egressLost\n\t\t\t: session.stream.status === \"preview\"\n\t\t\t\t? labels.preview\n\t\t\t\t: starting || sending\n\t\t\t\t\t? labels.livestreamInitializing\n\t\t\t\t\t: egressLost\n\t\t\t\t\t\t? labels.egressLost\n\t\t\t\t\t\t: session.stream.status;\n\n\tif (rejected) {\n\t\treturn (\n\t\t\t<div className=\"flex h-dvh flex-col items-center justify-center p-6\">\n\t\t\t\t<EmptyState\n\t\t\t\t\ttitle={labels.rejectedTitle}\n\t\t\t\t\tdescription={labels.rejectedDescription}\n\t\t\t\t\tactionLabel={onRejoin ? labels.rejectedAction : undefined}\n\t\t\t\t\tonAction={onRejoin}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif (sessionOver) {\n\t\tconst canRejoin =\n\t\t\tsession.role === \"moderator\" &&\n\t\t\tonRejoin != null &&\n\t\t\tisStudioActiveStatus(session.stream.status);\n\t\treturn (\n\t\t\t<div className=\"flex h-dvh flex-col items-center justify-center p-6\">\n\t\t\t\t<EmptyState\n\t\t\t\t\ttitle={labels.endedTitle}\n\t\t\t\t\tdescription={labels.endedDescription}\n\t\t\t\t\tactionLabel={\n\t\t\t\t\t\tcanRejoin\n\t\t\t\t\t\t\t? labels.rejoin\n\t\t\t\t\t\t\t: session.role === \"moderator\"\n\t\t\t\t\t\t\t\t? labels.endedAction\n\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t}\n\t\t\t\t\tonAction={canRejoin ? onRejoin : undefined}\n\t\t\t\t\tactionHref={\n\t\t\t\t\t\tcanRejoin || session.role !== \"moderator\"\n\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t: `/streams/${session.stream.id}`\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif (inWaitingRoom && session.role === \"guest\") {\n\t\treturn (\n\t\t\t<StudioGuestWaiting\n\t\t\t\tmeeting={meeting}\n\t\t\t\treducedMotion={reducedMotion}\n\t\t\t\tcameraOn={cameraOn}\n\t\t\t\tmuted={muted}\n\t\t\t\tlabels={labels}\n\t\t\t\tsettingsOpen={settingsOpen}\n\t\t\t\tonToggleCamera={onToggleCamera}\n\t\t\t\tonToggleMute={() => void onToggleMute()}\n\t\t\t\tonOpenSettings={() => setSettingsOpen(true)}\n\t\t\t\tonCloseSettings={setSettingsOpen}\n\t\t\t/>\n\t\t);\n\t}\n\n\tif (participants.length > 0 || waitlisted.length > 0) {\n\t\tsawParticipants.current = true;\n\t}\n\tif (\n\t\tparticipants.length === 0 &&\n\t\twaitlisted.length === 0 &&\n\t\t!onAir &&\n\t\t!sawParticipants.current\n\t) {\n\t\treturn <StudioSkeleton />;\n\t}\n\n\treturn (\n\t\t<div className=\"bg-background flex h-dvh flex-col\">\n\t\t\t<header className=\"flex h-12 items-center gap-3 border-b px-3\">\n\t\t\t\t<p className=\"min-w-0 flex-1 truncate text-sm font-medium\">\n\t\t\t\t\t{session.stream.title}\n\t\t\t\t</p>\n\t\t\t\t{onAir && liveStartedAtRef.current !== null ? (\n\t\t\t\t\t<span className=\"text-muted-foreground tabular-nums text-xs\">\n\t\t\t\t\t\t{formatStudioElapsed(Date.now() - liveStartedAtRef.current)}\n\t\t\t\t\t</span>\n\t\t\t\t) : null}\n\t\t\t\t{onAir ? (\n\t\t\t\t\t<StudioLiveBadge role=\"status\">{statusChip}</StudioLiveBadge>\n\t\t\t\t) : (\n\t\t\t\t\t<span\n\t\t\t\t\t\tclassName=\"rounded-full border px-2 py-0.5 text-xs\"\n\t\t\t\t\t\trole=\"status\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{statusChip}\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t\t{session.role === \"moderator\" &&\n\t\t\t\t(egressLost || (!starting && !sending && !onAir && !active)) ? (\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\tdisabled={egressPending}\n\t\t\t\t\t\tonClick={() => void startEgress()}\n\t\t\t\t\t>\n\t\t\t\t\t\t{labels.livestreamRetry}\n\t\t\t\t\t</Button>\n\t\t\t\t) : null}\n\t\t\t\t{showPublishButton ? (\n\t\t\t\t\tcanGoLive ? (\n\t\t\t\t\t\t<ConfirmAction\n\t\t\t\t\t\t\ttriggerLabel={publishing ? labels.publishPending : labels.publish}\n\t\t\t\t\t\t\ttitle={labels.publishTitle}\n\t\t\t\t\t\t\tdescription={labels.publishDescription}\n\t\t\t\t\t\t\tconfirmLabel={labels.publishConfirm}\n\t\t\t\t\t\t\tpending={publishing || pending}\n\t\t\t\t\t\t\tonConfirm={() => void onPublish()}\n\t\t\t\t\t\t\ttrigger={\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tdisabled={publishing || pending}\n\t\t\t\t\t\t\t\t\taria-busy={publishing || undefined}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{publishing ? (\n\t\t\t\t\t\t\t\t\t\t<Loader2\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"animate-spin motion-reduce:animate-none\"\n\t\t\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t{publishing ? labels.publishPending : labels.publish}\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<Button type=\"button\" disabled>\n\t\t\t\t\t\t\t{labels.publish}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t)\n\t\t\t\t) : null}\n\t\t\t\t{session.role === \"moderator\" ? (\n\t\t\t\t\t<ConfirmAction\n\t\t\t\t\t\ttriggerLabel={labels.stop}\n\t\t\t\t\t\ttitle={labels.stopTitle}\n\t\t\t\t\t\tdescription={labels.stopDescription}\n\t\t\t\t\t\tconfirmLabel={labels.stopConfirm}\n\t\t\t\t\t\tpending={pending}\n\t\t\t\t\t\tonConfirm={() => void onStop()}\n\t\t\t\t\t\ttrigger={\n\t\t\t\t\t\t\t<Button type=\"button\" variant=\"destructive\" disabled={pending}>\n\t\t\t\t\t\t\t\t{labels.stop}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t) : null}\n\t\t\t\t{session.role === \"moderator\" ? (\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\tsize=\"icon-sm\"\n\t\t\t\t\t\taria-label={labels.share}\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tvoid shareOrCopyLink({\n\t\t\t\t\t\t\t\turl: playerWatchUrl(session.stream.id, playerOrigin),\n\t\t\t\t\t\t\t\ttitle: session.stream.title,\n\t\t\t\t\t\t\t}).then((result) => {\n\t\t\t\t\t\t\t\tif (result === \"copied\") toast.success(labels.shareCopied);\n\t\t\t\t\t\t\t\tif (result === \"failed\") toast.error(labels.shareFailed);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Share2 />\n\t\t\t\t\t</Button>\n\t\t\t\t) : null}\n\t\t\t\t{embed ? null : chrome}\n\t\t\t</header>\n\n\t\t\t{!stageEnabled && session.role === \"guest\" ? (\n\t\t\t\t<div\n\t\t\t\t\trole=\"status\"\n\t\t\t\t\tclassName=\"bg-muted flex items-center justify-between gap-3 border-b px-3 py-2 text-sm\"\n\t\t\t\t>\n\t\t\t\t\t<p>{labels.stageDisabled}</p>\n\t\t\t\t</div>\n\t\t\t) : null}\n\n\t\t\t<div className=\"flex min-h-0 flex-1 flex-col md:flex-row\">\n\t\t\t\t<StudioStage\n\t\t\t\t\tparticipants={stageParticipants}\n\t\t\t\t\tmeeting={meeting}\n\t\t\t\t\treducedMotion={reducedMotion}\n\t\t\t\t\tcanModerate={session.role === \"moderator\"}\n\t\t\t\t\tcanManageStage={canManageStage}\n\t\t\t\t\tonAir={onAir}\n\t\t\t\t\tlabels={labels}\n\t\t\t\t\tonKick={(id) => void onKick(id)}\n\t\t\t\t\tonMute={(id) => void onHostMedia(id, \"audio\")}\n\t\t\t\t\tonStopCamera={(id) => void onHostMedia(id, \"video\")}\n\t\t\t\t\tonStopScreen={(id) => void onHostMedia(id, \"screen\")}\n\t\t\t\t\tonToggleStage={(tile) =>\n\t\t\t\t\t\tvoid onSetStage(tile, !isOnStage(tile.stageStatus))\n\t\t\t\t\t}\n\t\t\t\t\tonTogglePin={(tile) => void onTogglePin(tile)}\n\t\t\t\t\tonToggleChat={(tile) => void onToggleChat(tile)}\n\t\t\t\t\tcanTakeOff={(id) => canTakeOffAir(participants, id, onAir)}\n\t\t\t\t\tonOpenPeople={() => setSideTab(\"people\")}\n\t\t\t\t/>\n\t\t\t\t{sideTab ? (\n\t\t\t\t\t<StudioSidePanel\n\t\t\t\t\t\ttab={sideTab}\n\t\t\t\t\t\tonTabChange={setSideTab}\n\t\t\t\t\t\tonClose={() => setSideTab(null)}\n\t\t\t\t\t\tmeeting={meeting}\n\t\t\t\t\t\tselfUserId={selfUserId}\n\t\t\t\t\t\tparticipants={participants}\n\t\t\t\t\t\twaitlisted={waitlisted}\n\t\t\t\t\t\tstageRequests={stageRequests}\n\t\t\t\t\t\tisModerator={session.role === \"moderator\"}\n\t\t\t\t\t\tchatBadge={unread}\n\t\t\t\t\t\tpeopleBadge={peopleBadge}\n\t\t\t\t\t\tlabels={labels}\n\t\t\t\t\t\tonAdmitAs={(id, as) => {\n\t\t\t\t\t\t\tconst guest = waitlisted.find((row) => row.id === id);\n\t\t\t\t\t\t\tvoid Promise.resolve(meeting.admitAs(id, as)).then(() => {\n\t\t\t\t\t\t\t\tif (as === \"panelist\" && guest?.userId) {\n\t\t\t\t\t\t\t\t\tverifyGrantTookEffect(guest.userId);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonAdmitAll={(as) => {\n\t\t\t\t\t\t\tconst waiting = waitlisted;\n\t\t\t\t\t\t\tvoid Promise.resolve(meeting.admitAll(as)).then(() => {\n\t\t\t\t\t\t\t\tif (as !== \"panelist\") return;\n\t\t\t\t\t\t\t\tfor (const guest of waiting) {\n\t\t\t\t\t\t\t\t\tif (guest.userId) verifyGrantTookEffect(guest.userId);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonDeny={(id) => {\n\t\t\t\t\t\t\tvoid Promise.resolve(meeting.deny(id)).then(\n\t\t\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t\t\ttoast.success(labels.denied);\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t\t\ttoast.error(labels.denyError);\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonGrantStage={(userId) =>\n\t\t\t\t\t\t\tvoid Promise.resolve(meeting.setStageAccess(userId, true))\n\t\t\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\t\t\tverifyGrantTookEffect(userId);\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.catch(() => {\n\t\t\t\t\t\t\t\t\ttoast.error(labels.stageError);\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonDenyStage={(userId) =>\n\t\t\t\t\t\t\tvoid Promise.resolve(meeting.denyStageAccess(userId)).catch(\n\t\t\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t\t\ttoast.error(labels.stageError);\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonTakeOffAir={(userId) => {\n\t\t\t\t\t\t\tconst tile = participants.find((row) => row.userId === userId);\n\t\t\t\t\t\t\tif (tile) void onSetStage(tile, false);\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tguestUrl={session.guestUrl}\n\t\t\t\t\t\tonShareGuestLink={() => {\n\t\t\t\t\t\t\tconst url = session.guestUrl;\n\t\t\t\t\t\t\tif (!url) return;\n\t\t\t\t\t\t\tvoid shareOrCopyLink({\n\t\t\t\t\t\t\t\turl,\n\t\t\t\t\t\t\t\ttitle: session.stream.title,\n\t\t\t\t\t\t\t\ttext: labels.shareGuestText.replace(\n\t\t\t\t\t\t\t\t\t\"{title}\",\n\t\t\t\t\t\t\t\t\tsession.stream.title,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t}).then((result) => {\n\t\t\t\t\t\t\t\tif (result === \"copied\") toast.success(labels.copied);\n\t\t\t\t\t\t\t\tif (result === \"failed\") toast.error(labels.shareFailed);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t) : null}\n\t\t\t</div>\n\n\t\t\t{remoteParticipants.map((row) => (\n\t\t\t\t<StudioRemoteAudio\n\t\t\t\t\tkey={row.id}\n\t\t\t\t\tmeeting={meeting}\n\t\t\t\t\tparticipantId={row.id}\n\t\t\t\t/>\n\t\t\t))}\n\n\t\t\t<StudioToolbar\n\t\t\t\tsession={session}\n\t\t\t\tmeeting={meeting}\n\t\t\t\tlabels={labels}\n\t\t\t\tmuted={muted}\n\t\t\t\tcameraOn={cameraOn}\n\t\t\t\tscreenOn={screenOn}\n\t\t\t\tchatOpen={sideTab === \"chat\"}\n\t\t\t\tpeopleOpen={sideTab === \"people\"}\n\t\t\t\tsettingsOpen={settingsOpen}\n\t\t\t\tunreadChat={unread}\n\t\t\t\tpeopleBadge={peopleBadge}\n\t\t\t\tpending={pending}\n\t\t\t\tshareGrant={shareGrant}\n\t\t\t\tshowScreenControl={showScreenControl && !guestOffStage}\n\t\t\t\tshowMediaControls={!guestOffStage}\n\t\t\t\tscreenPending={screenRequestPending}\n\t\t\t\tcanShareFreely={canShareFreely}\n\t\t\t\tscreenAvailable={screenAvailable && !screenRequestPending}\n\t\t\t\tpipSupported={pip.supported}\n\t\t\t\tpipOpen={Boolean(pip.pipWindow)}\n\t\t\t\tselfStageStatus={self?.stageStatus ?? meeting.stageStatus()}\n\t\t\t\tcanManageStage={canManageStage}\n\t\t\t\tstageEnabled={stageEnabled}\n\t\t\t\tcanLeaveStage={\n\t\t\t\t\tselfId != null && canTakeOffAir(participants, selfId, onAir)\n\t\t\t\t}\n\t\t\t\treducedMotion={reducedMotion}\n\t\t\t\tonToggleMute={() => void onToggleMute()}\n\t\t\t\tonToggleCamera={onToggleCamera}\n\t\t\t\tonToggleScreen={onToggleScreen}\n\t\t\t\tonAskToShare={() => void onAskToShare()}\n\t\t\t\tonCancelShareRequest={() => setShareGrant(\"idle\")}\n\t\t\t\tonAskStage={() => {\n\t\t\t\t\tif (session.role === \"moderator\") {\n\t\t\t\t\t\tvoid Promise.resolve(meeting.joinStage()).catch(() =>\n\t\t\t\t\t\t\ttoast.error(labels.stageError),\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tvoid meeting.requestStageAccess();\n\t\t\t\t}}\n\t\t\t\tonLeaveStage={() => {\n\t\t\t\t\tif (selfId && !canTakeOffAir(participants, selfId, onAir)) {\n\t\t\t\t\t\ttoast.message(labels.offAirLastVisible);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tvoid meeting.leaveStage();\n\t\t\t\t}}\n\t\t\t\tonToggleChat={() =>\n\t\t\t\t\tsetSideTab((current) => (current === \"chat\" ? null : \"chat\"))\n\t\t\t\t}\n\t\t\t\tonTogglePeople={() =>\n\t\t\t\t\tsetSideTab((current) => (current === \"people\" ? null : \"people\"))\n\t\t\t\t}\n\t\t\t\tonOpenSettings={() => setSettingsOpen(true)}\n\t\t\t\tonCloseSettings={setSettingsOpen}\n\t\t\t\tonOpenPip={onOpenPip}\n\t\t\t\tonClosePip={pip.close}\n\t\t\t\tonLeave={() => void onLeave()}\n\t\t\t/>\n\t\t\t{pip.pipWindow\n\t\t\t\t? createPortal(\n\t\t\t\t\t\t<StudioPipPanel\n\t\t\t\t\t\t\tmeeting={meeting}\n\t\t\t\t\t\t\tcameraOn={cameraOn}\n\t\t\t\t\t\t\tmuted={muted}\n\t\t\t\t\t\t\tscreenOn={screenOn}\n\t\t\t\t\t\t\tshowMediaControls={!guestOffStage}\n\t\t\t\t\t\t\tshowScreenControl={showScreenControl && !guestOffStage}\n\t\t\t\t\t\t\tcanShareFreely={canShareFreely}\n\t\t\t\t\t\t\tscreenAvailable={screenAvailable && !screenRequestPending}\n\t\t\t\t\t\t\tscreenPending={screenRequestPending}\n\t\t\t\t\t\t\tshareGrant={shareGrant}\n\t\t\t\t\t\t\tonAir={onAir}\n\t\t\t\t\t\t\telapsed={\n\t\t\t\t\t\t\t\tonAir && liveStartedAtRef.current !== null\n\t\t\t\t\t\t\t\t\t? formatStudioElapsed(Date.now() - liveStartedAtRef.current)\n\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tunread={unread}\n\t\t\t\t\t\t\tonToggleMute={() => void onToggleMute()}\n\t\t\t\t\t\t\tonToggleCamera={onToggleCamera}\n\t\t\t\t\t\t\tonToggleScreen={onToggleScreen}\n\t\t\t\t\t\t\tonAskToShare={() => void onAskToShare()}\n\t\t\t\t\t\t\tonCancelShareRequest={() => setShareGrant(\"idle\")}\n\t\t\t\t\t\t\tonBack={pip.close}\n\t\t\t\t\t\t\tlabels={{\n\t\t\t\t\t\t\t\tlive: labels.live,\n\t\t\t\t\t\t\t\tmute: labels.mute,\n\t\t\t\t\t\t\t\tunmute: labels.unmute,\n\t\t\t\t\t\t\t\tcamera: labels.camera,\n\t\t\t\t\t\t\t\tscreen: labels.screen,\n\t\t\t\t\t\t\t\tstopScreen: labels.stopScreen,\n\t\t\t\t\t\t\t\taskToShare: labels.askToShare,\n\t\t\t\t\t\t\t\tshareRequested: labels.shareRequested,\n\t\t\t\t\t\t\t\tcancelShareRequest: labels.cancelShareRequest,\n\t\t\t\t\t\t\t\tbackToStudio: labels.backToStudio,\n\t\t\t\t\t\t\t\tpipTitle: labels.pipTitle,\n\t\t\t\t\t\t\t\tcameraOff: labels.cameraOff,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>,\n\t\t\t\t\t\tpip.pipWindow.document.body,\n\t\t\t\t\t)\n\t\t\t\t: null}\n\t\t</div>\n\t);\n}\n","\"use client\";\n\nimport { useEffect, useRef, useState } from \"react\";\nimport { AudioWaveform } from \"./audio-waveform\";\n\nfunction isOverconstrained(error: unknown): boolean {\n\tif (!error || typeof error !== \"object\") return false;\n\treturn (error as { name?: string }).name === \"OverconstrainedError\";\n}\n\nfunction trackConstraint(\n\tdeviceId: string | undefined,\n\texact: boolean,\n): boolean | MediaTrackConstraints {\n\tif (exact && deviceId) {\n\t\treturn { deviceId: { exact: deviceId } };\n\t}\n\treturn true;\n}\n\nfunction stopStream(stream: MediaStream | null): void {\n\tif (!stream) return;\n\tfor (const track of stream.getTracks()) {\n\t\ttrack.onended = null;\n\t\ttrack.stop();\n\t}\n}\n\nasync function requestPreviewStream(\n\twantAudio: boolean,\n\twantVideo: boolean,\n\taudioDeviceId: string | undefined,\n\tvideoDeviceId: string | undefined,\n\texact: boolean,\n): Promise<MediaStream> {\n\treturn navigator.mediaDevices.getUserMedia({\n\t\taudio: wantAudio ? trackConstraint(audioDeviceId, exact) : false,\n\t\tvideo: wantVideo ? trackConstraint(videoDeviceId, exact) : false,\n\t});\n}\n\nexport function StudioDevicePreflight({\n\treducedMotion,\n\tcameraLabel,\n\tmicLabel,\n\tcameraOn = true,\n\tmuted = false,\n\taudioDeviceId = \"\",\n\tvideoDeviceId = \"\",\n\tcameraOffLabel = \"Camera is off\",\n\tonPermission,\n\tonError,\n}: {\n\treducedMotion: boolean;\n\tcameraLabel: string;\n\tmicLabel: string;\n\tcameraOn?: boolean;\n\tmuted?: boolean;\n\taudioDeviceId?: string;\n\tvideoDeviceId?: string;\n\tcameraOffLabel?: string;\n\tonPermission?: () => void;\n\tonError?: () => void;\n}) {\n\tconst videoRef = useRef<HTMLVideoElement | null>(null);\n\tconst onPermissionRef = useRef(onPermission);\n\tconst onErrorRef = useRef(onError);\n\tonPermissionRef.current = onPermission;\n\tonErrorRef.current = onError;\n\tconst [audioTrack, setAudioTrack] = useState<MediaStreamTrack | null>(null);\n\tconst [cameraOk, setCameraOk] = useState(false);\n\tconst [micOk, setMicOk] = useState(false);\n\n\tuseEffect(() => {\n\t\tlet cancelled = false;\n\t\tlet generation = 0;\n\t\tlet current: MediaStream | null = null;\n\n\t\tfunction bindEnded(stream: MediaStream, gen: number) {\n\t\t\tfor (const track of stream.getTracks()) {\n\t\t\t\ttrack.onended = () => {\n\t\t\t\t\tif (cancelled || gen !== generation) return;\n\t\t\t\t\tvoid acquire();\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tasync function acquire() {\n\t\t\tconst gen = ++generation;\n\t\t\tstopStream(current);\n\t\t\tcurrent = null;\n\t\t\tif (cancelled) return;\n\t\t\tif (!cameraOn && muted) {\n\t\t\t\tsetAudioTrack(null);\n\t\t\t\tsetCameraOk(false);\n\t\t\t\tsetMicOk(false);\n\t\t\t\tif (videoRef.current) videoRef.current.srcObject = null;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!navigator.mediaDevices?.getUserMedia) {\n\t\t\t\tsetAudioTrack(null);\n\t\t\t\tsetCameraOk(false);\n\t\t\t\tsetMicOk(false);\n\t\t\t\tonErrorRef.current?.();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst wantAudio = !muted;\n\t\t\tconst wantVideo = cameraOn;\n\t\t\tconst hadExact = Boolean(\n\t\t\t\t(wantAudio && audioDeviceId) || (wantVideo && videoDeviceId),\n\t\t\t);\n\t\t\ttry {\n\t\t\t\tlet next: MediaStream;\n\t\t\t\ttry {\n\t\t\t\t\tnext = await requestPreviewStream(\n\t\t\t\t\t\twantAudio,\n\t\t\t\t\t\twantVideo,\n\t\t\t\t\t\taudioDeviceId,\n\t\t\t\t\t\tvideoDeviceId,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (!isOverconstrained(error) || !hadExact) {\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t}\n\t\t\t\t\tnext = await requestPreviewStream(\n\t\t\t\t\t\twantAudio,\n\t\t\t\t\t\twantVideo,\n\t\t\t\t\t\taudioDeviceId,\n\t\t\t\t\t\tvideoDeviceId,\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (cancelled || gen !== generation) {\n\t\t\t\t\tstopStream(next);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tcurrent = next;\n\t\t\t\tconst video = next.getVideoTracks()[0] ?? null;\n\t\t\t\tconst audio = next.getAudioTracks()[0] ?? null;\n\t\t\t\tsetCameraOk(Boolean(video));\n\t\t\t\tsetMicOk(Boolean(audio));\n\t\t\t\tsetAudioTrack(audio);\n\t\t\t\tif (videoRef.current) {\n\t\t\t\t\tvideoRef.current.setAttribute(\"webkit-playsinline\", \"\");\n\t\t\t\t\tvideoRef.current.srcObject = video ? next : null;\n\t\t\t\t}\n\t\t\t\tbindEnded(next, gen);\n\t\t\t\tonPermissionRef.current?.();\n\t\t\t} catch {\n\t\t\t\tif (cancelled || gen !== generation) return;\n\t\t\t\tsetAudioTrack(null);\n\t\t\t\tsetCameraOk(false);\n\t\t\t\tsetMicOk(false);\n\t\t\t\tif (videoRef.current) videoRef.current.srcObject = null;\n\t\t\t\tonErrorRef.current?.();\n\t\t\t}\n\t\t}\n\n\t\tvoid acquire();\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t\tgeneration += 1;\n\t\t\tstopStream(current);\n\t\t\tcurrent = null;\n\t\t};\n\t}, [audioDeviceId, cameraOn, muted, videoDeviceId]);\n\n\treturn (\n\t\t<div className=\"flex w-full flex-col items-center gap-3\">\n\t\t\t{cameraOn ? (\n\t\t\t\t<video\n\t\t\t\t\tref={videoRef}\n\t\t\t\t\tautoPlay\n\t\t\t\t\tmuted\n\t\t\t\t\tplaysInline\n\t\t\t\t\tclassName=\"livo-studio-inline-video bg-muted aspect-video w-full rounded-xl object-cover\"\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<div className=\"bg-muted flex aspect-video w-full items-center justify-center rounded-xl\">\n\t\t\t\t\t<p className=\"text-muted-foreground text-sm\">{cameraOffLabel}</p>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t<AudioWaveform\n\t\t\t\ttrack={muted ? null : audioTrack}\n\t\t\t\treducedMotion={reducedMotion}\n\t\t\t/>\n\t\t\t<p className=\"text-muted-foreground text-sm\" role=\"status\">\n\t\t\t\t{cameraLabel}: {cameraOk && cameraOn ? \"OK\" : \"—\"} · {micLabel}:{\" \"}\n\t\t\t\t{micOk && !muted ? \"OK\" : \"—\"}\n\t\t\t</p>\n\t\t</div>\n\t);\n}\n","\"use client\";\n\nimport { useState } from \"react\";\nimport { Mic, MicOff, Video, VideoOff } from \"lucide-react\";\nimport { toast } from \"sonner\";\nimport { Button } from \"../ui/button\";\nimport { Input } from \"../ui/input\";\nimport { Label } from \"../ui/label\";\nimport { useMediaDevices } from \"../hooks/use-media-devices\";\nimport {\n\tpersistStudioDeviceSelection,\n\treadStudioDeviceSelection,\n\tresolveDeviceSelection,\n\ttype StudioDeviceSelection,\n} from \"../lib/devices\";\nimport type { StudioDeviceKind } from \"../lib/meeting\";\nimport { playSpeakerTest } from \"../lib/speaker-test\";\nimport { StudioDevicePreflight } from \"./studio-device-preflight\";\nimport { StudioDeviceSelectGroup } from \"./studio-device-select\";\n\nconst LOBBY_DEVICE_LABEL_DEFAULTS = {\n\tcameraDevice: \"Camera\",\n\tmicDevice: \"Microphone\",\n\tspeakerDevice: \"Speaker\",\n\ttestSpeaker: \"Test\",\n\ttestSpeakerError: \"Could not play the speaker test\",\n\tcameraOff: \"Camera is off\",\n};\n\nexport type StudioGuestLobbyLabels = {\n\ttitle: string;\n\thint: string;\n\tname: string;\n\tjoin: string;\n\twaitingForHost: string;\n\tcamera: string;\n\tmic: string;\n\tcameraDevice?: string;\n\tmicDevice?: string;\n\tspeakerDevice?: string;\n\ttestSpeaker?: string;\n\ttestSpeakerError?: string;\n\tcameraOff?: string;\n};\n\nexport function StudioGuestLobby({\n\treducedMotion,\n\tcameraOn,\n\tmuted,\n\tdisplayName,\n\tshowName,\n\tjoining,\n\twaitingForHost,\n\terror,\n\tlabels,\n\tsavedDevices,\n\tonCameraChange,\n\tonMutedChange,\n\tonDisplayNameChange,\n\tonDeviceChange,\n\tonJoin,\n}: {\n\treducedMotion: boolean;\n\tcameraOn: boolean;\n\tmuted: boolean;\n\tdisplayName: string;\n\tshowName: boolean;\n\tjoining: boolean;\n\twaitingForHost: boolean;\n\terror: string | null;\n\tlabels: StudioGuestLobbyLabels;\n\tsavedDevices?: StudioDeviceSelection;\n\tonCameraChange: (on: boolean) => void;\n\tonMutedChange: (muted: boolean) => void;\n\tonDisplayNameChange: (name: string) => void;\n\tonDeviceChange?: (kind: StudioDeviceKind, deviceId: string) => void;\n\tonJoin: () => void;\n}) {\n\tconst [refreshKey, setRefreshKey] = useState(0);\n\tconst [internalSaved, setInternalSaved] = useState<StudioDeviceSelection>(\n\t\t() => readStudioDeviceSelection(),\n\t);\n\tconst [testingSpeaker, setTestingSpeaker] = useState(false);\n\tconst devices = useMediaDevices(refreshKey);\n\tconst saved = savedDevices ?? internalSaved;\n\tconst { effective } = resolveDeviceSelection(saved, devices);\n\tconst deviceLabels = {\n\t\tcameraDevice:\n\t\t\tlabels.cameraDevice ?? LOBBY_DEVICE_LABEL_DEFAULTS.cameraDevice,\n\t\tmicDevice: labels.micDevice ?? LOBBY_DEVICE_LABEL_DEFAULTS.micDevice,\n\t\tspeakerDevice:\n\t\t\tlabels.speakerDevice ?? LOBBY_DEVICE_LABEL_DEFAULTS.speakerDevice,\n\t\ttestSpeaker: labels.testSpeaker ?? LOBBY_DEVICE_LABEL_DEFAULTS.testSpeaker,\n\t\ttestSpeakerError:\n\t\t\tlabels.testSpeakerError ?? LOBBY_DEVICE_LABEL_DEFAULTS.testSpeakerError,\n\t\tcameraOff: labels.cameraOff ?? LOBBY_DEVICE_LABEL_DEFAULTS.cameraOff,\n\t};\n\n\tfunction changeDevice(kind: StudioDeviceKind, deviceId: string) {\n\t\tpersistStudioDeviceSelection(kind, deviceId);\n\t\tonDeviceChange?.(kind, deviceId);\n\t\tif (!savedDevices) {\n\t\t\tsetInternalSaved((prev) => ({ ...prev, [kind]: deviceId }));\n\t\t}\n\t}\n\n\tasync function onTestSpeaker() {\n\t\tconst speakerId = effective.speaker || devices.speaker[0]?.deviceId || \"\";\n\t\tif (!speakerId || testingSpeaker) return;\n\t\tsetTestingSpeaker(true);\n\t\ttry {\n\t\t\tawait playSpeakerTest(speakerId);\n\t\t} catch {\n\t\t\ttoast.error(deviceLabels.testSpeakerError);\n\t\t} finally {\n\t\t\tsetTestingSpeaker(false);\n\t\t}\n\t}\n\n\treturn (\n\t\t<div className=\"mx-auto flex min-h-dvh w-full max-w-lg flex-col justify-center gap-6 p-6\">\n\t\t\t<div className=\"space-y-1\">\n\t\t\t\t<h1 className=\"text-lg font-semibold\">{labels.title}</h1>\n\t\t\t\t<p className=\"text-muted-foreground text-sm\">{labels.hint}</p>\n\t\t\t</div>\n\t\t\t<StudioDevicePreflight\n\t\t\t\treducedMotion={reducedMotion}\n\t\t\t\tcameraOn={cameraOn}\n\t\t\t\tmuted={muted}\n\t\t\t\taudioDeviceId={effective.audio}\n\t\t\t\tvideoDeviceId={effective.video}\n\t\t\t\tcameraLabel={labels.camera}\n\t\t\t\tmicLabel={labels.mic}\n\t\t\t\tcameraOffLabel={deviceLabels.cameraOff}\n\t\t\t\tonPermission={() => setRefreshKey((n) => (n === 0 ? 1 : n))}\n\t\t\t/>\n\t\t\t<div className=\"flex justify-center gap-2\">\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tvariant={muted ? \"destructive\" : \"secondary\"}\n\t\t\t\t\tsize=\"icon-lg\"\n\t\t\t\t\taria-pressed={muted}\n\t\t\t\t\taria-label={labels.mic}\n\t\t\t\t\tonClick={() => onMutedChange(!muted)}\n\t\t\t\t>\n\t\t\t\t\t{muted ? <MicOff /> : <Mic />}\n\t\t\t\t</Button>\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tvariant={cameraOn ? \"secondary\" : \"destructive\"}\n\t\t\t\t\tsize=\"icon-lg\"\n\t\t\t\t\taria-pressed={cameraOn}\n\t\t\t\t\taria-label={labels.camera}\n\t\t\t\t\tonClick={() => onCameraChange(!cameraOn)}\n\t\t\t\t>\n\t\t\t\t\t{cameraOn ? <Video /> : <VideoOff />}\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t\t<StudioDeviceSelectGroup\n\t\t\t\tdevices={devices}\n\t\t\t\tselected={effective}\n\t\t\t\tlabels={deviceLabels}\n\t\t\t\tonChange={changeDevice}\n\t\t\t\tspeakerAction={\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\tdisabled={\n\t\t\t\t\t\t\t!(effective.speaker || devices.speaker[0]?.deviceId) ||\n\t\t\t\t\t\t\ttestingSpeaker\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonClick={() => void onTestSpeaker()}\n\t\t\t\t\t>\n\t\t\t\t\t\t{deviceLabels.testSpeaker}\n\t\t\t\t\t</Button>\n\t\t\t\t}\n\t\t\t/>\n\t\t\t{showName ? (\n\t\t\t\t<div className=\"grid gap-2\">\n\t\t\t\t\t<Label htmlFor=\"studio-guest-name\">{labels.name}</Label>\n\t\t\t\t\t<Input\n\t\t\t\t\t\tid=\"studio-guest-name\"\n\t\t\t\t\t\tname=\"displayName\"\n\t\t\t\t\t\tvalue={displayName}\n\t\t\t\t\t\tonChange={(event) => onDisplayNameChange(event.target.value)}\n\t\t\t\t\t\tmaxLength={80}\n\t\t\t\t\t\trequired\n\t\t\t\t\t\tautoComplete=\"name\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t) : null}\n\t\t\t{waitingForHost ? (\n\t\t\t\t<p className=\"text-muted-foreground text-center text-sm\" role=\"status\">\n\t\t\t\t\t{labels.waitingForHost}\n\t\t\t\t</p>\n\t\t\t) : null}\n\t\t\t{error ? (\n\t\t\t\t<p className=\"text-destructive text-center text-sm\" role=\"alert\">\n\t\t\t\t\t{error}\n\t\t\t\t</p>\n\t\t\t) : null}\n\t\t\t<Button\n\t\t\t\ttype=\"button\"\n\t\t\t\tsize=\"lg\"\n\t\t\t\tclassName=\"w-full\"\n\t\t\t\tdisabled={joining || (showName && !displayName.trim())}\n\t\t\t\tonClick={onJoin}\n\t\t\t>\n\t\t\t\t{waitingForHost ? labels.waitingForHost : labels.join}\n\t\t\t</Button>\n\t\t</div>\n\t);\n}\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\n\nexport function usePrefersReducedMotion(): boolean {\n\tconst [reduced, setReduced] = useState(false);\n\n\tuseEffect(() => {\n\t\tconst media = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n\t\tconst onChange = () => setReduced(media.matches);\n\t\tonChange();\n\t\tmedia.addEventListener(\"change\", onChange);\n\t\treturn () => media.removeEventListener(\"change\", onChange);\n\t}, []);\n\n\treturn reduced;\n}\n","const NAME_KEY = \"livo-studio-display-name\";\nconst ID_KEY = \"livo-studio-guest-id\";\n\nexport function readStudioGuestIdentity(\n\tstorage: Pick<Storage, \"getItem\" | \"setItem\"> | null = defaultStorage(),\n): { displayName: string; guestId: string } {\n\tconst guestId = storage?.getItem(ID_KEY)?.trim() || crypto.randomUUID();\n\tstorage?.setItem(ID_KEY, guestId);\n\tconst displayName = storage?.getItem(NAME_KEY)?.trim() ?? \"\";\n\treturn { displayName, guestId };\n}\n\nexport function persistStudioGuestName(\n\tdisplayName: string,\n\tstorage: Pick<Storage, \"getItem\" | \"setItem\"> | null = defaultStorage(),\n): void {\n\tstorage?.setItem(NAME_KEY, displayName.trim());\n}\n\nfunction defaultStorage(): Pick<Storage, \"getItem\" | \"setItem\"> | null {\n\tif (typeof window === \"undefined\") return null;\n\ttry {\n\t\treturn window.localStorage;\n\t} catch {\n\t\treturn null;\n\t}\n}\n","import type {\n\tStudioBroadcastTarget,\n\tStudioChatMessage,\n\tStudioDeviceKind,\n\tStudioDeviceOption,\n\tStudioHostMediaKind,\n\tStudioMeetingHandle,\n\tStudioParticipantTile,\n\tStudioScreenSharePermission,\n\tStudioStageRequest,\n\tStudioStageStatus,\n\tStudioVideoKind,\n} from \"./meeting\";\nimport { persistStudioGuestName } from \"./guest-identity\";\nimport {\n\tisStudioRejected,\n\tparseStudioBroadcast,\n\tSTUDIO_DISPLAY_NAME_MAX,\n\tSTUDIO_GUEST_PRESET,\n\tSTUDIO_MODERATOR_PRESET,\n} from \"./meeting\";\nimport type { StudioWaitlistedGuest } from \"./types\";\n\ntype RtkTracks = {\n\taudio?: MediaStreamTrack | null;\n\tvideo?: MediaStreamTrack | null;\n};\n\ntype RtkEventHandler = (...args: unknown[]) => void;\n\ntype RtkParticipant = {\n\tid: string;\n\tuserId?: string;\n\tname?: string;\n\tpicture?: string | null;\n\tpresetName?: string;\n\taudioEnabled?: boolean;\n\tvideoEnabled?: boolean;\n\tscreenShareEnabled?: boolean;\n\tisSelf?: boolean;\n\tisPinned?: boolean;\n\tstageStatus?: StudioStageStatus;\n\taudioTrack?: MediaStreamTrack | null;\n\tvideoTrack?: MediaStreamTrack | null;\n\tscreenShareTracks?: RtkTracks | null;\n\tflags?: { recorder?: boolean };\n\tdisableAudio?: () => Promise<void>;\n\tdisableVideo?: () => Promise<void>;\n\tsetScreenShareEnabled?: (enabled: boolean) => Promise<void>;\n\tregisterVideoElement?: (el: HTMLVideoElement, preview?: boolean) => void;\n\tderegisterVideoElement?: (el?: HTMLVideoElement, preview?: boolean) => void;\n\tkick?: () => Promise<void>;\n\tpin?: () => Promise<void>;\n\tunpin?: () => Promise<void>;\n\tgetPermissions?: () => Promise<{\n\t\tchat?: { public?: { canSend?: boolean; text?: boolean } };\n\t}>;\n};\n\ntype RtkPermissions = {\n\tcanProduceScreenshare?: StudioScreenSharePermission | boolean;\n\tproduceScreenshare?: boolean;\n\tcanChangeParticipantPermissions?: boolean;\n\tacceptStageRequests?: boolean;\n\tstageEnabled?: boolean;\n\tstageAccess?: \"ALLOWED\" | \"CAN_REQUEST\" | \"NOT_ALLOWED\";\n\ton?: (event: string, handler: RtkEventHandler) => void;\n\toff?: (event: string, handler: RtkEventHandler) => void;\n};\n\ntype RtkBroadcastTarget = StudioBroadcastTarget | { meetingIds: string[] };\n\ntype RtkSelf = RtkParticipant & {\n\troomJoined?: boolean;\n\troomState?: string;\n\tpermissions?: RtkPermissions;\n\tenableAudio?: () => Promise<void>;\n\tdisableAudio?: () => Promise<void>;\n\tenableVideo?: () => Promise<void>;\n\tdisableVideo?: () => Promise<void>;\n\tenableScreenShare?: () => Promise<void>;\n\tdisableScreenShare?: () => Promise<void>;\n\tgetAudioDevices?: () => Promise<MediaDeviceInfo[]>;\n\tgetVideoDevices?: () => Promise<MediaDeviceInfo[]>;\n\tgetSpeakerDevices?: () => Promise<MediaDeviceInfo[]>;\n\tsetDevice?: (device: MediaDeviceInfo) => Promise<void>;\n\tsetName?: (name: string) => void | Promise<void>;\n};\n\ntype RtkChatMessage = {\n\tid?: unknown;\n\ttype?: unknown;\n\tuserId?: unknown;\n\tdisplayName?: unknown;\n\tmessage?: unknown;\n\ttime?: unknown;\n\ttimeMs?: unknown;\n\ttargetUserIds?: unknown;\n\tpinned?: unknown;\n\tisEdited?: unknown;\n};\n\ntype RtkStageRequest = {\n\tuserId?: string;\n\tpeerId?: string;\n\tdisplayName?: string;\n};\n\ntype RtkMeeting = {\n\tjoin?: () => Promise<void>;\n\tleave?: () => Promise<void>;\n\tself?: RtkSelf;\n\tstage?: {\n\t\tstatus?: StudioStageStatus;\n\t\trequestAccess?: () => Promise<void>;\n\t\tgrantAccess?: (userIds: string[]) => Promise<void>;\n\t\tdenyAccess?: (userIds: string[]) => Promise<void>;\n\t\tjoin?: () => Promise<void>;\n\t\tleave?: () => Promise<void>;\n\t\tkick?: (userIds: string[]) => Promise<void>;\n\t\tgetAccessRequests?: () => { stageRequests?: RtkStageRequest[] };\n\t\ton?: (event: string, handler: RtkEventHandler) => void;\n\t\toff?: (event: string, handler: RtkEventHandler) => void;\n\t};\n\tparticipants?: {\n\t\tjoined?: Map<string, RtkParticipant> | RtkParticipant[];\n\t\twaitlisted?: Map<string, RtkParticipant> | RtkParticipant[];\n\t\tpinned?: Map<string, RtkParticipant> | RtkParticipant[];\n\t\tlastActiveSpeaker?: string | null;\n\t\tacceptWaitingRoomRequest?: (id: string) => void | Promise<void>;\n\t\trejectWaitingRoomRequest?: (id: string) => Promise<void>;\n\t\tacceptAllWaitingRoomRequest?: (userIds: string[]) => Promise<void>;\n\t\tbroadcastMessage?: (\n\t\t\ttype: string,\n\t\t\tpayload: unknown,\n\t\t\ttarget?: RtkBroadcastTarget,\n\t\t) => void | Promise<void>;\n\t\tupdatePermissions?: (\n\t\t\tparticipantIds: string[],\n\t\t\tpermissions: {\n\t\t\t\tchat?: { public?: { canSend?: boolean; text?: boolean } };\n\t\t\t},\n\t\t) => Promise<void>;\n\t\ton?: (event: string, handler: RtkEventHandler) => void;\n\t\toff?: (event: string, handler: RtkEventHandler) => void;\n\t};\n\tlivestream?: {\n\t\tstate?: string;\n\t\tstart?: () => Promise<void>;\n\t};\n\tchat?: {\n\t\tmessages?: RtkChatMessage[];\n\t\tmaxTextLimit?: number;\n\t\tsendTextMessage?: (message: string, peerIds?: string[]) => Promise<void>;\n\t\teditTextMessage?: (id: string, message: string) => Promise<void>;\n\t\tdeleteMessage?: (id: string) => Promise<void>;\n\t\tpin?: (id: string) => Promise<void>;\n\t\tunpin?: (id: string) => Promise<void>;\n\t\tfetchPublicMessages?: (opts: {\n\t\t\ttimestamp?: number;\n\t\t\tlimit: number;\n\t\t\tdirection: \"before\" | \"after\";\n\t\t}) => Promise<RtkChatMessage[]>;\n\t\tfetchPrivateMessages?: (opts: {\n\t\t\ttimestamp?: number;\n\t\t\tlimit: number;\n\t\t\tdirection: \"before\" | \"after\";\n\t\t\tuserId: string;\n\t\t}) => Promise<RtkChatMessage[]>;\n\t\tfetchPinnedMessages?: (opts: {\n\t\t\ttimestamp?: number;\n\t\t\tlimit: number;\n\t\t\tdirection: \"before\" | \"after\";\n\t\t}) => Promise<RtkChatMessage[]>;\n\t};\n};\n\ntype SinkAudioElement = HTMLAudioElement & {\n\tsetSinkId?: (id: string) => Promise<void>;\n};\n\nfunction asList(\n\tvalue: Map<string, RtkParticipant> | RtkParticipant[] | undefined,\n): RtkParticipant[] {\n\tif (!value) return [];\n\tif (Array.isArray(value)) return value;\n\treturn [...value.values()];\n}\n\nfunction isRecorder(participant: RtkParticipant | undefined): boolean {\n\treturn participant?.flags?.recorder === true;\n}\n\nfunction resolvedName(\n\tparticipant: Pick<RtkParticipant, \"id\" | \"userId\" | \"name\">,\n\tnameOverrides: Map<string, string>,\n): string {\n\treturn (\n\t\tnameOverrides.get(participant.id) ??\n\t\t(participant.userId ? nameOverrides.get(participant.userId) : undefined) ??\n\t\tparticipant.name?.trim() ??\n\t\t\"Guest\"\n\t);\n}\n\nfunction resolveTileStageStatus(\n\tparticipant: RtkParticipant,\n\tstageEnabled: boolean,\n\tfallback?: StudioStageStatus,\n): StudioStageStatus {\n\tif (!stageEnabled) return \"ON_STAGE\";\n\treturn participant.stageStatus ?? fallback ?? \"OFF_STAGE\";\n}\n\nfunction tileFrom(\n\tparticipant: RtkParticipant,\n\tselfId: string | undefined,\n\tpinnedIds: Set<string>,\n\tchatSend: Map<string, boolean>,\n\tnameOverrides: Map<string, string>,\n\tstageStatus: StudioStageStatus,\n): StudioParticipantTile {\n\treturn {\n\t\tid: participant.id,\n\t\tuserId: participant.userId ?? \"\",\n\t\tname: resolvedName(participant, nameOverrides),\n\t\tisSelf: participant.isSelf === true || participant.id === selfId,\n\t\taudioEnabled: participant.audioEnabled !== false,\n\t\tvideoEnabled: participant.videoEnabled === true,\n\t\tscreenShareEnabled: participant.screenShareEnabled === true,\n\t\tpicture: participant.picture ?? null,\n\t\tstageStatus,\n\t\tpinned: participant.isPinned === true || pinnedIds.has(participant.id),\n\t\tchatCanSend: chatSend.get(participant.id) ?? true,\n\t};\n}\n\nfunction asOptions(\n\tdevices: MediaDeviceInfo[] | undefined,\n): StudioDeviceOption[] {\n\treturn (devices ?? []).map((device, index) => ({\n\t\tdeviceId: device.deviceId,\n\t\tlabel: device.label.trim() || `Device ${index + 1}`,\n\t}));\n}\n\nfunction findParticipant(\n\tmeeting: RtkMeeting,\n\tparticipantId: string,\n): RtkParticipant | undefined {\n\tif (meeting.self?.id === participantId) return meeting.self;\n\treturn asList(meeting.participants?.joined).find(\n\t\t(row) => row.id === participantId,\n\t);\n}\n\nfunction findByUserId(\n\tmeeting: RtkMeeting,\n\tuserId: string,\n): RtkParticipant | undefined {\n\tif (meeting.self?.userId === userId) return meeting.self;\n\treturn asList(meeting.participants?.joined).find(\n\t\t(row) => row.userId === userId,\n\t);\n}\n\nfunction screenShareTrack(\n\tmeeting: RtkMeeting,\n\tparticipantId: string,\n): MediaStreamTrack | null {\n\tif (meeting.self?.id === participantId) {\n\t\treturn meeting.self.screenShareTracks?.video ?? null;\n\t}\n\treturn (\n\t\tfindParticipant(meeting, participantId)?.screenShareTracks?.video ?? null\n\t);\n}\n\nconst pendingMediaPlay = new Set<HTMLMediaElement>();\n\nfunction tryPlay(el: HTMLMediaElement): void {\n\tif (typeof el.play !== \"function\") return;\n\tvoid el.play().then(\n\t\t() => {\n\t\t\tpendingMediaPlay.delete(el);\n\t\t},\n\t\t() => {\n\t\t\tpendingMediaPlay.add(el);\n\t\t},\n\t);\n}\n\nfunction replayPendingMedia(): void {\n\tfor (const el of pendingMediaPlay) {\n\t\ttryPlay(el);\n\t}\n}\n\nif (typeof document !== \"undefined\") {\n\tdocument.addEventListener(\"pointerdown\", replayPendingMedia, {\n\t\tpassive: true,\n\t});\n}\n\nfunction bindTrackElement(\n\tel: HTMLMediaElement,\n\ttrack: MediaStreamTrack | null,\n\tkind: \"audio\" | \"video\",\n): void {\n\tif (!track) {\n\t\tel.srcObject = null;\n\t\tpendingMediaPlay.delete(el);\n\t\treturn;\n\t}\n\tconst current = el.srcObject;\n\tconst currentTrack =\n\t\tcurrent instanceof MediaStream\n\t\t\t? kind === \"video\"\n\t\t\t\t? current.getVideoTracks()[0]\n\t\t\t\t: current.getAudioTracks()[0]\n\t\t\t: undefined;\n\tif (currentTrack?.id === track.id) {\n\t\tif (el.paused) tryPlay(el);\n\t\treturn;\n\t}\n\tel.srcObject = new MediaStream([track]);\n\ttryPlay(el);\n}\n\nfunction roomLeftState(payload: unknown, fallback: string | null): string {\n\tif (typeof payload === \"string\" && payload) return payload;\n\tif (payload && typeof payload === \"object\") {\n\t\tconst row = payload as { state?: unknown; roomState?: unknown };\n\t\tif (typeof row.state === \"string\" && row.state) return row.state;\n\t\tif (typeof row.roomState === \"string\" && row.roomState)\n\t\t\treturn row.roomState;\n\t}\n\treturn fallback ?? \"left\";\n}\n\nfunction asEmitter(target: unknown): {\n\ton?: (event: string, handler: RtkEventHandler) => void;\n\toff?: (event: string, handler: RtkEventHandler) => void;\n} {\n\treturn (target ?? {}) as {\n\t\ton?: (event: string, handler: RtkEventHandler) => void;\n\t\toff?: (event: string, handler: RtkEventHandler) => void;\n\t};\n}\n\nfunction listen(\n\ttarget: unknown,\n\tevent: string,\n\thandler: RtkEventHandler,\n): () => void {\n\tconst emitter = asEmitter(target);\n\temitter.on?.(event, handler);\n\treturn () => emitter.off?.(event, handler);\n}\n\nfunction mapChatMessages(\n\traw: RtkChatMessage[] | undefined,\n): StudioChatMessage[] {\n\tif (!raw) return [];\n\tconst out: StudioChatMessage[] = [];\n\tfor (const row of raw) {\n\t\tconst id = typeof row.id === \"string\" ? row.id : \"\";\n\t\tconst text = typeof row.message === \"string\" ? row.message : \"\";\n\t\tif (!id || !text) continue;\n\t\tconst time =\n\t\t\trow.time instanceof Date\n\t\t\t\t? row.time.getTime()\n\t\t\t\t: typeof row.timeMs === \"number\"\n\t\t\t\t\t? row.timeMs\n\t\t\t\t\t: typeof row.time === \"number\"\n\t\t\t\t\t\t? row.time\n\t\t\t\t\t\t: 0;\n\t\tconst targetUserIds = Array.isArray(row.targetUserIds)\n\t\t\t? row.targetUserIds.filter(\n\t\t\t\t\t(value): value is string => typeof value === \"string\",\n\t\t\t\t)\n\t\t\t: undefined;\n\t\tout.push({\n\t\t\tid,\n\t\t\tuserId: typeof row.userId === \"string\" ? row.userId : \"\",\n\t\t\tname:\n\t\t\t\ttypeof row.displayName === \"string\" && row.displayName.trim()\n\t\t\t\t\t? row.displayName\n\t\t\t\t\t: \"Guest\",\n\t\t\ttext,\n\t\t\ttime,\n\t\t\ttargetUserIds,\n\t\t\tpinned: row.pinned === true,\n\t\t\tisEdited: row.isEdited === true,\n\t\t});\n\t}\n\treturn out;\n}\n\nfunction applySink(el: HTMLAudioElement, sinkId: string | null): void {\n\tif (!sinkId) return;\n\tconst sink = el as SinkAudioElement;\n\tif (typeof sink.setSinkId === \"function\") {\n\t\tvoid sink.setSinkId(sinkId).catch(() => undefined);\n\t}\n}\n\nfunction screenSharePermissionFrom(\n\tpermissions: RtkPermissions | undefined,\n): StudioScreenSharePermission {\n\tconst current = permissions?.canProduceScreenshare;\n\tif (\n\t\tcurrent === \"ALLOWED\" ||\n\t\tcurrent === \"NOT_ALLOWED\" ||\n\t\tcurrent === \"CAN_REQUEST\"\n\t) {\n\t\treturn current;\n\t}\n\tif (current === false || permissions?.produceScreenshare === false) {\n\t\treturn \"NOT_ALLOWED\";\n\t}\n\treturn \"ALLOWED\";\n}\n\nfunction isModerator(participant: RtkParticipant | undefined): boolean {\n\treturn participant?.presetName === STUDIO_MODERATOR_PRESET;\n}\n\nfunction activeSpeakerFrom(\n\tpayload: unknown,\n\tfallback: string | null,\n): string | null {\n\tif (typeof payload === \"string\" && payload) return payload;\n\tif (payload && typeof payload === \"object\") {\n\t\tconst row = payload as { peerId?: unknown; id?: unknown };\n\t\tif (typeof row.peerId === \"string\" && row.peerId) return row.peerId;\n\t\tif (typeof row.id === \"string\" && row.id) return row.id;\n\t}\n\treturn fallback;\n}\n\nconst STAGE_JOIN_RETRY_MS = 1_000;\nconst STAGE_JOIN_MAX_ATTEMPTS = 3;\n\nfunction isStageDisabledError(error: unknown): boolean {\n\tif (!error || typeof error !== \"object\") return false;\n\tconst row = error as { code?: unknown; message?: unknown };\n\tif (row.code === \"2003\" || row.code === 2003) return true;\n\tconst message = typeof row.message === \"string\" ? row.message : \"\";\n\treturn (\n\t\tmessage.includes(\"ERR2003\") ||\n\t\tmessage.toLowerCase().includes(\"stage is disabled\")\n\t);\n}\n\nfunction waitMs(ms: number): Promise<void> {\n\treturn new Promise((resolve) => {\n\t\tsetTimeout(resolve, ms);\n\t});\n}\n\nfunction resolveJoinedParticipant(\n\tmeeting: RtkMeeting,\n\tpayload: unknown,\n): RtkParticipant | undefined {\n\tif (!payload || typeof payload !== \"object\") return undefined;\n\tconst row = payload as RtkParticipant & { peerId?: string };\n\tif (typeof row.id === \"string\" && row.id) {\n\t\treturn findParticipant(meeting, row.id) ?? row;\n\t}\n\tconst peerId = typeof row.peerId === \"string\" ? row.peerId : \"\";\n\tif (peerId) {\n\t\treturn (\n\t\t\tfindParticipant(meeting, peerId) ??\n\t\t\t(row.userId ? findByUserId(meeting, row.userId) : undefined) ?? {\n\t\t\t\tid: peerId,\n\t\t\t\tuserId: row.userId,\n\t\t\t\tname: row.name,\n\t\t\t}\n\t\t);\n\t}\n\tif (typeof row.userId === \"string\" && row.userId) {\n\t\treturn findByUserId(meeting, row.userId);\n\t}\n\treturn undefined;\n}\n\nexport function studioMeetingFromRtk(raw: object): StudioMeetingHandle {\n\tconst meeting = raw as RtkMeeting;\n\tconst cameraEls = new Map<string, HTMLVideoElement>();\n\tconst screenEls = new Map<string, HTMLVideoElement>();\n\tconst audioEls = new Map<string, HTMLAudioElement>();\n\tconst mediaListeners = new Set<() => void>();\n\tconst chatListeners = new Set<() => void>();\n\tconst participantListeners = new Set<() => void>();\n\tconst stageListeners = new Set<() => void>();\n\tconst pinListeners = new Set<() => void>();\n\tconst pendingPanelists = new Set<string>();\n\tconst chatSend = new Map<string, boolean>();\n\tconst nameOverrides = new Map<string, string>();\n\tlet joiningStage = false;\n\tlet joinedStageLocally = false;\n\tconst historyMessages: StudioChatMessage[] = [];\n\tlet speakerSinkId: string | null = null;\n\tlet lastSpeakerId: string | null =\n\t\ttypeof meeting.participants?.lastActiveSpeaker === \"string\"\n\t\t\t? meeting.participants.lastActiveSpeaker\n\t\t\t: null;\n\n\tfunction participantFor(id: string): RtkParticipant | undefined {\n\t\treturn findParticipant(meeting, id);\n\t}\n\n\tfunction isSelfId(id: string): boolean {\n\t\treturn meeting.self?.id === id;\n\t}\n\n\tfunction pinnedIdSet(): Set<string> {\n\t\treturn new Set(asList(meeting.participants?.pinned).map((row) => row.id));\n\t}\n\n\tfunction attachCamera(\n\t\tparticipantId: string,\n\t\tel: HTMLVideoElement | null,\n\t): void {\n\t\tconst participant = participantFor(participantId);\n\t\tconst preview = isSelfId(participantId);\n\t\tconst previous = cameraEls.get(participantId);\n\t\tif (previous && previous !== el) {\n\t\t\tparticipant?.deregisterVideoElement?.(previous, preview);\n\t\t\tcameraEls.delete(participantId);\n\t\t}\n\t\tif (!el) return;\n\t\tcameraEls.set(participantId, el);\n\t\tif (previous !== el) {\n\t\t\tparticipant?.registerVideoElement?.(el, preview);\n\t\t}\n\t\tconst track = participant?.videoTrack ?? null;\n\t\tif (track) bindTrackElement(el, track, \"video\");\n\t}\n\n\tfunction attachScreen(\n\t\tparticipantId: string,\n\t\tel: HTMLVideoElement | null,\n\t): void {\n\t\tif (!el) {\n\t\t\tscreenEls.delete(participantId);\n\t\t\treturn;\n\t\t}\n\t\tscreenEls.set(participantId, el);\n\t\tbindTrackElement(el, screenShareTrack(meeting, participantId), \"video\");\n\t}\n\n\tfunction bindAudio(participantId: string, el: HTMLAudioElement | null): void {\n\t\tif (!el || isSelfId(participantId)) {\n\t\t\taudioEls.delete(participantId);\n\t\t\treturn;\n\t\t}\n\t\taudioEls.set(participantId, el);\n\t\tconst track = participantFor(participantId)?.audioTrack ?? null;\n\t\tbindTrackElement(el, track, \"audio\");\n\t\tapplySink(el, speakerSinkId);\n\t}\n\n\tfunction rebindMedia(): void {\n\t\tfor (const [id, el] of cameraEls) attachCamera(id, el);\n\t\tfor (const [id, el] of screenEls) attachScreen(id, el);\n\t\tfor (const [id, el] of audioEls) bindAudio(id, el);\n\t\tfor (const listener of mediaListeners) listener();\n\t}\n\n\tfunction notifyChat(): void {\n\t\tfor (const listener of chatListeners) listener();\n\t}\n\n\tfunction notifyParticipants(): void {\n\t\tfor (const listener of participantListeners) listener();\n\t}\n\n\tfunction notifyStage(): void {\n\t\tfor (const listener of stageListeners) listener();\n\t\tnotifyParticipants();\n\t}\n\n\tfunction notifyPinned(): void {\n\t\tfor (const listener of pinListeners) listener();\n\t\tnotifyParticipants();\n\t}\n\n\tfunction applyDisplayName(participantId: string, name: string): void {\n\t\tconst trimmed = name.trim().slice(0, STUDIO_DISPLAY_NAME_MAX);\n\t\tif (!trimmed || !participantId) return;\n\t\tnameOverrides.set(participantId, trimmed);\n\t\tnotifyParticipants();\n\t}\n\n\tfunction announceDisplayName(): void {\n\t\tconst self = meeting.self;\n\t\tconst name =\n\t\t\t(self?.id ? nameOverrides.get(self.id) : undefined) ?? self?.name?.trim();\n\t\tif (!self?.id || !name) return;\n\t\tvoid meeting.participants?.broadcastMessage?.(\n\t\t\t\"display-name\",\n\t\t\t{ type: \"display-name\", participantId: self.id, name },\n\t\t\t{ presetNames: [STUDIO_MODERATOR_PRESET, STUDIO_GUEST_PRESET] },\n\t\t);\n\t}\n\n\tfunction mergeHistory(rows: StudioChatMessage[]): void {\n\t\tconst byId = new Map(historyMessages.map((row) => [row.id, row]));\n\t\tfor (const row of rows) byId.set(row.id, row);\n\t\thistoryMessages.splice(0, historyMessages.length, ...byId.values());\n\t}\n\n\tfunction allChatMessages(): StudioChatMessage[] {\n\t\tconst byId = new Map(historyMessages.map((row) => [row.id, row]));\n\t\tfor (const row of mapChatMessages(meeting.chat?.messages)) {\n\t\t\tbyId.set(row.id, row);\n\t\t}\n\t\treturn [...byId.values()].sort((a, b) => a.time - b.time);\n\t}\n\n\tfunction currentStageStatus(): StudioStageStatus | undefined {\n\t\treturn meeting.stage?.status ?? meeting.self?.stageStatus;\n\t}\n\n\tasync function republishCameraIfOn(): Promise<void> {\n\t\tif (meeting.self?.videoEnabled !== true) return;\n\t\tawait meeting.self.disableVideo?.();\n\t\tawait meeting.self.enableVideo?.();\n\t}\n\n\tasync function joinStageWithRetry(): Promise<void> {\n\t\tif (joiningStage) return;\n\t\tjoiningStage = true;\n\t\ttry {\n\t\t\tfor (let attempt = 0; attempt < STAGE_JOIN_MAX_ATTEMPTS; attempt++) {\n\t\t\t\tif (currentStageStatus() === \"ON_STAGE\") {\n\t\t\t\t\tnotifyStage();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tawait meeting.stage?.join?.();\n\t\t\t\t\tjoinedStageLocally = true;\n\t\t\t\t\tawait republishCameraIfOn();\n\t\t\t\t\tnotifyStage();\n\t\t\t\t\treturn;\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (isStageDisabledError(error)) {\n\t\t\t\t\t\tnotifyStage();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconsole.warn(\"studio: stage join failed\", error);\n\t\t\t\t\tif (attempt === STAGE_JOIN_MAX_ATTEMPTS - 1) {\n\t\t\t\t\t\tnotifyStage();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tawait waitMs(STAGE_JOIN_RETRY_MS);\n\t\t\t\t\tif (currentStageStatus() !== \"ACCEPTED_TO_JOIN_STAGE\") {\n\t\t\t\t\t\tnotifyStage();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} finally {\n\t\t\tjoiningStage = false;\n\t\t}\n\t}\n\n\tasync function autoJoinStage(): Promise<void> {\n\t\tif (currentStageStatus() === \"ON_STAGE\") {\n\t\t\tnotifyStage();\n\t\t\treturn;\n\t\t}\n\t\tawait joinStageWithRetry();\n\t}\n\n\tasync function ensureStageJoined(): Promise<void> {\n\t\tif (currentStageStatus() !== \"ACCEPTED_TO_JOIN_STAGE\") return;\n\t\tawait joinStageWithRetry();\n\t}\n\n\tasync function joinStageIfAllowed(): Promise<void> {\n\t\tif (meeting.self?.permissions?.stageAccess !== \"ALLOWED\") return;\n\t\tif (currentStageStatus() === \"ON_STAGE\") return;\n\t\t// ALLOWED hosts often land ON_STAGE from meeting.join(). requestAccess\n\t\t// then fails with ERR2006. Join only when still off stage.\n\t\ttry {\n\t\t\tawait meeting.stage?.join?.();\n\t\t} catch {\n\t\t\t// ERR2003 when the stage module is off on this token.\n\t\t}\n\t}\n\n\tfunction queuePanelist(\n\t\tguest: RtkParticipant | undefined,\n\t\tfallbackId: string,\n\t) {\n\t\tif (guest?.userId) pendingPanelists.add(guest.userId);\n\t\tpendingPanelists.add(guest?.id || fallbackId);\n\t}\n\n\tfunction takePendingGrantId(\n\t\tparticipant: RtkParticipant | undefined,\n\t): string | null {\n\t\tif (!participant || isRecorder(participant)) return null;\n\t\tconst keys = [participant.userId, participant.id].filter(\n\t\t\t(key): key is string => Boolean(key),\n\t\t);\n\t\tif (!keys.some((key) => pendingPanelists.has(key))) return null;\n\t\tfor (const key of keys) pendingPanelists.delete(key);\n\t\treturn participant.userId || participant.id || null;\n\t}\n\n\tasync function grantIfPending(payload: unknown): Promise<void> {\n\t\tconst joined = resolveJoinedParticipant(meeting, payload);\n\t\tconst grantId = takePendingGrantId(joined);\n\t\tif (!grantId) return;\n\t\tawait meeting.stage?.grantAccess?.([grantId]);\n\t\tnotifyStage();\n\t}\n\n\tasync function grantPendingIfJoined(\n\t\tparticipantId: string,\n\t\tuserId?: string,\n\t): Promise<void> {\n\t\tconst already =\n\t\t\tfindParticipant(meeting, participantId) ??\n\t\t\t(userId ? findByUserId(meeting, userId) : undefined);\n\t\tconst grantId = takePendingGrantId(already);\n\t\tif (!grantId) return;\n\t\tpendingPanelists.delete(participantId);\n\t\tawait meeting.stage?.grantAccess?.([grantId]);\n\t\tnotifyStage();\n\t}\n\n\tlisten(meeting.self, \"videoUpdate\", rebindMedia);\n\tlisten(meeting.self, \"screenShareUpdate\", rebindMedia);\n\tlisten(meeting.self, \"audioUpdate\", rebindMedia);\n\tlisten(meeting.self, \"pinned\", notifyPinned);\n\tlisten(meeting.self, \"unpinned\", notifyPinned);\n\tconst joined = meeting.participants?.joined;\n\tlisten(joined, \"participantJoined\", (payload) => {\n\t\tvoid grantIfPending(payload);\n\t\trebindMedia();\n\t\tnotifyParticipants();\n\t\tannounceDisplayName();\n\t});\n\tlisten(meeting.participants, \"broadcastedMessage\", (payload) => {\n\t\tconst parsed = parseStudioBroadcast(payload);\n\t\tif (parsed?.type !== \"display-name\") return;\n\t\tif (parsed.participantId === meeting.self?.id) return;\n\t\tapplyDisplayName(parsed.participantId, parsed.name);\n\t});\n\tlisten(joined, \"participantLeft\", () => {\n\t\trebindMedia();\n\t\tnotifyParticipants();\n\t});\n\tlisten(joined, \"audioUpdate\", rebindMedia);\n\tlisten(joined, \"videoUpdate\", rebindMedia);\n\tlisten(joined, \"screenShareUpdate\", rebindMedia);\n\tlisten(joined, \"pinned\", notifyPinned);\n\tlisten(joined, \"unpinned\", notifyPinned);\n\tlisten(joined, \"stageStatusUpdate\", notifyStage);\n\tlisten(meeting.participants, \"waitlisted\", notifyParticipants);\n\tlisten(\n\t\tmeeting.participants?.waitlisted,\n\t\t\"participantJoined\",\n\t\tnotifyParticipants,\n\t);\n\tlisten(\n\t\tmeeting.participants?.waitlisted,\n\t\t\"participantLeft\",\n\t\tnotifyParticipants,\n\t);\n\tlisten(meeting.chat, \"chatUpdate\", notifyChat);\n\tlisten(meeting.chat, \"pinMessage\", notifyChat);\n\tlisten(meeting.chat, \"unpinMessage\", notifyChat);\n\tlisten(meeting.stage, \"stageAccessRequestUpdate\", notifyStage);\n\tlisten(meeting.stage, \"newStageRequest\", notifyStage);\n\tlisten(meeting.stage, \"stageRequestApproved\", () => {\n\t\tvoid autoJoinStage();\n\t});\n\tlisten(meeting.stage, \"stageRequestRejected\", notifyStage);\n\tlisten(meeting.stage, \"stageStatusUpdate\", (status) => {\n\t\tif (status === \"ACCEPTED_TO_JOIN_STAGE\") {\n\t\t\tvoid autoJoinStage();\n\t\t\treturn;\n\t\t}\n\t\tif (status === \"ON_STAGE\") {\n\t\t\tif (joinedStageLocally) {\n\t\t\t\tjoinedStageLocally = false;\n\t\t\t\tnotifyStage();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvoid republishCameraIfOn().then(() => {\n\t\t\t\tnotifyStage();\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tnotifyStage();\n\t});\n\n\treturn {\n\t\tasync join() {\n\t\t\tawait meeting.join?.();\n\t\t\tawait joinStageIfAllowed();\n\t\t},\n\t\tasync leave() {\n\t\t\tawait meeting.leave?.();\n\t\t},\n\t\tasync setAudioEnabled(enabled) {\n\t\t\tif (enabled) await meeting.self?.enableAudio?.();\n\t\t\telse await meeting.self?.disableAudio?.();\n\t\t},\n\t\tasync setVideoEnabled(enabled) {\n\t\t\tif (enabled) await meeting.self?.enableVideo?.();\n\t\t\telse await meeting.self?.disableVideo?.();\n\t\t},\n\t\tasync setScreenShareEnabled(enabled) {\n\t\t\tif (enabled) await meeting.self?.enableScreenShare?.();\n\t\t\telse await meeting.self?.disableScreenShare?.();\n\t\t},\n\t\tasync admit(participantId) {\n\t\t\tawait meeting.participants?.acceptWaitingRoomRequest?.(participantId);\n\t\t},\n\t\tasync deny(participantId) {\n\t\t\tawait meeting.participants?.rejectWaitingRoomRequest?.(participantId);\n\t\t},\n\t\tasync admitAs(participantId, as) {\n\t\t\tconst guest = asList(meeting.participants?.waitlisted).find(\n\t\t\t\t(row) => row.id === participantId,\n\t\t\t);\n\t\t\tif (as === \"panelist\") {\n\t\t\t\tqueuePanelist(guest, participantId);\n\t\t\t}\n\t\t\tawait meeting.participants?.acceptWaitingRoomRequest?.(participantId);\n\t\t\tif (as === \"panelist\") {\n\t\t\t\tawait grantPendingIfJoined(participantId, guest?.userId);\n\t\t\t}\n\t\t},\n\t\tasync admitAll(as) {\n\t\t\tconst waiting = asList(meeting.participants?.waitlisted);\n\t\t\tif (as === \"panelist\") {\n\t\t\t\tfor (const guest of waiting) {\n\t\t\t\t\tqueuePanelist(guest, guest.id);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst ids = waiting\n\t\t\t\t.map((guest) => guest.userId || guest.id)\n\t\t\t\t.filter(Boolean);\n\t\t\tif (ids.length === 0) return;\n\t\t\tawait meeting.participants?.acceptAllWaitingRoomRequest?.(ids);\n\t\t\tif (as === \"panelist\") {\n\t\t\t\tfor (const guest of waiting) {\n\t\t\t\t\tawait grantPendingIfJoined(guest.id, guest.userId);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tasync kick(participantId) {\n\t\t\tawait participantFor(participantId)?.kick?.();\n\t\t},\n\t\tasync disableParticipantMedia(participantId, kind: StudioHostMediaKind) {\n\t\t\tconst participant = participantFor(participantId);\n\t\t\tif (kind === \"audio\") {\n\t\t\t\tawait participant?.disableAudio?.();\n\t\t\t} else if (kind === \"video\") {\n\t\t\t\tawait participant?.disableVideo?.();\n\t\t\t} else if (kind === \"screen\") {\n\t\t\t\tawait participant?.setScreenShareEnabled?.(false);\n\t\t\t\tif (isSelfId(participantId)) {\n\t\t\t\t\tawait meeting.self?.disableScreenShare?.();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst _exhaustive: never = kind;\n\t\t\t\treturn _exhaustive;\n\t\t\t}\n\t\t\tawait meeting.participants?.broadcastMessage?.(\n\t\t\t\t\"host-media\",\n\t\t\t\t{ type: \"host-media\", kind },\n\t\t\t\t{ participantIds: [participantId] },\n\t\t\t);\n\t\t},\n\t\tasync sendBroadcast(message, target) {\n\t\t\tawait meeting.participants?.broadcastMessage?.(\n\t\t\t\tmessage.type,\n\t\t\t\tmessage,\n\t\t\t\ttarget,\n\t\t\t);\n\t\t},\n\t\tasync setStageAccess(userId, on) {\n\t\t\tconst target = findByUserId(meeting, userId);\n\t\t\tif (isRecorder(target)) return;\n\t\t\tif (on) await meeting.stage?.grantAccess?.([userId]);\n\t\t\telse await meeting.stage?.kick?.([userId]);\n\t\t\tnotifyStage();\n\t\t},\n\t\tasync denyStageAccess(userId) {\n\t\t\tawait meeting.stage?.denyAccess?.([userId]);\n\t\t\tnotifyStage();\n\t\t},\n\t\tasync requestStageAccess() {\n\t\t\tif (meeting.self?.permissions?.stageEnabled === false) return;\n\t\t\tconst status = currentStageStatus();\n\t\t\tif (status === \"ON_STAGE\" || status === \"REQUESTED_TO_JOIN_STAGE\") {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait meeting.stage?.requestAccess?.();\n\t\t\tnotifyStage();\n\t\t},\n\t\tasync joinStage() {\n\t\t\tif (meeting.self?.stageStatus === \"ON_STAGE\") {\n\t\t\t\tnotifyStage();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (meeting.self?.permissions?.stageAccess !== \"ALLOWED\") {\n\t\t\t\tawait meeting.stage?.requestAccess?.();\n\t\t\t\tnotifyStage();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst userId = meeting.self?.userId;\n\t\t\tif (userId) {\n\t\t\t\tawait meeting.stage?.grantAccess?.([userId]);\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait meeting.stage?.join?.();\n\t\t\t} catch (error) {\n\t\t\t\tnotifyStage();\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tjoinedStageLocally = true;\n\t\t\tawait republishCameraIfOn();\n\t\t\tnotifyStage();\n\t\t},\n\t\tasync leaveStage() {\n\t\t\tawait meeting.stage?.leave?.();\n\t\t\tjoinedStageLocally = false;\n\t\t\tnotifyStage();\n\t\t},\n\t\tstageStatus() {\n\t\t\treturn meeting.stage?.status ?? meeting.self?.stageStatus ?? \"ON_STAGE\";\n\t\t},\n\t\tstageRequests() {\n\t\t\tif (meeting.self?.permissions?.acceptStageRequests !== true) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst rows = meeting.stage?.getAccessRequests?.().stageRequests ?? [];\n\t\t\t\tconst out: StudioStageRequest[] = [];\n\t\t\t\tfor (const row of rows) {\n\t\t\t\t\tif (!row.userId) continue;\n\t\t\t\t\tout.push({\n\t\t\t\t\t\tuserId: row.userId,\n\t\t\t\t\t\tpeerId: row.peerId ?? \"\",\n\t\t\t\t\t\tname: row.displayName?.trim() || \"Guest\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn out;\n\t\t\t} catch {\n\t\t\t\t// Video meetings and guests without Manage Stage throw ERR2003.\n\t\t\t\treturn [];\n\t\t\t}\n\t\t},\n\t\tsubscribeStage(cb) {\n\t\t\tstageListeners.add(cb);\n\t\t\treturn () => {\n\t\t\t\tstageListeners.delete(cb);\n\t\t\t};\n\t\t},\n\t\tcanManageStage() {\n\t\t\treturn meeting.self?.permissions?.acceptStageRequests === true;\n\t\t},\n\t\tstageEnabled() {\n\t\t\treturn meeting.self?.permissions?.stageEnabled !== false;\n\t\t},\n\t\tensureStageJoined,\n\t\tasync setParticipantPinned(participantId, pinned) {\n\t\t\tif (pinned) {\n\t\t\t\tfor (const id of pinnedIdSet()) {\n\t\t\t\t\tif (id === participantId) continue;\n\t\t\t\t\tawait participantFor(id)?.unpin?.();\n\t\t\t\t}\n\t\t\t\tawait participantFor(participantId)?.pin?.();\n\t\t\t} else {\n\t\t\t\tawait participantFor(participantId)?.unpin?.();\n\t\t\t}\n\t\t\tnotifyPinned();\n\t\t},\n\t\tpinnedIds() {\n\t\t\treturn [...pinnedIdSet()];\n\t\t},\n\t\tsubscribePinned(cb) {\n\t\t\tpinListeners.add(cb);\n\t\t\treturn () => {\n\t\t\t\tpinListeners.delete(cb);\n\t\t\t};\n\t\t},\n\t\tasync setParticipantChat(participantId, enabled) {\n\t\t\tawait meeting.participants?.updatePermissions?.([participantId], {\n\t\t\t\tchat: { public: { canSend: enabled, text: enabled } },\n\t\t\t});\n\t\t\tchatSend.set(participantId, enabled);\n\t\t\tnotifyParticipants();\n\t\t},\n\t\tsubscribeParticipants(cb) {\n\t\t\tparticipantListeners.add(cb);\n\t\t\treturn () => {\n\t\t\t\tparticipantListeners.delete(cb);\n\t\t\t};\n\t\t},\n\t\tsubscribeBroadcast(cb) {\n\t\t\treturn listen(meeting.participants, \"broadcastedMessage\", (payload) => {\n\t\t\t\tconst parsed = parseStudioBroadcast(payload);\n\t\t\t\tif (parsed) cb(parsed);\n\t\t\t});\n\t\t},\n\t\tparticipants() {\n\t\t\tconst self = meeting.self;\n\t\t\tconst pinned = pinnedIdSet();\n\t\t\tconst stageEnabled = self?.permissions?.stageEnabled !== false;\n\t\t\tconst joinedRows = asList(meeting.participants?.joined)\n\t\t\t\t.filter((row) => row.id !== self?.id && !isRecorder(row))\n\t\t\t\t.map((row) =>\n\t\t\t\t\ttileFrom(\n\t\t\t\t\t\trow,\n\t\t\t\t\t\tself?.id,\n\t\t\t\t\t\tpinned,\n\t\t\t\t\t\tchatSend,\n\t\t\t\t\t\tnameOverrides,\n\t\t\t\t\t\tresolveTileStageStatus(row, stageEnabled),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\tif (self?.id && !isRecorder(self)) {\n\t\t\t\tjoinedRows.unshift(\n\t\t\t\t\ttileFrom(\n\t\t\t\t\t\tself,\n\t\t\t\t\t\tself.id,\n\t\t\t\t\t\tpinned,\n\t\t\t\t\t\tchatSend,\n\t\t\t\t\t\tnameOverrides,\n\t\t\t\t\t\tresolveTileStageStatus(self, stageEnabled, meeting.stage?.status),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn joinedRows;\n\t\t},\n\t\twaitlisted() {\n\t\t\treturn asList(meeting.participants?.waitlisted)\n\t\t\t\t.filter((row) => !isRecorder(row))\n\t\t\t\t.map((row): StudioWaitlistedGuest => ({\n\t\t\t\t\tid: row.id,\n\t\t\t\t\tuserId: row.userId ?? \"\",\n\t\t\t\t\tname: resolvedName(row, nameOverrides),\n\t\t\t\t\tpicture: row.picture ?? null,\n\t\t\t\t}));\n\t\t},\n\t\tinWaitingRoom() {\n\t\t\tconst self = meeting.self;\n\t\t\tif (isStudioRejected(self?.roomState ?? null)) return false;\n\t\t\treturn self?.roomState === \"waitlisted\" || self?.roomJoined === false;\n\t\t},\n\t\tmoderatorIds() {\n\t\t\tconst ids: string[] = [];\n\t\t\tif (meeting.self?.id && isModerator(meeting.self)) {\n\t\t\t\tids.push(meeting.self.id);\n\t\t\t}\n\t\t\tfor (const row of asList(meeting.participants?.joined)) {\n\t\t\t\tif (row.id === meeting.self?.id) continue;\n\t\t\t\tif (isModerator(row)) ids.push(row.id);\n\t\t\t}\n\t\t\treturn ids;\n\t\t},\n\t\tlocalAudioTrack() {\n\t\t\treturn meeting.self?.audioTrack ?? null;\n\t\t},\n\t\tlocalVideoTrack() {\n\t\t\treturn meeting.self?.videoTrack ?? null;\n\t\t},\n\t\tparticipantVideoTrack(participantId) {\n\t\t\treturn participantFor(participantId)?.videoTrack ?? null;\n\t\t},\n\t\tparticipantScreenTrack(participantId) {\n\t\t\treturn screenShareTrack(meeting, participantId);\n\t\t},\n\t\tactiveSpeakerId() {\n\t\t\tif (lastSpeakerId) return lastSpeakerId;\n\t\t\tconst id = meeting.participants?.lastActiveSpeaker;\n\t\t\treturn typeof id === \"string\" && id ? id : null;\n\t\t},\n\t\tsubscribeActiveSpeaker(cb) {\n\t\t\treturn listen(meeting.participants, \"activeSpeaker\", (payload) => {\n\t\t\t\tlastSpeakerId = activeSpeakerFrom(payload, lastSpeakerId);\n\t\t\t\tcb();\n\t\t\t});\n\t\t},\n\t\tscreenSharePermission() {\n\t\t\treturn screenSharePermissionFrom(meeting.self?.permissions);\n\t\t},\n\t\tsubscribePermissions(cb) {\n\t\t\treturn listen(meeting.self?.permissions, \"*\", cb);\n\t\t},\n\t\tattachVideo(participantId, el, kind: StudioVideoKind = \"camera\") {\n\t\t\tif (kind === \"screen\") {\n\t\t\t\tattachScreen(participantId, el);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tattachCamera(participantId, el);\n\t\t},\n\t\tattachAudio(participantId, el) {\n\t\t\tbindAudio(participantId, el);\n\t\t},\n\t\tsubscribeMedia(cb) {\n\t\t\tmediaListeners.add(cb);\n\t\t\treturn () => {\n\t\t\t\tmediaListeners.delete(cb);\n\t\t\t};\n\t\t},\n\t\tsubscribeRoomLeft(cb) {\n\t\t\tconst handler: RtkEventHandler = (payload) => {\n\t\t\t\tcb(roomLeftState(payload, meeting.self?.roomState ?? null));\n\t\t\t};\n\t\t\treturn listen(meeting.self, \"roomLeft\", handler);\n\t\t},\n\t\tasync sendChatMessage(text, participantIds) {\n\t\t\tconst trimmed = text.trim();\n\t\t\tif (!trimmed) return;\n\t\t\tif (participantIds?.length) {\n\t\t\t\tawait meeting.chat?.sendTextMessage?.(trimmed, participantIds);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait meeting.chat?.sendTextMessage?.(trimmed);\n\t\t},\n\t\tasync editChatMessage(id, text) {\n\t\t\tconst trimmed = text.trim();\n\t\t\tif (!trimmed) return;\n\t\t\tawait meeting.chat?.editTextMessage?.(id, trimmed);\n\t\t},\n\t\tasync deleteChatMessage(id) {\n\t\t\tawait meeting.chat?.deleteMessage?.(id);\n\t\t},\n\t\tasync pinChatMessage(id, pinned) {\n\t\t\tif (pinned) await meeting.chat?.pin?.(id);\n\t\t\telse await meeting.chat?.unpin?.(id);\n\t\t\tnotifyChat();\n\t\t},\n\t\tasync fetchChatHistory(opts = {}) {\n\t\t\tconst query = {\n\t\t\t\ttimestamp: opts.timestamp,\n\t\t\t\tlimit: 30,\n\t\t\t\tdirection: \"before\" as const,\n\t\t\t};\n\t\t\tconst rows = opts.userId\n\t\t\t\t? await meeting.chat?.fetchPrivateMessages?.({\n\t\t\t\t\t\t...query,\n\t\t\t\t\t\tuserId: opts.userId,\n\t\t\t\t\t})\n\t\t\t\t: await meeting.chat?.fetchPublicMessages?.(query);\n\t\t\tconst mapped = mapChatMessages(rows);\n\t\t\tmergeHistory(mapped);\n\t\t\tnotifyChat();\n\t\t\treturn mapped;\n\t\t},\n\t\tpinnedChatMessages() {\n\t\t\treturn allChatMessages().filter((row) => row.pinned === true);\n\t\t},\n\t\tchatMaxTextLimit() {\n\t\t\tconst limit = meeting.chat?.maxTextLimit;\n\t\t\treturn typeof limit === \"number\" && limit > 0 ? limit : 2000;\n\t\t},\n\t\tchatMessages() {\n\t\t\treturn allChatMessages();\n\t\t},\n\t\tsubscribeChat(cb) {\n\t\t\tchatListeners.add(cb);\n\t\t\treturn () => {\n\t\t\t\tchatListeners.delete(cb);\n\t\t\t};\n\t\t},\n\t\tasync listDevices() {\n\t\t\tconst self = meeting.self;\n\t\t\tconst [audio, video, speaker] = await Promise.all([\n\t\t\t\tself?.getAudioDevices?.() ?? [],\n\t\t\t\tself?.getVideoDevices?.() ?? [],\n\t\t\t\tself?.getSpeakerDevices?.() ?? [],\n\t\t\t]);\n\t\t\treturn {\n\t\t\t\taudio: asOptions(audio),\n\t\t\t\tvideo: asOptions(video),\n\t\t\t\tspeaker: asOptions(speaker),\n\t\t\t};\n\t\t},\n\t\tasync setDevice(kind: StudioDeviceKind, deviceId: string) {\n\t\t\tconst mediaKind =\n\t\t\t\tkind === \"audio\"\n\t\t\t\t\t? \"audioinput\"\n\t\t\t\t\t: kind === \"video\"\n\t\t\t\t\t\t? \"videoinput\"\n\t\t\t\t\t\t: \"audiooutput\";\n\t\t\tif (kind === \"speaker\") {\n\t\t\t\tspeakerSinkId = deviceId;\n\t\t\t\tfor (const el of audioEls.values()) applySink(el, speakerSinkId);\n\t\t\t}\n\t\t\tawait meeting.self?.setDevice?.({\n\t\t\t\tdeviceId,\n\t\t\t\tkind: mediaKind,\n\t\t\t\tlabel: \"\",\n\t\t\t\tgroupId: \"\",\n\t\t\t\ttoJSON() {\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t} as MediaDeviceInfo);\n\t\t},\n\t\tasync setDisplayName(name) {\n\t\t\tconst trimmed = name.trim().slice(0, STUDIO_DISPLAY_NAME_MAX);\n\t\t\tif (!trimmed) return;\n\t\t\tawait meeting.self?.setName?.(trimmed);\n\t\t\tif (meeting.self) meeting.self.name = trimmed;\n\t\t\tif (meeting.self?.id) nameOverrides.set(meeting.self.id, trimmed);\n\t\t\tpersistStudioGuestName(trimmed);\n\t\t\tnotifyParticipants();\n\t\t\tawait meeting.participants?.broadcastMessage?.(\n\t\t\t\t\"display-name\",\n\t\t\t\t{\n\t\t\t\t\ttype: \"display-name\",\n\t\t\t\t\tparticipantId: meeting.self?.id ?? \"\",\n\t\t\t\t\tname: trimmed,\n\t\t\t\t},\n\t\t\t\t{ presetNames: [STUDIO_MODERATOR_PRESET, STUDIO_GUEST_PRESET] },\n\t\t\t);\n\t\t},\n\t\tlivestreamState() {\n\t\t\treturn meeting.livestream?.state ?? null;\n\t\t},\n\t\troomState() {\n\t\t\treturn meeting.self?.roomState ?? null;\n\t\t},\n\t\tasync startLivestream() {\n\t\t\tconst state = meeting.livestream?.state;\n\t\t\tif (state === \"LIVESTREAMING\" || state === \"STARTING\") return;\n\t\t\tawait meeting.livestream?.start?.();\n\t\t},\n\t};\n}\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { studioMeetingFromRtk } from \"../lib/realtimekit-adapter\";\nimport type { StudioMeetingHandle } from \"../lib/meeting\";\n\nexport function useRealtimeKitMeeting(\n\tauthToken: string | null,\n\tgeneration = 0,\n) {\n\tconst [meeting, setMeeting] = useState<StudioMeetingHandle | null>(null);\n\tconst [error, setError] = useState<string | null>(null);\n\n\tuseEffect(() => {\n\t\tif (!authToken) {\n\t\t\tsetMeeting(null);\n\t\t\tsetError(null);\n\t\t\treturn;\n\t\t}\n\t\tlet cancelled = false;\n\t\tlet handle: StudioMeetingHandle | null = null;\n\t\tsetError(null);\n\n\t\tvoid (async () => {\n\t\t\ttry {\n\t\t\t\tconst { default: RealtimeKitClient } =\n\t\t\t\t\tawait import(\"@cloudflare/realtimekit\");\n\t\t\t\tconst raw = await RealtimeKitClient.init({\n\t\t\t\t\tauthToken,\n\t\t\t\t\tdefaults: { audio: false, video: false },\n\t\t\t\t});\n\t\t\t\tif (cancelled) return;\n\t\t\t\thandle = studioMeetingFromRtk(raw);\n\t\t\t\tawait handle.join();\n\t\t\t\tif (cancelled) {\n\t\t\t\t\tawait handle.leave();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tsetMeeting(handle);\n\t\t\t} catch (err) {\n\t\t\t\tif (!cancelled) {\n\t\t\t\t\tsetError(err instanceof Error ? err.message : \"Studio failed\");\n\t\t\t\t}\n\t\t\t}\n\t\t})();\n\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t\tvoid handle?.leave();\n\t\t};\n\t}, [authToken, generation]);\n\n\treturn { meeting, error };\n}\n","export type EmbedTheme = {\n\tprimary?: string;\n\tbackground?: string;\n\tforeground?: string;\n\tradius?: string;\n\tfontFamily?: string;\n\tmode?: \"light\" | \"dark\";\n};\n\nconst HEX =\n\t/^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/;\nconst COLOR_FN = /^(?:oklch|rgb|rgba|hsl|hsla)\\([0-9a-zA-Z.\\s%,./-]+\\)$/;\nconst RADIUS = /^\\d+(?:\\.\\d+)?(?:px|rem|em)$/;\nconst FONT = /^[a-zA-Z0-9\\s,\"'-]{1,120}$/;\n\nfunction sanitizeColor(value: unknown): string | undefined {\n\tif (typeof value !== \"string\") return undefined;\n\tconst trimmed = value.trim();\n\tif (HEX.test(trimmed) || COLOR_FN.test(trimmed)) return trimmed;\n\treturn undefined;\n}\n\nexport function sanitizeEmbedTheme(value: unknown): EmbedTheme | null {\n\tif (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n\t\treturn null;\n\t}\n\tconst row = value as Record<string, unknown>;\n\tconst theme: EmbedTheme = {};\n\tconst primary = sanitizeColor(row.primary);\n\tconst background = sanitizeColor(row.background);\n\tconst foreground = sanitizeColor(row.foreground);\n\tif (typeof row.radius === \"string\" && RADIUS.test(row.radius.trim())) {\n\t\ttheme.radius = row.radius.trim();\n\t}\n\tif (typeof row.fontFamily === \"string\" && FONT.test(row.fontFamily.trim())) {\n\t\ttheme.fontFamily = row.fontFamily.trim();\n\t}\n\tif (primary) theme.primary = primary;\n\tif (background) theme.background = background;\n\tif (foreground) theme.foreground = foreground;\n\tif (row.mode === \"light\" || row.mode === \"dark\") theme.mode = row.mode;\n\treturn Object.keys(theme).length > 0 ? theme : null;\n}\n\nexport function encodeEmbedTheme(theme: EmbedTheme): string {\n\tconst json = JSON.stringify(theme);\n\tconst bytes = new TextEncoder().encode(json);\n\tlet binary = \"\";\n\tfor (const byte of bytes) binary += String.fromCharCode(byte);\n\treturn btoa(binary)\n\t\t.replace(/\\+/g, \"-\")\n\t\t.replace(/\\//g, \"_\")\n\t\t.replace(/=+$/, \"\");\n}\n\nexport function embedThemeCssVars(theme: EmbedTheme): Record<string, string> {\n\tconst vars: Record<string, string> = {};\n\tif (theme.primary) {\n\t\tvars[\"--livo-primary\"] = theme.primary;\n\t\tvars[\"--primary\"] = theme.primary;\n\t}\n\tif (theme.background) {\n\t\tvars[\"--livo-background\"] = theme.background;\n\t\tvars[\"--background\"] = theme.background;\n\t}\n\tif (theme.foreground) {\n\t\tvars[\"--livo-foreground\"] = theme.foreground;\n\t\tvars[\"--foreground\"] = theme.foreground;\n\t}\n\tif (theme.radius) {\n\t\tvars[\"--livo-radius\"] = theme.radius;\n\t\tvars[\"--radius\"] = theme.radius;\n\t}\n\tif (theme.fontFamily) vars[\"--font-sans\"] = theme.fontFamily;\n\treturn vars;\n}\n\nexport function decodeEmbedTheme(\n\traw: string | null | undefined,\n): EmbedTheme | null {\n\tif (!raw) return null;\n\ttry {\n\t\tconst padded = raw.replace(/-/g, \"+\").replace(/_/g, \"/\");\n\t\tconst pad =\n\t\t\tpadded.length % 4 === 0 ? \"\" : \"=\".repeat(4 - (padded.length % 4));\n\t\tconst binary = atob(padded + pad);\n\t\tconst bytes = Uint8Array.from(binary, (char) => char.charCodeAt(0));\n\t\treturn sanitizeEmbedTheme(JSON.parse(new TextDecoder().decode(bytes)));\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nexport function applyEmbedTheme(\n\troot: HTMLElement,\n\ttheme: EmbedTheme | null,\n): void {\n\tif (!theme) return;\n\tif (theme.mode === \"dark\") root.classList.add(\"dark\");\n\tif (theme.mode === \"light\") root.classList.remove(\"dark\");\n\tfor (const [key, value] of Object.entries(embedThemeCssVars(theme))) {\n\t\troot.style.setProperty(key, value);\n\t}\n\tif (theme.fontFamily) root.style.fontFamily = theme.fontFamily;\n}\n","import { defaultApiUrl } from \"../public-api\";\nimport {\n\tparsePublicStreamStatus,\n\tparseStudioJoinStatus,\n\tparseStudioSession,\n\tstudioErrorCode,\n} from \"./lib/parse\";\nimport type { StudioSession } from \"./lib/types\";\n\nexport class StudioApiError extends Error {\n\treadonly status: number;\n\treadonly body: unknown;\n\n\tconstructor(status: number, message: string, body: unknown) {\n\t\tsuper(message);\n\t\tthis.name = \"StudioApiError\";\n\t\tthis.status = status;\n\t\tthis.body = body;\n\t}\n}\n\nasync function publicJson(\n\turl: string,\n\tinit: RequestInit,\n\tfetchFn: typeof fetch,\n): Promise<unknown> {\n\tconst res = await fetchFn(url, {\n\t\t...init,\n\t\theaders: { accept: \"application/json\", ...init.headers },\n\t\tcache: \"no-store\",\n\t});\n\tconst body: unknown = await res.json().catch(() => ({}));\n\tif (!res.ok) {\n\t\tconst message =\n\t\t\tbody &&\n\t\t\ttypeof body === \"object\" &&\n\t\t\t\"error\" in body &&\n\t\t\ttypeof (body as { error: unknown }).error === \"string\"\n\t\t\t\t? (body as { error: string }).error\n\t\t\t\t: `Studio API ${res.status}`;\n\t\tthrow new StudioApiError(res.status, message, body);\n\t}\n\treturn body;\n}\n\nexport async function redeemStudioHost(\n\ttoken: string,\n\tapiUrl = defaultApiUrl(),\n\tfetchFn: typeof fetch = fetch,\n): Promise<StudioSession> {\n\tconst body = await publicJson(\n\t\t`${apiUrl.replace(/\\/$/, \"\")}/public/studio/host/${encodeURIComponent(token)}`,\n\t\t{ method: \"POST\" },\n\t\tfetchFn,\n\t);\n\tconst parsed = parseStudioSession(body);\n\tif (!parsed) throw new StudioApiError(502, \"Could not open studio\", body);\n\treturn parsed;\n}\n\nexport async function joinStudioGuest(\n\ttoken: string,\n\tinput: { displayName: string; guestId: string },\n\tapiUrl = defaultApiUrl(),\n\tfetchFn: typeof fetch = fetch,\n): Promise<StudioSession> {\n\tconst body = await publicJson(\n\t\t`${apiUrl.replace(/\\/$/, \"\")}/public/studio/join/${encodeURIComponent(token)}`,\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\tbody: JSON.stringify(input),\n\t\t\theaders: { \"content-type\": \"application/json\" },\n\t\t},\n\t\tfetchFn,\n\t);\n\tconst parsed = parseStudioSession(body);\n\tif (!parsed) throw new StudioApiError(502, \"Could not join studio\", body);\n\treturn parsed;\n}\n\nexport async function getStudioJoinStatus(\n\ttoken: string,\n\tapiUrl = defaultApiUrl(),\n\tfetchFn: typeof fetch = fetch,\n): Promise<{ ready: boolean; streamStatus: string | null } | \"ended\"> {\n\ttry {\n\t\tconst body = await publicJson(\n\t\t\t`${apiUrl.replace(/\\/$/, \"\")}/public/studio/join/${encodeURIComponent(token)}/status`,\n\t\t\t{},\n\t\t\tfetchFn,\n\t\t);\n\t\tconst parsed = parseStudioJoinStatus(body);\n\t\tif (!parsed) {\n\t\t\tthrow new StudioApiError(502, \"Could not check studio\", body);\n\t\t}\n\t\treturn parsed;\n\t} catch (error) {\n\t\tif (\n\t\t\terror instanceof StudioApiError &&\n\t\t\t(error.status === 404 || error.status === 410)\n\t\t) {\n\t\t\treturn \"ended\";\n\t\t}\n\t\tthrow error;\n\t}\n}\n\nexport async function getPublicStreamStatus(\n\tstreamId: string,\n\tapiUrl = defaultApiUrl(),\n\tfetchFn: typeof fetch = fetch,\n): Promise<string | null> {\n\ttry {\n\t\tconst body = await publicJson(\n\t\t\t`${apiUrl.replace(/\\/$/, \"\")}/public/streams/${encodeURIComponent(streamId)}`,\n\t\t\t{},\n\t\t\tfetchFn,\n\t\t);\n\t\treturn parsePublicStreamStatus(body);\n\t} catch (error) {\n\t\tif (\n\t\t\terror instanceof StudioApiError &&\n\t\t\t(error.status === 404 || error.status === 410)\n\t\t) {\n\t\t\treturn \"ended\";\n\t\t}\n\t\treturn null;\n\t}\n}\n\nexport { studioErrorCode };\n","\"use client\";\n\nimport { useEffect, useMemo, useState, type ReactNode } from \"react\";\nimport { controlActionsFromClient, createStudioControlClient } from \"./control\";\nimport { StudioRoom } from \"./components/studio-room\";\nimport { StudioSkeleton } from \"./components/studio-skeleton\";\nimport { usePrefersReducedMotion } from \"./hooks/use-prefers-reduced-motion\";\nimport { useRealtimeKitMeeting } from \"./hooks/use-realtimekit-meeting\";\nimport type { StudioRoomLabels } from \"./lib/labels\";\nimport type { StudioSession } from \"./lib/types\";\nimport { applyEmbedTheme, decodeEmbedTheme } from \"../theme\";\nimport { redeemStudioHost } from \"./public-session\";\n\nconst POLL_INTERVAL_MS = 5_000;\n\nexport function LivoHostStudio({\n\ttoken,\n\tapiUrl,\n\tlabels,\n\tredeemError = \"Could not open studio\",\n\tembed = false,\n\tchrome,\n\tplayerOrigin,\n\ttheme,\n}: {\n\ttoken: string;\n\tapiUrl?: string;\n\tlabels: StudioRoomLabels;\n\tredeemError?: string;\n\tembed?: boolean;\n\tchrome?: ReactNode;\n\tplayerOrigin?: string;\n\ttheme?: string | null;\n}) {\n\tconst reducedMotion = usePrefersReducedMotion();\n\tconst [session, setSession] = useState<StudioSession | null>(null);\n\tconst [status, setStatus] = useState<string | null>(null);\n\tconst [error, setError] = useState<string | null>(null);\n\tconst { meeting, error: meetingError } = useRealtimeKitMeeting(\n\t\tsession?.authToken ?? null,\n\t);\n\tconst client = useMemo(() => {\n\t\tconst controlToken = session?.studioControlToken;\n\t\tif (!controlToken) return null;\n\t\treturn createStudioControlClient({ token: controlToken, apiUrl });\n\t}, [apiUrl, session?.studioControlToken]);\n\tconst control = useMemo(\n\t\t() => (client ? controlActionsFromClient(client) : null),\n\t\t[client],\n\t);\n\n\tuseEffect(() => {\n\t\tapplyEmbedTheme(document.documentElement, decodeEmbedTheme(theme));\n\t}, [theme]);\n\n\tuseEffect(() => {\n\t\tlet cancelled = false;\n\t\tvoid redeemStudioHost(token, apiUrl)\n\t\t\t.then((next) => {\n\t\t\t\tif (!cancelled) setSession(next);\n\t\t\t})\n\t\t\t.catch((err: unknown) => {\n\t\t\t\tif (!cancelled) {\n\t\t\t\t\tsetError(err instanceof Error ? err.message : redeemError);\n\t\t\t\t}\n\t\t\t});\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t};\n\t}, [apiUrl, redeemError, token]);\n\n\tuseEffect(() => {\n\t\tif (!client) return;\n\t\tif (status === \"ended\" || status === \"error\") return;\n\t\tlet cancelled = false;\n\t\tconst poll = async () => {\n\t\t\ttry {\n\t\t\t\tconst next = await client.state();\n\t\t\t\tif (!cancelled) setStatus(next.stream.status);\n\t\t\t} catch {\n\t\t\t\treturn;\n\t\t\t}\n\t\t};\n\t\tvoid poll();\n\t\tconst id = window.setInterval(() => void poll(), POLL_INTERVAL_MS);\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t\twindow.clearInterval(id);\n\t\t};\n\t}, [client, status]);\n\n\tconst liveSession = useMemo(() => {\n\t\tif (!session) return null;\n\t\tif (!status) return session;\n\t\treturn {\n\t\t\t...session,\n\t\t\tstream: {\n\t\t\t\t...session.stream,\n\t\t\t\tstatus,\n\t\t\t},\n\t\t};\n\t}, [session, status]);\n\n\tif (error || meetingError) {\n\t\treturn (\n\t\t\t<p className=\"text-destructive p-6\" role=\"alert\">\n\t\t\t\t{error ?? meetingError}\n\t\t\t</p>\n\t\t);\n\t}\n\tif (!liveSession || !meeting || !control) {\n\t\treturn <StudioSkeleton />;\n\t}\n\n\treturn (\n\t\t<StudioRoom\n\t\t\tsession={liveSession}\n\t\t\tmeeting={meeting}\n\t\t\tcontrol={control}\n\t\t\treducedMotion={reducedMotion}\n\t\t\tlabels={labels}\n\t\t\tembed={embed}\n\t\t\tchrome={chrome}\n\t\t\tplayerOrigin={playerOrigin}\n\t\t/>\n\t);\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { StudioGuestLobby } from \"./components/studio-guest-lobby\";\nimport { StudioRoom } from \"./components/studio-room\";\nimport { usePrefersReducedMotion } from \"./hooks/use-prefers-reduced-motion\";\nimport { useRealtimeKitMeeting } from \"./hooks/use-realtimekit-meeting\";\nimport {\n\tpersistStudioDeviceSelection,\n\treadStudioDeviceSelection,\n\ttype StudioDeviceSelection,\n} from \"./lib/devices\";\nimport {\n\tpersistStudioGuestName,\n\treadStudioGuestIdentity,\n} from \"./lib/guest-identity\";\nimport type { StudioRoomLabels } from \"./lib/labels\";\nimport type { StudioDeviceKind } from \"./lib/meeting\";\nimport type { StudioSession } from \"./lib/types\";\nimport { applyEmbedTheme, decodeEmbedTheme } from \"../theme\";\nimport {\n\tgetPublicStreamStatus,\n\tgetStudioJoinStatus,\n\tjoinStudioGuest,\n\tStudioApiError,\n\tstudioErrorCode,\n} from \"./public-session\";\n\nconst POLL_INTERVAL_MS = 5_000;\nconst PREVIEW_POLL_INTERVAL_MS = 2_000;\n\nexport type StudioLobbyLabels = {\n\ttitle: string;\n\thint: string;\n\tname: string;\n\tjoin: string;\n\twaitingForHost: string;\n\tcamera: string;\n\tmic: string;\n\tcameraDevice?: string;\n\tmicDevice?: string;\n\tspeakerDevice?: string;\n\ttestSpeaker?: string;\n\ttestSpeakerError?: string;\n\tcameraOff?: string;\n\tjoinError: string;\n\tjoinBusy: string;\n\tendedTitle: string;\n};\n\nexport function LivoGuestStudio({\n\ttoken,\n\tapiUrl,\n\tlabels,\n\tlobbyLabels,\n\tembed = false,\n\tplayerOrigin,\n\ttheme,\n}: {\n\ttoken: string;\n\tapiUrl?: string;\n\tlabels: StudioRoomLabels;\n\tlobbyLabels: StudioLobbyLabels;\n\tembed?: boolean;\n\tplayerOrigin?: string;\n\ttheme?: string | null;\n}) {\n\tconst reducedMotion = usePrefersReducedMotion();\n\tconst [session, setSession] = useState<StudioSession | null>(null);\n\tconst [status, setStatus] = useState<string | null>(null);\n\tconst [error, setError] = useState<string | null>(null);\n\tconst [displayName, setDisplayName] = useState(\"\");\n\tconst [guestId, setGuestId] = useState(\"\");\n\tconst [joining, setJoining] = useState(false);\n\tconst [waitingForHost, setWaitingForHost] = useState(false);\n\tconst [cameraOn, setCameraOn] = useState(true);\n\tconst [muted, setMuted] = useState(false);\n\tconst [deviceSelection, setDeviceSelection] = useState<StudioDeviceSelection>(\n\t\t() => readStudioDeviceSelection(),\n\t);\n\tconst [retryAfterMs, setRetryAfterMs] = useState<number | null>(null);\n\tconst [sessionGen, setSessionGen] = useState(0);\n\tconst joinInFlight = useRef(false);\n\tconst { meeting, error: meetingError } = useRealtimeKitMeeting(\n\t\tsession?.authToken ?? null,\n\t\tsessionGen,\n\t);\n\n\tuseEffect(() => {\n\t\tapplyEmbedTheme(document.documentElement, decodeEmbedTheme(theme));\n\t}, [theme]);\n\n\tuseEffect(() => {\n\t\tconst identity = readStudioGuestIdentity();\n\t\tsetDisplayName(identity.displayName);\n\t\tsetGuestId(identity.guestId);\n\t\tsetDeviceSelection(readStudioDeviceSelection());\n\t}, []);\n\n\tconst onDeviceChange = useCallback(\n\t\t(kind: StudioDeviceKind, deviceId: string) => {\n\t\t\tpersistStudioDeviceSelection(kind, deviceId);\n\t\t\tsetDeviceSelection((prev) => ({ ...prev, [kind]: deviceId }));\n\t\t},\n\t\t[],\n\t);\n\n\tconst join = useCallback(async () => {\n\t\tif (joinInFlight.current) return;\n\t\tconst name = displayName.trim();\n\t\tif (!name || !guestId) return;\n\t\tpersistStudioGuestName(name);\n\t\tjoinInFlight.current = true;\n\t\tsetJoining(true);\n\t\tsetError(null);\n\t\ttry {\n\t\t\tconst next = await joinStudioGuest(\n\t\t\t\ttoken,\n\t\t\t\t{ displayName: name, guestId },\n\t\t\t\tapiUrl,\n\t\t\t);\n\t\t\tsetWaitingForHost(false);\n\t\t\tsetRetryAfterMs(null);\n\t\t\tsetStatus(null);\n\t\t\tsetSession(next);\n\t\t} catch (err: unknown) {\n\t\t\tconst code = studioErrorCode(err);\n\t\t\tif (code === \"studio_not_started\") {\n\t\t\t\tsetWaitingForHost(true);\n\t\t\t\tsetError(null);\n\t\t\t} else if (err instanceof StudioApiError && err.status === 429) {\n\t\t\t\tsetError(lobbyLabels.joinBusy);\n\t\t\t\tsetRetryAfterMs(15_000);\n\t\t\t} else if (err instanceof StudioApiError && err.status === 404) {\n\t\t\t\tsetError(lobbyLabels.endedTitle);\n\t\t\t\tsetWaitingForHost(false);\n\t\t\t} else {\n\t\t\t\tsetError(err instanceof Error ? err.message : lobbyLabels.joinError);\n\t\t\t\tsetWaitingForHost(false);\n\t\t\t}\n\t\t} finally {\n\t\t\tjoinInFlight.current = false;\n\t\t\tsetJoining(false);\n\t\t}\n\t}, [apiUrl, displayName, guestId, lobbyLabels, token]);\n\n\tuseEffect(() => {\n\t\tif (!waitingForHost) return;\n\t\tlet cancelled = false;\n\t\tconst poll = async () => {\n\t\t\ttry {\n\t\t\t\tconst next = await getStudioJoinStatus(token, apiUrl);\n\t\t\t\tif (cancelled) return;\n\t\t\t\tif (next === \"ended\") {\n\t\t\t\t\tsetError(lobbyLabels.endedTitle);\n\t\t\t\t\tsetWaitingForHost(false);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (next.ready) void join();\n\t\t\t} catch {\n\t\t\t\treturn;\n\t\t\t}\n\t\t};\n\t\tvoid poll();\n\t\tconst id = window.setInterval(() => {\n\t\t\tvoid poll();\n\t\t}, POLL_INTERVAL_MS);\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t\twindow.clearInterval(id);\n\t\t};\n\t}, [apiUrl, join, lobbyLabels.endedTitle, token, waitingForHost]);\n\n\tuseEffect(() => {\n\t\tif (!session) return;\n\t\tconst current = status ?? session.stream.status;\n\t\tif (current === \"ended\" || current === \"error\") return;\n\t\tlet cancelled = false;\n\t\tconst poll = async () => {\n\t\t\tconst next = await getPublicStreamStatus(session.stream.id, apiUrl);\n\t\t\tif (!cancelled && next) setStatus(next);\n\t\t};\n\t\tvoid poll();\n\t\tconst intervalMs =\n\t\t\tcurrent === \"public\" ? POLL_INTERVAL_MS : PREVIEW_POLL_INTERVAL_MS;\n\t\tconst id = window.setInterval(() => void poll(), intervalMs);\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t\twindow.clearInterval(id);\n\t\t};\n\t}, [apiUrl, session, status]);\n\n\tconst liveSession = useMemo(() => {\n\t\tif (!session) return null;\n\t\tif (!status) return session;\n\t\treturn {\n\t\t\t...session,\n\t\t\tstream: { ...session.stream, status },\n\t\t};\n\t}, [session, status]);\n\n\tuseEffect(() => {\n\t\tif (retryAfterMs == null) return;\n\t\tconst id = window.setTimeout(() => {\n\t\t\tsetRetryAfterMs(null);\n\t\t\tsetError(null);\n\t\t\tvoid join();\n\t\t}, retryAfterMs);\n\t\treturn () => window.clearTimeout(id);\n\t}, [join, retryAfterMs]);\n\n\tif (meetingError) {\n\t\treturn (\n\t\t\t<p className=\"text-destructive p-6\" role=\"alert\">\n\t\t\t\t{meetingError}\n\t\t\t</p>\n\t\t);\n\t}\n\tif (!liveSession || !meeting) {\n\t\treturn (\n\t\t\t<StudioGuestLobby\n\t\t\t\treducedMotion={reducedMotion}\n\t\t\t\tcameraOn={cameraOn}\n\t\t\t\tmuted={muted}\n\t\t\t\tdisplayName={displayName}\n\t\t\t\tshowName\n\t\t\t\tjoining={joining}\n\t\t\t\twaitingForHost={waitingForHost}\n\t\t\t\terror={error}\n\t\t\t\tlabels={lobbyLabels}\n\t\t\t\tsavedDevices={deviceSelection}\n\t\t\t\tonCameraChange={setCameraOn}\n\t\t\t\tonMutedChange={setMuted}\n\t\t\t\tonDisplayNameChange={setDisplayName}\n\t\t\t\tonDeviceChange={onDeviceChange}\n\t\t\t\tonJoin={() => void join()}\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn (\n\t\t<StudioRoom\n\t\t\tsession={liveSession}\n\t\t\tmeeting={meeting}\n\t\t\tcontrol={{\n\t\t\t\tlivestream: async () => \"starting\",\n\t\t\t\tpublish: async () => undefined,\n\t\t\t\tstop: async () => undefined,\n\t\t\t}}\n\t\t\tonRejoin={() => {\n\t\t\t\tsetSession(null);\n\t\t\t\tsetStatus(null);\n\t\t\t\tsetSessionGen((n) => n + 1);\n\t\t\t\tsetJoining(false);\n\t\t\t\tsetWaitingForHost(false);\n\t\t\t\tsetError(null);\n\t\t\t\tjoinInFlight.current = false;\n\t\t\t}}\n\t\t\treducedMotion={reducedMotion}\n\t\t\tlabels={labels}\n\t\t\tembed={embed}\n\t\t\tplayerOrigin={playerOrigin}\n\t\t\tinitialCameraOn={cameraOn}\n\t\t\tinitialMuted={muted}\n\t\t\tinitialDevices={deviceSelection}\n\t\t/>\n\t);\n}\n","export type StudioRoomLabels = ReturnType<typeof studioRoomLabels>;\n\nexport function studioRoomLabels(\n\tt: (key: string, values?: Record<string, string>) => string,\n) {\n\treturn {\n\t\tlive: t(\"live\"),\n\t\tpreview: t(\"preview\"),\n\t\twaiting: t(\"waiting\"),\n\t\twaitingHost: t(\"waitingHost\"),\n\t\tadmit: t(\"admit\"),\n\t\tdeny: t(\"deny\"),\n\t\tdenied: t(\"denied\"),\n\t\tdenyError: t(\"denyError\"),\n\t\trejectedTitle: t(\"rejectedTitle\"),\n\t\trejectedDescription: t(\"rejectedDescription\"),\n\t\trejectedAction: t(\"rejectedAction\"),\n\t\tkick: t(\"kick\"),\n\t\tcamera: t(\"camera\"),\n\t\tscreen: t(\"screen\"),\n\t\tmute: t(\"mute\"),\n\t\tunmute: t(\"unmute\"),\n\t\tcopyLink: t(\"copyLink\"),\n\t\tshareLink: t(\"shareLink\"),\n\t\tshareGuestText: t(\"shareGuestText\", { title: \"{title}\" }),\n\t\tshareFailed: t(\"shareFailed\"),\n\t\tcopied: t(\"copied\"),\n\t\tpublish: t(\"publish\"),\n\t\tpublishTitle: t(\"publishTitle\"),\n\t\tpublishDescription: t(\"publishDescription\"),\n\t\tpublishConfirm: t(\"publishConfirm\"),\n\t\tpublishPending: t(\"publishPending\"),\n\t\tstop: t(\"stop\"),\n\t\tstopTitle: t(\"stopTitle\"),\n\t\tstopDescription: t(\"stopDescription\"),\n\t\tstopConfirm: t(\"stopConfirm\"),\n\t\tfullscreen: t(\"fullscreen\"),\n\t\tpublishError: t(\"publishError\"),\n\t\tstopError: t(\"stopError\"),\n\t\tpublished: t(\"published\"),\n\t\tstopped: t(\"stopped\"),\n\t\tcameraDevice: t(\"cameraDevice\"),\n\t\tmicDevice: t(\"micDevice\"),\n\t\tspeakerDevice: t(\"speakerDevice\"),\n\t\tpreflightCamera: t(\"preflightCamera\"),\n\t\tpreflightMic: t(\"preflightMic\"),\n\t\tknock: t(\"knock\", { name: \"{name}\" }),\n\t\tegressLost: t(\"egressLost\"),\n\t\tlivestreamStarting: t(\"livestreamStarting\"),\n\t\tlivestreamSending: t(\"livestreamSending\"),\n\t\tlivestreamInitializing: t(\"livestreamInitializing\"),\n\t\tlivestreamRetry: t(\"livestreamRetry\"),\n\t\tlivestreamError: t(\"livestreamError\"),\n\t\tscreenBusy: t(\"screenBusy\"),\n\t\tendedTitle: t(\"endedTitle\"),\n\t\tendedDescription: t(\"endedDescription\"),\n\t\tendedAction: t(\"endedAction\"),\n\t\trejoin: t(\"rejoin\"),\n\t\tduplicateTitle: t(\"duplicateTitle\"),\n\t\tduplicateDescription: t(\"duplicateDescription\"),\n\t\tduplicateDescriptionNoTakeover: t(\"duplicateDescriptionNoTakeover\"),\n\t\tduplicateAction: t(\"duplicateAction\"),\n\t\tduplicateTakenOver: t(\"duplicateTakenOver\"),\n\t\tjoinBusy: t(\"joinBusy\"),\n\t\tcameraError: t(\"cameraError\"),\n\t\tscreenError: t(\"screenError\"),\n\t\tleave: t(\"leave\"),\n\t\tleaveTitle: t(\"leaveTitle\"),\n\t\tleaveDescription: t(\"leaveDescription\"),\n\t\tleaveConfirm: t(\"leaveConfirm\"),\n\t\tchat: t(\"chat\"),\n\t\tchatSend: t(\"chatSend\"),\n\t\tchatPlaceholder: t(\"chatPlaceholder\"),\n\t\tchatError: t(\"chatError\"),\n\t\tsettings: t(\"settings\"),\n\t\tsettingsTitle: t(\"settingsTitle\"),\n\t\tsettingsDescription: t(\"settingsDescription\"),\n\t\tguestName: t(\"guestName\"),\n\t\tdisplayNameSave: t(\"displayNameSave\"),\n\t\tdisplayNameSaved: t(\"displayNameSaved\"),\n\t\tdisplayNameError: t(\"displayNameError\"),\n\t\ttestSpeaker: t(\"testSpeaker\"),\n\t\ttestSpeakerError: t(\"testSpeakerError\"),\n\t\tcameraOff: t(\"cameraOff\"),\n\t\tmicLevel: t(\"micLevel\"),\n\t\tshare: t(\"share\"),\n\t\tshareCopied: t(\"shareCopied\"),\n\t\tstopCamera: t(\"stopCamera\"),\n\t\tstopScreen: t(\"stopScreen\"),\n\t\thostMutedYou: t(\"hostMutedYou\"),\n\t\thostStoppedYourCamera: t(\"hostStoppedYourCamera\"),\n\t\thostStoppedYourScreen: t(\"hostStoppedYourScreen\"),\n\t\thostMediaError: t(\"hostMediaError\"),\n\t\ttileMenu: t(\"tileMenu\"),\n\t\topenPip: t(\"openPip\"),\n\t\tclosePip: t(\"closePip\"),\n\t\tbackToStudio: t(\"backToStudio\"),\n\t\tpipTitle: t(\"pipTitle\"),\n\t\tpipError: t(\"pipError\"),\n\t\tscreenUnsupportedDevice: t(\"screenUnsupportedDevice\"),\n\t\tscreenNotAllowed: t(\"screenNotAllowed\"),\n\t\taskToShare: t(\"askToShare\"),\n\t\tshareRequested: t(\"shareRequested\"),\n\t\tcancelShareRequest: t(\"cancelShareRequest\"),\n\t\tshareRequestSent: t(\"shareRequestSent\"),\n\t\tshareRequestFrom: t(\"shareRequestFrom\", { name: \"{name}\" }),\n\t\tapprove: t(\"approve\"),\n\t\tshareApproved: t(\"shareApproved\"),\n\t\tshareDenied: t(\"shareDenied\"),\n\t\tshareRequestError: t(\"shareRequestError\"),\n\t\tshareRequestTimeout: t(\"shareRequestTimeout\"),\n\t\tshareRespondError: t(\"shareRespondError\"),\n\t\tgoOffAir: t(\"goOffAir\"),\n\t\tgoOnAir: t(\"goOnAir\"),\n\t\ttakeOffAir: t(\"takeOffAir\"),\n\t\tbringOnAir: t(\"bringOnAir\"),\n\t\toffAir: t(\"offAir\"),\n\t\toffAirCount: t(\"offAirCount\", { count: \"{count}\" }),\n\t\toffAirBanner: t(\"offAirBanner\"),\n\t\toffAirLastVisible: t(\"offAirLastVisible\"),\n\t\toffAirHidden: t(\"offAirHidden\"),\n\t\toffAirShown: t(\"offAirShown\"),\n\t\toffAirError: t(\"offAirError\"),\n\t\ttakeOffAirTitle: t(\"takeOffAirTitle\"),\n\t\ttakeOffAirDescription: t(\"takeOffAirDescription\"),\n\t\ttakeOffAirConfirm: t(\"takeOffAirConfirm\"),\n\t\tadmitAsPanelist: t(\"admitAsPanelist\"),\n\t\tadmitAsAudience: t(\"admitAsAudience\"),\n\t\tadmitAllPanelists: t(\"admitAllPanelists\"),\n\t\tadmitAllAudience: t(\"admitAllAudience\"),\n\t\taskToGoOnAir: t(\"askToGoOnAir\"),\n\t\tstageRequested: t(\"stageRequested\"),\n\t\tstageApproved: t(\"stageApproved\"),\n\t\tstageDenied: t(\"stageDenied\"),\n\t\tstageRequests: t(\"stageRequests\"),\n\t\tpeople: t(\"people\"),\n\t\tpanelists: t(\"panelists\"),\n\t\taudience: t(\"audience\"),\n\t\tnoWaiting: t(\"noWaiting\"),\n\t\tnoPanelists: t(\"noPanelists\"),\n\t\tnoAudience: t(\"noAudience\"),\n\t\tclosePanel: t(\"closePanel\"),\n\t\tmuteChat: t(\"muteChat\"),\n\t\tallowChat: t(\"allowChat\"),\n\t\tpin: t(\"pin\"),\n\t\tunpin: t(\"unpin\"),\n\t\tpinnedToast: t(\"pinnedToast\"),\n\t\tunpinnedToast: t(\"unpinnedToast\"),\n\t\tpinError: t(\"pinError\"),\n\t\tkickTitle: t(\"kickTitle\"),\n\t\tkickDescription: t(\"kickDescription\"),\n\t\tkickConfirm: t(\"kickConfirm\"),\n\t\tkickError: t(\"kickError\"),\n\t\tstageError: t(\"stageError\"),\n\t\tstageDisabled: t(\"stageDisabled\"),\n\t\tstageGrantNoEffect: t(\"stageGrantNoEffect\"),\n\t\tstageOverflow: t(\"stageOverflow\", { count: \"{count}\" }),\n\t\tchatEveryone: t(\"chatEveryone\"),\n\t\tchatEdited: t(\"chatEdited\"),\n\t\tchatPinned: t(\"chatPinned\"),\n\t\tchatLoadOlder: t(\"chatLoadOlder\"),\n\t\tchatRateLimited: t(\"chatRateLimited\"),\n\t\tchatDelete: t(\"chatDelete\"),\n\t\tchatEdit: t(\"chatEdit\"),\n\t\tchatPin: t(\"chatPin\"),\n\t\tchatUnpin: t(\"chatUnpin\"),\n\t\tchatSave: t(\"chatSave\"),\n\t\twaitingSkeleton: t(\"waitingSkeleton\"),\n\t};\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/public-api.ts","../../src/studio/control.ts","../../src/studio/lib/cn.ts","../../src/studio/ui/button.tsx","../../src/studio/ui/alert-dialog.tsx","../../src/studio/ui/confirm-action.tsx","../../src/studio/hooks/use-before-unload.ts","../../src/studio/hooks/use-document-picture-in-picture.ts","../../src/studio/hooks/use-wake-lock.ts","../../src/studio/ui/empty-state.tsx","../../src/studio/lib/meeting.ts","../../src/studio/lib/screen-share-support.ts","../../src/studio/lib/parse.ts","../../src/studio/lib/studio-sounds.ts","../../src/studio/lib/bridge.ts","../../src/studio/lib/embed-urls.ts","../../src/studio/lib/clipboard.ts","../../src/studio/lib/share.ts","../../src/studio/lib/status.ts","../../src/studio/lib/window-lock.ts","../../src/studio/hooks/use-studio-window-lock.ts","../../src/studio/components/studio-skeleton.tsx","../../src/studio/components/studio-window-gate.tsx","../../src/studio/lib/devices.ts","../../src/studio/components/audio-waveform.tsx","../../src/studio/ui/tooltip.tsx","../../src/studio/components/studio-control-icon.tsx","../../src/studio/ui/dialog.tsx","../../src/studio/ui/input.tsx","../../src/studio/ui/label.tsx","../../src/studio/hooks/use-media-devices.ts","../../src/studio/lib/speaker-test.ts","../../src/studio/components/studio-device-select.tsx","../../src/studio/components/studio-settings-dialog.tsx","../../src/studio/components/studio-guest-waiting.tsx","../../src/studio/components/studio-live-badge.tsx","../../src/studio/ui/badge.tsx","../../src/studio/components/studio-pip-panel.tsx","../../src/studio/components/studio-remote-audio.tsx","../../src/studio/ui/bubble.tsx","../../src/studio/lib/chat-groups.ts","../../src/studio/components/studio-chat-panel.tsx","../../src/studio/components/studio-waiting-room.tsx","../../src/studio/components/studio-side-panel.tsx","../../src/studio/ui/dropdown-menu.tsx","../../src/studio/components/studio-tile-menu.tsx","../../src/studio/components/studio-tile.tsx","../../src/studio/components/studio-stage.tsx","../../src/studio/components/studio-toolbar.tsx","../../src/studio/components/studio-room.tsx","../../src/studio/components/studio-device-preflight.tsx","../../src/studio/components/studio-guest-lobby.tsx","../../src/studio/hooks/use-prefers-reduced-motion.ts","../../src/studio/lib/guest-identity.ts","../../src/studio/lib/realtimekit-adapter.ts","../../src/studio/hooks/use-realtimekit-meeting.ts","../../src/theme.ts","../../src/studio/public-session.ts","../../src/studio/host.tsx","../../src/studio/guest.tsx","../../src/studio/lib/labels.ts"],"names":["ButtonPrimitive","jsx","jsxs","useEffect","useState","useRef","useCallback","ctx","TooltipPrimitive","InputPrimitive","Mic","Video","cva","Fragment","MicOff","VideoOff","isModerator","toast","X","MenuPrimitive","MonitorUp","Settings","self","useMemo","Loader2","defaultStorage","joined","POLL_INTERVAL_MS"],"mappings":"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","file":"index.js","sourcesContent":["export type PublicStream = {\n\tid: string;\n\ttitle: string;\n\tstatus: string;\n\tplaybackUrl: string | null;\n\tposterUrl?: string | null;\n\tcaptionsUrl: string | null;\n\tviewers: number;\n\tstartsAt: number | null;\n\tdurationSeconds: number | null;\n\torganization: { name: string | null; image: string | null };\n\tcurtain: PublicCurtain | null;\n};\n\nexport type PublicCurtain = {\n\tkind: \"image\" | \"video\" | \"shader\";\n\turl: string;\n\thideBranding: boolean;\n\thideStatus: boolean;\n\tconfig?: Record<string, unknown>;\n\tenvBasePath?: string;\n};\n\nexport type PublicVod = {\n\tid: string;\n\ttitle: string;\n\tstatus: string;\n\tplaybackUrl: string | null;\n\tposterUrl: string | null;\n\tcurtain: PublicCurtain | null;\n\tcaptionsEnabled: boolean;\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function defaultApiUrl(): string {\n\treturn \"https://media-svc.livo.tv\";\n}\n\nexport function parsePublicStream(value: unknown): PublicStream | null {\n\tif (!isRecord(value) || typeof value.id !== \"string\") return null;\n\tif (typeof value.title !== \"string\" || typeof value.status !== \"string\") {\n\t\treturn null;\n\t}\n\tconst organization = isRecord(value.organization)\n\t\t? {\n\t\t\t\tname:\n\t\t\t\t\ttypeof value.organization.name === \"string\"\n\t\t\t\t\t\t? value.organization.name\n\t\t\t\t\t\t: null,\n\t\t\t\timage:\n\t\t\t\t\ttypeof value.organization.image === \"string\"\n\t\t\t\t\t\t? value.organization.image\n\t\t\t\t\t\t: null,\n\t\t\t}\n\t\t: { name: null, image: null };\n\treturn {\n\t\tid: value.id,\n\t\ttitle: value.title,\n\t\tstatus: value.status,\n\t\tplaybackUrl:\n\t\t\ttypeof value.playbackUrl === \"string\" ? value.playbackUrl : null,\n\t\tposterUrl: typeof value.posterUrl === \"string\" ? value.posterUrl : null,\n\t\tcaptionsUrl:\n\t\t\ttypeof value.captionsUrl === \"string\" ? value.captionsUrl : null,\n\t\tviewers: typeof value.viewers === \"number\" ? value.viewers : 0,\n\t\tstartsAt: typeof value.startsAt === \"number\" ? value.startsAt : null,\n\t\tdurationSeconds:\n\t\t\ttypeof value.durationSeconds === \"number\" ? value.durationSeconds : null,\n\t\torganization,\n\t\tcurtain: parsePublicCurtain(value.curtain),\n\t};\n}\n\nfunction parsePublicCurtain(value: unknown): PublicCurtain | null {\n\tif (!isRecord(value) || typeof value.url !== \"string\") return null;\n\tconst kind =\n\t\tvalue.kind === \"video\"\n\t\t\t? \"video\"\n\t\t\t: value.kind === \"shader\"\n\t\t\t\t? \"shader\"\n\t\t\t\t: value.kind === \"image\"\n\t\t\t\t\t? \"image\"\n\t\t\t\t\t: null;\n\tif (!kind) return null;\n\treturn {\n\t\tkind,\n\t\turl: value.url,\n\t\thideBranding: value.hideBranding === true,\n\t\thideStatus: value.hideStatus === true,\n\t\tconfig: isRecord(value.config) ? value.config : undefined,\n\t\tenvBasePath:\n\t\t\ttypeof value.envBasePath === \"string\" ? value.envBasePath : undefined,\n\t};\n}\n\nexport function parsePublicVod(value: unknown): PublicVod | null {\n\tif (!isRecord(value) || typeof value.id !== \"string\") return null;\n\tif (typeof value.title !== \"string\" || typeof value.status !== \"string\") {\n\t\treturn null;\n\t}\n\treturn {\n\t\tid: value.id,\n\t\ttitle: value.title,\n\t\tstatus: value.status,\n\t\tplaybackUrl:\n\t\t\ttypeof value.playbackUrl === \"string\" ? value.playbackUrl : null,\n\t\tposterUrl: typeof value.posterUrl === \"string\" ? value.posterUrl : null,\n\t\tcurtain: parsePublicCurtain(value.curtain),\n\t\tcaptionsEnabled: value.captionsEnabled === true,\n\t};\n}\n\nexport async function fetchPublicStream(\n\tapiUrl: string,\n\tstreamId: string,\n\tfetchFn: typeof fetch = fetch,\n): Promise<PublicStream | null> {\n\tconst res = await fetchFn(\n\t\t`${apiUrl.replace(/\\/$/, \"\")}/public/streams/${encodeURIComponent(streamId)}`,\n\t\t{ cache: \"no-store\" },\n\t);\n\tif (!res.ok) return null;\n\treturn parsePublicStream(await res.json());\n}\n\nexport async function fetchPublicVod(\n\tapiUrl: string,\n\tvodId: string,\n\tfetchFn: typeof fetch = fetch,\n): Promise<PublicVod | null> {\n\tconst res = await fetchFn(\n\t\t`${apiUrl.replace(/\\/$/, \"\")}/public/vods/${encodeURIComponent(vodId)}`,\n\t\t{ cache: \"no-store\" },\n\t);\n\tif (!res.ok) return null;\n\treturn parsePublicVod(await res.json());\n}\n\nexport async function heartbeatPresence(\n\tapiUrl: string,\n\tstreamId: string,\n\tsessionId: string,\n\tfetchFn: typeof fetch = fetch,\n): Promise<void> {\n\tawait fetchFn(\n\t\t`${apiUrl.replace(/\\/$/, \"\")}/public/streams/${encodeURIComponent(streamId)}/presence`,\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\theaders: { \"content-type\": \"application/json\" },\n\t\t\tbody: JSON.stringify({ sessionId }),\n\t\t},\n\t).catch(() => undefined);\n}\n","import { defaultApiUrl } from \"../public-api\";\nimport type { StudioControlActions } from \"./lib/control-actions\";\n\nexport type StudioControlClientOptions = {\n\tapiUrl?: string;\n\ttoken: string;\n\tfetchFn?: typeof fetch;\n};\n\nexport class StudioControlError extends Error {\n\treadonly status: number;\n\treadonly body: unknown;\n\n\tconstructor(status: number, message: string, body: unknown) {\n\t\tsuper(message);\n\t\tthis.name = \"StudioControlError\";\n\t\tthis.status = status;\n\t\tthis.body = body;\n\t}\n}\n\nexport class StudioControlClient {\n\tprivate token: string;\n\tprivate readonly apiUrl: string;\n\tprivate readonly fetchFn: typeof fetch;\n\n\tconstructor(options: StudioControlClientOptions) {\n\t\tthis.token = options.token;\n\t\tthis.apiUrl = (options.apiUrl ?? defaultApiUrl()).replace(/\\/$/, \"\");\n\t\tthis.fetchFn = options.fetchFn ?? fetch;\n\t}\n\n\tget currentToken(): string {\n\t\treturn this.token;\n\t}\n\n\tprivate url(suffix: string): string {\n\t\treturn `${this.apiUrl}/public/studio/control/${encodeURIComponent(this.token)}${suffix}`;\n\t}\n\n\tprivate async request<T>(suffix: string, method = \"GET\"): Promise<T> {\n\t\tconst res = await this.fetchFn(this.url(suffix), {\n\t\t\tmethod,\n\t\t\theaders: { accept: \"application/json\" },\n\t\t\tcache: \"no-store\",\n\t\t});\n\t\tconst body: unknown = await res.json().catch(() => ({}));\n\t\tif (!res.ok) {\n\t\t\tconst message =\n\t\t\t\tbody &&\n\t\t\t\ttypeof body === \"object\" &&\n\t\t\t\t\"error\" in body &&\n\t\t\t\ttypeof (body as { error: unknown }).error === \"string\"\n\t\t\t\t\t? (body as { error: string }).error\n\t\t\t\t\t: `Livo studio control ${res.status}`;\n\t\t\tthrow new StudioControlError(res.status, message, body);\n\t\t}\n\t\treturn body as T;\n\t}\n\n\tlivestream() {\n\t\treturn this.request<{ ok: true; egress: \"live\" | \"starting\" }>(\n\t\t\t\"/livestream\",\n\t\t\t\"POST\",\n\t\t);\n\t}\n\n\tpublish() {\n\t\treturn this.request<{ stream: { id: string; status: string } }>(\n\t\t\t\"/publish\",\n\t\t\t\"POST\",\n\t\t);\n\t}\n\n\tstop() {\n\t\treturn this.request<{ stream: { id: string; status: string } }>(\n\t\t\t\"/stop\",\n\t\t\t\"POST\",\n\t\t);\n\t}\n\n\tstate() {\n\t\treturn this.request<{\n\t\t\tstream: { id: string; title: string; status: string };\n\t\t}>(\"/state\");\n\t}\n\n\tasync refresh() {\n\t\tconst next = await this.request<{\n\t\t\tstudioControlToken: string;\n\t\t\texpiresAt: number;\n\t\t}>(\"/refresh\", \"POST\");\n\t\tthis.token = next.studioControlToken;\n\t\treturn next;\n\t}\n}\n\nexport function createStudioControlClient(options: StudioControlClientOptions) {\n\treturn new StudioControlClient(options);\n}\n\nexport function controlActionsFromClient(\n\tclient: StudioControlClient,\n): StudioControlActions {\n\treturn {\n\t\tasync livestream() {\n\t\t\tconst result = await client.livestream();\n\t\t\treturn result.egress;\n\t\t},\n\t\tasync publish() {\n\t\t\tawait client.publish();\n\t\t},\n\t\tasync stop() {\n\t\t\tawait client.stop();\n\t\t},\n\t};\n}\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs));\n}\n","import { Button as ButtonPrimitive } from \"@base-ui/react/button\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../lib/cn\";\n\nconst buttonVariants = cva(\n\t\"group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n\t{\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tdefault: \"bg-primary text-primary-foreground hover:bg-primary/80\",\n\t\t\t\toutline:\n\t\t\t\t\t\"border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50\",\n\t\t\t\tsecondary:\n\t\t\t\t\t\"bg-secondary text-secondary-foreground hover:bg-[color-mix(in_oklch,var(--secondary),var(--foreground)_5%)] aria-expanded:bg-secondary aria-expanded:text-secondary-foreground\",\n\t\t\t\tghost:\n\t\t\t\t\t\"hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50\",\n\t\t\t\tdestructive:\n\t\t\t\t\t\"bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40\",\n\t\t\t\tlink: \"text-primary underline-offset-4 hover:underline\",\n\t\t\t},\n\t\t\tsize: {\n\t\t\t\tdefault:\n\t\t\t\t\t\"h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2\",\n\t\t\t\txs: \"h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3\",\n\t\t\t\tsm: \"h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5\",\n\t\t\t\tlg: \"h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2\",\n\t\t\t\ticon: \"size-8\",\n\t\t\t\t\"icon-xs\":\n\t\t\t\t\t\"size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3\",\n\t\t\t\t\"icon-sm\":\n\t\t\t\t\t\"size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg\",\n\t\t\t\t\"icon-lg\": \"size-9\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tvariant: \"default\",\n\t\t\tsize: \"default\",\n\t\t},\n\t},\n);\n\nfunction Button({\n\tclassName,\n\tvariant = \"default\",\n\tsize = \"default\",\n\t...props\n}: ButtonPrimitive.Props & VariantProps<typeof buttonVariants>) {\n\treturn (\n\t\t<ButtonPrimitive\n\t\t\tdata-slot=\"button\"\n\t\t\tclassName={cn(buttonVariants({ variant, size, className }))}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport { Button, buttonVariants };\n","\"use client\";\n\nimport * as AlertDialogPrimitive from \"@radix-ui/react-alert-dialog\";\nimport type { ComponentProps } from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { buttonVariants } from \"./button\";\n\nfunction AlertDialog({\n\t...props\n}: ComponentProps<typeof AlertDialogPrimitive.Root>) {\n\treturn <AlertDialogPrimitive.Root data-slot=\"alert-dialog\" {...props} />;\n}\n\nfunction AlertDialogTrigger({\n\t...props\n}: ComponentProps<typeof AlertDialogPrimitive.Trigger>) {\n\treturn (\n\t\t<AlertDialogPrimitive.Trigger data-slot=\"alert-dialog-trigger\" {...props} />\n\t);\n}\n\nfunction AlertDialogPortal({\n\t...props\n}: ComponentProps<typeof AlertDialogPrimitive.Portal>) {\n\treturn (\n\t\t<AlertDialogPrimitive.Portal data-slot=\"alert-dialog-portal\" {...props} />\n\t);\n}\n\nfunction AlertDialogOverlay({\n\tclassName,\n\t...props\n}: ComponentProps<typeof AlertDialogPrimitive.Overlay>) {\n\treturn (\n\t\t<AlertDialogPrimitive.Overlay\n\t\t\tdata-slot=\"alert-dialog-overlay\"\n\t\t\tclassName={cn(\n\t\t\t\t\"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction AlertDialogContent({\n\tclassName,\n\t...props\n}: ComponentProps<typeof AlertDialogPrimitive.Content>) {\n\treturn (\n\t\t<AlertDialogPortal>\n\t\t\t<AlertDialogOverlay />\n\t\t\t<AlertDialogPrimitive.Content\n\t\t\t\tdata-slot=\"alert-dialog-content\"\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t</AlertDialogPortal>\n\t);\n}\n\nfunction AlertDialogHeader({ className, ...props }: ComponentProps<\"div\">) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"alert-dialog-header\"\n\t\t\tclassName={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction AlertDialogFooter({ className, ...props }: ComponentProps<\"div\">) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"alert-dialog-footer\"\n\t\t\tclassName={cn(\n\t\t\t\t\"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction AlertDialogTitle({\n\tclassName,\n\t...props\n}: ComponentProps<typeof AlertDialogPrimitive.Title>) {\n\treturn (\n\t\t<AlertDialogPrimitive.Title\n\t\t\tdata-slot=\"alert-dialog-title\"\n\t\t\tclassName={cn(\"text-lg font-semibold\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction AlertDialogDescription({\n\tclassName,\n\t...props\n}: ComponentProps<typeof AlertDialogPrimitive.Description>) {\n\treturn (\n\t\t<AlertDialogPrimitive.Description\n\t\t\tdata-slot=\"alert-dialog-description\"\n\t\t\tclassName={cn(\"text-muted-foreground text-sm\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction AlertDialogAction({\n\tclassName,\n\t...props\n}: ComponentProps<typeof AlertDialogPrimitive.Action>) {\n\treturn (\n\t\t<AlertDialogPrimitive.Action\n\t\t\tclassName={cn(buttonVariants(), className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction AlertDialogCancel({\n\tclassName,\n\t...props\n}: ComponentProps<typeof AlertDialogPrimitive.Cancel>) {\n\treturn (\n\t\t<AlertDialogPrimitive.Cancel\n\t\t\tclassName={cn(buttonVariants({ variant: \"outline\" }), className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport {\n\tAlertDialog,\n\tAlertDialogAction,\n\tAlertDialogCancel,\n\tAlertDialogContent,\n\tAlertDialogDescription,\n\tAlertDialogFooter,\n\tAlertDialogHeader,\n\tAlertDialogTitle,\n\tAlertDialogTrigger,\n};\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport {\n\tAlertDialog,\n\tAlertDialogAction,\n\tAlertDialogCancel,\n\tAlertDialogContent,\n\tAlertDialogDescription,\n\tAlertDialogFooter,\n\tAlertDialogHeader,\n\tAlertDialogTitle,\n\tAlertDialogTrigger,\n} from \"./alert-dialog\";\nimport { Button } from \"./button\";\n\nexport function ConfirmAction({\n\ttriggerLabel,\n\ttitle,\n\tdescription,\n\tconfirmLabel,\n\tcancelLabel = \"Cancel\",\n\tpending = false,\n\tonConfirm,\n\ttrigger,\n\topen,\n\tonOpenChange,\n}: {\n\ttriggerLabel: string;\n\ttitle: string;\n\tdescription: string;\n\tconfirmLabel: string;\n\tcancelLabel?: string;\n\tpending?: boolean;\n\tonConfirm: () => void;\n\ttrigger?: ReactNode;\n\topen?: boolean;\n\tonOpenChange?: (open: boolean) => void;\n}) {\n\tconst controlled = open !== undefined;\n\n\treturn (\n\t\t<AlertDialog open={open} onOpenChange={onOpenChange}>\n\t\t\t{controlled && trigger == null ? null : (\n\t\t\t\t<AlertDialogTrigger asChild>\n\t\t\t\t\t{trigger ?? (\n\t\t\t\t\t\t<Button type=\"button\" variant=\"destructive\" disabled={pending}>\n\t\t\t\t\t\t\t{triggerLabel}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t)}\n\t\t\t\t</AlertDialogTrigger>\n\t\t\t)}\n\t\t\t<AlertDialogContent>\n\t\t\t\t<AlertDialogHeader>\n\t\t\t\t\t<AlertDialogTitle>{title}</AlertDialogTitle>\n\t\t\t\t\t<AlertDialogDescription>{description}</AlertDialogDescription>\n\t\t\t\t</AlertDialogHeader>\n\t\t\t\t<AlertDialogFooter>\n\t\t\t\t\t<AlertDialogCancel>{cancelLabel}</AlertDialogCancel>\n\t\t\t\t\t<AlertDialogAction\n\t\t\t\t\t\tclassName=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n\t\t\t\t\t\tdisabled={pending}\n\t\t\t\t\t\tonClick={onConfirm}\n\t\t\t\t\t>\n\t\t\t\t\t\t{confirmLabel}\n\t\t\t\t\t</AlertDialogAction>\n\t\t\t\t</AlertDialogFooter>\n\t\t\t</AlertDialogContent>\n\t\t</AlertDialog>\n\t);\n}\n","import { useEffect } from \"react\";\n\n/** Prompt before tab close / refresh. Browsers ignore a custom message. */\nexport function useBeforeUnload(enabled: boolean) {\n\tuseEffect(() => {\n\t\tif (!enabled) return;\n\t\tfunction onBeforeUnload(event: BeforeUnloadEvent) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.returnValue = \"\";\n\t\t}\n\t\twindow.addEventListener(\"beforeunload\", onBeforeUnload);\n\t\treturn () => window.removeEventListener(\"beforeunload\", onBeforeUnload);\n\t}, [enabled]);\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useRef, useState } from \"react\";\n\ntype DocumentPictureInPicture = {\n\trequestWindow: (options?: {\n\t\twidth?: number;\n\t\theight?: number;\n\t}) => Promise<Window>;\n};\n\nconst DEFAULT_WIDTH = 400;\nconst DEFAULT_HEIGHT = 500;\n\nconst PIP_BASE_STYLE =\n\t\"html,body{height:100%;margin:0;overflow:hidden}body{display:flex;flex-direction:column}\";\n\nexport function isDocumentPictureInPictureSupported(): boolean {\n\treturn typeof window !== \"undefined\" && \"documentPictureInPicture\" in window;\n}\n\nexport function copyDocumentPictureInPictureChrome(\n\tfrom: Document,\n\tto: Document,\n): void {\n\tto.documentElement.className = from.documentElement.className;\n\tfor (const node of from.head.querySelectorAll(\n\t\t\"style, link[rel='stylesheet']\",\n\t)) {\n\t\tto.head.appendChild(node.cloneNode(true));\n\t}\n\tconst base = to.createElement(\"style\");\n\tbase.textContent = PIP_BASE_STYLE;\n\tto.head.appendChild(base);\n}\n\nexport function observeDocumentPictureInPictureTheme(\n\tfrom: Document,\n\tto: Document,\n): MutationObserver {\n\tconst sync = () => {\n\t\tto.documentElement.className = from.documentElement.className;\n\t};\n\tconst observer = new MutationObserver(sync);\n\tobserver.observe(from.documentElement, {\n\t\tattributes: true,\n\t\tattributeFilter: [\"class\"],\n\t});\n\treturn observer;\n}\n\nfunction documentPictureInPicture(): DocumentPictureInPicture | null {\n\tif (!isDocumentPictureInPictureSupported()) return null;\n\treturn (\n\t\twindow as unknown as {\n\t\t\tdocumentPictureInPicture: DocumentPictureInPicture;\n\t\t}\n\t).documentPictureInPicture;\n}\n\nexport function useDocumentPictureInPicture(options?: {\n\twidth?: number;\n\theight?: number;\n}) {\n\tconst [pipWindow, setPipWindow] = useState<Window | null>(null);\n\tconst pipRef = useRef<Window | null>(null);\n\tconst themeObserverRef = useRef<MutationObserver | null>(null);\n\tconst width = options?.width ?? DEFAULT_WIDTH;\n\tconst height = options?.height ?? DEFAULT_HEIGHT;\n\n\tconst disconnectTheme = useCallback(() => {\n\t\tthemeObserverRef.current?.disconnect();\n\t\tthemeObserverRef.current = null;\n\t}, []);\n\n\tconst open = useCallback(async () => {\n\t\tconst api = documentPictureInPicture();\n\t\tif (!api) {\n\t\t\tthrow new Error(\"Document Picture-in-Picture is not supported\");\n\t\t}\n\t\tif (pipRef.current && !pipRef.current.closed) {\n\t\t\treturn pipRef.current;\n\t\t}\n\t\tconst win = await api.requestWindow({ width, height });\n\t\tcopyDocumentPictureInPictureChrome(document, win.document);\n\t\tdisconnectTheme();\n\t\tthemeObserverRef.current = observeDocumentPictureInPictureTheme(\n\t\t\tdocument,\n\t\t\twin.document,\n\t\t);\n\t\tconst onPageHide = () => {\n\t\t\tdisconnectTheme();\n\t\t\tpipRef.current = null;\n\t\t\tsetPipWindow(null);\n\t\t};\n\t\twin.addEventListener(\"pagehide\", onPageHide);\n\t\tpipRef.current = win;\n\t\tsetPipWindow(win);\n\t\treturn win;\n\t}, [disconnectTheme, height, width]);\n\n\tconst close = useCallback(() => {\n\t\tdisconnectTheme();\n\t\tpipRef.current?.close();\n\t\tpipRef.current = null;\n\t\tsetPipWindow(null);\n\t\twindow.focus();\n\t}, [disconnectTheme]);\n\n\tuseEffect(() => {\n\t\tconst action = \"enterpictureinpicture\" as MediaSessionAction;\n\t\ttry {\n\t\t\tnavigator.mediaSession.setActionHandler(action, () => {\n\t\t\t\tvoid open();\n\t\t\t});\n\t\t} catch {\n\t\t\t/* action unsupported on this browser */\n\t\t}\n\t\treturn () => {\n\t\t\ttry {\n\t\t\t\tnavigator.mediaSession.setActionHandler(action, null);\n\t\t\t} catch {\n\t\t\t\t/* already unsupported */\n\t\t\t}\n\t\t\tdisconnectTheme();\n\t\t\tpipRef.current?.close();\n\t\t\tpipRef.current = null;\n\t\t};\n\t}, [disconnectTheme, open]);\n\n\treturn {\n\t\tsupported: isDocumentPictureInPictureSupported(),\n\t\tpipWindow,\n\t\topen,\n\t\tclose,\n\t};\n}\n","import { useEffect } from \"react\";\n\n/** Keep the screen awake while the studio is live. */\nexport function useWakeLock(enabled: boolean) {\n\tuseEffect(() => {\n\t\tif (!enabled || typeof navigator === \"undefined\") return;\n\t\tconst nav = navigator as Navigator & {\n\t\t\twakeLock?: {\n\t\t\t\trequest: (type: \"screen\") => Promise<{ release: () => Promise<void> }>;\n\t\t\t};\n\t\t};\n\t\tif (!nav.wakeLock) return;\n\t\tlet released = false;\n\t\tlet sentinel: { release: () => Promise<void> } | null = null;\n\t\tvoid nav.wakeLock\n\t\t\t.request(\"screen\")\n\t\t\t.then((lock) => {\n\t\t\t\tif (released) {\n\t\t\t\t\tvoid lock.release();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tsentinel = lock;\n\t\t\t})\n\t\t\t.catch(() => {\n\t\t\t\t/* browsers may deny Wake Lock without a user gesture */\n\t\t\t});\n\t\treturn () => {\n\t\t\treleased = true;\n\t\t\tvoid sentinel?.release();\n\t\t};\n\t}, [enabled]);\n}\n","import { Button } from \"./button\";\n\nexport function EmptyState({\n\ttitle,\n\tdescription,\n\tactionLabel,\n\tonAction,\n\tactionHref,\n}: {\n\ttitle: string;\n\tdescription: string;\n\tactionLabel?: string;\n\tonAction?: () => void;\n\tactionHref?: string;\n}) {\n\tconst action =\n\t\tactionLabel && actionHref ? (\n\t\t\t<Button render={<a href={actionHref} />}>{actionLabel}</Button>\n\t\t) : actionLabel ? (\n\t\t\t<Button type=\"button\" onClick={onAction}>\n\t\t\t\t{actionLabel}\n\t\t\t</Button>\n\t\t) : null;\n\treturn (\n\t\t<div\n\t\t\tclassName=\"flex flex-col items-start gap-3 rounded-xl border border-dashed p-8\"\n\t\t\trole=\"status\"\n\t\t>\n\t\t\t<h2 className=\"text-lg font-semibold\">{title}</h2>\n\t\t\t<p className=\"text-muted-foreground max-w-md text-sm\">{description}</p>\n\t\t\t{action}\n\t\t</div>\n\t);\n}\n","import type {\n\tStudioChatMessage,\n\tStudioDisplayTile,\n\tStudioMediaFlags,\n\tStudioParticipantTile,\n\tStudioSourceMode,\n\tStudioStageRequest,\n\tStudioStageStatus,\n\tStudioTileKind,\n\tStudioWaitlistedGuest,\n} from \"./types\";\n\nexport type {\n\tStudioChatMessage,\n\tStudioDisplayTile,\n\tStudioMediaFlags,\n\tStudioParticipantTile,\n\tStudioStageRequest,\n\tStudioStageStatus,\n\tStudioTileKind,\n\tStudioWaitlistedGuest,\n};\n\nexport const STUDIO_MODERATOR_PRESET = \"studio-moderator\";\nexport const STUDIO_GUEST_PRESET = \"studio-guest\";\n\nexport const STUDIO_DISPLAY_NAME_MAX = 80;\n\nexport const SHARE_REQUEST_TIMEOUT_MS = 45_000;\n\nexport type StudioDeviceKind = \"audio\" | \"video\" | \"speaker\";\n\nexport type StudioDeviceOption = {\n\tdeviceId: string;\n\tlabel: string;\n};\n\nexport type StudioDevices = {\n\taudio: StudioDeviceOption[];\n\tvideo: StudioDeviceOption[];\n\tspeaker: StudioDeviceOption[];\n};\n\nexport type StudioVideoKind = \"camera\" | \"screen\";\n\nexport type StudioHostMediaKind = \"audio\" | \"video\" | \"screen\";\n\nexport type StudioScreenSharePermission =\n\t\"ALLOWED\" | \"NOT_ALLOWED\" | \"CAN_REQUEST\";\n\nexport type StudioConnectionState =\n\t\"joined\" | \"waitlisted\" | \"connecting\" | \"failed\";\n\nexport type StudioBroadcast =\n\t| { type: \"host-media\"; kind: StudioHostMediaKind }\n\t| { type: \"share-request\"; participantId: string; name: string }\n\t| { type: \"share-response\"; participantId: string; granted: boolean }\n\t| { type: \"display-name\"; participantId: string; name: string };\n\nexport type StudioBroadcastTarget =\n\t{ participantIds: string[] } | { presetNames: string[] };\n\nexport type StudioPipSpotlight = {\n\tparticipantId: string;\n\tname: string;\n\tkind: StudioTileKind;\n\tpicture: string | null;\n};\n\nexport type StudioMeetingHandle = {\n\tjoin: () => Promise<void>;\n\tleave: () => Promise<void>;\n\tsetAudioEnabled: (enabled: boolean) => Promise<void>;\n\tsetVideoEnabled: (enabled: boolean) => Promise<void>;\n\tsetScreenShareEnabled: (enabled: boolean) => Promise<void>;\n\tadmit: (participantId: string) => Promise<void>;\n\tdeny: (participantId: string) => Promise<void>;\n\tkick: (participantId: string) => Promise<void>;\n\tdisableParticipantMedia: (\n\t\tparticipantId: string,\n\t\tkind: StudioHostMediaKind,\n\t) => Promise<void>;\n\tsendBroadcast: (\n\t\tmessage: StudioBroadcast,\n\t\ttarget?: StudioBroadcastTarget,\n\t) => Promise<void>;\n\tsubscribeBroadcast: (cb: (message: StudioBroadcast) => void) => () => void;\n\tadmitAs: (\n\t\tparticipantId: string,\n\t\tas: \"panelist\" | \"audience\",\n\t) => Promise<void>;\n\tadmitAll: (as: \"panelist\" | \"audience\") => Promise<void>;\n\tsetStageAccess: (userId: string, on: boolean) => Promise<void>;\n\tdenyStageAccess: (userId: string) => Promise<void>;\n\trequestStageAccess: () => Promise<void>;\n\tjoinStage: () => Promise<void>;\n\tleaveStage: () => Promise<void>;\n\tstageStatus: () => StudioStageStatus;\n\tstageRequests: () => StudioStageRequest[];\n\tsubscribeStage: (cb: () => void) => () => void;\n\tcanManageStage: () => boolean;\n\tstageEnabled: () => boolean;\n\tensureStageJoined: () => Promise<void>;\n\tsetParticipantPinned: (\n\t\tparticipantId: string,\n\t\tpinned: boolean,\n\t) => Promise<void>;\n\tpinnedIds: () => string[];\n\tsubscribePinned: (cb: () => void) => () => void;\n\tsetParticipantChat: (\n\t\tparticipantId: string,\n\t\tenabled: boolean,\n\t) => Promise<void>;\n\tsendChatMessage: (text: string, participantIds?: string[]) => Promise<void>;\n\teditChatMessage: (id: string, text: string) => Promise<void>;\n\tdeleteChatMessage: (id: string) => Promise<void>;\n\tpinChatMessage: (id: string, pinned: boolean) => Promise<void>;\n\tfetchChatHistory: (opts?: {\n\t\ttimestamp?: number;\n\t\tuserId?: string;\n\t}) => Promise<StudioChatMessage[]>;\n\tpinnedChatMessages: () => StudioChatMessage[];\n\tchatMaxTextLimit: () => number;\n\tsubscribeParticipants: (cb: () => void) => () => void;\n\tparticipants: () => StudioParticipantTile[];\n\twaitlisted: () => StudioWaitlistedGuest[];\n\tinWaitingRoom: () => boolean;\n\tconnectionState: () => StudioConnectionState;\n\tlastMeetingError: () => string | null;\n\tmoderatorIds: () => string[];\n\tlocalAudioTrack: () => MediaStreamTrack | null;\n\tlocalVideoTrack: () => MediaStreamTrack | null;\n\tparticipantVideoTrack: (participantId: string) => MediaStreamTrack | null;\n\tparticipantScreenTrack: (participantId: string) => MediaStreamTrack | null;\n\tactiveSpeakerId: () => string | null;\n\tsubscribeActiveSpeaker: (cb: () => void) => () => void;\n\tscreenSharePermission: () => StudioScreenSharePermission;\n\tsubscribePermissions: (cb: () => void) => () => void;\n\tattachVideo: (\n\t\tparticipantId: string,\n\t\tel: HTMLVideoElement | null,\n\t\tkind?: StudioVideoKind,\n\t) => void;\n\tattachAudio: (participantId: string, el: HTMLAudioElement | null) => void;\n\tsubscribeMedia: (cb: () => void) => () => void;\n\tsubscribeRoomLeft: (cb: (state: string) => void) => () => void;\n\tchatMessages: () => StudioChatMessage[];\n\tsubscribeChat: (cb: () => void) => () => void;\n\tlistDevices: () => Promise<StudioDevices>;\n\tsetDevice: (kind: StudioDeviceKind, deviceId: string) => Promise<void>;\n\tsetDisplayName: (name: string) => Promise<void>;\n\tlivestreamState: () => string | null;\n\troomState: () => string | null;\n\tstartLivestream: () => Promise<void>;\n};\n\nconst HOST_MEDIA_KINDS: ReadonlySet<string> = new Set([\n\t\"audio\",\n\t\"video\",\n\t\"screen\",\n]);\n\nexport function parseStudioBroadcast(value: unknown): StudioBroadcast | null {\n\tif (!value || typeof value !== \"object\") return null;\n\tconst row = value as Record<string, unknown>;\n\tconst nested =\n\t\trow.payload && typeof row.payload === \"object\"\n\t\t\t? (row.payload as Record<string, unknown>)\n\t\t\t: null;\n\tconst body = nested ? { ...nested, type: nested.type ?? row.type } : row;\n\tconst type = body.type;\n\tif (type === \"host-media\") {\n\t\tconst kind = body.kind;\n\t\tif (typeof kind === \"string\" && HOST_MEDIA_KINDS.has(kind)) {\n\t\t\treturn { type, kind: kind as StudioHostMediaKind };\n\t\t}\n\t\treturn null;\n\t}\n\tif (type === \"share-request\") {\n\t\tconst participantId =\n\t\t\ttypeof body.participantId === \"string\" ? body.participantId : \"\";\n\t\tconst name = typeof body.name === \"string\" ? body.name : \"\";\n\t\tif (!participantId || !name) return null;\n\t\treturn { type, participantId, name };\n\t}\n\tif (type === \"share-response\") {\n\t\tconst participantId =\n\t\t\ttypeof body.participantId === \"string\" ? body.participantId : \"\";\n\t\tif (!participantId || typeof body.granted !== \"boolean\") return null;\n\t\treturn { type, participantId, granted: body.granted };\n\t}\n\tif (type === \"display-name\") {\n\t\tconst participantId =\n\t\t\ttypeof body.participantId === \"string\" ? body.participantId : \"\";\n\t\tconst name = typeof body.name === \"string\" ? body.name.trim() : \"\";\n\t\tif (!participantId || !name) return null;\n\t\treturn {\n\t\t\ttype,\n\t\t\tparticipantId,\n\t\t\tname: name.slice(0, STUDIO_DISPLAY_NAME_MAX),\n\t\t};\n\t}\n\treturn null;\n}\n\nexport function isOnStage(status: StudioStageStatus | undefined): boolean {\n\treturn status == null || status === \"ON_STAGE\";\n}\n\nexport function canTakeOffAir(\n\ttiles: Pick<StudioParticipantTile, \"id\" | \"stageStatus\">[],\n\tparticipantId: string,\n\tonAir: boolean,\n): boolean {\n\tif (!onAir) return true;\n\treturn tiles.some(\n\t\t(tile) => tile.id !== participantId && isOnStage(tile.stageStatus),\n\t);\n}\n\nexport function resolveStudioPipSpotlight(\n\ttiles: StudioParticipantTile[],\n\tactiveSpeakerId: string | null,\n): StudioPipSpotlight | null {\n\tconst visible = tiles.filter((tile) => isOnStage(tile.stageStatus));\n\tconst pinned = visible.find((tile) => tile.pinned === true);\n\tif (pinned) {\n\t\treturn {\n\t\t\tparticipantId: pinned.id,\n\t\t\tname: pinned.name,\n\t\t\tkind: pinned.screenShareEnabled\n\t\t\t\t? \"screen\"\n\t\t\t\t: pinned.videoEnabled\n\t\t\t\t\t? \"camera\"\n\t\t\t\t\t: \"idle\",\n\t\t\tpicture: pinned.picture,\n\t\t};\n\t}\n\tconst sharing = visible.find((tile) => tile.screenShareEnabled);\n\tif (sharing) {\n\t\treturn {\n\t\t\tparticipantId: sharing.id,\n\t\t\tname: sharing.name,\n\t\t\tkind: \"screen\",\n\t\t\tpicture: sharing.picture,\n\t\t};\n\t}\n\tconst speaker = activeSpeakerId\n\t\t? visible.find((tile) => tile.id === activeSpeakerId && tile.videoEnabled)\n\t\t: undefined;\n\tif (speaker) {\n\t\treturn {\n\t\t\tparticipantId: speaker.id,\n\t\t\tname: speaker.name,\n\t\t\tkind: \"camera\",\n\t\t\tpicture: speaker.picture,\n\t\t};\n\t}\n\tconst remoteCam = visible.find((tile) => !tile.isSelf && tile.videoEnabled);\n\tif (remoteCam) {\n\t\treturn {\n\t\t\tparticipantId: remoteCam.id,\n\t\t\tname: remoteCam.name,\n\t\t\tkind: \"camera\",\n\t\t\tpicture: remoteCam.picture,\n\t\t};\n\t}\n\tconst self = visible.find((tile) => tile.isSelf);\n\tif (!self) return null;\n\treturn {\n\t\tparticipantId: self.id,\n\t\tname: self.name,\n\t\tkind: self.videoEnabled ? \"camera\" : \"idle\",\n\t\tpicture: self.picture,\n\t};\n}\n\nexport function resolveStudioPipSelfView(\n\ttiles: StudioParticipantTile[],\n\tspotlight: StudioPipSpotlight | null,\n): StudioParticipantTile | null {\n\tconst self = tiles.find((tile) => tile.isSelf);\n\tif (!self || !self.videoEnabled) return null;\n\tif (spotlight?.participantId === self.id) return null;\n\treturn self;\n}\n\nexport function formatStudioElapsed(elapsedMs: number): string {\n\tconst total = Math.max(0, Math.floor(elapsedMs / 1000));\n\tconst hours = Math.floor(total / 3600);\n\tconst minutes = Math.floor((total % 3600) / 60);\n\tconst seconds = total % 60;\n\tif (hours > 0) {\n\t\treturn `${hours}:${String(minutes).padStart(2, \"0\")}:${String(seconds).padStart(2, \"0\")}`;\n\t}\n\treturn `${String(minutes).padStart(2, \"0\")}:${String(seconds).padStart(2, \"0\")}`;\n}\n\nexport function nextSourceMode(\n\tcurrent: StudioSourceMode,\n\ttarget: StudioSourceMode,\n): StudioSourceMode {\n\treturn target === current ? current : target;\n}\n\nexport function sourceFlags(mode: StudioSourceMode): {\n\taudio: boolean;\n\tvideo: boolean;\n\tscreen: boolean;\n} {\n\tswitch (mode) {\n\t\tcase \"camera\":\n\t\t\treturn { audio: true, video: true, screen: false };\n\t\tcase \"screen\":\n\t\t\treturn { audio: true, video: false, screen: true };\n\t\tcase \"audio\":\n\t\t\treturn { audio: true, video: false, screen: false };\n\t\tdefault: {\n\t\t\tconst _exhaustive: never = mode;\n\t\t\treturn _exhaustive;\n\t\t}\n\t}\n}\n\nexport function canStartScreenShare(tiles: StudioParticipantTile[]): boolean {\n\treturn !tiles.some((tile) => tile.screenShareEnabled && !tile.isSelf);\n}\n\nexport const DUPLICATE_SELF_DEBOUNCE_MS = 4_000;\n\nexport function duplicateSelfParticipant(\n\ttiles: StudioParticipantTile[],\n): StudioParticipantTile | null {\n\tconst self = tiles.find((tile) => tile.isSelf);\n\tconst userId = self?.userId?.trim();\n\tif (!self || !userId) return null;\n\treturn tiles.find((tile) => !tile.isSelf && tile.userId === userId) ?? null;\n}\n\nexport function losesDuplicateTiebreak(\n\tselfId: string,\n\totherId: string,\n): boolean {\n\treturn selfId > otherId;\n}\n\nexport function isStudioSessionOver(\n\tstreamStatus: string,\n\troomState: string | null,\n): boolean {\n\tif (streamStatus === \"ended\" || streamStatus === \"error\") return true;\n\treturn (\n\t\troomState === \"ended\" || roomState === \"kicked\" || roomState === \"left\"\n\t);\n}\n\nexport function isStudioRejected(roomState: string | null): boolean {\n\treturn roomState === \"rejected\" || roomState === \"denied\";\n}\n\nexport function expandStudioTiles(\n\ttiles: StudioParticipantTile[],\n): StudioDisplayTile[] {\n\tconst out: StudioDisplayTile[] = [];\n\tfor (const tile of tiles) {\n\t\tif (tile.videoEnabled) {\n\t\t\tout.push({ ...tile, kind: \"camera\", tileId: `${tile.id}:camera` });\n\t\t} else {\n\t\t\tout.push({ ...tile, kind: \"idle\", tileId: `${tile.id}:idle` });\n\t\t}\n\t\tif (tile.screenShareEnabled) {\n\t\t\tout.push({ ...tile, kind: \"screen\", tileId: `${tile.id}:screen` });\n\t\t}\n\t}\n\treturn out;\n}\n\nexport const STAGE_STRIP_MAX = 6;\nexport const STAGE_GRID_MAX = 9;\n\nexport type StudioStageLayoutOptions = {\n\tactiveSpeakerId?: string | null;\n\tmax?: number;\n};\n\nfunction stripRank(\n\ttile: StudioDisplayTile,\n\tactiveSpeakerId: string | null,\n): number {\n\tif (tile.pinned) return 0;\n\tif (tile.kind === \"screen\") return 1;\n\tif (tile.isSelf) return 2;\n\tif (activeSpeakerId && tile.id === activeSpeakerId) return 3;\n\tif (tile.kind === \"camera\") return 4;\n\treturn 5;\n}\n\nfunction rankStripTiles(\n\ttiles: StudioDisplayTile[],\n\tactiveSpeakerId: string | null,\n): StudioDisplayTile[] {\n\treturn [...tiles].sort((a, b) => {\n\t\tconst diff = stripRank(a, activeSpeakerId) - stripRank(b, activeSpeakerId);\n\t\tif (diff !== 0) return diff;\n\t\treturn a.tileId.localeCompare(b.tileId);\n\t});\n}\n\nfunction takeCappedStrip(\n\tranked: StudioDisplayTile[],\n\tcap: number,\n): StudioDisplayTile[] {\n\tconst self = ranked.filter((tile) => tile.isSelf);\n\tconst others = ranked.filter((tile) => !tile.isSelf);\n\tconst reserved = Math.min(self.length, cap);\n\treturn [...self, ...others.slice(0, cap - reserved)];\n}\n\nexport function studioStageLayout(\n\ttiles: StudioDisplayTile[],\n\toptions: StudioStageLayoutOptions = {},\n): {\n\tspotlight: StudioDisplayTile[];\n\tstrip: StudioDisplayTile[];\n\toverflow: number;\n} {\n\tconst pinned = tiles.find((tile) => tile.pinned === true);\n\tlet spotlight: StudioDisplayTile[];\n\tlet remaining: StudioDisplayTile[];\n\tif (pinned) {\n\t\tconst pinTiles = tiles.filter((tile) => tile.id === pinned.id);\n\t\tconst focus =\n\t\t\tpinTiles.find((tile) => tile.kind === \"screen\") ??\n\t\t\tpinTiles.find((tile) => tile.kind === \"camera\") ??\n\t\t\tpinTiles[0];\n\t\tif (!focus) {\n\t\t\tspotlight = [];\n\t\t\tremaining = tiles;\n\t\t} else {\n\t\t\tspotlight = [focus];\n\t\t\tremaining = tiles.filter((tile) => tile.tileId !== focus.tileId);\n\t\t}\n\t} else {\n\t\tspotlight = tiles.filter((tile) => tile.kind === \"screen\");\n\t\tremaining = tiles.filter((tile) => tile.kind !== \"screen\");\n\t}\n\tconst cap =\n\t\toptions.max ?? (spotlight.length > 0 ? STAGE_STRIP_MAX : STAGE_GRID_MAX);\n\tconst ranked = rankStripTiles(remaining, options.activeSpeakerId ?? null);\n\tif (ranked.length <= cap) {\n\t\treturn { spotlight, strip: ranked, overflow: 0 };\n\t}\n\tconst kept = takeCappedStrip(ranked, cap);\n\treturn {\n\t\tspotlight,\n\t\tstrip: kept,\n\t\toverflow: ranked.length - kept.length,\n\t};\n}\n\nexport async function applySourceFlags(\n\tmeeting: StudioMeetingHandle,\n\tflags: StudioMediaFlags,\n): Promise<{ camera: boolean; screen: boolean }> {\n\tconst allowScreen =\n\t\t!flags.screen || canStartScreenShare(meeting.participants());\n\tconst [camera, screen] = await Promise.allSettled([\n\t\tmeeting.setVideoEnabled(flags.camera),\n\t\tmeeting.setScreenShareEnabled(allowScreen && flags.screen),\n\t]);\n\treturn {\n\t\tcamera: camera.status === \"fulfilled\",\n\t\tscreen: screen.status === \"fulfilled\",\n\t};\n}\n\nexport async function applySourceMode(\n\tmeeting: StudioMeetingHandle,\n\tmode: StudioSourceMode,\n): Promise<void> {\n\tconst flags = sourceFlags(mode);\n\tawait meeting.setAudioEnabled(flags.audio);\n\tawait applySourceFlags(meeting, {\n\t\tcamera: flags.video,\n\t\tscreen: flags.screen,\n\t});\n}\n","import type { StudioScreenSharePermission } from \"./meeting\";\n\nexport type ScreenShareBlock = \"device\" | \"permission\" | null;\n\ntype MediaQuery = { matches: boolean };\n\nexport function detectScreenCaptureSupport(\n\tmedia: { getDisplayMedia?: unknown } | undefined = typeof navigator ===\n\t\"undefined\"\n\t\t? undefined\n\t\t: navigator.mediaDevices,\n\tmatchMedia: (query: string) => MediaQuery = typeof window === \"undefined\"\n\t\t? () => ({ matches: false })\n\t\t: (query) => window.matchMedia(query),\n): boolean {\n\tif (typeof media?.getDisplayMedia !== \"function\") return false;\n\tconst coarse = matchMedia(\"(pointer: coarse)\").matches;\n\tconst anyHover = matchMedia(\"(any-hover: hover)\").matches;\n\tif (coarse && !anyHover) return false;\n\treturn true;\n}\n\nexport function screenShareBlock(\n\tcaptureSupported: boolean,\n\tpermission: StudioScreenSharePermission,\n): ScreenShareBlock {\n\tif (!captureSupported) return \"device\";\n\tif (permission === \"NOT_ALLOWED\") return \"permission\";\n\treturn null;\n}\n","import type { Stream } from \"./status\";\nimport type { StudioRole, StudioSession, StudioStreamSummary } from \"./types\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction readString(value: unknown, key: string): string | null {\n\tif (!isRecord(value)) return null;\n\tconst raw = value[key];\n\treturn typeof raw === \"string\" && raw.length > 0 ? raw : null;\n}\n\nexport function parseStudioRole(value: unknown): StudioRole | null {\n\treturn value === \"moderator\" || value === \"guest\" ? value : null;\n}\n\nexport function parseStudioStreamSummary(\n\tvalue: unknown,\n): StudioStreamSummary | null {\n\tconst id = readString(value, \"id\");\n\tconst title = readString(value, \"title\");\n\tconst status = readString(value, \"status\");\n\tif (!id || !title || !status) return null;\n\tconst encoderLostAt = isRecord(value)\n\t\t? typeof value.encoderLostAt === \"number\"\n\t\t\t? value.encoderLostAt\n\t\t\t: value.encoderLostAt === null\n\t\t\t\t? null\n\t\t\t\t: undefined\n\t\t: undefined;\n\treturn { id, title, status, encoderLostAt };\n}\n\nexport function parseStudioSession(value: unknown): StudioSession | null {\n\tif (!isRecord(value)) return null;\n\tconst authToken = readString(value, \"authToken\");\n\tconst meetingId = readString(value, \"meetingId\");\n\tconst role = parseStudioRole(value.role);\n\tif (!authToken || !meetingId || !role) return null;\n\tconst fromSummary = parseStudioStreamSummary(value.stream);\n\tconst fromFull = isRecord(value.stream)\n\t\t? parseStudioStreamSummary({\n\t\t\t\tid: value.stream.id,\n\t\t\t\ttitle: value.stream.title,\n\t\t\t\tstatus: value.stream.status,\n\t\t\t})\n\t\t: null;\n\tconst stream = fromSummary ?? fromFull;\n\tif (!stream) return null;\n\tconst expiresAt =\n\t\ttypeof value.expiresAt === \"number\" ? value.expiresAt : null;\n\treturn {\n\t\tauthToken,\n\t\tmeetingId,\n\t\trole,\n\t\tguestUrl: readString(value, \"guestUrl\"),\n\t\tstudioControlToken: readString(value, \"studioControlToken\"),\n\t\texpiresAt,\n\t\tstream,\n\t};\n}\n\nexport function studioGuestShareUrl(\n\torigin: string,\n\ttoken: string | null | undefined,\n): string | null {\n\tif (!token) return null;\n\treturn `${origin.replace(/\\/$/, \"\")}/studio/join/${token}`;\n}\n\nexport function isStudioActiveStatus(status: string): boolean {\n\treturn status === \"preview\" || status === \"public\";\n}\n\nexport function isLiveStudioStatus(status: string): boolean {\n\treturn status === \"public\";\n}\n\nexport type StudioLivestreamEgress = \"live\" | \"starting\";\n\nexport function parseStudioLivestream(\n\tvalue: unknown,\n): StudioLivestreamEgress | null {\n\tif (!isRecord(value) || value.ok !== true) return null;\n\tif (value.egress === \"live\" || value.egress === \"starting\") {\n\t\treturn value.egress;\n\t}\n\treturn \"starting\";\n}\n\nexport function parseStudioJoinStatus(\n\tvalue: unknown,\n): { ready: boolean; streamStatus: string | null } | null {\n\tif (!isRecord(value) || typeof value.ready !== \"boolean\") return null;\n\tconst streamStatus =\n\t\tvalue.streamStatus === null\n\t\t\t? null\n\t\t\t: typeof value.streamStatus === \"string\"\n\t\t\t\t? value.streamStatus\n\t\t\t\t: null;\n\tif (value.streamStatus !== null && streamStatus === null) return null;\n\treturn { ready: value.ready, streamStatus };\n}\n\nexport function parsePublicStreamStatus(value: unknown): string | null {\n\tif (!isRecord(value)) return null;\n\tconst nested = isRecord(value.stream) ? value.stream : value;\n\tconst status = readString(nested, \"status\");\n\treturn status;\n}\n\nexport function studioErrorCode(error: unknown): string | null {\n\tif (!error || typeof error !== \"object\") return null;\n\tconst body = \"body\" in error ? error.body : null;\n\tif (!isRecord(body) || typeof body.error !== \"string\") return null;\n\treturn body.error;\n}\n\nexport function canOpenStudioFromStream(stream: Stream): boolean {\n\tif (stream.source !== \"studio\") return false;\n\tswitch (stream.status) {\n\t\tcase \"ended\":\n\t\tcase \"error\":\n\t\t\treturn false;\n\t\tcase \"scheduled\":\n\t\tcase \"idle\":\n\t\tcase \"spawning\":\n\t\tcase \"ingest_ready\":\n\t\tcase \"preview\":\n\t\tcase \"public\":\n\t\t\treturn true;\n\t\tdefault: {\n\t\t\tconst _exhaustive: never = stream.status;\n\t\t\treturn _exhaustive;\n\t\t}\n\t}\n}\n","export type StudioSoundKind = \"chat\" | \"request\";\n\nconst CHAT_DEBOUNCE_MS = 400;\nconst CHAT_HZ = 880;\nconst CHAT_MS = 80;\nconst REQUEST_LOW_HZ = 660;\nconst REQUEST_HIGH_HZ = 880;\nconst REQUEST_NOTE_MS = 80;\nconst GAIN = 0.1;\n\ntype AudioContextCtor = typeof AudioContext;\n\nlet ctx: AudioContext | null = null;\nlet lastChatAt = 0;\n\nfunction audioContextCtor(): AudioContextCtor | null {\n\tif (typeof window === \"undefined\") return null;\n\treturn (\n\t\twindow.AudioContext ||\n\t\t(window as Window & { webkitAudioContext?: AudioContextCtor })\n\t\t\t.webkitAudioContext ||\n\t\tnull\n\t);\n}\n\nfunction prefersReducedMotion(): boolean {\n\tif (\n\t\ttypeof window === \"undefined\" ||\n\t\ttypeof window.matchMedia !== \"function\"\n\t) {\n\t\treturn false;\n\t}\n\treturn window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n}\n\nfunction ensureContext(): AudioContext | null {\n\tconst AudioCtx = audioContextCtor();\n\tif (!AudioCtx) return null;\n\tif (!ctx || ctx.state === \"closed\") {\n\t\tctx = new AudioCtx();\n\t}\n\treturn ctx;\n}\n\nexport function unlockStudioSounds(): void {\n\tconst context = ensureContext();\n\tif (!context) return;\n\tvoid context.resume();\n}\n\nfunction playTone(\n\tcontext: AudioContext,\n\tfrequency: number,\n\tstartAt: number,\n\tdurationSec: number,\n): void {\n\tconst oscillator = context.createOscillator();\n\tconst gain = context.createGain();\n\toscillator.type = \"sine\";\n\toscillator.frequency.value = frequency;\n\tgain.gain.setValueAtTime(GAIN, startAt);\n\tgain.gain.exponentialRampToValueAtTime(0.001, startAt + durationSec);\n\toscillator.connect(gain);\n\tgain.connect(context.destination);\n\toscillator.start(startAt);\n\toscillator.stop(startAt + durationSec);\n}\n\nfunction playNow(context: AudioContext, kind: StudioSoundKind): void {\n\tconst now = context.currentTime;\n\tif (kind === \"chat\") {\n\t\tplayTone(context, CHAT_HZ, now, CHAT_MS / 1000);\n\t\treturn;\n\t}\n\tplayTone(context, REQUEST_LOW_HZ, now, REQUEST_NOTE_MS / 1000);\n\tplayTone(\n\t\tcontext,\n\t\tREQUEST_HIGH_HZ,\n\t\tnow + REQUEST_NOTE_MS / 1000,\n\t\tREQUEST_NOTE_MS / 1000,\n\t);\n}\n\nexport function playStudioSound(kind: StudioSoundKind): void {\n\tif (prefersReducedMotion()) return;\n\tif (kind === \"chat\") {\n\t\tconst at = Date.now();\n\t\tif (at - lastChatAt < CHAT_DEBOUNCE_MS) return;\n\t\tlastChatAt = at;\n\t}\n\tconst context = ensureContext();\n\tif (!context) return;\n\tconst run = () => {\n\t\tif (context.state !== \"running\") return;\n\t\tplayNow(context, kind);\n\t};\n\tif (context.state === \"running\") {\n\t\trun();\n\t\treturn;\n\t}\n\tvoid context.resume().then(run, () => undefined);\n}\n\nexport function resetStudioSoundsForTests(): void {\n\tlastChatAt = 0;\n\tif (ctx) {\n\t\tvoid ctx.close();\n\t\tctx = null;\n\t}\n}\n\nif (typeof document !== \"undefined\") {\n\tdocument.addEventListener(\"pointerdown\", unlockStudioSounds, {\n\t\tpassive: true,\n\t});\n}\n","export function postLivoEvent(type: string, payload?: unknown): void {\n\tif (typeof window === \"undefined\") return;\n\tif (window.parent === window) return;\n\twindow.parent.postMessage({ source: \"livo\", type, payload }, \"*\");\n}\n","export function playerWatchUrl(\n\tstreamId: string,\n\torigin = \"https://player.livo.tv\",\n): string {\n\treturn `${origin.replace(/\\/$/, \"\")}/${streamId}`;\n}\n","export async function copyText(\n\tvalue: string,\n\tclipboard: Pick<Clipboard, \"writeText\"> | null = globalThis.navigator\n\t\t?.clipboard ?? null,\n): Promise<boolean> {\n\tif (!clipboard) return false;\n\ttry {\n\t\tawait clipboard.writeText(value);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n","import { copyText } from \"./clipboard\";\n\nexport type ShareLinkResult = \"shared\" | \"copied\" | \"cancelled\" | \"failed\";\n\nexport type ShareApi = {\n\tshare: (data: ShareData) => Promise<void>;\n\tcanShare?: (data: ShareData) => boolean;\n};\n\nfunction isAbort(error: unknown): boolean {\n\treturn (\n\t\ttypeof error === \"object\" &&\n\t\terror !== null &&\n\t\t\"name\" in error &&\n\t\terror.name === \"AbortError\"\n\t);\n}\n\nexport function resolveShareApi(\n\tshare: ShareApi | null | undefined = typeof navigator === \"undefined\"\n\t\t? null\n\t\t: typeof navigator.share === \"function\"\n\t\t\t? navigator\n\t\t\t: null,\n): ShareApi | null {\n\treturn share ?? null;\n}\n\nexport function canNativeShare(\n\tdata: ShareData,\n\tshare: ShareApi | null = resolveShareApi(),\n): boolean {\n\tif (!share) return false;\n\tif (typeof share.canShare !== \"function\") return true;\n\ttry {\n\t\treturn share.canShare(data);\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nexport async function shareOrCopyLink(\n\toptions: { url: string; title?: string; text?: string },\n\tdeps?: {\n\t\tshare?: ShareApi | null;\n\t\tcopy?: typeof copyText;\n\t},\n): Promise<ShareLinkResult> {\n\tconst data: ShareData = {\n\t\turl: options.url,\n\t\t...(options.title ? { title: options.title } : {}),\n\t\t...(options.text ? { text: options.text } : {}),\n\t};\n\tconst share = resolveShareApi(deps?.share);\n\tif (canNativeShare(data, share) && share) {\n\t\ttry {\n\t\t\tawait share.share(data);\n\t\t\treturn \"shared\";\n\t\t} catch (error) {\n\t\t\tif (isAbort(error)) return \"cancelled\";\n\t\t}\n\t}\n\tconst copy = deps?.copy ?? copyText;\n\tconst ok = await copy(options.url);\n\treturn ok ? \"copied\" : \"failed\";\n}\n","export type StreamStatus =\n\t| \"scheduled\"\n\t| \"idle\"\n\t| \"spawning\"\n\t| \"ingest_ready\"\n\t| \"preview\"\n\t| \"public\"\n\t| \"ended\"\n\t| \"error\";\n\nexport type Stream = {\n\tsource: string;\n\tstatus: StreamStatus;\n};\n\nexport function canPublish(status: string): boolean {\n\treturn status === \"preview\";\n}\n","export const STUDIO_ELECTION_MS = 300;\nexport const STUDIO_WINDOW_CHANNEL = \"livo-studio-window\";\n\nexport type StudioWindowState = \"electing\" | \"owner\" | \"blocked\" | \"taken-over\";\n\nexport type StudioWindowMessage =\n\t| { kind: \"probe\"; key: string; from: string }\n\t| { kind: \"claimed\"; key: string; from: string }\n\t| { kind: \"takeover\"; key: string; from: string }\n\t| { kind: \"released\"; key: string; from: string };\n\nexport type StudioWindowChannel = {\n\tpost: (message: StudioWindowMessage) => void;\n\tsubscribe: (handler: (message: StudioWindowMessage) => void) => () => void;\n};\n\nconst MESSAGE_KINDS = new Set([\"probe\", \"claimed\", \"takeover\", \"released\"]);\n\nexport function isStudioWindowMessage(\n\tvalue: unknown,\n): value is StudioWindowMessage {\n\tif (!value || typeof value !== \"object\") return false;\n\tconst row = value as Record<string, unknown>;\n\treturn (\n\t\ttypeof row.kind === \"string\" &&\n\t\tMESSAGE_KINDS.has(row.kind) &&\n\t\ttypeof row.key === \"string\" &&\n\t\ttypeof row.from === \"string\"\n\t);\n}\n\nexport function createBroadcastStudioChannel(\n\tname = STUDIO_WINDOW_CHANNEL,\n): StudioWindowChannel | null {\n\tif (typeof BroadcastChannel === \"undefined\") return null;\n\ttry {\n\t\tconst channel = new BroadcastChannel(name);\n\t\treturn {\n\t\t\tpost(message) {\n\t\t\t\tchannel.postMessage(message);\n\t\t\t},\n\t\t\tsubscribe(handler) {\n\t\t\t\tconst onMessage = (event: MessageEvent) => {\n\t\t\t\t\tif (isStudioWindowMessage(event.data)) handler(event.data);\n\t\t\t\t};\n\t\t\t\tchannel.addEventListener(\"message\", onMessage);\n\t\t\t\treturn () => {\n\t\t\t\t\tchannel.removeEventListener(\"message\", onMessage);\n\t\t\t\t\tchannel.close();\n\t\t\t\t};\n\t\t\t},\n\t\t};\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nexport function createStudioWindowLock(options: {\n\tkey: string;\n\tid: string;\n\tchannel: StudioWindowChannel;\n\tonState: (state: StudioWindowState) => void;\n}): {\n\tstart: () => void;\n\thandle: (message: StudioWindowMessage) => void;\n\tclaimOwner: () => void;\n\tbecomeOwner: () => void;\n\trequestTakeover: () => void;\n\trelease: () => void;\n\tgetState: () => StudioWindowState;\n} {\n\tlet state: StudioWindowState = \"electing\";\n\tlet relinquished = false;\n\n\tfunction setState(next: StudioWindowState) {\n\t\tif (state === next) return;\n\t\tstate = next;\n\t\toptions.onState(state);\n\t}\n\n\tfunction announce() {\n\t\toptions.channel.post({\n\t\t\tkind: \"claimed\",\n\t\t\tkey: options.key,\n\t\t\tfrom: options.id,\n\t\t});\n\t}\n\n\tfunction handle(message: StudioWindowMessage) {\n\t\tif (message.key !== options.key || message.from === options.id) return;\n\t\tswitch (message.kind) {\n\t\t\tcase \"probe\":\n\t\t\t\tif (state === \"owner\" && !relinquished) announce();\n\t\t\t\treturn;\n\t\t\tcase \"claimed\":\n\t\t\t\tif (state === \"electing\") {\n\t\t\t\t\tsetState(\"blocked\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (state === \"owner\" && message.from < options.id) {\n\t\t\t\t\tsetState(\"blocked\");\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\tcase \"takeover\":\n\t\t\t\tif (state === \"owner\") setState(\"taken-over\");\n\t\t\t\treturn;\n\t\t\tcase \"released\":\n\t\t\t\tif (state === \"blocked\" || state === \"taken-over\") {\n\t\t\t\t\tsetState(\"electing\");\n\t\t\t\t\toptions.channel.post({\n\t\t\t\t\t\tkind: \"probe\",\n\t\t\t\t\t\tkey: options.key,\n\t\t\t\t\t\tfrom: options.id,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\tdefault: {\n\t\t\t\tconst _exhaustive: never = message;\n\t\t\t\treturn _exhaustive;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn {\n\t\tstart() {\n\t\t\toptions.channel.post({\n\t\t\t\tkind: \"probe\",\n\t\t\t\tkey: options.key,\n\t\t\t\tfrom: options.id,\n\t\t\t});\n\t\t},\n\t\thandle,\n\t\tclaimOwner() {\n\t\t\tif (state !== \"electing\") return;\n\t\t\trelinquished = false;\n\t\t\tsetState(\"owner\");\n\t\t\tannounce();\n\t\t},\n\t\tbecomeOwner() {\n\t\t\trelinquished = false;\n\t\t\tsetState(\"owner\");\n\t\t\tannounce();\n\t\t},\n\t\trequestTakeover() {\n\t\t\toptions.channel.post({\n\t\t\t\tkind: \"takeover\",\n\t\t\t\tkey: options.key,\n\t\t\t\tfrom: options.id,\n\t\t\t});\n\t\t},\n\t\trelease() {\n\t\t\tif (state !== \"owner\" || relinquished) return;\n\t\t\trelinquished = true;\n\t\t\toptions.channel.post({\n\t\t\t\tkind: \"released\",\n\t\t\t\tkey: options.key,\n\t\t\t\tfrom: options.id,\n\t\t\t});\n\t\t},\n\t\tgetState() {\n\t\t\treturn state;\n\t\t},\n\t};\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport {\n\tSTUDIO_ELECTION_MS,\n\tcreateBroadcastStudioChannel,\n\tcreateStudioWindowLock,\n\ttype StudioWindowState,\n} from \"../lib/window-lock\";\n\nexport function useStudioWindowLock(lockKey: string): {\n\tstate: StudioWindowState;\n\ttakeover: () => void;\n} {\n\tconst [state, setState] = useState<StudioWindowState>(\"electing\");\n\tconst lockRef = useRef<ReturnType<typeof createStudioWindowLock> | null>(\n\t\tnull,\n\t);\n\tconst takeoverTimer = useRef<number | null>(null);\n\n\tuseEffect(() => {\n\t\tconst channel = createBroadcastStudioChannel();\n\t\tif (!channel) {\n\t\t\tsetState(\"owner\");\n\t\t\treturn;\n\t\t}\n\t\tconst id = crypto.randomUUID();\n\t\tconst lock = createStudioWindowLock({\n\t\t\tkey: lockKey,\n\t\t\tid,\n\t\t\tchannel,\n\t\t\tonState: setState,\n\t\t});\n\t\tlockRef.current = lock;\n\t\tsetState(lock.getState());\n\t\tconst unsubscribe = channel.subscribe((message) => lock.handle(message));\n\t\tlock.start();\n\t\tconst electionTimer = window.setTimeout(() => {\n\t\t\tlock.claimOwner();\n\t\t}, STUDIO_ELECTION_MS);\n\t\tconst onPageHide = () => {\n\t\t\tlock.release();\n\t\t};\n\t\twindow.addEventListener(\"pagehide\", onPageHide);\n\t\treturn () => {\n\t\t\twindow.clearTimeout(electionTimer);\n\t\t\tif (takeoverTimer.current !== null) {\n\t\t\t\twindow.clearTimeout(takeoverTimer.current);\n\t\t\t\ttakeoverTimer.current = null;\n\t\t\t}\n\t\t\twindow.removeEventListener(\"pagehide\", onPageHide);\n\t\t\tlock.release();\n\t\t\tlockRef.current = null;\n\t\t\tunsubscribe();\n\t\t};\n\t}, [lockKey]);\n\n\tconst takeover = useCallback(() => {\n\t\tconst lock = lockRef.current;\n\t\tif (!lock) {\n\t\t\tsetState(\"owner\");\n\t\t\treturn;\n\t\t}\n\t\tlock.requestTakeover();\n\t\tif (takeoverTimer.current !== null) {\n\t\t\twindow.clearTimeout(takeoverTimer.current);\n\t\t}\n\t\ttakeoverTimer.current = window.setTimeout(() => {\n\t\t\tlock.becomeOwner();\n\t\t\ttakeoverTimer.current = null;\n\t\t}, STUDIO_ELECTION_MS);\n\t}, []);\n\n\treturn { state, takeover };\n}\n","export function StudioSkeleton() {\n\treturn (\n\t\t<div className=\"bg-background flex h-dvh flex-col\" aria-busy=\"true\">\n\t\t\t<div className=\"flex h-12 items-center justify-between border-b px-4\">\n\t\t\t\t<div className=\"bg-skeleton h-4 w-40 rounded\" />\n\t\t\t\t<div className=\"flex gap-2\">\n\t\t\t\t\t<div className=\"bg-skeleton size-8 rounded-md\" />\n\t\t\t\t\t<div className=\"bg-skeleton size-8 rounded-md\" />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div className=\"grid flex-1 grid-cols-1 gap-3 p-4 md:grid-cols-2\">\n\t\t\t\t<div className=\"bg-skeleton rounded-xl\" />\n\t\t\t\t<div className=\"bg-skeleton rounded-xl\" />\n\t\t\t</div>\n\t\t\t<div className=\"flex h-20 items-center justify-center gap-3 border-t\">\n\t\t\t\t<div className=\"bg-skeleton size-10 rounded-full\" />\n\t\t\t\t<div className=\"bg-skeleton size-10 rounded-full\" />\n\t\t\t\t<div className=\"bg-skeleton size-10 rounded-full\" />\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","\"use client\";\n\nimport {\n\tcreateContext,\n\tuseCallback,\n\tuseContext,\n\tuseEffect,\n\tuseRef,\n\tuseState,\n\ttype ReactNode,\n} from \"react\";\nimport { EmptyState } from \"../ui/empty-state\";\nimport { useStudioWindowLock } from \"../hooks/use-studio-window-lock\";\nimport { StudioSkeleton } from \"./studio-skeleton\";\n\ntype StudioWindowGateContextValue = {\n\treportDuplicate: () => void;\n};\n\nexport const StudioWindowGateContext =\n\tcreateContext<StudioWindowGateContextValue>({\n\t\treportDuplicate: () => undefined,\n\t});\n\nexport function useStudioWindowGate(): StudioWindowGateContextValue {\n\treturn useContext(StudioWindowGateContext);\n}\n\nexport function StudioWindowGate({\n\tlockKey,\n\tallowTakeover = true,\n\tlabels,\n\tchildren,\n}: {\n\tlockKey: string;\n\tallowTakeover?: boolean;\n\tlabels: {\n\t\tduplicateTitle: string;\n\t\tduplicateDescription: string;\n\t\tduplicateDescriptionNoTakeover: string;\n\t\tduplicateTakenOver: string;\n\t\tduplicateAction: string;\n\t};\n\tchildren: ReactNode;\n}) {\n\tconst { state, takeover } = useStudioWindowLock(lockKey);\n\tconst [meetingDuplicate, setMeetingDuplicate] = useState(false);\n\tconst [generation, setGeneration] = useState(0);\n\tconst previousState = useRef(state);\n\n\tuseEffect(() => {\n\t\tif (\n\t\t\tstate === \"owner\" &&\n\t\t\t(previousState.current === \"blocked\" ||\n\t\t\t\tpreviousState.current === \"taken-over\")\n\t\t) {\n\t\t\tsetMeetingDuplicate(false);\n\t\t}\n\t\tpreviousState.current = state;\n\t}, [state]);\n\n\tconst reportDuplicate = useCallback(() => {\n\t\tsetMeetingDuplicate(true);\n\t}, []);\n\n\tconst onContinue = useCallback(() => {\n\t\tsetMeetingDuplicate(false);\n\t\tsetGeneration((n) => n + 1);\n\t\ttakeover();\n\t}, [takeover]);\n\n\tif (state === \"electing\") {\n\t\treturn <StudioSkeleton />;\n\t}\n\n\tconst blocked =\n\t\tstate === \"blocked\" || state === \"taken-over\" || meetingDuplicate;\n\tif (blocked) {\n\t\tconst takenOver = state === \"taken-over\";\n\t\treturn (\n\t\t\t<div className=\"flex h-dvh flex-col items-center justify-center p-6\">\n\t\t\t\t<EmptyState\n\t\t\t\t\ttitle={labels.duplicateTitle}\n\t\t\t\t\tdescription={\n\t\t\t\t\t\ttakenOver\n\t\t\t\t\t\t\t? labels.duplicateTakenOver\n\t\t\t\t\t\t\t: allowTakeover\n\t\t\t\t\t\t\t\t? labels.duplicateDescription\n\t\t\t\t\t\t\t\t: labels.duplicateDescriptionNoTakeover\n\t\t\t\t\t}\n\t\t\t\t\tactionLabel={allowTakeover ? labels.duplicateAction : undefined}\n\t\t\t\t\tonAction={allowTakeover ? onContinue : undefined}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<StudioWindowGateContext.Provider value={{ reportDuplicate }}>\n\t\t\t<div key={generation}>{children}</div>\n\t\t</StudioWindowGateContext.Provider>\n\t);\n}\n","import type {\n\tStudioDeviceKind,\n\tStudioDeviceOption,\n\tStudioDevices,\n} from \"./meeting\";\n\nexport type { StudioDeviceKind, StudioDeviceOption, StudioDevices };\n\nexport type StudioDeviceSelection = {\n\taudio: string;\n\tvideo: string;\n\tspeaker: string;\n};\n\nexport const EMPTY_STUDIO_DEVICE_SELECTION: StudioDeviceSelection = {\n\taudio: \"\",\n\tvideo: \"\",\n\tspeaker: \"\",\n};\n\nexport const STUDIO_DEVICE_CHANGE_DEBOUNCE_MS = 250;\n\nconst STORAGE_KEYS: Record<StudioDeviceKind, string> = {\n\taudio: \"livo-studio-device-audio\",\n\tvideo: \"livo-studio-device-video\",\n\tspeaker: \"livo-studio-device-speaker\",\n};\n\nconst DEVICE_KINDS: readonly StudioDeviceKind[] = [\"audio\", \"video\", \"speaker\"];\n\ntype DeviceStorage = Pick<Storage, \"getItem\" | \"setItem\">;\n\nexport function readStudioDeviceSelection(\n\tstorage: DeviceStorage | null = defaultStorage(),\n): StudioDeviceSelection {\n\treturn {\n\t\taudio: storage?.getItem(STORAGE_KEYS.audio)?.trim() ?? \"\",\n\t\tvideo: storage?.getItem(STORAGE_KEYS.video)?.trim() ?? \"\",\n\t\tspeaker: storage?.getItem(STORAGE_KEYS.speaker)?.trim() ?? \"\",\n\t};\n}\n\nexport function persistStudioDeviceSelection(\n\tkind: StudioDeviceKind,\n\tdeviceId: string,\n\tstorage: DeviceStorage | null = defaultStorage(),\n): void {\n\tstorage?.setItem(STORAGE_KEYS[kind], deviceId.trim());\n}\n\nexport function mapMediaDevices(\n\tdevices: Array<Pick<MediaDeviceInfo, \"deviceId\" | \"kind\" | \"label\">>,\n): StudioDevices {\n\tconst next: StudioDevices = { audio: [], video: [], speaker: [] };\n\tfor (const device of devices) {\n\t\tconst kind = mediaKindToStudio(device.kind);\n\t\tif (!kind || !device.deviceId) continue;\n\t\tnext[kind].push({\n\t\t\tdeviceId: device.deviceId,\n\t\t\tlabel: device.label.trim() || `Device ${next[kind].length + 1}`,\n\t\t});\n\t}\n\treturn next;\n}\n\nexport function resolveDeviceSelection(\n\tsaved: StudioDeviceSelection,\n\tdevices: StudioDevices,\n): {\n\teffective: StudioDeviceSelection;\n\tmissing: Record<StudioDeviceKind, boolean>;\n} {\n\tconst effective: StudioDeviceSelection = {\n\t\taudio: \"\",\n\t\tvideo: \"\",\n\t\tspeaker: \"\",\n\t};\n\tconst missing: Record<StudioDeviceKind, boolean> = {\n\t\taudio: false,\n\t\tvideo: false,\n\t\tspeaker: false,\n\t};\n\tfor (const kind of DEVICE_KINDS) {\n\t\tconst id = saved[kind];\n\t\tif (!id) continue;\n\t\tif (devices[kind].some((option) => option.deviceId === id)) {\n\t\t\teffective[kind] = id;\n\t\t\tcontinue;\n\t\t}\n\t\tmissing[kind] = true;\n\t}\n\treturn { effective, missing };\n}\n\nexport function displayDeviceId(\n\tvalue: string,\n\toptions: StudioDeviceOption[],\n): string {\n\tif (options.some((option) => option.deviceId === value)) return value;\n\treturn options[0]?.deviceId ?? \"\";\n}\n\nexport async function applyStudioDeviceSelection(\n\tsetDevice: (kind: StudioDeviceKind, deviceId: string) => Promise<void>,\n\tsaved: StudioDeviceSelection,\n\tlisted: StudioDevices,\n): Promise<void> {\n\tconst { effective } = resolveDeviceSelection(saved, listed);\n\tawait Promise.allSettled(\n\t\tDEVICE_KINDS.filter((kind) => effective[kind]).map((kind) =>\n\t\t\tsetDevice(kind, effective[kind]),\n\t\t),\n\t);\n}\n\nfunction mediaKindToStudio(kind: MediaDeviceKind): StudioDeviceKind | null {\n\tswitch (kind) {\n\t\tcase \"audioinput\":\n\t\t\treturn \"audio\";\n\t\tcase \"videoinput\":\n\t\t\treturn \"video\";\n\t\tcase \"audiooutput\":\n\t\t\treturn \"speaker\";\n\t\tdefault: {\n\t\t\tconst _exhaustive: never = kind;\n\t\t\treturn _exhaustive;\n\t\t}\n\t}\n}\n\nfunction defaultStorage(): DeviceStorage | null {\n\tif (typeof window === \"undefined\") return null;\n\ttry {\n\t\treturn window.localStorage;\n\t} catch {\n\t\treturn null;\n\t}\n}\n","\"use client\";\n\nimport { useEffect, useRef } from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport function AudioWaveform({\n\ttrack,\n\treducedMotion,\n\tclassName,\n}: {\n\ttrack: MediaStreamTrack | null;\n\treducedMotion: boolean;\n\tclassName?: string;\n}) {\n\tconst canvasRef = useRef<HTMLCanvasElement | null>(null);\n\n\tuseEffect(() => {\n\t\tconst canvas = canvasRef.current;\n\t\tif (!canvas || !track || reducedMotion) return;\n\t\tconst AudioCtx =\n\t\t\twindow.AudioContext ||\n\t\t\t(window as Window & { webkitAudioContext?: typeof AudioContext })\n\t\t\t\t.webkitAudioContext;\n\t\tif (!AudioCtx) return;\n\t\tconst ctx = new AudioCtx();\n\t\tconst source = ctx.createMediaStreamSource(new MediaStream([track]));\n\t\tconst analyser = ctx.createAnalyser();\n\t\tanalyser.fftSize = 64;\n\t\tsource.connect(analyser);\n\t\tconst data = new Uint8Array(analyser.frequencyBinCount);\n\t\tconst graphic = canvas.getContext(\"2d\");\n\t\tconst surface = canvas;\n\t\tlet frame = 0;\n\n\t\tfunction draw() {\n\t\t\tif (!graphic) return;\n\t\t\tanalyser.getByteFrequencyData(data);\n\t\t\tconst { width, height } = surface;\n\t\t\tgraphic.clearRect(0, 0, width, height);\n\t\t\tconst barWidth = width / data.length;\n\t\t\tfor (let i = 0; i < data.length; i += 1) {\n\t\t\t\tconst value = data[i] ?? 0;\n\t\t\t\tconst barHeight = (value / 255) * height;\n\t\t\t\tgraphic.fillStyle = \"currentColor\";\n\t\t\t\tgraphic.fillRect(\n\t\t\t\t\ti * barWidth,\n\t\t\t\t\theight - barHeight,\n\t\t\t\t\tbarWidth - 1,\n\t\t\t\t\tbarHeight,\n\t\t\t\t);\n\t\t\t}\n\t\t\tframe = requestAnimationFrame(draw);\n\t\t}\n\t\tframe = requestAnimationFrame(draw);\n\t\treturn () => {\n\t\t\tcancelAnimationFrame(frame);\n\t\t\tvoid ctx.close();\n\t\t};\n\t}, [track, reducedMotion]);\n\n\tif (reducedMotion) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"bg-muted flex h-12 items-end justify-center gap-1 px-3\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\taria-hidden\n\t\t\t>\n\t\t\t\t<span className=\"bg-foreground/40 h-3 w-1 rounded-sm\" />\n\t\t\t\t<span className=\"bg-foreground/60 h-6 w-1 rounded-sm\" />\n\t\t\t\t<span className=\"bg-foreground/40 h-4 w-1 rounded-sm\" />\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<canvas\n\t\t\tref={canvasRef}\n\t\t\twidth={160}\n\t\t\theight={48}\n\t\t\tclassName={cn(\"text-foreground h-12 w-40\", className)}\n\t\t\taria-hidden\n\t\t/>\n\t);\n}\n","\"use client\";\n\nimport { Tooltip as TooltipPrimitive } from \"@base-ui/react/tooltip\";\n\nimport { cn } from \"../lib/cn\";\n\nfunction TooltipProvider({\n\tdelay = 0,\n\t...props\n}: TooltipPrimitive.Provider.Props) {\n\treturn (\n\t\t<TooltipPrimitive.Provider\n\t\t\tdata-slot=\"tooltip-provider\"\n\t\t\tdelay={delay}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction Tooltip({ ...props }: TooltipPrimitive.Root.Props) {\n\treturn <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />;\n}\n\nfunction TooltipTrigger({ ...props }: TooltipPrimitive.Trigger.Props) {\n\treturn <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />;\n}\n\nfunction TooltipContent({\n\tclassName,\n\tside = \"top\",\n\tsideOffset = 4,\n\talign = \"center\",\n\talignOffset = 0,\n\tchildren,\n\t...props\n}: TooltipPrimitive.Popup.Props &\n\tPick<\n\t\tTooltipPrimitive.Positioner.Props,\n\t\t\"align\" | \"alignOffset\" | \"side\" | \"sideOffset\"\n\t>) {\n\treturn (\n\t\t<TooltipPrimitive.Portal>\n\t\t\t<TooltipPrimitive.Positioner\n\t\t\t\talign={align}\n\t\t\t\talignOffset={alignOffset}\n\t\t\t\tside={side}\n\t\t\t\tsideOffset={sideOffset}\n\t\t\t\tclassName=\"isolate z-50\"\n\t\t\t>\n\t\t\t\t<TooltipPrimitive.Popup\n\t\t\t\t\tdata-slot=\"tooltip-content\"\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"z-50 inline-flex w-fit max-w-xs origin-(--transform-origin) items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs text-background has-data-[slot=kbd]:pr-1.5 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\t{...props}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t\t<TooltipPrimitive.Arrow className=\"z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground data-[side=bottom]:top-1 data-[side=inline-end]:top-1/2! data-[side=inline-end]:-left-1 data-[side=inline-end]:-translate-y-1/2 data-[side=inline-start]:top-1/2! data-[side=inline-start]:-right-1 data-[side=inline-start]:-translate-y-1/2 data-[side=left]:top-1/2! data-[side=left]:-right-1 data-[side=left]:-translate-y-1/2 data-[side=right]:top-1/2! data-[side=right]:-left-1 data-[side=right]:-translate-y-1/2 data-[side=top]:-bottom-2.5\" />\n\t\t\t\t</TooltipPrimitive.Popup>\n\t\t\t</TooltipPrimitive.Positioner>\n\t\t</TooltipPrimitive.Portal>\n\t);\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { Loader2 } from \"lucide-react\";\nimport { Button } from \"../ui/button\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"../ui/tooltip\";\n\nexport function ControlIcon({\n\tlabel,\n\tpressed = false,\n\tdisabled = false,\n\tpending = false,\n\ttone = \"default\",\n\tbadge,\n\tonClick,\n\tchildren,\n}: {\n\tlabel: string;\n\tpressed?: boolean;\n\tdisabled?: boolean;\n\tpending?: boolean;\n\ttone?: \"default\" | \"danger\";\n\tbadge?: number;\n\tonClick: () => void;\n\tchildren: ReactNode;\n}) {\n\treturn (\n\t\t<Tooltip>\n\t\t\t<TooltipTrigger\n\t\t\t\trender={\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tsize=\"icon-lg\"\n\t\t\t\t\t\tvariant={\n\t\t\t\t\t\t\ttone === \"danger\"\n\t\t\t\t\t\t\t\t? \"destructive\"\n\t\t\t\t\t\t\t\t: pressed\n\t\t\t\t\t\t\t\t\t? \"default\"\n\t\t\t\t\t\t\t\t\t: \"secondary\"\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclassName=\"overflow-visible\"\n\t\t\t\t\t\taria-label={label}\n\t\t\t\t\t\taria-pressed={pressed}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tonClick={onClick}\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t<span className=\"relative overflow-visible\">\n\t\t\t\t\t{pending ? (\n\t\t\t\t\t\t<Loader2 className=\"animate-spin motion-reduce:animate-none\" />\n\t\t\t\t\t) : (\n\t\t\t\t\t\tchildren\n\t\t\t\t\t)}\n\t\t\t\t\t{badge != null && badge > 0 ? (\n\t\t\t\t\t\t<span className=\"bg-primary text-primary-foreground absolute -top-2 -right-2 flex h-4 min-w-4 items-center justify-center rounded-full px-1 text-[0.65rem]\">\n\t\t\t\t\t\t\t{badge}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t) : null}\n\t\t\t\t</span>\n\t\t\t</TooltipTrigger>\n\t\t\t<TooltipContent>{label}</TooltipContent>\n\t\t</Tooltip>\n\t);\n}\n\nexport function TileIcon({\n\tlabel,\n\tdisabled = false,\n\ttone = \"default\",\n\tonClick,\n\tchildren,\n}: {\n\tlabel: string;\n\tdisabled?: boolean;\n\ttone?: \"default\" | \"danger\";\n\tonClick: () => void;\n\tchildren: ReactNode;\n}) {\n\treturn (\n\t\t<Tooltip>\n\t\t\t<TooltipTrigger\n\t\t\t\trender={\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tsize=\"icon-xs\"\n\t\t\t\t\t\tvariant={tone === \"danger\" ? \"destructive\" : \"secondary\"}\n\t\t\t\t\t\tclassName=\"bg-black/70 text-white hover:bg-black/90 hover:text-white\"\n\t\t\t\t\t\taria-label={label}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tonClick={onClick}\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</TooltipTrigger>\n\t\t\t<TooltipContent>{label}</TooltipContent>\n\t\t</Tooltip>\n\t);\n}\n","\"use client\";\n\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { XIcon } from \"lucide-react\";\nimport type { ComponentProps } from \"react\";\nimport { cn } from \"../lib/cn\";\n\nfunction Dialog({ ...props }: ComponentProps<typeof DialogPrimitive.Root>) {\n\treturn <DialogPrimitive.Root data-slot=\"dialog\" {...props} />;\n}\n\nfunction DialogTrigger({\n\t...props\n}: ComponentProps<typeof DialogPrimitive.Trigger>) {\n\treturn <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />;\n}\n\nfunction DialogPortal({\n\t...props\n}: ComponentProps<typeof DialogPrimitive.Portal>) {\n\treturn <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />;\n}\n\nfunction DialogClose({\n\t...props\n}: ComponentProps<typeof DialogPrimitive.Close>) {\n\treturn <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />;\n}\n\nfunction DialogOverlay({\n\tclassName,\n\t...props\n}: ComponentProps<typeof DialogPrimitive.Overlay>) {\n\treturn (\n\t\t<DialogPrimitive.Overlay\n\t\t\tdata-slot=\"dialog-overlay\"\n\t\t\tclassName={cn(\n\t\t\t\t\"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction DialogContent({\n\tclassName,\n\tchildren,\n\tshowCloseButton = true,\n\t...props\n}: ComponentProps<typeof DialogPrimitive.Content> & {\n\tshowCloseButton?: boolean;\n}) {\n\treturn (\n\t\t<DialogPortal>\n\t\t\t<DialogOverlay />\n\t\t\t<DialogPrimitive.Content\n\t\t\t\tdata-slot=\"dialog-content\"\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t\t{showCloseButton ? (\n\t\t\t\t\t<DialogPrimitive.Close className=\"ring-offset-background focus:ring-ring absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none\">\n\t\t\t\t\t\t<XIcon className=\"size-4\" />\n\t\t\t\t\t\t<span className=\"sr-only\">Close</span>\n\t\t\t\t\t</DialogPrimitive.Close>\n\t\t\t\t) : null}\n\t\t\t</DialogPrimitive.Content>\n\t\t</DialogPortal>\n\t);\n}\n\nfunction DialogHeader({ className, ...props }: ComponentProps<\"div\">) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"dialog-header\"\n\t\t\tclassName={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction DialogFooter({ className, ...props }: ComponentProps<\"div\">) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"dialog-footer\"\n\t\t\tclassName={cn(\n\t\t\t\t\"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction DialogTitle({\n\tclassName,\n\t...props\n}: ComponentProps<typeof DialogPrimitive.Title>) {\n\treturn (\n\t\t<DialogPrimitive.Title\n\t\t\tdata-slot=\"dialog-title\"\n\t\t\tclassName={cn(\"text-lg leading-none font-semibold\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction DialogDescription({\n\tclassName,\n\t...props\n}: ComponentProps<typeof DialogPrimitive.Description>) {\n\treturn (\n\t\t<DialogPrimitive.Description\n\t\t\tdata-slot=\"dialog-description\"\n\t\t\tclassName={cn(\"text-muted-foreground text-sm\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport {\n\tDialog,\n\tDialogClose,\n\tDialogContent,\n\tDialogDescription,\n\tDialogFooter,\n\tDialogHeader,\n\tDialogTitle,\n\tDialogTrigger,\n};\n","import * as React from \"react\";\nimport { Input as InputPrimitive } from \"@base-ui/react/input\";\n\nimport { cn } from \"../lib/cn\";\n\nfunction Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\n\treturn (\n\t\t<InputPrimitive\n\t\t\ttype={type}\n\t\t\tdata-slot=\"input\"\n\t\t\tclassName={cn(\n\t\t\t\t\"h-8 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport { Input };\n","\"use client\";\n\nimport * as LabelPrimitive from \"@radix-ui/react-label\";\nimport type { ComponentProps } from \"react\";\nimport { cn } from \"../lib/cn\";\n\nfunction Label({\n\tclassName,\n\t...props\n}: ComponentProps<typeof LabelPrimitive.Root>) {\n\treturn (\n\t\t<LabelPrimitive.Root\n\t\t\tdata-slot=\"label\"\n\t\t\tclassName={cn(\n\t\t\t\t\"flex items-center gap-2 text-sm leading-none font-medium select-none peer-disabled:cursor-not-allowed peer-disabled:opacity-50\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport { Label };\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport {\n\tmapMediaDevices,\n\tSTUDIO_DEVICE_CHANGE_DEBOUNCE_MS,\n} from \"../lib/devices\";\nimport type { StudioDevices } from \"../lib/meeting\";\n\nconst EMPTY_DEVICES: StudioDevices = {\n\taudio: [],\n\tvideo: [],\n\tspeaker: [],\n};\n\nexport function useMediaDevices(refreshKey = 0, enabled = true): StudioDevices {\n\tconst [devices, setDevices] = useState<StudioDevices>(EMPTY_DEVICES);\n\n\tuseEffect(() => {\n\t\tif (!enabled) return;\n\t\tif (typeof navigator === \"undefined\" || !navigator.mediaDevices) {\n\t\t\treturn;\n\t\t}\n\t\tlet cancelled = false;\n\t\tlet timer: number | undefined;\n\n\t\tconst load = async () => {\n\t\t\ttry {\n\t\t\t\tconst list = await navigator.mediaDevices.enumerateDevices();\n\t\t\t\tif (!cancelled) setDevices(mapMediaDevices(list));\n\t\t\t} catch {\n\t\t\t\tif (!cancelled) setDevices(EMPTY_DEVICES);\n\t\t\t}\n\t\t};\n\n\t\tconst onChange = () => {\n\t\t\twindow.clearTimeout(timer);\n\t\t\ttimer = window.setTimeout(() => {\n\t\t\t\tvoid load();\n\t\t\t}, STUDIO_DEVICE_CHANGE_DEBOUNCE_MS);\n\t\t};\n\n\t\tvoid load();\n\t\tnavigator.mediaDevices.addEventListener(\"devicechange\", onChange);\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t\twindow.clearTimeout(timer);\n\t\t\tnavigator.mediaDevices.removeEventListener(\"devicechange\", onChange);\n\t\t};\n\t}, [enabled, refreshKey]);\n\n\treturn devices;\n}\n","const TEST_MS = 400;\nconst TEST_HZ = 440;\n\ntype SinkAudioElement = HTMLAudioElement & {\n\tsetSinkId?: (id: string) => Promise<void>;\n\tplaysInline?: boolean;\n};\n\nexport async function playSpeakerTest(deviceId?: string): Promise<void> {\n\tconst AudioCtx =\n\t\twindow.AudioContext ||\n\t\t(window as Window & { webkitAudioContext?: typeof AudioContext })\n\t\t\t.webkitAudioContext;\n\tif (!AudioCtx) {\n\t\tthrow new Error(\"AudioContext unavailable\");\n\t}\n\n\tconst ctx = new AudioCtx();\n\tvoid ctx.resume();\n\n\tconst oscillator = ctx.createOscillator();\n\tconst gain = ctx.createGain();\n\toscillator.type = \"sine\";\n\toscillator.frequency.value = TEST_HZ;\n\tgain.gain.value = 0.18;\n\toscillator.connect(gain);\n\n\tlet audio: SinkAudioElement | null = null;\n\n\ttry {\n\t\tconst probe = document.createElement(\"audio\") as SinkAudioElement;\n\t\tconst canRoute = Boolean(deviceId) && typeof probe.setSinkId === \"function\";\n\t\tif (canRoute && deviceId) {\n\t\t\tconst destination = ctx.createMediaStreamDestination();\n\t\t\tgain.connect(destination);\n\t\t\taudio = probe;\n\t\t\taudio.autoplay = true;\n\t\t\taudio.playsInline = true;\n\t\t\taudio.srcObject = destination.stream;\n\t\t\ttry {\n\t\t\t\tawait audio.setSinkId?.(deviceId);\n\t\t\t\tawait audio.play();\n\t\t\t} catch {\n\t\t\t\tgain.disconnect();\n\t\t\t\tgain.connect(ctx.destination);\n\t\t\t\taudio.srcObject = null;\n\t\t\t\taudio.remove();\n\t\t\t\taudio = null;\n\t\t\t}\n\t\t} else {\n\t\t\tgain.connect(ctx.destination);\n\t\t}\n\n\t\toscillator.start();\n\t\tawait new Promise<void>((resolve) => {\n\t\t\twindow.setTimeout(resolve, TEST_MS);\n\t\t});\n\t\toscillator.stop();\n\t} finally {\n\t\tif (audio) {\n\t\t\taudio.srcObject = null;\n\t\t\taudio.remove();\n\t\t}\n\t\tawait ctx.close();\n\t}\n}\n","\"use client\";\n\nimport { Mic, Video, Volume2 } from \"lucide-react\";\nimport { type ReactNode } from \"react\";\nimport { displayDeviceId } from \"../lib/devices\";\nimport type {\n\tStudioDeviceKind,\n\tStudioDeviceOption,\n\tStudioDevices,\n} from \"../lib/meeting\";\nimport { cn } from \"../lib/cn\";\n\nexport type StudioDeviceSelectLabels = {\n\tcameraDevice: string;\n\tmicDevice: string;\n\tspeakerDevice: string;\n};\n\nexport function StudioDeviceSelectGroup({\n\tdevices,\n\tselected,\n\tlabels,\n\tonChange,\n\tspeakerAction,\n}: {\n\tdevices: StudioDevices;\n\tselected: { audio: string; video: string; speaker: string };\n\tlabels: StudioDeviceSelectLabels;\n\tonChange: (kind: StudioDeviceKind, deviceId: string) => void;\n\tspeakerAction?: ReactNode;\n}) {\n\treturn (\n\t\t<div className=\"grid grid-cols-[8.5rem_minmax(0,1fr)] items-center gap-x-3 gap-y-3\">\n\t\t\t<DeviceRow\n\t\t\t\ticon={<Video />}\n\t\t\t\tlabel={labels.cameraDevice}\n\t\t\t\toptions={devices.video}\n\t\t\t\tvalue={selected.video}\n\t\t\t\tonChange={(id) => onChange(\"video\", id)}\n\t\t\t/>\n\t\t\t<DeviceRow\n\t\t\t\ticon={<Mic />}\n\t\t\t\tlabel={labels.micDevice}\n\t\t\t\toptions={devices.audio}\n\t\t\t\tvalue={selected.audio}\n\t\t\t\tonChange={(id) => onChange(\"audio\", id)}\n\t\t\t/>\n\t\t\t<DeviceRow\n\t\t\t\ticon={<Volume2 />}\n\t\t\t\tlabel={labels.speakerDevice}\n\t\t\t\toptions={devices.speaker}\n\t\t\t\tvalue={selected.speaker}\n\t\t\t\tonChange={(id) => onChange(\"speaker\", id)}\n\t\t\t\taction={speakerAction}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nfunction DeviceRow({\n\ticon,\n\tlabel,\n\toptions,\n\tvalue,\n\tonChange,\n\taction,\n}: {\n\ticon: ReactNode;\n\tlabel: string;\n\toptions: StudioDeviceOption[];\n\tvalue: string;\n\tonChange: (deviceId: string) => void;\n\taction?: ReactNode;\n}) {\n\tconst display = displayDeviceId(value, options);\n\treturn (\n\t\t<>\n\t\t\t<span className=\"text-muted-foreground flex min-w-0 items-center gap-2 text-sm\">\n\t\t\t\t<span className=\"[&_svg]:size-4\" aria-hidden>\n\t\t\t\t\t{icon}\n\t\t\t\t</span>\n\t\t\t\t<span className=\"truncate\">{label}</span>\n\t\t\t</span>\n\t\t\t<div className=\"flex min-w-0 items-center gap-2\">\n\t\t\t\t{options.length > 0 ? (\n\t\t\t\t\t<select\n\t\t\t\t\t\taria-label={label}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"border-input bg-background h-8 min-w-0 flex-1 rounded-md border px-2 text-base md:text-sm\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t\tvalue={display}\n\t\t\t\t\t\tonChange={(event) => onChange(event.target.value)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{options.map((option) => (\n\t\t\t\t\t\t\t<option key={option.deviceId} value={option.deviceId}>\n\t\t\t\t\t\t\t\t{option.label}\n\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</select>\n\t\t\t\t) : null}\n\t\t\t\t{action}\n\t\t\t</div>\n\t\t</>\n\t);\n}\n","\"use client\";\n\nimport { useEffect, useRef, useState } from \"react\";\nimport { toast } from \"sonner\";\nimport { Button } from \"../ui/button\";\nimport {\n\tDialog,\n\tDialogContent,\n\tDialogDescription,\n\tDialogHeader,\n\tDialogTitle,\n} from \"../ui/dialog\";\nimport { Input } from \"../ui/input\";\nimport { Label } from \"../ui/label\";\nimport { useMediaDevices } from \"../hooks/use-media-devices\";\nimport {\n\tpersistStudioDeviceSelection,\n\treadStudioDeviceSelection,\n\tresolveDeviceSelection,\n\ttype StudioDeviceSelection,\n} from \"../lib/devices\";\nimport type { StudioDeviceKind, StudioMeetingHandle } from \"../lib/meeting\";\nimport { STUDIO_DISPLAY_NAME_MAX } from \"../lib/meeting\";\nimport { playSpeakerTest } from \"../lib/speaker-test\";\nimport { AudioWaveform } from \"./audio-waveform\";\nimport { StudioDeviceSelectGroup } from \"./studio-device-select\";\n\nexport type StudioSettingsLabels = {\n\tsettingsTitle: string;\n\tsettingsDescription: string;\n\tguestName: string;\n\tdisplayNameSave: string;\n\tdisplayNameSaved: string;\n\tdisplayNameError: string;\n\tcameraDevice: string;\n\tmicDevice: string;\n\tspeakerDevice: string;\n\ttestSpeaker: string;\n\ttestSpeakerError: string;\n\tcameraOff: string;\n\tmicLevel: string;\n};\n\nexport function StudioSettingsDialog({\n\topen,\n\tonOpenChange,\n\tmeeting,\n\tlabels,\n\treducedMotion,\n\tcameraOn,\n}: {\n\topen: boolean;\n\tonOpenChange: (open: boolean) => void;\n\tmeeting: StudioMeetingHandle;\n\tlabels: StudioSettingsLabels;\n\treducedMotion: boolean;\n\tcameraOn: boolean;\n}) {\n\tconst devices = useMediaDevices(open ? 1 : 0, open);\n\tconst [saved, setSaved] = useState<StudioDeviceSelection>(() =>\n\t\treadStudioDeviceSelection(),\n\t);\n\tconst [audioTrack, setAudioTrack] = useState<MediaStreamTrack | null>(null);\n\tconst [videoTrack, setVideoTrack] = useState<MediaStreamTrack | null>(null);\n\tconst [testingSpeaker, setTestingSpeaker] = useState(false);\n\tconst [displayName, setDisplayName] = useState(\"\");\n\tconst [savedDisplayName, setSavedDisplayName] = useState(\"\");\n\tconst [savingDisplayName, setSavingDisplayName] = useState(false);\n\tconst { effective } = resolveDeviceSelection(saved, devices);\n\n\tuseEffect(() => {\n\t\tif (!open) return;\n\t\tsetSaved(readStudioDeviceSelection());\n\t}, [open]);\n\n\tuseEffect(() => {\n\t\tif (!open) return;\n\t\tconst selfName =\n\t\t\tmeeting\n\t\t\t\t.participants()\n\t\t\t\t.find((row) => row.isSelf)\n\t\t\t\t?.name?.trim() ?? \"\";\n\t\tsetDisplayName(selfName);\n\t\tsetSavedDisplayName(selfName);\n\t}, [meeting, open]);\n\n\tuseEffect(() => {\n\t\tif (!open) return;\n\t\tconst sync = () => {\n\t\t\tsetAudioTrack(meeting.localAudioTrack());\n\t\t\tsetVideoTrack(meeting.localVideoTrack());\n\t\t};\n\t\tsync();\n\t\treturn meeting.subscribeMedia(sync);\n\t}, [meeting, open]);\n\n\tconst trimmedDisplayName = displayName.trim();\n\tconst displayNameUnchanged = trimmedDisplayName === savedDisplayName;\n\tconst displayNameSaveDisabled =\n\t\t!trimmedDisplayName || displayNameUnchanged || savingDisplayName;\n\n\tasync function onChange(kind: StudioDeviceKind, deviceId: string) {\n\t\tpersistStudioDeviceSelection(kind, deviceId);\n\t\tsetSaved((prev) => ({ ...prev, [kind]: deviceId }));\n\t\ttry {\n\t\t\tawait meeting.setDevice(kind, deviceId);\n\t\t} catch {\n\t\t\t/* device may have vanished between enumerate and switch */\n\t\t}\n\t}\n\n\tasync function onSaveDisplayName() {\n\t\tif (displayNameSaveDisabled) return;\n\t\tsetSavingDisplayName(true);\n\t\ttry {\n\t\t\tawait meeting.setDisplayName(trimmedDisplayName);\n\t\t\tsetSavedDisplayName(trimmedDisplayName);\n\t\t\tsetDisplayName(trimmedDisplayName);\n\t\t\ttoast.success(labels.displayNameSaved);\n\t\t} catch {\n\t\t\ttoast.error(labels.displayNameError);\n\t\t} finally {\n\t\t\tsetSavingDisplayName(false);\n\t\t}\n\t}\n\n\tasync function onTestSpeaker() {\n\t\tif (testingSpeaker) return;\n\t\tconst speakerId = effective.speaker || devices.speaker[0]?.deviceId;\n\t\tsetTestingSpeaker(true);\n\t\ttry {\n\t\t\tawait playSpeakerTest(speakerId || undefined);\n\t\t} catch {\n\t\t\ttoast.error(labels.testSpeakerError);\n\t\t} finally {\n\t\t\tsetTestingSpeaker(false);\n\t\t}\n\t}\n\n\treturn (\n\t\t<Dialog open={open} onOpenChange={onOpenChange}>\n\t\t\t<DialogContent className=\"sm:max-w-md\">\n\t\t\t\t<DialogHeader>\n\t\t\t\t\t<DialogTitle>{labels.settingsTitle}</DialogTitle>\n\t\t\t\t\t<DialogDescription>{labels.settingsDescription}</DialogDescription>\n\t\t\t\t</DialogHeader>\n\t\t\t\t<div className=\"space-y-2\">\n\t\t\t\t\t<Label htmlFor=\"studio-display-name\">{labels.guestName}</Label>\n\t\t\t\t\t<div className=\"flex gap-2\">\n\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\tid=\"studio-display-name\"\n\t\t\t\t\t\t\tvalue={displayName}\n\t\t\t\t\t\t\tmaxLength={STUDIO_DISPLAY_NAME_MAX}\n\t\t\t\t\t\t\tonChange={(event) => setDisplayName(event.target.value)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\tdisabled={displayNameSaveDisabled}\n\t\t\t\t\t\t\tonClick={() => void onSaveDisplayName()}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{labels.displayNameSave}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<SettingsCameraPreview\n\t\t\t\t\ttrack={videoTrack}\n\t\t\t\t\topen={open}\n\t\t\t\t\tcameraOn={cameraOn}\n\t\t\t\t\tcameraOffLabel={labels.cameraOff}\n\t\t\t\t/>\n\t\t\t\t<div>\n\t\t\t\t\t<p className=\"sr-only\">{labels.micLevel}</p>\n\t\t\t\t\t<AudioWaveform\n\t\t\t\t\t\ttrack={audioTrack}\n\t\t\t\t\t\treducedMotion={reducedMotion}\n\t\t\t\t\t\tclassName=\"w-full\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t<StudioDeviceSelectGroup\n\t\t\t\t\tdevices={devices}\n\t\t\t\t\tselected={effective}\n\t\t\t\t\tlabels={labels}\n\t\t\t\t\tonChange={(kind, id) => void onChange(kind, id)}\n\t\t\t\t\tspeakerAction={\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\tdisabled={testingSpeaker}\n\t\t\t\t\t\t\tonClick={() => void onTestSpeaker()}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{labels.testSpeaker}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t</DialogContent>\n\t\t</Dialog>\n\t);\n}\n\nfunction SettingsCameraPreview({\n\ttrack,\n\topen,\n\tcameraOn,\n\tcameraOffLabel,\n}: {\n\ttrack: MediaStreamTrack | null;\n\topen: boolean;\n\tcameraOn: boolean;\n\tcameraOffLabel: string;\n}) {\n\tconst ref = useRef<HTMLVideoElement | null>(null);\n\n\tuseEffect(() => {\n\t\tconst el = ref.current;\n\t\tif (!el) return;\n\t\tif (!open || !cameraOn || !track) {\n\t\t\tel.srcObject = null;\n\t\t\treturn;\n\t\t}\n\t\tel.setAttribute(\"webkit-playsinline\", \"\");\n\t\tel.srcObject = new MediaStream([track]);\n\t\tvoid el.play().catch(() => undefined);\n\t\treturn () => {\n\t\t\tel.srcObject = null;\n\t\t};\n\t}, [cameraOn, open, track]);\n\n\tif (!cameraOn) {\n\t\treturn (\n\t\t\t<div className=\"bg-muted flex aspect-video w-full items-center justify-center rounded-xl\">\n\t\t\t\t<p className=\"text-muted-foreground text-sm\">{cameraOffLabel}</p>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif (!track) {\n\t\treturn (\n\t\t\t<div className=\"bg-muted aspect-video w-full rounded-xl\" aria-hidden />\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className=\"bg-muted relative aspect-video w-full overflow-hidden rounded-xl\">\n\t\t\t<video\n\t\t\t\tref={ref}\n\t\t\t\tautoPlay\n\t\t\t\tmuted\n\t\t\t\tplaysInline\n\t\t\t\tclassName=\"livo-studio-inline-video absolute inset-0 size-full -scale-x-100 object-cover\"\n\t\t\t/>\n\t\t</div>\n\t);\n}\n","\"use client\";\n\nimport { useEffect, useRef, useState } from \"react\";\nimport { Mic, MicOff, Settings, Video, VideoOff } from \"lucide-react\";\nimport type { StudioRoomLabels } from \"../lib/labels\";\nimport type { StudioMeetingHandle } from \"../lib/meeting\";\nimport { AudioWaveform } from \"./audio-waveform\";\nimport { ControlIcon } from \"./studio-control-icon\";\nimport { StudioSettingsDialog } from \"./studio-settings-dialog\";\nimport { TooltipProvider } from \"../ui/tooltip\";\n\nexport function StudioGuestWaiting({\n\tmeeting,\n\treducedMotion,\n\tcameraOn,\n\tmuted,\n\tlabels,\n\tsettingsOpen,\n\tstatusLabel,\n\tonToggleCamera,\n\tonToggleMute,\n\tonOpenSettings,\n\tonCloseSettings,\n}: {\n\tmeeting: StudioMeetingHandle;\n\treducedMotion: boolean;\n\tcameraOn: boolean;\n\tmuted: boolean;\n\tlabels: StudioRoomLabels;\n\tsettingsOpen: boolean;\n\tstatusLabel?: string;\n\tonToggleCamera: () => void;\n\tonToggleMute: () => void;\n\tonOpenSettings: () => void;\n\tonCloseSettings: (open: boolean) => void;\n}) {\n\tconst [audioTrack, setAudioTrack] = useState<MediaStreamTrack | null>(null);\n\tconst [videoTrack, setVideoTrack] = useState<MediaStreamTrack | null>(null);\n\n\tuseEffect(() => {\n\t\tconst sync = () => {\n\t\t\tsetAudioTrack(meeting.localAudioTrack());\n\t\t\tsetVideoTrack(meeting.localVideoTrack());\n\t\t};\n\t\tsync();\n\t\treturn meeting.subscribeMedia(sync);\n\t}, [meeting]);\n\n\treturn (\n\t\t<div className=\"mx-auto flex min-h-dvh w-full max-w-lg flex-col justify-center gap-6 p-6\">\n\t\t\t<WaitingCameraPreview\n\t\t\t\ttrack={videoTrack}\n\t\t\t\tcameraOn={cameraOn}\n\t\t\t\tcameraOffLabel={labels.cameraOff}\n\t\t\t/>\n\t\t\t<AudioWaveform\n\t\t\t\ttrack={muted ? null : audioTrack}\n\t\t\t\treducedMotion={reducedMotion}\n\t\t\t/>\n\t\t\t<p className=\"text-muted-foreground text-center text-sm\" role=\"status\">\n\t\t\t\t{statusLabel ?? labels.waitingHost}\n\t\t\t</p>\n\t\t\t<TooltipProvider>\n\t\t\t\t<div className=\"flex justify-center gap-2\">\n\t\t\t\t\t<ControlIcon\n\t\t\t\t\t\tlabel={muted ? labels.unmute : labels.mute}\n\t\t\t\t\t\tpressed={muted}\n\t\t\t\t\t\ttone={muted ? \"danger\" : \"default\"}\n\t\t\t\t\t\tonClick={onToggleMute}\n\t\t\t\t\t>\n\t\t\t\t\t\t{muted ? <MicOff /> : <Mic />}\n\t\t\t\t\t</ControlIcon>\n\t\t\t\t\t<ControlIcon\n\t\t\t\t\t\tlabel={labels.camera}\n\t\t\t\t\t\tpressed={cameraOn}\n\t\t\t\t\t\tonClick={onToggleCamera}\n\t\t\t\t\t>\n\t\t\t\t\t\t{cameraOn ? <Video /> : <VideoOff />}\n\t\t\t\t\t</ControlIcon>\n\t\t\t\t\t<ControlIcon\n\t\t\t\t\t\tlabel={labels.settings}\n\t\t\t\t\t\tpressed={settingsOpen}\n\t\t\t\t\t\tonClick={onOpenSettings}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Settings />\n\t\t\t\t\t</ControlIcon>\n\t\t\t\t</div>\n\t\t\t</TooltipProvider>\n\t\t\t<StudioSettingsDialog\n\t\t\t\topen={settingsOpen}\n\t\t\t\tonOpenChange={onCloseSettings}\n\t\t\t\tmeeting={meeting}\n\t\t\t\tlabels={labels}\n\t\t\t\treducedMotion={reducedMotion}\n\t\t\t\tcameraOn={cameraOn}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nfunction WaitingCameraPreview({\n\ttrack,\n\tcameraOn,\n\tcameraOffLabel,\n}: {\n\ttrack: MediaStreamTrack | null;\n\tcameraOn: boolean;\n\tcameraOffLabel: string;\n}) {\n\tconst ref = useRef<HTMLVideoElement | null>(null);\n\n\tuseEffect(() => {\n\t\tconst el = ref.current;\n\t\tif (!el) return;\n\t\tif (!cameraOn || !track) {\n\t\t\tel.srcObject = null;\n\t\t\treturn;\n\t\t}\n\t\tel.setAttribute(\"webkit-playsinline\", \"\");\n\t\tel.srcObject = new MediaStream([track]);\n\t\tvoid el.play().catch(() => undefined);\n\t\treturn () => {\n\t\t\tel.srcObject = null;\n\t\t};\n\t}, [cameraOn, track]);\n\n\tif (!cameraOn) {\n\t\treturn (\n\t\t\t<div className=\"bg-muted flex aspect-video w-full items-center justify-center rounded-xl\">\n\t\t\t\t<p className=\"text-muted-foreground text-sm\">{cameraOffLabel}</p>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif (!track) {\n\t\treturn (\n\t\t\t<div className=\"bg-muted aspect-video w-full rounded-xl\" aria-hidden />\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className=\"bg-muted relative aspect-video w-full overflow-hidden rounded-xl\">\n\t\t\t<video\n\t\t\t\tref={ref}\n\t\t\t\tautoPlay\n\t\t\t\tmuted\n\t\t\t\tplaysInline\n\t\t\t\tclassName=\"livo-studio-inline-video absolute inset-0 size-full -scale-x-100 object-cover\"\n\t\t\t/>\n\t\t</div>\n\t);\n}\n","import type { ReactNode } from \"react\";\n\nexport function StudioLiveBadge({\n\tchildren,\n\trole,\n}: {\n\tchildren: ReactNode;\n\trole?: \"status\";\n}) {\n\treturn (\n\t\t<span\n\t\t\trole={role}\n\t\t\tclassName=\"flex items-center gap-1.5 rounded bg-red-600 px-2 py-0.5 text-xs font-semibold tracking-wide text-white\"\n\t\t>\n\t\t\t<span className=\"size-1.5 animate-pulse rounded-full bg-white motion-reduce:animate-none\" />\n\t\t\t{children}\n\t\t</span>\n\t);\n}\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport type { HTMLAttributes } from \"react\";\nimport { cn } from \"../lib/cn\";\n\nconst badgeVariants = cva(\n\t\"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors\",\n\t{\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tdefault: \"border-transparent bg-primary text-primary-foreground\",\n\t\t\t\tsecondary: \"border-transparent bg-secondary text-secondary-foreground\",\n\t\t\t\tdestructive:\n\t\t\t\t\t\"border-transparent bg-destructive text-destructive-foreground\",\n\t\t\t\toutline: \"text-foreground\",\n\t\t\t\tsuccess:\n\t\t\t\t\t\"border-transparent bg-chart-5/15 text-chart-5 dark:bg-chart-5/25\",\n\t\t\t\twarning:\n\t\t\t\t\t\"border-transparent bg-chart-4/15 text-chart-4 dark:bg-chart-4/25\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: { variant: \"default\" },\n\t},\n);\n\ninterface BadgeProps\n\textends HTMLAttributes<HTMLSpanElement>, VariantProps<typeof badgeVariants> {}\n\nfunction Badge({ className, variant, ...props }: BadgeProps) {\n\treturn (\n\t\t<span className={cn(badgeVariants({ variant }), className)} {...props} />\n\t);\n}\n\nexport { Badge, badgeVariants };\n","\"use client\";\n\nimport {\n\tMic,\n\tMicOff,\n\tMonitorUp,\n\tUndo2,\n\tVideo,\n\tVideoOff,\n\tX,\n} from \"lucide-react\";\nimport { useEffect, useRef, type ReactNode } from \"react\";\nimport { Badge } from \"../ui/badge\";\nimport { Button } from \"../ui/button\";\nimport {\n\tresolveStudioPipSelfView,\n\tresolveStudioPipSpotlight,\n\ttype StudioMeetingHandle,\n\ttype StudioPipSpotlight,\n} from \"../lib/meeting\";\nimport { cn } from \"../lib/cn\";\nimport { StudioLiveBadge } from \"./studio-live-badge\";\n\nexport type StudioPipPanelLabels = {\n\tlive: string;\n\tmute: string;\n\tunmute: string;\n\tcamera: string;\n\tscreen: string;\n\tstopScreen: string;\n\taskToShare: string;\n\tshareRequested: string;\n\tcancelShareRequest: string;\n\tbackToStudio: string;\n\tpipTitle: string;\n\tcameraOff: string;\n};\n\nexport function StudioPipPanel({\n\tmeeting,\n\tlabels,\n\tcameraOn,\n\tmuted,\n\tscreenOn,\n\tshowMediaControls = true,\n\tshowScreenControl = false,\n\tcanShareFreely = false,\n\tscreenAvailable = true,\n\tscreenPending = false,\n\tshareGrant = \"idle\",\n\tonAir,\n\telapsed,\n\tunread = 0,\n\tonToggleMute,\n\tonToggleCamera,\n\tonToggleScreen,\n\tonAskToShare,\n\tonCancelShareRequest,\n\tonBack,\n}: {\n\tmeeting: StudioMeetingHandle;\n\tlabels: StudioPipPanelLabels;\n\tcameraOn: boolean;\n\tmuted: boolean;\n\tscreenOn: boolean;\n\tshowMediaControls?: boolean;\n\tshowScreenControl?: boolean;\n\tcanShareFreely?: boolean;\n\tscreenAvailable?: boolean;\n\tscreenPending?: boolean;\n\tshareGrant?: \"idle\" | \"requested\" | \"granted\";\n\tonAir: boolean;\n\telapsed: string | null;\n\tunread?: number;\n\tonToggleMute: () => void;\n\tonToggleCamera: () => void;\n\tonToggleScreen: () => void;\n\tonAskToShare?: () => void;\n\tonCancelShareRequest?: () => void;\n\tonBack: () => void;\n}) {\n\tconst tiles = meeting.participants();\n\tconst spotlight = resolveStudioPipSpotlight(tiles, meeting.activeSpeakerId());\n\tconst selfView = resolveStudioPipSelfView(tiles, spotlight);\n\tconst speaking =\n\t\tspotlight !== null && spotlight.participantId === meeting.activeSpeakerId();\n\tconst backLabel =\n\t\tunread > 0 ? `${labels.backToStudio} (${unread})` : labels.backToStudio;\n\n\treturn (\n\t\t<div\n\t\t\trole=\"region\"\n\t\t\taria-label={labels.pipTitle}\n\t\t\tclassName=\"bg-background flex h-full min-h-0 flex-col gap-2 p-2 text-foreground\"\n\t\t>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"bg-muted relative min-h-0 flex-1 overflow-hidden rounded-xl\",\n\t\t\t\t\tspeaking && \"ring-2 ring-primary\",\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<PipSpotlight\n\t\t\t\t\tmeeting={meeting}\n\t\t\t\t\tspotlight={spotlight}\n\t\t\t\t\tcameraOffLabel={labels.cameraOff}\n\t\t\t\t/>\n\t\t\t\t{onAir ? (\n\t\t\t\t\t<div className=\"absolute top-2 left-2 flex items-center gap-2\">\n\t\t\t\t\t\t<StudioLiveBadge>{labels.live}</StudioLiveBadge>\n\t\t\t\t\t\t{elapsed ? (\n\t\t\t\t\t\t\t<span className=\"text-muted-foreground tabular-nums text-xs\">\n\t\t\t\t\t\t\t\t{elapsed}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t</div>\n\t\t\t\t) : null}\n\t\t\t\t{selfView ? (\n\t\t\t\t\t<div\n\t\t\t\t\t\tdata-testid=\"pip-self-view\"\n\t\t\t\t\t\tclassName=\"absolute right-2 bottom-2 aspect-video w-[30%] overflow-hidden rounded-lg ring-1 ring-white/40\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<PipTrackVideo track={meeting.localVideoTrack()} fit=\"cover\" />\n\t\t\t\t\t</div>\n\t\t\t\t) : null}\n\t\t\t</div>\n\t\t\t<footer className=\"flex flex-wrap items-center justify-center gap-2\">\n\t\t\t\t{showMediaControls ? (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<PipControl\n\t\t\t\t\t\t\tlabel={muted ? labels.unmute : labels.mute}\n\t\t\t\t\t\t\toff={muted}\n\t\t\t\t\t\t\tonClick={onToggleMute}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{muted ? <MicOff /> : <Mic />}\n\t\t\t\t\t\t</PipControl>\n\t\t\t\t\t\t<PipControl\n\t\t\t\t\t\t\tlabel={labels.camera}\n\t\t\t\t\t\t\toff={!cameraOn}\n\t\t\t\t\t\t\tonClick={onToggleCamera}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{cameraOn ? <Video /> : <VideoOff />}\n\t\t\t\t\t\t</PipControl>\n\t\t\t\t\t</>\n\t\t\t\t) : null}\n\t\t\t\t{showMediaControls && (showScreenControl || screenOn)\n\t\t\t\t\t? pipScreenControls({\n\t\t\t\t\t\t\tlabels,\n\t\t\t\t\t\t\tscreenOn,\n\t\t\t\t\t\t\tcanShareFreely,\n\t\t\t\t\t\t\tscreenAvailable,\n\t\t\t\t\t\t\tscreenPending,\n\t\t\t\t\t\t\tshareGrant,\n\t\t\t\t\t\t\tonToggleScreen,\n\t\t\t\t\t\t\tonAskToShare,\n\t\t\t\t\t\t\tonCancelShareRequest,\n\t\t\t\t\t\t})\n\t\t\t\t\t: null}\n\t\t\t\t<PipControl label={backLabel} onClick={onBack}>\n\t\t\t\t\t<span className=\"relative\">\n\t\t\t\t\t\t<Undo2 />\n\t\t\t\t\t\t{unread > 0 ? (\n\t\t\t\t\t\t\t<Badge className=\"absolute -top-2 -right-2 h-4 min-w-4 px-1 text-[0.65rem]\">\n\t\t\t\t\t\t\t\t{unread}\n\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t</span>\n\t\t\t\t</PipControl>\n\t\t\t</footer>\n\t\t</div>\n\t);\n}\n\nfunction PipSpotlight({\n\tmeeting,\n\tspotlight,\n\tcameraOffLabel,\n}: {\n\tmeeting: StudioMeetingHandle;\n\tspotlight: StudioPipSpotlight | null;\n\tcameraOffLabel: string;\n}) {\n\tif (!spotlight || spotlight.kind === \"idle\") {\n\t\treturn (\n\t\t\t<div className=\"absolute inset-0 flex flex-col items-center justify-center gap-2\">\n\t\t\t\t{spotlight?.picture ? (\n\t\t\t\t\t<img\n\t\t\t\t\t\tsrc={spotlight.picture}\n\t\t\t\t\t\talt=\"\"\n\t\t\t\t\t\tclassName=\"size-14 rounded-full object-cover\"\n\t\t\t\t\t/>\n\t\t\t\t) : (\n\t\t\t\t\t<div className=\"bg-background flex size-14 items-center justify-center rounded-full text-lg\">\n\t\t\t\t\t\t{(spotlight?.name ?? \"?\").slice(0, 1).toUpperCase()}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t\t<p className=\"text-muted-foreground text-xs\">\n\t\t\t\t\t{spotlight?.name ?? cameraOffLabel}\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tconst track =\n\t\tspotlight.kind === \"screen\"\n\t\t\t? meeting.participantScreenTrack(spotlight.participantId)\n\t\t\t: meeting.participantVideoTrack(spotlight.participantId);\n\n\treturn (\n\t\t<>\n\t\t\t<PipTrackVideo\n\t\t\t\ttrack={track}\n\t\t\t\tfit={spotlight.kind === \"screen\" ? \"contain\" : \"cover\"}\n\t\t\t/>\n\t\t\t<p className=\"absolute inset-x-0 bottom-0 bg-linear-to-t from-black/70 to-transparent p-2 text-xs font-medium text-white\">\n\t\t\t\t{spotlight.name}\n\t\t\t</p>\n\t\t</>\n\t);\n}\n\nfunction PipTrackVideo({\n\ttrack,\n\tfit,\n}: {\n\ttrack: MediaStreamTrack | null;\n\tfit: \"contain\" | \"cover\";\n}) {\n\tconst ref = useRef<HTMLVideoElement | null>(null);\n\n\tuseEffect(() => {\n\t\tconst el = ref.current;\n\t\tif (!el) return;\n\t\tif (!track) {\n\t\t\tel.srcObject = null;\n\t\t\treturn;\n\t\t}\n\t\tel.setAttribute(\"webkit-playsinline\", \"\");\n\t\tel.srcObject = new MediaStream([track]);\n\t\tvoid el.play().catch(() => undefined);\n\t\treturn () => {\n\t\t\tel.srcObject = null;\n\t\t};\n\t}, [track]);\n\n\treturn (\n\t\t<video\n\t\t\tref={ref}\n\t\t\tautoPlay\n\t\t\tplaysInline\n\t\t\tmuted\n\t\t\tclassName={cn(\n\t\t\t\t\"livo-studio-inline-video absolute inset-0 size-full\",\n\t\t\t\tfit === \"contain\" ? \"object-contain\" : \"object-cover\",\n\t\t\t)}\n\t\t/>\n\t);\n}\n\nfunction pipScreenControls({\n\tlabels,\n\tscreenOn,\n\tcanShareFreely,\n\tscreenAvailable,\n\tscreenPending,\n\tshareGrant,\n\tonToggleScreen,\n\tonAskToShare,\n\tonCancelShareRequest,\n}: {\n\tlabels: StudioPipPanelLabels;\n\tscreenOn: boolean;\n\tcanShareFreely: boolean;\n\tscreenAvailable: boolean;\n\tscreenPending: boolean;\n\tshareGrant: \"idle\" | \"requested\" | \"granted\";\n\tonToggleScreen: () => void;\n\tonAskToShare?: () => void;\n\tonCancelShareRequest?: () => void;\n}): ReactNode {\n\tif (canShareFreely || screenOn) {\n\t\treturn (\n\t\t\t<PipControl\n\t\t\t\tlabel={screenOn ? labels.stopScreen : labels.screen}\n\t\t\t\toff={screenOn}\n\t\t\t\tdisabled={screenPending || (!screenAvailable && !screenOn)}\n\t\t\t\tonClick={onToggleScreen}\n\t\t\t>\n\t\t\t\t<MonitorUp />\n\t\t\t</PipControl>\n\t\t);\n\t}\n\tif (shareGrant === \"requested\") {\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<PipControl\n\t\t\t\t\tlabel={labels.shareRequested}\n\t\t\t\t\toff\n\t\t\t\t\tdisabled\n\t\t\t\t\tonClick={() => undefined}\n\t\t\t\t>\n\t\t\t\t\t<MonitorUp />\n\t\t\t\t</PipControl>\n\t\t\t\t<PipControl\n\t\t\t\t\tlabel={labels.cancelShareRequest}\n\t\t\t\t\tonClick={() => onCancelShareRequest?.()}\n\t\t\t\t>\n\t\t\t\t\t<X />\n\t\t\t\t</PipControl>\n\t\t\t</>\n\t\t);\n\t}\n\treturn (\n\t\t<PipControl label={labels.askToShare} onClick={() => onAskToShare?.()}>\n\t\t\t<MonitorUp />\n\t\t</PipControl>\n\t);\n}\n\nfunction PipControl({\n\tlabel,\n\tonClick,\n\toff = false,\n\tdisabled = false,\n\tchildren,\n}: {\n\tlabel: string;\n\tonClick: () => void;\n\toff?: boolean;\n\tdisabled?: boolean;\n\tchildren: ReactNode;\n}) {\n\treturn (\n\t\t<Button\n\t\t\ttype=\"button\"\n\t\t\tsize=\"icon-lg\"\n\t\t\tvariant={off ? \"destructive\" : \"secondary\"}\n\t\t\tclassName=\"size-10 rounded-full\"\n\t\t\taria-label={label}\n\t\t\tdisabled={disabled}\n\t\t\tonClick={onClick}\n\t\t>\n\t\t\t{children}\n\t\t</Button>\n\t);\n}\n","\"use client\";\n\nimport { useEffect, useRef } from \"react\";\nimport type { StudioMeetingHandle } from \"../lib/meeting\";\n\nexport function StudioRemoteAudio({\n\tmeeting,\n\tparticipantId,\n}: {\n\tmeeting: StudioMeetingHandle;\n\tparticipantId: string;\n}) {\n\tconst ref = useRef<HTMLAudioElement | null>(null);\n\n\tuseEffect(() => {\n\t\tmeeting.attachAudio(participantId, ref.current);\n\t\treturn () => meeting.attachAudio(participantId, null);\n\t}, [meeting, participantId]);\n\n\treturn <audio ref={ref} autoPlay className=\"sr-only\" />;\n}\n","import * as React from \"react\";\nimport { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../lib/cn\";\n\nfunction BubbleGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"bubble-group\"\n\t\t\tclassName={cn(\"flex min-w-min flex-col gap-2\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nconst bubbleVariants = cva(\n\t\"group/bubble relative flex w-fit min-w-min max-w-full flex-col gap-1 group-data-[align=end]/message:self-end data-[align=end]:self-end data-[variant=ghost]:max-w-full\",\n\t{\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tdefault:\n\t\t\t\t\t\"*:data-[slot=bubble-content]:bg-primary *:data-[slot=bubble-content]:text-primary-foreground [&>[data-slot=bubble-content]:is(button,a):hover]:bg-primary/80\",\n\t\t\t\tsecondary:\n\t\t\t\t\t\"*:data-[slot=bubble-content]:bg-secondary *:data-[slot=bubble-content]:text-secondary-foreground [&>[data-slot=bubble-content]:is(button,a):hover]:bg-[color-mix(in_oklch,var(--secondary),var(--foreground)_5%)]\",\n\t\t\t\tmuted:\n\t\t\t\t\t\"*:data-[slot=bubble-content]:bg-muted [&>[data-slot=bubble-content]:is(button,a):hover]:bg-[color-mix(in_oklch,var(--muted),var(--foreground)_5%)]\",\n\t\t\t\ttinted:\n\t\t\t\t\t\"*:data-[slot=bubble-content]:bg-[oklch(from_var(--primary)_0.93_calc(c*0.4)_h)] *:data-[slot=bubble-content]:text-foreground dark:*:data-[slot=bubble-content]:bg-[oklch(from_var(--primary)_0.3_calc(c*0.4)_h)] [&>[data-slot=bubble-content]:is(button,a):hover]:bg-[oklch(from_var(--primary)_0.88_calc(c*0.5)_h)] dark:[&>[data-slot=bubble-content]:is(button,a):hover]:bg-[oklch(from_var(--primary)_0.35_calc(c*0.5)_h)]\",\n\t\t\t\toutline:\n\t\t\t\t\t\"*:data-[slot=bubble-content]:border-border *:data-[slot=bubble-content]:bg-background [&>[data-slot=bubble-content]:is(button,a):hover]:bg-muted [&>[data-slot=bubble-content]:is(button,a):hover]:text-foreground dark:[&>[data-slot=bubble-content]:is(button,a):hover]:bg-input/30\",\n\t\t\t\tghost:\n\t\t\t\t\t\"border-none *:data-[slot=bubble-content]:rounded-none *:data-[slot=bubble-content]:bg-transparent *:data-[slot=bubble-content]:p-0 [&>[data-slot=bubble-content]:is(button,a):hover]:bg-muted [&>[data-slot=bubble-content]:is(button,a):hover]:text-foreground dark:[&>[data-slot=bubble-content]:is(button,a):hover]:bg-muted/50\",\n\t\t\t\tdestructive:\n\t\t\t\t\t\"*:data-[slot=bubble-content]:bg-destructive/10 *:data-[slot=bubble-content]:text-destructive dark:*:data-[slot=bubble-content]:bg-destructive/20 [&>[data-slot=bubble-content]:is(button,a):hover]:bg-destructive/20 dark:[&>[data-slot=bubble-content]:is(button,a):hover]:bg-destructive/30\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tvariant: \"default\",\n\t\t},\n\t},\n);\n\nfunction Bubble({\n\tvariant = \"default\",\n\talign = \"start\",\n\tclassName,\n\t...props\n}: React.ComponentProps<\"div\"> &\n\tVariantProps<typeof bubbleVariants> & {\n\t\talign?: \"start\" | \"end\";\n\t}) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"bubble\"\n\t\t\tdata-variant={variant}\n\t\t\tdata-align={align}\n\t\t\tclassName={cn(bubbleVariants({ variant }), className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction BubbleContent({\n\tclassName,\n\trender,\n\t...props\n}: useRender.ComponentProps<\"div\">) {\n\treturn useRender({\n\t\tdefaultTagName: \"div\",\n\t\tprops: mergeProps<\"div\">(\n\t\t\t{\n\t\t\t\tclassName: cn(\n\t\t\t\t\t\"w-auto max-w-full whitespace-pre-wrap rounded-xl border border-transparent px-3 py-2 text-sm leading-relaxed [overflow-wrap:break-word] group-data-[align=end]/bubble:self-end [button]:text-left [button,a]:transition-colors [button,a]:outline-none [button,a]:focus-visible:border-ring [button,a]:focus-visible:ring-3 [button,a]:focus-visible:ring-ring/50\",\n\t\t\t\t\tclassName,\n\t\t\t\t),\n\t\t\t},\n\t\t\tprops,\n\t\t),\n\t\trender,\n\t\tstate: {\n\t\t\tslot: \"bubble-content\",\n\t\t},\n\t});\n}\n\nconst bubbleReactionsVariants = cva(\n\t\"absolute z-10 flex w-fit shrink-0 items-center justify-center gap-1 rounded-full bg-muted px-1.5 py-0.5 text-sm ring-3 ring-card has-[button]:p-0\",\n\t{\n\t\tvariants: {\n\t\t\tside: {\n\t\t\t\ttop: \"top-0 -translate-y-3/4\",\n\t\t\t\tbottom: \"bottom-0 translate-y-3/4\",\n\t\t\t},\n\t\t\talign: {\n\t\t\t\tstart: \"left-3\",\n\t\t\t\tend: \"right-3\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tside: \"bottom\",\n\t\t\talign: \"end\",\n\t\t},\n\t},\n);\n\nfunction BubbleReactions({\n\tside = \"bottom\",\n\talign = \"end\",\n\tclassName,\n\t...props\n}: React.ComponentProps<\"div\"> & {\n\talign?: \"start\" | \"end\";\n\tside?: \"top\" | \"bottom\";\n}) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"bubble-reactions\"\n\t\t\tdata-align={align}\n\t\t\tdata-side={side}\n\t\t\tclassName={cn(bubbleReactionsVariants({ side, align }), className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport { BubbleGroup, Bubble, BubbleContent, BubbleReactions };\n","import type { StudioChatMessage } from \"./types\";\n\nexport type ChatMessageGroup = {\n\tuserId: string;\n\tname: string;\n\tmine: boolean;\n\trows: StudioChatMessage[];\n};\n\nexport function groupChatMessages(\n\tmessages: StudioChatMessage[],\n\tselfUserId: string | null,\n): ChatMessageGroup[] {\n\tconst groups: ChatMessageGroup[] = [];\n\tfor (const row of messages) {\n\t\tconst mine = Boolean(selfUserId) && row.userId === selfUserId;\n\t\tconst last = groups[groups.length - 1];\n\t\tif (last && last.userId === row.userId && last.mine === mine) {\n\t\t\tlast.rows.push(row);\n\t\t\tcontinue;\n\t\t}\n\t\tgroups.push({\n\t\t\tuserId: row.userId,\n\t\t\tname: row.name,\n\t\t\tmine,\n\t\t\trows: [row],\n\t\t});\n\t}\n\treturn groups;\n}\n\nexport function senderInitials(name: string): string {\n\tconst parts = name\n\t\t.trim()\n\t\t.split(/\\s+/)\n\t\t.filter((part) => part.length > 0);\n\tif (parts.length === 0) return \"?\";\n\tconst first = parts[0]!;\n\tif (parts.length === 1) return first.slice(0, 2).toUpperCase();\n\treturn `${first[0]!}${parts[1]![0]!}`.toUpperCase();\n}\n","\"use client\";\n\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport { toast } from \"sonner\";\nimport { Bubble, BubbleContent, BubbleGroup } from \"../ui/bubble\";\nimport { Button } from \"../ui/button\";\nimport { Input } from \"../ui/input\";\nimport { groupChatMessages, senderInitials } from \"../lib/chat-groups\";\nimport type { StudioRoomLabels } from \"../lib/labels\";\nimport type { StudioMeetingHandle } from \"../lib/meeting\";\nimport type { StudioChatMessage, StudioParticipantTile } from \"../lib/types\";\n\nexport function StudioChatPanel({\n\tmeeting,\n\tselfUserId,\n\tparticipants,\n\tisModerator,\n\tlabels,\n}: {\n\tmeeting: StudioMeetingHandle;\n\tselfUserId: string | null;\n\tparticipants: StudioParticipantTile[];\n\tisModerator: boolean;\n\tlabels: Pick<\n\t\tStudioRoomLabels,\n\t\t| \"chat\"\n\t\t| \"chatSend\"\n\t\t| \"chatPlaceholder\"\n\t\t| \"chatError\"\n\t\t| \"chatEveryone\"\n\t\t| \"chatEdited\"\n\t\t| \"chatPinned\"\n\t\t| \"chatLoadOlder\"\n\t\t| \"chatRateLimited\"\n\t\t| \"chatDelete\"\n\t\t| \"chatEdit\"\n\t\t| \"chatPin\"\n\t\t| \"chatUnpin\"\n\t\t| \"chatSave\"\n\t>;\n}) {\n\tconst [tick, setTick] = useState(0);\n\tconst [draft, setDraft] = useState(\"\");\n\tconst [editingId, setEditingId] = useState<string | null>(null);\n\tconst listRef = useRef<HTMLDivElement | null>(null);\n\n\tuseEffect(\n\t\t() => meeting.subscribeChat(() => setTick((n) => n + 1)),\n\t\t[meeting],\n\t);\n\n\tconst messages = useMemo(\n\t\t() => meeting.chatMessages().filter((row) => !row.targetUserIds?.length),\n\t\t[meeting, tick],\n\t);\n\tconst pinned = useMemo(() => meeting.pinnedChatMessages(), [meeting, tick]);\n\tconst limit = meeting.chatMaxTextLimit();\n\tconst pictures = useMemo(() => {\n\t\tconst map = new Map<string, string | null>();\n\t\tfor (const row of participants) {\n\t\t\tif (row.userId) map.set(row.userId, row.picture);\n\t\t}\n\t\treturn map;\n\t}, [participants]);\n\tconst groups = useMemo(\n\t\t() => groupChatMessages(messages, selfUserId),\n\t\t[messages, selfUserId],\n\t);\n\n\tuseEffect(() => {\n\t\tconst list = listRef.current;\n\t\tif (!list) return;\n\t\tlist.scrollTop = list.scrollHeight;\n\t}, [messages.length]);\n\n\tasync function onSend() {\n\t\tconst text = draft.trim();\n\t\tif (!text) return;\n\t\tsetDraft(\"\");\n\t\ttry {\n\t\t\tif (editingId) {\n\t\t\t\tawait meeting.editChatMessage(editingId, text);\n\t\t\t\tsetEditingId(null);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait meeting.sendChatMessage(text);\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message.toLowerCase() : \"\";\n\t\t\ttoast.error(\n\t\t\t\tmessage.includes(\"rate\") ? labels.chatRateLimited : labels.chatError,\n\t\t\t);\n\t\t}\n\t}\n\n\tfunction messageActions(row: StudioChatMessage, mine: boolean) {\n\t\treturn (\n\t\t\t<p\n\t\t\t\tclassName={\n\t\t\t\t\tmine\n\t\t\t\t\t\t? \"text-muted-foreground flex flex-wrap justify-end gap-2 text-xs\"\n\t\t\t\t\t\t: \"text-muted-foreground flex flex-wrap gap-2 text-xs\"\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t{row.isEdited ? <span>{labels.chatEdited}</span> : null}\n\t\t\t\t{mine ? (\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tsetEditingId(row.id);\n\t\t\t\t\t\t\tsetDraft(row.text);\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{labels.chatEdit}\n\t\t\t\t\t</button>\n\t\t\t\t) : null}\n\t\t\t\t{isModerator || mine ? (\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonClick={() =>\n\t\t\t\t\t\t\tvoid meeting\n\t\t\t\t\t\t\t\t.deleteChatMessage(row.id)\n\t\t\t\t\t\t\t\t.catch(() => toast.error(labels.chatError))\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\t{labels.chatDelete}\n\t\t\t\t\t</button>\n\t\t\t\t) : null}\n\t\t\t\t{isModerator ? (\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonClick={() =>\n\t\t\t\t\t\t\tvoid meeting\n\t\t\t\t\t\t\t\t.pinChatMessage(row.id, row.pinned !== true)\n\t\t\t\t\t\t\t\t.catch(() => toast.error(labels.chatError))\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\t{row.pinned ? labels.chatUnpin : labels.chatPin}\n\t\t\t\t\t</button>\n\t\t\t\t) : null}\n\t\t\t</p>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className=\"flex min-h-0 flex-1 flex-col\">\n\t\t\t{pinned[0] ? (\n\t\t\t\t<div role=\"status\" className=\"bg-muted border-b px-3 py-2 text-sm\">\n\t\t\t\t\t<p className=\"text-muted-foreground text-xs\">{labels.chatPinned}</p>\n\t\t\t\t\t<p>{pinned[0].text}</p>\n\t\t\t\t</div>\n\t\t\t) : null}\n\t\t\t<div\n\t\t\t\tref={listRef}\n\t\t\t\trole=\"log\"\n\t\t\t\taria-live=\"polite\"\n\t\t\t\tclassName=\"flex min-h-0 flex-1 flex-col gap-3 overflow-auto p-3\"\n\t\t\t>\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\tclassName=\"self-center\"\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tconst oldest = messages[0]?.time;\n\t\t\t\t\t\tvoid meeting.fetchChatHistory({\n\t\t\t\t\t\t\ttimestamp: oldest,\n\t\t\t\t\t\t});\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{labels.chatLoadOlder}\n\t\t\t\t</Button>\n\t\t\t\t{groups.map((group) => {\n\t\t\t\t\tconst bubbles = group.rows.map((row) => (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tkey={row.id}\n\t\t\t\t\t\t\tclassName={\n\t\t\t\t\t\t\t\tgroup.mine\n\t\t\t\t\t\t\t\t\t? \"ml-auto flex max-w-[80%] flex-col gap-1 self-end\"\n\t\t\t\t\t\t\t\t\t: \"flex max-w-[80%] flex-col gap-1 self-start\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Bubble\n\t\t\t\t\t\t\t\talign={group.mine ? \"end\" : \"start\"}\n\t\t\t\t\t\t\t\tvariant={group.mine ? \"default\" : \"secondary\"}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<BubbleContent>{row.text}</BubbleContent>\n\t\t\t\t\t\t\t</Bubble>\n\t\t\t\t\t\t\t{messageActions(row, group.mine)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t));\n\t\t\t\t\tif (group.mine) {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<BubbleGroup key={group.rows[0]!.id} className=\"items-end\">\n\t\t\t\t\t\t\t\t{bubbles}\n\t\t\t\t\t\t\t</BubbleGroup>\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tconst picture = pictures.get(group.userId) ?? null;\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tkey={group.rows[0]!.id}\n\t\t\t\t\t\t\tclassName=\"flex max-w-full gap-2 self-start\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{picture ? (\n\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\tsrc={picture}\n\t\t\t\t\t\t\t\t\talt=\"\"\n\t\t\t\t\t\t\t\t\tclassName=\"mt-0.5 size-7 shrink-0 rounded-full object-cover\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<span className=\"bg-muted text-muted-foreground mt-0.5 flex size-7 shrink-0 items-center justify-center rounded-full text-xs\">\n\t\t\t\t\t\t\t\t\t{senderInitials(group.name)}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t<div className=\"min-w-0 flex-1\">\n\t\t\t\t\t\t\t\t<p className=\"text-muted-foreground mb-1 text-xs\">\n\t\t\t\t\t\t\t\t\t{group.name}\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t<BubbleGroup>{bubbles}</BubbleGroup>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</div>\n\t\t\t<form\n\t\t\t\tclassName=\"flex flex-col gap-2 border-t p-3\"\n\t\t\t\tonSubmit={(event) => {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tvoid onSend();\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<Input\n\t\t\t\t\tclassName=\"min-w-0 flex-1\"\n\t\t\t\t\tvalue={draft}\n\t\t\t\t\tmaxLength={limit}\n\t\t\t\t\tonChange={(event) => setDraft(event.target.value)}\n\t\t\t\t\tplaceholder={labels.chatPlaceholder}\n\t\t\t\t\taria-label={labels.chatPlaceholder}\n\t\t\t\t/>\n\t\t\t\t<div className=\"flex items-center justify-between gap-2\">\n\t\t\t\t\t<p className=\"text-muted-foreground text-xs\">\n\t\t\t\t\t\t{draft.length}/{limit}\n\t\t\t\t\t</p>\n\t\t\t\t\t<Button type=\"submit\" size=\"sm\">\n\t\t\t\t\t\t{editingId ? labels.chatSave : labels.chatSend}\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t</form>\n\t\t</div>\n\t);\n}\n","\"use client\";\n\nimport { Button } from \"../ui/button\";\nimport type { StudioRoomLabels } from \"../lib/labels\";\nimport type { StudioWaitlistedGuest } from \"../lib/types\";\n\nexport function StudioWaitingRoom({\n\twaitlisted,\n\tlabels,\n\tonAdmitAs,\n\tonAdmitAll,\n\tonDeny,\n}: {\n\twaitlisted: StudioWaitlistedGuest[];\n\tlabels: Pick<\n\t\tStudioRoomLabels,\n\t\t| \"waiting\"\n\t\t| \"admitAsPanelist\"\n\t\t| \"admitAsAudience\"\n\t\t| \"admitAllPanelists\"\n\t\t| \"admitAllAudience\"\n\t\t| \"deny\"\n\t\t| \"waitingSkeleton\"\n\t\t| \"noWaiting\"\n\t>;\n\tonAdmitAs: (participantId: string, as: \"panelist\" | \"audience\") => void;\n\tonAdmitAll: (as: \"panelist\" | \"audience\") => void;\n\tonDeny: (participantId: string) => void;\n}) {\n\treturn (\n\t\t<section aria-label={labels.waiting} className=\"space-y-3\">\n\t\t\t<p className=\"text-sm font-medium\">{labels.waiting}</p>\n\t\t\t{waitlisted.length === 0 ? (\n\t\t\t\t<p className=\"text-muted-foreground text-sm\">{labels.noWaiting}</p>\n\t\t\t) : (\n\t\t\t\t<>\n\t\t\t\t\t<div className=\"grid gap-2\">\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\tclassName=\"w-full\"\n\t\t\t\t\t\t\tonClick={() => onAdmitAll(\"panelist\")}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{labels.admitAllPanelists}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\tclassName=\"w-full\"\n\t\t\t\t\t\t\tonClick={() => onAdmitAll(\"audience\")}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{labels.admitAllAudience}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</div>\n\t\t\t\t\t<ul className=\"space-y-2\">\n\t\t\t\t\t\t{waitlisted.map((guest) => (\n\t\t\t\t\t\t\t<li key={guest.id} className=\"space-y-2 rounded-md border p-2\">\n\t\t\t\t\t\t\t\t<span className=\"block truncate text-sm\">{guest.name}</span>\n\t\t\t\t\t\t\t\t<div className=\"grid gap-2\">\n\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\t\t\t\tclassName=\"w-full\"\n\t\t\t\t\t\t\t\t\t\tonClick={() => onAdmitAs(guest.id, \"panelist\")}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{labels.admitAsPanelist}\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\t\t\t\tclassName=\"w-full\"\n\t\t\t\t\t\t\t\t\t\tonClick={() => onAdmitAs(guest.id, \"audience\")}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{labels.admitAsAudience}\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\t\t\tclassName=\"w-full\"\n\t\t\t\t\t\t\t\t\t\tonClick={() => onDeny(guest.id)}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{labels.deny}\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</ul>\n\t\t\t\t</>\n\t\t\t)}\n\t\t</section>\n\t);\n}\n","\"use client\";\n\nimport { Link2, X } from \"lucide-react\";\nimport { Button } from \"../ui/button\";\nimport type { StudioRoomLabels } from \"../lib/labels\";\nimport type { StudioMeetingHandle, StudioStageRequest } from \"../lib/meeting\";\nimport type {\n\tStudioParticipantTile,\n\tStudioWaitlistedGuest,\n} from \"../lib/types\";\nimport { isOnStage } from \"../lib/meeting\";\nimport { StudioChatPanel } from \"./studio-chat-panel\";\nimport { StudioWaitingRoom } from \"./studio-waiting-room\";\n\nexport type StudioSideTab = \"chat\" | \"people\";\n\nexport function StudioSidePanel({\n\ttab,\n\tonTabChange,\n\tonClose,\n\tmeeting,\n\tselfUserId,\n\tparticipants,\n\twaitlisted,\n\tstageRequests,\n\tisModerator,\n\tchatBadge,\n\tpeopleBadge,\n\tlabels,\n\tonAdmitAs,\n\tonAdmitAll,\n\tonDeny,\n\tonGrantStage,\n\tonDenyStage,\n\tonTakeOffAir,\n\tguestUrl,\n\tonShareGuestLink,\n}: {\n\ttab: StudioSideTab;\n\tonTabChange: (tab: StudioSideTab) => void;\n\tonClose: () => void;\n\tmeeting: StudioMeetingHandle;\n\tselfUserId: string | null;\n\tparticipants: StudioParticipantTile[];\n\twaitlisted: StudioWaitlistedGuest[];\n\tstageRequests: StudioStageRequest[];\n\tisModerator: boolean;\n\tchatBadge: number;\n\tpeopleBadge: number;\n\tlabels: StudioRoomLabels;\n\tonAdmitAs: (participantId: string, as: \"panelist\" | \"audience\") => void;\n\tonAdmitAll: (as: \"panelist\" | \"audience\") => void;\n\tonDeny: (participantId: string) => void;\n\tonGrantStage: (userId: string) => void;\n\tonDenyStage: (userId: string) => void;\n\tonTakeOffAir: (userId: string) => void;\n\tguestUrl?: string | null;\n\tonShareGuestLink: () => void;\n}) {\n\tconst panelists = participants.filter((row) => isOnStage(row.stageStatus));\n\tconst audience = participants.filter((row) => !isOnStage(row.stageStatus));\n\n\treturn (\n\t\t<aside className=\"bg-background flex min-h-0 w-full flex-1 flex-col border-t md:w-80 md:flex-none md:border-l md:border-t-0\">\n\t\t\t<div className=\"flex\">\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\tvariant={tab === \"chat\" ? \"secondary\" : \"ghost\"}\n\t\t\t\t\tclassName=\"relative flex-1 rounded-none\"\n\t\t\t\t\tonClick={() => onTabChange(\"chat\")}\n\t\t\t\t>\n\t\t\t\t\t{labels.chat}\n\t\t\t\t\t{chatBadge > 0 ? (\n\t\t\t\t\t\t<span className=\"bg-primary text-primary-foreground ml-2 inline-flex h-4 min-w-4 items-center justify-center rounded-full px-1 text-[0.65rem]\">\n\t\t\t\t\t\t\t{chatBadge}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t) : null}\n\t\t\t\t</Button>\n\t\t\t\t{isModerator ? (\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\tvariant={tab === \"people\" ? \"secondary\" : \"ghost\"}\n\t\t\t\t\t\tclassName=\"relative flex-1 rounded-none\"\n\t\t\t\t\t\tonClick={() => onTabChange(\"people\")}\n\t\t\t\t\t>\n\t\t\t\t\t\t{labels.people}\n\t\t\t\t\t\t{peopleBadge > 0 ? (\n\t\t\t\t\t\t\t<span className=\"bg-primary text-primary-foreground ml-2 inline-flex h-4 min-w-4 items-center justify-center rounded-full px-1 text-[0.65rem]\">\n\t\t\t\t\t\t\t\t{peopleBadge}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t</Button>\n\t\t\t\t) : null}\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tsize=\"icon-xs\"\n\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\tclassName=\"m-1 shrink-0\"\n\t\t\t\t\taria-label={labels.closePanel}\n\t\t\t\t\tonClick={onClose}\n\t\t\t\t>\n\t\t\t\t\t<X />\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t\t{tab === \"chat\" ? (\n\t\t\t\t<StudioChatPanel\n\t\t\t\t\tmeeting={meeting}\n\t\t\t\t\tselfUserId={selfUserId}\n\t\t\t\t\tparticipants={participants}\n\t\t\t\t\tisModerator={isModerator}\n\t\t\t\t\tlabels={labels}\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<div className=\"flex min-h-0 flex-1 flex-col gap-4 overflow-auto p-3\">\n\t\t\t\t\t{guestUrl ? (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\tclassName=\"w-full\"\n\t\t\t\t\t\t\tonClick={onShareGuestLink}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Link2 />\n\t\t\t\t\t\t\t{labels.shareLink}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t) : null}\n\t\t\t\t\t<StudioWaitingRoom\n\t\t\t\t\t\twaitlisted={waitlisted}\n\t\t\t\t\t\tlabels={labels}\n\t\t\t\t\t\tonAdmitAs={onAdmitAs}\n\t\t\t\t\t\tonAdmitAll={onAdmitAll}\n\t\t\t\t\t\tonDeny={onDeny}\n\t\t\t\t\t/>\n\t\t\t\t\t{stageRequests.length > 0 ? (\n\t\t\t\t\t\t<section aria-label={labels.stageRequests} className=\"space-y-2\">\n\t\t\t\t\t\t\t<p className=\"text-sm font-medium\">{labels.stageRequests}</p>\n\t\t\t\t\t\t\t<ul className=\"space-y-2\">\n\t\t\t\t\t\t\t\t{stageRequests.map((request) => (\n\t\t\t\t\t\t\t\t\t<li\n\t\t\t\t\t\t\t\t\t\tkey={request.userId}\n\t\t\t\t\t\t\t\t\t\tclassName=\"space-y-2 rounded-md border p-2\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<span className=\"block truncate text-sm\">\n\t\t\t\t\t\t\t\t\t\t\t{request.name}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t<div className=\"grid gap-2\">\n\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"w-full\"\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => onGrantStage(request.userId)}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{labels.bringOnAir}\n\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"w-full\"\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => onDenyStage(request.userId)}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{labels.deny}\n\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t</section>\n\t\t\t\t\t) : null}\n\t\t\t\t\t<section aria-label={labels.panelists} className=\"space-y-2\">\n\t\t\t\t\t\t<p className=\"text-sm font-medium\">{labels.panelists}</p>\n\t\t\t\t\t\t{panelists.length === 0 ? (\n\t\t\t\t\t\t\t<p className=\"text-muted-foreground text-sm\">\n\t\t\t\t\t\t\t\t{labels.noPanelists}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<ul className=\"space-y-2\">\n\t\t\t\t\t\t\t\t{panelists.map((row) => {\n\t\t\t\t\t\t\t\t\tconst userId = row.userId;\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<li\n\t\t\t\t\t\t\t\t\t\t\tkey={row.id}\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"space-y-2 rounded-md border p-2\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"block truncate text-sm\">{row.name}</span>\n\t\t\t\t\t\t\t\t\t\t\t{!row.isSelf && userId ? (\n\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"w-full\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => onTakeOffAir(userId)}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{labels.offAir}\n\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</section>\n\t\t\t\t\t<section aria-label={labels.audience} className=\"space-y-2\">\n\t\t\t\t\t\t<p className=\"text-sm font-medium\">{labels.audience}</p>\n\t\t\t\t\t\t{audience.length === 0 ? (\n\t\t\t\t\t\t\t<p className=\"text-muted-foreground text-sm\">\n\t\t\t\t\t\t\t\t{labels.noAudience}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<ul className=\"space-y-2\">\n\t\t\t\t\t\t\t\t{audience.map((row) => {\n\t\t\t\t\t\t\t\t\tconst userId = row.userId;\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<li\n\t\t\t\t\t\t\t\t\t\t\tkey={row.id}\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"space-y-2 rounded-md border p-2\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"block truncate text-sm\">{row.name}</span>\n\t\t\t\t\t\t\t\t\t\t\t{!row.isSelf && userId ? (\n\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"w-full\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => onGrantStage(userId)}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{labels.bringOnAir}\n\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</section>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</aside>\n\t);\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Menu as MenuPrimitive } from \"@base-ui/react/menu\";\n\nimport { cn } from \"../lib/cn\";\nimport { ChevronRightIcon, CheckIcon } from \"lucide-react\";\n\nfunction DropdownMenu({ ...props }: MenuPrimitive.Root.Props) {\n\treturn <MenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />;\n}\n\nfunction DropdownMenuPortal({ ...props }: MenuPrimitive.Portal.Props) {\n\treturn <MenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />;\n}\n\nfunction DropdownMenuTrigger({ ...props }: MenuPrimitive.Trigger.Props) {\n\treturn <MenuPrimitive.Trigger data-slot=\"dropdown-menu-trigger\" {...props} />;\n}\n\nfunction DropdownMenuContent({\n\talign = \"start\",\n\talignOffset = 0,\n\tside = \"bottom\",\n\tsideOffset = 4,\n\tclassName,\n\t...props\n}: MenuPrimitive.Popup.Props &\n\tPick<\n\t\tMenuPrimitive.Positioner.Props,\n\t\t\"align\" | \"alignOffset\" | \"side\" | \"sideOffset\"\n\t>) {\n\treturn (\n\t\t<MenuPrimitive.Portal>\n\t\t\t<MenuPrimitive.Positioner\n\t\t\t\tclassName=\"isolate z-50 outline-none\"\n\t\t\t\talign={align}\n\t\t\t\talignOffset={alignOffset}\n\t\t\t\tside={side}\n\t\t\t\tsideOffset={sideOffset}\n\t\t\t>\n\t\t\t\t<MenuPrimitive.Popup\n\t\t\t\t\tdata-slot=\"dropdown-menu-content\"\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"z-50 max-h-(--available-height) w-(--anchor-width) min-w-32 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 outline-none data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:overflow-hidden data-closed:fade-out-0 data-closed:zoom-out-95\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\t{...props}\n\t\t\t\t/>\n\t\t\t</MenuPrimitive.Positioner>\n\t\t</MenuPrimitive.Portal>\n\t);\n}\n\nfunction DropdownMenuGroup({ ...props }: MenuPrimitive.Group.Props) {\n\treturn <MenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />;\n}\n\nfunction DropdownMenuLabel({\n\tclassName,\n\tinset,\n\t...props\n}: MenuPrimitive.GroupLabel.Props & {\n\tinset?: boolean;\n}) {\n\treturn (\n\t\t<MenuPrimitive.GroupLabel\n\t\t\tdata-slot=\"dropdown-menu-label\"\n\t\t\tdata-inset={inset}\n\t\t\tclassName={cn(\n\t\t\t\t\"px-1.5 py-1 text-xs font-medium text-muted-foreground data-inset:pl-7\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction DropdownMenuItem({\n\tclassName,\n\tinset,\n\tvariant = \"default\",\n\t...props\n}: MenuPrimitive.Item.Props & {\n\tinset?: boolean;\n\tvariant?: \"default\" | \"destructive\";\n}) {\n\treturn (\n\t\t<MenuPrimitive.Item\n\t\t\tdata-slot=\"dropdown-menu-item\"\n\t\t\tdata-inset={inset}\n\t\t\tdata-variant={variant}\n\t\t\tclassName={cn(\n\t\t\t\t\"group/dropdown-menu-item relative flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-7 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-destructive\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction DropdownMenuSub({ ...props }: MenuPrimitive.SubmenuRoot.Props) {\n\treturn <MenuPrimitive.SubmenuRoot data-slot=\"dropdown-menu-sub\" {...props} />;\n}\n\nfunction DropdownMenuSubTrigger({\n\tclassName,\n\tinset,\n\tchildren,\n\t...props\n}: MenuPrimitive.SubmenuTrigger.Props & {\n\tinset?: boolean;\n}) {\n\treturn (\n\t\t<MenuPrimitive.SubmenuTrigger\n\t\t\tdata-slot=\"dropdown-menu-sub-trigger\"\n\t\t\tdata-inset={inset}\n\t\t\tclassName={cn(\n\t\t\t\t\"flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-7 data-popup-open:bg-accent data-popup-open:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t\t<ChevronRightIcon className=\"ml-auto\" />\n\t\t</MenuPrimitive.SubmenuTrigger>\n\t);\n}\n\nfunction DropdownMenuSubContent({\n\talign = \"start\",\n\talignOffset = -3,\n\tside = \"right\",\n\tsideOffset = 0,\n\tclassName,\n\t...props\n}: React.ComponentProps<typeof DropdownMenuContent>) {\n\treturn (\n\t\t<DropdownMenuContent\n\t\t\tdata-slot=\"dropdown-menu-sub-content\"\n\t\t\tclassName={cn(\n\t\t\t\t\"w-auto min-w-[96px] rounded-lg bg-popover p-1 text-popover-foreground shadow-lg ring-1 ring-foreground/10 duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\talign={align}\n\t\t\talignOffset={alignOffset}\n\t\t\tside={side}\n\t\t\tsideOffset={sideOffset}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction DropdownMenuCheckboxItem({\n\tclassName,\n\tchildren,\n\tchecked,\n\tinset,\n\t...props\n}: MenuPrimitive.CheckboxItem.Props & {\n\tinset?: boolean;\n}) {\n\treturn (\n\t\t<MenuPrimitive.CheckboxItem\n\t\t\tdata-slot=\"dropdown-menu-checkbox-item\"\n\t\t\tdata-inset={inset}\n\t\t\tclassName={cn(\n\t\t\t\t\"relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tchecked={checked}\n\t\t\t{...props}\n\t\t>\n\t\t\t<span\n\t\t\t\tclassName=\"pointer-events-none absolute right-2 flex items-center justify-center\"\n\t\t\t\tdata-slot=\"dropdown-menu-checkbox-item-indicator\"\n\t\t\t>\n\t\t\t\t<MenuPrimitive.CheckboxItemIndicator>\n\t\t\t\t\t<CheckIcon />\n\t\t\t\t</MenuPrimitive.CheckboxItemIndicator>\n\t\t\t</span>\n\t\t\t{children}\n\t\t</MenuPrimitive.CheckboxItem>\n\t);\n}\n\nfunction DropdownMenuRadioGroup({ ...props }: MenuPrimitive.RadioGroup.Props) {\n\treturn (\n\t\t<MenuPrimitive.RadioGroup\n\t\t\tdata-slot=\"dropdown-menu-radio-group\"\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction DropdownMenuRadioItem({\n\tclassName,\n\tchildren,\n\tinset,\n\t...props\n}: MenuPrimitive.RadioItem.Props & {\n\tinset?: boolean;\n}) {\n\treturn (\n\t\t<MenuPrimitive.RadioItem\n\t\t\tdata-slot=\"dropdown-menu-radio-item\"\n\t\t\tdata-inset={inset}\n\t\t\tclassName={cn(\n\t\t\t\t\"relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<span\n\t\t\t\tclassName=\"pointer-events-none absolute right-2 flex items-center justify-center\"\n\t\t\t\tdata-slot=\"dropdown-menu-radio-item-indicator\"\n\t\t\t>\n\t\t\t\t<MenuPrimitive.RadioItemIndicator>\n\t\t\t\t\t<CheckIcon />\n\t\t\t\t</MenuPrimitive.RadioItemIndicator>\n\t\t\t</span>\n\t\t\t{children}\n\t\t</MenuPrimitive.RadioItem>\n\t);\n}\n\nfunction DropdownMenuSeparator({\n\tclassName,\n\t...props\n}: MenuPrimitive.Separator.Props) {\n\treturn (\n\t\t<MenuPrimitive.Separator\n\t\t\tdata-slot=\"dropdown-menu-separator\"\n\t\t\tclassName={cn(\"-mx-1 my-1 h-px bg-border\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction DropdownMenuShortcut({\n\tclassName,\n\t...props\n}: React.ComponentProps<\"span\">) {\n\treturn (\n\t\t<span\n\t\t\tdata-slot=\"dropdown-menu-shortcut\"\n\t\t\tclassName={cn(\n\t\t\t\t\"ml-auto text-xs tracking-widest text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport {\n\tDropdownMenu,\n\tDropdownMenuPortal,\n\tDropdownMenuTrigger,\n\tDropdownMenuContent,\n\tDropdownMenuGroup,\n\tDropdownMenuLabel,\n\tDropdownMenuItem,\n\tDropdownMenuCheckboxItem,\n\tDropdownMenuRadioGroup,\n\tDropdownMenuRadioItem,\n\tDropdownMenuSeparator,\n\tDropdownMenuShortcut,\n\tDropdownMenuSub,\n\tDropdownMenuSubTrigger,\n\tDropdownMenuSubContent,\n};\n","\"use client\";\n\nimport {\n\tDropdownMenu,\n\tDropdownMenuContent,\n\tDropdownMenuItem,\n\tDropdownMenuSeparator,\n\tDropdownMenuTrigger,\n} from \"../ui/dropdown-menu\";\nimport { Button } from \"../ui/button\";\nimport { MoreVertical } from \"lucide-react\";\nimport type { StudioDisplayTile } from \"../lib/types\";\nimport { isOnStage } from \"../lib/meeting\";\nimport type { StudioTileLabels } from \"./studio-tile\";\n\nexport function StudioTileMenu({\n\ttile,\n\tcanModerate,\n\tcanManageStage,\n\ttakeOffBlocked,\n\tlabels,\n\tonKick,\n\tonMute,\n\tonStopCamera,\n\tonStopScreen,\n\tonToggleStage,\n\tonTogglePin,\n\tonToggleChat,\n}: {\n\ttile: StudioDisplayTile;\n\tcanModerate: boolean;\n\tcanManageStage: boolean;\n\ttakeOffBlocked: boolean;\n\tlabels: StudioTileLabels;\n\tonKick: () => void;\n\tonMute: () => void;\n\tonStopCamera: () => void;\n\tonStopScreen: () => void;\n\tonToggleStage: () => void;\n\tonTogglePin: () => void;\n\tonToggleChat: () => void;\n}) {\n\tconst onStage = isOnStage(tile.stageStatus);\n\tconst showPersonItems = canModerate && tile.kind !== \"screen\";\n\tconst showScreenItems = canModerate && tile.kind === \"screen\";\n\tconst showStageItems = canManageStage && tile.kind !== \"screen\";\n\tif (!showPersonItems && !showScreenItems && !showStageItems) return null;\n\n\treturn (\n\t\t<DropdownMenu>\n\t\t\t<DropdownMenuTrigger\n\t\t\t\trender={\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tsize=\"icon-xs\"\n\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\tclassName=\"text-white hover:text-white\"\n\t\t\t\t\t\taria-label={labels.tileMenu}\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t<MoreVertical className=\"size-3.5\" />\n\t\t\t</DropdownMenuTrigger>\n\t\t\t<DropdownMenuContent align=\"end\" className=\"min-w-44\">\n\t\t\t\t{showScreenItems ? (\n\t\t\t\t\t<DropdownMenuItem onClick={onStopScreen}>\n\t\t\t\t\t\t{labels.stopScreen}\n\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t) : null}\n\t\t\t\t{showPersonItems && tile.audioEnabled ? (\n\t\t\t\t\t<DropdownMenuItem onClick={onMute}>{labels.mute}</DropdownMenuItem>\n\t\t\t\t) : null}\n\t\t\t\t{showPersonItems && tile.kind === \"camera\" && tile.videoEnabled ? (\n\t\t\t\t\t<DropdownMenuItem onClick={onStopCamera}>\n\t\t\t\t\t\t{labels.stopCamera}\n\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t) : null}\n\t\t\t\t{showPersonItems || showScreenItems ? (\n\t\t\t\t\t<DropdownMenuItem onClick={onTogglePin}>\n\t\t\t\t\t\t{tile.pinned ? labels.unpin : labels.pin}\n\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t) : null}\n\t\t\t\t{showPersonItems ? (\n\t\t\t\t\t<DropdownMenuItem onClick={onToggleChat}>\n\t\t\t\t\t\t{tile.chatCanSend === false ? labels.allowChat : labels.muteChat}\n\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t) : null}\n\t\t\t\t{showStageItems ? (\n\t\t\t\t\t<DropdownMenuItem\n\t\t\t\t\t\tdisabled={onStage && takeOffBlocked}\n\t\t\t\t\t\tonClick={onToggleStage}\n\t\t\t\t\t>\n\t\t\t\t\t\t{onStage\n\t\t\t\t\t\t\t? takeOffBlocked\n\t\t\t\t\t\t\t\t? labels.offAirLastVisible\n\t\t\t\t\t\t\t\t: labels.takeOffAir\n\t\t\t\t\t\t\t: labels.bringOnAir}\n\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t) : null}\n\t\t\t\t{showPersonItems ? (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<DropdownMenuSeparator />\n\t\t\t\t\t\t<DropdownMenuItem variant=\"destructive\" onClick={onKick}>\n\t\t\t\t\t\t\t{labels.kick}\n\t\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t\t</>\n\t\t\t\t) : null}\n\t\t\t</DropdownMenuContent>\n\t\t</DropdownMenu>\n\t);\n}\n","\"use client\";\n\nimport {\n\tMessageSquareOff,\n\tMicOff,\n\tMonitorUp,\n\tPin,\n\tVideoOff,\n} from \"lucide-react\";\nimport { useEffect, useRef, useState, type ReactNode } from \"react\";\nimport { ConfirmAction } from \"../ui/confirm-action\";\nimport {\n\tisOnStage,\n\ttype StudioMeetingHandle,\n\ttype StudioVideoKind,\n} from \"../lib/meeting\";\nimport type { StudioRoomLabels } from \"../lib/labels\";\nimport type { StudioDisplayTile } from \"../lib/types\";\nimport { cn } from \"../lib/cn\";\nimport { AudioWaveform } from \"./audio-waveform\";\nimport { StudioTileMenu } from \"./studio-tile-menu\";\n\nexport type StudioTileLabels = Pick<\n\tStudioRoomLabels,\n\t| \"kick\"\n\t| \"mute\"\n\t| \"stopCamera\"\n\t| \"stopScreen\"\n\t| \"takeOffAir\"\n\t| \"bringOnAir\"\n\t| \"offAir\"\n\t| \"offAirLastVisible\"\n\t| \"takeOffAirTitle\"\n\t| \"takeOffAirDescription\"\n\t| \"takeOffAirConfirm\"\n\t| \"muteChat\"\n\t| \"allowChat\"\n\t| \"pin\"\n\t| \"unpin\"\n\t| \"kickTitle\"\n\t| \"kickDescription\"\n\t| \"kickConfirm\"\n\t| \"tileMenu\"\n\t| \"cameraOff\"\n>;\n\nexport function StudioTile({\n\ttile,\n\tmeeting,\n\treducedMotion,\n\tcompact,\n\tfill = false,\n\tcanModerate,\n\tcanManageStage,\n\ttakeOffBlocked,\n\tconfirmTakeOff,\n\tlabels,\n\tonKick,\n\tonMute,\n\tonStopCamera,\n\tonStopScreen,\n\tonToggleStage,\n\tonTogglePin,\n\tonToggleChat,\n}: {\n\ttile: StudioDisplayTile;\n\tmeeting: StudioMeetingHandle;\n\treducedMotion: boolean;\n\tcompact: boolean;\n\tfill?: boolean;\n\tcanModerate: boolean;\n\tcanManageStage: boolean;\n\ttakeOffBlocked: boolean;\n\tconfirmTakeOff: boolean;\n\tlabels: StudioTileLabels;\n\tonKick: () => void;\n\tonMute: () => void;\n\tonStopCamera: () => void;\n\tonStopScreen: () => void;\n\tonToggleStage: () => void;\n\tonTogglePin: () => void;\n\tonToggleChat: () => void;\n}) {\n\tconst onStage = isOnStage(tile.stageStatus);\n\tconst [confirm, setConfirm] = useState<\"kick\" | \"takeOff\" | null>(null);\n\tconst showMenu = (canModerate || canManageStage) && !tile.isSelf;\n\n\treturn (\n\t\t<article\n\t\t\taria-label={tile.name}\n\t\t\tclassName={cn(\n\t\t\t\t\"bg-muted relative overflow-hidden rounded-xl\",\n\t\t\t\tcompact\n\t\t\t\t\t? \"aspect-video w-40 shrink-0 md:w-full\"\n\t\t\t\t\t: tile.kind === \"screen\"\n\t\t\t\t\t\t? \"min-h-0 flex-1 md:min-h-48\"\n\t\t\t\t\t\t: fill\n\t\t\t\t\t\t\t? \"size-full min-h-0 md:aspect-video md:h-auto\"\n\t\t\t\t\t\t\t: \"aspect-video\",\n\t\t\t)}\n\t\t>\n\t\t\t{tile.kind === \"idle\" ? (\n\t\t\t\t<div className=\"absolute inset-0 flex flex-col items-center justify-center gap-3\">\n\t\t\t\t\t{tile.picture ? (\n\t\t\t\t\t\t<img\n\t\t\t\t\t\t\tsrc={tile.picture}\n\t\t\t\t\t\t\talt=\"\"\n\t\t\t\t\t\t\tclassName=\"size-16 rounded-full object-cover\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<div className=\"bg-background flex size-16 items-center justify-center rounded-full text-xl\">\n\t\t\t\t\t\t\t{tile.name.slice(0, 1).toUpperCase()}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t\t<AudioWaveform\n\t\t\t\t\t\ttrack={tile.isSelf ? meeting.localAudioTrack() : null}\n\t\t\t\t\t\treducedMotion={reducedMotion}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t) : (\n\t\t\t\t<StudioTileVideo\n\t\t\t\t\tmeeting={meeting}\n\t\t\t\t\tparticipantId={tile.id}\n\t\t\t\t\tkind={tile.kind}\n\t\t\t\t\tmirror={tile.kind === \"camera\" && tile.isSelf}\n\t\t\t\t\tcontain={tile.kind === \"screen\"}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t<div className=\"absolute inset-x-0 bottom-0 z-10 flex items-end justify-between gap-2 bg-linear-to-t from-black/70 to-transparent p-2\">\n\t\t\t\t<p className=\"min-w-0 truncate text-xs font-medium text-white\">\n\t\t\t\t\t{tile.name}\n\t\t\t\t\t{!onStage ? (\n\t\t\t\t\t\t<span className=\"ml-1 rounded-full border border-white/40 px-1.5 py-0.5 text-[0.65rem]\">\n\t\t\t\t\t\t\t{labels.offAir}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t) : null}\n\t\t\t\t</p>\n\t\t\t\t<div className=\"flex items-center gap-1\">\n\t\t\t\t\t<TileStatusIcons tile={tile} labels={labels} />\n\t\t\t\t\t{showMenu ? (\n\t\t\t\t\t\t<StudioTileMenu\n\t\t\t\t\t\t\ttile={tile}\n\t\t\t\t\t\t\tcanModerate={canModerate}\n\t\t\t\t\t\t\tcanManageStage={canManageStage}\n\t\t\t\t\t\t\ttakeOffBlocked={takeOffBlocked}\n\t\t\t\t\t\t\tlabels={labels}\n\t\t\t\t\t\t\tonKick={() => setConfirm(\"kick\")}\n\t\t\t\t\t\t\tonMute={onMute}\n\t\t\t\t\t\t\tonStopCamera={onStopCamera}\n\t\t\t\t\t\t\tonStopScreen={onStopScreen}\n\t\t\t\t\t\t\tonToggleStage={() => {\n\t\t\t\t\t\t\t\tif (onStage && confirmTakeOff && !takeOffBlocked) {\n\t\t\t\t\t\t\t\t\tsetConfirm(\"takeOff\");\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tonToggleStage();\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tonTogglePin={onTogglePin}\n\t\t\t\t\t\t\tonToggleChat={onToggleChat}\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : null}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<ConfirmAction\n\t\t\t\topen={confirm === \"kick\"}\n\t\t\t\tonOpenChange={(open) => {\n\t\t\t\t\tif (!open) setConfirm(null);\n\t\t\t\t}}\n\t\t\t\ttriggerLabel={labels.kick}\n\t\t\t\ttitle={labels.kickTitle}\n\t\t\t\tdescription={labels.kickDescription}\n\t\t\t\tconfirmLabel={labels.kickConfirm}\n\t\t\t\tonConfirm={() => {\n\t\t\t\t\tsetConfirm(null);\n\t\t\t\t\tonKick();\n\t\t\t\t}}\n\t\t\t/>\n\t\t\t<ConfirmAction\n\t\t\t\topen={confirm === \"takeOff\"}\n\t\t\t\tonOpenChange={(open) => {\n\t\t\t\t\tif (!open) setConfirm(null);\n\t\t\t\t}}\n\t\t\t\ttriggerLabel={labels.takeOffAir}\n\t\t\t\ttitle={labels.takeOffAirTitle}\n\t\t\t\tdescription={labels.takeOffAirDescription}\n\t\t\t\tconfirmLabel={labels.takeOffAirConfirm}\n\t\t\t\tonConfirm={() => {\n\t\t\t\t\tsetConfirm(null);\n\t\t\t\t\tonToggleStage();\n\t\t\t\t}}\n\t\t\t/>\n\t\t</article>\n\t);\n}\n\nfunction TileStatusIcons({\n\ttile,\n\tlabels,\n}: {\n\ttile: StudioDisplayTile;\n\tlabels: StudioTileLabels;\n}) {\n\treturn (\n\t\t<>\n\t\t\t{tile.audioEnabled ? null : (\n\t\t\t\t<StatusIcon label={labels.mute}>\n\t\t\t\t\t<MicOff />\n\t\t\t\t</StatusIcon>\n\t\t\t)}\n\t\t\t{tile.kind !== \"screen\" && !tile.videoEnabled ? (\n\t\t\t\t<StatusIcon label={labels.cameraOff}>\n\t\t\t\t\t<VideoOff />\n\t\t\t\t</StatusIcon>\n\t\t\t) : null}\n\t\t\t{tile.kind !== \"screen\" && tile.screenShareEnabled ? (\n\t\t\t\t<StatusIcon label={labels.stopScreen}>\n\t\t\t\t\t<MonitorUp />\n\t\t\t\t</StatusIcon>\n\t\t\t) : null}\n\t\t\t{tile.pinned ? (\n\t\t\t\t<StatusIcon label={labels.pin}>\n\t\t\t\t\t<Pin />\n\t\t\t\t</StatusIcon>\n\t\t\t) : null}\n\t\t\t{tile.chatCanSend === false ? (\n\t\t\t\t<StatusIcon label={labels.muteChat}>\n\t\t\t\t\t<MessageSquareOff />\n\t\t\t\t</StatusIcon>\n\t\t\t) : null}\n\t\t</>\n\t);\n}\n\nfunction StatusIcon({\n\tlabel,\n\tchildren,\n}: {\n\tlabel: string;\n\tchildren: ReactNode;\n}) {\n\treturn (\n\t\t<span className=\"inline-flex text-white\">\n\t\t\t<span aria-hidden=\"true\" className=\"[&_svg]:size-3.5\">\n\t\t\t\t{children}\n\t\t\t</span>\n\t\t\t<span className=\"sr-only\">{label}</span>\n\t\t</span>\n\t);\n}\n\nfunction StudioTileVideo({\n\tmeeting,\n\tparticipantId,\n\tkind,\n\tmirror,\n\tcontain,\n}: {\n\tmeeting: StudioMeetingHandle;\n\tparticipantId: string;\n\tkind: StudioVideoKind;\n\tmirror: boolean;\n\tcontain: boolean;\n}) {\n\tconst ref = useRef<HTMLVideoElement | null>(null);\n\n\tuseEffect(() => {\n\t\tconst el = ref.current;\n\t\tel?.setAttribute(\"webkit-playsinline\", \"\");\n\t\tmeeting.attachVideo(participantId, el, kind);\n\t\treturn () => meeting.attachVideo(participantId, null, kind);\n\t}, [kind, meeting, participantId]);\n\n\treturn (\n\t\t<video\n\t\t\tref={ref}\n\t\t\tautoPlay\n\t\t\tplaysInline\n\t\t\tmuted\n\t\t\tdisablePictureInPicture\n\t\t\tcontrolsList=\"nodownload noplaybackrate noremoteplayback\"\n\t\t\tclassName={cn(\n\t\t\t\t\"livo-studio-tile-video absolute inset-0 size-full\",\n\t\t\t\t\"pointer-events-none\",\n\t\t\t\tcontain ? \"object-contain\" : \"object-cover\",\n\t\t\t\tmirror && \"-scale-x-100\",\n\t\t\t)}\n\t\t/>\n\t);\n}\n","\"use client\";\n\nimport { expandStudioTiles, studioStageLayout } from \"../lib/meeting\";\nimport type { StudioMeetingHandle } from \"../lib/meeting\";\nimport type { StudioParticipantTile } from \"../lib/types\";\nimport { cn } from \"../lib/cn\";\nimport { StudioTile, type StudioTileLabels } from \"./studio-tile\";\nimport { Button } from \"../ui/button\";\n\nexport function StudioStage({\n\tparticipants,\n\tmeeting,\n\treducedMotion,\n\tcanModerate,\n\tcanManageStage,\n\tonAir,\n\tlabels,\n\tonKick,\n\tonMute,\n\tonStopCamera,\n\tonStopScreen,\n\tonToggleStage,\n\tonTogglePin,\n\tonToggleChat,\n\tcanTakeOff,\n\tonOpenPeople,\n}: {\n\tparticipants: StudioParticipantTile[];\n\tmeeting: StudioMeetingHandle;\n\treducedMotion: boolean;\n\tcanModerate: boolean;\n\tcanManageStage: boolean;\n\tonAir: boolean;\n\tlabels: StudioTileLabels & { stageOverflow: string };\n\tonKick: (participantId: string) => void;\n\tonMute: (participantId: string) => void;\n\tonStopCamera: (participantId: string) => void;\n\tonStopScreen: (participantId: string) => void;\n\tonToggleStage: (tile: StudioParticipantTile) => void;\n\tonTogglePin: (tile: StudioParticipantTile) => void;\n\tonToggleChat: (tile: StudioParticipantTile) => void;\n\tcanTakeOff: (participantId: string) => boolean;\n\tonOpenPeople?: () => void;\n}) {\n\tconst displayTiles = expandStudioTiles(participants);\n\tconst stage = studioStageLayout(displayTiles, {\n\t\tactiveSpeakerId: meeting.activeSpeakerId(),\n\t});\n\tconst sharing = stage.spotlight.length > 0;\n\tconst overflowLabel = labels.stageOverflow.replace(\n\t\t\"{count}\",\n\t\tString(stage.overflow),\n\t);\n\n\tfunction renderTile(\n\t\ttile: (typeof displayTiles)[number],\n\t\tcompact: boolean,\n\t\tfill = false,\n\t) {\n\t\tconst takeOffBlocked = !canTakeOff(tile.id);\n\t\treturn (\n\t\t\t<StudioTile\n\t\t\t\tkey={tile.tileId}\n\t\t\t\ttile={tile}\n\t\t\t\tmeeting={meeting}\n\t\t\t\treducedMotion={reducedMotion}\n\t\t\t\tcompact={compact}\n\t\t\t\tfill={fill}\n\t\t\t\tcanModerate={canModerate && !tile.isSelf}\n\t\t\t\tcanManageStage={canManageStage && !tile.isSelf}\n\t\t\t\ttakeOffBlocked={takeOffBlocked}\n\t\t\t\tconfirmTakeOff={onAir}\n\t\t\t\tlabels={labels}\n\t\t\t\tonKick={() => onKick(tile.id)}\n\t\t\t\tonMute={() => onMute(tile.id)}\n\t\t\t\tonStopCamera={() => onStopCamera(tile.id)}\n\t\t\t\tonStopScreen={() => onStopScreen(tile.id)}\n\t\t\t\tonToggleStage={() => onToggleStage(tile)}\n\t\t\t\tonTogglePin={() => onTogglePin(tile)}\n\t\t\t\tonToggleChat={() => onToggleChat(tile)}\n\t\t\t/>\n\t\t);\n\t}\n\n\tfunction overflowChip(compact: boolean) {\n\t\tif (stage.overflow <= 0) return null;\n\t\treturn (\n\t\t\t<Button\n\t\t\t\ttype=\"button\"\n\t\t\t\tvariant=\"secondary\"\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"shrink-0\",\n\t\t\t\t\tcompact ? \"aspect-video w-40 md:w-full\" : \"aspect-video min-h-24\",\n\t\t\t\t)}\n\t\t\t\tonClick={onOpenPeople}\n\t\t\t>\n\t\t\t\t{overflowLabel}\n\t\t\t</Button>\n\t\t);\n\t}\n\n\tif (sharing) {\n\t\treturn (\n\t\t\t<div className=\"flex min-h-0 flex-1 flex-col overflow-hidden md:flex-row\">\n\t\t\t\t<div className=\"flex min-h-0 min-w-0 flex-1 flex-col gap-2 bg-black p-3\">\n\t\t\t\t\t{stage.spotlight.map((tile) => renderTile(tile, false))}\n\t\t\t\t</div>\n\t\t\t\t<div className=\"flex shrink-0 gap-2 overflow-x-auto p-2 md:w-64 md:flex-col md:overflow-auto\">\n\t\t\t\t\t{stage.strip.map((tile) => renderTile(tile, true))}\n\t\t\t\t\t{overflowChip(true)}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"mx-auto grid min-h-0 w-full flex-1 auto-rows-fr gap-2 overflow-hidden p-2 md:auto-rows-auto md:content-center md:gap-3 md:overflow-auto md:p-4\",\n\t\t\t\tstage.strip.length <= 1\n\t\t\t\t\t? \"max-w-3xl grid-cols-1\"\n\t\t\t\t\t: stage.strip.length <= 2\n\t\t\t\t\t\t? \"max-w-5xl grid-cols-1 sm:grid-cols-2\"\n\t\t\t\t\t\t: stage.strip.length <= 4\n\t\t\t\t\t\t\t? \"max-w-5xl grid-cols-2 sm:grid-cols-2\"\n\t\t\t\t\t\t\t: stage.strip.length <= 6\n\t\t\t\t\t\t\t\t? \"max-w-6xl grid-cols-2 sm:grid-cols-2 xl:grid-cols-3\"\n\t\t\t\t\t\t\t\t: \"grid-cols-2 sm:grid-cols-2 xl:grid-cols-3 2xl:grid-cols-4\",\n\t\t\t)}\n\t\t>\n\t\t\t{stage.strip.map((tile) => renderTile(tile, false, true))}\n\t\t\t{overflowChip(false)}\n\t\t</div>\n\t);\n}\n","\"use client\";\n\nimport {\n\tEye,\n\tEyeOff,\n\tMaximize,\n\tMessageSquare,\n\tMic,\n\tMicOff,\n\tMonitorUp,\n\tPhoneOff,\n\tPictureInPicture2,\n\tSettings,\n\tUsers,\n\tVideo,\n\tVideoOff,\n\tX,\n} from \"lucide-react\";\nimport { toast } from \"sonner\";\nimport { ConfirmAction } from \"../ui/confirm-action\";\nimport { Button } from \"../ui/button\";\nimport { TooltipProvider } from \"../ui/tooltip\";\nimport type { StudioRoomLabels } from \"../lib/labels\";\nimport type { StudioMeetingHandle } from \"../lib/meeting\";\nimport type { StudioSession } from \"../lib/types\";\nimport { StudioSettingsDialog } from \"./studio-settings-dialog\";\nimport { ControlIcon } from \"./studio-control-icon\";\n\ntype ShareGrant = \"idle\" | \"requested\" | \"granted\";\n\nexport function StudioToolbar({\n\tsession,\n\tmeeting,\n\tlabels,\n\tmuted,\n\tcameraOn,\n\tscreenOn,\n\tchatOpen,\n\tpeopleOpen,\n\tsettingsOpen,\n\tunreadChat,\n\tpeopleBadge,\n\tpending,\n\tshareGrant,\n\tshowScreenControl,\n\tshowMediaControls,\n\tscreenPending,\n\tcanShareFreely,\n\tscreenAvailable,\n\tpipSupported,\n\tpipOpen,\n\tselfStageStatus,\n\tcanManageStage,\n\tstageEnabled,\n\tcanLeaveStage,\n\treducedMotion,\n\tonToggleMute,\n\tonToggleCamera,\n\tonToggleScreen,\n\tonAskToShare,\n\tonCancelShareRequest,\n\tonAskStage,\n\tonLeaveStage,\n\tonToggleChat,\n\tonTogglePeople,\n\tonOpenSettings,\n\tonCloseSettings,\n\tonOpenPip,\n\tonClosePip,\n\tonLeave,\n}: {\n\tsession: StudioSession;\n\tmeeting: StudioMeetingHandle;\n\tlabels: StudioRoomLabels;\n\tmuted: boolean;\n\tcameraOn: boolean;\n\tscreenOn: boolean;\n\tchatOpen: boolean;\n\tpeopleOpen: boolean;\n\tsettingsOpen: boolean;\n\tunreadChat: number;\n\tpeopleBadge: number;\n\tpending: boolean;\n\tshareGrant: ShareGrant;\n\tshowScreenControl: boolean;\n\tshowMediaControls: boolean;\n\tscreenPending: boolean;\n\tcanShareFreely: boolean;\n\tscreenAvailable: boolean;\n\tpipSupported: boolean;\n\tpipOpen: boolean;\n\tselfStageStatus: string;\n\tcanManageStage: boolean;\n\tstageEnabled: boolean;\n\tcanLeaveStage: boolean;\n\treducedMotion: boolean;\n\tonToggleMute: () => void;\n\tonToggleCamera: () => void;\n\tonToggleScreen: () => void;\n\tonAskToShare: () => void;\n\tonCancelShareRequest: () => void;\n\tonAskStage: () => void;\n\tonLeaveStage: () => void;\n\tonToggleChat: () => void;\n\tonTogglePeople: () => void;\n\tonOpenSettings: () => void;\n\tonCloseSettings: (open: boolean) => void;\n\tonOpenPip: () => void;\n\tonClosePip: () => void;\n\tonLeave: () => void;\n}) {\n\tconst fullscreenSupported =\n\t\tdocument.fullscreenEnabled === true &&\n\t\ttypeof document.documentElement.requestFullscreen === \"function\";\n\n\tasync function enterFullscreen() {\n\t\ttry {\n\t\t\tawait document.documentElement.requestFullscreen();\n\t\t} catch {\n\t\t\t/* user gesture / policy */\n\t\t}\n\t}\n\n\treturn (\n\t\t<footer className=\"flex flex-wrap items-center justify-center gap-2 border-t px-3 py-3\">\n\t\t\t<TooltipProvider>\n\t\t\t\t{showMediaControls ? (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<ControlIcon\n\t\t\t\t\t\t\tlabel={muted ? labels.unmute : labels.mute}\n\t\t\t\t\t\t\tpressed={muted}\n\t\t\t\t\t\t\ttone={muted ? \"danger\" : \"default\"}\n\t\t\t\t\t\t\tonClick={onToggleMute}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{muted ? <MicOff /> : <Mic />}\n\t\t\t\t\t\t</ControlIcon>\n\t\t\t\t\t\t<ControlIcon\n\t\t\t\t\t\t\tlabel={labels.camera}\n\t\t\t\t\t\t\tpressed={cameraOn}\n\t\t\t\t\t\t\tonClick={onToggleCamera}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{cameraOn ? <Video /> : <VideoOff />}\n\t\t\t\t\t\t</ControlIcon>\n\t\t\t\t\t</>\n\t\t\t\t) : null}\n\t\t\t\t{session.role === \"moderator\" && canManageStage ? (\n\t\t\t\t\t<ControlIcon\n\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\tselfStageStatus === \"ON_STAGE\" ? labels.goOffAir : labels.goOnAir\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpressed={selfStageStatus !== \"ON_STAGE\"}\n\t\t\t\t\t\tdisabled={selfStageStatus === \"ON_STAGE\" && !canLeaveStage}\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tif (selfStageStatus === \"ON_STAGE\") {\n\t\t\t\t\t\t\t\tif (!canLeaveStage) {\n\t\t\t\t\t\t\t\t\ttoast.message(labels.offAirLastVisible);\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tonLeaveStage();\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tonAskStage();\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{selfStageStatus === \"ON_STAGE\" ? <EyeOff /> : <Eye />}\n\t\t\t\t\t</ControlIcon>\n\t\t\t\t) : null}\n\t\t\t\t{session.role === \"guest\" && stageEnabled ? (\n\t\t\t\t\t<ControlIcon\n\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\tselfStageStatus === \"ON_STAGE\"\n\t\t\t\t\t\t\t\t? labels.goOffAir\n\t\t\t\t\t\t\t\t: selfStageStatus === \"REQUESTED_TO_JOIN_STAGE\"\n\t\t\t\t\t\t\t\t\t? labels.stageRequested\n\t\t\t\t\t\t\t\t\t: labels.askToGoOnAir\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpressed={selfStageStatus === \"REQUESTED_TO_JOIN_STAGE\"}\n\t\t\t\t\t\tdisabled={\n\t\t\t\t\t\t\tselfStageStatus === \"REQUESTED_TO_JOIN_STAGE\" ||\n\t\t\t\t\t\t\t(selfStageStatus === \"ON_STAGE\" && !canLeaveStage)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tif (selfStageStatus === \"ON_STAGE\") {\n\t\t\t\t\t\t\t\tif (!canLeaveStage) {\n\t\t\t\t\t\t\t\t\ttoast.message(labels.offAirLastVisible);\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tonLeaveStage();\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tonAskStage();\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{selfStageStatus === \"ON_STAGE\" ? <EyeOff /> : <Eye />}\n\t\t\t\t\t</ControlIcon>\n\t\t\t\t) : null}\n\t\t\t\t{showScreenControl ? (\n\t\t\t\t\tcanShareFreely ? (\n\t\t\t\t\t\t<ControlIcon\n\t\t\t\t\t\t\tlabel={labels.screen}\n\t\t\t\t\t\t\tpressed={screenOn}\n\t\t\t\t\t\t\tdisabled={screenPending || (!screenAvailable && !screenOn)}\n\t\t\t\t\t\t\tpending={screenPending}\n\t\t\t\t\t\t\tonClick={onToggleScreen}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<MonitorUp />\n\t\t\t\t\t\t</ControlIcon>\n\t\t\t\t\t) : shareGrant === \"requested\" ? (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<ControlIcon\n\t\t\t\t\t\t\t\tlabel={labels.shareRequested}\n\t\t\t\t\t\t\t\tpressed\n\t\t\t\t\t\t\t\tdisabled\n\t\t\t\t\t\t\t\tonClick={() => undefined}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<MonitorUp />\n\t\t\t\t\t\t\t</ControlIcon>\n\t\t\t\t\t\t\t<ControlIcon\n\t\t\t\t\t\t\t\tlabel={labels.cancelShareRequest}\n\t\t\t\t\t\t\t\tonClick={onCancelShareRequest}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<X />\n\t\t\t\t\t\t\t</ControlIcon>\n\t\t\t\t\t\t</>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<ControlIcon label={labels.askToShare} onClick={onAskToShare}>\n\t\t\t\t\t\t\t<MonitorUp />\n\t\t\t\t\t\t</ControlIcon>\n\t\t\t\t\t)\n\t\t\t\t) : null}\n\t\t\t\t<ControlIcon\n\t\t\t\t\tlabel={\n\t\t\t\t\t\tunreadChat > 0 ? `${labels.chat} (${unreadChat})` : labels.chat\n\t\t\t\t\t}\n\t\t\t\t\tpressed={chatOpen}\n\t\t\t\t\tbadge={unreadChat}\n\t\t\t\t\tonClick={onToggleChat}\n\t\t\t\t>\n\t\t\t\t\t<MessageSquare />\n\t\t\t\t</ControlIcon>\n\t\t\t\t{session.role === \"moderator\" ? (\n\t\t\t\t\t<ControlIcon\n\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\tpeopleBadge > 0\n\t\t\t\t\t\t\t\t? `${labels.people} (${peopleBadge})`\n\t\t\t\t\t\t\t\t: labels.people\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpressed={peopleOpen}\n\t\t\t\t\t\tbadge={peopleBadge}\n\t\t\t\t\t\tonClick={onTogglePeople}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Users />\n\t\t\t\t\t</ControlIcon>\n\t\t\t\t) : null}\n\t\t\t\t{fullscreenSupported ? (\n\t\t\t\t\t<ControlIcon\n\t\t\t\t\t\tlabel={labels.fullscreen}\n\t\t\t\t\t\tonClick={() => void enterFullscreen()}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Maximize />\n\t\t\t\t\t</ControlIcon>\n\t\t\t\t) : null}\n\t\t\t\t{pipSupported ? (\n\t\t\t\t\t<ControlIcon\n\t\t\t\t\t\tlabel={pipOpen ? labels.closePip : labels.openPip}\n\t\t\t\t\t\tpressed={pipOpen}\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tif (pipOpen) onClosePip();\n\t\t\t\t\t\t\telse onOpenPip();\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<PictureInPicture2 />\n\t\t\t\t\t</ControlIcon>\n\t\t\t\t) : null}\n\t\t\t\t<ControlIcon\n\t\t\t\t\tlabel={labels.settings}\n\t\t\t\t\tpressed={settingsOpen}\n\t\t\t\t\tonClick={onOpenSettings}\n\t\t\t\t>\n\t\t\t\t\t<Settings />\n\t\t\t\t</ControlIcon>\n\t\t\t\t<StudioSettingsDialog\n\t\t\t\t\topen={settingsOpen}\n\t\t\t\t\tonOpenChange={onCloseSettings}\n\t\t\t\t\tmeeting={meeting}\n\t\t\t\t\treducedMotion={reducedMotion}\n\t\t\t\t\tcameraOn={cameraOn}\n\t\t\t\t\tlabels={{\n\t\t\t\t\t\tsettingsTitle: labels.settingsTitle,\n\t\t\t\t\t\tsettingsDescription: labels.settingsDescription,\n\t\t\t\t\t\tguestName: labels.guestName,\n\t\t\t\t\t\tdisplayNameSave: labels.displayNameSave,\n\t\t\t\t\t\tdisplayNameSaved: labels.displayNameSaved,\n\t\t\t\t\t\tdisplayNameError: labels.displayNameError,\n\t\t\t\t\t\tcameraDevice: labels.cameraDevice,\n\t\t\t\t\t\tmicDevice: labels.micDevice,\n\t\t\t\t\t\tspeakerDevice: labels.speakerDevice,\n\t\t\t\t\t\ttestSpeaker: labels.testSpeaker,\n\t\t\t\t\t\ttestSpeakerError: labels.testSpeakerError,\n\t\t\t\t\t\tcameraOff: labels.cameraOff,\n\t\t\t\t\t\tmicLevel: labels.micLevel,\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t{session.role === \"guest\" ? (\n\t\t\t\t\t<ConfirmAction\n\t\t\t\t\t\ttriggerLabel={labels.leave}\n\t\t\t\t\t\ttitle={labels.leaveTitle}\n\t\t\t\t\t\tdescription={labels.leaveDescription}\n\t\t\t\t\t\tconfirmLabel={labels.leaveConfirm}\n\t\t\t\t\t\tpending={pending}\n\t\t\t\t\t\tonConfirm={onLeave}\n\t\t\t\t\t\ttrigger={\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tvariant=\"destructive\"\n\t\t\t\t\t\t\t\tsize=\"icon-lg\"\n\t\t\t\t\t\t\t\tdisabled={pending}\n\t\t\t\t\t\t\t\taria-label={labels.leave}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<PhoneOff />\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t) : null}\n\t\t\t</TooltipProvider>\n\t\t</footer>\n\t);\n}\n","\"use client\";\n\nimport {\n\tuseCallback,\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n\ttype ReactNode,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { Loader2, Share2 } from \"lucide-react\";\nimport { toast } from \"sonner\";\nimport { ConfirmAction } from \"../ui/confirm-action\";\nimport { Button } from \"../ui/button\";\nimport { useBeforeUnload } from \"../hooks/use-before-unload\";\nimport { useDocumentPictureInPicture } from \"../hooks/use-document-picture-in-picture\";\nimport { useWakeLock } from \"../hooks/use-wake-lock\";\nimport { EmptyState } from \"../ui/empty-state\";\nimport {\n\tcanStartScreenShare,\n\tcanTakeOffAir,\n\tduplicateSelfParticipant,\n\tDUPLICATE_SELF_DEBOUNCE_MS,\n\tisOnStage,\n\tisStudioRejected,\n\tisStudioSessionOver,\n\tlosesDuplicateTiebreak,\n\tSHARE_REQUEST_TIMEOUT_MS,\n\tSTUDIO_MODERATOR_PRESET,\n\ttype StudioHostMediaKind,\n\ttype StudioMeetingHandle,\n\ttype StudioParticipantTile,\n} from \"../lib/meeting\";\nimport {\n\tdetectScreenCaptureSupport,\n\tscreenShareBlock,\n\ttype ScreenShareBlock,\n} from \"../lib/screen-share-support\";\nimport { isLiveStudioStatus, isStudioActiveStatus } from \"../lib/parse\";\nimport type { StudioRoomLabels } from \"../lib/labels\";\nimport { playStudioSound, unlockStudioSounds } from \"../lib/studio-sounds\";\nimport type { StudioSession, StudioStageStatus } from \"../lib/types\";\nimport type { StudioControlActions } from \"../lib/control-actions\";\nimport { postLivoEvent } from \"../lib/bridge\";\nimport { playerWatchUrl } from \"../lib/embed-urls\";\nimport { shareOrCopyLink } from \"../lib/share\";\nimport { canPublish } from \"../lib/status\";\nimport { formatStudioElapsed } from \"../lib/meeting\";\nimport { useStudioWindowGate } from \"./studio-window-gate\";\nimport {\n\tapplyStudioDeviceSelection,\n\treadStudioDeviceSelection,\n\ttype StudioDeviceSelection,\n} from \"../lib/devices\";\nimport { StudioGuestWaiting } from \"./studio-guest-waiting\";\nimport { StudioLiveBadge } from \"./studio-live-badge\";\nimport { StudioPipPanel } from \"./studio-pip-panel\";\nimport { StudioRemoteAudio } from \"./studio-remote-audio\";\nimport { StudioSidePanel, type StudioSideTab } from \"./studio-side-panel\";\nimport { StudioSkeleton } from \"./studio-skeleton\";\nimport { StudioStage } from \"./studio-stage\";\nimport { StudioToolbar } from \"./studio-toolbar\";\n\ntype ShareGrant = \"idle\" | \"requested\" | \"granted\";\n\nconst STAGE_GRANT_VERIFY_MS = 4_000;\nexport const STUDIO_CONNECT_WATCHDOG_MS = 12_000;\n\nexport function StudioRoom({\n\tsession,\n\tmeeting,\n\tcontrol,\n\tonRefreshStatus,\n\tonRejoin,\n\tlabels,\n\treducedMotion,\n\tembed = false,\n\tchrome,\n\tplayerOrigin,\n\twindowGate,\n\tinitialCameraOn = true,\n\tinitialMuted = false,\n\tinitialDevices,\n}: {\n\tsession: StudioSession;\n\tmeeting: StudioMeetingHandle;\n\tcontrol: StudioControlActions;\n\tonRefreshStatus?: () => Promise<void>;\n\tonRejoin?: () => void;\n\treducedMotion: boolean;\n\tlabels: StudioRoomLabels;\n\tembed?: boolean;\n\tchrome?: ReactNode;\n\tplayerOrigin?: string;\n\twindowGate?: { reportDuplicate: () => void };\n\tinitialCameraOn?: boolean;\n\tinitialMuted?: boolean;\n\tinitialDevices?: StudioDeviceSelection;\n}) {\n\tconst [cameraOn, setCameraOn] = useState(initialCameraOn);\n\tconst [screenOn, setScreenOn] = useState(false);\n\tconst [muted, setMuted] = useState(initialMuted);\n\tconst [screenRequestPending, setScreenRequestPending] = useState(false);\n\tconst [pending, setPending] = useState(false);\n\tconst [publishing, setPublishing] = useState(false);\n\tconst [tick, setTick] = useState(0);\n\tconst [leaveState, setLeaveState] = useState<string | null>(null);\n\tconst [sideTab, setSideTab] = useState<StudioSideTab | null>(null);\n\tconst [settingsOpen, setSettingsOpen] = useState(false);\n\tconst [seenIncoming, setSeenIncoming] = useState(0);\n\tconst [egressPending, setEgressPending] = useState(\n\t\tsession.role === \"moderator\",\n\t);\n\tconst [egressStarted, setEgressStarted] = useState(\n\t\tsession.role === \"moderator\" && isStudioActiveStatus(session.stream.status),\n\t);\n\tconst [egressError, setEgressError] = useState<string | null>(null);\n\tconst [shareGrant, setShareGrant] = useState<ShareGrant>(\"idle\");\n\tconst [connectTimedOut, setConnectTimedOut] = useState(false);\n\tconst [screenPermission, setScreenPermission] = useState(() =>\n\t\tmeeting.screenSharePermission(),\n\t);\n\tconst [captureSupported] = useState(() => detectScreenCaptureSupport());\n\tconst liveStartedAtRef = useRef<number | null>(null);\n\tconst seenWaitlisted = useRef(new Set<string>());\n\tconst knockPrimed = useRef(false);\n\tconst peopleAutoOpened = useRef(false);\n\tconst seenChatIds = useRef(new Set<string>());\n\tconst chatSoundPrimed = useRef(false);\n\tconst seenStageRequests = useRef(new Set<string>());\n\tconst stageRequestPrimed = useRef(false);\n\tconst awaitingStageDecision = useRef(false);\n\tconst prevStageStatus = useRef<StudioStageStatus | null>(null);\n\tconst grantCheckTimers = useRef<number[]>([]);\n\tconst screenNoticePrimed = useRef(false);\n\tconst lastSelfMedia = useRef({\n\t\tvideo: false,\n\t\taudio: true,\n\t\tscreen: false,\n\t});\n\tconst pip = useDocumentPictureInPicture();\n\tconst gateFromContext = useStudioWindowGate();\n\tconst { reportDuplicate } = windowGate ?? gateFromContext;\n\tconst onAir = isLiveStudioStatus(session.stream.status);\n\tconst active = isStudioActiveStatus(session.stream.status);\n\tif (onAir && liveStartedAtRef.current === null) {\n\t\tliveStartedAtRef.current = Date.now();\n\t}\n\tif (!onAir) {\n\t\tliveStartedAtRef.current = null;\n\t}\n\tconst livestreamState = meeting.livestreamState();\n\tconst starting = egressPending || livestreamState === \"STARTING\";\n\tconst sending = egressStarted || livestreamState === \"LIVESTREAMING\";\n\tconst encoderLost = session.stream.encoderLostAt != null;\n\tconst egressLost =\n\t\tsession.role === \"moderator\" &&\n\t\t(encoderLost || (Boolean(egressError) && !active && !starting && !sending));\n\tconst roomState = leaveState ?? meeting.roomState();\n\tconst sessionOver = isStudioSessionOver(session.stream.status, roomState);\n\tconst rejected = isStudioRejected(roomState);\n\tuseBeforeUnload(active && !sessionOver);\n\tuseWakeLock(active && !sessionOver);\n\n\tuseEffect(() => {\n\t\tunlockStudioSounds();\n\t}, []);\n\n\tuseEffect(() => {\n\t\tif (onAir) {\n\t\t\tsetPublishing(false);\n\t\t\tpostLivoEvent(\"live\", { streamId: session.stream.id });\n\t\t}\n\t}, [onAir, session.stream.id]);\n\n\tuseEffect(() => {\n\t\tconst saved = initialDevices ?? readStudioDeviceSelection();\n\t\tlet cancelled = false;\n\t\tvoid (async () => {\n\t\t\ttry {\n\t\t\t\tconst listed = await meeting.listDevices();\n\t\t\t\tif (cancelled) return;\n\t\t\t\tawait applyStudioDeviceSelection(meeting.setDevice, saved, listed);\n\t\t\t} catch {\n\t\t\t\t/* listDevices may fail before permission */\n\t\t\t}\n\t\t})();\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t};\n\t}, [initialDevices, meeting]);\n\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tfor (const id of grantCheckTimers.current) window.clearTimeout(id);\n\t\t};\n\t}, []);\n\n\tuseEffect(() => {\n\t\tif (!sessionOver) return;\n\t\tpostLivoEvent(\"ended\", { streamId: session.stream.id });\n\t\tif (leaveState === \"left\") {\n\t\t\tpostLivoEvent(\"left\", { streamId: session.stream.id });\n\t\t}\n\t}, [leaveState, session.stream.id, sessionOver]);\n\n\tuseEffect(() => {\n\t\tconst id = window.setInterval(() => {\n\t\t\tsetTick((n) => n + 1);\n\t\t\tif (session.role === \"guest\") {\n\t\t\t\tvoid meeting.ensureStageJoined();\n\t\t\t}\n\t\t}, 1000);\n\t\treturn () => window.clearInterval(id);\n\t}, [meeting, session.role]);\n\n\tuseEffect(\n\t\t() => meeting.subscribeMedia(() => setTick((n) => n + 1)),\n\t\t[meeting],\n\t);\n\n\tuseEffect(\n\t\t() => meeting.subscribeRoomLeft((state) => setLeaveState(state)),\n\t\t[meeting],\n\t);\n\n\tuseEffect(\n\t\t() => meeting.subscribeChat(() => setTick((n) => n + 1)),\n\t\t[meeting],\n\t);\n\n\tuseEffect(\n\t\t() =>\n\t\t\tmeeting.subscribePermissions(() => {\n\t\t\t\tsetScreenPermission(meeting.screenSharePermission());\n\t\t\t\tsetTick((n) => n + 1);\n\t\t\t}),\n\t\t[meeting],\n\t);\n\n\tuseEffect(\n\t\t() =>\n\t\t\tmeeting.subscribeActiveSpeaker(() => {\n\t\t\t\tsetTick((n) => n + 1);\n\t\t\t}),\n\t\t[meeting],\n\t);\n\n\tuseEffect(\n\t\t() => meeting.subscribeParticipants(() => setTick((n) => n + 1)),\n\t\t[meeting],\n\t);\n\n\tuseEffect(\n\t\t() => meeting.subscribeStage(() => setTick((n) => n + 1)),\n\t\t[meeting],\n\t);\n\n\tuseEffect(\n\t\t() =>\n\t\t\tmeeting.subscribePinned(() => {\n\t\t\t\tconst self = meeting.participants().find((row) => row.isSelf);\n\t\t\t\tif (self?.pinned) toast.message(labels.pinnedToast);\n\t\t\t\tsetTick((n) => n + 1);\n\t\t\t}),\n\t\t[labels.pinnedToast, meeting],\n\t);\n\n\tuseEffect(() => {\n\t\tif (shareGrant !== \"requested\") return;\n\t\tconst id = window.setTimeout(() => {\n\t\t\tsetShareGrant(\"idle\");\n\t\t\ttoast.message(labels.shareRequestTimeout);\n\t\t}, SHARE_REQUEST_TIMEOUT_MS);\n\t\treturn () => window.clearTimeout(id);\n\t}, [labels.shareRequestTimeout, shareGrant]);\n\n\tconst guestOffStage = (() => {\n\t\tif (session.role !== \"guest\") return false;\n\t\tconst current = meeting.participants().find((row) => row.isSelf);\n\t\treturn current != null && !isOnStage(current.stageStatus);\n\t})();\n\n\tuseEffect(() => {\n\t\tif (sessionOver || rejected || guestOffStage) return;\n\t\tlet cancelled = false;\n\t\tvoid Promise.resolve(meeting.setVideoEnabled(cameraOn)).then(\n\t\t\t() => undefined,\n\t\t\t() => {\n\t\t\t\tif (cancelled) return;\n\t\t\t\tif (cameraOn) {\n\t\t\t\t\tsetCameraOn(false);\n\t\t\t\t\ttoast.error(labels.cameraError);\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t};\n\t}, [\n\t\tmeeting,\n\t\tcameraOn,\n\t\tsessionOver,\n\t\trejected,\n\t\tguestOffStage,\n\t\tlabels.cameraError,\n\t]);\n\n\tuseEffect(() => {\n\t\tif (sessionOver || rejected || guestOffStage) {\n\t\t\tsetScreenRequestPending(false);\n\t\t\treturn;\n\t\t}\n\t\tif (!screenOn) {\n\t\t\tvoid meeting.setScreenShareEnabled(false);\n\t\t\tsetScreenRequestPending(false);\n\t\t\treturn;\n\t\t}\n\t\tlet cancelled = false;\n\t\tsetScreenRequestPending(true);\n\t\tvoid Promise.resolve(meeting.setScreenShareEnabled(true)).then(\n\t\t\t() => {\n\t\t\t\tif (!cancelled) setScreenRequestPending(false);\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tif (cancelled) return;\n\t\t\t\tsetScreenRequestPending(false);\n\t\t\t\tsetScreenOn(false);\n\t\t\t},\n\t\t);\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t};\n\t}, [meeting, screenOn, sessionOver, rejected, guestOffStage]);\n\n\tuseEffect(() => {\n\t\tif (sessionOver || rejected || guestOffStage) return;\n\t\tvoid Promise.resolve(meeting.setAudioEnabled(!muted)).catch(() => {\n\t\t\t/* device permission errors surface as muted tiles */\n\t\t});\n\t}, [meeting, muted, sessionOver, rejected, guestOffStage]);\n\n\tuseEffect(() => {\n\t\tif (!guestOffStage) return;\n\t\tvoid meeting.setAudioEnabled(false);\n\t\tvoid meeting.setVideoEnabled(false);\n\t\tvoid meeting.setScreenShareEnabled(false);\n\t}, [guestOffStage, meeting]);\n\n\tuseEffect(() => {\n\t\tif (!sessionOver && !rejected) return;\n\t\tsetShareGrant(\"idle\");\n\t\tvoid meeting.setAudioEnabled(false);\n\t\tvoid meeting.setVideoEnabled(false);\n\t\tvoid meeting.setScreenShareEnabled(false);\n\t}, [meeting, rejected, sessionOver]);\n\n\tuseEffect(() => {\n\t\treturn meeting.subscribeMedia(() => {\n\t\t\tconst self = meeting.participants().find((row) => row.isSelf);\n\t\t\tif (!self) return;\n\t\t\tif (lastSelfMedia.current.video && !self.videoEnabled) {\n\t\t\t\tsetCameraOn(false);\n\t\t\t}\n\t\t\tif (lastSelfMedia.current.audio && !self.audioEnabled) {\n\t\t\t\tsetMuted(true);\n\t\t\t}\n\t\t\tif (lastSelfMedia.current.screen && !self.screenShareEnabled) {\n\t\t\t\tsetScreenOn(false);\n\t\t\t}\n\t\t\tlastSelfMedia.current = {\n\t\t\t\tvideo: self.videoEnabled,\n\t\t\t\taudio: self.audioEnabled,\n\t\t\t\tscreen: self.screenShareEnabled,\n\t\t\t};\n\t\t});\n\t}, [meeting]);\n\n\tconst sawParticipants = useRef(false);\n\tconst participants = useMemo(() => meeting.participants(), [meeting, tick]);\n\tuseEffect(() => {\n\t\tconst other = duplicateSelfParticipant(participants);\n\t\tif (!other) return;\n\t\tconst self = participants.find((tile) => tile.isSelf);\n\t\tif (!self || !losesDuplicateTiebreak(self.id, other.id)) return;\n\t\tconst id = window.setTimeout(() => {\n\t\t\treportDuplicate();\n\t\t}, DUPLICATE_SELF_DEBOUNCE_MS);\n\t\treturn () => window.clearTimeout(id);\n\t}, [participants, reportDuplicate]);\n\tconst stageParticipants = useMemo(\n\t\t() => participants.filter((row) => isOnStage(row.stageStatus)),\n\t\t[participants],\n\t);\n\tconst waitlisted = useMemo(() => meeting.waitlisted(), [meeting, tick]);\n\tconst connectionState = useMemo(\n\t\t() => meeting.connectionState(),\n\t\t[meeting, tick],\n\t);\n\tconst lastMeetingError = useMemo(\n\t\t() => meeting.lastMeetingError(),\n\t\t[meeting, tick],\n\t);\n\tconst canManageStage = meeting.canManageStage();\n\tconst stageEnabled = meeting.stageEnabled();\n\tconst stageRequests = useMemo(\n\t\t() => (canManageStage ? meeting.stageRequests() : []),\n\t\t[canManageStage, meeting, tick],\n\t);\n\tconst chatMessages = useMemo(() => meeting.chatMessages(), [meeting, tick]);\n\tconst inWaitingRoom = meeting.inWaitingRoom();\n\tconst screenAvailable = canStartScreenShare(participants);\n\tconst durableScreenBlock: ScreenShareBlock = screenShareBlock(\n\t\tcaptureSupported,\n\t\tscreenPermission,\n\t);\n\tconst showScreenControl = durableScreenBlock === null;\n\tconst canGoLive =\n\t\tsession.role === \"moderator\" && canPublish(session.stream.status);\n\tconst showPublishButton =\n\t\tsession.role === \"moderator\" &&\n\t\t!onAir &&\n\t\tsession.stream.status !== \"ended\" &&\n\t\tsession.stream.status !== \"error\";\n\tconst self = participants.find((row) => row.isSelf);\n\tconst canShareFreely =\n\t\tsession.role === \"moderator\" ||\n\t\tself?.stageStatus === \"ON_STAGE\" ||\n\t\tshareGrant === \"granted\";\n\tconst selfId = self?.id ?? null;\n\tconst selfUserId = self?.userId || null;\n\tconst remoteParticipants = participants.filter((row) => !row.isSelf);\n\tconst incoming = chatMessages.filter((row) => row.userId !== selfUserId);\n\tconst unread =\n\t\tsideTab === \"chat\" ? 0 : Math.max(0, incoming.length - seenIncoming);\n\tconst peopleBadge = waitlisted.length + stageRequests.length;\n\tconst selfStageStatus = self?.stageStatus ?? meeting.stageStatus();\n\n\tuseEffect(() => {\n\t\tif (sideTab === \"chat\") setSeenIncoming(incoming.length);\n\t}, [incoming.length, sideTab]);\n\n\tuseEffect(() => {\n\t\tif (!chatSoundPrimed.current) {\n\t\t\tfor (const row of incoming) seenChatIds.current.add(row.id);\n\t\t\tchatSoundPrimed.current = true;\n\t\t\treturn;\n\t\t}\n\t\tfor (const row of incoming) {\n\t\t\tif (seenChatIds.current.has(row.id)) continue;\n\t\t\tseenChatIds.current.add(row.id);\n\t\t\tplayStudioSound(\"chat\");\n\t\t}\n\t}, [incoming]);\n\n\tuseEffect(() => {\n\t\tif (session.role !== \"moderator\") return;\n\t\tif (!stageRequestPrimed.current) {\n\t\t\tfor (const row of stageRequests) {\n\t\t\t\tseenStageRequests.current.add(row.userId);\n\t\t\t}\n\t\t\tstageRequestPrimed.current = true;\n\t\t\treturn;\n\t\t}\n\t\tfor (const row of stageRequests) {\n\t\t\tif (seenStageRequests.current.has(row.userId)) continue;\n\t\t\tseenStageRequests.current.add(row.userId);\n\t\t\tplayStudioSound(\"request\");\n\t\t}\n\t}, [session.role, stageRequests]);\n\n\tuseEffect(() => {\n\t\tconst next = selfStageStatus;\n\t\tconst prev = prevStageStatus.current;\n\t\tprevStageStatus.current = next;\n\t\tif (session.role !== \"guest\") return;\n\t\tif (next === \"REQUESTED_TO_JOIN_STAGE\") {\n\t\t\tawaitingStageDecision.current = true;\n\t\t\treturn;\n\t\t}\n\t\tif (!awaitingStageDecision.current) return;\n\t\tif (next === \"ACCEPTED_TO_JOIN_STAGE\" || next === \"ON_STAGE\") {\n\t\t\tawaitingStageDecision.current = false;\n\t\t\ttoast.success(labels.stageApproved);\n\t\t\treturn;\n\t\t}\n\t\tif (next === \"OFF_STAGE\" && prev === \"REQUESTED_TO_JOIN_STAGE\") {\n\t\t\tawaitingStageDecision.current = false;\n\t\t\ttoast.message(labels.stageDenied);\n\t\t}\n\t}, [labels.stageApproved, labels.stageDenied, selfStageStatus, session.role]);\n\n\tuseEffect(() => {\n\t\tif (\n\t\t\tsession.role === \"moderator\" &&\n\t\t\twaitlisted.length > 0 &&\n\t\t\t!peopleAutoOpened.current\n\t\t) {\n\t\t\tpeopleAutoOpened.current = true;\n\t\t\tsetSideTab(\"people\");\n\t\t}\n\t}, [session.role, waitlisted.length]);\n\n\tuseEffect(() => {\n\t\tif (!knockPrimed.current) {\n\t\t\tfor (const guest of waitlisted) seenWaitlisted.current.add(guest.id);\n\t\t\tknockPrimed.current = true;\n\t\t\treturn;\n\t\t}\n\t\tfor (const guest of waitlisted) {\n\t\t\tif (seenWaitlisted.current.has(guest.id)) continue;\n\t\t\tseenWaitlisted.current.add(guest.id);\n\t\t\ttoast.message(labels.knock.replace(\"{name}\", guest.name));\n\t\t\tif (session.role === \"moderator\") {\n\t\t\t\tplayStudioSound(\"request\");\n\t\t\t\tsetSideTab(\"people\");\n\t\t\t}\n\t\t}\n\t}, [labels.knock, session.role, waitlisted]);\n\n\tuseEffect(() => {\n\t\tif (session.role !== \"guest\" || connectionState !== \"connecting\") {\n\t\t\tsetConnectTimedOut(false);\n\t\t\treturn;\n\t\t}\n\t\tconst id = window.setTimeout(() => {\n\t\t\tsetConnectTimedOut(true);\n\t\t}, STUDIO_CONNECT_WATCHDOG_MS);\n\t\treturn () => window.clearTimeout(id);\n\t}, [connectionState, session.role]);\n\n\tuseEffect(() => {\n\t\tif (inWaitingRoom || screenNoticePrimed.current) return;\n\t\tif (!durableScreenBlock) return;\n\t\tscreenNoticePrimed.current = true;\n\t\ttoast.message(\n\t\t\tdurableScreenBlock === \"device\"\n\t\t\t\t? labels.screenUnsupportedDevice\n\t\t\t\t: labels.screenNotAllowed,\n\t\t);\n\t}, [\n\t\tdurableScreenBlock,\n\t\tinWaitingRoom,\n\t\tlabels.screenNotAllowed,\n\t\tlabels.screenUnsupportedDevice,\n\t]);\n\n\tuseEffect(() => {\n\t\treturn meeting.subscribeBroadcast((message) => {\n\t\t\tif (message.type === \"host-media\") {\n\t\t\t\tif (session.role === \"moderator\") return;\n\t\t\t\tif (message.kind === \"audio\") {\n\t\t\t\t\tsetMuted(true);\n\t\t\t\t\ttoast.message(labels.hostMutedYou);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (message.kind === \"video\") {\n\t\t\t\t\tsetCameraOn(false);\n\t\t\t\t\ttoast.message(labels.hostStoppedYourCamera);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tsetScreenOn(false);\n\t\t\t\tsetShareGrant(\"idle\");\n\t\t\t\ttoast.message(labels.hostStoppedYourScreen);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (message.type === \"share-request\") {\n\t\t\t\tif (session.role !== \"moderator\") return;\n\t\t\t\tplayStudioSound(\"request\");\n\t\t\t\ttoast.message(labels.shareRequestFrom.replace(\"{name}\", message.name), {\n\t\t\t\t\tid: `share-request:${message.participantId}`,\n\t\t\t\t\taction: {\n\t\t\t\t\t\tlabel: labels.approve,\n\t\t\t\t\t\tonClick: () => {\n\t\t\t\t\t\t\tvoid Promise.resolve(\n\t\t\t\t\t\t\t\tmeeting.sendBroadcast(\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttype: \"share-response\",\n\t\t\t\t\t\t\t\t\t\tparticipantId: message.participantId,\n\t\t\t\t\t\t\t\t\t\tgranted: true,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{ participantIds: [message.participantId] },\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t).catch(() => {\n\t\t\t\t\t\t\t\ttoast.error(labels.shareRespondError);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tcancel: {\n\t\t\t\t\t\tlabel: labels.deny,\n\t\t\t\t\t\tonClick: () => {\n\t\t\t\t\t\t\tvoid Promise.resolve(\n\t\t\t\t\t\t\t\tmeeting.sendBroadcast(\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttype: \"share-response\",\n\t\t\t\t\t\t\t\t\t\tparticipantId: message.participantId,\n\t\t\t\t\t\t\t\t\t\tgranted: false,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{ participantIds: [message.participantId] },\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t).catch(() => {\n\t\t\t\t\t\t\t\ttoast.error(labels.shareRespondError);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (message.type !== \"share-response\") return;\n\t\t\tconst local = meeting.participants().find((row) => row.isSelf);\n\t\t\tif (!local || message.participantId !== local.id) return;\n\t\t\tif (message.granted) {\n\t\t\t\tsetShareGrant(\"granted\");\n\t\t\t\ttoast.message(labels.shareApproved);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetShareGrant(\"idle\");\n\t\t\ttoast.message(labels.shareDenied);\n\t\t});\n\t}, [\n\t\tlabels.approve,\n\t\tlabels.deny,\n\t\tlabels.hostMutedYou,\n\t\tlabels.hostStoppedYourCamera,\n\t\tlabels.hostStoppedYourScreen,\n\t\tlabels.shareApproved,\n\t\tlabels.shareDenied,\n\t\tlabels.shareRequestFrom,\n\t\tlabels.shareRespondError,\n\t\tmeeting,\n\t\tsession.role,\n\t]);\n\n\tconst startEgress = useCallback(async () => {\n\t\tif (session.role !== \"moderator\" || sessionOver) return;\n\t\tsetEgressPending(true);\n\t\tsetEgressError(null);\n\t\ttry {\n\t\t\tconst egress = await control.livestream();\n\t\t\tsetEgressStarted(true);\n\t\t\tif (egress === \"live\") setEgressError(null);\n\t\t} catch (error) {\n\t\t\tconst message =\n\t\t\t\terror instanceof Error ? error.message : labels.livestreamError;\n\t\t\tsetEgressError(message);\n\t\t\ttoast.error(message);\n\t\t} finally {\n\t\t\tsetEgressPending(false);\n\t\t}\n\t}, [control, labels.livestreamError, session.role, sessionOver]);\n\n\tuseEffect(() => {\n\t\tvoid startEgress();\n\t}, [startEgress]);\n\n\tconst onToggleCamera = useCallback(() => {\n\t\tsetCameraOn((current) => !current);\n\t}, []);\n\n\tconst onToggleScreen = useCallback(() => {\n\t\tif (!canShareFreely || screenRequestPending) return;\n\t\tif (!screenOn && !canStartScreenShare(meeting.participants())) {\n\t\t\ttoast.message(labels.screenBusy);\n\t\t\treturn;\n\t\t}\n\t\tif (!screenOn) setScreenRequestPending(true);\n\t\tsetScreenOn((current) => !current);\n\t}, [\n\t\tcanShareFreely,\n\t\tlabels.screenBusy,\n\t\tmeeting,\n\t\tscreenOn,\n\t\tscreenRequestPending,\n\t]);\n\n\tconst onAskToShare = useCallback(async () => {\n\t\tconst local = meeting.participants().find((row) => row.isSelf);\n\t\tif (!local) return;\n\t\ttry {\n\t\t\tawait meeting.sendBroadcast(\n\t\t\t\t{\n\t\t\t\t\ttype: \"share-request\",\n\t\t\t\t\tparticipantId: local.id,\n\t\t\t\t\tname: local.name,\n\t\t\t\t},\n\t\t\t\t{ presetNames: [STUDIO_MODERATOR_PRESET] },\n\t\t\t);\n\t\t\tsetShareGrant(\"requested\");\n\t\t\ttoast.message(labels.shareRequestSent);\n\t\t} catch {\n\t\t\ttoast.error(labels.shareRequestError);\n\t\t}\n\t}, [labels.shareRequestError, labels.shareRequestSent, meeting]);\n\n\tconst verifyGrantTookEffect = useCallback(\n\t\t(userId: string, retried = false) => {\n\t\t\tconst id = window.setTimeout(() => {\n\t\t\t\tconst target = meeting\n\t\t\t\t\t.participants()\n\t\t\t\t\t.find((row) => row.userId === userId);\n\t\t\t\tif (!target || isOnStage(target.stageStatus)) return;\n\t\t\t\tif (!retried && target.stageStatus === \"ACCEPTED_TO_JOIN_STAGE\") {\n\t\t\t\t\tvoid meeting\n\t\t\t\t\t\t.setStageAccess(userId, true)\n\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\tverifyGrantTookEffect(userId, true);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch(() => {\n\t\t\t\t\t\t\ttoast.error(labels.stageGrantNoEffect);\n\t\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\ttoast.error(labels.stageGrantNoEffect);\n\t\t\t}, STAGE_GRANT_VERIFY_MS);\n\t\t\tgrantCheckTimers.current.push(id);\n\t\t},\n\t\t[labels.stageGrantNoEffect, meeting],\n\t);\n\n\tconst onSetStage = useCallback(\n\t\tasync (tile: StudioParticipantTile, on: boolean) => {\n\t\t\tconst userId = tile.userId;\n\t\t\tif (!userId) return;\n\t\t\tif (!on && !canTakeOffAir(participants, tile.id, onAir)) {\n\t\t\t\ttoast.message(labels.offAirLastVisible);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tif (!on) {\n\t\t\t\t\tawait meeting.disableParticipantMedia(tile.id, \"screen\");\n\t\t\t\t}\n\t\t\t\tawait meeting.setStageAccess(userId, on);\n\t\t\t\ttoast.success(on ? labels.offAirShown : labels.offAirHidden);\n\t\t\t\tif (on) verifyGrantTookEffect(userId);\n\t\t\t} catch {\n\t\t\t\ttoast.error(labels.stageError);\n\t\t\t}\n\t\t},\n\t\t[\n\t\t\tlabels.offAirHidden,\n\t\t\tlabels.offAirLastVisible,\n\t\t\tlabels.offAirShown,\n\t\t\tlabels.stageError,\n\t\t\tmeeting,\n\t\t\tonAir,\n\t\t\tparticipants,\n\t\t\tverifyGrantTookEffect,\n\t\t],\n\t);\n\n\tconst onHostMedia = useCallback(\n\t\tasync (participantId: string, kind: StudioHostMediaKind) => {\n\t\t\ttry {\n\t\t\t\tawait meeting.disableParticipantMedia(participantId, kind);\n\t\t\t} catch {\n\t\t\t\ttoast.error(labels.hostMediaError);\n\t\t\t}\n\t\t},\n\t\t[labels.hostMediaError, meeting],\n\t);\n\n\tconst onKick = useCallback(\n\t\tasync (participantId: string) => {\n\t\t\ttry {\n\t\t\t\tawait meeting.kick(participantId);\n\t\t\t} catch {\n\t\t\t\ttoast.error(labels.kickError);\n\t\t\t}\n\t\t},\n\t\t[labels.kickError, meeting],\n\t);\n\n\tconst onTogglePin = useCallback(\n\t\tasync (tile: StudioParticipantTile) => {\n\t\t\ttry {\n\t\t\t\tawait meeting.setParticipantPinned(tile.id, tile.pinned !== true);\n\t\t\t} catch {\n\t\t\t\ttoast.error(labels.pinError);\n\t\t\t}\n\t\t},\n\t\t[labels.pinError, meeting],\n\t);\n\n\tconst onToggleChat = useCallback(\n\t\tasync (tile: StudioParticipantTile) => {\n\t\t\ttry {\n\t\t\t\tawait meeting.setParticipantChat(tile.id, tile.chatCanSend === false);\n\t\t\t} catch {\n\t\t\t\ttoast.error(labels.hostMediaError);\n\t\t\t}\n\t\t},\n\t\t[labels.hostMediaError, meeting],\n\t);\n\n\tconst onOpenPip = useCallback(() => {\n\t\tvoid pip.open().catch(() => {\n\t\t\ttoast.error(labels.pipError);\n\t\t});\n\t}, [labels.pipError, pip]);\n\n\tasync function onToggleMute() {\n\t\tconst next = !muted;\n\t\tsetMuted(next);\n\t\tawait meeting.setAudioEnabled(!next);\n\t}\n\n\tasync function onPublish() {\n\t\tsetPublishing(true);\n\t\ttry {\n\t\t\tawait control.publish();\n\t\t\ttoast.success(labels.published);\n\t\t\tawait onRefreshStatus?.();\n\t\t} catch (error) {\n\t\t\tsetPublishing(false);\n\t\t\ttoast.error(error instanceof Error ? error.message : labels.publishError);\n\t\t}\n\t}\n\n\tasync function onStop() {\n\t\tsetPending(true);\n\t\ttry {\n\t\t\tawait control.stop();\n\t\t\ttoast.success(labels.stopped);\n\t\t\tawait Promise.all(\n\t\t\t\tmeeting\n\t\t\t\t\t.participants()\n\t\t\t\t\t.filter((row) => !row.isSelf)\n\t\t\t\t\t.map((row) =>\n\t\t\t\t\t\tPromise.resolve(meeting.kick(row.id)).catch(() => undefined),\n\t\t\t\t\t),\n\t\t\t);\n\t\t\tawait meeting.leave();\n\t\t\tawait onRefreshStatus?.();\n\t\t} catch (error) {\n\t\t\ttoast.error(error instanceof Error ? error.message : labels.stopError);\n\t\t} finally {\n\t\t\tsetPending(false);\n\t\t}\n\t}\n\n\tasync function onLeave() {\n\t\tsetPending(true);\n\t\ttry {\n\t\t\tawait meeting.leave();\n\t\t\tsetLeaveState(\"left\");\n\t\t} finally {\n\t\t\tsetPending(false);\n\t\t}\n\t}\n\n\tconst statusChip = onAir\n\t\t? labels.live\n\t\t: encoderLost\n\t\t\t? labels.egressLost\n\t\t\t: session.stream.status === \"preview\"\n\t\t\t\t? labels.preview\n\t\t\t\t: starting || sending\n\t\t\t\t\t? labels.livestreamInitializing\n\t\t\t\t\t: egressLost\n\t\t\t\t\t\t? labels.egressLost\n\t\t\t\t\t\t: session.stream.status;\n\n\tif (rejected) {\n\t\treturn (\n\t\t\t<div className=\"flex h-dvh flex-col items-center justify-center p-6\">\n\t\t\t\t<EmptyState\n\t\t\t\t\ttitle={labels.rejectedTitle}\n\t\t\t\t\tdescription={labels.rejectedDescription}\n\t\t\t\t\tactionLabel={onRejoin ? labels.rejectedAction : undefined}\n\t\t\t\t\tonAction={onRejoin}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif (sessionOver) {\n\t\tconst canRejoin =\n\t\t\tsession.role === \"moderator\" &&\n\t\t\tonRejoin != null &&\n\t\t\tisStudioActiveStatus(session.stream.status);\n\t\treturn (\n\t\t\t<div className=\"flex h-dvh flex-col items-center justify-center p-6\">\n\t\t\t\t<EmptyState\n\t\t\t\t\ttitle={labels.endedTitle}\n\t\t\t\t\tdescription={labels.endedDescription}\n\t\t\t\t\tactionLabel={\n\t\t\t\t\t\tcanRejoin\n\t\t\t\t\t\t\t? labels.rejoin\n\t\t\t\t\t\t\t: session.role === \"moderator\"\n\t\t\t\t\t\t\t\t? labels.endedAction\n\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t}\n\t\t\t\t\tonAction={canRejoin ? onRejoin : undefined}\n\t\t\t\t\tactionHref={\n\t\t\t\t\t\tcanRejoin || session.role !== \"moderator\"\n\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t: `/streams/${session.stream.id}`\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tconst guestConnectFailed =\n\t\tsession.role === \"guest\" &&\n\t\t(connectionState === \"failed\" ||\n\t\t\t(connectionState === \"connecting\" && connectTimedOut));\n\tif (guestConnectFailed) {\n\t\tconst detail = [meeting.roomState(), lastMeetingError]\n\t\t\t.filter((value): value is string => Boolean(value))\n\t\t\t.join(\" — \");\n\t\treturn (\n\t\t\t<div className=\"flex h-dvh flex-col items-center justify-center p-6\">\n\t\t\t\t<EmptyState\n\t\t\t\t\ttitle={labels.connectFailed}\n\t\t\t\t\tdescription={detail || labels.connectFailed}\n\t\t\t\t\tactionLabel={onRejoin ? labels.retry : undefined}\n\t\t\t\t\tonAction={onRejoin}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif (\n\t\tsession.role === \"guest\" &&\n\t\t(connectionState === \"waitlisted\" || connectionState === \"connecting\")\n\t) {\n\t\treturn (\n\t\t\t<StudioGuestWaiting\n\t\t\t\tmeeting={meeting}\n\t\t\t\treducedMotion={reducedMotion}\n\t\t\t\tcameraOn={cameraOn}\n\t\t\t\tmuted={muted}\n\t\t\t\tlabels={labels}\n\t\t\t\tsettingsOpen={settingsOpen}\n\t\t\t\tstatusLabel={\n\t\t\t\t\tconnectionState === \"connecting\"\n\t\t\t\t\t\t? labels.connecting\n\t\t\t\t\t\t: labels.waitingHost\n\t\t\t\t}\n\t\t\t\tonToggleCamera={onToggleCamera}\n\t\t\t\tonToggleMute={() => void onToggleMute()}\n\t\t\t\tonOpenSettings={() => setSettingsOpen(true)}\n\t\t\t\tonCloseSettings={setSettingsOpen}\n\t\t\t/>\n\t\t);\n\t}\n\n\tif (participants.length > 0 || waitlisted.length > 0) {\n\t\tsawParticipants.current = true;\n\t}\n\tif (\n\t\tparticipants.length === 0 &&\n\t\twaitlisted.length === 0 &&\n\t\t!onAir &&\n\t\t!sawParticipants.current\n\t) {\n\t\treturn <StudioSkeleton />;\n\t}\n\n\treturn (\n\t\t<div className=\"bg-background flex h-dvh flex-col\">\n\t\t\t<header className=\"flex h-12 items-center gap-3 border-b px-3\">\n\t\t\t\t<p className=\"min-w-0 flex-1 truncate text-sm font-medium\">\n\t\t\t\t\t{session.stream.title}\n\t\t\t\t</p>\n\t\t\t\t{onAir && liveStartedAtRef.current !== null ? (\n\t\t\t\t\t<span className=\"text-muted-foreground tabular-nums text-xs\">\n\t\t\t\t\t\t{formatStudioElapsed(Date.now() - liveStartedAtRef.current)}\n\t\t\t\t\t</span>\n\t\t\t\t) : null}\n\t\t\t\t{onAir ? (\n\t\t\t\t\t<StudioLiveBadge role=\"status\">{statusChip}</StudioLiveBadge>\n\t\t\t\t) : (\n\t\t\t\t\t<span\n\t\t\t\t\t\tclassName=\"rounded-full border px-2 py-0.5 text-xs\"\n\t\t\t\t\t\trole=\"status\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{statusChip}\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t\t{session.role === \"moderator\" &&\n\t\t\t\t(egressLost || (!starting && !sending && !onAir && !active)) ? (\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\tdisabled={egressPending}\n\t\t\t\t\t\tonClick={() => void startEgress()}\n\t\t\t\t\t>\n\t\t\t\t\t\t{labels.livestreamRetry}\n\t\t\t\t\t</Button>\n\t\t\t\t) : null}\n\t\t\t\t{showPublishButton ? (\n\t\t\t\t\tcanGoLive ? (\n\t\t\t\t\t\t<ConfirmAction\n\t\t\t\t\t\t\ttriggerLabel={publishing ? labels.publishPending : labels.publish}\n\t\t\t\t\t\t\ttitle={labels.publishTitle}\n\t\t\t\t\t\t\tdescription={labels.publishDescription}\n\t\t\t\t\t\t\tconfirmLabel={labels.publishConfirm}\n\t\t\t\t\t\t\tpending={publishing || pending}\n\t\t\t\t\t\t\tonConfirm={() => void onPublish()}\n\t\t\t\t\t\t\ttrigger={\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tdisabled={publishing || pending}\n\t\t\t\t\t\t\t\t\taria-busy={publishing || undefined}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{publishing ? (\n\t\t\t\t\t\t\t\t\t\t<Loader2\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"animate-spin motion-reduce:animate-none\"\n\t\t\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t{publishing ? labels.publishPending : labels.publish}\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<Button type=\"button\" disabled>\n\t\t\t\t\t\t\t{labels.publish}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t)\n\t\t\t\t) : null}\n\t\t\t\t{session.role === \"moderator\" ? (\n\t\t\t\t\t<ConfirmAction\n\t\t\t\t\t\ttriggerLabel={labels.stop}\n\t\t\t\t\t\ttitle={labels.stopTitle}\n\t\t\t\t\t\tdescription={labels.stopDescription}\n\t\t\t\t\t\tconfirmLabel={labels.stopConfirm}\n\t\t\t\t\t\tpending={pending}\n\t\t\t\t\t\tonConfirm={() => void onStop()}\n\t\t\t\t\t\ttrigger={\n\t\t\t\t\t\t\t<Button type=\"button\" variant=\"destructive\" disabled={pending}>\n\t\t\t\t\t\t\t\t{labels.stop}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t) : null}\n\t\t\t\t{session.role === \"moderator\" ? (\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\tsize=\"icon-sm\"\n\t\t\t\t\t\taria-label={labels.share}\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tvoid shareOrCopyLink({\n\t\t\t\t\t\t\t\turl: playerWatchUrl(session.stream.id, playerOrigin),\n\t\t\t\t\t\t\t\ttitle: session.stream.title,\n\t\t\t\t\t\t\t}).then((result) => {\n\t\t\t\t\t\t\t\tif (result === \"copied\") toast.success(labels.shareCopied);\n\t\t\t\t\t\t\t\tif (result === \"failed\") toast.error(labels.shareFailed);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Share2 />\n\t\t\t\t\t</Button>\n\t\t\t\t) : null}\n\t\t\t\t{embed ? null : chrome}\n\t\t\t</header>\n\n\t\t\t{!stageEnabled && session.role === \"guest\" ? (\n\t\t\t\t<div\n\t\t\t\t\trole=\"status\"\n\t\t\t\t\tclassName=\"bg-muted flex items-center justify-between gap-3 border-b px-3 py-2 text-sm\"\n\t\t\t\t>\n\t\t\t\t\t<p>{labels.stageDisabled}</p>\n\t\t\t\t</div>\n\t\t\t) : null}\n\n\t\t\t<div className=\"flex min-h-0 flex-1 flex-col md:flex-row\">\n\t\t\t\t<StudioStage\n\t\t\t\t\tparticipants={stageParticipants}\n\t\t\t\t\tmeeting={meeting}\n\t\t\t\t\treducedMotion={reducedMotion}\n\t\t\t\t\tcanModerate={session.role === \"moderator\"}\n\t\t\t\t\tcanManageStage={canManageStage}\n\t\t\t\t\tonAir={onAir}\n\t\t\t\t\tlabels={labels}\n\t\t\t\t\tonKick={(id) => void onKick(id)}\n\t\t\t\t\tonMute={(id) => void onHostMedia(id, \"audio\")}\n\t\t\t\t\tonStopCamera={(id) => void onHostMedia(id, \"video\")}\n\t\t\t\t\tonStopScreen={(id) => void onHostMedia(id, \"screen\")}\n\t\t\t\t\tonToggleStage={(tile) =>\n\t\t\t\t\t\tvoid onSetStage(tile, !isOnStage(tile.stageStatus))\n\t\t\t\t\t}\n\t\t\t\t\tonTogglePin={(tile) => void onTogglePin(tile)}\n\t\t\t\t\tonToggleChat={(tile) => void onToggleChat(tile)}\n\t\t\t\t\tcanTakeOff={(id) => canTakeOffAir(participants, id, onAir)}\n\t\t\t\t\tonOpenPeople={() => setSideTab(\"people\")}\n\t\t\t\t/>\n\t\t\t\t{sideTab ? (\n\t\t\t\t\t<StudioSidePanel\n\t\t\t\t\t\ttab={sideTab}\n\t\t\t\t\t\tonTabChange={setSideTab}\n\t\t\t\t\t\tonClose={() => setSideTab(null)}\n\t\t\t\t\t\tmeeting={meeting}\n\t\t\t\t\t\tselfUserId={selfUserId}\n\t\t\t\t\t\tparticipants={participants}\n\t\t\t\t\t\twaitlisted={waitlisted}\n\t\t\t\t\t\tstageRequests={stageRequests}\n\t\t\t\t\t\tisModerator={session.role === \"moderator\"}\n\t\t\t\t\t\tchatBadge={unread}\n\t\t\t\t\t\tpeopleBadge={peopleBadge}\n\t\t\t\t\t\tlabels={labels}\n\t\t\t\t\t\tonAdmitAs={(id, as) => {\n\t\t\t\t\t\t\tconst guest = waitlisted.find((row) => row.id === id);\n\t\t\t\t\t\t\tvoid Promise.resolve(meeting.admitAs(id, as)).then(() => {\n\t\t\t\t\t\t\t\tif (as === \"panelist\" && guest?.userId) {\n\t\t\t\t\t\t\t\t\tverifyGrantTookEffect(guest.userId);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonAdmitAll={(as) => {\n\t\t\t\t\t\t\tconst waiting = waitlisted;\n\t\t\t\t\t\t\tvoid Promise.resolve(meeting.admitAll(as)).then(() => {\n\t\t\t\t\t\t\t\tif (as !== \"panelist\") return;\n\t\t\t\t\t\t\t\tfor (const guest of waiting) {\n\t\t\t\t\t\t\t\t\tif (guest.userId) verifyGrantTookEffect(guest.userId);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonDeny={(id) => {\n\t\t\t\t\t\t\tvoid Promise.resolve(meeting.deny(id)).then(\n\t\t\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t\t\ttoast.success(labels.denied);\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t\t\ttoast.error(labels.denyError);\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonGrantStage={(userId) =>\n\t\t\t\t\t\t\tvoid Promise.resolve(meeting.setStageAccess(userId, true))\n\t\t\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\t\t\tverifyGrantTookEffect(userId);\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.catch(() => {\n\t\t\t\t\t\t\t\t\ttoast.error(labels.stageError);\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonDenyStage={(userId) =>\n\t\t\t\t\t\t\tvoid Promise.resolve(meeting.denyStageAccess(userId)).catch(\n\t\t\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t\t\ttoast.error(labels.stageError);\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonTakeOffAir={(userId) => {\n\t\t\t\t\t\t\tconst tile = participants.find((row) => row.userId === userId);\n\t\t\t\t\t\t\tif (tile) void onSetStage(tile, false);\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tguestUrl={session.guestUrl}\n\t\t\t\t\t\tonShareGuestLink={() => {\n\t\t\t\t\t\t\tconst url = session.guestUrl;\n\t\t\t\t\t\t\tif (!url) return;\n\t\t\t\t\t\t\tvoid shareOrCopyLink({\n\t\t\t\t\t\t\t\turl,\n\t\t\t\t\t\t\t\ttitle: session.stream.title,\n\t\t\t\t\t\t\t\ttext: labels.shareGuestText.replace(\n\t\t\t\t\t\t\t\t\t\"{title}\",\n\t\t\t\t\t\t\t\t\tsession.stream.title,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t}).then((result) => {\n\t\t\t\t\t\t\t\tif (result === \"copied\") toast.success(labels.copied);\n\t\t\t\t\t\t\t\tif (result === \"failed\") toast.error(labels.shareFailed);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t) : null}\n\t\t\t</div>\n\n\t\t\t{remoteParticipants.map((row) => (\n\t\t\t\t<StudioRemoteAudio\n\t\t\t\t\tkey={row.id}\n\t\t\t\t\tmeeting={meeting}\n\t\t\t\t\tparticipantId={row.id}\n\t\t\t\t/>\n\t\t\t))}\n\n\t\t\t<StudioToolbar\n\t\t\t\tsession={session}\n\t\t\t\tmeeting={meeting}\n\t\t\t\tlabels={labels}\n\t\t\t\tmuted={muted}\n\t\t\t\tcameraOn={cameraOn}\n\t\t\t\tscreenOn={screenOn}\n\t\t\t\tchatOpen={sideTab === \"chat\"}\n\t\t\t\tpeopleOpen={sideTab === \"people\"}\n\t\t\t\tsettingsOpen={settingsOpen}\n\t\t\t\tunreadChat={unread}\n\t\t\t\tpeopleBadge={peopleBadge}\n\t\t\t\tpending={pending}\n\t\t\t\tshareGrant={shareGrant}\n\t\t\t\tshowScreenControl={showScreenControl && !guestOffStage}\n\t\t\t\tshowMediaControls={!guestOffStage}\n\t\t\t\tscreenPending={screenRequestPending}\n\t\t\t\tcanShareFreely={canShareFreely}\n\t\t\t\tscreenAvailable={screenAvailable && !screenRequestPending}\n\t\t\t\tpipSupported={pip.supported}\n\t\t\t\tpipOpen={Boolean(pip.pipWindow)}\n\t\t\t\tselfStageStatus={self?.stageStatus ?? meeting.stageStatus()}\n\t\t\t\tcanManageStage={canManageStage}\n\t\t\t\tstageEnabled={stageEnabled}\n\t\t\t\tcanLeaveStage={\n\t\t\t\t\tselfId != null && canTakeOffAir(participants, selfId, onAir)\n\t\t\t\t}\n\t\t\t\treducedMotion={reducedMotion}\n\t\t\t\tonToggleMute={() => void onToggleMute()}\n\t\t\t\tonToggleCamera={onToggleCamera}\n\t\t\t\tonToggleScreen={onToggleScreen}\n\t\t\t\tonAskToShare={() => void onAskToShare()}\n\t\t\t\tonCancelShareRequest={() => setShareGrant(\"idle\")}\n\t\t\t\tonAskStage={() => {\n\t\t\t\t\tif (session.role === \"moderator\") {\n\t\t\t\t\t\tvoid Promise.resolve(meeting.joinStage()).catch(() =>\n\t\t\t\t\t\t\ttoast.error(labels.stageError),\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tvoid meeting.requestStageAccess();\n\t\t\t\t}}\n\t\t\t\tonLeaveStage={() => {\n\t\t\t\t\tif (selfId && !canTakeOffAir(participants, selfId, onAir)) {\n\t\t\t\t\t\ttoast.message(labels.offAirLastVisible);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tvoid meeting.leaveStage();\n\t\t\t\t}}\n\t\t\t\tonToggleChat={() =>\n\t\t\t\t\tsetSideTab((current) => (current === \"chat\" ? null : \"chat\"))\n\t\t\t\t}\n\t\t\t\tonTogglePeople={() =>\n\t\t\t\t\tsetSideTab((current) => (current === \"people\" ? null : \"people\"))\n\t\t\t\t}\n\t\t\t\tonOpenSettings={() => setSettingsOpen(true)}\n\t\t\t\tonCloseSettings={setSettingsOpen}\n\t\t\t\tonOpenPip={onOpenPip}\n\t\t\t\tonClosePip={pip.close}\n\t\t\t\tonLeave={() => void onLeave()}\n\t\t\t/>\n\t\t\t{pip.pipWindow\n\t\t\t\t? createPortal(\n\t\t\t\t\t\t<StudioPipPanel\n\t\t\t\t\t\t\tmeeting={meeting}\n\t\t\t\t\t\t\tcameraOn={cameraOn}\n\t\t\t\t\t\t\tmuted={muted}\n\t\t\t\t\t\t\tscreenOn={screenOn}\n\t\t\t\t\t\t\tshowMediaControls={!guestOffStage}\n\t\t\t\t\t\t\tshowScreenControl={showScreenControl && !guestOffStage}\n\t\t\t\t\t\t\tcanShareFreely={canShareFreely}\n\t\t\t\t\t\t\tscreenAvailable={screenAvailable && !screenRequestPending}\n\t\t\t\t\t\t\tscreenPending={screenRequestPending}\n\t\t\t\t\t\t\tshareGrant={shareGrant}\n\t\t\t\t\t\t\tonAir={onAir}\n\t\t\t\t\t\t\telapsed={\n\t\t\t\t\t\t\t\tonAir && liveStartedAtRef.current !== null\n\t\t\t\t\t\t\t\t\t? formatStudioElapsed(Date.now() - liveStartedAtRef.current)\n\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tunread={unread}\n\t\t\t\t\t\t\tonToggleMute={() => void onToggleMute()}\n\t\t\t\t\t\t\tonToggleCamera={onToggleCamera}\n\t\t\t\t\t\t\tonToggleScreen={onToggleScreen}\n\t\t\t\t\t\t\tonAskToShare={() => void onAskToShare()}\n\t\t\t\t\t\t\tonCancelShareRequest={() => setShareGrant(\"idle\")}\n\t\t\t\t\t\t\tonBack={pip.close}\n\t\t\t\t\t\t\tlabels={{\n\t\t\t\t\t\t\t\tlive: labels.live,\n\t\t\t\t\t\t\t\tmute: labels.mute,\n\t\t\t\t\t\t\t\tunmute: labels.unmute,\n\t\t\t\t\t\t\t\tcamera: labels.camera,\n\t\t\t\t\t\t\t\tscreen: labels.screen,\n\t\t\t\t\t\t\t\tstopScreen: labels.stopScreen,\n\t\t\t\t\t\t\t\taskToShare: labels.askToShare,\n\t\t\t\t\t\t\t\tshareRequested: labels.shareRequested,\n\t\t\t\t\t\t\t\tcancelShareRequest: labels.cancelShareRequest,\n\t\t\t\t\t\t\t\tbackToStudio: labels.backToStudio,\n\t\t\t\t\t\t\t\tpipTitle: labels.pipTitle,\n\t\t\t\t\t\t\t\tcameraOff: labels.cameraOff,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>,\n\t\t\t\t\t\tpip.pipWindow.document.body,\n\t\t\t\t\t)\n\t\t\t\t: null}\n\t\t</div>\n\t);\n}\n","\"use client\";\n\nimport { useEffect, useRef, useState } from \"react\";\nimport { AudioWaveform } from \"./audio-waveform\";\n\nfunction isOverconstrained(error: unknown): boolean {\n\tif (!error || typeof error !== \"object\") return false;\n\treturn (error as { name?: string }).name === \"OverconstrainedError\";\n}\n\nfunction trackConstraint(\n\tdeviceId: string | undefined,\n\texact: boolean,\n): boolean | MediaTrackConstraints {\n\tif (exact && deviceId) {\n\t\treturn { deviceId: { exact: deviceId } };\n\t}\n\treturn true;\n}\n\nfunction stopStream(stream: MediaStream | null): void {\n\tif (!stream) return;\n\tfor (const track of stream.getTracks()) {\n\t\ttrack.onended = null;\n\t\ttrack.stop();\n\t}\n}\n\nasync function requestPreviewStream(\n\twantAudio: boolean,\n\twantVideo: boolean,\n\taudioDeviceId: string | undefined,\n\tvideoDeviceId: string | undefined,\n\texact: boolean,\n): Promise<MediaStream> {\n\treturn navigator.mediaDevices.getUserMedia({\n\t\taudio: wantAudio ? trackConstraint(audioDeviceId, exact) : false,\n\t\tvideo: wantVideo ? trackConstraint(videoDeviceId, exact) : false,\n\t});\n}\n\nexport function StudioDevicePreflight({\n\treducedMotion,\n\tcameraLabel,\n\tmicLabel,\n\tcameraOn = true,\n\tmuted = false,\n\taudioDeviceId = \"\",\n\tvideoDeviceId = \"\",\n\tcameraOffLabel = \"Camera is off\",\n\tonPermission,\n\tonError,\n}: {\n\treducedMotion: boolean;\n\tcameraLabel: string;\n\tmicLabel: string;\n\tcameraOn?: boolean;\n\tmuted?: boolean;\n\taudioDeviceId?: string;\n\tvideoDeviceId?: string;\n\tcameraOffLabel?: string;\n\tonPermission?: () => void;\n\tonError?: () => void;\n}) {\n\tconst videoRef = useRef<HTMLVideoElement | null>(null);\n\tconst onPermissionRef = useRef(onPermission);\n\tconst onErrorRef = useRef(onError);\n\tonPermissionRef.current = onPermission;\n\tonErrorRef.current = onError;\n\tconst [audioTrack, setAudioTrack] = useState<MediaStreamTrack | null>(null);\n\tconst [cameraOk, setCameraOk] = useState(false);\n\tconst [micOk, setMicOk] = useState(false);\n\n\tuseEffect(() => {\n\t\tlet cancelled = false;\n\t\tlet generation = 0;\n\t\tlet current: MediaStream | null = null;\n\n\t\tfunction bindEnded(stream: MediaStream, gen: number) {\n\t\t\tfor (const track of stream.getTracks()) {\n\t\t\t\ttrack.onended = () => {\n\t\t\t\t\tif (cancelled || gen !== generation) return;\n\t\t\t\t\tvoid acquire();\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tasync function acquire() {\n\t\t\tconst gen = ++generation;\n\t\t\tstopStream(current);\n\t\t\tcurrent = null;\n\t\t\tif (cancelled) return;\n\t\t\tif (!cameraOn && muted) {\n\t\t\t\tsetAudioTrack(null);\n\t\t\t\tsetCameraOk(false);\n\t\t\t\tsetMicOk(false);\n\t\t\t\tif (videoRef.current) videoRef.current.srcObject = null;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!navigator.mediaDevices?.getUserMedia) {\n\t\t\t\tsetAudioTrack(null);\n\t\t\t\tsetCameraOk(false);\n\t\t\t\tsetMicOk(false);\n\t\t\t\tonErrorRef.current?.();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst wantAudio = !muted;\n\t\t\tconst wantVideo = cameraOn;\n\t\t\tconst hadExact = Boolean(\n\t\t\t\t(wantAudio && audioDeviceId) || (wantVideo && videoDeviceId),\n\t\t\t);\n\t\t\ttry {\n\t\t\t\tlet next: MediaStream;\n\t\t\t\ttry {\n\t\t\t\t\tnext = await requestPreviewStream(\n\t\t\t\t\t\twantAudio,\n\t\t\t\t\t\twantVideo,\n\t\t\t\t\t\taudioDeviceId,\n\t\t\t\t\t\tvideoDeviceId,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (!isOverconstrained(error) || !hadExact) {\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t}\n\t\t\t\t\tnext = await requestPreviewStream(\n\t\t\t\t\t\twantAudio,\n\t\t\t\t\t\twantVideo,\n\t\t\t\t\t\taudioDeviceId,\n\t\t\t\t\t\tvideoDeviceId,\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (cancelled || gen !== generation) {\n\t\t\t\t\tstopStream(next);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tcurrent = next;\n\t\t\t\tconst video = next.getVideoTracks()[0] ?? null;\n\t\t\t\tconst audio = next.getAudioTracks()[0] ?? null;\n\t\t\t\tsetCameraOk(Boolean(video));\n\t\t\t\tsetMicOk(Boolean(audio));\n\t\t\t\tsetAudioTrack(audio);\n\t\t\t\tif (videoRef.current) {\n\t\t\t\t\tvideoRef.current.setAttribute(\"webkit-playsinline\", \"\");\n\t\t\t\t\tvideoRef.current.srcObject = video ? next : null;\n\t\t\t\t}\n\t\t\t\tbindEnded(next, gen);\n\t\t\t\tonPermissionRef.current?.();\n\t\t\t} catch {\n\t\t\t\tif (cancelled || gen !== generation) return;\n\t\t\t\tsetAudioTrack(null);\n\t\t\t\tsetCameraOk(false);\n\t\t\t\tsetMicOk(false);\n\t\t\t\tif (videoRef.current) videoRef.current.srcObject = null;\n\t\t\t\tonErrorRef.current?.();\n\t\t\t}\n\t\t}\n\n\t\tvoid acquire();\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t\tgeneration += 1;\n\t\t\tstopStream(current);\n\t\t\tcurrent = null;\n\t\t};\n\t}, [audioDeviceId, cameraOn, muted, videoDeviceId]);\n\n\treturn (\n\t\t<div className=\"flex w-full flex-col items-center gap-3\">\n\t\t\t{cameraOn ? (\n\t\t\t\t<video\n\t\t\t\t\tref={videoRef}\n\t\t\t\t\tautoPlay\n\t\t\t\t\tmuted\n\t\t\t\t\tplaysInline\n\t\t\t\t\tclassName=\"livo-studio-inline-video bg-muted aspect-video w-full rounded-xl object-cover\"\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<div className=\"bg-muted flex aspect-video w-full items-center justify-center rounded-xl\">\n\t\t\t\t\t<p className=\"text-muted-foreground text-sm\">{cameraOffLabel}</p>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t<AudioWaveform\n\t\t\t\ttrack={muted ? null : audioTrack}\n\t\t\t\treducedMotion={reducedMotion}\n\t\t\t/>\n\t\t\t<p className=\"text-muted-foreground text-sm\" role=\"status\">\n\t\t\t\t{cameraLabel}: {cameraOk && cameraOn ? \"OK\" : \"—\"} · {micLabel}:{\" \"}\n\t\t\t\t{micOk && !muted ? \"OK\" : \"—\"}\n\t\t\t</p>\n\t\t</div>\n\t);\n}\n","\"use client\";\n\nimport { useState } from \"react\";\nimport { Mic, MicOff, Video, VideoOff } from \"lucide-react\";\nimport { toast } from \"sonner\";\nimport { Button } from \"../ui/button\";\nimport { Input } from \"../ui/input\";\nimport { Label } from \"../ui/label\";\nimport { useMediaDevices } from \"../hooks/use-media-devices\";\nimport {\n\tpersistStudioDeviceSelection,\n\treadStudioDeviceSelection,\n\tresolveDeviceSelection,\n\ttype StudioDeviceSelection,\n} from \"../lib/devices\";\nimport type { StudioDeviceKind } from \"../lib/meeting\";\nimport { playSpeakerTest } from \"../lib/speaker-test\";\nimport { StudioDevicePreflight } from \"./studio-device-preflight\";\nimport { StudioDeviceSelectGroup } from \"./studio-device-select\";\n\nconst LOBBY_DEVICE_LABEL_DEFAULTS = {\n\tcameraDevice: \"Camera\",\n\tmicDevice: \"Microphone\",\n\tspeakerDevice: \"Speaker\",\n\ttestSpeaker: \"Test\",\n\ttestSpeakerError: \"Could not play the speaker test\",\n\tcameraOff: \"Camera is off\",\n};\n\nexport type StudioGuestLobbyLabels = {\n\ttitle: string;\n\thint: string;\n\tname: string;\n\tjoin: string;\n\twaitingForHost: string;\n\tcamera: string;\n\tmic: string;\n\tcameraDevice?: string;\n\tmicDevice?: string;\n\tspeakerDevice?: string;\n\ttestSpeaker?: string;\n\ttestSpeakerError?: string;\n\tcameraOff?: string;\n};\n\nexport function StudioGuestLobby({\n\treducedMotion,\n\tcameraOn,\n\tmuted,\n\tdisplayName,\n\tshowName,\n\tjoining,\n\twaitingForHost,\n\terror,\n\tlabels,\n\tsavedDevices,\n\tonCameraChange,\n\tonMutedChange,\n\tonDisplayNameChange,\n\tonDeviceChange,\n\tonJoin,\n}: {\n\treducedMotion: boolean;\n\tcameraOn: boolean;\n\tmuted: boolean;\n\tdisplayName: string;\n\tshowName: boolean;\n\tjoining: boolean;\n\twaitingForHost: boolean;\n\terror: string | null;\n\tlabels: StudioGuestLobbyLabels;\n\tsavedDevices?: StudioDeviceSelection;\n\tonCameraChange: (on: boolean) => void;\n\tonMutedChange: (muted: boolean) => void;\n\tonDisplayNameChange: (name: string) => void;\n\tonDeviceChange?: (kind: StudioDeviceKind, deviceId: string) => void;\n\tonJoin: () => void;\n}) {\n\tconst [refreshKey, setRefreshKey] = useState(0);\n\tconst [internalSaved, setInternalSaved] = useState<StudioDeviceSelection>(\n\t\t() => readStudioDeviceSelection(),\n\t);\n\tconst [testingSpeaker, setTestingSpeaker] = useState(false);\n\tconst devices = useMediaDevices(refreshKey);\n\tconst saved = savedDevices ?? internalSaved;\n\tconst { effective } = resolveDeviceSelection(saved, devices);\n\tconst deviceLabels = {\n\t\tcameraDevice:\n\t\t\tlabels.cameraDevice ?? LOBBY_DEVICE_LABEL_DEFAULTS.cameraDevice,\n\t\tmicDevice: labels.micDevice ?? LOBBY_DEVICE_LABEL_DEFAULTS.micDevice,\n\t\tspeakerDevice:\n\t\t\tlabels.speakerDevice ?? LOBBY_DEVICE_LABEL_DEFAULTS.speakerDevice,\n\t\ttestSpeaker: labels.testSpeaker ?? LOBBY_DEVICE_LABEL_DEFAULTS.testSpeaker,\n\t\ttestSpeakerError:\n\t\t\tlabels.testSpeakerError ?? LOBBY_DEVICE_LABEL_DEFAULTS.testSpeakerError,\n\t\tcameraOff: labels.cameraOff ?? LOBBY_DEVICE_LABEL_DEFAULTS.cameraOff,\n\t};\n\n\tfunction changeDevice(kind: StudioDeviceKind, deviceId: string) {\n\t\tpersistStudioDeviceSelection(kind, deviceId);\n\t\tonDeviceChange?.(kind, deviceId);\n\t\tif (!savedDevices) {\n\t\t\tsetInternalSaved((prev) => ({ ...prev, [kind]: deviceId }));\n\t\t}\n\t}\n\n\tasync function onTestSpeaker() {\n\t\tif (testingSpeaker) return;\n\t\tconst speakerId =\n\t\t\teffective.speaker || devices.speaker[0]?.deviceId || undefined;\n\t\tsetTestingSpeaker(true);\n\t\ttry {\n\t\t\tawait playSpeakerTest(speakerId);\n\t\t} catch {\n\t\t\ttoast.error(deviceLabels.testSpeakerError);\n\t\t} finally {\n\t\t\tsetTestingSpeaker(false);\n\t\t}\n\t}\n\n\treturn (\n\t\t<div className=\"mx-auto flex min-h-dvh w-full max-w-lg flex-col justify-center gap-6 p-6\">\n\t\t\t<div className=\"space-y-1\">\n\t\t\t\t<h1 className=\"text-lg font-semibold\">{labels.title}</h1>\n\t\t\t\t<p className=\"text-muted-foreground text-sm\">{labels.hint}</p>\n\t\t\t</div>\n\t\t\t<StudioDevicePreflight\n\t\t\t\treducedMotion={reducedMotion}\n\t\t\t\tcameraOn={cameraOn}\n\t\t\t\tmuted={muted}\n\t\t\t\taudioDeviceId={effective.audio}\n\t\t\t\tvideoDeviceId={effective.video}\n\t\t\t\tcameraLabel={labels.camera}\n\t\t\t\tmicLabel={labels.mic}\n\t\t\t\tcameraOffLabel={deviceLabels.cameraOff}\n\t\t\t\tonPermission={() => setRefreshKey((n) => (n === 0 ? 1 : n))}\n\t\t\t/>\n\t\t\t<div className=\"flex justify-center gap-2\">\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tvariant={muted ? \"destructive\" : \"secondary\"}\n\t\t\t\t\tsize=\"icon-lg\"\n\t\t\t\t\taria-pressed={muted}\n\t\t\t\t\taria-label={labels.mic}\n\t\t\t\t\tonClick={() => onMutedChange(!muted)}\n\t\t\t\t>\n\t\t\t\t\t{muted ? <MicOff /> : <Mic />}\n\t\t\t\t</Button>\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tvariant={cameraOn ? \"secondary\" : \"destructive\"}\n\t\t\t\t\tsize=\"icon-lg\"\n\t\t\t\t\taria-pressed={cameraOn}\n\t\t\t\t\taria-label={labels.camera}\n\t\t\t\t\tonClick={() => onCameraChange(!cameraOn)}\n\t\t\t\t>\n\t\t\t\t\t{cameraOn ? <Video /> : <VideoOff />}\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t\t<StudioDeviceSelectGroup\n\t\t\t\tdevices={devices}\n\t\t\t\tselected={effective}\n\t\t\t\tlabels={deviceLabels}\n\t\t\t\tonChange={changeDevice}\n\t\t\t\tspeakerAction={\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\tdisabled={testingSpeaker}\n\t\t\t\t\t\tonClick={() => void onTestSpeaker()}\n\t\t\t\t\t>\n\t\t\t\t\t\t{deviceLabels.testSpeaker}\n\t\t\t\t\t</Button>\n\t\t\t\t}\n\t\t\t/>\n\t\t\t{showName ? (\n\t\t\t\t<div className=\"grid gap-2\">\n\t\t\t\t\t<Label htmlFor=\"studio-guest-name\">{labels.name}</Label>\n\t\t\t\t\t<Input\n\t\t\t\t\t\tid=\"studio-guest-name\"\n\t\t\t\t\t\tname=\"displayName\"\n\t\t\t\t\t\tvalue={displayName}\n\t\t\t\t\t\tonChange={(event) => onDisplayNameChange(event.target.value)}\n\t\t\t\t\t\tmaxLength={80}\n\t\t\t\t\t\trequired\n\t\t\t\t\t\tautoComplete=\"name\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t) : null}\n\t\t\t{waitingForHost ? (\n\t\t\t\t<p className=\"text-muted-foreground text-center text-sm\" role=\"status\">\n\t\t\t\t\t{labels.waitingForHost}\n\t\t\t\t</p>\n\t\t\t) : null}\n\t\t\t{error ? (\n\t\t\t\t<p className=\"text-destructive text-center text-sm\" role=\"alert\">\n\t\t\t\t\t{error}\n\t\t\t\t</p>\n\t\t\t) : null}\n\t\t\t<Button\n\t\t\t\ttype=\"button\"\n\t\t\t\tsize=\"lg\"\n\t\t\t\tclassName=\"w-full\"\n\t\t\t\tdisabled={joining || (showName && !displayName.trim())}\n\t\t\t\tonClick={onJoin}\n\t\t\t>\n\t\t\t\t{waitingForHost ? labels.waitingForHost : labels.join}\n\t\t\t</Button>\n\t\t</div>\n\t);\n}\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\n\nexport function usePrefersReducedMotion(): boolean {\n\tconst [reduced, setReduced] = useState(false);\n\n\tuseEffect(() => {\n\t\tconst media = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n\t\tconst onChange = () => setReduced(media.matches);\n\t\tonChange();\n\t\tmedia.addEventListener(\"change\", onChange);\n\t\treturn () => media.removeEventListener(\"change\", onChange);\n\t}, []);\n\n\treturn reduced;\n}\n","const NAME_KEY = \"livo-studio-display-name\";\nconst ID_KEY = \"livo-studio-guest-id\";\n\nexport function readStudioGuestIdentity(\n\tstorage: Pick<Storage, \"getItem\" | \"setItem\"> | null = defaultStorage(),\n): { displayName: string; guestId: string } {\n\tconst guestId = storage?.getItem(ID_KEY)?.trim() || crypto.randomUUID();\n\tstorage?.setItem(ID_KEY, guestId);\n\tconst displayName = storage?.getItem(NAME_KEY)?.trim() ?? \"\";\n\treturn { displayName, guestId };\n}\n\nexport function persistStudioGuestName(\n\tdisplayName: string,\n\tstorage: Pick<Storage, \"getItem\" | \"setItem\"> | null = defaultStorage(),\n): void {\n\tstorage?.setItem(NAME_KEY, displayName.trim());\n}\n\nfunction defaultStorage(): Pick<Storage, \"getItem\" | \"setItem\"> | null {\n\tif (typeof window === \"undefined\") return null;\n\ttry {\n\t\treturn window.localStorage;\n\t} catch {\n\t\treturn null;\n\t}\n}\n","import type {\n\tStudioBroadcastTarget,\n\tStudioChatMessage,\n\tStudioConnectionState,\n\tStudioDeviceKind,\n\tStudioDeviceOption,\n\tStudioHostMediaKind,\n\tStudioMeetingHandle,\n\tStudioParticipantTile,\n\tStudioScreenSharePermission,\n\tStudioStageRequest,\n\tStudioStageStatus,\n\tStudioVideoKind,\n} from \"./meeting\";\nimport { persistStudioGuestName } from \"./guest-identity\";\nimport {\n\tparseStudioBroadcast,\n\tSTUDIO_DISPLAY_NAME_MAX,\n\tSTUDIO_GUEST_PRESET,\n\tSTUDIO_MODERATOR_PRESET,\n} from \"./meeting\";\nimport type { StudioWaitlistedGuest } from \"./types\";\n\ntype RtkTracks = {\n\taudio?: MediaStreamTrack | null;\n\tvideo?: MediaStreamTrack | null;\n};\n\ntype RtkEventHandler = (...args: unknown[]) => void;\n\ntype RtkParticipant = {\n\tid: string;\n\tuserId?: string;\n\tname?: string;\n\tpicture?: string | null;\n\tpresetName?: string;\n\taudioEnabled?: boolean;\n\tvideoEnabled?: boolean;\n\tscreenShareEnabled?: boolean;\n\tisSelf?: boolean;\n\tisPinned?: boolean;\n\tstageStatus?: StudioStageStatus;\n\taudioTrack?: MediaStreamTrack | null;\n\tvideoTrack?: MediaStreamTrack | null;\n\tscreenShareTracks?: RtkTracks | null;\n\tflags?: { recorder?: boolean };\n\tdisableAudio?: () => Promise<void>;\n\tdisableVideo?: () => Promise<void>;\n\tsetScreenShareEnabled?: (enabled: boolean) => Promise<void>;\n\tregisterVideoElement?: (el: HTMLVideoElement, preview?: boolean) => void;\n\tderegisterVideoElement?: (el?: HTMLVideoElement, preview?: boolean) => void;\n\tkick?: () => Promise<void>;\n\tpin?: () => Promise<void>;\n\tunpin?: () => Promise<void>;\n\tgetPermissions?: () => Promise<{\n\t\tchat?: { public?: { canSend?: boolean; text?: boolean } };\n\t}>;\n};\n\ntype RtkPermissions = {\n\tcanProduceScreenshare?: StudioScreenSharePermission | boolean;\n\tproduceScreenshare?: boolean;\n\tcanChangeParticipantPermissions?: boolean;\n\tacceptStageRequests?: boolean;\n\tstageEnabled?: boolean;\n\tstageAccess?: \"ALLOWED\" | \"CAN_REQUEST\" | \"NOT_ALLOWED\";\n\ton?: (event: string, handler: RtkEventHandler) => void;\n\toff?: (event: string, handler: RtkEventHandler) => void;\n};\n\ntype RtkBroadcastTarget = StudioBroadcastTarget | { meetingIds: string[] };\n\ntype RtkSelf = RtkParticipant & {\n\troomJoined?: boolean;\n\troomState?: string;\n\tpermissions?: RtkPermissions;\n\tenableAudio?: () => Promise<void>;\n\tdisableAudio?: () => Promise<void>;\n\tenableVideo?: () => Promise<void>;\n\tdisableVideo?: () => Promise<void>;\n\tenableScreenShare?: () => Promise<void>;\n\tdisableScreenShare?: () => Promise<void>;\n\tgetAudioDevices?: () => Promise<MediaDeviceInfo[]>;\n\tgetVideoDevices?: () => Promise<MediaDeviceInfo[]>;\n\tgetSpeakerDevices?: () => Promise<MediaDeviceInfo[]>;\n\tsetDevice?: (device: MediaDeviceInfo) => Promise<void>;\n\tsetName?: (name: string) => void | Promise<void>;\n};\n\ntype RtkChatMessage = {\n\tid?: unknown;\n\ttype?: unknown;\n\tuserId?: unknown;\n\tdisplayName?: unknown;\n\tmessage?: unknown;\n\ttime?: unknown;\n\ttimeMs?: unknown;\n\ttargetUserIds?: unknown;\n\tpinned?: unknown;\n\tisEdited?: unknown;\n};\n\ntype RtkStageRequest = {\n\tuserId?: string;\n\tpeerId?: string;\n\tdisplayName?: string;\n};\n\ntype RtkMeeting = {\n\tjoin?: () => Promise<void>;\n\tleave?: () => Promise<void>;\n\tself?: RtkSelf;\n\tstage?: {\n\t\tstatus?: StudioStageStatus;\n\t\trequestAccess?: () => Promise<void>;\n\t\tgrantAccess?: (userIds: string[]) => Promise<void>;\n\t\tdenyAccess?: (userIds: string[]) => Promise<void>;\n\t\tjoin?: () => Promise<void>;\n\t\tleave?: () => Promise<void>;\n\t\tkick?: (userIds: string[]) => Promise<void>;\n\t\tgetAccessRequests?: () => { stageRequests?: RtkStageRequest[] };\n\t\ton?: (event: string, handler: RtkEventHandler) => void;\n\t\toff?: (event: string, handler: RtkEventHandler) => void;\n\t};\n\tparticipants?: {\n\t\tjoined?: Map<string, RtkParticipant> | RtkParticipant[];\n\t\twaitlisted?: Map<string, RtkParticipant> | RtkParticipant[];\n\t\tpinned?: Map<string, RtkParticipant> | RtkParticipant[];\n\t\tlastActiveSpeaker?: string | null;\n\t\tacceptWaitingRoomRequest?: (id: string) => void | Promise<void>;\n\t\trejectWaitingRoomRequest?: (id: string) => Promise<void>;\n\t\tacceptAllWaitingRoomRequest?: (userIds: string[]) => Promise<void>;\n\t\tbroadcastMessage?: (\n\t\t\ttype: string,\n\t\t\tpayload: unknown,\n\t\t\ttarget?: RtkBroadcastTarget,\n\t\t) => void | Promise<void>;\n\t\tupdatePermissions?: (\n\t\t\tparticipantIds: string[],\n\t\t\tpermissions: {\n\t\t\t\tchat?: { public?: { canSend?: boolean; text?: boolean } };\n\t\t\t},\n\t\t) => Promise<void>;\n\t\ton?: (event: string, handler: RtkEventHandler) => void;\n\t\toff?: (event: string, handler: RtkEventHandler) => void;\n\t};\n\tlivestream?: {\n\t\tstate?: string;\n\t\tstart?: () => Promise<void>;\n\t};\n\tchat?: {\n\t\tmessages?: RtkChatMessage[];\n\t\tmaxTextLimit?: number;\n\t\tsendTextMessage?: (message: string, peerIds?: string[]) => Promise<void>;\n\t\teditTextMessage?: (id: string, message: string) => Promise<void>;\n\t\tdeleteMessage?: (id: string) => Promise<void>;\n\t\tpin?: (id: string) => Promise<void>;\n\t\tunpin?: (id: string) => Promise<void>;\n\t\tfetchPublicMessages?: (opts: {\n\t\t\ttimestamp?: number;\n\t\t\tlimit: number;\n\t\t\tdirection: \"before\" | \"after\";\n\t\t}) => Promise<RtkChatMessage[]>;\n\t\tfetchPrivateMessages?: (opts: {\n\t\t\ttimestamp?: number;\n\t\t\tlimit: number;\n\t\t\tdirection: \"before\" | \"after\";\n\t\t\tuserId: string;\n\t\t}) => Promise<RtkChatMessage[]>;\n\t\tfetchPinnedMessages?: (opts: {\n\t\t\ttimestamp?: number;\n\t\t\tlimit: number;\n\t\t\tdirection: \"before\" | \"after\";\n\t\t}) => Promise<RtkChatMessage[]>;\n\t};\n};\n\ntype SinkAudioElement = HTMLAudioElement & {\n\tsetSinkId?: (id: string) => Promise<void>;\n};\n\nfunction asList(\n\tvalue: Map<string, RtkParticipant> | RtkParticipant[] | undefined,\n): RtkParticipant[] {\n\tif (!value) return [];\n\tif (Array.isArray(value)) return value;\n\treturn [...value.values()];\n}\n\nfunction isRecorder(participant: RtkParticipant | undefined): boolean {\n\treturn participant?.flags?.recorder === true;\n}\n\nfunction resolvedName(\n\tparticipant: Pick<RtkParticipant, \"id\" | \"userId\" | \"name\">,\n\tnameOverrides: Map<string, string>,\n): string {\n\treturn (\n\t\tnameOverrides.get(participant.id) ??\n\t\t(participant.userId ? nameOverrides.get(participant.userId) : undefined) ??\n\t\tparticipant.name?.trim() ??\n\t\t\"Guest\"\n\t);\n}\n\nfunction resolveTileStageStatus(\n\tparticipant: RtkParticipant,\n\tstageEnabled: boolean,\n\tfallback?: StudioStageStatus,\n): StudioStageStatus {\n\tif (!stageEnabled) return \"ON_STAGE\";\n\treturn participant.stageStatus ?? fallback ?? \"OFF_STAGE\";\n}\n\nfunction tileFrom(\n\tparticipant: RtkParticipant,\n\tselfId: string | undefined,\n\tpinnedIds: Set<string>,\n\tchatSend: Map<string, boolean>,\n\tnameOverrides: Map<string, string>,\n\tstageStatus: StudioStageStatus,\n): StudioParticipantTile {\n\treturn {\n\t\tid: participant.id,\n\t\tuserId: participant.userId ?? \"\",\n\t\tname: resolvedName(participant, nameOverrides),\n\t\tisSelf: participant.isSelf === true || participant.id === selfId,\n\t\taudioEnabled: participant.audioEnabled !== false,\n\t\tvideoEnabled: participant.videoEnabled === true,\n\t\tscreenShareEnabled: participant.screenShareEnabled === true,\n\t\tpicture: participant.picture ?? null,\n\t\tstageStatus,\n\t\tpinned: participant.isPinned === true || pinnedIds.has(participant.id),\n\t\tchatCanSend: chatSend.get(participant.id) ?? true,\n\t};\n}\n\nfunction asOptions(\n\tdevices: MediaDeviceInfo[] | undefined,\n): StudioDeviceOption[] {\n\treturn (devices ?? []).map((device, index) => ({\n\t\tdeviceId: device.deviceId,\n\t\tlabel: device.label.trim() || `Device ${index + 1}`,\n\t}));\n}\n\nfunction findParticipant(\n\tmeeting: RtkMeeting,\n\tparticipantId: string,\n): RtkParticipant | undefined {\n\tif (meeting.self?.id === participantId) return meeting.self;\n\treturn asList(meeting.participants?.joined).find(\n\t\t(row) => row.id === participantId,\n\t);\n}\n\nfunction findByUserId(\n\tmeeting: RtkMeeting,\n\tuserId: string,\n): RtkParticipant | undefined {\n\tif (meeting.self?.userId === userId) return meeting.self;\n\treturn asList(meeting.participants?.joined).find(\n\t\t(row) => row.userId === userId,\n\t);\n}\n\nfunction screenShareTrack(\n\tmeeting: RtkMeeting,\n\tparticipantId: string,\n): MediaStreamTrack | null {\n\tif (meeting.self?.id === participantId) {\n\t\treturn meeting.self.screenShareTracks?.video ?? null;\n\t}\n\treturn (\n\t\tfindParticipant(meeting, participantId)?.screenShareTracks?.video ?? null\n\t);\n}\n\nconst pendingMediaPlay = new Set<HTMLMediaElement>();\n\nfunction tryPlay(el: HTMLMediaElement): void {\n\tif (typeof el.play !== \"function\") return;\n\tvoid el.play().then(\n\t\t() => {\n\t\t\tpendingMediaPlay.delete(el);\n\t\t},\n\t\t() => {\n\t\t\tpendingMediaPlay.add(el);\n\t\t},\n\t);\n}\n\nfunction replayPendingMedia(): void {\n\tfor (const el of pendingMediaPlay) {\n\t\ttryPlay(el);\n\t}\n}\n\nif (typeof document !== \"undefined\") {\n\tdocument.addEventListener(\"pointerdown\", replayPendingMedia, {\n\t\tpassive: true,\n\t});\n}\n\nfunction bindTrackElement(\n\tel: HTMLMediaElement,\n\ttrack: MediaStreamTrack | null,\n\tkind: \"audio\" | \"video\",\n): void {\n\tif (!track) {\n\t\tel.srcObject = null;\n\t\tpendingMediaPlay.delete(el);\n\t\treturn;\n\t}\n\tconst current = el.srcObject;\n\tconst currentTrack =\n\t\tcurrent instanceof MediaStream\n\t\t\t? kind === \"video\"\n\t\t\t\t? current.getVideoTracks()[0]\n\t\t\t\t: current.getAudioTracks()[0]\n\t\t\t: undefined;\n\tif (currentTrack?.id === track.id) {\n\t\tif (el.paused) tryPlay(el);\n\t\treturn;\n\t}\n\tel.srcObject = new MediaStream([track]);\n\ttryPlay(el);\n}\n\nfunction roomLeftState(payload: unknown, fallback: string | null): string {\n\tif (typeof payload === \"string\" && payload) return payload;\n\tif (payload && typeof payload === \"object\") {\n\t\tconst row = payload as { state?: unknown; roomState?: unknown };\n\t\tif (typeof row.state === \"string\" && row.state) return row.state;\n\t\tif (typeof row.roomState === \"string\" && row.roomState)\n\t\t\treturn row.roomState;\n\t}\n\treturn fallback ?? \"left\";\n}\n\nfunction asEmitter(target: unknown): {\n\ton?: (event: string, handler: RtkEventHandler) => void;\n\toff?: (event: string, handler: RtkEventHandler) => void;\n} {\n\treturn (target ?? {}) as {\n\t\ton?: (event: string, handler: RtkEventHandler) => void;\n\t\toff?: (event: string, handler: RtkEventHandler) => void;\n\t};\n}\n\nfunction listen(\n\ttarget: unknown,\n\tevent: string,\n\thandler: RtkEventHandler,\n): () => void {\n\tconst emitter = asEmitter(target);\n\temitter.on?.(event, handler);\n\treturn () => emitter.off?.(event, handler);\n}\n\nfunction mapChatMessages(\n\traw: RtkChatMessage[] | undefined,\n): StudioChatMessage[] {\n\tif (!raw) return [];\n\tconst out: StudioChatMessage[] = [];\n\tfor (const row of raw) {\n\t\tconst id = typeof row.id === \"string\" ? row.id : \"\";\n\t\tconst text = typeof row.message === \"string\" ? row.message : \"\";\n\t\tif (!id || !text) continue;\n\t\tconst time =\n\t\t\trow.time instanceof Date\n\t\t\t\t? row.time.getTime()\n\t\t\t\t: typeof row.timeMs === \"number\"\n\t\t\t\t\t? row.timeMs\n\t\t\t\t\t: typeof row.time === \"number\"\n\t\t\t\t\t\t? row.time\n\t\t\t\t\t\t: 0;\n\t\tconst targetUserIds = Array.isArray(row.targetUserIds)\n\t\t\t? row.targetUserIds.filter(\n\t\t\t\t\t(value): value is string => typeof value === \"string\",\n\t\t\t\t)\n\t\t\t: undefined;\n\t\tout.push({\n\t\t\tid,\n\t\t\tuserId: typeof row.userId === \"string\" ? row.userId : \"\",\n\t\t\tname:\n\t\t\t\ttypeof row.displayName === \"string\" && row.displayName.trim()\n\t\t\t\t\t? row.displayName\n\t\t\t\t\t: \"Guest\",\n\t\t\ttext,\n\t\t\ttime,\n\t\t\ttargetUserIds,\n\t\t\tpinned: row.pinned === true,\n\t\t\tisEdited: row.isEdited === true,\n\t\t});\n\t}\n\treturn out;\n}\n\nfunction applySink(el: HTMLAudioElement, sinkId: string | null): void {\n\tif (!sinkId) return;\n\tconst sink = el as SinkAudioElement;\n\tif (typeof sink.setSinkId === \"function\") {\n\t\tvoid sink.setSinkId(sinkId).catch(() => undefined);\n\t}\n}\n\nfunction screenSharePermissionFrom(\n\tpermissions: RtkPermissions | undefined,\n): StudioScreenSharePermission {\n\tconst current = permissions?.canProduceScreenshare;\n\tif (\n\t\tcurrent === \"ALLOWED\" ||\n\t\tcurrent === \"NOT_ALLOWED\" ||\n\t\tcurrent === \"CAN_REQUEST\"\n\t) {\n\t\treturn current;\n\t}\n\tif (current === false || permissions?.produceScreenshare === false) {\n\t\treturn \"NOT_ALLOWED\";\n\t}\n\treturn \"ALLOWED\";\n}\n\nfunction isModerator(participant: RtkParticipant | undefined): boolean {\n\treturn participant?.presetName === STUDIO_MODERATOR_PRESET;\n}\n\nfunction activeSpeakerFrom(\n\tpayload: unknown,\n\tfallback: string | null,\n): string | null {\n\tif (typeof payload === \"string\" && payload) return payload;\n\tif (payload && typeof payload === \"object\") {\n\t\tconst row = payload as { peerId?: unknown; id?: unknown };\n\t\tif (typeof row.peerId === \"string\" && row.peerId) return row.peerId;\n\t\tif (typeof row.id === \"string\" && row.id) return row.id;\n\t}\n\treturn fallback;\n}\n\nconst STAGE_JOIN_RETRY_MS = 1_000;\nconst STAGE_JOIN_MAX_ATTEMPTS = 3;\n\nfunction isStageDisabledError(error: unknown): boolean {\n\tif (!error || typeof error !== \"object\") return false;\n\tconst row = error as { code?: unknown; message?: unknown };\n\tif (row.code === \"2003\" || row.code === 2003) return true;\n\tconst message = typeof row.message === \"string\" ? row.message : \"\";\n\treturn (\n\t\tmessage.includes(\"ERR2003\") ||\n\t\tmessage.toLowerCase().includes(\"stage is disabled\")\n\t);\n}\n\nfunction isStageBusyError(error: unknown): boolean {\n\tif (!error || typeof error !== \"object\") return false;\n\tconst row = error as { name?: unknown; code?: unknown; message?: unknown };\n\tif (row.name === \"UnsupportedConcurrentMethodExecution\") return true;\n\tif (row.code === \"2006\" || row.code === 2006) return true;\n\tconst message = typeof row.message === \"string\" ? row.message : \"\";\n\treturn (\n\t\tmessage.includes(\"ERR2006\") ||\n\t\tmessage.includes(\"Unsupported concurrent calls\") ||\n\t\tmessage.includes(\"Action not permitted in current stage status\")\n\t);\n}\n\nfunction isRtkMeetingError(error: unknown): boolean {\n\tif (!error || typeof error !== \"object\") return false;\n\tconst row = error as { name?: unknown; message?: unknown };\n\tconst name = typeof row.name === \"string\" ? row.name : \"\";\n\tconst message = typeof row.message === \"string\" ? row.message : \"\";\n\treturn (\n\t\tname === \"ClientError\" ||\n\t\tname === \"TransportConnectionError\" ||\n\t\tmessage.includes(\"ERR1608\") ||\n\t\tmessage.includes(\"No speaker found\") ||\n\t\tmessage.includes(\"Socket is not connected\")\n\t);\n}\n\nfunction meetingErrorText(error: unknown): string {\n\tif (error instanceof Error && error.message.trim()) return error.message;\n\tif (error && typeof error === \"object\") {\n\t\tconst message = (error as { message?: unknown }).message;\n\t\tif (typeof message === \"string\" && message.trim()) return message;\n\t}\n\treturn \"Studio failed\";\n}\n\nasync function settledDeviceList(\n\tload: (() => Promise<MediaDeviceInfo[]>) | undefined,\n): Promise<MediaDeviceInfo[]> {\n\tif (!load) return [];\n\ttry {\n\t\tconst [result] = await Promise.allSettled([load()]);\n\t\treturn result?.status === \"fulfilled\" ? result.value : [];\n\t} catch {\n\t\treturn [];\n\t}\n}\n\nfunction waitMs(ms: number): Promise<void> {\n\treturn new Promise((resolve) => {\n\t\tsetTimeout(resolve, ms);\n\t});\n}\n\nfunction resolveJoinedParticipant(\n\tmeeting: RtkMeeting,\n\tpayload: unknown,\n): RtkParticipant | undefined {\n\tif (!payload || typeof payload !== \"object\") return undefined;\n\tconst row = payload as RtkParticipant & { peerId?: string };\n\tif (typeof row.id === \"string\" && row.id) {\n\t\treturn findParticipant(meeting, row.id) ?? row;\n\t}\n\tconst peerId = typeof row.peerId === \"string\" ? row.peerId : \"\";\n\tif (peerId) {\n\t\treturn (\n\t\t\tfindParticipant(meeting, peerId) ??\n\t\t\t(row.userId ? findByUserId(meeting, row.userId) : undefined) ?? {\n\t\t\t\tid: peerId,\n\t\t\t\tuserId: row.userId,\n\t\t\t\tname: row.name,\n\t\t\t}\n\t\t);\n\t}\n\tif (typeof row.userId === \"string\" && row.userId) {\n\t\treturn findByUserId(meeting, row.userId);\n\t}\n\treturn undefined;\n}\n\nexport function studioMeetingFromRtk(raw: object): StudioMeetingHandle {\n\tconst meeting = raw as RtkMeeting;\n\tconst cameraEls = new Map<string, HTMLVideoElement>();\n\tconst screenEls = new Map<string, HTMLVideoElement>();\n\tconst audioEls = new Map<string, HTMLAudioElement>();\n\tconst mediaListeners = new Set<() => void>();\n\tconst chatListeners = new Set<() => void>();\n\tconst participantListeners = new Set<() => void>();\n\tconst stageListeners = new Set<() => void>();\n\tconst pinListeners = new Set<() => void>();\n\tconst pendingPanelists = new Set<string>();\n\tconst chatSend = new Map<string, boolean>();\n\tconst nameOverrides = new Map<string, string>();\n\tlet joinStageInFlight: Promise<void> | null = null;\n\tlet joinedStageLocally = false;\n\tlet lastMeetingError: string | null = null;\n\tconst historyMessages: StudioChatMessage[] = [];\n\tlet speakerSinkId: string | null = null;\n\tlet lastSpeakerId: string | null =\n\t\ttypeof meeting.participants?.lastActiveSpeaker === \"string\"\n\t\t\t? meeting.participants.lastActiveSpeaker\n\t\t\t: null;\n\n\tfunction participantFor(id: string): RtkParticipant | undefined {\n\t\treturn findParticipant(meeting, id);\n\t}\n\n\tfunction isSelfId(id: string): boolean {\n\t\treturn meeting.self?.id === id;\n\t}\n\n\tfunction pinnedIdSet(): Set<string> {\n\t\treturn new Set(asList(meeting.participants?.pinned).map((row) => row.id));\n\t}\n\n\tfunction attachCamera(\n\t\tparticipantId: string,\n\t\tel: HTMLVideoElement | null,\n\t): void {\n\t\tconst participant = participantFor(participantId);\n\t\tconst preview = isSelfId(participantId);\n\t\tconst previous = cameraEls.get(participantId);\n\t\tif (previous && previous !== el) {\n\t\t\tparticipant?.deregisterVideoElement?.(previous, preview);\n\t\t\tcameraEls.delete(participantId);\n\t\t}\n\t\tif (!el) return;\n\t\tcameraEls.set(participantId, el);\n\t\tif (previous !== el) {\n\t\t\tparticipant?.registerVideoElement?.(el, preview);\n\t\t}\n\t\tconst track = participant?.videoTrack ?? null;\n\t\tif (track) bindTrackElement(el, track, \"video\");\n\t}\n\n\tfunction attachScreen(\n\t\tparticipantId: string,\n\t\tel: HTMLVideoElement | null,\n\t): void {\n\t\tif (!el) {\n\t\t\tscreenEls.delete(participantId);\n\t\t\treturn;\n\t\t}\n\t\tscreenEls.set(participantId, el);\n\t\tbindTrackElement(el, screenShareTrack(meeting, participantId), \"video\");\n\t}\n\n\tfunction bindAudio(participantId: string, el: HTMLAudioElement | null): void {\n\t\tif (!el || isSelfId(participantId)) {\n\t\t\taudioEls.delete(participantId);\n\t\t\treturn;\n\t\t}\n\t\taudioEls.set(participantId, el);\n\t\tconst track = participantFor(participantId)?.audioTrack ?? null;\n\t\tbindTrackElement(el, track, \"audio\");\n\t\tapplySink(el, speakerSinkId);\n\t}\n\n\tfunction rebindMedia(): void {\n\t\tfor (const [id, el] of cameraEls) attachCamera(id, el);\n\t\tfor (const [id, el] of screenEls) attachScreen(id, el);\n\t\tfor (const [id, el] of audioEls) bindAudio(id, el);\n\t\tfor (const listener of mediaListeners) listener();\n\t}\n\n\tfunction notifyChat(): void {\n\t\tfor (const listener of chatListeners) listener();\n\t}\n\n\tfunction notifyParticipants(): void {\n\t\tfor (const listener of participantListeners) listener();\n\t}\n\n\tfunction notifyStage(): void {\n\t\tfor (const listener of stageListeners) listener();\n\t\tnotifyParticipants();\n\t}\n\n\tfunction notifyPinned(): void {\n\t\tfor (const listener of pinListeners) listener();\n\t\tnotifyParticipants();\n\t}\n\n\tfunction applyDisplayName(participantId: string, name: string): void {\n\t\tconst trimmed = name.trim().slice(0, STUDIO_DISPLAY_NAME_MAX);\n\t\tif (!trimmed || !participantId) return;\n\t\tnameOverrides.set(participantId, trimmed);\n\t\tnotifyParticipants();\n\t}\n\n\tfunction announceDisplayName(): void {\n\t\tconst self = meeting.self;\n\t\tconst name =\n\t\t\t(self?.id ? nameOverrides.get(self.id) : undefined) ?? self?.name?.trim();\n\t\tif (!self?.id || !name) return;\n\t\tvoid meeting.participants?.broadcastMessage?.(\n\t\t\t\"display-name\",\n\t\t\t{ type: \"display-name\", participantId: self.id, name },\n\t\t\t{ presetNames: [STUDIO_MODERATOR_PRESET, STUDIO_GUEST_PRESET] },\n\t\t);\n\t}\n\n\tfunction mergeHistory(rows: StudioChatMessage[]): void {\n\t\tconst byId = new Map(historyMessages.map((row) => [row.id, row]));\n\t\tfor (const row of rows) byId.set(row.id, row);\n\t\thistoryMessages.splice(0, historyMessages.length, ...byId.values());\n\t}\n\n\tfunction allChatMessages(): StudioChatMessage[] {\n\t\tconst byId = new Map(historyMessages.map((row) => [row.id, row]));\n\t\tfor (const row of mapChatMessages(meeting.chat?.messages)) {\n\t\t\tbyId.set(row.id, row);\n\t\t}\n\t\treturn [...byId.values()].sort((a, b) => a.time - b.time);\n\t}\n\n\tfunction currentStageStatus(): StudioStageStatus | undefined {\n\t\treturn meeting.self?.stageStatus ?? meeting.stage?.status;\n\t}\n\n\tfunction resolveConnectionState(): StudioConnectionState {\n\t\tconst self = meeting.self;\n\t\tconst roomState = self?.roomState ?? null;\n\t\tif (roomState === \"waitlisted\") return \"waitlisted\";\n\t\tif (roomState === \"joined\" || self?.roomJoined === true) return \"joined\";\n\t\tif (lastMeetingError) return \"failed\";\n\t\treturn \"connecting\";\n\t}\n\n\tfunction recordMeetingError(error: unknown): void {\n\t\tif (!isRtkMeetingError(error)) return;\n\t\tlastMeetingError = meetingErrorText(error);\n\t\tnotifyParticipants();\n\t}\n\n\tfunction onUnhandledRejection(event: PromiseRejectionEvent): void {\n\t\trecordMeetingError(event.reason);\n\t}\n\n\tif (typeof window !== \"undefined\") {\n\t\twindow.addEventListener(\"unhandledrejection\", onUnhandledRejection);\n\t}\n\n\tasync function republishCameraIfOn(): Promise<void> {\n\t\tif (meeting.self?.videoEnabled !== true) return;\n\t\tawait meeting.self.disableVideo?.();\n\t\tawait meeting.self.enableVideo?.();\n\t}\n\n\tasync function runJoinStageAttempts(): Promise<void> {\n\t\tlet lastError: unknown;\n\t\tfor (let attempt = 0; attempt < STAGE_JOIN_MAX_ATTEMPTS; attempt++) {\n\t\t\tif (currentStageStatus() === \"ON_STAGE\") {\n\t\t\t\tnotifyStage();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait meeting.stage?.join?.();\n\t\t\t\tjoinedStageLocally = true;\n\t\t\t\tawait republishCameraIfOn();\n\t\t\t\tnotifyStage();\n\t\t\t\treturn;\n\t\t\t} catch (error) {\n\t\t\t\tlastError = error;\n\t\t\t\tif (isStageDisabledError(error)) {\n\t\t\t\t\tnotifyStage();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (isStageBusyError(error)) {\n\t\t\t\t\tawait waitMs(STAGE_JOIN_RETRY_MS);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconsole.warn(\"studio: stage join failed\", error);\n\t\t\t\tif (attempt === STAGE_JOIN_MAX_ATTEMPTS - 1) break;\n\t\t\t\tawait waitMs(STAGE_JOIN_RETRY_MS);\n\t\t\t}\n\t\t}\n\t\tnotifyStage();\n\t\tif (currentStageStatus() !== \"ON_STAGE\") {\n\t\t\tthrow lastError instanceof Error\n\t\t\t\t? lastError\n\t\t\t\t: new Error(\"stage join failed\");\n\t\t}\n\t}\n\n\tasync function joinStageWithRetry(): Promise<void> {\n\t\tif (joinStageInFlight) {\n\t\t\tawait joinStageInFlight;\n\t\t\treturn;\n\t\t}\n\t\tjoinStageInFlight = runJoinStageAttempts();\n\t\ttry {\n\t\t\tawait joinStageInFlight;\n\t\t} finally {\n\t\t\tjoinStageInFlight = null;\n\t\t}\n\t}\n\n\tasync function autoJoinStage(): Promise<void> {\n\t\tif (currentStageStatus() === \"ON_STAGE\") {\n\t\t\tnotifyStage();\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tawait joinStageWithRetry();\n\t\t} catch {\n\t\t\tnotifyStage();\n\t\t}\n\t}\n\n\tasync function ensureStageJoined(): Promise<void> {\n\t\tif (currentStageStatus() !== \"ACCEPTED_TO_JOIN_STAGE\") return;\n\t\ttry {\n\t\t\tawait joinStageWithRetry();\n\t\t} catch {\n\t\t\tnotifyStage();\n\t\t}\n\t}\n\n\tasync function joinStageIfAllowed(): Promise<void> {\n\t\tif (meeting.self?.permissions?.stageAccess !== \"ALLOWED\") return;\n\t\tif (currentStageStatus() === \"ON_STAGE\") return;\n\t\ttry {\n\t\t\tawait joinStageWithRetry();\n\t\t} catch {\n\t\t\tnotifyStage();\n\t\t}\n\t}\n\n\tfunction queuePanelist(\n\t\tguest: RtkParticipant | undefined,\n\t\tfallbackId: string,\n\t) {\n\t\tif (guest?.userId) pendingPanelists.add(guest.userId);\n\t\tpendingPanelists.add(guest?.id || fallbackId);\n\t}\n\n\tfunction takePendingGrantId(\n\t\tparticipant: RtkParticipant | undefined,\n\t): string | null {\n\t\tif (!participant || isRecorder(participant)) return null;\n\t\tconst keys = [participant.userId, participant.id].filter(\n\t\t\t(key): key is string => Boolean(key),\n\t\t);\n\t\tif (!keys.some((key) => pendingPanelists.has(key))) return null;\n\t\tfor (const key of keys) pendingPanelists.delete(key);\n\t\treturn participant.userId || participant.id || null;\n\t}\n\n\tasync function grantIfPending(payload: unknown): Promise<void> {\n\t\tconst joined = resolveJoinedParticipant(meeting, payload);\n\t\tconst grantId = takePendingGrantId(joined);\n\t\tif (!grantId) return;\n\t\tawait meeting.stage?.grantAccess?.([grantId]);\n\t\tnotifyStage();\n\t}\n\n\tasync function grantPendingIfJoined(\n\t\tparticipantId: string,\n\t\tuserId?: string,\n\t): Promise<void> {\n\t\tconst already =\n\t\t\tfindParticipant(meeting, participantId) ??\n\t\t\t(userId ? findByUserId(meeting, userId) : undefined);\n\t\tconst grantId = takePendingGrantId(already);\n\t\tif (!grantId) return;\n\t\tpendingPanelists.delete(participantId);\n\t\tawait meeting.stage?.grantAccess?.([grantId]);\n\t\tnotifyStage();\n\t}\n\n\tlisten(meeting.self, \"videoUpdate\", rebindMedia);\n\tlisten(meeting.self, \"screenShareUpdate\", rebindMedia);\n\tlisten(meeting.self, \"audioUpdate\", rebindMedia);\n\tlisten(meeting.self, \"pinned\", notifyPinned);\n\tlisten(meeting.self, \"unpinned\", notifyPinned);\n\tlisten(meeting.self, \"waitlisted\", notifyParticipants);\n\tlisten(meeting.self, \"roomJoined\", notifyParticipants);\n\tconst joined = meeting.participants?.joined;\n\tlisten(joined, \"participantJoined\", (payload) => {\n\t\tvoid grantIfPending(payload);\n\t\trebindMedia();\n\t\tnotifyParticipants();\n\t\tannounceDisplayName();\n\t});\n\tlisten(meeting.participants, \"broadcastedMessage\", (payload) => {\n\t\tconst parsed = parseStudioBroadcast(payload);\n\t\tif (parsed?.type !== \"display-name\") return;\n\t\tif (parsed.participantId === meeting.self?.id) return;\n\t\tapplyDisplayName(parsed.participantId, parsed.name);\n\t});\n\tlisten(joined, \"participantLeft\", () => {\n\t\trebindMedia();\n\t\tnotifyParticipants();\n\t});\n\tlisten(joined, \"audioUpdate\", rebindMedia);\n\tlisten(joined, \"videoUpdate\", rebindMedia);\n\tlisten(joined, \"screenShareUpdate\", rebindMedia);\n\tlisten(joined, \"pinned\", notifyPinned);\n\tlisten(joined, \"unpinned\", notifyPinned);\n\tlisten(joined, \"stageStatusUpdate\", notifyStage);\n\tlisten(meeting.participants, \"waitlisted\", notifyParticipants);\n\tlisten(\n\t\tmeeting.participants?.waitlisted,\n\t\t\"participantJoined\",\n\t\tnotifyParticipants,\n\t);\n\tlisten(\n\t\tmeeting.participants?.waitlisted,\n\t\t\"participantLeft\",\n\t\tnotifyParticipants,\n\t);\n\tlisten(meeting.chat, \"chatUpdate\", notifyChat);\n\tlisten(meeting.chat, \"pinMessage\", notifyChat);\n\tlisten(meeting.chat, \"unpinMessage\", notifyChat);\n\tlisten(meeting.stage, \"stageAccessRequestUpdate\", notifyStage);\n\tlisten(meeting.stage, \"newStageRequest\", notifyStage);\n\tlisten(meeting.stage, \"stageRequestApproved\", () => {\n\t\tvoid autoJoinStage();\n\t});\n\tlisten(meeting.stage, \"stageRequestRejected\", notifyStage);\n\tlisten(meeting.stage, \"stageStatusUpdate\", (status) => {\n\t\tif (status === \"ACCEPTED_TO_JOIN_STAGE\") {\n\t\t\tvoid autoJoinStage();\n\t\t\treturn;\n\t\t}\n\t\tif (status === \"ON_STAGE\") {\n\t\t\tif (joinedStageLocally) {\n\t\t\t\tjoinedStageLocally = false;\n\t\t\t\tnotifyStage();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvoid republishCameraIfOn().then(() => {\n\t\t\t\tnotifyStage();\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tnotifyStage();\n\t});\n\n\treturn {\n\t\tasync join() {\n\t\t\tawait meeting.join?.();\n\t\t\tawait joinStageIfAllowed();\n\t\t},\n\t\tasync leave() {\n\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\twindow.removeEventListener(\"unhandledrejection\", onUnhandledRejection);\n\t\t\t}\n\t\t\tawait meeting.leave?.();\n\t\t},\n\t\tasync setAudioEnabled(enabled) {\n\t\t\tif (enabled) await meeting.self?.enableAudio?.();\n\t\t\telse await meeting.self?.disableAudio?.();\n\t\t},\n\t\tasync setVideoEnabled(enabled) {\n\t\t\tif (enabled) await meeting.self?.enableVideo?.();\n\t\t\telse await meeting.self?.disableVideo?.();\n\t\t},\n\t\tasync setScreenShareEnabled(enabled) {\n\t\t\tif (enabled) await meeting.self?.enableScreenShare?.();\n\t\t\telse await meeting.self?.disableScreenShare?.();\n\t\t},\n\t\tasync admit(participantId) {\n\t\t\tawait meeting.participants?.acceptWaitingRoomRequest?.(participantId);\n\t\t},\n\t\tasync deny(participantId) {\n\t\t\tawait meeting.participants?.rejectWaitingRoomRequest?.(participantId);\n\t\t},\n\t\tasync admitAs(participantId, as) {\n\t\t\tconst guest = asList(meeting.participants?.waitlisted).find(\n\t\t\t\t(row) => row.id === participantId,\n\t\t\t);\n\t\t\tif (as === \"panelist\") {\n\t\t\t\tqueuePanelist(guest, participantId);\n\t\t\t}\n\t\t\tawait meeting.participants?.acceptWaitingRoomRequest?.(participantId);\n\t\t\tif (as === \"panelist\") {\n\t\t\t\tawait grantPendingIfJoined(participantId, guest?.userId);\n\t\t\t}\n\t\t},\n\t\tasync admitAll(as) {\n\t\t\tconst waiting = asList(meeting.participants?.waitlisted);\n\t\t\tif (as === \"panelist\") {\n\t\t\t\tfor (const guest of waiting) {\n\t\t\t\t\tqueuePanelist(guest, guest.id);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst ids = waiting\n\t\t\t\t.map((guest) => guest.userId || guest.id)\n\t\t\t\t.filter(Boolean);\n\t\t\tif (ids.length === 0) return;\n\t\t\tawait meeting.participants?.acceptAllWaitingRoomRequest?.(ids);\n\t\t\tif (as === \"panelist\") {\n\t\t\t\tfor (const guest of waiting) {\n\t\t\t\t\tawait grantPendingIfJoined(guest.id, guest.userId);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tasync kick(participantId) {\n\t\t\tawait participantFor(participantId)?.kick?.();\n\t\t},\n\t\tasync disableParticipantMedia(participantId, kind: StudioHostMediaKind) {\n\t\t\tconst participant = participantFor(participantId);\n\t\t\tif (kind === \"audio\") {\n\t\t\t\tawait participant?.disableAudio?.();\n\t\t\t} else if (kind === \"video\") {\n\t\t\t\tawait participant?.disableVideo?.();\n\t\t\t} else if (kind === \"screen\") {\n\t\t\t\tawait participant?.setScreenShareEnabled?.(false);\n\t\t\t\tif (isSelfId(participantId)) {\n\t\t\t\t\tawait meeting.self?.disableScreenShare?.();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst _exhaustive: never = kind;\n\t\t\t\treturn _exhaustive;\n\t\t\t}\n\t\t\tawait meeting.participants?.broadcastMessage?.(\n\t\t\t\t\"host-media\",\n\t\t\t\t{ type: \"host-media\", kind },\n\t\t\t\t{ participantIds: [participantId] },\n\t\t\t);\n\t\t},\n\t\tasync sendBroadcast(message, target) {\n\t\t\tawait meeting.participants?.broadcastMessage?.(\n\t\t\t\tmessage.type,\n\t\t\t\tmessage,\n\t\t\t\ttarget,\n\t\t\t);\n\t\t},\n\t\tasync setStageAccess(userId, on) {\n\t\t\tconst target = findByUserId(meeting, userId);\n\t\t\tif (isRecorder(target)) return;\n\t\t\tif (on) await meeting.stage?.grantAccess?.([userId]);\n\t\t\telse await meeting.stage?.kick?.([userId]);\n\t\t\tnotifyStage();\n\t\t},\n\t\tasync denyStageAccess(userId) {\n\t\t\tawait meeting.stage?.denyAccess?.([userId]);\n\t\t\tnotifyStage();\n\t\t},\n\t\tasync requestStageAccess() {\n\t\t\tif (meeting.self?.permissions?.stageEnabled === false) return;\n\t\t\tconst status = currentStageStatus();\n\t\t\tif (status === \"ON_STAGE\" || status === \"REQUESTED_TO_JOIN_STAGE\") {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait meeting.stage?.requestAccess?.();\n\t\t\tnotifyStage();\n\t\t},\n\t\tasync joinStage() {\n\t\t\tif (meeting.self?.stageStatus === \"ON_STAGE\") {\n\t\t\t\tnotifyStage();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (meeting.self?.permissions?.stageAccess !== \"ALLOWED\") {\n\t\t\t\tawait meeting.stage?.requestAccess?.();\n\t\t\t\tnotifyStage();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait joinStageWithRetry();\n\t\t},\n\t\tasync leaveStage() {\n\t\t\tawait meeting.stage?.leave?.();\n\t\t\tjoinedStageLocally = false;\n\t\t\tnotifyStage();\n\t\t},\n\t\tstageStatus() {\n\t\t\treturn meeting.self?.stageStatus ?? meeting.stage?.status ?? \"OFF_STAGE\";\n\t\t},\n\t\tstageRequests() {\n\t\t\tif (meeting.self?.permissions?.acceptStageRequests !== true) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst rows = meeting.stage?.getAccessRequests?.().stageRequests ?? [];\n\t\t\t\tconst out: StudioStageRequest[] = [];\n\t\t\t\tfor (const row of rows) {\n\t\t\t\t\tif (!row.userId) continue;\n\t\t\t\t\tout.push({\n\t\t\t\t\t\tuserId: row.userId,\n\t\t\t\t\t\tpeerId: row.peerId ?? \"\",\n\t\t\t\t\t\tname: row.displayName?.trim() || \"Guest\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn out;\n\t\t\t} catch {\n\t\t\t\t// Video meetings and guests without Manage Stage throw ERR2003.\n\t\t\t\treturn [];\n\t\t\t}\n\t\t},\n\t\tsubscribeStage(cb) {\n\t\t\tstageListeners.add(cb);\n\t\t\treturn () => {\n\t\t\t\tstageListeners.delete(cb);\n\t\t\t};\n\t\t},\n\t\tcanManageStage() {\n\t\t\treturn meeting.self?.permissions?.acceptStageRequests === true;\n\t\t},\n\t\tstageEnabled() {\n\t\t\treturn meeting.self?.permissions?.stageEnabled !== false;\n\t\t},\n\t\tensureStageJoined,\n\t\tasync setParticipantPinned(participantId, pinned) {\n\t\t\tif (pinned) {\n\t\t\t\tfor (const id of pinnedIdSet()) {\n\t\t\t\t\tif (id === participantId) continue;\n\t\t\t\t\tawait participantFor(id)?.unpin?.();\n\t\t\t\t}\n\t\t\t\tawait participantFor(participantId)?.pin?.();\n\t\t\t} else {\n\t\t\t\tawait participantFor(participantId)?.unpin?.();\n\t\t\t}\n\t\t\tnotifyPinned();\n\t\t},\n\t\tpinnedIds() {\n\t\t\treturn [...pinnedIdSet()];\n\t\t},\n\t\tsubscribePinned(cb) {\n\t\t\tpinListeners.add(cb);\n\t\t\treturn () => {\n\t\t\t\tpinListeners.delete(cb);\n\t\t\t};\n\t\t},\n\t\tasync setParticipantChat(participantId, enabled) {\n\t\t\tawait meeting.participants?.updatePermissions?.([participantId], {\n\t\t\t\tchat: { public: { canSend: enabled, text: enabled } },\n\t\t\t});\n\t\t\tchatSend.set(participantId, enabled);\n\t\t\tnotifyParticipants();\n\t\t},\n\t\tsubscribeParticipants(cb) {\n\t\t\tparticipantListeners.add(cb);\n\t\t\treturn () => {\n\t\t\t\tparticipantListeners.delete(cb);\n\t\t\t};\n\t\t},\n\t\tsubscribeBroadcast(cb) {\n\t\t\treturn listen(meeting.participants, \"broadcastedMessage\", (payload) => {\n\t\t\t\tconst parsed = parseStudioBroadcast(payload);\n\t\t\t\tif (parsed) cb(parsed);\n\t\t\t});\n\t\t},\n\t\tparticipants() {\n\t\t\tconst self = meeting.self;\n\t\t\tconst pinned = pinnedIdSet();\n\t\t\tconst stageEnabled = self?.permissions?.stageEnabled !== false;\n\t\t\tconst joinedRows = asList(meeting.participants?.joined)\n\t\t\t\t.filter((row) => row.id !== self?.id && !isRecorder(row))\n\t\t\t\t.map((row) =>\n\t\t\t\t\ttileFrom(\n\t\t\t\t\t\trow,\n\t\t\t\t\t\tself?.id,\n\t\t\t\t\t\tpinned,\n\t\t\t\t\t\tchatSend,\n\t\t\t\t\t\tnameOverrides,\n\t\t\t\t\t\tresolveTileStageStatus(row, stageEnabled),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\tif (self?.id && !isRecorder(self)) {\n\t\t\t\tjoinedRows.unshift(\n\t\t\t\t\ttileFrom(\n\t\t\t\t\t\tself,\n\t\t\t\t\t\tself.id,\n\t\t\t\t\t\tpinned,\n\t\t\t\t\t\tchatSend,\n\t\t\t\t\t\tnameOverrides,\n\t\t\t\t\t\tresolveTileStageStatus(self, stageEnabled, meeting.stage?.status),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn joinedRows;\n\t\t},\n\t\twaitlisted() {\n\t\t\treturn asList(meeting.participants?.waitlisted)\n\t\t\t\t.filter((row) => !isRecorder(row))\n\t\t\t\t.map((row): StudioWaitlistedGuest => ({\n\t\t\t\t\tid: row.id,\n\t\t\t\t\tuserId: row.userId ?? \"\",\n\t\t\t\t\tname: resolvedName(row, nameOverrides),\n\t\t\t\t\tpicture: row.picture ?? null,\n\t\t\t\t}));\n\t\t},\n\t\tinWaitingRoom() {\n\t\t\treturn meeting.self?.roomState === \"waitlisted\";\n\t\t},\n\t\tconnectionState() {\n\t\t\treturn resolveConnectionState();\n\t\t},\n\t\tlastMeetingError() {\n\t\t\treturn lastMeetingError;\n\t\t},\n\t\tmoderatorIds() {\n\t\t\tconst ids: string[] = [];\n\t\t\tif (meeting.self?.id && isModerator(meeting.self)) {\n\t\t\t\tids.push(meeting.self.id);\n\t\t\t}\n\t\t\tfor (const row of asList(meeting.participants?.joined)) {\n\t\t\t\tif (row.id === meeting.self?.id) continue;\n\t\t\t\tif (isModerator(row)) ids.push(row.id);\n\t\t\t}\n\t\t\treturn ids;\n\t\t},\n\t\tlocalAudioTrack() {\n\t\t\treturn meeting.self?.audioTrack ?? null;\n\t\t},\n\t\tlocalVideoTrack() {\n\t\t\treturn meeting.self?.videoTrack ?? null;\n\t\t},\n\t\tparticipantVideoTrack(participantId) {\n\t\t\treturn participantFor(participantId)?.videoTrack ?? null;\n\t\t},\n\t\tparticipantScreenTrack(participantId) {\n\t\t\treturn screenShareTrack(meeting, participantId);\n\t\t},\n\t\tactiveSpeakerId() {\n\t\t\tif (lastSpeakerId) return lastSpeakerId;\n\t\t\tconst id = meeting.participants?.lastActiveSpeaker;\n\t\t\treturn typeof id === \"string\" && id ? id : null;\n\t\t},\n\t\tsubscribeActiveSpeaker(cb) {\n\t\t\treturn listen(meeting.participants, \"activeSpeaker\", (payload) => {\n\t\t\t\tlastSpeakerId = activeSpeakerFrom(payload, lastSpeakerId);\n\t\t\t\tcb();\n\t\t\t});\n\t\t},\n\t\tscreenSharePermission() {\n\t\t\treturn screenSharePermissionFrom(meeting.self?.permissions);\n\t\t},\n\t\tsubscribePermissions(cb) {\n\t\t\treturn listen(meeting.self?.permissions, \"*\", cb);\n\t\t},\n\t\tattachVideo(participantId, el, kind: StudioVideoKind = \"camera\") {\n\t\t\tif (kind === \"screen\") {\n\t\t\t\tattachScreen(participantId, el);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tattachCamera(participantId, el);\n\t\t},\n\t\tattachAudio(participantId, el) {\n\t\t\tbindAudio(participantId, el);\n\t\t},\n\t\tsubscribeMedia(cb) {\n\t\t\tmediaListeners.add(cb);\n\t\t\treturn () => {\n\t\t\t\tmediaListeners.delete(cb);\n\t\t\t};\n\t\t},\n\t\tsubscribeRoomLeft(cb) {\n\t\t\tconst handler: RtkEventHandler = (payload) => {\n\t\t\t\tcb(roomLeftState(payload, meeting.self?.roomState ?? null));\n\t\t\t};\n\t\t\treturn listen(meeting.self, \"roomLeft\", handler);\n\t\t},\n\t\tasync sendChatMessage(text, participantIds) {\n\t\t\tconst trimmed = text.trim();\n\t\t\tif (!trimmed) return;\n\t\t\tif (participantIds?.length) {\n\t\t\t\tawait meeting.chat?.sendTextMessage?.(trimmed, participantIds);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait meeting.chat?.sendTextMessage?.(trimmed);\n\t\t},\n\t\tasync editChatMessage(id, text) {\n\t\t\tconst trimmed = text.trim();\n\t\t\tif (!trimmed) return;\n\t\t\tawait meeting.chat?.editTextMessage?.(id, trimmed);\n\t\t},\n\t\tasync deleteChatMessage(id) {\n\t\t\tawait meeting.chat?.deleteMessage?.(id);\n\t\t},\n\t\tasync pinChatMessage(id, pinned) {\n\t\t\tif (pinned) await meeting.chat?.pin?.(id);\n\t\t\telse await meeting.chat?.unpin?.(id);\n\t\t\tnotifyChat();\n\t\t},\n\t\tasync fetchChatHistory(opts = {}) {\n\t\t\tconst query = {\n\t\t\t\ttimestamp: opts.timestamp,\n\t\t\t\tlimit: 30,\n\t\t\t\tdirection: \"before\" as const,\n\t\t\t};\n\t\t\tconst rows = opts.userId\n\t\t\t\t? await meeting.chat?.fetchPrivateMessages?.({\n\t\t\t\t\t\t...query,\n\t\t\t\t\t\tuserId: opts.userId,\n\t\t\t\t\t})\n\t\t\t\t: await meeting.chat?.fetchPublicMessages?.(query);\n\t\t\tconst mapped = mapChatMessages(rows);\n\t\t\tmergeHistory(mapped);\n\t\t\tnotifyChat();\n\t\t\treturn mapped;\n\t\t},\n\t\tpinnedChatMessages() {\n\t\t\treturn allChatMessages().filter((row) => row.pinned === true);\n\t\t},\n\t\tchatMaxTextLimit() {\n\t\t\tconst limit = meeting.chat?.maxTextLimit;\n\t\t\treturn typeof limit === \"number\" && limit > 0 ? limit : 2000;\n\t\t},\n\t\tchatMessages() {\n\t\t\treturn allChatMessages();\n\t\t},\n\t\tsubscribeChat(cb) {\n\t\t\tchatListeners.add(cb);\n\t\t\treturn () => {\n\t\t\t\tchatListeners.delete(cb);\n\t\t\t};\n\t\t},\n\t\tasync listDevices() {\n\t\t\tconst self = meeting.self;\n\t\t\tconst [audio, video, speaker] = await Promise.all([\n\t\t\t\tsettledDeviceList(self?.getAudioDevices?.bind(self)),\n\t\t\t\tsettledDeviceList(self?.getVideoDevices?.bind(self)),\n\t\t\t\tsettledDeviceList(self?.getSpeakerDevices?.bind(self)),\n\t\t\t]);\n\t\t\treturn {\n\t\t\t\taudio: asOptions(audio),\n\t\t\t\tvideo: asOptions(video),\n\t\t\t\tspeaker: asOptions(speaker),\n\t\t\t};\n\t\t},\n\t\tasync setDevice(kind: StudioDeviceKind, deviceId: string) {\n\t\t\tconst mediaKind =\n\t\t\t\tkind === \"audio\"\n\t\t\t\t\t? \"audioinput\"\n\t\t\t\t\t: kind === \"video\"\n\t\t\t\t\t\t? \"videoinput\"\n\t\t\t\t\t\t: \"audiooutput\";\n\t\t\tif (kind === \"speaker\") {\n\t\t\t\tspeakerSinkId = deviceId;\n\t\t\t\tfor (const el of audioEls.values()) applySink(el, speakerSinkId);\n\t\t\t\tconst speakers = await settledDeviceList(\n\t\t\t\t\tmeeting.self?.getSpeakerDevices?.bind(meeting.self),\n\t\t\t\t);\n\t\t\t\tif (speakers.length === 0) return;\n\t\t\t}\n\t\t\tawait meeting.self?.setDevice?.({\n\t\t\t\tdeviceId,\n\t\t\t\tkind: mediaKind,\n\t\t\t\tlabel: \"\",\n\t\t\t\tgroupId: \"\",\n\t\t\t\ttoJSON() {\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t} as MediaDeviceInfo);\n\t\t},\n\t\tasync setDisplayName(name) {\n\t\t\tconst trimmed = name.trim().slice(0, STUDIO_DISPLAY_NAME_MAX);\n\t\t\tif (!trimmed) return;\n\t\t\tawait meeting.self?.setName?.(trimmed);\n\t\t\tif (meeting.self) meeting.self.name = trimmed;\n\t\t\tif (meeting.self?.id) nameOverrides.set(meeting.self.id, trimmed);\n\t\t\tpersistStudioGuestName(trimmed);\n\t\t\tnotifyParticipants();\n\t\t\tawait meeting.participants?.broadcastMessage?.(\n\t\t\t\t\"display-name\",\n\t\t\t\t{\n\t\t\t\t\ttype: \"display-name\",\n\t\t\t\t\tparticipantId: meeting.self?.id ?? \"\",\n\t\t\t\t\tname: trimmed,\n\t\t\t\t},\n\t\t\t\t{ presetNames: [STUDIO_MODERATOR_PRESET, STUDIO_GUEST_PRESET] },\n\t\t\t);\n\t\t},\n\t\tlivestreamState() {\n\t\t\treturn meeting.livestream?.state ?? null;\n\t\t},\n\t\troomState() {\n\t\t\treturn meeting.self?.roomState ?? null;\n\t\t},\n\t\tasync startLivestream() {\n\t\t\tconst state = meeting.livestream?.state;\n\t\t\tif (state === \"LIVESTREAMING\" || state === \"STARTING\") return;\n\t\t\tawait meeting.livestream?.start?.();\n\t\t},\n\t};\n}\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { studioMeetingFromRtk } from \"../lib/realtimekit-adapter\";\nimport type { StudioMeetingHandle } from \"../lib/meeting\";\n\nexport function useRealtimeKitMeeting(\n\tauthToken: string | null,\n\tgeneration = 0,\n) {\n\tconst [meeting, setMeeting] = useState<StudioMeetingHandle | null>(null);\n\tconst [error, setError] = useState<string | null>(null);\n\n\tuseEffect(() => {\n\t\tif (!authToken) {\n\t\t\tsetMeeting(null);\n\t\t\tsetError(null);\n\t\t\treturn;\n\t\t}\n\t\tlet cancelled = false;\n\t\tlet handle: StudioMeetingHandle | null = null;\n\t\tsetError(null);\n\n\t\tvoid (async () => {\n\t\t\ttry {\n\t\t\t\tconst { default: RealtimeKitClient } =\n\t\t\t\t\tawait import(\"@cloudflare/realtimekit\");\n\t\t\t\tconst raw = await RealtimeKitClient.init({\n\t\t\t\t\tauthToken,\n\t\t\t\t\tdefaults: { audio: false, video: false },\n\t\t\t\t});\n\t\t\t\tif (cancelled) return;\n\t\t\t\thandle = studioMeetingFromRtk(raw);\n\t\t\t\tawait handle.join();\n\t\t\t\tif (cancelled) {\n\t\t\t\t\tawait handle.leave();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tsetMeeting(handle);\n\t\t\t} catch (err) {\n\t\t\t\tif (!cancelled) {\n\t\t\t\t\tsetError(err instanceof Error ? err.message : \"Studio failed\");\n\t\t\t\t}\n\t\t\t}\n\t\t})();\n\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t\tvoid handle?.leave();\n\t\t};\n\t}, [authToken, generation]);\n\n\treturn { meeting, error };\n}\n","export type EmbedTheme = {\n\tprimary?: string;\n\tbackground?: string;\n\tforeground?: string;\n\tradius?: string;\n\tfontFamily?: string;\n\tmode?: \"light\" | \"dark\";\n};\n\nconst HEX =\n\t/^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/;\nconst COLOR_FN = /^(?:oklch|rgb|rgba|hsl|hsla)\\([0-9a-zA-Z.\\s%,./-]+\\)$/;\nconst RADIUS = /^\\d+(?:\\.\\d+)?(?:px|rem|em)$/;\nconst FONT = /^[a-zA-Z0-9\\s,\"'-]{1,120}$/;\n\nfunction sanitizeColor(value: unknown): string | undefined {\n\tif (typeof value !== \"string\") return undefined;\n\tconst trimmed = value.trim();\n\tif (HEX.test(trimmed) || COLOR_FN.test(trimmed)) return trimmed;\n\treturn undefined;\n}\n\nexport function sanitizeEmbedTheme(value: unknown): EmbedTheme | null {\n\tif (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n\t\treturn null;\n\t}\n\tconst row = value as Record<string, unknown>;\n\tconst theme: EmbedTheme = {};\n\tconst primary = sanitizeColor(row.primary);\n\tconst background = sanitizeColor(row.background);\n\tconst foreground = sanitizeColor(row.foreground);\n\tif (typeof row.radius === \"string\" && RADIUS.test(row.radius.trim())) {\n\t\ttheme.radius = row.radius.trim();\n\t}\n\tif (typeof row.fontFamily === \"string\" && FONT.test(row.fontFamily.trim())) {\n\t\ttheme.fontFamily = row.fontFamily.trim();\n\t}\n\tif (primary) theme.primary = primary;\n\tif (background) theme.background = background;\n\tif (foreground) theme.foreground = foreground;\n\tif (row.mode === \"light\" || row.mode === \"dark\") theme.mode = row.mode;\n\treturn Object.keys(theme).length > 0 ? theme : null;\n}\n\nexport function encodeEmbedTheme(theme: EmbedTheme): string {\n\tconst json = JSON.stringify(theme);\n\tconst bytes = new TextEncoder().encode(json);\n\tlet binary = \"\";\n\tfor (const byte of bytes) binary += String.fromCharCode(byte);\n\treturn btoa(binary)\n\t\t.replace(/\\+/g, \"-\")\n\t\t.replace(/\\//g, \"_\")\n\t\t.replace(/=+$/, \"\");\n}\n\nexport function embedThemeCssVars(theme: EmbedTheme): Record<string, string> {\n\tconst vars: Record<string, string> = {};\n\tif (theme.primary) {\n\t\tvars[\"--livo-primary\"] = theme.primary;\n\t\tvars[\"--primary\"] = theme.primary;\n\t}\n\tif (theme.background) {\n\t\tvars[\"--livo-background\"] = theme.background;\n\t\tvars[\"--background\"] = theme.background;\n\t}\n\tif (theme.foreground) {\n\t\tvars[\"--livo-foreground\"] = theme.foreground;\n\t\tvars[\"--foreground\"] = theme.foreground;\n\t}\n\tif (theme.radius) {\n\t\tvars[\"--livo-radius\"] = theme.radius;\n\t\tvars[\"--radius\"] = theme.radius;\n\t}\n\tif (theme.fontFamily) vars[\"--font-sans\"] = theme.fontFamily;\n\treturn vars;\n}\n\nexport function decodeEmbedTheme(\n\traw: string | null | undefined,\n): EmbedTheme | null {\n\tif (!raw) return null;\n\ttry {\n\t\tconst padded = raw.replace(/-/g, \"+\").replace(/_/g, \"/\");\n\t\tconst pad =\n\t\t\tpadded.length % 4 === 0 ? \"\" : \"=\".repeat(4 - (padded.length % 4));\n\t\tconst binary = atob(padded + pad);\n\t\tconst bytes = Uint8Array.from(binary, (char) => char.charCodeAt(0));\n\t\treturn sanitizeEmbedTheme(JSON.parse(new TextDecoder().decode(bytes)));\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nexport function applyEmbedTheme(\n\troot: HTMLElement,\n\ttheme: EmbedTheme | null,\n): void {\n\tif (!theme) return;\n\tif (theme.mode === \"dark\") root.classList.add(\"dark\");\n\tif (theme.mode === \"light\") root.classList.remove(\"dark\");\n\tfor (const [key, value] of Object.entries(embedThemeCssVars(theme))) {\n\t\troot.style.setProperty(key, value);\n\t}\n\tif (theme.fontFamily) root.style.fontFamily = theme.fontFamily;\n}\n","import { defaultApiUrl } from \"../public-api\";\nimport {\n\tparsePublicStreamStatus,\n\tparseStudioJoinStatus,\n\tparseStudioSession,\n\tstudioErrorCode,\n} from \"./lib/parse\";\nimport type { StudioSession } from \"./lib/types\";\n\nexport class StudioApiError extends Error {\n\treadonly status: number;\n\treadonly body: unknown;\n\n\tconstructor(status: number, message: string, body: unknown) {\n\t\tsuper(message);\n\t\tthis.name = \"StudioApiError\";\n\t\tthis.status = status;\n\t\tthis.body = body;\n\t}\n}\n\nasync function publicJson(\n\turl: string,\n\tinit: RequestInit,\n\tfetchFn: typeof fetch,\n): Promise<unknown> {\n\tconst res = await fetchFn(url, {\n\t\t...init,\n\t\theaders: { accept: \"application/json\", ...init.headers },\n\t\tcache: \"no-store\",\n\t});\n\tconst body: unknown = await res.json().catch(() => ({}));\n\tif (!res.ok) {\n\t\tconst message =\n\t\t\tbody &&\n\t\t\ttypeof body === \"object\" &&\n\t\t\t\"error\" in body &&\n\t\t\ttypeof (body as { error: unknown }).error === \"string\"\n\t\t\t\t? (body as { error: string }).error\n\t\t\t\t: `Studio API ${res.status}`;\n\t\tthrow new StudioApiError(res.status, message, body);\n\t}\n\treturn body;\n}\n\nexport async function redeemStudioHost(\n\ttoken: string,\n\tapiUrl = defaultApiUrl(),\n\tfetchFn: typeof fetch = fetch,\n): Promise<StudioSession> {\n\tconst body = await publicJson(\n\t\t`${apiUrl.replace(/\\/$/, \"\")}/public/studio/host/${encodeURIComponent(token)}`,\n\t\t{ method: \"POST\" },\n\t\tfetchFn,\n\t);\n\tconst parsed = parseStudioSession(body);\n\tif (!parsed) throw new StudioApiError(502, \"Could not open studio\", body);\n\treturn parsed;\n}\n\nexport async function joinStudioGuest(\n\ttoken: string,\n\tinput: { displayName: string; guestId: string },\n\tapiUrl = defaultApiUrl(),\n\tfetchFn: typeof fetch = fetch,\n): Promise<StudioSession> {\n\tconst body = await publicJson(\n\t\t`${apiUrl.replace(/\\/$/, \"\")}/public/studio/join/${encodeURIComponent(token)}`,\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\tbody: JSON.stringify(input),\n\t\t\theaders: { \"content-type\": \"application/json\" },\n\t\t},\n\t\tfetchFn,\n\t);\n\tconst parsed = parseStudioSession(body);\n\tif (!parsed) throw new StudioApiError(502, \"Could not join studio\", body);\n\treturn parsed;\n}\n\nexport async function getStudioJoinStatus(\n\ttoken: string,\n\tapiUrl = defaultApiUrl(),\n\tfetchFn: typeof fetch = fetch,\n): Promise<{ ready: boolean; streamStatus: string | null } | \"ended\"> {\n\ttry {\n\t\tconst body = await publicJson(\n\t\t\t`${apiUrl.replace(/\\/$/, \"\")}/public/studio/join/${encodeURIComponent(token)}/status`,\n\t\t\t{},\n\t\t\tfetchFn,\n\t\t);\n\t\tconst parsed = parseStudioJoinStatus(body);\n\t\tif (!parsed) {\n\t\t\tthrow new StudioApiError(502, \"Could not check studio\", body);\n\t\t}\n\t\treturn parsed;\n\t} catch (error) {\n\t\tif (\n\t\t\terror instanceof StudioApiError &&\n\t\t\t(error.status === 404 || error.status === 410)\n\t\t) {\n\t\t\treturn \"ended\";\n\t\t}\n\t\tthrow error;\n\t}\n}\n\nexport async function getPublicStreamStatus(\n\tstreamId: string,\n\tapiUrl = defaultApiUrl(),\n\tfetchFn: typeof fetch = fetch,\n): Promise<string | null> {\n\ttry {\n\t\tconst body = await publicJson(\n\t\t\t`${apiUrl.replace(/\\/$/, \"\")}/public/streams/${encodeURIComponent(streamId)}`,\n\t\t\t{},\n\t\t\tfetchFn,\n\t\t);\n\t\treturn parsePublicStreamStatus(body);\n\t} catch (error) {\n\t\tif (\n\t\t\terror instanceof StudioApiError &&\n\t\t\t(error.status === 404 || error.status === 410)\n\t\t) {\n\t\t\treturn \"ended\";\n\t\t}\n\t\treturn null;\n\t}\n}\n\nexport { studioErrorCode };\n","\"use client\";\n\nimport { useEffect, useMemo, useState, type ReactNode } from \"react\";\nimport { controlActionsFromClient, createStudioControlClient } from \"./control\";\nimport { StudioRoom } from \"./components/studio-room\";\nimport { StudioSkeleton } from \"./components/studio-skeleton\";\nimport { usePrefersReducedMotion } from \"./hooks/use-prefers-reduced-motion\";\nimport { useRealtimeKitMeeting } from \"./hooks/use-realtimekit-meeting\";\nimport type { StudioRoomLabels } from \"./lib/labels\";\nimport type { StudioSession } from \"./lib/types\";\nimport { applyEmbedTheme, decodeEmbedTheme } from \"../theme\";\nimport { redeemStudioHost } from \"./public-session\";\n\nconst POLL_INTERVAL_MS = 5_000;\n\nexport function LivoHostStudio({\n\ttoken,\n\tapiUrl,\n\tlabels,\n\tredeemError = \"Could not open studio\",\n\tembed = false,\n\tchrome,\n\tplayerOrigin,\n\ttheme,\n}: {\n\ttoken: string;\n\tapiUrl?: string;\n\tlabels: StudioRoomLabels;\n\tredeemError?: string;\n\tembed?: boolean;\n\tchrome?: ReactNode;\n\tplayerOrigin?: string;\n\ttheme?: string | null;\n}) {\n\tconst reducedMotion = usePrefersReducedMotion();\n\tconst [session, setSession] = useState<StudioSession | null>(null);\n\tconst [status, setStatus] = useState<string | null>(null);\n\tconst [error, setError] = useState<string | null>(null);\n\tconst { meeting, error: meetingError } = useRealtimeKitMeeting(\n\t\tsession?.authToken ?? null,\n\t);\n\tconst client = useMemo(() => {\n\t\tconst controlToken = session?.studioControlToken;\n\t\tif (!controlToken) return null;\n\t\treturn createStudioControlClient({ token: controlToken, apiUrl });\n\t}, [apiUrl, session?.studioControlToken]);\n\tconst control = useMemo(\n\t\t() => (client ? controlActionsFromClient(client) : null),\n\t\t[client],\n\t);\n\n\tuseEffect(() => {\n\t\tapplyEmbedTheme(document.documentElement, decodeEmbedTheme(theme));\n\t}, [theme]);\n\n\tuseEffect(() => {\n\t\tlet cancelled = false;\n\t\tvoid redeemStudioHost(token, apiUrl)\n\t\t\t.then((next) => {\n\t\t\t\tif (!cancelled) setSession(next);\n\t\t\t})\n\t\t\t.catch((err: unknown) => {\n\t\t\t\tif (!cancelled) {\n\t\t\t\t\tsetError(err instanceof Error ? err.message : redeemError);\n\t\t\t\t}\n\t\t\t});\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t};\n\t}, [apiUrl, redeemError, token]);\n\n\tuseEffect(() => {\n\t\tif (!client) return;\n\t\tif (status === \"ended\" || status === \"error\") return;\n\t\tlet cancelled = false;\n\t\tconst poll = async () => {\n\t\t\ttry {\n\t\t\t\tconst next = await client.state();\n\t\t\t\tif (!cancelled) setStatus(next.stream.status);\n\t\t\t} catch {\n\t\t\t\treturn;\n\t\t\t}\n\t\t};\n\t\tvoid poll();\n\t\tconst id = window.setInterval(() => void poll(), POLL_INTERVAL_MS);\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t\twindow.clearInterval(id);\n\t\t};\n\t}, [client, status]);\n\n\tconst liveSession = useMemo(() => {\n\t\tif (!session) return null;\n\t\tif (!status) return session;\n\t\treturn {\n\t\t\t...session,\n\t\t\tstream: {\n\t\t\t\t...session.stream,\n\t\t\t\tstatus,\n\t\t\t},\n\t\t};\n\t}, [session, status]);\n\n\tif (error || meetingError) {\n\t\treturn (\n\t\t\t<p className=\"text-destructive p-6\" role=\"alert\">\n\t\t\t\t{error ?? meetingError}\n\t\t\t</p>\n\t\t);\n\t}\n\tif (!liveSession || !meeting || !control) {\n\t\treturn <StudioSkeleton />;\n\t}\n\n\treturn (\n\t\t<StudioRoom\n\t\t\tsession={liveSession}\n\t\t\tmeeting={meeting}\n\t\t\tcontrol={control}\n\t\t\treducedMotion={reducedMotion}\n\t\t\tlabels={labels}\n\t\t\tembed={embed}\n\t\t\tchrome={chrome}\n\t\t\tplayerOrigin={playerOrigin}\n\t\t/>\n\t);\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { StudioGuestLobby } from \"./components/studio-guest-lobby\";\nimport { StudioRoom } from \"./components/studio-room\";\nimport { usePrefersReducedMotion } from \"./hooks/use-prefers-reduced-motion\";\nimport { useRealtimeKitMeeting } from \"./hooks/use-realtimekit-meeting\";\nimport {\n\tpersistStudioDeviceSelection,\n\treadStudioDeviceSelection,\n\ttype StudioDeviceSelection,\n} from \"./lib/devices\";\nimport {\n\tpersistStudioGuestName,\n\treadStudioGuestIdentity,\n} from \"./lib/guest-identity\";\nimport type { StudioRoomLabels } from \"./lib/labels\";\nimport type { StudioDeviceKind } from \"./lib/meeting\";\nimport type { StudioSession } from \"./lib/types\";\nimport { applyEmbedTheme, decodeEmbedTheme } from \"../theme\";\nimport {\n\tgetPublicStreamStatus,\n\tgetStudioJoinStatus,\n\tjoinStudioGuest,\n\tStudioApiError,\n\tstudioErrorCode,\n} from \"./public-session\";\n\nconst POLL_INTERVAL_MS = 5_000;\nconst PREVIEW_POLL_INTERVAL_MS = 2_000;\n\nexport type StudioLobbyLabels = {\n\ttitle: string;\n\thint: string;\n\tname: string;\n\tjoin: string;\n\twaitingForHost: string;\n\tcamera: string;\n\tmic: string;\n\tcameraDevice?: string;\n\tmicDevice?: string;\n\tspeakerDevice?: string;\n\ttestSpeaker?: string;\n\ttestSpeakerError?: string;\n\tcameraOff?: string;\n\tjoinError: string;\n\tjoinBusy: string;\n\tendedTitle: string;\n};\n\nexport function LivoGuestStudio({\n\ttoken,\n\tapiUrl,\n\tlabels,\n\tlobbyLabels,\n\tembed = false,\n\tplayerOrigin,\n\ttheme,\n}: {\n\ttoken: string;\n\tapiUrl?: string;\n\tlabels: StudioRoomLabels;\n\tlobbyLabels: StudioLobbyLabels;\n\tembed?: boolean;\n\tplayerOrigin?: string;\n\ttheme?: string | null;\n}) {\n\tconst reducedMotion = usePrefersReducedMotion();\n\tconst [session, setSession] = useState<StudioSession | null>(null);\n\tconst [status, setStatus] = useState<string | null>(null);\n\tconst [error, setError] = useState<string | null>(null);\n\tconst [displayName, setDisplayName] = useState(\"\");\n\tconst [guestId, setGuestId] = useState(\"\");\n\tconst [joining, setJoining] = useState(false);\n\tconst [waitingForHost, setWaitingForHost] = useState(false);\n\tconst [cameraOn, setCameraOn] = useState(true);\n\tconst [muted, setMuted] = useState(false);\n\tconst [deviceSelection, setDeviceSelection] = useState<StudioDeviceSelection>(\n\t\t() => readStudioDeviceSelection(),\n\t);\n\tconst [retryAfterMs, setRetryAfterMs] = useState<number | null>(null);\n\tconst [sessionGen, setSessionGen] = useState(0);\n\tconst joinInFlight = useRef(false);\n\tconst { meeting, error: meetingError } = useRealtimeKitMeeting(\n\t\tsession?.authToken ?? null,\n\t\tsessionGen,\n\t);\n\n\tuseEffect(() => {\n\t\tapplyEmbedTheme(document.documentElement, decodeEmbedTheme(theme));\n\t}, [theme]);\n\n\tuseEffect(() => {\n\t\tconst identity = readStudioGuestIdentity();\n\t\tsetDisplayName(identity.displayName);\n\t\tsetGuestId(identity.guestId);\n\t\tsetDeviceSelection(readStudioDeviceSelection());\n\t}, []);\n\n\tconst onDeviceChange = useCallback(\n\t\t(kind: StudioDeviceKind, deviceId: string) => {\n\t\t\tpersistStudioDeviceSelection(kind, deviceId);\n\t\t\tsetDeviceSelection((prev) => ({ ...prev, [kind]: deviceId }));\n\t\t},\n\t\t[],\n\t);\n\n\tconst join = useCallback(async () => {\n\t\tif (joinInFlight.current) return;\n\t\tconst name = displayName.trim();\n\t\tif (!name || !guestId) return;\n\t\tpersistStudioGuestName(name);\n\t\tjoinInFlight.current = true;\n\t\tsetJoining(true);\n\t\tsetError(null);\n\t\ttry {\n\t\t\tconst next = await joinStudioGuest(\n\t\t\t\ttoken,\n\t\t\t\t{ displayName: name, guestId },\n\t\t\t\tapiUrl,\n\t\t\t);\n\t\t\tsetWaitingForHost(false);\n\t\t\tsetRetryAfterMs(null);\n\t\t\tsetStatus(null);\n\t\t\tsetSession(next);\n\t\t} catch (err: unknown) {\n\t\t\tconst code = studioErrorCode(err);\n\t\t\tif (code === \"studio_not_started\") {\n\t\t\t\tsetWaitingForHost(true);\n\t\t\t\tsetError(null);\n\t\t\t} else if (err instanceof StudioApiError && err.status === 429) {\n\t\t\t\tsetError(lobbyLabels.joinBusy);\n\t\t\t\tsetRetryAfterMs(15_000);\n\t\t\t} else if (err instanceof StudioApiError && err.status === 404) {\n\t\t\t\tsetError(lobbyLabels.endedTitle);\n\t\t\t\tsetWaitingForHost(false);\n\t\t\t} else {\n\t\t\t\tsetError(err instanceof Error ? err.message : lobbyLabels.joinError);\n\t\t\t\tsetWaitingForHost(false);\n\t\t\t}\n\t\t} finally {\n\t\t\tjoinInFlight.current = false;\n\t\t\tsetJoining(false);\n\t\t}\n\t}, [apiUrl, displayName, guestId, lobbyLabels, token]);\n\n\tuseEffect(() => {\n\t\tif (!waitingForHost) return;\n\t\tlet cancelled = false;\n\t\tconst poll = async () => {\n\t\t\ttry {\n\t\t\t\tconst next = await getStudioJoinStatus(token, apiUrl);\n\t\t\t\tif (cancelled) return;\n\t\t\t\tif (next === \"ended\") {\n\t\t\t\t\tsetError(lobbyLabels.endedTitle);\n\t\t\t\t\tsetWaitingForHost(false);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (next.ready) void join();\n\t\t\t} catch {\n\t\t\t\treturn;\n\t\t\t}\n\t\t};\n\t\tvoid poll();\n\t\tconst id = window.setInterval(() => {\n\t\t\tvoid poll();\n\t\t}, POLL_INTERVAL_MS);\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t\twindow.clearInterval(id);\n\t\t};\n\t}, [apiUrl, join, lobbyLabels.endedTitle, token, waitingForHost]);\n\n\tuseEffect(() => {\n\t\tif (!session) return;\n\t\tconst current = status ?? session.stream.status;\n\t\tif (current === \"ended\" || current === \"error\") return;\n\t\tlet cancelled = false;\n\t\tconst poll = async () => {\n\t\t\tconst next = await getPublicStreamStatus(session.stream.id, apiUrl);\n\t\t\tif (!cancelled && next) setStatus(next);\n\t\t};\n\t\tvoid poll();\n\t\tconst intervalMs =\n\t\t\tcurrent === \"public\" ? POLL_INTERVAL_MS : PREVIEW_POLL_INTERVAL_MS;\n\t\tconst id = window.setInterval(() => void poll(), intervalMs);\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t\twindow.clearInterval(id);\n\t\t};\n\t}, [apiUrl, session, status]);\n\n\tconst liveSession = useMemo(() => {\n\t\tif (!session) return null;\n\t\tif (!status) return session;\n\t\treturn {\n\t\t\t...session,\n\t\t\tstream: { ...session.stream, status },\n\t\t};\n\t}, [session, status]);\n\n\tuseEffect(() => {\n\t\tif (retryAfterMs == null) return;\n\t\tconst id = window.setTimeout(() => {\n\t\t\tsetRetryAfterMs(null);\n\t\t\tsetError(null);\n\t\t\tvoid join();\n\t\t}, retryAfterMs);\n\t\treturn () => window.clearTimeout(id);\n\t}, [join, retryAfterMs]);\n\n\tif (meetingError) {\n\t\treturn (\n\t\t\t<p className=\"text-destructive p-6\" role=\"alert\">\n\t\t\t\t{meetingError}\n\t\t\t</p>\n\t\t);\n\t}\n\tif (!liveSession || !meeting) {\n\t\treturn (\n\t\t\t<StudioGuestLobby\n\t\t\t\treducedMotion={reducedMotion}\n\t\t\t\tcameraOn={cameraOn}\n\t\t\t\tmuted={muted}\n\t\t\t\tdisplayName={displayName}\n\t\t\t\tshowName\n\t\t\t\tjoining={joining}\n\t\t\t\twaitingForHost={waitingForHost}\n\t\t\t\terror={error}\n\t\t\t\tlabels={lobbyLabels}\n\t\t\t\tsavedDevices={deviceSelection}\n\t\t\t\tonCameraChange={setCameraOn}\n\t\t\t\tonMutedChange={setMuted}\n\t\t\t\tonDisplayNameChange={setDisplayName}\n\t\t\t\tonDeviceChange={onDeviceChange}\n\t\t\t\tonJoin={() => void join()}\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn (\n\t\t<StudioRoom\n\t\t\tsession={liveSession}\n\t\t\tmeeting={meeting}\n\t\t\tcontrol={{\n\t\t\t\tlivestream: async () => \"starting\",\n\t\t\t\tpublish: async () => undefined,\n\t\t\t\tstop: async () => undefined,\n\t\t\t}}\n\t\t\tonRejoin={() => {\n\t\t\t\tsetSession(null);\n\t\t\t\tsetStatus(null);\n\t\t\t\tsetSessionGen((n) => n + 1);\n\t\t\t\tsetJoining(false);\n\t\t\t\tsetWaitingForHost(false);\n\t\t\t\tsetError(null);\n\t\t\t\tjoinInFlight.current = false;\n\t\t\t}}\n\t\t\treducedMotion={reducedMotion}\n\t\t\tlabels={labels}\n\t\t\tembed={embed}\n\t\t\tplayerOrigin={playerOrigin}\n\t\t\tinitialCameraOn={cameraOn}\n\t\t\tinitialMuted={muted}\n\t\t\tinitialDevices={deviceSelection}\n\t\t/>\n\t);\n}\n","export type StudioRoomLabels = ReturnType<typeof studioRoomLabels>;\n\nexport function studioRoomLabels(\n\tt: (key: string, values?: Record<string, string>) => string,\n) {\n\treturn {\n\t\tlive: t(\"live\"),\n\t\tpreview: t(\"preview\"),\n\t\twaiting: t(\"waiting\"),\n\t\twaitingHost: t(\"waitingHost\"),\n\t\tconnecting: t(\"connecting\"),\n\t\tconnectFailed: t(\"connectFailed\"),\n\t\tretry: t(\"retry\"),\n\t\tadmit: t(\"admit\"),\n\t\tdeny: t(\"deny\"),\n\t\tdenied: t(\"denied\"),\n\t\tdenyError: t(\"denyError\"),\n\t\trejectedTitle: t(\"rejectedTitle\"),\n\t\trejectedDescription: t(\"rejectedDescription\"),\n\t\trejectedAction: t(\"rejectedAction\"),\n\t\tkick: t(\"kick\"),\n\t\tcamera: t(\"camera\"),\n\t\tscreen: t(\"screen\"),\n\t\tmute: t(\"mute\"),\n\t\tunmute: t(\"unmute\"),\n\t\tcopyLink: t(\"copyLink\"),\n\t\tshareLink: t(\"shareLink\"),\n\t\tshareGuestText: t(\"shareGuestText\", { title: \"{title}\" }),\n\t\tshareFailed: t(\"shareFailed\"),\n\t\tcopied: t(\"copied\"),\n\t\tpublish: t(\"publish\"),\n\t\tpublishTitle: t(\"publishTitle\"),\n\t\tpublishDescription: t(\"publishDescription\"),\n\t\tpublishConfirm: t(\"publishConfirm\"),\n\t\tpublishPending: t(\"publishPending\"),\n\t\tstop: t(\"stop\"),\n\t\tstopTitle: t(\"stopTitle\"),\n\t\tstopDescription: t(\"stopDescription\"),\n\t\tstopConfirm: t(\"stopConfirm\"),\n\t\tfullscreen: t(\"fullscreen\"),\n\t\tpublishError: t(\"publishError\"),\n\t\tstopError: t(\"stopError\"),\n\t\tpublished: t(\"published\"),\n\t\tstopped: t(\"stopped\"),\n\t\tcameraDevice: t(\"cameraDevice\"),\n\t\tmicDevice: t(\"micDevice\"),\n\t\tspeakerDevice: t(\"speakerDevice\"),\n\t\tpreflightCamera: t(\"preflightCamera\"),\n\t\tpreflightMic: t(\"preflightMic\"),\n\t\tknock: t(\"knock\", { name: \"{name}\" }),\n\t\tegressLost: t(\"egressLost\"),\n\t\tlivestreamStarting: t(\"livestreamStarting\"),\n\t\tlivestreamSending: t(\"livestreamSending\"),\n\t\tlivestreamInitializing: t(\"livestreamInitializing\"),\n\t\tlivestreamRetry: t(\"livestreamRetry\"),\n\t\tlivestreamError: t(\"livestreamError\"),\n\t\tscreenBusy: t(\"screenBusy\"),\n\t\tendedTitle: t(\"endedTitle\"),\n\t\tendedDescription: t(\"endedDescription\"),\n\t\tendedAction: t(\"endedAction\"),\n\t\trejoin: t(\"rejoin\"),\n\t\tduplicateTitle: t(\"duplicateTitle\"),\n\t\tduplicateDescription: t(\"duplicateDescription\"),\n\t\tduplicateDescriptionNoTakeover: t(\"duplicateDescriptionNoTakeover\"),\n\t\tduplicateAction: t(\"duplicateAction\"),\n\t\tduplicateTakenOver: t(\"duplicateTakenOver\"),\n\t\tjoinBusy: t(\"joinBusy\"),\n\t\tcameraError: t(\"cameraError\"),\n\t\tscreenError: t(\"screenError\"),\n\t\tleave: t(\"leave\"),\n\t\tleaveTitle: t(\"leaveTitle\"),\n\t\tleaveDescription: t(\"leaveDescription\"),\n\t\tleaveConfirm: t(\"leaveConfirm\"),\n\t\tchat: t(\"chat\"),\n\t\tchatSend: t(\"chatSend\"),\n\t\tchatPlaceholder: t(\"chatPlaceholder\"),\n\t\tchatError: t(\"chatError\"),\n\t\tsettings: t(\"settings\"),\n\t\tsettingsTitle: t(\"settingsTitle\"),\n\t\tsettingsDescription: t(\"settingsDescription\"),\n\t\tguestName: t(\"guestName\"),\n\t\tdisplayNameSave: t(\"displayNameSave\"),\n\t\tdisplayNameSaved: t(\"displayNameSaved\"),\n\t\tdisplayNameError: t(\"displayNameError\"),\n\t\ttestSpeaker: t(\"testSpeaker\"),\n\t\ttestSpeakerError: t(\"testSpeakerError\"),\n\t\tcameraOff: t(\"cameraOff\"),\n\t\tmicLevel: t(\"micLevel\"),\n\t\tshare: t(\"share\"),\n\t\tshareCopied: t(\"shareCopied\"),\n\t\tstopCamera: t(\"stopCamera\"),\n\t\tstopScreen: t(\"stopScreen\"),\n\t\thostMutedYou: t(\"hostMutedYou\"),\n\t\thostStoppedYourCamera: t(\"hostStoppedYourCamera\"),\n\t\thostStoppedYourScreen: t(\"hostStoppedYourScreen\"),\n\t\thostMediaError: t(\"hostMediaError\"),\n\t\ttileMenu: t(\"tileMenu\"),\n\t\topenPip: t(\"openPip\"),\n\t\tclosePip: t(\"closePip\"),\n\t\tbackToStudio: t(\"backToStudio\"),\n\t\tpipTitle: t(\"pipTitle\"),\n\t\tpipError: t(\"pipError\"),\n\t\tscreenUnsupportedDevice: t(\"screenUnsupportedDevice\"),\n\t\tscreenNotAllowed: t(\"screenNotAllowed\"),\n\t\taskToShare: t(\"askToShare\"),\n\t\tshareRequested: t(\"shareRequested\"),\n\t\tcancelShareRequest: t(\"cancelShareRequest\"),\n\t\tshareRequestSent: t(\"shareRequestSent\"),\n\t\tshareRequestFrom: t(\"shareRequestFrom\", { name: \"{name}\" }),\n\t\tapprove: t(\"approve\"),\n\t\tshareApproved: t(\"shareApproved\"),\n\t\tshareDenied: t(\"shareDenied\"),\n\t\tshareRequestError: t(\"shareRequestError\"),\n\t\tshareRequestTimeout: t(\"shareRequestTimeout\"),\n\t\tshareRespondError: t(\"shareRespondError\"),\n\t\tgoOffAir: t(\"goOffAir\"),\n\t\tgoOnAir: t(\"goOnAir\"),\n\t\ttakeOffAir: t(\"takeOffAir\"),\n\t\tbringOnAir: t(\"bringOnAir\"),\n\t\toffAir: t(\"offAir\"),\n\t\toffAirCount: t(\"offAirCount\", { count: \"{count}\" }),\n\t\toffAirBanner: t(\"offAirBanner\"),\n\t\toffAirLastVisible: t(\"offAirLastVisible\"),\n\t\toffAirHidden: t(\"offAirHidden\"),\n\t\toffAirShown: t(\"offAirShown\"),\n\t\toffAirError: t(\"offAirError\"),\n\t\ttakeOffAirTitle: t(\"takeOffAirTitle\"),\n\t\ttakeOffAirDescription: t(\"takeOffAirDescription\"),\n\t\ttakeOffAirConfirm: t(\"takeOffAirConfirm\"),\n\t\tadmitAsPanelist: t(\"admitAsPanelist\"),\n\t\tadmitAsAudience: t(\"admitAsAudience\"),\n\t\tadmitAllPanelists: t(\"admitAllPanelists\"),\n\t\tadmitAllAudience: t(\"admitAllAudience\"),\n\t\taskToGoOnAir: t(\"askToGoOnAir\"),\n\t\tstageRequested: t(\"stageRequested\"),\n\t\tstageApproved: t(\"stageApproved\"),\n\t\tstageDenied: t(\"stageDenied\"),\n\t\tstageRequests: t(\"stageRequests\"),\n\t\tpeople: t(\"people\"),\n\t\tpanelists: t(\"panelists\"),\n\t\taudience: t(\"audience\"),\n\t\tnoWaiting: t(\"noWaiting\"),\n\t\tnoPanelists: t(\"noPanelists\"),\n\t\tnoAudience: t(\"noAudience\"),\n\t\tclosePanel: t(\"closePanel\"),\n\t\tmuteChat: t(\"muteChat\"),\n\t\tallowChat: t(\"allowChat\"),\n\t\tpin: t(\"pin\"),\n\t\tunpin: t(\"unpin\"),\n\t\tpinnedToast: t(\"pinnedToast\"),\n\t\tunpinnedToast: t(\"unpinnedToast\"),\n\t\tpinError: t(\"pinError\"),\n\t\tkickTitle: t(\"kickTitle\"),\n\t\tkickDescription: t(\"kickDescription\"),\n\t\tkickConfirm: t(\"kickConfirm\"),\n\t\tkickError: t(\"kickError\"),\n\t\tstageError: t(\"stageError\"),\n\t\tstageDisabled: t(\"stageDisabled\"),\n\t\tstageGrantNoEffect: t(\"stageGrantNoEffect\"),\n\t\tstageOverflow: t(\"stageOverflow\", { count: \"{count}\" }),\n\t\tchatEveryone: t(\"chatEveryone\"),\n\t\tchatEdited: t(\"chatEdited\"),\n\t\tchatPinned: t(\"chatPinned\"),\n\t\tchatLoadOlder: t(\"chatLoadOlder\"),\n\t\tchatRateLimited: t(\"chatRateLimited\"),\n\t\tchatDelete: t(\"chatDelete\"),\n\t\tchatEdit: t(\"chatEdit\"),\n\t\tchatPin: t(\"chatPin\"),\n\t\tchatUnpin: t(\"chatUnpin\"),\n\t\tchatSave: t(\"chatSave\"),\n\t\twaitingSkeleton: t(\"waitingSkeleton\"),\n\t};\n}\n"]}
|