@fork-api/chat-sdk 0.1.132 → 0.1.133
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 +100 -1
- package/dist/index.d.ts +100 -1
- package/dist/index.js +6 -6
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
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
|
-
`+
|
|
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 kt=require('react'),Nr=require('react-dom'),Dr=require('react/jsx-runtime'),jr=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 kt__namespace=/*#__PURE__*/_interopNamespace(kt);var Nr__namespace=/*#__PURE__*/_interopNamespace(Nr);var Dr__namespace=/*#__PURE__*/_interopNamespace(Dr);var jr__namespace=/*#__PURE__*/_interopNamespace(jr);var ce="__FORK_SHARED__";function lt(){var t,r,n,o;let e=globalThis;return e[ce]||(e[ce]={}),(t=e[ce]).react||(t.react=kt__namespace),(r=e[ce])["react-dom"]||(r["react-dom"]=Nr__namespace),(n=e[ce])["react/jsx-runtime"]||(n["react/jsx-runtime"]=Dr__namespace),(o=e[ce])["react/jsx-dev-runtime"]||(o["react/jsx-dev-runtime"]=jr__namespace),e[ce]}function ct(e){return Object.assign(lt(),e)}var zr="__fork_preview_session__";function Ne(e){return `${zr}${e}`}var W={apiKey:null,session:null},ut=new Set;function dt(){for(let e of ut)try{e();}catch(t){console.error("[fork-preview] subscriber threw",t);}}function Dt(e){let t=Date.parse(e.expires_at);return Number.isFinite(t)?t<=Date.now():true}function Wr(e){if(typeof window>"u")return null;try{let t=window.sessionStorage.getItem(Ne(e));if(!t)return null;let r=JSON.parse(t);return !r||typeof r!="object"||typeof r.preview_session_id!="string"?null:Dt(r)?(window.sessionStorage.removeItem(Ne(e)),null):r}catch{return null}}function jt(e,t){if(!(typeof window>"u"))try{t?window.sessionStorage.setItem(Ne(e),JSON.stringify(t)):window.sessionStorage.removeItem(Ne(e));}catch{}}function be(e){W.apiKey!==e&&(W.apiKey=e,W.session=Wr(e),dt());}function ue(){return W.session?Dt(W.session)?(ft(null),null):W.session:null}function ft(e){W.session=e,W.apiKey&&jt(W.apiKey,e),dt();}function we(e){W.session&&W.session.fork_id!==e&&(W.session={...W.session,fork_id:e},W.apiKey&&jt(W.apiKey,W.session),dt());}function pt(e){return ut.add(e),()=>{ut.delete(e);}}var zt="__fork_preview";function Wt(){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(zt);return typeof r=="string"&&r.length>0?r:null}function gt(e){if(typeof window>"u")return false;try{if(window.sessionStorage.getItem(`__fork_preview_session__${e}`))return !0}catch{}return Gt()!==null}function Kt(){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(zt);let r=t.toString(),n=r?`#${r}`:"";try{window.history.replaceState(null,"",window.location.pathname+window.location.search+n);}catch{}}var de=null;function Gt(){if(de)return de;let e=Wt();return e?(de=e,Kt(),de):null}async function mt(e,t){be(e);let r=ue();if(r)return de=null,r;let n=de??Wt();if(de=null,!n)return null;Kt();try{let o=await fetch(`${t}/api/v1/preview/activate`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`},body:JSON.stringify({token:n})});if(!o.ok){let a=await o.json().catch(()=>({}));return console.warn(`[fork-preview] activate failed (${o.status}): ${a.error??"unknown"}`),null}let i=await o.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,container_id:i.container_id??null,container_name:i.container_name??i.target_user_id,fork_id:i.fork_id??null,expires_at:i.expires_at};return ft(s),s}catch(o){return console.warn("[fork-preview] activate threw",o),null}}function Gr(){return ue()}function Vr(){return null}function De(){return kt.useSyncExternalStore(pt,Gr,Vr)}function X(){let e=ue();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}async function je(e){let t=new URLSearchParams({app:e.appId,user:e.userId});e.containerId&&t.set("containerId",e.containerId);let r=`${e.baseUrl}/api/v1/manifest?${t.toString()}`,n={Authorization:`Bearer ${e.apiKey}`,"X-Fork-App-Id":e.appId,"X-Fork-User-Id":e.userId,...e.extraHeaders??{}};e.userHash&&(n["X-Fork-User-Hash"]=e.userHash),e.previous?.etag&&(n["If-None-Match"]=e.previous.etag);let o=await fetch(r,{headers:n,signal:e.signal});if(o.status===304)return null;if(!o.ok)throw new Error(`manifest ${o.status} ${o.statusText}`);let i=await o.json(),s={};for(let[a,f]of Object.entries(i.modules)){let g=f.moduleUrl??f.bundleUrl??null,c=f.legacyModuleUrl??f.legacyBundleUrl??null;s[a]={forkId:f.forkId,moduleUrl:g,legacyModuleUrl:c,bundleUrl:f.bundleUrl??g,legacyBundleUrl:f.legacyBundleUrl??c,cssUrls:f.cssUrls??[],integrity:f.integrity,metadata:f.metadata,buildId:f.buildId,updatedAt:f.updatedAt};}return {containerId:i.containerId,slots:i.slots,modules:s,generatedAt:i.generatedAt,etag:o.headers.get("ETag")??void 0}}var qr="fork:manifest:v1";function ht(e,t,r){return `${qr}:${e}:${t}:${r}`}function Jr(e,t,r){if(typeof window>"u")return null;try{let n=window.localStorage.getItem(ht(e,t,r));return n?JSON.parse(n):null}catch{return null}}function Xr(e,t,r,n){if(!(typeof window>"u"))try{window.localStorage.setItem(ht(e,t,r),JSON.stringify(n));}catch{}}function Yr(e,t,r){if(!(typeof window>"u"))try{window.localStorage.removeItem(ht(e,t,r));}catch{}}function Zr(e,t){if(!e||!t)return e!==t;if(e.containerId!==t.containerId)return true;let r=Object.entries(e.slots),n=Object.entries(t.slots);if(r.length!==n.length)return true;for(let[s,a]of r){let f=t.slots[s];if(!f||f.forkId!==a.forkId||f.buildId!==a.buildId)return true}let o=Object.entries(e.modules),i=Object.entries(t.modules);if(o.length!==i.length)return true;for(let[s,a]of o){let f=t.modules[s];if(!f||f.forkId!==a.forkId||f.buildId!==a.buildId)return true}return false}var Jt=kt.createContext(null);function Se(e,t){if(!t)return t;try{return new URL(t,`${e.replace(/\/+$/,"")}/`).toString()}catch{return t}}function tn(e,t){let r={};for(let[n,o]of Object.entries(t.boundaries||{}))r[n]={...o,moduleUrl:Se(e,o.moduleUrl),cssUrls:Array.isArray(o.cssUrls)?o.cssUrls.map(i=>Se(e,i)):[]};return r}function Vt(e,t,r,n){let o={};for(let[i,s]of Object.entries(t.slots)){let a=s.bundleUrl??s.legacyBundleUrl;a&&(o[i]={id:s.forkId,userId:r,prompt:"",status:"complete",slotId:i,appId:n,bundleUrl:Se(e,a),createdAt:s.updatedAt,completedAt:s.updatedAt});}return o}function qt(e,t){let r={};for(let[n,o]of Object.entries(t.modules)){let i=o.moduleUrl??o.legacyModuleUrl??o.bundleUrl??"";i&&(r[n]={id:o.forkId,boundaryId:n,moduleUrl:Se(e,i),cssUrls:(o.cssUrls??[]).map(s=>Se(e,s)),integrity:o.integrity,metadata:o.metadata,createdAt:o.updatedAt});}return r}function rn(e){let{apiKey:t,baseUrl:r,children:n,appId:o,shared:i}=e,s="userId"in e?e.userId:void 0,a="authUrl"in e?e.authUrl:void 0,[f]=kt.useState(()=>(be(t),gt(t))),[g,c]=kt.useState({}),[x,T]=kt.useState(s?{userId:s,userHash:void 0}:null),[F,v]=kt.useState(!!s||f),[y,k]=kt.useState({}),[C,w]=kt.useState(!o),[I,$]=kt.useState(0),[A,R]=kt.useState(null),h=kt.useRef(new Map),l=kt.useRef(new Map),[E,S]=kt.useState(0),u=kt.useRef(new Set),p=kt.useRef(new Map),m=kt.useRef(void 0);lt(),kt.useEffect(()=>{return mt(t,r).then(()=>{}),()=>{}},[]);let M=De();i&&m.current!==i&&(ct(i),m.current=i),kt.useEffect(()=>{a&&(f||(v(false),fetch(a,{credentials:"include"}).then(_=>{if(!_.ok)throw new Error(`Auth endpoint returned ${_.status}`);return _.json()}).then(_=>{if(!_.userId||typeof _.userId!="string")throw new Error("authUrl response must include userId");T({userId:_.userId,userHash:_.userHash});}).catch(_=>{console.error("[ForkProvider] Failed to fetch user identity from authUrl:",_.message);}).finally(()=>{v(true);})));},[a,f]),kt.useEffect(()=>{!a&&s&&(T({userId:s,userHash:void 0}),v(true));},[s,a]);let z=x?.userId??"",Y=x?.userHash,H=M?M.target_user_id:z,j=M?void 0:Y,Z=!!o,N=kt.useCallback(async()=>{if(!Z){R(null),k({}),w(true),$(b=>b+1);return}if(!F){w(false);return}if(!H||!o){R(null),k({}),w(true),$(b=>b+1);return}if(w(false),!M){try{let b=await je({baseUrl:r,apiKey:t,appId:o,userId:H,userHash:j});b&&(R(b.containerId),c(Vt(r,b,H,o)),k(qt(r,b)));}catch(b){console.error("[ForkProvider] Failed to fetch fork manifest:",b.message),R(null),c({}),k({});}finally{$(b=>b+1),w(true);}return}if(R(M.container_id??null),M.container_id){try{let b=await je({baseUrl:r,apiKey:t,appId:o,userId:H,containerId:M.container_id,extraHeaders:X()});b&&(c(Vt(r,b,H,o)),k(qt(r,b)));}catch(b){console.error("[ForkProvider] Failed to fetch preview container manifest:",b.message),c({}),k({});}finally{$(b=>b+1),w(true);}return}let _=new URLSearchParams({appId:o,userId:H});j&&_.set("userHash",j);try{let b=await fetch(`${r}/api/v1/boundaries/manifest?${_.toString()}`,{headers:{Authorization:`Bearer ${t}`,...X()}});if(!b.ok)throw new Error(`${b.status}`);let U=await b.json();k(tn(r,U));}catch(b){console.error("[ForkProvider] Failed to fetch module override manifest:",b.message),k({});}finally{$(b=>b+1),w(true);}},[t,o,r,F,Z,j,H,M?.preview_session_id,M?.fork_id,M?.container_id]);kt.useEffect(()=>{if(!H||o&&(!M||M.container_id))return;let _=new URLSearchParams({userId:H});j&&_.set("userHash",j),fetch(`${r}/api/v1/forks/active?${_.toString()}`,{headers:{Authorization:`Bearer ${t}`,...X()}}).then(b=>{if(!b.ok)throw new Error(`${b.status}`);return b.json()}).then(b=>{b&&typeof b=="object"&&c(b);}).catch(()=>{});},[t,o,H,j,r,M?.preview_session_id,M?.fork_id]),kt.useEffect(()=>{N();},[N]);let te=kt.useCallback((_,b)=>{c(U=>({...U,[_]:b}));},[]),J=kt.useCallback(_=>{c(b=>{let U={...b};return delete U[_],U});},[]),ie=kt.useCallback(_=>{u.current.add(_);},[]),K=kt.useCallback(_=>u.current.has(_)?(u.current.delete(_),true):false,[]),$e=kt.useCallback((_,b)=>{p.current.set(_,b);},[]),ke=kt.useCallback((_,b)=>p.current.get(_)!==b?false:(p.current.delete(_),true),[]),_e=kt.useCallback(_=>{if(!o)return;let b=JSON.stringify(_);h.current.get(_.id)===b||l.current.get(_.id)?.signature===b||(l.current.set(_.id,{boundary:_,signature:b}),S(G=>G+1));},[o]);kt.useEffect(()=>{if(!o||l.current.size===0)return;let _=setTimeout(()=>{let b=Array.from(l.current.values());b.length!==0&&fetch(`${r}/api/v1/boundaries`,{method:"POST",headers:{Authorization:`Bearer ${t}`,"Content-Type":"application/json"},body:JSON.stringify({appId:o,boundaries:b.map(U=>U.boundary)})}).then(U=>{if(!U.ok)throw new Error(`${U.status}`)}).then(()=>{for(let U of b)l.current.get(U.boundary.id)?.signature===U.signature&&(l.current.delete(U.boundary.id),h.current.set(U.boundary.id,U.signature));}).catch(U=>{console.error("[ForkProvider] Failed to register module boundaries:",U.message);});},50);return ()=>{clearTimeout(_);}},[t,o,r,E]);let rt=kt.useCallback(_=>y[_],[y]),Ae=kt.useCallback(async()=>{if(!H)throw new Error("Reset requires a resolved user identity.");let _=new URLSearchParams({userId:H});j&&_.set("userHash",j);let b=await fetch(`${r}/api/v1/forks/all?${_.toString()}`,{method:"DELETE",headers:{Authorization:`Bearer ${t}`,...X()}});if(!b.ok){let G=await b.json().catch(()=>({}));throw new Error(G.error||`API error: ${b.status}`)}let U=await b.json().catch(()=>({}));c({}),k({}),w(true),$(G=>G+1),u.current.clear(),p.current.clear();try{for(let G=sessionStorage.length-1;G>=0;G-=1){let re=sessionStorage.key(G);re&&re.startsWith("__fork_animated_")&&sessionStorage.removeItem(re);}}catch{}return U},[t,r,j,H]);return Dr.jsx(Jt.Provider,{value:{apiKey:t,userId:H,userHash:j,baseUrl:r,appId:o,forks:g,moduleOverridesEnabled:Z,moduleManifestReady:C,moduleManifestVersion:I,currentContainerId:A,previewSession:M,setSlotFork:te,clearSlotFork:J,skipAnimationForSlot:ie,shouldSkipAnimation:K,queueBoundaryAnimation:$e,consumeBoundaryAnimation:ke,registerBoundary:_e,getBoundaryOverride:rt,refreshModuleManifest:N,resetAllForks:Ae},children:n})}function V(){let e=kt.useContext(Jt);if(!e)throw new Error("useForkContext must be used within <ForkProvider>");return e}function ze(e){return V().forks[e]}var xe=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 n=this.values.get(t);if(Object.is(n,r))return;if(n!==void 0&&r!==null&&n!==null&&typeof n=="object"&&typeof r=="object")try{if(JSON.stringify(n)===JSON.stringify(r))return}catch{}this.values.set(t,r),this.snapshots.set(t,r);let o=this.listeners.get(t);o&&o.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(n=>this.subscribe(t,n),()=>this.getSnapshot(t)):(console.warn("[ForkBridge] React.useSyncExternalStore not available, returning static value"),this.values.get(t))}emit(t,...r){let n=this.eventHandlers.get(t);n&&n.forEach(o=>o(...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 bt(e,t){let r;try{r=kt.Children.only(e);}catch{let o=kt.Children.count(e);throw new Error(`<ForkSlot slotId="${t}"> must wrap exactly one React component, got ${o} children. Wrap your slot's contents in a single named component, e.g. <ForkSlot slotId="${t}"><MyShell ...props /></ForkSlot>.`)}let n=r.type;if(typeof n=="string")throw new Error(`<ForkSlot slotId="${t}"> child must be a React component (function or class), not an HTML element <${n}>. Wrap your slot's contents in a single named component, e.g. <ForkSlot slotId="${t}"><MyShell ...props /></ForkSlot>.`);if(typeof n=="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 Yt=new Set;function Zt(e){let t=[],r=e.querySelectorAll("*");for(let n of r){if(!(n instanceof HTMLElement))continue;let o=n.getBoundingClientRect();if(o.width<10||o.height<10||["SCRIPT","STYLE","META","LINK"].includes(n.tagName))continue;let i=getComputedStyle(n),s=parseFloat(i.borderTopLeftRadius)||0;t.push({tag:n.tagName,className:n.className||"",text:(n.textContent||"").slice(0,50).trim(),rect:o,borderRadius:s});}return t}function ln(e,t){let r=[];for(let n of t)if(!e.find(i=>i.tag===n.tag&&i.className===n.className&&Math.abs(i.rect.top-n.rect.top)<20&&Math.abs(i.rect.left-n.rect.left)<20)&&!r.some(s=>n.rect.top>=s.rect.top&&n.rect.left>=s.rect.left&&n.rect.right<=s.rect.right&&n.rect.bottom<=s.rect.bottom)){for(let s=r.length-1;s>=0;s--){let a=r[s];a.rect.top>=n.rect.top&&a.rect.left>=n.rect.left&&a.rect.right<=n.rect.right&&a.rect.bottom<=n.rect.bottom&&r.splice(s,1);}r.push({rect:n.rect,borderRadius:n.borderRadius});}return r}function cn(e,t){let r=[];for(let n of e)if(!t.find(i=>i.tag===n.tag&&i.className===n.className&&Math.abs(i.rect.top-n.rect.top)<20&&Math.abs(i.rect.left-n.rect.left)<20)&&!r.some(s=>n.rect.top>=s.rect.top&&n.rect.left>=s.rect.left&&n.rect.right<=s.rect.right&&n.rect.bottom<=s.rect.bottom)){for(let s=r.length-1;s>=0;s--){let a=r[s];a.rect.top>=n.rect.top&&a.rect.left>=n.rect.left&&a.rect.right<=n.rect.right&&a.rect.bottom<=n.rect.bottom&&r.splice(s,1);}r.push({rect:n.rect,borderRadius:n.borderRadius});}return r}function er(e,t,r,n,o){return o=Math.max(0,Math.min(o,r/2,n/2)),o===0?`M ${e} ${t} L ${e+r} ${t} L ${e+r} ${t+n} L ${e} ${t+n} Z`:[`M ${e+o} ${t}`,`L ${e+r-o} ${t}`,`A ${o} ${o} 0 0 1 ${e+r} ${t+o}`,`L ${e+r} ${t+n-o}`,`A ${o} ${o} 0 0 1 ${e+r-o} ${t+n}`,`L ${e+o} ${t+n}`,`A ${o} ${o} 0 0 1 ${e} ${t+n-o}`,`L ${e} ${t+o}`,`A ${o} ${o} 0 0 1 ${e+o} ${t}`,"Z"].join(" ")}function Qt(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 n=document.createElementNS(t,"svg");n.setAttribute("width","100%"),n.setAttribute("height","100%"),n.style.cssText="position:absolute;top:0;left:0;overflow:visible;";let o=document.createElementNS(t,"defs");n.appendChild(o);let i=[];for(let c=0;c<e.length;c++){let{rect:x,borderRadius:T}=e[c],F=x.left-.5,v=x.top-.5,y=x.width+1,k=x.height+1,C=Math.min(T+.5,y/2,k/2),w=er(F,v,y,k,C),I=`__fork-glow-${c}`,$=document.createElementNS(t,"filter");$.setAttribute("id",I),$.setAttribute("x","-100%"),$.setAttribute("y","-100%"),$.setAttribute("width","300%"),$.setAttribute("height","300%");let A=document.createElementNS(t,"feGaussianBlur");A.setAttribute("in","SourceGraphic"),A.setAttribute("stdDeviation","8"),$.appendChild(A),o.appendChild($);let R=`__fork-mask-${c}`,h=document.createElementNS(t,"mask");h.setAttribute("id",R),h.setAttribute("maskUnits","userSpaceOnUse"),h.setAttribute("x",String(F-200)),h.setAttribute("y",String(v-200)),h.setAttribute("width",String(y+400)),h.setAttribute("height",String(k+400));let l=document.createElementNS(t,"rect");l.setAttribute("x",String(F-200)),l.setAttribute("y",String(v-200)),l.setAttribute("width",String(y+400)),l.setAttribute("height",String(k+400)),l.setAttribute("fill","white"),h.appendChild(l);let E=document.createElementNS(t,"path");E.setAttribute("d",w),E.setAttribute("fill","black"),h.appendChild(E),o.appendChild(h);let S=document.createElementNS(t,"g");S.setAttribute("mask",`url(#${R})`),S.setAttribute("opacity","0");let u=document.createElementNS(t,"g");u.setAttribute("filter",`url(#${I})`);let p=document.createElementNS(t,"path");p.setAttribute("d",w),p.setAttribute("fill","none"),p.setAttribute("stroke","rgba(150, 185, 220, 0.6)"),p.setAttribute("stroke-width","6"),p.setAttribute("stroke-linecap","round"),u.appendChild(p),S.appendChild(u),n.appendChild(S);let m=document.createElementNS(t,"path");m.setAttribute("d",w),m.setAttribute("fill","none"),m.setAttribute("stroke","rgba(150, 185, 220, 0.35)"),m.setAttribute("stroke-width","2"),m.setAttribute("stroke-linecap","round"),m.setAttribute("opacity","0"),n.appendChild(m),i.push(p,m),p.__group=S;}r.appendChild(n),document.body.appendChild(r);let s=[];for(let c=0;c<i.length;c+=2){let x=i[c],T=i[c+1],F=x.__group,v=T.getTotalLength(),y=x.getTotalLength();if(v<=0)continue;let k=v*.35;T.setAttribute("stroke-dasharray",`${k} ${v-k}`),T.setAttribute("stroke-dashoffset","0"),s.push(T.animate([{strokeDashoffset:0,opacity:0,offset:0},{strokeDashoffset:-0.2*v,opacity:.92,offset:.06},{strokeDashoffset:-2*v,opacity:.92,offset:.92},{strokeDashoffset:-2.25*v,opacity:0,offset:1}],{duration:14e3,easing:"ease-in-out",fill:"forwards"}));let C=y*.35;x.setAttribute("stroke-dasharray",`${C} ${y-C}`),x.setAttribute("stroke-dashoffset","0"),s.push(x.animate([{strokeDashoffset:0,offset:0},{strokeDashoffset:-0.2*y,offset:.06},{strokeDashoffset:-2*y,offset:.92},{strokeDashoffset:-2.25*y,offset:1}],{duration:14e3,easing:"ease-in-out",fill:"forwards"})),s.push(F.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,f=()=>{if(a)return;a=true,clearTimeout(g);for(let x of s)try{x.cancel();}catch{}let c=r.animate([{opacity:1},{opacity:0}],{duration:400,fill:"forwards"});c.onfinish=()=>r.remove(),window.removeEventListener("click",f);},g=setTimeout(f,14500);return setTimeout(()=>{a||window.addEventListener("click",f);},500),f}function un(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 n=document.createElementNS(t,"svg");n.setAttribute("width","100%"),n.setAttribute("height","100%"),n.style.cssText="position:absolute;top:0;left:0;overflow:visible;";let o=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),o.appendChild(i),n.appendChild(o);for(let{rect:a,borderRadius:f}of e){let g=a.left,c=a.top,x=a.width,T=a.height,F=Math.min(f,x/2,T/2),v=er(g,c,x,T,F),y=document.createElementNS(t,"path");y.setAttribute("d",v),y.setAttribute("fill","none"),y.setAttribute("stroke","rgba(120, 125, 135, 0.6)"),y.setAttribute("stroke-width","1.5"),y.setAttribute("stroke-dasharray","8 4"),y.setAttribute("stroke-linecap","round"),y.setAttribute("filter","url(#__fork-removed-shadow)"),y.setAttribute("opacity","0"),n.appendChild(y),y.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(n),document.body.appendChild(r),r}function dn(e,t){if(e===t)return true;let r=Object.keys(e);if(r.length!==Object.keys(t).length)return false;for(let n of r)if(!Object.is(e[n],t[n]))return false;return true}var fn=kt__namespace.default.memo(function({component:t,containerRef:r,wrapperStyle:n,hostProps:o}){return Dr.jsx("div",{ref:r,style:n,children:Dr.jsx(t,{...o})})},(e,t)=>e.component===t.component&&dn(e.hostProps,t.hostProps)),yt=class extends kt__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 tr({slotId:e,children:t,githubRepo:r,shared:n,events:o}){bt(t,e);let i=ze(e),{baseUrl:s,apiKey:a,appId:f,shouldSkipAnimation:g}=V(),[c,x]=kt.useState(null),T=kt.useRef(null),F=kt.useRef(null),v=kt.useRef(null),y=kt.useRef(false),k=kt.useRef(null),C=kt.useRef(null),w=!!(n||o),I=kt.useRef(null);w&&!I.current&&(I.current=new xe(e));let $=kt.useRef(o);if($.current=o,kt.useEffect(()=>{if(w)return ()=>{I.current?.destroy(),I.current=null;}},[w,e]),w&&I.current&&n)for(let[E,S]of Object.entries(n))I.current.set(E,S);kt.useEffect(()=>{if(!w)return;I.current||(I.current=new xe(e));let E=I.current,S=Object.keys($.current||{}).map(u=>E.on(u,(...p)=>$.current?.[u]?.(...p)));return ()=>S.forEach(u=>u())},[w,e]),kt.useEffect(()=>{if(Yt.has(e))return;Yt.add(e);let E={id:e,appId:f,label:e,eventsShape:"{ navigate?: string }",currentLayout:"",githubRepo:r,mode:"direct",sharedKeys:n?Object.keys(n):[],eventNames:o?Object.keys(o):[],propsShape:"",callbackNames:[]};fetch(`${s}/api/v1/slots`,{method:"POST",headers:{Authorization:`Bearer ${a}`,"Content-Type":"application/json"},body:JSON.stringify(E)}).catch(()=>{});},[e,s,a,r,f]);let A=i?.id||null;kt.useEffect(()=>{if(i?.bundleUrl,T.current,F.current,!i?.bundleUrl||!A){return}let E=`${s}${i.bundleUrl.replace("bundle.js","component.js")}`,S=`__fork_animated_${e}`,u=sessionStorage.getItem(S),p=g(e),m=!p&&u!==A;if(p&&A&&sessionStorage.setItem(S,A),m&&F.current){let j=Zt(F.current);v.current=j,y.current=true,`${e}${j.length}`;}window.__FORK_REACT__=kt__namespace.default,window.__FORK_REACT_DOM__=Nr__namespace,window.__FORK_REACT_JSX__=Dr__namespace;let M=Date.now(),z=`${s}${i.bundleUrl.replace("bundle.js","component.css")}?t=${M}`,Y=document.createElement("link");Y.rel="stylesheet",Y.href=z,Y.dataset.forkSlot=e,document.head.appendChild(Y);let H=document.createElement("script");return H.src=E+"?t="+M,H.onload=()=>{let j=window.__FORK_EXPORT__;if(j?.default){if(F.current&&v.current&&y.current){let Z=F.current.getBoundingClientRect(),N=F.current.cloneNode(true);N.style.position="fixed",N.style.top=`${Z.top}px`,N.style.left=`${Z.left}px`,N.style.width=`${Z.width}px`,N.style.height=`${Z.height}px`,N.style.flex="none",N.style.minHeight="auto",N.style.zIndex="9998",N.style.pointerEvents="none",N.style.overflow="hidden";let te=getComputedStyle(F.current).backgroundColor;N.style.backgroundColor=te&&te!=="rgba(0, 0, 0, 0)"&&te!=="transparent"?te:getComputedStyle(document.body).backgroundColor||"#ffffff",document.body.appendChild(N);let J=F.current.querySelectorAll("*"),ie=N.querySelectorAll("*");for(let K=0;K<J.length;K++)J[K].scrollTop!==0&&(ie[K].scrollTop=J[K].scrollTop),J[K].scrollLeft!==0&&(ie[K].scrollLeft=J[K].scrollLeft);k.current=N;}x(()=>j.default),T.current=A;}else console.error(`[Fork:${e}] component.js loaded but no default export found`);window.__FORK_EXPORT__=void 0;},H.onerror=()=>{console.error(`[Fork:${e}] failed to load component.js`);},document.head.appendChild(H),()=>{H.remove(),Y.remove(),C.current&&(clearTimeout(C.current),C.current=null),k.current&&(k.current.remove(),k.current=null);}},[A,s,e]),kt.useEffect(()=>{if(!y.current||!c||!F.current){`${e}${y.current}`,F.current;return}let E=v.current;if(!E){return}requestAnimationFrame(()=>{requestAnimationFrame(()=>{if(!F.current)return;let S=Zt(F.current),u=ln(E,S),p=cn(E,S),m=k.current;if(`${e}${u.length}${p.length}`,p.length>0&&m){let M=un(p);C.current=setTimeout(()=>{C.current=null;let z=400;m.animate([{opacity:1},{opacity:0}],{duration:z,fill:"forwards"}),M.animate([{opacity:1},{opacity:0}],{duration:z,fill:"forwards"}),setTimeout(()=>{m.remove(),M.remove(),k.current=null,u.length>0&&(Qt(u));},z);},3500);}else m&&(m.remove(),k.current=null),u.length>0&&(Qt(u));v.current=null,y.current=false,A&&(sessionStorage.setItem(`__fork_animated_${e}`,A),`${e}`);});});},[c]);let R={flex:1,minHeight:0,display:"flex",flexDirection:"column"};if(!i||i.status!=="complete"||!i.bundleUrl)return Dr.jsx("div",{ref:F,style:R,children:t});if(!c)return Dr.jsx("div",{ref:F,style:R,children:t});let l=t?.props??{};return Dr.jsx(yt,{slotId:e,resetKey:A,fallback:Dr.jsx("div",{ref:F,style:R,children:t}),children:Dr.jsx(fn,{component:c,containerRef:F,wrapperStyle:R,hostProps:l})})}var nr=new Set;function mn(e){return `{ ${Object.entries(e).map(([r,n])=>n==null?`${r}: unknown`:Array.isArray(n)?`${r}: ${n.length>0?typeof n[0]:"unknown"}[]`:`${r}: ${typeof n}`).join("; ")} }`}function or(e,t=new Set){return kt.Children.forEach(e,r=>{if(!kt.isValidElement(r))return;let n=r.props;for(let[o,i]of Object.entries(n))typeof i=="function"&&/^on[A-Z]/.test(o)&&t.add(o);n.children&&or(n.children,t);}),t}function hn({slotId:e,props:t,children:r,allowedFetches:n,githubRepo:o,callbacks:i,mode:s="iframe",shared:a,events:f}){if(bt(r,e),s==="direct")return Dr.jsx(tr,{slotId:e,githubRepo:o,shared:a,events:f,children:r});let g=ze(e),{baseUrl:c,apiKey:x,appId:T}=V(),F=kt.useRef(null),v=kt.useRef(false),y=kt.useRef(null),k=kt.useRef(i);k.current=i;let C=kt.useRef(t);C.current=t;let w=kt.useRef(n);w.current=n,kt.useEffect(()=>{if(typeof process<"u")return;let R=or(r),h=new Set(i?Object.keys(i):[]),l=[...R].filter(E=>!h.has(E));l.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
|
+
`+l.map(E=>` - ${E}`).join(`
|
|
3
|
+
`)+"\n\nThe forked component will not be able to call these. Add them to the `callbacks` prop of <ForkSlot>.");},[e,r,i]),kt.useEffect(()=>{nr.has(e)||(nr.add(e),fetch(`${c}/api/v1/slots`,{method:"POST",headers:{Authorization:`Bearer ${x}`,"Content-Type":"application/json"},body:JSON.stringify({id:e,appId:T,label:e,propsShape:t?mn(t):"",eventsShape:"{ navigate?: string }",currentLayout:"",githubRepo:o,callbackNames:i?Object.keys(i):[],mode:s||"iframe"})}).catch(()=>{}));},[e,c,x,o,T]);let I=kt.useCallback(R=>{let h=F.current;if(h?.contentWindow&&v.current){let l=k.current?Object.keys(k.current):[];h.contentWindow.postMessage({type:"slot:props",props:R,callbackNames:l},"*"),y.current=null;}else y.current=R;},[]),$=kt.useCallback((R,h)=>{let l=w.current;return !l||l.length===0?false:l.some(E=>{let[S,u]=E.split(" "),p=h.split("?")[0];return R.toUpperCase()===S.toUpperCase()&&p.startsWith(u)})},[]);if(kt.useEffect(()=>{if(!g?.bundleUrl)return;let R=async h=>{if(h.source===F.current?.contentWindow){if(h.data?.type==="slot:ready")v.current=true,F.current?.contentWindow?.postMessage({type:"slot:allowed-fetches",paths:w.current||[]},"*"),w.current,y.current?I(y.current):I(C.current||{});else if(h.data?.type==="slot:event"){let l=h.data.event;l?.navigate&&(window.location.hash=l.navigate);}else if(h.data?.type==="slot:clipboard-write")navigator.clipboard.writeText(h.data.text).catch(l=>{console.warn(`[ForkSlot:${e}] clipboard write failed:`,l.message);});else if(h.data?.type==="slot:callback"){let{name:l,args:E}=h.data,S=k.current?.[l];S?(S(...E||[])):console.warn(`[ForkSlot:${e}] unknown callback: ${l}`);}else if(h.data?.type==="slot:fetch"){let{id:l,method:E,url:S,body:u}=h.data,p=F.current?.contentWindow;if(!p)return;let m=E||"GET";if(!$(m,S)){console.warn(`[ForkSlot:${e}] BLOCKED fetch #${l}: ${m} ${S} \u2014 not in allowedFetches`),p.postMessage({type:"slot:fetch-response",id:l,error:`Fetch not allowed: ${m} ${S}`},"*");return}try{let M={method:m};u&&m!=="GET"&&(M.headers={"Content-Type":"application/json"},M.body=JSON.stringify(u));let z=await fetch(S,M),Y=await z.json();`${e}${l}${z.status}`,p.postMessage({type:"slot:fetch-response",id:l,data:Y,status:z.status},"*");}catch(M){console.error(`[ForkSlot:${e}] fetch #${l} failed:`,M.message),p.postMessage({type:"slot:fetch-response",id:l,error:M.message},"*");}}}};return window.addEventListener("message",R),()=>{window.removeEventListener("message",R),v.current=false;}},[g?.bundleUrl,e,I,$]),kt.useEffect(()=>{g?.bundleUrl&&v.current&&I(t||{});},[t,g?.bundleUrl,I]),!g||g.status!=="complete"||!g.bundleUrl)return `${e}${g?.status||"none"}${g?.bundleUrl||"none"}`,Dr.jsx(Dr.Fragment,{children:r});`${e}${g.bundleUrl}`;let A=`${c}${g.bundleUrl.replace("/bundle.js","/host")}`;return Dr.jsx("iframe",{ref:F,src:A,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 Dr.jsxs("svg",{viewBox:"320 95 270 345",fill:"none",xmlns:"http://www.w3.org/2000/svg",style:e,...t,children:[Dr.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"}),Dr.jsx("path",{stroke:"currentColor",strokeWidth:"30",strokeLinejoin:"round",strokeLinecap:"round",d:"M387.096 174.735v188"}),Dr.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"}),Dr.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"}),Dr.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 vt({onClick:e}){let[t,r]=kt.useState(false),[n,o]=kt.useState(false),i=t?48:40;return Dr.jsx("button",{onClick:e,onMouseEnter:()=>r(true),onMouseLeave:()=>{r(false),o(false);},onMouseDown:()=>o(true),onMouseUp:()=>o(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:n?"scale(0.95)":"scale(1)",transition:"all 300ms",cursor:"pointer",padding:0,margin:0,outline:"none",boxSizing:"border-box"},title:"Fork this app",children:Dr.jsx(Ke,{style:{width:24,height:24}})})}var En={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},$n={status:"#60a5fa",agent_message:"#a0a0a0",tool_use:"#fbbf24",build_start:"#c084fc",build_complete:"#6b7280",build_error:"#f87171",complete:"#6b7280",error:"#f87171"},_n={read:lucideReact.FileSearch,write:lucideReact.Pencil,search:lucideReact.FileSearch,shell:lucideReact.Terminal,build:lucideReact.Package},An={read:"#60a5fa",write:"#fbbf24",search:"#60a5fa",shell:"#a78bfa",build:"#c084fc"};function xt(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 fr({events:e}){let t=kt.useRef(null);return kt.useEffect(()=>{t.current&&(t.current.scrollTop=t.current.scrollHeight);},[e]),Dr.jsxs(Dr.Fragment,{children:[Dr.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
|
+
`}),Dr.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&&Dr.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"6px",color:"#6b7280",fontSize:"11px"},children:[Dr.jsx(lucideReact.Loader2,{style:{width:"12px",height:"12px",animation:"__fork-spin 1s linear infinite",flexShrink:0}}),"Connecting to agent..."]}),e.map((r,n)=>{let o=n===e.length-1,i=r.type==="complete"||r.type==="error"||r.type==="build_complete"||r.type==="build_error",s=o&&!i&&(r.type==="status"||r.type==="tool_use"||r.type==="build_start"),a=En[r.type]||lucideReact.Code,f=$n[r.type]||"#9ca3af";if(r.type==="tool_use"){let g=String(r.data.category||"");a=_n[g]||lucideReact.Wrench,f=An[g]||"#fbbf24";}return s?a=lucideReact.Loader2:!o&&r.type==="status"&&(a=lucideReact.Check,f="#4ade80"),Dr.jsxs("div",{style:{display:"flex",gap:"6px",marginBottom:"6px",lineHeight:1.625},children:[Dr.jsx(a,{style:{width:"12px",height:"12px",marginTop:"2px",flexShrink:0,color:f,...s?{animation:"__fork-spin 1s linear infinite"}:{}}}),Dr.jsx("span",{style:{color:o&&!i?"#d1d5db":"#6b7280",wordBreak:"break-all"},children:xt(r)})]},n)})]})]})}var On=["Dark mode redesign","New workflow for adding to this page","Data-dense analytics view"],hr=35,Bn="Working on Feature",Hn="Built Custom Feature",yr=360,qe=350;function Nn(e){return e.length<=hr?e:e.slice(0,hr-3).trimEnd()+"..."}function Dn({events:e}){let[t,r]=kt.useState("Setting up environment..."),[n,o]=kt.useState(true),i=kt.useRef(t),s=kt.useRef(false);return kt.useEffect(()=>{if(!s.current){for(let f of e)if(f.type==="status"&&String(f.data.message||"").includes("Agent started")){s.current=true;break}}let a="Setting up environment...";if(s.current)for(let f=e.length-1;f>=0;f--){let g=e[f];if(g.type==="tool_use"||g.type==="build_start"||g.type==="build_complete"){a=Nn(xt(g));break}}if(a!==i.current){o(false);let f=setTimeout(()=>{r(a),i.current=a,o(true);},200);return ()=>clearTimeout(f)}},[e]),Dr.jsx("span",{style:{fontSize:11,color:"#d1d5db",fontWeight:500,opacity:n?1:0,transition:"opacity 0.2s ease",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",minWidth:0},children:t})}function jn({children:e}){let[t,r]=kt.useState(null);return kt.useEffect(()=>{if(typeof document>"u")return;let n=document.createElement("div");n.setAttribute("data-fork-panel-host",""),n.style.cssText="all: initial;",document.body.appendChild(n);let o=n.attachShadow({mode:"open"});return r(o),()=>{n.remove();}},[]),t?Nr.createPortal(e,t):null}function Je({state:e,fork:t,events:r,error:n,slotId:o,targetId:i,targetLabel:s,historyMode:a="slot",examplePrompts:f=On,onSubmit:g,onUndo:c,onClose:x,baseUrl:T,apiKey:F,userId:v,userHash:y,appId:k,embedded:C=false}){let[w,I]=kt.useState(""),[$,A]=kt.useState([]),[R,h]=kt.useState(false),[l,E]=kt.useState(false),[S,u]=kt.useState(false),[p,m]=kt.useState(false),[M,z]=kt.useState(false),[Y,H]=kt.useState(false),[j,Z]=kt.useState(false),[N,te]=kt.useState(null),[J,ie]=kt.useState(false),[K,$e]=kt.useState(false),[ke,_e]=kt.useState(null),[rt,Ae]=kt.useState(false),[_,b]=kt.useState([]),[U,G]=kt.useState(null),[re,Mt]=kt.useState(false),[pe,Pe]=kt.useState(false),[Pr,It]=kt.useState(false),[Cr,Lt]=kt.useState(null),[ge,Ut]=kt.useState(null),Ce=kt.useRef(null),Te=kt.useRef(null),{resetAllForks:Tr,previewSession:Me,currentContainerId:Mr}=V(),Ie=Me?.container_id??Mr,Ot=!!Me,ne=ge!==null,Bt=kt.useRef(x);kt.useEffect(()=>{Bt.current=x;});let nt=kt.useRef(null),Le=kt.useRef(false),Ht=typeof window<"u"&&"documentPictureInPicture"in window,Ir=async()=>{if(!(!Ht||ne))try{let d=await window.documentPictureInPicture.requestWindow({width:yr,height:640});d.document.body.style.margin="0",d.document.body.style.padding="0",d.document.body.style.height="100vh",d.document.body.style.overflow="hidden",d.document.body.style.background="#ffffff";try{let L=document.adoptedStyleSheets??[];L.length>0&&(d.document.adoptedStyleSheets=[...L]);}catch{}d.addEventListener("pagehide",()=>{nt.current=null,Ut(null),Le.current||Bt.current(),Le.current=!1;},{once:!0}),nt.current=d,Ut(d);}catch(d){console.warn("[Fork] PiP open failed:",d);}},Lr=()=>{ge&&(Le.current=true,ge.close());};kt.useEffect(()=>()=>{Le.current=true,nt.current?.close();},[]);let oe=i??o??"",Ue=(s||oe).replace(/[-_]+/g," ").replace(/\b\w/g,d=>d.toUpperCase()),ot=kt.useRef(""),Oe=C?true:l&&!S,Ur=r.find(d=>{let L=d.data;return d.type==="status"&&L.summary})?.data?.summary||t?.summary||Bn,le=r.find(d=>{let L=d.data;return (d.type==="status"||d.type==="complete")&&typeof L?.estimateMinutes=="number"})?.data?.estimateMinutes??t?.estimateMinutes;kt.useEffect(()=>{if(a==="none"){h(true);return}if(!T||!F||!v||!oe||R||!re)return;let d=new URLSearchParams({userId:v});if(y&&d.set("userHash",y),U&&d.set("containerId",U),a==="slot")d.set("slotId",oe);else if(a==="boundary"){if(!k){h(true);return}d.set("boundaryId",oe),d.set("appId",k);}fetch(`${T}/api/v1/forks/history?${d.toString()}`,{headers:{Authorization:`Bearer ${F}`}}).then(L=>L.ok?L.json():[]).then(L=>{let O=[];for(let He of L)He.role==="user"?O.push({type:"user",text:He.content}):O.push({type:"applied",text:He.content});A(O),h(true);}).catch(()=>h(true));},[F,k,T,R,a,oe,y,v,U,re]),kt.useEffect(()=>{e==="complete"&&ie(false);},[e]),kt.useEffect(()=>{if(C&&a==="none"){b([]),G(null),Mt(true);return}Ie?(b([{id:Ie,name:Ot?Me?.container_name||"Preview container":"Primary container",createdAt:""}]),G(Ie)):(b([]),G(null)),Mt(true);},[Ie,C,a,Ot,Me?.container_name]);let Be=kt.useRef(void 0);kt.useEffect(()=>{if(re){if(Be.current===void 0){Be.current=U;return}Be.current!==U&&(Be.current=U,A([]),h(false));}},[U,re]);let st=kt.useRef(null);kt.useEffect(()=>{if(!pe)return;let d=O=>{st.current&&(st.current.contains(O.target)||Pe(false));},L=O=>{O.key==="Escape"&&Pe(false);};return document.addEventListener("mousedown",d,true),document.addEventListener("keydown",L,true),()=>{document.removeEventListener("mousedown",d,true),document.removeEventListener("keydown",L,true);}},[pe]),kt.useEffect(()=>{if(C)return;let d=requestAnimationFrame(()=>E(true));return ()=>cancelAnimationFrame(d)},[C]),kt.useEffect(()=>{let d=C||ne;if((d||Oe)&&(e==="prompting"||e==="complete")){let L=setTimeout(()=>Ce.current?.focus(),d?100:qe+100);return ()=>clearTimeout(L)}},[Oe,C,ne,e]),kt.useEffect(()=>{if(e==="complete"&&ot.current){let L=r.find(O=>O.type==="complete")?.data?.summary||t?.summary||Hn;A(O=>O[O.length-1]?.type==="applied"?O:[...O,{type:"applied",text:L}]),I(""),setTimeout(()=>Ce.current?.focus(),200);}},[e,Ue,r,t?.summary]),kt.useEffect(()=>{Te.current&&(Te.current.scrollTop=Te.current.scrollHeight);},[$,e]);let Nt=()=>{w.trim()&&(ot.current=w.trim(),A(d=>[...d,{type:"user",text:w.trim()}]),g(w.trim(),oe,U),I(""));},Or=async()=>{if(!(!c||K||!oe)){$e(true);try{let d=await c(oe);A(L=>{let O=[...L];return O.length>=2&&O[O.length-1]?.type==="applied"?O.splice(-2,2):O.length>=1&&O[O.length-1]?.type==="applied"&&O.splice(-1,1),O}),d?.removed&&A([]);}catch{}finally{$e(false);}}},it=()=>{if(C){x();return}if(ne){ge?.close();return}u(true),E(false),setTimeout(()=>x(),qe);},Br=C||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:yr,maxWidth:"100vw",background:"#ffffff",boxShadow:Oe?"-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:Oe?"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'},at=Dr.jsxs(Dr.Fragment,{children:[Dr.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
|
-
`}),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=
|
|
43
|
+
`}),Dr.jsxs("div",{className:"__fork-panel",style:Br,children:[Dr.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:[Dr.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,minWidth:0,flex:1},children:[Dr.jsx(Ke,{style:{width:16,height:16,color:"#1c4587",cursor:"pointer",flexShrink:0},onDoubleClick:async d=>{if(d.stopPropagation(),!rt&&confirm("Reset all forks? This will remove all forked components.")){Ae(true);try{let L=await Tr();`${L?.deleted??0}`,A([]),I(""),ie(!1),it();}catch(L){console.error("[Fork] Reset failed:",L);}finally{Ae(false);}}}}),e==="running"?Dr.jsx("span",{style:{fontSize:13,fontWeight:600,color:"#111827",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",minWidth:0},children:Ur}):_.length===0?Dr.jsxs("span",{style:{fontSize:13,fontWeight:600,color:"#111827",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",minWidth:0},children:["Fork ",Ue]}):Dr.jsxs("div",{ref:st,style:{position:"relative",minWidth:0,display:"inline-flex"},children:[Dr.jsxs("button",{type:"button",onClick:()=>{Pe(d=>!d);},onMouseEnter:()=>It(true),onMouseLeave:()=>It(false),"aria-haspopup":"menu","aria-expanded":pe,style:{display:"inline-flex",alignItems:"center",gap:4,padding:"3px 6px",border:"1px solid transparent",borderRadius:6,background:Pr||pe?"#f3f4f6":"transparent",fontSize:13,fontWeight:600,color:"#111827",fontFamily:"inherit",cursor:"pointer",maxWidth:180,minWidth:0,transition:"background-color 0.12s"},children:[Dr.jsx("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",minWidth:0},children:_.find(d=>d.id===U)?.name??(re?`Fork ${Ue}`:"Loading\u2026")}),Dr.jsx(lucideReact.ChevronDown,{style:{width:12,height:12,color:"#6b7280",flexShrink:0,transform:pe?"rotate(180deg)":void 0,transition:"transform 0.15s"}})]}),pe&&Dr.jsx("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:_.map(d=>{let L=d.id===U,O=Cr===d.id;return Dr.jsxs("button",{type:"button",role:"menuitem",onMouseEnter:()=>Lt(d.id),onMouseLeave:()=>Lt(null),onClick:()=>{Pe(false),d.id!==U&&G(d.id);},style:{display:"flex",alignItems:"center",gap:8,width:"100%",padding:"6px 8px",border:"none",background:O?"#f3f4f6":"transparent",borderRadius:4,fontSize:13,fontFamily:"inherit",color:"#111827",cursor:"pointer",textAlign:"left",fontWeight:L?600:400},children:[Dr.jsx("span",{style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:14,height:14,color:"#111827",flexShrink:0},children:L&&Dr.jsx(lucideReact.Check,{style:{width:12,height:12}})}),Dr.jsx("span",{style:{flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:d.name})]},d.id)})})]}),e==="running"&&Dr.jsx("span",{title:le?`Estimated ~${le} min`:"Estimating\u2026",style:{fontSize:10,fontWeight:600,color:le?"#1c4587":"#9ca3af",backgroundColor:le?"rgba(28, 69, 135, 0.08)":"rgba(156, 163, 175, 0.12)",padding:"1px 6px",borderRadius:999,flexShrink:0,fontVariantNumeric:"tabular-nums",animation:le?void 0:"__fork-pulse 1.4s ease-in-out infinite",minWidth:28,textAlign:"center"},children:le?`~${le}m`:"~ m"}),e==="complete"&&Dr.jsx("div",{style:{height:6,width:6,backgroundColor:"#1c4587",borderRadius:"50%",flexShrink:0}})]}),!C&&Dr.jsxs("div",{style:{display:"flex",alignItems:"center",gap:2,flexShrink:0},children:[Ht&&Dr.jsx("button",{onClick:ne?Lr:Ir,onMouseEnter:()=>z(true),onMouseLeave:()=>z(false),title:ne?"Redock to sidebar":"Pop out into window",style:{padding:6,borderRadius:6,color:M?"#4b5563":"#9ca3af",backgroundColor:M?"#f3f4f6":"transparent",border:"none",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",transition:"background-color 0.15s, color 0.15s"},children:ne?Dr.jsx(lucideReact.PictureInPicture,{style:{width:16,height:16}}):Dr.jsx(lucideReact.PictureInPicture2,{style:{width:16,height:16}})}),Dr.jsx("button",{onClick:it,onMouseEnter:()=>m(true),onMouseLeave:()=>m(false),style:{padding:6,borderRadius:6,color:p?"#4b5563":"#9ca3af",backgroundColor:p?"#f3f4f6":"transparent",border:"none",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",transition:"background-color 0.15s, color 0.15s"},children:Dr.jsx(lucideReact.X,{style:{width:16,height:16}})})]})]}),Dr.jsxs("div",{ref:Te,style:{flex:1,overflowY:"auto",minHeight:0,display:"flex",flexDirection:"column"},children:[e==="prompting"&&$.length===0&&Dr.jsxs("div",{style:{padding:"24px 20px",textAlign:"center"},children:[Dr.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."}),Dr.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:6,justifyContent:"center"},children:f.map((d,L)=>Dr.jsx("button",{onClick:()=>{I(d),Ce.current?.focus();},onMouseEnter:()=>te(L),onMouseLeave:()=>te(null),style:{fontSize:12,padding:"5px 12px",borderRadius:9999,color:N===L?"#1f2937":"#6b7280",backgroundColor:N===L?"#f9fafb":"transparent",border:N===L?"1px solid #d1d5db":"1px solid #e5e7eb",cursor:"pointer",transition:"color 0.15s, background-color 0.15s, border-color 0.15s",fontFamily:"inherit"},children:d},d))})]}),$.length>0&&Dr.jsx("div",{style:{padding:"16px 16px 0 16px"},children:$.map((d,L)=>Dr.jsx("div",{style:{marginBottom:L<$.length-1?10:0},children:d.type==="user"?Dr.jsxs("div",{style:{display:"flex",alignItems:"flex-start",gap:8,flexDirection:"row-reverse"},children:[Dr.jsx("div",{style:{width:22,height:22,borderRadius:"50%",backgroundColor:"#e5e7eb",display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0,marginTop:2},children:Dr.jsx(lucideReact.User,{style:{width:13,height:13,color:"#6b7280"}})}),Dr.jsx("div",{style:{backgroundColor:"#f3f4f6",borderRadius:"12px 4px 12px 12px",padding:"8px 12px",fontSize:13,color:"#374151",lineHeight:1.5,maxWidth:"75%"},children:d.text})]}):Dr.jsxs("div",{style:{display:"flex",alignItems:"flex-start",gap:8},children:[Dr.jsx("div",{style:{width:22,height:22,borderRadius:"50%",backgroundColor:"#f0fdf4",display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0,marginTop:2},children:Dr.jsx(lucideReact.Check,{style:{width:13,height:13,color:"#9ca3af"}})}),Dr.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:[Dr.jsx("span",{style:{flex:1},children:d.text}),c&&L===$.length-1&&e!=="running"&&Dr.jsxs("button",{onClick:O=>{O.stopPropagation(),Or();},onMouseEnter:()=>_e(L),onMouseLeave:()=>_e(null),disabled:K,style:{position:"relative",padding:2,borderRadius:4,border:"none",background:ke===L?"rgba(0,0,0,0.06)":"transparent",color:ke===L?"#6b7280":"#d1d5db",cursor:K?"default":"pointer",display:"flex",alignItems:"center",justifyContent:"center",transition:"color 0.15s, background 0.15s",opacity:K?.4:1,flexShrink:0},children:[Dr.jsx(lucideReact.Undo2,{style:{width:12,height:12}}),ke===L&&Dr.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"&&Dr.jsx("div",{style:{padding:16},children:Dr.jsxs("div",{onClick:()=>ie(!J),style:{backgroundColor:"#1a1a2e",borderRadius:12,overflow:"hidden",cursor:"pointer",transition:"all 0.3s cubic-bezier(0.22, 1, 0.36, 1)"},children:[Dr.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"10px 14px"},children:[Dr.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,minWidth:0},children:[Dr.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:Dr.jsx("path",{d:"M21 12a9 9 0 1 1-6.219-8.56"})}),Dr.jsx(Dn,{events:r})]}),Dr.jsx("div",{style:{color:"#6b7280",flexShrink:0,marginLeft:8,transition:"transform 0.2s ease",transform:J?"rotate(180deg)":"rotate(0deg)"},children:Dr.jsx(lucideReact.ChevronDown,{style:{width:14,height:14}})})]}),Dr.jsx("div",{style:{maxHeight:J?320:0,opacity:J?1:0,transition:"max-height 0.35s cubic-bezier(0.22, 1, 0.36, 1), opacity 0.25s ease",overflow:"hidden"},children:Dr.jsx("div",{style:{borderTop:"1px solid rgba(255,255,255,0.08)",maxHeight:320,overflowY:"auto"},children:Dr.jsx(fr,{events:r})})})]})}),e==="error"&&Dr.jsxs("div",{style:{padding:"20px 16px",textAlign:"center"},children:[Dr.jsx("div",{style:{width:36,height:36,backgroundColor:"#fef2f2",borderRadius:"50%",display:"flex",alignItems:"center",justifyContent:"center",margin:"0 auto 10px auto"},children:Dr.jsx(lucideReact.X,{style:{width:18,height:18,color:"#ef4444"}})}),Dr.jsx("p",{style:{fontSize:12,color:"#6b7280",marginBottom:10,maxWidth:260,margin:"0 auto 10px auto"},children:n}),Dr.jsxs("button",{onClick:()=>{let d=t?.prompt||ot.current;d&&g(d,oe);},onMouseEnter:()=>Z(true),onMouseLeave:()=>Z(false),style:{display:"inline-flex",alignItems:"center",gap:6,padding:"6px 12px",borderRadius:8,fontSize:12,fontWeight:500,color:"#4f46e5",backgroundColor:j?"#e0e7ff":"#eef2ff",border:"none",cursor:"pointer",transition:"background-color 0.15s",fontFamily:"inherit"},children:[Dr.jsx(lucideReact.RotateCcw,{style:{width:12,height:12}})," Try Again"]})]})]}),e!=="running"&&Dr.jsx("div",{style:{padding:"8px 12px 12px 12px",borderTop:"1px solid rgba(229, 231, 235, 0.6)",flexShrink:0},children:Dr.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:[Dr.jsx("textarea",{ref:Ce,value:w,onChange:d=>{I(d.target.value),d.target.style.height="auto",d.target.style.height=Math.min(d.target.scrollHeight,160)+"px";},onKeyDown:d=>{d.key==="Enter"&&!d.shiftKey&&(d.preventDefault(),Nt()),d.key==="Escape"&&!C&&it();},placeholder:$.length>0?"Ask for another change...":`Describe your ideal ${Ue.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"}}),Dr.jsx("button",{onClick:Nt,disabled:!w.trim(),onMouseEnter:()=>H(true),onMouseLeave:()=>H(false),style:{width:26,height:26,borderRadius:"50%",display:"flex",alignItems:"center",justifyContent:"center",color:"#ffffff",opacity:w.trim()?1:.25,transform:Y&&w.trim()?"scale(1.1)":"scale(1)",background:w.trim()?"#1c4587":"rgba(0,0,0,0.12)",border:"none",cursor:w.trim()?"pointer":"default",flexShrink:0,transition:"transform 0.15s, opacity 0.15s",padding:0},children:Dr.jsx(lucideReact.ArrowUp,{style:{width:13,height:13}})})]})})]})]});return C?at:ne&&ge?Nr.createPortal(at,ge.document.body):Dr.jsx(jn,{children:at})}function br(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 Ft(e){let{apiKey:t,userId:r,userHash:n,baseUrl:o,appId:i,previewSession:s,refreshModuleManifest:a,queueBoundaryAnimation:f}=V(),[g,c]=kt.useState("idle"),[x,T]=kt.useState(null),[F,v]=kt.useState([]),[y,k]=kt.useState(null),C=kt.useRef(null),w=kt.useCallback(()=>{c("prompting"),v([]),k(null),T(null);},[]),I=kt.useCallback(()=>{c("idle"),C.current&&(C.current.close(),C.current=null);},[]);kt.useEffect(()=>{s&&s.target.kind==="module"&&s.target.id===e&&c(R=>R==="idle"?"prompting":R);},[s?.preview_session_id,s?.target.id,e]);let $=kt.useCallback(async(R,h)=>{try{if(!i)throw new Error("ForkProvider requires appId for module boundary prompts.");c("running"),v([]),k(null);let l;if(s){let u=await fetch(`${o}/api/v1/preview/${encodeURIComponent(s.preview_session_id)}/author`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`,...X()},body:JSON.stringify({prompt:R,...s.fork_id?{fork_id:s.fork_id}:{}})});if(!u.ok){let M=await u.json().catch(()=>({}));throw new Error(M.error||`API error: ${u.status}`)}let p=await u.json();we(p.fork_id),l=await(await fetch(`${o}/api/v1/forks/${p.fork_id}`,{headers:{Authorization:`Bearer ${t}`,...X()}})).json();}else {let u={userId:r,prompt:R,boundaryId:e,appId:i};h&&(u.containerId=h),n&&(u.userHash=n);let p=await fetch(`${o}/api/v1/forks`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:JSON.stringify(u)});if(!p.ok){let m=await p.json().catch(()=>({}));throw new Error(m.error||`API error: ${p.status}`)}l=await p.json();}T(l);let E=new URLSearchParams({key:t});n&&(E.set("userId",r),E.set("userHash",n));let S=new EventSource(`${o}/api/v1/forks/${l.id}/events?${E.toString()}`);C.current=S,S.onmessage=u=>{try{let p=JSON.parse(u.data);if(v(m=>[...m,p]),p.type==="complete"){let m=p.data;f(e,l.id),a().catch(()=>{}).finally(()=>{let M={...l,status:"complete",moduleUrl:m.moduleUrl,cssUrls:m.cssUrls,summary:m.summary,completedAt:new Date().toISOString()};T(M),c("complete"),S.close();});}else if(p.type==="error"){let m=p.data;k(m.error||"Unknown error"),c("error"),S.close();}}catch{}},S.onerror=()=>{fetch(`${o}/api/v1/forks/${l.id}`,{headers:{Authorization:`Bearer ${t}`}}).then(u=>u.json()).then(u=>{T(u),u.status==="complete"?(f(e,u.id),a().catch(()=>{}),c("complete")):u.status==="error"&&(k(u.error||"Fork generation failed"),c("error"));}).catch(()=>{k("Connection lost"),c("error");}),S.close();};}catch(l){k(l.message),c("error");}},[t,i,o,e,s,f,a,n,r]),A=kt.useCallback(async()=>{try{if(!i)throw new Error("ForkProvider requires appId for boundary undo.");let R={userId:r,boundaryId:e,appId:i};n&&(R.userHash=n);let h=await fetch(`${o}/api/v1/forks/undo`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:JSON.stringify(R)});if(!h.ok){let E=await h.json().catch(()=>({}));throw new Error(E.error||`API error: ${h.status}`)}let l=await h.json();return await a().catch(()=>{}),l.removed?(T(null),c("prompting")):l.fork&&(T(l.fork),c("complete")),l}catch(R){throw k(R.message),R}},[t,i,o,e,a,n,r]);return {state:g,fork:x,events:F,error:y,open:w,close:I,startFork:$,undoFork:A}}function wr(e){let{state:t,fork:r,events:n,error:o,open:i,close:s,startFork:a,undoFork:f}=Ft(e);return {state:t,fork:r,events:n,error:o,isOpen:t!=="idle",open:i,close:s,submit:a,undo:f}}function Rt(){let{apiKey:e,userId:t,userHash:r,baseUrl:n,previewSession:o,setSlotFork:i,clearSlotFork:s,skipAnimationForSlot:a}=V(),[f,g]=kt.useState("idle"),[c,x]=kt.useState(null),[T,F]=kt.useState([]),[v,y]=kt.useState(null),k=kt.useRef(null),C=kt.useCallback(()=>{g("prompting"),F([]),y(null),x(null);},[]),w=kt.useCallback(()=>{g("idle"),k.current&&(k.current.close(),k.current=null);},[]);kt.useEffect(()=>{o&&o.target.kind==="slot"&&g(A=>A==="idle"?"prompting":A);},[o?.preview_session_id,o?.target.kind]);let I=kt.useCallback(async(A,R,h)=>{try{g("running"),F([]),y(null);let l;if(o){let u=await fetch(`${n}/api/v1/preview/${encodeURIComponent(o.preview_session_id)}/author`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`,...X()},body:JSON.stringify({prompt:A,...o.fork_id?{fork_id:o.fork_id}:{}})});if(!u.ok){let M=await u.json().catch(()=>({}));throw new Error(M.error||`API error: ${u.status}`)}let p=await u.json();we(p.fork_id),l=await(await fetch(`${n}/api/v1/forks/${p.fork_id}`,{headers:{Authorization:`Bearer ${e}`,...X()}})).json();}else {let u={userId:t,prompt:A};R&&(u.slotId=R),h&&(u.containerId=h),r&&(u.userHash=r);let p=await fetch(`${n}/api/v1/forks`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`},body:JSON.stringify(u)});if(!p.ok){let m=await p.json().catch(()=>({}));throw new Error(m.error||`API error: ${p.status}`)}l=await p.json();}x(l);let E=new URLSearchParams({key:e});r&&(E.set("userId",t),E.set("userHash",r));let S=new EventSource(`${n}/api/v1/forks/${l.id}/events?${E.toString()}`);k.current=S,S.onmessage=u=>{try{let p=JSON.parse(u.data);if(F(m=>[...m,p]),p.type==="complete"){let m=p.data,M={...l,status:"complete",bundleUrl:m.bundleUrl,summary:m.summary,completedAt:new Date().toISOString()};x(M),g("complete"),R&&m.bundleUrl&&i(R,M),S.close();}else if(p.type==="error"){let m=p.data;y(m.error||"Unknown error"),g("error"),S.close();}}catch{}},S.onerror=()=>{fetch(`${n}/api/v1/forks/${l.id}`,{headers:{Authorization:`Bearer ${e}`}}).then(u=>u.json()).then(u=>{x(u),u.status==="complete"?(g("complete"),R&&u.bundleUrl&&i(R,u)):u.status==="error"&&(y(u.error||"Fork generation failed"),g("error"));}).catch(()=>{y("Connection lost"),g("error");}),S.close();};}catch(l){y(l.message),g("error");}},[e,t,r,n,o,i]),$=kt.useCallback(async A=>{try{let R={userId:t,slotId:A};r&&(R.userHash=r);let h=await fetch(`${n}/api/v1/forks/undo`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`},body:JSON.stringify(R)});if(!h.ok){let E=await h.json().catch(()=>({}));throw new Error(E.error||`API error: ${h.status}`)}let l=await h.json();return a(A),l.removed?(s(A),x(null),g("prompting")):l.fork&&(i(A,l.fork),x(l.fork)),l}catch(R){throw y(R.message),R}},[e,t,r,n,s,i]);return {state:f,fork:c,events:T,error:v,open:C,close:w,startFork:I,undoFork:$}}function vr(){let{state:e,fork:t,events:r,error:n,open:o,close:i,startFork:s,undoFork:a}=Rt();return {state:e,fork:t,events:r,error:n,isOpen:e!=="idle",open:o,close:i,submit:s,undo:a}}function Et(e){let t=br(e),r=vr(),n=wr(t.type==="boundary"?t.id:""),{baseUrl:o,apiKey:i,userId:s,userHash:a,appId:f}=V(),g=t.type==="slot"?r:n,c=t.type==="slot"?"slot":"boundary",x=t.id,T=t.title,F=kt.useCallback((y,k,C)=>t.type==="slot"?r.submit(y,k??t.id,C):n.submit(y,C),[n,r,t]),v=kt.useCallback(y=>t.type==="slot"?r.undo(y??t.id):n.undo(),[n,r,t]);return {...g,target:t,targetId:x,targetLabel:T,historyMode:c,submit:F,undo:v,buttonProps:{onClick:g.open},panelProps:{state:g.state,fork:g.fork,events:g.events,error:g.error,...t.type==="slot"?{slotId:x,targetLabel:T,historyMode:c}:{targetId:x,targetLabel:T,historyMode:c},onSubmit:F,onUndo:v,onClose:g.close,baseUrl:o,apiKey:i,userId:s,userHash:a,appId:f}}}function Ee(e){let{examplePrompts:t,embedded:r}=e,n=Et(e);return r?Dr.jsx(Je,{...n.panelProps,examplePrompts:t,embedded:true}):n.isOpen?Dr.jsx(Je,{...n.panelProps,examplePrompts:t}):Dr.jsx(vt,{...n.buttonProps})}function qn({boundaryId:e,title:t,examplePrompts:r}){return Dr.jsx(Ee,{boundaryId:e,title:t,examplePrompts:r})}function _t(e){let t=Array.from(e.children).filter(n=>n instanceof HTMLElement);return t.length===1?t[0]:getComputedStyle(e).display==="contents"?null:e}function xr(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 n=getComputedStyle(e).backgroundColor;r.style.backgroundColor=n&&n!=="rgba(0, 0, 0, 0)"&&n!=="transparent"?n:getComputedStyle(document.body).backgroundColor||"#ffffff",document.body.appendChild(r);let o=e.querySelectorAll("*"),i=r.querySelectorAll("*");for(let s=0;s<o.length;s+=1)o[s].scrollTop!==0&&(i[s].scrollTop=o[s].scrollTop),o[s].scrollLeft!==0&&(i[s].scrollLeft=o[s].scrollLeft);return r}function At(e){let t=[],r=e.querySelectorAll("*");for(let n of r){if(!(n instanceof HTMLElement))continue;let o=n.getBoundingClientRect();if(o.width<10||o.height<10||["SCRIPT","STYLE","META","LINK"].includes(n.tagName))continue;let i=getComputedStyle(n),s=parseFloat(i.borderTopLeftRadius)||0;t.push({tag:n.tagName,className:n.className||"",text:(n.textContent||"").slice(0,50).trim(),rect:o,borderRadius:s});}return t}function Fr(e,t){let r=[];for(let n of t)if(!(e.find(s=>s.tag===n.tag&&s.className===n.className&&Math.abs(s.rect.top-n.rect.top)<20&&Math.abs(s.rect.left-n.rect.left)<20)||r.some(s=>n.rect.top>=s.rect.top&&n.rect.left>=s.rect.left&&n.rect.right<=s.rect.right&&n.rect.bottom<=s.rect.bottom))){for(let s=r.length-1;s>=0;s-=1){let a=r[s];a.rect.top>=n.rect.top&&a.rect.left>=n.rect.left&&a.rect.right<=n.rect.right&&a.rect.bottom<=n.rect.bottom&&r.splice(s,1);}r.push({rect:n.rect,borderRadius:n.borderRadius});}return r}function Rr(e,t){let r=[];for(let n of e)if(!(t.find(s=>s.tag===n.tag&&s.className===n.className&&Math.abs(s.rect.top-n.rect.top)<20&&Math.abs(s.rect.left-n.rect.left)<20)||r.some(s=>n.rect.top>=s.rect.top&&n.rect.left>=s.rect.left&&n.rect.right<=s.rect.right&&n.rect.bottom<=s.rect.bottom))){for(let s=r.length-1;s>=0;s-=1){let a=r[s];a.rect.top>=n.rect.top&&a.rect.left>=n.rect.left&&a.rect.right<=n.rect.right&&a.rect.bottom<=n.rect.bottom&&r.splice(s,1);}r.push({rect:n.rect,borderRadius:n.borderRadius});}return r}function Er(e,t,r,n,o){let i=Math.max(0,Math.min(o,r/2,n/2));return i===0?`M ${e} ${t} L ${e+r} ${t} L ${e+r} ${t+n} L ${e} ${t+n} Z`:[`M ${e+i} ${t}`,`L ${e+r-i} ${t}`,`A ${i} ${i} 0 0 1 ${e+r} ${t+i}`,`L ${e+r} ${t+n-i}`,`A ${i} ${i} 0 0 1 ${e+r-i} ${t+n}`,`L ${e+i} ${t+n}`,`A ${i} ${i} 0 0 1 ${e} ${t+n-i}`,`L ${e} ${t+i}`,`A ${i} ${i} 0 0 1 ${e+i} ${t}`,"Z"].join(" ")}function Pt(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 n=document.createElementNS(t,"svg");n.setAttribute("width","100%"),n.setAttribute("height","100%"),n.style.cssText="position:absolute;top:0;left:0;overflow:visible;";let o=document.createElementNS(t,"defs");n.appendChild(o);let i=[];for(let c=0;c<e.length;c+=1){let{rect:x,borderRadius:T}=e[c],F=x.left-.5,v=x.top-.5,y=x.width+1,k=x.height+1,C=Math.min(T+.5,y/2,k/2),w=Er(F,v,y,k,C),I=`__fork-glow-${c}`,$=document.createElementNS(t,"filter");$.setAttribute("id",I),$.setAttribute("x","-100%"),$.setAttribute("y","-100%"),$.setAttribute("width","300%"),$.setAttribute("height","300%");let A=document.createElementNS(t,"feGaussianBlur");A.setAttribute("in","SourceGraphic"),A.setAttribute("stdDeviation","8"),$.appendChild(A),o.appendChild($);let R=`__fork-mask-${c}`,h=document.createElementNS(t,"mask");h.setAttribute("id",R),h.setAttribute("maskUnits","userSpaceOnUse"),h.setAttribute("x",String(F-200)),h.setAttribute("y",String(v-200)),h.setAttribute("width",String(y+400)),h.setAttribute("height",String(k+400));let l=document.createElementNS(t,"rect");l.setAttribute("x",String(F-200)),l.setAttribute("y",String(v-200)),l.setAttribute("width",String(y+400)),l.setAttribute("height",String(k+400)),l.setAttribute("fill","white"),h.appendChild(l);let E=document.createElementNS(t,"path");E.setAttribute("d",w),E.setAttribute("fill","black"),h.appendChild(E),o.appendChild(h);let S=document.createElementNS(t,"g");S.setAttribute("mask",`url(#${R})`),S.setAttribute("opacity","0");let u=document.createElementNS(t,"g");u.setAttribute("filter",`url(#${I})`);let p=document.createElementNS(t,"path");p.setAttribute("d",w),p.setAttribute("fill","none"),p.setAttribute("stroke","rgba(150, 185, 220, 0.6)"),p.setAttribute("stroke-width","6"),p.setAttribute("stroke-linecap","round"),u.appendChild(p),S.appendChild(u),n.appendChild(S);let m=document.createElementNS(t,"path");m.setAttribute("d",w),m.setAttribute("fill","none"),m.setAttribute("stroke","rgba(150, 185, 220, 0.35)"),m.setAttribute("stroke-width","2"),m.setAttribute("stroke-linecap","round"),m.setAttribute("opacity","0"),n.appendChild(m),i.push(p,m),p.__group=S;}r.appendChild(n),document.body.appendChild(r);let s=[];for(let c=0;c<i.length;c+=2){let x=i[c],T=i[c+1],F=x.__group;if(!F)continue;let v=T.getTotalLength(),y=x.getTotalLength();if(v<=0)continue;let k=v*.35;T.setAttribute("stroke-dasharray",`${k} ${v-k}`),T.setAttribute("stroke-dashoffset","0"),s.push(T.animate([{strokeDashoffset:0,opacity:0,offset:0},{strokeDashoffset:-0.2*v,opacity:.92,offset:.06},{strokeDashoffset:-2*v,opacity:.92,offset:.92},{strokeDashoffset:-2.25*v,opacity:0,offset:1}],{duration:14e3,easing:"ease-in-out",fill:"forwards"}));let C=y*.35;x.setAttribute("stroke-dasharray",`${C} ${y-C}`),x.setAttribute("stroke-dashoffset","0"),s.push(x.animate([{strokeDashoffset:0,offset:0},{strokeDashoffset:-0.2*y,offset:.06},{strokeDashoffset:-2*y,offset:.92},{strokeDashoffset:-2.25*y,offset:1}],{duration:14e3,easing:"ease-in-out",fill:"forwards"})),s.push(F.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,f=()=>{if(a)return;a=true,clearTimeout(g);for(let x of s)try{x.cancel();}catch{}let c=r.animate([{opacity:1},{opacity:0}],{duration:400,fill:"forwards"});c.onfinish=()=>r.remove(),window.removeEventListener("click",f);},g=setTimeout(f,14500);return setTimeout(()=>{a||window.addEventListener("click",f);},500),f}function $r(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 n=document.createElementNS(t,"svg");n.setAttribute("width","100%"),n.setAttribute("height","100%"),n.style.cssText="position:absolute;top:0;left:0;overflow:visible;";let o=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),o.appendChild(i),n.appendChild(o);for(let{rect:a,borderRadius:f}of e){let g=document.createElementNS(t,"path");g.setAttribute("d",Er(a.left,a.top,a.width,a.height,f)),g.setAttribute("fill","none"),g.setAttribute("stroke","rgba(120, 125, 135, 0.6)"),g.setAttribute("stroke-width","1.5"),g.setAttribute("stroke-dasharray","8 4"),g.setAttribute("stroke-linecap","round"),g.setAttribute("filter","url(#__fork-removed-shadow)"),g.setAttribute("opacity","0"),n.appendChild(g),g.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(n),document.body.appendChild(r),r}var tt=new Map,Ct=new Map;function Yn(e){return e instanceof Error?e:new Error(typeof e=="string"?e:"Unknown module override error")}function Ar(e,t){let r=(t?e[t]:void 0)??e.default;if(typeof r!="function"){let n=t||"default";throw new Error(`Fork boundary module is missing a React component export: ${n}`)}return r}function Zn(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 o=r.sheet?Promise.resolve():new Promise((i,s)=>{let a=()=>{r.removeEventListener("load",a),r.removeEventListener("error",f),i();},f=()=>{r.removeEventListener("load",a),r.removeEventListener("error",f),s(new Error(`Failed to load boundary stylesheet: ${e}`));};r.addEventListener("load",a,{once:true}),r.addEventListener("error",f,{once:true});});return tt.set(e,o),o}let n=new Promise((o,i)=>{let s=document.createElement("link");s.rel="stylesheet",s.href=e,s.setAttribute("data-fork-override-href",e),s.onload=()=>o(),s.onerror=()=>{s.remove(),i(new Error(`Failed to load boundary stylesheet: ${e}`));},document.head.appendChild(s);}).catch(o=>{throw tt.delete(e),o});return tt.set(e,n),n}function Qn(e){let t=Ct.get(e);if(t)return t;let r=import(e).catch(n=>{throw Ct.delete(e),n});return Ct.set(e,r),r}async function eo(e,t,r){if(e)try{await Promise.all(e.cssUrls.map(i=>Zn(i)));let o=await Qn(e.moduleUrl);return Ar(o,r)}catch(o){console.error(`[Fork] Failed to load override for boundary "${e.boundaryId}", falling back to original module.`,o);}let n=await t();return Ar(n,r)}function to(e){function t(r){let{appId:n,moduleOverridesEnabled:o,moduleManifestReady:i,moduleManifestVersion:s,registerBoundary:a,getBoundaryOverride:f,consumeBoundaryAnimation:g}=V(),[c,x]=kt.useState(null),[T,F]=kt.useState(null),v=kt.useRef(null),y=kt.useRef(null),k=kt.useRef(null),C=kt.useRef(false),w=kt.useRef(null),I=kt.useRef(null),$=f(e.id),A=$?`override:${$.id}`:"original",R=e.editorMetadata?JSON.stringify(e.editorMetadata):void 0;if(kt.useEffect(()=>()=>{I.current&&(clearTimeout(I.current),I.current=null),w.current&&(w.current.remove(),w.current=null);},[]),kt.useEffect(()=>{a({id:e.id,exportName:e.exportName,editorMetadata:e.editorMetadata});},[n,a,e.id,e.exportName,R]),kt.useEffect(()=>{if(o&&!i&&!c||y.current===A&&c)return;let h=false;return F(null),eo($,e.original,e.exportName).then(l=>{if(!h){if($?.id&&g(e.id,$.id)&&v.current){let E=_t(v.current);if(E){let S=At(E);S.length>0&&(k.current=S,C.current=true,I.current&&(clearTimeout(I.current),I.current=null),w.current&&w.current.remove(),w.current=xr(E));}}y.current=A,kt.startTransition(()=>{x(()=>l);});}}).catch(l=>{h||F(Yn(l));}),()=>{h=true;}},[g,A,o,i,s,$?.id,$?.moduleUrl,$?.integrity,$?.cssUrls.join("|"),e.exportName,e.original,c]),kt.useEffect(()=>{if(!C.current||!c||!v.current)return;let h=false;return requestAnimationFrame(()=>{requestAnimationFrame(()=>{if(h||!v.current)return;let l=k.current,E=_t(v.current);if(k.current=null,C.current=false,!l||!E){w.current&&(w.current.remove(),w.current=null);return}let S=At(E),u=Fr(l,S),p=Rr(l,S),m=w.current;if(p.length>0&&m){let M=$r(p);I.current=setTimeout(()=>{I.current=null;let z=400;m.animate([{opacity:1},{opacity:0}],{duration:z,fill:"forwards"}),M.animate([{opacity:1},{opacity:0}],{duration:z,fill:"forwards"}),setTimeout(()=>{m.remove(),M.remove(),w.current===m&&(w.current=null),u.length>0&&Pt(u);},z);},3500);}else m&&(m.remove(),w.current===m&&(w.current=null)),u.length>0&&Pt(u);});}),()=>{h=true;}},[c]),T)throw T;return c?Dr.jsx("div",{ref:v,style:{display:"contents"},children:Dr.jsx(c,{...r})}):Dr.jsx(Dr.Fragment,{children:e.loading??null})}return t.displayName=`ForkBoundary(${e.id})`,t}function no({slotId:e,title:t,slotLabel:r,examplePrompts:n}){return Dr.jsx(Ee,{slotId:e,title:t,slotLabel:r,examplePrompts:n})}
|
|
44
|
+
exports.ForkBoundaryUI=qn;exports.ForkButton=vt;exports.ForkChatInterface=Ee;exports.ForkPanel=Je;exports.ForkProvider=rn;exports.ForkSlot=hn;exports.ForkUI=no;exports.clearCachedManifest=Yr;exports.forkable=to;exports.loadManifest=je;exports.manifestDiffers=Zr;exports.readCachedManifest=Jr;exports.registerForkShared=ct;exports.useBoundaryFork=Ft;exports.useFork=Rt;exports.useForkChatPanel=Et;exports.usePreviewSession=De;exports.writeCachedManifest=Xr;
|
package/dist/index.d.cts
CHANGED
|
@@ -163,6 +163,10 @@ interface PreviewSessionPayload {
|
|
|
163
163
|
};
|
|
164
164
|
target_user_id: string;
|
|
165
165
|
operator_id: number;
|
|
166
|
+
container_id?: string | null;
|
|
167
|
+
/** Human-readable container label for preview UI. Older sessions may not
|
|
168
|
+
* have this; callers should fall back to target_user_id. */
|
|
169
|
+
container_name?: string | null;
|
|
166
170
|
/** Seeded from activate(); the SDK updates it when authoring creates a
|
|
167
171
|
* new fork. Null when the operator just landed and hasn't authored. */
|
|
168
172
|
fork_id: string | null;
|
|
@@ -307,4 +311,99 @@ declare function useForkChatPanel(options: ForkChatPanelOptions): {
|
|
|
307
311
|
close: () => void;
|
|
308
312
|
};
|
|
309
313
|
|
|
310
|
-
|
|
314
|
+
/**
|
|
315
|
+
* Containers v2 — SDK-side manifest client.
|
|
316
|
+
*
|
|
317
|
+
* Resolves every slot + module fork for an end-user in a single round trip
|
|
318
|
+
* (vs. the per-slot fan-out the legacy /api/v1/forks/active path does), and
|
|
319
|
+
* provides stale-while-revalidate caching against localStorage so repeat
|
|
320
|
+
* visits paint with zero network latency.
|
|
321
|
+
*
|
|
322
|
+
* ForkProvider uses this for the normal end-user runtime path and for
|
|
323
|
+
* container-bound previews. Legacy preview sessions without a container still
|
|
324
|
+
* use the preview-aware overlay endpoints.
|
|
325
|
+
*
|
|
326
|
+
* Usage sketch:
|
|
327
|
+
*
|
|
328
|
+
* const cached = readCachedManifest(tenantId, appId, userId);
|
|
329
|
+
* if (cached) renderFrom(cached); // instant first paint
|
|
330
|
+
* loadManifest({...}).then((fresh) => {
|
|
331
|
+
* if (etagDiffers(cached, fresh)) renderFrom(fresh);
|
|
332
|
+
* writeCachedManifest(tenantId, appId, userId, fresh);
|
|
333
|
+
* });
|
|
334
|
+
*
|
|
335
|
+
* See §14 of docs/containers-independent-plan.html for the budget this
|
|
336
|
+
* module is built to hit (p99 ≤ 50ms cold, ≤ 30ms warm; perceptual instant
|
|
337
|
+
* on repeat visits).
|
|
338
|
+
*/
|
|
339
|
+
interface ManifestEntry {
|
|
340
|
+
forkId: string;
|
|
341
|
+
/** Immutable, build-keyed URL — safe to cache forever in the browser. */
|
|
342
|
+
bundleUrl: string | null;
|
|
343
|
+
/** Pre-v2 bundle URL (mutable). Kept around so a partial-rollback SDK
|
|
344
|
+
* can still resolve forks that don't have a build_id yet. */
|
|
345
|
+
legacyBundleUrl: string | null;
|
|
346
|
+
buildId: string | null;
|
|
347
|
+
updatedAt: string;
|
|
348
|
+
}
|
|
349
|
+
interface ManifestModuleEntry {
|
|
350
|
+
forkId: string;
|
|
351
|
+
/** Immutable, build-keyed module URL when available. */
|
|
352
|
+
moduleUrl: string | null;
|
|
353
|
+
/** Pre-v2 module URL from module_overrides.module_url. */
|
|
354
|
+
legacyModuleUrl: string | null;
|
|
355
|
+
/** Back-compat aliases while API and SDK versions overlap. */
|
|
356
|
+
bundleUrl?: string | null;
|
|
357
|
+
legacyBundleUrl?: string | null;
|
|
358
|
+
cssUrls: string[];
|
|
359
|
+
integrity?: string;
|
|
360
|
+
metadata?: Record<string, unknown>;
|
|
361
|
+
buildId: string | null;
|
|
362
|
+
updatedAt: string;
|
|
363
|
+
}
|
|
364
|
+
interface Manifest {
|
|
365
|
+
containerId: string | null;
|
|
366
|
+
slots: Record<string, ManifestEntry>;
|
|
367
|
+
modules: Record<string, ManifestModuleEntry>;
|
|
368
|
+
generatedAt: string;
|
|
369
|
+
/** Server-supplied ETag (from response header). Used to short-circuit the
|
|
370
|
+
* background refresh when nothing's changed. */
|
|
371
|
+
etag?: string;
|
|
372
|
+
}
|
|
373
|
+
interface LoadManifestInput {
|
|
374
|
+
/** Base URL of the Fork API. Pass without trailing slash. */
|
|
375
|
+
baseUrl: string;
|
|
376
|
+
/** Publishable key (pk_fork_…) — passed as Bearer. */
|
|
377
|
+
apiKey: string;
|
|
378
|
+
appId: string;
|
|
379
|
+
/** Verified user id. The server requires either this or a userHash. */
|
|
380
|
+
userId: string;
|
|
381
|
+
/** Optional userHash for HMAC verification. */
|
|
382
|
+
userHash?: string;
|
|
383
|
+
/** Authorized explicit container lookup, used for container-bound previews. */
|
|
384
|
+
containerId?: string;
|
|
385
|
+
/** Additional trusted headers, e.g. preview session headers. */
|
|
386
|
+
extraHeaders?: Record<string, string>;
|
|
387
|
+
/** Previous manifest, if any — its etag is sent as If-None-Match. */
|
|
388
|
+
previous?: Manifest;
|
|
389
|
+
/** AbortSignal for cancellation. */
|
|
390
|
+
signal?: AbortSignal;
|
|
391
|
+
}
|
|
392
|
+
/**
|
|
393
|
+
* Fetch the manifest. Returns null when the server replies 304 Not Modified
|
|
394
|
+
* (caller keeps the previous manifest). Throws on network/HTTP errors.
|
|
395
|
+
*/
|
|
396
|
+
declare function loadManifest(input: LoadManifestInput): Promise<Manifest | null>;
|
|
397
|
+
/** Read a previously-cached manifest. Returns null if absent or corrupted. */
|
|
398
|
+
declare function readCachedManifest(tenantId: string, appId: string, userId: string): Manifest | null;
|
|
399
|
+
/** Write a manifest to the cache. Best-effort — quota errors are swallowed. */
|
|
400
|
+
declare function writeCachedManifest(tenantId: string, appId: string, userId: string, manifest: Manifest): void;
|
|
401
|
+
/** Clear the cached manifest for a (tenant, app, user). */
|
|
402
|
+
declare function clearCachedManifest(tenantId: string, appId: string, userId: string): void;
|
|
403
|
+
/**
|
|
404
|
+
* Compare the resolved fork ids + build ids of two manifests. Returns true
|
|
405
|
+
* when anything user-visible has changed (so the caller should hot-swap).
|
|
406
|
+
*/
|
|
407
|
+
declare function manifestDiffers(a: Manifest | null, b: Manifest | null): boolean;
|
|
408
|
+
|
|
409
|
+
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 LoadManifestInput, type Manifest, type ManifestEntry, type ManifestModuleEntry, type PreviewSessionPayload, clearCachedManifest, forkable, loadManifest, manifestDiffers, readCachedManifest, registerForkShared, useBoundaryFork, useFork, useForkChatPanel, usePreviewSession, writeCachedManifest };
|
package/dist/index.d.ts
CHANGED
|
@@ -163,6 +163,10 @@ interface PreviewSessionPayload {
|
|
|
163
163
|
};
|
|
164
164
|
target_user_id: string;
|
|
165
165
|
operator_id: number;
|
|
166
|
+
container_id?: string | null;
|
|
167
|
+
/** Human-readable container label for preview UI. Older sessions may not
|
|
168
|
+
* have this; callers should fall back to target_user_id. */
|
|
169
|
+
container_name?: string | null;
|
|
166
170
|
/** Seeded from activate(); the SDK updates it when authoring creates a
|
|
167
171
|
* new fork. Null when the operator just landed and hasn't authored. */
|
|
168
172
|
fork_id: string | null;
|
|
@@ -307,4 +311,99 @@ declare function useForkChatPanel(options: ForkChatPanelOptions): {
|
|
|
307
311
|
close: () => void;
|
|
308
312
|
};
|
|
309
313
|
|
|
310
|
-
|
|
314
|
+
/**
|
|
315
|
+
* Containers v2 — SDK-side manifest client.
|
|
316
|
+
*
|
|
317
|
+
* Resolves every slot + module fork for an end-user in a single round trip
|
|
318
|
+
* (vs. the per-slot fan-out the legacy /api/v1/forks/active path does), and
|
|
319
|
+
* provides stale-while-revalidate caching against localStorage so repeat
|
|
320
|
+
* visits paint with zero network latency.
|
|
321
|
+
*
|
|
322
|
+
* ForkProvider uses this for the normal end-user runtime path and for
|
|
323
|
+
* container-bound previews. Legacy preview sessions without a container still
|
|
324
|
+
* use the preview-aware overlay endpoints.
|
|
325
|
+
*
|
|
326
|
+
* Usage sketch:
|
|
327
|
+
*
|
|
328
|
+
* const cached = readCachedManifest(tenantId, appId, userId);
|
|
329
|
+
* if (cached) renderFrom(cached); // instant first paint
|
|
330
|
+
* loadManifest({...}).then((fresh) => {
|
|
331
|
+
* if (etagDiffers(cached, fresh)) renderFrom(fresh);
|
|
332
|
+
* writeCachedManifest(tenantId, appId, userId, fresh);
|
|
333
|
+
* });
|
|
334
|
+
*
|
|
335
|
+
* See §14 of docs/containers-independent-plan.html for the budget this
|
|
336
|
+
* module is built to hit (p99 ≤ 50ms cold, ≤ 30ms warm; perceptual instant
|
|
337
|
+
* on repeat visits).
|
|
338
|
+
*/
|
|
339
|
+
interface ManifestEntry {
|
|
340
|
+
forkId: string;
|
|
341
|
+
/** Immutable, build-keyed URL — safe to cache forever in the browser. */
|
|
342
|
+
bundleUrl: string | null;
|
|
343
|
+
/** Pre-v2 bundle URL (mutable). Kept around so a partial-rollback SDK
|
|
344
|
+
* can still resolve forks that don't have a build_id yet. */
|
|
345
|
+
legacyBundleUrl: string | null;
|
|
346
|
+
buildId: string | null;
|
|
347
|
+
updatedAt: string;
|
|
348
|
+
}
|
|
349
|
+
interface ManifestModuleEntry {
|
|
350
|
+
forkId: string;
|
|
351
|
+
/** Immutable, build-keyed module URL when available. */
|
|
352
|
+
moduleUrl: string | null;
|
|
353
|
+
/** Pre-v2 module URL from module_overrides.module_url. */
|
|
354
|
+
legacyModuleUrl: string | null;
|
|
355
|
+
/** Back-compat aliases while API and SDK versions overlap. */
|
|
356
|
+
bundleUrl?: string | null;
|
|
357
|
+
legacyBundleUrl?: string | null;
|
|
358
|
+
cssUrls: string[];
|
|
359
|
+
integrity?: string;
|
|
360
|
+
metadata?: Record<string, unknown>;
|
|
361
|
+
buildId: string | null;
|
|
362
|
+
updatedAt: string;
|
|
363
|
+
}
|
|
364
|
+
interface Manifest {
|
|
365
|
+
containerId: string | null;
|
|
366
|
+
slots: Record<string, ManifestEntry>;
|
|
367
|
+
modules: Record<string, ManifestModuleEntry>;
|
|
368
|
+
generatedAt: string;
|
|
369
|
+
/** Server-supplied ETag (from response header). Used to short-circuit the
|
|
370
|
+
* background refresh when nothing's changed. */
|
|
371
|
+
etag?: string;
|
|
372
|
+
}
|
|
373
|
+
interface LoadManifestInput {
|
|
374
|
+
/** Base URL of the Fork API. Pass without trailing slash. */
|
|
375
|
+
baseUrl: string;
|
|
376
|
+
/** Publishable key (pk_fork_…) — passed as Bearer. */
|
|
377
|
+
apiKey: string;
|
|
378
|
+
appId: string;
|
|
379
|
+
/** Verified user id. The server requires either this or a userHash. */
|
|
380
|
+
userId: string;
|
|
381
|
+
/** Optional userHash for HMAC verification. */
|
|
382
|
+
userHash?: string;
|
|
383
|
+
/** Authorized explicit container lookup, used for container-bound previews. */
|
|
384
|
+
containerId?: string;
|
|
385
|
+
/** Additional trusted headers, e.g. preview session headers. */
|
|
386
|
+
extraHeaders?: Record<string, string>;
|
|
387
|
+
/** Previous manifest, if any — its etag is sent as If-None-Match. */
|
|
388
|
+
previous?: Manifest;
|
|
389
|
+
/** AbortSignal for cancellation. */
|
|
390
|
+
signal?: AbortSignal;
|
|
391
|
+
}
|
|
392
|
+
/**
|
|
393
|
+
* Fetch the manifest. Returns null when the server replies 304 Not Modified
|
|
394
|
+
* (caller keeps the previous manifest). Throws on network/HTTP errors.
|
|
395
|
+
*/
|
|
396
|
+
declare function loadManifest(input: LoadManifestInput): Promise<Manifest | null>;
|
|
397
|
+
/** Read a previously-cached manifest. Returns null if absent or corrupted. */
|
|
398
|
+
declare function readCachedManifest(tenantId: string, appId: string, userId: string): Manifest | null;
|
|
399
|
+
/** Write a manifest to the cache. Best-effort — quota errors are swallowed. */
|
|
400
|
+
declare function writeCachedManifest(tenantId: string, appId: string, userId: string, manifest: Manifest): void;
|
|
401
|
+
/** Clear the cached manifest for a (tenant, app, user). */
|
|
402
|
+
declare function clearCachedManifest(tenantId: string, appId: string, userId: string): void;
|
|
403
|
+
/**
|
|
404
|
+
* Compare the resolved fork ids + build ids of two manifests. Returns true
|
|
405
|
+
* when anything user-visible has changed (so the caller should hot-swap).
|
|
406
|
+
*/
|
|
407
|
+
declare function manifestDiffers(a: Manifest | null, b: Manifest | null): boolean;
|
|
408
|
+
|
|
409
|
+
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 LoadManifestInput, type Manifest, type ManifestEntry, type ManifestModuleEntry, type PreviewSessionPayload, clearCachedManifest, forkable, loadManifest, manifestDiffers, readCachedManifest, registerForkShared, useBoundaryFork, useFork, useForkChatPanel, usePreviewSession, writeCachedManifest };
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
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
|
-
`+
|
|
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 kt from'react';import kt__default,{createContext,useSyncExternalStore,useState,useRef,useEffect,useCallback,startTransition,Children,useContext,isValidElement}from'react';import*as Nr from'react-dom';import {createPortal}from'react-dom';import*as Dr from'react/jsx-runtime';import {jsx,Fragment,jsxs}from'react/jsx-runtime';import*as jr from'react/jsx-dev-runtime';import {ChevronDown,Check,PictureInPicture,PictureInPicture2,X as X$1,User,Undo2,RotateCcw,ArrowUp,Loader2,AlertCircle,Sparkles,Package,Wrench,MessageSquare,Code,Terminal,FileSearch,Pencil}from'lucide-react';var ce="__FORK_SHARED__";function lt(){var t,r,n,o;let e=globalThis;return e[ce]||(e[ce]={}),(t=e[ce]).react||(t.react=kt),(r=e[ce])["react-dom"]||(r["react-dom"]=Nr),(n=e[ce])["react/jsx-runtime"]||(n["react/jsx-runtime"]=Dr),(o=e[ce])["react/jsx-dev-runtime"]||(o["react/jsx-dev-runtime"]=jr),e[ce]}function ct(e){return Object.assign(lt(),e)}var zr="__fork_preview_session__";function Ne(e){return `${zr}${e}`}var W={apiKey:null,session:null},ut=new Set;function dt(){for(let e of ut)try{e();}catch(t){console.error("[fork-preview] subscriber threw",t);}}function Dt(e){let t=Date.parse(e.expires_at);return Number.isFinite(t)?t<=Date.now():true}function Wr(e){if(typeof window>"u")return null;try{let t=window.sessionStorage.getItem(Ne(e));if(!t)return null;let r=JSON.parse(t);return !r||typeof r!="object"||typeof r.preview_session_id!="string"?null:Dt(r)?(window.sessionStorage.removeItem(Ne(e)),null):r}catch{return null}}function jt(e,t){if(!(typeof window>"u"))try{t?window.sessionStorage.setItem(Ne(e),JSON.stringify(t)):window.sessionStorage.removeItem(Ne(e));}catch{}}function be(e){W.apiKey!==e&&(W.apiKey=e,W.session=Wr(e),dt());}function ue(){return W.session?Dt(W.session)?(ft(null),null):W.session:null}function ft(e){W.session=e,W.apiKey&&jt(W.apiKey,e),dt();}function we(e){W.session&&W.session.fork_id!==e&&(W.session={...W.session,fork_id:e},W.apiKey&&jt(W.apiKey,W.session),dt());}function pt(e){return ut.add(e),()=>{ut.delete(e);}}var zt="__fork_preview";function Wt(){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(zt);return typeof r=="string"&&r.length>0?r:null}function gt(e){if(typeof window>"u")return false;try{if(window.sessionStorage.getItem(`__fork_preview_session__${e}`))return !0}catch{}return Gt()!==null}function Kt(){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(zt);let r=t.toString(),n=r?`#${r}`:"";try{window.history.replaceState(null,"",window.location.pathname+window.location.search+n);}catch{}}var de=null;function Gt(){if(de)return de;let e=Wt();return e?(de=e,Kt(),de):null}async function mt(e,t){be(e);let r=ue();if(r)return de=null,r;let n=de??Wt();if(de=null,!n)return null;Kt();try{let o=await fetch(`${t}/api/v1/preview/activate`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`},body:JSON.stringify({token:n})});if(!o.ok){let a=await o.json().catch(()=>({}));return console.warn(`[fork-preview] activate failed (${o.status}): ${a.error??"unknown"}`),null}let i=await o.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,container_id:i.container_id??null,container_name:i.container_name??i.target_user_id,fork_id:i.fork_id??null,expires_at:i.expires_at};return ft(s),s}catch(o){return console.warn("[fork-preview] activate threw",o),null}}function Gr(){return ue()}function Vr(){return null}function De(){return useSyncExternalStore(pt,Gr,Vr)}function X(){let e=ue();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}async function je(e){let t=new URLSearchParams({app:e.appId,user:e.userId});e.containerId&&t.set("containerId",e.containerId);let r=`${e.baseUrl}/api/v1/manifest?${t.toString()}`,n={Authorization:`Bearer ${e.apiKey}`,"X-Fork-App-Id":e.appId,"X-Fork-User-Id":e.userId,...e.extraHeaders??{}};e.userHash&&(n["X-Fork-User-Hash"]=e.userHash),e.previous?.etag&&(n["If-None-Match"]=e.previous.etag);let o=await fetch(r,{headers:n,signal:e.signal});if(o.status===304)return null;if(!o.ok)throw new Error(`manifest ${o.status} ${o.statusText}`);let i=await o.json(),s={};for(let[a,f]of Object.entries(i.modules)){let g=f.moduleUrl??f.bundleUrl??null,c=f.legacyModuleUrl??f.legacyBundleUrl??null;s[a]={forkId:f.forkId,moduleUrl:g,legacyModuleUrl:c,bundleUrl:f.bundleUrl??g,legacyBundleUrl:f.legacyBundleUrl??c,cssUrls:f.cssUrls??[],integrity:f.integrity,metadata:f.metadata,buildId:f.buildId,updatedAt:f.updatedAt};}return {containerId:i.containerId,slots:i.slots,modules:s,generatedAt:i.generatedAt,etag:o.headers.get("ETag")??void 0}}var qr="fork:manifest:v1";function ht(e,t,r){return `${qr}:${e}:${t}:${r}`}function Jr(e,t,r){if(typeof window>"u")return null;try{let n=window.localStorage.getItem(ht(e,t,r));return n?JSON.parse(n):null}catch{return null}}function Xr(e,t,r,n){if(!(typeof window>"u"))try{window.localStorage.setItem(ht(e,t,r),JSON.stringify(n));}catch{}}function Yr(e,t,r){if(!(typeof window>"u"))try{window.localStorage.removeItem(ht(e,t,r));}catch{}}function Zr(e,t){if(!e||!t)return e!==t;if(e.containerId!==t.containerId)return true;let r=Object.entries(e.slots),n=Object.entries(t.slots);if(r.length!==n.length)return true;for(let[s,a]of r){let f=t.slots[s];if(!f||f.forkId!==a.forkId||f.buildId!==a.buildId)return true}let o=Object.entries(e.modules),i=Object.entries(t.modules);if(o.length!==i.length)return true;for(let[s,a]of o){let f=t.modules[s];if(!f||f.forkId!==a.forkId||f.buildId!==a.buildId)return true}return false}var Jt=createContext(null);function Se(e,t){if(!t)return t;try{return new URL(t,`${e.replace(/\/+$/,"")}/`).toString()}catch{return t}}function tn(e,t){let r={};for(let[n,o]of Object.entries(t.boundaries||{}))r[n]={...o,moduleUrl:Se(e,o.moduleUrl),cssUrls:Array.isArray(o.cssUrls)?o.cssUrls.map(i=>Se(e,i)):[]};return r}function Vt(e,t,r,n){let o={};for(let[i,s]of Object.entries(t.slots)){let a=s.bundleUrl??s.legacyBundleUrl;a&&(o[i]={id:s.forkId,userId:r,prompt:"",status:"complete",slotId:i,appId:n,bundleUrl:Se(e,a),createdAt:s.updatedAt,completedAt:s.updatedAt});}return o}function qt(e,t){let r={};for(let[n,o]of Object.entries(t.modules)){let i=o.moduleUrl??o.legacyModuleUrl??o.bundleUrl??"";i&&(r[n]={id:o.forkId,boundaryId:n,moduleUrl:Se(e,i),cssUrls:(o.cssUrls??[]).map(s=>Se(e,s)),integrity:o.integrity,metadata:o.metadata,createdAt:o.updatedAt});}return r}function rn(e){let{apiKey:t,baseUrl:r,children:n,appId:o,shared:i}=e,s="userId"in e?e.userId:void 0,a="authUrl"in e?e.authUrl:void 0,[f]=useState(()=>(be(t),gt(t))),[g,c]=useState({}),[x,T]=useState(s?{userId:s,userHash:void 0}:null),[F,v]=useState(!!s||f),[y,k]=useState({}),[C,w]=useState(!o),[I,$]=useState(0),[A,R]=useState(null),h=useRef(new Map),l=useRef(new Map),[E,S]=useState(0),u=useRef(new Set),p=useRef(new Map),m=useRef(void 0);lt(),useEffect(()=>{return mt(t,r).then(()=>{}),()=>{}},[]);let M=De();i&&m.current!==i&&(ct(i),m.current=i),useEffect(()=>{a&&(f||(v(false),fetch(a,{credentials:"include"}).then(_=>{if(!_.ok)throw new Error(`Auth endpoint returned ${_.status}`);return _.json()}).then(_=>{if(!_.userId||typeof _.userId!="string")throw new Error("authUrl response must include userId");T({userId:_.userId,userHash:_.userHash});}).catch(_=>{console.error("[ForkProvider] Failed to fetch user identity from authUrl:",_.message);}).finally(()=>{v(true);})));},[a,f]),useEffect(()=>{!a&&s&&(T({userId:s,userHash:void 0}),v(true));},[s,a]);let z=x?.userId??"",Y=x?.userHash,H=M?M.target_user_id:z,j=M?void 0:Y,Z=!!o,N=useCallback(async()=>{if(!Z){R(null),k({}),w(true),$(b=>b+1);return}if(!F){w(false);return}if(!H||!o){R(null),k({}),w(true),$(b=>b+1);return}if(w(false),!M){try{let b=await je({baseUrl:r,apiKey:t,appId:o,userId:H,userHash:j});b&&(R(b.containerId),c(Vt(r,b,H,o)),k(qt(r,b)));}catch(b){console.error("[ForkProvider] Failed to fetch fork manifest:",b.message),R(null),c({}),k({});}finally{$(b=>b+1),w(true);}return}if(R(M.container_id??null),M.container_id){try{let b=await je({baseUrl:r,apiKey:t,appId:o,userId:H,containerId:M.container_id,extraHeaders:X()});b&&(c(Vt(r,b,H,o)),k(qt(r,b)));}catch(b){console.error("[ForkProvider] Failed to fetch preview container manifest:",b.message),c({}),k({});}finally{$(b=>b+1),w(true);}return}let _=new URLSearchParams({appId:o,userId:H});j&&_.set("userHash",j);try{let b=await fetch(`${r}/api/v1/boundaries/manifest?${_.toString()}`,{headers:{Authorization:`Bearer ${t}`,...X()}});if(!b.ok)throw new Error(`${b.status}`);let U=await b.json();k(tn(r,U));}catch(b){console.error("[ForkProvider] Failed to fetch module override manifest:",b.message),k({});}finally{$(b=>b+1),w(true);}},[t,o,r,F,Z,j,H,M?.preview_session_id,M?.fork_id,M?.container_id]);useEffect(()=>{if(!H||o&&(!M||M.container_id))return;let _=new URLSearchParams({userId:H});j&&_.set("userHash",j),fetch(`${r}/api/v1/forks/active?${_.toString()}`,{headers:{Authorization:`Bearer ${t}`,...X()}}).then(b=>{if(!b.ok)throw new Error(`${b.status}`);return b.json()}).then(b=>{b&&typeof b=="object"&&c(b);}).catch(()=>{});},[t,o,H,j,r,M?.preview_session_id,M?.fork_id]),useEffect(()=>{N();},[N]);let te=useCallback((_,b)=>{c(U=>({...U,[_]:b}));},[]),J=useCallback(_=>{c(b=>{let U={...b};return delete U[_],U});},[]),ie=useCallback(_=>{u.current.add(_);},[]),K=useCallback(_=>u.current.has(_)?(u.current.delete(_),true):false,[]),$e=useCallback((_,b)=>{p.current.set(_,b);},[]),ke=useCallback((_,b)=>p.current.get(_)!==b?false:(p.current.delete(_),true),[]),_e=useCallback(_=>{if(!o)return;let b=JSON.stringify(_);h.current.get(_.id)===b||l.current.get(_.id)?.signature===b||(l.current.set(_.id,{boundary:_,signature:b}),S(G=>G+1));},[o]);useEffect(()=>{if(!o||l.current.size===0)return;let _=setTimeout(()=>{let b=Array.from(l.current.values());b.length!==0&&fetch(`${r}/api/v1/boundaries`,{method:"POST",headers:{Authorization:`Bearer ${t}`,"Content-Type":"application/json"},body:JSON.stringify({appId:o,boundaries:b.map(U=>U.boundary)})}).then(U=>{if(!U.ok)throw new Error(`${U.status}`)}).then(()=>{for(let U of b)l.current.get(U.boundary.id)?.signature===U.signature&&(l.current.delete(U.boundary.id),h.current.set(U.boundary.id,U.signature));}).catch(U=>{console.error("[ForkProvider] Failed to register module boundaries:",U.message);});},50);return ()=>{clearTimeout(_);}},[t,o,r,E]);let rt=useCallback(_=>y[_],[y]),Ae=useCallback(async()=>{if(!H)throw new Error("Reset requires a resolved user identity.");let _=new URLSearchParams({userId:H});j&&_.set("userHash",j);let b=await fetch(`${r}/api/v1/forks/all?${_.toString()}`,{method:"DELETE",headers:{Authorization:`Bearer ${t}`,...X()}});if(!b.ok){let G=await b.json().catch(()=>({}));throw new Error(G.error||`API error: ${b.status}`)}let U=await b.json().catch(()=>({}));c({}),k({}),w(true),$(G=>G+1),u.current.clear(),p.current.clear();try{for(let G=sessionStorage.length-1;G>=0;G-=1){let re=sessionStorage.key(G);re&&re.startsWith("__fork_animated_")&&sessionStorage.removeItem(re);}}catch{}return U},[t,r,j,H]);return jsx(Jt.Provider,{value:{apiKey:t,userId:H,userHash:j,baseUrl:r,appId:o,forks:g,moduleOverridesEnabled:Z,moduleManifestReady:C,moduleManifestVersion:I,currentContainerId:A,previewSession:M,setSlotFork:te,clearSlotFork:J,skipAnimationForSlot:ie,shouldSkipAnimation:K,queueBoundaryAnimation:$e,consumeBoundaryAnimation:ke,registerBoundary:_e,getBoundaryOverride:rt,refreshModuleManifest:N,resetAllForks:Ae},children:n})}function V(){let e=useContext(Jt);if(!e)throw new Error("useForkContext must be used within <ForkProvider>");return e}function ze(e){return V().forks[e]}var xe=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 n=this.values.get(t);if(Object.is(n,r))return;if(n!==void 0&&r!==null&&n!==null&&typeof n=="object"&&typeof r=="object")try{if(JSON.stringify(n)===JSON.stringify(r))return}catch{}this.values.set(t,r),this.snapshots.set(t,r);let o=this.listeners.get(t);o&&o.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(n=>this.subscribe(t,n),()=>this.getSnapshot(t)):(console.warn("[ForkBridge] React.useSyncExternalStore not available, returning static value"),this.values.get(t))}emit(t,...r){let n=this.eventHandlers.get(t);n&&n.forEach(o=>o(...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 bt(e,t){let r;try{r=Children.only(e);}catch{let o=Children.count(e);throw new Error(`<ForkSlot slotId="${t}"> must wrap exactly one React component, got ${o} children. Wrap your slot's contents in a single named component, e.g. <ForkSlot slotId="${t}"><MyShell ...props /></ForkSlot>.`)}let n=r.type;if(typeof n=="string")throw new Error(`<ForkSlot slotId="${t}"> child must be a React component (function or class), not an HTML element <${n}>. Wrap your slot's contents in a single named component, e.g. <ForkSlot slotId="${t}"><MyShell ...props /></ForkSlot>.`);if(typeof n=="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 Yt=new Set;function Zt(e){let t=[],r=e.querySelectorAll("*");for(let n of r){if(!(n instanceof HTMLElement))continue;let o=n.getBoundingClientRect();if(o.width<10||o.height<10||["SCRIPT","STYLE","META","LINK"].includes(n.tagName))continue;let i=getComputedStyle(n),s=parseFloat(i.borderTopLeftRadius)||0;t.push({tag:n.tagName,className:n.className||"",text:(n.textContent||"").slice(0,50).trim(),rect:o,borderRadius:s});}return t}function ln(e,t){let r=[];for(let n of t)if(!e.find(i=>i.tag===n.tag&&i.className===n.className&&Math.abs(i.rect.top-n.rect.top)<20&&Math.abs(i.rect.left-n.rect.left)<20)&&!r.some(s=>n.rect.top>=s.rect.top&&n.rect.left>=s.rect.left&&n.rect.right<=s.rect.right&&n.rect.bottom<=s.rect.bottom)){for(let s=r.length-1;s>=0;s--){let a=r[s];a.rect.top>=n.rect.top&&a.rect.left>=n.rect.left&&a.rect.right<=n.rect.right&&a.rect.bottom<=n.rect.bottom&&r.splice(s,1);}r.push({rect:n.rect,borderRadius:n.borderRadius});}return r}function cn(e,t){let r=[];for(let n of e)if(!t.find(i=>i.tag===n.tag&&i.className===n.className&&Math.abs(i.rect.top-n.rect.top)<20&&Math.abs(i.rect.left-n.rect.left)<20)&&!r.some(s=>n.rect.top>=s.rect.top&&n.rect.left>=s.rect.left&&n.rect.right<=s.rect.right&&n.rect.bottom<=s.rect.bottom)){for(let s=r.length-1;s>=0;s--){let a=r[s];a.rect.top>=n.rect.top&&a.rect.left>=n.rect.left&&a.rect.right<=n.rect.right&&a.rect.bottom<=n.rect.bottom&&r.splice(s,1);}r.push({rect:n.rect,borderRadius:n.borderRadius});}return r}function er(e,t,r,n,o){return o=Math.max(0,Math.min(o,r/2,n/2)),o===0?`M ${e} ${t} L ${e+r} ${t} L ${e+r} ${t+n} L ${e} ${t+n} Z`:[`M ${e+o} ${t}`,`L ${e+r-o} ${t}`,`A ${o} ${o} 0 0 1 ${e+r} ${t+o}`,`L ${e+r} ${t+n-o}`,`A ${o} ${o} 0 0 1 ${e+r-o} ${t+n}`,`L ${e+o} ${t+n}`,`A ${o} ${o} 0 0 1 ${e} ${t+n-o}`,`L ${e} ${t+o}`,`A ${o} ${o} 0 0 1 ${e+o} ${t}`,"Z"].join(" ")}function Qt(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 n=document.createElementNS(t,"svg");n.setAttribute("width","100%"),n.setAttribute("height","100%"),n.style.cssText="position:absolute;top:0;left:0;overflow:visible;";let o=document.createElementNS(t,"defs");n.appendChild(o);let i=[];for(let c=0;c<e.length;c++){let{rect:x,borderRadius:T}=e[c],F=x.left-.5,v=x.top-.5,y=x.width+1,k=x.height+1,C=Math.min(T+.5,y/2,k/2),w=er(F,v,y,k,C),I=`__fork-glow-${c}`,$=document.createElementNS(t,"filter");$.setAttribute("id",I),$.setAttribute("x","-100%"),$.setAttribute("y","-100%"),$.setAttribute("width","300%"),$.setAttribute("height","300%");let A=document.createElementNS(t,"feGaussianBlur");A.setAttribute("in","SourceGraphic"),A.setAttribute("stdDeviation","8"),$.appendChild(A),o.appendChild($);let R=`__fork-mask-${c}`,h=document.createElementNS(t,"mask");h.setAttribute("id",R),h.setAttribute("maskUnits","userSpaceOnUse"),h.setAttribute("x",String(F-200)),h.setAttribute("y",String(v-200)),h.setAttribute("width",String(y+400)),h.setAttribute("height",String(k+400));let l=document.createElementNS(t,"rect");l.setAttribute("x",String(F-200)),l.setAttribute("y",String(v-200)),l.setAttribute("width",String(y+400)),l.setAttribute("height",String(k+400)),l.setAttribute("fill","white"),h.appendChild(l);let E=document.createElementNS(t,"path");E.setAttribute("d",w),E.setAttribute("fill","black"),h.appendChild(E),o.appendChild(h);let S=document.createElementNS(t,"g");S.setAttribute("mask",`url(#${R})`),S.setAttribute("opacity","0");let u=document.createElementNS(t,"g");u.setAttribute("filter",`url(#${I})`);let p=document.createElementNS(t,"path");p.setAttribute("d",w),p.setAttribute("fill","none"),p.setAttribute("stroke","rgba(150, 185, 220, 0.6)"),p.setAttribute("stroke-width","6"),p.setAttribute("stroke-linecap","round"),u.appendChild(p),S.appendChild(u),n.appendChild(S);let m=document.createElementNS(t,"path");m.setAttribute("d",w),m.setAttribute("fill","none"),m.setAttribute("stroke","rgba(150, 185, 220, 0.35)"),m.setAttribute("stroke-width","2"),m.setAttribute("stroke-linecap","round"),m.setAttribute("opacity","0"),n.appendChild(m),i.push(p,m),p.__group=S;}r.appendChild(n),document.body.appendChild(r);let s=[];for(let c=0;c<i.length;c+=2){let x=i[c],T=i[c+1],F=x.__group,v=T.getTotalLength(),y=x.getTotalLength();if(v<=0)continue;let k=v*.35;T.setAttribute("stroke-dasharray",`${k} ${v-k}`),T.setAttribute("stroke-dashoffset","0"),s.push(T.animate([{strokeDashoffset:0,opacity:0,offset:0},{strokeDashoffset:-0.2*v,opacity:.92,offset:.06},{strokeDashoffset:-2*v,opacity:.92,offset:.92},{strokeDashoffset:-2.25*v,opacity:0,offset:1}],{duration:14e3,easing:"ease-in-out",fill:"forwards"}));let C=y*.35;x.setAttribute("stroke-dasharray",`${C} ${y-C}`),x.setAttribute("stroke-dashoffset","0"),s.push(x.animate([{strokeDashoffset:0,offset:0},{strokeDashoffset:-0.2*y,offset:.06},{strokeDashoffset:-2*y,offset:.92},{strokeDashoffset:-2.25*y,offset:1}],{duration:14e3,easing:"ease-in-out",fill:"forwards"})),s.push(F.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,f=()=>{if(a)return;a=true,clearTimeout(g);for(let x of s)try{x.cancel();}catch{}let c=r.animate([{opacity:1},{opacity:0}],{duration:400,fill:"forwards"});c.onfinish=()=>r.remove(),window.removeEventListener("click",f);},g=setTimeout(f,14500);return setTimeout(()=>{a||window.addEventListener("click",f);},500),f}function un(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 n=document.createElementNS(t,"svg");n.setAttribute("width","100%"),n.setAttribute("height","100%"),n.style.cssText="position:absolute;top:0;left:0;overflow:visible;";let o=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),o.appendChild(i),n.appendChild(o);for(let{rect:a,borderRadius:f}of e){let g=a.left,c=a.top,x=a.width,T=a.height,F=Math.min(f,x/2,T/2),v=er(g,c,x,T,F),y=document.createElementNS(t,"path");y.setAttribute("d",v),y.setAttribute("fill","none"),y.setAttribute("stroke","rgba(120, 125, 135, 0.6)"),y.setAttribute("stroke-width","1.5"),y.setAttribute("stroke-dasharray","8 4"),y.setAttribute("stroke-linecap","round"),y.setAttribute("filter","url(#__fork-removed-shadow)"),y.setAttribute("opacity","0"),n.appendChild(y),y.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(n),document.body.appendChild(r),r}function dn(e,t){if(e===t)return true;let r=Object.keys(e);if(r.length!==Object.keys(t).length)return false;for(let n of r)if(!Object.is(e[n],t[n]))return false;return true}var fn=kt__default.memo(function({component:t,containerRef:r,wrapperStyle:n,hostProps:o}){return jsx("div",{ref:r,style:n,children:jsx(t,{...o})})},(e,t)=>e.component===t.component&&dn(e.hostProps,t.hostProps)),yt=class extends kt__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 tr({slotId:e,children:t,githubRepo:r,shared:n,events:o}){bt(t,e);let i=ze(e),{baseUrl:s,apiKey:a,appId:f,shouldSkipAnimation:g}=V(),[c,x]=useState(null),T=useRef(null),F=useRef(null),v=useRef(null),y=useRef(false),k=useRef(null),C=useRef(null),w=!!(n||o),I=useRef(null);w&&!I.current&&(I.current=new xe(e));let $=useRef(o);if($.current=o,useEffect(()=>{if(w)return ()=>{I.current?.destroy(),I.current=null;}},[w,e]),w&&I.current&&n)for(let[E,S]of Object.entries(n))I.current.set(E,S);useEffect(()=>{if(!w)return;I.current||(I.current=new xe(e));let E=I.current,S=Object.keys($.current||{}).map(u=>E.on(u,(...p)=>$.current?.[u]?.(...p)));return ()=>S.forEach(u=>u())},[w,e]),useEffect(()=>{if(Yt.has(e))return;Yt.add(e);let E={id:e,appId:f,label:e,eventsShape:"{ navigate?: string }",currentLayout:"",githubRepo:r,mode:"direct",sharedKeys:n?Object.keys(n):[],eventNames:o?Object.keys(o):[],propsShape:"",callbackNames:[]};fetch(`${s}/api/v1/slots`,{method:"POST",headers:{Authorization:`Bearer ${a}`,"Content-Type":"application/json"},body:JSON.stringify(E)}).catch(()=>{});},[e,s,a,r,f]);let A=i?.id||null;useEffect(()=>{if(i?.bundleUrl,T.current,F.current,!i?.bundleUrl||!A){return}let E=`${s}${i.bundleUrl.replace("bundle.js","component.js")}`,S=`__fork_animated_${e}`,u=sessionStorage.getItem(S),p=g(e),m=!p&&u!==A;if(p&&A&&sessionStorage.setItem(S,A),m&&F.current){let j=Zt(F.current);v.current=j,y.current=true,`${e}${j.length}`;}window.__FORK_REACT__=kt__default,window.__FORK_REACT_DOM__=Nr,window.__FORK_REACT_JSX__=Dr;let M=Date.now(),z=`${s}${i.bundleUrl.replace("bundle.js","component.css")}?t=${M}`,Y=document.createElement("link");Y.rel="stylesheet",Y.href=z,Y.dataset.forkSlot=e,document.head.appendChild(Y);let H=document.createElement("script");return H.src=E+"?t="+M,H.onload=()=>{let j=window.__FORK_EXPORT__;if(j?.default){if(F.current&&v.current&&y.current){let Z=F.current.getBoundingClientRect(),N=F.current.cloneNode(true);N.style.position="fixed",N.style.top=`${Z.top}px`,N.style.left=`${Z.left}px`,N.style.width=`${Z.width}px`,N.style.height=`${Z.height}px`,N.style.flex="none",N.style.minHeight="auto",N.style.zIndex="9998",N.style.pointerEvents="none",N.style.overflow="hidden";let te=getComputedStyle(F.current).backgroundColor;N.style.backgroundColor=te&&te!=="rgba(0, 0, 0, 0)"&&te!=="transparent"?te:getComputedStyle(document.body).backgroundColor||"#ffffff",document.body.appendChild(N);let J=F.current.querySelectorAll("*"),ie=N.querySelectorAll("*");for(let K=0;K<J.length;K++)J[K].scrollTop!==0&&(ie[K].scrollTop=J[K].scrollTop),J[K].scrollLeft!==0&&(ie[K].scrollLeft=J[K].scrollLeft);k.current=N;}x(()=>j.default),T.current=A;}else console.error(`[Fork:${e}] component.js loaded but no default export found`);window.__FORK_EXPORT__=void 0;},H.onerror=()=>{console.error(`[Fork:${e}] failed to load component.js`);},document.head.appendChild(H),()=>{H.remove(),Y.remove(),C.current&&(clearTimeout(C.current),C.current=null),k.current&&(k.current.remove(),k.current=null);}},[A,s,e]),useEffect(()=>{if(!y.current||!c||!F.current){`${e}${y.current}`,F.current;return}let E=v.current;if(!E){return}requestAnimationFrame(()=>{requestAnimationFrame(()=>{if(!F.current)return;let S=Zt(F.current),u=ln(E,S),p=cn(E,S),m=k.current;if(`${e}${u.length}${p.length}`,p.length>0&&m){let M=un(p);C.current=setTimeout(()=>{C.current=null;let z=400;m.animate([{opacity:1},{opacity:0}],{duration:z,fill:"forwards"}),M.animate([{opacity:1},{opacity:0}],{duration:z,fill:"forwards"}),setTimeout(()=>{m.remove(),M.remove(),k.current=null,u.length>0&&(Qt(u));},z);},3500);}else m&&(m.remove(),k.current=null),u.length>0&&(Qt(u));v.current=null,y.current=false,A&&(sessionStorage.setItem(`__fork_animated_${e}`,A),`${e}`);});});},[c]);let R={flex:1,minHeight:0,display:"flex",flexDirection:"column"};if(!i||i.status!=="complete"||!i.bundleUrl)return jsx("div",{ref:F,style:R,children:t});if(!c)return jsx("div",{ref:F,style:R,children:t});let l=t?.props??{};return jsx(yt,{slotId:e,resetKey:A,fallback:jsx("div",{ref:F,style:R,children:t}),children:jsx(fn,{component:c,containerRef:F,wrapperStyle:R,hostProps:l})})}var nr=new Set;function mn(e){return `{ ${Object.entries(e).map(([r,n])=>n==null?`${r}: unknown`:Array.isArray(n)?`${r}: ${n.length>0?typeof n[0]:"unknown"}[]`:`${r}: ${typeof n}`).join("; ")} }`}function or(e,t=new Set){return Children.forEach(e,r=>{if(!isValidElement(r))return;let n=r.props;for(let[o,i]of Object.entries(n))typeof i=="function"&&/^on[A-Z]/.test(o)&&t.add(o);n.children&&or(n.children,t);}),t}function hn({slotId:e,props:t,children:r,allowedFetches:n,githubRepo:o,callbacks:i,mode:s="iframe",shared:a,events:f}){if(bt(r,e),s==="direct")return jsx(tr,{slotId:e,githubRepo:o,shared:a,events:f,children:r});let g=ze(e),{baseUrl:c,apiKey:x,appId:T}=V(),F=useRef(null),v=useRef(false),y=useRef(null),k=useRef(i);k.current=i;let C=useRef(t);C.current=t;let w=useRef(n);w.current=n,useEffect(()=>{if(typeof process<"u")return;let R=or(r),h=new Set(i?Object.keys(i):[]),l=[...R].filter(E=>!h.has(E));l.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
|
+
`+l.map(E=>` - ${E}`).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(()=>{nr.has(e)||(nr.add(e),fetch(`${c}/api/v1/slots`,{method:"POST",headers:{Authorization:`Bearer ${x}`,"Content-Type":"application/json"},body:JSON.stringify({id:e,appId:T,label:e,propsShape:t?mn(t):"",eventsShape:"{ navigate?: string }",currentLayout:"",githubRepo:o,callbackNames:i?Object.keys(i):[],mode:s||"iframe"})}).catch(()=>{}));},[e,c,x,o,T]);let I=useCallback(R=>{let h=F.current;if(h?.contentWindow&&v.current){let l=k.current?Object.keys(k.current):[];h.contentWindow.postMessage({type:"slot:props",props:R,callbackNames:l},"*"),y.current=null;}else y.current=R;},[]),$=useCallback((R,h)=>{let l=w.current;return !l||l.length===0?false:l.some(E=>{let[S,u]=E.split(" "),p=h.split("?")[0];return R.toUpperCase()===S.toUpperCase()&&p.startsWith(u)})},[]);if(useEffect(()=>{if(!g?.bundleUrl)return;let R=async h=>{if(h.source===F.current?.contentWindow){if(h.data?.type==="slot:ready")v.current=true,F.current?.contentWindow?.postMessage({type:"slot:allowed-fetches",paths:w.current||[]},"*"),w.current,y.current?I(y.current):I(C.current||{});else if(h.data?.type==="slot:event"){let l=h.data.event;l?.navigate&&(window.location.hash=l.navigate);}else if(h.data?.type==="slot:clipboard-write")navigator.clipboard.writeText(h.data.text).catch(l=>{console.warn(`[ForkSlot:${e}] clipboard write failed:`,l.message);});else if(h.data?.type==="slot:callback"){let{name:l,args:E}=h.data,S=k.current?.[l];S?(S(...E||[])):console.warn(`[ForkSlot:${e}] unknown callback: ${l}`);}else if(h.data?.type==="slot:fetch"){let{id:l,method:E,url:S,body:u}=h.data,p=F.current?.contentWindow;if(!p)return;let m=E||"GET";if(!$(m,S)){console.warn(`[ForkSlot:${e}] BLOCKED fetch #${l}: ${m} ${S} \u2014 not in allowedFetches`),p.postMessage({type:"slot:fetch-response",id:l,error:`Fetch not allowed: ${m} ${S}`},"*");return}try{let M={method:m};u&&m!=="GET"&&(M.headers={"Content-Type":"application/json"},M.body=JSON.stringify(u));let z=await fetch(S,M),Y=await z.json();`${e}${l}${z.status}`,p.postMessage({type:"slot:fetch-response",id:l,data:Y,status:z.status},"*");}catch(M){console.error(`[ForkSlot:${e}] fetch #${l} failed:`,M.message),p.postMessage({type:"slot:fetch-response",id:l,error:M.message},"*");}}}};return window.addEventListener("message",R),()=>{window.removeEventListener("message",R),v.current=false;}},[g?.bundleUrl,e,I,$]),useEffect(()=>{g?.bundleUrl&&v.current&&I(t||{});},[t,g?.bundleUrl,I]),!g||g.status!=="complete"||!g.bundleUrl)return `${e}${g?.status||"none"}${g?.bundleUrl||"none"}`,jsx(Fragment,{children:r});`${e}${g.bundleUrl}`;let A=`${c}${g.bundleUrl.replace("/bundle.js","/host")}`;return jsx("iframe",{ref:F,src:A,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 vt({onClick:e}){let[t,r]=useState(false),[n,o]=useState(false),i=t?48:40;return jsx("button",{onClick:e,onMouseEnter:()=>r(true),onMouseLeave:()=>{r(false),o(false);},onMouseDown:()=>o(true),onMouseUp:()=>o(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:n?"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 En={status:Loader2,agent_message:MessageSquare,tool_use:Wrench,build_start:Package,build_complete:Check,build_error:AlertCircle,complete:Sparkles,error:AlertCircle},$n={status:"#60a5fa",agent_message:"#a0a0a0",tool_use:"#fbbf24",build_start:"#c084fc",build_complete:"#6b7280",build_error:"#f87171",complete:"#6b7280",error:"#f87171"},_n={read:FileSearch,write:Pencil,search:FileSearch,shell:Terminal,build:Package},An={read:"#60a5fa",write:"#fbbf24",search:"#60a5fa",shell:"#a78bfa",build:"#c084fc"};function xt(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 fr({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 wt from'react';import wt__default,{createContext,useSyncExternalStore,
|
|
|
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,
|
|
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,n)=>{let o=n===e.length-1,i=r.type==="complete"||r.type==="error"||r.type==="build_complete"||r.type==="build_error",s=o&&!i&&(r.type==="status"||r.type==="tool_use"||r.type==="build_start"),a=En[r.type]||Code,f=$n[r.type]||"#9ca3af";if(r.type==="tool_use"){let g=String(r.data.category||"");a=_n[g]||Wrench,f=An[g]||"#fbbf24";}return s?a=Loader2:!o&&r.type==="status"&&(a=Check,f="#4ade80"),jsxs("div",{style:{display:"flex",gap:"6px",marginBottom:"6px",lineHeight:1.625},children:[jsx(a,{style:{width:"12px",height:"12px",marginTop:"2px",flexShrink:0,color:f,...s?{animation:"__fork-spin 1s linear infinite"}:{}}}),jsx("span",{style:{color:o&&!i?"#d1d5db":"#6b7280",wordBreak:"break-all"},children:xt(r)})]},n)})]})]})}var On=["Dark mode redesign","New workflow for adding to this page","Data-dense analytics view"],hr=35,Bn="Working on Feature",Hn="Built Custom Feature",yr=360,qe=350;function Nn(e){return e.length<=hr?e:e.slice(0,hr-3).trimEnd()+"..."}function Dn({events:e}){let[t,r]=useState("Setting up environment..."),[n,o]=useState(true),i=useRef(t),s=useRef(false);return useEffect(()=>{if(!s.current){for(let f of e)if(f.type==="status"&&String(f.data.message||"").includes("Agent started")){s.current=true;break}}let a="Setting up environment...";if(s.current)for(let f=e.length-1;f>=0;f--){let g=e[f];if(g.type==="tool_use"||g.type==="build_start"||g.type==="build_complete"){a=Nn(xt(g));break}}if(a!==i.current){o(false);let f=setTimeout(()=>{r(a),i.current=a,o(true);},200);return ()=>clearTimeout(f)}},[e]),jsx("span",{style:{fontSize:11,color:"#d1d5db",fontWeight:500,opacity:n?1:0,transition:"opacity 0.2s ease",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",minWidth:0},children:t})}function jn({children:e}){let[t,r]=useState(null);return useEffect(()=>{if(typeof document>"u")return;let n=document.createElement("div");n.setAttribute("data-fork-panel-host",""),n.style.cssText="all: initial;",document.body.appendChild(n);let o=n.attachShadow({mode:"open"});return r(o),()=>{n.remove();}},[]),t?createPortal(e,t):null}function Je({state:e,fork:t,events:r,error:n,slotId:o,targetId:i,targetLabel:s,historyMode:a="slot",examplePrompts:f=On,onSubmit:g,onUndo:c,onClose:x,baseUrl:T,apiKey:F,userId:v,userHash:y,appId:k,embedded:C=false}){let[w,I]=useState(""),[$,A]=useState([]),[R,h]=useState(false),[l,E]=useState(false),[S,u]=useState(false),[p,m]=useState(false),[M,z]=useState(false),[Y,H]=useState(false),[j,Z]=useState(false),[N,te]=useState(null),[J,ie]=useState(false),[K,$e]=useState(false),[ke,_e]=useState(null),[rt,Ae]=useState(false),[_,b]=useState([]),[U,G]=useState(null),[re,Mt]=useState(false),[pe,Pe]=useState(false),[Pr,It]=useState(false),[Cr,Lt]=useState(null),[ge,Ut]=useState(null),Ce=useRef(null),Te=useRef(null),{resetAllForks:Tr,previewSession:Me,currentContainerId:Mr}=V(),Ie=Me?.container_id??Mr,Ot=!!Me,ne=ge!==null,Bt=useRef(x);useEffect(()=>{Bt.current=x;});let nt=useRef(null),Le=useRef(false),Ht=typeof window<"u"&&"documentPictureInPicture"in window,Ir=async()=>{if(!(!Ht||ne))try{let d=await window.documentPictureInPicture.requestWindow({width:yr,height:640});d.document.body.style.margin="0",d.document.body.style.padding="0",d.document.body.style.height="100vh",d.document.body.style.overflow="hidden",d.document.body.style.background="#ffffff";try{let L=document.adoptedStyleSheets??[];L.length>0&&(d.document.adoptedStyleSheets=[...L]);}catch{}d.addEventListener("pagehide",()=>{nt.current=null,Ut(null),Le.current||Bt.current(),Le.current=!1;},{once:!0}),nt.current=d,Ut(d);}catch(d){console.warn("[Fork] PiP open failed:",d);}},Lr=()=>{ge&&(Le.current=true,ge.close());};useEffect(()=>()=>{Le.current=true,nt.current?.close();},[]);let oe=i??o??"",Ue=(s||oe).replace(/[-_]+/g," ").replace(/\b\w/g,d=>d.toUpperCase()),ot=useRef(""),Oe=C?true:l&&!S,Ur=r.find(d=>{let L=d.data;return d.type==="status"&&L.summary})?.data?.summary||t?.summary||Bn,le=r.find(d=>{let L=d.data;return (d.type==="status"||d.type==="complete")&&typeof L?.estimateMinutes=="number"})?.data?.estimateMinutes??t?.estimateMinutes;useEffect(()=>{if(a==="none"){h(true);return}if(!T||!F||!v||!oe||R||!re)return;let d=new URLSearchParams({userId:v});if(y&&d.set("userHash",y),U&&d.set("containerId",U),a==="slot")d.set("slotId",oe);else if(a==="boundary"){if(!k){h(true);return}d.set("boundaryId",oe),d.set("appId",k);}fetch(`${T}/api/v1/forks/history?${d.toString()}`,{headers:{Authorization:`Bearer ${F}`}}).then(L=>L.ok?L.json():[]).then(L=>{let O=[];for(let He of L)He.role==="user"?O.push({type:"user",text:He.content}):O.push({type:"applied",text:He.content});A(O),h(true);}).catch(()=>h(true));},[F,k,T,R,a,oe,y,v,U,re]),useEffect(()=>{e==="complete"&&ie(false);},[e]),useEffect(()=>{if(C&&a==="none"){b([]),G(null),Mt(true);return}Ie?(b([{id:Ie,name:Ot?Me?.container_name||"Preview container":"Primary container",createdAt:""}]),G(Ie)):(b([]),G(null)),Mt(true);},[Ie,C,a,Ot,Me?.container_name]);let Be=useRef(void 0);useEffect(()=>{if(re){if(Be.current===void 0){Be.current=U;return}Be.current!==U&&(Be.current=U,A([]),h(false));}},[U,re]);let st=useRef(null);useEffect(()=>{if(!pe)return;let d=O=>{st.current&&(st.current.contains(O.target)||Pe(false));},L=O=>{O.key==="Escape"&&Pe(false);};return document.addEventListener("mousedown",d,true),document.addEventListener("keydown",L,true),()=>{document.removeEventListener("mousedown",d,true),document.removeEventListener("keydown",L,true);}},[pe]),useEffect(()=>{if(C)return;let d=requestAnimationFrame(()=>E(true));return ()=>cancelAnimationFrame(d)},[C]),useEffect(()=>{let d=C||ne;if((d||Oe)&&(e==="prompting"||e==="complete")){let L=setTimeout(()=>Ce.current?.focus(),d?100:qe+100);return ()=>clearTimeout(L)}},[Oe,C,ne,e]),useEffect(()=>{if(e==="complete"&&ot.current){let L=r.find(O=>O.type==="complete")?.data?.summary||t?.summary||Hn;A(O=>O[O.length-1]?.type==="applied"?O:[...O,{type:"applied",text:L}]),I(""),setTimeout(()=>Ce.current?.focus(),200);}},[e,Ue,r,t?.summary]),useEffect(()=>{Te.current&&(Te.current.scrollTop=Te.current.scrollHeight);},[$,e]);let Nt=()=>{w.trim()&&(ot.current=w.trim(),A(d=>[...d,{type:"user",text:w.trim()}]),g(w.trim(),oe,U),I(""));},Or=async()=>{if(!(!c||K||!oe)){$e(true);try{let d=await c(oe);A(L=>{let O=[...L];return O.length>=2&&O[O.length-1]?.type==="applied"?O.splice(-2,2):O.length>=1&&O[O.length-1]?.type==="applied"&&O.splice(-1,1),O}),d?.removed&&A([]);}catch{}finally{$e(false);}}},it=()=>{if(C){x();return}if(ne){ge?.close();return}u(true),E(false),setTimeout(()=>x(),qe);},Br=C||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:yr,maxWidth:"100vw",background:"#ffffff",boxShadow:Oe?"-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:Oe?"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'},at=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 wt from'react';import wt__default,{createContext,useSyncExternalStore,
|
|
|
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: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{
|
|
43
|
+
`}),jsxs("div",{className:"__fork-panel",style:Br,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 d=>{if(d.stopPropagation(),!rt&&confirm("Reset all forks? This will remove all forked components.")){Ae(true);try{let L=await Tr();`${L?.deleted??0}`,A([]),I(""),ie(!1),it();}catch(L){console.error("[Fork] Reset failed:",L);}finally{Ae(false);}}}}),e==="running"?jsx("span",{style:{fontSize:13,fontWeight:600,color:"#111827",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",minWidth:0},children:Ur}):_.length===0?jsxs("span",{style:{fontSize:13,fontWeight:600,color:"#111827",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",minWidth:0},children:["Fork ",Ue]}):jsxs("div",{ref:st,style:{position:"relative",minWidth:0,display:"inline-flex"},children:[jsxs("button",{type:"button",onClick:()=>{Pe(d=>!d);},onMouseEnter:()=>It(true),onMouseLeave:()=>It(false),"aria-haspopup":"menu","aria-expanded":pe,style:{display:"inline-flex",alignItems:"center",gap:4,padding:"3px 6px",border:"1px solid transparent",borderRadius:6,background:Pr||pe?"#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:_.find(d=>d.id===U)?.name??(re?`Fork ${Ue}`:"Loading\u2026")}),jsx(ChevronDown,{style:{width:12,height:12,color:"#6b7280",flexShrink:0,transform:pe?"rotate(180deg)":void 0,transition:"transform 0.15s"}})]}),pe&&jsx("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:_.map(d=>{let L=d.id===U,O=Cr===d.id;return jsxs("button",{type:"button",role:"menuitem",onMouseEnter:()=>Lt(d.id),onMouseLeave:()=>Lt(null),onClick:()=>{Pe(false),d.id!==U&&G(d.id);},style:{display:"flex",alignItems:"center",gap:8,width:"100%",padding:"6px 8px",border:"none",background:O?"#f3f4f6":"transparent",borderRadius:4,fontSize:13,fontFamily:"inherit",color:"#111827",cursor:"pointer",textAlign:"left",fontWeight:L?600:400},children:[jsx("span",{style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:14,height:14,color:"#111827",flexShrink:0},children:L&&jsx(Check,{style:{width:12,height:12}})}),jsx("span",{style:{flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:d.name})]},d.id)})})]}),e==="running"&&jsx("span",{title:le?`Estimated ~${le} min`:"Estimating\u2026",style:{fontSize:10,fontWeight:600,color:le?"#1c4587":"#9ca3af",backgroundColor:le?"rgba(28, 69, 135, 0.08)":"rgba(156, 163, 175, 0.12)",padding:"1px 6px",borderRadius:999,flexShrink:0,fontVariantNumeric:"tabular-nums",animation:le?void 0:"__fork-pulse 1.4s ease-in-out infinite",minWidth:28,textAlign:"center"},children:le?`~${le}m`:"~ m"}),e==="complete"&&jsx("div",{style:{height:6,width:6,backgroundColor:"#1c4587",borderRadius:"50%",flexShrink:0}})]}),!C&&jsxs("div",{style:{display:"flex",alignItems:"center",gap:2,flexShrink:0},children:[Ht&&jsx("button",{onClick:ne?Lr:Ir,onMouseEnter:()=>z(true),onMouseLeave:()=>z(false),title:ne?"Redock to sidebar":"Pop out into window",style:{padding:6,borderRadius:6,color:M?"#4b5563":"#9ca3af",backgroundColor:M?"#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:it,onMouseEnter:()=>m(true),onMouseLeave:()=>m(false),style:{padding:6,borderRadius:6,color:p?"#4b5563":"#9ca3af",backgroundColor:p?"#f3f4f6":"transparent",border:"none",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",transition:"background-color 0.15s, color 0.15s"},children:jsx(X$1,{style:{width:16,height:16}})})]})]}),jsxs("div",{ref:Te,style:{flex:1,overflowY:"auto",minHeight:0,display:"flex",flexDirection:"column"},children:[e==="prompting"&&$.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:f.map((d,L)=>jsx("button",{onClick:()=>{I(d),Ce.current?.focus();},onMouseEnter:()=>te(L),onMouseLeave:()=>te(null),style:{fontSize:12,padding:"5px 12px",borderRadius:9999,color:N===L?"#1f2937":"#6b7280",backgroundColor:N===L?"#f9fafb":"transparent",border:N===L?"1px solid #d1d5db":"1px solid #e5e7eb",cursor:"pointer",transition:"color 0.15s, background-color 0.15s, border-color 0.15s",fontFamily:"inherit"},children:d},d))})]}),$.length>0&&jsx("div",{style:{padding:"16px 16px 0 16px"},children:$.map((d,L)=>jsx("div",{style:{marginBottom:L<$.length-1?10:0},children:d.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:d.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:d.text}),c&&L===$.length-1&&e!=="running"&&jsxs("button",{onClick:O=>{O.stopPropagation(),Or();},onMouseEnter:()=>_e(L),onMouseLeave:()=>_e(null),disabled:K,style:{position:"relative",padding:2,borderRadius:4,border:"none",background:ke===L?"rgba(0,0,0,0.06)":"transparent",color:ke===L?"#6b7280":"#d1d5db",cursor:K?"default":"pointer",display:"flex",alignItems:"center",justifyContent:"center",transition:"color 0.15s, background 0.15s",opacity:K?.4:1,flexShrink:0},children:[jsx(Undo2,{style:{width:12,height:12}}),ke===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:()=>ie(!J),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(Dn,{events:r})]}),jsx("div",{style:{color:"#6b7280",flexShrink:0,marginLeft:8,transition:"transform 0.2s ease",transform:J?"rotate(180deg)":"rotate(0deg)"},children:jsx(ChevronDown,{style:{width:14,height:14}})})]}),jsx("div",{style:{maxHeight:J?320:0,opacity:J?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(fr,{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$1,{style:{width:18,height:18,color:"#ef4444"}})}),jsx("p",{style:{fontSize:12,color:"#6b7280",marginBottom:10,maxWidth:260,margin:"0 auto 10px auto"},children:n}),jsxs("button",{onClick:()=>{let d=t?.prompt||ot.current;d&&g(d,oe);},onMouseEnter:()=>Z(true),onMouseLeave:()=>Z(false),style:{display:"inline-flex",alignItems:"center",gap:6,padding:"6px 12px",borderRadius:8,fontSize:12,fontWeight:500,color:"#4f46e5",backgroundColor:j?"#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:Ce,value:w,onChange:d=>{I(d.target.value),d.target.style.height="auto",d.target.style.height=Math.min(d.target.scrollHeight,160)+"px";},onKeyDown:d=>{d.key==="Enter"&&!d.shiftKey&&(d.preventDefault(),Nt()),d.key==="Escape"&&!C&&it();},placeholder:$.length>0?"Ask for another change...":`Describe your ideal ${Ue.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:Nt,disabled:!w.trim(),onMouseEnter:()=>H(true),onMouseLeave:()=>H(false),style:{width:26,height:26,borderRadius:"50%",display:"flex",alignItems:"center",justifyContent:"center",color:"#ffffff",opacity:w.trim()?1:.25,transform:Y&&w.trim()?"scale(1.1)":"scale(1)",background:w.trim()?"#1c4587":"rgba(0,0,0,0.12)",border:"none",cursor:w.trim()?"pointer":"default",flexShrink:0,transition:"transform 0.15s, opacity 0.15s",padding:0},children:jsx(ArrowUp,{style:{width:13,height:13}})})]})})]})]});return C?at:ne&&ge?createPortal(at,ge.document.body):jsx(jn,{children:at})}function br(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 Ft(e){let{apiKey:t,userId:r,userHash:n,baseUrl:o,appId:i,previewSession:s,refreshModuleManifest:a,queueBoundaryAnimation:f}=V(),[g,c]=useState("idle"),[x,T]=useState(null),[F,v]=useState([]),[y,k]=useState(null),C=useRef(null),w=useCallback(()=>{c("prompting"),v([]),k(null),T(null);},[]),I=useCallback(()=>{c("idle"),C.current&&(C.current.close(),C.current=null);},[]);useEffect(()=>{s&&s.target.kind==="module"&&s.target.id===e&&c(R=>R==="idle"?"prompting":R);},[s?.preview_session_id,s?.target.id,e]);let $=useCallback(async(R,h)=>{try{if(!i)throw new Error("ForkProvider requires appId for module boundary prompts.");c("running"),v([]),k(null);let l;if(s){let u=await fetch(`${o}/api/v1/preview/${encodeURIComponent(s.preview_session_id)}/author`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`,...X()},body:JSON.stringify({prompt:R,...s.fork_id?{fork_id:s.fork_id}:{}})});if(!u.ok){let M=await u.json().catch(()=>({}));throw new Error(M.error||`API error: ${u.status}`)}let p=await u.json();we(p.fork_id),l=await(await fetch(`${o}/api/v1/forks/${p.fork_id}`,{headers:{Authorization:`Bearer ${t}`,...X()}})).json();}else {let u={userId:r,prompt:R,boundaryId:e,appId:i};h&&(u.containerId=h),n&&(u.userHash=n);let p=await fetch(`${o}/api/v1/forks`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:JSON.stringify(u)});if(!p.ok){let m=await p.json().catch(()=>({}));throw new Error(m.error||`API error: ${p.status}`)}l=await p.json();}T(l);let E=new URLSearchParams({key:t});n&&(E.set("userId",r),E.set("userHash",n));let S=new EventSource(`${o}/api/v1/forks/${l.id}/events?${E.toString()}`);C.current=S,S.onmessage=u=>{try{let p=JSON.parse(u.data);if(v(m=>[...m,p]),p.type==="complete"){let m=p.data;f(e,l.id),a().catch(()=>{}).finally(()=>{let M={...l,status:"complete",moduleUrl:m.moduleUrl,cssUrls:m.cssUrls,summary:m.summary,completedAt:new Date().toISOString()};T(M),c("complete"),S.close();});}else if(p.type==="error"){let m=p.data;k(m.error||"Unknown error"),c("error"),S.close();}}catch{}},S.onerror=()=>{fetch(`${o}/api/v1/forks/${l.id}`,{headers:{Authorization:`Bearer ${t}`}}).then(u=>u.json()).then(u=>{T(u),u.status==="complete"?(f(e,u.id),a().catch(()=>{}),c("complete")):u.status==="error"&&(k(u.error||"Fork generation failed"),c("error"));}).catch(()=>{k("Connection lost"),c("error");}),S.close();};}catch(l){k(l.message),c("error");}},[t,i,o,e,s,f,a,n,r]),A=useCallback(async()=>{try{if(!i)throw new Error("ForkProvider requires appId for boundary undo.");let R={userId:r,boundaryId:e,appId:i};n&&(R.userHash=n);let h=await fetch(`${o}/api/v1/forks/undo`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:JSON.stringify(R)});if(!h.ok){let E=await h.json().catch(()=>({}));throw new Error(E.error||`API error: ${h.status}`)}let l=await h.json();return await a().catch(()=>{}),l.removed?(T(null),c("prompting")):l.fork&&(T(l.fork),c("complete")),l}catch(R){throw k(R.message),R}},[t,i,o,e,a,n,r]);return {state:g,fork:x,events:F,error:y,open:w,close:I,startFork:$,undoFork:A}}function wr(e){let{state:t,fork:r,events:n,error:o,open:i,close:s,startFork:a,undoFork:f}=Ft(e);return {state:t,fork:r,events:n,error:o,isOpen:t!=="idle",open:i,close:s,submit:a,undo:f}}function Rt(){let{apiKey:e,userId:t,userHash:r,baseUrl:n,previewSession:o,setSlotFork:i,clearSlotFork:s,skipAnimationForSlot:a}=V(),[f,g]=useState("idle"),[c,x]=useState(null),[T,F]=useState([]),[v,y]=useState(null),k=useRef(null),C=useCallback(()=>{g("prompting"),F([]),y(null),x(null);},[]),w=useCallback(()=>{g("idle"),k.current&&(k.current.close(),k.current=null);},[]);useEffect(()=>{o&&o.target.kind==="slot"&&g(A=>A==="idle"?"prompting":A);},[o?.preview_session_id,o?.target.kind]);let I=useCallback(async(A,R,h)=>{try{g("running"),F([]),y(null);let l;if(o){let u=await fetch(`${n}/api/v1/preview/${encodeURIComponent(o.preview_session_id)}/author`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`,...X()},body:JSON.stringify({prompt:A,...o.fork_id?{fork_id:o.fork_id}:{}})});if(!u.ok){let M=await u.json().catch(()=>({}));throw new Error(M.error||`API error: ${u.status}`)}let p=await u.json();we(p.fork_id),l=await(await fetch(`${n}/api/v1/forks/${p.fork_id}`,{headers:{Authorization:`Bearer ${e}`,...X()}})).json();}else {let u={userId:t,prompt:A};R&&(u.slotId=R),h&&(u.containerId=h),r&&(u.userHash=r);let p=await fetch(`${n}/api/v1/forks`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`},body:JSON.stringify(u)});if(!p.ok){let m=await p.json().catch(()=>({}));throw new Error(m.error||`API error: ${p.status}`)}l=await p.json();}x(l);let E=new URLSearchParams({key:e});r&&(E.set("userId",t),E.set("userHash",r));let S=new EventSource(`${n}/api/v1/forks/${l.id}/events?${E.toString()}`);k.current=S,S.onmessage=u=>{try{let p=JSON.parse(u.data);if(F(m=>[...m,p]),p.type==="complete"){let m=p.data,M={...l,status:"complete",bundleUrl:m.bundleUrl,summary:m.summary,completedAt:new Date().toISOString()};x(M),g("complete"),R&&m.bundleUrl&&i(R,M),S.close();}else if(p.type==="error"){let m=p.data;y(m.error||"Unknown error"),g("error"),S.close();}}catch{}},S.onerror=()=>{fetch(`${n}/api/v1/forks/${l.id}`,{headers:{Authorization:`Bearer ${e}`}}).then(u=>u.json()).then(u=>{x(u),u.status==="complete"?(g("complete"),R&&u.bundleUrl&&i(R,u)):u.status==="error"&&(y(u.error||"Fork generation failed"),g("error"));}).catch(()=>{y("Connection lost"),g("error");}),S.close();};}catch(l){y(l.message),g("error");}},[e,t,r,n,o,i]),$=useCallback(async A=>{try{let R={userId:t,slotId:A};r&&(R.userHash=r);let h=await fetch(`${n}/api/v1/forks/undo`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`},body:JSON.stringify(R)});if(!h.ok){let E=await h.json().catch(()=>({}));throw new Error(E.error||`API error: ${h.status}`)}let l=await h.json();return a(A),l.removed?(s(A),x(null),g("prompting")):l.fork&&(i(A,l.fork),x(l.fork)),l}catch(R){throw y(R.message),R}},[e,t,r,n,s,i]);return {state:f,fork:c,events:T,error:v,open:C,close:w,startFork:I,undoFork:$}}function vr(){let{state:e,fork:t,events:r,error:n,open:o,close:i,startFork:s,undoFork:a}=Rt();return {state:e,fork:t,events:r,error:n,isOpen:e!=="idle",open:o,close:i,submit:s,undo:a}}function Et(e){let t=br(e),r=vr(),n=wr(t.type==="boundary"?t.id:""),{baseUrl:o,apiKey:i,userId:s,userHash:a,appId:f}=V(),g=t.type==="slot"?r:n,c=t.type==="slot"?"slot":"boundary",x=t.id,T=t.title,F=useCallback((y,k,C)=>t.type==="slot"?r.submit(y,k??t.id,C):n.submit(y,C),[n,r,t]),v=useCallback(y=>t.type==="slot"?r.undo(y??t.id):n.undo(),[n,r,t]);return {...g,target:t,targetId:x,targetLabel:T,historyMode:c,submit:F,undo:v,buttonProps:{onClick:g.open},panelProps:{state:g.state,fork:g.fork,events:g.events,error:g.error,...t.type==="slot"?{slotId:x,targetLabel:T,historyMode:c}:{targetId:x,targetLabel:T,historyMode:c},onSubmit:F,onUndo:v,onClose:g.close,baseUrl:o,apiKey:i,userId:s,userHash:a,appId:f}}}function Ee(e){let{examplePrompts:t,embedded:r}=e,n=Et(e);return r?jsx(Je,{...n.panelProps,examplePrompts:t,embedded:true}):n.isOpen?jsx(Je,{...n.panelProps,examplePrompts:t}):jsx(vt,{...n.buttonProps})}function qn({boundaryId:e,title:t,examplePrompts:r}){return jsx(Ee,{boundaryId:e,title:t,examplePrompts:r})}function _t(e){let t=Array.from(e.children).filter(n=>n instanceof HTMLElement);return t.length===1?t[0]:getComputedStyle(e).display==="contents"?null:e}function xr(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 n=getComputedStyle(e).backgroundColor;r.style.backgroundColor=n&&n!=="rgba(0, 0, 0, 0)"&&n!=="transparent"?n:getComputedStyle(document.body).backgroundColor||"#ffffff",document.body.appendChild(r);let o=e.querySelectorAll("*"),i=r.querySelectorAll("*");for(let s=0;s<o.length;s+=1)o[s].scrollTop!==0&&(i[s].scrollTop=o[s].scrollTop),o[s].scrollLeft!==0&&(i[s].scrollLeft=o[s].scrollLeft);return r}function At(e){let t=[],r=e.querySelectorAll("*");for(let n of r){if(!(n instanceof HTMLElement))continue;let o=n.getBoundingClientRect();if(o.width<10||o.height<10||["SCRIPT","STYLE","META","LINK"].includes(n.tagName))continue;let i=getComputedStyle(n),s=parseFloat(i.borderTopLeftRadius)||0;t.push({tag:n.tagName,className:n.className||"",text:(n.textContent||"").slice(0,50).trim(),rect:o,borderRadius:s});}return t}function Fr(e,t){let r=[];for(let n of t)if(!(e.find(s=>s.tag===n.tag&&s.className===n.className&&Math.abs(s.rect.top-n.rect.top)<20&&Math.abs(s.rect.left-n.rect.left)<20)||r.some(s=>n.rect.top>=s.rect.top&&n.rect.left>=s.rect.left&&n.rect.right<=s.rect.right&&n.rect.bottom<=s.rect.bottom))){for(let s=r.length-1;s>=0;s-=1){let a=r[s];a.rect.top>=n.rect.top&&a.rect.left>=n.rect.left&&a.rect.right<=n.rect.right&&a.rect.bottom<=n.rect.bottom&&r.splice(s,1);}r.push({rect:n.rect,borderRadius:n.borderRadius});}return r}function Rr(e,t){let r=[];for(let n of e)if(!(t.find(s=>s.tag===n.tag&&s.className===n.className&&Math.abs(s.rect.top-n.rect.top)<20&&Math.abs(s.rect.left-n.rect.left)<20)||r.some(s=>n.rect.top>=s.rect.top&&n.rect.left>=s.rect.left&&n.rect.right<=s.rect.right&&n.rect.bottom<=s.rect.bottom))){for(let s=r.length-1;s>=0;s-=1){let a=r[s];a.rect.top>=n.rect.top&&a.rect.left>=n.rect.left&&a.rect.right<=n.rect.right&&a.rect.bottom<=n.rect.bottom&&r.splice(s,1);}r.push({rect:n.rect,borderRadius:n.borderRadius});}return r}function Er(e,t,r,n,o){let i=Math.max(0,Math.min(o,r/2,n/2));return i===0?`M ${e} ${t} L ${e+r} ${t} L ${e+r} ${t+n} L ${e} ${t+n} Z`:[`M ${e+i} ${t}`,`L ${e+r-i} ${t}`,`A ${i} ${i} 0 0 1 ${e+r} ${t+i}`,`L ${e+r} ${t+n-i}`,`A ${i} ${i} 0 0 1 ${e+r-i} ${t+n}`,`L ${e+i} ${t+n}`,`A ${i} ${i} 0 0 1 ${e} ${t+n-i}`,`L ${e} ${t+i}`,`A ${i} ${i} 0 0 1 ${e+i} ${t}`,"Z"].join(" ")}function Pt(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 n=document.createElementNS(t,"svg");n.setAttribute("width","100%"),n.setAttribute("height","100%"),n.style.cssText="position:absolute;top:0;left:0;overflow:visible;";let o=document.createElementNS(t,"defs");n.appendChild(o);let i=[];for(let c=0;c<e.length;c+=1){let{rect:x,borderRadius:T}=e[c],F=x.left-.5,v=x.top-.5,y=x.width+1,k=x.height+1,C=Math.min(T+.5,y/2,k/2),w=Er(F,v,y,k,C),I=`__fork-glow-${c}`,$=document.createElementNS(t,"filter");$.setAttribute("id",I),$.setAttribute("x","-100%"),$.setAttribute("y","-100%"),$.setAttribute("width","300%"),$.setAttribute("height","300%");let A=document.createElementNS(t,"feGaussianBlur");A.setAttribute("in","SourceGraphic"),A.setAttribute("stdDeviation","8"),$.appendChild(A),o.appendChild($);let R=`__fork-mask-${c}`,h=document.createElementNS(t,"mask");h.setAttribute("id",R),h.setAttribute("maskUnits","userSpaceOnUse"),h.setAttribute("x",String(F-200)),h.setAttribute("y",String(v-200)),h.setAttribute("width",String(y+400)),h.setAttribute("height",String(k+400));let l=document.createElementNS(t,"rect");l.setAttribute("x",String(F-200)),l.setAttribute("y",String(v-200)),l.setAttribute("width",String(y+400)),l.setAttribute("height",String(k+400)),l.setAttribute("fill","white"),h.appendChild(l);let E=document.createElementNS(t,"path");E.setAttribute("d",w),E.setAttribute("fill","black"),h.appendChild(E),o.appendChild(h);let S=document.createElementNS(t,"g");S.setAttribute("mask",`url(#${R})`),S.setAttribute("opacity","0");let u=document.createElementNS(t,"g");u.setAttribute("filter",`url(#${I})`);let p=document.createElementNS(t,"path");p.setAttribute("d",w),p.setAttribute("fill","none"),p.setAttribute("stroke","rgba(150, 185, 220, 0.6)"),p.setAttribute("stroke-width","6"),p.setAttribute("stroke-linecap","round"),u.appendChild(p),S.appendChild(u),n.appendChild(S);let m=document.createElementNS(t,"path");m.setAttribute("d",w),m.setAttribute("fill","none"),m.setAttribute("stroke","rgba(150, 185, 220, 0.35)"),m.setAttribute("stroke-width","2"),m.setAttribute("stroke-linecap","round"),m.setAttribute("opacity","0"),n.appendChild(m),i.push(p,m),p.__group=S;}r.appendChild(n),document.body.appendChild(r);let s=[];for(let c=0;c<i.length;c+=2){let x=i[c],T=i[c+1],F=x.__group;if(!F)continue;let v=T.getTotalLength(),y=x.getTotalLength();if(v<=0)continue;let k=v*.35;T.setAttribute("stroke-dasharray",`${k} ${v-k}`),T.setAttribute("stroke-dashoffset","0"),s.push(T.animate([{strokeDashoffset:0,opacity:0,offset:0},{strokeDashoffset:-0.2*v,opacity:.92,offset:.06},{strokeDashoffset:-2*v,opacity:.92,offset:.92},{strokeDashoffset:-2.25*v,opacity:0,offset:1}],{duration:14e3,easing:"ease-in-out",fill:"forwards"}));let C=y*.35;x.setAttribute("stroke-dasharray",`${C} ${y-C}`),x.setAttribute("stroke-dashoffset","0"),s.push(x.animate([{strokeDashoffset:0,offset:0},{strokeDashoffset:-0.2*y,offset:.06},{strokeDashoffset:-2*y,offset:.92},{strokeDashoffset:-2.25*y,offset:1}],{duration:14e3,easing:"ease-in-out",fill:"forwards"})),s.push(F.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,f=()=>{if(a)return;a=true,clearTimeout(g);for(let x of s)try{x.cancel();}catch{}let c=r.animate([{opacity:1},{opacity:0}],{duration:400,fill:"forwards"});c.onfinish=()=>r.remove(),window.removeEventListener("click",f);},g=setTimeout(f,14500);return setTimeout(()=>{a||window.addEventListener("click",f);},500),f}function $r(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 n=document.createElementNS(t,"svg");n.setAttribute("width","100%"),n.setAttribute("height","100%"),n.style.cssText="position:absolute;top:0;left:0;overflow:visible;";let o=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),o.appendChild(i),n.appendChild(o);for(let{rect:a,borderRadius:f}of e){let g=document.createElementNS(t,"path");g.setAttribute("d",Er(a.left,a.top,a.width,a.height,f)),g.setAttribute("fill","none"),g.setAttribute("stroke","rgba(120, 125, 135, 0.6)"),g.setAttribute("stroke-width","1.5"),g.setAttribute("stroke-dasharray","8 4"),g.setAttribute("stroke-linecap","round"),g.setAttribute("filter","url(#__fork-removed-shadow)"),g.setAttribute("opacity","0"),n.appendChild(g),g.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(n),document.body.appendChild(r),r}var tt=new Map,Ct=new Map;function Yn(e){return e instanceof Error?e:new Error(typeof e=="string"?e:"Unknown module override error")}function Ar(e,t){let r=(t?e[t]:void 0)??e.default;if(typeof r!="function"){let n=t||"default";throw new Error(`Fork boundary module is missing a React component export: ${n}`)}return r}function Zn(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 o=r.sheet?Promise.resolve():new Promise((i,s)=>{let a=()=>{r.removeEventListener("load",a),r.removeEventListener("error",f),i();},f=()=>{r.removeEventListener("load",a),r.removeEventListener("error",f),s(new Error(`Failed to load boundary stylesheet: ${e}`));};r.addEventListener("load",a,{once:true}),r.addEventListener("error",f,{once:true});});return tt.set(e,o),o}let n=new Promise((o,i)=>{let s=document.createElement("link");s.rel="stylesheet",s.href=e,s.setAttribute("data-fork-override-href",e),s.onload=()=>o(),s.onerror=()=>{s.remove(),i(new Error(`Failed to load boundary stylesheet: ${e}`));},document.head.appendChild(s);}).catch(o=>{throw tt.delete(e),o});return tt.set(e,n),n}function Qn(e){let t=Ct.get(e);if(t)return t;let r=import(e).catch(n=>{throw Ct.delete(e),n});return Ct.set(e,r),r}async function eo(e,t,r){if(e)try{await Promise.all(e.cssUrls.map(i=>Zn(i)));let o=await Qn(e.moduleUrl);return Ar(o,r)}catch(o){console.error(`[Fork] Failed to load override for boundary "${e.boundaryId}", falling back to original module.`,o);}let n=await t();return Ar(n,r)}function to(e){function t(r){let{appId:n,moduleOverridesEnabled:o,moduleManifestReady:i,moduleManifestVersion:s,registerBoundary:a,getBoundaryOverride:f,consumeBoundaryAnimation:g}=V(),[c,x]=useState(null),[T,F]=useState(null),v=useRef(null),y=useRef(null),k=useRef(null),C=useRef(false),w=useRef(null),I=useRef(null),$=f(e.id),A=$?`override:${$.id}`:"original",R=e.editorMetadata?JSON.stringify(e.editorMetadata):void 0;if(useEffect(()=>()=>{I.current&&(clearTimeout(I.current),I.current=null),w.current&&(w.current.remove(),w.current=null);},[]),useEffect(()=>{a({id:e.id,exportName:e.exportName,editorMetadata:e.editorMetadata});},[n,a,e.id,e.exportName,R]),useEffect(()=>{if(o&&!i&&!c||y.current===A&&c)return;let h=false;return F(null),eo($,e.original,e.exportName).then(l=>{if(!h){if($?.id&&g(e.id,$.id)&&v.current){let E=_t(v.current);if(E){let S=At(E);S.length>0&&(k.current=S,C.current=true,I.current&&(clearTimeout(I.current),I.current=null),w.current&&w.current.remove(),w.current=xr(E));}}y.current=A,startTransition(()=>{x(()=>l);});}}).catch(l=>{h||F(Yn(l));}),()=>{h=true;}},[g,A,o,i,s,$?.id,$?.moduleUrl,$?.integrity,$?.cssUrls.join("|"),e.exportName,e.original,c]),useEffect(()=>{if(!C.current||!c||!v.current)return;let h=false;return requestAnimationFrame(()=>{requestAnimationFrame(()=>{if(h||!v.current)return;let l=k.current,E=_t(v.current);if(k.current=null,C.current=false,!l||!E){w.current&&(w.current.remove(),w.current=null);return}let S=At(E),u=Fr(l,S),p=Rr(l,S),m=w.current;if(p.length>0&&m){let M=$r(p);I.current=setTimeout(()=>{I.current=null;let z=400;m.animate([{opacity:1},{opacity:0}],{duration:z,fill:"forwards"}),M.animate([{opacity:1},{opacity:0}],{duration:z,fill:"forwards"}),setTimeout(()=>{m.remove(),M.remove(),w.current===m&&(w.current=null),u.length>0&&Pt(u);},z);},3500);}else m&&(m.remove(),w.current===m&&(w.current=null)),u.length>0&&Pt(u);});}),()=>{h=true;}},[c]),T)throw T;return c?jsx("div",{ref:v,style:{display:"contents"},children:jsx(c,{...r})}):jsx(Fragment,{children:e.loading??null})}return t.displayName=`ForkBoundary(${e.id})`,t}function no({slotId:e,title:t,slotLabel:r,examplePrompts:n}){return jsx(Ee,{slotId:e,title:t,slotLabel:r,examplePrompts:n})}
|
|
44
|
+
export{qn as ForkBoundaryUI,vt as ForkButton,Ee as ForkChatInterface,Je as ForkPanel,rn as ForkProvider,hn as ForkSlot,no as ForkUI,Yr as clearCachedManifest,to as forkable,je as loadManifest,Zr as manifestDiffers,Jr as readCachedManifest,ct as registerForkShared,Ft as useBoundaryFork,Rt as useFork,Et as useForkChatPanel,De as usePreviewSession,Xr as writeCachedManifest};
|
package/package.json
CHANGED