@popmelt.com/core 0.31.3 → 0.32.0

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.
Files changed (37) hide show
  1. package/README.md +43 -0
  2. package/claude-plugin/.claude-plugin/plugin.json +1 -1
  3. package/codex-plugin/.codex-plugin/plugin.json +1 -1
  4. package/dist/{ParticipantRuntime-X2ZI2GJF.mjs → ParticipantRuntime-5K4XILTY.mjs} +1 -1
  5. package/dist/SuppliedContext-NURVPZ4L.mjs +2 -0
  6. package/dist/ThreadErrorCard-WZ2UBVWE.mjs +2 -0
  7. package/dist/bridge-entry.mjs +1 -1
  8. package/dist/{browser-runtime-6N65USFN.mjs → browser-runtime-UVEA7O7K.mjs} +1 -1
  9. package/dist/browser.d.mts +2 -2
  10. package/dist/browser.mjs +1 -1
  11. package/dist/{chunk-UJ5PA3SZ.mjs → chunk-67CZ5WTY.mjs} +91 -89
  12. package/dist/{chunk-X3UK5M3S.mjs → chunk-AEOT7B5I.mjs} +1 -1
  13. package/dist/{chunk-JU7D4I76.mjs → chunk-C3VWS5R6.mjs} +2 -2
  14. package/dist/{chunk-ZGERZLB4.mjs → chunk-EUWNUQGJ.mjs} +1 -1
  15. package/dist/chunk-GTQSZVCQ.mjs +334 -0
  16. package/dist/chunk-IKCHOC3U.mjs +0 -0
  17. package/dist/{chunk-SKOSDB5K.mjs → chunk-KHQZYGU3.mjs} +94 -92
  18. package/dist/{chunk-6C4FAOTC.mjs → chunk-UGGB6HDI.mjs} +1 -1
  19. package/dist/{chunk-JGNVTID4.mjs → chunk-VMQD7UGC.mjs} +1 -1
  20. package/dist/cli.mjs +2 -2
  21. package/dist/codex-note-context-VSQVT5ZL.mjs +2 -0
  22. package/dist/{codex-project-JYNETLSG.mjs → codex-project-MKH6TO5W.mjs} +1 -1
  23. package/dist/codex-session-registry-SPRWY2WW.mjs +0 -0
  24. package/dist/{focus-inspection-WPHGCN6Y.mjs → focus-inspection-G72JLJYG.mjs} +1 -1
  25. package/dist/index.d.mts +2 -2
  26. package/dist/index.mjs +1 -1
  27. package/dist/{participantBootstrap-B0lvfCwM.d.mts → participantBootstrap-ClKpD2qC.d.mts} +14 -1
  28. package/dist/{peer-client-STR2FWR4.mjs → peer-client-FJGBXESA.mjs} +1 -1
  29. package/dist/plugin-astro.mjs +1 -1
  30. package/dist/plugin-nuxt.mjs +1 -1
  31. package/dist/plugin-vite.mjs +1 -1
  32. package/dist/server.mjs +1 -1
  33. package/package.json +23 -32
  34. package/dist/ThreadErrorCard-6QN2ECBT.mjs +0 -2
  35. package/dist/chunk-M6LCEEFH.mjs +0 -327
  36. package/dist/codex-note-context-KSRJRH3F.mjs +0 -2
  37. /package/dist/{chunk-WMHM647D.mjs → chunk-4JG6IVUU.mjs} +0 -0
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- import{A as l,b,l as I,m as w,y as k}from"./chunk-SKOSDB5K.mjs";import{readFile as h,realpath as P,mkdir as x,writeFile as E}from"fs/promises";import{createHash as S}from"crypto";import{join as m,resolve as O}from"path";function N(t,e){let r=S("sha256").update(e).digest("hex");return m(t,".popmelt","participant-agents",r+".json")}async function M(t,e){if(e.storeId!==t.storeId)return{ok:!1,body:{status:"writable_store_required"}};if(typeof e.threadId!="string"||!e.threadId||typeof e.text!="string"||!e.text.trim()||e.text.length>8e3)return{ok:!1,body:{status:"invalid_note"}};let r;try{r=await v(t,t.sessionId,!0)}catch(a){if(a.code!=="ENOENT")throw a;return{ok:!1,body:{status:"participant_invitation_required"}}}if(!r)return{ok:!1,body:{status:"enrolled_bridge_required"}};let o=await l(r.endpoint,"/participants/thread-note",{...r.request,method:"POST",signal:AbortSignal.timeout(3e4),body:JSON.stringify({storeId:t.storeId,threadId:e.threadId,reply:e.text,sessionId:t.sessionId,requestId:e.requestId})});return{ok:o.response.ok,body:o.body}}async function v(t,e,r=!1){let o=await h(m(t.projectRoot,".popmelt","participant-bridge.json"),"utf8").then(JSON.parse).catch(c=>{if(c.code!=="ENOENT"||!t.bridgePort)throw c;return{projectId:t.projectId,port:t.bridgePort}});if(o.projectId!==t.projectId||!Number.isInteger(o.port)||o.port<1||o.port>65535)return null;let a={redirect:"error",signal:AbortSignal.timeout(3e3)},p=await l(o,"/status",a);if(!p.response.ok||p.body?.projectId!==t.projectId)return null;let i=N(t.projectRoot,e),n;try{n=JSON.parse(await h(i,"utf8"))}catch(c){if(c.code!=="ENOENT"||!r)throw c;let d=await P(t.projectRoot),u=b(e);if(w(d)!==t.projectId||!u)return null;let s=JSON.parse(await h(m(d,".popmelt","participant-host.json"),"utf8"));if(!(await l(o,"/participants/agent-join",{...a,method:"POST",headers:{"X-Popmelt-Participant-Id":s.participantId,"X-Popmelt-Participant-Token":s.token},body:JSON.stringify({sessionId:e,name:u,headless:!0})})).response.ok)return null;n=JSON.parse(await h(i,"utf8"))}return{endpoint:o,request:{...a,headers:{"X-Popmelt-Participant-Id":n.participantId,"X-Popmelt-Participant-Token":n.token}}}}async function F(t,e,r){let o=[t,...t.mountedStores].find(c=>c.storeId===e.storeId);if(!o||r&&o!==t)return{ok:!1,body:{status:"store_unavailable"}};if(r&&(typeof e.threadId!="string"||!e.threadId))return{ok:!1,body:{status:"thread_required"}};let a=await v(o,t.sessionId,r).catch(c=>{if(c.code==="ENOENT")return null;throw c});if(!a)return{ok:!1,body:{status:"enrolled_bridge_required",message:"Join this project as a Popmelt peer and check that its bridge is running."}};let{endpoint:p,request:i}=a,n=await l(p,r?t.sessionId.startsWith("claude:")?"/participants/link-claude-chat":"/participants/link-codex-chat":"/participants/check-claude-notes",{...i,method:"POST",body:JSON.stringify({sessionId:t.sessionId,...r?{threadId:e.threadId}:{}})});return{ok:n.response.ok,body:n.body}}async function _(t,e,r){if(!r.projectRoot)throw new Error("Participant connections require the active project root");let o=await P(r.projectRoot);if(w(o)!==t.projectId)throw new Error("Participant project does not match");let a=m(o,".popmelt"),p=S("sha256").update(e).digest("hex"),i=async(s,f,g)=>{let j=await l(t,"/participants/"+s,{method:"POST",redirect:"error",headers:{"X-Popmelt-Participant-Id":f.participantId,"X-Popmelt-Participant-Token":f.token},body:JSON.stringify(g),signal:AbortSignal.timeout(9e4)}),y=j.body;if(!j.response.ok||y.error)throw new Error(y.error??"Participant connection unavailable");return y},n,c;try{n=JSON.parse(await h(N(o,e),"utf8"))}catch(s){if(s.code!=="ENOENT")throw s;if(!r.name)return{status:"participant_invitation_required"};let f=JSON.parse(await h(m(a,"participant-host.json"),"utf8")),g=await i("agent-join",f,{sessionId:e,name:r.name});n=g.credential,c=g.participant}if(!r.action){let s=await i("agent-connect",n,{});return{status:"participant_connected",participantId:n.participantId,participant:s.participant??c}}let d=await i("agent-act",n,{action:I(r.action)}),u=d.evidence;if(u?.frame?.image){let s=u.frame.image;if(!/^data:image\/jpeg;base64,[A-Za-z0-9+/=]+$/.test(s)||s.length>7e5)throw new Error("Invalid participant preview");let f=m(a,"artifacts","participant-previews");await x(f,{recursive:!0,mode:448});let g=m(f,p+".jpg");return await E(g,Buffer.from(s.slice(s.indexOf(",")+1),"base64"),{mode:384}),{status:"participant_connected",participant:d.participant,evidence:{...u,frame:{imagePath:g,targets:u.frame.targets}}}}return{status:"participant_connected",participant:d.participant,evidence:d.evidence}}async function C(t,e,r={}){if(k())return{status:"already_managed_by_bridge"};if((await l(t,"/status",{redirect:"error",signal:AbortSignal.timeout(3e3)})).body?.participantSessions)return _(t,e,r);let a=async(c,d)=>{let u=await l(t,`/peers/${c}`,{method:"POST",body:JSON.stringify(d),signal:AbortSignal.timeout(5e4)}),s=u.body;if(!u.response.ok||s?.error)throw new Error(s?.error??"Peer connection unavailable");return s},p=await a("join",{sessionId:e,name:r.name}),i=r.action?await a("act",{token:p.token,clientId:r.clientId,action:I(r.action)}):p,n=i.peer;return{...i.status?{status:i.status}:{},...n?{peer:{...n,state:n.state?{annotations:n.state.annotations,styleModifications:n.state.styleModifications,textModifications:n.state.textModifications,undoDepth:n.state.undoStack.length,redoDepth:n.state.redoStack.length}:null}}:{},...i.evidence?{evidence:i.evidence}:{},clients:p.clients}}async function D(t){let e=c=>{let d=t.indexOf(c);return d>=0?t[d+1]:void 0},r=e("--session");if(!r)throw new Error("Usage: popmelt peer --session <stable-agent-session> [--project-root <active-project>] [--name <your-name>] [--client <canvas-id>] [--action <JSON>]");let o=await P(O(e("--project-root")??process.cwd())),a=JSON.parse(await h(m(o,".popmelt","bridge.lock"),"utf8")),p=w(o),i=await l({port:a.port,projectId:p},"/status",{signal:AbortSignal.timeout(3e3)});if(!i.response.ok||i.body.projectRoot!==o&&!(i.body.participantSessions&&i.body.projectId===p))throw new Error("No matching running project bridge");let n=e("--action");console.log(JSON.stringify(await C({port:a.port,projectId:p},r,{name:e("--name"),projectRoot:o,clientId:e("--client"),action:n?JSON.parse(n):void 0}),null,2))}export{N as a,M as b,v as c,F as d,C as e,D as f};
2
+ import{A as l,b,l as I,m as w,y as k}from"./chunk-KHQZYGU3.mjs";import{readFile as h,realpath as P,mkdir as x,writeFile as E}from"fs/promises";import{createHash as S}from"crypto";import{join as m,resolve as O}from"path";function N(t,e){let r=S("sha256").update(e).digest("hex");return m(t,".popmelt","participant-agents",r+".json")}async function M(t,e){if(e.storeId!==t.storeId)return{ok:!1,body:{status:"writable_store_required"}};if(typeof e.threadId!="string"||!e.threadId||typeof e.text!="string"||!e.text.trim()||e.text.length>8e3)return{ok:!1,body:{status:"invalid_note"}};let r;try{r=await v(t,t.sessionId,!0)}catch(a){if(a.code!=="ENOENT")throw a;return{ok:!1,body:{status:"participant_invitation_required"}}}if(!r)return{ok:!1,body:{status:"enrolled_bridge_required"}};let o=await l(r.endpoint,"/participants/thread-note",{...r.request,method:"POST",signal:AbortSignal.timeout(3e4),body:JSON.stringify({storeId:t.storeId,threadId:e.threadId,reply:e.text,sessionId:t.sessionId,requestId:e.requestId})});return{ok:o.response.ok,body:o.body}}async function v(t,e,r=!1){let o=await h(m(t.projectRoot,".popmelt","participant-bridge.json"),"utf8").then(JSON.parse).catch(c=>{if(c.code!=="ENOENT"||!t.bridgePort)throw c;return{projectId:t.projectId,port:t.bridgePort}});if(o.projectId!==t.projectId||!Number.isInteger(o.port)||o.port<1||o.port>65535)return null;let a={redirect:"error",signal:AbortSignal.timeout(3e3)},p=await l(o,"/status",a);if(!p.response.ok||p.body?.projectId!==t.projectId)return null;let i=N(t.projectRoot,e),n;try{n=JSON.parse(await h(i,"utf8"))}catch(c){if(c.code!=="ENOENT"||!r)throw c;let d=await P(t.projectRoot),u=b(e);if(w(d)!==t.projectId||!u)return null;let s=JSON.parse(await h(m(d,".popmelt","participant-host.json"),"utf8"));if(!(await l(o,"/participants/agent-join",{...a,method:"POST",headers:{"X-Popmelt-Participant-Id":s.participantId,"X-Popmelt-Participant-Token":s.token},body:JSON.stringify({sessionId:e,name:u,headless:!0})})).response.ok)return null;n=JSON.parse(await h(i,"utf8"))}return{endpoint:o,request:{...a,headers:{"X-Popmelt-Participant-Id":n.participantId,"X-Popmelt-Participant-Token":n.token}}}}async function F(t,e,r){let o=[t,...t.mountedStores].find(c=>c.storeId===e.storeId);if(!o||r&&o!==t)return{ok:!1,body:{status:"store_unavailable"}};if(r&&(typeof e.threadId!="string"||!e.threadId))return{ok:!1,body:{status:"thread_required"}};let a=await v(o,t.sessionId,r).catch(c=>{if(c.code==="ENOENT")return null;throw c});if(!a)return{ok:!1,body:{status:"enrolled_bridge_required",message:"Join this project as a Popmelt peer and check that its bridge is running."}};let{endpoint:p,request:i}=a,n=await l(p,r?t.sessionId.startsWith("claude:")?"/participants/link-claude-chat":"/participants/link-codex-chat":"/participants/check-claude-notes",{...i,method:"POST",body:JSON.stringify({sessionId:t.sessionId,...r?{threadId:e.threadId}:{}})});return{ok:n.response.ok,body:n.body}}async function _(t,e,r){if(!r.projectRoot)throw new Error("Participant connections require the active project root");let o=await P(r.projectRoot);if(w(o)!==t.projectId)throw new Error("Participant project does not match");let a=m(o,".popmelt"),p=S("sha256").update(e).digest("hex"),i=async(s,f,g)=>{let j=await l(t,"/participants/"+s,{method:"POST",redirect:"error",headers:{"X-Popmelt-Participant-Id":f.participantId,"X-Popmelt-Participant-Token":f.token},body:JSON.stringify(g),signal:AbortSignal.timeout(9e4)}),y=j.body;if(!j.response.ok||y.error)throw new Error(y.error??"Participant connection unavailable");return y},n,c;try{n=JSON.parse(await h(N(o,e),"utf8"))}catch(s){if(s.code!=="ENOENT")throw s;if(!r.name)return{status:"participant_invitation_required"};let f=JSON.parse(await h(m(a,"participant-host.json"),"utf8")),g=await i("agent-join",f,{sessionId:e,name:r.name});n=g.credential,c=g.participant}if(!r.action){let s=await i("agent-connect",n,{});return{status:"participant_connected",participantId:n.participantId,participant:s.participant??c}}let d=await i("agent-act",n,{action:I(r.action)}),u=d.evidence;if(u?.frame?.image){let s=u.frame.image;if(!/^data:image\/jpeg;base64,[A-Za-z0-9+/=]+$/.test(s)||s.length>7e5)throw new Error("Invalid participant preview");let f=m(a,"artifacts","participant-previews");await x(f,{recursive:!0,mode:448});let g=m(f,p+".jpg");return await E(g,Buffer.from(s.slice(s.indexOf(",")+1),"base64"),{mode:384}),{status:"participant_connected",participant:d.participant,evidence:{...u,frame:{imagePath:g,targets:u.frame.targets}}}}return{status:"participant_connected",participant:d.participant,evidence:d.evidence}}async function C(t,e,r={}){if(k())return{status:"already_managed_by_bridge"};if((await l(t,"/status",{redirect:"error",signal:AbortSignal.timeout(3e3)})).body?.participantSessions)return _(t,e,r);let a=async(c,d)=>{let u=await l(t,`/peers/${c}`,{method:"POST",body:JSON.stringify(d),signal:AbortSignal.timeout(5e4)}),s=u.body;if(!u.response.ok||s?.error)throw new Error(s?.error??"Peer connection unavailable");return s},p=await a("join",{sessionId:e,name:r.name}),i=r.action?await a("act",{token:p.token,clientId:r.clientId,action:I(r.action)}):p,n=i.peer;return{...i.status?{status:i.status}:{},...n?{peer:{...n,state:n.state?{annotations:n.state.annotations,styleModifications:n.state.styleModifications,textModifications:n.state.textModifications,undoDepth:n.state.undoStack.length,redoDepth:n.state.redoStack.length}:null}}:{},...i.evidence?{evidence:i.evidence}:{},clients:p.clients}}async function D(t){let e=c=>{let d=t.indexOf(c);return d>=0?t[d+1]:void 0},r=e("--session");if(!r)throw new Error("Usage: popmelt peer --session <stable-agent-session> [--project-root <active-project>] [--name <your-name>] [--client <canvas-id>] [--action <JSON>]");let o=await P(O(e("--project-root")??process.cwd())),a=JSON.parse(await h(m(o,".popmelt","bridge.lock"),"utf8")),p=w(o),i=await l({port:a.port,projectId:p},"/status",{signal:AbortSignal.timeout(3e3)});if(!i.response.ok||i.body.projectRoot!==o&&!(i.body.participantSessions&&i.body.projectId===p))throw new Error("No matching running project bridge");let n=e("--action");console.log(JSON.stringify(await C({port:a.port,projectId:p},r,{name:e("--name"),projectRoot:o,clientId:e("--client"),action:n?JSON.parse(n):void 0}),null,2))}export{N as a,M as b,v as c,F as d,C as e,D as f};
@@ -1,3 +1,3 @@
1
1
  "use client";
2
- import{f as N}from"./chunk-J4WDYITA.mjs";import{l as W,d as z}from"./chunk-RCVAPQ7X.mjs";import{destroyContext as F,domToCanvas as J,createContext as X}from"modern-screenshot";function A(t,e,n){if(t===null||typeof t=="string"||typeof t=="boolean")return;if(typeof t=="number"){if(!Number.isFinite(t))throw new TypeError(`Comment metadata at ${e} must be finite.`);return}if(typeof t!="object")throw new TypeError(`Comment metadata at ${e} must be JSON-serializable.`);if(n.has(t))throw new TypeError(`Comment metadata at ${e} contains a cycle.`);let r=Object.getPrototypeOf(t);if(!Array.isArray(t)&&r!==Object.prototype&&r!==null)throw new TypeError(`Comment metadata at ${e} must use plain objects and arrays.`);if(n.add(t),Array.isArray(t))t.forEach((i,o)=>A(i,`${e}[${o}]`,n));else for(let[i,o]of Object.entries(t))A(o,`${e}.${i}`,n);n.delete(t)}function q(t){if(t===void 0)return;if(t===null||Array.isArray(t)||typeof t!="object")throw new TypeError("Comment metadata must be a JSON object.");A(t,"meta",new Set);let e=JSON.stringify(t);if(new TextEncoder().encode(e).byteLength>65536)throw new RangeError("Comment metadata exceeds the 65536 byte limit.");return JSON.parse(e)}var S="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",G=1500,Q=5e3,K=24e6,V=16e3,Z=4,_=["position","inset","top","right","bottom","left","z-index","display","visibility","opacity","overflow","overflow-x","overflow-y","box-sizing","box-decoration-break","float","clear","width","min-width","max-width","height","min-height","max-height","margin","margin-top","margin-right","margin-bottom","margin-left","padding","padding-top","padding-right","padding-bottom","padding-left","border","border-width","border-style","border-color","border-top","border-right","border-bottom","border-left","border-radius","outline","outline-offset","box-shadow","background","background-color","background-image","background-size","background-position","background-repeat","background-clip","background-origin","color","font","font-family","font-size","font-style","font-weight","font-stretch","font-variant","line-height","letter-spacing","text-align","text-decoration","text-indent","text-overflow","text-shadow","text-transform","white-space","word-break","overflow-wrap","vertical-align","direction","writing-mode","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","align-content","align-items","align-self","justify-content","justify-items","justify-self","gap","row-gap","column-gap","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-row","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","order","columns","column-count","column-fill","column-rule","column-span","column-width","list-style","list-style-image","list-style-position","list-style-type","object-fit","object-position","aspect-ratio","transform","transform-box","transform-origin","transform-style","perspective","perspective-origin","backface-visibility","clip","clip-path","filter","backdrop-filter","mix-blend-mode","isolation","mask","mask-image","mask-position","mask-repeat","mask-size","content","quotes","counter-increment","counter-reset","appearance","accent-color","caret-color","cursor","pointer-events","fill","fill-opacity","fill-rule","stroke","stroke-width","stroke-opacity"];async function tt(t,e){try{let n=await t();if(n)return n}catch{}return e()}var C=new Map,$=new WeakMap,et=1;function p(){return typeof performance<"u"?performance.now():Date.now()}function R(t){if(t?.debug!==void 0)return t.debug;if(typeof window>"u")return!1;try{return window.localStorage.getItem("popmelt:screenshot-debug")==="true"}catch{return!1}}function nt(t){let e=0,n=0;for(let r of t.querySelectorAll("img[src]"))P(r.currentSrc||r.src)&&(e++,(!r.complete||r.naturalWidth===0)&&n++);return{remoteImages:e,unresolvedRemoteImages:n}}function ot(t){return new Promise((e,n)=>{let r=new FileReader;r.onload=()=>e(String(r.result)),r.onerror=()=>n(r.error??new Error("Asset could not be read")),r.readAsDataURL(t)})}function rt(t,e){let n=null;return async r=>{if(!P(r))return!1;n??(n=Date.now()+t);let i=n-Date.now();if(i<=0)return e(),S;let o=new AbortController,a=setTimeout(()=>o.abort(),i);try{let s=await fetch(r,{cache:"force-cache",mode:"cors",signal:o.signal});if(!s.ok)throw new Error(`Asset returned ${s.status}`);return await ot(await s.blob())}catch{return e(),S}finally{clearTimeout(a)}}}function at(t,e,n){let r=$.get(t);r||(r=et++,$.set(t,r));let i=e.filter(o=>(o.status??"pending")==="pending").map(o=>{let a=o.points[0],s=o.points[o.points.length-1];return`${o.id}:${o.points.length}:${a?.x??""}:${a?.y??""}:${s?.x??""}:${s?.y??""}`}).join("|");return[r,window.location.href,window.innerWidth,window.innerHeight,n?.dpr??window.devicePixelRatio??1,n?.viewportOnly?window.scrollY:"",i].join("::")}function it(t,e,n){let r=Math.min(e,n);return{top:Math.max(0,Math.min(t,n-r)),height:r,annotations:[]}}function P(t){if(typeof window>"u")return!1;try{let e=new URL(t,window.location.href);return e.protocol!=="http:"&&e.protocol!=="https:"?!1:e.origin!==window.location.origin}catch{return!1}}function lt(t){let e=document.createElement("canvas").getContext("2d");return e?(e.fillStyle=t,e.fillStyle):"#888888"}function j(t,e=[],n,r,i=[],o=[],a){let s=new Map,c=[];for(let l of t)if(l.groupId){let m=s.get(l.groupId)||[];m.push(l),s.set(l.groupId,m)}else c.push(l);let u=[];for(let[l,m]of s){let h=m.find(d=>d.type!=="text"),g=m.find(d=>d.type==="text");if(h){let d=h.linkedSelector||g?.linkedSelector,f=g?.imageCount||h.imageCount,w=g?.attachments||h.attachments,y=g?.interactionEpisode||h.interactionEpisode,v=h.pathname||g?.pathname;u.push({id:h.id,type:h.type,instruction:g?.text,...d?{linkedSelector:d}:{},...h.target||g?.target?{target:h.target??g?.target}:{},...v?{pathname:v}:{},elements:h.elements||[],...f?{imageCount:f}:{},...w?.length?{attachments:w}:{},...y?{interactionEpisode:y}:{}})}}for(let l of c)u.push({id:l.id,type:l.type,instruction:l.type==="text"?l.text:void 0,...l.linkedSelector?{linkedSelector:l.linkedSelector}:{},...l.target?{target:l.target}:{},...l.pathname?{pathname:l.pathname}:{},elements:l.elements||[],...l.region?{region:l.region}:{},...l.imageCount?{imageCount:l.imageCount}:{},...l.attachments?.length?{attachments:l.attachments}:{},...l.interactionEpisode?{interactionEpisode:l.interactionEpisode}:{}});return{timestamp:new Date().toISOString(),url:window.location.href,viewport:{width:window.innerWidth,height:window.innerHeight},scrollPosition:{x:window.scrollX,y:window.scrollY},annotations:u,styleModifications:e,...i.length>0?{textModifications:i}:{},...o.length>0?{domModifications:o}:{},...n?{inspectedElement:n}:{},...r&&r.length>0?{spacingTokenChanges:r}:{},...a?{meta:a}:{}}}function st(t){if(!t.points||t.points.length===0)return null;let e=[...t.points,...t.region?.points??[]],n=e.map(i=>i.x),r=e.map(i=>i.y);return{minX:Math.min(...n),minY:Math.min(...r),maxX:Math.max(...n),maxY:Math.max(...r)}}function ct(t,e){if(t.length===0)return[];let n=t.map(l=>({annotation:l,bounds:st(l)})).filter(l=>l.bounds!==null);if(n.length===0)return[];n.sort((l,m)=>l.bounds.minY-m.bounds.minY);let r=Math.min(...n.map(l=>l.bounds.minY)),i=Math.max(...n.map(l=>l.bounds.maxY));if(i-r<=e){let l=(r+i)/2,m=Math.max(0,l-e/2);return[{top:m,bottom:m+e,annotations:t}]}let o=[],a=50,s=Math.max(0,r-a),c=[],u=s;for(let{annotation:l,bounds:m}of n){let h=m.maxY+a;if(h-s<=e)c.push(l),u=Math.max(u,h);else{if(c.length>0){let g=(s+u)/2,d=Math.max(0,g-e/2);o.push({top:d,bottom:d+e,annotations:c})}s=Math.max(0,m.minY-a),c=[l],u=m.maxY+a}}if(c.length>0){let l=(s+u)/2,m=Math.max(0,l-e/2);o.push({top:m,bottom:m+e,annotations:c})}return o}function dt(t){let e=new Map;for(let n of t)if(n.linkedSelector)try{let r=W(n.linkedSelector);if(r){let i=z(r);e.set(n.id,{x:i.left+window.scrollX,y:i.top+window.scrollY,width:i.width,height:i.height})}}catch{}return e}function T(t,e,n,r,i){if(t.save(),t.scale(r,r),i)for(let o of e){let a=i.get(o.id);if(!a)continue;let s=a.y-n;t.fillStyle=o.color,t.globalAlpha=.05,t.fillRect(a.x,s,a.width,a.height),t.globalAlpha=1,t.strokeStyle=o.color,t.lineWidth=1,t.setLineDash([2,4]),t.strokeRect(a.x,s,a.width,a.height),t.setLineDash([])}for(let o of e){let a=o.points.map(s=>({x:s.x,y:s.y-n}));switch(t.strokeStyle=o.color,t.fillStyle=o.color,t.lineWidth=o.strokeWidth,t.lineCap="round",t.lineJoin="round",o.region&&N(t,o.region.points.map(s=>({x:s.x,y:s.y-n})),o.color),o.type){case"freehand":if(a.length<2)break;t.beginPath(),t.moveTo(a[0].x,a[0].y);for(let s=1;s<a.length;s++)t.lineTo(a[s].x,a[s].y);t.stroke();break;case"line":if(a.length<2)break;t.beginPath(),t.moveTo(a[0].x,a[0].y),t.lineTo(a[a.length-1].x,a[a.length-1].y),t.stroke();break;case"rectangle":{if(a.length<2)break;let s=a[0],c=a[a.length-1],u=Math.min(s.x,c.x),l=Math.min(s.y,c.y),m=Math.abs(c.x-s.x),h=Math.abs(c.y-s.y);t.strokeRect(u,l,m,h);break}case"circle":{if(a.length<2)break;let s=a[0],c=a[a.length-1],u=(s.x+c.x)/2,l=(s.y+c.y)/2,m=Math.abs(c.x-s.x)/2,h=Math.abs(c.y-s.y)/2;t.beginPath(),t.ellipse(u,l,m,h,0,0,Math.PI*2),t.stroke();break}case"text":{if(!o.text||a.length<1)break;let s=a[0],c=o.fontSize||16;t.font=`${c}px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif`,t.fillStyle=o.color;let u=(o.imageCount&&o.imageCount>0?`[${o.imageCount} image${o.imageCount>1?"s":""}] ${o.text}`:o.text).split(`
3
- `),l=c*1.2,m=4,h=0;for(let g of u)h=Math.max(h,t.measureText(g).width);t.fillRect(s.x-m,s.y-m,h+m*2,u.length*l+m*2),t.fillStyle="#ffffff",u.forEach((g,d)=>{t.fillText(g,s.x,s.y+c+d*l)});break}}}t.restore()}async function mt(t,e,n=[],r){let i=at(t,n,r),o=C.get(i);if(o)return R(r)&&console.debug("[Screenshot] Reusing in-flight capture",i),o;let a=vt(t,n,r).finally(()=>C.delete(i));return C.set(i,a),a}function ht(){let t=getComputedStyle(document.documentElement).backgroundColor;return t&&t!=="rgba(0, 0, 0, 0)"&&t!=="transparent"?t:"#ffffff"}function ut(t){return t instanceof HTMLElement?t.id==="devtools-canvas"||t.id==="devtools-toolbar"||t.id==="devtools-scrim"?!1:t.dataset.devtools===void 0:!0}function gt(t,e,n,r){return t.length===0?[{top:Math.max(0,Math.min(r,Math.max(0,n-e))),height:Math.min(e,n||e),annotations:[]}]:t.map(i=>{let o=Math.min(e,n||e);return{top:Math.max(0,Math.min(i.top,Math.max(0,n-o))),height:o,annotations:i.annotations}})}function ft(t,e,n){if(t.length===0)return null;let r=Math.min(...t.map(a=>a.top)),i=Math.max(...t.map(a=>a.top+a.height))-r,o=e*i*n*n;return i>V||o>K?null:{top:r,height:i}}async function pt(t,e){let n=[];for(let r of t){let i=Object.getOwnPropertyDescriptor(r.element,"toDataURL");try{Object.defineProperty(r.element,"toDataURL",{configurable:!0,value:()=>r.dataUrl}),n.push(()=>{i?Object.defineProperty(r.element,"toDataURL",i):Reflect.deleteProperty(r.element,"toDataURL")})}catch{}}try{return await e()}finally{for(let r of n.reverse())r()}}async function wt(t,e,n,r,i,o,a,s){let c=Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)>window.innerHeight*Z||t.querySelectorAll("*").length>2500,u=s?await s():[];return pt(u,()=>X(t,{autoDestruct:!1,filter:ut,features:{restoreScrollPosition:!0},onCloneNode:l=>{t===document.body&&(l.style.margin=getComputedStyle(t).margin)},onCloneEachNode:l=>{if(l.nodeType===1&&l.localName==="html"&&l.ownerDocument!==document){let m=l.style;m.overflow="hidden",m.display="inline-block",m.clipPath=`inset(0 round ${m.borderRadius||"0px"})`}},scale:r,backgroundColor:ht(),width:n,height:e.height,style:{transform:`translate(${-window.scrollX}px, ${-e.top}px)`,transformOrigin:"top left"},timeout:i,debug:o,includeStyleProperties:c?[..._]:null,fetchFn:rt(i,()=>{a.remoteAssetFallbacks++}),fetch:{requestInit:{cache:"force-cache"},placeholderImage:S}}))}async function yt(t,e,n){return t.width=n,t.height=e.height,t.style={transform:`translate(${-window.scrollX}px, ${-e.top}px)`,transformOrigin:"top left"},J(t)}async function bt(t,e,n){let r=document.createElement("canvas");r.width=e,r.height=n;let i=r.getContext("2d");if(!i)throw new Error("Canvas context unavailable");if(typeof createImageBitmap=="function"){let s=await createImageBitmap(t);return i.drawImage(s,0,0,e,n),s.close(),r}let o=new Image,a=URL.createObjectURL(t);try{return await new Promise((s,c)=>{o.onload=()=>s(),o.onerror=()=>c(new Error("Native screenshot could not be decoded")),o.src=a}),i.drawImage(o,0,0,e,n),r}finally{URL.revokeObjectURL(a)}}async function L(t,e,n,r,i,o){if(r?.nativeCapture){let u=p();try{let l=await r.nativeCapture({url:window.location.href,clip:{x:window.scrollX,y:t.top,width:e,height:t.height},scale:n});if(o.nativeMs+=p()-u,l)return o.mode=o.renderMs>0||o.contextMs>0?"mixed":"native",bt(l,Math.round(e*n),Math.round(t.height*n))}catch(l){o.nativeMs+=p()-u,R(r)&&console.debug("[Screenshot] Native capture unavailable; using DOM fallback",l)}}let a=await i(),s=p(),c=await yt(a,t,e);return o.renderMs+=p()-s,o.mode=o.mode==="native"?"mixed":"dom",c}function U(t,e,n,r,i,o){let a=document.createElement("canvas");a.width=Math.round(r*i),a.height=Math.round(n.height*i);let s=a.getContext("2d");if(!s)throw new Error("Canvas context unavailable");let c=Math.round((n.top-e)*i);return s.drawImage(t,0,c,a.width,a.height,0,0,a.width,a.height),T(s,n.annotations,n.top,i,o),a}function xt(t){if(t.length===1)return t[0];let e=document.createElement("canvas");e.width=t[0]?.width??0,e.height=t.reduce((i,o)=>i+o.height,0);let n=e.getContext("2d");if(!n)throw new Error("Canvas context unavailable");let r=0;for(let i of t)n.drawImage(i,0,r),r+=i.height;return e}function Mt(t,e="image/webp",n=.8){return new Promise(r=>t.toBlob(r,e,n))}async function vt(t,e,n){let r=p(),i=n?.dpr??(window.devicePixelRatio||1),o=window.innerWidth,a=window.innerHeight,s=Math.max(document.body.scrollHeight,document.documentElement.scrollHeight),c=Math.max(250,n?.mediaTimeoutMs??G),u=R(n),l=e.filter(b=>(b.status??"pending")==="pending"),m=dt(l),h=n?.viewportOnly?[it(window.scrollY,a,s)]:gt(ct(l,a),a,s,window.scrollY),g=nt(t),d={startedAt:r,mode:"dom",mediaTimeoutMs:c,ranges:h.length,...g,remoteAssetFallbacks:0,nativeMs:0,contextMs:0,renderMs:0,compositeMs:0,encodeMs:0};console.log("[Screenshot] Starting capture with",l.length,"active annotations (filtered",e.length-l.length,"captured);",`${h.length} range(s), ${g.remoteImages} remote image(s), ${g.unresolvedRemoteImages} unresolved`);let f=null,w=null,y=ft(h,o,i),v=y??h[0],E=async()=>{if(!f){let b=p();f=wt(t,v,o,i,c,u,d,n?.captureSurfaces).then(x=>(w=x,d.contextMs+=p()-b,x))}return f};try{let b=p(),x;if(y){let M=await L(y,o,i,n,E,d);x=h.map(k=>U(M,y.top,k,o,i,m))}else{x=[];for(let M of h){let k=await L(M,o,i,n,E,d);x.push(U(k,M.top,M,o,i,m))}}let Y=xt(x);d.compositeMs+=p()-b-d.renderMs-d.nativeMs-d.contextMs;let B=p(),I=await Mt(Y);d.encodeMs=p()-B;let O=p()-d.startedAt,H={mode:d.mode,totalMs:Math.round(O),mediaTimeoutMs:d.mediaTimeoutMs,ranges:d.ranges,remoteImages:d.remoteImages,unresolvedRemoteImages:d.unresolvedRemoteImages,remoteAssetFallbacks:d.remoteAssetFallbacks,nativeMs:Math.round(d.nativeMs),contextMs:Math.round(d.contextMs),renderMs:Math.round(d.renderMs),compositeMs:Math.max(0,Math.round(d.compositeMs)),encodeMs:Math.round(d.encodeMs),overBudget:O>Q};return console.log("[Screenshot] Capture complete",JSON.stringify(H)),I?[I]:[]}catch(b){return console.error("[Screenshot] Capture failed:",b),[]}finally{w&&F(w)}}async function D(t){if(t.length===0)return null;if(t.length===1)return t[0];let e=await Promise.all(t.map(s=>new Promise((c,u)=>{let l=new Image;l.onload=()=>c(l),l.onerror=u,l.src=URL.createObjectURL(s)}))),n=e[0].width,r=e.reduce((s,c)=>s+c.height,0),i=document.createElement("canvas");i.width=n,i.height=r;let o=i.getContext("2d");if(!o)return null;let a=0;for(let s of e)o.drawImage(s,0,a),a+=s.height,URL.revokeObjectURL(s.src);return new Promise(s=>{i.toBlob(c=>s(c),"image/webp",.8)})}async function kt(t,e,n,r,i){try{let o=Array.isArray(t)?t:[t];if(o.length===0)return!1;let a=await D(o);if(!a)return!1;let s=a;if(a.type!=="image/png"){let g=new Image,d=URL.createObjectURL(a);await new Promise(w=>{g.onload=()=>w(),g.src=d}),URL.revokeObjectURL(d);let f=document.createElement("canvas");f.width=g.naturalWidth,f.height=g.naturalHeight,f.getContext("2d").drawImage(g,0,0),s=await new Promise(w=>f.toBlob(y=>w(y),"image/png"))}let c={"image/png":s},u=e&&e.length>0,l=n&&n.length>0,m=r&&r.length>0,h=i&&i.length>0;if(u||l||m||h){let g=e?e.filter(d=>(d.status??"pending")==="pending"):[];if(g.length>0||l||m||h){let d=j(g,n||[],void 0,void 0,r||[],i||[]),f=new Blob([JSON.stringify(d,null,2)],{type:"text/plain"});c["text/plain"]=f}}return await navigator.clipboard.write([new ClipboardItem(c)]),!0}catch(o){return console.warn("Clipboard write failed:",o),!1}}export{q as a,tt as b,lt as c,j as d,T as e,mt as f,D as g,kt as h};
2
+ import{f as H}from"./chunk-J4WDYITA.mjs";import{l as W,d as z}from"./chunk-RCVAPQ7X.mjs";import{destroyContext as F,domToCanvas as J,createContext as X}from"modern-screenshot";function A(t,e,n){if(t===null||typeof t=="string"||typeof t=="boolean")return;if(typeof t=="number"){if(!Number.isFinite(t))throw new TypeError(`Comment metadata at ${e} must be finite.`);return}if(typeof t!="object")throw new TypeError(`Comment metadata at ${e} must be JSON-serializable.`);if(n.has(t))throw new TypeError(`Comment metadata at ${e} contains a cycle.`);let r=Object.getPrototypeOf(t);if(!Array.isArray(t)&&r!==Object.prototype&&r!==null)throw new TypeError(`Comment metadata at ${e} must use plain objects and arrays.`);if(n.add(t),Array.isArray(t))t.forEach((i,o)=>A(i,`${e}[${o}]`,n));else for(let[i,o]of Object.entries(t))A(o,`${e}.${i}`,n);n.delete(t)}function q(t){if(t===void 0)return;if(t===null||Array.isArray(t)||typeof t!="object")throw new TypeError("Comment metadata must be a JSON object.");A(t,"meta",new Set);let e=JSON.stringify(t);if(new TextEncoder().encode(e).byteLength>65536)throw new RangeError("Comment metadata exceeds the 65536 byte limit.");return JSON.parse(e)}var C="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",G=1500,Q=5e3,K=24e6,V=16e3,Z=4,_=["position","inset","top","right","bottom","left","z-index","display","visibility","opacity","overflow","overflow-x","overflow-y","box-sizing","box-decoration-break","float","clear","width","min-width","max-width","height","min-height","max-height","margin","margin-top","margin-right","margin-bottom","margin-left","padding","padding-top","padding-right","padding-bottom","padding-left","border","border-width","border-style","border-color","border-top","border-right","border-bottom","border-left","border-radius","outline","outline-offset","box-shadow","background","background-color","background-image","background-size","background-position","background-repeat","background-clip","background-origin","color","font","font-family","font-size","font-style","font-weight","font-stretch","font-variant","line-height","letter-spacing","text-align","text-decoration","text-indent","text-overflow","text-shadow","text-transform","white-space","word-break","overflow-wrap","vertical-align","direction","writing-mode","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","align-content","align-items","align-self","justify-content","justify-items","justify-self","gap","row-gap","column-gap","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-row","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","order","columns","column-count","column-fill","column-rule","column-span","column-width","list-style","list-style-image","list-style-position","list-style-type","object-fit","object-position","aspect-ratio","transform","transform-box","transform-origin","transform-style","perspective","perspective-origin","backface-visibility","clip","clip-path","filter","backdrop-filter","mix-blend-mode","isolation","mask","mask-image","mask-position","mask-repeat","mask-size","content","quotes","counter-increment","counter-reset","appearance","accent-color","caret-color","cursor","pointer-events","fill","fill-opacity","fill-rule","stroke","stroke-width","stroke-opacity"];async function tt(t,e){try{let n=await t();if(n)return n}catch{}return e()}var S=new Map,$=new WeakMap,et=1;function p(){return typeof performance<"u"?performance.now():Date.now()}function R(t){if(t?.debug!==void 0)return t.debug;if(typeof window>"u")return!1;try{return window.localStorage.getItem("popmelt:screenshot-debug")==="true"}catch{return!1}}function nt(t){let e=0,n=0;for(let r of t.querySelectorAll("img[src]"))P(r.currentSrc||r.src)&&(e++,(!r.complete||r.naturalWidth===0)&&n++);return{remoteImages:e,unresolvedRemoteImages:n}}function ot(t){return new Promise((e,n)=>{let r=new FileReader;r.onload=()=>e(String(r.result)),r.onerror=()=>n(r.error??new Error("Asset could not be read")),r.readAsDataURL(t)})}function rt(t,e){let n=null;return async r=>{if(!P(r))return!1;n??(n=Date.now()+t);let i=n-Date.now();if(i<=0)return e(),C;let o=new AbortController,a=setTimeout(()=>o.abort(),i);try{let s=await fetch(r,{cache:"force-cache",mode:"cors",signal:o.signal});if(!s.ok)throw new Error(`Asset returned ${s.status}`);return await ot(await s.blob())}catch{return e(),C}finally{clearTimeout(a)}}}function at(t,e,n){let r=$.get(t);r||(r=et++,$.set(t,r));let i=e.filter(o=>(o.status??"pending")==="pending").map(o=>{let a=o.points[0],s=o.points[o.points.length-1];return`${o.id}:${o.points.length}:${a?.x??""}:${a?.y??""}:${s?.x??""}:${s?.y??""}`}).join("|");return[r,window.location.href,window.innerWidth,window.innerHeight,n?.dpr??window.devicePixelRatio??1,n?.viewportOnly?window.scrollY:"",i].join("::")}function it(t,e,n){let r=Math.min(e,n);return{top:Math.max(0,Math.min(t,n-r)),height:r,annotations:[]}}function P(t){if(typeof window>"u")return!1;try{let e=new URL(t,window.location.href);return e.protocol!=="http:"&&e.protocol!=="https:"?!1:e.origin!==window.location.origin}catch{return!1}}function lt(t){let e=document.createElement("canvas").getContext("2d");return e?(e.fillStyle=t,e.fillStyle):"#888888"}function j(t,e=[],n,r,i=[],o=[],a){let s=new Map,c=[];for(let l of t)if(l.groupId){let m=s.get(l.groupId)||[];m.push(l),s.set(l.groupId,m)}else c.push(l);let u=[];for(let[l,m]of s){let h=m.find(d=>d.type!=="text"),g=m.find(d=>d.type==="text");if(h){let d=h.linkedSelector||g?.linkedSelector,f=g?.imageCount||h.imageCount,w=g?.attachments||h.attachments,y=g?.interactionEpisode||h.interactionEpisode,v=h.pathname||g?.pathname;u.push({id:h.id,type:h.type,instruction:g?.text,...d?{linkedSelector:d}:{},...h.target||g?.target?{target:h.target??g?.target}:{},...v?{pathname:v}:{},elements:h.elements||[],...f?{imageCount:f}:{},...w?.length?{attachments:w}:{},...y?{interactionEpisode:y}:{}})}}for(let l of c)u.push({id:l.id,type:l.type,instruction:l.type==="text"?l.text:void 0,...l.linkedSelector?{linkedSelector:l.linkedSelector}:{},...l.target?{target:l.target}:{},...l.pathname?{pathname:l.pathname}:{},elements:l.elements||[],...l.region?{region:l.region}:{},...l.imageCount?{imageCount:l.imageCount}:{},...l.attachments?.length?{attachments:l.attachments}:{},...l.interactionEpisode?{interactionEpisode:l.interactionEpisode}:{}});return{timestamp:new Date().toISOString(),url:window.location.href,viewport:{width:window.innerWidth,height:window.innerHeight},scrollPosition:{x:window.scrollX,y:window.scrollY},annotations:u,styleModifications:e,...i.length>0?{textModifications:i}:{},...o.length>0?{domModifications:o}:{},...n?{inspectedElement:n}:{},...r&&r.length>0?{spacingTokenChanges:r}:{},...a?{meta:a}:{}}}function st(t){if(!t.points||t.points.length===0)return null;let e=[...t.points,...t.region?.points??[]],n=e.map(i=>i.x),r=e.map(i=>i.y);return{minX:Math.min(...n),minY:Math.min(...r),maxX:Math.max(...n),maxY:Math.max(...r)}}function ct(t,e){if(t.length===0)return[];let n=t.map(l=>({annotation:l,bounds:st(l)})).filter(l=>l.bounds!==null);if(n.length===0)return[];n.sort((l,m)=>l.bounds.minY-m.bounds.minY);let r=Math.min(...n.map(l=>l.bounds.minY)),i=Math.max(...n.map(l=>l.bounds.maxY));if(i-r<=e){let l=(r+i)/2,m=Math.max(0,l-e/2);return[{top:m,bottom:m+e,annotations:t}]}let o=[],a=50,s=Math.max(0,r-a),c=[],u=s;for(let{annotation:l,bounds:m}of n){let h=m.maxY+a;if(h-s<=e)c.push(l),u=Math.max(u,h);else{if(c.length>0){let g=(s+u)/2,d=Math.max(0,g-e/2);o.push({top:d,bottom:d+e,annotations:c})}s=Math.max(0,m.minY-a),c=[l],u=m.maxY+a}}if(c.length>0){let l=(s+u)/2,m=Math.max(0,l-e/2);o.push({top:m,bottom:m+e,annotations:c})}return o}function dt(t){let e=new Map;for(let n of t)if(n.linkedSelector)try{let r=W(n.linkedSelector);if(r){let i=z(r);e.set(n.id,{x:i.left+window.scrollX,y:i.top+window.scrollY,width:i.width,height:i.height})}}catch{}return e}function T(t,e,n,r,i){if(t.save(),t.scale(r,r),i)for(let o of e){let a=i.get(o.id);if(!a)continue;let s=a.y-n;t.fillStyle=o.color,t.globalAlpha=.05,t.fillRect(a.x,s,a.width,a.height),t.globalAlpha=1,t.strokeStyle=o.color,t.lineWidth=1,t.setLineDash([2,4]),t.strokeRect(a.x,s,a.width,a.height),t.setLineDash([])}for(let o of e){let a=o.points.map(s=>({x:s.x,y:s.y-n}));switch(t.strokeStyle=o.color,t.fillStyle=o.color,t.lineWidth=o.strokeWidth,t.lineCap="round",t.lineJoin="round",o.region&&H(t,o.region.points.map(s=>({x:s.x,y:s.y-n})),o.color),o.type){case"freehand":if(a.length<2)break;t.beginPath(),t.moveTo(a[0].x,a[0].y);for(let s=1;s<a.length;s++)t.lineTo(a[s].x,a[s].y);t.stroke();break;case"line":if(a.length<2)break;t.beginPath(),t.moveTo(a[0].x,a[0].y),t.lineTo(a[a.length-1].x,a[a.length-1].y),t.stroke();break;case"rectangle":{if(a.length<2)break;let s=a[0],c=a[a.length-1],u=Math.min(s.x,c.x),l=Math.min(s.y,c.y),m=Math.abs(c.x-s.x),h=Math.abs(c.y-s.y);t.strokeRect(u,l,m,h);break}case"circle":{if(a.length<2)break;let s=a[0],c=a[a.length-1],u=(s.x+c.x)/2,l=(s.y+c.y)/2,m=Math.abs(c.x-s.x)/2,h=Math.abs(c.y-s.y)/2;t.beginPath(),t.ellipse(u,l,m,h,0,0,Math.PI*2),t.stroke();break}case"text":{if(!o.text||a.length<1)break;let s=a[0],c=o.fontSize||16;t.font=`${c}px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif`,t.fillStyle=o.color;let u=(o.imageCount&&o.imageCount>0?`[${o.imageCount} image${o.imageCount>1?"s":""}] ${o.text}`:o.text).split(`
3
+ `),l=c*1.2,m=4,h=0;for(let g of u)h=Math.max(h,t.measureText(g).width);t.fillRect(s.x-m,s.y-m,h+m*2,u.length*l+m*2),t.fillStyle="#ffffff",u.forEach((g,d)=>{t.fillText(g,s.x,s.y+c+d*l)});break}}}t.restore()}async function mt(t,e,n=[],r){let i=at(t,n,r),o=S.get(i);if(o)return R(r)&&console.debug("[Screenshot] Reusing in-flight capture",i),o;let a=vt(t,n,r).finally(()=>S.delete(i));return S.set(i,a),a}function ht(){let t=getComputedStyle(document.documentElement).backgroundColor;return t&&t!=="rgba(0, 0, 0, 0)"&&t!=="transparent"?t:"#ffffff"}function ut(t){return t instanceof HTMLElement?t.id==="devtools-canvas"||t.id==="devtools-toolbar"||t.id==="devtools-scrim"?!1:t.dataset.devtools===void 0:!0}function gt(t,e,n,r){return t.length===0?[{top:Math.max(0,Math.min(r,Math.max(0,n-e))),height:Math.min(e,n||e),annotations:[]}]:t.map(i=>{let o=Math.min(e,n||e);return{top:Math.max(0,Math.min(i.top,Math.max(0,n-o))),height:o,annotations:i.annotations}})}function ft(t,e,n){if(t.length===0)return null;let r=Math.min(...t.map(a=>a.top)),i=Math.max(...t.map(a=>a.top+a.height))-r,o=e*i*n*n;return i>V||o>K?null:{top:r,height:i}}async function pt(t,e){let n=[];for(let r of t){let i=Object.getOwnPropertyDescriptor(r.element,"toDataURL");try{Object.defineProperty(r.element,"toDataURL",{configurable:!0,value:()=>r.dataUrl}),n.push(()=>{i?Object.defineProperty(r.element,"toDataURL",i):Reflect.deleteProperty(r.element,"toDataURL")})}catch{}}try{return await e()}finally{for(let r of n.reverse())r()}}async function wt(t,e,n,r,i,o,a,s){let c=Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)>window.innerHeight*Z||t.querySelectorAll("*").length>2500,u=s?await s():[];return pt(u,()=>X(t,{autoDestruct:!1,filter:ut,features:{restoreScrollPosition:!0},onCloneNode:l=>{t===document.body&&(l.style.margin=getComputedStyle(t).margin)},onCloneEachNode:l=>{if(l.nodeType===1&&l.localName==="html"&&l.ownerDocument!==document){let m=l.style;m.overflow="hidden",m.display="inline-block",m.clipPath=`inset(0 round ${m.borderRadius||"0px"})`}},scale:r,backgroundColor:ht(),width:n,height:e.height,style:{transform:`translate(${-window.scrollX}px, ${-e.top}px)`,transformOrigin:"top left"},timeout:i,debug:o,includeStyleProperties:c?[..._]:null,fetchFn:rt(i,()=>{a.remoteAssetFallbacks++}),fetch:{requestInit:{cache:"force-cache"},placeholderImage:C}}))}async function yt(t,e,n){return t.width=n,t.height=e.height,t.style={transform:`translate(${-window.scrollX}px, ${-e.top}px)`,transformOrigin:"top left"},J(t)}async function bt(t,e,n){let r=document.createElement("canvas");r.width=e,r.height=n;let i=r.getContext("2d");if(!i)throw new Error("Canvas context unavailable");if(typeof createImageBitmap=="function"){let s=await createImageBitmap(t);return i.drawImage(s,0,0,e,n),s.close(),r}let o=new Image,a=URL.createObjectURL(t);try{return await new Promise((s,c)=>{o.onload=()=>s(),o.onerror=()=>c(new Error("Native screenshot could not be decoded")),o.src=a}),i.drawImage(o,0,0,e,n),r}finally{URL.revokeObjectURL(a)}}async function L(t,e,n,r,i,o){if(r?.nativeCapture){let u=p();try{let l=await r.nativeCapture({url:window.location.href,clip:{x:window.scrollX,y:t.top,width:e,height:t.height},scale:n});if(o.nativeMs+=p()-u,l)return o.mode=o.renderMs>0||o.contextMs>0?"mixed":"native",bt(l,Math.round(e*n),Math.round(t.height*n))}catch(l){o.nativeMs+=p()-u,R(r)&&console.debug("[Screenshot] Native capture unavailable; using DOM fallback",l)}}let a=await i(),s=p(),c=await yt(a,t,e);return o.renderMs+=p()-s,o.mode=o.mode==="native"?"mixed":"dom",c}function U(t,e,n,r,i,o){let a=document.createElement("canvas");a.width=Math.round(r*i),a.height=Math.round(n.height*i);let s=a.getContext("2d");if(!s)throw new Error("Canvas context unavailable");let c=Math.round((n.top-e)*i);return s.drawImage(t,0,c,a.width,a.height,0,0,a.width,a.height),T(s,n.annotations,n.top,i,o),a}function xt(t){if(t.length===1)return t[0];let e=document.createElement("canvas");e.width=t[0]?.width??0,e.height=t.reduce((i,o)=>i+o.height,0);let n=e.getContext("2d");if(!n)throw new Error("Canvas context unavailable");let r=0;for(let i of t)n.drawImage(i,0,r),r+=i.height;return e}function Mt(t,e="image/webp",n=.8){return new Promise(r=>t.toBlob(r,e,n))}async function vt(t,e,n){let r=p(),i=n?.dpr??(window.devicePixelRatio||1),o=window.innerWidth,a=window.innerHeight,s=Math.max(document.body.scrollHeight,document.documentElement.scrollHeight),c=Math.max(250,n?.mediaTimeoutMs??G),u=R(n),l=e.filter(b=>(b.status??"pending")==="pending"),m=dt(l),h=n?.viewportOnly?[it(window.scrollY,a,s)]:gt(ct(l,a),a,s,window.scrollY),g=nt(t),d={startedAt:r,mode:"dom",mediaTimeoutMs:c,ranges:h.length,...g,remoteAssetFallbacks:0,nativeMs:0,contextMs:0,renderMs:0,compositeMs:0,encodeMs:0};console.log("[Screenshot] Starting capture with",l.length,"active annotations (filtered",e.length-l.length,"captured);",`${h.length} range(s), ${g.remoteImages} remote image(s), ${g.unresolvedRemoteImages} unresolved`);let f=null,w=null,y=ft(h,o,i),v=y??h[0],E=async()=>{if(!f){let b=p();f=wt(t,v,o,i,c,u,d,n?.captureSurfaces).then(x=>(w=x,d.contextMs+=p()-b,x))}return f};try{let b=p(),x;if(y){let M=await L(y,o,i,n,E,d);x=h.map(k=>U(M,y.top,k,o,i,m))}else{x=[];for(let M of h){let k=await L(M,o,i,n,E,d);x.push(U(k,M.top,M,o,i,m))}}let Y=xt(x);d.compositeMs+=p()-b-d.renderMs-d.nativeMs-d.contextMs;let N=p(),I=await Mt(Y);d.encodeMs=p()-N;let O=p()-d.startedAt,B={mode:d.mode,totalMs:Math.round(O),mediaTimeoutMs:d.mediaTimeoutMs,ranges:d.ranges,remoteImages:d.remoteImages,unresolvedRemoteImages:d.unresolvedRemoteImages,remoteAssetFallbacks:d.remoteAssetFallbacks,nativeMs:Math.round(d.nativeMs),contextMs:Math.round(d.contextMs),renderMs:Math.round(d.renderMs),compositeMs:Math.max(0,Math.round(d.compositeMs)),encodeMs:Math.round(d.encodeMs),overBudget:O>Q};return console.log("[Screenshot] Capture complete",JSON.stringify(B)),I?[I]:[]}catch(b){return console.error("[Screenshot] Capture failed:",b),[]}finally{w&&F(w)}}async function D(t){if(t.length===0)return null;if(t.length===1)return t[0];let e=await Promise.all(t.map(s=>new Promise((c,u)=>{let l=new Image;l.onload=()=>c(l),l.onerror=u,l.src=URL.createObjectURL(s)}))),n=e[0].width,r=e.reduce((s,c)=>s+c.height,0),i=document.createElement("canvas");i.width=n,i.height=r;let o=i.getContext("2d");if(!o)return null;let a=0;for(let s of e)o.drawImage(s,0,a),a+=s.height,URL.revokeObjectURL(s.src);return new Promise(s=>{i.toBlob(c=>s(c),"image/webp",.8)})}async function kt(t,e,n,r,i){try{let o=Array.isArray(t)?t:[t];if(o.length===0)return!1;let a=await D(o);if(!a)return!1;let s=a;if(a.type!=="image/png"){let g=new Image,d=URL.createObjectURL(a);await new Promise(w=>{g.onload=()=>w(),g.src=d}),URL.revokeObjectURL(d);let f=document.createElement("canvas");f.width=g.naturalWidth,f.height=g.naturalHeight,f.getContext("2d").drawImage(g,0,0),s=await new Promise(w=>f.toBlob(y=>w(y),"image/png"))}let c={"image/png":s},u=e&&e.length>0,l=n&&n.length>0,m=r&&r.length>0,h=i&&i.length>0;if(u||l||m||h){let g=e?e.filter(d=>(d.status??"pending")==="pending"):[];if(g.length>0||l||m||h){let d=j(g,n||[],void 0,void 0,r||[],i||[]),f=new Blob([JSON.stringify(d,null,2)],{type:"text/plain"});c["text/plain"]=f}}return await navigator.clipboard.write([new ClipboardItem(c)]),!0}catch(o){return console.warn("Clipboard write failed:",o),!1}}export{q as a,tt as b,lt as c,j as d,T as e,mt as f,D as g,kt as h};
@@ -22,7 +22,7 @@ ${t}`,[o,i]=A({linked:!1,error:"",key:""});return D(()=>{if(i({linked:!1,error:"
22
22
  [data-popmelt-session-connection] .lucide-loader-circle { animation: popmelt-connection-spin .8s linear infinite; }
23
23
  [data-popmelt-session-connection] > svg { flex-shrink: 0; }
24
24
  @media (prefers-reduced-motion: reduce) { [data-popmelt-session-connection] .lucide-loader-circle { animation: none; } }
25
- `}),y("button",{"data-popmelt-session-connection":!0,type:"button",disabled:v,title:Q,"aria-label":`${F}. ${Q}`,"aria-busy":v,onMouseEnter:()=>p(!0),onMouseLeave:()=>p(!1),onFocus:()=>h(!0),onBlur:()=>h(!1),onClick:()=>{se()},style:{...pn(Ee[e],T),cursor:v?"default":"pointer",minWidth:0,maxWidth:"100%"},children:[v||n&&!T?l(Xn,{size:14,strokeWidth:1.5,"aria-hidden":"true"}):T||$?l(Co,{size:14,strokeWidth:1.5,"aria-hidden":"true"}):l(ca,{size:14,strokeWidth:1.5,"aria-hidden":"true"}),y("span",{style:{display:"inline-grid",textAlign:"left",whiteSpace:"nowrap",position:"relative",minWidth:0},children:[z.map(me=>l("span",{"aria-hidden":"true",style:{gridArea:"1 / 1",visibility:"hidden",pointerEvents:"none",overflow:"hidden"},children:me},me)),l("span",{"data-popmelt-connection-label":!0,title:F,style:{position:"absolute",inset:0,overflow:"hidden",textOverflow:"ellipsis"},children:F})]})]})]})}function $n(e){return e<=767}function fn(e){return $n(e)?8:16}function wt(e){let t=fn(e);return e<=480?Math.max(0,e-t*2):Math.min(360,Math.max(0,e-t*2))}var hn=16,Ke=40,Pt=8,va="popmelt-toolbar-snap-position";function mn(e){return e.startsWith("top-")}function An(e){return e.endsWith("-right")}function Yn(e){return e.endsWith("-center")}function xa(){try{let e=localStorage.getItem(va);if(e&&Bc(e))return e}catch{}return"bottom-right"}function wa(e){try{localStorage.setItem(va,e)}catch{}}function Bc(e){return["bottom-right","bottom-center","bottom-left","top-right","top-center","top-left"].includes(e)}function Dc(e,t,n){let r=$n(t),o=fn(t),i=mn(e)?r?`max(${o}px, env(safe-area-inset-top))`:o:r?"auto":n-o-Ke,a=!mn(e)&&r?`max(${o}px, env(safe-area-inset-bottom))`:void 0;return Yn(e)?{position:"fixed",top:i,bottom:a,left:"50%",transform:"translateX(-50%)"}:An(e)?{position:"fixed",top:i,bottom:a,right:r?`max(${o}px, env(safe-area-inset-right))`:o,left:"auto"}:{position:"fixed",top:i,bottom:a,left:r?`max(${o}px, env(safe-area-inset-left))`:o,right:"auto"}}function Wt(e,t,n,r=12){let o=mn(e),i=$n(t),a=fn(t),s=o?{top:i?`calc(max(${a}px, env(safe-area-inset-top)) + ${Ke+r}px)`:a+Ke+r}:{bottom:i?`calc(max(${a}px, env(safe-area-inset-bottom)) + ${Ke+r}px)`:a+Ke+r},c;return Yn(e)?c={left:"50%",transform:"translateX(-50%)"}:An(e)?c={right:i?`max(${a}px, env(safe-area-inset-right))`:a}:c={left:i?`max(${a}px, env(safe-area-inset-left))`:a},{position:"fixed",...s,...c}}function Fc(e,t,n){let r=mn(e),o=$n(t),i=fn(t),a=r?{top:o?`calc(max(${i}px, env(safe-area-inset-top)) + ${Ke+8}px)`:i+Ke+8}:{bottom:o?`calc(max(${i}px, env(safe-area-inset-bottom)) + ${Ke+8}px)`:i+Ke+8},s,c;return Yn(e)?(s={left:"50%",transform:"translateX(-50%)"},c="center"):An(e)?(s={right:o?`max(${i}px, env(safe-area-inset-right))`:i},c="flex-end"):(s={left:o?`max(${i}px, env(safe-area-inset-left))`:i},c="flex-start"),{position:"fixed",...a,...s,zIndex:9999,display:"flex",flexDirection:"column",alignItems:c}}function Vc(e,t=typeof window<"u"?window.innerWidth:1920){let n=mn(e),r=An(e)||Yn(e),o=$n(t),i=fn(t),a=n&&r?i+Ke+Pt:i,s=!n&&r?i+Ke+Pt:i;return{position:"fixed",top:o?`max(${a}px, env(safe-area-inset-top))`:a,right:o?`max(${i}px, env(safe-area-inset-right))`:i,bottom:o?`max(${s}px, env(safe-area-inset-bottom))`:s,width:wt(t)}}function Qc(e,t,n){let r=wt(t),o=fn(t),i=mn(e),a,s;An(e)||Yn(e)?(a=t-o,s=a-r):(s=o,a=s+r);let c=i?o+Ke+Pt:n-o-Ke-Pt;return{left:s,right:a,y:c}}var _c=["top-left","top-center","top-right","bottom-left","bottom-center","bottom-right"],Ca=100,St=200,Mr={surface:null,phase:"visible"};function So({openDelayMs:e=Ca,exitDurationMs:t=St,pinnedSurface:n=null}={}){let[r,o]=A(Mr),i=I(Mr),a=I(null),s=I(n);s.current=n;let c=I(null),d=I(null),u=ie(w=>{i.current.surface===w.surface&&i.current.phase===w.phase||(i.current=w,o(w))},[]),p=ie(()=>{c.current&&(clearTimeout(c.current),c.current=null)},[]),m=ie(()=>{d.current&&(clearTimeout(d.current),d.current=null)},[]),h=ie(w=>{a.current=w,p(),m(),u({surface:w,phase:"visible"})},[m,p,u]),v=ie(w=>{if(!(s.current&&i.current.surface===s.current&&w!==s.current)){if(a.current=w,p(),m(),i.current.surface!==null){u({surface:w,phase:"visible"});return}c.current=setTimeout(()=>{c.current=null,a.current===w&&u({surface:w,phase:"visible"})},e)}},[m,p,e,u]),x=ie(w=>{w!==s.current&&(a.current===w&&(a.current=null),p(),i.current.surface===w&&(m(),u({surface:w,phase:"exiting"}),d.current=setTimeout(()=>{d.current=null,a.current===null&&u(Mr)},t)))},[m,p,t,u]),M=ie(w=>{w&&i.current.surface!==w||(a.current=null,p(),m(),u(Mr))},[m,p,u]);return Ze(()=>{n&&i.current.surface===n&&h(n)},[n,h]),D(()=>()=>{p(),m()},[m,p]),{surface:r.surface,phase:r.phase,enter:v,leave:x,show:h,dismiss:M}}var Zc={version:"0.31.3"},ka=Zc.version;function Io({theme:e,expanded:t,width:n,snapPosition:r,viewport:o,toolbarRef:i,style:a,...s}){let c=Ee[e];return l("div",{...s,ref:i,id:"devtools-toolbar",role:"toolbar","data-popmelt-theme":e,style:{...Dc(r,o.w,o.h),zIndex:9999,display:"flex",alignItems:"center",fontFamily:"ui-monospace, SFMono-Regular, Menlo, Consolas, monospace",cursor:"pointer",overflow:"visible",transition:"none",backgroundColor:c.surface,color:c.primary,colorScheme:e,boxSizing:"border-box",border:t?0:`1px solid ${c.border}`,boxShadow:t?`0 0 0 1px ${c.border}`:void 0,borderRadius:20,padding:t?"4px 8px 4px 4px":0,width:t?n:40,height:40,gap:t?6:0,justifyContent:t?"flex-start":"center",...a}})}function Mo({expanded:e,active:t=!1,color:n,onSettlingChange:r,...o}){return l("button",{type:"button",title:e?"Collapse (\u2318\u2318)":"Open Popmelt (\u2318\u2318)",...o,style:{display:"flex",alignItems:"center",justifyContent:"center",width:e?24:40,height:e?32:40,flexShrink:0,border:"none",background:"none",padding:0,cursor:"pointer"},children:l(fa,{"data-popmelt-logo":!0,active:t,onSettlingChange:r,width:"24",height:"24",viewBox:"0 0 40 40",fill:e||t?n:"none",stroke:e||t?"none":n,strokeWidth:"1",strokeLinejoin:"round",xmlns:"http://www.w3.org/2000/svg"})})}function Sa({theme:e,active:t,busy:n,color:r,onSettlingChange:o,onOpen:i,onCrosshairHover:a,onMouseEnter:s,toolbarRef:c,...d}){let u=I(null);return D(()=>{let p=u.current;if(!p)return;let m=p.querySelector("[data-popmelt-logo]"),h=()=>{p.style.opacity="1",!n&&m&&(m.style.fill=Ee[e].primary,m.style.stroke="none")},v=()=>{p.style.opacity=n?"1":"0.2",!n&&m&&(m.style.fill="none",m.style.removeProperty("stroke"))};return p.addEventListener("mouseenter",h),p.addEventListener("mouseleave",v),()=>{p.removeEventListener("mouseenter",h),p.removeEventListener("mouseleave",v)}},[n,e]),l(Io,{...d,theme:e,expanded:!1,width:40,toolbarRef:p=>{u.current=p,typeof c=="function"?c(p):c&&(c.current=p)},onMouseEnter:s,style:{opacity:n?1:.2,...d.style},children:l(Mo,{expanded:!1,active:t,color:r,onSettlingChange:o,onClick:i,onMouseEnter:()=>a?.(!0),onMouseLeave:()=>a?.(!1)})})}function Ia(){let e=()=>typeof window>"u"?{w:1920,h:1080}:{w:window.visualViewport?.width??window.innerWidth,h:window.visualViewport?.height??window.innerHeight},[t,n]=A(e);return D(()=>{let r=()=>n(e());return window.addEventListener("resize",r),window.visualViewport?.addEventListener("resize",r),()=>{window.removeEventListener("resize",r),window.visualViewport?.removeEventListener("resize",r)}},[]),t}function Ma(e){let t=I(e);t.current=e,D(()=>{let n=0,r=0,o=a=>{if(a.key!=="Meta"&&a.key!=="Control"){r=0;return}let s=Date.now();r=s-n<wr.toolbar.toggleWindowMs?r+1:1,r>=2&&(t.current(),r=0),n=s},i=a=>{a.key!=="Meta"&&a.key!=="Control"&&(r=0)};return window.addEventListener("keydown",o),window.addEventListener("keyup",i),()=>{window.removeEventListener("keydown",o),window.removeEventListener("keyup",i)}},[])}var qc=(e,t)=>({display:"flex",width:t,height:32,borderRadius:16,overflow:"hidden",background:Ee[e].control});function Jc({theme:e,icon:t,menuOpen:n=!1,interactive:r=!0,primaryLabel:o="Cycle annotations",primaryCursor:i=!1,dotColor:a,onPrimary:s,onMenu:c}){let d=Ee[e];return y("div",{"data-popmelt-compact-tool-control":!0,style:{...qc(e,46),pointerEvents:r?void 0:"none"},children:[y("button",{type:"button","aria-label":o,"aria-disabled":!r,tabIndex:r?void 0:-1,onClick:s,style:{width:26,height:32,display:"flex",alignItems:"center",justifyContent:"flex-end",position:"relative",padding:0,border:0,background:"transparent",color:d.primary,cursor:r&&i?"pointer":"default"},children:[t,a&&l("span",{"aria-hidden":"true",style:{position:"absolute",left:16,top:14,width:4,height:4,borderRadius:"50%",background:a,pointerEvents:"none"}})]}),l("button",{type:"button","aria-label":"Choose tool","aria-haspopup":"menu","aria-expanded":n,"aria-disabled":!r,tabIndex:r?void 0:-1,onClick:c,style:{width:20,height:32,display:"flex",alignItems:"center",justifyContent:"center",boxSizing:"border-box",padding:"0 6px 0 2px",border:0,background:"transparent",color:d.mutedStrong,cursor:r?"pointer":"default"},children:l(wo,{size:12,strokeWidth:2,style:{transform:n?"rotate(180deg)":"rotate(0deg)",transition:"transform 120ms ease"}})})]})}function Kc({theme:e,themePreference:t=e,onThemePreferenceChange:n,action:r,logoOnly:o=!1,connection:i,panel:a,deemphasizeControls:s=!1,onCollapse:c,ariaLabel:d="Popmelt admission"}){let[u,p]=A(()=>!o),[m,h]=A(xa),v=I(null),x=So(),{leave:M,dismiss:w}=x,$=x.surface!==null&&x.phase==="visible",E=Ia(),z=()=>{if(u){w(),c?.(),p(!1);return}p(!0),o&&x.show("popmelt-guide")};return Ma(z),D(()=>{let C=v.current;if(!C)return;let L=H=>{H.relatedTarget instanceof Node&&C.contains(H.relatedTarget)||M("popmelt-guide")};return C.addEventListener("pointerout",L),()=>C.removeEventListener("pointerout",L)},[u,M]),u?y("div",{ref:v,style:{display:"contents"},onKeyDown:C=>{C.key==="Escape"&&w()},onBlur:C=>{C.relatedTarget instanceof Node&&v.current?.contains(C.relatedTarget)||M("popmelt-guide")},children:[l("style",{children:`
25
+ `}),y("button",{"data-popmelt-session-connection":!0,type:"button",disabled:v,title:Q,"aria-label":`${F}. ${Q}`,"aria-busy":v,onMouseEnter:()=>p(!0),onMouseLeave:()=>p(!1),onFocus:()=>h(!0),onBlur:()=>h(!1),onClick:()=>{se()},style:{...pn(Ee[e],T),cursor:v?"default":"pointer",minWidth:0,maxWidth:"100%"},children:[v||n&&!T?l(Xn,{size:14,strokeWidth:1.5,"aria-hidden":"true"}):T||$?l(Co,{size:14,strokeWidth:1.5,"aria-hidden":"true"}):l(ca,{size:14,strokeWidth:1.5,"aria-hidden":"true"}),y("span",{style:{display:"inline-grid",textAlign:"left",whiteSpace:"nowrap",position:"relative",minWidth:0},children:[z.map(me=>l("span",{"aria-hidden":"true",style:{gridArea:"1 / 1",visibility:"hidden",pointerEvents:"none",overflow:"hidden"},children:me},me)),l("span",{"data-popmelt-connection-label":!0,title:F,style:{position:"absolute",inset:0,overflow:"hidden",textOverflow:"ellipsis"},children:F})]})]})]})}function $n(e){return e<=767}function fn(e){return $n(e)?8:16}function wt(e){let t=fn(e);return e<=480?Math.max(0,e-t*2):Math.min(360,Math.max(0,e-t*2))}var hn=16,Ke=40,Pt=8,va="popmelt-toolbar-snap-position";function mn(e){return e.startsWith("top-")}function An(e){return e.endsWith("-right")}function Yn(e){return e.endsWith("-center")}function xa(){try{let e=localStorage.getItem(va);if(e&&Bc(e))return e}catch{}return"bottom-right"}function wa(e){try{localStorage.setItem(va,e)}catch{}}function Bc(e){return["bottom-right","bottom-center","bottom-left","top-right","top-center","top-left"].includes(e)}function Dc(e,t,n){let r=$n(t),o=fn(t),i=mn(e)?r?`max(${o}px, env(safe-area-inset-top))`:o:r?"auto":n-o-Ke,a=!mn(e)&&r?`max(${o}px, env(safe-area-inset-bottom))`:void 0;return Yn(e)?{position:"fixed",top:i,bottom:a,left:"50%",transform:"translateX(-50%)"}:An(e)?{position:"fixed",top:i,bottom:a,right:r?`max(${o}px, env(safe-area-inset-right))`:o,left:"auto"}:{position:"fixed",top:i,bottom:a,left:r?`max(${o}px, env(safe-area-inset-left))`:o,right:"auto"}}function Wt(e,t,n,r=12){let o=mn(e),i=$n(t),a=fn(t),s=o?{top:i?`calc(max(${a}px, env(safe-area-inset-top)) + ${Ke+r}px)`:a+Ke+r}:{bottom:i?`calc(max(${a}px, env(safe-area-inset-bottom)) + ${Ke+r}px)`:a+Ke+r},c;return Yn(e)?c={left:"50%",transform:"translateX(-50%)"}:An(e)?c={right:i?`max(${a}px, env(safe-area-inset-right))`:a}:c={left:i?`max(${a}px, env(safe-area-inset-left))`:a},{position:"fixed",...s,...c}}function Fc(e,t,n){let r=mn(e),o=$n(t),i=fn(t),a=r?{top:o?`calc(max(${i}px, env(safe-area-inset-top)) + ${Ke+8}px)`:i+Ke+8}:{bottom:o?`calc(max(${i}px, env(safe-area-inset-bottom)) + ${Ke+8}px)`:i+Ke+8},s,c;return Yn(e)?(s={left:"50%",transform:"translateX(-50%)"},c="center"):An(e)?(s={right:o?`max(${i}px, env(safe-area-inset-right))`:i},c="flex-end"):(s={left:o?`max(${i}px, env(safe-area-inset-left))`:i},c="flex-start"),{position:"fixed",...a,...s,zIndex:9999,display:"flex",flexDirection:"column",alignItems:c}}function Vc(e,t=typeof window<"u"?window.innerWidth:1920){let n=mn(e),r=An(e)||Yn(e),o=$n(t),i=fn(t),a=n&&r?i+Ke+Pt:i,s=!n&&r?i+Ke+Pt:i;return{position:"fixed",top:o?`max(${a}px, env(safe-area-inset-top))`:a,right:o?`max(${i}px, env(safe-area-inset-right))`:i,bottom:o?`max(${s}px, env(safe-area-inset-bottom))`:s,width:wt(t)}}function Qc(e,t,n){let r=wt(t),o=fn(t),i=mn(e),a,s;An(e)||Yn(e)?(a=t-o,s=a-r):(s=o,a=s+r);let c=i?o+Ke+Pt:n-o-Ke-Pt;return{left:s,right:a,y:c}}var _c=["top-left","top-center","top-right","bottom-left","bottom-center","bottom-right"],Ca=100,St=200,Mr={surface:null,phase:"visible"};function So({openDelayMs:e=Ca,exitDurationMs:t=St,pinnedSurface:n=null}={}){let[r,o]=A(Mr),i=I(Mr),a=I(null),s=I(n);s.current=n;let c=I(null),d=I(null),u=ie(w=>{i.current.surface===w.surface&&i.current.phase===w.phase||(i.current=w,o(w))},[]),p=ie(()=>{c.current&&(clearTimeout(c.current),c.current=null)},[]),m=ie(()=>{d.current&&(clearTimeout(d.current),d.current=null)},[]),h=ie(w=>{a.current=w,p(),m(),u({surface:w,phase:"visible"})},[m,p,u]),v=ie(w=>{if(!(s.current&&i.current.surface===s.current&&w!==s.current)){if(a.current=w,p(),m(),i.current.surface!==null){u({surface:w,phase:"visible"});return}c.current=setTimeout(()=>{c.current=null,a.current===w&&u({surface:w,phase:"visible"})},e)}},[m,p,e,u]),x=ie(w=>{w!==s.current&&(a.current===w&&(a.current=null),p(),i.current.surface===w&&(m(),u({surface:w,phase:"exiting"}),d.current=setTimeout(()=>{d.current=null,a.current===null&&u(Mr)},t)))},[m,p,t,u]),M=ie(w=>{w&&i.current.surface!==w||(a.current=null,p(),m(),u(Mr))},[m,p,u]);return Ze(()=>{n&&i.current.surface===n&&h(n)},[n,h]),D(()=>()=>{p(),m()},[m,p]),{surface:r.surface,phase:r.phase,enter:v,leave:x,show:h,dismiss:M}}var Zc={version:"0.32.0"},ka=Zc.version;function Io({theme:e,expanded:t,width:n,snapPosition:r,viewport:o,toolbarRef:i,style:a,...s}){let c=Ee[e];return l("div",{...s,ref:i,id:"devtools-toolbar",role:"toolbar","data-popmelt-theme":e,style:{...Dc(r,o.w,o.h),zIndex:9999,display:"flex",alignItems:"center",fontFamily:"ui-monospace, SFMono-Regular, Menlo, Consolas, monospace",cursor:"pointer",overflow:"visible",transition:"none",backgroundColor:c.surface,color:c.primary,colorScheme:e,boxSizing:"border-box",border:t?0:`1px solid ${c.border}`,boxShadow:t?`0 0 0 1px ${c.border}`:void 0,borderRadius:20,padding:t?"4px 8px 4px 4px":0,width:t?n:40,height:40,gap:t?6:0,justifyContent:t?"flex-start":"center",...a}})}function Mo({expanded:e,active:t=!1,color:n,onSettlingChange:r,...o}){return l("button",{type:"button",title:e?"Collapse (\u2318\u2318)":"Open Popmelt (\u2318\u2318)",...o,style:{display:"flex",alignItems:"center",justifyContent:"center",width:e?24:40,height:e?32:40,flexShrink:0,border:"none",background:"none",padding:0,cursor:"pointer"},children:l(fa,{"data-popmelt-logo":!0,active:t,onSettlingChange:r,width:"24",height:"24",viewBox:"0 0 40 40",fill:e||t?n:"none",stroke:e||t?"none":n,strokeWidth:"1",strokeLinejoin:"round",xmlns:"http://www.w3.org/2000/svg"})})}function Sa({theme:e,active:t,busy:n,color:r,onSettlingChange:o,onOpen:i,onCrosshairHover:a,onMouseEnter:s,toolbarRef:c,...d}){let u=I(null);return D(()=>{let p=u.current;if(!p)return;let m=p.querySelector("[data-popmelt-logo]"),h=()=>{p.style.opacity="1",!n&&m&&(m.style.fill=Ee[e].primary,m.style.stroke="none")},v=()=>{p.style.opacity=n?"1":"0.2",!n&&m&&(m.style.fill="none",m.style.removeProperty("stroke"))};return p.addEventListener("mouseenter",h),p.addEventListener("mouseleave",v),()=>{p.removeEventListener("mouseenter",h),p.removeEventListener("mouseleave",v)}},[n,e]),l(Io,{...d,theme:e,expanded:!1,width:40,toolbarRef:p=>{u.current=p,typeof c=="function"?c(p):c&&(c.current=p)},onMouseEnter:s,style:{opacity:n?1:.2,...d.style},children:l(Mo,{expanded:!1,active:t,color:r,onSettlingChange:o,onClick:i,onMouseEnter:()=>a?.(!0),onMouseLeave:()=>a?.(!1)})})}function Ia(){let e=()=>typeof window>"u"?{w:1920,h:1080}:{w:window.visualViewport?.width??window.innerWidth,h:window.visualViewport?.height??window.innerHeight},[t,n]=A(e);return D(()=>{let r=()=>n(e());return window.addEventListener("resize",r),window.visualViewport?.addEventListener("resize",r),()=>{window.removeEventListener("resize",r),window.visualViewport?.removeEventListener("resize",r)}},[]),t}function Ma(e){let t=I(e);t.current=e,D(()=>{let n=0,r=0,o=a=>{if(a.key!=="Meta"&&a.key!=="Control"){r=0;return}let s=Date.now();r=s-n<wr.toolbar.toggleWindowMs?r+1:1,r>=2&&(t.current(),r=0),n=s},i=a=>{a.key!=="Meta"&&a.key!=="Control"&&(r=0)};return window.addEventListener("keydown",o),window.addEventListener("keyup",i),()=>{window.removeEventListener("keydown",o),window.removeEventListener("keyup",i)}},[])}var qc=(e,t)=>({display:"flex",width:t,height:32,borderRadius:16,overflow:"hidden",background:Ee[e].control});function Jc({theme:e,icon:t,menuOpen:n=!1,interactive:r=!0,primaryLabel:o="Cycle annotations",primaryCursor:i=!1,dotColor:a,onPrimary:s,onMenu:c}){let d=Ee[e];return y("div",{"data-popmelt-compact-tool-control":!0,style:{...qc(e,46),pointerEvents:r?void 0:"none"},children:[y("button",{type:"button","aria-label":o,"aria-disabled":!r,tabIndex:r?void 0:-1,onClick:s,style:{width:26,height:32,display:"flex",alignItems:"center",justifyContent:"flex-end",position:"relative",padding:0,border:0,background:"transparent",color:d.primary,cursor:r&&i?"pointer":"default"},children:[t,a&&l("span",{"aria-hidden":"true",style:{position:"absolute",left:16,top:14,width:4,height:4,borderRadius:"50%",background:a,pointerEvents:"none"}})]}),l("button",{type:"button","aria-label":"Choose tool","aria-haspopup":"menu","aria-expanded":n,"aria-disabled":!r,tabIndex:r?void 0:-1,onClick:c,style:{width:20,height:32,display:"flex",alignItems:"center",justifyContent:"center",boxSizing:"border-box",padding:"0 6px 0 2px",border:0,background:"transparent",color:d.mutedStrong,cursor:r?"pointer":"default"},children:l(wo,{size:12,strokeWidth:2,style:{transform:n?"rotate(180deg)":"rotate(0deg)",transition:"transform 120ms ease"}})})]})}function Kc({theme:e,themePreference:t=e,onThemePreferenceChange:n,action:r,logoOnly:o=!1,connection:i,panel:a,deemphasizeControls:s=!1,onCollapse:c,ariaLabel:d="Popmelt admission"}){let[u,p]=A(()=>!o),[m,h]=A(xa),v=I(null),x=So(),{leave:M,dismiss:w}=x,$=x.surface!==null&&x.phase==="visible",E=Ia(),z=()=>{if(u){w(),c?.(),p(!1);return}p(!0),o&&x.show("popmelt-guide")};return Ma(z),D(()=>{let C=v.current;if(!C)return;let L=H=>{H.relatedTarget instanceof Node&&C.contains(H.relatedTarget)||M("popmelt-guide")};return C.addEventListener("pointerout",L),()=>C.removeEventListener("pointerout",L)},[u,M]),u?y("div",{ref:v,style:{display:"contents"},onKeyDown:C=>{C.key==="Escape"&&w()},onBlur:C=>{C.relatedTarget instanceof Node&&v.current?.contains(C.relatedTarget)||M("popmelt-guide")},children:[l("style",{children:`
26
26
  [data-popmelt-entry-dimmed] [data-popmelt-entry-content],
27
27
  [data-popmelt-entry-dimmed] [data-popmelt-entry-control] > [data-popmelt-logo] {
28
28
  opacity: 1;