@fork-api/chat-sdk 0.1.129 → 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 +6 -6
- package/dist/index.d.cts +49 -7
- package/dist/index.d.ts +49 -7
- package/dist/index.js +6 -6
- package/package.json +1 -1
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 re="__FORK_SHARED__";function Le(){var t,r,o,n;let e=globalThis;return e[re]||(e[re]={}),(t=e[re]).react||(t.react=He__namespace),(r=e[re])["react-dom"]||(r["react-dom"]=Ht__namespace),(o=e[re])["react/jsx-runtime"]||(o["react/jsx-runtime"]=Ot__namespace),(n=e[re])["react/jsx-dev-runtime"]||(n["react/jsx-dev-runtime"]=Ut__namespace),e[re]}function Be(e){return Object.assign(Le(),e)}var et=He.createContext(null);function Qe(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:Qe(e,n.moduleUrl),cssUrls:Array.isArray(n.cssUrls)?n.cssUrls.map(i=>Qe(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),[P,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(_=>_+1);return}if(!P){T(false);return}if(!f||!n){l({}),T(true),C(_=>_+1);return}let v=new URLSearchParams({appId:n,userId:f});g&&v.set("userHash",g),T(false);try{let _=await fetch(`${r}/api/v1/boundaries/manifest?${v.toString()}`,{headers:{Authorization:`Bearer ${t}`}});if(!_.ok)throw new Error(`${_.status}`);let N=await _.json();l(jt(r,N));}catch(_){console.error("[ForkProvider] Failed to fetch module override manifest:",_.message),l({});}finally{C(_=>_+1),T(true);}},[t,n,r,P,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(_=>{if(!_.ok)throw new Error(`${_.status}`);return _.json()}).then(_=>{_&&typeof _=="object"&&d(_);}).catch(()=>{});},[t,f,g,r]),He.useEffect(()=>{B();},[B]);let U=He.useCallback((v,_)=>{d(N=>({...N,[v]:_}));},[]),K=He.useCallback(v=>{d(_=>{let N={..._};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,_)=>{x.current.set(v,_);},[]),O=He.useCallback((v,_)=>x.current.get(v)!==_?false:(x.current.delete(v),true),[]),q=He.useCallback(v=>{if(!n)return;let _=JSON.stringify(v);F.current.get(v.id)===_||y.current.get(v.id)?.signature===_||(y.current.set(v.id,{boundary:v,signature:_}),c(z=>z+1));},[n]);He.useEffect(()=>{if(!n||y.current.size===0)return;let v=setTimeout(()=>{let _=Array.from(y.current.values());_.length!==0&&fetch(`${r}/api/v1/boundaries`,{method:"POST",headers:{Authorization:`Bearer ${t}`,"Content-Type":"application/json"},body:JSON.stringify({appId:n,boundaries:_.map(N=>N.boundary)})}).then(N=>{if(!N.ok)throw new Error(`${N.status}`)}).then(()=>{for(let N of _)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]),ee=He.useCallback(async()=>{if(!g)throw new Error("Reset requires verified user identity (provide authUrl / userHash).");let v=new URLSearchParams({userId:f,userHash:g}),_=await fetch(`${r}/api/v1/forks/all?${v.toString()}`,{method:"DELETE",headers:{Authorization:`Bearer ${t}`}});if(!_.ok){let z=await _.json().catch(()=>({}));throw new Error(z.error||`API error: ${_.status}`)}let N=await _.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(et.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:ee},children:o})}function I(){let e=He.useContext(et);if(!e)throw new Error("useForkContext must be used within <ForkProvider>");return e}function ke(e){return I().forks[e]}var fe=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 rt=new Set;function ot(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 st(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 nt(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:P}=e[m],w=S.left-.5,h=S.top-.5,l=S.width+1,$=S.height+1,T=Math.min(P+.5,l/2,$/2),R=st(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],P=i[m+1],w=S.__group,h=P.getTotalLength(),l=S.getTotalLength();if(h<=0)continue;let $=h*.35;P.setAttribute("stroke-dasharray",`${$} ${h-$}`),P.setAttribute("stroke-dashoffset","0"),s.push(P.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,P=a.height,w=Math.min(b,S/2,P/2),h=st(d,m,S,P,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 it({slotId:e,children:t,githubRepo:r,shared:o,events:n}){Oe(t,e);let i=ke(e),{baseUrl:s,apiKey:a,appId:b,shouldSkipAnimation:d}=I(),[m,S]=He.useState(null),P=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 fe(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 fe(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(rt.has(e))return;rt.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,P.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=ot(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("*"),ee=O.querySelectorAll("*");for(let v=0;v<W.length;v++)W[v].scrollTop!==0&&(ee[v].scrollTop=W[v].scrollTop),W[v].scrollLeft!==0&&(ee[v].scrollLeft=W[v].scrollLeft);$.current=O;}S(()=>G.default),P.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=ot(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&&(nt(f));},U);},3500);}else p&&(p.remove(),$.current=null),f.length>0&&(nt(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 lt=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 ct(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&&ct(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(it,{slotId:e,githubRepo:n,shared:a,events:b,children:r});let d=ke(e),{baseUrl:m,apiKey:S,appId:P}=I(),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=ct(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
|
-
`+
|
|
3
|
-
`)+"\n\nThe forked component will not be able to call these. Add them to the `callbacks` prop of <ForkSlot>.");},[e,r,i]),
|
|
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
|
-
`}),
|
|
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(ve,{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 Pt();`${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 ${_e}`}),e==="running"&&Ot.jsx("span",{title:te?`Estimated ~${te} min`:"Estimating\u2026",style:{fontSize:10,fontWeight:600,color:te?"#1c4587":"#9ca3af",backgroundColor:te?"rgba(28, 69, 135, 0.08)":"rgba(156, 163, 175, 0.12)",padding:"1px 6px",borderRadius:999,flexShrink:0,fontVariantNumeric:"tabular-nums",animation:te?void 0:"__fork-pulse 1.4s ease-in-out infinite",minWidth:28,textAlign:"center"},children:te?`~${te}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:ye,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:()=>_(L),onMouseLeave:()=>_(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(Ar,{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(yt,{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||Pe.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 ${_e.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}})})]})})]})]})}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}=I(),[b,d]=He.useState("idle"),[m,S]=He.useState(null),[P,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:P,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}=I(),[a,b]=He.useState("idle"),[d,m]=He.useState(null),[S,P]=He.useState([]),[w,h]=He.useState(null),l=He.useRef(null),$=He.useCallback(()=>{b("prompting"),P([]),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"),P([]),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=>[...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}=I(),d=t.type==="slot"?r:o,m=t.type==="slot"?"slot":"boundary",S=t.id,P=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:P,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:P,historyMode:m}:{targetId:S,targetLabel:P,historyMode:m},onSubmit:w,onUndo:h,onClose:d.close,baseUrl:n,apiKey:i,userId:s,userHash:a,appId:b}}}function he(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 Mr({boundaryId:e,title:t,examplePrompts:r}){return Ot.jsx(he,{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:P}=e[m],w=S.left-.5,h=S.top-.5,l=S.width+1,$=S.height+1,T=Math.min(P+.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],P=i[m+1],w=S.__group;if(!w)continue;let h=P.getTotalLength(),l=S.getTotalLength();if(h<=0)continue;let $=h*.35;P.setAttribute("stroke-dasharray",`${$} ${h-$}`),P.setAttribute("stroke-dashoffset","0"),s.push(P.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 Nr(e){return e instanceof Error?e:new Error(typeof e=="string"?e:"Unknown module override error")}function _t(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 Hr(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 Or(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 Ur(e,t,r){if(e)try{await Promise.all(e.cssUrls.map(i=>Hr(i)));let n=await Or(e.moduleUrl);return _t(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 _t(o,r)}function Dr(e){function t(r){let{appId:o,moduleOverridesEnabled:n,moduleManifestReady:i,moduleManifestVersion:s,registerBoundary:a,getBoundaryOverride:b,consumeBoundaryAnimation:d}=I(),[m,S]=He.useState(null),[P,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),Ur(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(Nr(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]),P)throw P;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 jr({slotId:e,title:t,slotLabel:r,examplePrompts:o}){return Ot.jsx(he,{slotId:e,title:t,slotLabel:r,examplePrompts:o})}
|
|
44
|
-
exports.ForkBoundaryUI=
|
|
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&<();},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,useLayoutEffect}from'react';import*as Ht 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 re="__FORK_SHARED__";function Le(){var t,r,o,n;let e=globalThis;return e[re]||(e[re]={}),(t=e[re]).react||(t.react=He),(r=e[re])["react-dom"]||(r["react-dom"]=Ht),(o=e[re])["react/jsx-runtime"]||(o["react/jsx-runtime"]=Ot),(n=e[re])["react/jsx-dev-runtime"]||(n["react/jsx-dev-runtime"]=Ut),e[re]}function Be(e){return Object.assign(Le(),e)}var et=createContext(null);function Qe(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:Qe(e,n.moduleUrl),cssUrls:Array.isArray(n.cssUrls)?n.cssUrls.map(i=>Qe(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),[P,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(_=>_+1);return}if(!P){T(false);return}if(!f||!n){l({}),T(true),C(_=>_+1);return}let v=new URLSearchParams({appId:n,userId:f});g&&v.set("userHash",g),T(false);try{let _=await fetch(`${r}/api/v1/boundaries/manifest?${v.toString()}`,{headers:{Authorization:`Bearer ${t}`}});if(!_.ok)throw new Error(`${_.status}`);let N=await _.json();l(jt(r,N));}catch(_){console.error("[ForkProvider] Failed to fetch module override manifest:",_.message),l({});}finally{C(_=>_+1),T(true);}},[t,n,r,P,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(_=>{if(!_.ok)throw new Error(`${_.status}`);return _.json()}).then(_=>{_&&typeof _=="object"&&d(_);}).catch(()=>{});},[t,f,g,r]),useEffect(()=>{B();},[B]);let U=useCallback((v,_)=>{d(N=>({...N,[v]:_}));},[]),K=useCallback(v=>{d(_=>{let N={..._};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,_)=>{x.current.set(v,_);},[]),O=useCallback((v,_)=>x.current.get(v)!==_?false:(x.current.delete(v),true),[]),q=useCallback(v=>{if(!n)return;let _=JSON.stringify(v);F.current.get(v.id)===_||y.current.get(v.id)?.signature===_||(y.current.set(v.id,{boundary:v,signature:_}),c(z=>z+1));},[n]);useEffect(()=>{if(!n||y.current.size===0)return;let v=setTimeout(()=>{let _=Array.from(y.current.values());_.length!==0&&fetch(`${r}/api/v1/boundaries`,{method:"POST",headers:{Authorization:`Bearer ${t}`,"Content-Type":"application/json"},body:JSON.stringify({appId:n,boundaries:_.map(N=>N.boundary)})}).then(N=>{if(!N.ok)throw new Error(`${N.status}`)}).then(()=>{for(let N of _)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]),ee=useCallback(async()=>{if(!g)throw new Error("Reset requires verified user identity (provide authUrl / userHash).");let v=new URLSearchParams({userId:f,userHash:g}),_=await fetch(`${r}/api/v1/forks/all?${v.toString()}`,{method:"DELETE",headers:{Authorization:`Bearer ${t}`}});if(!_.ok){let z=await _.json().catch(()=>({}));throw new Error(z.error||`API error: ${_.status}`)}let N=await _.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(et.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:ee},children:o})}function I(){let e=useContext(et);if(!e)throw new Error("useForkContext must be used within <ForkProvider>");return e}function ke(e){return I().forks[e]}var fe=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 rt=new Set;function ot(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 st(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 nt(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:P}=e[m],w=S.left-.5,h=S.top-.5,l=S.width+1,$=S.height+1,T=Math.min(P+.5,l/2,$/2),R=st(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],P=i[m+1],w=S.__group,h=P.getTotalLength(),l=S.getTotalLength();if(h<=0)continue;let $=h*.35;P.setAttribute("stroke-dasharray",`${$} ${h-$}`),P.setAttribute("stroke-dashoffset","0"),s.push(P.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,P=a.height,w=Math.min(b,S/2,P/2),h=st(d,m,S,P,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 it({slotId:e,children:t,githubRepo:r,shared:o,events:n}){Oe(t,e);let i=ke(e),{baseUrl:s,apiKey:a,appId:b,shouldSkipAnimation:d}=I(),[m,S]=useState(null),P=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 fe(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 fe(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(rt.has(e))return;rt.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,P.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=ot(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("*"),ee=O.querySelectorAll("*");for(let v=0;v<W.length;v++)W[v].scrollTop!==0&&(ee[v].scrollTop=W[v].scrollTop),W[v].scrollLeft!==0&&(ee[v].scrollLeft=W[v].scrollLeft);$.current=O;}S(()=>G.default),P.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=ot(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&&(nt(f));},U);},3500);}else p&&(p.remove(),$.current=null),f.length>0&&(nt(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 lt=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 ct(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&&ct(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(it,{slotId:e,githubRepo:n,shared:a,events:b,children:r});let d=ke(e),{baseUrl:m,apiKey:S,appId:P}=I(),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=ct(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
|
-
`+
|
|
3
|
-
`)+"\n\nThe forked component will not be able to call these. Add them to the `callbacks` prop of <ForkSlot>.");},[e,r,i]),useEffect(()=>{
|
|
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"),
|
|
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(ve,{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 Pt();`${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 ${_e}`}),e==="running"&&jsx("span",{title:te?`Estimated ~${te} min`:"Estimating\u2026",style:{fontSize:10,fontWeight:600,color:te?"#1c4587":"#9ca3af",backgroundColor:te?"rgba(28, 69, 135, 0.08)":"rgba(156, 163, 175, 0.12)",padding:"1px 6px",borderRadius:999,flexShrink:0,fontVariantNumeric:"tabular-nums",animation:te?void 0:"__fork-pulse 1.4s ease-in-out infinite",minWidth:28,textAlign:"center"},children:te?`~${te}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:ye,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:()=>_(L),onMouseLeave:()=>_(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(Ar,{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(yt,{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||Pe.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 ${_e.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}})})]})})]})]})}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}=I(),[b,d]=useState("idle"),[m,S]=useState(null),[P,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:P,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}=I(),[a,b]=useState("idle"),[d,m]=useState(null),[S,P]=useState([]),[w,h]=useState(null),l=useRef(null),$=useCallback(()=>{b("prompting"),P([]),h(null),m(null);},[]),T=useCallback(()=>{b("idle"),l.current&&(l.current.close(),l.current=null);},[]),R=useCallback(async(F,y)=>{try{b("running"),P([]),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=>[...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}=I(),d=t.type==="slot"?r:o,m=t.type==="slot"?"slot":"boundary",S=t.id,P=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:P,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:P,historyMode:m}:{targetId:S,targetLabel:P,historyMode:m},onSubmit:w,onUndo:h,onClose:d.close,baseUrl:n,apiKey:i,userId:s,userHash:a,appId:b}}}function he(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 Mr({boundaryId:e,title:t,examplePrompts:r}){return jsx(he,{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:P}=e[m],w=S.left-.5,h=S.top-.5,l=S.width+1,$=S.height+1,T=Math.min(P+.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],P=i[m+1],w=S.__group;if(!w)continue;let h=P.getTotalLength(),l=S.getTotalLength();if(h<=0)continue;let $=h*.35;P.setAttribute("stroke-dasharray",`${$} ${h-$}`),P.setAttribute("stroke-dashoffset","0"),s.push(P.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 Nr(e){return e instanceof Error?e:new Error(typeof e=="string"?e:"Unknown module override error")}function _t(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 Hr(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 Or(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 Ur(e,t,r){if(e)try{await Promise.all(e.cssUrls.map(i=>Hr(i)));let n=await Or(e.moduleUrl);return _t(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 _t(o,r)}function Dr(e){function t(r){let{appId:o,moduleOverridesEnabled:n,moduleManifestReady:i,moduleManifestVersion:s,registerBoundary:a,getBoundaryOverride:b,consumeBoundaryAnimation:d}=I(),[m,S]=useState(null),[P,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),Ur(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(Nr(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]),P)throw P;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 jr({slotId:e,title:t,slotLabel:r,examplePrompts:o}){return jsx(he,{slotId:e,title:t,slotLabel:r,examplePrompts:o})}
|
|
44
|
-
export{
|
|
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&<();},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