@urun-sh/react 0.2.3 → 0.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.
@@ -0,0 +1,6 @@
1
+ type UrunAuthMode = 'workos' | 'jwt';
2
+ declare function urunPublicEnv(name: string): string | undefined;
3
+ declare function authMode(): UrunAuthMode;
4
+ declare function usesWorkOSAuth(): boolean;
5
+
6
+ export { type UrunAuthMode, authMode, urunPublicEnv, usesWorkOSAuth };
package/dist/auth.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ type UrunAuthMode = 'workos' | 'jwt';
2
+ declare function urunPublicEnv(name: string): string | undefined;
3
+ declare function authMode(): UrunAuthMode;
4
+ declare function usesWorkOSAuth(): boolean;
5
+
6
+ export { type UrunAuthMode, authMode, urunPublicEnv, usesWorkOSAuth };
package/dist/auth.js ADDED
@@ -0,0 +1 @@
1
+ "use strict";var u=Object.defineProperty;var E=Object.getOwnPropertyDescriptor;var f=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var p=(e,n)=>{for(var s in n)u(e,s,{get:n[s],enumerable:!0})},U=(e,n,s,i)=>{if(n&&typeof n=="object"||typeof n=="function")for(let o of f(n))!c.call(e,o)&&o!==s&&u(e,o,{get:()=>n[o],enumerable:!(i=E(n,o))||i.enumerable});return e};var N=e=>U(u({},"__esModule",{value:!0}),e);var T={};p(T,{authMode:()=>d,urunPublicEnv:()=>t,usesWorkOSAuth:()=>_});module.exports=N(T);function r(e){return e&&e.trim()?e.trim():void 0}function t(e){switch(e){case"NEXT_PUBLIC_AUTH_MODE":return r(typeof process<"u"?process.env?.NEXT_PUBLIC_AUTH_MODE:void 0);case"NEXT_PUBLIC_AUTH_ENABLED":return r(typeof process<"u"?process.env?.NEXT_PUBLIC_AUTH_ENABLED:void 0);case"NEXT_PUBLIC_SESSION_AUTH_PROVIDER":return r(typeof process<"u"?process.env?.NEXT_PUBLIC_SESSION_AUTH_PROVIDER:void 0);case"NEXT_PUBLIC_SESSION_TOKEN":return r(typeof process<"u"?process.env?.NEXT_PUBLIC_SESSION_TOKEN:void 0);case"NEXT_PUBLIC_URUN_JWT":return r(typeof process<"u"?process.env?.NEXT_PUBLIC_URUN_JWT:void 0);case"VERCEL_ENV":return r(typeof process<"u"?process.env?.VERCEL_ENV:void 0);default:return r(typeof process<"u"?process.env?.[e]:void 0)}}function d(){let e=t("NEXT_PUBLIC_AUTH_MODE")?.toLowerCase();return e==="jwt"||e==="customer-jwt"||e==="test-jwt"?"jwt":e==="workos"||t("VERCEL_ENV")==="production"?"workos":t("NEXT_PUBLIC_AUTH_ENABLED")==="false"?"jwt":"workos"}function _(){return d()==="workos"}0&&(module.exports={authMode,urunPublicEnv,usesWorkOSAuth});
package/dist/auth.mjs ADDED
@@ -0,0 +1 @@
1
+ import{a as u,b as o,c as e}from"./chunk-SSZO4I6Y.mjs";export{o as authMode,u as urunPublicEnv,e as usesWorkOSAuth};
@@ -0,0 +1 @@
1
+ function n(e){return e&&e.trim()?e.trim():void 0}function r(e){switch(e){case"NEXT_PUBLIC_AUTH_MODE":return n(typeof process<"u"?process.env?.NEXT_PUBLIC_AUTH_MODE:void 0);case"NEXT_PUBLIC_AUTH_ENABLED":return n(typeof process<"u"?process.env?.NEXT_PUBLIC_AUTH_ENABLED:void 0);case"NEXT_PUBLIC_SESSION_AUTH_PROVIDER":return n(typeof process<"u"?process.env?.NEXT_PUBLIC_SESSION_AUTH_PROVIDER:void 0);case"NEXT_PUBLIC_SESSION_TOKEN":return n(typeof process<"u"?process.env?.NEXT_PUBLIC_SESSION_TOKEN:void 0);case"NEXT_PUBLIC_URUN_JWT":return n(typeof process<"u"?process.env?.NEXT_PUBLIC_URUN_JWT:void 0);case"VERCEL_ENV":return n(typeof process<"u"?process.env?.VERCEL_ENV:void 0);default:return n(typeof process<"u"?process.env?.[e]:void 0)}}function s(){let e=r("NEXT_PUBLIC_AUTH_MODE")?.toLowerCase();return e==="jwt"||e==="customer-jwt"||e==="test-jwt"?"jwt":e==="workos"||r("VERCEL_ENV")==="production"?"workos":r("NEXT_PUBLIC_AUTH_ENABLED")==="false"?"jwt":"workos"}function t(){return s()==="workos"}export{r as a,s as b,t as c};
package/dist/index.d.mts CHANGED
@@ -1,6 +1,7 @@
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
+ export { UrunAuthMode, authMode, urunPublicEnv, usesWorkOSAuth } from './auth.mjs';
4
5
  import { SessionInterface, SessionDocument, SessionStream, SessionPhase } 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';
@@ -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;
@@ -366,4 +362,197 @@ interface UrunVideoProps {
366
362
 
367
363
  declare const UrunVideo: react.ForwardRefExoticComponent<UrunVideoProps & react.RefAttributes<HTMLVideoElement>>;
368
364
 
369
- export { type ChatMessage, type ChatRole, ComponentRenderer, ImageFrame, ImageFrameSchema, MetricsPanel, MetricsPanelSchema, ProgressCard, ProgressCardSchema, type ReactApp, type ReactSession, type ReactSessionDocument, type ReactSessionStream, type RegisteredComponent, type RequestCapableSession, type RequestStream, type SessionRequestOptions, StatusBadge, StatusBadgeSchema, TextStream, TextStreamSchema, type UrunAccessToken, type UrunAccessTokenProvider, type UrunAuthContextValue, type UrunAuthMode, UrunAuthProvider, type UrunAuthProviderProps, UrunErrorBoundary, UrunJwtProvider, UrunProvider, UrunVideo, type UrunVideoProps, type UseChatOptions, type UseChatResult, type UseCompletionOptions, type UseCompletionResult, type UseRequestOptions, type UseRequestResult, authMode, registerComponent, urunPublicEnv, useApp, useChat, useCompletion, useImageFrame, useMetricsPanel, useProgressCard, useRequest, useStatusBadge, useTextStream, useUrunAuth, usesWorkOSAuth };
365
+ interface UrunAudioStreamSource {
366
+
367
+ readonly track: MediaStreamTrack | null;
368
+
369
+ on(event: 'track', handler: (track: MediaStreamTrack | null) => void): () => void;
370
+ }
371
+
372
+ interface UrunAudioSessionSource {
373
+ stream(name: string): UrunAudioStreamSource;
374
+ }
375
+
376
+ interface UrunAudioHandle {
377
+
378
+ unlock(): void;
379
+
380
+ readonly unlocked: boolean;
381
+
382
+ readonly element: HTMLAudioElement | null;
383
+ }
384
+
385
+ interface UrunAudioProps {
386
+
387
+ session?: UrunAudioSessionSource | null;
388
+
389
+ stream?: string;
390
+
391
+ track?: MediaStreamTrack | null;
392
+
393
+ controls?: boolean;
394
+
395
+ className?: string;
396
+
397
+ onTrack?: (track: MediaStreamTrack | null) => void;
398
+
399
+ onUnlockChange?: (unlocked: boolean) => void;
400
+
401
+ onAudioElement?: (el: HTMLAudioElement | null) => void;
402
+ }
403
+
404
+ declare const UrunAudio: react.ForwardRefExoticComponent<UrunAudioProps & react.RefAttributes<UrunAudioHandle>>;
405
+
406
+ interface UrunVoiceStreamSource extends UrunAudioStreamSource {
407
+ attach(track: MediaStreamTrack): Promise<void>;
408
+ detach(): Promise<void>;
409
+ }
410
+
411
+ interface UrunVoiceSessionSource {
412
+ stream(name: string): UrunVoiceStreamSource;
413
+
414
+ whenLive(options?: {
415
+ timeout?: number;
416
+ signal?: AbortSignal;
417
+ }): Promise<void>;
418
+ }
419
+
420
+ interface UrunVoiceHandle {
421
+
422
+ start(): Promise<void>;
423
+
424
+ stop(): Promise<void>;
425
+
426
+ readonly active: boolean;
427
+
428
+ readonly micStream: MediaStream | null;
429
+
430
+ unlock(): void;
431
+
432
+ readonly audio: UrunAudioHandle | null;
433
+ }
434
+
435
+ interface UrunVoiceProps {
436
+
437
+ session: UrunVoiceSessionSource;
438
+
439
+ stream?: string;
440
+
441
+ constraints?: MediaTrackConstraints;
442
+
443
+ connectTimeoutMs?: number;
444
+
445
+ attempts?: number;
446
+
447
+ retryDelayMs?: number;
448
+
449
+ onActiveChange?: (active: boolean) => void;
450
+
451
+ onError?: (error: Error) => void;
452
+
453
+ onMicStream?: (stream: MediaStream | null) => void;
454
+
455
+ onTrack?: (track: MediaStreamTrack | null) => void;
456
+
457
+ onUnlockChange?: (unlocked: boolean) => void;
458
+ }
459
+
460
+ declare const DEFAULT_VOICE_CONSTRAINTS: MediaTrackConstraints;
461
+
462
+ declare const UrunVoice: react.ForwardRefExoticComponent<UrunVoiceProps & react.RefAttributes<UrunVoiceHandle>>;
463
+
464
+ interface UrunCameraStreamSource {
465
+ attachVideo(track: MediaStreamTrack): Promise<void>;
466
+ detachVideo(): Promise<void>;
467
+ }
468
+
469
+ interface UrunCameraSessionSource {
470
+ stream(name: string): UrunCameraStreamSource;
471
+
472
+ whenLive(options?: {
473
+ timeout?: number;
474
+ signal?: AbortSignal;
475
+ }): Promise<void>;
476
+ }
477
+
478
+ type UrunCameraFacing = 'user' | 'environment';
479
+
480
+ interface UrunCameraHandle {
481
+
482
+ start(options?: {
483
+ facingMode?: UrunCameraFacing;
484
+ }): Promise<void>;
485
+
486
+ stop(): Promise<void>;
487
+
488
+ flip(): Promise<void>;
489
+
490
+ setFacingMode(mode: UrunCameraFacing): Promise<void>;
491
+
492
+ readonly active: boolean;
493
+
494
+ readonly facingMode: UrunCameraFacing;
495
+
496
+ readonly stream: MediaStream | null;
497
+
498
+ readonly element: HTMLVideoElement | null;
499
+ }
500
+
501
+ interface UrunCameraProps {
502
+
503
+ session: UrunCameraSessionSource;
504
+
505
+ stream?: string;
506
+
507
+ constraints?: MediaTrackConstraints;
508
+
509
+ facingMode?: UrunCameraFacing;
510
+
511
+ mirror?: boolean | 'auto';
512
+
513
+ connectTimeoutMs?: number;
514
+
515
+ preview?: boolean;
516
+
517
+ className?: string;
518
+
519
+ videoClassName?: string;
520
+
521
+ onActiveChange?: (active: boolean) => void;
522
+
523
+ onError?: (error: Error) => void;
524
+
525
+ onStream?: (stream: MediaStream | null) => void;
526
+
527
+ onTrack?: (track: MediaStreamTrack | null) => void;
528
+
529
+ children?: ReactNode;
530
+ }
531
+
532
+ declare const DEFAULT_CAMERA_CONSTRAINTS: MediaTrackConstraints;
533
+
534
+ declare const UrunCamera: react.ForwardRefExoticComponent<UrunCameraProps & react.RefAttributes<UrunCameraHandle>>;
535
+
536
+ interface UseUrunAudioLevelOptions {
537
+
538
+ fftSize?: number;
539
+
540
+ intervalMs?: number;
541
+
542
+ speakingThreshold?: number;
543
+ }
544
+
545
+ interface UrunAudioLevel {
546
+
547
+ level: number;
548
+
549
+ speaking: boolean;
550
+ }
551
+
552
+ declare function useUrunAudioLevel(source: MediaStream | MediaStreamTrack | null | undefined, options?: UseUrunAudioLevelOptions): UrunAudioLevel;
553
+
554
+ declare function getUrunAudioContext(): AudioContext | null;
555
+
556
+ declare function resumeUrunAudioContext(): void;
557
+
558
+ export { type ChatMessage, type ChatRole, ComponentRenderer, DEFAULT_CAMERA_CONSTRAINTS, DEFAULT_VOICE_CONSTRAINTS, ImageFrame, ImageFrameSchema, MetricsPanel, MetricsPanelSchema, ProgressCard, ProgressCardSchema, type ReactApp, type ReactSession, type ReactSessionDocument, type ReactSessionStream, type RegisteredComponent, type RequestCapableSession, type RequestStream, type SessionRequestOptions, StatusBadge, StatusBadgeSchema, 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, UrunErrorBoundary, UrunJwtProvider, UrunProvider, 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 UseUrunAudioLevelOptions, getUrunAudioContext, registerComponent, resumeUrunAudioContext, useApp, useChat, useCompletion, useImageFrame, useMetricsPanel, useProgressCard, useRequest, useStatusBadge, useTextStream, useUrunAudioLevel, useUrunAuth };
package/dist/index.d.ts CHANGED
@@ -1,6 +1,7 @@
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
+ export { UrunAuthMode, authMode, urunPublicEnv, usesWorkOSAuth } from './auth.js';
4
5
  import { SessionInterface, SessionDocument, SessionStream, SessionPhase } 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';
@@ -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;
@@ -366,4 +362,197 @@ interface UrunVideoProps {
366
362
 
367
363
  declare const UrunVideo: react.ForwardRefExoticComponent<UrunVideoProps & react.RefAttributes<HTMLVideoElement>>;
368
364
 
369
- export { type ChatMessage, type ChatRole, ComponentRenderer, ImageFrame, ImageFrameSchema, MetricsPanel, MetricsPanelSchema, ProgressCard, ProgressCardSchema, type ReactApp, type ReactSession, type ReactSessionDocument, type ReactSessionStream, type RegisteredComponent, type RequestCapableSession, type RequestStream, type SessionRequestOptions, StatusBadge, StatusBadgeSchema, TextStream, TextStreamSchema, type UrunAccessToken, type UrunAccessTokenProvider, type UrunAuthContextValue, type UrunAuthMode, UrunAuthProvider, type UrunAuthProviderProps, UrunErrorBoundary, UrunJwtProvider, UrunProvider, UrunVideo, type UrunVideoProps, type UseChatOptions, type UseChatResult, type UseCompletionOptions, type UseCompletionResult, type UseRequestOptions, type UseRequestResult, authMode, registerComponent, urunPublicEnv, useApp, useChat, useCompletion, useImageFrame, useMetricsPanel, useProgressCard, useRequest, useStatusBadge, useTextStream, useUrunAuth, usesWorkOSAuth };
365
+ interface UrunAudioStreamSource {
366
+
367
+ readonly track: MediaStreamTrack | null;
368
+
369
+ on(event: 'track', handler: (track: MediaStreamTrack | null) => void): () => void;
370
+ }
371
+
372
+ interface UrunAudioSessionSource {
373
+ stream(name: string): UrunAudioStreamSource;
374
+ }
375
+
376
+ interface UrunAudioHandle {
377
+
378
+ unlock(): void;
379
+
380
+ readonly unlocked: boolean;
381
+
382
+ readonly element: HTMLAudioElement | null;
383
+ }
384
+
385
+ interface UrunAudioProps {
386
+
387
+ session?: UrunAudioSessionSource | null;
388
+
389
+ stream?: string;
390
+
391
+ track?: MediaStreamTrack | null;
392
+
393
+ controls?: boolean;
394
+
395
+ className?: string;
396
+
397
+ onTrack?: (track: MediaStreamTrack | null) => void;
398
+
399
+ onUnlockChange?: (unlocked: boolean) => void;
400
+
401
+ onAudioElement?: (el: HTMLAudioElement | null) => void;
402
+ }
403
+
404
+ declare const UrunAudio: react.ForwardRefExoticComponent<UrunAudioProps & react.RefAttributes<UrunAudioHandle>>;
405
+
406
+ interface UrunVoiceStreamSource extends UrunAudioStreamSource {
407
+ attach(track: MediaStreamTrack): Promise<void>;
408
+ detach(): Promise<void>;
409
+ }
410
+
411
+ interface UrunVoiceSessionSource {
412
+ stream(name: string): UrunVoiceStreamSource;
413
+
414
+ whenLive(options?: {
415
+ timeout?: number;
416
+ signal?: AbortSignal;
417
+ }): Promise<void>;
418
+ }
419
+
420
+ interface UrunVoiceHandle {
421
+
422
+ start(): Promise<void>;
423
+
424
+ stop(): Promise<void>;
425
+
426
+ readonly active: boolean;
427
+
428
+ readonly micStream: MediaStream | null;
429
+
430
+ unlock(): void;
431
+
432
+ readonly audio: UrunAudioHandle | null;
433
+ }
434
+
435
+ interface UrunVoiceProps {
436
+
437
+ session: UrunVoiceSessionSource;
438
+
439
+ stream?: string;
440
+
441
+ constraints?: MediaTrackConstraints;
442
+
443
+ connectTimeoutMs?: number;
444
+
445
+ attempts?: number;
446
+
447
+ retryDelayMs?: number;
448
+
449
+ onActiveChange?: (active: boolean) => void;
450
+
451
+ onError?: (error: Error) => void;
452
+
453
+ onMicStream?: (stream: MediaStream | null) => void;
454
+
455
+ onTrack?: (track: MediaStreamTrack | null) => void;
456
+
457
+ onUnlockChange?: (unlocked: boolean) => void;
458
+ }
459
+
460
+ declare const DEFAULT_VOICE_CONSTRAINTS: MediaTrackConstraints;
461
+
462
+ declare const UrunVoice: react.ForwardRefExoticComponent<UrunVoiceProps & react.RefAttributes<UrunVoiceHandle>>;
463
+
464
+ interface UrunCameraStreamSource {
465
+ attachVideo(track: MediaStreamTrack): Promise<void>;
466
+ detachVideo(): Promise<void>;
467
+ }
468
+
469
+ interface UrunCameraSessionSource {
470
+ stream(name: string): UrunCameraStreamSource;
471
+
472
+ whenLive(options?: {
473
+ timeout?: number;
474
+ signal?: AbortSignal;
475
+ }): Promise<void>;
476
+ }
477
+
478
+ type UrunCameraFacing = 'user' | 'environment';
479
+
480
+ interface UrunCameraHandle {
481
+
482
+ start(options?: {
483
+ facingMode?: UrunCameraFacing;
484
+ }): Promise<void>;
485
+
486
+ stop(): Promise<void>;
487
+
488
+ flip(): Promise<void>;
489
+
490
+ setFacingMode(mode: UrunCameraFacing): Promise<void>;
491
+
492
+ readonly active: boolean;
493
+
494
+ readonly facingMode: UrunCameraFacing;
495
+
496
+ readonly stream: MediaStream | null;
497
+
498
+ readonly element: HTMLVideoElement | null;
499
+ }
500
+
501
+ interface UrunCameraProps {
502
+
503
+ session: UrunCameraSessionSource;
504
+
505
+ stream?: string;
506
+
507
+ constraints?: MediaTrackConstraints;
508
+
509
+ facingMode?: UrunCameraFacing;
510
+
511
+ mirror?: boolean | 'auto';
512
+
513
+ connectTimeoutMs?: number;
514
+
515
+ preview?: boolean;
516
+
517
+ className?: string;
518
+
519
+ videoClassName?: string;
520
+
521
+ onActiveChange?: (active: boolean) => void;
522
+
523
+ onError?: (error: Error) => void;
524
+
525
+ onStream?: (stream: MediaStream | null) => void;
526
+
527
+ onTrack?: (track: MediaStreamTrack | null) => void;
528
+
529
+ children?: ReactNode;
530
+ }
531
+
532
+ declare const DEFAULT_CAMERA_CONSTRAINTS: MediaTrackConstraints;
533
+
534
+ declare const UrunCamera: react.ForwardRefExoticComponent<UrunCameraProps & react.RefAttributes<UrunCameraHandle>>;
535
+
536
+ interface UseUrunAudioLevelOptions {
537
+
538
+ fftSize?: number;
539
+
540
+ intervalMs?: number;
541
+
542
+ speakingThreshold?: number;
543
+ }
544
+
545
+ interface UrunAudioLevel {
546
+
547
+ level: number;
548
+
549
+ speaking: boolean;
550
+ }
551
+
552
+ declare function useUrunAudioLevel(source: MediaStream | MediaStreamTrack | null | undefined, options?: UseUrunAudioLevelOptions): UrunAudioLevel;
553
+
554
+ declare function getUrunAudioContext(): AudioContext | null;
555
+
556
+ declare function resumeUrunAudioContext(): void;
557
+
558
+ export { type ChatMessage, type ChatRole, ComponentRenderer, DEFAULT_CAMERA_CONSTRAINTS, DEFAULT_VOICE_CONSTRAINTS, ImageFrame, ImageFrameSchema, MetricsPanel, MetricsPanelSchema, ProgressCard, ProgressCardSchema, type ReactApp, type ReactSession, type ReactSessionDocument, type ReactSessionStream, type RegisteredComponent, type RequestCapableSession, type RequestStream, type SessionRequestOptions, StatusBadge, StatusBadgeSchema, 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, UrunErrorBoundary, UrunJwtProvider, UrunProvider, 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 UseUrunAudioLevelOptions, getUrunAudioContext, registerComponent, resumeUrunAudioContext, useApp, useChat, useCompletion, useImageFrame, useMetricsPanel, useProgressCard, useRequest, useStatusBadge, 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 qr=Object.create;var he=Object.defineProperty;var Vr=Object.getOwnPropertyDescriptor;var jr=Object.getOwnPropertyNames;var Br=Object.getPrototypeOf,Dr=Object.prototype.hasOwnProperty;var Hr=(r,e)=>{for(var t in e)he(r,t,{get:e[t],enumerable:!0})},$e=(r,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of jr(e))!Dr.call(r,s)&&s!==t&&he(r,s,{get:()=>e[s],enumerable:!(o=Vr(e,s))||o.enumerable});return r};var Fr=(r,e,t)=>(t=r!=null?qr(Br(r)):{},$e(e||!r||!r.__esModule?he(t,"default",{value:r,enumerable:!0}):t,r)),zr=r=>$e(he({},"__esModule",{value:!0}),r);var it={};Hr(it,{ComponentRenderer:()=>dr,DEFAULT_CAMERA_CONSTRAINTS:()=>Fe,DEFAULT_VOICE_CONSTRAINTS:()=>He,ImageFrame:()=>Sr,ImageFrameSchema:()=>vr,MetricsPanel:()=>kr,MetricsPanelSchema:()=>yr,ProgressCard:()=>pr,ProgressCardSchema:()=>lr,StatusBadge:()=>fr,StatusBadgeSchema:()=>mr,TextStream:()=>hr,TextStreamSchema:()=>gr,UrunAudio:()=>Re,UrunAuthProvider:()=>_e,UrunCamera:()=>Nr,UrunErrorBoundary:()=>ee,UrunJwtProvider:()=>Ze,UrunProvider:()=>Ye,UrunVideo:()=>Pr,UrunVoice:()=>Ar,authMode:()=>ue,getUrunAudioContext:()=>ge,registerComponent:()=>ur,resumeUrunAudioContext:()=>Te,urunPublicEnv:()=>X,useApp:()=>er,useChat:()=>ir,useCompletion:()=>nr,useImageFrame:()=>je,useMetricsPanel:()=>Be,useProgressCard:()=>Oe,useRequest:()=>rr,useStatusBadge:()=>qe,useTextStream:()=>Ve,useUrunAudioLevel:()=>Ir,useUrunAuth:()=>Se,usesWorkOSAuth:()=>Je});module.exports=zr(it);var te=require("react");var Xe=require("react"),ae=require("react/jsx-runtime"),ee=class extends Xe.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,ae.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,ae.jsx)("p",{style:{margin:0,fontWeight:600},children:"Connection interrupted"}),(0,ae.jsx)("p",{style:{margin:"6px 0 0",color:"#4b5563"},children:"Reconnecting automatically."})]})}return this.props.children}};var We=require("react"),ve=(0,We.createContext)(null);function G(r){return r&&r.trim()?r.trim():void 0}function X(r){switch(r){case"NEXT_PUBLIC_AUTH_MODE":return G(typeof process<"u"?process.env?.NEXT_PUBLIC_AUTH_MODE:void 0);case"NEXT_PUBLIC_AUTH_ENABLED":return G(typeof process<"u"?process.env?.NEXT_PUBLIC_AUTH_ENABLED:void 0);case"NEXT_PUBLIC_SESSION_AUTH_PROVIDER":return G(typeof process<"u"?process.env?.NEXT_PUBLIC_SESSION_AUTH_PROVIDER:void 0);case"NEXT_PUBLIC_SESSION_TOKEN":return G(typeof process<"u"?process.env?.NEXT_PUBLIC_SESSION_TOKEN:void 0);case"NEXT_PUBLIC_URUN_JWT":return G(typeof process<"u"?process.env?.NEXT_PUBLIC_URUN_JWT:void 0);case"VERCEL_ENV":return G(typeof process<"u"?process.env?.VERCEL_ENV:void 0);default:return G(typeof process<"u"?process.env?.[r]:void 0)}}function ue(){let r=X("NEXT_PUBLIC_AUTH_MODE")?.toLowerCase();return r==="jwt"||r==="customer-jwt"||r==="test-jwt"?"jwt":r==="workos"||X("VERCEL_ENV")==="production"?"workos":X("NEXT_PUBLIC_AUTH_ENABLED")==="false"?"jwt":"workos"}function Je(){return ue()==="workos"}var re=require("react"),Ge=require("react/jsx-runtime"),Ke=(0,re.createContext)(null);function _e({getAccessToken:r,children:e}){let t=(0,re.useMemo)(()=>({getAccessToken:r}),[r]);return(0,Ge.jsx)(Ke.Provider,{value:t,children:e})}var Ze=_e;function Se(){return(0,re.useContext)(Ke)}var ye=require("react/jsx-runtime");function Ye({baseUrl:r,orgId:e,appId:t,jwt:o,authProvider:s,fallback:u,children:l}){let[U,c]=(0,te.useState)(),v=Se(),R=X("NEXT_PUBLIC_SESSION_TOKEN")??X("NEXT_PUBLIC_URUN_JWT"),p=ue(),h=p==="workos"&&!o,E=o??(p==="jwt"?R:void 0)??U,k=s??X("NEXT_PUBLIC_SESSION_AUTH_PROVIDER"),C=h&&!E,S=(0,te.useMemo)(()=>({appId:t,baseUrl:r,orgId:e,jwt:E,getAccessToken:h?v?.getAccessToken:void 0,authProvider:k}),[t,v,r,k,E,e,h]);return(0,te.useEffect)(()=>{if(!h||!v)return;let d=!1,m=v;async function f(){try{let y=await m.getAccessToken();d||c(y??void 0)}catch{d||c(void 0)}}f();let x=window.setInterval(()=>{f()},6e4);return()=>{d=!0,window.clearInterval(x)}},[v,h]),(0,ye.jsx)(ee,{fallback:u,children:C?(0,ye.jsx)("div",{role:"status","aria-live":"polite",children:"Signing in..."}):(0,ye.jsx)(ve.Provider,{value:S,children:l})})}var W=require("react"),Qe=require("@urun-sh/core");function $r(r,e){return`${r}:${JSON.stringify(e??{})}`}var Me=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,o=>t(o))}get synced(){return this._doc.synced}onSynced(e){return this._doc.onSynced(()=>{e(),this._notify()})}text(e){let t=this._doc.text(e),o=this._notify;return{append(s){t.append(s),o()},toString:()=>t.toString(),get length(){return t.length},on:(s,u)=>t.on(s,l=>{u(l),o()})}}dispose(){this._unsubscribeChange()}},Ne=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()}},Ie=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;_disposed=!1;get disposed(){return this._disposed}get id(){return this._session.id}get phase(){return this._session.phase}onPhase(e){return this._session.onPhase(e)}whenLive(e){return this._session.whenLive(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 Me(this._session.doc(e),this._notify),this._docs.set(e,t)),t}stream(e){let t=this._streams.get(e);return t||(t=new Ne(this._session.stream(e),this._notify),this._streams.set(e,t)),t}disconnect(){this._disposed=!0;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 er(){let r=(0,W.useContext)(ve);if(!r)throw new Error("useApp must be used within <UrunProvider>");if(!r.appId)throw new Error('useApp requires <UrunProvider appId="...">');let[,e]=(0,W.useReducer)(s=>s+1,0),t=(0,W.useRef)(new Map),o=(0,W.useMemo)(()=>(0,Qe.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,W.useMemo)(()=>new Proxy({},{get(s,u){if(typeof u=="string")return l=>{let U=$r(u,l),c=t.current.get(U);if(c&&!c.disposed)return c;let v=new Ie(o[u](l),e);return t.current.set(U,v),v}}}),[o])}var q=require("react");function ne(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 Xr(r){return r instanceof Error?r:new Error(String(r))}function rr(r,e){let t=(0,q.useMemo)(()=>ne(r),[r]),[o,s]=(0,q.useState)(void 0),[u,l]=(0,q.useState)(null),[U,c]=(0,q.useState)(!1),v=(0,q.useRef)(e);v.current=e;let R=(0,q.useRef)(0),p=(0,q.useRef)(null),h=(0,q.useRef)(!0);(0,q.useEffect)(()=>(h.current=!0,()=>{h.current=!1,p.current?.abort()}),[]);let E=(0,q.useCallback)(async S=>{p.current?.abort();let d=new AbortController;p.current=d;let m=++R.current,f=()=>h.current&&R.current===m;f()&&(c(!0),l(null));try{let x=await t.request(S,{...v.current,signal:d.signal});return f()&&(s(x),c(!1),v.current?.onSuccess?.(x)),x}catch(x){let y=Xr(x);throw f()&&(l(y),c(!1),v.current?.onError?.(y)),y}},[t]),k=(0,q.useCallback)(S=>{E(S).catch(()=>{})},[E]),C=(0,q.useCallback)(()=>{R.current++,p.current?.abort(),p.current=null,s(void 0),l(null),c(!1)},[]);return{mutate:k,mutateAsync:E,data:o,error:u,isPending:U,reset:C}}var j=require("react");function tr(r){return r instanceof Error?r:new Error(String(r))}var Wr=r=>typeof r=="string"?r:String(r);function nr(r,e){let t=(0,j.useMemo)(()=>ne(r),[r]),[o,s]=(0,j.useState)(""),[u,l]=(0,j.useState)(!1),[U,c]=(0,j.useState)(null),v=(0,j.useRef)(e);v.current=e;let R=(0,j.useRef)(0),p=(0,j.useRef)(null),h=(0,j.useRef)(!0);(0,j.useEffect)(()=>(h.current=!0,()=>{h.current=!1,p.current?.cancel(),p.current=null}),[]);let E=(0,j.useCallback)(()=>{R.current++,p.current?.cancel(),p.current=null,h.current&&l(!1)},[]),k=(0,j.useCallback)(async C=>{p.current?.cancel();let S=++R.current,d=()=>h.current&&R.current===S,m=v.current,f=m?.parseChunk??Wr,x=m?.buildPayload??(a=>({prompt:a}));d()&&(s(""),c(null),l(!0));let{parseChunk:y,buildPayload:H,onFinish:M,onError:n,...i}=m??{},g="",b;try{b=t.requestStream(x(C),i),p.current=b}catch(a){let w=tr(a);d()&&(c(w),l(!1),m?.onError?.(w));return}try{for await(let a of b){if(R.current!==S)break;g+=f(a),d()&&s(g)}d()&&(l(!1),m?.onFinish?.(g))}catch(a){let w=tr(a);d()&&(c(w),l(!1),m?.onError?.(w))}finally{p.current===b&&(p.current=null)}},[t]);return{completion:o,complete:k,stop:E,isStreaming:u,error:U}}var I=require("react");function or(r){return r instanceof Error?r:new Error(String(r))}var Jr=r=>typeof r=="string"?r:String(r),sr=0;function Le(r){return sr+=1,`${r}-${sr}`}function ir(r,e){let t=(0,I.useMemo)(()=>ne(r),[r]),[o,s]=(0,I.useState)(()=>(e?.initialMessages??[]).map(f=>({id:f.id??Le("msg"),role:f.role,content:f.content}))),[u,l]=(0,I.useState)(""),[U,c]=(0,I.useState)(!1),[v,R]=(0,I.useState)(null),p=(0,I.useRef)(e);p.current=e;let h=(0,I.useRef)(o);h.current=o;let E=(0,I.useRef)(u);E.current=u;let k=(0,I.useRef)(0),C=(0,I.useRef)(null),S=(0,I.useRef)(!0);(0,I.useEffect)(()=>(S.current=!0,()=>{S.current=!1,C.current?.cancel(),C.current=null}),[]);let d=(0,I.useCallback)(()=>{k.current++,C.current?.cancel(),C.current=null,S.current&&c(!1)},[]),m=(0,I.useCallback)(async f=>{let x=f===void 0,y=(x?E.current:f)??"";if(!y.trim())return;C.current?.cancel();let M=++k.current,n=()=>S.current&&k.current===M,i=p.current,g=i?.parseChunk??Jr,b={id:Le("msg"),role:"user",content:y},a={id:Le("msg"),role:"assistant",content:""},w=[...h.current,b].map(N=>({role:N.role,content:N.content})),T=[...h.current,b,a];h.current=T,s(T),x&&l(""),R(null),c(!0);let $=i?.buildPayload??(N=>({messages:N})),{initialMessages:Pe,parseChunk:Ee,buildPayload:we,onFinish:Ae,onError:Lr,..._}=i??{},B=N=>{s(F=>F.map(V=>V.id===a.id?{...V,content:N}:V))},K="",D;try{D=t.requestStream($(w),_),C.current=D}catch(N){let F=or(N);n()&&(R(F),c(!1),i?.onError?.(F));return}try{for await(let N of D){if(k.current!==M)break;K+=g(N),n()&&B(K)}n()&&(c(!1),i?.onFinish?.({...a,content:K}))}catch(N){let F=or(N);n()&&(R(F),c(!1),i?.onError?.(F))}finally{C.current===D&&(C.current=null)}},[t]);return{messages:o,input:u,setInput:l,sendMessage:m,stop:d,isStreaming:U,error:v}}var ar=new Map;function ur(r,e,t){if(!t||typeof t.safeParse!="function")throw new Error(`registerComponent("${r}"): schema must be a valid Zod schema`);ar.set(r,{component:e,schema:t})}function cr(r,e){let t=ar.get(r);if(!t)return{error:`Unknown component: "${r}"`};let o=t.schema.safeParse(e);return o.success?{Component:t.component,validatedProps:o.data}:{error:`Validation failed for "${r}": ${o.error.message}`}}var Y=require("react/jsx-runtime");function dr({name:r,props:e,fallback:t}){let o=cr(r,e);if(o.error)return console.warn(`[urun] ComponentRenderer: ${o.error}`),t?(0,Y.jsx)(Y.Fragment,{children:t}):(0,Y.jsx)("div",{className:"urun-component-error",role:"alert",children:(0,Y.jsx)("span",{className:"urun-component-error-text",children:o.error})});let s=o.Component;return(0,Y.jsx)(s,{...o.validatedProps})}var oe=require("zod"),Q=require("react/jsx-runtime"),lr=oe.z.object({step:oe.z.number().min(0),total:oe.z.number().min(1),label:oe.z.string().optional(),variant:oe.z.enum(["default","success","error"]).default("default")});function Oe(r){let{step:e,total:t,label:o,variant:s="default"}=r,u=Math.min(e/t*100,100),l=e>=t;return{step:e,total:t,label:o,variant:s,percentage:u,isComplete:l}}function pr(r){let{step:e,total:t,label:o,variant:s,percentage:u}=Oe(r);return(0,Q.jsxs)("div",{className:"urun-progress-card","data-variant":s,children:[o&&(0,Q.jsx)("div",{className:"urun-progress-label",children:o}),(0,Q.jsx)("div",{className:"urun-progress-bar",children:(0,Q.jsx)("div",{className:"urun-progress-fill",style:{width:`${u}%`}})}),(0,Q.jsxs)("div",{className:"urun-progress-text",children:[e,"/",t]})]})}var ke=require("zod"),ce=require("react/jsx-runtime"),mr=ke.z.object({state:ke.z.enum(["thinking","generating","idle","error"]),message:ke.z.string().optional()}),Kr={thinking:"Thinking...",generating:"Generating...",idle:"Idle",error:"Error"};function qe(r){let{state:e,message:t}=r,o=e==="thinking"||e==="generating",s=t??Kr[e]??e;return{state:e,message:s,isActive:o}}function fr(r){let{state:e,message:t,isActive:o}=qe(r);return(0,ce.jsxs)("span",{className:"urun-status-badge","data-state":e,children:[(0,ce.jsx)("span",{className:`urun-status-indicator${o?" urun-status-pulse":""}`}),(0,ce.jsx)("span",{className:"urun-status-message",children:t})]})}var de=require("react"),be=require("zod"),le=require("react/jsx-runtime"),gr=be.z.object({text:be.z.string(),streaming:be.z.boolean().default(!1)});function Ve(r){let{text:e,streaming:t=!1}=r,o=e.length===0;return{text:e,streaming:t,isEmpty:o}}function hr(r){let{text:e,streaming:t}=Ve(r),o=(0,de.useRef)(null),s=(0,de.useRef)(0);return(0,de.useEffect)(()=>{let u=o.current;u&&e.length!==s.current&&(u.textContent=e,s.current=e.length)},[e]),(0,le.jsxs)("div",{className:"urun-text-stream",children:[(0,le.jsx)("span",{ref:o,className:"urun-text-content"}),t&&(0,le.jsx)("span",{className:"urun-text-cursor"})]})}var pe=require("zod"),me=require("react/jsx-runtime"),vr=pe.z.object({src:pe.z.string().url(),alt:pe.z.string().optional(),caption:pe.z.string().optional()});function je(r){let{src:e,alt:t,caption:o}=r;return{src:e,alt:t??"",caption:o}}function Sr(r){let{src:e,alt:t,caption:o}=je(r);return(0,me.jsxs)("figure",{className:"urun-image-frame",children:[(0,me.jsx)("img",{className:"urun-image",src:e,alt:t}),o&&(0,me.jsx)("figcaption",{className:"urun-image-caption",children:o})]})}var J=require("zod"),se=require("react/jsx-runtime"),yr=J.z.object({metrics:J.z.array(J.z.object({label:J.z.string(),value:J.z.union([J.z.string(),J.z.number()]),unit:J.z.string().optional()}))});function Be(r){return{metrics:r.metrics.map(t=>({...t,displayValue:t.unit?`${t.value} ${t.unit}`:String(t.value)}))}}function kr(r){let{metrics:e}=Be(r);return(0,se.jsx)("div",{className:"urun-metrics-panel",children:e.map((t,o)=>(0,se.jsxs)("div",{className:"urun-metric-card",children:[(0,se.jsx)("div",{className:"urun-metric-label",children:t.label}),(0,se.jsx)("div",{className:"urun-metric-value",children:t.displayValue})]},o))})}var L=require("react"),xr=Fr(require("video.js")),jt=require("video.js/dist/video-js.css");var ie=require("react");var fe=require("react"),Zr=require("@urun-sh/core/internal");var Gr=require("react/jsx-runtime"),br=(0,fe.createContext)(null);function Cr(r){let e=(0,ie.useContext)(br);if(!e)throw new Error("useTrack must be used within <SessionProvider> or <UrunProvider>");let[t,o]=(0,ie.useState)(null);return(0,ie.useEffect)(()=>{let s=e.getState()._transport;if(!s)return;let u=s.getTrackByName?.bind(s),l=u?.(r);l&&l.readyState!=="ended"&&o(l);let U=s.on("track",c=>{let v=u?.(r);v&&v.id!==c.id||(o(c),c.addEventListener("ended",()=>{o(null)}))});return()=>{U()}},[r,e]),t}var z=require("react/jsx-runtime");function Tr(r){r.posterImage?.hide?.()}var Yr=`
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
+ `,Rr="urun-video-critical-css";function Qr(){if(typeof document>"u"||document.getElementById(Rr))return;let r=document.createElement("style");r.id=Rr,r.textContent=Yr,document.head.appendChild(r)}var et=["playToggle","volumePanel","fullscreenToggle"],rt=["playToggle","volumePanel","currentTimeDisplay","timeDivider","durationDisplay","progressControl","remainingTimeDisplay","fullscreenToggle"],Ur=(0,L.forwardRef)(function(e,t){let{track:o,stream:s,src:u,type:l="video/mp4",className:U,videoClassName:c,poster:v,controls:R=!0,autoPlay:p=!0,muted:h=!0,onVideoElement:E,onPlayerReady:k,children:C}=e,S=typeof u=="string"&&u.length>0,d=!S,m=(0,L.useRef)(null),f=(0,L.useRef)(null),[x,y]=(0,L.useState)(!1),H=(0,L.useCallback)(n=>{m.current=n,typeof t=="function"?t(n):t&&(t.current=n),E?.(n)},[t,E]);(0,L.useImperativeHandle)(t,()=>m.current,[]);let M=(0,L.useCallback)(()=>{let n=m.current;if(!n||!n.srcObject&&!n.src)return;h&&(n.muted=!0,n.defaultMuted=!0),n.setAttribute("playsinline",""),n.setAttribute("webkit-playsinline","");let i=n.play();i&&typeof i.then=="function"&&i.then(()=>y(!1)).catch(g=>{(g instanceof Error?g.name:String(g))!=="AbortError"&&y(!0)})},[h]);return(0,L.useEffect)(()=>{if(typeof document>"u")return;let n=m.current;if(!n)return;Qr(),h&&(n.muted=!0,n.defaultMuted=!0,n.setAttribute("muted","")),n.autoplay=p,n.setAttribute("playsinline",""),n.setAttribute("webkit-playsinline","");let i=(0,xr.default)(n,{controls:R,autoplay:p,muted:h,playsinline:!0,preload:"auto",fluid:!1,bigPlayButton:!0,poster:v,userActions:{click:!0,doubleClick:!1,hotkeys:!1},controlBar:{children:d?et:rt}});d&&i.addClass("urun-video-live");let g=()=>y(!1),b=()=>{i.hasStarted(!0),Tr(i),g()},a=()=>{d&&M()};return n.addEventListener("playing",b),n.addEventListener("loadedmetadata",a),d&&n.addEventListener("pause",a),f.current=i,k?.(i),()=>{n.removeEventListener("playing",b),n.removeEventListener("loadedmetadata",a),n.removeEventListener("pause",a),k?.(null),f.current&&(f.current.dispose(),f.current=null)}},[d]),(0,L.useEffect)(()=>{if(!S)return;let n=f.current;if(!n)return;let i=n.tech?.(!0)?.el?.();i&&(i.srcObject=null),n.src({src:u,type:l}),p&&M()},[S,u,l,p,M]),(0,L.useEffect)(()=>{if(!d)return;let n=f.current;if(!n)return;let i=o??null,g=s??null;!g&&i&&(g=new MediaStream([i]));let b=n.tech?.(!0)?.el?.()??m.current;if(!b)return;if(!g){b.srcObject=null,y(!1);return}b.srcObject=g,M();let a=g.getVideoTracks()[0]??i??null,w=()=>{n.hasStarted(!0),Tr(n),M()},T=()=>{b.srcObject=null,y(!1)};return a&&(a.addEventListener("unmute",w),a.addEventListener("ended",T),a.muted||w()),()=>{a&&(a.removeEventListener("unmute",w),a.removeEventListener("ended",T))}},[d,o,s,M]),(0,z.jsxs)("div",{className:U,style:{position:"relative",width:"100%",height:"100%"},"data-urun-video":"","data-urun-video-mode":d?"live":"vod",children:[(0,z.jsx)("video",{ref:H,className:["video-js","vjs-default-skin",c].filter(Boolean).join(" "),playsInline:!0}),x&&(0,z.jsx)("button",{type:"button",onClick:M,"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,z.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,z.jsx)("svg",{viewBox:"0 0 24 24",fill:"currentColor",width:16,height:16,"aria-hidden":!0,children:(0,z.jsx)("path",{d:"M8 5v14l11-7z"})}),"Tap to play"]})}),C]})}),tt=(0,L.forwardRef)(function({name:e,...t},o){let s=Cr(e);return(0,z.jsx)(Ur,{ref:o,...t,track:s})}),Pr=(0,L.forwardRef)(function(e,t){return!!e.name&&!e.track&&!e.stream&&!(typeof e.src=="string"&&e.src)?(0,z.jsx)(tt,{ref:t,...e,name:e.name}):(0,z.jsx)(Ur,{ref:t,...e})});var A=require("react");var Ce=null;function nt(){if(typeof window>"u")return null;let r=window;return r.AudioContext??r.webkitAudioContext??null}function ge(){if(Ce)return Ce;let r=nt();return r?(Ce=new r,Ce):null}function Te(){let r=ge();r&&r.state==="suspended"&&r.resume().catch(()=>{})}var wr=require("react/jsx-runtime"),ot=1e3,Er=200;function De(...r){console.debug("[urun-audio]",...r)}var Re=(0,A.forwardRef)(function(e,t){let{session:o,stream:s="audio",track:u,controls:l=!1,className:U,onTrack:c,onUnlockChange:v,onAudioElement:R}=e,p=(0,A.useRef)(null),h=(0,A.useRef)(null),E=(0,A.useRef)(null),k=(0,A.useRef)(null),C=(0,A.useRef)(c);C.current=c;let S=(0,A.useRef)(v);S.current=v;let d=(0,A.useCallback)(n=>{E.current!==n&&(E.current=n,S.current?.(n))},[]),m=(0,A.useCallback)(()=>{if(typeof MediaStream>"u")return null;h.current||(h.current=new MediaStream);let n=p.current;return n&&n.srcObject!==h.current&&(n.srcObject=h.current),h.current},[]),f=(0,A.useCallback)(n=>{let i=p.current;if(!i)return;let g=i.play();!g||typeof g.then!="function"||g.then(()=>{i.muted||d(!0)}).catch(b=>{let a=b instanceof Error?b.name:String(b);if(a==="AbortError"){De(`play() aborted (${n}); retrying in ${Er}ms`),k.current&&clearTimeout(k.current),k.current=setTimeout(()=>{k.current=null,f(`${n}:retry`)},Er);return}if(a==="NotAllowedError"){De(`play() blocked pending a user gesture (${n})`),d(!1);return}De(`play() failed (${n})`,b)})},[d]),x=(0,A.useCallback)(n=>{let i=m();if(i){for(let g of i.getAudioTracks())g!==n&&i.removeTrack(g);n&&!i.getAudioTracks().includes(n)&&i.addTrack(n),n&&f("track-attach"),C.current?.(n)}},[m,f]),y=(0,A.useCallback)(()=>{let n=p.current;n&&(m(),n.muted=!1,f("gesture"),Te(),d(!0))},[m,f,d]);(0,A.useImperativeHandle)(t,()=>({unlock:y,get unlocked(){return E.current===!0},get element(){return p.current}}),[y]);let H=(0,A.useCallback)(n=>{p.current=n,n&&(n.setAttribute("playsinline",""),n.setAttribute("webkit-playsinline",""),m()),R?.(n)},[m,R]),M=u!==void 0;return(0,A.useEffect)(()=>{if(M){x(u??null);return}if(!o)return;let n=o.stream(s),i=()=>{let T=h.current;return T?T.getAudioTracks()[0]??null:null},g=T=>{if(T!==i()&&(x(T),T)){let $=()=>{i()===T&&x(null)};T.addEventListener("ended",$)}},b=n.track;b&&b.readyState==="live"&&g(b);let a=n.on("track",T=>{T&&T.readyState!=="live"||g(T)}),w=setInterval(()=>{let T=n.track;T&&T.readyState==="live"&&g(T)},ot);return()=>{a(),clearInterval(w)}},[o,s,M,u,x]),(0,A.useEffect)(()=>()=>{k.current&&clearTimeout(k.current)},[]),(0,wr.jsx)("audio",{ref:H,className:U,autoPlay:!0,playsInline:!0,controls:l,"data-urun-audio":""})});var O=require("react");var _r=require("react/jsx-runtime"),He={channelCount:1,echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0};function st(...r){console.debug("[urun-voice]",...r)}var Ar=(0,O.forwardRef)(function(e,t){let{session:o,stream:s="audio",constraints:u=He,connectTimeoutMs:l,attempts:U=3,retryDelayMs:c=1500,onActiveChange:v,onError:R,onMicStream:p,onTrack:h,onUnlockChange:E}=e,k=(0,O.useRef)(null),C=(0,O.useRef)(null),S=(0,O.useRef)(!1),d=(0,O.useRef)(v);d.current=v;let m=(0,O.useRef)(R);m.current=R;let f=(0,O.useRef)(p);f.current=p;let x=(0,O.useCallback)(n=>{S.current!==n&&(S.current=n,d.current?.(n))},[]),y=(0,O.useCallback)(()=>{let n=C.current;if(n){for(let i of n.getTracks())i.stop();C.current=null,f.current?.(null)}},[]),H=(0,O.useCallback)(async()=>{y(),x(!1),await o.stream(s).detach().catch(()=>{})},[o,s,y,x]),M=(0,O.useCallback)(async()=>{k.current?.unlock();let n=await navigator.mediaDevices.getUserMedia({audio:u,video:!1});y(),C.current=n,f.current?.(n);let i=n.getAudioTracks()[0];if(!i){y();let a=new Error("no microphone audio track");throw m.current?.(a),a}o.connect?.();let g;for(let a=1;a<=U;a++)try{await o.whenLive(l!==void 0?{timeout:l}:void 0),await o.stream(s).attach(i),x(!0);return}catch(w){g=w,st(`start attempt ${a}/${U} failed`,w),a<U&&await new Promise(T=>setTimeout(T,c))}y(),x(!1);let b=g instanceof Error?g:new Error(String(g??"voice start failed"));throw m.current?.(b),b},[o,s,u,l,U,c,y,x]);return(0,O.useImperativeHandle)(t,()=>({start:M,stop:H,unlock:()=>k.current?.unlock(),get active(){return S.current},get micStream(){return C.current},get audio(){return k.current}}),[M,H]),(0,O.useEffect)(()=>y,[y]),(0,_r.jsx)(Re,{ref:k,session:o,stream:s,onTrack:h,onUnlockChange:E})});var P=require("react"),xe=require("react/jsx-runtime"),Fe={width:{ideal:960},height:{ideal:720},frameRate:{ideal:8}};function Mr(...r){console.debug("[urun-camera]",...r)}var Nr=(0,P.forwardRef)(function(e,t){let{session:o,stream:s="video",constraints:u,facingMode:l="environment",mirror:U="auto",connectTimeoutMs:c,preview:v=!0,className:R,videoClassName:p,onActiveChange:h,onError:E,onStream:k,onTrack:C,children:S}=e,d=(0,P.useRef)(null),m=(0,P.useRef)(null),f=(0,P.useRef)(null),x=(0,P.useRef)(!1),y=(0,P.useRef)(l),[H,M]=(0,P.useState)(l),n=(0,P.useRef)(h);n.current=h;let i=(0,P.useRef)(E);i.current=E;let g=(0,P.useRef)(k);g.current=k;let b=(0,P.useRef)(C);b.current=C;let a=(0,P.useCallback)(_=>{x.current!==_&&(x.current=_,n.current?.(_))},[]),w=(0,P.useCallback)(_=>{let B=d.current;B&&(B.muted=!0,B.srcObject=_,_&&B.play()?.catch?.(K=>Mr("preview play() failed",K)))},[]),T=(0,P.useCallback)(()=>{f.current?.(),f.current=null;let _=m.current;if(_){for(let B of _.getTracks())B.stop();m.current=null,g.current?.(null),b.current?.(null)}w(null)},[w]),$=(0,P.useCallback)(async _=>{let B=m.current,K=f.current,D;try{D=await navigator.mediaDevices.getUserMedia({video:{...Fe,...u,facingMode:_},audio:!1})}catch(V){let Z=V instanceof Error?V:new Error(String(V));throw i.current?.(Z),Z}let N=D.getVideoTracks()[0];if(!N){for(let Z of D.getTracks())Z.stop();let V=new Error("no camera video track");throw i.current?.(V),V}m.current=D,y.current=_,M(_),w(D),g.current?.(D);let F=()=>{m.current===D&&(Mr("camera track ended (device removed or permission revoked)"),T(),a(!1))};N.addEventListener("ended",F),f.current=()=>N.removeEventListener("ended",F);try{o.connect?.(),await o.whenLive(c!==void 0?{timeout:c}:void 0),await o.stream(s).attachVideo(N)}catch(V){N.removeEventListener("ended",F);for(let Or of D.getTracks())Or.stop();m.current===D&&(m.current=B,f.current=K,w(B),g.current?.(B));let Z=V instanceof Error?V:new Error(String(V));throw i.current?.(Z),Z}if(B&&B!==D){K?.();for(let V of B.getTracks())V.stop()}b.current?.(N),a(!0)},[o,s,u,c,w,T,a]),Pe=(0,P.useCallback)(_=>$(_?.facingMode??y.current),[$]),Ee=(0,P.useCallback)(async _=>{x.current&&y.current===_||await $(_)},[$]),we=(0,P.useCallback)(()=>$(y.current==="environment"?"user":"environment"),[$]),Ae=(0,P.useCallback)(async()=>{T(),a(!1),await o.stream(s).detachVideo().catch(()=>{})},[o,s,T,a]);return(0,P.useImperativeHandle)(t,()=>({start:Pe,stop:Ae,flip:we,setFacingMode:Ee,get active(){return x.current},get facingMode(){return y.current},get stream(){return m.current},get element(){return d.current}}),[Pe,Ae,we,Ee]),(0,P.useEffect)(()=>T,[T]),v?(0,xe.jsxs)("div",{className:R,style:{position:"relative",width:"100%",height:"100%"},"data-urun-camera":"","data-urun-camera-facing":H,children:[(0,xe.jsx)("video",{ref:d,className:p,autoPlay:!0,muted:!0,playsInline:!0,style:{width:"100%",height:"100%",objectFit:"contain",...(U==="auto"?H==="user":U)?{transform:"scaleX(-1)"}:{}}}),S]}):null});var Ue=require("react");var ze={level:0,speaking:!1};function Ir(r,e={}){let{fftSize:t=512,intervalMs:o=100,speakingThreshold:s=.02}=e,[u,l]=(0,Ue.useState)(ze);return(0,Ue.useEffect)(()=>{if(!r){l(ze);return}let U=ge();if(!U||typeof MediaStream>"u")return;let c;r instanceof MediaStream?c=r:(c=new MediaStream,c.addTrack(r));let v,R;try{v=U.createMediaStreamSource(c),R=U.createAnalyser(),R.fftSize=t,v.connect(R)}catch{return}let p=new Uint8Array(R.fftSize),E=setInterval(()=>{R.getByteTimeDomainData(p);let k=0;for(let S=0;S<p.length;S++){let d=(p[S]-128)/128;k+=d*d}let C=Math.sqrt(k/p.length);l(S=>{let d=C>s;return Math.abs(S.level-C)<.005&&S.speaking===d?S:{level:C,speaking:d}})},o);return()=>{clearInterval(E),v.disconnect(),l(ze)}},[r,t,o,s]),u}0&&(module.exports={ComponentRenderer,DEFAULT_CAMERA_CONSTRAINTS,DEFAULT_VOICE_CONSTRAINTS,ImageFrame,ImageFrameSchema,MetricsPanel,MetricsPanelSchema,ProgressCard,ProgressCardSchema,StatusBadge,StatusBadgeSchema,TextStream,TextStreamSchema,UrunAudio,UrunAuthProvider,UrunCamera,UrunErrorBoundary,UrunJwtProvider,UrunProvider,UrunVideo,UrunVoice,authMode,getUrunAudioContext,registerComponent,resumeUrunAudioContext,urunPublicEnv,useApp,useChat,useCompletion,useImageFrame,useMetricsPanel,useProgressCard,useRequest,useStatusBadge,useTextStream,useUrunAudioLevel,useUrunAuth,usesWorkOSAuth});
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import{a as ze,b as He,c as G}from"./chunk-QAEWAWV4.mjs";import{useEffect as We,useMemo as Ke,useState as Ze}from"react";import{Component as Fe}from"react";import{jsx as le,jsxs as Xe}from"react/jsx-runtime";var L=class extends Fe{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||Xe("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:[le("p",{style:{margin:0,fontWeight:600},children:"Connection interrupted"}),le("p",{style:{margin:"6px 0 0",color:"#4b5563"},children:"Reconnecting automatically."})]})}return this.props.children}};import{createContext as $e}from"react";var D=$e(null);function N(r){return r&&r.trim()?r.trim():void 0}function U(r){switch(r){case"NEXT_PUBLIC_AUTH_MODE":return N(typeof process<"u"?process.env?.NEXT_PUBLIC_AUTH_MODE:void 0);case"NEXT_PUBLIC_AUTH_ENABLED":return N(typeof process<"u"?process.env?.NEXT_PUBLIC_AUTH_ENABLED:void 0);case"NEXT_PUBLIC_SESSION_AUTH_PROVIDER":return N(typeof process<"u"?process.env?.NEXT_PUBLIC_SESSION_AUTH_PROVIDER:void 0);case"NEXT_PUBLIC_SESSION_TOKEN":return N(typeof process<"u"?process.env?.NEXT_PUBLIC_SESSION_TOKEN:void 0);case"NEXT_PUBLIC_URUN_JWT":return N(typeof process<"u"?process.env?.NEXT_PUBLIC_URUN_JWT:void 0);case"VERCEL_ENV":return N(typeof process<"u"?process.env?.VERCEL_ENV:void 0);default:return N(typeof process<"u"?process.env?.[r]:void 0)}}function z(){let r=U("NEXT_PUBLIC_AUTH_MODE")?.toLowerCase();return r==="jwt"||r==="customer-jwt"||r==="test-jwt"?"jwt":r==="workos"||U("VERCEL_ENV")==="production"?"workos":U("NEXT_PUBLIC_AUTH_ENABLED")==="false"?"jwt":"workos"}function Je(){return z()==="workos"}import{jsx as Y}from"react/jsx-runtime";function Ge({baseUrl:r,orgId:e,appId:t,jwt:n,authProvider:o,fallback:i,children:a}){let[x,u]=Ze(),m=G(),b=U("NEXT_PUBLIC_SESSION_TOKEN")??U("NEXT_PUBLIC_URUN_JWT"),c=z(),p=c==="workos"&&!n,R=n??(c==="jwt"?b:void 0)??x,T=o??U("NEXT_PUBLIC_SESSION_AUTH_PROVIDER"),S=p&&!R,v=Ke(()=>({appId:t,baseUrl:r,orgId:e,jwt:R,getAccessToken:p?m?.getAccessToken:void 0,authProvider:T}),[t,m,r,T,R,e,p]);return We(()=>{if(!p||!m)return;let f=!1,h=m;async function g(){try{let C=await h.getAccessToken();f||u(C??void 0)}catch{f||u(void 0)}}g();let P=window.setInterval(()=>{g()},6e4);return()=>{f=!0,window.clearInterval(P)}},[m,p]),Y(L,{fallback:i,children:S?Y("div",{role:"status","aria-live":"polite",children:"Signing in..."}):Y(D.Provider,{value:v,children:a})})}import{useContext as Ye,useMemo as me,useReducer as Qe,useRef as er}from"react";import{App as rr}from"@urun-sh/core";function tr(r,e){return`${r}:${JSON.stringify(e??{})}`}var Q=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(o){t.append(o),n()},toString:()=>t.toString(),get length(){return t.length},on:(o,i)=>t.on(o,a=>{i(a),n()})}}dispose(){this._unsubscribeChange()}},ee=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()}},re=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 Q(this._session.doc(e),this._notify),this._docs.set(e,t)),t}stream(e){let t=this._streams.get(e);return t||(t=new ee(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 nr(){let r=Ye(D);if(!r)throw new Error("useApp must be used within <UrunProvider>");if(!r.appId)throw new Error('useApp requires <UrunProvider appId="...">');let[,e]=Qe(o=>o+1,0),t=er(new Map),n=me(()=>rr(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 me(()=>new Proxy({},{get(o,i){if(typeof i=="string")return a=>{let x=tr(i,a),u=t.current.get(x);if(u)return u;let m=new re(n[i](a),e);return t.current.set(x,m),m}}}),[n])}import{useCallback as te,useEffect as sr,useMemo as or,useRef as H,useState as ne}from"react";function M(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 ir(r){return r instanceof Error?r:new Error(String(r))}function ar(r,e){let t=or(()=>M(r),[r]),[n,o]=ne(void 0),[i,a]=ne(null),[x,u]=ne(!1),m=H(e);m.current=e;let b=H(0),c=H(null),p=H(!0);sr(()=>(p.current=!0,()=>{p.current=!1,c.current?.abort()}),[]);let R=te(async v=>{c.current?.abort();let f=new AbortController;c.current=f;let h=++b.current,g=()=>p.current&&b.current===h;g()&&(u(!0),a(null));try{let P=await t.request(v,{...m.current,signal:f.signal});return g()&&(o(P),u(!1),m.current?.onSuccess?.(P)),P}catch(P){let C=ir(P);throw g()&&(a(C),u(!1),m.current?.onError?.(C)),C}},[t]),T=te(v=>{R(v).catch(()=>{})},[R]),S=te(()=>{b.current++,c.current?.abort(),c.current=null,o(void 0),a(null),u(!1)},[]);return{mutate:T,mutateAsync:R,data:n,error:i,isPending:x,reset:S}}import{useCallback as fe,useEffect as ur,useMemo as cr,useRef as F,useState as se}from"react";function ge(r){return r instanceof Error?r:new Error(String(r))}var dr=r=>typeof r=="string"?r:String(r);function pr(r,e){let t=cr(()=>M(r),[r]),[n,o]=se(""),[i,a]=se(!1),[x,u]=se(null),m=F(e);m.current=e;let b=F(0),c=F(null),p=F(!0);ur(()=>(p.current=!0,()=>{p.current=!1,c.current?.cancel(),c.current=null}),[]);let R=fe(()=>{b.current++,c.current?.cancel(),c.current=null,p.current&&a(!1)},[]),T=fe(async S=>{c.current?.cancel();let v=++b.current,f=()=>p.current&&b.current===v,h=m.current,g=h?.parseChunk??dr,P=h?.buildPayload??(l=>({prompt:l}));f()&&(o(""),u(null),a(!0));let{parseChunk:C,buildPayload:W,onFinish:w,onError:s,...d}=h??{},y="",k;try{k=t.requestStream(P(S),d),c.current=k}catch(l){let _=ge(l);f()&&(u(_),a(!1),h?.onError?.(_));return}try{for await(let l of k){if(b.current!==v)break;y+=g(l),f()&&o(y)}f()&&(a(!1),h?.onFinish?.(y))}catch(l){let _=ge(l);f()&&(u(_),a(!1),h?.onError?.(_))}finally{c.current===k&&(c.current=null)}},[t]);return{completion:n,complete:T,stop:R,isStreaming:i,error:x}}import{useCallback as he,useEffect as lr,useMemo as mr,useRef as O,useState as X}from"react";function ve(r){return r instanceof Error?r:new Error(String(r))}var fr=r=>typeof r=="string"?r:String(r),ye=0;function oe(r){return ye+=1,`${r}-${ye}`}function gr(r,e){let t=mr(()=>M(r),[r]),[n,o]=X(()=>(e?.initialMessages??[]).map(g=>({id:g.id??oe("msg"),role:g.role,content:g.content}))),[i,a]=X(""),[x,u]=X(!1),[m,b]=X(null),c=O(e);c.current=e;let p=O(n);p.current=n;let R=O(i);R.current=i;let T=O(0),S=O(null),v=O(!0);lr(()=>(v.current=!0,()=>{v.current=!1,S.current?.cancel(),S.current=null}),[]);let f=he(()=>{T.current++,S.current?.cancel(),S.current=null,v.current&&u(!1)},[]),h=he(async g=>{let P=g===void 0,C=(P?R.current:g)??"";if(!C.trim())return;S.current?.cancel();let w=++T.current,s=()=>v.current&&T.current===w,d=c.current,y=d?.parseChunk??fr,k={id:oe("msg"),role:"user",content:C},l={id:oe("msg"),role:"assistant",content:""},_=[...p.current,k].map(E=>({role:E.role,content:E.content})),j=[...p.current,k,l];p.current=j,o(j),P&&a(""),b(null),u(!0);let Ve=d?.buildPayload??(E=>({messages:E})),{initialMessages:Wr,parseChunk:Kr,buildPayload:Zr,onFinish:Gr,onError:Yr,...Be}=d??{},De=E=>{o(I=>I.map(Z=>Z.id===l.id?{...Z,content:E}:Z))},K="",B;try{B=t.requestStream(Ve(_),Be),S.current=B}catch(E){let I=ve(E);s()&&(b(I),u(!1),d?.onError?.(I));return}try{for await(let E of B){if(T.current!==w)break;K+=y(E),s()&&De(K)}s()&&(u(!1),d?.onFinish?.({...l,content:K}))}catch(E){let I=ve(E);s()&&(b(I),u(!1),d?.onError?.(I))}finally{S.current===B&&(S.current=null)}},[t]);return{messages:n,input:i,setInput:a,sendMessage:h,stop:f,isStreaming:x,error:m}}var be=new Map;function hr(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 Se(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}`}}import{Fragment as yr,jsx as $}from"react/jsx-runtime";function vr({name:r,props:e,fallback:t}){let n=Se(r,e);if(n.error)return console.warn(`[urun] ComponentRenderer: ${n.error}`),t?$(yr,{children:t}):$("div",{className:"urun-component-error",role:"alert",children:$("span",{className:"urun-component-error-text",children:n.error})});let o=n.Component;return $(o,{...n.validatedProps})}import{z as V}from"zod";import{jsx as ie,jsxs as ke}from"react/jsx-runtime";var br=V.object({step:V.number().min(0),total:V.number().min(1),label:V.string().optional(),variant:V.enum(["default","success","error"]).default("default")});function Re(r){let{step:e,total:t,label:n,variant:o="default"}=r,i=Math.min(e/t*100,100),a=e>=t;return{step:e,total:t,label:n,variant:o,percentage:i,isComplete:a}}function Sr(r){let{step:e,total:t,label:n,variant:o,percentage:i}=Re(r);return ke("div",{className:"urun-progress-card","data-variant":o,children:[n&&ie("div",{className:"urun-progress-label",children:n}),ie("div",{className:"urun-progress-bar",children:ie("div",{className:"urun-progress-fill",style:{width:`${i}%`}})}),ke("div",{className:"urun-progress-text",children:[e,"/",t]})]})}import{z as ae}from"zod";import{jsx as Ce,jsxs as xr}from"react/jsx-runtime";var kr=ae.object({state:ae.enum(["thinking","generating","idle","error"]),message:ae.string().optional()}),Rr={thinking:"Thinking...",generating:"Generating...",idle:"Idle",error:"Error"};function xe(r){let{state:e,message:t}=r,n=e==="thinking"||e==="generating",o=t??Rr[e]??e;return{state:e,message:o,isActive:n}}function Cr(r){let{state:e,message:t,isActive:n}=xe(r);return xr("span",{className:"urun-status-badge","data-state":e,children:[Ce("span",{className:`urun-status-indicator${n?" urun-status-pulse":""}`}),Ce("span",{className:"urun-status-message",children:t})]})}import{useRef as Te,useEffect as Tr}from"react";import{z as ue}from"zod";import{jsx as Pe,jsxs as wr}from"react/jsx-runtime";var Pr=ue.object({text:ue.string(),streaming:ue.boolean().default(!1)});function Ee(r){let{text:e,streaming:t=!1}=r,n=e.length===0;return{text:e,streaming:t,isEmpty:n}}function Er(r){let{text:e,streaming:t}=Ee(r),n=Te(null),o=Te(0);return Tr(()=>{let i=n.current;i&&e.length!==o.current&&(i.textContent=e,o.current=e.length)},[e]),wr("div",{className:"urun-text-stream",children:[Pe("span",{ref:n,className:"urun-text-content"}),t&&Pe("span",{className:"urun-text-cursor"})]})}import{z as J}from"zod";import{jsx as we,jsxs as Ar}from"react/jsx-runtime";var _r=J.object({src:J.string().url(),alt:J.string().optional(),caption:J.string().optional()});function _e(r){let{src:e,alt:t,caption:n}=r;return{src:e,alt:t??"",caption:n}}function Ur(r){let{src:e,alt:t,caption:n}=_e(r);return Ar("figure",{className:"urun-image-frame",children:[we("img",{className:"urun-image",src:e,alt:t}),n&&we("figcaption",{className:"urun-image-caption",children:n})]})}import{z as A}from"zod";import{jsx as ce,jsxs as qr}from"react/jsx-runtime";var Ir=A.object({metrics:A.array(A.object({label:A.string(),value:A.union([A.string(),A.number()]),unit:A.string().optional()}))});function Ue(r){return{metrics:r.metrics.map(t=>({...t,displayValue:t.unit?`${t.value} ${t.unit}`:String(t.value)}))}}function Nr(r){let{metrics:e}=Ue(r);return ce("div",{className:"urun-metrics-panel",children:e.map((t,n)=>qr("div",{className:"urun-metric-card",children:[ce("div",{className:"urun-metric-label",children:t.label}),ce("div",{className:"urun-metric-value",children:t.displayValue})]},n))})}import{forwardRef as pe,useCallback as Ne,useEffect as de,useImperativeHandle as Vr,useRef as qe,useState as Br}from"react";import Dr from"video.js";import"video.js/dist/video-js.css";import{useContext as Or,useState as jr,useEffect as Lr}from"react";import{createContext as Mr,useState as Kt,useEffect as Zt,useRef as Gt}from"react";import{TransportSession as Qt}from"@urun-sh/core/internal";import{jsx as rn}from"react/jsx-runtime";var Ae=Mr(null);function Ie(r){let e=Or(Ae);if(!e)throw new Error("useTrack must be used within <SessionProvider> or <UrunProvider>");let[t,n]=jr(null);return Lr(()=>{let o=e.getState()._transport;if(!o)return;let i=o.getTrackByName?.bind(o),a=i?.(r);a&&a.readyState!=="ended"&&n(a);let x=o.on("track",u=>{let m=i?.(r);m&&m.id!==u.id||(n(u),u.addEventListener("ended",()=>{n(null)}))});return()=>{x()}},[r,e]),t}import{jsx as q,jsxs as je}from"react/jsx-runtime";function Me(r){r.posterImage?.hide?.()}var zr=`
1
+ import{a as Z,b as le,c as lr}from"./chunk-SSZO4I6Y.mjs";import{a as pr,b as mr,c as pe}from"./chunk-QAEWAWV4.mjs";import{useEffect as vr,useMemo as Sr,useState as yr}from"react";import{Component as fr}from"react";import{jsx as Me,jsxs as gr}from"react/jsx-runtime";var G=class extends fr{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||gr("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:[Me("p",{style:{margin:0,fontWeight:600},children:"Connection interrupted"}),Me("p",{style:{margin:"6px 0 0",color:"#4b5563"},children:"Reconnecting automatically."})]})}return this.props.children}};import{createContext as hr}from"react";var Y=hr(null);import{jsx as me}from"react/jsx-runtime";function br({baseUrl:r,orgId:e,appId:t,jwt:o,authProvider:s,fallback:u,children:l}){let[P,c]=yr(),v=pe(),x=Z("NEXT_PUBLIC_SESSION_TOKEN")??Z("NEXT_PUBLIC_URUN_JWT"),p=le(),h=p==="workos"&&!o,w=o??(p==="jwt"?x:void 0)??P,b=s??Z("NEXT_PUBLIC_SESSION_AUTH_PROVIDER"),C=h&&!w,S=Sr(()=>({appId:t,baseUrl:r,orgId:e,jwt:w,getAccessToken:h?v?.getAccessToken:void 0,authProvider:b}),[t,v,r,b,w,e,h]);return vr(()=>{if(!h||!v)return;let d=!1,m=v;async function f(){try{let y=await m.getAccessToken();d||c(y??void 0)}catch{d||c(void 0)}}f();let T=window.setInterval(()=>{f()},6e4);return()=>{d=!0,window.clearInterval(T)}},[v,h]),me(G,{fallback:u,children:C?me("div",{role:"status","aria-live":"polite",children:"Signing in..."}):me(Y.Provider,{value:S,children:l})})}import{useContext as kr,useMemo as _e,useReducer as Cr,useRef as Rr}from"react";import{App as xr}from"@urun-sh/core";function Tr(r,e){return`${r}:${JSON.stringify(e??{})}`}var fe=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,o=>t(o))}get synced(){return this._doc.synced}onSynced(e){return this._doc.onSynced(()=>{e(),this._notify()})}text(e){let t=this._doc.text(e),o=this._notify;return{append(s){t.append(s),o()},toString:()=>t.toString(),get length(){return t.length},on:(s,u)=>t.on(s,l=>{u(l),o()})}}dispose(){this._unsubscribeChange()}},ge=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()}},he=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;_disposed=!1;get disposed(){return this._disposed}get id(){return this._session.id}get phase(){return this._session.phase}onPhase(e){return this._session.onPhase(e)}whenLive(e){return this._session.whenLive(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 fe(this._session.doc(e),this._notify),this._docs.set(e,t)),t}stream(e){let t=this._streams.get(e);return t||(t=new ge(this._session.stream(e),this._notify),this._streams.set(e,t)),t}disconnect(){this._disposed=!0;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 Pr(){let r=kr(Y);if(!r)throw new Error("useApp must be used within <UrunProvider>");if(!r.appId)throw new Error('useApp requires <UrunProvider appId="...">');let[,e]=Cr(s=>s+1,0),t=Rr(new Map),o=_e(()=>xr(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 _e(()=>new Proxy({},{get(s,u){if(typeof u=="string")return l=>{let P=Tr(u,l),c=t.current.get(P);if(c&&!c.disposed)return c;let v=new he(o[u](l),e);return t.current.set(P,v),v}}}),[o])}import{useCallback as ve,useEffect as wr,useMemo as Ur,useRef as Q,useState as Se}from"react";function B(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 Er(r){return r instanceof Error?r:new Error(String(r))}function Ar(r,e){let t=Ur(()=>B(r),[r]),[o,s]=Se(void 0),[u,l]=Se(null),[P,c]=Se(!1),v=Q(e);v.current=e;let x=Q(0),p=Q(null),h=Q(!0);wr(()=>(h.current=!0,()=>{h.current=!1,p.current?.abort()}),[]);let w=ve(async S=>{p.current?.abort();let d=new AbortController;p.current=d;let m=++x.current,f=()=>h.current&&x.current===m;f()&&(c(!0),l(null));try{let T=await t.request(S,{...v.current,signal:d.signal});return f()&&(s(T),c(!1),v.current?.onSuccess?.(T)),T}catch(T){let y=Er(T);throw f()&&(l(y),c(!1),v.current?.onError?.(y)),y}},[t]),b=ve(S=>{w(S).catch(()=>{})},[w]),C=ve(()=>{x.current++,p.current?.abort(),p.current=null,s(void 0),l(null),c(!1)},[]);return{mutate:b,mutateAsync:w,data:o,error:u,isPending:P,reset:C}}import{useCallback as Ie,useEffect as Mr,useMemo as _r,useRef as ee,useState as ye}from"react";function Ne(r){return r instanceof Error?r:new Error(String(r))}var Ir=r=>typeof r=="string"?r:String(r);function Nr(r,e){let t=_r(()=>B(r),[r]),[o,s]=ye(""),[u,l]=ye(!1),[P,c]=ye(null),v=ee(e);v.current=e;let x=ee(0),p=ee(null),h=ee(!0);Mr(()=>(h.current=!0,()=>{h.current=!1,p.current?.cancel(),p.current=null}),[]);let w=Ie(()=>{x.current++,p.current?.cancel(),p.current=null,h.current&&l(!1)},[]),b=Ie(async C=>{p.current?.cancel();let S=++x.current,d=()=>h.current&&x.current===S,m=v.current,f=m?.parseChunk??Ir,T=m?.buildPayload??(a=>({prompt:a}));d()&&(s(""),c(null),l(!0));let{parseChunk:y,buildPayload:q,onFinish:A,onError:n,...i}=m??{},g="",k;try{k=t.requestStream(T(C),i),p.current=k}catch(a){let U=Ne(a);d()&&(c(U),l(!1),m?.onError?.(U));return}try{for await(let a of k){if(x.current!==S)break;g+=f(a),d()&&s(g)}d()&&(l(!1),m?.onFinish?.(g))}catch(a){let U=Ne(a);d()&&(c(U),l(!1),m?.onError?.(U))}finally{p.current===k&&(p.current=null)}},[t]);return{completion:o,complete:b,stop:w,isStreaming:u,error:P}}import{useCallback as qe,useEffect as qr,useMemo as Or,useRef as $,useState as re}from"react";function Oe(r){return r instanceof Error?r:new Error(String(r))}var Lr=r=>typeof r=="string"?r:String(r),Le=0;function be(r){return Le+=1,`${r}-${Le}`}function Vr(r,e){let t=Or(()=>B(r),[r]),[o,s]=re(()=>(e?.initialMessages??[]).map(f=>({id:f.id??be("msg"),role:f.role,content:f.content}))),[u,l]=re(""),[P,c]=re(!1),[v,x]=re(null),p=$(e);p.current=e;let h=$(o);h.current=o;let w=$(u);w.current=u;let b=$(0),C=$(null),S=$(!0);qr(()=>(S.current=!0,()=>{S.current=!1,C.current?.cancel(),C.current=null}),[]);let d=qe(()=>{b.current++,C.current?.cancel(),C.current=null,S.current&&c(!1)},[]),m=qe(async f=>{let T=f===void 0,y=(T?w.current:f)??"";if(!y.trim())return;C.current?.cancel();let A=++b.current,n=()=>S.current&&b.current===A,i=p.current,g=i?.parseChunk??Lr,k={id:be("msg"),role:"user",content:y},a={id:be("msg"),role:"assistant",content:""},U=[...h.current,k].map(M=>({role:M.role,content:M.content})),R=[...h.current,k,a];h.current=R,s(R),T&&l(""),x(null),c(!0);let L=i?.buildPayload??(M=>({messages:M})),{initialMessages:ae,parseChunk:ue,buildPayload:ce,onFinish:de,onError:cr,...E}=i??{},I=M=>{s(O=>O.map(_=>_.id===a.id?{..._,content:M}:_))},j="",N;try{N=t.requestStream(L(U),E),C.current=N}catch(M){let O=Oe(M);n()&&(x(O),c(!1),i?.onError?.(O));return}try{for await(let M of N){if(b.current!==A)break;j+=g(M),n()&&I(j)}n()&&(c(!1),i?.onFinish?.({...a,content:j}))}catch(M){let O=Oe(M);n()&&(x(O),c(!1),i?.onError?.(O))}finally{C.current===N&&(C.current=null)}},[t]);return{messages:o,input:u,setInput:l,sendMessage:m,stop:d,isStreaming:P,error:v}}var Ve=new Map;function jr(r,e,t){if(!t||typeof t.safeParse!="function")throw new Error(`registerComponent("${r}"): schema must be a valid Zod schema`);Ve.set(r,{component:e,schema:t})}function je(r,e){let t=Ve.get(r);if(!t)return{error:`Unknown component: "${r}"`};let o=t.schema.safeParse(e);return o.success?{Component:t.component,validatedProps:o.data}:{error:`Validation failed for "${r}": ${o.error.message}`}}import{Fragment as Dr,jsx as te}from"react/jsx-runtime";function Fr({name:r,props:e,fallback:t}){let o=je(r,e);if(o.error)return console.warn(`[urun] ComponentRenderer: ${o.error}`),t?te(Dr,{children:t}):te("div",{className:"urun-component-error",role:"alert",children:te("span",{className:"urun-component-error-text",children:o.error})});let s=o.Component;return te(s,{...o.validatedProps})}import{z as K}from"zod";import{jsx as ke,jsxs as Fe}from"react/jsx-runtime";var zr=K.object({step:K.number().min(0),total:K.number().min(1),label:K.string().optional(),variant:K.enum(["default","success","error"]).default("default")});function De(r){let{step:e,total:t,label:o,variant:s="default"}=r,u=Math.min(e/t*100,100),l=e>=t;return{step:e,total:t,label:o,variant:s,percentage:u,isComplete:l}}function Hr(r){let{step:e,total:t,label:o,variant:s,percentage:u}=De(r);return Fe("div",{className:"urun-progress-card","data-variant":s,children:[o&&ke("div",{className:"urun-progress-label",children:o}),ke("div",{className:"urun-progress-bar",children:ke("div",{className:"urun-progress-fill",style:{width:`${u}%`}})}),Fe("div",{className:"urun-progress-text",children:[e,"/",t]})]})}import{z as Ce}from"zod";import{jsx as ze,jsxs as Jr}from"react/jsx-runtime";var Br=Ce.object({state:Ce.enum(["thinking","generating","idle","error"]),message:Ce.string().optional()}),$r={thinking:"Thinking...",generating:"Generating...",idle:"Idle",error:"Error"};function He(r){let{state:e,message:t}=r,o=e==="thinking"||e==="generating",s=t??$r[e]??e;return{state:e,message:s,isActive:o}}function Wr(r){let{state:e,message:t,isActive:o}=He(r);return Jr("span",{className:"urun-status-badge","data-state":e,children:[ze("span",{className:`urun-status-indicator${o?" urun-status-pulse":""}`}),ze("span",{className:"urun-status-message",children:t})]})}import{useRef as Be,useEffect as Xr}from"react";import{z as Re}from"zod";import{jsx as $e,jsxs as Kr}from"react/jsx-runtime";var Zr=Re.object({text:Re.string(),streaming:Re.boolean().default(!1)});function We(r){let{text:e,streaming:t=!1}=r,o=e.length===0;return{text:e,streaming:t,isEmpty:o}}function Gr(r){let{text:e,streaming:t}=We(r),o=Be(null),s=Be(0);return Xr(()=>{let u=o.current;u&&e.length!==s.current&&(u.textContent=e,s.current=e.length)},[e]),Kr("div",{className:"urun-text-stream",children:[$e("span",{ref:o,className:"urun-text-content"}),t&&$e("span",{className:"urun-text-cursor"})]})}import{z as ne}from"zod";import{jsx as Je,jsxs as et}from"react/jsx-runtime";var Yr=ne.object({src:ne.string().url(),alt:ne.string().optional(),caption:ne.string().optional()});function Xe(r){let{src:e,alt:t,caption:o}=r;return{src:e,alt:t??"",caption:o}}function Qr(r){let{src:e,alt:t,caption:o}=Xe(r);return et("figure",{className:"urun-image-frame",children:[Je("img",{className:"urun-image",src:e,alt:t}),o&&Je("figcaption",{className:"urun-image-caption",children:o})]})}import{z as F}from"zod";import{jsx as xe,jsxs as nt}from"react/jsx-runtime";var rt=F.object({metrics:F.array(F.object({label:F.string(),value:F.union([F.string(),F.number()]),unit:F.string().optional()}))});function Ze(r){return{metrics:r.metrics.map(t=>({...t,displayValue:t.unit?`${t.value} ${t.unit}`:String(t.value)}))}}function tt(r){let{metrics:e}=Ze(r);return xe("div",{className:"urun-metrics-panel",children:e.map((t,o)=>nt("div",{className:"urun-metric-card",children:[xe("div",{className:"urun-metric-label",children:t.label}),xe("div",{className:"urun-metric-value",children:t.displayValue})]},o))})}import{forwardRef as Pe,useCallback as Ye,useEffect as Te,useImperativeHandle as ut,useRef as Qe,useState as ct}from"react";import dt from"video.js";import"video.js/dist/video-js.css";import{useContext as st,useState as it,useEffect as at}from"react";import{createContext as ot,useState as Nn,useEffect as qn,useRef as On}from"react";import{TransportSession as Vn}from"@urun-sh/core/internal";import{jsx as Fn}from"react/jsx-runtime";var Ge=ot(null);function Ke(r){let e=st(Ge);if(!e)throw new Error("useTrack must be used within <SessionProvider> or <UrunProvider>");let[t,o]=it(null);return at(()=>{let s=e.getState()._transport;if(!s)return;let u=s.getTrackByName?.bind(s),l=u?.(r);l&&l.readyState!=="ended"&&o(l);let P=s.on("track",c=>{let v=u?.(r);v&&v.id!==c.id||(o(c),c.addEventListener("ended",()=>{o(null)}))});return()=>{P()}},[r,e]),t}import{jsx as H,jsxs as tr}from"react/jsx-runtime";function er(r){r.posterImage?.hide?.()}var lt=`
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 @@ import{a as ze,b as He,c as G}from"./chunk-QAEWAWV4.mjs";import{useEffect as We,
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
- `,Oe="urun-video-critical-css";function Hr(){if(typeof document>"u"||document.getElementById(Oe))return;let r=document.createElement("style");r.id=Oe,r.textContent=zr,document.head.appendChild(r)}var Fr=["playToggle","volumePanel","fullscreenToggle"],Xr=["playToggle","volumePanel","currentTimeDisplay","timeDivider","durationDisplay","progressControl","remainingTimeDisplay","fullscreenToggle"],Le=pe(function(e,t){let{track:n,stream:o,src:i,type:a="video/mp4",className:x,videoClassName:u,poster:m,controls:b=!0,autoPlay:c=!0,muted:p=!0,onVideoElement:R,onPlayerReady:T,children:S}=e,v=typeof i=="string"&&i.length>0,f=!v,h=qe(null),g=qe(null),[P,C]=Br(!1),W=Ne(s=>{h.current=s,typeof t=="function"?t(s):t&&(t.current=s),R?.(s)},[t,R]);Vr(t,()=>h.current,[]);let w=Ne(()=>{let s=h.current;if(!s||!s.srcObject&&!s.src)return;p&&(s.muted=!0,s.defaultMuted=!0),s.setAttribute("playsinline",""),s.setAttribute("webkit-playsinline","");let d=s.play();d&&typeof d.then=="function"&&d.then(()=>C(!1)).catch(y=>{(y instanceof Error?y.name:String(y))!=="AbortError"&&C(!0)})},[p]);return de(()=>{if(typeof document>"u")return;let s=h.current;if(!s)return;Hr(),p&&(s.muted=!0,s.defaultMuted=!0,s.setAttribute("muted","")),s.autoplay=c,s.setAttribute("playsinline",""),s.setAttribute("webkit-playsinline","");let d=Dr(s,{controls:b,autoplay:c,muted:p,playsinline:!0,preload:"auto",fluid:!1,bigPlayButton:!0,poster:m,userActions:{click:!0,doubleClick:!1,hotkeys:!1},controlBar:{children:f?Fr:Xr}});f&&d.addClass("urun-video-live");let y=()=>C(!1),k=()=>{d.hasStarted(!0),Me(d),y()},l=()=>{f&&w()};return s.addEventListener("playing",k),s.addEventListener("loadedmetadata",l),f&&s.addEventListener("pause",l),g.current=d,T?.(d),()=>{s.removeEventListener("playing",k),s.removeEventListener("loadedmetadata",l),s.removeEventListener("pause",l),T?.(null),g.current&&(g.current.dispose(),g.current=null)}},[f]),de(()=>{if(!v)return;let s=g.current;if(!s)return;let d=s.tech?.(!0)?.el?.();d&&(d.srcObject=null),s.src({src:i,type:a}),c&&w()},[v,i,a,c,w]),de(()=>{if(!f)return;let s=g.current;if(!s)return;let d=n??null,y=o??null;!y&&d&&(y=new MediaStream([d]));let k=s.tech?.(!0)?.el?.()??h.current;if(!k)return;if(!y){k.srcObject=null,C(!1);return}k.srcObject=y,w();let l=y.getVideoTracks()[0]??d??null,_=()=>{s.hasStarted(!0),Me(s),w()},j=()=>{k.srcObject=null,C(!1)};return l&&(l.addEventListener("unmute",_),l.addEventListener("ended",j),l.muted||_()),()=>{l&&(l.removeEventListener("unmute",_),l.removeEventListener("ended",j))}},[f,n,o,w]),je("div",{className:x,style:{position:"relative",width:"100%",height:"100%"},"data-urun-video":"","data-urun-video-mode":f?"live":"vod",children:[q("video",{ref:W,className:["video-js","vjs-default-skin",u].filter(Boolean).join(" "),playsInline:!0}),P&&q("button",{type:"button",onClick:w,"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:je("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:[q("svg",{viewBox:"0 0 24 24",fill:"currentColor",width:16,height:16,"aria-hidden":!0,children:q("path",{d:"M8 5v14l11-7z"})}),"Tap to play"]})}),S]})}),$r=pe(function({name:e,...t},n){let o=Ie(e);return q(Le,{ref:n,...t,track:o})}),Jr=pe(function(e,t){return!!e.name&&!e.track&&!e.stream&&!(typeof e.src=="string"&&e.src)?q($r,{ref:t,...e,name:e.name}):q(Le,{ref:t,...e})});export{vr as ComponentRenderer,Ur as ImageFrame,_r as ImageFrameSchema,Nr as MetricsPanel,Ir as MetricsPanelSchema,Sr as ProgressCard,br as ProgressCardSchema,Cr as StatusBadge,kr as StatusBadgeSchema,Er as TextStream,Pr as TextStreamSchema,ze as UrunAuthProvider,L as UrunErrorBoundary,He as UrunJwtProvider,Ge as UrunProvider,Jr as UrunVideo,z as authMode,hr as registerComponent,U as urunPublicEnv,nr as useApp,gr as useChat,pr as useCompletion,_e as useImageFrame,Ue as useMetricsPanel,Re as useProgressCard,ar as useRequest,xe as useStatusBadge,Ee as useTextStream,G as useUrunAuth,Je as usesWorkOSAuth};
9
+ `,rr="urun-video-critical-css";function pt(){if(typeof document>"u"||document.getElementById(rr))return;let r=document.createElement("style");r.id=rr,r.textContent=lt,document.head.appendChild(r)}var mt=["playToggle","volumePanel","fullscreenToggle"],ft=["playToggle","volumePanel","currentTimeDisplay","timeDivider","durationDisplay","progressControl","remainingTimeDisplay","fullscreenToggle"],nr=Pe(function(e,t){let{track:o,stream:s,src:u,type:l="video/mp4",className:P,videoClassName:c,poster:v,controls:x=!0,autoPlay:p=!0,muted:h=!0,onVideoElement:w,onPlayerReady:b,children:C}=e,S=typeof u=="string"&&u.length>0,d=!S,m=Qe(null),f=Qe(null),[T,y]=ct(!1),q=Ye(n=>{m.current=n,typeof t=="function"?t(n):t&&(t.current=n),w?.(n)},[t,w]);ut(t,()=>m.current,[]);let A=Ye(()=>{let n=m.current;if(!n||!n.srcObject&&!n.src)return;h&&(n.muted=!0,n.defaultMuted=!0),n.setAttribute("playsinline",""),n.setAttribute("webkit-playsinline","");let i=n.play();i&&typeof i.then=="function"&&i.then(()=>y(!1)).catch(g=>{(g instanceof Error?g.name:String(g))!=="AbortError"&&y(!0)})},[h]);return Te(()=>{if(typeof document>"u")return;let n=m.current;if(!n)return;pt(),h&&(n.muted=!0,n.defaultMuted=!0,n.setAttribute("muted","")),n.autoplay=p,n.setAttribute("playsinline",""),n.setAttribute("webkit-playsinline","");let i=dt(n,{controls:x,autoplay:p,muted:h,playsinline:!0,preload:"auto",fluid:!1,bigPlayButton:!0,poster:v,userActions:{click:!0,doubleClick:!1,hotkeys:!1},controlBar:{children:d?mt:ft}});d&&i.addClass("urun-video-live");let g=()=>y(!1),k=()=>{i.hasStarted(!0),er(i),g()},a=()=>{d&&A()};return n.addEventListener("playing",k),n.addEventListener("loadedmetadata",a),d&&n.addEventListener("pause",a),f.current=i,b?.(i),()=>{n.removeEventListener("playing",k),n.removeEventListener("loadedmetadata",a),n.removeEventListener("pause",a),b?.(null),f.current&&(f.current.dispose(),f.current=null)}},[d]),Te(()=>{if(!S)return;let n=f.current;if(!n)return;let i=n.tech?.(!0)?.el?.();i&&(i.srcObject=null),n.src({src:u,type:l}),p&&A()},[S,u,l,p,A]),Te(()=>{if(!d)return;let n=f.current;if(!n)return;let i=o??null,g=s??null;!g&&i&&(g=new MediaStream([i]));let k=n.tech?.(!0)?.el?.()??m.current;if(!k)return;if(!g){k.srcObject=null,y(!1);return}k.srcObject=g,A();let a=g.getVideoTracks()[0]??i??null,U=()=>{n.hasStarted(!0),er(n),A()},R=()=>{k.srcObject=null,y(!1)};return a&&(a.addEventListener("unmute",U),a.addEventListener("ended",R),a.muted||U()),()=>{a&&(a.removeEventListener("unmute",U),a.removeEventListener("ended",R))}},[d,o,s,A]),tr("div",{className:P,style:{position:"relative",width:"100%",height:"100%"},"data-urun-video":"","data-urun-video-mode":d?"live":"vod",children:[H("video",{ref:q,className:["video-js","vjs-default-skin",c].filter(Boolean).join(" "),playsInline:!0}),T&&H("button",{type:"button",onClick:A,"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:tr("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:[H("svg",{viewBox:"0 0 24 24",fill:"currentColor",width:16,height:16,"aria-hidden":!0,children:H("path",{d:"M8 5v14l11-7z"})}),"Tap to play"]})}),C]})}),gt=Pe(function({name:e,...t},o){let s=Ke(e);return H(nr,{ref:o,...t,track:s})}),ht=Pe(function(e,t){return!!e.name&&!e.track&&!e.stream&&!(typeof e.src=="string"&&e.src)?H(gt,{ref:t,...e,name:e.name}):H(nr,{ref:t,...e})});import{forwardRef as St,useCallback as W,useEffect as or,useImperativeHandle as yt,useRef as J}from"react";var oe=null;function vt(){if(typeof window>"u")return null;let r=window;return r.AudioContext??r.webkitAudioContext??null}function se(){if(oe)return oe;let r=vt();return r?(oe=new r,oe):null}function we(){let r=se();r&&r.state==="suspended"&&r.resume().catch(()=>{})}import{jsx as kt}from"react/jsx-runtime";var bt=1e3,sr=200;function Ue(...r){console.debug("[urun-audio]",...r)}var Ee=St(function(e,t){let{session:o,stream:s="audio",track:u,controls:l=!1,className:P,onTrack:c,onUnlockChange:v,onAudioElement:x}=e,p=J(null),h=J(null),w=J(null),b=J(null),C=J(c);C.current=c;let S=J(v);S.current=v;let d=W(n=>{w.current!==n&&(w.current=n,S.current?.(n))},[]),m=W(()=>{if(typeof MediaStream>"u")return null;h.current||(h.current=new MediaStream);let n=p.current;return n&&n.srcObject!==h.current&&(n.srcObject=h.current),h.current},[]),f=W(n=>{let i=p.current;if(!i)return;let g=i.play();!g||typeof g.then!="function"||g.then(()=>{i.muted||d(!0)}).catch(k=>{let a=k instanceof Error?k.name:String(k);if(a==="AbortError"){Ue(`play() aborted (${n}); retrying in ${sr}ms`),b.current&&clearTimeout(b.current),b.current=setTimeout(()=>{b.current=null,f(`${n}:retry`)},sr);return}if(a==="NotAllowedError"){Ue(`play() blocked pending a user gesture (${n})`),d(!1);return}Ue(`play() failed (${n})`,k)})},[d]),T=W(n=>{let i=m();if(i){for(let g of i.getAudioTracks())g!==n&&i.removeTrack(g);n&&!i.getAudioTracks().includes(n)&&i.addTrack(n),n&&f("track-attach"),C.current?.(n)}},[m,f]),y=W(()=>{let n=p.current;n&&(m(),n.muted=!1,f("gesture"),we(),d(!0))},[m,f,d]);yt(t,()=>({unlock:y,get unlocked(){return w.current===!0},get element(){return p.current}}),[y]);let q=W(n=>{p.current=n,n&&(n.setAttribute("playsinline",""),n.setAttribute("webkit-playsinline",""),m()),x?.(n)},[m,x]),A=u!==void 0;return or(()=>{if(A){T(u??null);return}if(!o)return;let n=o.stream(s),i=()=>{let R=h.current;return R?R.getAudioTracks()[0]??null:null},g=R=>{if(R!==i()&&(T(R),R)){let L=()=>{i()===R&&T(null)};R.addEventListener("ended",L)}},k=n.track;k&&k.readyState==="live"&&g(k);let a=n.on("track",R=>{R&&R.readyState!=="live"||g(R)}),U=setInterval(()=>{let R=n.track;R&&R.readyState==="live"&&g(R)},bt);return()=>{a(),clearInterval(U)}},[o,s,A,u,T]),or(()=>()=>{b.current&&clearTimeout(b.current)},[]),kt("audio",{ref:q,className:P,autoPlay:!0,playsInline:!0,controls:l,"data-urun-audio":""})});import{forwardRef as Ct,useCallback as ie,useEffect as Rt,useImperativeHandle as xt,useRef as X}from"react";import{jsx as wt}from"react/jsx-runtime";var ir={channelCount:1,echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0};function Tt(...r){console.debug("[urun-voice]",...r)}var Pt=Ct(function(e,t){let{session:o,stream:s="audio",constraints:u=ir,connectTimeoutMs:l,attempts:P=3,retryDelayMs:c=1500,onActiveChange:v,onError:x,onMicStream:p,onTrack:h,onUnlockChange:w}=e,b=X(null),C=X(null),S=X(!1),d=X(v);d.current=v;let m=X(x);m.current=x;let f=X(p);f.current=p;let T=ie(n=>{S.current!==n&&(S.current=n,d.current?.(n))},[]),y=ie(()=>{let n=C.current;if(n){for(let i of n.getTracks())i.stop();C.current=null,f.current?.(null)}},[]),q=ie(async()=>{y(),T(!1),await o.stream(s).detach().catch(()=>{})},[o,s,y,T]),A=ie(async()=>{b.current?.unlock();let n=await navigator.mediaDevices.getUserMedia({audio:u,video:!1});y(),C.current=n,f.current?.(n);let i=n.getAudioTracks()[0];if(!i){y();let a=new Error("no microphone audio track");throw m.current?.(a),a}o.connect?.();let g;for(let a=1;a<=P;a++)try{await o.whenLive(l!==void 0?{timeout:l}:void 0),await o.stream(s).attach(i),T(!0);return}catch(U){g=U,Tt(`start attempt ${a}/${P} failed`,U),a<P&&await new Promise(R=>setTimeout(R,c))}y(),T(!1);let k=g instanceof Error?g:new Error(String(g??"voice start failed"));throw m.current?.(k),k},[o,s,u,l,P,c,y,T]);return xt(t,()=>({start:A,stop:q,unlock:()=>b.current?.unlock(),get active(){return S.current},get micStream(){return C.current},get audio(){return b.current}}),[A,q]),Rt(()=>y,[y]),wt(Ee,{ref:b,session:o,stream:s,onTrack:h,onUnlockChange:w})});import{forwardRef as Ut,useCallback as D,useEffect as Et,useImperativeHandle as At,useRef as V,useState as Mt}from"react";import{jsx as It,jsxs as Nt}from"react/jsx-runtime";var ur={width:{ideal:960},height:{ideal:720},frameRate:{ideal:8}};function ar(...r){console.debug("[urun-camera]",...r)}var _t=Ut(function(e,t){let{session:o,stream:s="video",constraints:u,facingMode:l="environment",mirror:P="auto",connectTimeoutMs:c,preview:v=!0,className:x,videoClassName:p,onActiveChange:h,onError:w,onStream:b,onTrack:C,children:S}=e,d=V(null),m=V(null),f=V(null),T=V(!1),y=V(l),[q,A]=Mt(l),n=V(h);n.current=h;let i=V(w);i.current=w;let g=V(b);g.current=b;let k=V(C);k.current=C;let a=D(E=>{T.current!==E&&(T.current=E,n.current?.(E))},[]),U=D(E=>{let I=d.current;I&&(I.muted=!0,I.srcObject=E,E&&I.play()?.catch?.(j=>ar("preview play() failed",j)))},[]),R=D(()=>{f.current?.(),f.current=null;let E=m.current;if(E){for(let I of E.getTracks())I.stop();m.current=null,g.current?.(null),k.current?.(null)}U(null)},[U]),L=D(async E=>{let I=m.current,j=f.current,N;try{N=await navigator.mediaDevices.getUserMedia({video:{...ur,...u,facingMode:E},audio:!1})}catch(_){let z=_ instanceof Error?_:new Error(String(_));throw i.current?.(z),z}let M=N.getVideoTracks()[0];if(!M){for(let z of N.getTracks())z.stop();let _=new Error("no camera video track");throw i.current?.(_),_}m.current=N,y.current=E,A(E),U(N),g.current?.(N);let O=()=>{m.current===N&&(ar("camera track ended (device removed or permission revoked)"),R(),a(!1))};M.addEventListener("ended",O),f.current=()=>M.removeEventListener("ended",O);try{o.connect?.(),await o.whenLive(c!==void 0?{timeout:c}:void 0),await o.stream(s).attachVideo(M)}catch(_){M.removeEventListener("ended",O);for(let dr of N.getTracks())dr.stop();m.current===N&&(m.current=I,f.current=j,U(I),g.current?.(I));let z=_ instanceof Error?_:new Error(String(_));throw i.current?.(z),z}if(I&&I!==N){j?.();for(let _ of I.getTracks())_.stop()}k.current?.(M),a(!0)},[o,s,u,c,U,R,a]),ae=D(E=>L(E?.facingMode??y.current),[L]),ue=D(async E=>{T.current&&y.current===E||await L(E)},[L]),ce=D(()=>L(y.current==="environment"?"user":"environment"),[L]),de=D(async()=>{R(),a(!1),await o.stream(s).detachVideo().catch(()=>{})},[o,s,R,a]);return At(t,()=>({start:ae,stop:de,flip:ce,setFacingMode:ue,get active(){return T.current},get facingMode(){return y.current},get stream(){return m.current},get element(){return d.current}}),[ae,de,ce,ue]),Et(()=>R,[R]),v?Nt("div",{className:x,style:{position:"relative",width:"100%",height:"100%"},"data-urun-camera":"","data-urun-camera-facing":q,children:[It("video",{ref:d,className:p,autoPlay:!0,muted:!0,playsInline:!0,style:{width:"100%",height:"100%",objectFit:"contain",...(P==="auto"?q==="user":P)?{transform:"scaleX(-1)"}:{}}}),S]}):null});import{useEffect as qt,useState as Ot}from"react";var Ae={level:0,speaking:!1};function Lt(r,e={}){let{fftSize:t=512,intervalMs:o=100,speakingThreshold:s=.02}=e,[u,l]=Ot(Ae);return qt(()=>{if(!r){l(Ae);return}let P=se();if(!P||typeof MediaStream>"u")return;let c;r instanceof MediaStream?c=r:(c=new MediaStream,c.addTrack(r));let v,x;try{v=P.createMediaStreamSource(c),x=P.createAnalyser(),x.fftSize=t,v.connect(x)}catch{return}let p=new Uint8Array(x.fftSize),w=setInterval(()=>{x.getByteTimeDomainData(p);let b=0;for(let S=0;S<p.length;S++){let d=(p[S]-128)/128;b+=d*d}let C=Math.sqrt(b/p.length);l(S=>{let d=C>s;return Math.abs(S.level-C)<.005&&S.speaking===d?S:{level:C,speaking:d}})},o);return()=>{clearInterval(w),v.disconnect(),l(Ae)}},[r,t,o,s]),u}export{Fr as ComponentRenderer,ur as DEFAULT_CAMERA_CONSTRAINTS,ir as DEFAULT_VOICE_CONSTRAINTS,Qr as ImageFrame,Yr as ImageFrameSchema,tt as MetricsPanel,rt as MetricsPanelSchema,Hr as ProgressCard,zr as ProgressCardSchema,Wr as StatusBadge,Br as StatusBadgeSchema,Gr as TextStream,Zr as TextStreamSchema,Ee as UrunAudio,pr as UrunAuthProvider,_t as UrunCamera,G as UrunErrorBoundary,mr as UrunJwtProvider,br as UrunProvider,ht as UrunVideo,Pt as UrunVoice,le as authMode,se as getUrunAudioContext,jr as registerComponent,we as resumeUrunAudioContext,Z as urunPublicEnv,Pr as useApp,Vr as useChat,Nr as useCompletion,Xe as useImageFrame,Ze as useMetricsPanel,De as useProgressCard,Ar as useRequest,He as useStatusBadge,We as useTextStream,Lt as useUrunAudioLevel,pe as useUrunAuth,lr as usesWorkOSAuth};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@urun-sh/react",
3
- "version": "0.2.3",
3
+ "version": "0.2.4",
4
4
  "description": "React bindings for the urun TypeScript SDK",
5
5
  "repository": {
6
6
  "type": "git",
@@ -21,9 +21,9 @@
21
21
  "require": "./dist/index.js"
22
22
  },
23
23
  "./auth": {
24
- "types": "./dist/index.d.ts",
25
- "import": "./dist/index.mjs",
26
- "require": "./dist/index.js"
24
+ "types": "./dist/auth.d.ts",
25
+ "import": "./dist/auth.mjs",
26
+ "require": "./dist/auth.js"
27
27
  },
28
28
  "./workos": {
29
29
  "types": "./dist/workos.d.ts",
@@ -48,7 +48,7 @@
48
48
  "dev": "tsup --watch"
49
49
  },
50
50
  "peerDependencies": {
51
- "@urun-sh/core": "^0.2.2",
51
+ "@urun-sh/core": "^0.2.4",
52
52
  "@workos-inc/authkit-nextjs": "^3.0.0",
53
53
  "@workos-inc/authkit-react": "^0.15.0 || ^0.16.0",
54
54
  "next": "^15.0.0 || ^16.0.0",