@fork-api/chat-sdk 0.1.131 → 0.1.132

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.cjs CHANGED
@@ -1,6 +1,6 @@
1
- 'use strict';var He=require('react'),Ht=require('react-dom'),Ot=require('react/jsx-runtime'),Ut=require('react/jsx-dev-runtime'),lucideReact=require('lucide-react');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var He__namespace=/*#__PURE__*/_interopNamespace(He);var Ht__namespace=/*#__PURE__*/_interopNamespace(Ht);var Ot__namespace=/*#__PURE__*/_interopNamespace(Ot);var Ut__namespace=/*#__PURE__*/_interopNamespace(Ut);var oe="__FORK_SHARED__";function Le(){var t,r,o,n;let e=globalThis;return e[oe]||(e[oe]={}),(t=e[oe]).react||(t.react=He__namespace),(r=e[oe])["react-dom"]||(r["react-dom"]=Ht__namespace),(o=e[oe])["react/jsx-runtime"]||(o["react/jsx-runtime"]=Ot__namespace),(n=e[oe])["react/jsx-dev-runtime"]||(n["react/jsx-dev-runtime"]=Ut__namespace),e[oe]}function Be(e){return Object.assign(Le(),e)}var tt=He.createContext(null);function et(e,t){if(!t)return t;try{return new URL(t,`${e.replace(/\/+$/,"")}/`).toString()}catch{return t}}function jt(e,t){let r={};for(let[o,n]of Object.entries(t.boundaries||{}))r[o]={...n,moduleUrl:et(e,n.moduleUrl),cssUrls:Array.isArray(n.cssUrls)?n.cssUrls.map(i=>et(e,i)):[]};return r}function zt(e){let{apiKey:t,baseUrl:r,children:o,appId:n,shared:i}=e,s="userId"in e?e.userId:void 0,a="authUrl"in e?e.authUrl:void 0,[b,d]=He.useState({}),[m,S]=He.useState(s?{userId:s,userHash:void 0}:null),[_,w]=He.useState(!!s),[h,l]=He.useState({}),[$,T]=He.useState(!n),[R,C]=He.useState(0),F=He.useRef(new Map),y=He.useRef(new Map),[E,c]=He.useState(0),u=He.useRef(new Set),x=He.useRef(new Map),k=He.useRef(void 0);Le(),i&&k.current!==i&&(Be(i),k.current=i),He.useEffect(()=>{a&&(w(false),fetch(a,{credentials:"include"}).then(v=>{if(!v.ok)throw new Error(`Auth endpoint returned ${v.status}`);return v.json()}).then(v=>{if(!v.userId||typeof v.userId!="string")throw new Error("authUrl response must include userId");S({userId:v.userId,userHash:v.userHash});}).catch(v=>{console.error("[ForkProvider] Failed to fetch user identity from authUrl:",v.message);}).finally(()=>{w(true);}));},[a]),He.useEffect(()=>{!a&&s&&(S({userId:s,userHash:void 0}),w(true));},[s,a]);let f=m?.userId??"",g=m?.userHash,p=!!n,B=He.useCallback(async()=>{if(!p){l({}),T(true),C(P=>P+1);return}if(!_){T(false);return}if(!f||!n){l({}),T(true),C(P=>P+1);return}let v=new URLSearchParams({appId:n,userId:f});g&&v.set("userHash",g),T(false);try{let P=await fetch(`${r}/api/v1/boundaries/manifest?${v.toString()}`,{headers:{Authorization:`Bearer ${t}`}});if(!P.ok)throw new Error(`${P.status}`);let N=await P.json();l(jt(r,N));}catch(P){console.error("[ForkProvider] Failed to fetch module override manifest:",P.message),l({});}finally{C(P=>P+1),T(true);}},[t,n,r,_,p,g,f]);He.useEffect(()=>{if(!f)return;let v=new URLSearchParams({userId:f});g&&v.set("userHash",g),fetch(`${r}/api/v1/forks/active?${v.toString()}`,{headers:{Authorization:`Bearer ${t}`}}).then(P=>{if(!P.ok)throw new Error(`${P.status}`);return P.json()}).then(P=>{P&&typeof P=="object"&&d(P);}).catch(()=>{});},[t,f,g,r]),He.useEffect(()=>{B();},[B]);let U=He.useCallback((v,P)=>{d(N=>({...N,[v]:P}));},[]),K=He.useCallback(v=>{d(P=>{let N={...P};return delete N[v],N});},[]),V=He.useCallback(v=>{u.current.add(v);},[]),G=He.useCallback(v=>u.current.has(v)?(u.current.delete(v),true):false,[]),Y=He.useCallback((v,P)=>{x.current.set(v,P);},[]),O=He.useCallback((v,P)=>x.current.get(v)!==P?false:(x.current.delete(v),true),[]),q=He.useCallback(v=>{if(!n)return;let P=JSON.stringify(v);F.current.get(v.id)===P||y.current.get(v.id)?.signature===P||(y.current.set(v.id,{boundary:v,signature:P}),c(z=>z+1));},[n]);He.useEffect(()=>{if(!n||y.current.size===0)return;let v=setTimeout(()=>{let P=Array.from(y.current.values());P.length!==0&&fetch(`${r}/api/v1/boundaries`,{method:"POST",headers:{Authorization:`Bearer ${t}`,"Content-Type":"application/json"},body:JSON.stringify({appId:n,boundaries:P.map(N=>N.boundary)})}).then(N=>{if(!N.ok)throw new Error(`${N.status}`)}).then(()=>{for(let N of P)y.current.get(N.boundary.id)?.signature===N.signature&&(y.current.delete(N.boundary.id),F.current.set(N.boundary.id,N.signature));}).catch(N=>{console.error("[ForkProvider] Failed to register module boundaries:",N.message);});},50);return ()=>{clearTimeout(v);}},[t,n,r,E]);let W=He.useCallback(v=>h[v],[h]),te=He.useCallback(async()=>{if(!g)throw new Error("Reset requires verified user identity (provide authUrl / userHash).");let v=new URLSearchParams({userId:f,userHash:g}),P=await fetch(`${r}/api/v1/forks/all?${v.toString()}`,{method:"DELETE",headers:{Authorization:`Bearer ${t}`}});if(!P.ok){let z=await P.json().catch(()=>({}));throw new Error(z.error||`API error: ${P.status}`)}let N=await P.json().catch(()=>({}));d({}),l({}),T(true),C(z=>z+1),u.current.clear(),x.current.clear();try{for(let z=sessionStorage.length-1;z>=0;z-=1){let Z=sessionStorage.key(z);Z&&Z.startsWith("__fork_animated_")&&sessionStorage.removeItem(Z);}}catch{}return N},[t,r,g,f]);return Ot.jsx(tt.Provider,{value:{apiKey:t,userId:f,userHash:g,baseUrl:r,appId:n,forks:b,moduleOverridesEnabled:p,moduleManifestReady:$,moduleManifestVersion:R,setSlotFork:U,clearSlotFork:K,skipAnimationForSlot:V,shouldSkipAnimation:G,queueBoundaryAnimation:Y,consumeBoundaryAnimation:O,registerBoundary:q,getBoundaryOverride:W,refreshModuleManifest:B,resetAllForks:te},children:o})}function j(){let e=He.useContext(tt);if(!e)throw new Error("useForkContext must be used within <ForkProvider>");return e}function be(e){return j().forks[e]}var ue=class{constructor(t){this.values=new Map;this.snapshots=new Map;this.listeners=new Map;this.eventHandlers=new Map;this.slotId=t,window.__FORK_BRIDGE__||(window.__FORK_BRIDGE__={}),window.__FORK_BRIDGE__[t]=this;}set(t,r){let o=this.values.get(t);if(Object.is(o,r))return;if(o!==void 0&&r!==null&&o!==null&&typeof o=="object"&&typeof r=="object")try{if(JSON.stringify(o)===JSON.stringify(r))return}catch{}this.values.set(t,r),this.snapshots.set(t,r);let n=this.listeners.get(t);n&&n.forEach(i=>i());}get(t){return this.values.get(t)}getSnapshot(t){return this.snapshots.get(t)}subscribe(t,r){return this.listeners.has(t)||this.listeners.set(t,new Set),this.listeners.get(t).add(r),()=>{this.listeners.get(t)?.delete(r);}}useValue(t){let r=window.__FORK_REACT__;return r?.useSyncExternalStore?r.useSyncExternalStore(o=>this.subscribe(t,o),()=>this.getSnapshot(t)):(console.warn("[ForkBridge] React.useSyncExternalStore not available, returning static value"),this.values.get(t))}emit(t,...r){let o=this.eventHandlers.get(t);o&&o.forEach(n=>n(...r));}on(t,r){return this.eventHandlers.has(t)||this.eventHandlers.set(t,new Set),this.eventHandlers.get(t).add(r),()=>{this.eventHandlers.get(t)?.delete(r);}}destroy(){this.listeners.clear(),this.eventHandlers.clear(),this.values.clear(),this.snapshots.clear();let t=window.__FORK_BRIDGE__;t&&delete t[this.slotId];}};function Oe(e,t){let r;try{r=He.Children.only(e);}catch{let n=He.Children.count(e);throw new Error(`<ForkSlot slotId="${t}"> must wrap exactly one React component, got ${n} children. Wrap your slot's contents in a single named component, e.g. <ForkSlot slotId="${t}"><MyShell ...props /></ForkSlot>.`)}let o=r.type;if(typeof o=="string")throw new Error(`<ForkSlot slotId="${t}"> child must be a React component (function or class), not an HTML element <${o}>. Wrap your slot's contents in a single named component, e.g. <ForkSlot slotId="${t}"><MyShell ...props /></ForkSlot>.`);if(typeof o=="symbol")throw new Error(`<ForkSlot slotId="${t}"> child must be a single React component, not a fragment or special React element. Wrap your slot's contents in a single named component, e.g. <ForkSlot slotId="${t}"><MyShell ...props /></ForkSlot>.`);return r}var ot=new Set;function nt(e){let t=[],r=e.querySelectorAll("*");for(let o of r){if(!(o instanceof HTMLElement))continue;let n=o.getBoundingClientRect();if(n.width<10||n.height<10||["SCRIPT","STYLE","META","LINK"].includes(o.tagName))continue;let i=getComputedStyle(o),s=parseFloat(i.borderTopLeftRadius)||0;t.push({tag:o.tagName,className:o.className||"",text:(o.textContent||"").slice(0,50).trim(),rect:n,borderRadius:s});}return t}function qt(e,t){let r=[];for(let o of t)if(!e.find(i=>i.tag===o.tag&&i.className===o.className&&Math.abs(i.rect.top-o.rect.top)<20&&Math.abs(i.rect.left-o.rect.left)<20)&&!r.some(s=>o.rect.top>=s.rect.top&&o.rect.left>=s.rect.left&&o.rect.right<=s.rect.right&&o.rect.bottom<=s.rect.bottom)){for(let s=r.length-1;s>=0;s--){let a=r[s];a.rect.top>=o.rect.top&&a.rect.left>=o.rect.left&&a.rect.right<=o.rect.right&&a.rect.bottom<=o.rect.bottom&&r.splice(s,1);}r.push({rect:o.rect,borderRadius:o.borderRadius});}return r}function Jt(e,t){let r=[];for(let o of e)if(!t.find(i=>i.tag===o.tag&&i.className===o.className&&Math.abs(i.rect.top-o.rect.top)<20&&Math.abs(i.rect.left-o.rect.left)<20)&&!r.some(s=>o.rect.top>=s.rect.top&&o.rect.left>=s.rect.left&&o.rect.right<=s.rect.right&&o.rect.bottom<=s.rect.bottom)){for(let s=r.length-1;s>=0;s--){let a=r[s];a.rect.top>=o.rect.top&&a.rect.left>=o.rect.left&&a.rect.right<=o.rect.right&&a.rect.bottom<=o.rect.bottom&&r.splice(s,1);}r.push({rect:o.rect,borderRadius:o.borderRadius});}return r}function it(e,t,r,o,n){return n=Math.max(0,Math.min(n,r/2,o/2)),n===0?`M ${e} ${t} L ${e+r} ${t} L ${e+r} ${t+o} L ${e} ${t+o} Z`:[`M ${e+n} ${t}`,`L ${e+r-n} ${t}`,`A ${n} ${n} 0 0 1 ${e+r} ${t+n}`,`L ${e+r} ${t+o-n}`,`A ${n} ${n} 0 0 1 ${e+r-n} ${t+o}`,`L ${e+n} ${t+o}`,`A ${n} ${n} 0 0 1 ${e} ${t+o-n}`,`L ${e} ${t+n}`,`A ${n} ${n} 0 0 1 ${e+n} ${t}`,"Z"].join(" ")}function st(e){let t="http://www.w3.org/2000/svg",r=document.createElement("div");r.setAttribute("data-fork-highlights","true"),r.style.cssText="position:fixed;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:9999;";let o=document.createElementNS(t,"svg");o.setAttribute("width","100%"),o.setAttribute("height","100%"),o.style.cssText="position:absolute;top:0;left:0;overflow:visible;";let n=document.createElementNS(t,"defs");o.appendChild(n);let i=[];for(let m=0;m<e.length;m++){let{rect:S,borderRadius:_}=e[m],w=S.left-.5,h=S.top-.5,l=S.width+1,$=S.height+1,T=Math.min(_+.5,l/2,$/2),R=it(w,h,l,$,T),C=`__fork-glow-${m}`,F=document.createElementNS(t,"filter");F.setAttribute("id",C),F.setAttribute("x","-100%"),F.setAttribute("y","-100%"),F.setAttribute("width","300%"),F.setAttribute("height","300%");let y=document.createElementNS(t,"feGaussianBlur");y.setAttribute("in","SourceGraphic"),y.setAttribute("stdDeviation","8"),F.appendChild(y),n.appendChild(F);let E=`__fork-mask-${m}`,c=document.createElementNS(t,"mask");c.setAttribute("id",E),c.setAttribute("maskUnits","userSpaceOnUse"),c.setAttribute("x",String(w-200)),c.setAttribute("y",String(h-200)),c.setAttribute("width",String(l+400)),c.setAttribute("height",String($+400));let u=document.createElementNS(t,"rect");u.setAttribute("x",String(w-200)),u.setAttribute("y",String(h-200)),u.setAttribute("width",String(l+400)),u.setAttribute("height",String($+400)),u.setAttribute("fill","white"),c.appendChild(u);let x=document.createElementNS(t,"path");x.setAttribute("d",R),x.setAttribute("fill","black"),c.appendChild(x),n.appendChild(c);let k=document.createElementNS(t,"g");k.setAttribute("mask",`url(#${E})`),k.setAttribute("opacity","0");let f=document.createElementNS(t,"g");f.setAttribute("filter",`url(#${C})`);let g=document.createElementNS(t,"path");g.setAttribute("d",R),g.setAttribute("fill","none"),g.setAttribute("stroke","rgba(150, 185, 220, 0.6)"),g.setAttribute("stroke-width","6"),g.setAttribute("stroke-linecap","round"),f.appendChild(g),k.appendChild(f),o.appendChild(k);let p=document.createElementNS(t,"path");p.setAttribute("d",R),p.setAttribute("fill","none"),p.setAttribute("stroke","rgba(150, 185, 220, 0.35)"),p.setAttribute("stroke-width","2"),p.setAttribute("stroke-linecap","round"),p.setAttribute("opacity","0"),o.appendChild(p),i.push(g,p),g.__group=k;}r.appendChild(o),document.body.appendChild(r);let s=[];for(let m=0;m<i.length;m+=2){let S=i[m],_=i[m+1],w=S.__group,h=_.getTotalLength(),l=S.getTotalLength();if(h<=0)continue;let $=h*.35;_.setAttribute("stroke-dasharray",`${$} ${h-$}`),_.setAttribute("stroke-dashoffset","0"),s.push(_.animate([{strokeDashoffset:0,opacity:0,offset:0},{strokeDashoffset:-0.2*h,opacity:.92,offset:.06},{strokeDashoffset:-2*h,opacity:.92,offset:.92},{strokeDashoffset:-2.25*h,opacity:0,offset:1}],{duration:14e3,easing:"ease-in-out",fill:"forwards"}));let T=l*.35;S.setAttribute("stroke-dasharray",`${T} ${l-T}`),S.setAttribute("stroke-dashoffset","0"),s.push(S.animate([{strokeDashoffset:0,offset:0},{strokeDashoffset:-0.2*l,offset:.06},{strokeDashoffset:-2*l,offset:.92},{strokeDashoffset:-2.25*l,offset:1}],{duration:14e3,easing:"ease-in-out",fill:"forwards"})),s.push(w.animate([{opacity:0,offset:0},{opacity:.92,offset:.06},{opacity:.92,offset:.92},{opacity:0,offset:1}],{duration:14e3,easing:"ease-in-out",fill:"forwards"}));}let a=false,b=()=>{if(a)return;a=true,clearTimeout(d);for(let S of s)try{S.cancel();}catch{}let m=r.animate([{opacity:1},{opacity:0}],{duration:400,fill:"forwards"});m.onfinish=()=>r.remove(),window.removeEventListener("click",b);},d=setTimeout(b,14500);return setTimeout(()=>{a||window.addEventListener("click",b);},500),b}function Yt(e){let t="http://www.w3.org/2000/svg",r=document.createElement("div");r.setAttribute("data-fork-removed","true"),r.style.cssText="position:fixed;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:9999;";let o=document.createElementNS(t,"svg");o.setAttribute("width","100%"),o.setAttribute("height","100%"),o.style.cssText="position:absolute;top:0;left:0;overflow:visible;";let n=document.createElementNS(t,"defs"),i=document.createElementNS(t,"filter");i.setAttribute("id","__fork-removed-shadow"),i.setAttribute("x","-10%"),i.setAttribute("y","-10%"),i.setAttribute("width","120%"),i.setAttribute("height","120%");let s=document.createElementNS(t,"feDropShadow");s.setAttribute("dx","0"),s.setAttribute("dy","1"),s.setAttribute("stdDeviation","2"),s.setAttribute("flood-color","rgba(0,0,0,0.15)"),i.appendChild(s),n.appendChild(i),o.appendChild(n);for(let{rect:a,borderRadius:b}of e){let d=a.left,m=a.top,S=a.width,_=a.height,w=Math.min(b,S/2,_/2),h=it(d,m,S,_,w),l=document.createElementNS(t,"path");l.setAttribute("d",h),l.setAttribute("fill","none"),l.setAttribute("stroke","rgba(120, 125, 135, 0.6)"),l.setAttribute("stroke-width","1.5"),l.setAttribute("stroke-dasharray","8 4"),l.setAttribute("stroke-linecap","round"),l.setAttribute("filter","url(#__fork-removed-shadow)"),l.setAttribute("opacity","0"),o.appendChild(l),l.animate([{opacity:0,offset:0},{opacity:.6,offset:.08},{opacity:.05,offset:.45},{opacity:.6,offset:.85},{opacity:.05,offset:1}],{duration:5e3,easing:"ease-in-out",fill:"forwards"});}return r.appendChild(o),document.body.appendChild(r),r}function Xt(e,t){if(e===t)return true;let r=Object.keys(e);if(r.length!==Object.keys(t).length)return false;for(let o of r)if(!Object.is(e[o],t[o]))return false;return true}var Zt=He__namespace.default.memo(function({component:t,containerRef:r,wrapperStyle:o,hostProps:n}){return Ot.jsx("div",{ref:r,style:o,children:Ot.jsx(t,{...n})})},(e,t)=>e.component===t.component&&Xt(e.hostProps,t.hostProps)),Ne=class extends He__namespace.default.Component{constructor(t){super(t),this.state={hasError:false};}static getDerivedStateFromError(){return {hasError:true}}componentDidCatch(t){console.error(`[Fork:${this.props.slotId}] fork render failed`,t);}componentDidUpdate(t){t.resetKey!==this.props.resetKey&&this.state.hasError&&this.setState({hasError:false});}render(){return this.state.hasError?this.props.fallback:this.props.children}};function at({slotId:e,children:t,githubRepo:r,shared:o,events:n}){Oe(t,e);let i=be(e),{baseUrl:s,apiKey:a,appId:b,shouldSkipAnimation:d}=j(),[m,S]=He.useState(null),_=He.useRef(null),w=He.useRef(null),h=He.useRef(null),l=He.useRef(false),$=He.useRef(null),T=He.useRef(null),R=!!(o||n),C=He.useRef(null);R&&!C.current&&(C.current=new ue(e));let F=He.useRef(n);if(F.current=n,He.useEffect(()=>{if(R)return ()=>{C.current?.destroy(),C.current=null;}},[R,e]),R&&C.current&&o)for(let[x,k]of Object.entries(o))C.current.set(x,k);He.useEffect(()=>{if(!R)return;C.current||(C.current=new ue(e));let x=C.current,k=Object.keys(F.current||{}).map(f=>x.on(f,(...g)=>F.current?.[f]?.(...g)));return ()=>k.forEach(f=>f())},[R,e]),He.useEffect(()=>{if(ot.has(e))return;ot.add(e);let x={id:e,appId:b,label:e,eventsShape:"{ navigate?: string }",currentLayout:"",githubRepo:r,mode:"direct",sharedKeys:o?Object.keys(o):[],eventNames:n?Object.keys(n):[],propsShape:"",callbackNames:[]};fetch(`${s}/api/v1/slots`,{method:"POST",headers:{Authorization:`Bearer ${a}`,"Content-Type":"application/json"},body:JSON.stringify(x)}).catch(()=>{});},[e,s,a,r,b]);let y=i?.id||null;He.useEffect(()=>{if(i?.bundleUrl,_.current,w.current,!i?.bundleUrl||!y){return}let x=`${s}${i.bundleUrl.replace("bundle.js","component.js")}`,k=`__fork_animated_${e}`,f=sessionStorage.getItem(k),g=d(e),p=!g&&f!==y;if(g&&y&&sessionStorage.setItem(k,y),p&&w.current){let G=nt(w.current);h.current=G,l.current=true,`${e}${G.length}`;}window.__FORK_REACT__=He__namespace.default,window.__FORK_REACT_DOM__=Ht__namespace,window.__FORK_REACT_JSX__=Ot__namespace;let B=Date.now(),U=`${s}${i.bundleUrl.replace("bundle.js","component.css")}?t=${B}`,K=document.createElement("link");K.rel="stylesheet",K.href=U,K.dataset.forkSlot=e,document.head.appendChild(K);let V=document.createElement("script");return V.src=x+"?t="+B,V.onload=()=>{let G=window.__FORK_EXPORT__;if(G?.default){if(w.current&&h.current&&l.current){let Y=w.current.getBoundingClientRect(),O=w.current.cloneNode(true);O.style.position="fixed",O.style.top=`${Y.top}px`,O.style.left=`${Y.left}px`,O.style.width=`${Y.width}px`,O.style.height=`${Y.height}px`,O.style.flex="none",O.style.minHeight="auto",O.style.zIndex="9998",O.style.pointerEvents="none",O.style.overflow="hidden";let q=getComputedStyle(w.current).backgroundColor;O.style.backgroundColor=q&&q!=="rgba(0, 0, 0, 0)"&&q!=="transparent"?q:getComputedStyle(document.body).backgroundColor||"#ffffff",document.body.appendChild(O);let W=w.current.querySelectorAll("*"),te=O.querySelectorAll("*");for(let v=0;v<W.length;v++)W[v].scrollTop!==0&&(te[v].scrollTop=W[v].scrollTop),W[v].scrollLeft!==0&&(te[v].scrollLeft=W[v].scrollLeft);$.current=O;}S(()=>G.default),_.current=y;}else console.error(`[Fork:${e}] component.js loaded but no default export found`);window.__FORK_EXPORT__=void 0;},V.onerror=()=>{console.error(`[Fork:${e}] failed to load component.js`);},document.head.appendChild(V),()=>{V.remove(),K.remove(),T.current&&(clearTimeout(T.current),T.current=null),$.current&&($.current.remove(),$.current=null);}},[y,s,e]),He.useEffect(()=>{if(!l.current||!m||!w.current){`${e}${l.current}`,w.current;return}let x=h.current;if(!x){return}requestAnimationFrame(()=>{requestAnimationFrame(()=>{if(!w.current)return;let k=nt(w.current),f=qt(x,k),g=Jt(x,k),p=$.current;if(`${e}${f.length}${g.length}`,g.length>0&&p){let B=Yt(g);T.current=setTimeout(()=>{T.current=null;let U=400;p.animate([{opacity:1},{opacity:0}],{duration:U,fill:"forwards"}),B.animate([{opacity:1},{opacity:0}],{duration:U,fill:"forwards"}),setTimeout(()=>{p.remove(),B.remove(),$.current=null,f.length>0&&(st(f));},U);},3500);}else p&&(p.remove(),$.current=null),f.length>0&&(st(f));h.current=null,l.current=false,y&&(sessionStorage.setItem(`__fork_animated_${e}`,y),`${e}`);});});},[m]);let E={flex:1,minHeight:0,display:"flex",flexDirection:"column"};if(!i||i.status!=="complete"||!i.bundleUrl)return Ot.jsx("div",{ref:w,style:E,children:t});if(!m)return Ot.jsx("div",{ref:w,style:E,children:t});let u=t?.props??{};return Ot.jsx(Ne,{slotId:e,resetKey:y,fallback:Ot.jsx("div",{ref:w,style:E,children:t}),children:Ot.jsx(Zt,{component:m,containerRef:w,wrapperStyle:E,hostProps:u})})}var ct=new Set;function tr(e){return `{ ${Object.entries(e).map(([r,o])=>o==null?`${r}: unknown`:Array.isArray(o)?`${r}: ${o.length>0?typeof o[0]:"unknown"}[]`:`${r}: ${typeof o}`).join("; ")} }`}function ut(e,t=new Set){return He.Children.forEach(e,r=>{if(!He.isValidElement(r))return;let o=r.props;for(let[n,i]of Object.entries(o))typeof i=="function"&&/^on[A-Z]/.test(n)&&t.add(n);o.children&&ut(o.children,t);}),t}function rr({slotId:e,props:t,children:r,allowedFetches:o,githubRepo:n,callbacks:i,mode:s="iframe",shared:a,events:b}){if(Oe(r,e),s==="direct")return Ot.jsx(at,{slotId:e,githubRepo:n,shared:a,events:b,children:r});let d=be(e),{baseUrl:m,apiKey:S,appId:_}=j(),w=He.useRef(null),h=He.useRef(false),l=He.useRef(null),$=He.useRef(i);$.current=i;let T=He.useRef(t);T.current=t;let R=He.useRef(o);R.current=o,He.useEffect(()=>{if(typeof process<"u")return;let E=ut(r),c=new Set(i?Object.keys(i):[]),u=[...E].filter(x=>!c.has(x));u.length>0&&console.error(`[ForkSlot:${e}] Missing bridged callbacks! The following callback props are used by children but not passed to ForkSlot's \`callbacks\` prop:
2
- `+u.map(x=>` - ${x}`).join(`
3
- `)+"\n\nThe forked component will not be able to call these. Add them to the `callbacks` prop of <ForkSlot>.");},[e,r,i]),He.useEffect(()=>{ct.has(e)||(ct.add(e),fetch(`${m}/api/v1/slots`,{method:"POST",headers:{Authorization:`Bearer ${S}`,"Content-Type":"application/json"},body:JSON.stringify({id:e,appId:_,label:e,propsShape:t?tr(t):"",eventsShape:"{ navigate?: string }",currentLayout:"",githubRepo:n,callbackNames:i?Object.keys(i):[],mode:s||"iframe"})}).catch(()=>{}));},[e,m,S,n,_]);let C=He.useCallback(E=>{let c=w.current;if(c?.contentWindow&&h.current){let u=$.current?Object.keys($.current):[];c.contentWindow.postMessage({type:"slot:props",props:E,callbackNames:u},"*"),l.current=null;}else l.current=E;},[]),F=He.useCallback((E,c)=>{let u=R.current;return !u||u.length===0?false:u.some(x=>{let[k,f]=x.split(" "),g=c.split("?")[0];return E.toUpperCase()===k.toUpperCase()&&g.startsWith(f)})},[]);if(He.useEffect(()=>{if(!d?.bundleUrl)return;let E=async c=>{if(c.source===w.current?.contentWindow){if(c.data?.type==="slot:ready")h.current=true,w.current?.contentWindow?.postMessage({type:"slot:allowed-fetches",paths:R.current||[]},"*"),R.current,l.current?C(l.current):C(T.current||{});else if(c.data?.type==="slot:event"){let u=c.data.event;u?.navigate&&(window.location.hash=u.navigate);}else if(c.data?.type==="slot:clipboard-write")navigator.clipboard.writeText(c.data.text).catch(u=>{console.warn(`[ForkSlot:${e}] clipboard write failed:`,u.message);});else if(c.data?.type==="slot:callback"){let{name:u,args:x}=c.data,k=$.current?.[u];k?(k(...x||[])):console.warn(`[ForkSlot:${e}] unknown callback: ${u}`);}else if(c.data?.type==="slot:fetch"){let{id:u,method:x,url:k,body:f}=c.data,g=w.current?.contentWindow;if(!g)return;let p=x||"GET";if(!F(p,k)){console.warn(`[ForkSlot:${e}] BLOCKED fetch #${u}: ${p} ${k} \u2014 not in allowedFetches`),g.postMessage({type:"slot:fetch-response",id:u,error:`Fetch not allowed: ${p} ${k}`},"*");return}try{let B={method:p};f&&p!=="GET"&&(B.headers={"Content-Type":"application/json"},B.body=JSON.stringify(f));let U=await fetch(k,B),K=await U.json();`${e}${u}${U.status}`,g.postMessage({type:"slot:fetch-response",id:u,data:K,status:U.status},"*");}catch(B){console.error(`[ForkSlot:${e}] fetch #${u} failed:`,B.message),g.postMessage({type:"slot:fetch-response",id:u,error:B.message},"*");}}}};return window.addEventListener("message",E),()=>{window.removeEventListener("message",E),h.current=false;}},[d?.bundleUrl,e,C,F]),He.useEffect(()=>{d?.bundleUrl&&h.current&&C(t||{});},[t,d?.bundleUrl,C]),!d||d.status!=="complete"||!d.bundleUrl)return `${e}${d?.status||"none"}${d?.bundleUrl||"none"}`,Ot.jsx(Ot.Fragment,{children:r});`${e}${d.bundleUrl}`;let y=`${m}${d.bundleUrl.replace("/bundle.js","/host")}`;return Ot.jsx("iframe",{ref:w,src:y,sandbox:"allow-scripts allow-same-origin allow-forms allow-clipboard-write",title:`Forked ${e}`,style:{width:"100%",border:"none",flex:1,minHeight:0}})}function we({style:e={width:20,height:20},...t}){return Ot.jsxs("svg",{viewBox:"320 95 270 345",fill:"none",xmlns:"http://www.w3.org/2000/svg",style:e,...t,children:[Ot.jsx("path",{stroke:"currentColor",strokeWidth:"30",strokeLinejoin:"round",strokeLinecap:"round",d:"M357.789 145.428c0-16.186 13.121-29.307 29.307-29.307 7.773 0 15.227 3.088 20.723 8.584 5.496 5.496 8.584 12.95 8.584 20.723 0 16.186-13.121 29.307-29.307 29.307s-29.307-13.121-29.307-29.307z"}),Ot.jsx("path",{stroke:"currentColor",strokeWidth:"30",strokeLinejoin:"round",strokeLinecap:"round",d:"M387.096 174.735v188"}),Ot.jsx("path",{stroke:"currentColor",strokeWidth:"30",strokeLinejoin:"round",strokeLinecap:"round",d:"M357.789 394.572c0-16.186 13.121-29.307 29.307-29.307 7.773 0 15.227 3.088 20.723 8.584 5.496 5.496 8.584 12.95 8.584 20.723 0 16.186-13.121 29.307-29.307 29.307s-29.307-13.121-29.307-29.307z"}),Ot.jsx("path",{stroke:"currentColor",strokeWidth:"30",strokeLinejoin:"round",strokeLinecap:"round",d:"M388.739 319c10.168-6.317 43.997-26.932 61.009-37.9 17.012-10.968 31.758-19.978 41.064-27.91 9.305-7.931 11.782-14.213 14.767-19.679 2.985-5.465 3.014-8.99 3.141-13.114.128-4.124-.999-8.178-2.377-11.632-1.378-3.454-3.563-6.55-5.889-9.094-2.326-2.543-4.98-4.679-8.066-6.167-3.085-1.488-6.624-2.601-10.448-2.76-3.823-.159-8.624.2-12.495 1.806-3.871 1.607-8.047 4.68-10.732 7.835-2.685 3.156-4.446 7.448-5.378 11.099-.932 3.651-.742 7.485-.213 10.807.528 3.322 1.864 6.46 3.386 9.123 1.523 2.663 3.543 4.843 5.75 6.854 2.207 2.011 4.38 3.914 7.491 5.214 3.111 1.3 6.57 2.808 11.178 2.584 4.607-.225 9.363-.471 16.466-3.932 7.103-3.46 16.076-5.382 26.154-16.831 10.077-11.449 28.593-43.219 34.312-51.862"}),Ot.jsx("path",{fill:"currentColor",stroke:"currentColor",strokeWidth:"1",strokeLinejoin:"round",d:"M527.117 162.547L570.487 134.368Q577.196 130.009 577.624 137.997L580.39 189.69Q580.818 197.678 573.69 194.047L527.536 170.538Q520.408 166.907 527.117 162.547Z"})]})}function De({onClick:e}){let[t,r]=He.useState(false),[o,n]=He.useState(false),i=t?48:40;return Ot.jsx("button",{onClick:e,onMouseEnter:()=>r(true),onMouseLeave:()=>{r(false),n(false);},onMouseDown:()=>n(true),onMouseUp:()=>n(false),style:{position:"fixed",bottom:24,right:24,zIndex:40,width:i,height:i,borderRadius:"50%",backgroundColor:t?"rgba(255, 255, 255, 1)":"rgba(255, 255, 255, 0.3)",border:t?"1px solid rgba(156, 163, 175, 1)":"1px solid rgba(156, 163, 175, 0.3)",display:"flex",alignItems:"center",justifyContent:"center",color:t?"#1c4587":"rgba(28, 69, 135, 0.5)",boxShadow:t?"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)":"0 1px 2px 0 rgba(0, 0, 0, 0.05)",transform:o?"scale(0.95)":"scale(1)",transition:"all 300ms",cursor:"pointer",padding:0,margin:0,outline:"none",boxSizing:"border-box"},title:"Fork this app",children:Ot.jsx(we,{style:{width:24,height:24}})})}var fr={status:lucideReact.Loader2,agent_message:lucideReact.MessageSquare,tool_use:lucideReact.Wrench,build_start:lucideReact.Package,build_complete:lucideReact.Check,build_error:lucideReact.AlertCircle,complete:lucideReact.Sparkles,error:lucideReact.AlertCircle},pr={status:"#60a5fa",agent_message:"#a0a0a0",tool_use:"#fbbf24",build_start:"#c084fc",build_complete:"#6b7280",build_error:"#f87171",complete:"#6b7280",error:"#f87171"},mr={read:lucideReact.FileSearch,write:lucideReact.Pencil,search:lucideReact.FileSearch,shell:lucideReact.Terminal,build:lucideReact.Package},gr={read:"#60a5fa",write:"#fbbf24",search:"#60a5fa",shell:"#a78bfa",build:"#c084fc"};function je(e){let t=e.data;switch(e.type){case "status":return `${t.message||t.status||"..."}`;case "agent_message":{let r=String(t.content||"");return /failed:/i.test(r)&&(r.includes("ENOENT")||r.includes("{")||r.includes("/Users/"))?"Adapting approach...":r}case "tool_use":return String(t.label||"Working on it");case "build_start":return "Bundling your component...";case "build_complete":return "Build complete!";case "build_error":return `Build failed: ${t.error}`;case "complete":return "Your fork is ready!";case "error":return `Error: ${t.error}`;default:return JSON.stringify(t)}}function bt({events:e}){let t=He.useRef(null);return He.useEffect(()=>{t.current&&(t.current.scrollTop=t.current.scrollHeight);},[e]),Ot.jsxs(Ot.Fragment,{children:[Ot.jsx("style",{children:`
1
+ 'use strict';var wt=require('react'),Gr=require('react-dom'),Vr=require('react/jsx-runtime'),qr=require('react/jsx-dev-runtime'),client=require('react-dom/client'),lucideReact=require('lucide-react');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var wt__namespace=/*#__PURE__*/_interopNamespace(wt);var Gr__namespace=/*#__PURE__*/_interopNamespace(Gr);var Vr__namespace=/*#__PURE__*/_interopNamespace(Vr);var qr__namespace=/*#__PURE__*/_interopNamespace(qr);var de="__FORK_SHARED__";function ut(){var t,r,o,n;let e=globalThis;return e[de]||(e[de]={}),(t=e[de]).react||(t.react=wt__namespace),(r=e[de])["react-dom"]||(r["react-dom"]=Gr__namespace),(o=e[de])["react/jsx-runtime"]||(o["react/jsx-runtime"]=Vr__namespace),(n=e[de])["react/jsx-dev-runtime"]||(n["react/jsx-dev-runtime"]=qr__namespace),e[de]}function dt(e){return Object.assign(ut(),e)}var Jr="__fork_preview_session__";function Ue(e){return `${Jr}${e}`}var z={apiKey:null,session:null},ft=new Set;function pt(){for(let e of ft)try{e();}catch(t){console.error("[fork-preview] subscriber threw",t);}}function zt(e){let t=Date.parse(e.expires_at);return Number.isFinite(t)?t<=Date.now():true}function Xr(e){if(typeof window>"u")return null;try{let t=window.sessionStorage.getItem(Ue(e));if(!t)return null;let r=JSON.parse(t);return !r||typeof r!="object"||typeof r.preview_session_id!="string"?null:zt(r)?(window.sessionStorage.removeItem(Ue(e)),null):r}catch{return null}}function Wt(e,t){if(!(typeof window>"u"))try{t?window.sessionStorage.setItem(Ue(e),JSON.stringify(t)):window.sessionStorage.removeItem(Ue(e));}catch{}}function $e(e){z.apiKey!==e&&(z.apiKey=e,z.session=Xr(e),pt());}function fe(){return z.session?zt(z.session)?(je(null),null):z.session:null}function je(e){z.session=e,z.apiKey&&Wt(z.apiKey,e),pt();}function Pe(e){z.session&&z.session.fork_id!==e&&(z.session={...z.session,fork_id:e},z.apiKey&&Wt(z.apiKey,z.session),pt());}function mt(){if(je(null),typeof window<"u")try{window.location.reload();}catch{}}function gt(e){return ft.add(e),()=>{ft.delete(e);}}var Kt="__fork_preview";function Gt(){if(typeof window>"u")return null;let e=window.location.hash;if(!e||e.length<2)return null;let r=new URLSearchParams(e.slice(1)).get(Kt);return typeof r=="string"&&r.length>0?r:null}function ht(e){if(typeof window>"u")return false;try{if(window.sessionStorage.getItem(`__fork_preview_session__${e}`))return !0}catch{}return qt()!==null}function Vt(){if(typeof window>"u")return;let e=window.location.hash;if(!e||e.length<2)return;let t=new URLSearchParams(e.slice(1));t.delete(Kt);let r=t.toString(),o=r?`#${r}`:"";try{window.history.replaceState(null,"",window.location.pathname+window.location.search+o);}catch{}}var pe=null;function qt(){if(pe)return pe;let e=Gt();return e?(pe=e,Vt(),pe):null}async function yt(e,t){$e(e);let r=fe();if(r)return pe=null,r;let o=pe??Gt();if(pe=null,!o)return null;Vt();try{let n=await fetch(`${t}/api/v1/preview/activate`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`},body:JSON.stringify({token:o})});if(!n.ok){let l=await n.json().catch(()=>({}));return console.warn(`[fork-preview] activate failed (${n.status}): ${l.error??"unknown"}`),null}let i=await n.json(),s={preview_session_id:i.preview_session_id,tenant_id:i.tenant_id,app_id:i.app_id,target:i.target,target_user_id:i.target_user_id,operator_id:i.operator_id,fork_id:i.fork_id??null,expires_at:i.expires_at};return je(s),s}catch(n){return console.warn("[fork-preview] activate threw",n),null}}function Zr(){return fe()}function Qr(){return null}function be(){return wt.useSyncExternalStore(gt,Zr,Qr)}function ro(e){let t=Date.parse(e)-Date.now();if(!Number.isFinite(t)||t<=0)return "expired";let r=Math.floor(t/1e3),o=Math.floor(r/60),n=r%60;return o>=1?`${o}m ${n}s`:`${n}s`}function Xt(){let e=be(),[t,r]=wt.useState(0);return wt.useEffect(()=>{if(!e)return;let o=window.setInterval(()=>r(n=>n+1),1e3);return ()=>window.clearInterval(o)},[e]),e?Vr.jsxs("div",{role:"status","aria-live":"polite",title:`Fork preview \xB7 acting as ${e.target_user_id}`,style:{position:"fixed",top:0,left:"50%",transform:"translateX(-50%)",zIndex:2147483647,display:"inline-flex",alignItems:"center",gap:"12px",padding:"8px 18px 8px 16px",borderTopLeftRadius:0,borderTopRightRadius:0,borderBottomLeftRadius:"12px",borderBottomRightRadius:"12px",fontFamily:"system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif",fontSize:"13px",fontWeight:500,color:"#fef3c7",background:"linear-gradient(180deg, #7c2d12 0%, #b45309 100%)",boxShadow:"0 2px 8px rgba(0,0,0,0.35)",pointerEvents:"auto",border:"1px solid rgba(0,0,0,0.3)",borderTop:"none"},children:[Vr.jsx("span",{style:{width:"7px",height:"7px",borderRadius:"999px",background:"#fcd34d",boxShadow:"0 0 6px rgba(252,211,77,0.8)",flexShrink:0},"aria-hidden":true}),Vr.jsxs("span",{style:{whiteSpace:"nowrap"},children:[Vr.jsx("span",{style:{opacity:.85},children:"Preview \xB7 "}),Vr.jsx("code",{style:{fontFamily:"ui-monospace, SFMono-Regular, monospace"},children:e.target_user_id})]}),Vr.jsx("span",{"aria-hidden":true,style:{opacity:.5},children:"\xB7"}),Vr.jsx("span",{style:{whiteSpace:"nowrap",fontVariantNumeric:"tabular-nums"},children:ro(e.expires_at)}),Vr.jsx("button",{type:"button",onClick:()=>mt(),title:"Exit preview",style:{background:"rgba(0,0,0,0.3)",color:"#fef3c7",border:"1px solid rgba(254,243,199,0.25)",borderRadius:"999px",padding:"2px 9px",fontSize:"11px",fontWeight:500,cursor:"pointer",marginLeft:"2px",flexShrink:0},children:"Exit"})]}):null}var Yt=null;function bt(){if(typeof window>"u"||Yt)return;let e=document.createElement("div");e.setAttribute("data-fork-preview-banner-host",""),e.style.position="fixed",e.style.top="0",e.style.left="0",e.style.width="0",e.style.height="0",e.style.zIndex="2147483647";let t=e.attachShadow({mode:"closed"}),r=document.createElement("div");t.appendChild(r),document.body.appendChild(e);let o=client.createRoot(r);o.render(wt.createElement(Xt)),Yt={host:e,root:o};}function Q(){let e=fe();if(!e)return {};let t={"X-Fork-Preview-Session":e.preview_session_id};return e.fork_id&&(t["X-Fork-Preview-Fork-Id"]=e.fork_id),t}var Qt=wt.createContext(null);function Zt(e,t){if(!t)return t;try{return new URL(t,`${e.replace(/\/+$/,"")}/`).toString()}catch{return t}}function ao(e,t){let r={};for(let[o,n]of Object.entries(t.boundaries||{}))r[o]={...n,moduleUrl:Zt(e,n.moduleUrl),cssUrls:Array.isArray(n.cssUrls)?n.cssUrls.map(i=>Zt(e,i)):[]};return r}function lo(e){let{apiKey:t,baseUrl:r,children:o,appId:n,shared:i}=e,s="userId"in e?e.userId:void 0,l="authUrl"in e?e.authUrl:void 0,[R]=wt.useState(()=>($e(t),ht(t))),[m,f]=wt.useState({}),[S,P]=wt.useState(s?{userId:s,userHash:void 0}:null),[y,k]=wt.useState(!!s||R),[h,w]=wt.useState({}),[A,x]=wt.useState(!n),[L,C]=wt.useState(0),_=wt.useRef(new Map),v=wt.useRef(new Map),[g,c]=wt.useState(0),F=wt.useRef(new Set),b=wt.useRef(new Map),u=wt.useRef(void 0);ut(),wt.useEffect(()=>{let T=false;return yt(t,r).then(()=>{T||bt();}),()=>{T=true;}},[]);let d=be();i&&u.current!==i&&(dt(i),u.current=i),wt.useEffect(()=>{l&&(R||(k(false),fetch(l,{credentials:"include"}).then(T=>{if(!T.ok)throw new Error(`Auth endpoint returned ${T.status}`);return T.json()}).then(T=>{if(!T.userId||typeof T.userId!="string")throw new Error("authUrl response must include userId");P({userId:T.userId,userHash:T.userHash});}).catch(T=>{console.error("[ForkProvider] Failed to fetch user identity from authUrl:",T.message);}).finally(()=>{k(true);})));},[l,R]),wt.useEffect(()=>{!l&&s&&(P({userId:s,userHash:void 0}),k(true));},[s,l]);let p=S?.userId??"",N=S?.userHash,O=d?d.target_user_id:p,U=d?void 0:N,J=!!n,Z=wt.useCallback(async()=>{if(!J){w({}),x(true),C(M=>M+1);return}if(!y){x(false);return}if(!O||!n){w({}),x(true),C(M=>M+1);return}let T=new URLSearchParams({appId:n,userId:O});U&&T.set("userHash",U),x(false);try{let M=await fetch(`${r}/api/v1/boundaries/manifest?${T.toString()}`,{headers:{Authorization:`Bearer ${t}`,...Q()}});if(!M.ok)throw new Error(`${M.status}`);let I=await M.json();w(ao(r,I));}catch(M){console.error("[ForkProvider] Failed to fetch module override manifest:",M.message),w({});}finally{C(M=>M+1),x(true);}},[t,n,r,y,J,U,O,d?.preview_session_id,d?.fork_id]);wt.useEffect(()=>{if(!O)return;let T=new URLSearchParams({userId:O});U&&T.set("userHash",U),fetch(`${r}/api/v1/forks/active?${T.toString()}`,{headers:{Authorization:`Bearer ${t}`,...Q()}}).then(M=>{if(!M.ok)throw new Error(`${M.status}`);return M.json()}).then(M=>{M&&typeof M=="object"&&f(M);}).catch(()=>{});},[t,O,U,r,d?.preview_session_id,d?.fork_id]),wt.useEffect(()=>{Z();},[Z]);let re=wt.useCallback((T,M)=>{f(I=>({...I,[T]:M}));},[]),j=wt.useCallback(T=>{f(M=>{let I={...M};return delete I[T],I});},[]),oe=wt.useCallback(T=>{F.current.add(T);},[]),X=wt.useCallback(T=>F.current.has(T)?(F.current.delete(T),true):false,[]),ie=wt.useCallback((T,M)=>{b.current.set(T,M);},[]),W=wt.useCallback((T,M)=>b.current.get(T)!==M?false:(b.current.delete(T),true),[]),Le=wt.useCallback(T=>{if(!n)return;let M=JSON.stringify(T);_.current.get(T.id)===M||v.current.get(T.id)?.signature===M||(v.current.set(T.id,{boundary:T,signature:M}),c(V=>V+1));},[n]);wt.useEffect(()=>{if(!n||v.current.size===0)return;let T=setTimeout(()=>{let M=Array.from(v.current.values());M.length!==0&&fetch(`${r}/api/v1/boundaries`,{method:"POST",headers:{Authorization:`Bearer ${t}`,"Content-Type":"application/json"},body:JSON.stringify({appId:n,boundaries:M.map(I=>I.boundary)})}).then(I=>{if(!I.ok)throw new Error(`${I.status}`)}).then(()=>{for(let I of M)v.current.get(I.boundary.id)?.signature===I.signature&&(v.current.delete(I.boundary.id),_.current.set(I.boundary.id,I.signature));}).catch(I=>{console.error("[ForkProvider] Failed to register module boundaries:",I.message);});},50);return ()=>{clearTimeout(T);}},[t,n,r,g]);let xe=wt.useCallback(T=>h[T],[h]),Be=wt.useCallback(async()=>{if(!U)throw new Error("Reset requires verified user identity (provide authUrl / userHash).");let T=new URLSearchParams({userId:O,userHash:U}),M=await fetch(`${r}/api/v1/forks/all?${T.toString()}`,{method:"DELETE",headers:{Authorization:`Bearer ${t}`}});if(!M.ok){let V=await M.json().catch(()=>({}));throw new Error(V.error||`API error: ${M.status}`)}let I=await M.json().catch(()=>({}));f({}),w({}),x(true),C(V=>V+1),F.current.clear(),b.current.clear();try{for(let V=sessionStorage.length-1;V>=0;V-=1){let K=sessionStorage.key(V);K&&K.startsWith("__fork_animated_")&&sessionStorage.removeItem(K);}}catch{}return I},[t,r,U,O]);return Vr.jsx(Qt.Provider,{value:{apiKey:t,userId:O,userHash:U,baseUrl:r,appId:n,forks:m,moduleOverridesEnabled:J,moduleManifestReady:A,moduleManifestVersion:L,previewSession:d,setSlotFork:re,clearSlotFork:j,skipAnimationForSlot:oe,shouldSkipAnimation:X,queueBoundaryAnimation:ie,consumeBoundaryAnimation:W,registerBoundary:Le,getBoundaryOverride:xe,refreshModuleManifest:Z,resetAllForks:Be},children:o})}function G(){let e=wt.useContext(Qt);if(!e)throw new Error("useForkContext must be used within <ForkProvider>");return e}function ze(e){return G().forks[e]}var _e=class{constructor(t){this.values=new Map;this.snapshots=new Map;this.listeners=new Map;this.eventHandlers=new Map;this.slotId=t,window.__FORK_BRIDGE__||(window.__FORK_BRIDGE__={}),window.__FORK_BRIDGE__[t]=this;}set(t,r){let o=this.values.get(t);if(Object.is(o,r))return;if(o!==void 0&&r!==null&&o!==null&&typeof o=="object"&&typeof r=="object")try{if(JSON.stringify(o)===JSON.stringify(r))return}catch{}this.values.set(t,r),this.snapshots.set(t,r);let n=this.listeners.get(t);n&&n.forEach(i=>i());}get(t){return this.values.get(t)}getSnapshot(t){return this.snapshots.get(t)}subscribe(t,r){return this.listeners.has(t)||this.listeners.set(t,new Set),this.listeners.get(t).add(r),()=>{this.listeners.get(t)?.delete(r);}}useValue(t){let r=window.__FORK_REACT__;return r?.useSyncExternalStore?r.useSyncExternalStore(o=>this.subscribe(t,o),()=>this.getSnapshot(t)):(console.warn("[ForkBridge] React.useSyncExternalStore not available, returning static value"),this.values.get(t))}emit(t,...r){let o=this.eventHandlers.get(t);o&&o.forEach(n=>n(...r));}on(t,r){return this.eventHandlers.has(t)||this.eventHandlers.set(t,new Set),this.eventHandlers.get(t).add(r),()=>{this.eventHandlers.get(t)?.delete(r);}}destroy(){this.listeners.clear(),this.eventHandlers.clear(),this.values.clear(),this.snapshots.clear();let t=window.__FORK_BRIDGE__;t&&delete t[this.slotId];}};function vt(e,t){let r;try{r=wt.Children.only(e);}catch{let n=wt.Children.count(e);throw new Error(`<ForkSlot slotId="${t}"> must wrap exactly one React component, got ${n} children. Wrap your slot's contents in a single named component, e.g. <ForkSlot slotId="${t}"><MyShell ...props /></ForkSlot>.`)}let o=r.type;if(typeof o=="string")throw new Error(`<ForkSlot slotId="${t}"> child must be a React component (function or class), not an HTML element <${o}>. Wrap your slot's contents in a single named component, e.g. <ForkSlot slotId="${t}"><MyShell ...props /></ForkSlot>.`);if(typeof o=="symbol")throw new Error(`<ForkSlot slotId="${t}"> child must be a single React component, not a fragment or special React element. Wrap your slot's contents in a single named component, e.g. <ForkSlot slotId="${t}"><MyShell ...props /></ForkSlot>.`);return r}var tr=new Set;function rr(e){let t=[],r=e.querySelectorAll("*");for(let o of r){if(!(o instanceof HTMLElement))continue;let n=o.getBoundingClientRect();if(n.width<10||n.height<10||["SCRIPT","STYLE","META","LINK"].includes(o.tagName))continue;let i=getComputedStyle(o),s=parseFloat(i.borderTopLeftRadius)||0;t.push({tag:o.tagName,className:o.className||"",text:(o.textContent||"").slice(0,50).trim(),rect:n,borderRadius:s});}return t}function mo(e,t){let r=[];for(let o of t)if(!e.find(i=>i.tag===o.tag&&i.className===o.className&&Math.abs(i.rect.top-o.rect.top)<20&&Math.abs(i.rect.left-o.rect.left)<20)&&!r.some(s=>o.rect.top>=s.rect.top&&o.rect.left>=s.rect.left&&o.rect.right<=s.rect.right&&o.rect.bottom<=s.rect.bottom)){for(let s=r.length-1;s>=0;s--){let l=r[s];l.rect.top>=o.rect.top&&l.rect.left>=o.rect.left&&l.rect.right<=o.rect.right&&l.rect.bottom<=o.rect.bottom&&r.splice(s,1);}r.push({rect:o.rect,borderRadius:o.borderRadius});}return r}function go(e,t){let r=[];for(let o of e)if(!t.find(i=>i.tag===o.tag&&i.className===o.className&&Math.abs(i.rect.top-o.rect.top)<20&&Math.abs(i.rect.left-o.rect.left)<20)&&!r.some(s=>o.rect.top>=s.rect.top&&o.rect.left>=s.rect.left&&o.rect.right<=s.rect.right&&o.rect.bottom<=s.rect.bottom)){for(let s=r.length-1;s>=0;s--){let l=r[s];l.rect.top>=o.rect.top&&l.rect.left>=o.rect.left&&l.rect.right<=o.rect.right&&l.rect.bottom<=o.rect.bottom&&r.splice(s,1);}r.push({rect:o.rect,borderRadius:o.borderRadius});}return r}function nr(e,t,r,o,n){return n=Math.max(0,Math.min(n,r/2,o/2)),n===0?`M ${e} ${t} L ${e+r} ${t} L ${e+r} ${t+o} L ${e} ${t+o} Z`:[`M ${e+n} ${t}`,`L ${e+r-n} ${t}`,`A ${n} ${n} 0 0 1 ${e+r} ${t+n}`,`L ${e+r} ${t+o-n}`,`A ${n} ${n} 0 0 1 ${e+r-n} ${t+o}`,`L ${e+n} ${t+o}`,`A ${n} ${n} 0 0 1 ${e} ${t+o-n}`,`L ${e} ${t+n}`,`A ${n} ${n} 0 0 1 ${e+n} ${t}`,"Z"].join(" ")}function or(e){let t="http://www.w3.org/2000/svg",r=document.createElement("div");r.setAttribute("data-fork-highlights","true"),r.style.cssText="position:fixed;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:9999;";let o=document.createElementNS(t,"svg");o.setAttribute("width","100%"),o.setAttribute("height","100%"),o.style.cssText="position:absolute;top:0;left:0;overflow:visible;";let n=document.createElementNS(t,"defs");o.appendChild(n);let i=[];for(let f=0;f<e.length;f++){let{rect:S,borderRadius:P}=e[f],y=S.left-.5,k=S.top-.5,h=S.width+1,w=S.height+1,A=Math.min(P+.5,h/2,w/2),x=nr(y,k,h,w,A),L=`__fork-glow-${f}`,C=document.createElementNS(t,"filter");C.setAttribute("id",L),C.setAttribute("x","-100%"),C.setAttribute("y","-100%"),C.setAttribute("width","300%"),C.setAttribute("height","300%");let _=document.createElementNS(t,"feGaussianBlur");_.setAttribute("in","SourceGraphic"),_.setAttribute("stdDeviation","8"),C.appendChild(_),n.appendChild(C);let v=`__fork-mask-${f}`,g=document.createElementNS(t,"mask");g.setAttribute("id",v),g.setAttribute("maskUnits","userSpaceOnUse"),g.setAttribute("x",String(y-200)),g.setAttribute("y",String(k-200)),g.setAttribute("width",String(h+400)),g.setAttribute("height",String(w+400));let c=document.createElementNS(t,"rect");c.setAttribute("x",String(y-200)),c.setAttribute("y",String(k-200)),c.setAttribute("width",String(h+400)),c.setAttribute("height",String(w+400)),c.setAttribute("fill","white"),g.appendChild(c);let F=document.createElementNS(t,"path");F.setAttribute("d",x),F.setAttribute("fill","black"),g.appendChild(F),n.appendChild(g);let b=document.createElementNS(t,"g");b.setAttribute("mask",`url(#${v})`),b.setAttribute("opacity","0");let u=document.createElementNS(t,"g");u.setAttribute("filter",`url(#${L})`);let d=document.createElementNS(t,"path");d.setAttribute("d",x),d.setAttribute("fill","none"),d.setAttribute("stroke","rgba(150, 185, 220, 0.6)"),d.setAttribute("stroke-width","6"),d.setAttribute("stroke-linecap","round"),u.appendChild(d),b.appendChild(u),o.appendChild(b);let p=document.createElementNS(t,"path");p.setAttribute("d",x),p.setAttribute("fill","none"),p.setAttribute("stroke","rgba(150, 185, 220, 0.35)"),p.setAttribute("stroke-width","2"),p.setAttribute("stroke-linecap","round"),p.setAttribute("opacity","0"),o.appendChild(p),i.push(d,p),d.__group=b;}r.appendChild(o),document.body.appendChild(r);let s=[];for(let f=0;f<i.length;f+=2){let S=i[f],P=i[f+1],y=S.__group,k=P.getTotalLength(),h=S.getTotalLength();if(k<=0)continue;let w=k*.35;P.setAttribute("stroke-dasharray",`${w} ${k-w}`),P.setAttribute("stroke-dashoffset","0"),s.push(P.animate([{strokeDashoffset:0,opacity:0,offset:0},{strokeDashoffset:-0.2*k,opacity:.92,offset:.06},{strokeDashoffset:-2*k,opacity:.92,offset:.92},{strokeDashoffset:-2.25*k,opacity:0,offset:1}],{duration:14e3,easing:"ease-in-out",fill:"forwards"}));let A=h*.35;S.setAttribute("stroke-dasharray",`${A} ${h-A}`),S.setAttribute("stroke-dashoffset","0"),s.push(S.animate([{strokeDashoffset:0,offset:0},{strokeDashoffset:-0.2*h,offset:.06},{strokeDashoffset:-2*h,offset:.92},{strokeDashoffset:-2.25*h,offset:1}],{duration:14e3,easing:"ease-in-out",fill:"forwards"})),s.push(y.animate([{opacity:0,offset:0},{opacity:.92,offset:.06},{opacity:.92,offset:.92},{opacity:0,offset:1}],{duration:14e3,easing:"ease-in-out",fill:"forwards"}));}let l=false,R=()=>{if(l)return;l=true,clearTimeout(m);for(let S of s)try{S.cancel();}catch{}let f=r.animate([{opacity:1},{opacity:0}],{duration:400,fill:"forwards"});f.onfinish=()=>r.remove(),window.removeEventListener("click",R);},m=setTimeout(R,14500);return setTimeout(()=>{l||window.addEventListener("click",R);},500),R}function ho(e){let t="http://www.w3.org/2000/svg",r=document.createElement("div");r.setAttribute("data-fork-removed","true"),r.style.cssText="position:fixed;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:9999;";let o=document.createElementNS(t,"svg");o.setAttribute("width","100%"),o.setAttribute("height","100%"),o.style.cssText="position:absolute;top:0;left:0;overflow:visible;";let n=document.createElementNS(t,"defs"),i=document.createElementNS(t,"filter");i.setAttribute("id","__fork-removed-shadow"),i.setAttribute("x","-10%"),i.setAttribute("y","-10%"),i.setAttribute("width","120%"),i.setAttribute("height","120%");let s=document.createElementNS(t,"feDropShadow");s.setAttribute("dx","0"),s.setAttribute("dy","1"),s.setAttribute("stdDeviation","2"),s.setAttribute("flood-color","rgba(0,0,0,0.15)"),i.appendChild(s),n.appendChild(i),o.appendChild(n);for(let{rect:l,borderRadius:R}of e){let m=l.left,f=l.top,S=l.width,P=l.height,y=Math.min(R,S/2,P/2),k=nr(m,f,S,P,y),h=document.createElementNS(t,"path");h.setAttribute("d",k),h.setAttribute("fill","none"),h.setAttribute("stroke","rgba(120, 125, 135, 0.6)"),h.setAttribute("stroke-width","1.5"),h.setAttribute("stroke-dasharray","8 4"),h.setAttribute("stroke-linecap","round"),h.setAttribute("filter","url(#__fork-removed-shadow)"),h.setAttribute("opacity","0"),o.appendChild(h),h.animate([{opacity:0,offset:0},{opacity:.6,offset:.08},{opacity:.05,offset:.45},{opacity:.6,offset:.85},{opacity:.05,offset:1}],{duration:5e3,easing:"ease-in-out",fill:"forwards"});}return r.appendChild(o),document.body.appendChild(r),r}function yo(e,t){if(e===t)return true;let r=Object.keys(e);if(r.length!==Object.keys(t).length)return false;for(let o of r)if(!Object.is(e[o],t[o]))return false;return true}var bo=wt__namespace.default.memo(function({component:t,containerRef:r,wrapperStyle:o,hostProps:n}){return Vr.jsx("div",{ref:r,style:o,children:Vr.jsx(t,{...n})})},(e,t)=>e.component===t.component&&yo(e.hostProps,t.hostProps)),kt=class extends wt__namespace.default.Component{constructor(t){super(t),this.state={hasError:false};}static getDerivedStateFromError(){return {hasError:true}}componentDidCatch(t){console.error(`[Fork:${this.props.slotId}] fork render failed`,t);}componentDidUpdate(t){t.resetKey!==this.props.resetKey&&this.state.hasError&&this.setState({hasError:false});}render(){return this.state.hasError?this.props.fallback:this.props.children}};function sr({slotId:e,children:t,githubRepo:r,shared:o,events:n}){vt(t,e);let i=ze(e),{baseUrl:s,apiKey:l,appId:R,shouldSkipAnimation:m}=G(),[f,S]=wt.useState(null),P=wt.useRef(null),y=wt.useRef(null),k=wt.useRef(null),h=wt.useRef(false),w=wt.useRef(null),A=wt.useRef(null),x=!!(o||n),L=wt.useRef(null);x&&!L.current&&(L.current=new _e(e));let C=wt.useRef(n);if(C.current=n,wt.useEffect(()=>{if(x)return ()=>{L.current?.destroy(),L.current=null;}},[x,e]),x&&L.current&&o)for(let[F,b]of Object.entries(o))L.current.set(F,b);wt.useEffect(()=>{if(!x)return;L.current||(L.current=new _e(e));let F=L.current,b=Object.keys(C.current||{}).map(u=>F.on(u,(...d)=>C.current?.[u]?.(...d)));return ()=>b.forEach(u=>u())},[x,e]),wt.useEffect(()=>{if(tr.has(e))return;tr.add(e);let F={id:e,appId:R,label:e,eventsShape:"{ navigate?: string }",currentLayout:"",githubRepo:r,mode:"direct",sharedKeys:o?Object.keys(o):[],eventNames:n?Object.keys(n):[],propsShape:"",callbackNames:[]};fetch(`${s}/api/v1/slots`,{method:"POST",headers:{Authorization:`Bearer ${l}`,"Content-Type":"application/json"},body:JSON.stringify(F)}).catch(()=>{});},[e,s,l,r,R]);let _=i?.id||null;wt.useEffect(()=>{if(i?.bundleUrl,P.current,y.current,!i?.bundleUrl||!_){return}let F=`${s}${i.bundleUrl.replace("bundle.js","component.js")}`,b=`__fork_animated_${e}`,u=sessionStorage.getItem(b),d=m(e),p=!d&&u!==_;if(d&&_&&sessionStorage.setItem(b,_),p&&y.current){let Z=rr(y.current);k.current=Z,h.current=true,`${e}${Z.length}`;}window.__FORK_REACT__=wt__namespace.default,window.__FORK_REACT_DOM__=Gr__namespace,window.__FORK_REACT_JSX__=Vr__namespace;let N=Date.now(),O=`${s}${i.bundleUrl.replace("bundle.js","component.css")}?t=${N}`,U=document.createElement("link");U.rel="stylesheet",U.href=O,U.dataset.forkSlot=e,document.head.appendChild(U);let J=document.createElement("script");return J.src=F+"?t="+N,J.onload=()=>{let Z=window.__FORK_EXPORT__;if(Z?.default){if(y.current&&k.current&&h.current){let re=y.current.getBoundingClientRect(),j=y.current.cloneNode(true);j.style.position="fixed",j.style.top=`${re.top}px`,j.style.left=`${re.left}px`,j.style.width=`${re.width}px`,j.style.height=`${re.height}px`,j.style.flex="none",j.style.minHeight="auto",j.style.zIndex="9998",j.style.pointerEvents="none",j.style.overflow="hidden";let oe=getComputedStyle(y.current).backgroundColor;j.style.backgroundColor=oe&&oe!=="rgba(0, 0, 0, 0)"&&oe!=="transparent"?oe:getComputedStyle(document.body).backgroundColor||"#ffffff",document.body.appendChild(j);let X=y.current.querySelectorAll("*"),ie=j.querySelectorAll("*");for(let W=0;W<X.length;W++)X[W].scrollTop!==0&&(ie[W].scrollTop=X[W].scrollTop),X[W].scrollLeft!==0&&(ie[W].scrollLeft=X[W].scrollLeft);w.current=j;}S(()=>Z.default),P.current=_;}else console.error(`[Fork:${e}] component.js loaded but no default export found`);window.__FORK_EXPORT__=void 0;},J.onerror=()=>{console.error(`[Fork:${e}] failed to load component.js`);},document.head.appendChild(J),()=>{J.remove(),U.remove(),A.current&&(clearTimeout(A.current),A.current=null),w.current&&(w.current.remove(),w.current=null);}},[_,s,e]),wt.useEffect(()=>{if(!h.current||!f||!y.current){`${e}${h.current}`,y.current;return}let F=k.current;if(!F){return}requestAnimationFrame(()=>{requestAnimationFrame(()=>{if(!y.current)return;let b=rr(y.current),u=mo(F,b),d=go(F,b),p=w.current;if(`${e}${u.length}${d.length}`,d.length>0&&p){let N=ho(d);A.current=setTimeout(()=>{A.current=null;let O=400;p.animate([{opacity:1},{opacity:0}],{duration:O,fill:"forwards"}),N.animate([{opacity:1},{opacity:0}],{duration:O,fill:"forwards"}),setTimeout(()=>{p.remove(),N.remove(),w.current=null,u.length>0&&(or(u));},O);},3500);}else p&&(p.remove(),w.current=null),u.length>0&&(or(u));k.current=null,h.current=false,_&&(sessionStorage.setItem(`__fork_animated_${e}`,_),`${e}`);});});},[f]);let v={flex:1,minHeight:0,display:"flex",flexDirection:"column"};if(!i||i.status!=="complete"||!i.bundleUrl)return Vr.jsx("div",{ref:y,style:v,children:t});if(!f)return Vr.jsx("div",{ref:y,style:v,children:t});let c=t?.props??{};return Vr.jsx(kt,{slotId:e,resetKey:_,fallback:Vr.jsx("div",{ref:y,style:v,children:t}),children:Vr.jsx(bo,{component:f,containerRef:y,wrapperStyle:v,hostProps:c})})}var ar=new Set;function vo(e){return `{ ${Object.entries(e).map(([r,o])=>o==null?`${r}: unknown`:Array.isArray(o)?`${r}: ${o.length>0?typeof o[0]:"unknown"}[]`:`${r}: ${typeof o}`).join("; ")} }`}function lr(e,t=new Set){return wt.Children.forEach(e,r=>{if(!wt.isValidElement(r))return;let o=r.props;for(let[n,i]of Object.entries(o))typeof i=="function"&&/^on[A-Z]/.test(n)&&t.add(n);o.children&&lr(o.children,t);}),t}function So({slotId:e,props:t,children:r,allowedFetches:o,githubRepo:n,callbacks:i,mode:s="iframe",shared:l,events:R}){if(vt(r,e),s==="direct")return Vr.jsx(sr,{slotId:e,githubRepo:n,shared:l,events:R,children:r});let m=ze(e),{baseUrl:f,apiKey:S,appId:P}=G(),y=wt.useRef(null),k=wt.useRef(false),h=wt.useRef(null),w=wt.useRef(i);w.current=i;let A=wt.useRef(t);A.current=t;let x=wt.useRef(o);x.current=o,wt.useEffect(()=>{if(typeof process<"u")return;let v=lr(r),g=new Set(i?Object.keys(i):[]),c=[...v].filter(F=>!g.has(F));c.length>0&&console.error(`[ForkSlot:${e}] Missing bridged callbacks! The following callback props are used by children but not passed to ForkSlot's \`callbacks\` prop:
2
+ `+c.map(F=>` - ${F}`).join(`
3
+ `)+"\n\nThe forked component will not be able to call these. Add them to the `callbacks` prop of <ForkSlot>.");},[e,r,i]),wt.useEffect(()=>{ar.has(e)||(ar.add(e),fetch(`${f}/api/v1/slots`,{method:"POST",headers:{Authorization:`Bearer ${S}`,"Content-Type":"application/json"},body:JSON.stringify({id:e,appId:P,label:e,propsShape:t?vo(t):"",eventsShape:"{ navigate?: string }",currentLayout:"",githubRepo:n,callbackNames:i?Object.keys(i):[],mode:s||"iframe"})}).catch(()=>{}));},[e,f,S,n,P]);let L=wt.useCallback(v=>{let g=y.current;if(g?.contentWindow&&k.current){let c=w.current?Object.keys(w.current):[];g.contentWindow.postMessage({type:"slot:props",props:v,callbackNames:c},"*"),h.current=null;}else h.current=v;},[]),C=wt.useCallback((v,g)=>{let c=x.current;return !c||c.length===0?false:c.some(F=>{let[b,u]=F.split(" "),d=g.split("?")[0];return v.toUpperCase()===b.toUpperCase()&&d.startsWith(u)})},[]);if(wt.useEffect(()=>{if(!m?.bundleUrl)return;let v=async g=>{if(g.source===y.current?.contentWindow){if(g.data?.type==="slot:ready")k.current=true,y.current?.contentWindow?.postMessage({type:"slot:allowed-fetches",paths:x.current||[]},"*"),x.current,h.current?L(h.current):L(A.current||{});else if(g.data?.type==="slot:event"){let c=g.data.event;c?.navigate&&(window.location.hash=c.navigate);}else if(g.data?.type==="slot:clipboard-write")navigator.clipboard.writeText(g.data.text).catch(c=>{console.warn(`[ForkSlot:${e}] clipboard write failed:`,c.message);});else if(g.data?.type==="slot:callback"){let{name:c,args:F}=g.data,b=w.current?.[c];b?(b(...F||[])):console.warn(`[ForkSlot:${e}] unknown callback: ${c}`);}else if(g.data?.type==="slot:fetch"){let{id:c,method:F,url:b,body:u}=g.data,d=y.current?.contentWindow;if(!d)return;let p=F||"GET";if(!C(p,b)){console.warn(`[ForkSlot:${e}] BLOCKED fetch #${c}: ${p} ${b} \u2014 not in allowedFetches`),d.postMessage({type:"slot:fetch-response",id:c,error:`Fetch not allowed: ${p} ${b}`},"*");return}try{let N={method:p};u&&p!=="GET"&&(N.headers={"Content-Type":"application/json"},N.body=JSON.stringify(u));let O=await fetch(b,N),U=await O.json();`${e}${c}${O.status}`,d.postMessage({type:"slot:fetch-response",id:c,data:U,status:O.status},"*");}catch(N){console.error(`[ForkSlot:${e}] fetch #${c} failed:`,N.message),d.postMessage({type:"slot:fetch-response",id:c,error:N.message},"*");}}}};return window.addEventListener("message",v),()=>{window.removeEventListener("message",v),k.current=false;}},[m?.bundleUrl,e,L,C]),wt.useEffect(()=>{m?.bundleUrl&&k.current&&L(t||{});},[t,m?.bundleUrl,L]),!m||m.status!=="complete"||!m.bundleUrl)return `${e}${m?.status||"none"}${m?.bundleUrl||"none"}`,Vr.jsx(Vr.Fragment,{children:r});`${e}${m.bundleUrl}`;let _=`${f}${m.bundleUrl.replace("/bundle.js","/host")}`;return Vr.jsx("iframe",{ref:y,src:_,sandbox:"allow-scripts allow-same-origin allow-forms allow-clipboard-write",title:`Forked ${e}`,style:{width:"100%",border:"none",flex:1,minHeight:0}})}function Ke({style:e={width:20,height:20},...t}){return Vr.jsxs("svg",{viewBox:"320 95 270 345",fill:"none",xmlns:"http://www.w3.org/2000/svg",style:e,...t,children:[Vr.jsx("path",{stroke:"currentColor",strokeWidth:"30",strokeLinejoin:"round",strokeLinecap:"round",d:"M357.789 145.428c0-16.186 13.121-29.307 29.307-29.307 7.773 0 15.227 3.088 20.723 8.584 5.496 5.496 8.584 12.95 8.584 20.723 0 16.186-13.121 29.307-29.307 29.307s-29.307-13.121-29.307-29.307z"}),Vr.jsx("path",{stroke:"currentColor",strokeWidth:"30",strokeLinejoin:"round",strokeLinecap:"round",d:"M387.096 174.735v188"}),Vr.jsx("path",{stroke:"currentColor",strokeWidth:"30",strokeLinejoin:"round",strokeLinecap:"round",d:"M357.789 394.572c0-16.186 13.121-29.307 29.307-29.307 7.773 0 15.227 3.088 20.723 8.584 5.496 5.496 8.584 12.95 8.584 20.723 0 16.186-13.121 29.307-29.307 29.307s-29.307-13.121-29.307-29.307z"}),Vr.jsx("path",{stroke:"currentColor",strokeWidth:"30",strokeLinejoin:"round",strokeLinecap:"round",d:"M388.739 319c10.168-6.317 43.997-26.932 61.009-37.9 17.012-10.968 31.758-19.978 41.064-27.91 9.305-7.931 11.782-14.213 14.767-19.679 2.985-5.465 3.014-8.99 3.141-13.114.128-4.124-.999-8.178-2.377-11.632-1.378-3.454-3.563-6.55-5.889-9.094-2.326-2.543-4.98-4.679-8.066-6.167-3.085-1.488-6.624-2.601-10.448-2.76-3.823-.159-8.624.2-12.495 1.806-3.871 1.607-8.047 4.68-10.732 7.835-2.685 3.156-4.446 7.448-5.378 11.099-.932 3.651-.742 7.485-.213 10.807.528 3.322 1.864 6.46 3.386 9.123 1.523 2.663 3.543 4.843 5.75 6.854 2.207 2.011 4.38 3.914 7.491 5.214 3.111 1.3 6.57 2.808 11.178 2.584 4.607-.225 9.363-.471 16.466-3.932 7.103-3.46 16.076-5.382 26.154-16.831 10.077-11.449 28.593-43.219 34.312-51.862"}),Vr.jsx("path",{fill:"currentColor",stroke:"currentColor",strokeWidth:"1",strokeLinejoin:"round",d:"M527.117 162.547L570.487 134.368Q577.196 130.009 577.624 137.997L580.39 189.69Q580.818 197.678 573.69 194.047L527.536 170.538Q520.408 166.907 527.117 162.547Z"})]})}function xt({onClick:e}){let[t,r]=wt.useState(false),[o,n]=wt.useState(false),i=t?48:40;return Vr.jsx("button",{onClick:e,onMouseEnter:()=>r(true),onMouseLeave:()=>{r(false),n(false);},onMouseDown:()=>n(true),onMouseUp:()=>n(false),style:{position:"fixed",bottom:24,right:24,zIndex:40,width:i,height:i,borderRadius:"50%",backgroundColor:t?"rgba(255, 255, 255, 1)":"rgba(255, 255, 255, 0.3)",border:t?"1px solid rgba(156, 163, 175, 1)":"1px solid rgba(156, 163, 175, 0.3)",display:"flex",alignItems:"center",justifyContent:"center",color:t?"#1c4587":"rgba(28, 69, 135, 0.5)",boxShadow:t?"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)":"0 1px 2px 0 rgba(0, 0, 0, 0.05)",transform:o?"scale(0.95)":"scale(1)",transition:"all 300ms",cursor:"pointer",padding:0,margin:0,outline:"none",boxSizing:"border-box"},title:"Fork this app",children:Vr.jsx(Ke,{style:{width:24,height:24}})})}var To={status:lucideReact.Loader2,agent_message:lucideReact.MessageSquare,tool_use:lucideReact.Wrench,build_start:lucideReact.Package,build_complete:lucideReact.Check,build_error:lucideReact.AlertCircle,complete:lucideReact.Sparkles,error:lucideReact.AlertCircle},Mo={status:"#60a5fa",agent_message:"#a0a0a0",tool_use:"#fbbf24",build_start:"#c084fc",build_complete:"#6b7280",build_error:"#f87171",complete:"#6b7280",error:"#f87171"},Lo={read:lucideReact.FileSearch,write:lucideReact.Pencil,search:lucideReact.FileSearch,shell:lucideReact.Terminal,build:lucideReact.Package},Bo={read:"#60a5fa",write:"#fbbf24",search:"#60a5fa",shell:"#a78bfa",build:"#c084fc"};function Rt(e){let t=e.data;switch(e.type){case "status":return `${t.message||t.status||"..."}`;case "agent_message":{let r=String(t.content||"");return /failed:/i.test(r)&&(r.includes("ENOENT")||r.includes("{")||r.includes("/Users/"))?"Adapting approach...":r}case "tool_use":return String(t.label||"Working on it");case "build_start":return "Bundling your component...";case "build_complete":return "Build complete!";case "build_error":return `Build failed: ${t.error}`;case "complete":return "Your fork is ready!";case "error":return `Error: ${t.error}`;default:return JSON.stringify(t)}}function hr({events:e}){let t=wt.useRef(null);return wt.useEffect(()=>{t.current&&(t.current.scrollTop=t.current.scrollHeight);},[e]),Vr.jsxs(Vr.Fragment,{children:[Vr.jsx("style",{children:`
4
4
  @keyframes __fork-spin {
5
5
  from { transform: rotate(0deg); }
6
6
  to { transform: rotate(360deg); }
@@ -18,7 +18,7 @@
18
18
  .__fork-stream::-webkit-scrollbar-thumb:hover {
19
19
  background: rgba(255, 255, 255, 0.3);
20
20
  }
21
- `}),Ot.jsxs("div",{className:"__fork-stream",ref:t,style:{scrollbarWidth:"thin",scrollbarColor:"rgba(255, 255, 255, 0.15) transparent",backgroundColor:"#1a1a2e",borderRadius:"8px",padding:"12px",fontFamily:"ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace",fontSize:"11px",maxHeight:"300px",overflowY:"auto",boxSizing:"border-box"},children:[e.length===0&&Ot.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"6px",color:"#6b7280",fontSize:"11px"},children:[Ot.jsx(lucideReact.Loader2,{style:{width:"12px",height:"12px",animation:"__fork-spin 1s linear infinite",flexShrink:0}}),"Connecting to agent..."]}),e.map((r,o)=>{let n=o===e.length-1,i=r.type==="complete"||r.type==="error"||r.type==="build_complete"||r.type==="build_error",s=n&&!i&&(r.type==="status"||r.type==="tool_use"||r.type==="build_start"),a=fr[r.type]||lucideReact.Code,b=pr[r.type]||"#9ca3af";if(r.type==="tool_use"){let d=String(r.data.category||"");a=mr[d]||lucideReact.Wrench,b=gr[d]||"#fbbf24";}return s?a=lucideReact.Loader2:!n&&r.type==="status"&&(a=lucideReact.Check,b="#4ade80"),Ot.jsxs("div",{style:{display:"flex",gap:"6px",marginBottom:"6px",lineHeight:1.625},children:[Ot.jsx(a,{style:{width:"12px",height:"12px",marginTop:"2px",flexShrink:0,color:b,...s?{animation:"__fork-spin 1s linear infinite"}:{}}}),Ot.jsx("span",{style:{color:n&&!i?"#d1d5db":"#6b7280",wordBreak:"break-all"},children:je(r)})]},o)})]})]})}var xr=["Dark mode redesign","New workflow for adding to this page","Data-dense analytics view"],wt=35,Rr="Working on Feature",Er="Built Custom Feature",$r=360,Fe=350;function Ar(e){return e.length<=wt?e:e.slice(0,wt-3).trimEnd()+"..."}function Cr({events:e}){let[t,r]=He.useState("Setting up environment..."),[o,n]=He.useState(true),i=He.useRef(t),s=He.useRef(false);return He.useEffect(()=>{if(!s.current){for(let b of e)if(b.type==="status"&&String(b.data.message||"").includes("Agent started")){s.current=true;break}}let a="Setting up environment...";if(s.current)for(let b=e.length-1;b>=0;b--){let d=e[b];if(d.type==="tool_use"||d.type==="build_start"||d.type==="build_complete"){a=Ar(je(d));break}}if(a!==i.current){n(false);let b=setTimeout(()=>{r(a),i.current=a,n(true);},200);return ()=>clearTimeout(b)}},[e]),Ot.jsx("span",{style:{fontSize:11,color:"#d1d5db",fontWeight:500,opacity:o?1:0,transition:"opacity 0.2s ease",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",minWidth:0},children:t})}function Tr({children:e}){let[t,r]=He.useState(null);return He.useEffect(()=>{if(typeof document>"u")return;let o=document.createElement("div");o.setAttribute("data-fork-panel-host",""),o.style.cssText="all: initial;",document.body.appendChild(o);let n=o.attachShadow({mode:"open"});return r(n),()=>{o.remove();}},[]),t?Ht.createPortal(e,t):null}function xe({state:e,fork:t,events:r,error:o,slotId:n,targetId:i,targetLabel:s,historyMode:a="slot",examplePrompts:b=xr,onSubmit:d,onUndo:m,onClose:S,baseUrl:_,apiKey:w,userId:h,userHash:l,appId:$,embedded:T=false}){let[R,C]=He.useState(""),[F,y]=He.useState([]),[E,c]=He.useState(false),[u,x]=He.useState(false),[k,f]=He.useState(false),[g,p]=He.useState(false),[B,U]=He.useState(false),[K,V]=He.useState(false),[G,Y]=He.useState(null),[O,q]=He.useState(false),[W,te]=He.useState(false),[v,P]=He.useState(null),[N,z]=He.useState(false),Z=He.useRef(null),ge=He.useRef(null),{resetAllForks:_t}=j(),X=i??n??"",Pe=(s||X).replace(/[-_]+/g," ").replace(/\b\w/g,A=>A.toUpperCase()),_e=He.useRef(""),he=T?true:u&&!k,Mt=r.find(A=>{let L=A.data;return A.type==="status"&&L.summary})?.data?.summary||t?.summary||Rr,re=r.find(A=>{let L=A.data;return (A.type==="status"||A.type==="complete")&&typeof L?.estimateMinutes=="number"})?.data?.estimateMinutes??t?.estimateMinutes;He.useEffect(()=>{if(a==="none"){c(true);return}if(!_||!w||!h||!X||E)return;let A=new URLSearchParams({userId:h});if(l&&A.set("userHash",l),a==="slot")A.set("slotId",X);else if(a==="boundary"){if(!$){c(true);return}A.set("boundaryId",X),A.set("appId",$);}fetch(`${_}/api/v1/forks/history?${A.toString()}`,{headers:{Authorization:`Bearer ${w}`}}).then(L=>L.ok?L.json():[]).then(L=>{let H=[];for(let ye of L)ye.role==="user"?H.push({type:"user",text:ye.content}):H.push({type:"applied",text:ye.content});H.length>0&&y(H),c(true);}).catch(()=>c(true));},[w,$,_,E,a,X,l,h]),He.useEffect(()=>{e==="complete"&&q(false);},[e]),He.useEffect(()=>{if(T)return;let A=requestAnimationFrame(()=>x(true));return ()=>cancelAnimationFrame(A)},[T]),He.useEffect(()=>{if(he&&(e==="prompting"||e==="complete")){let A=setTimeout(()=>Z.current?.focus(),T?100:Fe+100);return ()=>clearTimeout(A)}},[he,T,e]),He.useEffect(()=>{if(e==="complete"&&_e.current){let L=r.find(H=>H.type==="complete")?.data?.summary||t?.summary||Er;y(H=>H[H.length-1]?.type==="applied"?H:[...H,{type:"applied",text:L}]),C(""),setTimeout(()=>Z.current?.focus(),200);}},[e,Pe,r,t?.summary]),He.useEffect(()=>{ge.current&&(ge.current.scrollTop=ge.current.scrollHeight);},[F,e]);let Ze=()=>{R.trim()&&(_e.current=R.trim(),y(A=>[...A,{type:"user",text:R.trim()}]),d(R.trim(),X),C(""));},Lt=async()=>{if(!(!m||W||!X)){te(true);try{let A=await m(X);y(L=>{let H=[...L];return H.length>=2&&H[H.length-1]?.type==="applied"?H.splice(-2,2):H.length>=1&&H[H.length-1]?.type==="applied"&&H.splice(-1,1),H}),A?.removed&&y([]);}catch{}finally{te(false);}}},Me=()=>{if(T){S();return}f(true),x(false),setTimeout(()=>S(),Fe);},Bt=T?{position:"relative",width:"100%",height:"100%",background:"#ffffff",display:"flex",flexDirection:"column",fontFamily:'ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif'}:{position:"fixed",top:0,right:0,bottom:0,zIndex:2147483e3,width:$r,maxWidth:"100vw",background:"#ffffff",boxShadow:he?"-12px 0 32px -16px rgba(0, 0, 0, 0.18), -2px 0 8px -2px rgba(0, 0, 0, 0.06)":"none",borderLeft:"1px solid rgba(0, 0, 0, 0.08)",transform:he?"translateX(0)":"translateX(100%)",transition:`transform ${Fe}ms cubic-bezier(0.22, 1, 0.36, 1), box-shadow ${Fe}ms ease`,display:"flex",flexDirection:"column",fontFamily:'ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif'},Qe=Ot.jsxs(Ot.Fragment,{children:[Ot.jsx("style",{children:`
21
+ `}),Vr.jsxs("div",{className:"__fork-stream",ref:t,style:{scrollbarWidth:"thin",scrollbarColor:"rgba(255, 255, 255, 0.15) transparent",backgroundColor:"#1a1a2e",borderRadius:"8px",padding:"12px",fontFamily:"ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace",fontSize:"11px",maxHeight:"300px",overflowY:"auto",boxSizing:"border-box"},children:[e.length===0&&Vr.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"6px",color:"#6b7280",fontSize:"11px"},children:[Vr.jsx(lucideReact.Loader2,{style:{width:"12px",height:"12px",animation:"__fork-spin 1s linear infinite",flexShrink:0}}),"Connecting to agent..."]}),e.map((r,o)=>{let n=o===e.length-1,i=r.type==="complete"||r.type==="error"||r.type==="build_complete"||r.type==="build_error",s=n&&!i&&(r.type==="status"||r.type==="tool_use"||r.type==="build_start"),l=To[r.type]||lucideReact.Code,R=Mo[r.type]||"#9ca3af";if(r.type==="tool_use"){let m=String(r.data.category||"");l=Lo[m]||lucideReact.Wrench,R=Bo[m]||"#fbbf24";}return s?l=lucideReact.Loader2:!n&&r.type==="status"&&(l=lucideReact.Check,R="#4ade80"),Vr.jsxs("div",{style:{display:"flex",gap:"6px",marginBottom:"6px",lineHeight:1.625},children:[Vr.jsx(l,{style:{width:"12px",height:"12px",marginTop:"2px",flexShrink:0,color:R,...s?{animation:"__fork-spin 1s linear infinite"}:{}}}),Vr.jsx("span",{style:{color:n&&!i?"#d1d5db":"#6b7280",wordBreak:"break-all"},children:Rt(r)})]},o)})]})]})}var zo=["Dark mode redesign","New workflow for adding to this page","Data-dense analytics view"],wr=35,Wo="Working on Feature",Ko="Built Custom Feature",vr=360,qe=350;function Go(e){return e.length<=wr?e:e.slice(0,wr-3).trimEnd()+"..."}function Vo({events:e}){let[t,r]=wt.useState("Setting up environment..."),[o,n]=wt.useState(true),i=wt.useRef(t),s=wt.useRef(false);return wt.useEffect(()=>{if(!s.current){for(let R of e)if(R.type==="status"&&String(R.data.message||"").includes("Agent started")){s.current=true;break}}let l="Setting up environment...";if(s.current)for(let R=e.length-1;R>=0;R--){let m=e[R];if(m.type==="tool_use"||m.type==="build_start"||m.type==="build_complete"){l=Go(Rt(m));break}}if(l!==i.current){n(false);let R=setTimeout(()=>{r(l),i.current=l,n(true);},200);return ()=>clearTimeout(R)}},[e]),Vr.jsx("span",{style:{fontSize:11,color:"#d1d5db",fontWeight:500,opacity:o?1:0,transition:"opacity 0.2s ease",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",minWidth:0},children:t})}function qo({children:e}){let[t,r]=wt.useState(null);return wt.useEffect(()=>{if(typeof document>"u")return;let o=document.createElement("div");o.setAttribute("data-fork-panel-host",""),o.style.cssText="all: initial;",document.body.appendChild(o);let n=o.attachShadow({mode:"open"});return r(n),()=>{o.remove();}},[]),t?Gr.createPortal(e,t):null}function Je({state:e,fork:t,events:r,error:o,slotId:n,targetId:i,targetLabel:s,historyMode:l="slot",examplePrompts:R=zo,onSubmit:m,onUndo:f,onClose:S,baseUrl:P,apiKey:y,userId:k,userHash:h,appId:w,embedded:A=false}){let[x,L]=wt.useState(""),[C,_]=wt.useState([]),[v,g]=wt.useState(false),[c,F]=wt.useState(false),[b,u]=wt.useState(false),[d,p]=wt.useState(false),[N,O]=wt.useState(false),[U,J]=wt.useState(false),[Z,re]=wt.useState(false),[j,oe]=wt.useState(null),[X,ie]=wt.useState(false),[W,Le]=wt.useState(false),[xe,Be]=wt.useState(null),[T,M]=wt.useState(false),[I,V]=wt.useState([]),[K,rt]=wt.useState(null),[ce,ot]=wt.useState(false),[ge,Fe]=wt.useState(false),[Lr,Bt]=wt.useState(false),[Br,Nt]=wt.useState(null),[Nr,Ht]=wt.useState(false),[Hr,he]=wt.useState(false),[Re,Ee]=wt.useState(""),[ye,Ot]=wt.useState(null),Ne=wt.useRef(null),He=wt.useRef(null),{resetAllForks:Or}=G(),ne=ye!==null,It=wt.useRef(S);wt.useEffect(()=>{It.current=S;});let nt=wt.useRef(null),Oe=wt.useRef(false),Dt=typeof window<"u"&&"documentPictureInPicture"in window,Ir=async()=>{if(!(!Dt||ne))try{let a=await window.documentPictureInPicture.requestWindow({width:vr,height:640});a.document.body.style.margin="0",a.document.body.style.padding="0",a.document.body.style.height="100vh",a.document.body.style.overflow="hidden",a.document.body.style.background="#ffffff";try{let E=document.adoptedStyleSheets??[];E.length>0&&(a.document.adoptedStyleSheets=[...E]);}catch{}a.addEventListener("pagehide",()=>{nt.current=null,Ot(null),Oe.current||It.current(),Oe.current=!1;},{once:!0}),nt.current=a,Ot(a);}catch(a){console.warn("[Fork] PiP open failed:",a);}},Dr=()=>{ye&&(Oe.current=true,ye.close());};wt.useEffect(()=>()=>{Oe.current=true,nt.current?.close();},[]);let se=i??n??"",st=(s||se).replace(/[-_]+/g," ").replace(/\b\w/g,a=>a.toUpperCase()),it=wt.useRef(""),Ie=A?true:c&&!b,Ur=r.find(a=>{let E=a.data;return a.type==="status"&&E.summary})?.data?.summary||t?.summary||Wo,ue=r.find(a=>{let E=a.data;return (a.type==="status"||a.type==="complete")&&typeof E?.estimateMinutes=="number"})?.data?.estimateMinutes??t?.estimateMinutes;wt.useEffect(()=>{if(l==="none"){g(true);return}if(!P||!y||!k||!se||v||!ce)return;let a=new URLSearchParams({userId:k});if(h&&a.set("userHash",h),K&&a.set("containerId",K),l==="slot")a.set("slotId",se);else if(l==="boundary"){if(!w){g(true);return}a.set("boundaryId",se),a.set("appId",w);}fetch(`${P}/api/v1/forks/history?${a.toString()}`,{headers:{Authorization:`Bearer ${y}`}}).then(E=>E.ok?E.json():[]).then(E=>{let B=[];for(let Y of E)Y.role==="user"?B.push({type:"user",text:Y.content}):B.push({type:"applied",text:Y.content});_(B),g(true);}).catch(()=>g(true));},[y,w,P,v,l,se,h,k,K,ce]),wt.useEffect(()=>{e==="complete"&&ie(false);},[e]),wt.useEffect(()=>{if(A&&l==="none"){ot(true);return}if(!P||!y||ce)return;let a=false;return (async()=>{try{let E=await fetch(`${P}/api/v1/containers`,{headers:{Authorization:`Bearer ${y}`}});if(!E.ok)throw new Error(`HTTP ${E.status}`);let B=await E.json();if(a)return;if(B.length===0){let Y=await fetch(`${P}/api/v1/containers`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${y}`},body:JSON.stringify({name:"Default"})});if(!Y.ok)throw new Error(`HTTP ${Y.status}`);let Wr=await Y.json();if(a)return;B=[Wr];}V(B),rt(B[0]?.id??null),ot(!0);}catch(E){console.warn("[Fork] containers load failed:",E),a||ot(true);}})(),()=>{a=true;}},[y,P,ce,A,l]);let De=wt.useRef(null);wt.useEffect(()=>{if(ce){if(De.current===null){De.current=K;return}De.current!==K&&(De.current=K,_([]),g(false));}},[K,ce]);let at=wt.useRef(null);wt.useEffect(()=>{if(!ge)return;let a=B=>{at.current&&(at.current.contains(B.target)||(Fe(false),he(false),Ee("")));},E=B=>{B.key==="Escape"&&(Fe(false),he(false),Ee(""));};return document.addEventListener("mousedown",a,true),document.addEventListener("keydown",E,true),()=>{document.removeEventListener("mousedown",a,true),document.removeEventListener("keydown",E,true);}},[ge]),wt.useEffect(()=>{if(A)return;let a=requestAnimationFrame(()=>F(true));return ()=>cancelAnimationFrame(a)},[A]),wt.useEffect(()=>{let a=A||ne;if((a||Ie)&&(e==="prompting"||e==="complete")){let E=setTimeout(()=>Ne.current?.focus(),a?100:qe+100);return ()=>clearTimeout(E)}},[Ie,A,ne,e]),wt.useEffect(()=>{if(e==="complete"&&it.current){let E=r.find(B=>B.type==="complete")?.data?.summary||t?.summary||Ko;_(B=>B[B.length-1]?.type==="applied"?B:[...B,{type:"applied",text:E}]),L(""),setTimeout(()=>Ne.current?.focus(),200);}},[e,st,r,t?.summary]),wt.useEffect(()=>{He.current&&(He.current.scrollTop=He.current.scrollHeight);},[C,e]);let Ut=()=>{x.trim()&&(it.current=x.trim(),_(a=>[...a,{type:"user",text:x.trim()}]),m(x.trim(),se,K),L(""));},jt=async()=>{let a=Re.trim();if(!(!a||!P||!y))try{let E=await fetch(`${P}/api/v1/containers`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${y}`},body:JSON.stringify({name:a})});if(!E.ok){let Y=await E.json().catch(()=>({}));throw new Error(Y.error||`HTTP ${E.status}`)}let B=await E.json();V(Y=>[...Y,B]),rt(B.id),he(!1),Ee(""),Fe(!1);}catch(E){console.warn("[Fork] container create failed:",E);}},jr=async()=>{if(!(!f||W||!se)){Le(true);try{let a=await f(se);_(E=>{let B=[...E];return B.length>=2&&B[B.length-1]?.type==="applied"?B.splice(-2,2):B.length>=1&&B[B.length-1]?.type==="applied"&&B.splice(-1,1),B}),a?.removed&&_([]);}catch{}finally{Le(false);}}},lt=()=>{if(A){S();return}if(ne){ye?.close();return}u(true),F(false),setTimeout(()=>S(),qe);},zr=A||ne?{position:"relative",width:"100%",height:"100%",background:"#ffffff",display:"flex",flexDirection:"column",fontFamily:'ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif'}:{position:"fixed",top:0,right:0,bottom:0,zIndex:2147483e3,width:vr,maxWidth:"100vw",background:"#ffffff",boxShadow:Ie?"-12px 0 32px -16px rgba(0, 0, 0, 0.18), -2px 0 8px -2px rgba(0, 0, 0, 0.06)":"none",borderLeft:"1px solid rgba(0, 0, 0, 0.08)",transform:Ie?"translateX(0)":"translateX(100%)",transition:`transform ${qe}ms cubic-bezier(0.22, 1, 0.36, 1), box-shadow ${qe}ms ease`,display:"flex",flexDirection:"column",fontFamily:'ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif'},ct=Vr.jsxs(Vr.Fragment,{children:[Vr.jsx("style",{children:`
22
22
  @keyframes __fork-pulse {
23
23
  0%, 100% { opacity: 1; }
24
24
  50% { opacity: 0.5; }
@@ -40,5 +40,5 @@
40
40
  scrollbar-width: thin;
41
41
  scrollbar-color: rgba(0, 0, 0, 0.12) transparent;
42
42
  }
43
- `}),Ot.jsxs("div",{className:"__fork-panel",style:Bt,children:[Ot.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"12px 16px",borderBottom:"1px solid rgba(229, 231, 235, 0.8)",flexShrink:0},children:[Ot.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,minWidth:0,flex:1},children:[Ot.jsx(we,{style:{width:16,height:16,color:"#1c4587",cursor:"pointer",flexShrink:0},onDoubleClick:async A=>{if(A.stopPropagation(),!N&&confirm("Reset all forks? This will remove all forked components.")){z(true);try{let L=await _t();`${L?.deleted??0}`,y([]),C(""),q(!1),Me();}catch(L){console.error("[Fork] Reset failed:",L);}finally{z(false);}}}}),Ot.jsx("span",{style:{fontSize:13,fontWeight:600,color:"#111827",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",minWidth:0},children:e==="running"?Mt:`Fork ${Pe}`}),e==="running"&&Ot.jsx("span",{title:re?`Estimated ~${re} min`:"Estimating\u2026",style:{fontSize:10,fontWeight:600,color:re?"#1c4587":"#9ca3af",backgroundColor:re?"rgba(28, 69, 135, 0.08)":"rgba(156, 163, 175, 0.12)",padding:"1px 6px",borderRadius:999,flexShrink:0,fontVariantNumeric:"tabular-nums",animation:re?void 0:"__fork-pulse 1.4s ease-in-out infinite",minWidth:28,textAlign:"center"},children:re?`~${re}m`:"~ m"}),e==="complete"&&Ot.jsx("div",{style:{height:6,width:6,backgroundColor:"#1c4587",borderRadius:"50%",flexShrink:0}})]}),!T&&Ot.jsx("button",{onClick:Me,onMouseEnter:()=>p(true),onMouseLeave:()=>p(false),style:{padding:6,borderRadius:6,color:g?"#4b5563":"#9ca3af",backgroundColor:g?"#f3f4f6":"transparent",border:"none",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",transition:"background-color 0.15s, color 0.15s"},children:Ot.jsx(lucideReact.X,{style:{width:16,height:16}})})]}),Ot.jsxs("div",{ref:ge,style:{flex:1,overflowY:"auto",minHeight:0,display:"flex",flexDirection:"column"},children:[e==="prompting"&&F.length===0&&Ot.jsxs("div",{style:{padding:"24px 20px",textAlign:"center"},children:[Ot.jsx("p",{style:{fontSize:13,color:"#6b7280",marginBottom:14,lineHeight:1.625,margin:"0 0 14px 0"},children:"Describe the feature you want to build."}),Ot.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:6,justifyContent:"center"},children:b.map((A,L)=>Ot.jsx("button",{onClick:()=>{C(A),Z.current?.focus();},onMouseEnter:()=>Y(L),onMouseLeave:()=>Y(null),style:{fontSize:12,padding:"5px 12px",borderRadius:9999,color:G===L?"#1f2937":"#6b7280",backgroundColor:G===L?"#f9fafb":"transparent",border:G===L?"1px solid #d1d5db":"1px solid #e5e7eb",cursor:"pointer",transition:"color 0.15s, background-color 0.15s, border-color 0.15s",fontFamily:"inherit"},children:A},A))})]}),F.length>0&&Ot.jsx("div",{style:{padding:"16px 16px 0 16px"},children:F.map((A,L)=>Ot.jsx("div",{style:{marginBottom:L<F.length-1?10:0},children:A.type==="user"?Ot.jsxs("div",{style:{display:"flex",alignItems:"flex-start",gap:8,flexDirection:"row-reverse"},children:[Ot.jsx("div",{style:{width:22,height:22,borderRadius:"50%",backgroundColor:"#e5e7eb",display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0,marginTop:2},children:Ot.jsx(lucideReact.User,{style:{width:13,height:13,color:"#6b7280"}})}),Ot.jsx("div",{style:{backgroundColor:"#f3f4f6",borderRadius:"12px 4px 12px 12px",padding:"8px 12px",fontSize:13,color:"#374151",lineHeight:1.5,maxWidth:"75%"},children:A.text})]}):Ot.jsxs("div",{style:{display:"flex",alignItems:"flex-start",gap:8},children:[Ot.jsx("div",{style:{width:22,height:22,borderRadius:"50%",backgroundColor:"#f0fdf4",display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0,marginTop:2},children:Ot.jsx(lucideReact.Check,{style:{width:13,height:13,color:"#9ca3af"}})}),Ot.jsxs("div",{style:{backgroundColor:"#f9fafb",borderRadius:"4px 12px 12px 12px",padding:"8px 12px",fontSize:13,color:"#6b7280",fontWeight:500,display:"flex",alignItems:"center",gap:6,maxWidth:"75%"},children:[Ot.jsx("span",{style:{flex:1},children:A.text}),m&&L===F.length-1&&e!=="running"&&Ot.jsxs("button",{onClick:H=>{H.stopPropagation(),Lt();},onMouseEnter:()=>P(L),onMouseLeave:()=>P(null),disabled:W,style:{position:"relative",padding:2,borderRadius:4,border:"none",background:v===L?"rgba(0,0,0,0.06)":"transparent",color:v===L?"#6b7280":"#d1d5db",cursor:W?"default":"pointer",display:"flex",alignItems:"center",justifyContent:"center",transition:"color 0.15s, background 0.15s",opacity:W?.4:1,flexShrink:0},children:[Ot.jsx(lucideReact.Undo2,{style:{width:12,height:12}}),v===L&&Ot.jsx("span",{style:{position:"absolute",bottom:"calc(100% + 4px)",right:0,fontSize:10,fontWeight:500,color:"#fff",background:"#374151",borderRadius:4,padding:"2px 6px",whiteSpace:"nowrap",pointerEvents:"none",lineHeight:"16px"},children:"Undo"})]})]})]})},L))}),e==="running"&&Ot.jsx("div",{style:{padding:16},children:Ot.jsxs("div",{onClick:()=>q(!O),style:{backgroundColor:"#1a1a2e",borderRadius:12,overflow:"hidden",cursor:"pointer",transition:"all 0.3s cubic-bezier(0.22, 1, 0.36, 1)"},children:[Ot.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"10px 14px"},children:[Ot.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,minWidth:0},children:[Ot.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"#6b7280",strokeWidth:"2.5",strokeLinecap:"round",style:{animation:"__fork-spin 2s linear infinite",flexShrink:0},children:Ot.jsx("path",{d:"M21 12a9 9 0 1 1-6.219-8.56"})}),Ot.jsx(Cr,{events:r})]}),Ot.jsx("div",{style:{color:"#6b7280",flexShrink:0,marginLeft:8,transition:"transform 0.2s ease",transform:O?"rotate(180deg)":"rotate(0deg)"},children:Ot.jsx(lucideReact.ChevronDown,{style:{width:14,height:14}})})]}),Ot.jsx("div",{style:{maxHeight:O?320:0,opacity:O?1:0,transition:"max-height 0.35s cubic-bezier(0.22, 1, 0.36, 1), opacity 0.25s ease",overflow:"hidden"},children:Ot.jsx("div",{style:{borderTop:"1px solid rgba(255,255,255,0.08)",maxHeight:320,overflowY:"auto"},children:Ot.jsx(bt,{events:r})})})]})}),e==="error"&&Ot.jsxs("div",{style:{padding:"20px 16px",textAlign:"center"},children:[Ot.jsx("div",{style:{width:36,height:36,backgroundColor:"#fef2f2",borderRadius:"50%",display:"flex",alignItems:"center",justifyContent:"center",margin:"0 auto 10px auto"},children:Ot.jsx(lucideReact.X,{style:{width:18,height:18,color:"#ef4444"}})}),Ot.jsx("p",{style:{fontSize:12,color:"#6b7280",marginBottom:10,maxWidth:260,margin:"0 auto 10px auto"},children:o}),Ot.jsxs("button",{onClick:()=>{let A=t?.prompt||_e.current;A&&d(A,X);},onMouseEnter:()=>V(true),onMouseLeave:()=>V(false),style:{display:"inline-flex",alignItems:"center",gap:6,padding:"6px 12px",borderRadius:8,fontSize:12,fontWeight:500,color:"#4f46e5",backgroundColor:K?"#e0e7ff":"#eef2ff",border:"none",cursor:"pointer",transition:"background-color 0.15s",fontFamily:"inherit"},children:[Ot.jsx(lucideReact.RotateCcw,{style:{width:12,height:12}})," Try Again"]})]})]}),e!=="running"&&Ot.jsx("div",{style:{padding:"8px 12px 12px 12px",borderTop:"1px solid rgba(229, 231, 235, 0.6)",flexShrink:0},children:Ot.jsxs("div",{style:{display:"flex",alignItems:"flex-end",gap:6,borderRadius:12,padding:"8px 8px 8px 12px",background:"rgba(0, 0, 0, 0.04)",border:"1px solid rgba(0, 0, 0, 0.06)"},children:[Ot.jsx("textarea",{ref:Z,value:R,onChange:A=>{C(A.target.value),A.target.style.height="auto",A.target.style.height=Math.min(A.target.scrollHeight,160)+"px";},onKeyDown:A=>{A.key==="Enter"&&!A.shiftKey&&(A.preventDefault(),Ze()),A.key==="Escape"&&!T&&Me();},placeholder:F.length>0?"Ask for another change...":`Describe your ideal ${Pe.toLowerCase()}...`,rows:1,style:{flex:1,backgroundColor:"transparent",fontSize:13,color:"#111827",border:"none",outline:"none",padding:"0 4px 0 0",fontFamily:"inherit",resize:"none",lineHeight:1.5,maxHeight:160,overflow:"auto"}}),Ot.jsx("button",{onClick:Ze,disabled:!R.trim(),onMouseEnter:()=>U(true),onMouseLeave:()=>U(false),style:{width:26,height:26,borderRadius:"50%",display:"flex",alignItems:"center",justifyContent:"center",color:"#ffffff",opacity:R.trim()?1:.25,transform:B&&R.trim()?"scale(1.1)":"scale(1)",background:R.trim()?"#1c4587":"rgba(0,0,0,0.12)",border:"none",cursor:R.trim()?"pointer":"default",flexShrink:0,transition:"transform 0.15s, opacity 0.15s",padding:0},children:Ot.jsx(lucideReact.ArrowUp,{style:{width:13,height:13}})})]})})]})]});return T?Qe:Ot.jsx(Tr,{children:Qe})}function vt(e){if("target"in e&&e.target)return e.target;if("boundaryId"in e&&e.boundaryId)return {type:"boundary",id:e.boundaryId,title:e.title};if("slotId"in e&&e.slotId)return {type:"slot",id:e.slotId,title:e.title??e.slotLabel};throw new Error("Fork chat target requires either target, slotId, or boundaryId.")}function ze(e){let{apiKey:t,userId:r,userHash:o,baseUrl:n,appId:i,refreshModuleManifest:s,queueBoundaryAnimation:a}=j(),[b,d]=He.useState("idle"),[m,S]=He.useState(null),[_,w]=He.useState([]),[h,l]=He.useState(null),$=He.useRef(null),T=He.useCallback(()=>{d("prompting"),w([]),l(null),S(null);},[]),R=He.useCallback(()=>{d("idle"),$.current&&($.current.close(),$.current=null);},[]),C=He.useCallback(async y=>{try{if(!i)throw new Error("ForkProvider requires appId for module boundary prompts.");d("running"),w([]),l(null);let E={userId:r,prompt:y,boundaryId:e,appId:i};o&&(E.userHash=o);let c=await fetch(`${n}/api/v1/forks`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:JSON.stringify(E)});if(!c.ok){let f=await c.json().catch(()=>({}));throw new Error(f.error||`API error: ${c.status}`)}let u=await c.json();S(u);let x=new URLSearchParams({key:t});o&&(x.set("userId",r),x.set("userHash",o));let k=new EventSource(`${n}/api/v1/forks/${u.id}/events?${x.toString()}`);$.current=k,k.onmessage=f=>{try{let g=JSON.parse(f.data);if(w(p=>[...p,g]),g.type==="complete"){let p=g.data;a(e,u.id),s().catch(()=>{}).finally(()=>{let B={...u,status:"complete",moduleUrl:p.moduleUrl,cssUrls:p.cssUrls,summary:p.summary,completedAt:new Date().toISOString()};S(B),d("complete"),k.close();});}else if(g.type==="error"){let p=g.data;l(p.error||"Unknown error"),d("error"),k.close();}}catch{}},k.onerror=()=>{fetch(`${n}/api/v1/forks/${u.id}`,{headers:{Authorization:`Bearer ${t}`}}).then(f=>f.json()).then(f=>{S(f),f.status==="complete"?(a(e,f.id),s().catch(()=>{}),d("complete")):f.status==="error"&&(l(f.error||"Fork generation failed"),d("error"));}).catch(()=>{l("Connection lost"),d("error");}),k.close();};}catch(E){l(E.message),d("error");}},[t,i,n,e,a,s,o,r]),F=He.useCallback(async()=>{try{if(!i)throw new Error("ForkProvider requires appId for boundary undo.");let y={userId:r,boundaryId:e,appId:i};o&&(y.userHash=o);let E=await fetch(`${n}/api/v1/forks/undo`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:JSON.stringify(y)});if(!E.ok){let u=await E.json().catch(()=>({}));throw new Error(u.error||`API error: ${E.status}`)}let c=await E.json();return await s().catch(()=>{}),c.removed?(S(null),d("prompting")):c.fork&&(S(c.fork),d("complete")),c}catch(y){throw l(y.message),y}},[t,i,n,e,s,o,r]);return {state:b,fork:m,events:_,error:h,open:T,close:R,startFork:C,undoFork:F}}function St(e){let{state:t,fork:r,events:o,error:n,open:i,close:s,startFork:a,undoFork:b}=ze(e);return {state:t,fork:r,events:o,error:n,isOpen:t!=="idle",open:i,close:s,submit:a,undo:b}}function We(){let{apiKey:e,userId:t,userHash:r,baseUrl:o,setSlotFork:n,clearSlotFork:i,skipAnimationForSlot:s}=j(),[a,b]=He.useState("idle"),[d,m]=He.useState(null),[S,_]=He.useState([]),[w,h]=He.useState(null),l=He.useRef(null),$=He.useCallback(()=>{b("prompting"),_([]),h(null),m(null);},[]),T=He.useCallback(()=>{b("idle"),l.current&&(l.current.close(),l.current=null);},[]),R=He.useCallback(async(F,y)=>{try{b("running"),_([]),h(null);let E={userId:t,prompt:F};y&&(E.slotId=y),r&&(E.userHash=r);let c=await fetch(`${o}/api/v1/forks`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`},body:JSON.stringify(E)});if(!c.ok){let f=await c.json().catch(()=>({}));throw new Error(f.error||`API error: ${c.status}`)}let u=await c.json();m(u);let x=new URLSearchParams({key:e});r&&(x.set("userId",t),x.set("userHash",r));let k=new EventSource(`${o}/api/v1/forks/${u.id}/events?${x.toString()}`);l.current=k,k.onmessage=f=>{try{let g=JSON.parse(f.data);if(_(p=>[...p,g]),g.type==="complete"){let p=g.data,B={...u,status:"complete",bundleUrl:p.bundleUrl,summary:p.summary,completedAt:new Date().toISOString()};m(B),b("complete"),y&&p.bundleUrl&&n(y,B),k.close();}else if(g.type==="error"){let p=g.data;h(p.error||"Unknown error"),b("error"),k.close();}}catch{}},k.onerror=()=>{fetch(`${o}/api/v1/forks/${u.id}`,{headers:{Authorization:`Bearer ${e}`}}).then(f=>f.json()).then(f=>{m(f),f.status==="complete"?(b("complete"),y&&f.bundleUrl&&n(y,f)):f.status==="error"&&(h(f.error||"Fork generation failed"),b("error"));}).catch(()=>{h("Connection lost"),b("error");}),k.close();};}catch(E){h(E.message),b("error");}},[e,t,r,o,n]),C=He.useCallback(async F=>{try{let y={userId:t,slotId:F};r&&(y.userHash=r);let E=await fetch(`${o}/api/v1/forks/undo`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`},body:JSON.stringify(y)});if(!E.ok){let u=await E.json().catch(()=>({}));throw new Error(u.error||`API error: ${E.status}`)}let c=await E.json();return s(F),c.removed?(i(F),m(null),b("prompting")):c.fork&&(n(F,c.fork),m(c.fork)),c}catch(y){throw h(y.message),y}},[e,t,r,o,i,n]);return {state:a,fork:d,events:S,error:w,open:$,close:T,startFork:R,undoFork:C}}function Ft(){let{state:e,fork:t,events:r,error:o,open:n,close:i,startFork:s,undoFork:a}=We();return {state:e,fork:t,events:r,error:o,isOpen:e!=="idle",open:n,close:i,submit:s,undo:a}}function Ke(e){let t=vt(e),r=Ft(),o=St(t.type==="boundary"?t.id:""),{baseUrl:n,apiKey:i,userId:s,userHash:a,appId:b}=j(),d=t.type==="slot"?r:o,m=t.type==="slot"?"slot":"boundary",S=t.id,_=t.title,w=He.useCallback((l,$)=>t.type==="slot"?r.submit(l,$??t.id):o.submit(l),[o,r,t]),h=He.useCallback(l=>t.type==="slot"?r.undo(l??t.id):o.undo(),[o,r,t]);return {...d,target:t,targetId:S,targetLabel:_,historyMode:m,submit:w,undo:h,buttonProps:{onClick:d.open},panelProps:{state:d.state,fork:d.fork,events:d.events,error:d.error,...t.type==="slot"?{slotId:S,targetLabel:_,historyMode:m}:{targetId:S,targetLabel:_,historyMode:m},onSubmit:w,onUndo:h,onClose:d.close,baseUrl:n,apiKey:i,userId:s,userHash:a,appId:b}}}function me(e){let{examplePrompts:t,embedded:r}=e,o=Ke(e);return r?Ot.jsx(xe,{...o.panelProps,examplePrompts:t,embedded:true}):o.isOpen?Ot.jsx(xe,{...o.panelProps,examplePrompts:t}):Ot.jsx(De,{...o.buttonProps})}function Lr({boundaryId:e,title:t,examplePrompts:r}){return Ot.jsx(me,{boundaryId:e,title:t,examplePrompts:r})}function Ve(e){let t=Array.from(e.children).filter(o=>o instanceof HTMLElement);return t.length===1?t[0]:getComputedStyle(e).display==="contents"?null:e}function Rt(e){let t=e.getBoundingClientRect(),r=e.cloneNode(true);r.style.position="fixed",r.style.top=`${t.top}px`,r.style.left=`${t.left}px`,r.style.width=`${t.width}px`,r.style.height=`${t.height}px`,r.style.flex="none",r.style.minHeight="auto",r.style.zIndex="9998",r.style.pointerEvents="none",r.style.overflow="hidden";let o=getComputedStyle(e).backgroundColor;r.style.backgroundColor=o&&o!=="rgba(0, 0, 0, 0)"&&o!=="transparent"?o:getComputedStyle(document.body).backgroundColor||"#ffffff",document.body.appendChild(r);let n=e.querySelectorAll("*"),i=r.querySelectorAll("*");for(let s=0;s<n.length;s+=1)n[s].scrollTop!==0&&(i[s].scrollTop=n[s].scrollTop),n[s].scrollLeft!==0&&(i[s].scrollLeft=n[s].scrollLeft);return r}function qe(e){let t=[],r=e.querySelectorAll("*");for(let o of r){if(!(o instanceof HTMLElement))continue;let n=o.getBoundingClientRect();if(n.width<10||n.height<10||["SCRIPT","STYLE","META","LINK"].includes(o.tagName))continue;let i=getComputedStyle(o),s=parseFloat(i.borderTopLeftRadius)||0;t.push({tag:o.tagName,className:o.className||"",text:(o.textContent||"").slice(0,50).trim(),rect:n,borderRadius:s});}return t}function Et(e,t){let r=[];for(let o of t)if(!(e.find(s=>s.tag===o.tag&&s.className===o.className&&Math.abs(s.rect.top-o.rect.top)<20&&Math.abs(s.rect.left-o.rect.left)<20)||r.some(s=>o.rect.top>=s.rect.top&&o.rect.left>=s.rect.left&&o.rect.right<=s.rect.right&&o.rect.bottom<=s.rect.bottom))){for(let s=r.length-1;s>=0;s-=1){let a=r[s];a.rect.top>=o.rect.top&&a.rect.left>=o.rect.left&&a.rect.right<=o.rect.right&&a.rect.bottom<=o.rect.bottom&&r.splice(s,1);}r.push({rect:o.rect,borderRadius:o.borderRadius});}return r}function $t(e,t){let r=[];for(let o of e)if(!(t.find(s=>s.tag===o.tag&&s.className===o.className&&Math.abs(s.rect.top-o.rect.top)<20&&Math.abs(s.rect.left-o.rect.left)<20)||r.some(s=>o.rect.top>=s.rect.top&&o.rect.left>=s.rect.left&&o.rect.right<=s.rect.right&&o.rect.bottom<=s.rect.bottom))){for(let s=r.length-1;s>=0;s-=1){let a=r[s];a.rect.top>=o.rect.top&&a.rect.left>=o.rect.left&&a.rect.right<=o.rect.right&&a.rect.bottom<=o.rect.bottom&&r.splice(s,1);}r.push({rect:o.rect,borderRadius:o.borderRadius});}return r}function At(e,t,r,o,n){let i=Math.max(0,Math.min(n,r/2,o/2));return i===0?`M ${e} ${t} L ${e+r} ${t} L ${e+r} ${t+o} L ${e} ${t+o} Z`:[`M ${e+i} ${t}`,`L ${e+r-i} ${t}`,`A ${i} ${i} 0 0 1 ${e+r} ${t+i}`,`L ${e+r} ${t+o-i}`,`A ${i} ${i} 0 0 1 ${e+r-i} ${t+o}`,`L ${e+i} ${t+o}`,`A ${i} ${i} 0 0 1 ${e} ${t+o-i}`,`L ${e} ${t+i}`,`A ${i} ${i} 0 0 1 ${e+i} ${t}`,"Z"].join(" ")}function Je(e){let t="http://www.w3.org/2000/svg",r=document.createElement("div");r.setAttribute("data-fork-highlights","true"),r.style.cssText="position:fixed;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:9999;";let o=document.createElementNS(t,"svg");o.setAttribute("width","100%"),o.setAttribute("height","100%"),o.style.cssText="position:absolute;top:0;left:0;overflow:visible;";let n=document.createElementNS(t,"defs");o.appendChild(n);let i=[];for(let m=0;m<e.length;m+=1){let{rect:S,borderRadius:_}=e[m],w=S.left-.5,h=S.top-.5,l=S.width+1,$=S.height+1,T=Math.min(_+.5,l/2,$/2),R=At(w,h,l,$,T),C=`__fork-glow-${m}`,F=document.createElementNS(t,"filter");F.setAttribute("id",C),F.setAttribute("x","-100%"),F.setAttribute("y","-100%"),F.setAttribute("width","300%"),F.setAttribute("height","300%");let y=document.createElementNS(t,"feGaussianBlur");y.setAttribute("in","SourceGraphic"),y.setAttribute("stdDeviation","8"),F.appendChild(y),n.appendChild(F);let E=`__fork-mask-${m}`,c=document.createElementNS(t,"mask");c.setAttribute("id",E),c.setAttribute("maskUnits","userSpaceOnUse"),c.setAttribute("x",String(w-200)),c.setAttribute("y",String(h-200)),c.setAttribute("width",String(l+400)),c.setAttribute("height",String($+400));let u=document.createElementNS(t,"rect");u.setAttribute("x",String(w-200)),u.setAttribute("y",String(h-200)),u.setAttribute("width",String(l+400)),u.setAttribute("height",String($+400)),u.setAttribute("fill","white"),c.appendChild(u);let x=document.createElementNS(t,"path");x.setAttribute("d",R),x.setAttribute("fill","black"),c.appendChild(x),n.appendChild(c);let k=document.createElementNS(t,"g");k.setAttribute("mask",`url(#${E})`),k.setAttribute("opacity","0");let f=document.createElementNS(t,"g");f.setAttribute("filter",`url(#${C})`);let g=document.createElementNS(t,"path");g.setAttribute("d",R),g.setAttribute("fill","none"),g.setAttribute("stroke","rgba(150, 185, 220, 0.6)"),g.setAttribute("stroke-width","6"),g.setAttribute("stroke-linecap","round"),f.appendChild(g),k.appendChild(f),o.appendChild(k);let p=document.createElementNS(t,"path");p.setAttribute("d",R),p.setAttribute("fill","none"),p.setAttribute("stroke","rgba(150, 185, 220, 0.35)"),p.setAttribute("stroke-width","2"),p.setAttribute("stroke-linecap","round"),p.setAttribute("opacity","0"),o.appendChild(p),i.push(g,p),g.__group=k;}r.appendChild(o),document.body.appendChild(r);let s=[];for(let m=0;m<i.length;m+=2){let S=i[m],_=i[m+1],w=S.__group;if(!w)continue;let h=_.getTotalLength(),l=S.getTotalLength();if(h<=0)continue;let $=h*.35;_.setAttribute("stroke-dasharray",`${$} ${h-$}`),_.setAttribute("stroke-dashoffset","0"),s.push(_.animate([{strokeDashoffset:0,opacity:0,offset:0},{strokeDashoffset:-0.2*h,opacity:.92,offset:.06},{strokeDashoffset:-2*h,opacity:.92,offset:.92},{strokeDashoffset:-2.25*h,opacity:0,offset:1}],{duration:14e3,easing:"ease-in-out",fill:"forwards"}));let T=l*.35;S.setAttribute("stroke-dasharray",`${T} ${l-T}`),S.setAttribute("stroke-dashoffset","0"),s.push(S.animate([{strokeDashoffset:0,offset:0},{strokeDashoffset:-0.2*l,offset:.06},{strokeDashoffset:-2*l,offset:.92},{strokeDashoffset:-2.25*l,offset:1}],{duration:14e3,easing:"ease-in-out",fill:"forwards"})),s.push(w.animate([{opacity:0,offset:0},{opacity:.92,offset:.06},{opacity:.92,offset:.92},{opacity:0,offset:1}],{duration:14e3,easing:"ease-in-out",fill:"forwards"}));}let a=false,b=()=>{if(a)return;a=true,clearTimeout(d);for(let S of s)try{S.cancel();}catch{}let m=r.animate([{opacity:1},{opacity:0}],{duration:400,fill:"forwards"});m.onfinish=()=>r.remove(),window.removeEventListener("click",b);},d=setTimeout(b,14500);return setTimeout(()=>{a||window.addEventListener("click",b);},500),b}function Ct(e){let t="http://www.w3.org/2000/svg",r=document.createElement("div");r.setAttribute("data-fork-removed","true"),r.style.cssText="position:fixed;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:9999;";let o=document.createElementNS(t,"svg");o.setAttribute("width","100%"),o.setAttribute("height","100%"),o.style.cssText="position:absolute;top:0;left:0;overflow:visible;";let n=document.createElementNS(t,"defs"),i=document.createElementNS(t,"filter");i.setAttribute("id","__fork-removed-shadow"),i.setAttribute("x","-10%"),i.setAttribute("y","-10%"),i.setAttribute("width","120%"),i.setAttribute("height","120%");let s=document.createElementNS(t,"feDropShadow");s.setAttribute("dx","0"),s.setAttribute("dy","1"),s.setAttribute("stdDeviation","2"),s.setAttribute("flood-color","rgba(0,0,0,0.15)"),i.appendChild(s),n.appendChild(i),o.appendChild(n);for(let{rect:a,borderRadius:b}of e){let d=document.createElementNS(t,"path");d.setAttribute("d",At(a.left,a.top,a.width,a.height,b)),d.setAttribute("fill","none"),d.setAttribute("stroke","rgba(120, 125, 135, 0.6)"),d.setAttribute("stroke-width","1.5"),d.setAttribute("stroke-dasharray","8 4"),d.setAttribute("stroke-linecap","round"),d.setAttribute("filter","url(#__fork-removed-shadow)"),d.setAttribute("opacity","0"),o.appendChild(d),d.animate([{opacity:0,offset:0},{opacity:.6,offset:.08},{opacity:.05,offset:.45},{opacity:.6,offset:.85},{opacity:.05,offset:1}],{duration:5e3,easing:"ease-in-out",fill:"forwards"});}return r.appendChild(o),document.body.appendChild(r),r}var Te=new Map,Ye=new Map;function Hr(e){return e instanceof Error?e:new Error(typeof e=="string"?e:"Unknown module override error")}function Pt(e,t){let r=(t?e[t]:void 0)??e.default;if(typeof r!="function"){let o=t||"default";throw new Error(`Fork boundary module is missing a React component export: ${o}`)}return r}function Or(e){if(!e||typeof document>"u")return Promise.resolve();let t=Te.get(e);if(t)return t;let r=document.querySelector(`link[data-fork-override-href="${e}"]`);if(r instanceof HTMLLinkElement){let n=r.sheet?Promise.resolve():new Promise((i,s)=>{let a=()=>{r.removeEventListener("load",a),r.removeEventListener("error",b),i();},b=()=>{r.removeEventListener("load",a),r.removeEventListener("error",b),s(new Error(`Failed to load boundary stylesheet: ${e}`));};r.addEventListener("load",a,{once:true}),r.addEventListener("error",b,{once:true});});return Te.set(e,n),n}let o=new Promise((n,i)=>{let s=document.createElement("link");s.rel="stylesheet",s.href=e,s.setAttribute("data-fork-override-href",e),s.onload=()=>n(),s.onerror=()=>{s.remove(),i(new Error(`Failed to load boundary stylesheet: ${e}`));},document.head.appendChild(s);}).catch(n=>{throw Te.delete(e),n});return Te.set(e,o),o}function Ur(e){let t=Ye.get(e);if(t)return t;let r=import(e).catch(o=>{throw Ye.delete(e),o});return Ye.set(e,r),r}async function Dr(e,t,r){if(e)try{await Promise.all(e.cssUrls.map(i=>Or(i)));let n=await Ur(e.moduleUrl);return Pt(n,r)}catch(n){console.error(`[Fork] Failed to load override for boundary "${e.boundaryId}", falling back to original module.`,n);}let o=await t();return Pt(o,r)}function Ir(e){function t(r){let{appId:o,moduleOverridesEnabled:n,moduleManifestReady:i,moduleManifestVersion:s,registerBoundary:a,getBoundaryOverride:b,consumeBoundaryAnimation:d}=j(),[m,S]=He.useState(null),[_,w]=He.useState(null),h=He.useRef(null),l=He.useRef(null),$=He.useRef(null),T=He.useRef(false),R=He.useRef(null),C=He.useRef(null),F=b(e.id),y=F?`override:${F.id}`:"original",E=e.editorMetadata?JSON.stringify(e.editorMetadata):void 0;if(He.useEffect(()=>()=>{C.current&&(clearTimeout(C.current),C.current=null),R.current&&(R.current.remove(),R.current=null);},[]),He.useEffect(()=>{a({id:e.id,exportName:e.exportName,editorMetadata:e.editorMetadata});},[o,a,e.id,e.exportName,E]),He.useEffect(()=>{if(n&&!i&&!m||l.current===y&&m)return;let c=false;return w(null),Dr(F,e.original,e.exportName).then(u=>{if(!c){if(F?.id&&d(e.id,F.id)&&h.current){let x=Ve(h.current);if(x){let k=qe(x);k.length>0&&($.current=k,T.current=true,C.current&&(clearTimeout(C.current),C.current=null),R.current&&R.current.remove(),R.current=Rt(x));}}l.current=y,He.startTransition(()=>{S(()=>u);});}}).catch(u=>{c||w(Hr(u));}),()=>{c=true;}},[d,y,n,i,s,F?.id,F?.moduleUrl,F?.integrity,F?.cssUrls.join("|"),e.exportName,e.original,m]),He.useEffect(()=>{if(!T.current||!m||!h.current)return;let c=false;return requestAnimationFrame(()=>{requestAnimationFrame(()=>{if(c||!h.current)return;let u=$.current,x=Ve(h.current);if($.current=null,T.current=false,!u||!x){R.current&&(R.current.remove(),R.current=null);return}let k=qe(x),f=Et(u,k),g=$t(u,k),p=R.current;if(g.length>0&&p){let B=Ct(g);C.current=setTimeout(()=>{C.current=null;let U=400;p.animate([{opacity:1},{opacity:0}],{duration:U,fill:"forwards"}),B.animate([{opacity:1},{opacity:0}],{duration:U,fill:"forwards"}),setTimeout(()=>{p.remove(),B.remove(),R.current===p&&(R.current=null),f.length>0&&Je(f);},U);},3500);}else p&&(p.remove(),R.current===p&&(R.current=null)),f.length>0&&Je(f);});}),()=>{c=true;}},[m]),_)throw _;return m?Ot.jsx("div",{ref:h,style:{display:"contents"},children:Ot.jsx(m,{...r})}):Ot.jsx(Ot.Fragment,{children:e.loading??null})}return t.displayName=`ForkBoundary(${e.id})`,t}function zr({slotId:e,title:t,slotLabel:r,examplePrompts:o}){return Ot.jsx(me,{slotId:e,title:t,slotLabel:r,examplePrompts:o})}
44
- exports.ForkBoundaryUI=Lr;exports.ForkButton=De;exports.ForkChatInterface=me;exports.ForkPanel=xe;exports.ForkProvider=zt;exports.ForkSlot=rr;exports.ForkUI=zr;exports.forkable=Ir;exports.registerForkShared=Be;exports.useBoundaryFork=ze;exports.useFork=We;exports.useForkChatPanel=Ke;
43
+ `}),Vr.jsxs("div",{className:"__fork-panel",style:zr,children:[Vr.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"12px 16px",borderBottom:"1px solid rgba(229, 231, 235, 0.8)",flexShrink:0},children:[Vr.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,minWidth:0,flex:1},children:[Vr.jsx(Ke,{style:{width:16,height:16,color:"#1c4587",cursor:"pointer",flexShrink:0},onDoubleClick:async a=>{if(a.stopPropagation(),!T&&confirm("Reset all forks? This will remove all forked components.")){M(true);try{let E=await Or();`${E?.deleted??0}`,_([]),L(""),ie(!1),lt();}catch(E){console.error("[Fork] Reset failed:",E);}finally{M(false);}}}}),e==="running"?Vr.jsx("span",{style:{fontSize:13,fontWeight:600,color:"#111827",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",minWidth:0},children:Ur}):Vr.jsxs("div",{ref:at,style:{position:"relative",minWidth:0,display:"inline-flex"},children:[Vr.jsxs("button",{type:"button",onClick:()=>{Fe(a=>!a),he(false);},onMouseEnter:()=>Bt(true),onMouseLeave:()=>Bt(false),"aria-haspopup":"menu","aria-expanded":ge,style:{display:"inline-flex",alignItems:"center",gap:4,padding:"3px 6px",border:"1px solid transparent",borderRadius:6,background:Lr||ge?"#f3f4f6":"transparent",fontSize:13,fontWeight:600,color:"#111827",fontFamily:"inherit",cursor:"pointer",maxWidth:180,minWidth:0,transition:"background-color 0.12s"},children:[Vr.jsx("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",minWidth:0},children:I.find(a=>a.id===K)?.name??(ce?`Fork ${st}`:"Loading\u2026")}),Vr.jsx(lucideReact.ChevronDown,{style:{width:12,height:12,color:"#6b7280",flexShrink:0,transform:ge?"rotate(180deg)":void 0,transition:"transform 0.15s"}})]}),ge&&Vr.jsxs("div",{role:"menu",style:{position:"absolute",top:"calc(100% + 4px)",left:0,minWidth:200,maxWidth:260,background:"#ffffff",border:"1px solid #e5e7eb",borderRadius:8,boxShadow:"0 4px 12px rgba(0,0,0,0.08), 0 1px 3px rgba(0,0,0,0.06)",padding:4,zIndex:2147483001},children:[I.map(a=>{let E=a.id===K,B=Br===a.id;return Vr.jsxs("button",{type:"button",role:"menuitem",onMouseEnter:()=>Nt(a.id),onMouseLeave:()=>Nt(null),onClick:()=>{Fe(false),a.id!==K&&rt(a.id);},style:{display:"flex",alignItems:"center",gap:8,width:"100%",padding:"6px 8px",border:"none",background:B?"#f3f4f6":"transparent",borderRadius:4,fontSize:13,fontFamily:"inherit",color:"#111827",cursor:"pointer",textAlign:"left",fontWeight:E?600:400},children:[Vr.jsx("span",{style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:14,height:14,color:"#111827",flexShrink:0},children:E&&Vr.jsx(lucideReact.Check,{style:{width:12,height:12}})}),Vr.jsx("span",{style:{flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:a.name})]},a.id)}),Vr.jsx("div",{style:{height:1,background:"#f3f4f6",margin:"4px 0"}}),Hr?Vr.jsxs("div",{style:{display:"flex",gap:4,padding:"4px 4px 4px 4px",alignItems:"center"},children:[Vr.jsx("input",{autoFocus:true,value:Re,onChange:a=>Ee(a.target.value),onKeyDown:a=>{a.key==="Enter"?(a.preventDefault(),jt()):a.key==="Escape"&&(a.preventDefault(),he(false),Ee(""));},placeholder:"Container name",maxLength:80,style:{flex:1,minWidth:0,padding:"6px 8px",border:"1px solid #e5e7eb",borderRadius:6,fontSize:13,fontFamily:"inherit",outline:"none",background:"#ffffff",color:"#111827"}}),Vr.jsx("button",{type:"button",onClick:()=>{jt();},disabled:!Re.trim(),style:{padding:"6px 10px",border:"none",borderRadius:6,background:Re.trim()?"#111827":"rgba(0,0,0,0.12)",color:"#ffffff",fontSize:12,fontWeight:500,fontFamily:"inherit",cursor:Re.trim()?"pointer":"default",flexShrink:0},children:"Create"})]}):Vr.jsxs("button",{type:"button",role:"menuitem",onMouseEnter:()=>Ht(true),onMouseLeave:()=>Ht(false),onClick:()=>he(true),style:{display:"flex",alignItems:"center",gap:8,width:"100%",padding:"6px 8px",border:"none",background:Nr?"#f3f4f6":"transparent",borderRadius:4,fontSize:13,fontFamily:"inherit",color:"#374151",cursor:"pointer",textAlign:"left"},children:[Vr.jsx("span",{style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:14,height:14,color:"#374151",fontWeight:600,fontSize:14,flexShrink:0},children:"+"}),Vr.jsx("span",{style:{flex:1},children:"New container\u2026"})]})]})]}),e==="running"&&Vr.jsx("span",{title:ue?`Estimated ~${ue} min`:"Estimating\u2026",style:{fontSize:10,fontWeight:600,color:ue?"#1c4587":"#9ca3af",backgroundColor:ue?"rgba(28, 69, 135, 0.08)":"rgba(156, 163, 175, 0.12)",padding:"1px 6px",borderRadius:999,flexShrink:0,fontVariantNumeric:"tabular-nums",animation:ue?void 0:"__fork-pulse 1.4s ease-in-out infinite",minWidth:28,textAlign:"center"},children:ue?`~${ue}m`:"~ m"}),e==="complete"&&Vr.jsx("div",{style:{height:6,width:6,backgroundColor:"#1c4587",borderRadius:"50%",flexShrink:0}})]}),!A&&Vr.jsxs("div",{style:{display:"flex",alignItems:"center",gap:2,flexShrink:0},children:[Dt&&Vr.jsx("button",{onClick:ne?Dr:Ir,onMouseEnter:()=>O(true),onMouseLeave:()=>O(false),title:ne?"Redock to sidebar":"Pop out into window",style:{padding:6,borderRadius:6,color:N?"#4b5563":"#9ca3af",backgroundColor:N?"#f3f4f6":"transparent",border:"none",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",transition:"background-color 0.15s, color 0.15s"},children:ne?Vr.jsx(lucideReact.PictureInPicture,{style:{width:16,height:16}}):Vr.jsx(lucideReact.PictureInPicture2,{style:{width:16,height:16}})}),Vr.jsx("button",{onClick:lt,onMouseEnter:()=>p(true),onMouseLeave:()=>p(false),style:{padding:6,borderRadius:6,color:d?"#4b5563":"#9ca3af",backgroundColor:d?"#f3f4f6":"transparent",border:"none",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",transition:"background-color 0.15s, color 0.15s"},children:Vr.jsx(lucideReact.X,{style:{width:16,height:16}})})]})]}),Vr.jsxs("div",{ref:He,style:{flex:1,overflowY:"auto",minHeight:0,display:"flex",flexDirection:"column"},children:[e==="prompting"&&C.length===0&&Vr.jsxs("div",{style:{padding:"24px 20px",textAlign:"center"},children:[Vr.jsx("p",{style:{fontSize:13,color:"#6b7280",marginBottom:14,lineHeight:1.625,margin:"0 0 14px 0"},children:"Describe the feature you want to build."}),Vr.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:6,justifyContent:"center"},children:R.map((a,E)=>Vr.jsx("button",{onClick:()=>{L(a),Ne.current?.focus();},onMouseEnter:()=>oe(E),onMouseLeave:()=>oe(null),style:{fontSize:12,padding:"5px 12px",borderRadius:9999,color:j===E?"#1f2937":"#6b7280",backgroundColor:j===E?"#f9fafb":"transparent",border:j===E?"1px solid #d1d5db":"1px solid #e5e7eb",cursor:"pointer",transition:"color 0.15s, background-color 0.15s, border-color 0.15s",fontFamily:"inherit"},children:a},a))})]}),C.length>0&&Vr.jsx("div",{style:{padding:"16px 16px 0 16px"},children:C.map((a,E)=>Vr.jsx("div",{style:{marginBottom:E<C.length-1?10:0},children:a.type==="user"?Vr.jsxs("div",{style:{display:"flex",alignItems:"flex-start",gap:8,flexDirection:"row-reverse"},children:[Vr.jsx("div",{style:{width:22,height:22,borderRadius:"50%",backgroundColor:"#e5e7eb",display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0,marginTop:2},children:Vr.jsx(lucideReact.User,{style:{width:13,height:13,color:"#6b7280"}})}),Vr.jsx("div",{style:{backgroundColor:"#f3f4f6",borderRadius:"12px 4px 12px 12px",padding:"8px 12px",fontSize:13,color:"#374151",lineHeight:1.5,maxWidth:"75%"},children:a.text})]}):Vr.jsxs("div",{style:{display:"flex",alignItems:"flex-start",gap:8},children:[Vr.jsx("div",{style:{width:22,height:22,borderRadius:"50%",backgroundColor:"#f0fdf4",display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0,marginTop:2},children:Vr.jsx(lucideReact.Check,{style:{width:13,height:13,color:"#9ca3af"}})}),Vr.jsxs("div",{style:{backgroundColor:"#f9fafb",borderRadius:"4px 12px 12px 12px",padding:"8px 12px",fontSize:13,color:"#6b7280",fontWeight:500,display:"flex",alignItems:"center",gap:6,maxWidth:"75%"},children:[Vr.jsx("span",{style:{flex:1},children:a.text}),f&&E===C.length-1&&e!=="running"&&Vr.jsxs("button",{onClick:B=>{B.stopPropagation(),jr();},onMouseEnter:()=>Be(E),onMouseLeave:()=>Be(null),disabled:W,style:{position:"relative",padding:2,borderRadius:4,border:"none",background:xe===E?"rgba(0,0,0,0.06)":"transparent",color:xe===E?"#6b7280":"#d1d5db",cursor:W?"default":"pointer",display:"flex",alignItems:"center",justifyContent:"center",transition:"color 0.15s, background 0.15s",opacity:W?.4:1,flexShrink:0},children:[Vr.jsx(lucideReact.Undo2,{style:{width:12,height:12}}),xe===E&&Vr.jsx("span",{style:{position:"absolute",bottom:"calc(100% + 4px)",right:0,fontSize:10,fontWeight:500,color:"#fff",background:"#374151",borderRadius:4,padding:"2px 6px",whiteSpace:"nowrap",pointerEvents:"none",lineHeight:"16px"},children:"Undo"})]})]})]})},E))}),e==="running"&&Vr.jsx("div",{style:{padding:16},children:Vr.jsxs("div",{onClick:()=>ie(!X),style:{backgroundColor:"#1a1a2e",borderRadius:12,overflow:"hidden",cursor:"pointer",transition:"all 0.3s cubic-bezier(0.22, 1, 0.36, 1)"},children:[Vr.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"10px 14px"},children:[Vr.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,minWidth:0},children:[Vr.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"#6b7280",strokeWidth:"2.5",strokeLinecap:"round",style:{animation:"__fork-spin 2s linear infinite",flexShrink:0},children:Vr.jsx("path",{d:"M21 12a9 9 0 1 1-6.219-8.56"})}),Vr.jsx(Vo,{events:r})]}),Vr.jsx("div",{style:{color:"#6b7280",flexShrink:0,marginLeft:8,transition:"transform 0.2s ease",transform:X?"rotate(180deg)":"rotate(0deg)"},children:Vr.jsx(lucideReact.ChevronDown,{style:{width:14,height:14}})})]}),Vr.jsx("div",{style:{maxHeight:X?320:0,opacity:X?1:0,transition:"max-height 0.35s cubic-bezier(0.22, 1, 0.36, 1), opacity 0.25s ease",overflow:"hidden"},children:Vr.jsx("div",{style:{borderTop:"1px solid rgba(255,255,255,0.08)",maxHeight:320,overflowY:"auto"},children:Vr.jsx(hr,{events:r})})})]})}),e==="error"&&Vr.jsxs("div",{style:{padding:"20px 16px",textAlign:"center"},children:[Vr.jsx("div",{style:{width:36,height:36,backgroundColor:"#fef2f2",borderRadius:"50%",display:"flex",alignItems:"center",justifyContent:"center",margin:"0 auto 10px auto"},children:Vr.jsx(lucideReact.X,{style:{width:18,height:18,color:"#ef4444"}})}),Vr.jsx("p",{style:{fontSize:12,color:"#6b7280",marginBottom:10,maxWidth:260,margin:"0 auto 10px auto"},children:o}),Vr.jsxs("button",{onClick:()=>{let a=t?.prompt||it.current;a&&m(a,se);},onMouseEnter:()=>re(true),onMouseLeave:()=>re(false),style:{display:"inline-flex",alignItems:"center",gap:6,padding:"6px 12px",borderRadius:8,fontSize:12,fontWeight:500,color:"#4f46e5",backgroundColor:Z?"#e0e7ff":"#eef2ff",border:"none",cursor:"pointer",transition:"background-color 0.15s",fontFamily:"inherit"},children:[Vr.jsx(lucideReact.RotateCcw,{style:{width:12,height:12}})," Try Again"]})]})]}),e!=="running"&&Vr.jsx("div",{style:{padding:"8px 12px 12px 12px",borderTop:"1px solid rgba(229, 231, 235, 0.6)",flexShrink:0},children:Vr.jsxs("div",{style:{display:"flex",alignItems:"flex-end",gap:6,borderRadius:12,padding:"8px 8px 8px 12px",background:"rgba(0, 0, 0, 0.04)",border:"1px solid rgba(0, 0, 0, 0.06)"},children:[Vr.jsx("textarea",{ref:Ne,value:x,onChange:a=>{L(a.target.value),a.target.style.height="auto",a.target.style.height=Math.min(a.target.scrollHeight,160)+"px";},onKeyDown:a=>{a.key==="Enter"&&!a.shiftKey&&(a.preventDefault(),Ut()),a.key==="Escape"&&!A&&lt();},placeholder:C.length>0?"Ask for another change...":`Describe your ideal ${st.toLowerCase()}...`,rows:1,style:{flex:1,backgroundColor:"transparent",fontSize:13,color:"#111827",border:"none",outline:"none",padding:"0 4px 0 0",fontFamily:"inherit",resize:"none",lineHeight:1.5,maxHeight:160,overflow:"auto"}}),Vr.jsx("button",{onClick:Ut,disabled:!x.trim(),onMouseEnter:()=>J(true),onMouseLeave:()=>J(false),style:{width:26,height:26,borderRadius:"50%",display:"flex",alignItems:"center",justifyContent:"center",color:"#ffffff",opacity:x.trim()?1:.25,transform:U&&x.trim()?"scale(1.1)":"scale(1)",background:x.trim()?"#1c4587":"rgba(0,0,0,0.12)",border:"none",cursor:x.trim()?"pointer":"default",flexShrink:0,transition:"transform 0.15s, opacity 0.15s",padding:0},children:Vr.jsx(lucideReact.ArrowUp,{style:{width:13,height:13}})})]})})]})]});return A?ct:ne&&ye?Gr.createPortal(ct,ye.document.body):Vr.jsx(qo,{children:ct})}function xr(e){if("target"in e&&e.target)return e.target;if("boundaryId"in e&&e.boundaryId)return {type:"boundary",id:e.boundaryId,title:e.title};if("slotId"in e&&e.slotId)return {type:"slot",id:e.slotId,title:e.title??e.slotLabel};throw new Error("Fork chat target requires either target, slotId, or boundaryId.")}function Et(e){let{apiKey:t,userId:r,userHash:o,baseUrl:n,appId:i,previewSession:s,refreshModuleManifest:l,queueBoundaryAnimation:R}=G(),[m,f]=wt.useState("idle"),[S,P]=wt.useState(null),[y,k]=wt.useState([]),[h,w]=wt.useState(null),A=wt.useRef(null),x=wt.useCallback(()=>{f("prompting"),k([]),w(null),P(null);},[]),L=wt.useCallback(()=>{f("idle"),A.current&&(A.current.close(),A.current=null);},[]);wt.useEffect(()=>{s&&s.target.kind==="module"&&s.target.id===e&&f(v=>v==="idle"?"prompting":v);},[s?.preview_session_id,s?.target.id,e]);let C=wt.useCallback(async(v,g)=>{try{if(!i)throw new Error("ForkProvider requires appId for module boundary prompts.");f("running"),k([]),w(null);let c;if(s){let u=await fetch(`${n}/api/v1/preview/${encodeURIComponent(s.preview_session_id)}/author`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`,...Q()},body:JSON.stringify({prompt:v,...s.fork_id?{fork_id:s.fork_id}:{}})});if(!u.ok){let N=await u.json().catch(()=>({}));throw new Error(N.error||`API error: ${u.status}`)}let d=await u.json();Pe(d.fork_id),c=await(await fetch(`${n}/api/v1/forks/${d.fork_id}`,{headers:{Authorization:`Bearer ${t}`,...Q()}})).json();}else {let u={userId:r,prompt:v,boundaryId:e,appId:i};g&&(u.containerId=g),o&&(u.userHash=o);let d=await fetch(`${n}/api/v1/forks`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:JSON.stringify(u)});if(!d.ok){let p=await d.json().catch(()=>({}));throw new Error(p.error||`API error: ${d.status}`)}c=await d.json();}P(c);let F=new URLSearchParams({key:t});o&&(F.set("userId",r),F.set("userHash",o));let b=new EventSource(`${n}/api/v1/forks/${c.id}/events?${F.toString()}`);A.current=b,b.onmessage=u=>{try{let d=JSON.parse(u.data);if(k(p=>[...p,d]),d.type==="complete"){let p=d.data;R(e,c.id),l().catch(()=>{}).finally(()=>{let N={...c,status:"complete",moduleUrl:p.moduleUrl,cssUrls:p.cssUrls,summary:p.summary,completedAt:new Date().toISOString()};P(N),f("complete"),b.close();});}else if(d.type==="error"){let p=d.data;w(p.error||"Unknown error"),f("error"),b.close();}}catch{}},b.onerror=()=>{fetch(`${n}/api/v1/forks/${c.id}`,{headers:{Authorization:`Bearer ${t}`}}).then(u=>u.json()).then(u=>{P(u),u.status==="complete"?(R(e,u.id),l().catch(()=>{}),f("complete")):u.status==="error"&&(w(u.error||"Fork generation failed"),f("error"));}).catch(()=>{w("Connection lost"),f("error");}),b.close();};}catch(c){w(c.message),f("error");}},[t,i,n,e,s,R,l,o,r]),_=wt.useCallback(async()=>{try{if(!i)throw new Error("ForkProvider requires appId for boundary undo.");let v={userId:r,boundaryId:e,appId:i};o&&(v.userHash=o);let g=await fetch(`${n}/api/v1/forks/undo`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:JSON.stringify(v)});if(!g.ok){let F=await g.json().catch(()=>({}));throw new Error(F.error||`API error: ${g.status}`)}let c=await g.json();return await l().catch(()=>{}),c.removed?(P(null),f("prompting")):c.fork&&(P(c.fork),f("complete")),c}catch(v){throw w(v.message),v}},[t,i,n,e,l,o,r]);return {state:m,fork:S,events:y,error:h,open:x,close:L,startFork:C,undoFork:_}}function Fr(e){let{state:t,fork:r,events:o,error:n,open:i,close:s,startFork:l,undoFork:R}=Et(e);return {state:t,fork:r,events:o,error:n,isOpen:t!=="idle",open:i,close:s,submit:l,undo:R}}function $t(){let{apiKey:e,userId:t,userHash:r,baseUrl:o,previewSession:n,setSlotFork:i,clearSlotFork:s,skipAnimationForSlot:l}=G(),[R,m]=wt.useState("idle"),[f,S]=wt.useState(null),[P,y]=wt.useState([]),[k,h]=wt.useState(null),w=wt.useRef(null),A=wt.useCallback(()=>{m("prompting"),y([]),h(null),S(null);},[]),x=wt.useCallback(()=>{m("idle"),w.current&&(w.current.close(),w.current=null);},[]);wt.useEffect(()=>{n&&n.target.kind==="slot"&&m(_=>_==="idle"?"prompting":_);},[n?.preview_session_id,n?.target.kind]);let L=wt.useCallback(async(_,v,g)=>{try{m("running"),y([]),h(null);let c;if(n){let u=await fetch(`${o}/api/v1/preview/${encodeURIComponent(n.preview_session_id)}/author`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`,...Q()},body:JSON.stringify({prompt:_,...n.fork_id?{fork_id:n.fork_id}:{}})});if(!u.ok){let N=await u.json().catch(()=>({}));throw new Error(N.error||`API error: ${u.status}`)}let d=await u.json();Pe(d.fork_id),c=await(await fetch(`${o}/api/v1/forks/${d.fork_id}`,{headers:{Authorization:`Bearer ${e}`,...Q()}})).json();}else {let u={userId:t,prompt:_};v&&(u.slotId=v),g&&(u.containerId=g),r&&(u.userHash=r);let d=await fetch(`${o}/api/v1/forks`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`},body:JSON.stringify(u)});if(!d.ok){let p=await d.json().catch(()=>({}));throw new Error(p.error||`API error: ${d.status}`)}c=await d.json();}S(c);let F=new URLSearchParams({key:e});r&&(F.set("userId",t),F.set("userHash",r));let b=new EventSource(`${o}/api/v1/forks/${c.id}/events?${F.toString()}`);w.current=b,b.onmessage=u=>{try{let d=JSON.parse(u.data);if(y(p=>[...p,d]),d.type==="complete"){let p=d.data,N={...c,status:"complete",bundleUrl:p.bundleUrl,summary:p.summary,completedAt:new Date().toISOString()};S(N),m("complete"),v&&p.bundleUrl&&i(v,N),b.close();}else if(d.type==="error"){let p=d.data;h(p.error||"Unknown error"),m("error"),b.close();}}catch{}},b.onerror=()=>{fetch(`${o}/api/v1/forks/${c.id}`,{headers:{Authorization:`Bearer ${e}`}}).then(u=>u.json()).then(u=>{S(u),u.status==="complete"?(m("complete"),v&&u.bundleUrl&&i(v,u)):u.status==="error"&&(h(u.error||"Fork generation failed"),m("error"));}).catch(()=>{h("Connection lost"),m("error");}),b.close();};}catch(c){h(c.message),m("error");}},[e,t,r,o,n,i]),C=wt.useCallback(async _=>{try{let v={userId:t,slotId:_};r&&(v.userHash=r);let g=await fetch(`${o}/api/v1/forks/undo`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`},body:JSON.stringify(v)});if(!g.ok){let F=await g.json().catch(()=>({}));throw new Error(F.error||`API error: ${g.status}`)}let c=await g.json();return l(_),c.removed?(s(_),S(null),m("prompting")):c.fork&&(i(_,c.fork),S(c.fork)),c}catch(v){throw h(v.message),v}},[e,t,r,o,s,i]);return {state:R,fork:f,events:P,error:k,open:A,close:x,startFork:L,undoFork:C}}function Rr(){let{state:e,fork:t,events:r,error:o,open:n,close:i,startFork:s,undoFork:l}=$t();return {state:e,fork:t,events:r,error:o,isOpen:e!=="idle",open:n,close:i,submit:s,undo:l}}function Pt(e){let t=xr(e),r=Rr(),o=Fr(t.type==="boundary"?t.id:""),{baseUrl:n,apiKey:i,userId:s,userHash:l,appId:R}=G(),m=t.type==="slot"?r:o,f=t.type==="slot"?"slot":"boundary",S=t.id,P=t.title,y=wt.useCallback((h,w,A)=>t.type==="slot"?r.submit(h,w??t.id,A):o.submit(h,A),[o,r,t]),k=wt.useCallback(h=>t.type==="slot"?r.undo(h??t.id):o.undo(),[o,r,t]);return {...m,target:t,targetId:S,targetLabel:P,historyMode:f,submit:y,undo:k,buttonProps:{onClick:m.open},panelProps:{state:m.state,fork:m.fork,events:m.events,error:m.error,...t.type==="slot"?{slotId:S,targetLabel:P,historyMode:f}:{targetId:S,targetLabel:P,historyMode:f},onSubmit:y,onUndo:k,onClose:m.close,baseUrl:n,apiKey:i,userId:s,userHash:l,appId:R}}}function Me(e){let{examplePrompts:t,embedded:r}=e,o=Pt(e);return r?Vr.jsx(Je,{...o.panelProps,examplePrompts:t,embedded:true}):o.isOpen?Vr.jsx(Je,{...o.panelProps,examplePrompts:t}):Vr.jsx(xt,{...o.buttonProps})}function en({boundaryId:e,title:t,examplePrompts:r}){return Vr.jsx(Me,{boundaryId:e,title:t,examplePrompts:r})}function _t(e){let t=Array.from(e.children).filter(o=>o instanceof HTMLElement);return t.length===1?t[0]:getComputedStyle(e).display==="contents"?null:e}function $r(e){let t=e.getBoundingClientRect(),r=e.cloneNode(true);r.style.position="fixed",r.style.top=`${t.top}px`,r.style.left=`${t.left}px`,r.style.width=`${t.width}px`,r.style.height=`${t.height}px`,r.style.flex="none",r.style.minHeight="auto",r.style.zIndex="9998",r.style.pointerEvents="none",r.style.overflow="hidden";let o=getComputedStyle(e).backgroundColor;r.style.backgroundColor=o&&o!=="rgba(0, 0, 0, 0)"&&o!=="transparent"?o:getComputedStyle(document.body).backgroundColor||"#ffffff",document.body.appendChild(r);let n=e.querySelectorAll("*"),i=r.querySelectorAll("*");for(let s=0;s<n.length;s+=1)n[s].scrollTop!==0&&(i[s].scrollTop=n[s].scrollTop),n[s].scrollLeft!==0&&(i[s].scrollLeft=n[s].scrollLeft);return r}function At(e){let t=[],r=e.querySelectorAll("*");for(let o of r){if(!(o instanceof HTMLElement))continue;let n=o.getBoundingClientRect();if(n.width<10||n.height<10||["SCRIPT","STYLE","META","LINK"].includes(o.tagName))continue;let i=getComputedStyle(o),s=parseFloat(i.borderTopLeftRadius)||0;t.push({tag:o.tagName,className:o.className||"",text:(o.textContent||"").slice(0,50).trim(),rect:n,borderRadius:s});}return t}function Pr(e,t){let r=[];for(let o of t)if(!(e.find(s=>s.tag===o.tag&&s.className===o.className&&Math.abs(s.rect.top-o.rect.top)<20&&Math.abs(s.rect.left-o.rect.left)<20)||r.some(s=>o.rect.top>=s.rect.top&&o.rect.left>=s.rect.left&&o.rect.right<=s.rect.right&&o.rect.bottom<=s.rect.bottom))){for(let s=r.length-1;s>=0;s-=1){let l=r[s];l.rect.top>=o.rect.top&&l.rect.left>=o.rect.left&&l.rect.right<=o.rect.right&&l.rect.bottom<=o.rect.bottom&&r.splice(s,1);}r.push({rect:o.rect,borderRadius:o.borderRadius});}return r}function Cr(e,t){let r=[];for(let o of e)if(!(t.find(s=>s.tag===o.tag&&s.className===o.className&&Math.abs(s.rect.top-o.rect.top)<20&&Math.abs(s.rect.left-o.rect.left)<20)||r.some(s=>o.rect.top>=s.rect.top&&o.rect.left>=s.rect.left&&o.rect.right<=s.rect.right&&o.rect.bottom<=s.rect.bottom))){for(let s=r.length-1;s>=0;s-=1){let l=r[s];l.rect.top>=o.rect.top&&l.rect.left>=o.rect.left&&l.rect.right<=o.rect.right&&l.rect.bottom<=o.rect.bottom&&r.splice(s,1);}r.push({rect:o.rect,borderRadius:o.borderRadius});}return r}function _r(e,t,r,o,n){let i=Math.max(0,Math.min(n,r/2,o/2));return i===0?`M ${e} ${t} L ${e+r} ${t} L ${e+r} ${t+o} L ${e} ${t+o} Z`:[`M ${e+i} ${t}`,`L ${e+r-i} ${t}`,`A ${i} ${i} 0 0 1 ${e+r} ${t+i}`,`L ${e+r} ${t+o-i}`,`A ${i} ${i} 0 0 1 ${e+r-i} ${t+o}`,`L ${e+i} ${t+o}`,`A ${i} ${i} 0 0 1 ${e} ${t+o-i}`,`L ${e} ${t+i}`,`A ${i} ${i} 0 0 1 ${e+i} ${t}`,"Z"].join(" ")}function Tt(e){let t="http://www.w3.org/2000/svg",r=document.createElement("div");r.setAttribute("data-fork-highlights","true"),r.style.cssText="position:fixed;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:9999;";let o=document.createElementNS(t,"svg");o.setAttribute("width","100%"),o.setAttribute("height","100%"),o.style.cssText="position:absolute;top:0;left:0;overflow:visible;";let n=document.createElementNS(t,"defs");o.appendChild(n);let i=[];for(let f=0;f<e.length;f+=1){let{rect:S,borderRadius:P}=e[f],y=S.left-.5,k=S.top-.5,h=S.width+1,w=S.height+1,A=Math.min(P+.5,h/2,w/2),x=_r(y,k,h,w,A),L=`__fork-glow-${f}`,C=document.createElementNS(t,"filter");C.setAttribute("id",L),C.setAttribute("x","-100%"),C.setAttribute("y","-100%"),C.setAttribute("width","300%"),C.setAttribute("height","300%");let _=document.createElementNS(t,"feGaussianBlur");_.setAttribute("in","SourceGraphic"),_.setAttribute("stdDeviation","8"),C.appendChild(_),n.appendChild(C);let v=`__fork-mask-${f}`,g=document.createElementNS(t,"mask");g.setAttribute("id",v),g.setAttribute("maskUnits","userSpaceOnUse"),g.setAttribute("x",String(y-200)),g.setAttribute("y",String(k-200)),g.setAttribute("width",String(h+400)),g.setAttribute("height",String(w+400));let c=document.createElementNS(t,"rect");c.setAttribute("x",String(y-200)),c.setAttribute("y",String(k-200)),c.setAttribute("width",String(h+400)),c.setAttribute("height",String(w+400)),c.setAttribute("fill","white"),g.appendChild(c);let F=document.createElementNS(t,"path");F.setAttribute("d",x),F.setAttribute("fill","black"),g.appendChild(F),n.appendChild(g);let b=document.createElementNS(t,"g");b.setAttribute("mask",`url(#${v})`),b.setAttribute("opacity","0");let u=document.createElementNS(t,"g");u.setAttribute("filter",`url(#${L})`);let d=document.createElementNS(t,"path");d.setAttribute("d",x),d.setAttribute("fill","none"),d.setAttribute("stroke","rgba(150, 185, 220, 0.6)"),d.setAttribute("stroke-width","6"),d.setAttribute("stroke-linecap","round"),u.appendChild(d),b.appendChild(u),o.appendChild(b);let p=document.createElementNS(t,"path");p.setAttribute("d",x),p.setAttribute("fill","none"),p.setAttribute("stroke","rgba(150, 185, 220, 0.35)"),p.setAttribute("stroke-width","2"),p.setAttribute("stroke-linecap","round"),p.setAttribute("opacity","0"),o.appendChild(p),i.push(d,p),d.__group=b;}r.appendChild(o),document.body.appendChild(r);let s=[];for(let f=0;f<i.length;f+=2){let S=i[f],P=i[f+1],y=S.__group;if(!y)continue;let k=P.getTotalLength(),h=S.getTotalLength();if(k<=0)continue;let w=k*.35;P.setAttribute("stroke-dasharray",`${w} ${k-w}`),P.setAttribute("stroke-dashoffset","0"),s.push(P.animate([{strokeDashoffset:0,opacity:0,offset:0},{strokeDashoffset:-0.2*k,opacity:.92,offset:.06},{strokeDashoffset:-2*k,opacity:.92,offset:.92},{strokeDashoffset:-2.25*k,opacity:0,offset:1}],{duration:14e3,easing:"ease-in-out",fill:"forwards"}));let A=h*.35;S.setAttribute("stroke-dasharray",`${A} ${h-A}`),S.setAttribute("stroke-dashoffset","0"),s.push(S.animate([{strokeDashoffset:0,offset:0},{strokeDashoffset:-0.2*h,offset:.06},{strokeDashoffset:-2*h,offset:.92},{strokeDashoffset:-2.25*h,offset:1}],{duration:14e3,easing:"ease-in-out",fill:"forwards"})),s.push(y.animate([{opacity:0,offset:0},{opacity:.92,offset:.06},{opacity:.92,offset:.92},{opacity:0,offset:1}],{duration:14e3,easing:"ease-in-out",fill:"forwards"}));}let l=false,R=()=>{if(l)return;l=true,clearTimeout(m);for(let S of s)try{S.cancel();}catch{}let f=r.animate([{opacity:1},{opacity:0}],{duration:400,fill:"forwards"});f.onfinish=()=>r.remove(),window.removeEventListener("click",R);},m=setTimeout(R,14500);return setTimeout(()=>{l||window.addEventListener("click",R);},500),R}function Ar(e){let t="http://www.w3.org/2000/svg",r=document.createElement("div");r.setAttribute("data-fork-removed","true"),r.style.cssText="position:fixed;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:9999;";let o=document.createElementNS(t,"svg");o.setAttribute("width","100%"),o.setAttribute("height","100%"),o.style.cssText="position:absolute;top:0;left:0;overflow:visible;";let n=document.createElementNS(t,"defs"),i=document.createElementNS(t,"filter");i.setAttribute("id","__fork-removed-shadow"),i.setAttribute("x","-10%"),i.setAttribute("y","-10%"),i.setAttribute("width","120%"),i.setAttribute("height","120%");let s=document.createElementNS(t,"feDropShadow");s.setAttribute("dx","0"),s.setAttribute("dy","1"),s.setAttribute("stdDeviation","2"),s.setAttribute("flood-color","rgba(0,0,0,0.15)"),i.appendChild(s),n.appendChild(i),o.appendChild(n);for(let{rect:l,borderRadius:R}of e){let m=document.createElementNS(t,"path");m.setAttribute("d",_r(l.left,l.top,l.width,l.height,R)),m.setAttribute("fill","none"),m.setAttribute("stroke","rgba(120, 125, 135, 0.6)"),m.setAttribute("stroke-width","1.5"),m.setAttribute("stroke-dasharray","8 4"),m.setAttribute("stroke-linecap","round"),m.setAttribute("filter","url(#__fork-removed-shadow)"),m.setAttribute("opacity","0"),o.appendChild(m),m.animate([{opacity:0,offset:0},{opacity:.6,offset:.08},{opacity:.05,offset:.45},{opacity:.6,offset:.85},{opacity:.05,offset:1}],{duration:5e3,easing:"ease-in-out",fill:"forwards"});}return r.appendChild(o),document.body.appendChild(r),r}var tt=new Map,Mt=new Map;function on(e){return e instanceof Error?e:new Error(typeof e=="string"?e:"Unknown module override error")}function Mr(e,t){let r=(t?e[t]:void 0)??e.default;if(typeof r!="function"){let o=t||"default";throw new Error(`Fork boundary module is missing a React component export: ${o}`)}return r}function nn(e){if(!e||typeof document>"u")return Promise.resolve();let t=tt.get(e);if(t)return t;let r=document.querySelector(`link[data-fork-override-href="${e}"]`);if(r instanceof HTMLLinkElement){let n=r.sheet?Promise.resolve():new Promise((i,s)=>{let l=()=>{r.removeEventListener("load",l),r.removeEventListener("error",R),i();},R=()=>{r.removeEventListener("load",l),r.removeEventListener("error",R),s(new Error(`Failed to load boundary stylesheet: ${e}`));};r.addEventListener("load",l,{once:true}),r.addEventListener("error",R,{once:true});});return tt.set(e,n),n}let o=new Promise((n,i)=>{let s=document.createElement("link");s.rel="stylesheet",s.href=e,s.setAttribute("data-fork-override-href",e),s.onload=()=>n(),s.onerror=()=>{s.remove(),i(new Error(`Failed to load boundary stylesheet: ${e}`));},document.head.appendChild(s);}).catch(n=>{throw tt.delete(e),n});return tt.set(e,o),o}function sn(e){let t=Mt.get(e);if(t)return t;let r=import(e).catch(o=>{throw Mt.delete(e),o});return Mt.set(e,r),r}async function an(e,t,r){if(e)try{await Promise.all(e.cssUrls.map(i=>nn(i)));let n=await sn(e.moduleUrl);return Mr(n,r)}catch(n){console.error(`[Fork] Failed to load override for boundary "${e.boundaryId}", falling back to original module.`,n);}let o=await t();return Mr(o,r)}function ln(e){function t(r){let{appId:o,moduleOverridesEnabled:n,moduleManifestReady:i,moduleManifestVersion:s,registerBoundary:l,getBoundaryOverride:R,consumeBoundaryAnimation:m}=G(),[f,S]=wt.useState(null),[P,y]=wt.useState(null),k=wt.useRef(null),h=wt.useRef(null),w=wt.useRef(null),A=wt.useRef(false),x=wt.useRef(null),L=wt.useRef(null),C=R(e.id),_=C?`override:${C.id}`:"original",v=e.editorMetadata?JSON.stringify(e.editorMetadata):void 0;if(wt.useEffect(()=>()=>{L.current&&(clearTimeout(L.current),L.current=null),x.current&&(x.current.remove(),x.current=null);},[]),wt.useEffect(()=>{l({id:e.id,exportName:e.exportName,editorMetadata:e.editorMetadata});},[o,l,e.id,e.exportName,v]),wt.useEffect(()=>{if(n&&!i&&!f||h.current===_&&f)return;let g=false;return y(null),an(C,e.original,e.exportName).then(c=>{if(!g){if(C?.id&&m(e.id,C.id)&&k.current){let F=_t(k.current);if(F){let b=At(F);b.length>0&&(w.current=b,A.current=true,L.current&&(clearTimeout(L.current),L.current=null),x.current&&x.current.remove(),x.current=$r(F));}}h.current=_,wt.startTransition(()=>{S(()=>c);});}}).catch(c=>{g||y(on(c));}),()=>{g=true;}},[m,_,n,i,s,C?.id,C?.moduleUrl,C?.integrity,C?.cssUrls.join("|"),e.exportName,e.original,f]),wt.useEffect(()=>{if(!A.current||!f||!k.current)return;let g=false;return requestAnimationFrame(()=>{requestAnimationFrame(()=>{if(g||!k.current)return;let c=w.current,F=_t(k.current);if(w.current=null,A.current=false,!c||!F){x.current&&(x.current.remove(),x.current=null);return}let b=At(F),u=Pr(c,b),d=Cr(c,b),p=x.current;if(d.length>0&&p){let N=Ar(d);L.current=setTimeout(()=>{L.current=null;let O=400;p.animate([{opacity:1},{opacity:0}],{duration:O,fill:"forwards"}),N.animate([{opacity:1},{opacity:0}],{duration:O,fill:"forwards"}),setTimeout(()=>{p.remove(),N.remove(),x.current===p&&(x.current=null),u.length>0&&Tt(u);},O);},3500);}else p&&(p.remove(),x.current===p&&(x.current=null)),u.length>0&&Tt(u);});}),()=>{g=true;}},[f]),P)throw P;return f?Vr.jsx("div",{ref:k,style:{display:"contents"},children:Vr.jsx(f,{...r})}):Vr.jsx(Vr.Fragment,{children:e.loading??null})}return t.displayName=`ForkBoundary(${e.id})`,t}function un({slotId:e,title:t,slotLabel:r,examplePrompts:o}){return Vr.jsx(Me,{slotId:e,title:t,slotLabel:r,examplePrompts:o})}
44
+ exports.ForkBoundaryUI=en;exports.ForkButton=xt;exports.ForkChatInterface=Me;exports.ForkPanel=Je;exports.ForkProvider=lo;exports.ForkSlot=So;exports.ForkUI=un;exports.forkable=ln;exports.registerForkShared=dt;exports.useBoundaryFork=Et;exports.useFork=$t;exports.useForkChatPanel=Pt;exports.usePreviewSession=be;
package/dist/index.d.cts CHANGED
@@ -131,6 +131,48 @@ interface ForkSlotProps {
131
131
  }
132
132
  type ForkState = "idle" | "prompting" | "running" | "complete" | "error";
133
133
 
134
+ type PreviewTargetKind = "slot" | "module";
135
+
136
+ /**
137
+ * Phase 4 — preview-session client state, persistence, and pub/sub.
138
+ *
139
+ * One module owns:
140
+ * 1. sessionStorage I/O (namespaced by apiKey so multiple tenants can
141
+ * coexist on the same origin without trampling each other).
142
+ * 2. A tiny subscribe/notify model so React components — banner, provider
143
+ * hooks, sidebar — all share one source of truth and stay in lockstep
144
+ * across mount/unmount cycles.
145
+ *
146
+ * Why sessionStorage (not localStorage): a preview session is bound to a
147
+ * single tab. Closing the tab cancels the session; opening a second tab
148
+ * should NOT inherit somebody else's authoring state. sessionStorage
149
+ * mirrors that lifetime exactly.
150
+ *
151
+ * Why pub/sub over React context alone: the banner is mounted into a
152
+ * detached Shadow DOM root (separate render tree). It can't read context
153
+ * from the ForkProvider tree, so it subscribes to this module directly.
154
+ */
155
+
156
+ interface PreviewSessionPayload {
157
+ preview_session_id: string;
158
+ tenant_id: string;
159
+ app_id: string;
160
+ target: {
161
+ kind: PreviewTargetKind;
162
+ id: string;
163
+ };
164
+ target_user_id: string;
165
+ operator_id: number;
166
+ /** Seeded from activate(); the SDK updates it when authoring creates a
167
+ * new fork. Null when the operator just landed and hasn't authored. */
168
+ fork_id: string | null;
169
+ /** ISO-8601 expiration. The banner ticks against this; once past, the
170
+ * module clears storage on next access. */
171
+ expires_at: string;
172
+ }
173
+
174
+ declare function usePreviewSession(): PreviewSessionPayload | null;
175
+
134
176
  declare function ForkProvider(props: ForkProviderProps): react_jsx_runtime.JSX.Element;
135
177
 
136
178
  declare function ForkSlot({ slotId, props, children, allowedFetches, githubRepo, callbacks, mode, shared, events }: ForkSlotProps): react_jsx_runtime.JSX.Element;
@@ -173,7 +215,7 @@ interface ForkPanelProps {
173
215
  targetLabel?: string;
174
216
  historyMode?: "slot" | "boundary" | "none";
175
217
  examplePrompts?: string[];
176
- onSubmit: (prompt: string, targetId: string) => void;
218
+ onSubmit: (prompt: string, targetId: string, containerId?: string | null) => void;
177
219
  onUndo?: (targetId: string) => Promise<any>;
178
220
  onClose: () => void;
179
221
  baseUrl?: string;
@@ -198,7 +240,7 @@ declare function useFork(): {
198
240
  error: string | null;
199
241
  open: () => void;
200
242
  close: () => void;
201
- startFork: (prompt: string, slotId?: string) => Promise<void>;
243
+ startFork: (prompt: string, slotId?: string, containerId?: string | null) => Promise<void>;
202
244
  undoFork: (slotId: string) => Promise<any>;
203
245
  };
204
246
 
@@ -209,7 +251,7 @@ declare function useBoundaryFork(boundaryId: string): {
209
251
  error: string | null;
210
252
  open: () => void;
211
253
  close: () => void;
212
- startFork: (prompt: string) => Promise<void>;
254
+ startFork: (prompt: string, containerId?: string | null) => Promise<void>;
213
255
  undoFork: () => Promise<any>;
214
256
  };
215
257
 
@@ -218,13 +260,13 @@ declare function useForkChatPanel(options: ForkChatPanelOptions): {
218
260
  targetId: string;
219
261
  targetLabel: string | undefined;
220
262
  historyMode: "slot" | "boundary";
221
- submit: (prompt: string, submittedTargetId?: string) => Promise<void>;
263
+ submit: (prompt: string, submittedTargetId?: string, containerId?: string | null) => Promise<void>;
222
264
  undo: (submittedTargetId?: string) => Promise<any>;
223
265
  buttonProps: {
224
266
  onClick: () => void;
225
267
  };
226
268
  panelProps: {
227
- onSubmit: (prompt: string, submittedTargetId?: string) => Promise<void>;
269
+ onSubmit: (prompt: string, submittedTargetId?: string, containerId?: string | null) => Promise<void>;
228
270
  onUndo: (submittedTargetId?: string) => Promise<any>;
229
271
  onClose: () => void;
230
272
  baseUrl: string;
@@ -240,7 +282,7 @@ declare function useForkChatPanel(options: ForkChatPanelOptions): {
240
282
  events: ForkEvent[];
241
283
  error: string | null;
242
284
  } | {
243
- onSubmit: (prompt: string, submittedTargetId?: string) => Promise<void>;
285
+ onSubmit: (prompt: string, submittedTargetId?: string, containerId?: string | null) => Promise<void>;
244
286
  onUndo: (submittedTargetId?: string) => Promise<any>;
245
287
  onClose: () => void;
246
288
  baseUrl: string;
@@ -265,4 +307,4 @@ declare function useForkChatPanel(options: ForkChatPanelOptions): {
265
307
  close: () => void;
266
308
  };
267
309
 
268
- export { type Fork, type ForkBoundaryDefinition, ForkBoundaryUI, ForkButton, ForkChatInterface, type ForkChatInterfaceProps, type ForkChatPanelOptions, type ForkChatTarget, type ForkEvent, ForkPanel, ForkProvider, type ForkProviderProps, type ForkSharedRegistry, ForkSlot, type ForkSlotProps, type ForkState, ForkUI, forkable, registerForkShared, useBoundaryFork, useFork, useForkChatPanel };
310
+ export { type Fork, type ForkBoundaryDefinition, ForkBoundaryUI, ForkButton, ForkChatInterface, type ForkChatInterfaceProps, type ForkChatPanelOptions, type ForkChatTarget, type ForkEvent, ForkPanel, ForkProvider, type ForkProviderProps, type ForkSharedRegistry, ForkSlot, type ForkSlotProps, type ForkState, ForkUI, type PreviewSessionPayload, forkable, registerForkShared, useBoundaryFork, useFork, useForkChatPanel, usePreviewSession };
package/dist/index.d.ts CHANGED
@@ -131,6 +131,48 @@ interface ForkSlotProps {
131
131
  }
132
132
  type ForkState = "idle" | "prompting" | "running" | "complete" | "error";
133
133
 
134
+ type PreviewTargetKind = "slot" | "module";
135
+
136
+ /**
137
+ * Phase 4 — preview-session client state, persistence, and pub/sub.
138
+ *
139
+ * One module owns:
140
+ * 1. sessionStorage I/O (namespaced by apiKey so multiple tenants can
141
+ * coexist on the same origin without trampling each other).
142
+ * 2. A tiny subscribe/notify model so React components — banner, provider
143
+ * hooks, sidebar — all share one source of truth and stay in lockstep
144
+ * across mount/unmount cycles.
145
+ *
146
+ * Why sessionStorage (not localStorage): a preview session is bound to a
147
+ * single tab. Closing the tab cancels the session; opening a second tab
148
+ * should NOT inherit somebody else's authoring state. sessionStorage
149
+ * mirrors that lifetime exactly.
150
+ *
151
+ * Why pub/sub over React context alone: the banner is mounted into a
152
+ * detached Shadow DOM root (separate render tree). It can't read context
153
+ * from the ForkProvider tree, so it subscribes to this module directly.
154
+ */
155
+
156
+ interface PreviewSessionPayload {
157
+ preview_session_id: string;
158
+ tenant_id: string;
159
+ app_id: string;
160
+ target: {
161
+ kind: PreviewTargetKind;
162
+ id: string;
163
+ };
164
+ target_user_id: string;
165
+ operator_id: number;
166
+ /** Seeded from activate(); the SDK updates it when authoring creates a
167
+ * new fork. Null when the operator just landed and hasn't authored. */
168
+ fork_id: string | null;
169
+ /** ISO-8601 expiration. The banner ticks against this; once past, the
170
+ * module clears storage on next access. */
171
+ expires_at: string;
172
+ }
173
+
174
+ declare function usePreviewSession(): PreviewSessionPayload | null;
175
+
134
176
  declare function ForkProvider(props: ForkProviderProps): react_jsx_runtime.JSX.Element;
135
177
 
136
178
  declare function ForkSlot({ slotId, props, children, allowedFetches, githubRepo, callbacks, mode, shared, events }: ForkSlotProps): react_jsx_runtime.JSX.Element;
@@ -173,7 +215,7 @@ interface ForkPanelProps {
173
215
  targetLabel?: string;
174
216
  historyMode?: "slot" | "boundary" | "none";
175
217
  examplePrompts?: string[];
176
- onSubmit: (prompt: string, targetId: string) => void;
218
+ onSubmit: (prompt: string, targetId: string, containerId?: string | null) => void;
177
219
  onUndo?: (targetId: string) => Promise<any>;
178
220
  onClose: () => void;
179
221
  baseUrl?: string;
@@ -198,7 +240,7 @@ declare function useFork(): {
198
240
  error: string | null;
199
241
  open: () => void;
200
242
  close: () => void;
201
- startFork: (prompt: string, slotId?: string) => Promise<void>;
243
+ startFork: (prompt: string, slotId?: string, containerId?: string | null) => Promise<void>;
202
244
  undoFork: (slotId: string) => Promise<any>;
203
245
  };
204
246
 
@@ -209,7 +251,7 @@ declare function useBoundaryFork(boundaryId: string): {
209
251
  error: string | null;
210
252
  open: () => void;
211
253
  close: () => void;
212
- startFork: (prompt: string) => Promise<void>;
254
+ startFork: (prompt: string, containerId?: string | null) => Promise<void>;
213
255
  undoFork: () => Promise<any>;
214
256
  };
215
257
 
@@ -218,13 +260,13 @@ declare function useForkChatPanel(options: ForkChatPanelOptions): {
218
260
  targetId: string;
219
261
  targetLabel: string | undefined;
220
262
  historyMode: "slot" | "boundary";
221
- submit: (prompt: string, submittedTargetId?: string) => Promise<void>;
263
+ submit: (prompt: string, submittedTargetId?: string, containerId?: string | null) => Promise<void>;
222
264
  undo: (submittedTargetId?: string) => Promise<any>;
223
265
  buttonProps: {
224
266
  onClick: () => void;
225
267
  };
226
268
  panelProps: {
227
- onSubmit: (prompt: string, submittedTargetId?: string) => Promise<void>;
269
+ onSubmit: (prompt: string, submittedTargetId?: string, containerId?: string | null) => Promise<void>;
228
270
  onUndo: (submittedTargetId?: string) => Promise<any>;
229
271
  onClose: () => void;
230
272
  baseUrl: string;
@@ -240,7 +282,7 @@ declare function useForkChatPanel(options: ForkChatPanelOptions): {
240
282
  events: ForkEvent[];
241
283
  error: string | null;
242
284
  } | {
243
- onSubmit: (prompt: string, submittedTargetId?: string) => Promise<void>;
285
+ onSubmit: (prompt: string, submittedTargetId?: string, containerId?: string | null) => Promise<void>;
244
286
  onUndo: (submittedTargetId?: string) => Promise<any>;
245
287
  onClose: () => void;
246
288
  baseUrl: string;
@@ -265,4 +307,4 @@ declare function useForkChatPanel(options: ForkChatPanelOptions): {
265
307
  close: () => void;
266
308
  };
267
309
 
268
- export { type Fork, type ForkBoundaryDefinition, ForkBoundaryUI, ForkButton, ForkChatInterface, type ForkChatInterfaceProps, type ForkChatPanelOptions, type ForkChatTarget, type ForkEvent, ForkPanel, ForkProvider, type ForkProviderProps, type ForkSharedRegistry, ForkSlot, type ForkSlotProps, type ForkState, ForkUI, forkable, registerForkShared, useBoundaryFork, useFork, useForkChatPanel };
310
+ export { type Fork, type ForkBoundaryDefinition, ForkBoundaryUI, ForkButton, ForkChatInterface, type ForkChatInterfaceProps, type ForkChatPanelOptions, type ForkChatTarget, type ForkEvent, ForkPanel, ForkProvider, type ForkProviderProps, type ForkSharedRegistry, ForkSlot, type ForkSlotProps, type ForkState, ForkUI, type PreviewSessionPayload, forkable, registerForkShared, useBoundaryFork, useFork, useForkChatPanel, usePreviewSession };
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
- import*as He from'react';import He__default,{createContext,useState,useRef,useEffect,useCallback,startTransition,Children,useContext,isValidElement}from'react';import*as Ht from'react-dom';import {createPortal}from'react-dom';import*as Ot from'react/jsx-runtime';import {jsx,Fragment,jsxs}from'react/jsx-runtime';import*as Ut from'react/jsx-dev-runtime';import {X,User,Check,Undo2,ChevronDown,RotateCcw,ArrowUp,Loader2,AlertCircle,Sparkles,Package,Wrench,MessageSquare,Code,Terminal,FileSearch,Pencil}from'lucide-react';var oe="__FORK_SHARED__";function Le(){var t,r,o,n;let e=globalThis;return e[oe]||(e[oe]={}),(t=e[oe]).react||(t.react=He),(r=e[oe])["react-dom"]||(r["react-dom"]=Ht),(o=e[oe])["react/jsx-runtime"]||(o["react/jsx-runtime"]=Ot),(n=e[oe])["react/jsx-dev-runtime"]||(n["react/jsx-dev-runtime"]=Ut),e[oe]}function Be(e){return Object.assign(Le(),e)}var tt=createContext(null);function et(e,t){if(!t)return t;try{return new URL(t,`${e.replace(/\/+$/,"")}/`).toString()}catch{return t}}function jt(e,t){let r={};for(let[o,n]of Object.entries(t.boundaries||{}))r[o]={...n,moduleUrl:et(e,n.moduleUrl),cssUrls:Array.isArray(n.cssUrls)?n.cssUrls.map(i=>et(e,i)):[]};return r}function zt(e){let{apiKey:t,baseUrl:r,children:o,appId:n,shared:i}=e,s="userId"in e?e.userId:void 0,a="authUrl"in e?e.authUrl:void 0,[b,d]=useState({}),[m,S]=useState(s?{userId:s,userHash:void 0}:null),[_,w]=useState(!!s),[h,l]=useState({}),[$,T]=useState(!n),[R,C]=useState(0),F=useRef(new Map),y=useRef(new Map),[E,c]=useState(0),u=useRef(new Set),x=useRef(new Map),k=useRef(void 0);Le(),i&&k.current!==i&&(Be(i),k.current=i),useEffect(()=>{a&&(w(false),fetch(a,{credentials:"include"}).then(v=>{if(!v.ok)throw new Error(`Auth endpoint returned ${v.status}`);return v.json()}).then(v=>{if(!v.userId||typeof v.userId!="string")throw new Error("authUrl response must include userId");S({userId:v.userId,userHash:v.userHash});}).catch(v=>{console.error("[ForkProvider] Failed to fetch user identity from authUrl:",v.message);}).finally(()=>{w(true);}));},[a]),useEffect(()=>{!a&&s&&(S({userId:s,userHash:void 0}),w(true));},[s,a]);let f=m?.userId??"",g=m?.userHash,p=!!n,B=useCallback(async()=>{if(!p){l({}),T(true),C(P=>P+1);return}if(!_){T(false);return}if(!f||!n){l({}),T(true),C(P=>P+1);return}let v=new URLSearchParams({appId:n,userId:f});g&&v.set("userHash",g),T(false);try{let P=await fetch(`${r}/api/v1/boundaries/manifest?${v.toString()}`,{headers:{Authorization:`Bearer ${t}`}});if(!P.ok)throw new Error(`${P.status}`);let N=await P.json();l(jt(r,N));}catch(P){console.error("[ForkProvider] Failed to fetch module override manifest:",P.message),l({});}finally{C(P=>P+1),T(true);}},[t,n,r,_,p,g,f]);useEffect(()=>{if(!f)return;let v=new URLSearchParams({userId:f});g&&v.set("userHash",g),fetch(`${r}/api/v1/forks/active?${v.toString()}`,{headers:{Authorization:`Bearer ${t}`}}).then(P=>{if(!P.ok)throw new Error(`${P.status}`);return P.json()}).then(P=>{P&&typeof P=="object"&&d(P);}).catch(()=>{});},[t,f,g,r]),useEffect(()=>{B();},[B]);let U=useCallback((v,P)=>{d(N=>({...N,[v]:P}));},[]),K=useCallback(v=>{d(P=>{let N={...P};return delete N[v],N});},[]),V=useCallback(v=>{u.current.add(v);},[]),G=useCallback(v=>u.current.has(v)?(u.current.delete(v),true):false,[]),Y=useCallback((v,P)=>{x.current.set(v,P);},[]),O=useCallback((v,P)=>x.current.get(v)!==P?false:(x.current.delete(v),true),[]),q=useCallback(v=>{if(!n)return;let P=JSON.stringify(v);F.current.get(v.id)===P||y.current.get(v.id)?.signature===P||(y.current.set(v.id,{boundary:v,signature:P}),c(z=>z+1));},[n]);useEffect(()=>{if(!n||y.current.size===0)return;let v=setTimeout(()=>{let P=Array.from(y.current.values());P.length!==0&&fetch(`${r}/api/v1/boundaries`,{method:"POST",headers:{Authorization:`Bearer ${t}`,"Content-Type":"application/json"},body:JSON.stringify({appId:n,boundaries:P.map(N=>N.boundary)})}).then(N=>{if(!N.ok)throw new Error(`${N.status}`)}).then(()=>{for(let N of P)y.current.get(N.boundary.id)?.signature===N.signature&&(y.current.delete(N.boundary.id),F.current.set(N.boundary.id,N.signature));}).catch(N=>{console.error("[ForkProvider] Failed to register module boundaries:",N.message);});},50);return ()=>{clearTimeout(v);}},[t,n,r,E]);let W=useCallback(v=>h[v],[h]),te=useCallback(async()=>{if(!g)throw new Error("Reset requires verified user identity (provide authUrl / userHash).");let v=new URLSearchParams({userId:f,userHash:g}),P=await fetch(`${r}/api/v1/forks/all?${v.toString()}`,{method:"DELETE",headers:{Authorization:`Bearer ${t}`}});if(!P.ok){let z=await P.json().catch(()=>({}));throw new Error(z.error||`API error: ${P.status}`)}let N=await P.json().catch(()=>({}));d({}),l({}),T(true),C(z=>z+1),u.current.clear(),x.current.clear();try{for(let z=sessionStorage.length-1;z>=0;z-=1){let Z=sessionStorage.key(z);Z&&Z.startsWith("__fork_animated_")&&sessionStorage.removeItem(Z);}}catch{}return N},[t,r,g,f]);return jsx(tt.Provider,{value:{apiKey:t,userId:f,userHash:g,baseUrl:r,appId:n,forks:b,moduleOverridesEnabled:p,moduleManifestReady:$,moduleManifestVersion:R,setSlotFork:U,clearSlotFork:K,skipAnimationForSlot:V,shouldSkipAnimation:G,queueBoundaryAnimation:Y,consumeBoundaryAnimation:O,registerBoundary:q,getBoundaryOverride:W,refreshModuleManifest:B,resetAllForks:te},children:o})}function j(){let e=useContext(tt);if(!e)throw new Error("useForkContext must be used within <ForkProvider>");return e}function be(e){return j().forks[e]}var ue=class{constructor(t){this.values=new Map;this.snapshots=new Map;this.listeners=new Map;this.eventHandlers=new Map;this.slotId=t,window.__FORK_BRIDGE__||(window.__FORK_BRIDGE__={}),window.__FORK_BRIDGE__[t]=this;}set(t,r){let o=this.values.get(t);if(Object.is(o,r))return;if(o!==void 0&&r!==null&&o!==null&&typeof o=="object"&&typeof r=="object")try{if(JSON.stringify(o)===JSON.stringify(r))return}catch{}this.values.set(t,r),this.snapshots.set(t,r);let n=this.listeners.get(t);n&&n.forEach(i=>i());}get(t){return this.values.get(t)}getSnapshot(t){return this.snapshots.get(t)}subscribe(t,r){return this.listeners.has(t)||this.listeners.set(t,new Set),this.listeners.get(t).add(r),()=>{this.listeners.get(t)?.delete(r);}}useValue(t){let r=window.__FORK_REACT__;return r?.useSyncExternalStore?r.useSyncExternalStore(o=>this.subscribe(t,o),()=>this.getSnapshot(t)):(console.warn("[ForkBridge] React.useSyncExternalStore not available, returning static value"),this.values.get(t))}emit(t,...r){let o=this.eventHandlers.get(t);o&&o.forEach(n=>n(...r));}on(t,r){return this.eventHandlers.has(t)||this.eventHandlers.set(t,new Set),this.eventHandlers.get(t).add(r),()=>{this.eventHandlers.get(t)?.delete(r);}}destroy(){this.listeners.clear(),this.eventHandlers.clear(),this.values.clear(),this.snapshots.clear();let t=window.__FORK_BRIDGE__;t&&delete t[this.slotId];}};function Oe(e,t){let r;try{r=Children.only(e);}catch{let n=Children.count(e);throw new Error(`<ForkSlot slotId="${t}"> must wrap exactly one React component, got ${n} children. Wrap your slot's contents in a single named component, e.g. <ForkSlot slotId="${t}"><MyShell ...props /></ForkSlot>.`)}let o=r.type;if(typeof o=="string")throw new Error(`<ForkSlot slotId="${t}"> child must be a React component (function or class), not an HTML element <${o}>. Wrap your slot's contents in a single named component, e.g. <ForkSlot slotId="${t}"><MyShell ...props /></ForkSlot>.`);if(typeof o=="symbol")throw new Error(`<ForkSlot slotId="${t}"> child must be a single React component, not a fragment or special React element. Wrap your slot's contents in a single named component, e.g. <ForkSlot slotId="${t}"><MyShell ...props /></ForkSlot>.`);return r}var ot=new Set;function nt(e){let t=[],r=e.querySelectorAll("*");for(let o of r){if(!(o instanceof HTMLElement))continue;let n=o.getBoundingClientRect();if(n.width<10||n.height<10||["SCRIPT","STYLE","META","LINK"].includes(o.tagName))continue;let i=getComputedStyle(o),s=parseFloat(i.borderTopLeftRadius)||0;t.push({tag:o.tagName,className:o.className||"",text:(o.textContent||"").slice(0,50).trim(),rect:n,borderRadius:s});}return t}function qt(e,t){let r=[];for(let o of t)if(!e.find(i=>i.tag===o.tag&&i.className===o.className&&Math.abs(i.rect.top-o.rect.top)<20&&Math.abs(i.rect.left-o.rect.left)<20)&&!r.some(s=>o.rect.top>=s.rect.top&&o.rect.left>=s.rect.left&&o.rect.right<=s.rect.right&&o.rect.bottom<=s.rect.bottom)){for(let s=r.length-1;s>=0;s--){let a=r[s];a.rect.top>=o.rect.top&&a.rect.left>=o.rect.left&&a.rect.right<=o.rect.right&&a.rect.bottom<=o.rect.bottom&&r.splice(s,1);}r.push({rect:o.rect,borderRadius:o.borderRadius});}return r}function Jt(e,t){let r=[];for(let o of e)if(!t.find(i=>i.tag===o.tag&&i.className===o.className&&Math.abs(i.rect.top-o.rect.top)<20&&Math.abs(i.rect.left-o.rect.left)<20)&&!r.some(s=>o.rect.top>=s.rect.top&&o.rect.left>=s.rect.left&&o.rect.right<=s.rect.right&&o.rect.bottom<=s.rect.bottom)){for(let s=r.length-1;s>=0;s--){let a=r[s];a.rect.top>=o.rect.top&&a.rect.left>=o.rect.left&&a.rect.right<=o.rect.right&&a.rect.bottom<=o.rect.bottom&&r.splice(s,1);}r.push({rect:o.rect,borderRadius:o.borderRadius});}return r}function it(e,t,r,o,n){return n=Math.max(0,Math.min(n,r/2,o/2)),n===0?`M ${e} ${t} L ${e+r} ${t} L ${e+r} ${t+o} L ${e} ${t+o} Z`:[`M ${e+n} ${t}`,`L ${e+r-n} ${t}`,`A ${n} ${n} 0 0 1 ${e+r} ${t+n}`,`L ${e+r} ${t+o-n}`,`A ${n} ${n} 0 0 1 ${e+r-n} ${t+o}`,`L ${e+n} ${t+o}`,`A ${n} ${n} 0 0 1 ${e} ${t+o-n}`,`L ${e} ${t+n}`,`A ${n} ${n} 0 0 1 ${e+n} ${t}`,"Z"].join(" ")}function st(e){let t="http://www.w3.org/2000/svg",r=document.createElement("div");r.setAttribute("data-fork-highlights","true"),r.style.cssText="position:fixed;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:9999;";let o=document.createElementNS(t,"svg");o.setAttribute("width","100%"),o.setAttribute("height","100%"),o.style.cssText="position:absolute;top:0;left:0;overflow:visible;";let n=document.createElementNS(t,"defs");o.appendChild(n);let i=[];for(let m=0;m<e.length;m++){let{rect:S,borderRadius:_}=e[m],w=S.left-.5,h=S.top-.5,l=S.width+1,$=S.height+1,T=Math.min(_+.5,l/2,$/2),R=it(w,h,l,$,T),C=`__fork-glow-${m}`,F=document.createElementNS(t,"filter");F.setAttribute("id",C),F.setAttribute("x","-100%"),F.setAttribute("y","-100%"),F.setAttribute("width","300%"),F.setAttribute("height","300%");let y=document.createElementNS(t,"feGaussianBlur");y.setAttribute("in","SourceGraphic"),y.setAttribute("stdDeviation","8"),F.appendChild(y),n.appendChild(F);let E=`__fork-mask-${m}`,c=document.createElementNS(t,"mask");c.setAttribute("id",E),c.setAttribute("maskUnits","userSpaceOnUse"),c.setAttribute("x",String(w-200)),c.setAttribute("y",String(h-200)),c.setAttribute("width",String(l+400)),c.setAttribute("height",String($+400));let u=document.createElementNS(t,"rect");u.setAttribute("x",String(w-200)),u.setAttribute("y",String(h-200)),u.setAttribute("width",String(l+400)),u.setAttribute("height",String($+400)),u.setAttribute("fill","white"),c.appendChild(u);let x=document.createElementNS(t,"path");x.setAttribute("d",R),x.setAttribute("fill","black"),c.appendChild(x),n.appendChild(c);let k=document.createElementNS(t,"g");k.setAttribute("mask",`url(#${E})`),k.setAttribute("opacity","0");let f=document.createElementNS(t,"g");f.setAttribute("filter",`url(#${C})`);let g=document.createElementNS(t,"path");g.setAttribute("d",R),g.setAttribute("fill","none"),g.setAttribute("stroke","rgba(150, 185, 220, 0.6)"),g.setAttribute("stroke-width","6"),g.setAttribute("stroke-linecap","round"),f.appendChild(g),k.appendChild(f),o.appendChild(k);let p=document.createElementNS(t,"path");p.setAttribute("d",R),p.setAttribute("fill","none"),p.setAttribute("stroke","rgba(150, 185, 220, 0.35)"),p.setAttribute("stroke-width","2"),p.setAttribute("stroke-linecap","round"),p.setAttribute("opacity","0"),o.appendChild(p),i.push(g,p),g.__group=k;}r.appendChild(o),document.body.appendChild(r);let s=[];for(let m=0;m<i.length;m+=2){let S=i[m],_=i[m+1],w=S.__group,h=_.getTotalLength(),l=S.getTotalLength();if(h<=0)continue;let $=h*.35;_.setAttribute("stroke-dasharray",`${$} ${h-$}`),_.setAttribute("stroke-dashoffset","0"),s.push(_.animate([{strokeDashoffset:0,opacity:0,offset:0},{strokeDashoffset:-0.2*h,opacity:.92,offset:.06},{strokeDashoffset:-2*h,opacity:.92,offset:.92},{strokeDashoffset:-2.25*h,opacity:0,offset:1}],{duration:14e3,easing:"ease-in-out",fill:"forwards"}));let T=l*.35;S.setAttribute("stroke-dasharray",`${T} ${l-T}`),S.setAttribute("stroke-dashoffset","0"),s.push(S.animate([{strokeDashoffset:0,offset:0},{strokeDashoffset:-0.2*l,offset:.06},{strokeDashoffset:-2*l,offset:.92},{strokeDashoffset:-2.25*l,offset:1}],{duration:14e3,easing:"ease-in-out",fill:"forwards"})),s.push(w.animate([{opacity:0,offset:0},{opacity:.92,offset:.06},{opacity:.92,offset:.92},{opacity:0,offset:1}],{duration:14e3,easing:"ease-in-out",fill:"forwards"}));}let a=false,b=()=>{if(a)return;a=true,clearTimeout(d);for(let S of s)try{S.cancel();}catch{}let m=r.animate([{opacity:1},{opacity:0}],{duration:400,fill:"forwards"});m.onfinish=()=>r.remove(),window.removeEventListener("click",b);},d=setTimeout(b,14500);return setTimeout(()=>{a||window.addEventListener("click",b);},500),b}function Yt(e){let t="http://www.w3.org/2000/svg",r=document.createElement("div");r.setAttribute("data-fork-removed","true"),r.style.cssText="position:fixed;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:9999;";let o=document.createElementNS(t,"svg");o.setAttribute("width","100%"),o.setAttribute("height","100%"),o.style.cssText="position:absolute;top:0;left:0;overflow:visible;";let n=document.createElementNS(t,"defs"),i=document.createElementNS(t,"filter");i.setAttribute("id","__fork-removed-shadow"),i.setAttribute("x","-10%"),i.setAttribute("y","-10%"),i.setAttribute("width","120%"),i.setAttribute("height","120%");let s=document.createElementNS(t,"feDropShadow");s.setAttribute("dx","0"),s.setAttribute("dy","1"),s.setAttribute("stdDeviation","2"),s.setAttribute("flood-color","rgba(0,0,0,0.15)"),i.appendChild(s),n.appendChild(i),o.appendChild(n);for(let{rect:a,borderRadius:b}of e){let d=a.left,m=a.top,S=a.width,_=a.height,w=Math.min(b,S/2,_/2),h=it(d,m,S,_,w),l=document.createElementNS(t,"path");l.setAttribute("d",h),l.setAttribute("fill","none"),l.setAttribute("stroke","rgba(120, 125, 135, 0.6)"),l.setAttribute("stroke-width","1.5"),l.setAttribute("stroke-dasharray","8 4"),l.setAttribute("stroke-linecap","round"),l.setAttribute("filter","url(#__fork-removed-shadow)"),l.setAttribute("opacity","0"),o.appendChild(l),l.animate([{opacity:0,offset:0},{opacity:.6,offset:.08},{opacity:.05,offset:.45},{opacity:.6,offset:.85},{opacity:.05,offset:1}],{duration:5e3,easing:"ease-in-out",fill:"forwards"});}return r.appendChild(o),document.body.appendChild(r),r}function Xt(e,t){if(e===t)return true;let r=Object.keys(e);if(r.length!==Object.keys(t).length)return false;for(let o of r)if(!Object.is(e[o],t[o]))return false;return true}var Zt=He__default.memo(function({component:t,containerRef:r,wrapperStyle:o,hostProps:n}){return jsx("div",{ref:r,style:o,children:jsx(t,{...n})})},(e,t)=>e.component===t.component&&Xt(e.hostProps,t.hostProps)),Ne=class extends He__default.Component{constructor(t){super(t),this.state={hasError:false};}static getDerivedStateFromError(){return {hasError:true}}componentDidCatch(t){console.error(`[Fork:${this.props.slotId}] fork render failed`,t);}componentDidUpdate(t){t.resetKey!==this.props.resetKey&&this.state.hasError&&this.setState({hasError:false});}render(){return this.state.hasError?this.props.fallback:this.props.children}};function at({slotId:e,children:t,githubRepo:r,shared:o,events:n}){Oe(t,e);let i=be(e),{baseUrl:s,apiKey:a,appId:b,shouldSkipAnimation:d}=j(),[m,S]=useState(null),_=useRef(null),w=useRef(null),h=useRef(null),l=useRef(false),$=useRef(null),T=useRef(null),R=!!(o||n),C=useRef(null);R&&!C.current&&(C.current=new ue(e));let F=useRef(n);if(F.current=n,useEffect(()=>{if(R)return ()=>{C.current?.destroy(),C.current=null;}},[R,e]),R&&C.current&&o)for(let[x,k]of Object.entries(o))C.current.set(x,k);useEffect(()=>{if(!R)return;C.current||(C.current=new ue(e));let x=C.current,k=Object.keys(F.current||{}).map(f=>x.on(f,(...g)=>F.current?.[f]?.(...g)));return ()=>k.forEach(f=>f())},[R,e]),useEffect(()=>{if(ot.has(e))return;ot.add(e);let x={id:e,appId:b,label:e,eventsShape:"{ navigate?: string }",currentLayout:"",githubRepo:r,mode:"direct",sharedKeys:o?Object.keys(o):[],eventNames:n?Object.keys(n):[],propsShape:"",callbackNames:[]};fetch(`${s}/api/v1/slots`,{method:"POST",headers:{Authorization:`Bearer ${a}`,"Content-Type":"application/json"},body:JSON.stringify(x)}).catch(()=>{});},[e,s,a,r,b]);let y=i?.id||null;useEffect(()=>{if(i?.bundleUrl,_.current,w.current,!i?.bundleUrl||!y){return}let x=`${s}${i.bundleUrl.replace("bundle.js","component.js")}`,k=`__fork_animated_${e}`,f=sessionStorage.getItem(k),g=d(e),p=!g&&f!==y;if(g&&y&&sessionStorage.setItem(k,y),p&&w.current){let G=nt(w.current);h.current=G,l.current=true,`${e}${G.length}`;}window.__FORK_REACT__=He__default,window.__FORK_REACT_DOM__=Ht,window.__FORK_REACT_JSX__=Ot;let B=Date.now(),U=`${s}${i.bundleUrl.replace("bundle.js","component.css")}?t=${B}`,K=document.createElement("link");K.rel="stylesheet",K.href=U,K.dataset.forkSlot=e,document.head.appendChild(K);let V=document.createElement("script");return V.src=x+"?t="+B,V.onload=()=>{let G=window.__FORK_EXPORT__;if(G?.default){if(w.current&&h.current&&l.current){let Y=w.current.getBoundingClientRect(),O=w.current.cloneNode(true);O.style.position="fixed",O.style.top=`${Y.top}px`,O.style.left=`${Y.left}px`,O.style.width=`${Y.width}px`,O.style.height=`${Y.height}px`,O.style.flex="none",O.style.minHeight="auto",O.style.zIndex="9998",O.style.pointerEvents="none",O.style.overflow="hidden";let q=getComputedStyle(w.current).backgroundColor;O.style.backgroundColor=q&&q!=="rgba(0, 0, 0, 0)"&&q!=="transparent"?q:getComputedStyle(document.body).backgroundColor||"#ffffff",document.body.appendChild(O);let W=w.current.querySelectorAll("*"),te=O.querySelectorAll("*");for(let v=0;v<W.length;v++)W[v].scrollTop!==0&&(te[v].scrollTop=W[v].scrollTop),W[v].scrollLeft!==0&&(te[v].scrollLeft=W[v].scrollLeft);$.current=O;}S(()=>G.default),_.current=y;}else console.error(`[Fork:${e}] component.js loaded but no default export found`);window.__FORK_EXPORT__=void 0;},V.onerror=()=>{console.error(`[Fork:${e}] failed to load component.js`);},document.head.appendChild(V),()=>{V.remove(),K.remove(),T.current&&(clearTimeout(T.current),T.current=null),$.current&&($.current.remove(),$.current=null);}},[y,s,e]),useEffect(()=>{if(!l.current||!m||!w.current){`${e}${l.current}`,w.current;return}let x=h.current;if(!x){return}requestAnimationFrame(()=>{requestAnimationFrame(()=>{if(!w.current)return;let k=nt(w.current),f=qt(x,k),g=Jt(x,k),p=$.current;if(`${e}${f.length}${g.length}`,g.length>0&&p){let B=Yt(g);T.current=setTimeout(()=>{T.current=null;let U=400;p.animate([{opacity:1},{opacity:0}],{duration:U,fill:"forwards"}),B.animate([{opacity:1},{opacity:0}],{duration:U,fill:"forwards"}),setTimeout(()=>{p.remove(),B.remove(),$.current=null,f.length>0&&(st(f));},U);},3500);}else p&&(p.remove(),$.current=null),f.length>0&&(st(f));h.current=null,l.current=false,y&&(sessionStorage.setItem(`__fork_animated_${e}`,y),`${e}`);});});},[m]);let E={flex:1,minHeight:0,display:"flex",flexDirection:"column"};if(!i||i.status!=="complete"||!i.bundleUrl)return jsx("div",{ref:w,style:E,children:t});if(!m)return jsx("div",{ref:w,style:E,children:t});let u=t?.props??{};return jsx(Ne,{slotId:e,resetKey:y,fallback:jsx("div",{ref:w,style:E,children:t}),children:jsx(Zt,{component:m,containerRef:w,wrapperStyle:E,hostProps:u})})}var ct=new Set;function tr(e){return `{ ${Object.entries(e).map(([r,o])=>o==null?`${r}: unknown`:Array.isArray(o)?`${r}: ${o.length>0?typeof o[0]:"unknown"}[]`:`${r}: ${typeof o}`).join("; ")} }`}function ut(e,t=new Set){return Children.forEach(e,r=>{if(!isValidElement(r))return;let o=r.props;for(let[n,i]of Object.entries(o))typeof i=="function"&&/^on[A-Z]/.test(n)&&t.add(n);o.children&&ut(o.children,t);}),t}function rr({slotId:e,props:t,children:r,allowedFetches:o,githubRepo:n,callbacks:i,mode:s="iframe",shared:a,events:b}){if(Oe(r,e),s==="direct")return jsx(at,{slotId:e,githubRepo:n,shared:a,events:b,children:r});let d=be(e),{baseUrl:m,apiKey:S,appId:_}=j(),w=useRef(null),h=useRef(false),l=useRef(null),$=useRef(i);$.current=i;let T=useRef(t);T.current=t;let R=useRef(o);R.current=o,useEffect(()=>{if(typeof process<"u")return;let E=ut(r),c=new Set(i?Object.keys(i):[]),u=[...E].filter(x=>!c.has(x));u.length>0&&console.error(`[ForkSlot:${e}] Missing bridged callbacks! The following callback props are used by children but not passed to ForkSlot's \`callbacks\` prop:
2
- `+u.map(x=>` - ${x}`).join(`
3
- `)+"\n\nThe forked component will not be able to call these. Add them to the `callbacks` prop of <ForkSlot>.");},[e,r,i]),useEffect(()=>{ct.has(e)||(ct.add(e),fetch(`${m}/api/v1/slots`,{method:"POST",headers:{Authorization:`Bearer ${S}`,"Content-Type":"application/json"},body:JSON.stringify({id:e,appId:_,label:e,propsShape:t?tr(t):"",eventsShape:"{ navigate?: string }",currentLayout:"",githubRepo:n,callbackNames:i?Object.keys(i):[],mode:s||"iframe"})}).catch(()=>{}));},[e,m,S,n,_]);let C=useCallback(E=>{let c=w.current;if(c?.contentWindow&&h.current){let u=$.current?Object.keys($.current):[];c.contentWindow.postMessage({type:"slot:props",props:E,callbackNames:u},"*"),l.current=null;}else l.current=E;},[]),F=useCallback((E,c)=>{let u=R.current;return !u||u.length===0?false:u.some(x=>{let[k,f]=x.split(" "),g=c.split("?")[0];return E.toUpperCase()===k.toUpperCase()&&g.startsWith(f)})},[]);if(useEffect(()=>{if(!d?.bundleUrl)return;let E=async c=>{if(c.source===w.current?.contentWindow){if(c.data?.type==="slot:ready")h.current=true,w.current?.contentWindow?.postMessage({type:"slot:allowed-fetches",paths:R.current||[]},"*"),R.current,l.current?C(l.current):C(T.current||{});else if(c.data?.type==="slot:event"){let u=c.data.event;u?.navigate&&(window.location.hash=u.navigate);}else if(c.data?.type==="slot:clipboard-write")navigator.clipboard.writeText(c.data.text).catch(u=>{console.warn(`[ForkSlot:${e}] clipboard write failed:`,u.message);});else if(c.data?.type==="slot:callback"){let{name:u,args:x}=c.data,k=$.current?.[u];k?(k(...x||[])):console.warn(`[ForkSlot:${e}] unknown callback: ${u}`);}else if(c.data?.type==="slot:fetch"){let{id:u,method:x,url:k,body:f}=c.data,g=w.current?.contentWindow;if(!g)return;let p=x||"GET";if(!F(p,k)){console.warn(`[ForkSlot:${e}] BLOCKED fetch #${u}: ${p} ${k} \u2014 not in allowedFetches`),g.postMessage({type:"slot:fetch-response",id:u,error:`Fetch not allowed: ${p} ${k}`},"*");return}try{let B={method:p};f&&p!=="GET"&&(B.headers={"Content-Type":"application/json"},B.body=JSON.stringify(f));let U=await fetch(k,B),K=await U.json();`${e}${u}${U.status}`,g.postMessage({type:"slot:fetch-response",id:u,data:K,status:U.status},"*");}catch(B){console.error(`[ForkSlot:${e}] fetch #${u} failed:`,B.message),g.postMessage({type:"slot:fetch-response",id:u,error:B.message},"*");}}}};return window.addEventListener("message",E),()=>{window.removeEventListener("message",E),h.current=false;}},[d?.bundleUrl,e,C,F]),useEffect(()=>{d?.bundleUrl&&h.current&&C(t||{});},[t,d?.bundleUrl,C]),!d||d.status!=="complete"||!d.bundleUrl)return `${e}${d?.status||"none"}${d?.bundleUrl||"none"}`,jsx(Fragment,{children:r});`${e}${d.bundleUrl}`;let y=`${m}${d.bundleUrl.replace("/bundle.js","/host")}`;return jsx("iframe",{ref:w,src:y,sandbox:"allow-scripts allow-same-origin allow-forms allow-clipboard-write",title:`Forked ${e}`,style:{width:"100%",border:"none",flex:1,minHeight:0}})}function we({style:e={width:20,height:20},...t}){return jsxs("svg",{viewBox:"320 95 270 345",fill:"none",xmlns:"http://www.w3.org/2000/svg",style:e,...t,children:[jsx("path",{stroke:"currentColor",strokeWidth:"30",strokeLinejoin:"round",strokeLinecap:"round",d:"M357.789 145.428c0-16.186 13.121-29.307 29.307-29.307 7.773 0 15.227 3.088 20.723 8.584 5.496 5.496 8.584 12.95 8.584 20.723 0 16.186-13.121 29.307-29.307 29.307s-29.307-13.121-29.307-29.307z"}),jsx("path",{stroke:"currentColor",strokeWidth:"30",strokeLinejoin:"round",strokeLinecap:"round",d:"M387.096 174.735v188"}),jsx("path",{stroke:"currentColor",strokeWidth:"30",strokeLinejoin:"round",strokeLinecap:"round",d:"M357.789 394.572c0-16.186 13.121-29.307 29.307-29.307 7.773 0 15.227 3.088 20.723 8.584 5.496 5.496 8.584 12.95 8.584 20.723 0 16.186-13.121 29.307-29.307 29.307s-29.307-13.121-29.307-29.307z"}),jsx("path",{stroke:"currentColor",strokeWidth:"30",strokeLinejoin:"round",strokeLinecap:"round",d:"M388.739 319c10.168-6.317 43.997-26.932 61.009-37.9 17.012-10.968 31.758-19.978 41.064-27.91 9.305-7.931 11.782-14.213 14.767-19.679 2.985-5.465 3.014-8.99 3.141-13.114.128-4.124-.999-8.178-2.377-11.632-1.378-3.454-3.563-6.55-5.889-9.094-2.326-2.543-4.98-4.679-8.066-6.167-3.085-1.488-6.624-2.601-10.448-2.76-3.823-.159-8.624.2-12.495 1.806-3.871 1.607-8.047 4.68-10.732 7.835-2.685 3.156-4.446 7.448-5.378 11.099-.932 3.651-.742 7.485-.213 10.807.528 3.322 1.864 6.46 3.386 9.123 1.523 2.663 3.543 4.843 5.75 6.854 2.207 2.011 4.38 3.914 7.491 5.214 3.111 1.3 6.57 2.808 11.178 2.584 4.607-.225 9.363-.471 16.466-3.932 7.103-3.46 16.076-5.382 26.154-16.831 10.077-11.449 28.593-43.219 34.312-51.862"}),jsx("path",{fill:"currentColor",stroke:"currentColor",strokeWidth:"1",strokeLinejoin:"round",d:"M527.117 162.547L570.487 134.368Q577.196 130.009 577.624 137.997L580.39 189.69Q580.818 197.678 573.69 194.047L527.536 170.538Q520.408 166.907 527.117 162.547Z"})]})}function De({onClick:e}){let[t,r]=useState(false),[o,n]=useState(false),i=t?48:40;return jsx("button",{onClick:e,onMouseEnter:()=>r(true),onMouseLeave:()=>{r(false),n(false);},onMouseDown:()=>n(true),onMouseUp:()=>n(false),style:{position:"fixed",bottom:24,right:24,zIndex:40,width:i,height:i,borderRadius:"50%",backgroundColor:t?"rgba(255, 255, 255, 1)":"rgba(255, 255, 255, 0.3)",border:t?"1px solid rgba(156, 163, 175, 1)":"1px solid rgba(156, 163, 175, 0.3)",display:"flex",alignItems:"center",justifyContent:"center",color:t?"#1c4587":"rgba(28, 69, 135, 0.5)",boxShadow:t?"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)":"0 1px 2px 0 rgba(0, 0, 0, 0.05)",transform:o?"scale(0.95)":"scale(1)",transition:"all 300ms",cursor:"pointer",padding:0,margin:0,outline:"none",boxSizing:"border-box"},title:"Fork this app",children:jsx(we,{style:{width:24,height:24}})})}var fr={status:Loader2,agent_message:MessageSquare,tool_use:Wrench,build_start:Package,build_complete:Check,build_error:AlertCircle,complete:Sparkles,error:AlertCircle},pr={status:"#60a5fa",agent_message:"#a0a0a0",tool_use:"#fbbf24",build_start:"#c084fc",build_complete:"#6b7280",build_error:"#f87171",complete:"#6b7280",error:"#f87171"},mr={read:FileSearch,write:Pencil,search:FileSearch,shell:Terminal,build:Package},gr={read:"#60a5fa",write:"#fbbf24",search:"#60a5fa",shell:"#a78bfa",build:"#c084fc"};function je(e){let t=e.data;switch(e.type){case "status":return `${t.message||t.status||"..."}`;case "agent_message":{let r=String(t.content||"");return /failed:/i.test(r)&&(r.includes("ENOENT")||r.includes("{")||r.includes("/Users/"))?"Adapting approach...":r}case "tool_use":return String(t.label||"Working on it");case "build_start":return "Bundling your component...";case "build_complete":return "Build complete!";case "build_error":return `Build failed: ${t.error}`;case "complete":return "Your fork is ready!";case "error":return `Error: ${t.error}`;default:return JSON.stringify(t)}}function bt({events:e}){let t=useRef(null);return useEffect(()=>{t.current&&(t.current.scrollTop=t.current.scrollHeight);},[e]),jsxs(Fragment,{children:[jsx("style",{children:`
1
+ import*as wt from'react';import wt__default,{createContext,useSyncExternalStore,useState,useRef,useEffect,useCallback,startTransition,createElement,Children,useContext,isValidElement}from'react';import*as Gr from'react-dom';import {createPortal}from'react-dom';import*as Vr from'react/jsx-runtime';import {jsx,Fragment,jsxs}from'react/jsx-runtime';import*as qr from'react/jsx-dev-runtime';import {createRoot}from'react-dom/client';import {ChevronDown,Check,PictureInPicture,PictureInPicture2,X,User,Undo2,RotateCcw,ArrowUp,Loader2,AlertCircle,Sparkles,Package,Wrench,MessageSquare,Code,Terminal,FileSearch,Pencil}from'lucide-react';var de="__FORK_SHARED__";function ut(){var t,r,o,n;let e=globalThis;return e[de]||(e[de]={}),(t=e[de]).react||(t.react=wt),(r=e[de])["react-dom"]||(r["react-dom"]=Gr),(o=e[de])["react/jsx-runtime"]||(o["react/jsx-runtime"]=Vr),(n=e[de])["react/jsx-dev-runtime"]||(n["react/jsx-dev-runtime"]=qr),e[de]}function dt(e){return Object.assign(ut(),e)}var Jr="__fork_preview_session__";function Ue(e){return `${Jr}${e}`}var z={apiKey:null,session:null},ft=new Set;function pt(){for(let e of ft)try{e();}catch(t){console.error("[fork-preview] subscriber threw",t);}}function zt(e){let t=Date.parse(e.expires_at);return Number.isFinite(t)?t<=Date.now():true}function Xr(e){if(typeof window>"u")return null;try{let t=window.sessionStorage.getItem(Ue(e));if(!t)return null;let r=JSON.parse(t);return !r||typeof r!="object"||typeof r.preview_session_id!="string"?null:zt(r)?(window.sessionStorage.removeItem(Ue(e)),null):r}catch{return null}}function Wt(e,t){if(!(typeof window>"u"))try{t?window.sessionStorage.setItem(Ue(e),JSON.stringify(t)):window.sessionStorage.removeItem(Ue(e));}catch{}}function $e(e){z.apiKey!==e&&(z.apiKey=e,z.session=Xr(e),pt());}function fe(){return z.session?zt(z.session)?(je(null),null):z.session:null}function je(e){z.session=e,z.apiKey&&Wt(z.apiKey,e),pt();}function Pe(e){z.session&&z.session.fork_id!==e&&(z.session={...z.session,fork_id:e},z.apiKey&&Wt(z.apiKey,z.session),pt());}function mt(){if(je(null),typeof window<"u")try{window.location.reload();}catch{}}function gt(e){return ft.add(e),()=>{ft.delete(e);}}var Kt="__fork_preview";function Gt(){if(typeof window>"u")return null;let e=window.location.hash;if(!e||e.length<2)return null;let r=new URLSearchParams(e.slice(1)).get(Kt);return typeof r=="string"&&r.length>0?r:null}function ht(e){if(typeof window>"u")return false;try{if(window.sessionStorage.getItem(`__fork_preview_session__${e}`))return !0}catch{}return qt()!==null}function Vt(){if(typeof window>"u")return;let e=window.location.hash;if(!e||e.length<2)return;let t=new URLSearchParams(e.slice(1));t.delete(Kt);let r=t.toString(),o=r?`#${r}`:"";try{window.history.replaceState(null,"",window.location.pathname+window.location.search+o);}catch{}}var pe=null;function qt(){if(pe)return pe;let e=Gt();return e?(pe=e,Vt(),pe):null}async function yt(e,t){$e(e);let r=fe();if(r)return pe=null,r;let o=pe??Gt();if(pe=null,!o)return null;Vt();try{let n=await fetch(`${t}/api/v1/preview/activate`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`},body:JSON.stringify({token:o})});if(!n.ok){let l=await n.json().catch(()=>({}));return console.warn(`[fork-preview] activate failed (${n.status}): ${l.error??"unknown"}`),null}let i=await n.json(),s={preview_session_id:i.preview_session_id,tenant_id:i.tenant_id,app_id:i.app_id,target:i.target,target_user_id:i.target_user_id,operator_id:i.operator_id,fork_id:i.fork_id??null,expires_at:i.expires_at};return je(s),s}catch(n){return console.warn("[fork-preview] activate threw",n),null}}function Zr(){return fe()}function Qr(){return null}function be(){return useSyncExternalStore(gt,Zr,Qr)}function ro(e){let t=Date.parse(e)-Date.now();if(!Number.isFinite(t)||t<=0)return "expired";let r=Math.floor(t/1e3),o=Math.floor(r/60),n=r%60;return o>=1?`${o}m ${n}s`:`${n}s`}function Xt(){let e=be(),[t,r]=useState(0);return useEffect(()=>{if(!e)return;let o=window.setInterval(()=>r(n=>n+1),1e3);return ()=>window.clearInterval(o)},[e]),e?jsxs("div",{role:"status","aria-live":"polite",title:`Fork preview \xB7 acting as ${e.target_user_id}`,style:{position:"fixed",top:0,left:"50%",transform:"translateX(-50%)",zIndex:2147483647,display:"inline-flex",alignItems:"center",gap:"12px",padding:"8px 18px 8px 16px",borderTopLeftRadius:0,borderTopRightRadius:0,borderBottomLeftRadius:"12px",borderBottomRightRadius:"12px",fontFamily:"system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif",fontSize:"13px",fontWeight:500,color:"#fef3c7",background:"linear-gradient(180deg, #7c2d12 0%, #b45309 100%)",boxShadow:"0 2px 8px rgba(0,0,0,0.35)",pointerEvents:"auto",border:"1px solid rgba(0,0,0,0.3)",borderTop:"none"},children:[jsx("span",{style:{width:"7px",height:"7px",borderRadius:"999px",background:"#fcd34d",boxShadow:"0 0 6px rgba(252,211,77,0.8)",flexShrink:0},"aria-hidden":true}),jsxs("span",{style:{whiteSpace:"nowrap"},children:[jsx("span",{style:{opacity:.85},children:"Preview \xB7 "}),jsx("code",{style:{fontFamily:"ui-monospace, SFMono-Regular, monospace"},children:e.target_user_id})]}),jsx("span",{"aria-hidden":true,style:{opacity:.5},children:"\xB7"}),jsx("span",{style:{whiteSpace:"nowrap",fontVariantNumeric:"tabular-nums"},children:ro(e.expires_at)}),jsx("button",{type:"button",onClick:()=>mt(),title:"Exit preview",style:{background:"rgba(0,0,0,0.3)",color:"#fef3c7",border:"1px solid rgba(254,243,199,0.25)",borderRadius:"999px",padding:"2px 9px",fontSize:"11px",fontWeight:500,cursor:"pointer",marginLeft:"2px",flexShrink:0},children:"Exit"})]}):null}var Yt=null;function bt(){if(typeof window>"u"||Yt)return;let e=document.createElement("div");e.setAttribute("data-fork-preview-banner-host",""),e.style.position="fixed",e.style.top="0",e.style.left="0",e.style.width="0",e.style.height="0",e.style.zIndex="2147483647";let t=e.attachShadow({mode:"closed"}),r=document.createElement("div");t.appendChild(r),document.body.appendChild(e);let o=createRoot(r);o.render(createElement(Xt)),Yt={host:e,root:o};}function Q(){let e=fe();if(!e)return {};let t={"X-Fork-Preview-Session":e.preview_session_id};return e.fork_id&&(t["X-Fork-Preview-Fork-Id"]=e.fork_id),t}var Qt=createContext(null);function Zt(e,t){if(!t)return t;try{return new URL(t,`${e.replace(/\/+$/,"")}/`).toString()}catch{return t}}function ao(e,t){let r={};for(let[o,n]of Object.entries(t.boundaries||{}))r[o]={...n,moduleUrl:Zt(e,n.moduleUrl),cssUrls:Array.isArray(n.cssUrls)?n.cssUrls.map(i=>Zt(e,i)):[]};return r}function lo(e){let{apiKey:t,baseUrl:r,children:o,appId:n,shared:i}=e,s="userId"in e?e.userId:void 0,l="authUrl"in e?e.authUrl:void 0,[R]=useState(()=>($e(t),ht(t))),[m,f]=useState({}),[S,P]=useState(s?{userId:s,userHash:void 0}:null),[y,k]=useState(!!s||R),[h,w]=useState({}),[A,x]=useState(!n),[L,C]=useState(0),_=useRef(new Map),v=useRef(new Map),[g,c]=useState(0),F=useRef(new Set),b=useRef(new Map),u=useRef(void 0);ut(),useEffect(()=>{let T=false;return yt(t,r).then(()=>{T||bt();}),()=>{T=true;}},[]);let d=be();i&&u.current!==i&&(dt(i),u.current=i),useEffect(()=>{l&&(R||(k(false),fetch(l,{credentials:"include"}).then(T=>{if(!T.ok)throw new Error(`Auth endpoint returned ${T.status}`);return T.json()}).then(T=>{if(!T.userId||typeof T.userId!="string")throw new Error("authUrl response must include userId");P({userId:T.userId,userHash:T.userHash});}).catch(T=>{console.error("[ForkProvider] Failed to fetch user identity from authUrl:",T.message);}).finally(()=>{k(true);})));},[l,R]),useEffect(()=>{!l&&s&&(P({userId:s,userHash:void 0}),k(true));},[s,l]);let p=S?.userId??"",N=S?.userHash,O=d?d.target_user_id:p,U=d?void 0:N,J=!!n,Z=useCallback(async()=>{if(!J){w({}),x(true),C(M=>M+1);return}if(!y){x(false);return}if(!O||!n){w({}),x(true),C(M=>M+1);return}let T=new URLSearchParams({appId:n,userId:O});U&&T.set("userHash",U),x(false);try{let M=await fetch(`${r}/api/v1/boundaries/manifest?${T.toString()}`,{headers:{Authorization:`Bearer ${t}`,...Q()}});if(!M.ok)throw new Error(`${M.status}`);let I=await M.json();w(ao(r,I));}catch(M){console.error("[ForkProvider] Failed to fetch module override manifest:",M.message),w({});}finally{C(M=>M+1),x(true);}},[t,n,r,y,J,U,O,d?.preview_session_id,d?.fork_id]);useEffect(()=>{if(!O)return;let T=new URLSearchParams({userId:O});U&&T.set("userHash",U),fetch(`${r}/api/v1/forks/active?${T.toString()}`,{headers:{Authorization:`Bearer ${t}`,...Q()}}).then(M=>{if(!M.ok)throw new Error(`${M.status}`);return M.json()}).then(M=>{M&&typeof M=="object"&&f(M);}).catch(()=>{});},[t,O,U,r,d?.preview_session_id,d?.fork_id]),useEffect(()=>{Z();},[Z]);let re=useCallback((T,M)=>{f(I=>({...I,[T]:M}));},[]),j=useCallback(T=>{f(M=>{let I={...M};return delete I[T],I});},[]),oe=useCallback(T=>{F.current.add(T);},[]),X=useCallback(T=>F.current.has(T)?(F.current.delete(T),true):false,[]),ie=useCallback((T,M)=>{b.current.set(T,M);},[]),W=useCallback((T,M)=>b.current.get(T)!==M?false:(b.current.delete(T),true),[]),Le=useCallback(T=>{if(!n)return;let M=JSON.stringify(T);_.current.get(T.id)===M||v.current.get(T.id)?.signature===M||(v.current.set(T.id,{boundary:T,signature:M}),c(V=>V+1));},[n]);useEffect(()=>{if(!n||v.current.size===0)return;let T=setTimeout(()=>{let M=Array.from(v.current.values());M.length!==0&&fetch(`${r}/api/v1/boundaries`,{method:"POST",headers:{Authorization:`Bearer ${t}`,"Content-Type":"application/json"},body:JSON.stringify({appId:n,boundaries:M.map(I=>I.boundary)})}).then(I=>{if(!I.ok)throw new Error(`${I.status}`)}).then(()=>{for(let I of M)v.current.get(I.boundary.id)?.signature===I.signature&&(v.current.delete(I.boundary.id),_.current.set(I.boundary.id,I.signature));}).catch(I=>{console.error("[ForkProvider] Failed to register module boundaries:",I.message);});},50);return ()=>{clearTimeout(T);}},[t,n,r,g]);let xe=useCallback(T=>h[T],[h]),Be=useCallback(async()=>{if(!U)throw new Error("Reset requires verified user identity (provide authUrl / userHash).");let T=new URLSearchParams({userId:O,userHash:U}),M=await fetch(`${r}/api/v1/forks/all?${T.toString()}`,{method:"DELETE",headers:{Authorization:`Bearer ${t}`}});if(!M.ok){let V=await M.json().catch(()=>({}));throw new Error(V.error||`API error: ${M.status}`)}let I=await M.json().catch(()=>({}));f({}),w({}),x(true),C(V=>V+1),F.current.clear(),b.current.clear();try{for(let V=sessionStorage.length-1;V>=0;V-=1){let K=sessionStorage.key(V);K&&K.startsWith("__fork_animated_")&&sessionStorage.removeItem(K);}}catch{}return I},[t,r,U,O]);return jsx(Qt.Provider,{value:{apiKey:t,userId:O,userHash:U,baseUrl:r,appId:n,forks:m,moduleOverridesEnabled:J,moduleManifestReady:A,moduleManifestVersion:L,previewSession:d,setSlotFork:re,clearSlotFork:j,skipAnimationForSlot:oe,shouldSkipAnimation:X,queueBoundaryAnimation:ie,consumeBoundaryAnimation:W,registerBoundary:Le,getBoundaryOverride:xe,refreshModuleManifest:Z,resetAllForks:Be},children:o})}function G(){let e=useContext(Qt);if(!e)throw new Error("useForkContext must be used within <ForkProvider>");return e}function ze(e){return G().forks[e]}var _e=class{constructor(t){this.values=new Map;this.snapshots=new Map;this.listeners=new Map;this.eventHandlers=new Map;this.slotId=t,window.__FORK_BRIDGE__||(window.__FORK_BRIDGE__={}),window.__FORK_BRIDGE__[t]=this;}set(t,r){let o=this.values.get(t);if(Object.is(o,r))return;if(o!==void 0&&r!==null&&o!==null&&typeof o=="object"&&typeof r=="object")try{if(JSON.stringify(o)===JSON.stringify(r))return}catch{}this.values.set(t,r),this.snapshots.set(t,r);let n=this.listeners.get(t);n&&n.forEach(i=>i());}get(t){return this.values.get(t)}getSnapshot(t){return this.snapshots.get(t)}subscribe(t,r){return this.listeners.has(t)||this.listeners.set(t,new Set),this.listeners.get(t).add(r),()=>{this.listeners.get(t)?.delete(r);}}useValue(t){let r=window.__FORK_REACT__;return r?.useSyncExternalStore?r.useSyncExternalStore(o=>this.subscribe(t,o),()=>this.getSnapshot(t)):(console.warn("[ForkBridge] React.useSyncExternalStore not available, returning static value"),this.values.get(t))}emit(t,...r){let o=this.eventHandlers.get(t);o&&o.forEach(n=>n(...r));}on(t,r){return this.eventHandlers.has(t)||this.eventHandlers.set(t,new Set),this.eventHandlers.get(t).add(r),()=>{this.eventHandlers.get(t)?.delete(r);}}destroy(){this.listeners.clear(),this.eventHandlers.clear(),this.values.clear(),this.snapshots.clear();let t=window.__FORK_BRIDGE__;t&&delete t[this.slotId];}};function vt(e,t){let r;try{r=Children.only(e);}catch{let n=Children.count(e);throw new Error(`<ForkSlot slotId="${t}"> must wrap exactly one React component, got ${n} children. Wrap your slot's contents in a single named component, e.g. <ForkSlot slotId="${t}"><MyShell ...props /></ForkSlot>.`)}let o=r.type;if(typeof o=="string")throw new Error(`<ForkSlot slotId="${t}"> child must be a React component (function or class), not an HTML element <${o}>. Wrap your slot's contents in a single named component, e.g. <ForkSlot slotId="${t}"><MyShell ...props /></ForkSlot>.`);if(typeof o=="symbol")throw new Error(`<ForkSlot slotId="${t}"> child must be a single React component, not a fragment or special React element. Wrap your slot's contents in a single named component, e.g. <ForkSlot slotId="${t}"><MyShell ...props /></ForkSlot>.`);return r}var tr=new Set;function rr(e){let t=[],r=e.querySelectorAll("*");for(let o of r){if(!(o instanceof HTMLElement))continue;let n=o.getBoundingClientRect();if(n.width<10||n.height<10||["SCRIPT","STYLE","META","LINK"].includes(o.tagName))continue;let i=getComputedStyle(o),s=parseFloat(i.borderTopLeftRadius)||0;t.push({tag:o.tagName,className:o.className||"",text:(o.textContent||"").slice(0,50).trim(),rect:n,borderRadius:s});}return t}function mo(e,t){let r=[];for(let o of t)if(!e.find(i=>i.tag===o.tag&&i.className===o.className&&Math.abs(i.rect.top-o.rect.top)<20&&Math.abs(i.rect.left-o.rect.left)<20)&&!r.some(s=>o.rect.top>=s.rect.top&&o.rect.left>=s.rect.left&&o.rect.right<=s.rect.right&&o.rect.bottom<=s.rect.bottom)){for(let s=r.length-1;s>=0;s--){let l=r[s];l.rect.top>=o.rect.top&&l.rect.left>=o.rect.left&&l.rect.right<=o.rect.right&&l.rect.bottom<=o.rect.bottom&&r.splice(s,1);}r.push({rect:o.rect,borderRadius:o.borderRadius});}return r}function go(e,t){let r=[];for(let o of e)if(!t.find(i=>i.tag===o.tag&&i.className===o.className&&Math.abs(i.rect.top-o.rect.top)<20&&Math.abs(i.rect.left-o.rect.left)<20)&&!r.some(s=>o.rect.top>=s.rect.top&&o.rect.left>=s.rect.left&&o.rect.right<=s.rect.right&&o.rect.bottom<=s.rect.bottom)){for(let s=r.length-1;s>=0;s--){let l=r[s];l.rect.top>=o.rect.top&&l.rect.left>=o.rect.left&&l.rect.right<=o.rect.right&&l.rect.bottom<=o.rect.bottom&&r.splice(s,1);}r.push({rect:o.rect,borderRadius:o.borderRadius});}return r}function nr(e,t,r,o,n){return n=Math.max(0,Math.min(n,r/2,o/2)),n===0?`M ${e} ${t} L ${e+r} ${t} L ${e+r} ${t+o} L ${e} ${t+o} Z`:[`M ${e+n} ${t}`,`L ${e+r-n} ${t}`,`A ${n} ${n} 0 0 1 ${e+r} ${t+n}`,`L ${e+r} ${t+o-n}`,`A ${n} ${n} 0 0 1 ${e+r-n} ${t+o}`,`L ${e+n} ${t+o}`,`A ${n} ${n} 0 0 1 ${e} ${t+o-n}`,`L ${e} ${t+n}`,`A ${n} ${n} 0 0 1 ${e+n} ${t}`,"Z"].join(" ")}function or(e){let t="http://www.w3.org/2000/svg",r=document.createElement("div");r.setAttribute("data-fork-highlights","true"),r.style.cssText="position:fixed;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:9999;";let o=document.createElementNS(t,"svg");o.setAttribute("width","100%"),o.setAttribute("height","100%"),o.style.cssText="position:absolute;top:0;left:0;overflow:visible;";let n=document.createElementNS(t,"defs");o.appendChild(n);let i=[];for(let f=0;f<e.length;f++){let{rect:S,borderRadius:P}=e[f],y=S.left-.5,k=S.top-.5,h=S.width+1,w=S.height+1,A=Math.min(P+.5,h/2,w/2),x=nr(y,k,h,w,A),L=`__fork-glow-${f}`,C=document.createElementNS(t,"filter");C.setAttribute("id",L),C.setAttribute("x","-100%"),C.setAttribute("y","-100%"),C.setAttribute("width","300%"),C.setAttribute("height","300%");let _=document.createElementNS(t,"feGaussianBlur");_.setAttribute("in","SourceGraphic"),_.setAttribute("stdDeviation","8"),C.appendChild(_),n.appendChild(C);let v=`__fork-mask-${f}`,g=document.createElementNS(t,"mask");g.setAttribute("id",v),g.setAttribute("maskUnits","userSpaceOnUse"),g.setAttribute("x",String(y-200)),g.setAttribute("y",String(k-200)),g.setAttribute("width",String(h+400)),g.setAttribute("height",String(w+400));let c=document.createElementNS(t,"rect");c.setAttribute("x",String(y-200)),c.setAttribute("y",String(k-200)),c.setAttribute("width",String(h+400)),c.setAttribute("height",String(w+400)),c.setAttribute("fill","white"),g.appendChild(c);let F=document.createElementNS(t,"path");F.setAttribute("d",x),F.setAttribute("fill","black"),g.appendChild(F),n.appendChild(g);let b=document.createElementNS(t,"g");b.setAttribute("mask",`url(#${v})`),b.setAttribute("opacity","0");let u=document.createElementNS(t,"g");u.setAttribute("filter",`url(#${L})`);let d=document.createElementNS(t,"path");d.setAttribute("d",x),d.setAttribute("fill","none"),d.setAttribute("stroke","rgba(150, 185, 220, 0.6)"),d.setAttribute("stroke-width","6"),d.setAttribute("stroke-linecap","round"),u.appendChild(d),b.appendChild(u),o.appendChild(b);let p=document.createElementNS(t,"path");p.setAttribute("d",x),p.setAttribute("fill","none"),p.setAttribute("stroke","rgba(150, 185, 220, 0.35)"),p.setAttribute("stroke-width","2"),p.setAttribute("stroke-linecap","round"),p.setAttribute("opacity","0"),o.appendChild(p),i.push(d,p),d.__group=b;}r.appendChild(o),document.body.appendChild(r);let s=[];for(let f=0;f<i.length;f+=2){let S=i[f],P=i[f+1],y=S.__group,k=P.getTotalLength(),h=S.getTotalLength();if(k<=0)continue;let w=k*.35;P.setAttribute("stroke-dasharray",`${w} ${k-w}`),P.setAttribute("stroke-dashoffset","0"),s.push(P.animate([{strokeDashoffset:0,opacity:0,offset:0},{strokeDashoffset:-0.2*k,opacity:.92,offset:.06},{strokeDashoffset:-2*k,opacity:.92,offset:.92},{strokeDashoffset:-2.25*k,opacity:0,offset:1}],{duration:14e3,easing:"ease-in-out",fill:"forwards"}));let A=h*.35;S.setAttribute("stroke-dasharray",`${A} ${h-A}`),S.setAttribute("stroke-dashoffset","0"),s.push(S.animate([{strokeDashoffset:0,offset:0},{strokeDashoffset:-0.2*h,offset:.06},{strokeDashoffset:-2*h,offset:.92},{strokeDashoffset:-2.25*h,offset:1}],{duration:14e3,easing:"ease-in-out",fill:"forwards"})),s.push(y.animate([{opacity:0,offset:0},{opacity:.92,offset:.06},{opacity:.92,offset:.92},{opacity:0,offset:1}],{duration:14e3,easing:"ease-in-out",fill:"forwards"}));}let l=false,R=()=>{if(l)return;l=true,clearTimeout(m);for(let S of s)try{S.cancel();}catch{}let f=r.animate([{opacity:1},{opacity:0}],{duration:400,fill:"forwards"});f.onfinish=()=>r.remove(),window.removeEventListener("click",R);},m=setTimeout(R,14500);return setTimeout(()=>{l||window.addEventListener("click",R);},500),R}function ho(e){let t="http://www.w3.org/2000/svg",r=document.createElement("div");r.setAttribute("data-fork-removed","true"),r.style.cssText="position:fixed;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:9999;";let o=document.createElementNS(t,"svg");o.setAttribute("width","100%"),o.setAttribute("height","100%"),o.style.cssText="position:absolute;top:0;left:0;overflow:visible;";let n=document.createElementNS(t,"defs"),i=document.createElementNS(t,"filter");i.setAttribute("id","__fork-removed-shadow"),i.setAttribute("x","-10%"),i.setAttribute("y","-10%"),i.setAttribute("width","120%"),i.setAttribute("height","120%");let s=document.createElementNS(t,"feDropShadow");s.setAttribute("dx","0"),s.setAttribute("dy","1"),s.setAttribute("stdDeviation","2"),s.setAttribute("flood-color","rgba(0,0,0,0.15)"),i.appendChild(s),n.appendChild(i),o.appendChild(n);for(let{rect:l,borderRadius:R}of e){let m=l.left,f=l.top,S=l.width,P=l.height,y=Math.min(R,S/2,P/2),k=nr(m,f,S,P,y),h=document.createElementNS(t,"path");h.setAttribute("d",k),h.setAttribute("fill","none"),h.setAttribute("stroke","rgba(120, 125, 135, 0.6)"),h.setAttribute("stroke-width","1.5"),h.setAttribute("stroke-dasharray","8 4"),h.setAttribute("stroke-linecap","round"),h.setAttribute("filter","url(#__fork-removed-shadow)"),h.setAttribute("opacity","0"),o.appendChild(h),h.animate([{opacity:0,offset:0},{opacity:.6,offset:.08},{opacity:.05,offset:.45},{opacity:.6,offset:.85},{opacity:.05,offset:1}],{duration:5e3,easing:"ease-in-out",fill:"forwards"});}return r.appendChild(o),document.body.appendChild(r),r}function yo(e,t){if(e===t)return true;let r=Object.keys(e);if(r.length!==Object.keys(t).length)return false;for(let o of r)if(!Object.is(e[o],t[o]))return false;return true}var bo=wt__default.memo(function({component:t,containerRef:r,wrapperStyle:o,hostProps:n}){return jsx("div",{ref:r,style:o,children:jsx(t,{...n})})},(e,t)=>e.component===t.component&&yo(e.hostProps,t.hostProps)),kt=class extends wt__default.Component{constructor(t){super(t),this.state={hasError:false};}static getDerivedStateFromError(){return {hasError:true}}componentDidCatch(t){console.error(`[Fork:${this.props.slotId}] fork render failed`,t);}componentDidUpdate(t){t.resetKey!==this.props.resetKey&&this.state.hasError&&this.setState({hasError:false});}render(){return this.state.hasError?this.props.fallback:this.props.children}};function sr({slotId:e,children:t,githubRepo:r,shared:o,events:n}){vt(t,e);let i=ze(e),{baseUrl:s,apiKey:l,appId:R,shouldSkipAnimation:m}=G(),[f,S]=useState(null),P=useRef(null),y=useRef(null),k=useRef(null),h=useRef(false),w=useRef(null),A=useRef(null),x=!!(o||n),L=useRef(null);x&&!L.current&&(L.current=new _e(e));let C=useRef(n);if(C.current=n,useEffect(()=>{if(x)return ()=>{L.current?.destroy(),L.current=null;}},[x,e]),x&&L.current&&o)for(let[F,b]of Object.entries(o))L.current.set(F,b);useEffect(()=>{if(!x)return;L.current||(L.current=new _e(e));let F=L.current,b=Object.keys(C.current||{}).map(u=>F.on(u,(...d)=>C.current?.[u]?.(...d)));return ()=>b.forEach(u=>u())},[x,e]),useEffect(()=>{if(tr.has(e))return;tr.add(e);let F={id:e,appId:R,label:e,eventsShape:"{ navigate?: string }",currentLayout:"",githubRepo:r,mode:"direct",sharedKeys:o?Object.keys(o):[],eventNames:n?Object.keys(n):[],propsShape:"",callbackNames:[]};fetch(`${s}/api/v1/slots`,{method:"POST",headers:{Authorization:`Bearer ${l}`,"Content-Type":"application/json"},body:JSON.stringify(F)}).catch(()=>{});},[e,s,l,r,R]);let _=i?.id||null;useEffect(()=>{if(i?.bundleUrl,P.current,y.current,!i?.bundleUrl||!_){return}let F=`${s}${i.bundleUrl.replace("bundle.js","component.js")}`,b=`__fork_animated_${e}`,u=sessionStorage.getItem(b),d=m(e),p=!d&&u!==_;if(d&&_&&sessionStorage.setItem(b,_),p&&y.current){let Z=rr(y.current);k.current=Z,h.current=true,`${e}${Z.length}`;}window.__FORK_REACT__=wt__default,window.__FORK_REACT_DOM__=Gr,window.__FORK_REACT_JSX__=Vr;let N=Date.now(),O=`${s}${i.bundleUrl.replace("bundle.js","component.css")}?t=${N}`,U=document.createElement("link");U.rel="stylesheet",U.href=O,U.dataset.forkSlot=e,document.head.appendChild(U);let J=document.createElement("script");return J.src=F+"?t="+N,J.onload=()=>{let Z=window.__FORK_EXPORT__;if(Z?.default){if(y.current&&k.current&&h.current){let re=y.current.getBoundingClientRect(),j=y.current.cloneNode(true);j.style.position="fixed",j.style.top=`${re.top}px`,j.style.left=`${re.left}px`,j.style.width=`${re.width}px`,j.style.height=`${re.height}px`,j.style.flex="none",j.style.minHeight="auto",j.style.zIndex="9998",j.style.pointerEvents="none",j.style.overflow="hidden";let oe=getComputedStyle(y.current).backgroundColor;j.style.backgroundColor=oe&&oe!=="rgba(0, 0, 0, 0)"&&oe!=="transparent"?oe:getComputedStyle(document.body).backgroundColor||"#ffffff",document.body.appendChild(j);let X=y.current.querySelectorAll("*"),ie=j.querySelectorAll("*");for(let W=0;W<X.length;W++)X[W].scrollTop!==0&&(ie[W].scrollTop=X[W].scrollTop),X[W].scrollLeft!==0&&(ie[W].scrollLeft=X[W].scrollLeft);w.current=j;}S(()=>Z.default),P.current=_;}else console.error(`[Fork:${e}] component.js loaded but no default export found`);window.__FORK_EXPORT__=void 0;},J.onerror=()=>{console.error(`[Fork:${e}] failed to load component.js`);},document.head.appendChild(J),()=>{J.remove(),U.remove(),A.current&&(clearTimeout(A.current),A.current=null),w.current&&(w.current.remove(),w.current=null);}},[_,s,e]),useEffect(()=>{if(!h.current||!f||!y.current){`${e}${h.current}`,y.current;return}let F=k.current;if(!F){return}requestAnimationFrame(()=>{requestAnimationFrame(()=>{if(!y.current)return;let b=rr(y.current),u=mo(F,b),d=go(F,b),p=w.current;if(`${e}${u.length}${d.length}`,d.length>0&&p){let N=ho(d);A.current=setTimeout(()=>{A.current=null;let O=400;p.animate([{opacity:1},{opacity:0}],{duration:O,fill:"forwards"}),N.animate([{opacity:1},{opacity:0}],{duration:O,fill:"forwards"}),setTimeout(()=>{p.remove(),N.remove(),w.current=null,u.length>0&&(or(u));},O);},3500);}else p&&(p.remove(),w.current=null),u.length>0&&(or(u));k.current=null,h.current=false,_&&(sessionStorage.setItem(`__fork_animated_${e}`,_),`${e}`);});});},[f]);let v={flex:1,minHeight:0,display:"flex",flexDirection:"column"};if(!i||i.status!=="complete"||!i.bundleUrl)return jsx("div",{ref:y,style:v,children:t});if(!f)return jsx("div",{ref:y,style:v,children:t});let c=t?.props??{};return jsx(kt,{slotId:e,resetKey:_,fallback:jsx("div",{ref:y,style:v,children:t}),children:jsx(bo,{component:f,containerRef:y,wrapperStyle:v,hostProps:c})})}var ar=new Set;function vo(e){return `{ ${Object.entries(e).map(([r,o])=>o==null?`${r}: unknown`:Array.isArray(o)?`${r}: ${o.length>0?typeof o[0]:"unknown"}[]`:`${r}: ${typeof o}`).join("; ")} }`}function lr(e,t=new Set){return Children.forEach(e,r=>{if(!isValidElement(r))return;let o=r.props;for(let[n,i]of Object.entries(o))typeof i=="function"&&/^on[A-Z]/.test(n)&&t.add(n);o.children&&lr(o.children,t);}),t}function So({slotId:e,props:t,children:r,allowedFetches:o,githubRepo:n,callbacks:i,mode:s="iframe",shared:l,events:R}){if(vt(r,e),s==="direct")return jsx(sr,{slotId:e,githubRepo:n,shared:l,events:R,children:r});let m=ze(e),{baseUrl:f,apiKey:S,appId:P}=G(),y=useRef(null),k=useRef(false),h=useRef(null),w=useRef(i);w.current=i;let A=useRef(t);A.current=t;let x=useRef(o);x.current=o,useEffect(()=>{if(typeof process<"u")return;let v=lr(r),g=new Set(i?Object.keys(i):[]),c=[...v].filter(F=>!g.has(F));c.length>0&&console.error(`[ForkSlot:${e}] Missing bridged callbacks! The following callback props are used by children but not passed to ForkSlot's \`callbacks\` prop:
2
+ `+c.map(F=>` - ${F}`).join(`
3
+ `)+"\n\nThe forked component will not be able to call these. Add them to the `callbacks` prop of <ForkSlot>.");},[e,r,i]),useEffect(()=>{ar.has(e)||(ar.add(e),fetch(`${f}/api/v1/slots`,{method:"POST",headers:{Authorization:`Bearer ${S}`,"Content-Type":"application/json"},body:JSON.stringify({id:e,appId:P,label:e,propsShape:t?vo(t):"",eventsShape:"{ navigate?: string }",currentLayout:"",githubRepo:n,callbackNames:i?Object.keys(i):[],mode:s||"iframe"})}).catch(()=>{}));},[e,f,S,n,P]);let L=useCallback(v=>{let g=y.current;if(g?.contentWindow&&k.current){let c=w.current?Object.keys(w.current):[];g.contentWindow.postMessage({type:"slot:props",props:v,callbackNames:c},"*"),h.current=null;}else h.current=v;},[]),C=useCallback((v,g)=>{let c=x.current;return !c||c.length===0?false:c.some(F=>{let[b,u]=F.split(" "),d=g.split("?")[0];return v.toUpperCase()===b.toUpperCase()&&d.startsWith(u)})},[]);if(useEffect(()=>{if(!m?.bundleUrl)return;let v=async g=>{if(g.source===y.current?.contentWindow){if(g.data?.type==="slot:ready")k.current=true,y.current?.contentWindow?.postMessage({type:"slot:allowed-fetches",paths:x.current||[]},"*"),x.current,h.current?L(h.current):L(A.current||{});else if(g.data?.type==="slot:event"){let c=g.data.event;c?.navigate&&(window.location.hash=c.navigate);}else if(g.data?.type==="slot:clipboard-write")navigator.clipboard.writeText(g.data.text).catch(c=>{console.warn(`[ForkSlot:${e}] clipboard write failed:`,c.message);});else if(g.data?.type==="slot:callback"){let{name:c,args:F}=g.data,b=w.current?.[c];b?(b(...F||[])):console.warn(`[ForkSlot:${e}] unknown callback: ${c}`);}else if(g.data?.type==="slot:fetch"){let{id:c,method:F,url:b,body:u}=g.data,d=y.current?.contentWindow;if(!d)return;let p=F||"GET";if(!C(p,b)){console.warn(`[ForkSlot:${e}] BLOCKED fetch #${c}: ${p} ${b} \u2014 not in allowedFetches`),d.postMessage({type:"slot:fetch-response",id:c,error:`Fetch not allowed: ${p} ${b}`},"*");return}try{let N={method:p};u&&p!=="GET"&&(N.headers={"Content-Type":"application/json"},N.body=JSON.stringify(u));let O=await fetch(b,N),U=await O.json();`${e}${c}${O.status}`,d.postMessage({type:"slot:fetch-response",id:c,data:U,status:O.status},"*");}catch(N){console.error(`[ForkSlot:${e}] fetch #${c} failed:`,N.message),d.postMessage({type:"slot:fetch-response",id:c,error:N.message},"*");}}}};return window.addEventListener("message",v),()=>{window.removeEventListener("message",v),k.current=false;}},[m?.bundleUrl,e,L,C]),useEffect(()=>{m?.bundleUrl&&k.current&&L(t||{});},[t,m?.bundleUrl,L]),!m||m.status!=="complete"||!m.bundleUrl)return `${e}${m?.status||"none"}${m?.bundleUrl||"none"}`,jsx(Fragment,{children:r});`${e}${m.bundleUrl}`;let _=`${f}${m.bundleUrl.replace("/bundle.js","/host")}`;return jsx("iframe",{ref:y,src:_,sandbox:"allow-scripts allow-same-origin allow-forms allow-clipboard-write",title:`Forked ${e}`,style:{width:"100%",border:"none",flex:1,minHeight:0}})}function Ke({style:e={width:20,height:20},...t}){return jsxs("svg",{viewBox:"320 95 270 345",fill:"none",xmlns:"http://www.w3.org/2000/svg",style:e,...t,children:[jsx("path",{stroke:"currentColor",strokeWidth:"30",strokeLinejoin:"round",strokeLinecap:"round",d:"M357.789 145.428c0-16.186 13.121-29.307 29.307-29.307 7.773 0 15.227 3.088 20.723 8.584 5.496 5.496 8.584 12.95 8.584 20.723 0 16.186-13.121 29.307-29.307 29.307s-29.307-13.121-29.307-29.307z"}),jsx("path",{stroke:"currentColor",strokeWidth:"30",strokeLinejoin:"round",strokeLinecap:"round",d:"M387.096 174.735v188"}),jsx("path",{stroke:"currentColor",strokeWidth:"30",strokeLinejoin:"round",strokeLinecap:"round",d:"M357.789 394.572c0-16.186 13.121-29.307 29.307-29.307 7.773 0 15.227 3.088 20.723 8.584 5.496 5.496 8.584 12.95 8.584 20.723 0 16.186-13.121 29.307-29.307 29.307s-29.307-13.121-29.307-29.307z"}),jsx("path",{stroke:"currentColor",strokeWidth:"30",strokeLinejoin:"round",strokeLinecap:"round",d:"M388.739 319c10.168-6.317 43.997-26.932 61.009-37.9 17.012-10.968 31.758-19.978 41.064-27.91 9.305-7.931 11.782-14.213 14.767-19.679 2.985-5.465 3.014-8.99 3.141-13.114.128-4.124-.999-8.178-2.377-11.632-1.378-3.454-3.563-6.55-5.889-9.094-2.326-2.543-4.98-4.679-8.066-6.167-3.085-1.488-6.624-2.601-10.448-2.76-3.823-.159-8.624.2-12.495 1.806-3.871 1.607-8.047 4.68-10.732 7.835-2.685 3.156-4.446 7.448-5.378 11.099-.932 3.651-.742 7.485-.213 10.807.528 3.322 1.864 6.46 3.386 9.123 1.523 2.663 3.543 4.843 5.75 6.854 2.207 2.011 4.38 3.914 7.491 5.214 3.111 1.3 6.57 2.808 11.178 2.584 4.607-.225 9.363-.471 16.466-3.932 7.103-3.46 16.076-5.382 26.154-16.831 10.077-11.449 28.593-43.219 34.312-51.862"}),jsx("path",{fill:"currentColor",stroke:"currentColor",strokeWidth:"1",strokeLinejoin:"round",d:"M527.117 162.547L570.487 134.368Q577.196 130.009 577.624 137.997L580.39 189.69Q580.818 197.678 573.69 194.047L527.536 170.538Q520.408 166.907 527.117 162.547Z"})]})}function xt({onClick:e}){let[t,r]=useState(false),[o,n]=useState(false),i=t?48:40;return jsx("button",{onClick:e,onMouseEnter:()=>r(true),onMouseLeave:()=>{r(false),n(false);},onMouseDown:()=>n(true),onMouseUp:()=>n(false),style:{position:"fixed",bottom:24,right:24,zIndex:40,width:i,height:i,borderRadius:"50%",backgroundColor:t?"rgba(255, 255, 255, 1)":"rgba(255, 255, 255, 0.3)",border:t?"1px solid rgba(156, 163, 175, 1)":"1px solid rgba(156, 163, 175, 0.3)",display:"flex",alignItems:"center",justifyContent:"center",color:t?"#1c4587":"rgba(28, 69, 135, 0.5)",boxShadow:t?"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)":"0 1px 2px 0 rgba(0, 0, 0, 0.05)",transform:o?"scale(0.95)":"scale(1)",transition:"all 300ms",cursor:"pointer",padding:0,margin:0,outline:"none",boxSizing:"border-box"},title:"Fork this app",children:jsx(Ke,{style:{width:24,height:24}})})}var To={status:Loader2,agent_message:MessageSquare,tool_use:Wrench,build_start:Package,build_complete:Check,build_error:AlertCircle,complete:Sparkles,error:AlertCircle},Mo={status:"#60a5fa",agent_message:"#a0a0a0",tool_use:"#fbbf24",build_start:"#c084fc",build_complete:"#6b7280",build_error:"#f87171",complete:"#6b7280",error:"#f87171"},Lo={read:FileSearch,write:Pencil,search:FileSearch,shell:Terminal,build:Package},Bo={read:"#60a5fa",write:"#fbbf24",search:"#60a5fa",shell:"#a78bfa",build:"#c084fc"};function Rt(e){let t=e.data;switch(e.type){case "status":return `${t.message||t.status||"..."}`;case "agent_message":{let r=String(t.content||"");return /failed:/i.test(r)&&(r.includes("ENOENT")||r.includes("{")||r.includes("/Users/"))?"Adapting approach...":r}case "tool_use":return String(t.label||"Working on it");case "build_start":return "Bundling your component...";case "build_complete":return "Build complete!";case "build_error":return `Build failed: ${t.error}`;case "complete":return "Your fork is ready!";case "error":return `Error: ${t.error}`;default:return JSON.stringify(t)}}function hr({events:e}){let t=useRef(null);return useEffect(()=>{t.current&&(t.current.scrollTop=t.current.scrollHeight);},[e]),jsxs(Fragment,{children:[jsx("style",{children:`
4
4
  @keyframes __fork-spin {
5
5
  from { transform: rotate(0deg); }
6
6
  to { transform: rotate(360deg); }
@@ -18,7 +18,7 @@ import*as He from'react';import He__default,{createContext,useState,useRef,useEf
18
18
  .__fork-stream::-webkit-scrollbar-thumb:hover {
19
19
  background: rgba(255, 255, 255, 0.3);
20
20
  }
21
- `}),jsxs("div",{className:"__fork-stream",ref:t,style:{scrollbarWidth:"thin",scrollbarColor:"rgba(255, 255, 255, 0.15) transparent",backgroundColor:"#1a1a2e",borderRadius:"8px",padding:"12px",fontFamily:"ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace",fontSize:"11px",maxHeight:"300px",overflowY:"auto",boxSizing:"border-box"},children:[e.length===0&&jsxs("div",{style:{display:"flex",alignItems:"center",gap:"6px",color:"#6b7280",fontSize:"11px"},children:[jsx(Loader2,{style:{width:"12px",height:"12px",animation:"__fork-spin 1s linear infinite",flexShrink:0}}),"Connecting to agent..."]}),e.map((r,o)=>{let n=o===e.length-1,i=r.type==="complete"||r.type==="error"||r.type==="build_complete"||r.type==="build_error",s=n&&!i&&(r.type==="status"||r.type==="tool_use"||r.type==="build_start"),a=fr[r.type]||Code,b=pr[r.type]||"#9ca3af";if(r.type==="tool_use"){let d=String(r.data.category||"");a=mr[d]||Wrench,b=gr[d]||"#fbbf24";}return s?a=Loader2:!n&&r.type==="status"&&(a=Check,b="#4ade80"),jsxs("div",{style:{display:"flex",gap:"6px",marginBottom:"6px",lineHeight:1.625},children:[jsx(a,{style:{width:"12px",height:"12px",marginTop:"2px",flexShrink:0,color:b,...s?{animation:"__fork-spin 1s linear infinite"}:{}}}),jsx("span",{style:{color:n&&!i?"#d1d5db":"#6b7280",wordBreak:"break-all"},children:je(r)})]},o)})]})]})}var xr=["Dark mode redesign","New workflow for adding to this page","Data-dense analytics view"],wt=35,Rr="Working on Feature",Er="Built Custom Feature",$r=360,Fe=350;function Ar(e){return e.length<=wt?e:e.slice(0,wt-3).trimEnd()+"..."}function Cr({events:e}){let[t,r]=useState("Setting up environment..."),[o,n]=useState(true),i=useRef(t),s=useRef(false);return useEffect(()=>{if(!s.current){for(let b of e)if(b.type==="status"&&String(b.data.message||"").includes("Agent started")){s.current=true;break}}let a="Setting up environment...";if(s.current)for(let b=e.length-1;b>=0;b--){let d=e[b];if(d.type==="tool_use"||d.type==="build_start"||d.type==="build_complete"){a=Ar(je(d));break}}if(a!==i.current){n(false);let b=setTimeout(()=>{r(a),i.current=a,n(true);},200);return ()=>clearTimeout(b)}},[e]),jsx("span",{style:{fontSize:11,color:"#d1d5db",fontWeight:500,opacity:o?1:0,transition:"opacity 0.2s ease",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",minWidth:0},children:t})}function Tr({children:e}){let[t,r]=useState(null);return useEffect(()=>{if(typeof document>"u")return;let o=document.createElement("div");o.setAttribute("data-fork-panel-host",""),o.style.cssText="all: initial;",document.body.appendChild(o);let n=o.attachShadow({mode:"open"});return r(n),()=>{o.remove();}},[]),t?createPortal(e,t):null}function xe({state:e,fork:t,events:r,error:o,slotId:n,targetId:i,targetLabel:s,historyMode:a="slot",examplePrompts:b=xr,onSubmit:d,onUndo:m,onClose:S,baseUrl:_,apiKey:w,userId:h,userHash:l,appId:$,embedded:T=false}){let[R,C]=useState(""),[F,y]=useState([]),[E,c]=useState(false),[u,x]=useState(false),[k,f]=useState(false),[g,p]=useState(false),[B,U]=useState(false),[K,V]=useState(false),[G,Y]=useState(null),[O,q]=useState(false),[W,te]=useState(false),[v,P]=useState(null),[N,z]=useState(false),Z=useRef(null),ge=useRef(null),{resetAllForks:_t}=j(),X$1=i??n??"",Pe=(s||X$1).replace(/[-_]+/g," ").replace(/\b\w/g,A=>A.toUpperCase()),_e=useRef(""),he=T?true:u&&!k,Mt=r.find(A=>{let L=A.data;return A.type==="status"&&L.summary})?.data?.summary||t?.summary||Rr,re=r.find(A=>{let L=A.data;return (A.type==="status"||A.type==="complete")&&typeof L?.estimateMinutes=="number"})?.data?.estimateMinutes??t?.estimateMinutes;useEffect(()=>{if(a==="none"){c(true);return}if(!_||!w||!h||!X$1||E)return;let A=new URLSearchParams({userId:h});if(l&&A.set("userHash",l),a==="slot")A.set("slotId",X$1);else if(a==="boundary"){if(!$){c(true);return}A.set("boundaryId",X$1),A.set("appId",$);}fetch(`${_}/api/v1/forks/history?${A.toString()}`,{headers:{Authorization:`Bearer ${w}`}}).then(L=>L.ok?L.json():[]).then(L=>{let H=[];for(let ye of L)ye.role==="user"?H.push({type:"user",text:ye.content}):H.push({type:"applied",text:ye.content});H.length>0&&y(H),c(true);}).catch(()=>c(true));},[w,$,_,E,a,X$1,l,h]),useEffect(()=>{e==="complete"&&q(false);},[e]),useEffect(()=>{if(T)return;let A=requestAnimationFrame(()=>x(true));return ()=>cancelAnimationFrame(A)},[T]),useEffect(()=>{if(he&&(e==="prompting"||e==="complete")){let A=setTimeout(()=>Z.current?.focus(),T?100:Fe+100);return ()=>clearTimeout(A)}},[he,T,e]),useEffect(()=>{if(e==="complete"&&_e.current){let L=r.find(H=>H.type==="complete")?.data?.summary||t?.summary||Er;y(H=>H[H.length-1]?.type==="applied"?H:[...H,{type:"applied",text:L}]),C(""),setTimeout(()=>Z.current?.focus(),200);}},[e,Pe,r,t?.summary]),useEffect(()=>{ge.current&&(ge.current.scrollTop=ge.current.scrollHeight);},[F,e]);let Ze=()=>{R.trim()&&(_e.current=R.trim(),y(A=>[...A,{type:"user",text:R.trim()}]),d(R.trim(),X$1),C(""));},Lt=async()=>{if(!(!m||W||!X$1)){te(true);try{let A=await m(X$1);y(L=>{let H=[...L];return H.length>=2&&H[H.length-1]?.type==="applied"?H.splice(-2,2):H.length>=1&&H[H.length-1]?.type==="applied"&&H.splice(-1,1),H}),A?.removed&&y([]);}catch{}finally{te(false);}}},Me=()=>{if(T){S();return}f(true),x(false),setTimeout(()=>S(),Fe);},Bt=T?{position:"relative",width:"100%",height:"100%",background:"#ffffff",display:"flex",flexDirection:"column",fontFamily:'ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif'}:{position:"fixed",top:0,right:0,bottom:0,zIndex:2147483e3,width:$r,maxWidth:"100vw",background:"#ffffff",boxShadow:he?"-12px 0 32px -16px rgba(0, 0, 0, 0.18), -2px 0 8px -2px rgba(0, 0, 0, 0.06)":"none",borderLeft:"1px solid rgba(0, 0, 0, 0.08)",transform:he?"translateX(0)":"translateX(100%)",transition:`transform ${Fe}ms cubic-bezier(0.22, 1, 0.36, 1), box-shadow ${Fe}ms ease`,display:"flex",flexDirection:"column",fontFamily:'ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif'},Qe=jsxs(Fragment,{children:[jsx("style",{children:`
21
+ `}),jsxs("div",{className:"__fork-stream",ref:t,style:{scrollbarWidth:"thin",scrollbarColor:"rgba(255, 255, 255, 0.15) transparent",backgroundColor:"#1a1a2e",borderRadius:"8px",padding:"12px",fontFamily:"ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace",fontSize:"11px",maxHeight:"300px",overflowY:"auto",boxSizing:"border-box"},children:[e.length===0&&jsxs("div",{style:{display:"flex",alignItems:"center",gap:"6px",color:"#6b7280",fontSize:"11px"},children:[jsx(Loader2,{style:{width:"12px",height:"12px",animation:"__fork-spin 1s linear infinite",flexShrink:0}}),"Connecting to agent..."]}),e.map((r,o)=>{let n=o===e.length-1,i=r.type==="complete"||r.type==="error"||r.type==="build_complete"||r.type==="build_error",s=n&&!i&&(r.type==="status"||r.type==="tool_use"||r.type==="build_start"),l=To[r.type]||Code,R=Mo[r.type]||"#9ca3af";if(r.type==="tool_use"){let m=String(r.data.category||"");l=Lo[m]||Wrench,R=Bo[m]||"#fbbf24";}return s?l=Loader2:!n&&r.type==="status"&&(l=Check,R="#4ade80"),jsxs("div",{style:{display:"flex",gap:"6px",marginBottom:"6px",lineHeight:1.625},children:[jsx(l,{style:{width:"12px",height:"12px",marginTop:"2px",flexShrink:0,color:R,...s?{animation:"__fork-spin 1s linear infinite"}:{}}}),jsx("span",{style:{color:n&&!i?"#d1d5db":"#6b7280",wordBreak:"break-all"},children:Rt(r)})]},o)})]})]})}var zo=["Dark mode redesign","New workflow for adding to this page","Data-dense analytics view"],wr=35,Wo="Working on Feature",Ko="Built Custom Feature",vr=360,qe=350;function Go(e){return e.length<=wr?e:e.slice(0,wr-3).trimEnd()+"..."}function Vo({events:e}){let[t,r]=useState("Setting up environment..."),[o,n]=useState(true),i=useRef(t),s=useRef(false);return useEffect(()=>{if(!s.current){for(let R of e)if(R.type==="status"&&String(R.data.message||"").includes("Agent started")){s.current=true;break}}let l="Setting up environment...";if(s.current)for(let R=e.length-1;R>=0;R--){let m=e[R];if(m.type==="tool_use"||m.type==="build_start"||m.type==="build_complete"){l=Go(Rt(m));break}}if(l!==i.current){n(false);let R=setTimeout(()=>{r(l),i.current=l,n(true);},200);return ()=>clearTimeout(R)}},[e]),jsx("span",{style:{fontSize:11,color:"#d1d5db",fontWeight:500,opacity:o?1:0,transition:"opacity 0.2s ease",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",minWidth:0},children:t})}function qo({children:e}){let[t,r]=useState(null);return useEffect(()=>{if(typeof document>"u")return;let o=document.createElement("div");o.setAttribute("data-fork-panel-host",""),o.style.cssText="all: initial;",document.body.appendChild(o);let n=o.attachShadow({mode:"open"});return r(n),()=>{o.remove();}},[]),t?createPortal(e,t):null}function Je({state:e,fork:t,events:r,error:o,slotId:n,targetId:i,targetLabel:s,historyMode:l="slot",examplePrompts:R=zo,onSubmit:m,onUndo:f,onClose:S,baseUrl:P,apiKey:y,userId:k,userHash:h,appId:w,embedded:A=false}){let[x,L]=useState(""),[C,_]=useState([]),[v,g]=useState(false),[c,F]=useState(false),[b,u]=useState(false),[d,p]=useState(false),[N,O]=useState(false),[U,J]=useState(false),[Z,re]=useState(false),[j,oe]=useState(null),[X$1,ie]=useState(false),[W,Le]=useState(false),[xe,Be]=useState(null),[T,M]=useState(false),[I,V]=useState([]),[K,rt]=useState(null),[ce,ot]=useState(false),[ge,Fe]=useState(false),[Lr,Bt]=useState(false),[Br,Nt]=useState(null),[Nr,Ht]=useState(false),[Hr,he]=useState(false),[Re,Ee]=useState(""),[ye,Ot]=useState(null),Ne=useRef(null),He=useRef(null),{resetAllForks:Or}=G(),ne=ye!==null,It=useRef(S);useEffect(()=>{It.current=S;});let nt=useRef(null),Oe=useRef(false),Dt=typeof window<"u"&&"documentPictureInPicture"in window,Ir=async()=>{if(!(!Dt||ne))try{let a=await window.documentPictureInPicture.requestWindow({width:vr,height:640});a.document.body.style.margin="0",a.document.body.style.padding="0",a.document.body.style.height="100vh",a.document.body.style.overflow="hidden",a.document.body.style.background="#ffffff";try{let E=document.adoptedStyleSheets??[];E.length>0&&(a.document.adoptedStyleSheets=[...E]);}catch{}a.addEventListener("pagehide",()=>{nt.current=null,Ot(null),Oe.current||It.current(),Oe.current=!1;},{once:!0}),nt.current=a,Ot(a);}catch(a){console.warn("[Fork] PiP open failed:",a);}},Dr=()=>{ye&&(Oe.current=true,ye.close());};useEffect(()=>()=>{Oe.current=true,nt.current?.close();},[]);let se=i??n??"",st=(s||se).replace(/[-_]+/g," ").replace(/\b\w/g,a=>a.toUpperCase()),it=useRef(""),Ie=A?true:c&&!b,Ur=r.find(a=>{let E=a.data;return a.type==="status"&&E.summary})?.data?.summary||t?.summary||Wo,ue=r.find(a=>{let E=a.data;return (a.type==="status"||a.type==="complete")&&typeof E?.estimateMinutes=="number"})?.data?.estimateMinutes??t?.estimateMinutes;useEffect(()=>{if(l==="none"){g(true);return}if(!P||!y||!k||!se||v||!ce)return;let a=new URLSearchParams({userId:k});if(h&&a.set("userHash",h),K&&a.set("containerId",K),l==="slot")a.set("slotId",se);else if(l==="boundary"){if(!w){g(true);return}a.set("boundaryId",se),a.set("appId",w);}fetch(`${P}/api/v1/forks/history?${a.toString()}`,{headers:{Authorization:`Bearer ${y}`}}).then(E=>E.ok?E.json():[]).then(E=>{let B=[];for(let Y of E)Y.role==="user"?B.push({type:"user",text:Y.content}):B.push({type:"applied",text:Y.content});_(B),g(true);}).catch(()=>g(true));},[y,w,P,v,l,se,h,k,K,ce]),useEffect(()=>{e==="complete"&&ie(false);},[e]),useEffect(()=>{if(A&&l==="none"){ot(true);return}if(!P||!y||ce)return;let a=false;return (async()=>{try{let E=await fetch(`${P}/api/v1/containers`,{headers:{Authorization:`Bearer ${y}`}});if(!E.ok)throw new Error(`HTTP ${E.status}`);let B=await E.json();if(a)return;if(B.length===0){let Y=await fetch(`${P}/api/v1/containers`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${y}`},body:JSON.stringify({name:"Default"})});if(!Y.ok)throw new Error(`HTTP ${Y.status}`);let Wr=await Y.json();if(a)return;B=[Wr];}V(B),rt(B[0]?.id??null),ot(!0);}catch(E){console.warn("[Fork] containers load failed:",E),a||ot(true);}})(),()=>{a=true;}},[y,P,ce,A,l]);let De=useRef(null);useEffect(()=>{if(ce){if(De.current===null){De.current=K;return}De.current!==K&&(De.current=K,_([]),g(false));}},[K,ce]);let at=useRef(null);useEffect(()=>{if(!ge)return;let a=B=>{at.current&&(at.current.contains(B.target)||(Fe(false),he(false),Ee("")));},E=B=>{B.key==="Escape"&&(Fe(false),he(false),Ee(""));};return document.addEventListener("mousedown",a,true),document.addEventListener("keydown",E,true),()=>{document.removeEventListener("mousedown",a,true),document.removeEventListener("keydown",E,true);}},[ge]),useEffect(()=>{if(A)return;let a=requestAnimationFrame(()=>F(true));return ()=>cancelAnimationFrame(a)},[A]),useEffect(()=>{let a=A||ne;if((a||Ie)&&(e==="prompting"||e==="complete")){let E=setTimeout(()=>Ne.current?.focus(),a?100:qe+100);return ()=>clearTimeout(E)}},[Ie,A,ne,e]),useEffect(()=>{if(e==="complete"&&it.current){let E=r.find(B=>B.type==="complete")?.data?.summary||t?.summary||Ko;_(B=>B[B.length-1]?.type==="applied"?B:[...B,{type:"applied",text:E}]),L(""),setTimeout(()=>Ne.current?.focus(),200);}},[e,st,r,t?.summary]),useEffect(()=>{He.current&&(He.current.scrollTop=He.current.scrollHeight);},[C,e]);let Ut=()=>{x.trim()&&(it.current=x.trim(),_(a=>[...a,{type:"user",text:x.trim()}]),m(x.trim(),se,K),L(""));},jt=async()=>{let a=Re.trim();if(!(!a||!P||!y))try{let E=await fetch(`${P}/api/v1/containers`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${y}`},body:JSON.stringify({name:a})});if(!E.ok){let Y=await E.json().catch(()=>({}));throw new Error(Y.error||`HTTP ${E.status}`)}let B=await E.json();V(Y=>[...Y,B]),rt(B.id),he(!1),Ee(""),Fe(!1);}catch(E){console.warn("[Fork] container create failed:",E);}},jr=async()=>{if(!(!f||W||!se)){Le(true);try{let a=await f(se);_(E=>{let B=[...E];return B.length>=2&&B[B.length-1]?.type==="applied"?B.splice(-2,2):B.length>=1&&B[B.length-1]?.type==="applied"&&B.splice(-1,1),B}),a?.removed&&_([]);}catch{}finally{Le(false);}}},lt=()=>{if(A){S();return}if(ne){ye?.close();return}u(true),F(false),setTimeout(()=>S(),qe);},zr=A||ne?{position:"relative",width:"100%",height:"100%",background:"#ffffff",display:"flex",flexDirection:"column",fontFamily:'ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif'}:{position:"fixed",top:0,right:0,bottom:0,zIndex:2147483e3,width:vr,maxWidth:"100vw",background:"#ffffff",boxShadow:Ie?"-12px 0 32px -16px rgba(0, 0, 0, 0.18), -2px 0 8px -2px rgba(0, 0, 0, 0.06)":"none",borderLeft:"1px solid rgba(0, 0, 0, 0.08)",transform:Ie?"translateX(0)":"translateX(100%)",transition:`transform ${qe}ms cubic-bezier(0.22, 1, 0.36, 1), box-shadow ${qe}ms ease`,display:"flex",flexDirection:"column",fontFamily:'ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif'},ct=jsxs(Fragment,{children:[jsx("style",{children:`
22
22
  @keyframes __fork-pulse {
23
23
  0%, 100% { opacity: 1; }
24
24
  50% { opacity: 0.5; }
@@ -40,5 +40,5 @@ import*as He from'react';import He__default,{createContext,useState,useRef,useEf
40
40
  scrollbar-width: thin;
41
41
  scrollbar-color: rgba(0, 0, 0, 0.12) transparent;
42
42
  }
43
- `}),jsxs("div",{className:"__fork-panel",style:Bt,children:[jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"12px 16px",borderBottom:"1px solid rgba(229, 231, 235, 0.8)",flexShrink:0},children:[jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,minWidth:0,flex:1},children:[jsx(we,{style:{width:16,height:16,color:"#1c4587",cursor:"pointer",flexShrink:0},onDoubleClick:async A=>{if(A.stopPropagation(),!N&&confirm("Reset all forks? This will remove all forked components.")){z(true);try{let L=await _t();`${L?.deleted??0}`,y([]),C(""),q(!1),Me();}catch(L){console.error("[Fork] Reset failed:",L);}finally{z(false);}}}}),jsx("span",{style:{fontSize:13,fontWeight:600,color:"#111827",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",minWidth:0},children:e==="running"?Mt:`Fork ${Pe}`}),e==="running"&&jsx("span",{title:re?`Estimated ~${re} min`:"Estimating\u2026",style:{fontSize:10,fontWeight:600,color:re?"#1c4587":"#9ca3af",backgroundColor:re?"rgba(28, 69, 135, 0.08)":"rgba(156, 163, 175, 0.12)",padding:"1px 6px",borderRadius:999,flexShrink:0,fontVariantNumeric:"tabular-nums",animation:re?void 0:"__fork-pulse 1.4s ease-in-out infinite",minWidth:28,textAlign:"center"},children:re?`~${re}m`:"~ m"}),e==="complete"&&jsx("div",{style:{height:6,width:6,backgroundColor:"#1c4587",borderRadius:"50%",flexShrink:0}})]}),!T&&jsx("button",{onClick:Me,onMouseEnter:()=>p(true),onMouseLeave:()=>p(false),style:{padding:6,borderRadius:6,color:g?"#4b5563":"#9ca3af",backgroundColor:g?"#f3f4f6":"transparent",border:"none",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",transition:"background-color 0.15s, color 0.15s"},children:jsx(X,{style:{width:16,height:16}})})]}),jsxs("div",{ref:ge,style:{flex:1,overflowY:"auto",minHeight:0,display:"flex",flexDirection:"column"},children:[e==="prompting"&&F.length===0&&jsxs("div",{style:{padding:"24px 20px",textAlign:"center"},children:[jsx("p",{style:{fontSize:13,color:"#6b7280",marginBottom:14,lineHeight:1.625,margin:"0 0 14px 0"},children:"Describe the feature you want to build."}),jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:6,justifyContent:"center"},children:b.map((A,L)=>jsx("button",{onClick:()=>{C(A),Z.current?.focus();},onMouseEnter:()=>Y(L),onMouseLeave:()=>Y(null),style:{fontSize:12,padding:"5px 12px",borderRadius:9999,color:G===L?"#1f2937":"#6b7280",backgroundColor:G===L?"#f9fafb":"transparent",border:G===L?"1px solid #d1d5db":"1px solid #e5e7eb",cursor:"pointer",transition:"color 0.15s, background-color 0.15s, border-color 0.15s",fontFamily:"inherit"},children:A},A))})]}),F.length>0&&jsx("div",{style:{padding:"16px 16px 0 16px"},children:F.map((A,L)=>jsx("div",{style:{marginBottom:L<F.length-1?10:0},children:A.type==="user"?jsxs("div",{style:{display:"flex",alignItems:"flex-start",gap:8,flexDirection:"row-reverse"},children:[jsx("div",{style:{width:22,height:22,borderRadius:"50%",backgroundColor:"#e5e7eb",display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0,marginTop:2},children:jsx(User,{style:{width:13,height:13,color:"#6b7280"}})}),jsx("div",{style:{backgroundColor:"#f3f4f6",borderRadius:"12px 4px 12px 12px",padding:"8px 12px",fontSize:13,color:"#374151",lineHeight:1.5,maxWidth:"75%"},children:A.text})]}):jsxs("div",{style:{display:"flex",alignItems:"flex-start",gap:8},children:[jsx("div",{style:{width:22,height:22,borderRadius:"50%",backgroundColor:"#f0fdf4",display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0,marginTop:2},children:jsx(Check,{style:{width:13,height:13,color:"#9ca3af"}})}),jsxs("div",{style:{backgroundColor:"#f9fafb",borderRadius:"4px 12px 12px 12px",padding:"8px 12px",fontSize:13,color:"#6b7280",fontWeight:500,display:"flex",alignItems:"center",gap:6,maxWidth:"75%"},children:[jsx("span",{style:{flex:1},children:A.text}),m&&L===F.length-1&&e!=="running"&&jsxs("button",{onClick:H=>{H.stopPropagation(),Lt();},onMouseEnter:()=>P(L),onMouseLeave:()=>P(null),disabled:W,style:{position:"relative",padding:2,borderRadius:4,border:"none",background:v===L?"rgba(0,0,0,0.06)":"transparent",color:v===L?"#6b7280":"#d1d5db",cursor:W?"default":"pointer",display:"flex",alignItems:"center",justifyContent:"center",transition:"color 0.15s, background 0.15s",opacity:W?.4:1,flexShrink:0},children:[jsx(Undo2,{style:{width:12,height:12}}),v===L&&jsx("span",{style:{position:"absolute",bottom:"calc(100% + 4px)",right:0,fontSize:10,fontWeight:500,color:"#fff",background:"#374151",borderRadius:4,padding:"2px 6px",whiteSpace:"nowrap",pointerEvents:"none",lineHeight:"16px"},children:"Undo"})]})]})]})},L))}),e==="running"&&jsx("div",{style:{padding:16},children:jsxs("div",{onClick:()=>q(!O),style:{backgroundColor:"#1a1a2e",borderRadius:12,overflow:"hidden",cursor:"pointer",transition:"all 0.3s cubic-bezier(0.22, 1, 0.36, 1)"},children:[jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"10px 14px"},children:[jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,minWidth:0},children:[jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"#6b7280",strokeWidth:"2.5",strokeLinecap:"round",style:{animation:"__fork-spin 2s linear infinite",flexShrink:0},children:jsx("path",{d:"M21 12a9 9 0 1 1-6.219-8.56"})}),jsx(Cr,{events:r})]}),jsx("div",{style:{color:"#6b7280",flexShrink:0,marginLeft:8,transition:"transform 0.2s ease",transform:O?"rotate(180deg)":"rotate(0deg)"},children:jsx(ChevronDown,{style:{width:14,height:14}})})]}),jsx("div",{style:{maxHeight:O?320:0,opacity:O?1:0,transition:"max-height 0.35s cubic-bezier(0.22, 1, 0.36, 1), opacity 0.25s ease",overflow:"hidden"},children:jsx("div",{style:{borderTop:"1px solid rgba(255,255,255,0.08)",maxHeight:320,overflowY:"auto"},children:jsx(bt,{events:r})})})]})}),e==="error"&&jsxs("div",{style:{padding:"20px 16px",textAlign:"center"},children:[jsx("div",{style:{width:36,height:36,backgroundColor:"#fef2f2",borderRadius:"50%",display:"flex",alignItems:"center",justifyContent:"center",margin:"0 auto 10px auto"},children:jsx(X,{style:{width:18,height:18,color:"#ef4444"}})}),jsx("p",{style:{fontSize:12,color:"#6b7280",marginBottom:10,maxWidth:260,margin:"0 auto 10px auto"},children:o}),jsxs("button",{onClick:()=>{let A=t?.prompt||_e.current;A&&d(A,X$1);},onMouseEnter:()=>V(true),onMouseLeave:()=>V(false),style:{display:"inline-flex",alignItems:"center",gap:6,padding:"6px 12px",borderRadius:8,fontSize:12,fontWeight:500,color:"#4f46e5",backgroundColor:K?"#e0e7ff":"#eef2ff",border:"none",cursor:"pointer",transition:"background-color 0.15s",fontFamily:"inherit"},children:[jsx(RotateCcw,{style:{width:12,height:12}})," Try Again"]})]})]}),e!=="running"&&jsx("div",{style:{padding:"8px 12px 12px 12px",borderTop:"1px solid rgba(229, 231, 235, 0.6)",flexShrink:0},children:jsxs("div",{style:{display:"flex",alignItems:"flex-end",gap:6,borderRadius:12,padding:"8px 8px 8px 12px",background:"rgba(0, 0, 0, 0.04)",border:"1px solid rgba(0, 0, 0, 0.06)"},children:[jsx("textarea",{ref:Z,value:R,onChange:A=>{C(A.target.value),A.target.style.height="auto",A.target.style.height=Math.min(A.target.scrollHeight,160)+"px";},onKeyDown:A=>{A.key==="Enter"&&!A.shiftKey&&(A.preventDefault(),Ze()),A.key==="Escape"&&!T&&Me();},placeholder:F.length>0?"Ask for another change...":`Describe your ideal ${Pe.toLowerCase()}...`,rows:1,style:{flex:1,backgroundColor:"transparent",fontSize:13,color:"#111827",border:"none",outline:"none",padding:"0 4px 0 0",fontFamily:"inherit",resize:"none",lineHeight:1.5,maxHeight:160,overflow:"auto"}}),jsx("button",{onClick:Ze,disabled:!R.trim(),onMouseEnter:()=>U(true),onMouseLeave:()=>U(false),style:{width:26,height:26,borderRadius:"50%",display:"flex",alignItems:"center",justifyContent:"center",color:"#ffffff",opacity:R.trim()?1:.25,transform:B&&R.trim()?"scale(1.1)":"scale(1)",background:R.trim()?"#1c4587":"rgba(0,0,0,0.12)",border:"none",cursor:R.trim()?"pointer":"default",flexShrink:0,transition:"transform 0.15s, opacity 0.15s",padding:0},children:jsx(ArrowUp,{style:{width:13,height:13}})})]})})]})]});return T?Qe:jsx(Tr,{children:Qe})}function vt(e){if("target"in e&&e.target)return e.target;if("boundaryId"in e&&e.boundaryId)return {type:"boundary",id:e.boundaryId,title:e.title};if("slotId"in e&&e.slotId)return {type:"slot",id:e.slotId,title:e.title??e.slotLabel};throw new Error("Fork chat target requires either target, slotId, or boundaryId.")}function ze(e){let{apiKey:t,userId:r,userHash:o,baseUrl:n,appId:i,refreshModuleManifest:s,queueBoundaryAnimation:a}=j(),[b,d]=useState("idle"),[m,S]=useState(null),[_,w]=useState([]),[h,l]=useState(null),$=useRef(null),T=useCallback(()=>{d("prompting"),w([]),l(null),S(null);},[]),R=useCallback(()=>{d("idle"),$.current&&($.current.close(),$.current=null);},[]),C=useCallback(async y=>{try{if(!i)throw new Error("ForkProvider requires appId for module boundary prompts.");d("running"),w([]),l(null);let E={userId:r,prompt:y,boundaryId:e,appId:i};o&&(E.userHash=o);let c=await fetch(`${n}/api/v1/forks`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:JSON.stringify(E)});if(!c.ok){let f=await c.json().catch(()=>({}));throw new Error(f.error||`API error: ${c.status}`)}let u=await c.json();S(u);let x=new URLSearchParams({key:t});o&&(x.set("userId",r),x.set("userHash",o));let k=new EventSource(`${n}/api/v1/forks/${u.id}/events?${x.toString()}`);$.current=k,k.onmessage=f=>{try{let g=JSON.parse(f.data);if(w(p=>[...p,g]),g.type==="complete"){let p=g.data;a(e,u.id),s().catch(()=>{}).finally(()=>{let B={...u,status:"complete",moduleUrl:p.moduleUrl,cssUrls:p.cssUrls,summary:p.summary,completedAt:new Date().toISOString()};S(B),d("complete"),k.close();});}else if(g.type==="error"){let p=g.data;l(p.error||"Unknown error"),d("error"),k.close();}}catch{}},k.onerror=()=>{fetch(`${n}/api/v1/forks/${u.id}`,{headers:{Authorization:`Bearer ${t}`}}).then(f=>f.json()).then(f=>{S(f),f.status==="complete"?(a(e,f.id),s().catch(()=>{}),d("complete")):f.status==="error"&&(l(f.error||"Fork generation failed"),d("error"));}).catch(()=>{l("Connection lost"),d("error");}),k.close();};}catch(E){l(E.message),d("error");}},[t,i,n,e,a,s,o,r]),F=useCallback(async()=>{try{if(!i)throw new Error("ForkProvider requires appId for boundary undo.");let y={userId:r,boundaryId:e,appId:i};o&&(y.userHash=o);let E=await fetch(`${n}/api/v1/forks/undo`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:JSON.stringify(y)});if(!E.ok){let u=await E.json().catch(()=>({}));throw new Error(u.error||`API error: ${E.status}`)}let c=await E.json();return await s().catch(()=>{}),c.removed?(S(null),d("prompting")):c.fork&&(S(c.fork),d("complete")),c}catch(y){throw l(y.message),y}},[t,i,n,e,s,o,r]);return {state:b,fork:m,events:_,error:h,open:T,close:R,startFork:C,undoFork:F}}function St(e){let{state:t,fork:r,events:o,error:n,open:i,close:s,startFork:a,undoFork:b}=ze(e);return {state:t,fork:r,events:o,error:n,isOpen:t!=="idle",open:i,close:s,submit:a,undo:b}}function We(){let{apiKey:e,userId:t,userHash:r,baseUrl:o,setSlotFork:n,clearSlotFork:i,skipAnimationForSlot:s}=j(),[a,b]=useState("idle"),[d,m]=useState(null),[S,_]=useState([]),[w,h]=useState(null),l=useRef(null),$=useCallback(()=>{b("prompting"),_([]),h(null),m(null);},[]),T=useCallback(()=>{b("idle"),l.current&&(l.current.close(),l.current=null);},[]),R=useCallback(async(F,y)=>{try{b("running"),_([]),h(null);let E={userId:t,prompt:F};y&&(E.slotId=y),r&&(E.userHash=r);let c=await fetch(`${o}/api/v1/forks`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`},body:JSON.stringify(E)});if(!c.ok){let f=await c.json().catch(()=>({}));throw new Error(f.error||`API error: ${c.status}`)}let u=await c.json();m(u);let x=new URLSearchParams({key:e});r&&(x.set("userId",t),x.set("userHash",r));let k=new EventSource(`${o}/api/v1/forks/${u.id}/events?${x.toString()}`);l.current=k,k.onmessage=f=>{try{let g=JSON.parse(f.data);if(_(p=>[...p,g]),g.type==="complete"){let p=g.data,B={...u,status:"complete",bundleUrl:p.bundleUrl,summary:p.summary,completedAt:new Date().toISOString()};m(B),b("complete"),y&&p.bundleUrl&&n(y,B),k.close();}else if(g.type==="error"){let p=g.data;h(p.error||"Unknown error"),b("error"),k.close();}}catch{}},k.onerror=()=>{fetch(`${o}/api/v1/forks/${u.id}`,{headers:{Authorization:`Bearer ${e}`}}).then(f=>f.json()).then(f=>{m(f),f.status==="complete"?(b("complete"),y&&f.bundleUrl&&n(y,f)):f.status==="error"&&(h(f.error||"Fork generation failed"),b("error"));}).catch(()=>{h("Connection lost"),b("error");}),k.close();};}catch(E){h(E.message),b("error");}},[e,t,r,o,n]),C=useCallback(async F=>{try{let y={userId:t,slotId:F};r&&(y.userHash=r);let E=await fetch(`${o}/api/v1/forks/undo`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`},body:JSON.stringify(y)});if(!E.ok){let u=await E.json().catch(()=>({}));throw new Error(u.error||`API error: ${E.status}`)}let c=await E.json();return s(F),c.removed?(i(F),m(null),b("prompting")):c.fork&&(n(F,c.fork),m(c.fork)),c}catch(y){throw h(y.message),y}},[e,t,r,o,i,n]);return {state:a,fork:d,events:S,error:w,open:$,close:T,startFork:R,undoFork:C}}function Ft(){let{state:e,fork:t,events:r,error:o,open:n,close:i,startFork:s,undoFork:a}=We();return {state:e,fork:t,events:r,error:o,isOpen:e!=="idle",open:n,close:i,submit:s,undo:a}}function Ke(e){let t=vt(e),r=Ft(),o=St(t.type==="boundary"?t.id:""),{baseUrl:n,apiKey:i,userId:s,userHash:a,appId:b}=j(),d=t.type==="slot"?r:o,m=t.type==="slot"?"slot":"boundary",S=t.id,_=t.title,w=useCallback((l,$)=>t.type==="slot"?r.submit(l,$??t.id):o.submit(l),[o,r,t]),h=useCallback(l=>t.type==="slot"?r.undo(l??t.id):o.undo(),[o,r,t]);return {...d,target:t,targetId:S,targetLabel:_,historyMode:m,submit:w,undo:h,buttonProps:{onClick:d.open},panelProps:{state:d.state,fork:d.fork,events:d.events,error:d.error,...t.type==="slot"?{slotId:S,targetLabel:_,historyMode:m}:{targetId:S,targetLabel:_,historyMode:m},onSubmit:w,onUndo:h,onClose:d.close,baseUrl:n,apiKey:i,userId:s,userHash:a,appId:b}}}function me(e){let{examplePrompts:t,embedded:r}=e,o=Ke(e);return r?jsx(xe,{...o.panelProps,examplePrompts:t,embedded:true}):o.isOpen?jsx(xe,{...o.panelProps,examplePrompts:t}):jsx(De,{...o.buttonProps})}function Lr({boundaryId:e,title:t,examplePrompts:r}){return jsx(me,{boundaryId:e,title:t,examplePrompts:r})}function Ve(e){let t=Array.from(e.children).filter(o=>o instanceof HTMLElement);return t.length===1?t[0]:getComputedStyle(e).display==="contents"?null:e}function Rt(e){let t=e.getBoundingClientRect(),r=e.cloneNode(true);r.style.position="fixed",r.style.top=`${t.top}px`,r.style.left=`${t.left}px`,r.style.width=`${t.width}px`,r.style.height=`${t.height}px`,r.style.flex="none",r.style.minHeight="auto",r.style.zIndex="9998",r.style.pointerEvents="none",r.style.overflow="hidden";let o=getComputedStyle(e).backgroundColor;r.style.backgroundColor=o&&o!=="rgba(0, 0, 0, 0)"&&o!=="transparent"?o:getComputedStyle(document.body).backgroundColor||"#ffffff",document.body.appendChild(r);let n=e.querySelectorAll("*"),i=r.querySelectorAll("*");for(let s=0;s<n.length;s+=1)n[s].scrollTop!==0&&(i[s].scrollTop=n[s].scrollTop),n[s].scrollLeft!==0&&(i[s].scrollLeft=n[s].scrollLeft);return r}function qe(e){let t=[],r=e.querySelectorAll("*");for(let o of r){if(!(o instanceof HTMLElement))continue;let n=o.getBoundingClientRect();if(n.width<10||n.height<10||["SCRIPT","STYLE","META","LINK"].includes(o.tagName))continue;let i=getComputedStyle(o),s=parseFloat(i.borderTopLeftRadius)||0;t.push({tag:o.tagName,className:o.className||"",text:(o.textContent||"").slice(0,50).trim(),rect:n,borderRadius:s});}return t}function Et(e,t){let r=[];for(let o of t)if(!(e.find(s=>s.tag===o.tag&&s.className===o.className&&Math.abs(s.rect.top-o.rect.top)<20&&Math.abs(s.rect.left-o.rect.left)<20)||r.some(s=>o.rect.top>=s.rect.top&&o.rect.left>=s.rect.left&&o.rect.right<=s.rect.right&&o.rect.bottom<=s.rect.bottom))){for(let s=r.length-1;s>=0;s-=1){let a=r[s];a.rect.top>=o.rect.top&&a.rect.left>=o.rect.left&&a.rect.right<=o.rect.right&&a.rect.bottom<=o.rect.bottom&&r.splice(s,1);}r.push({rect:o.rect,borderRadius:o.borderRadius});}return r}function $t(e,t){let r=[];for(let o of e)if(!(t.find(s=>s.tag===o.tag&&s.className===o.className&&Math.abs(s.rect.top-o.rect.top)<20&&Math.abs(s.rect.left-o.rect.left)<20)||r.some(s=>o.rect.top>=s.rect.top&&o.rect.left>=s.rect.left&&o.rect.right<=s.rect.right&&o.rect.bottom<=s.rect.bottom))){for(let s=r.length-1;s>=0;s-=1){let a=r[s];a.rect.top>=o.rect.top&&a.rect.left>=o.rect.left&&a.rect.right<=o.rect.right&&a.rect.bottom<=o.rect.bottom&&r.splice(s,1);}r.push({rect:o.rect,borderRadius:o.borderRadius});}return r}function At(e,t,r,o,n){let i=Math.max(0,Math.min(n,r/2,o/2));return i===0?`M ${e} ${t} L ${e+r} ${t} L ${e+r} ${t+o} L ${e} ${t+o} Z`:[`M ${e+i} ${t}`,`L ${e+r-i} ${t}`,`A ${i} ${i} 0 0 1 ${e+r} ${t+i}`,`L ${e+r} ${t+o-i}`,`A ${i} ${i} 0 0 1 ${e+r-i} ${t+o}`,`L ${e+i} ${t+o}`,`A ${i} ${i} 0 0 1 ${e} ${t+o-i}`,`L ${e} ${t+i}`,`A ${i} ${i} 0 0 1 ${e+i} ${t}`,"Z"].join(" ")}function Je(e){let t="http://www.w3.org/2000/svg",r=document.createElement("div");r.setAttribute("data-fork-highlights","true"),r.style.cssText="position:fixed;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:9999;";let o=document.createElementNS(t,"svg");o.setAttribute("width","100%"),o.setAttribute("height","100%"),o.style.cssText="position:absolute;top:0;left:0;overflow:visible;";let n=document.createElementNS(t,"defs");o.appendChild(n);let i=[];for(let m=0;m<e.length;m+=1){let{rect:S,borderRadius:_}=e[m],w=S.left-.5,h=S.top-.5,l=S.width+1,$=S.height+1,T=Math.min(_+.5,l/2,$/2),R=At(w,h,l,$,T),C=`__fork-glow-${m}`,F=document.createElementNS(t,"filter");F.setAttribute("id",C),F.setAttribute("x","-100%"),F.setAttribute("y","-100%"),F.setAttribute("width","300%"),F.setAttribute("height","300%");let y=document.createElementNS(t,"feGaussianBlur");y.setAttribute("in","SourceGraphic"),y.setAttribute("stdDeviation","8"),F.appendChild(y),n.appendChild(F);let E=`__fork-mask-${m}`,c=document.createElementNS(t,"mask");c.setAttribute("id",E),c.setAttribute("maskUnits","userSpaceOnUse"),c.setAttribute("x",String(w-200)),c.setAttribute("y",String(h-200)),c.setAttribute("width",String(l+400)),c.setAttribute("height",String($+400));let u=document.createElementNS(t,"rect");u.setAttribute("x",String(w-200)),u.setAttribute("y",String(h-200)),u.setAttribute("width",String(l+400)),u.setAttribute("height",String($+400)),u.setAttribute("fill","white"),c.appendChild(u);let x=document.createElementNS(t,"path");x.setAttribute("d",R),x.setAttribute("fill","black"),c.appendChild(x),n.appendChild(c);let k=document.createElementNS(t,"g");k.setAttribute("mask",`url(#${E})`),k.setAttribute("opacity","0");let f=document.createElementNS(t,"g");f.setAttribute("filter",`url(#${C})`);let g=document.createElementNS(t,"path");g.setAttribute("d",R),g.setAttribute("fill","none"),g.setAttribute("stroke","rgba(150, 185, 220, 0.6)"),g.setAttribute("stroke-width","6"),g.setAttribute("stroke-linecap","round"),f.appendChild(g),k.appendChild(f),o.appendChild(k);let p=document.createElementNS(t,"path");p.setAttribute("d",R),p.setAttribute("fill","none"),p.setAttribute("stroke","rgba(150, 185, 220, 0.35)"),p.setAttribute("stroke-width","2"),p.setAttribute("stroke-linecap","round"),p.setAttribute("opacity","0"),o.appendChild(p),i.push(g,p),g.__group=k;}r.appendChild(o),document.body.appendChild(r);let s=[];for(let m=0;m<i.length;m+=2){let S=i[m],_=i[m+1],w=S.__group;if(!w)continue;let h=_.getTotalLength(),l=S.getTotalLength();if(h<=0)continue;let $=h*.35;_.setAttribute("stroke-dasharray",`${$} ${h-$}`),_.setAttribute("stroke-dashoffset","0"),s.push(_.animate([{strokeDashoffset:0,opacity:0,offset:0},{strokeDashoffset:-0.2*h,opacity:.92,offset:.06},{strokeDashoffset:-2*h,opacity:.92,offset:.92},{strokeDashoffset:-2.25*h,opacity:0,offset:1}],{duration:14e3,easing:"ease-in-out",fill:"forwards"}));let T=l*.35;S.setAttribute("stroke-dasharray",`${T} ${l-T}`),S.setAttribute("stroke-dashoffset","0"),s.push(S.animate([{strokeDashoffset:0,offset:0},{strokeDashoffset:-0.2*l,offset:.06},{strokeDashoffset:-2*l,offset:.92},{strokeDashoffset:-2.25*l,offset:1}],{duration:14e3,easing:"ease-in-out",fill:"forwards"})),s.push(w.animate([{opacity:0,offset:0},{opacity:.92,offset:.06},{opacity:.92,offset:.92},{opacity:0,offset:1}],{duration:14e3,easing:"ease-in-out",fill:"forwards"}));}let a=false,b=()=>{if(a)return;a=true,clearTimeout(d);for(let S of s)try{S.cancel();}catch{}let m=r.animate([{opacity:1},{opacity:0}],{duration:400,fill:"forwards"});m.onfinish=()=>r.remove(),window.removeEventListener("click",b);},d=setTimeout(b,14500);return setTimeout(()=>{a||window.addEventListener("click",b);},500),b}function Ct(e){let t="http://www.w3.org/2000/svg",r=document.createElement("div");r.setAttribute("data-fork-removed","true"),r.style.cssText="position:fixed;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:9999;";let o=document.createElementNS(t,"svg");o.setAttribute("width","100%"),o.setAttribute("height","100%"),o.style.cssText="position:absolute;top:0;left:0;overflow:visible;";let n=document.createElementNS(t,"defs"),i=document.createElementNS(t,"filter");i.setAttribute("id","__fork-removed-shadow"),i.setAttribute("x","-10%"),i.setAttribute("y","-10%"),i.setAttribute("width","120%"),i.setAttribute("height","120%");let s=document.createElementNS(t,"feDropShadow");s.setAttribute("dx","0"),s.setAttribute("dy","1"),s.setAttribute("stdDeviation","2"),s.setAttribute("flood-color","rgba(0,0,0,0.15)"),i.appendChild(s),n.appendChild(i),o.appendChild(n);for(let{rect:a,borderRadius:b}of e){let d=document.createElementNS(t,"path");d.setAttribute("d",At(a.left,a.top,a.width,a.height,b)),d.setAttribute("fill","none"),d.setAttribute("stroke","rgba(120, 125, 135, 0.6)"),d.setAttribute("stroke-width","1.5"),d.setAttribute("stroke-dasharray","8 4"),d.setAttribute("stroke-linecap","round"),d.setAttribute("filter","url(#__fork-removed-shadow)"),d.setAttribute("opacity","0"),o.appendChild(d),d.animate([{opacity:0,offset:0},{opacity:.6,offset:.08},{opacity:.05,offset:.45},{opacity:.6,offset:.85},{opacity:.05,offset:1}],{duration:5e3,easing:"ease-in-out",fill:"forwards"});}return r.appendChild(o),document.body.appendChild(r),r}var Te=new Map,Ye=new Map;function Hr(e){return e instanceof Error?e:new Error(typeof e=="string"?e:"Unknown module override error")}function Pt(e,t){let r=(t?e[t]:void 0)??e.default;if(typeof r!="function"){let o=t||"default";throw new Error(`Fork boundary module is missing a React component export: ${o}`)}return r}function Or(e){if(!e||typeof document>"u")return Promise.resolve();let t=Te.get(e);if(t)return t;let r=document.querySelector(`link[data-fork-override-href="${e}"]`);if(r instanceof HTMLLinkElement){let n=r.sheet?Promise.resolve():new Promise((i,s)=>{let a=()=>{r.removeEventListener("load",a),r.removeEventListener("error",b),i();},b=()=>{r.removeEventListener("load",a),r.removeEventListener("error",b),s(new Error(`Failed to load boundary stylesheet: ${e}`));};r.addEventListener("load",a,{once:true}),r.addEventListener("error",b,{once:true});});return Te.set(e,n),n}let o=new Promise((n,i)=>{let s=document.createElement("link");s.rel="stylesheet",s.href=e,s.setAttribute("data-fork-override-href",e),s.onload=()=>n(),s.onerror=()=>{s.remove(),i(new Error(`Failed to load boundary stylesheet: ${e}`));},document.head.appendChild(s);}).catch(n=>{throw Te.delete(e),n});return Te.set(e,o),o}function Ur(e){let t=Ye.get(e);if(t)return t;let r=import(e).catch(o=>{throw Ye.delete(e),o});return Ye.set(e,r),r}async function Dr(e,t,r){if(e)try{await Promise.all(e.cssUrls.map(i=>Or(i)));let n=await Ur(e.moduleUrl);return Pt(n,r)}catch(n){console.error(`[Fork] Failed to load override for boundary "${e.boundaryId}", falling back to original module.`,n);}let o=await t();return Pt(o,r)}function Ir(e){function t(r){let{appId:o,moduleOverridesEnabled:n,moduleManifestReady:i,moduleManifestVersion:s,registerBoundary:a,getBoundaryOverride:b,consumeBoundaryAnimation:d}=j(),[m,S]=useState(null),[_,w]=useState(null),h=useRef(null),l=useRef(null),$=useRef(null),T=useRef(false),R=useRef(null),C=useRef(null),F=b(e.id),y=F?`override:${F.id}`:"original",E=e.editorMetadata?JSON.stringify(e.editorMetadata):void 0;if(useEffect(()=>()=>{C.current&&(clearTimeout(C.current),C.current=null),R.current&&(R.current.remove(),R.current=null);},[]),useEffect(()=>{a({id:e.id,exportName:e.exportName,editorMetadata:e.editorMetadata});},[o,a,e.id,e.exportName,E]),useEffect(()=>{if(n&&!i&&!m||l.current===y&&m)return;let c=false;return w(null),Dr(F,e.original,e.exportName).then(u=>{if(!c){if(F?.id&&d(e.id,F.id)&&h.current){let x=Ve(h.current);if(x){let k=qe(x);k.length>0&&($.current=k,T.current=true,C.current&&(clearTimeout(C.current),C.current=null),R.current&&R.current.remove(),R.current=Rt(x));}}l.current=y,startTransition(()=>{S(()=>u);});}}).catch(u=>{c||w(Hr(u));}),()=>{c=true;}},[d,y,n,i,s,F?.id,F?.moduleUrl,F?.integrity,F?.cssUrls.join("|"),e.exportName,e.original,m]),useEffect(()=>{if(!T.current||!m||!h.current)return;let c=false;return requestAnimationFrame(()=>{requestAnimationFrame(()=>{if(c||!h.current)return;let u=$.current,x=Ve(h.current);if($.current=null,T.current=false,!u||!x){R.current&&(R.current.remove(),R.current=null);return}let k=qe(x),f=Et(u,k),g=$t(u,k),p=R.current;if(g.length>0&&p){let B=Ct(g);C.current=setTimeout(()=>{C.current=null;let U=400;p.animate([{opacity:1},{opacity:0}],{duration:U,fill:"forwards"}),B.animate([{opacity:1},{opacity:0}],{duration:U,fill:"forwards"}),setTimeout(()=>{p.remove(),B.remove(),R.current===p&&(R.current=null),f.length>0&&Je(f);},U);},3500);}else p&&(p.remove(),R.current===p&&(R.current=null)),f.length>0&&Je(f);});}),()=>{c=true;}},[m]),_)throw _;return m?jsx("div",{ref:h,style:{display:"contents"},children:jsx(m,{...r})}):jsx(Fragment,{children:e.loading??null})}return t.displayName=`ForkBoundary(${e.id})`,t}function zr({slotId:e,title:t,slotLabel:r,examplePrompts:o}){return jsx(me,{slotId:e,title:t,slotLabel:r,examplePrompts:o})}
44
- export{Lr as ForkBoundaryUI,De as ForkButton,me as ForkChatInterface,xe as ForkPanel,zt as ForkProvider,rr as ForkSlot,zr as ForkUI,Ir as forkable,Be as registerForkShared,ze as useBoundaryFork,We as useFork,Ke as useForkChatPanel};
43
+ `}),jsxs("div",{className:"__fork-panel",style:zr,children:[jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"12px 16px",borderBottom:"1px solid rgba(229, 231, 235, 0.8)",flexShrink:0},children:[jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,minWidth:0,flex:1},children:[jsx(Ke,{style:{width:16,height:16,color:"#1c4587",cursor:"pointer",flexShrink:0},onDoubleClick:async a=>{if(a.stopPropagation(),!T&&confirm("Reset all forks? This will remove all forked components.")){M(true);try{let E=await Or();`${E?.deleted??0}`,_([]),L(""),ie(!1),lt();}catch(E){console.error("[Fork] Reset failed:",E);}finally{M(false);}}}}),e==="running"?jsx("span",{style:{fontSize:13,fontWeight:600,color:"#111827",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",minWidth:0},children:Ur}):jsxs("div",{ref:at,style:{position:"relative",minWidth:0,display:"inline-flex"},children:[jsxs("button",{type:"button",onClick:()=>{Fe(a=>!a),he(false);},onMouseEnter:()=>Bt(true),onMouseLeave:()=>Bt(false),"aria-haspopup":"menu","aria-expanded":ge,style:{display:"inline-flex",alignItems:"center",gap:4,padding:"3px 6px",border:"1px solid transparent",borderRadius:6,background:Lr||ge?"#f3f4f6":"transparent",fontSize:13,fontWeight:600,color:"#111827",fontFamily:"inherit",cursor:"pointer",maxWidth:180,minWidth:0,transition:"background-color 0.12s"},children:[jsx("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",minWidth:0},children:I.find(a=>a.id===K)?.name??(ce?`Fork ${st}`:"Loading\u2026")}),jsx(ChevronDown,{style:{width:12,height:12,color:"#6b7280",flexShrink:0,transform:ge?"rotate(180deg)":void 0,transition:"transform 0.15s"}})]}),ge&&jsxs("div",{role:"menu",style:{position:"absolute",top:"calc(100% + 4px)",left:0,minWidth:200,maxWidth:260,background:"#ffffff",border:"1px solid #e5e7eb",borderRadius:8,boxShadow:"0 4px 12px rgba(0,0,0,0.08), 0 1px 3px rgba(0,0,0,0.06)",padding:4,zIndex:2147483001},children:[I.map(a=>{let E=a.id===K,B=Br===a.id;return jsxs("button",{type:"button",role:"menuitem",onMouseEnter:()=>Nt(a.id),onMouseLeave:()=>Nt(null),onClick:()=>{Fe(false),a.id!==K&&rt(a.id);},style:{display:"flex",alignItems:"center",gap:8,width:"100%",padding:"6px 8px",border:"none",background:B?"#f3f4f6":"transparent",borderRadius:4,fontSize:13,fontFamily:"inherit",color:"#111827",cursor:"pointer",textAlign:"left",fontWeight:E?600:400},children:[jsx("span",{style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:14,height:14,color:"#111827",flexShrink:0},children:E&&jsx(Check,{style:{width:12,height:12}})}),jsx("span",{style:{flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:a.name})]},a.id)}),jsx("div",{style:{height:1,background:"#f3f4f6",margin:"4px 0"}}),Hr?jsxs("div",{style:{display:"flex",gap:4,padding:"4px 4px 4px 4px",alignItems:"center"},children:[jsx("input",{autoFocus:true,value:Re,onChange:a=>Ee(a.target.value),onKeyDown:a=>{a.key==="Enter"?(a.preventDefault(),jt()):a.key==="Escape"&&(a.preventDefault(),he(false),Ee(""));},placeholder:"Container name",maxLength:80,style:{flex:1,minWidth:0,padding:"6px 8px",border:"1px solid #e5e7eb",borderRadius:6,fontSize:13,fontFamily:"inherit",outline:"none",background:"#ffffff",color:"#111827"}}),jsx("button",{type:"button",onClick:()=>{jt();},disabled:!Re.trim(),style:{padding:"6px 10px",border:"none",borderRadius:6,background:Re.trim()?"#111827":"rgba(0,0,0,0.12)",color:"#ffffff",fontSize:12,fontWeight:500,fontFamily:"inherit",cursor:Re.trim()?"pointer":"default",flexShrink:0},children:"Create"})]}):jsxs("button",{type:"button",role:"menuitem",onMouseEnter:()=>Ht(true),onMouseLeave:()=>Ht(false),onClick:()=>he(true),style:{display:"flex",alignItems:"center",gap:8,width:"100%",padding:"6px 8px",border:"none",background:Nr?"#f3f4f6":"transparent",borderRadius:4,fontSize:13,fontFamily:"inherit",color:"#374151",cursor:"pointer",textAlign:"left"},children:[jsx("span",{style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:14,height:14,color:"#374151",fontWeight:600,fontSize:14,flexShrink:0},children:"+"}),jsx("span",{style:{flex:1},children:"New container\u2026"})]})]})]}),e==="running"&&jsx("span",{title:ue?`Estimated ~${ue} min`:"Estimating\u2026",style:{fontSize:10,fontWeight:600,color:ue?"#1c4587":"#9ca3af",backgroundColor:ue?"rgba(28, 69, 135, 0.08)":"rgba(156, 163, 175, 0.12)",padding:"1px 6px",borderRadius:999,flexShrink:0,fontVariantNumeric:"tabular-nums",animation:ue?void 0:"__fork-pulse 1.4s ease-in-out infinite",minWidth:28,textAlign:"center"},children:ue?`~${ue}m`:"~ m"}),e==="complete"&&jsx("div",{style:{height:6,width:6,backgroundColor:"#1c4587",borderRadius:"50%",flexShrink:0}})]}),!A&&jsxs("div",{style:{display:"flex",alignItems:"center",gap:2,flexShrink:0},children:[Dt&&jsx("button",{onClick:ne?Dr:Ir,onMouseEnter:()=>O(true),onMouseLeave:()=>O(false),title:ne?"Redock to sidebar":"Pop out into window",style:{padding:6,borderRadius:6,color:N?"#4b5563":"#9ca3af",backgroundColor:N?"#f3f4f6":"transparent",border:"none",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",transition:"background-color 0.15s, color 0.15s"},children:ne?jsx(PictureInPicture,{style:{width:16,height:16}}):jsx(PictureInPicture2,{style:{width:16,height:16}})}),jsx("button",{onClick:lt,onMouseEnter:()=>p(true),onMouseLeave:()=>p(false),style:{padding:6,borderRadius:6,color:d?"#4b5563":"#9ca3af",backgroundColor:d?"#f3f4f6":"transparent",border:"none",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",transition:"background-color 0.15s, color 0.15s"},children:jsx(X,{style:{width:16,height:16}})})]})]}),jsxs("div",{ref:He,style:{flex:1,overflowY:"auto",minHeight:0,display:"flex",flexDirection:"column"},children:[e==="prompting"&&C.length===0&&jsxs("div",{style:{padding:"24px 20px",textAlign:"center"},children:[jsx("p",{style:{fontSize:13,color:"#6b7280",marginBottom:14,lineHeight:1.625,margin:"0 0 14px 0"},children:"Describe the feature you want to build."}),jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:6,justifyContent:"center"},children:R.map((a,E)=>jsx("button",{onClick:()=>{L(a),Ne.current?.focus();},onMouseEnter:()=>oe(E),onMouseLeave:()=>oe(null),style:{fontSize:12,padding:"5px 12px",borderRadius:9999,color:j===E?"#1f2937":"#6b7280",backgroundColor:j===E?"#f9fafb":"transparent",border:j===E?"1px solid #d1d5db":"1px solid #e5e7eb",cursor:"pointer",transition:"color 0.15s, background-color 0.15s, border-color 0.15s",fontFamily:"inherit"},children:a},a))})]}),C.length>0&&jsx("div",{style:{padding:"16px 16px 0 16px"},children:C.map((a,E)=>jsx("div",{style:{marginBottom:E<C.length-1?10:0},children:a.type==="user"?jsxs("div",{style:{display:"flex",alignItems:"flex-start",gap:8,flexDirection:"row-reverse"},children:[jsx("div",{style:{width:22,height:22,borderRadius:"50%",backgroundColor:"#e5e7eb",display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0,marginTop:2},children:jsx(User,{style:{width:13,height:13,color:"#6b7280"}})}),jsx("div",{style:{backgroundColor:"#f3f4f6",borderRadius:"12px 4px 12px 12px",padding:"8px 12px",fontSize:13,color:"#374151",lineHeight:1.5,maxWidth:"75%"},children:a.text})]}):jsxs("div",{style:{display:"flex",alignItems:"flex-start",gap:8},children:[jsx("div",{style:{width:22,height:22,borderRadius:"50%",backgroundColor:"#f0fdf4",display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0,marginTop:2},children:jsx(Check,{style:{width:13,height:13,color:"#9ca3af"}})}),jsxs("div",{style:{backgroundColor:"#f9fafb",borderRadius:"4px 12px 12px 12px",padding:"8px 12px",fontSize:13,color:"#6b7280",fontWeight:500,display:"flex",alignItems:"center",gap:6,maxWidth:"75%"},children:[jsx("span",{style:{flex:1},children:a.text}),f&&E===C.length-1&&e!=="running"&&jsxs("button",{onClick:B=>{B.stopPropagation(),jr();},onMouseEnter:()=>Be(E),onMouseLeave:()=>Be(null),disabled:W,style:{position:"relative",padding:2,borderRadius:4,border:"none",background:xe===E?"rgba(0,0,0,0.06)":"transparent",color:xe===E?"#6b7280":"#d1d5db",cursor:W?"default":"pointer",display:"flex",alignItems:"center",justifyContent:"center",transition:"color 0.15s, background 0.15s",opacity:W?.4:1,flexShrink:0},children:[jsx(Undo2,{style:{width:12,height:12}}),xe===E&&jsx("span",{style:{position:"absolute",bottom:"calc(100% + 4px)",right:0,fontSize:10,fontWeight:500,color:"#fff",background:"#374151",borderRadius:4,padding:"2px 6px",whiteSpace:"nowrap",pointerEvents:"none",lineHeight:"16px"},children:"Undo"})]})]})]})},E))}),e==="running"&&jsx("div",{style:{padding:16},children:jsxs("div",{onClick:()=>ie(!X$1),style:{backgroundColor:"#1a1a2e",borderRadius:12,overflow:"hidden",cursor:"pointer",transition:"all 0.3s cubic-bezier(0.22, 1, 0.36, 1)"},children:[jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"10px 14px"},children:[jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,minWidth:0},children:[jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"#6b7280",strokeWidth:"2.5",strokeLinecap:"round",style:{animation:"__fork-spin 2s linear infinite",flexShrink:0},children:jsx("path",{d:"M21 12a9 9 0 1 1-6.219-8.56"})}),jsx(Vo,{events:r})]}),jsx("div",{style:{color:"#6b7280",flexShrink:0,marginLeft:8,transition:"transform 0.2s ease",transform:X$1?"rotate(180deg)":"rotate(0deg)"},children:jsx(ChevronDown,{style:{width:14,height:14}})})]}),jsx("div",{style:{maxHeight:X$1?320:0,opacity:X$1?1:0,transition:"max-height 0.35s cubic-bezier(0.22, 1, 0.36, 1), opacity 0.25s ease",overflow:"hidden"},children:jsx("div",{style:{borderTop:"1px solid rgba(255,255,255,0.08)",maxHeight:320,overflowY:"auto"},children:jsx(hr,{events:r})})})]})}),e==="error"&&jsxs("div",{style:{padding:"20px 16px",textAlign:"center"},children:[jsx("div",{style:{width:36,height:36,backgroundColor:"#fef2f2",borderRadius:"50%",display:"flex",alignItems:"center",justifyContent:"center",margin:"0 auto 10px auto"},children:jsx(X,{style:{width:18,height:18,color:"#ef4444"}})}),jsx("p",{style:{fontSize:12,color:"#6b7280",marginBottom:10,maxWidth:260,margin:"0 auto 10px auto"},children:o}),jsxs("button",{onClick:()=>{let a=t?.prompt||it.current;a&&m(a,se);},onMouseEnter:()=>re(true),onMouseLeave:()=>re(false),style:{display:"inline-flex",alignItems:"center",gap:6,padding:"6px 12px",borderRadius:8,fontSize:12,fontWeight:500,color:"#4f46e5",backgroundColor:Z?"#e0e7ff":"#eef2ff",border:"none",cursor:"pointer",transition:"background-color 0.15s",fontFamily:"inherit"},children:[jsx(RotateCcw,{style:{width:12,height:12}})," Try Again"]})]})]}),e!=="running"&&jsx("div",{style:{padding:"8px 12px 12px 12px",borderTop:"1px solid rgba(229, 231, 235, 0.6)",flexShrink:0},children:jsxs("div",{style:{display:"flex",alignItems:"flex-end",gap:6,borderRadius:12,padding:"8px 8px 8px 12px",background:"rgba(0, 0, 0, 0.04)",border:"1px solid rgba(0, 0, 0, 0.06)"},children:[jsx("textarea",{ref:Ne,value:x,onChange:a=>{L(a.target.value),a.target.style.height="auto",a.target.style.height=Math.min(a.target.scrollHeight,160)+"px";},onKeyDown:a=>{a.key==="Enter"&&!a.shiftKey&&(a.preventDefault(),Ut()),a.key==="Escape"&&!A&&lt();},placeholder:C.length>0?"Ask for another change...":`Describe your ideal ${st.toLowerCase()}...`,rows:1,style:{flex:1,backgroundColor:"transparent",fontSize:13,color:"#111827",border:"none",outline:"none",padding:"0 4px 0 0",fontFamily:"inherit",resize:"none",lineHeight:1.5,maxHeight:160,overflow:"auto"}}),jsx("button",{onClick:Ut,disabled:!x.trim(),onMouseEnter:()=>J(true),onMouseLeave:()=>J(false),style:{width:26,height:26,borderRadius:"50%",display:"flex",alignItems:"center",justifyContent:"center",color:"#ffffff",opacity:x.trim()?1:.25,transform:U&&x.trim()?"scale(1.1)":"scale(1)",background:x.trim()?"#1c4587":"rgba(0,0,0,0.12)",border:"none",cursor:x.trim()?"pointer":"default",flexShrink:0,transition:"transform 0.15s, opacity 0.15s",padding:0},children:jsx(ArrowUp,{style:{width:13,height:13}})})]})})]})]});return A?ct:ne&&ye?createPortal(ct,ye.document.body):jsx(qo,{children:ct})}function xr(e){if("target"in e&&e.target)return e.target;if("boundaryId"in e&&e.boundaryId)return {type:"boundary",id:e.boundaryId,title:e.title};if("slotId"in e&&e.slotId)return {type:"slot",id:e.slotId,title:e.title??e.slotLabel};throw new Error("Fork chat target requires either target, slotId, or boundaryId.")}function Et(e){let{apiKey:t,userId:r,userHash:o,baseUrl:n,appId:i,previewSession:s,refreshModuleManifest:l,queueBoundaryAnimation:R}=G(),[m,f]=useState("idle"),[S,P]=useState(null),[y,k]=useState([]),[h,w]=useState(null),A=useRef(null),x=useCallback(()=>{f("prompting"),k([]),w(null),P(null);},[]),L=useCallback(()=>{f("idle"),A.current&&(A.current.close(),A.current=null);},[]);useEffect(()=>{s&&s.target.kind==="module"&&s.target.id===e&&f(v=>v==="idle"?"prompting":v);},[s?.preview_session_id,s?.target.id,e]);let C=useCallback(async(v,g)=>{try{if(!i)throw new Error("ForkProvider requires appId for module boundary prompts.");f("running"),k([]),w(null);let c;if(s){let u=await fetch(`${n}/api/v1/preview/${encodeURIComponent(s.preview_session_id)}/author`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`,...Q()},body:JSON.stringify({prompt:v,...s.fork_id?{fork_id:s.fork_id}:{}})});if(!u.ok){let N=await u.json().catch(()=>({}));throw new Error(N.error||`API error: ${u.status}`)}let d=await u.json();Pe(d.fork_id),c=await(await fetch(`${n}/api/v1/forks/${d.fork_id}`,{headers:{Authorization:`Bearer ${t}`,...Q()}})).json();}else {let u={userId:r,prompt:v,boundaryId:e,appId:i};g&&(u.containerId=g),o&&(u.userHash=o);let d=await fetch(`${n}/api/v1/forks`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:JSON.stringify(u)});if(!d.ok){let p=await d.json().catch(()=>({}));throw new Error(p.error||`API error: ${d.status}`)}c=await d.json();}P(c);let F=new URLSearchParams({key:t});o&&(F.set("userId",r),F.set("userHash",o));let b=new EventSource(`${n}/api/v1/forks/${c.id}/events?${F.toString()}`);A.current=b,b.onmessage=u=>{try{let d=JSON.parse(u.data);if(k(p=>[...p,d]),d.type==="complete"){let p=d.data;R(e,c.id),l().catch(()=>{}).finally(()=>{let N={...c,status:"complete",moduleUrl:p.moduleUrl,cssUrls:p.cssUrls,summary:p.summary,completedAt:new Date().toISOString()};P(N),f("complete"),b.close();});}else if(d.type==="error"){let p=d.data;w(p.error||"Unknown error"),f("error"),b.close();}}catch{}},b.onerror=()=>{fetch(`${n}/api/v1/forks/${c.id}`,{headers:{Authorization:`Bearer ${t}`}}).then(u=>u.json()).then(u=>{P(u),u.status==="complete"?(R(e,u.id),l().catch(()=>{}),f("complete")):u.status==="error"&&(w(u.error||"Fork generation failed"),f("error"));}).catch(()=>{w("Connection lost"),f("error");}),b.close();};}catch(c){w(c.message),f("error");}},[t,i,n,e,s,R,l,o,r]),_=useCallback(async()=>{try{if(!i)throw new Error("ForkProvider requires appId for boundary undo.");let v={userId:r,boundaryId:e,appId:i};o&&(v.userHash=o);let g=await fetch(`${n}/api/v1/forks/undo`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:JSON.stringify(v)});if(!g.ok){let F=await g.json().catch(()=>({}));throw new Error(F.error||`API error: ${g.status}`)}let c=await g.json();return await l().catch(()=>{}),c.removed?(P(null),f("prompting")):c.fork&&(P(c.fork),f("complete")),c}catch(v){throw w(v.message),v}},[t,i,n,e,l,o,r]);return {state:m,fork:S,events:y,error:h,open:x,close:L,startFork:C,undoFork:_}}function Fr(e){let{state:t,fork:r,events:o,error:n,open:i,close:s,startFork:l,undoFork:R}=Et(e);return {state:t,fork:r,events:o,error:n,isOpen:t!=="idle",open:i,close:s,submit:l,undo:R}}function $t(){let{apiKey:e,userId:t,userHash:r,baseUrl:o,previewSession:n,setSlotFork:i,clearSlotFork:s,skipAnimationForSlot:l}=G(),[R,m]=useState("idle"),[f,S]=useState(null),[P,y]=useState([]),[k,h]=useState(null),w=useRef(null),A=useCallback(()=>{m("prompting"),y([]),h(null),S(null);},[]),x=useCallback(()=>{m("idle"),w.current&&(w.current.close(),w.current=null);},[]);useEffect(()=>{n&&n.target.kind==="slot"&&m(_=>_==="idle"?"prompting":_);},[n?.preview_session_id,n?.target.kind]);let L=useCallback(async(_,v,g)=>{try{m("running"),y([]),h(null);let c;if(n){let u=await fetch(`${o}/api/v1/preview/${encodeURIComponent(n.preview_session_id)}/author`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`,...Q()},body:JSON.stringify({prompt:_,...n.fork_id?{fork_id:n.fork_id}:{}})});if(!u.ok){let N=await u.json().catch(()=>({}));throw new Error(N.error||`API error: ${u.status}`)}let d=await u.json();Pe(d.fork_id),c=await(await fetch(`${o}/api/v1/forks/${d.fork_id}`,{headers:{Authorization:`Bearer ${e}`,...Q()}})).json();}else {let u={userId:t,prompt:_};v&&(u.slotId=v),g&&(u.containerId=g),r&&(u.userHash=r);let d=await fetch(`${o}/api/v1/forks`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`},body:JSON.stringify(u)});if(!d.ok){let p=await d.json().catch(()=>({}));throw new Error(p.error||`API error: ${d.status}`)}c=await d.json();}S(c);let F=new URLSearchParams({key:e});r&&(F.set("userId",t),F.set("userHash",r));let b=new EventSource(`${o}/api/v1/forks/${c.id}/events?${F.toString()}`);w.current=b,b.onmessage=u=>{try{let d=JSON.parse(u.data);if(y(p=>[...p,d]),d.type==="complete"){let p=d.data,N={...c,status:"complete",bundleUrl:p.bundleUrl,summary:p.summary,completedAt:new Date().toISOString()};S(N),m("complete"),v&&p.bundleUrl&&i(v,N),b.close();}else if(d.type==="error"){let p=d.data;h(p.error||"Unknown error"),m("error"),b.close();}}catch{}},b.onerror=()=>{fetch(`${o}/api/v1/forks/${c.id}`,{headers:{Authorization:`Bearer ${e}`}}).then(u=>u.json()).then(u=>{S(u),u.status==="complete"?(m("complete"),v&&u.bundleUrl&&i(v,u)):u.status==="error"&&(h(u.error||"Fork generation failed"),m("error"));}).catch(()=>{h("Connection lost"),m("error");}),b.close();};}catch(c){h(c.message),m("error");}},[e,t,r,o,n,i]),C=useCallback(async _=>{try{let v={userId:t,slotId:_};r&&(v.userHash=r);let g=await fetch(`${o}/api/v1/forks/undo`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`},body:JSON.stringify(v)});if(!g.ok){let F=await g.json().catch(()=>({}));throw new Error(F.error||`API error: ${g.status}`)}let c=await g.json();return l(_),c.removed?(s(_),S(null),m("prompting")):c.fork&&(i(_,c.fork),S(c.fork)),c}catch(v){throw h(v.message),v}},[e,t,r,o,s,i]);return {state:R,fork:f,events:P,error:k,open:A,close:x,startFork:L,undoFork:C}}function Rr(){let{state:e,fork:t,events:r,error:o,open:n,close:i,startFork:s,undoFork:l}=$t();return {state:e,fork:t,events:r,error:o,isOpen:e!=="idle",open:n,close:i,submit:s,undo:l}}function Pt(e){let t=xr(e),r=Rr(),o=Fr(t.type==="boundary"?t.id:""),{baseUrl:n,apiKey:i,userId:s,userHash:l,appId:R}=G(),m=t.type==="slot"?r:o,f=t.type==="slot"?"slot":"boundary",S=t.id,P=t.title,y=useCallback((h,w,A)=>t.type==="slot"?r.submit(h,w??t.id,A):o.submit(h,A),[o,r,t]),k=useCallback(h=>t.type==="slot"?r.undo(h??t.id):o.undo(),[o,r,t]);return {...m,target:t,targetId:S,targetLabel:P,historyMode:f,submit:y,undo:k,buttonProps:{onClick:m.open},panelProps:{state:m.state,fork:m.fork,events:m.events,error:m.error,...t.type==="slot"?{slotId:S,targetLabel:P,historyMode:f}:{targetId:S,targetLabel:P,historyMode:f},onSubmit:y,onUndo:k,onClose:m.close,baseUrl:n,apiKey:i,userId:s,userHash:l,appId:R}}}function Me(e){let{examplePrompts:t,embedded:r}=e,o=Pt(e);return r?jsx(Je,{...o.panelProps,examplePrompts:t,embedded:true}):o.isOpen?jsx(Je,{...o.panelProps,examplePrompts:t}):jsx(xt,{...o.buttonProps})}function en({boundaryId:e,title:t,examplePrompts:r}){return jsx(Me,{boundaryId:e,title:t,examplePrompts:r})}function _t(e){let t=Array.from(e.children).filter(o=>o instanceof HTMLElement);return t.length===1?t[0]:getComputedStyle(e).display==="contents"?null:e}function $r(e){let t=e.getBoundingClientRect(),r=e.cloneNode(true);r.style.position="fixed",r.style.top=`${t.top}px`,r.style.left=`${t.left}px`,r.style.width=`${t.width}px`,r.style.height=`${t.height}px`,r.style.flex="none",r.style.minHeight="auto",r.style.zIndex="9998",r.style.pointerEvents="none",r.style.overflow="hidden";let o=getComputedStyle(e).backgroundColor;r.style.backgroundColor=o&&o!=="rgba(0, 0, 0, 0)"&&o!=="transparent"?o:getComputedStyle(document.body).backgroundColor||"#ffffff",document.body.appendChild(r);let n=e.querySelectorAll("*"),i=r.querySelectorAll("*");for(let s=0;s<n.length;s+=1)n[s].scrollTop!==0&&(i[s].scrollTop=n[s].scrollTop),n[s].scrollLeft!==0&&(i[s].scrollLeft=n[s].scrollLeft);return r}function At(e){let t=[],r=e.querySelectorAll("*");for(let o of r){if(!(o instanceof HTMLElement))continue;let n=o.getBoundingClientRect();if(n.width<10||n.height<10||["SCRIPT","STYLE","META","LINK"].includes(o.tagName))continue;let i=getComputedStyle(o),s=parseFloat(i.borderTopLeftRadius)||0;t.push({tag:o.tagName,className:o.className||"",text:(o.textContent||"").slice(0,50).trim(),rect:n,borderRadius:s});}return t}function Pr(e,t){let r=[];for(let o of t)if(!(e.find(s=>s.tag===o.tag&&s.className===o.className&&Math.abs(s.rect.top-o.rect.top)<20&&Math.abs(s.rect.left-o.rect.left)<20)||r.some(s=>o.rect.top>=s.rect.top&&o.rect.left>=s.rect.left&&o.rect.right<=s.rect.right&&o.rect.bottom<=s.rect.bottom))){for(let s=r.length-1;s>=0;s-=1){let l=r[s];l.rect.top>=o.rect.top&&l.rect.left>=o.rect.left&&l.rect.right<=o.rect.right&&l.rect.bottom<=o.rect.bottom&&r.splice(s,1);}r.push({rect:o.rect,borderRadius:o.borderRadius});}return r}function Cr(e,t){let r=[];for(let o of e)if(!(t.find(s=>s.tag===o.tag&&s.className===o.className&&Math.abs(s.rect.top-o.rect.top)<20&&Math.abs(s.rect.left-o.rect.left)<20)||r.some(s=>o.rect.top>=s.rect.top&&o.rect.left>=s.rect.left&&o.rect.right<=s.rect.right&&o.rect.bottom<=s.rect.bottom))){for(let s=r.length-1;s>=0;s-=1){let l=r[s];l.rect.top>=o.rect.top&&l.rect.left>=o.rect.left&&l.rect.right<=o.rect.right&&l.rect.bottom<=o.rect.bottom&&r.splice(s,1);}r.push({rect:o.rect,borderRadius:o.borderRadius});}return r}function _r(e,t,r,o,n){let i=Math.max(0,Math.min(n,r/2,o/2));return i===0?`M ${e} ${t} L ${e+r} ${t} L ${e+r} ${t+o} L ${e} ${t+o} Z`:[`M ${e+i} ${t}`,`L ${e+r-i} ${t}`,`A ${i} ${i} 0 0 1 ${e+r} ${t+i}`,`L ${e+r} ${t+o-i}`,`A ${i} ${i} 0 0 1 ${e+r-i} ${t+o}`,`L ${e+i} ${t+o}`,`A ${i} ${i} 0 0 1 ${e} ${t+o-i}`,`L ${e} ${t+i}`,`A ${i} ${i} 0 0 1 ${e+i} ${t}`,"Z"].join(" ")}function Tt(e){let t="http://www.w3.org/2000/svg",r=document.createElement("div");r.setAttribute("data-fork-highlights","true"),r.style.cssText="position:fixed;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:9999;";let o=document.createElementNS(t,"svg");o.setAttribute("width","100%"),o.setAttribute("height","100%"),o.style.cssText="position:absolute;top:0;left:0;overflow:visible;";let n=document.createElementNS(t,"defs");o.appendChild(n);let i=[];for(let f=0;f<e.length;f+=1){let{rect:S,borderRadius:P}=e[f],y=S.left-.5,k=S.top-.5,h=S.width+1,w=S.height+1,A=Math.min(P+.5,h/2,w/2),x=_r(y,k,h,w,A),L=`__fork-glow-${f}`,C=document.createElementNS(t,"filter");C.setAttribute("id",L),C.setAttribute("x","-100%"),C.setAttribute("y","-100%"),C.setAttribute("width","300%"),C.setAttribute("height","300%");let _=document.createElementNS(t,"feGaussianBlur");_.setAttribute("in","SourceGraphic"),_.setAttribute("stdDeviation","8"),C.appendChild(_),n.appendChild(C);let v=`__fork-mask-${f}`,g=document.createElementNS(t,"mask");g.setAttribute("id",v),g.setAttribute("maskUnits","userSpaceOnUse"),g.setAttribute("x",String(y-200)),g.setAttribute("y",String(k-200)),g.setAttribute("width",String(h+400)),g.setAttribute("height",String(w+400));let c=document.createElementNS(t,"rect");c.setAttribute("x",String(y-200)),c.setAttribute("y",String(k-200)),c.setAttribute("width",String(h+400)),c.setAttribute("height",String(w+400)),c.setAttribute("fill","white"),g.appendChild(c);let F=document.createElementNS(t,"path");F.setAttribute("d",x),F.setAttribute("fill","black"),g.appendChild(F),n.appendChild(g);let b=document.createElementNS(t,"g");b.setAttribute("mask",`url(#${v})`),b.setAttribute("opacity","0");let u=document.createElementNS(t,"g");u.setAttribute("filter",`url(#${L})`);let d=document.createElementNS(t,"path");d.setAttribute("d",x),d.setAttribute("fill","none"),d.setAttribute("stroke","rgba(150, 185, 220, 0.6)"),d.setAttribute("stroke-width","6"),d.setAttribute("stroke-linecap","round"),u.appendChild(d),b.appendChild(u),o.appendChild(b);let p=document.createElementNS(t,"path");p.setAttribute("d",x),p.setAttribute("fill","none"),p.setAttribute("stroke","rgba(150, 185, 220, 0.35)"),p.setAttribute("stroke-width","2"),p.setAttribute("stroke-linecap","round"),p.setAttribute("opacity","0"),o.appendChild(p),i.push(d,p),d.__group=b;}r.appendChild(o),document.body.appendChild(r);let s=[];for(let f=0;f<i.length;f+=2){let S=i[f],P=i[f+1],y=S.__group;if(!y)continue;let k=P.getTotalLength(),h=S.getTotalLength();if(k<=0)continue;let w=k*.35;P.setAttribute("stroke-dasharray",`${w} ${k-w}`),P.setAttribute("stroke-dashoffset","0"),s.push(P.animate([{strokeDashoffset:0,opacity:0,offset:0},{strokeDashoffset:-0.2*k,opacity:.92,offset:.06},{strokeDashoffset:-2*k,opacity:.92,offset:.92},{strokeDashoffset:-2.25*k,opacity:0,offset:1}],{duration:14e3,easing:"ease-in-out",fill:"forwards"}));let A=h*.35;S.setAttribute("stroke-dasharray",`${A} ${h-A}`),S.setAttribute("stroke-dashoffset","0"),s.push(S.animate([{strokeDashoffset:0,offset:0},{strokeDashoffset:-0.2*h,offset:.06},{strokeDashoffset:-2*h,offset:.92},{strokeDashoffset:-2.25*h,offset:1}],{duration:14e3,easing:"ease-in-out",fill:"forwards"})),s.push(y.animate([{opacity:0,offset:0},{opacity:.92,offset:.06},{opacity:.92,offset:.92},{opacity:0,offset:1}],{duration:14e3,easing:"ease-in-out",fill:"forwards"}));}let l=false,R=()=>{if(l)return;l=true,clearTimeout(m);for(let S of s)try{S.cancel();}catch{}let f=r.animate([{opacity:1},{opacity:0}],{duration:400,fill:"forwards"});f.onfinish=()=>r.remove(),window.removeEventListener("click",R);},m=setTimeout(R,14500);return setTimeout(()=>{l||window.addEventListener("click",R);},500),R}function Ar(e){let t="http://www.w3.org/2000/svg",r=document.createElement("div");r.setAttribute("data-fork-removed","true"),r.style.cssText="position:fixed;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:9999;";let o=document.createElementNS(t,"svg");o.setAttribute("width","100%"),o.setAttribute("height","100%"),o.style.cssText="position:absolute;top:0;left:0;overflow:visible;";let n=document.createElementNS(t,"defs"),i=document.createElementNS(t,"filter");i.setAttribute("id","__fork-removed-shadow"),i.setAttribute("x","-10%"),i.setAttribute("y","-10%"),i.setAttribute("width","120%"),i.setAttribute("height","120%");let s=document.createElementNS(t,"feDropShadow");s.setAttribute("dx","0"),s.setAttribute("dy","1"),s.setAttribute("stdDeviation","2"),s.setAttribute("flood-color","rgba(0,0,0,0.15)"),i.appendChild(s),n.appendChild(i),o.appendChild(n);for(let{rect:l,borderRadius:R}of e){let m=document.createElementNS(t,"path");m.setAttribute("d",_r(l.left,l.top,l.width,l.height,R)),m.setAttribute("fill","none"),m.setAttribute("stroke","rgba(120, 125, 135, 0.6)"),m.setAttribute("stroke-width","1.5"),m.setAttribute("stroke-dasharray","8 4"),m.setAttribute("stroke-linecap","round"),m.setAttribute("filter","url(#__fork-removed-shadow)"),m.setAttribute("opacity","0"),o.appendChild(m),m.animate([{opacity:0,offset:0},{opacity:.6,offset:.08},{opacity:.05,offset:.45},{opacity:.6,offset:.85},{opacity:.05,offset:1}],{duration:5e3,easing:"ease-in-out",fill:"forwards"});}return r.appendChild(o),document.body.appendChild(r),r}var tt=new Map,Mt=new Map;function on(e){return e instanceof Error?e:new Error(typeof e=="string"?e:"Unknown module override error")}function Mr(e,t){let r=(t?e[t]:void 0)??e.default;if(typeof r!="function"){let o=t||"default";throw new Error(`Fork boundary module is missing a React component export: ${o}`)}return r}function nn(e){if(!e||typeof document>"u")return Promise.resolve();let t=tt.get(e);if(t)return t;let r=document.querySelector(`link[data-fork-override-href="${e}"]`);if(r instanceof HTMLLinkElement){let n=r.sheet?Promise.resolve():new Promise((i,s)=>{let l=()=>{r.removeEventListener("load",l),r.removeEventListener("error",R),i();},R=()=>{r.removeEventListener("load",l),r.removeEventListener("error",R),s(new Error(`Failed to load boundary stylesheet: ${e}`));};r.addEventListener("load",l,{once:true}),r.addEventListener("error",R,{once:true});});return tt.set(e,n),n}let o=new Promise((n,i)=>{let s=document.createElement("link");s.rel="stylesheet",s.href=e,s.setAttribute("data-fork-override-href",e),s.onload=()=>n(),s.onerror=()=>{s.remove(),i(new Error(`Failed to load boundary stylesheet: ${e}`));},document.head.appendChild(s);}).catch(n=>{throw tt.delete(e),n});return tt.set(e,o),o}function sn(e){let t=Mt.get(e);if(t)return t;let r=import(e).catch(o=>{throw Mt.delete(e),o});return Mt.set(e,r),r}async function an(e,t,r){if(e)try{await Promise.all(e.cssUrls.map(i=>nn(i)));let n=await sn(e.moduleUrl);return Mr(n,r)}catch(n){console.error(`[Fork] Failed to load override for boundary "${e.boundaryId}", falling back to original module.`,n);}let o=await t();return Mr(o,r)}function ln(e){function t(r){let{appId:o,moduleOverridesEnabled:n,moduleManifestReady:i,moduleManifestVersion:s,registerBoundary:l,getBoundaryOverride:R,consumeBoundaryAnimation:m}=G(),[f,S]=useState(null),[P,y]=useState(null),k=useRef(null),h=useRef(null),w=useRef(null),A=useRef(false),x=useRef(null),L=useRef(null),C=R(e.id),_=C?`override:${C.id}`:"original",v=e.editorMetadata?JSON.stringify(e.editorMetadata):void 0;if(useEffect(()=>()=>{L.current&&(clearTimeout(L.current),L.current=null),x.current&&(x.current.remove(),x.current=null);},[]),useEffect(()=>{l({id:e.id,exportName:e.exportName,editorMetadata:e.editorMetadata});},[o,l,e.id,e.exportName,v]),useEffect(()=>{if(n&&!i&&!f||h.current===_&&f)return;let g=false;return y(null),an(C,e.original,e.exportName).then(c=>{if(!g){if(C?.id&&m(e.id,C.id)&&k.current){let F=_t(k.current);if(F){let b=At(F);b.length>0&&(w.current=b,A.current=true,L.current&&(clearTimeout(L.current),L.current=null),x.current&&x.current.remove(),x.current=$r(F));}}h.current=_,startTransition(()=>{S(()=>c);});}}).catch(c=>{g||y(on(c));}),()=>{g=true;}},[m,_,n,i,s,C?.id,C?.moduleUrl,C?.integrity,C?.cssUrls.join("|"),e.exportName,e.original,f]),useEffect(()=>{if(!A.current||!f||!k.current)return;let g=false;return requestAnimationFrame(()=>{requestAnimationFrame(()=>{if(g||!k.current)return;let c=w.current,F=_t(k.current);if(w.current=null,A.current=false,!c||!F){x.current&&(x.current.remove(),x.current=null);return}let b=At(F),u=Pr(c,b),d=Cr(c,b),p=x.current;if(d.length>0&&p){let N=Ar(d);L.current=setTimeout(()=>{L.current=null;let O=400;p.animate([{opacity:1},{opacity:0}],{duration:O,fill:"forwards"}),N.animate([{opacity:1},{opacity:0}],{duration:O,fill:"forwards"}),setTimeout(()=>{p.remove(),N.remove(),x.current===p&&(x.current=null),u.length>0&&Tt(u);},O);},3500);}else p&&(p.remove(),x.current===p&&(x.current=null)),u.length>0&&Tt(u);});}),()=>{g=true;}},[f]),P)throw P;return f?jsx("div",{ref:k,style:{display:"contents"},children:jsx(f,{...r})}):jsx(Fragment,{children:e.loading??null})}return t.displayName=`ForkBoundary(${e.id})`,t}function un({slotId:e,title:t,slotLabel:r,examplePrompts:o}){return jsx(Me,{slotId:e,title:t,slotLabel:r,examplePrompts:o})}
44
+ export{en as ForkBoundaryUI,xt as ForkButton,Me as ForkChatInterface,Je as ForkPanel,lo as ForkProvider,So as ForkSlot,un as ForkUI,ln as forkable,dt as registerForkShared,Et as useBoundaryFork,$t as useFork,Pt as useForkChatPanel,be as usePreviewSession};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fork-api/chat-sdk",
3
- "version": "0.1.131",
3
+ "version": "0.1.132",
4
4
  "description": "React SDK for Fork — let your users customize your UI with AI.",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "homepage": "https://withfork.co",