@urun-sh/react 0.1.41 → 0.1.42
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +35 -1
- package/dist/index.d.ts +35 -1
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/dist/styles.css +15 -0
- package/package.json +10 -4
package/dist/index.d.mts
CHANGED
|
@@ -4,6 +4,7 @@ import { RefObject, ReactNode, Component, ErrorInfo, ComponentType } from 'react
|
|
|
4
4
|
import { SessionInterface, SessionDocument, SessionStream, SessionPhase } from '@urun-sh/core';
|
|
5
5
|
export { App as AppInterface, AppOptions, SessionDocument, Session as SessionInterface, SessionPhase, SessionPhaseName, SessionStream } from '@urun-sh/core';
|
|
6
6
|
import { ZodSchema, z } from 'zod';
|
|
7
|
+
import Player from 'video.js/dist/types/player';
|
|
7
8
|
|
|
8
9
|
interface UrunProviderProps {
|
|
9
10
|
baseUrl: string;
|
|
@@ -332,4 +333,37 @@ declare function useMetricsPanel(props: MetricsPanelProps): {
|
|
|
332
333
|
};
|
|
333
334
|
declare function MetricsPanel(props: MetricsPanelProps): react_jsx_runtime.JSX.Element;
|
|
334
335
|
|
|
335
|
-
|
|
336
|
+
interface UrunVideoProps {
|
|
337
|
+
|
|
338
|
+
track?: MediaStreamTrack | null;
|
|
339
|
+
|
|
340
|
+
stream?: MediaStream | null;
|
|
341
|
+
|
|
342
|
+
name?: string;
|
|
343
|
+
|
|
344
|
+
src?: string;
|
|
345
|
+
|
|
346
|
+
type?: string;
|
|
347
|
+
|
|
348
|
+
className?: string;
|
|
349
|
+
|
|
350
|
+
videoClassName?: string;
|
|
351
|
+
|
|
352
|
+
poster?: string;
|
|
353
|
+
|
|
354
|
+
controls?: boolean;
|
|
355
|
+
|
|
356
|
+
autoPlay?: boolean;
|
|
357
|
+
|
|
358
|
+
muted?: boolean;
|
|
359
|
+
|
|
360
|
+
onVideoElement?: (el: HTMLVideoElement | null) => void;
|
|
361
|
+
|
|
362
|
+
onPlayerReady?: (player: Player | null) => void;
|
|
363
|
+
|
|
364
|
+
children?: ReactNode;
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
declare const UrunVideo: react.ForwardRefExoticComponent<UrunVideoProps & react.RefAttributes<HTMLVideoElement>>;
|
|
368
|
+
|
|
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 };
|
package/dist/index.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ import { RefObject, ReactNode, Component, ErrorInfo, ComponentType } from 'react
|
|
|
4
4
|
import { SessionInterface, SessionDocument, SessionStream, SessionPhase } from '@urun-sh/core';
|
|
5
5
|
export { App as AppInterface, AppOptions, SessionDocument, Session as SessionInterface, SessionPhase, SessionPhaseName, SessionStream } from '@urun-sh/core';
|
|
6
6
|
import { ZodSchema, z } from 'zod';
|
|
7
|
+
import Player from 'video.js/dist/types/player';
|
|
7
8
|
|
|
8
9
|
interface UrunProviderProps {
|
|
9
10
|
baseUrl: string;
|
|
@@ -332,4 +333,37 @@ declare function useMetricsPanel(props: MetricsPanelProps): {
|
|
|
332
333
|
};
|
|
333
334
|
declare function MetricsPanel(props: MetricsPanelProps): react_jsx_runtime.JSX.Element;
|
|
334
335
|
|
|
335
|
-
|
|
336
|
+
interface UrunVideoProps {
|
|
337
|
+
|
|
338
|
+
track?: MediaStreamTrack | null;
|
|
339
|
+
|
|
340
|
+
stream?: MediaStream | null;
|
|
341
|
+
|
|
342
|
+
name?: string;
|
|
343
|
+
|
|
344
|
+
src?: string;
|
|
345
|
+
|
|
346
|
+
type?: string;
|
|
347
|
+
|
|
348
|
+
className?: string;
|
|
349
|
+
|
|
350
|
+
videoClassName?: string;
|
|
351
|
+
|
|
352
|
+
poster?: string;
|
|
353
|
+
|
|
354
|
+
controls?: boolean;
|
|
355
|
+
|
|
356
|
+
autoPlay?: boolean;
|
|
357
|
+
|
|
358
|
+
muted?: boolean;
|
|
359
|
+
|
|
360
|
+
onVideoElement?: (el: HTMLVideoElement | null) => void;
|
|
361
|
+
|
|
362
|
+
onPlayerReady?: (player: Player | null) => void;
|
|
363
|
+
|
|
364
|
+
children?: ReactNode;
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
declare const UrunVideo: react.ForwardRefExoticComponent<UrunVideoProps & react.RefAttributes<HTMLVideoElement>>;
|
|
368
|
+
|
|
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 };
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var ae=Object.defineProperty;var Qe=Object.getOwnPropertyDescriptor;var Ye=Object.getOwnPropertyNames;var et=Object.prototype.hasOwnProperty;var tt=(t,e)=>{for(var r in e)ae(t,r,{get:e[r],enumerable:!0})},rt=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of Ye(e))!et.call(t,s)&&s!==r&&ae(t,s,{get:()=>e[s],enumerable:!(n=Qe(e,s))||n.enumerable});return t};var nt=t=>rt(ae({},"__esModule",{value:!0}),t);var ct={};tt(ct,{ComponentRenderer:()=>Be,ImageFrame:()=>ze,ImageFrameSchema:()=>je,MetricsPanel:()=>Je,MetricsPanelSchema:()=>He,ProgressCard:()=>De,ProgressCardSchema:()=>Le,StatusBadge:()=>Fe,StatusBadgeSchema:()=>Ve,TextStream:()=>$e,TextStreamSchema:()=>Xe,UrunAuthProvider:()=>ue,UrunErrorBoundary:()=>B,UrunJwtProvider:()=>Te,UrunProvider:()=>xe,authMode:()=>H,registerComponent:()=>Me,urunPublicEnv:()=>_,useApp:()=>_e,useChat:()=>Ie,useCompletion:()=>we,useImageFrame:()=>he,useMetricsPanel:()=>Se,useProgressCard:()=>me,useRequest:()=>Ee,useStatusBadge:()=>fe,useTextStream:()=>ge,useUrunAuth:()=>ee,usesWorkOSAuth:()=>ve});module.exports=nt(ct);var D=require("react");var Ce=require("react"),z=require("react/jsx-runtime"),B=class extends Ce.Component{constructor(e){super(e),this.state={error:null}}static getDerivedStateFromError(e){return{error:e}}componentDidCatch(e,r){console.error("[urun] Error caught by UrunErrorBoundary:",e,r)}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 ye=require("react"),Y=(0,ye.createContext)(null);function N(t){return t&&t.trim()?t.trim():void 0}function _(t){switch(t){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?.[t]:void 0)}}function H(){let t=_("NEXT_PUBLIC_AUTH_MODE")?.toLowerCase();return t==="jwt"||t==="customer-jwt"||t==="test-jwt"?"jwt":t==="workos"||_("VERCEL_ENV")==="production"?"workos":_("NEXT_PUBLIC_AUTH_ENABLED")==="false"?"jwt":"workos"}function ve(){return H()==="workos"}var L=require("react"),ke=require("react/jsx-runtime"),Pe=(0,L.createContext)(null);function ue({getAccessToken:t,children:e}){let r=(0,L.useMemo)(()=>({getAccessToken:t}),[t]);return(0,ke.jsx)(Pe.Provider,{value:r,children:e})}var Te=ue;function ee(){return(0,L.useContext)(Pe)}var te=require("react/jsx-runtime");function xe({baseUrl:t,orgId:e,appId:r,jwt:n,authProvider:s,fallback:o,children:i}){let[x,a]=(0,D.useState)(),d=ee(),g=_("NEXT_PUBLIC_SESSION_TOKEN")??_("NEXT_PUBLIC_URUN_JWT"),u=H(),c=u==="workos"&&!n,C=n??(u==="jwt"?g:void 0)??x,T=s??_("NEXT_PUBLIC_SESSION_AUTH_PROVIDER"),h=c&&!C,R=(0,D.useMemo)(()=>({appId:r,baseUrl:t,orgId:e,jwt:C,getAccessToken:c?d?.getAccessToken:void 0,authProvider:T}),[r,d,t,T,C,e,c]);return(0,D.useEffect)(()=>{if(!c||!d)return;let S=!1,y=d;async function f(){try{let b=await y.getAccessToken();S||a(b??void 0)}catch{S||a(void 0)}}f();let v=window.setInterval(()=>{f()},6e4);return()=>{S=!0,window.clearInterval(v)}},[d,c]),(0,te.jsx)(B,{fallback:o,children:h?(0,te.jsx)("div",{role:"status","aria-live":"polite",children:"Signing in..."}):(0,te.jsx)(Y.Provider,{value:R,children:i})})}var E=require("react"),be=require("@urun-sh/core");function st(t,e){return`${t}:${JSON.stringify(e??{})}`}var ce=class{constructor(e,r){this._doc=e;this._notify=r;this._unsubscribeChange=this._doc.on("change",()=>this._notify())}_doc;_notify;_unsubscribeChange;get(e,r){return this._doc.get(e,r)}set(e){this._doc.set(e),this._notify()}on(e,r){return this._doc.on(e,n=>r(n))}get synced(){return this._doc.synced}onSynced(e){return this._doc.onSynced(()=>{e(),this._notify()})}text(e){let r=this._doc.text(e),n=this._notify;return{append(s){r.append(s),n()},toString:()=>r.toString(),get length(){return r.length},on:(s,o)=>r.on(s,i=>{o(i),n()})}}dispose(){this._unsubscribeChange()}},pe=class{constructor(e,r){this._stream=e;this._notify=r;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)}on(e,r){return this._stream.on(e,r)}messages(){return this._stream.messages()}dispose(){this._unsubscribeTrack()}},de=class{constructor(e,r){this._session=e;this._notify=r;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,r){return this._session.request(e,r)}requestStream(e,r){return this._session.requestStream(e,r)}complete(e,r){return this._session.complete(e,r)}doc(e){let r=this._docs.get(e);return r||(r=new ce(this._session.doc(e),this._notify),this._docs.set(e,r)),r}stream(e){let r=this._streams.get(e);return r||(r=new pe(this._session.stream(e),this._notify),this._streams.set(e,r)),r}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 _e(){let t=(0,E.useContext)(Y);if(!t)throw new Error("useApp must be used within <UrunProvider>");if(!t.appId)throw new Error('useApp requires <UrunProvider appId="...">');let[,e]=(0,E.useReducer)(s=>s+1,0),r=(0,E.useRef)(new Map),n=(0,E.useMemo)(()=>(0,be.App)(t.appId,{baseUrl:t.baseUrl,orgId:t.orgId,jwt:t.jwt,getAccessToken:t.getAccessToken,authProvider:t.authProvider}),[t.appId,t.baseUrl,t.orgId,t.jwt,t.getAccessToken,t.authProvider]);return(0,E.useMemo)(()=>new Proxy({},{get(s,o){if(typeof o=="string")return i=>{let x=st(o,i),a=r.current.get(x);if(a)return a;let d=new de(n[o](i),e);return r.current.set(x,d),d}}}),[n])}var l=require("react");function V(t){let e=t;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 ot(t){return t instanceof Error?t:new Error(String(t))}function Ee(t,e){let r=(0,l.useMemo)(()=>V(t),[t]),[n,s]=(0,l.useState)(void 0),[o,i]=(0,l.useState)(null),[x,a]=(0,l.useState)(!1),d=(0,l.useRef)(e);d.current=e;let g=(0,l.useRef)(0),u=(0,l.useRef)(null),c=(0,l.useRef)(!0);(0,l.useEffect)(()=>(c.current=!0,()=>{c.current=!1,u.current?.abort()}),[]);let C=(0,l.useCallback)(async R=>{u.current?.abort();let S=new AbortController;u.current=S;let y=++g.current,f=()=>c.current&&g.current===y;f()&&(a(!0),i(null));try{let v=await r.request(R,{...d.current,signal:S.signal});return f()&&(s(v),a(!1),d.current?.onSuccess?.(v)),v}catch(v){let b=ot(v);throw f()&&(i(b),a(!1),d.current?.onError?.(b)),b}},[r]),T=(0,l.useCallback)(R=>{C(R).catch(()=>{})},[C]),h=(0,l.useCallback)(()=>{g.current++,u.current?.abort(),u.current=null,s(void 0),i(null),a(!1)},[]);return{mutate:T,mutateAsync:C,data:n,error:o,isPending:x,reset:h}}var m=require("react");function Ue(t){return t instanceof Error?t:new Error(String(t))}var it=t=>typeof t=="string"?t:String(t);function we(t,e){let r=(0,m.useMemo)(()=>V(t),[t]),[n,s]=(0,m.useState)(""),[o,i]=(0,m.useState)(!1),[x,a]=(0,m.useState)(null),d=(0,m.useRef)(e);d.current=e;let g=(0,m.useRef)(0),u=(0,m.useRef)(null),c=(0,m.useRef)(!0);(0,m.useEffect)(()=>(c.current=!0,()=>{c.current=!1,u.current?.cancel(),u.current=null}),[]);let C=(0,m.useCallback)(()=>{g.current++,u.current?.cancel(),u.current=null,c.current&&i(!1)},[]),T=(0,m.useCallback)(async h=>{u.current?.cancel();let R=++g.current,S=()=>c.current&&g.current===R,y=d.current,f=y?.parseChunk??it,v=y?.buildPayload??(k=>({prompt:k}));S()&&(s(""),a(null),i(!0));let{parseChunk:b,buildPayload:We,onFinish:se,onError:$,...w}=y??{},j="",A;try{A=r.requestStream(v(h),w),u.current=A}catch(k){let q=Ue(k);S()&&(a(q),i(!1),y?.onError?.(q));return}try{for await(let k of A){if(g.current!==R)break;j+=f(k),S()&&s(j)}S()&&(i(!1),y?.onFinish?.(j))}catch(k){let q=Ue(k);S()&&(a(q),i(!1),y?.onError?.(q))}finally{u.current===A&&(u.current=null)}},[r]);return{completion:n,complete:T,stop:C,isStreaming:o,error:x}}var p=require("react");function Ae(t){return t instanceof Error?t:new Error(String(t))}var at=t=>typeof t=="string"?t:String(t),qe=0;function le(t){return qe+=1,`${t}-${qe}`}function Ie(t,e){let r=(0,p.useMemo)(()=>V(t),[t]),[n,s]=(0,p.useState)(()=>(e?.initialMessages??[]).map(f=>({id:f.id??le("msg"),role:f.role,content:f.content}))),[o,i]=(0,p.useState)(""),[x,a]=(0,p.useState)(!1),[d,g]=(0,p.useState)(null),u=(0,p.useRef)(e);u.current=e;let c=(0,p.useRef)(n);c.current=n;let C=(0,p.useRef)(o);C.current=o;let T=(0,p.useRef)(0),h=(0,p.useRef)(null),R=(0,p.useRef)(!0);(0,p.useEffect)(()=>(R.current=!0,()=>{R.current=!1,h.current?.cancel(),h.current=null}),[]);let S=(0,p.useCallback)(()=>{T.current++,h.current?.cancel(),h.current=null,R.current&&a(!1)},[]),y=(0,p.useCallback)(async f=>{let v=f===void 0,b=(v?C.current:f)??"";if(!b.trim())return;h.current?.cancel();let se=++T.current,$=()=>R.current&&T.current===se,w=u.current,j=w?.parseChunk??at,A={id:le("msg"),role:"user",content:b},k={id:le("msg"),role:"assistant",content:""},q=[...c.current,A].map(P=>({role:P.role,content:P.content})),Re=[...c.current,A,k];c.current=Re,s(Re),v&&i(""),g(null),a(!0);let Ke=w?.buildPayload??(P=>({messages:P})),{initialMessages:pt,parseChunk:dt,buildPayload:lt,onFinish:mt,onError:ft,...Ze}=w??{},Ge=P=>{s(I=>I.map(ie=>ie.id===k.id?{...ie,content:P}:ie))},oe="",Q;try{Q=r.requestStream(Ke(q),Ze),h.current=Q}catch(P){let I=Ae(P);$()&&(g(I),a(!1),w?.onError?.(I));return}try{for await(let P of Q){if(T.current!==se)break;oe+=j(P),$()&&Ge(oe)}$()&&(a(!1),w?.onFinish?.({...k,content:oe}))}catch(P){let I=Ae(P);$()&&(g(I),a(!1),w?.onError?.(I))}finally{h.current===Q&&(h.current=null)}},[r]);return{messages:n,input:o,setInput:i,sendMessage:y,stop:S,isStreaming:x,error:d}}var Ne=new Map;function Me(t,e,r){if(!r||typeof r.safeParse!="function")throw new Error(`registerComponent("${t}"): schema must be a valid Zod schema`);Ne.set(t,{component:e,schema:r})}function Oe(t,e){let r=Ne.get(t);if(!r)return{error:`Unknown component: "${t}"`};let n=r.schema.safeParse(e);return n.success?{Component:r.component,validatedProps:n.data}:{error:`Validation failed for "${t}": ${n.error.message}`}}var M=require("react/jsx-runtime");function Be({name:t,props:e,fallback:r}){let n=Oe(t,e);if(n.error)return console.warn(`[urun] ComponentRenderer: ${n.error}`),r?(0,M.jsx)(M.Fragment,{children:r}):(0,M.jsx)("div",{className:"urun-component-error",role:"alert",children:(0,M.jsx)("span",{className:"urun-component-error-text",children:n.error})});let s=n.Component;return(0,M.jsx)(s,{...n.validatedProps})}var F=require("zod"),O=require("react/jsx-runtime"),Le=F.z.object({step:F.z.number().min(0),total:F.z.number().min(1),label:F.z.string().optional(),variant:F.z.enum(["default","success","error"]).default("default")});function me(t){let{step:e,total:r,label:n,variant:s="default"}=t,o=Math.min(e/r*100,100),i=e>=r;return{step:e,total:r,label:n,variant:s,percentage:o,isComplete:i}}function De(t){let{step:e,total:r,label:n,variant:s,percentage:o}=me(t);return(0,O.jsxs)("div",{className:"urun-progress-card","data-variant":s,children:[n&&(0,O.jsx)("div",{className:"urun-progress-label",children:n}),(0,O.jsx)("div",{className:"urun-progress-bar",children:(0,O.jsx)("div",{className:"urun-progress-fill",style:{width:`${o}%`}})}),(0,O.jsxs)("div",{className:"urun-progress-text",children:[e,"/",r]})]})}var re=require("zod"),J=require("react/jsx-runtime"),Ve=re.z.object({state:re.z.enum(["thinking","generating","idle","error"]),message:re.z.string().optional()}),ut={thinking:"Thinking...",generating:"Generating...",idle:"Idle",error:"Error"};function fe(t){let{state:e,message:r}=t,n=e==="thinking"||e==="generating",s=r??ut[e]??e;return{state:e,message:s,isActive:n}}function Fe(t){let{state:e,message:r,isActive:n}=fe(t);return(0,J.jsxs)("span",{className:"urun-status-badge","data-state":e,children:[(0,J.jsx)("span",{className:`urun-status-indicator${n?" urun-status-pulse":""}`}),(0,J.jsx)("span",{className:"urun-status-message",children:r})]})}var W=require("react"),ne=require("zod"),K=require("react/jsx-runtime"),Xe=ne.z.object({text:ne.z.string(),streaming:ne.z.boolean().default(!1)});function ge(t){let{text:e,streaming:r=!1}=t,n=e.length===0;return{text:e,streaming:r,isEmpty:n}}function $e(t){let{text:e,streaming:r}=ge(t),n=(0,W.useRef)(null),s=(0,W.useRef)(0);return(0,W.useEffect)(()=>{let o=n.current;o&&e.length!==s.current&&(o.textContent=e,s.current=e.length)},[e]),(0,K.jsxs)("div",{className:"urun-text-stream",children:[(0,K.jsx)("span",{ref:n,className:"urun-text-content"}),r&&(0,K.jsx)("span",{className:"urun-text-cursor"})]})}var Z=require("zod"),G=require("react/jsx-runtime"),je=Z.z.object({src:Z.z.string().url(),alt:Z.z.string().optional(),caption:Z.z.string().optional()});function he(t){let{src:e,alt:r,caption:n}=t;return{src:e,alt:r??"",caption:n}}function ze(t){let{src:e,alt:r,caption:n}=he(t);return(0,G.jsxs)("figure",{className:"urun-image-frame",children:[(0,G.jsx)("img",{className:"urun-image",src:e,alt:r}),n&&(0,G.jsx)("figcaption",{className:"urun-image-caption",children:n})]})}var U=require("zod"),X=require("react/jsx-runtime"),He=U.z.object({metrics:U.z.array(U.z.object({label:U.z.string(),value:U.z.union([U.z.string(),U.z.number()]),unit:U.z.string().optional()}))});function Se(t){return{metrics:t.metrics.map(r=>({...r,displayValue:r.unit?`${r.value} ${r.unit}`:String(r.value)}))}}function Je(t){let{metrics:e}=Se(t);return(0,X.jsx)("div",{className:"urun-metrics-panel",children:e.map((r,n)=>(0,X.jsxs)("div",{className:"urun-metric-card",children:[(0,X.jsx)("div",{className:"urun-metric-label",children:r.label}),(0,X.jsx)("div",{className:"urun-metric-value",children:r.displayValue})]},n))})}0&&(module.exports={ComponentRenderer,ImageFrame,ImageFrameSchema,MetricsPanel,MetricsPanelSchema,ProgressCard,ProgressCardSchema,StatusBadge,StatusBadgeSchema,TextStream,TextStreamSchema,UrunAuthProvider,UrunErrorBoundary,UrunJwtProvider,UrunProvider,authMode,registerComponent,urunPublicEnv,useApp,useChat,useCompletion,useImageFrame,useMetricsPanel,useProgressCard,useRequest,useStatusBadge,useTextStream,useUrunAuth,usesWorkOSAuth});
|
|
1
|
+
"use strict";var ct=Object.create;var oe=Object.defineProperty;var pt=Object.getOwnPropertyDescriptor;var dt=Object.getOwnPropertyNames;var lt=Object.getPrototypeOf,mt=Object.prototype.hasOwnProperty;var ft=(t,e)=>{for(var r in e)oe(t,r,{get:e[r],enumerable:!0})},ke=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of dt(e))!mt.call(t,s)&&s!==r&&oe(t,s,{get:()=>e[s],enumerable:!(n=pt(e,s))||n.enumerable});return t};var gt=(t,e,r)=>(r=t!=null?ct(lt(t)):{},ke(e||!t||!t.__esModule?oe(r,"default",{value:t,enumerable:!0}):r,t)),ht=t=>ke(oe({},"__esModule",{value:!0}),t);var xt={};ft(xt,{ComponentRenderer:()=>Fe,ImageFrame:()=>Ge,ImageFrameSchema:()=>Ze,MetricsPanel:()=>Ye,MetricsPanelSchema:()=>Qe,ProgressCard:()=>Xe,ProgressCardSchema:()=>ze,StatusBadge:()=>Je,StatusBadgeSchema:()=>$e,TextStream:()=>Ke,TextStreamSchema:()=>We,UrunAuthProvider:()=>fe,UrunErrorBoundary:()=>H,UrunJwtProvider:()=>Ue,UrunProvider:()=>Ae,UrunVideo:()=>ot,authMode:()=>G,registerComponent:()=>je,urunPublicEnv:()=>M,useApp:()=>Ie,useChat:()=>Be,useCompletion:()=>Oe,useImageFrame:()=>Pe,useMetricsPanel:()=>Te,useProgressCard:()=>ve,useRequest:()=>qe,useStatusBadge:()=>Re,useTextStream:()=>Ce,useUrunAuth:()=>ae,usesWorkOSAuth:()=>xe});module.exports=ht(xt);var z=require("react");var be=require("react"),Z=require("react/jsx-runtime"),H=class extends be.Component{constructor(e){super(e),this.state={error:null}}static getDerivedStateFromError(e){return{error:e}}componentDidCatch(e,r){console.error("[urun] Error caught by UrunErrorBoundary:",e,r)}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 Ee=require("react"),ie=(0,Ee.createContext)(null);function B(t){return t&&t.trim()?t.trim():void 0}function M(t){switch(t){case"NEXT_PUBLIC_AUTH_MODE":return B(typeof process<"u"?process.env?.NEXT_PUBLIC_AUTH_MODE:void 0);case"NEXT_PUBLIC_AUTH_ENABLED":return B(typeof process<"u"?process.env?.NEXT_PUBLIC_AUTH_ENABLED:void 0);case"NEXT_PUBLIC_SESSION_AUTH_PROVIDER":return B(typeof process<"u"?process.env?.NEXT_PUBLIC_SESSION_AUTH_PROVIDER:void 0);case"NEXT_PUBLIC_SESSION_TOKEN":return B(typeof process<"u"?process.env?.NEXT_PUBLIC_SESSION_TOKEN:void 0);case"NEXT_PUBLIC_URUN_JWT":return B(typeof process<"u"?process.env?.NEXT_PUBLIC_URUN_JWT:void 0);case"VERCEL_ENV":return B(typeof process<"u"?process.env?.VERCEL_ENV:void 0);default:return B(typeof process<"u"?process.env?.[t]:void 0)}}function G(){let t=M("NEXT_PUBLIC_AUTH_MODE")?.toLowerCase();return t==="jwt"||t==="customer-jwt"||t==="test-jwt"?"jwt":t==="workos"||M("VERCEL_ENV")==="production"?"workos":M("NEXT_PUBLIC_AUTH_ENABLED")==="false"?"jwt":"workos"}function xe(){return G()==="workos"}var F=require("react"),we=require("react/jsx-runtime"),_e=(0,F.createContext)(null);function fe({getAccessToken:t,children:e}){let r=(0,F.useMemo)(()=>({getAccessToken:t}),[t]);return(0,we.jsx)(_e.Provider,{value:r,children:e})}var Ue=fe;function ae(){return(0,F.useContext)(_e)}var ue=require("react/jsx-runtime");function Ae({baseUrl:t,orgId:e,appId:r,jwt:n,authProvider:s,fallback:i,children:a}){let[_,u]=(0,z.useState)(),m=ae(),P=M("NEXT_PUBLIC_SESSION_TOKEN")??M("NEXT_PUBLIC_URUN_JWT"),c=G(),d=c==="workos"&&!n,E=n??(c==="jwt"?P:void 0)??_,U=s??M("NEXT_PUBLIC_SESSION_AUTH_PROVIDER"),T=d&&!E,v=(0,z.useMemo)(()=>({appId:r,baseUrl:t,orgId:e,jwt:E,getAccessToken:d?m?.getAccessToken:void 0,authProvider:U}),[r,m,t,U,E,e,d]);return(0,z.useEffect)(()=>{if(!d||!m)return;let f=!1,S=m;async function g(){try{let x=await S.getAccessToken();f||u(x??void 0)}catch{f||u(void 0)}}g();let w=window.setInterval(()=>{g()},6e4);return()=>{f=!0,window.clearInterval(w)}},[m,d]),(0,ue.jsx)(H,{fallback:i,children:T?(0,ue.jsx)("div",{role:"status","aria-live":"polite",children:"Signing in..."}):(0,ue.jsx)(ie.Provider,{value:v,children:a})})}var O=require("react"),Ne=require("@urun-sh/core");function St(t,e){return`${t}:${JSON.stringify(e??{})}`}var ge=class{constructor(e,r){this._doc=e;this._notify=r;this._unsubscribeChange=this._doc.on("change",()=>this._notify())}_doc;_notify;_unsubscribeChange;get(e,r){return this._doc.get(e,r)}set(e){this._doc.set(e),this._notify()}on(e,r){return this._doc.on(e,n=>r(n))}get synced(){return this._doc.synced}onSynced(e){return this._doc.onSynced(()=>{e(),this._notify()})}text(e){let r=this._doc.text(e),n=this._notify;return{append(s){r.append(s),n()},toString:()=>r.toString(),get length(){return r.length},on:(s,i)=>r.on(s,a=>{i(a),n()})}}dispose(){this._unsubscribeChange()}},he=class{constructor(e,r){this._stream=e;this._notify=r;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)}on(e,r){return this._stream.on(e,r)}messages(){return this._stream.messages()}emit(e,r){return this._stream.emit(e,r)}dispose(){this._unsubscribeTrack()}},Se=class{constructor(e,r){this._session=e;this._notify=r;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,r){return this._session.request(e,r)}requestStream(e,r){return this._session.requestStream(e,r)}complete(e,r){return this._session.complete(e,r)}doc(e){let r=this._docs.get(e);return r||(r=new ge(this._session.doc(e),this._notify),this._docs.set(e,r)),r}stream(e){let r=this._streams.get(e);return r||(r=new he(this._session.stream(e),this._notify),this._streams.set(e,r)),r}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 Ie(){let t=(0,O.useContext)(ie);if(!t)throw new Error("useApp must be used within <UrunProvider>");if(!t.appId)throw new Error('useApp requires <UrunProvider appId="...">');let[,e]=(0,O.useReducer)(s=>s+1,0),r=(0,O.useRef)(new Map),n=(0,O.useMemo)(()=>(0,Ne.App)(t.appId,{baseUrl:t.baseUrl,orgId:t.orgId,jwt:t.jwt,getAccessToken:t.getAccessToken,authProvider:t.authProvider}),[t.appId,t.baseUrl,t.orgId,t.jwt,t.getAccessToken,t.authProvider]);return(0,O.useMemo)(()=>new Proxy({},{get(s,i){if(typeof i=="string")return a=>{let _=St(i,a),u=r.current.get(_);if(u)return u;let m=new Se(n[i](a),e);return r.current.set(_,m),m}}}),[n])}var C=require("react");function X(t){let e=t;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 yt(t){return t instanceof Error?t:new Error(String(t))}function qe(t,e){let r=(0,C.useMemo)(()=>X(t),[t]),[n,s]=(0,C.useState)(void 0),[i,a]=(0,C.useState)(null),[_,u]=(0,C.useState)(!1),m=(0,C.useRef)(e);m.current=e;let P=(0,C.useRef)(0),c=(0,C.useRef)(null),d=(0,C.useRef)(!0);(0,C.useEffect)(()=>(d.current=!0,()=>{d.current=!1,c.current?.abort()}),[]);let E=(0,C.useCallback)(async v=>{c.current?.abort();let f=new AbortController;c.current=f;let S=++P.current,g=()=>d.current&&P.current===S;g()&&(u(!0),a(null));try{let w=await r.request(v,{...m.current,signal:f.signal});return g()&&(s(w),u(!1),m.current?.onSuccess?.(w)),w}catch(w){let x=yt(w);throw g()&&(a(x),u(!1),m.current?.onError?.(x)),x}},[r]),U=(0,C.useCallback)(v=>{E(v).catch(()=>{})},[E]),T=(0,C.useCallback)(()=>{P.current++,c.current?.abort(),c.current=null,s(void 0),a(null),u(!1)},[]);return{mutate:U,mutateAsync:E,data:n,error:i,isPending:_,reset:T}}var b=require("react");function Me(t){return t instanceof Error?t:new Error(String(t))}var vt=t=>typeof t=="string"?t:String(t);function Oe(t,e){let r=(0,b.useMemo)(()=>X(t),[t]),[n,s]=(0,b.useState)(""),[i,a]=(0,b.useState)(!1),[_,u]=(0,b.useState)(null),m=(0,b.useRef)(e);m.current=e;let P=(0,b.useRef)(0),c=(0,b.useRef)(null),d=(0,b.useRef)(!0);(0,b.useEffect)(()=>(d.current=!0,()=>{d.current=!1,c.current?.cancel(),c.current=null}),[]);let E=(0,b.useCallback)(()=>{P.current++,c.current?.cancel(),c.current=null,d.current&&a(!1)},[]),U=(0,b.useCallback)(async T=>{c.current?.cancel();let v=++P.current,f=()=>d.current&&P.current===v,S=m.current,g=S?.parseChunk??vt,w=S?.buildPayload??(l=>({prompt:l}));f()&&(s(""),u(null),a(!0));let{parseChunk:x,buildPayload:de,onFinish:N,onError:o,...p}=S??{},R="",k;try{k=r.requestStream(w(T),p),c.current=k}catch(l){let I=Me(l);f()&&(u(I),a(!1),S?.onError?.(I));return}try{for await(let l of k){if(P.current!==v)break;R+=g(l),f()&&s(R)}f()&&(a(!1),S?.onFinish?.(R))}catch(l){let I=Me(l);f()&&(u(I),a(!1),S?.onError?.(I))}finally{c.current===k&&(c.current=null)}},[r]);return{completion:n,complete:U,stop:E,isStreaming:i,error:_}}var h=require("react");function Le(t){return t instanceof Error?t:new Error(String(t))}var Rt=t=>typeof t=="string"?t:String(t),Ve=0;function ye(t){return Ve+=1,`${t}-${Ve}`}function Be(t,e){let r=(0,h.useMemo)(()=>X(t),[t]),[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)(""),[_,u]=(0,h.useState)(!1),[m,P]=(0,h.useState)(null),c=(0,h.useRef)(e);c.current=e;let d=(0,h.useRef)(n);d.current=n;let E=(0,h.useRef)(i);E.current=i;let U=(0,h.useRef)(0),T=(0,h.useRef)(null),v=(0,h.useRef)(!0);(0,h.useEffect)(()=>(v.current=!0,()=>{v.current=!1,T.current?.cancel(),T.current=null}),[]);let f=(0,h.useCallback)(()=>{U.current++,T.current?.cancel(),T.current=null,v.current&&u(!1)},[]),S=(0,h.useCallback)(async g=>{let w=g===void 0,x=(w?E.current:g)??"";if(!x.trim())return;T.current?.cancel();let N=++U.current,o=()=>v.current&&U.current===N,p=c.current,R=p?.parseChunk??Rt,k={id:ye("msg"),role:"user",content:x},l={id:ye("msg"),role:"assistant",content:""},I=[...d.current,k].map(A=>({role:A.role,content:A.content})),K=[...d.current,k,l];d.current=K,s(K),w&&a(""),P(null),u(!0);let it=p?.buildPayload??(A=>({messages:A})),{initialMessages:_t,parseChunk:Ut,buildPayload:wt,onFinish:At,onError:Nt,...at}=p??{},ut=A=>{s(V=>V.map(me=>me.id===l.id?{...me,content:A}:me))},le="",se;try{se=r.requestStream(it(I),at),T.current=se}catch(A){let V=Le(A);o()&&(P(V),u(!1),p?.onError?.(V));return}try{for await(let A of se){if(U.current!==N)break;le+=R(A),o()&&ut(le)}o()&&(u(!1),p?.onFinish?.({...l,content:le}))}catch(A){let V=Le(A);o()&&(P(V),u(!1),p?.onError?.(V))}finally{T.current===se&&(T.current=null)}},[r]);return{messages:n,input:i,setInput:a,sendMessage:S,stop:f,isStreaming:_,error:m}}var De=new Map;function je(t,e,r){if(!r||typeof r.safeParse!="function")throw new Error(`registerComponent("${t}"): schema must be a valid Zod schema`);De.set(t,{component:e,schema:r})}function He(t,e){let r=De.get(t);if(!r)return{error:`Unknown component: "${t}"`};let n=r.schema.safeParse(e);return n.success?{Component:r.component,validatedProps:n.data}:{error:`Validation failed for "${t}": ${n.error.message}`}}var D=require("react/jsx-runtime");function Fe({name:t,props:e,fallback:r}){let n=He(t,e);if(n.error)return console.warn(`[urun] ComponentRenderer: ${n.error}`),r?(0,D.jsx)(D.Fragment,{children:r}):(0,D.jsx)("div",{className:"urun-component-error",role:"alert",children:(0,D.jsx)("span",{className:"urun-component-error-text",children:n.error})});let s=n.Component;return(0,D.jsx)(s,{...n.validatedProps})}var $=require("zod"),j=require("react/jsx-runtime"),ze=$.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 ve(t){let{step:e,total:r,label:n,variant:s="default"}=t,i=Math.min(e/r*100,100),a=e>=r;return{step:e,total:r,label:n,variant:s,percentage:i,isComplete:a}}function Xe(t){let{step:e,total:r,label:n,variant:s,percentage:i}=ve(t);return(0,j.jsxs)("div",{className:"urun-progress-card","data-variant":s,children:[n&&(0,j.jsx)("div",{className:"urun-progress-label",children:n}),(0,j.jsx)("div",{className:"urun-progress-bar",children:(0,j.jsx)("div",{className:"urun-progress-fill",style:{width:`${i}%`}})}),(0,j.jsxs)("div",{className:"urun-progress-text",children:[e,"/",r]})]})}var ce=require("zod"),Q=require("react/jsx-runtime"),$e=ce.z.object({state:ce.z.enum(["thinking","generating","idle","error"]),message:ce.z.string().optional()}),Ct={thinking:"Thinking...",generating:"Generating...",idle:"Idle",error:"Error"};function Re(t){let{state:e,message:r}=t,n=e==="thinking"||e==="generating",s=r??Ct[e]??e;return{state:e,message:s,isActive:n}}function Je(t){let{state:e,message:r,isActive:n}=Re(t);return(0,Q.jsxs)("span",{className:"urun-status-badge","data-state":e,children:[(0,Q.jsx)("span",{className:`urun-status-indicator${n?" urun-status-pulse":""}`}),(0,Q.jsx)("span",{className:"urun-status-message",children:r})]})}var Y=require("react"),pe=require("zod"),ee=require("react/jsx-runtime"),We=pe.z.object({text:pe.z.string(),streaming:pe.z.boolean().default(!1)});function Ce(t){let{text:e,streaming:r=!1}=t,n=e.length===0;return{text:e,streaming:r,isEmpty:n}}function Ke(t){let{text:e,streaming:r}=Ce(t),n=(0,Y.useRef)(null),s=(0,Y.useRef)(0);return(0,Y.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"}),r&&(0,ee.jsx)("span",{className:"urun-text-cursor"})]})}var te=require("zod"),re=require("react/jsx-runtime"),Ze=te.z.object({src:te.z.string().url(),alt:te.z.string().optional(),caption:te.z.string().optional()});function Pe(t){let{src:e,alt:r,caption:n}=t;return{src:e,alt:r??"",caption:n}}function Ge(t){let{src:e,alt:r,caption:n}=Pe(t);return(0,re.jsxs)("figure",{className:"urun-image-frame",children:[(0,re.jsx)("img",{className:"urun-image",src:e,alt:r}),n&&(0,re.jsx)("figcaption",{className:"urun-image-caption",children:n})]})}var L=require("zod"),J=require("react/jsx-runtime"),Qe=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 Te(t){return{metrics:t.metrics.map(r=>({...r,displayValue:r.unit?`${r.value} ${r.unit}`:String(r.value)}))}}function Ye(t){let{metrics:e}=Te(t);return(0,J.jsx)("div",{className:"urun-metrics-panel",children:e.map((r,n)=>(0,J.jsxs)("div",{className:"urun-metric-card",children:[(0,J.jsx)("div",{className:"urun-metric-label",children:r.label}),(0,J.jsx)("div",{className:"urun-metric-value",children:r.displayValue})]},n))})}var y=require("react"),nt=gt(require("video.js")),cr=require("video.js/dist/video-js.css");var W=require("react");var ne=require("react"),Pt=require("@urun-sh/core/internal");var Tt=require("react/jsx-runtime"),et=(0,ne.createContext)(null);function tt(t){let e=(0,W.useContext)(et);if(!e)throw new Error("useTrack must be used within <SessionProvider> or <UrunProvider>");let[r,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?.(t);a&&a.readyState!=="ended"&&n(a);let _=s.on("track",u=>{let m=i?.(t);m&&m.id!==u.id||(n(u),u.addEventListener("ended",()=>{n(null)}))});return()=>{_()}},[t,e]),r}var q=require("react/jsx-runtime");function rt(t){t.posterImage?.hide?.()}var kt=["playToggle","volumePanel","fullscreenToggle"],bt=["playToggle","volumePanel","currentTimeDisplay","timeDivider","durationDisplay","progressControl","remainingTimeDisplay","fullscreenToggle"],st=(0,y.forwardRef)(function(e,r){let{track:n,stream:s,src:i,type:a="video/mp4",className:_,videoClassName:u,poster:m,controls:P=!0,autoPlay:c=!0,muted:d=!0,onVideoElement:E,onPlayerReady:U,children:T}=e,v=typeof i=="string"&&i.length>0,f=!v,S=(0,y.useRef)(null),g=(0,y.useRef)(null),[w,x]=(0,y.useState)(!1),de=(0,y.useCallback)(o=>{S.current=o,typeof r=="function"?r(o):r&&(r.current=o),E?.(o)},[r,E]);(0,y.useImperativeHandle)(r,()=>S.current,[]);let N=(0,y.useCallback)(()=>{let o=S.current;if(!o||!o.srcObject&&!o.src)return;d&&(o.muted=!0,o.defaultMuted=!0),o.setAttribute("playsinline",""),o.setAttribute("webkit-playsinline","");let p=o.play();p&&typeof p.then=="function"&&p.then(()=>x(!1)).catch(R=>{(R instanceof Error?R.name:String(R))!=="AbortError"&&x(!0)})},[d]);return(0,y.useEffect)(()=>{if(typeof document>"u")return;let o=S.current;if(!o)return;d&&(o.muted=!0,o.defaultMuted=!0,o.setAttribute("muted","")),o.autoplay=c,o.setAttribute("playsinline",""),o.setAttribute("webkit-playsinline","");let p=(0,nt.default)(o,{controls:P,autoplay:c,muted:d,playsinline:!0,preload:"auto",fluid:!1,bigPlayButton:!0,poster:m,userActions:{click:!0,doubleClick:!1,hotkeys:!1},controlBar:{children:f?kt:bt}});f&&p.addClass("urun-video-live");let R=()=>x(!1),k=()=>{p.hasStarted(!0),rt(p),R()},l=()=>{f&&N()};return o.addEventListener("playing",k),o.addEventListener("loadedmetadata",l),f&&o.addEventListener("pause",l),g.current=p,U?.(p),()=>{o.removeEventListener("playing",k),o.removeEventListener("loadedmetadata",l),o.removeEventListener("pause",l),U?.(null),g.current&&(g.current.dispose(),g.current=null)}},[f]),(0,y.useEffect)(()=>{if(!v)return;let o=g.current;if(!o)return;let p=o.tech?.(!0)?.el?.();p&&(p.srcObject=null),o.src({src:i,type:a}),c&&N()},[v,i,a,c,N]),(0,y.useEffect)(()=>{if(!f)return;let o=g.current;if(!o)return;let p=n??null,R=s??null;!R&&p&&(R=new MediaStream([p]));let k=o.tech?.(!0)?.el?.()??S.current;if(!k)return;if(!R){k.srcObject=null,x(!1);return}k.srcObject=R,N();let l=R.getVideoTracks()[0]??p??null,I=()=>{o.hasStarted(!0),rt(o),N()},K=()=>{k.srcObject=null,x(!1)};return l&&(l.addEventListener("unmute",I),l.addEventListener("ended",K),l.muted||I()),()=>{l&&(l.removeEventListener("unmute",I),l.removeEventListener("ended",K))}},[f,n,s,N]),(0,q.jsxs)("div",{className:_,style:{position:"relative"},"data-urun-video-mode":f?"live":"vod",children:[(0,q.jsx)("video",{ref:de,className:["video-js","vjs-default-skin",u].filter(Boolean).join(" "),playsInline:!0}),w&&(0,q.jsx)("button",{type:"button",onClick:N,"aria-label":"Tap to play",style:{position:"absolute",inset:0,zIndex:30,display:"flex",alignItems:"center",justifyContent:"center",background:"rgba(0,0,0,0.6)",border:0,cursor:"pointer",color:"#fff"},children:(0,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"]})}),T]})}),Et=(0,y.forwardRef)(function({name:e,...r},n){let s=tt(e);return(0,q.jsx)(st,{ref:n,...r,track:s})}),ot=(0,y.forwardRef)(function(e,r){return!!e.name&&!e.track&&!e.stream&&!(typeof e.src=="string"&&e.src)?(0,q.jsx)(Et,{ref:r,...e,name:e.name}):(0,q.jsx)(st,{ref:r,...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});
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as qe,b as Ae,c as W}from"./chunk-QAEWAWV4.mjs";import{useEffect as Be,useMemo as Le,useState as De}from"react";import{Component as Ie}from"react";import{jsx as ue,jsxs as Ne}from"react/jsx-runtime";var M=class extends Ie{constructor(e){super(e),this.state={error:null}}static getDerivedStateFromError(e){return{error:e}}componentDidCatch(e,r){console.error("[urun] Error caught by UrunErrorBoundary:",e,r)}render(){if(this.state.error){let{fallback:e}=this.props;return typeof e=="function"?e(this.state.error):e||Ne("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:[ue("p",{style:{margin:0,fontWeight:600},children:"Connection interrupted"}),ue("p",{style:{margin:"6px 0 0",color:"#4b5563"},children:"Reconnecting automatically."})]})}return this.props.children}};import{createContext as Me}from"react";var L=Me(null);function U(t){return t&&t.trim()?t.trim():void 0}function x(t){switch(t){case"NEXT_PUBLIC_AUTH_MODE":return U(typeof process<"u"?process.env?.NEXT_PUBLIC_AUTH_MODE:void 0);case"NEXT_PUBLIC_AUTH_ENABLED":return U(typeof process<"u"?process.env?.NEXT_PUBLIC_AUTH_ENABLED:void 0);case"NEXT_PUBLIC_SESSION_AUTH_PROVIDER":return U(typeof process<"u"?process.env?.NEXT_PUBLIC_SESSION_AUTH_PROVIDER:void 0);case"NEXT_PUBLIC_SESSION_TOKEN":return U(typeof process<"u"?process.env?.NEXT_PUBLIC_SESSION_TOKEN:void 0);case"NEXT_PUBLIC_URUN_JWT":return U(typeof process<"u"?process.env?.NEXT_PUBLIC_URUN_JWT:void 0);case"VERCEL_ENV":return U(typeof process<"u"?process.env?.VERCEL_ENV:void 0);default:return U(typeof process<"u"?process.env?.[t]:void 0)}}function D(){let t=x("NEXT_PUBLIC_AUTH_MODE")?.toLowerCase();return t==="jwt"||t==="customer-jwt"||t==="test-jwt"?"jwt":t==="workos"||x("VERCEL_ENV")==="production"?"workos":x("NEXT_PUBLIC_AUTH_ENABLED")==="false"?"jwt":"workos"}function Oe(){return D()==="workos"}import{jsx as K}from"react/jsx-runtime";function Fe({baseUrl:t,orgId:e,appId:r,jwt:n,authProvider:s,fallback:o,children:i}){let[P,a]=De(),p=W(),l=x("NEXT_PUBLIC_SESSION_TOKEN")??x("NEXT_PUBLIC_URUN_JWT"),u=D(),c=u==="workos"&&!n,h=n??(u==="jwt"?l:void 0)??P,y=s??x("NEXT_PUBLIC_SESSION_AUTH_PROVIDER"),m=c&&!h,g=Le(()=>({appId:r,baseUrl:t,orgId:e,jwt:h,getAccessToken:c?p?.getAccessToken:void 0,authProvider:y}),[r,p,t,y,h,e,c]);return Be(()=>{if(!c||!p)return;let f=!1,S=p;async function d(){try{let T=await S.getAccessToken();f||a(T??void 0)}catch{f||a(void 0)}}d();let R=window.setInterval(()=>{d()},6e4);return()=>{f=!0,window.clearInterval(R)}},[p,c]),K(M,{fallback:o,children:m?K("div",{role:"status","aria-live":"polite",children:"Signing in..."}):K(L.Provider,{value:g,children:i})})}import{useContext as Ve,useMemo as ce,useReducer as Xe,useRef as je}from"react";import{App as $e}from"@urun-sh/core";function ze(t,e){return`${t}:${JSON.stringify(e??{})}`}var Z=class{constructor(e,r){this._doc=e;this._notify=r;this._unsubscribeChange=this._doc.on("change",()=>this._notify())}_doc;_notify;_unsubscribeChange;get(e,r){return this._doc.get(e,r)}set(e){this._doc.set(e),this._notify()}on(e,r){return this._doc.on(e,n=>r(n))}get synced(){return this._doc.synced}onSynced(e){return this._doc.onSynced(()=>{e(),this._notify()})}text(e){let r=this._doc.text(e),n=this._notify;return{append(s){r.append(s),n()},toString:()=>r.toString(),get length(){return r.length},on:(s,o)=>r.on(s,i=>{o(i),n()})}}dispose(){this._unsubscribeChange()}},G=class{constructor(e,r){this._stream=e;this._notify=r;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)}on(e,r){return this._stream.on(e,r)}messages(){return this._stream.messages()}dispose(){this._unsubscribeTrack()}},Q=class{constructor(e,r){this._session=e;this._notify=r;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,r){return this._session.request(e,r)}requestStream(e,r){return this._session.requestStream(e,r)}complete(e,r){return this._session.complete(e,r)}doc(e){let r=this._docs.get(e);return r||(r=new Z(this._session.doc(e),this._notify),this._docs.set(e,r)),r}stream(e){let r=this._streams.get(e);return r||(r=new G(this._session.stream(e),this._notify),this._streams.set(e,r)),r}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 He(){let t=Ve(L);if(!t)throw new Error("useApp must be used within <UrunProvider>");if(!t.appId)throw new Error('useApp requires <UrunProvider appId="...">');let[,e]=Xe(s=>s+1,0),r=je(new Map),n=ce(()=>$e(t.appId,{baseUrl:t.baseUrl,orgId:t.orgId,jwt:t.jwt,getAccessToken:t.getAccessToken,authProvider:t.authProvider}),[t.appId,t.baseUrl,t.orgId,t.jwt,t.getAccessToken,t.authProvider]);return ce(()=>new Proxy({},{get(s,o){if(typeof o=="string")return i=>{let P=ze(o,i),a=r.current.get(P);if(a)return a;let p=new Q(n[o](i),e);return r.current.set(P,p),p}}}),[n])}import{useCallback as Y,useEffect as Je,useMemo as We,useRef as F,useState as ee}from"react";function q(t){let e=t;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 Ke(t){return t instanceof Error?t:new Error(String(t))}function Ze(t,e){let r=We(()=>q(t),[t]),[n,s]=ee(void 0),[o,i]=ee(null),[P,a]=ee(!1),p=F(e);p.current=e;let l=F(0),u=F(null),c=F(!0);Je(()=>(c.current=!0,()=>{c.current=!1,u.current?.abort()}),[]);let h=Y(async g=>{u.current?.abort();let f=new AbortController;u.current=f;let S=++l.current,d=()=>c.current&&l.current===S;d()&&(a(!0),i(null));try{let R=await r.request(g,{...p.current,signal:f.signal});return d()&&(s(R),a(!1),p.current?.onSuccess?.(R)),R}catch(R){let T=Ke(R);throw d()&&(i(T),a(!1),p.current?.onError?.(T)),T}},[r]),y=Y(g=>{h(g).catch(()=>{})},[h]),m=Y(()=>{l.current++,u.current?.abort(),u.current=null,s(void 0),i(null),a(!1)},[]);return{mutate:y,mutateAsync:h,data:n,error:o,isPending:P,reset:m}}import{useCallback as pe,useEffect as Ge,useMemo as Qe,useRef as V,useState as te}from"react";function de(t){return t instanceof Error?t:new Error(String(t))}var Ye=t=>typeof t=="string"?t:String(t);function et(t,e){let r=Qe(()=>q(t),[t]),[n,s]=te(""),[o,i]=te(!1),[P,a]=te(null),p=V(e);p.current=e;let l=V(0),u=V(null),c=V(!0);Ge(()=>(c.current=!0,()=>{c.current=!1,u.current?.cancel(),u.current=null}),[]);let h=pe(()=>{l.current++,u.current?.cancel(),u.current=null,c.current&&i(!1)},[]),y=pe(async m=>{u.current?.cancel();let g=++l.current,f=()=>c.current&&l.current===g,S=p.current,d=S?.parseChunk??Ye,R=S?.buildPayload??(v=>({prompt:v}));f()&&(s(""),a(null),i(!0));let{parseChunk:T,buildPayload:_e,onFinish:z,onError:I,...k}=S??{},N="",_;try{_=r.requestStream(R(m),k),u.current=_}catch(v){let E=de(v);f()&&(a(E),i(!1),S?.onError?.(E));return}try{for await(let v of _){if(l.current!==g)break;N+=d(v),f()&&s(N)}f()&&(i(!1),S?.onFinish?.(N))}catch(v){let E=de(v);f()&&(a(E),i(!1),S?.onError?.(E))}finally{u.current===_&&(u.current=null)}},[r]);return{completion:n,complete:y,stop:h,isStreaming:o,error:P}}import{useCallback as le,useEffect as tt,useMemo as rt,useRef as A,useState as X}from"react";function me(t){return t instanceof Error?t:new Error(String(t))}var nt=t=>typeof t=="string"?t:String(t),fe=0;function re(t){return fe+=1,`${t}-${fe}`}function st(t,e){let r=rt(()=>q(t),[t]),[n,s]=X(()=>(e?.initialMessages??[]).map(d=>({id:d.id??re("msg"),role:d.role,content:d.content}))),[o,i]=X(""),[P,a]=X(!1),[p,l]=X(null),u=A(e);u.current=e;let c=A(n);c.current=n;let h=A(o);h.current=o;let y=A(0),m=A(null),g=A(!0);tt(()=>(g.current=!0,()=>{g.current=!1,m.current?.cancel(),m.current=null}),[]);let f=le(()=>{y.current++,m.current?.cancel(),m.current=null,g.current&&a(!1)},[]),S=le(async d=>{let R=d===void 0,T=(R?h.current:d)??"";if(!T.trim())return;m.current?.cancel();let z=++y.current,I=()=>g.current&&y.current===z,k=u.current,N=k?.parseChunk??nt,_={id:re("msg"),role:"user",content:T},v={id:re("msg"),role:"assistant",content:""},E=[...c.current,_].map(C=>({role:C.role,content:C.content})),ae=[...c.current,_,v];c.current=ae,s(ae),R&&i(""),l(null),a(!0);let Ee=k?.buildPayload??(C=>({messages:C})),{initialMessages:kt,parseChunk:xt,buildPayload:bt,onFinish:_t,onError:Et,...we}=k??{},Ue=C=>{s(w=>w.map(J=>J.id===v.id?{...J,content:C}:J))},H="",B;try{B=r.requestStream(Ee(E),we),m.current=B}catch(C){let w=me(C);I()&&(l(w),a(!1),k?.onError?.(w));return}try{for await(let C of B){if(y.current!==z)break;H+=N(C),I()&&Ue(H)}I()&&(a(!1),k?.onFinish?.({...v,content:H}))}catch(C){let w=me(C);I()&&(l(w),a(!1),k?.onError?.(w))}finally{m.current===B&&(m.current=null)}},[r]);return{messages:n,input:o,setInput:i,sendMessage:S,stop:f,isStreaming:P,error:p}}var ge=new Map;function ot(t,e,r){if(!r||typeof r.safeParse!="function")throw new Error(`registerComponent("${t}"): schema must be a valid Zod schema`);ge.set(t,{component:e,schema:r})}function he(t,e){let r=ge.get(t);if(!r)return{error:`Unknown component: "${t}"`};let n=r.schema.safeParse(e);return n.success?{Component:r.component,validatedProps:n.data}:{error:`Validation failed for "${t}": ${n.error.message}`}}import{Fragment as at,jsx as j}from"react/jsx-runtime";function it({name:t,props:e,fallback:r}){let n=he(t,e);if(n.error)return console.warn(`[urun] ComponentRenderer: ${n.error}`),r?j(at,{children:r}):j("div",{className:"urun-component-error",role:"alert",children:j("span",{className:"urun-component-error-text",children:n.error})});let s=n.Component;return j(s,{...n.validatedProps})}import{z as O}from"zod";import{jsx as ne,jsxs as Se}from"react/jsx-runtime";var ut=O.object({step:O.number().min(0),total:O.number().min(1),label:O.string().optional(),variant:O.enum(["default","success","error"]).default("default")});function Re(t){let{step:e,total:r,label:n,variant:s="default"}=t,o=Math.min(e/r*100,100),i=e>=r;return{step:e,total:r,label:n,variant:s,percentage:o,isComplete:i}}function ct(t){let{step:e,total:r,label:n,variant:s,percentage:o}=Re(t);return Se("div",{className:"urun-progress-card","data-variant":s,children:[n&&ne("div",{className:"urun-progress-label",children:n}),ne("div",{className:"urun-progress-bar",children:ne("div",{className:"urun-progress-fill",style:{width:`${o}%`}})}),Se("div",{className:"urun-progress-text",children:[e,"/",r]})]})}import{z as se}from"zod";import{jsx as Ce,jsxs as mt}from"react/jsx-runtime";var pt=se.object({state:se.enum(["thinking","generating","idle","error"]),message:se.string().optional()}),dt={thinking:"Thinking...",generating:"Generating...",idle:"Idle",error:"Error"};function ye(t){let{state:e,message:r}=t,n=e==="thinking"||e==="generating",s=r??dt[e]??e;return{state:e,message:s,isActive:n}}function lt(t){let{state:e,message:r,isActive:n}=ye(t);return mt("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:r})]})}import{useRef as ve,useEffect as ft}from"react";import{z as oe}from"zod";import{jsx as Pe,jsxs as St}from"react/jsx-runtime";var gt=oe.object({text:oe.string(),streaming:oe.boolean().default(!1)});function Te(t){let{text:e,streaming:r=!1}=t,n=e.length===0;return{text:e,streaming:r,isEmpty:n}}function ht(t){let{text:e,streaming:r}=Te(t),n=ve(null),s=ve(0);return ft(()=>{let o=n.current;o&&e.length!==s.current&&(o.textContent=e,s.current=e.length)},[e]),St("div",{className:"urun-text-stream",children:[Pe("span",{ref:n,className:"urun-text-content"}),r&&Pe("span",{className:"urun-text-cursor"})]})}import{z as $}from"zod";import{jsx as ke,jsxs as yt}from"react/jsx-runtime";var Rt=$.object({src:$.string().url(),alt:$.string().optional(),caption:$.string().optional()});function xe(t){let{src:e,alt:r,caption:n}=t;return{src:e,alt:r??"",caption:n}}function Ct(t){let{src:e,alt:r,caption:n}=xe(t);return yt("figure",{className:"urun-image-frame",children:[ke("img",{className:"urun-image",src:e,alt:r}),n&&ke("figcaption",{className:"urun-image-caption",children:n})]})}import{z as b}from"zod";import{jsx as ie,jsxs as Tt}from"react/jsx-runtime";var vt=b.object({metrics:b.array(b.object({label:b.string(),value:b.union([b.string(),b.number()]),unit:b.string().optional()}))});function be(t){return{metrics:t.metrics.map(r=>({...r,displayValue:r.unit?`${r.value} ${r.unit}`:String(r.value)}))}}function Pt(t){let{metrics:e}=be(t);return ie("div",{className:"urun-metrics-panel",children:e.map((r,n)=>Tt("div",{className:"urun-metric-card",children:[ie("div",{className:"urun-metric-label",children:r.label}),ie("div",{className:"urun-metric-value",children:r.displayValue})]},n))})}export{it as ComponentRenderer,Ct as ImageFrame,Rt as ImageFrameSchema,Pt as MetricsPanel,vt as MetricsPanelSchema,ct as ProgressCard,ut as ProgressCardSchema,lt as StatusBadge,pt as StatusBadgeSchema,ht as TextStream,gt as TextStreamSchema,qe as UrunAuthProvider,M as UrunErrorBoundary,Ae as UrunJwtProvider,Fe as UrunProvider,D as authMode,ot as registerComponent,x as urunPublicEnv,He as useApp,st as useChat,et as useCompletion,xe as useImageFrame,be as useMetricsPanel,Re as useProgressCard,Ze as useRequest,ye as useStatusBadge,Te as useTextStream,W as useUrunAuth,Oe as usesWorkOSAuth};
|
|
1
|
+
import{a as je,b as He,c as G}from"./chunk-QAEWAWV4.mjs";import{useEffect as Je,useMemo as We,useState as Ke}from"react";import{Component as Fe}from"react";import{jsx as le,jsxs as ze}from"react/jsx-runtime";var V=class extends Fe{constructor(e){super(e),this.state={error:null}}static getDerivedStateFromError(e){return{error:e}}componentDidCatch(e,r){console.error("[urun] Error caught by UrunErrorBoundary:",e,r)}render(){if(this.state.error){let{fallback:e}=this.props;return typeof e=="function"?e(this.state.error):e||ze("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 Xe}from"react";var j=Xe(null);function A(t){return t&&t.trim()?t.trim():void 0}function U(t){switch(t){case"NEXT_PUBLIC_AUTH_MODE":return A(typeof process<"u"?process.env?.NEXT_PUBLIC_AUTH_MODE:void 0);case"NEXT_PUBLIC_AUTH_ENABLED":return A(typeof process<"u"?process.env?.NEXT_PUBLIC_AUTH_ENABLED:void 0);case"NEXT_PUBLIC_SESSION_AUTH_PROVIDER":return A(typeof process<"u"?process.env?.NEXT_PUBLIC_SESSION_AUTH_PROVIDER:void 0);case"NEXT_PUBLIC_SESSION_TOKEN":return A(typeof process<"u"?process.env?.NEXT_PUBLIC_SESSION_TOKEN:void 0);case"NEXT_PUBLIC_URUN_JWT":return A(typeof process<"u"?process.env?.NEXT_PUBLIC_URUN_JWT:void 0);case"VERCEL_ENV":return A(typeof process<"u"?process.env?.VERCEL_ENV:void 0);default:return A(typeof process<"u"?process.env?.[t]:void 0)}}function H(){let t=U("NEXT_PUBLIC_AUTH_MODE")?.toLowerCase();return t==="jwt"||t==="customer-jwt"||t==="test-jwt"?"jwt":t==="workos"||U("VERCEL_ENV")==="production"?"workos":U("NEXT_PUBLIC_AUTH_ENABLED")==="false"?"jwt":"workos"}function $e(){return H()==="workos"}import{jsx as Q}from"react/jsx-runtime";function Ze({baseUrl:t,orgId:e,appId:r,jwt:n,authProvider:o,fallback:i,children:a}){let[k,u]=Ke(),m=G(),v=U("NEXT_PUBLIC_SESSION_TOKEN")??U("NEXT_PUBLIC_URUN_JWT"),c=H(),d=c==="workos"&&!n,P=n??(c==="jwt"?v:void 0)??k,b=o??U("NEXT_PUBLIC_SESSION_AUTH_PROVIDER"),R=d&&!P,S=We(()=>({appId:r,baseUrl:t,orgId:e,jwt:P,getAccessToken:d?m?.getAccessToken:void 0,authProvider:b}),[r,m,t,b,P,e,d]);return Je(()=>{if(!d||!m)return;let f=!1,h=m;async function g(){try{let T=await h.getAccessToken();f||u(T??void 0)}catch{f||u(void 0)}}g();let E=window.setInterval(()=>{g()},6e4);return()=>{f=!0,window.clearInterval(E)}},[m,d]),Q(V,{fallback:i,children:R?Q("div",{role:"status","aria-live":"polite",children:"Signing in..."}):Q(j.Provider,{value:S,children:a})})}import{useContext as Ge,useMemo as me,useReducer as Qe,useRef as Ye}from"react";import{App as et}from"@urun-sh/core";function tt(t,e){return`${t}:${JSON.stringify(e??{})}`}var Y=class{constructor(e,r){this._doc=e;this._notify=r;this._unsubscribeChange=this._doc.on("change",()=>this._notify())}_doc;_notify;_unsubscribeChange;get(e,r){return this._doc.get(e,r)}set(e){this._doc.set(e),this._notify()}on(e,r){return this._doc.on(e,n=>r(n))}get synced(){return this._doc.synced}onSynced(e){return this._doc.onSynced(()=>{e(),this._notify()})}text(e){let r=this._doc.text(e),n=this._notify;return{append(o){r.append(o),n()},toString:()=>r.toString(),get length(){return r.length},on:(o,i)=>r.on(o,a=>{i(a),n()})}}dispose(){this._unsubscribeChange()}},ee=class{constructor(e,r){this._stream=e;this._notify=r;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)}on(e,r){return this._stream.on(e,r)}messages(){return this._stream.messages()}emit(e,r){return this._stream.emit(e,r)}dispose(){this._unsubscribeTrack()}},te=class{constructor(e,r){this._session=e;this._notify=r;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,r){return this._session.request(e,r)}requestStream(e,r){return this._session.requestStream(e,r)}complete(e,r){return this._session.complete(e,r)}doc(e){let r=this._docs.get(e);return r||(r=new Y(this._session.doc(e),this._notify),this._docs.set(e,r)),r}stream(e){let r=this._streams.get(e);return r||(r=new ee(this._session.stream(e),this._notify),this._streams.set(e,r)),r}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 rt(){let t=Ge(j);if(!t)throw new Error("useApp must be used within <UrunProvider>");if(!t.appId)throw new Error('useApp requires <UrunProvider appId="...">');let[,e]=Qe(o=>o+1,0),r=Ye(new Map),n=me(()=>et(t.appId,{baseUrl:t.baseUrl,orgId:t.orgId,jwt:t.jwt,getAccessToken:t.getAccessToken,authProvider:t.authProvider}),[t.appId,t.baseUrl,t.orgId,t.jwt,t.getAccessToken,t.authProvider]);return me(()=>new Proxy({},{get(o,i){if(typeof i=="string")return a=>{let k=tt(i,a),u=r.current.get(k);if(u)return u;let m=new te(n[i](a),e);return r.current.set(k,m),m}}}),[n])}import{useCallback as re,useEffect as nt,useMemo as st,useRef as F,useState as ne}from"react";function M(t){let e=t;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 ot(t){return t instanceof Error?t:new Error(String(t))}function it(t,e){let r=st(()=>M(t),[t]),[n,o]=ne(void 0),[i,a]=ne(null),[k,u]=ne(!1),m=F(e);m.current=e;let v=F(0),c=F(null),d=F(!0);nt(()=>(d.current=!0,()=>{d.current=!1,c.current?.abort()}),[]);let P=re(async S=>{c.current?.abort();let f=new AbortController;c.current=f;let h=++v.current,g=()=>d.current&&v.current===h;g()&&(u(!0),a(null));try{let E=await r.request(S,{...m.current,signal:f.signal});return g()&&(o(E),u(!1),m.current?.onSuccess?.(E)),E}catch(E){let T=ot(E);throw g()&&(a(T),u(!1),m.current?.onError?.(T)),T}},[r]),b=re(S=>{P(S).catch(()=>{})},[P]),R=re(()=>{v.current++,c.current?.abort(),c.current=null,o(void 0),a(null),u(!1)},[]);return{mutate:b,mutateAsync:P,data:n,error:i,isPending:k,reset:R}}import{useCallback as fe,useEffect as at,useMemo as ut,useRef as z,useState as se}from"react";function ge(t){return t instanceof Error?t:new Error(String(t))}var ct=t=>typeof t=="string"?t:String(t);function pt(t,e){let r=ut(()=>M(t),[t]),[n,o]=se(""),[i,a]=se(!1),[k,u]=se(null),m=z(e);m.current=e;let v=z(0),c=z(null),d=z(!0);at(()=>(d.current=!0,()=>{d.current=!1,c.current?.cancel(),c.current=null}),[]);let P=fe(()=>{v.current++,c.current?.cancel(),c.current=null,d.current&&a(!1)},[]),b=fe(async R=>{c.current?.cancel();let S=++v.current,f=()=>d.current&&v.current===S,h=m.current,g=h?.parseChunk??ct,E=h?.buildPayload??(l=>({prompt:l}));f()&&(o(""),u(null),a(!0));let{parseChunk:T,buildPayload:W,onFinish:_,onError:s,...p}=h??{},y="",C;try{C=r.requestStream(E(R),p),c.current=C}catch(l){let w=ge(l);f()&&(u(w),a(!1),h?.onError?.(w));return}try{for await(let l of C){if(v.current!==S)break;y+=g(l),f()&&o(y)}f()&&(a(!1),h?.onFinish?.(y))}catch(l){let w=ge(l);f()&&(u(w),a(!1),h?.onError?.(w))}finally{c.current===C&&(c.current=null)}},[r]);return{completion:n,complete:b,stop:P,isStreaming:i,error:k}}import{useCallback as he,useEffect as dt,useMemo as lt,useRef as O,useState as X}from"react";function Se(t){return t instanceof Error?t:new Error(String(t))}var mt=t=>typeof t=="string"?t:String(t),ye=0;function oe(t){return ye+=1,`${t}-${ye}`}function ft(t,e){let r=lt(()=>M(t),[t]),[n,o]=X(()=>(e?.initialMessages??[]).map(g=>({id:g.id??oe("msg"),role:g.role,content:g.content}))),[i,a]=X(""),[k,u]=X(!1),[m,v]=X(null),c=O(e);c.current=e;let d=O(n);d.current=n;let P=O(i);P.current=i;let b=O(0),R=O(null),S=O(!0);dt(()=>(S.current=!0,()=>{S.current=!1,R.current?.cancel(),R.current=null}),[]);let f=he(()=>{b.current++,R.current?.cancel(),R.current=null,S.current&&u(!1)},[]),h=he(async g=>{let E=g===void 0,T=(E?P.current:g)??"";if(!T.trim())return;R.current?.cancel();let _=++b.current,s=()=>S.current&&b.current===_,p=c.current,y=p?.parseChunk??mt,C={id:oe("msg"),role:"user",content:T},l={id:oe("msg"),role:"assistant",content:""},w=[...d.current,C].map(x=>({role:x.role,content:x.content})),L=[...d.current,C,l];d.current=L,o(L),E&&a(""),v(null),u(!0);let Ve=p?.buildPayload??(x=>({messages:x})),{initialMessages:Xt,parseChunk:$t,buildPayload:Jt,onFinish:Wt,onError:Kt,...Be}=p??{},De=x=>{o(I=>I.map(Z=>Z.id===l.id?{...Z,content:x}:Z))},K="",D;try{D=r.requestStream(Ve(w),Be),R.current=D}catch(x){let I=Se(x);s()&&(v(I),u(!1),p?.onError?.(I));return}try{for await(let x of D){if(b.current!==_)break;K+=y(x),s()&&De(K)}s()&&(u(!1),p?.onFinish?.({...l,content:K}))}catch(x){let I=Se(x);s()&&(v(I),u(!1),p?.onError?.(I))}finally{R.current===D&&(R.current=null)}},[r]);return{messages:n,input:i,setInput:a,sendMessage:h,stop:f,isStreaming:k,error:m}}var ve=new Map;function gt(t,e,r){if(!r||typeof r.safeParse!="function")throw new Error(`registerComponent("${t}"): schema must be a valid Zod schema`);ve.set(t,{component:e,schema:r})}function Re(t,e){let r=ve.get(t);if(!r)return{error:`Unknown component: "${t}"`};let n=r.schema.safeParse(e);return n.success?{Component:r.component,validatedProps:n.data}:{error:`Validation failed for "${t}": ${n.error.message}`}}import{Fragment as St,jsx as $}from"react/jsx-runtime";function ht({name:t,props:e,fallback:r}){let n=Re(t,e);if(n.error)return console.warn(`[urun] ComponentRenderer: ${n.error}`),r?$(St,{children:r}):$("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 B}from"zod";import{jsx as ie,jsxs as Ce}from"react/jsx-runtime";var yt=B.object({step:B.number().min(0),total:B.number().min(1),label:B.string().optional(),variant:B.enum(["default","success","error"]).default("default")});function Pe(t){let{step:e,total:r,label:n,variant:o="default"}=t,i=Math.min(e/r*100,100),a=e>=r;return{step:e,total:r,label:n,variant:o,percentage:i,isComplete:a}}function vt(t){let{step:e,total:r,label:n,variant:o,percentage:i}=Pe(t);return Ce("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}%`}})}),Ce("div",{className:"urun-progress-text",children:[e,"/",r]})]})}import{z as ae}from"zod";import{jsx as Te,jsxs as Tt}from"react/jsx-runtime";var Rt=ae.object({state:ae.enum(["thinking","generating","idle","error"]),message:ae.string().optional()}),Ct={thinking:"Thinking...",generating:"Generating...",idle:"Idle",error:"Error"};function ke(t){let{state:e,message:r}=t,n=e==="thinking"||e==="generating",o=r??Ct[e]??e;return{state:e,message:o,isActive:n}}function Pt(t){let{state:e,message:r,isActive:n}=ke(t);return Tt("span",{className:"urun-status-badge","data-state":e,children:[Te("span",{className:`urun-status-indicator${n?" urun-status-pulse":""}`}),Te("span",{className:"urun-status-message",children:r})]})}import{useRef as be,useEffect as kt}from"react";import{z as ue}from"zod";import{jsx as Ee,jsxs as xt}from"react/jsx-runtime";var bt=ue.object({text:ue.string(),streaming:ue.boolean().default(!1)});function xe(t){let{text:e,streaming:r=!1}=t,n=e.length===0;return{text:e,streaming:r,isEmpty:n}}function Et(t){let{text:e,streaming:r}=xe(t),n=be(null),o=be(0);return kt(()=>{let i=n.current;i&&e.length!==o.current&&(i.textContent=e,o.current=e.length)},[e]),xt("div",{className:"urun-text-stream",children:[Ee("span",{ref:n,className:"urun-text-content"}),r&&Ee("span",{className:"urun-text-cursor"})]})}import{z as J}from"zod";import{jsx as _e,jsxs as Ut}from"react/jsx-runtime";var _t=J.object({src:J.string().url(),alt:J.string().optional(),caption:J.string().optional()});function we(t){let{src:e,alt:r,caption:n}=t;return{src:e,alt:r??"",caption:n}}function wt(t){let{src:e,alt:r,caption:n}=we(t);return Ut("figure",{className:"urun-image-frame",children:[_e("img",{className:"urun-image",src:e,alt:r}),n&&_e("figcaption",{className:"urun-image-caption",children:n})]})}import{z as N}from"zod";import{jsx as ce,jsxs as At}from"react/jsx-runtime";var Nt=N.object({metrics:N.array(N.object({label:N.string(),value:N.union([N.string(),N.number()]),unit:N.string().optional()}))});function Ue(t){return{metrics:t.metrics.map(r=>({...r,displayValue:r.unit?`${r.value} ${r.unit}`:String(r.value)}))}}function It(t){let{metrics:e}=Ue(t);return ce("div",{className:"urun-metrics-panel",children:e.map((r,n)=>At("div",{className:"urun-metric-card",children:[ce("div",{className:"urun-metric-label",children:r.label}),ce("div",{className:"urun-metric-value",children:r.displayValue})]},n))})}import{forwardRef as de,useCallback as Ae,useEffect as pe,useImperativeHandle as Vt,useRef as qe,useState as Bt}from"react";import Dt from"video.js";import"video.js/dist/video-js.css";import{useContext as Mt,useState as Ot,useEffect as Lt}from"react";import{createContext as qt,useState as zr,useEffect as Xr,useRef as $r}from"react";import{TransportSession as Wr}from"@urun-sh/core/internal";import{jsx as Zr}from"react/jsx-runtime";var Ne=qt(null);function Ie(t){let e=Mt(Ne);if(!e)throw new Error("useTrack must be used within <SessionProvider> or <UrunProvider>");let[r,n]=Ot(null);return Lt(()=>{let o=e.getState()._transport;if(!o)return;let i=o.getTrackByName?.bind(o),a=i?.(t);a&&a.readyState!=="ended"&&n(a);let k=o.on("track",u=>{let m=i?.(t);m&&m.id!==u.id||(n(u),u.addEventListener("ended",()=>{n(null)}))});return()=>{k()}},[t,e]),r}import{jsx as q,jsxs as Oe}from"react/jsx-runtime";function Me(t){t.posterImage?.hide?.()}var jt=["playToggle","volumePanel","fullscreenToggle"],Ht=["playToggle","volumePanel","currentTimeDisplay","timeDivider","durationDisplay","progressControl","remainingTimeDisplay","fullscreenToggle"],Le=de(function(e,r){let{track:n,stream:o,src:i,type:a="video/mp4",className:k,videoClassName:u,poster:m,controls:v=!0,autoPlay:c=!0,muted:d=!0,onVideoElement:P,onPlayerReady:b,children:R}=e,S=typeof i=="string"&&i.length>0,f=!S,h=qe(null),g=qe(null),[E,T]=Bt(!1),W=Ae(s=>{h.current=s,typeof r=="function"?r(s):r&&(r.current=s),P?.(s)},[r,P]);Vt(r,()=>h.current,[]);let _=Ae(()=>{let s=h.current;if(!s||!s.srcObject&&!s.src)return;d&&(s.muted=!0,s.defaultMuted=!0),s.setAttribute("playsinline",""),s.setAttribute("webkit-playsinline","");let p=s.play();p&&typeof p.then=="function"&&p.then(()=>T(!1)).catch(y=>{(y instanceof Error?y.name:String(y))!=="AbortError"&&T(!0)})},[d]);return pe(()=>{if(typeof document>"u")return;let s=h.current;if(!s)return;d&&(s.muted=!0,s.defaultMuted=!0,s.setAttribute("muted","")),s.autoplay=c,s.setAttribute("playsinline",""),s.setAttribute("webkit-playsinline","");let p=Dt(s,{controls:v,autoplay:c,muted:d,playsinline:!0,preload:"auto",fluid:!1,bigPlayButton:!0,poster:m,userActions:{click:!0,doubleClick:!1,hotkeys:!1},controlBar:{children:f?jt:Ht}});f&&p.addClass("urun-video-live");let y=()=>T(!1),C=()=>{p.hasStarted(!0),Me(p),y()},l=()=>{f&&_()};return s.addEventListener("playing",C),s.addEventListener("loadedmetadata",l),f&&s.addEventListener("pause",l),g.current=p,b?.(p),()=>{s.removeEventListener("playing",C),s.removeEventListener("loadedmetadata",l),s.removeEventListener("pause",l),b?.(null),g.current&&(g.current.dispose(),g.current=null)}},[f]),pe(()=>{if(!S)return;let s=g.current;if(!s)return;let p=s.tech?.(!0)?.el?.();p&&(p.srcObject=null),s.src({src:i,type:a}),c&&_()},[S,i,a,c,_]),pe(()=>{if(!f)return;let s=g.current;if(!s)return;let p=n??null,y=o??null;!y&&p&&(y=new MediaStream([p]));let C=s.tech?.(!0)?.el?.()??h.current;if(!C)return;if(!y){C.srcObject=null,T(!1);return}C.srcObject=y,_();let l=y.getVideoTracks()[0]??p??null,w=()=>{s.hasStarted(!0),Me(s),_()},L=()=>{C.srcObject=null,T(!1)};return l&&(l.addEventListener("unmute",w),l.addEventListener("ended",L),l.muted||w()),()=>{l&&(l.removeEventListener("unmute",w),l.removeEventListener("ended",L))}},[f,n,o,_]),Oe("div",{className:k,style:{position:"relative"},"data-urun-video-mode":f?"live":"vod",children:[q("video",{ref:W,className:["video-js","vjs-default-skin",u].filter(Boolean).join(" "),playsInline:!0}),E&&q("button",{type:"button",onClick:_,"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:Oe("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"]})}),R]})}),Ft=de(function({name:e,...r},n){let o=Ie(e);return q(Le,{ref:n,...r,track:o})}),zt=de(function(e,r){return!!e.name&&!e.track&&!e.stream&&!(typeof e.src=="string"&&e.src)?q(Ft,{ref:r,...e,name:e.name}):q(Le,{ref:r,...e})});export{ht as ComponentRenderer,wt as ImageFrame,_t as ImageFrameSchema,It as MetricsPanel,Nt as MetricsPanelSchema,vt as ProgressCard,yt as ProgressCardSchema,Pt as StatusBadge,Rt as StatusBadgeSchema,Et as TextStream,bt as TextStreamSchema,je as UrunAuthProvider,V as UrunErrorBoundary,He as UrunJwtProvider,Ze as UrunProvider,zt as UrunVideo,H as authMode,gt as registerComponent,U as urunPublicEnv,rt as useApp,ft as useChat,pt as useCompletion,we as useImageFrame,Ue as useMetricsPanel,Pe as useProgressCard,it as useRequest,ke as useStatusBadge,xe as useTextStream,G as useUrunAuth,$e as usesWorkOSAuth};
|
package/dist/styles.css
CHANGED
|
@@ -208,3 +208,18 @@
|
|
|
208
208
|
opacity: 0;
|
|
209
209
|
}
|
|
210
210
|
}
|
|
211
|
+
|
|
212
|
+
/* UrunVideo — live mode: keep the video.js poster / loading spinner / big-play
|
|
213
|
+
* layer from staying composited OVER the <video>. On iOS Safari/Chrome that
|
|
214
|
+
* layer stays opaque (black) when srcObject is attached and video.js never
|
|
215
|
+
* sees a "source". Once a live player has started, force these layers gone. */
|
|
216
|
+
.urun-video-live.vjs-has-started .vjs-poster,
|
|
217
|
+
.urun-video-live.vjs-has-started .vjs-loading-spinner,
|
|
218
|
+
.urun-video-live.vjs-has-started .vjs-big-play-button {
|
|
219
|
+
display: none !important;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/* Belt-and-braces: live streams never need the spinner/poster covering frames. */
|
|
223
|
+
.urun-video-live .vjs-poster {
|
|
224
|
+
background-color: transparent;
|
|
225
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@urun-sh/react",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.42",
|
|
4
4
|
"description": "React bindings for the urun TypeScript SDK",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -42,14 +42,16 @@
|
|
|
42
42
|
"build": "tsup && node -e \"require('fs').copyFileSync('src/components/styles.css','dist/styles.css')\" && node ../../scripts/sanitize-dist.mjs .",
|
|
43
43
|
"prepack": "pnpm build",
|
|
44
44
|
"test": "vitest run",
|
|
45
|
+
"typecheck": "tsc --noEmit",
|
|
45
46
|
"dev": "tsup --watch"
|
|
46
47
|
},
|
|
47
48
|
"peerDependencies": {
|
|
48
49
|
"react": "^18.2.0 || ^19.0.0",
|
|
49
|
-
"@urun-sh/core": "^0.1.
|
|
50
|
+
"@urun-sh/core": "^0.1.42",
|
|
50
51
|
"@workos-inc/authkit-react": "^0.15.0 || ^0.16.0",
|
|
51
52
|
"@workos-inc/authkit-nextjs": "^3.0.0",
|
|
52
|
-
"next": "^15.0.0 || ^16.0.0"
|
|
53
|
+
"next": "^15.0.0 || ^16.0.0",
|
|
54
|
+
"video.js": "^8.0.0"
|
|
53
55
|
},
|
|
54
56
|
"dependencies": {
|
|
55
57
|
"zustand": "^5.0.0",
|
|
@@ -69,7 +71,8 @@
|
|
|
69
71
|
"@urun-sh/core": "workspace:*",
|
|
70
72
|
"@workos-inc/authkit-react": "^0.16.1",
|
|
71
73
|
"@workos-inc/authkit-nextjs": "^3.0.0",
|
|
72
|
-
"next": "16.2.6"
|
|
74
|
+
"next": "16.2.6",
|
|
75
|
+
"video.js": "^8.23.7"
|
|
73
76
|
},
|
|
74
77
|
"files": [
|
|
75
78
|
"dist",
|
|
@@ -103,6 +106,9 @@
|
|
|
103
106
|
},
|
|
104
107
|
"next": {
|
|
105
108
|
"optional": true
|
|
109
|
+
},
|
|
110
|
+
"video.js": {
|
|
111
|
+
"optional": true
|
|
106
112
|
}
|
|
107
113
|
}
|
|
108
114
|
}
|