@urun-sh/react 0.2.3 → 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -0
- package/dist/auth.d.mts +6 -0
- package/dist/auth.d.ts +6 -0
- package/dist/auth.js +1 -0
- package/dist/auth.mjs +1 -0
- package/dist/chunk-SSZO4I6Y.mjs +1 -0
- package/dist/index.css +1 -1
- package/dist/index.d.mts +362 -13
- package/dist/index.d.ts +362 -13
- package/dist/index.js +2 -2
- package/dist/index.mjs +2 -2
- package/dist/styles.css +148 -0
- package/package.json +5 -5
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import * as react from 'react';
|
|
3
3
|
import { RefObject, ReactNode, Component, ErrorInfo, ComponentType } from 'react';
|
|
4
|
-
|
|
4
|
+
export { UrunAuthMode, authMode, urunPublicEnv, usesWorkOSAuth } from './auth.js';
|
|
5
|
+
import { SessionInterface, SessionDocument, SessionStream, SessionPhase, SessionStatus } from '@urun-sh/core';
|
|
5
6
|
export { App as AppInterface, AppOptions, SessionDocument, Session as SessionInterface, SessionPhase, SessionPhaseName, SessionStream } from '@urun-sh/core';
|
|
6
7
|
import { ZodSchema, z } from 'zod';
|
|
7
8
|
import Player from 'video.js/dist/types/player';
|
|
@@ -60,11 +61,6 @@ declare function UrunAuthProvider({ getAccessToken, children }: UrunAuthProvider
|
|
|
60
61
|
declare const UrunJwtProvider: typeof UrunAuthProvider;
|
|
61
62
|
declare function useUrunAuth(): UrunAuthContextValue | null;
|
|
62
63
|
|
|
63
|
-
type UrunAuthMode = 'workos' | 'jwt';
|
|
64
|
-
declare function urunPublicEnv(name: string): string | undefined;
|
|
65
|
-
declare function authMode(): UrunAuthMode;
|
|
66
|
-
declare function usesWorkOSAuth(): boolean;
|
|
67
|
-
|
|
68
64
|
type Unsubscribe = () => void;
|
|
69
65
|
type ReactSessionDocument<T = Record<string, unknown>> = Omit<SessionDocument, 'get' | 'set' | 'on'> & {
|
|
70
66
|
get(): T;
|
|
@@ -78,6 +74,8 @@ interface ReactSession extends Omit<SessionInterface, 'doc' | 'stream'> {
|
|
|
78
74
|
stream(name: string): ReactSessionStream;
|
|
79
75
|
|
|
80
76
|
readonly phase: SessionPhase;
|
|
77
|
+
|
|
78
|
+
readonly status: SessionStatus;
|
|
81
79
|
}
|
|
82
80
|
type ReactApp = Record<string, (args?: Record<string, unknown>) => ReactSession>;
|
|
83
81
|
|
|
@@ -279,12 +277,12 @@ declare const ImageFrameSchema: z.ZodObject<{
|
|
|
279
277
|
caption: z.ZodOptional<z.ZodString>;
|
|
280
278
|
}, "strip", z.ZodTypeAny, {
|
|
281
279
|
src: string;
|
|
282
|
-
alt?: string | undefined;
|
|
283
280
|
caption?: string | undefined;
|
|
281
|
+
alt?: string | undefined;
|
|
284
282
|
}, {
|
|
285
283
|
src: string;
|
|
286
|
-
alt?: string | undefined;
|
|
287
284
|
caption?: string | undefined;
|
|
285
|
+
alt?: string | undefined;
|
|
288
286
|
}>;
|
|
289
287
|
type ImageFrameProps = z.infer<typeof ImageFrameSchema>;
|
|
290
288
|
declare function useImageFrame(props: ImageFrameProps): {
|
|
@@ -300,24 +298,24 @@ declare const MetricsPanelSchema: z.ZodObject<{
|
|
|
300
298
|
value: z.ZodUnion<[z.ZodString, z.ZodNumber]>;
|
|
301
299
|
unit: z.ZodOptional<z.ZodString>;
|
|
302
300
|
}, "strip", z.ZodTypeAny, {
|
|
303
|
-
value: string | number;
|
|
304
301
|
label: string;
|
|
302
|
+
value: string | number;
|
|
305
303
|
unit?: string | undefined;
|
|
306
304
|
}, {
|
|
307
|
-
value: string | number;
|
|
308
305
|
label: string;
|
|
306
|
+
value: string | number;
|
|
309
307
|
unit?: string | undefined;
|
|
310
308
|
}>, "many">;
|
|
311
309
|
}, "strip", z.ZodTypeAny, {
|
|
312
310
|
metrics: {
|
|
313
|
-
value: string | number;
|
|
314
311
|
label: string;
|
|
312
|
+
value: string | number;
|
|
315
313
|
unit?: string | undefined;
|
|
316
314
|
}[];
|
|
317
315
|
}, {
|
|
318
316
|
metrics: {
|
|
319
|
-
value: string | number;
|
|
320
317
|
label: string;
|
|
318
|
+
value: string | number;
|
|
321
319
|
unit?: string | undefined;
|
|
322
320
|
}[];
|
|
323
321
|
}>;
|
|
@@ -366,4 +364,355 @@ interface UrunVideoProps {
|
|
|
366
364
|
|
|
367
365
|
declare const UrunVideo: react.ForwardRefExoticComponent<UrunVideoProps & react.RefAttributes<HTMLVideoElement>>;
|
|
368
366
|
|
|
369
|
-
|
|
367
|
+
interface UrunAudioStreamSource {
|
|
368
|
+
|
|
369
|
+
readonly track: MediaStreamTrack | null;
|
|
370
|
+
|
|
371
|
+
on(event: 'track', handler: (track: MediaStreamTrack | null) => void): () => void;
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
interface UrunAudioSessionSource {
|
|
375
|
+
stream(name: string): UrunAudioStreamSource;
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
interface UrunAudioHandle {
|
|
379
|
+
|
|
380
|
+
unlock(): void;
|
|
381
|
+
|
|
382
|
+
readonly unlocked: boolean;
|
|
383
|
+
|
|
384
|
+
readonly element: HTMLAudioElement | null;
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
interface UrunAudioProps {
|
|
388
|
+
|
|
389
|
+
session?: UrunAudioSessionSource | null;
|
|
390
|
+
|
|
391
|
+
stream?: string;
|
|
392
|
+
|
|
393
|
+
track?: MediaStreamTrack | null;
|
|
394
|
+
|
|
395
|
+
controls?: boolean;
|
|
396
|
+
|
|
397
|
+
className?: string;
|
|
398
|
+
|
|
399
|
+
onTrack?: (track: MediaStreamTrack | null) => void;
|
|
400
|
+
|
|
401
|
+
onUnlockChange?: (unlocked: boolean) => void;
|
|
402
|
+
|
|
403
|
+
onAudioElement?: (el: HTMLAudioElement | null) => void;
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
declare const UrunAudio: react.ForwardRefExoticComponent<UrunAudioProps & react.RefAttributes<UrunAudioHandle>>;
|
|
407
|
+
|
|
408
|
+
interface UrunVoiceStreamSource extends UrunAudioStreamSource {
|
|
409
|
+
attach(track: MediaStreamTrack): Promise<void>;
|
|
410
|
+
detach(): Promise<void>;
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
interface UrunVoiceSessionSource {
|
|
414
|
+
stream(name: string): UrunVoiceStreamSource;
|
|
415
|
+
|
|
416
|
+
whenLive(options?: {
|
|
417
|
+
timeout?: number;
|
|
418
|
+
signal?: AbortSignal;
|
|
419
|
+
}): Promise<void>;
|
|
420
|
+
|
|
421
|
+
readonly status?: SessionStatus;
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
interface UrunVoiceHandle {
|
|
425
|
+
|
|
426
|
+
start(): Promise<void>;
|
|
427
|
+
|
|
428
|
+
stop(): Promise<void>;
|
|
429
|
+
|
|
430
|
+
readonly active: boolean;
|
|
431
|
+
|
|
432
|
+
readonly micStream: MediaStream | null;
|
|
433
|
+
|
|
434
|
+
unlock(): void;
|
|
435
|
+
|
|
436
|
+
readonly audio: UrunAudioHandle | null;
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
interface UrunVoiceProps {
|
|
440
|
+
|
|
441
|
+
session: UrunVoiceSessionSource;
|
|
442
|
+
|
|
443
|
+
stream?: string;
|
|
444
|
+
|
|
445
|
+
constraints?: MediaTrackConstraints;
|
|
446
|
+
|
|
447
|
+
connectTimeoutMs?: number;
|
|
448
|
+
|
|
449
|
+
attempts?: number;
|
|
450
|
+
|
|
451
|
+
retryDelayMs?: number;
|
|
452
|
+
|
|
453
|
+
onActiveChange?: (active: boolean) => void;
|
|
454
|
+
|
|
455
|
+
onError?: (error: Error) => void;
|
|
456
|
+
|
|
457
|
+
onMicStream?: (stream: MediaStream | null) => void;
|
|
458
|
+
|
|
459
|
+
onTrack?: (track: MediaStreamTrack | null) => void;
|
|
460
|
+
|
|
461
|
+
onUnlockChange?: (unlocked: boolean) => void;
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
declare const DEFAULT_VOICE_CONSTRAINTS: MediaTrackConstraints;
|
|
465
|
+
|
|
466
|
+
declare const UrunVoice: react.ForwardRefExoticComponent<UrunVoiceProps & react.RefAttributes<UrunVoiceHandle>>;
|
|
467
|
+
|
|
468
|
+
interface UrunCameraStreamSource {
|
|
469
|
+
attachVideo(track: MediaStreamTrack): Promise<void>;
|
|
470
|
+
detachVideo(): Promise<void>;
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
interface UrunCameraSessionSource {
|
|
474
|
+
stream(name: string): UrunCameraStreamSource;
|
|
475
|
+
|
|
476
|
+
whenLive(options?: {
|
|
477
|
+
timeout?: number;
|
|
478
|
+
signal?: AbortSignal;
|
|
479
|
+
}): Promise<void>;
|
|
480
|
+
|
|
481
|
+
readonly status?: SessionStatus;
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
type UrunCameraFacing = 'user' | 'environment';
|
|
485
|
+
|
|
486
|
+
interface UrunCameraHandle {
|
|
487
|
+
|
|
488
|
+
start(options?: {
|
|
489
|
+
facingMode?: UrunCameraFacing;
|
|
490
|
+
}): Promise<void>;
|
|
491
|
+
|
|
492
|
+
stop(): Promise<void>;
|
|
493
|
+
|
|
494
|
+
flip(): Promise<void>;
|
|
495
|
+
|
|
496
|
+
setFacingMode(mode: UrunCameraFacing): Promise<void>;
|
|
497
|
+
|
|
498
|
+
readonly active: boolean;
|
|
499
|
+
|
|
500
|
+
readonly facingMode: UrunCameraFacing;
|
|
501
|
+
|
|
502
|
+
readonly stream: MediaStream | null;
|
|
503
|
+
|
|
504
|
+
readonly element: HTMLVideoElement | null;
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
interface UrunCameraProps {
|
|
508
|
+
|
|
509
|
+
session: UrunCameraSessionSource;
|
|
510
|
+
|
|
511
|
+
stream?: string;
|
|
512
|
+
|
|
513
|
+
constraints?: MediaTrackConstraints;
|
|
514
|
+
|
|
515
|
+
facingMode?: UrunCameraFacing;
|
|
516
|
+
|
|
517
|
+
mirror?: boolean | 'auto';
|
|
518
|
+
|
|
519
|
+
connectTimeoutMs?: number;
|
|
520
|
+
|
|
521
|
+
preview?: boolean;
|
|
522
|
+
|
|
523
|
+
className?: string;
|
|
524
|
+
|
|
525
|
+
videoClassName?: string;
|
|
526
|
+
|
|
527
|
+
onActiveChange?: (active: boolean) => void;
|
|
528
|
+
|
|
529
|
+
onError?: (error: Error) => void;
|
|
530
|
+
|
|
531
|
+
onStream?: (stream: MediaStream | null) => void;
|
|
532
|
+
|
|
533
|
+
onTrack?: (track: MediaStreamTrack | null) => void;
|
|
534
|
+
|
|
535
|
+
children?: ReactNode;
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
declare const DEFAULT_CAMERA_CONSTRAINTS: MediaTrackConstraints;
|
|
539
|
+
|
|
540
|
+
declare const UrunCamera: react.ForwardRefExoticComponent<UrunCameraProps & react.RefAttributes<UrunCameraHandle>>;
|
|
541
|
+
|
|
542
|
+
interface UseUrunAudioLevelOptions {
|
|
543
|
+
|
|
544
|
+
fftSize?: number;
|
|
545
|
+
|
|
546
|
+
intervalMs?: number;
|
|
547
|
+
|
|
548
|
+
speakingThreshold?: number;
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
interface UrunAudioLevel {
|
|
552
|
+
|
|
553
|
+
level: number;
|
|
554
|
+
|
|
555
|
+
speaking: boolean;
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
declare function useUrunAudioLevel(source: MediaStream | MediaStreamTrack | null | undefined, options?: UseUrunAudioLevelOptions): UrunAudioLevel;
|
|
559
|
+
|
|
560
|
+
declare function getUrunAudioContext(): AudioContext | null;
|
|
561
|
+
|
|
562
|
+
declare function resumeUrunAudioContext(): void;
|
|
563
|
+
|
|
564
|
+
interface WorkbenchStreamSource {
|
|
565
|
+
|
|
566
|
+
readonly track: MediaStreamTrack | null;
|
|
567
|
+
|
|
568
|
+
on(event: 'track', handler: (track: MediaStreamTrack | null) => void): () => void;
|
|
569
|
+
|
|
570
|
+
messages(): AsyncIterable<unknown>;
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
interface WorkbenchDocSource {
|
|
574
|
+
|
|
575
|
+
get(path?: string, defaultValue?: unknown): unknown;
|
|
576
|
+
|
|
577
|
+
set(patch: Record<string, unknown>): void;
|
|
578
|
+
|
|
579
|
+
on(event: 'change', handler: (snapshot: unknown) => void): () => void;
|
|
580
|
+
|
|
581
|
+
readonly synced: boolean;
|
|
582
|
+
|
|
583
|
+
onSynced(handler: () => void): () => void;
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
interface WorkbenchSession {
|
|
587
|
+
|
|
588
|
+
readonly id: string;
|
|
589
|
+
|
|
590
|
+
readonly phase: SessionPhase;
|
|
591
|
+
|
|
592
|
+
onPhase(handler: (phase: SessionPhase) => void): () => void;
|
|
593
|
+
|
|
594
|
+
stream(name: string): WorkbenchStreamSource;
|
|
595
|
+
|
|
596
|
+
doc(key: string): WorkbenchDocSource;
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
declare function useSessionTrack(session: WorkbenchSession | null, name: string): MediaStreamTrack | null;
|
|
600
|
+
|
|
601
|
+
interface UseSessionDocResult<T> {
|
|
602
|
+
|
|
603
|
+
snapshot: T | null;
|
|
604
|
+
|
|
605
|
+
synced: boolean;
|
|
606
|
+
|
|
607
|
+
set: (patch: Partial<T> & Record<string, unknown>) => void;
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
declare function useSessionDoc<T = Record<string, unknown>>(session: WorkbenchSession | null, key: string): UseSessionDocResult<T>;
|
|
611
|
+
|
|
612
|
+
declare const DEFAULT_LOG_CAP = 200;
|
|
613
|
+
|
|
614
|
+
declare function pushCapped<T>(list: readonly T[], entry: T, cap?: number): T[];
|
|
615
|
+
|
|
616
|
+
interface StreamMessageEntry {
|
|
617
|
+
at: number;
|
|
618
|
+
payload: unknown;
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
interface SpineEntry {
|
|
622
|
+
at: number;
|
|
623
|
+
kind: 'phase' | 'track' | 'doc';
|
|
624
|
+
text: string;
|
|
625
|
+
}
|
|
626
|
+
|
|
627
|
+
declare function formatPayload(payload: unknown): string;
|
|
628
|
+
type JsonObjectParse = {
|
|
629
|
+
ok: true;
|
|
630
|
+
value: Record<string, unknown>;
|
|
631
|
+
} | {
|
|
632
|
+
ok: false;
|
|
633
|
+
error: string;
|
|
634
|
+
};
|
|
635
|
+
|
|
636
|
+
declare function parseJsonObject(text: string): JsonObjectParse;
|
|
637
|
+
|
|
638
|
+
interface UseStreamMessagesOptions {
|
|
639
|
+
|
|
640
|
+
cap?: number;
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
declare function useStreamMessages(session: WorkbenchSession | null, name: string, options?: UseStreamMessagesOptions): StreamMessageEntry[];
|
|
644
|
+
|
|
645
|
+
interface UrunStreamTailProps {
|
|
646
|
+
|
|
647
|
+
session: WorkbenchSession | null;
|
|
648
|
+
|
|
649
|
+
name: string;
|
|
650
|
+
|
|
651
|
+
cap?: number;
|
|
652
|
+
className?: string;
|
|
653
|
+
}
|
|
654
|
+
|
|
655
|
+
declare function UrunStreamTail({ session, name, cap, className }: UrunStreamTailProps): react_jsx_runtime.JSX.Element;
|
|
656
|
+
|
|
657
|
+
declare function DocPatchForm({ placeholder, buttonLabel, disabled, onApply, }: {
|
|
658
|
+
placeholder?: string;
|
|
659
|
+
buttonLabel: string;
|
|
660
|
+
disabled?: boolean;
|
|
661
|
+
onApply: (patch: Record<string, unknown>, raw: string) => void;
|
|
662
|
+
}): react_jsx_runtime.JSX.Element;
|
|
663
|
+
interface UrunDocPanelProps {
|
|
664
|
+
session: WorkbenchSession | null;
|
|
665
|
+
|
|
666
|
+
docKey: string;
|
|
667
|
+
|
|
668
|
+
editable?: boolean;
|
|
669
|
+
|
|
670
|
+
patchPlaceholder?: string;
|
|
671
|
+
className?: string;
|
|
672
|
+
}
|
|
673
|
+
|
|
674
|
+
declare function UrunDocPanel({ session, docKey, editable, patchPlaceholder, className, }: UrunDocPanelProps): react_jsx_runtime.JSX.Element;
|
|
675
|
+
|
|
676
|
+
interface UrunControlSenderProps {
|
|
677
|
+
session: WorkbenchSession | null;
|
|
678
|
+
|
|
679
|
+
docKey?: string;
|
|
680
|
+
|
|
681
|
+
cap?: number;
|
|
682
|
+
className?: string;
|
|
683
|
+
}
|
|
684
|
+
|
|
685
|
+
declare function UrunControlSender({ session, docKey, cap, className, }: UrunControlSenderProps): react_jsx_runtime.JSX.Element;
|
|
686
|
+
|
|
687
|
+
interface UrunEventSpineProps {
|
|
688
|
+
session: WorkbenchSession | null;
|
|
689
|
+
|
|
690
|
+
trackNames?: string[];
|
|
691
|
+
|
|
692
|
+
docKeys?: string[];
|
|
693
|
+
|
|
694
|
+
cap?: number;
|
|
695
|
+
className?: string;
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
declare function UrunEventSpine({ session, trackNames, docKeys, cap, className, }: UrunEventSpineProps): react_jsx_runtime.JSX.Element;
|
|
699
|
+
|
|
700
|
+
declare function useSessionPhase(session: WorkbenchSession | null): SessionPhase | null;
|
|
701
|
+
interface UrunSessionStatusProps {
|
|
702
|
+
session: WorkbenchSession | null;
|
|
703
|
+
className?: string;
|
|
704
|
+
}
|
|
705
|
+
|
|
706
|
+
declare function UrunSessionStatus({ session, className }: UrunSessionStatusProps): react_jsx_runtime.JSX.Element;
|
|
707
|
+
interface UrunSessionGateProps {
|
|
708
|
+
session: WorkbenchSession | null;
|
|
709
|
+
|
|
710
|
+
children: ReactNode;
|
|
711
|
+
|
|
712
|
+
fallback?: (phase: SessionPhase | null) => ReactNode;
|
|
713
|
+
className?: string;
|
|
714
|
+
}
|
|
715
|
+
|
|
716
|
+
declare function UrunSessionGate({ session, children, fallback, className, }: UrunSessionGateProps): react_jsx_runtime.JSX.Element;
|
|
717
|
+
|
|
718
|
+
export { type ChatMessage, type ChatRole, ComponentRenderer, DEFAULT_CAMERA_CONSTRAINTS, DEFAULT_LOG_CAP, DEFAULT_VOICE_CONSTRAINTS, DocPatchForm, ImageFrame, ImageFrameSchema, type JsonObjectParse, MetricsPanel, MetricsPanelSchema, ProgressCard, ProgressCardSchema, type ReactApp, type ReactSession, type ReactSessionDocument, type ReactSessionStream, type RegisteredComponent, type RequestCapableSession, type RequestStream, type SessionRequestOptions, type SpineEntry, StatusBadge, StatusBadgeSchema, type StreamMessageEntry, TextStream, TextStreamSchema, type UrunAccessToken, type UrunAccessTokenProvider, UrunAudio, type UrunAudioHandle, type UrunAudioLevel, type UrunAudioProps, type UrunAudioSessionSource, type UrunAudioStreamSource, type UrunAuthContextValue, UrunAuthProvider, type UrunAuthProviderProps, UrunCamera, type UrunCameraFacing, type UrunCameraHandle, type UrunCameraProps, type UrunCameraSessionSource, type UrunCameraStreamSource, UrunControlSender, type UrunControlSenderProps, UrunDocPanel, type UrunDocPanelProps, UrunErrorBoundary, UrunEventSpine, type UrunEventSpineProps, UrunJwtProvider, UrunProvider, UrunSessionGate, type UrunSessionGateProps, UrunSessionStatus, type UrunSessionStatusProps, UrunStreamTail, type UrunStreamTailProps, UrunVideo, type UrunVideoProps, UrunVoice, type UrunVoiceHandle, type UrunVoiceProps, type UrunVoiceSessionSource, type UrunVoiceStreamSource, type UseChatOptions, type UseChatResult, type UseCompletionOptions, type UseCompletionResult, type UseRequestOptions, type UseRequestResult, type UseSessionDocResult, type UseStreamMessagesOptions, type UseUrunAudioLevelOptions, type WorkbenchDocSource, type WorkbenchSession, type WorkbenchStreamSource, formatPayload, getUrunAudioContext, parseJsonObject, pushCapped, registerComponent, resumeUrunAudioContext, useApp, useChat, useCompletion, useImageFrame, useMetricsPanel, useProgressCard, useRequest, useSessionDoc, useSessionPhase, useSessionTrack, useStatusBadge, useStreamMessages, useTextStream, useUrunAudioLevel, useUrunAuth };
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var dr=Object.create;var oe=Object.defineProperty;var pr=Object.getOwnPropertyDescriptor;var lr=Object.getOwnPropertyNames;var mr=Object.getPrototypeOf,fr=Object.prototype.hasOwnProperty;var gr=(r,e)=>{for(var t in e)oe(r,t,{get:e[t],enumerable:!0})},xe=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of lr(e))!fr.call(r,s)&&s!==t&&oe(r,s,{get:()=>e[s],enumerable:!(n=pr(e,s))||n.enumerable});return r};var hr=(r,e,t)=>(t=r!=null?dr(mr(r)):{},xe(e||!r||!r.__esModule?oe(t,"default",{value:r,enumerable:!0}):t,r)),vr=r=>xe(oe({},"__esModule",{value:!0}),r);var Ur={};gr(Ur,{ComponentRenderer:()=>He,ImageFrame:()=>Ge,ImageFrameSchema:()=>Ze,MetricsPanel:()=>Qe,MetricsPanelSchema:()=>Ye,ProgressCard:()=>Xe,ProgressCardSchema:()=>Fe,StatusBadge:()=>Je,StatusBadgeSchema:()=>$e,TextStream:()=>Ke,TextStreamSchema:()=>We,UrunAuthProvider:()=>fe,UrunErrorBoundary:()=>z,UrunJwtProvider:()=>_e,UrunProvider:()=>Ae,UrunVideo:()=>ir,authMode:()=>G,registerComponent:()=>De,urunPublicEnv:()=>M,useApp:()=>Ne,useChat:()=>Ve,useCompletion:()=>Oe,useImageFrame:()=>Re,useMetricsPanel:()=>Ce,useProgressCard:()=>be,useRequest:()=>qe,useStatusBadge:()=>Se,useTextStream:()=>ke,useUrunAuth:()=>ae,usesWorkOSAuth:()=>Ee});module.exports=vr(Ur);var F=require("react");var Te=require("react"),Z=require("react/jsx-runtime"),z=class extends Te.Component{constructor(e){super(e),this.state={error:null}}static getDerivedStateFromError(e){return{error:e}}componentDidCatch(e,t){console.error("[urun] Error caught by UrunErrorBoundary:",e,t)}render(){if(this.state.error){let{fallback:e}=this.props;return typeof e=="function"?e(this.state.error):e||(0,Z.jsxs)("div",{role:"status","aria-live":"polite",style:{padding:"16px",border:"1px solid rgba(17, 24, 39, 0.12)",borderRadius:"8px",background:"#ffffff",color:"#111827",fontFamily:'system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif',maxWidth:"360px"},children:[(0,Z.jsx)("p",{style:{margin:0,fontWeight:600},children:"Connection interrupted"}),(0,Z.jsx)("p",{style:{margin:"6px 0 0",color:"#4b5563"},children:"Reconnecting automatically."})]})}return this.props.children}};var Pe=require("react"),ie=(0,Pe.createContext)(null);function V(r){return r&&r.trim()?r.trim():void 0}function M(r){switch(r){case"NEXT_PUBLIC_AUTH_MODE":return V(typeof process<"u"?process.env?.NEXT_PUBLIC_AUTH_MODE:void 0);case"NEXT_PUBLIC_AUTH_ENABLED":return V(typeof process<"u"?process.env?.NEXT_PUBLIC_AUTH_ENABLED:void 0);case"NEXT_PUBLIC_SESSION_AUTH_PROVIDER":return V(typeof process<"u"?process.env?.NEXT_PUBLIC_SESSION_AUTH_PROVIDER:void 0);case"NEXT_PUBLIC_SESSION_TOKEN":return V(typeof process<"u"?process.env?.NEXT_PUBLIC_SESSION_TOKEN:void 0);case"NEXT_PUBLIC_URUN_JWT":return V(typeof process<"u"?process.env?.NEXT_PUBLIC_URUN_JWT:void 0);case"VERCEL_ENV":return V(typeof process<"u"?process.env?.VERCEL_ENV:void 0);default:return V(typeof process<"u"?process.env?.[r]:void 0)}}function G(){let r=M("NEXT_PUBLIC_AUTH_MODE")?.toLowerCase();return r==="jwt"||r==="customer-jwt"||r==="test-jwt"?"jwt":r==="workos"||M("VERCEL_ENV")==="production"?"workos":M("NEXT_PUBLIC_AUTH_ENABLED")==="false"?"jwt":"workos"}function Ee(){return G()==="workos"}var H=require("react"),Ue=require("react/jsx-runtime"),we=(0,H.createContext)(null);function fe({getAccessToken:r,children:e}){let t=(0,H.useMemo)(()=>({getAccessToken:r}),[r]);return(0,Ue.jsx)(we.Provider,{value:t,children:e})}var _e=fe;function ae(){return(0,H.useContext)(we)}var ue=require("react/jsx-runtime");function Ae({baseUrl:r,orgId:e,appId:t,jwt:n,authProvider:s,fallback:i,children:a}){let[w,u]=(0,F.useState)(),m=ae(),R=M("NEXT_PUBLIC_SESSION_TOKEN")??M("NEXT_PUBLIC_URUN_JWT"),c=G(),p=c==="workos"&&!n,P=n??(c==="jwt"?R:void 0)??w,_=s??M("NEXT_PUBLIC_SESSION_AUTH_PROVIDER"),C=p&&!P,b=(0,F.useMemo)(()=>({appId:t,baseUrl:r,orgId:e,jwt:P,getAccessToken:p?m?.getAccessToken:void 0,authProvider:_}),[t,m,r,_,P,e,p]);return(0,F.useEffect)(()=>{if(!p||!m)return;let f=!1,v=m;async function g(){try{let E=await v.getAccessToken();f||u(E??void 0)}catch{f||u(void 0)}}g();let U=window.setInterval(()=>{g()},6e4);return()=>{f=!0,window.clearInterval(U)}},[m,p]),(0,ue.jsx)(z,{fallback:i,children:C?(0,ue.jsx)("div",{role:"status","aria-live":"polite",children:"Signing in..."}):(0,ue.jsx)(ie.Provider,{value:b,children:a})})}var O=require("react"),Ie=require("@urun-sh/core");function yr(r,e){return`${r}:${JSON.stringify(e??{})}`}var ge=class{constructor(e,t){this._doc=e;this._notify=t;this._unsubscribeChange=this._doc.on("change",()=>this._notify())}_doc;_notify;_unsubscribeChange;get(e,t){return this._doc.get(e,t)}set(e){this._doc.set(e),this._notify()}on(e,t){return this._doc.on(e,n=>t(n))}get synced(){return this._doc.synced}onSynced(e){return this._doc.onSynced(()=>{e(),this._notify()})}text(e){let t=this._doc.text(e),n=this._notify;return{append(s){t.append(s),n()},toString:()=>t.toString(),get length(){return t.length},on:(s,i)=>t.on(s,a=>{i(a),n()})}}dispose(){this._unsubscribeChange()}},he=class{constructor(e,t){this._stream=e;this._notify=t;this._unsubscribeTrack=this._stream.on("track",()=>this._notify())}_stream;_notify;_unsubscribeTrack;get track(){return this._stream.track}attach(e){return this._stream.attach(e)}attachVideo(e){return this._stream.attachVideo(e)}detach(){return this._stream.detach()}detachVideo(){return this._stream.detachVideo()}seek(e){return this._stream.seek(e)}chunks(e){return this._stream.chunks(e)}onSeeked(e){return this._stream.onSeeked(e)}on(e,t){return this._stream.on(e,t)}messages(){return this._stream.messages()}emit(e,t){return this._stream.emit(e,t)}dispose(){this._unsubscribeTrack()}},ve=class{constructor(e,t){this._session=e;this._notify=t;this._unsubscribePhase=this._session.onPhase(()=>this._notify())}_session;_notify;_docs=new Map;_streams=new Map;_unsubscribePhase;get id(){return this._session.id}get phase(){return this._session.phase}onPhase(e){return this._session.onPhase(e)}request(e,t){return this._session.request(e,t)}requestStream(e,t){return this._session.requestStream(e,t)}complete(e,t){return this._session.complete(e,t)}get recordings(){return this._session.recordings}get artifacts(){return this._session.artifacts}get presence(){return this._session.presence}doc(e){let t=this._docs.get(e);return t||(t=new ge(this._session.doc(e),this._notify),this._docs.set(e,t)),t}stream(e){let t=this._streams.get(e);return t||(t=new he(this._session.stream(e),this._notify),this._streams.set(e,t)),t}disconnect(){for(let e of this._docs.values())e.dispose();for(let e of this._streams.values())e.dispose();this._docs.clear(),this._streams.clear(),this._unsubscribePhase(),this._session.disconnect(),this._notify()}};function Ne(){let r=(0,O.useContext)(ie);if(!r)throw new Error("useApp must be used within <UrunProvider>");if(!r.appId)throw new Error('useApp requires <UrunProvider appId="...">');let[,e]=(0,O.useReducer)(s=>s+1,0),t=(0,O.useRef)(new Map),n=(0,O.useMemo)(()=>(0,Ie.App)(r.appId,{baseUrl:r.baseUrl,orgId:r.orgId,jwt:r.jwt,getAccessToken:r.getAccessToken,authProvider:r.authProvider}),[r.appId,r.baseUrl,r.orgId,r.jwt,r.getAccessToken,r.authProvider]);return(0,O.useMemo)(()=>new Proxy({},{get(s,i){if(typeof i=="string")return a=>{let w=yr(i,a),u=t.current.get(w);if(u)return u;let m=new ve(n[i](a),e);return t.current.set(w,m),m}}}),[n])}var k=require("react");function X(r){let e=r;if(!e||typeof e.request!="function"||typeof e.requestStream!="function")throw new Error("This session does not support request/requestStream. Upgrade @urun-sh/core to a version that ships the request/response primitive.");return e}function br(r){return r instanceof Error?r:new Error(String(r))}function qe(r,e){let t=(0,k.useMemo)(()=>X(r),[r]),[n,s]=(0,k.useState)(void 0),[i,a]=(0,k.useState)(null),[w,u]=(0,k.useState)(!1),m=(0,k.useRef)(e);m.current=e;let R=(0,k.useRef)(0),c=(0,k.useRef)(null),p=(0,k.useRef)(!0);(0,k.useEffect)(()=>(p.current=!0,()=>{p.current=!1,c.current?.abort()}),[]);let P=(0,k.useCallback)(async b=>{c.current?.abort();let f=new AbortController;c.current=f;let v=++R.current,g=()=>p.current&&R.current===v;g()&&(u(!0),a(null));try{let U=await t.request(b,{...m.current,signal:f.signal});return g()&&(s(U),u(!1),m.current?.onSuccess?.(U)),U}catch(U){let E=br(U);throw g()&&(a(E),u(!1),m.current?.onError?.(E)),E}},[t]),_=(0,k.useCallback)(b=>{P(b).catch(()=>{})},[P]),C=(0,k.useCallback)(()=>{R.current++,c.current?.abort(),c.current=null,s(void 0),a(null),u(!1)},[]);return{mutate:_,mutateAsync:P,data:n,error:i,isPending:w,reset:C}}var T=require("react");function Me(r){return r instanceof Error?r:new Error(String(r))}var Sr=r=>typeof r=="string"?r:String(r);function Oe(r,e){let t=(0,T.useMemo)(()=>X(r),[r]),[n,s]=(0,T.useState)(""),[i,a]=(0,T.useState)(!1),[w,u]=(0,T.useState)(null),m=(0,T.useRef)(e);m.current=e;let R=(0,T.useRef)(0),c=(0,T.useRef)(null),p=(0,T.useRef)(!0);(0,T.useEffect)(()=>(p.current=!0,()=>{p.current=!1,c.current?.cancel(),c.current=null}),[]);let P=(0,T.useCallback)(()=>{R.current++,c.current?.cancel(),c.current=null,p.current&&a(!1)},[]),_=(0,T.useCallback)(async C=>{c.current?.cancel();let b=++R.current,f=()=>p.current&&R.current===b,v=m.current,g=v?.parseChunk??Sr,U=v?.buildPayload??(l=>({prompt:l}));f()&&(s(""),u(null),a(!0));let{parseChunk:E,buildPayload:pe,onFinish:I,onError:o,...d}=v??{},S="",x;try{x=t.requestStream(U(C),d),c.current=x}catch(l){let N=Me(l);f()&&(u(N),a(!1),v?.onError?.(N));return}try{for await(let l of x){if(R.current!==b)break;S+=g(l),f()&&s(S)}f()&&(a(!1),v?.onFinish?.(S))}catch(l){let N=Me(l);f()&&(u(N),a(!1),v?.onError?.(N))}finally{c.current===x&&(c.current=null)}},[t]);return{completion:n,complete:_,stop:P,isStreaming:i,error:w}}var h=require("react");function Le(r){return r instanceof Error?r:new Error(String(r))}var kr=r=>typeof r=="string"?r:String(r),je=0;function ye(r){return je+=1,`${r}-${je}`}function Ve(r,e){let t=(0,h.useMemo)(()=>X(r),[r]),[n,s]=(0,h.useState)(()=>(e?.initialMessages??[]).map(g=>({id:g.id??ye("msg"),role:g.role,content:g.content}))),[i,a]=(0,h.useState)(""),[w,u]=(0,h.useState)(!1),[m,R]=(0,h.useState)(null),c=(0,h.useRef)(e);c.current=e;let p=(0,h.useRef)(n);p.current=n;let P=(0,h.useRef)(i);P.current=i;let _=(0,h.useRef)(0),C=(0,h.useRef)(null),b=(0,h.useRef)(!0);(0,h.useEffect)(()=>(b.current=!0,()=>{b.current=!1,C.current?.cancel(),C.current=null}),[]);let f=(0,h.useCallback)(()=>{_.current++,C.current?.cancel(),C.current=null,b.current&&u(!1)},[]),v=(0,h.useCallback)(async g=>{let U=g===void 0,E=(U?P.current:g)??"";if(!E.trim())return;C.current?.cancel();let I=++_.current,o=()=>b.current&&_.current===I,d=c.current,S=d?.parseChunk??kr,x={id:ye("msg"),role:"user",content:E},l={id:ye("msg"),role:"assistant",content:""},N=[...p.current,x].map(A=>({role:A.role,content:A.content})),K=[...p.current,x,l];p.current=K,s(K),U&&a(""),R(null),u(!0);let ar=d?.buildPayload??(A=>({messages:A})),{initialMessages:Ar,parseChunk:Ir,buildPayload:Nr,onFinish:qr,onError:Mr,...ur}=d??{},cr=A=>{s(j=>j.map(me=>me.id===l.id?{...me,content:A}:me))},le="",se;try{se=t.requestStream(ar(N),ur),C.current=se}catch(A){let j=Le(A);o()&&(R(j),u(!1),d?.onError?.(j));return}try{for await(let A of se){if(_.current!==I)break;le+=S(A),o()&&cr(le)}o()&&(u(!1),d?.onFinish?.({...l,content:le}))}catch(A){let j=Le(A);o()&&(R(j),u(!1),d?.onError?.(j))}finally{C.current===se&&(C.current=null)}},[t]);return{messages:n,input:i,setInput:a,sendMessage:v,stop:f,isStreaming:w,error:m}}var Be=new Map;function De(r,e,t){if(!t||typeof t.safeParse!="function")throw new Error(`registerComponent("${r}"): schema must be a valid Zod schema`);Be.set(r,{component:e,schema:t})}function ze(r,e){let t=Be.get(r);if(!t)return{error:`Unknown component: "${r}"`};let n=t.schema.safeParse(e);return n.success?{Component:t.component,validatedProps:n.data}:{error:`Validation failed for "${r}": ${n.error.message}`}}var B=require("react/jsx-runtime");function He({name:r,props:e,fallback:t}){let n=ze(r,e);if(n.error)return console.warn(`[urun] ComponentRenderer: ${n.error}`),t?(0,B.jsx)(B.Fragment,{children:t}):(0,B.jsx)("div",{className:"urun-component-error",role:"alert",children:(0,B.jsx)("span",{className:"urun-component-error-text",children:n.error})});let s=n.Component;return(0,B.jsx)(s,{...n.validatedProps})}var $=require("zod"),D=require("react/jsx-runtime"),Fe=$.z.object({step:$.z.number().min(0),total:$.z.number().min(1),label:$.z.string().optional(),variant:$.z.enum(["default","success","error"]).default("default")});function be(r){let{step:e,total:t,label:n,variant:s="default"}=r,i=Math.min(e/t*100,100),a=e>=t;return{step:e,total:t,label:n,variant:s,percentage:i,isComplete:a}}function Xe(r){let{step:e,total:t,label:n,variant:s,percentage:i}=be(r);return(0,D.jsxs)("div",{className:"urun-progress-card","data-variant":s,children:[n&&(0,D.jsx)("div",{className:"urun-progress-label",children:n}),(0,D.jsx)("div",{className:"urun-progress-bar",children:(0,D.jsx)("div",{className:"urun-progress-fill",style:{width:`${i}%`}})}),(0,D.jsxs)("div",{className:"urun-progress-text",children:[e,"/",t]})]})}var ce=require("zod"),Y=require("react/jsx-runtime"),$e=ce.z.object({state:ce.z.enum(["thinking","generating","idle","error"]),message:ce.z.string().optional()}),Rr={thinking:"Thinking...",generating:"Generating...",idle:"Idle",error:"Error"};function Se(r){let{state:e,message:t}=r,n=e==="thinking"||e==="generating",s=t??Rr[e]??e;return{state:e,message:s,isActive:n}}function Je(r){let{state:e,message:t,isActive:n}=Se(r);return(0,Y.jsxs)("span",{className:"urun-status-badge","data-state":e,children:[(0,Y.jsx)("span",{className:`urun-status-indicator${n?" urun-status-pulse":""}`}),(0,Y.jsx)("span",{className:"urun-status-message",children:t})]})}var Q=require("react"),de=require("zod"),ee=require("react/jsx-runtime"),We=de.z.object({text:de.z.string(),streaming:de.z.boolean().default(!1)});function ke(r){let{text:e,streaming:t=!1}=r,n=e.length===0;return{text:e,streaming:t,isEmpty:n}}function Ke(r){let{text:e,streaming:t}=ke(r),n=(0,Q.useRef)(null),s=(0,Q.useRef)(0);return(0,Q.useEffect)(()=>{let i=n.current;i&&e.length!==s.current&&(i.textContent=e,s.current=e.length)},[e]),(0,ee.jsxs)("div",{className:"urun-text-stream",children:[(0,ee.jsx)("span",{ref:n,className:"urun-text-content"}),t&&(0,ee.jsx)("span",{className:"urun-text-cursor"})]})}var re=require("zod"),te=require("react/jsx-runtime"),Ze=re.z.object({src:re.z.string().url(),alt:re.z.string().optional(),caption:re.z.string().optional()});function Re(r){let{src:e,alt:t,caption:n}=r;return{src:e,alt:t??"",caption:n}}function Ge(r){let{src:e,alt:t,caption:n}=Re(r);return(0,te.jsxs)("figure",{className:"urun-image-frame",children:[(0,te.jsx)("img",{className:"urun-image",src:e,alt:t}),n&&(0,te.jsx)("figcaption",{className:"urun-image-caption",children:n})]})}var L=require("zod"),J=require("react/jsx-runtime"),Ye=L.z.object({metrics:L.z.array(L.z.object({label:L.z.string(),value:L.z.union([L.z.string(),L.z.number()]),unit:L.z.string().optional()}))});function Ce(r){return{metrics:r.metrics.map(t=>({...t,displayValue:t.unit?`${t.value} ${t.unit}`:String(t.value)}))}}function Qe(r){let{metrics:e}=Ce(r);return(0,J.jsx)("div",{className:"urun-metrics-panel",children:e.map((t,n)=>(0,J.jsxs)("div",{className:"urun-metric-card",children:[(0,J.jsx)("div",{className:"urun-metric-label",children:t.label}),(0,J.jsx)("div",{className:"urun-metric-value",children:t.displayValue})]},n))})}var y=require("react"),sr=hr(require("video.js")),ft=require("video.js/dist/video-js.css");var W=require("react");var ne=require("react"),Cr=require("@urun-sh/core/internal");var xr=require("react/jsx-runtime"),er=(0,ne.createContext)(null);function rr(r){let e=(0,W.useContext)(er);if(!e)throw new Error("useTrack must be used within <SessionProvider> or <UrunProvider>");let[t,n]=(0,W.useState)(null);return(0,W.useEffect)(()=>{let s=e.getState()._transport;if(!s)return;let i=s.getTrackByName?.bind(s),a=i?.(r);a&&a.readyState!=="ended"&&n(a);let w=s.on("track",u=>{let m=i?.(r);m&&m.id!==u.id||(n(u),u.addEventListener("ended",()=>{n(null)}))});return()=>{w()}},[r,e]),t}var q=require("react/jsx-runtime");function tr(r){r.posterImage?.hide?.()}var Tr=`
|
|
1
|
+
"use strict";var mt=Object.create;var Ue=Object.defineProperty;var ft=Object.getOwnPropertyDescriptor;var gt=Object.getOwnPropertyNames;var ht=Object.getPrototypeOf,vt=Object.prototype.hasOwnProperty;var St=(e,r)=>{for(var t in r)Ue(e,t,{get:r[t],enumerable:!0})},mr=(e,r,t,n)=>{if(r&&typeof r=="object"||typeof r=="function")for(let o of gt(r))!vt.call(e,o)&&o!==t&&Ue(e,o,{get:()=>r[o],enumerable:!(n=ft(r,o))||n.enumerable});return e};var yt=(e,r,t)=>(t=e!=null?mt(ht(e)):{},mr(r||!e||!e.__esModule?Ue(t,"default",{value:e,enumerable:!0}):t,e)),bt=e=>mr(Ue({},"__esModule",{value:!0}),e);var qt={};St(qt,{ComponentRenderer:()=>Nr,DEFAULT_CAMERA_CONSTRAINTS:()=>dr,DEFAULT_LOG_CAP:()=>re,DEFAULT_VOICE_CONSTRAINTS:()=>cr,DocPatchForm:()=>Re,ImageFrame:()=>jr,ImageFrameSchema:()=>Dr,MetricsPanel:()=>Br,MetricsPanelSchema:()=>Fr,ProgressCard:()=>Lr,ProgressCardSchema:()=>_r,StatusBadge:()=>Ir,StatusBadgeSchema:()=>Or,TextStream:()=>Vr,TextStreamSchema:()=>qr,UrunAudio:()=>Oe,UrunAuthProvider:()=>Ze,UrunCamera:()=>rt,UrunControlSender:()=>it,UrunDocPanel:()=>st,UrunErrorBoundary:()=>ue,UrunEventSpine:()=>ut,UrunJwtProvider:()=>Sr,UrunProvider:()=>br,UrunSessionGate:()=>lt,UrunSessionStatus:()=>ct,UrunStreamTail:()=>ot,UrunVideo:()=>Gr,UrunVoice:()=>Yr,authMode:()=>ve,formatPayload:()=>ge,getUrunAudioContext:()=>Te,parseJsonObject:()=>je,pushCapped:()=>Z,registerComponent:()=>Ar,resumeUrunAudioContext:()=>Le,urunPublicEnv:()=>X,useApp:()=>xr,useChat:()=>Er,useCompletion:()=>Pr,useImageFrame:()=>sr,useMetricsPanel:()=>ar,useProgressCard:()=>tr,useRequest:()=>Cr,useSessionDoc:()=>De,useSessionPhase:()=>We,useSessionTrack:()=>nt,useStatusBadge:()=>nr,useStreamMessages:()=>Be,useTextStream:()=>or,useUrunAudioLevel:()=>tt,useUrunAuth:()=>we,usesWorkOSAuth:()=>hr});module.exports=bt(qt);var le=require("react");var fr=require("react"),he=require("react/jsx-runtime"),ue=class extends fr.Component{constructor(r){super(r),this.state={error:null}}static getDerivedStateFromError(r){return{error:r}}componentDidCatch(r,t){console.error("[urun] Error caught by UrunErrorBoundary:",r,t)}render(){if(this.state.error){let{fallback:r}=this.props;return typeof r=="function"?r(this.state.error):r||(0,he.jsxs)("div",{role:"status","aria-live":"polite",style:{padding:"16px",border:"1px solid rgba(17, 24, 39, 0.12)",borderRadius:"8px",background:"#ffffff",color:"#111827",fontFamily:'system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif',maxWidth:"360px"},children:[(0,he.jsx)("p",{style:{margin:0,fontWeight:600},children:"Connection interrupted"}),(0,he.jsx)("p",{style:{margin:"6px 0 0",color:"#4b5563"},children:"Reconnecting automatically."})]})}return this.props.children}};var gr=require("react"),Ee=(0,gr.createContext)(null);function ne(e){return e&&e.trim()?e.trim():void 0}function X(e){switch(e){case"NEXT_PUBLIC_AUTH_MODE":return ne(typeof process<"u"?process.env?.NEXT_PUBLIC_AUTH_MODE:void 0);case"NEXT_PUBLIC_AUTH_ENABLED":return ne(typeof process<"u"?process.env?.NEXT_PUBLIC_AUTH_ENABLED:void 0);case"NEXT_PUBLIC_SESSION_AUTH_PROVIDER":return ne(typeof process<"u"?process.env?.NEXT_PUBLIC_SESSION_AUTH_PROVIDER:void 0);case"NEXT_PUBLIC_SESSION_TOKEN":return ne(typeof process<"u"?process.env?.NEXT_PUBLIC_SESSION_TOKEN:void 0);case"NEXT_PUBLIC_URUN_JWT":return ne(typeof process<"u"?process.env?.NEXT_PUBLIC_URUN_JWT:void 0);case"VERCEL_ENV":return ne(typeof process<"u"?process.env?.VERCEL_ENV:void 0);default:return ne(typeof process<"u"?process.env?.[e]:void 0)}}function ve(){let e=X("NEXT_PUBLIC_AUTH_MODE")?.toLowerCase();return e==="jwt"||e==="customer-jwt"||e==="test-jwt"?"jwt":e==="workos"||X("VERCEL_ENV")==="production"?"workos":X("NEXT_PUBLIC_AUTH_ENABLED")==="false"?"jwt":"workos"}function hr(){return ve()==="workos"}var ce=require("react"),yr=require("react/jsx-runtime"),vr=(0,ce.createContext)(null);function Ze({getAccessToken:e,children:r}){let t=(0,ce.useMemo)(()=>({getAccessToken:e}),[e]);return(0,yr.jsx)(vr.Provider,{value:t,children:r})}var Sr=Ze;function we(){return(0,ce.useContext)(vr)}var Ae=require("react/jsx-runtime");function br({baseUrl:e,orgId:r,appId:t,jwt:n,authProvider:o,fallback:a,children:i}){let[d,u]=(0,le.useState)(),c=we(),h=X("NEXT_PUBLIC_SESSION_TOKEN")??X("NEXT_PUBLIC_URUN_JWT"),l=ve(),f=l==="workos"&&!n,R=n??(l==="jwt"?h:void 0)??d,x=o??X("NEXT_PUBLIC_SESSION_AUTH_PROVIDER"),T=f&&!R,b=(0,le.useMemo)(()=>({appId:t,baseUrl:e,orgId:r,jwt:R,getAccessToken:f?c?.getAccessToken:void 0,authProvider:x}),[t,c,e,x,R,r,f]);return(0,le.useEffect)(()=>{if(!f||!c)return;let g=!1,v=c;async function S(){try{let k=await v.getAccessToken();g||u(k??void 0)}catch{g||u(void 0)}}S();let U=window.setInterval(()=>{S()},6e4);return()=>{g=!0,window.clearInterval(U)}},[c,f]),(0,Ae.jsx)(ue,{fallback:a,children:T?(0,Ae.jsx)("div",{role:"status","aria-live":"polite",children:"Signing in..."}):(0,Ae.jsx)(Ee.Provider,{value:b,children:i})})}var G=require("react"),kr=require("@urun-sh/core");function kt(e,r){return`${e}:${JSON.stringify(r??{})}`}var Ye=class{constructor(r,t){this._doc=r;this._notify=t;this._unsubscribeChange=this._doc.on("change",()=>this._notify())}_doc;_notify;_unsubscribeChange;get(r,t){return this._doc.get(r,t)}set(r){this._doc.set(r),this._notify()}on(r,t){return this._doc.on(r,n=>t(n))}get synced(){return this._doc.synced}onSynced(r){return this._doc.onSynced(()=>{r(),this._notify()})}text(r){let t=this._doc.text(r),n=this._notify;return{append(o){t.append(o),n()},toString:()=>t.toString(),get length(){return t.length},on:(o,a)=>t.on(o,i=>{a(i),n()})}}dispose(){this._unsubscribeChange()}},Qe=class{constructor(r,t){this._stream=r;this._notify=t;this._unsubscribeTrack=this._stream.on("track",()=>this._notify())}_stream;_notify;_unsubscribeTrack;get track(){return this._stream.track}attach(r){return this._stream.attach(r)}attachVideo(r){return this._stream.attachVideo(r)}detach(){return this._stream.detach()}detachVideo(){return this._stream.detachVideo()}seek(r){return this._stream.seek(r)}chunks(r){return this._stream.chunks(r)}onSeeked(r){return this._stream.onSeeked(r)}on(r,t){return this._stream.on(r,t)}messages(){return this._stream.messages()}emit(r,t){return this._stream.emit(r,t)}dispose(){this._unsubscribeTrack()}},er=class{constructor(r,t){this._session=r;this._notify=t;this._unsubscribePhase=this._session.onPhase(()=>this._notify())}_session;_notify;_docs=new Map;_streams=new Map;_unsubscribePhase;_disposed=!1;get disposed(){return this._disposed}get id(){return this._session.id}get phase(){return this._session.phase}get status(){return this._session.status}onPhase(r){return this._session.onPhase(r)}whenLive(r){return this._session.whenLive(r)}request(r,t){return this._session.request(r,t)}requestStream(r,t){return this._session.requestStream(r,t)}complete(r,t){return this._session.complete(r,t)}get recordings(){return this._session.recordings}get artifacts(){return this._session.artifacts}get presence(){return this._session.presence}doc(r){let t=this._docs.get(r);return t||(t=new Ye(this._session.doc(r),this._notify),this._docs.set(r,t)),t}stream(r){let t=this._streams.get(r);return t||(t=new Qe(this._session.stream(r),this._notify),this._streams.set(r,t)),t}disconnect(){this._disposed=!0;for(let r of this._docs.values())r.dispose();for(let r of this._streams.values())r.dispose();this._docs.clear(),this._streams.clear(),this._unsubscribePhase(),this._session.disconnect(),this._notify()}};function xr(){let e=(0,G.useContext)(Ee);if(!e)throw new Error("useApp must be used within <UrunProvider>");if(!e.appId)throw new Error('useApp requires <UrunProvider appId="...">');let[,r]=(0,G.useReducer)(o=>o+1,0),t=(0,G.useRef)(new Map),n=(0,G.useMemo)(()=>(0,kr.App)(e.appId,{baseUrl:e.baseUrl,orgId:e.orgId,jwt:e.jwt,getAccessToken:e.getAccessToken,authProvider:e.authProvider}),[e.appId,e.baseUrl,e.orgId,e.jwt,e.getAccessToken,e.authProvider]);return(0,G.useMemo)(()=>new Proxy({},{get(o,a){if(typeof a=="string")return i=>{let d=kt(a,i),u=t.current.get(d);if(u&&!u.disposed)return u;let c=new er(n[a](i),r);return t.current.set(d,c),c}}}),[n])}var q=require("react");function de(e){let r=e;if(!r||typeof r.request!="function"||typeof r.requestStream!="function")throw new Error("This session does not support request/requestStream. Upgrade @urun-sh/core to a version that ships the request/response primitive.");return r}function xt(e){return e instanceof Error?e:new Error(String(e))}function Cr(e,r){let t=(0,q.useMemo)(()=>de(e),[e]),[n,o]=(0,q.useState)(void 0),[a,i]=(0,q.useState)(null),[d,u]=(0,q.useState)(!1),c=(0,q.useRef)(r);c.current=r;let h=(0,q.useRef)(0),l=(0,q.useRef)(null),f=(0,q.useRef)(!0);(0,q.useEffect)(()=>(f.current=!0,()=>{f.current=!1,l.current?.abort()}),[]);let R=(0,q.useCallback)(async b=>{l.current?.abort();let g=new AbortController;l.current=g;let v=++h.current,S=()=>f.current&&h.current===v;S()&&(u(!0),i(null));try{let U=await t.request(b,{...c.current,signal:g.signal});return S()&&(o(U),u(!1),c.current?.onSuccess?.(U)),U}catch(U){let k=xt(U);throw S()&&(i(k),u(!1),c.current?.onError?.(k)),k}},[t]),x=(0,q.useCallback)(b=>{R(b).catch(()=>{})},[R]),T=(0,q.useCallback)(()=>{h.current++,l.current?.abort(),l.current=null,o(void 0),i(null),u(!1)},[]);return{mutate:x,mutateAsync:R,data:n,error:a,isPending:d,reset:T}}var V=require("react");function Tr(e){return e instanceof Error?e:new Error(String(e))}var Ct=e=>typeof e=="string"?e:String(e);function Pr(e,r){let t=(0,V.useMemo)(()=>de(e),[e]),[n,o]=(0,V.useState)(""),[a,i]=(0,V.useState)(!1),[d,u]=(0,V.useState)(null),c=(0,V.useRef)(r);c.current=r;let h=(0,V.useRef)(0),l=(0,V.useRef)(null),f=(0,V.useRef)(!0);(0,V.useEffect)(()=>(f.current=!0,()=>{f.current=!1,l.current?.cancel(),l.current=null}),[]);let R=(0,V.useCallback)(()=>{h.current++,l.current?.cancel(),l.current=null,f.current&&i(!1)},[]),x=(0,V.useCallback)(async T=>{l.current?.cancel();let b=++h.current,g=()=>f.current&&h.current===b,v=c.current,S=v?.parseChunk??Ct,U=v?.buildPayload??(m=>({prompt:m}));g()&&(o(""),u(null),i(!0));let{parseChunk:k,buildPayload:z,onFinish:N,onError:s,...p}=v??{},y="",C;try{C=t.requestStream(U(T),p),l.current=C}catch(m){let w=Tr(m);g()&&(u(w),i(!1),v?.onError?.(w));return}try{for await(let m of C){if(h.current!==b)break;y+=S(m),g()&&o(y)}g()&&(i(!1),v?.onFinish?.(y))}catch(m){let w=Tr(m);g()&&(u(w),i(!1),v?.onError?.(w))}finally{l.current===C&&(l.current=null)}},[t]);return{completion:n,complete:x,stop:R,isStreaming:a,error:d}}var L=require("react");function Rr(e){return e instanceof Error?e:new Error(String(e))}var Tt=e=>typeof e=="string"?e:String(e),Ur=0;function rr(e){return Ur+=1,`${e}-${Ur}`}function Er(e,r){let t=(0,L.useMemo)(()=>de(e),[e]),[n,o]=(0,L.useState)(()=>(r?.initialMessages??[]).map(S=>({id:S.id??rr("msg"),role:S.role,content:S.content}))),[a,i]=(0,L.useState)(""),[d,u]=(0,L.useState)(!1),[c,h]=(0,L.useState)(null),l=(0,L.useRef)(r);l.current=r;let f=(0,L.useRef)(n);f.current=n;let R=(0,L.useRef)(a);R.current=a;let x=(0,L.useRef)(0),T=(0,L.useRef)(null),b=(0,L.useRef)(!0);(0,L.useEffect)(()=>(b.current=!0,()=>{b.current=!1,T.current?.cancel(),T.current=null}),[]);let g=(0,L.useCallback)(()=>{x.current++,T.current?.cancel(),T.current=null,b.current&&u(!1)},[]),v=(0,L.useCallback)(async S=>{let U=S===void 0,k=(U?R.current:S)??"";if(!k.trim())return;T.current?.cancel();let N=++x.current,s=()=>b.current&&x.current===N,p=l.current,y=p?.parseChunk??Tt,C={id:rr("msg"),role:"user",content:k},m={id:rr("msg"),role:"assistant",content:""},w=[...f.current,C].map(_=>({role:_.role,content:_.content})),P=[...f.current,C,m];f.current=P,o(P),U&&i(""),h(null),u(!0);let J=p?.buildPayload??(_=>({messages:_})),{initialMessages:Je,parseChunk:Xe,buildPayload:Ge,onFinish:Ke,onError:dt,...M}=p??{},D=_=>{o(H=>H.map(F=>F.id===m.id?{...F,content:_}:F))},ee="",j;try{j=t.requestStream(J(w),M),T.current=j}catch(_){let H=Rr(_);s()&&(h(H),u(!1),p?.onError?.(H));return}try{for await(let _ of j){if(x.current!==N)break;ee+=y(_),s()&&D(ee)}s()&&(u(!1),p?.onFinish?.({...m,content:ee}))}catch(_){let H=Rr(_);s()&&(h(H),u(!1),p?.onError?.(H))}finally{T.current===j&&(T.current=null)}},[t]);return{messages:n,input:a,setInput:i,sendMessage:v,stop:g,isStreaming:d,error:c}}var wr=new Map;function Ar(e,r,t){if(!t||typeof t.safeParse!="function")throw new Error(`registerComponent("${e}"): schema must be a valid Zod schema`);wr.set(e,{component:r,schema:t})}function Mr(e,r){let t=wr.get(e);if(!t)return{error:`Unknown component: "${e}"`};let n=t.schema.safeParse(r);return n.success?{Component:t.component,validatedProps:n.data}:{error:`Validation failed for "${e}": ${n.error.message}`}}var oe=require("react/jsx-runtime");function Nr({name:e,props:r,fallback:t}){let n=Mr(e,r);if(n.error)return console.warn(`[urun] ComponentRenderer: ${n.error}`),t?(0,oe.jsx)(oe.Fragment,{children:t}):(0,oe.jsx)("div",{className:"urun-component-error",role:"alert",children:(0,oe.jsx)("span",{className:"urun-component-error-text",children:n.error})});let o=n.Component;return(0,oe.jsx)(o,{...n.validatedProps})}var pe=require("zod"),se=require("react/jsx-runtime"),_r=pe.z.object({step:pe.z.number().min(0),total:pe.z.number().min(1),label:pe.z.string().optional(),variant:pe.z.enum(["default","success","error"]).default("default")});function tr(e){let{step:r,total:t,label:n,variant:o="default"}=e,a=Math.min(r/t*100,100),i=r>=t;return{step:r,total:t,label:n,variant:o,percentage:a,isComplete:i}}function Lr(e){let{step:r,total:t,label:n,variant:o,percentage:a}=tr(e);return(0,se.jsxs)("div",{className:"urun-progress-card","data-variant":o,children:[n&&(0,se.jsx)("div",{className:"urun-progress-label",children:n}),(0,se.jsx)("div",{className:"urun-progress-bar",children:(0,se.jsx)("div",{className:"urun-progress-fill",style:{width:`${a}%`}})}),(0,se.jsxs)("div",{className:"urun-progress-text",children:[r,"/",t]})]})}var Me=require("zod"),Se=require("react/jsx-runtime"),Or=Me.z.object({state:Me.z.enum(["thinking","generating","idle","error"]),message:Me.z.string().optional()}),Pt={thinking:"Thinking...",generating:"Generating...",idle:"Idle",error:"Error"};function nr(e){let{state:r,message:t}=e,n=r==="thinking"||r==="generating",o=t??Pt[r]??r;return{state:r,message:o,isActive:n}}function Ir(e){let{state:r,message:t,isActive:n}=nr(e);return(0,Se.jsxs)("span",{className:"urun-status-badge","data-state":r,children:[(0,Se.jsx)("span",{className:`urun-status-indicator${n?" urun-status-pulse":""}`}),(0,Se.jsx)("span",{className:"urun-status-message",children:t})]})}var ye=require("react"),Ne=require("zod"),be=require("react/jsx-runtime"),qr=Ne.z.object({text:Ne.z.string(),streaming:Ne.z.boolean().default(!1)});function or(e){let{text:r,streaming:t=!1}=e,n=r.length===0;return{text:r,streaming:t,isEmpty:n}}function Vr(e){let{text:r,streaming:t}=or(e),n=(0,ye.useRef)(null),o=(0,ye.useRef)(0);return(0,ye.useEffect)(()=>{let a=n.current;a&&r.length!==o.current&&(a.textContent=r,o.current=r.length)},[r]),(0,be.jsxs)("div",{className:"urun-text-stream",children:[(0,be.jsx)("span",{ref:n,className:"urun-text-content"}),t&&(0,be.jsx)("span",{className:"urun-text-cursor"})]})}var ke=require("zod"),xe=require("react/jsx-runtime"),Dr=ke.z.object({src:ke.z.string().url(),alt:ke.z.string().optional(),caption:ke.z.string().optional()});function sr(e){let{src:r,alt:t,caption:n}=e;return{src:r,alt:t??"",caption:n}}function jr(e){let{src:r,alt:t,caption:n}=sr(e);return(0,xe.jsxs)("figure",{className:"urun-image-frame",children:[(0,xe.jsx)("img",{className:"urun-image",src:r,alt:t}),n&&(0,xe.jsx)("figcaption",{className:"urun-image-caption",children:n})]})}var K=require("zod"),me=require("react/jsx-runtime"),Fr=K.z.object({metrics:K.z.array(K.z.object({label:K.z.string(),value:K.z.union([K.z.string(),K.z.number()]),unit:K.z.string().optional()}))});function ar(e){return{metrics:e.metrics.map(t=>({...t,displayValue:t.unit?`${t.value} ${t.unit}`:String(t.value)}))}}function Br(e){let{metrics:r}=ar(e);return(0,me.jsx)("div",{className:"urun-metrics-panel",children:r.map((t,n)=>(0,me.jsxs)("div",{className:"urun-metric-card",children:[(0,me.jsx)("div",{className:"urun-metric-label",children:t.label}),(0,me.jsx)("div",{className:"urun-metric-value",children:t.displayValue})]},n))})}var O=require("react"),Jr=yt(require("video.js")),vn=require("video.js/dist/video-js.css");var fe=require("react");var Ce=require("react"),Rt=require("@urun-sh/core/internal");var Ut=require("react/jsx-runtime"),zr=(0,Ce.createContext)(null);function Hr(e){let r=(0,fe.useContext)(zr);if(!r)throw new Error("useTrack must be used within <SessionProvider> or <UrunProvider>");let[t,n]=(0,fe.useState)(null);return(0,fe.useEffect)(()=>{let o=r.getState()._transport;if(!o)return;let a=o.getTrackByName?.bind(o),i=a?.(e);i&&i.readyState!=="ended"&&n(i);let d=o.on("track",u=>{let c=a?.(e);c&&c.id!==u.id||(n(u),u.addEventListener("ended",()=>{n(null)}))});return()=>{d()}},[e,r]),t}var $=require("react/jsx-runtime");function $r(e){e.posterImage?.hide?.()}var Et=`
|
|
2
2
|
[data-urun-video]{width:100%;height:100%}
|
|
3
3
|
[data-urun-video] .video-js,[data-urun-video] .vjs-tech{width:100%;height:100%}
|
|
4
4
|
[data-urun-video] .vjs-tech{object-fit:contain}
|
|
@@ -6,4 +6,4 @@
|
|
|
6
6
|
.urun-video-live.vjs-has-started .vjs-loading-spinner,
|
|
7
7
|
.urun-video-live.vjs-has-started .vjs-big-play-button{display:none !important}
|
|
8
8
|
.urun-video-live .vjs-poster{background-color:transparent}
|
|
9
|
-
`,nr="urun-video-critical-css";function Pr(){if(typeof document>"u"||document.getElementById(nr))return;let r=document.createElement("style");r.id=nr,r.textContent=Tr,document.head.appendChild(r)}var Er=["playToggle","volumePanel","fullscreenToggle"],wr=["playToggle","volumePanel","currentTimeDisplay","timeDivider","durationDisplay","progressControl","remainingTimeDisplay","fullscreenToggle"],or=(0,y.forwardRef)(function(e,t){let{track:n,stream:s,src:i,type:a="video/mp4",className:w,videoClassName:u,poster:m,controls:R=!0,autoPlay:c=!0,muted:p=!0,onVideoElement:P,onPlayerReady:_,children:C}=e,b=typeof i=="string"&&i.length>0,f=!b,v=(0,y.useRef)(null),g=(0,y.useRef)(null),[U,E]=(0,y.useState)(!1),pe=(0,y.useCallback)(o=>{v.current=o,typeof t=="function"?t(o):t&&(t.current=o),P?.(o)},[t,P]);(0,y.useImperativeHandle)(t,()=>v.current,[]);let I=(0,y.useCallback)(()=>{let o=v.current;if(!o||!o.srcObject&&!o.src)return;p&&(o.muted=!0,o.defaultMuted=!0),o.setAttribute("playsinline",""),o.setAttribute("webkit-playsinline","");let d=o.play();d&&typeof d.then=="function"&&d.then(()=>E(!1)).catch(S=>{(S instanceof Error?S.name:String(S))!=="AbortError"&&E(!0)})},[p]);return(0,y.useEffect)(()=>{if(typeof document>"u")return;let o=v.current;if(!o)return;Pr(),p&&(o.muted=!0,o.defaultMuted=!0,o.setAttribute("muted","")),o.autoplay=c,o.setAttribute("playsinline",""),o.setAttribute("webkit-playsinline","");let d=(0,sr.default)(o,{controls:R,autoplay:c,muted:p,playsinline:!0,preload:"auto",fluid:!1,bigPlayButton:!0,poster:m,userActions:{click:!0,doubleClick:!1,hotkeys:!1},controlBar:{children:f?Er:wr}});f&&d.addClass("urun-video-live");let S=()=>E(!1),x=()=>{d.hasStarted(!0),tr(d),S()},l=()=>{f&&I()};return o.addEventListener("playing",x),o.addEventListener("loadedmetadata",l),f&&o.addEventListener("pause",l),g.current=d,_?.(d),()=>{o.removeEventListener("playing",x),o.removeEventListener("loadedmetadata",l),o.removeEventListener("pause",l),_?.(null),g.current&&(g.current.dispose(),g.current=null)}},[f]),(0,y.useEffect)(()=>{if(!b)return;let o=g.current;if(!o)return;let d=o.tech?.(!0)?.el?.();d&&(d.srcObject=null),o.src({src:i,type:a}),c&&I()},[b,i,a,c,I]),(0,y.useEffect)(()=>{if(!f)return;let o=g.current;if(!o)return;let d=n??null,S=s??null;!S&&d&&(S=new MediaStream([d]));let x=o.tech?.(!0)?.el?.()??v.current;if(!x)return;if(!S){x.srcObject=null,E(!1);return}x.srcObject=S,I();let l=S.getVideoTracks()[0]??d??null,N=()=>{o.hasStarted(!0),tr(o),I()},K=()=>{x.srcObject=null,E(!1)};return l&&(l.addEventListener("unmute",N),l.addEventListener("ended",K),l.muted||N()),()=>{l&&(l.removeEventListener("unmute",N),l.removeEventListener("ended",K))}},[f,n,s,I]),(0,q.jsxs)("div",{className:w,style:{position:"relative",width:"100%",height:"100%"},"data-urun-video":"","data-urun-video-mode":f?"live":"vod",children:[(0,q.jsx)("video",{ref:pe,className:["video-js","vjs-default-skin",u].filter(Boolean).join(" "),playsInline:!0}),U&&(0,q.jsx)("button",{type:"button",onClick:I,"aria-label":"Tap to play",style:{position:"absolute",inset:0,zIndex:30,display:"flex",alignItems:"center",justifyContent:"center",background:"rgba(0,0,0,0.6)",border:0,cursor:"pointer",color:"#fff"},children:(0,q.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:8,borderRadius:999,border:"1px solid rgba(255,255,255,0.2)",background:"rgba(255,255,255,0.1)",padding:"10px 20px",fontSize:14,fontWeight:500},children:[(0,q.jsx)("svg",{viewBox:"0 0 24 24",fill:"currentColor",width:16,height:16,"aria-hidden":!0,children:(0,q.jsx)("path",{d:"M8 5v14l11-7z"})}),"Tap to play"]})}),C]})}),_r=(0,y.forwardRef)(function({name:e,...t},n){let s=rr(e);return(0,q.jsx)(or,{ref:n,...t,track:s})}),ir=(0,y.forwardRef)(function(e,t){return!!e.name&&!e.track&&!e.stream&&!(typeof e.src=="string"&&e.src)?(0,q.jsx)(_r,{ref:t,...e,name:e.name}):(0,q.jsx)(or,{ref:t,...e})});0&&(module.exports={ComponentRenderer,ImageFrame,ImageFrameSchema,MetricsPanel,MetricsPanelSchema,ProgressCard,ProgressCardSchema,StatusBadge,StatusBadgeSchema,TextStream,TextStreamSchema,UrunAuthProvider,UrunErrorBoundary,UrunJwtProvider,UrunProvider,UrunVideo,authMode,registerComponent,urunPublicEnv,useApp,useChat,useCompletion,useImageFrame,useMetricsPanel,useProgressCard,useRequest,useStatusBadge,useTextStream,useUrunAuth,usesWorkOSAuth});
|
|
9
|
+
`,Wr="urun-video-critical-css";function wt(){if(typeof document>"u"||document.getElementById(Wr))return;let e=document.createElement("style");e.id=Wr,e.textContent=Et,document.head.appendChild(e)}var At=["playToggle","volumePanel","fullscreenToggle"],Mt=["playToggle","volumePanel","currentTimeDisplay","timeDivider","durationDisplay","progressControl","remainingTimeDisplay","fullscreenToggle"],Xr=(0,O.forwardRef)(function(r,t){let{track:n,stream:o,src:a,type:i="video/mp4",className:d,videoClassName:u,poster:c,controls:h=!0,autoPlay:l=!0,muted:f=!0,onVideoElement:R,onPlayerReady:x,children:T}=r,b=typeof a=="string"&&a.length>0,g=!b,v=(0,O.useRef)(null),S=(0,O.useRef)(null),[U,k]=(0,O.useState)(!1),z=(0,O.useCallback)(s=>{v.current=s,typeof t=="function"?t(s):t&&(t.current=s),R?.(s)},[t,R]);(0,O.useImperativeHandle)(t,()=>v.current,[]);let N=(0,O.useCallback)(()=>{let s=v.current;if(!s||!s.srcObject&&!s.src)return;f&&(s.muted=!0,s.defaultMuted=!0),s.setAttribute("playsinline",""),s.setAttribute("webkit-playsinline","");let p=s.play();p&&typeof p.then=="function"&&p.then(()=>k(!1)).catch(y=>{(y instanceof Error?y.name:String(y))!=="AbortError"&&k(!0)})},[f]);return(0,O.useEffect)(()=>{if(typeof document>"u")return;let s=v.current;if(!s)return;wt(),f&&(s.muted=!0,s.defaultMuted=!0,s.setAttribute("muted","")),s.autoplay=l,s.setAttribute("playsinline",""),s.setAttribute("webkit-playsinline","");let p=(0,Jr.default)(s,{controls:h,autoplay:l,muted:f,playsinline:!0,preload:"auto",fluid:!1,bigPlayButton:!0,poster:c,userActions:{click:!0,doubleClick:!1,hotkeys:!1},controlBar:{children:g?At:Mt}});g&&p.addClass("urun-video-live");let y=()=>k(!1),C=()=>{p.hasStarted(!0),$r(p),y()},m=()=>{g&&N()};return s.addEventListener("playing",C),s.addEventListener("loadedmetadata",m),g&&s.addEventListener("pause",m),S.current=p,x?.(p),()=>{s.removeEventListener("playing",C),s.removeEventListener("loadedmetadata",m),s.removeEventListener("pause",m),x?.(null),S.current&&(S.current.dispose(),S.current=null)}},[g]),(0,O.useEffect)(()=>{if(!b)return;let s=S.current;if(!s)return;let p=s.tech?.(!0)?.el?.();p&&(p.srcObject=null),s.src({src:a,type:i}),l&&N()},[b,a,i,l,N]),(0,O.useEffect)(()=>{if(!g)return;let s=S.current;if(!s)return;let p=n??null,y=o??null;!y&&p&&(y=new MediaStream([p]));let C=s.tech?.(!0)?.el?.()??v.current;if(!C)return;if(!y){C.srcObject=null,k(!1);return}C.srcObject=y,N();let m=y.getVideoTracks()[0]??p??null,w=()=>{s.hasStarted(!0),$r(s),N()},P=()=>{C.srcObject=null,k(!1)};return m&&(m.addEventListener("unmute",w),m.addEventListener("ended",P),m.muted||w()),()=>{m&&(m.removeEventListener("unmute",w),m.removeEventListener("ended",P))}},[g,n,o,N]),(0,$.jsxs)("div",{className:d,style:{position:"relative",width:"100%",height:"100%"},"data-urun-video":"","data-urun-video-mode":g?"live":"vod",children:[(0,$.jsx)("video",{ref:z,className:["video-js","vjs-default-skin",u].filter(Boolean).join(" "),playsInline:!0}),U&&(0,$.jsx)("button",{type:"button",onClick:N,"aria-label":"Tap to play",style:{position:"absolute",inset:0,zIndex:30,display:"flex",alignItems:"center",justifyContent:"center",background:"rgba(0,0,0,0.6)",border:0,cursor:"pointer",color:"#fff"},children:(0,$.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:8,borderRadius:999,border:"1px solid rgba(255,255,255,0.2)",background:"rgba(255,255,255,0.1)",padding:"10px 20px",fontSize:14,fontWeight:500},children:[(0,$.jsx)("svg",{viewBox:"0 0 24 24",fill:"currentColor",width:16,height:16,"aria-hidden":!0,children:(0,$.jsx)("path",{d:"M8 5v14l11-7z"})}),"Tap to play"]})}),T]})}),Nt=(0,O.forwardRef)(function({name:r,...t},n){let o=Hr(r);return(0,$.jsx)(Xr,{ref:n,...t,track:o})}),Gr=(0,O.forwardRef)(function(r,t){return!!r.name&&!r.track&&!r.stream&&!(typeof r.src=="string"&&r.src)?(0,$.jsx)(Nt,{ref:t,...r,name:r.name}):(0,$.jsx)(Xr,{ref:t,...r})});var A=require("react");var _e=null;function _t(){if(typeof window>"u")return null;let e=window;return e.AudioContext??e.webkitAudioContext??null}function Te(){if(_e)return _e;let e=_t();return e?(_e=new e,_e):null}function Le(){let e=Te();e&&e.state==="suspended"&&e.resume().catch(()=>{})}var Zr=require("react/jsx-runtime"),Lt=1e3,Kr=200;function ir(...e){console.debug("[urun-audio]",...e)}var Oe=(0,A.forwardRef)(function(r,t){let{session:n,stream:o="audio",track:a,controls:i=!1,className:d,onTrack:u,onUnlockChange:c,onAudioElement:h}=r,l=(0,A.useRef)(null),f=(0,A.useRef)(null),R=(0,A.useRef)(null),x=(0,A.useRef)(null),T=(0,A.useRef)(u);T.current=u;let b=(0,A.useRef)(c);b.current=c;let g=(0,A.useCallback)(s=>{R.current!==s&&(R.current=s,b.current?.(s))},[]),v=(0,A.useCallback)(()=>{if(typeof MediaStream>"u")return null;f.current||(f.current=new MediaStream);let s=l.current;return s&&s.srcObject!==f.current&&(s.srcObject=f.current),f.current},[]),S=(0,A.useCallback)(s=>{let p=l.current;if(!p)return;let y=p.play();!y||typeof y.then!="function"||y.then(()=>{p.muted||g(!0)}).catch(C=>{let m=C instanceof Error?C.name:String(C);if(m==="AbortError"){ir(`play() aborted (${s}); retrying in ${Kr}ms`),x.current&&clearTimeout(x.current),x.current=setTimeout(()=>{x.current=null,S(`${s}:retry`)},Kr);return}if(m==="NotAllowedError"){ir(`play() blocked pending a user gesture (${s})`),g(!1);return}ir(`play() failed (${s})`,C)})},[g]),U=(0,A.useCallback)(s=>{let p=v();if(p){for(let y of p.getAudioTracks())y!==s&&p.removeTrack(y);s&&!p.getAudioTracks().includes(s)&&p.addTrack(s),s&&S("track-attach"),T.current?.(s)}},[v,S]),k=(0,A.useCallback)(()=>{let s=l.current;s&&(v(),s.muted=!1,S("gesture"),Le(),g(!0))},[v,S,g]);(0,A.useImperativeHandle)(t,()=>({unlock:k,get unlocked(){return R.current===!0},get element(){return l.current}}),[k]);let z=(0,A.useCallback)(s=>{l.current=s,s&&(s.setAttribute("playsinline",""),s.setAttribute("webkit-playsinline",""),v()),h?.(s)},[v,h]),N=a!==void 0;return(0,A.useEffect)(()=>{if(N){U(a??null);return}if(!n)return;let s=n.stream(o),p=()=>{let P=f.current;return P?P.getAudioTracks()[0]??null:null},y=P=>{if(P!==p()&&(U(P),P)){let J=()=>{p()===P&&U(null)};P.addEventListener("ended",J)}},C=s.track;C&&C.readyState==="live"&&y(C);let m=s.on("track",P=>{P&&P.readyState!=="live"||y(P)}),w=setInterval(()=>{let P=s.track;P&&P.readyState==="live"&&y(P)},Lt);return()=>{m(),clearInterval(w)}},[n,o,N,a,U]),(0,A.useEffect)(()=>()=>{x.current&&clearTimeout(x.current)},[]),(0,Zr.jsx)("audio",{ref:z,className:d,autoPlay:!0,playsInline:!0,controls:i,"data-urun-audio":""})});var I=require("react"),ur=require("@urun-sh/core");var Qr=require("react/jsx-runtime"),cr={channelCount:1,echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0};function Ot(...e){console.debug("[urun-voice]",...e)}var Yr=(0,I.forwardRef)(function(r,t){let{session:n,stream:o="audio",constraints:a=cr,connectTimeoutMs:i,attempts:d=3,retryDelayMs:u=1500,onActiveChange:c,onError:h,onMicStream:l,onTrack:f,onUnlockChange:R}=r,x=(0,I.useRef)(null),T=(0,I.useRef)(null),b=(0,I.useRef)(!1),g=(0,I.useRef)(c);g.current=c;let v=(0,I.useRef)(h);v.current=h;let S=(0,I.useRef)(l);S.current=l;let U=(0,I.useCallback)(s=>{b.current!==s&&(b.current=s,g.current?.(s))},[]),k=(0,I.useCallback)(()=>{let s=T.current;if(s){for(let p of s.getTracks())p.stop();T.current=null,S.current?.(null)}},[]),z=(0,I.useCallback)(async()=>{k(),U(!1),await n.stream(o).detach().catch(()=>{})},[n,o,k,U]),N=(0,I.useCallback)(async()=>{x.current?.unlock();let s;try{s=await navigator.mediaDevices.getUserMedia({audio:a,video:!1})}catch(m){let w=(0,ur.sessionFailureFromMediaError)(m,n.status);throw v.current?.(w),w}k(),T.current=s,S.current?.(s);let p=s.getAudioTracks()[0];if(!p){k();let m=(0,ur.sessionFailureFromMediaError)(Object.assign(new Error("no microphone audio track"),{name:"NotFoundError"}),n.status);throw v.current?.(m),m}n.connect?.();let y;for(let m=1;m<=d;m++)try{await n.whenLive(i!==void 0?{timeout:i}:void 0),await n.stream(o).attach(p),U(!0);return}catch(w){y=w,Ot(`start attempt ${m}/${d} failed`,w),m<d&&await new Promise(P=>setTimeout(P,u))}k(),U(!1);let C=y instanceof Error?y:new Error(String(y??"voice start failed"));throw v.current?.(C),C},[n,o,a,i,d,u,k,U]);return(0,I.useImperativeHandle)(t,()=>({start:N,stop:z,unlock:()=>x.current?.unlock(),get active(){return b.current},get micStream(){return T.current},get audio(){return x.current}}),[N,z]),(0,I.useEffect)(()=>k,[k]),(0,Qr.jsx)(Oe,{ref:x,session:n,stream:o,onTrack:f,onUnlockChange:R})});var lr=require("@urun-sh/core"),E=require("react"),Ie=require("react/jsx-runtime"),dr={width:{ideal:960},height:{ideal:720},frameRate:{ideal:8}};function et(...e){console.debug("[urun-camera]",...e)}var rt=(0,E.forwardRef)(function(r,t){let{session:n,stream:o="video",constraints:a,facingMode:i="environment",mirror:d="auto",connectTimeoutMs:u,preview:c=!0,className:h,videoClassName:l,onActiveChange:f,onError:R,onStream:x,onTrack:T,children:b}=r,g=(0,E.useRef)(null),v=(0,E.useRef)(null),S=(0,E.useRef)(null),U=(0,E.useRef)(!1),k=(0,E.useRef)(i),[z,N]=(0,E.useState)(i),s=(0,E.useRef)(f);s.current=f;let p=(0,E.useRef)(R);p.current=R;let y=(0,E.useRef)(x);y.current=x;let C=(0,E.useRef)(T);C.current=T;let m=(0,E.useCallback)(M=>{U.current!==M&&(U.current=M,s.current?.(M))},[]),w=(0,E.useCallback)(M=>{let D=g.current;D&&(D.muted=!0,D.srcObject=M,M&&D.play()?.catch?.(ee=>et("preview play() failed",ee)))},[]),P=(0,E.useCallback)(()=>{S.current?.(),S.current=null;let M=v.current;if(M){for(let D of M.getTracks())D.stop();v.current=null,y.current?.(null),C.current?.(null)}w(null)},[w]),J=(0,E.useCallback)(async M=>{let D=v.current,ee=S.current,j;try{j=await navigator.mediaDevices.getUserMedia({video:{...dr,...a,facingMode:M},audio:!1})}catch(F){let te=(0,lr.sessionFailureFromMediaError)(F,n.status);throw p.current?.(te),te}let _=j.getVideoTracks()[0];if(!_){for(let te of j.getTracks())te.stop();let F=(0,lr.sessionFailureFromMediaError)(Object.assign(new Error("no camera video track"),{name:"NotFoundError"}),n.status);throw p.current?.(F),F}v.current=j,k.current=M,N(M),w(j),y.current?.(j);let H=()=>{v.current===j&&(et("camera track ended (device removed or permission revoked)"),P(),m(!1))};_.addEventListener("ended",H),S.current=()=>_.removeEventListener("ended",H);try{n.connect?.(),await n.whenLive(u!==void 0?{timeout:u}:void 0),await n.stream(o).attachVideo(_)}catch(F){_.removeEventListener("ended",H);for(let pt of j.getTracks())pt.stop();v.current===j&&(v.current=D,S.current=ee,w(D),y.current?.(D));let te=F instanceof Error?F:new Error(String(F));throw p.current?.(te),te}if(D&&D!==j){ee?.();for(let F of D.getTracks())F.stop()}C.current?.(_),m(!0)},[n,o,a,u,w,P,m]),Je=(0,E.useCallback)(M=>J(M?.facingMode??k.current),[J]),Xe=(0,E.useCallback)(async M=>{U.current&&k.current===M||await J(M)},[J]),Ge=(0,E.useCallback)(()=>J(k.current==="environment"?"user":"environment"),[J]),Ke=(0,E.useCallback)(async()=>{P(),m(!1),await n.stream(o).detachVideo().catch(()=>{})},[n,o,P,m]);return(0,E.useImperativeHandle)(t,()=>({start:Je,stop:Ke,flip:Ge,setFacingMode:Xe,get active(){return U.current},get facingMode(){return k.current},get stream(){return v.current},get element(){return g.current}}),[Je,Ke,Ge,Xe]),(0,E.useEffect)(()=>P,[P]),c?(0,Ie.jsxs)("div",{className:h,style:{position:"relative",width:"100%",height:"100%"},"data-urun-camera":"","data-urun-camera-facing":z,children:[(0,Ie.jsx)("video",{ref:g,className:l,autoPlay:!0,muted:!0,playsInline:!0,style:{width:"100%",height:"100%",objectFit:"contain",...(d==="auto"?z==="user":d)?{transform:"scaleX(-1)"}:{}}}),b]}):null});var qe=require("react");var pr={level:0,speaking:!1};function tt(e,r={}){let{fftSize:t=512,intervalMs:n=100,speakingThreshold:o=.02}=r,[a,i]=(0,qe.useState)(pr);return(0,qe.useEffect)(()=>{if(!e){i(pr);return}let d=Te();if(!d||typeof MediaStream>"u")return;let u;e instanceof MediaStream?u=e:(u=new MediaStream,u.addTrack(e));let c,h;try{c=d.createMediaStreamSource(u),h=d.createAnalyser(),h.fftSize=t,c.connect(h)}catch{return}let l=new Uint8Array(h.fftSize),R=setInterval(()=>{h.getByteTimeDomainData(l);let x=0;for(let b=0;b<l.length;b++){let g=(l[b]-128)/128;x+=g*g}let T=Math.sqrt(x/l.length);i(b=>{let g=T>o;return Math.abs(b.level-T)<.005&&b.speaking===g?b:{level:T,speaking:g}})},n);return()=>{clearInterval(R),c.disconnect(),i(pr)}},[e,t,n,o]),a}var Ve=require("react");function nt(e,r){let[t,n]=(0,Ve.useState)(null);return(0,Ve.useEffect)(()=>{if(!e||!r){n(null);return}let o=e.stream(r);return n(o.track),o.on("track",n)},[e,r]),t}var ae=require("react");function De(e,r){let[t,n]=(0,ae.useState)(null),[o,a]=(0,ae.useState)(!1);(0,ae.useEffect)(()=>{if(!e||!r){n(null),a(!1);return}let d=e.doc(r);n(d.get()??{}),a(d.synced);let u=d.on("change",h=>n(h)),c=d.onSynced(()=>a(!0));return()=>{u(),c()}},[e,r]);let i=(0,ae.useCallback)(d=>{e&&r&&e.doc(r).set(d)},[e,r]);return{snapshot:t,synced:o,set:i}}var Fe=require("react");var re=200;function Z(e,r,t=200){let n=[...e,r];return n.length>t?n.slice(n.length-t):n}function ge(e){if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return String(e)}}function je(e){let r=e.trim();if(!r)return{ok:!1,error:"Enter a JSON object."};let t;try{t=JSON.parse(r)}catch(n){return{ok:!1,error:n instanceof Error?n.message:"Invalid JSON."}}return t===null||typeof t!="object"||Array.isArray(t)?{ok:!1,error:"The payload must be a JSON object."}:{ok:!0,value:t}}function Be(e,r,t={}){let n=t.cap??200,[o,a]=(0,Fe.useState)([]);return(0,Fe.useEffect)(()=>{if(a([]),!e||!r)return;let i=!0,d=e.stream(r).messages()[Symbol.asyncIterator]();return(async()=>{for(;;){let u=await d.next();if(!i||u.done)break;a(c=>Z(c,{at:Date.now(),payload:u.value},n))}})(),()=>{i=!1,d.return?.()}},[e,r,n]),o}var W=require("react/jsx-runtime");function ot({session:e,name:r,cap:t,className:n}){let o=Be(e,r,{cap:t});return(0,W.jsxs)("div",{className:["urun-stream-tail",n].filter(Boolean).join(" "),children:[(0,W.jsxs)("div",{className:"urun-stream-tail-meta",children:[(0,W.jsx)("code",{children:r}),(0,W.jsxs)("span",{className:"urun-stream-tail-count",children:[o.length," messages"]})]}),(0,W.jsx)("div",{className:"urun-stream-tail-log",children:o.length===0?(0,W.jsxs)("span",{className:"urun-stream-tail-empty",children:["Waiting for ",(0,W.jsx)("code",{children:r})," messages\u2026"]}):o.map((a,i)=>(0,W.jsxs)("div",{className:"urun-stream-tail-line",children:[(0,W.jsx)("span",{className:"urun-stream-tail-time",children:new Date(a.at).toLocaleTimeString()})," ",ge(a.payload)]},`${a.at}-${i}`))})]})}var Pe=require("react");var B=require("react/jsx-runtime");function Re({placeholder:e,buttonLabel:r,disabled:t,onApply:n}){let[o,a]=(0,Pe.useState)(""),[i,d]=(0,Pe.useState)(null),u=(0,Pe.useCallback)(()=>{let c=je(o);if(!c.ok){d(c.error);return}d(null),n(c.value,o.trim()),a("")},[o,n]);return(0,B.jsxs)("div",{className:"urun-doc-patch",children:[(0,B.jsx)("textarea",{className:"urun-doc-patch-input",value:o,onChange:c=>a(c.target.value),placeholder:e,rows:3}),(0,B.jsxs)("div",{className:"urun-doc-patch-actions",children:[(0,B.jsx)("button",{type:"button",className:"urun-doc-patch-button",disabled:t||!o.trim(),onClick:u,children:r}),i?(0,B.jsx)("span",{className:"urun-doc-patch-error",role:"alert",children:i}):null]})]})}function st({session:e,docKey:r,editable:t=!0,patchPlaceholder:n='{"desired": {"prompt": {"text": "a sunset"}}}',className:o}){let{snapshot:a,synced:i,set:d}=De(e,r);return(0,B.jsxs)("div",{className:["urun-doc-panel",o].filter(Boolean).join(" "),children:[(0,B.jsxs)("div",{className:"urun-doc-panel-meta",children:[(0,B.jsx)("code",{children:r}),(0,B.jsx)("span",{className:"urun-doc-panel-synced","data-synced":i?"true":"false",children:i?"synced":"syncing\u2026"})]}),(0,B.jsx)("pre",{className:"urun-doc-panel-snapshot",children:JSON.stringify(a??{},null,2)}),t?(0,B.jsx)(Re,{placeholder:n,buttonLabel:"Apply patch",disabled:!e,onApply:u=>d(u)}):null]})}var ze=require("react");var Y=require("react/jsx-runtime");function at(e,r=600){return e.length>r?`${e.slice(0,r)}\u2026`:e}function it({session:e,docKey:r="control",cap:t=200,className:n}){let[o,a]=(0,ze.useState)([]);return(0,ze.useEffect)(()=>(a([]),e?e.doc(r).on("change",d=>{a(u=>Z(u,{at:Date.now(),direction:"in",text:at(ge(d))},t))}):void 0),[e,r,t]),(0,Y.jsxs)("div",{className:["urun-control-sender",n].filter(Boolean).join(" "),children:[(0,Y.jsx)(Re,{placeholder:'{"desired": {"settings": {"values": {}}}}',buttonLabel:`Send to ${r}`,disabled:!e,onApply:(i,d)=>{e?.doc(r).set(i),a(u=>Z(u,{at:Date.now(),direction:"out",text:at(d)},t))}}),(0,Y.jsx)("div",{className:"urun-control-sender-log",children:o.length===0?(0,Y.jsx)("span",{className:"urun-control-sender-empty",children:"Nothing yet."}):[...o].reverse().map((i,d)=>(0,Y.jsxs)("div",{className:"urun-control-sender-line","data-direction":i.direction,children:[(0,Y.jsx)("span",{className:"urun-control-sender-dir",children:i.direction==="out"?"sent":"change"})," ",(0,Y.jsx)("span",{className:"urun-control-sender-time",children:new Date(i.at).toLocaleTimeString()})," ",i.text]},`${i.at}-${d}`))})]})}var He=require("react");var ie=require("react/jsx-runtime");function ut({session:e,trackNames:r=["video","audio"],docKeys:t=["control"],cap:n=200,className:o}){let[a,i]=(0,He.useState)([]),d=r.join(","),u=t.join(",");return(0,He.useEffect)(()=>{if(i([]),!e)return;let c=(l,f)=>i(R=>Z(R,{at:Date.now(),kind:l,text:f},n)),h=[];h.push(e.onPhase(l=>c("phase",`phase \u2192 ${l.name}`)));for(let l of r){let f=e.stream(l);h.push(f.on("track",R=>c("track",`${l}: ${R?"track arrived":"track ended"}`)))}for(let l of t){let f=e.doc(l);h.push(f.on("change",()=>c("doc",`${l} changed`)))}return()=>h.forEach(l=>l())},[e,d,u,n]),(0,ie.jsx)("div",{className:["urun-event-spine",o].filter(Boolean).join(" "),children:a.length===0?(0,ie.jsx)("span",{className:"urun-event-spine-empty",children:"No activity yet \u2014 the spine fills as the session moves through its lifecycle."}):[...a].reverse().map((c,h)=>(0,ie.jsxs)("div",{className:"urun-event-spine-line","data-kind":c.kind,children:[(0,ie.jsx)("span",{className:"urun-event-spine-kind",children:c.kind})," ",(0,ie.jsx)("span",{className:"urun-event-spine-time",children:new Date(c.at).toLocaleTimeString()})," ",c.text]},`${c.at}-${h}`))})}var $e=require("react"),Q=require("react/jsx-runtime"),It={idle:"idle",queued:"queued",provisioning:"provisioning",connecting:"connecting",live:"live",error:"error",ended:"ended"};function We(e){let[r,t]=(0,$e.useState)(e?.phase??null);return(0,$e.useEffect)(()=>{if(!e){t(null);return}return e.onPhase(t)},[e]),r}function ct({session:e,className:r}){let t=We(e),n=t?.name??"idle",o=t?.name==="queued"&&t.queue?`pos ${t.queue.position} / depth ${t.queue.depth}`:t?.name==="error"&&t.error?t.error.reason:null;return(0,Q.jsxs)("span",{className:["urun-session-status",r].filter(Boolean).join(" "),"data-phase":n,children:[(0,Q.jsx)("span",{className:"urun-session-status-dot","data-phase":n}),(0,Q.jsx)("span",{className:"urun-session-status-label",children:It[n]}),o?(0,Q.jsx)("span",{className:"urun-session-status-detail",children:o}):null]})}function lt({session:e,children:r,fallback:t,className:n}){let o=We(e);if(o?.name==="live")return(0,Q.jsx)("div",{className:["urun-session-gate",n].filter(Boolean).join(" "),children:r});let a=t?t(o):(0,Q.jsx)("span",{className:"urun-session-gate-fallback",children:o?.name==="error"?`Session ${o.error?.reason??"failed"}.`:o?.name==="ended"?"Session ended.":"Waiting for a live session\u2026"});return(0,Q.jsx)("div",{className:["urun-session-gate",n].filter(Boolean).join(" "),children:a})}0&&(module.exports={ComponentRenderer,DEFAULT_CAMERA_CONSTRAINTS,DEFAULT_LOG_CAP,DEFAULT_VOICE_CONSTRAINTS,DocPatchForm,ImageFrame,ImageFrameSchema,MetricsPanel,MetricsPanelSchema,ProgressCard,ProgressCardSchema,StatusBadge,StatusBadgeSchema,TextStream,TextStreamSchema,UrunAudio,UrunAuthProvider,UrunCamera,UrunControlSender,UrunDocPanel,UrunErrorBoundary,UrunEventSpine,UrunJwtProvider,UrunProvider,UrunSessionGate,UrunSessionStatus,UrunStreamTail,UrunVideo,UrunVoice,authMode,formatPayload,getUrunAudioContext,parseJsonObject,pushCapped,registerComponent,resumeUrunAudioContext,urunPublicEnv,useApp,useChat,useCompletion,useImageFrame,useMetricsPanel,useProgressCard,useRequest,useSessionDoc,useSessionPhase,useSessionTrack,useStatusBadge,useStreamMessages,useTextStream,useUrunAudioLevel,useUrunAuth,usesWorkOSAuth});
|