@popmelt.com/core 0.28.0 → 0.28.2
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/README.md +4 -2
- package/claude-plugin/.claude-plugin/plugin.json +1 -1
- package/codex-plugin/.codex-plugin/plugin.json +1 -1
- package/dist/{ParticipantRuntime-4NMUTZL3.mjs → ParticipantRuntime-SYIF75DS.mjs} +1 -1
- package/dist/{PopmeltTasteConnectedPane-ZMJXKDPJ.mjs → PopmeltTasteConnectedPane-JO4QR6ZT.mjs} +1 -1
- package/dist/{PreviewRuntime-AZAHK27Q.mjs → PreviewRuntime-JAZLAGQE.mjs} +1 -1
- package/dist/bridge-entry.mjs +1 -1
- package/dist/browser-runtime-7YSJ2DPK.mjs +2 -0
- package/dist/browser.mjs +1 -1
- package/dist/{chunk-JNR6PO2Z.mjs → chunk-264MDJPC.mjs} +25 -25
- package/dist/chunk-A2UXK7AS.mjs +77 -0
- package/dist/{chunk-YBULEE33.mjs → chunk-DZI4H523.mjs} +1 -1
- package/dist/chunk-JQHZFDY5.mjs +2 -0
- package/dist/{chunk-Q5PC5FWC.mjs → chunk-MIGCFNL4.mjs} +3 -3
- package/dist/{chunk-BISCKKOX.mjs → chunk-MP7S5ALD.mjs} +1 -1
- package/dist/{chunk-PKTQWFUA.mjs → chunk-QUNV5PNI.mjs} +1 -1
- package/dist/{chunk-DPSBNNGU.mjs → chunk-SWTSMLHA.mjs} +1 -1
- package/dist/{chunk-WNZFCDVR.mjs → chunk-TP3COBHM.mjs} +25 -25
- package/dist/chunk-XOGBFVWI.mjs +2 -0
- package/dist/cli.mjs +2 -2
- package/dist/{focus-inspection-ZKWDPDRI.mjs → focus-inspection-2FPCQIN2.mjs} +1 -1
- package/dist/index.mjs +1 -1
- package/dist/plugin-astro.mjs +1 -1
- package/dist/plugin-nuxt.mjs +1 -1
- package/dist/plugin-vite.mjs +1 -1
- package/dist/server.mjs +1 -1
- package/package.json +25 -23
- package/dist/browser-runtime-57XUOV3C.mjs +0 -2
- package/dist/chunk-M3MBL5NR.mjs +0 -2
- package/dist/chunk-R5RMIYS5.mjs +0 -77
- package/dist/chunk-YIAZGECE.mjs +0 -2
- /package/dist/{chunk-HPQJKWK5.mjs → chunk-VKFM7ZBT.mjs} +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import{a as S,d as T,f as B,e as F}from"./chunk-3LBOX7HQ.mjs";import{i as H}from"./chunk-
|
|
2
|
+
import{a as S,d as T,f as B,e as F}from"./chunk-3LBOX7HQ.mjs";import{i as H}from"./chunk-XOGBFVWI.mjs";import{d as P}from"./chunk-HGW2U6PD.mjs";async function M(s){return new Promise((e,b)=>{let a=new FileReader;a.onload=()=>e(String(a.result).split(",")[1]),a.onerror=b,a.readAsDataURL(s)})}async function Y(s,e,b,a){let x=Date.now(),C=location.href,r=e.subject?await a.registry.captureFeedback(e.subject):null;if(e.subject&&!r)return{status:"target_unavailable"};let c=r?.elementInfo??H(s),p=t=>{try{let l=document.querySelectorAll(t);return l.length===1&&l[0]===s}catch{return!1}},h=t=>!t.pathname||t.pathname===location.pathname,u=a.state?.annotations.filter(t=>h(t)&&t.interactionEpisode&&(e.subject?t.target?.adapter===e.subject.adapter&&t.target?.key===e.subject.key:!!t.linkedSelector&&p(t.linkedSelector)))??[],i=P(s),w={id:e.key,type:"text",text:"",color:"#0099ff",strokeWidth:2,points:[{x:i.left+window.scrollX,y:i.top+window.scrollY}],timestamp:x,pathname:location.pathname,elements:[c],linkedSelector:c.selector,...e.subject?{target:e.subject}:{},...u.length===1?{interactionEpisode:u[0].interactionEpisode}:{}},E=a.getCommentMeta?S(await a.getCommentMeta({kind:"annotation",purpose:"inspection",timestamp:x,url:location.href,pathname:location.pathname,annotations:[w]})):void 0,I=T([w],a.state?.styleModifications.filter(t=>h(t)&&p(t.selector))??[],c,void 0,a.state?.textModifications.filter(t=>h(t)&&p(t.selector))??[],a.state?.domModifications.filter(t=>h(t)&&p(t.selector))??[],E),g=[];if(b){let[t]=await B(document.body,null,[],{...a.screenshotOptions,viewportOnly:!0,dpr:1});if(t){let l=await createImageBitmap(t);try{let n=document.createElement("canvas");n.width=l.width,n.height=l.height;let m=n.getContext("2d");m.drawImage(l,0,0);let f={...w,text:`Focus: ${c.textContent||c.subjectLabel||c.tagName}`.slice(0,100),points:[{x:Math.max(4,i.left),y:window.scrollY+Math.max(24,i.top-8)}]};F(m,[f],window.scrollY,1,new Map([[w.id,{x:i.left,y:i.top+window.scrollY,width:i.width,height:i.height}]]));let o=await new Promise(d=>n.toBlob(d,"image/png"));o&&g.push({kind:"annotated-viewport",mimeType:o.type,data:await M(o)})}finally{l.close()}if(!r?.crop){let n=await createImageBitmap(t);try{let m=Math.max(0,i.left),f=Math.max(0,i.top),o=Math.min(window.innerWidth,i.right)-m,d=Math.min(window.innerHeight,i.bottom)-f;if(o>0&&d>0){let y=document.createElement("canvas");y.width=Math.ceil(o),y.height=Math.ceil(d);let j=n.width/window.innerWidth,v=n.height/window.innerHeight;y.getContext("2d").drawImage(n,m*j,f*v,o*j,d*v,0,0,o,d);let k=await new Promise(A=>y.toBlob(A,"image/png"));k&&g.push({kind:"element",mimeType:k.type,data:await M(k)})}}finally{n.close()}}}r?.crop&&g.push({kind:"subject",mimeType:r.crop.type,data:await M(r.crop)})}return!s.isConnected||location.href!==C?{status:"target_unavailable"}:{status:"ok",targetKey:e.key,focusCapturedAt:e.capturedAt,capturedAt:x,feedback:I,images:g,warning:r?.warning,evidenceTime:"Live inspection of the referenced target, not a historical screenshot of the utterance.",actionHistory:u.length===1?"Existing recorded episode; inspection did not submit or modify it.":u.length>1?"Multiple matching episodes; none selected automatically.":"No unambiguous recorded episode for this target."}}export{Y as inspectFocusElement};
|
package/dist/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
export{b as PopmeltProvider}from"./chunk-
|
|
2
|
+
export{b as PopmeltProvider}from"./chunk-264MDJPC.mjs";import"./chunk-MIGCFNL4.mjs";import"./chunk-JQHZFDY5.mjs";export{a as isPopmeltPreview}from"./chunk-EX63NVDN.mjs";import"./chunk-N2ZEZCHO.mjs";export{b as usePopmelt}from"./chunk-J3UIBBU2.mjs";import"./chunk-3LBOX7HQ.mjs";import"./chunk-QUNV5PNI.mjs";import"./chunk-A2UXK7AS.mjs";import"./chunk-MP7S5ALD.mjs";import"./chunk-XTOCFTVW.mjs";import"./chunk-LVEMYZOA.mjs";import"./chunk-XOGBFVWI.mjs";import"./chunk-HGW2U6PD.mjs";
|
package/dist/plugin-astro.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as o}from"./chunk-
|
|
1
|
+
import{a as o}from"./chunk-DZI4H523.mjs";import"./chunk-VKFM7ZBT.mjs";import"./chunk-NOHXTT24.mjs";import{fileURLToPath as d}from"url";function c(t={}){return{name:"popmelt",hooks:{"astro:config:setup"({command:r,config:i,updateConfig:n,injectScript:p}){if(r!=="dev")return;let{client:e=!0,multiplayer:a=!1,...s}=t;n({vite:{plugins:[o({...s,projectRoot:t.projectRoot??d(i.root)})],optimizeDeps:{include:e?["react","react/jsx-runtime","react/jsx-dev-runtime","react-dom","react-dom/client","lucide-react"]:[]}}}),p("page",e?l(a):`
|
|
2
2
|
import { bridgeUrl, projectId } from 'virtual:popmelt/bridge';
|
|
3
3
|
if (bridgeUrl) window.__POPMELT_BRIDGE_URL__ = bridgeUrl;
|
|
4
4
|
if (projectId) window.__POPMELT_PROJECT_ID__ = projectId;
|
package/dist/plugin-nuxt.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as s,b as l}from"./chunk-
|
|
1
|
+
import{a as s,b as l}from"./chunk-VKFM7ZBT.mjs";import{b as i}from"./chunk-NOHXTT24.mjs";import{addPluginTemplate as d,defineNuxtModule as m}from"nuxt/kit";var a=m({meta:{name:"@popmelt.com/core/nuxt",configKey:"popmelt"},async setup(o,e){if(!e.options.dev)return;let n={config:{server:e.options.devServer},middlewares:{use(){}}},t=await s({...o,projectRoot:o.projectRoot??e.options.rootDir},n,3e3);if(t.port===null)return;e.hook("vite:extend",({config:p})=>{p.optimizeDeps??={},p.optimizeDeps.include=[...new Set([...p.optimizeDeps.include??[],"react","react/jsx-runtime","react/jsx-dev-runtime","react-dom","react-dom/client","lucide-react"])]});let r=await l(t,n),u=r?i(r):void 0;e.hook("close",async()=>{u?.(),await r?.release()}),d({filename:"popmelt.client.mjs",mode:"client",getContents:()=>`import { defineNuxtPlugin } from '#app';
|
|
2
2
|
export default defineNuxtPlugin((nuxtApp) => {
|
|
3
3
|
let disposed = false;
|
|
4
4
|
let mounting;
|
package/dist/plugin-vite.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a}from"./chunk-
|
|
1
|
+
import{a}from"./chunk-DZI4H523.mjs";import"./chunk-VKFM7ZBT.mjs";import"./chunk-NOHXTT24.mjs";export{a as popmelt};
|
package/dist/server.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as $,b as v,c as ee,d as te,e as re,f as oe,g as M,h as B,i as L,j as H}from"./chunk-
|
|
1
|
+
import{a as $,b as v,c as ee,d as te,e as re,f as oe,g as M,h as B,i as L,j as H}from"./chunk-TP3COBHM.mjs";import{a as X,b as Z}from"./chunk-GL4I4MI6.mjs";import"./chunk-QXVMGZFP.mjs";import{a as J,b as U}from"./chunk-NOHXTT24.mjs";import{spawn as Pe}from"child_process";import{closeSync as ye,openSync as _e}from"fs";import{appendFile as Ee,mkdir as Te,readFile as Oe,realpath as Ie}from"fs/promises";import{dirname as Se,join as A}from"path";import{fileURLToPath as Re}from"url";import{spawn as ne}from"child_process";import{mkdtemp as ie,readFile as ae,rm as se}from"fs/promises";import{tmpdir as ce}from"os";import{join as G}from"path";import V from"ws";async function F(e,t){let c=Date.now()+25e3;for(;Date.now()<c;){let r=await e();if(r)return r;await new Promise(i=>setTimeout(i,100))}throw new Error(`Timed out waiting for ${t}`)}function pe(e){let t=new URL(e);if(t.protocol!=="http:"||!["localhost","127.0.0.1"].includes(t.hostname)||t.username||t.password||t.hash||t.search)throw new Error("Managed participants require an explicit local app URL");return async c=>{let r=await ie(G(ce(),"popmelt-participant-")),i=ne(process.env.CHROME_PATH??(process.platform==="darwin"?"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome":"google-chrome"),["--headless=new","--no-first-run","--no-default-browser-check","--remote-debugging-address=127.0.0.1","--remote-debugging-port=0","--window-size=1440,1000",`--user-data-dir=${r}`,"about:blank"],{stdio:["ignore","ignore","pipe"]}),h,_="",a,d=!1,f=0,l=new Map;i.on("error",o=>{h=o}),i.stderr.on("data",o=>{_=(_+o).slice(-4e3)});let E=()=>{for(let o of l.values())clearTimeout(o.timer),o.reject(new Error("Participant browser disconnected"));l.clear()},n=async()=>{if(!d){if(d=!0,E(),a?.close(),i.pid&&i.exitCode===null&&i.signalCode===null){let o=new Promise(I=>i.once("exit",()=>I()));i.kill("SIGTERM");let T=setTimeout(()=>i.kill("SIGKILL"),3e3);await o,clearTimeout(T)}await se(r,{recursive:!0,force:!0})}};try{let o=await F(async()=>{if(h)throw h;if(i.exitCode!==null||i.signalCode!==null)throw new Error(`Participant browser exited: ${_}`);return ae(G(r,"DevToolsActivePort"),"utf8").then(p=>p.split(`
|
|
2
2
|
`)[0]).catch(()=>null)},"participant browser startup"),D=(await(await fetch(`http://127.0.0.1:${o}/json/list`,{signal:AbortSignal.timeout(3e3)})).json()).find(p=>p.type==="page");if(!D)throw new Error("Participant browser has no page");a=new V(D.webSocketDebuggerUrl,{handshakeTimeout:5e3}),await new Promise((p,s)=>{a.once("open",p),a.once("error",s)}),a.on("close",E),a.on("error",E),a.on("message",p=>{let s=JSON.parse(p.toString()),u=l.get(s.id);u&&(l.delete(s.id),clearTimeout(u.timer),s.error?u.reject(new Error(s.error.message??"Participant browser request failed")):u.resolve(s.result))});let P=(p,s={})=>new Promise((u,O)=>{if(d||a?.readyState!==V.OPEN){O(new Error("Participant browser is closed"));return}let g=++f,R=setTimeout(()=>{l.delete(g),O(new Error(`Participant browser timed out: ${p}. Action was not retried.`))},35e3);l.set(g,{resolve:u,reject:O,timer:R}),a.send(JSON.stringify({id:g,method:p,params:s}))}),y=async(p,s=!1)=>{let u=await P("Runtime.evaluate",{expression:p,userGesture:s,awaitPromise:!0,returnByValue:!0});if(u.exceptionDetails)throw new Error("Participant action failed: "+JSON.stringify(u.exceptionDetails));return u.result?.value};await P("Page.enable"),await P("Runtime.enable");let Y=(await P("Page.getFrameTree")).frameTree.frame.id,S=new Set,b=!1;await P("Runtime.addBinding",{name:"__popmeltCapture"}),a.on("message",p=>{let s=JSON.parse(p.toString());if(s.method==="Runtime.executionContextCreated"){let w=s.params.context;w.auxData?.isDefault&&w.auxData.frameId===Y&&S.add(w.id)}if(s.method==="Runtime.executionContextDestroyed"&&S.delete(s.params.executionContextId),s.method==="Runtime.executionContextsCleared"&&S.clear(),s.method!=="Runtime.bindingCalled"||s.params.name!=="__popmeltCapture"||!S.has(s.params.executionContextId))return;let u=s.params.executionContextId,O=s.params.payload;if(O.length>22e4)return;let g;try{g=JSON.parse(O)}catch{return}if(!Number.isSafeInteger(g.id)||!Array.isArray(g.selectors)||g.selectors.length>200||g.selectors.some(w=>typeof w!="string"||w.length>1024))return;let R=w=>P("Runtime.evaluate",{contextId:u,expression:`window.__POPMELT_CAPTURE_DELIVER__?.(${g.id},${JSON.stringify(w)})`}).catch(()=>{});if(b){R(null);return}b=!0,(async()=>{try{if(!await y(`location.origin + location.pathname === ${JSON.stringify(t.href)}`))return null;let w=await y(`window.__POPMELT_AGENT_VIEW__.geometry(${JSON.stringify(g.selectors)})`),m=w.clip;if(![m.x,m.y,m.width,m.height].every(Number.isFinite)||m.x<0||m.y<0||m.width<=0||m.height<=0||m.width>4096||m.height>4096)return null;await y("window.__POPMELT_CAPTURE_CHROME__ = [...document.querySelectorAll('[data-popmelt-top-layer-host]')].map(element => [element, element.style.opacity]); window.__POPMELT_CAPTURE_CHROME__.forEach(([element]) => element.style.opacity = '0');");try{let C=await P("Page.captureScreenshot",{format:"jpeg",quality:80,captureBeyondViewport:!0,clip:{...m,scale:Math.min(1,1280/Math.max(m.width,m.height))}});return typeof C.data!="string"||C.data.length>5e5?null:{image:"data:image/jpeg;base64,"+C.data,targets:w.targets}}finally{await y("window.__POPMELT_CAPTURE_CHROME__?.forEach(([element, opacity]) => element.style.opacity = opacity); delete window.__POPMELT_CAPTURE_CHROME__;").catch(()=>{})}}catch{return null}})().then(R).finally(()=>{b=!1})}),await P("Page.addScriptToEvaluateOnNewDocument",{source:`if (location.origin + location.pathname === ${JSON.stringify(t.href)}) {
|
|
3
3
|
window.__POPMELT_AGENT_CREDENTIAL__ = ${JSON.stringify(c)};
|
|
4
4
|
const waiting = new Map(); let id = 0;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@popmelt.com/core",
|
|
3
|
-
"version": "0.28.
|
|
3
|
+
"version": "0.28.2",
|
|
4
4
|
"description": "A tiny, powerful design layer for humans and AI",
|
|
5
5
|
"license": "PolyForm-Shield-1.0.0",
|
|
6
6
|
"author": "Popmelt <reb@popmelt.com> (https://popmelt.com)",
|
|
@@ -24,9 +24,30 @@
|
|
|
24
24
|
"popmelt": "dist/cli.mjs"
|
|
25
25
|
},
|
|
26
26
|
"sideEffects": false,
|
|
27
|
+
"packageManager": "pnpm@9.12.0",
|
|
27
28
|
"engines": {
|
|
28
29
|
"node": ">=18.0.0"
|
|
29
30
|
},
|
|
31
|
+
"scripts": {
|
|
32
|
+
"build": "tsup",
|
|
33
|
+
"clean": "git clean -xdf .turbo node_modules dist",
|
|
34
|
+
"format": "prettier --check \"**/*.{ts,tsx}\"",
|
|
35
|
+
"lint": "eslint . && node scripts/check-eslint-suppressions.mjs",
|
|
36
|
+
"pack:smoke": "node scripts/pack-smoke.mjs",
|
|
37
|
+
"peer:smoke": "node scripts/peer-compat-smoke.mjs",
|
|
38
|
+
"vue:smoke": "pnpm run build && node scripts/vue-install-smoke.mjs",
|
|
39
|
+
"nuxt:smoke": "pnpm run build && node scripts/nuxt-install-smoke.mjs",
|
|
40
|
+
"astro:smoke": "pnpm run build && node scripts/framework-install-smoke.mjs astro",
|
|
41
|
+
"svelte:smoke": "pnpm run build && node scripts/framework-install-smoke.mjs svelte && node scripts/framework-install-smoke.mjs sveltekit",
|
|
42
|
+
"prepublishOnly": "pnpm run verify",
|
|
43
|
+
"test": "vitest run",
|
|
44
|
+
"test:coverage": "vitest run --coverage.enabled",
|
|
45
|
+
"test:browser": "pnpm run build && tsc --noEmit -p tsconfig.browser.json && vitest run --config vitest.browser.config.ts",
|
|
46
|
+
"test:browser:mutation": "node e2e/check-lifecycle-mutation.mjs",
|
|
47
|
+
"test:watch": "vitest",
|
|
48
|
+
"typecheck": "tsc --noEmit --incremental false",
|
|
49
|
+
"verify": "pnpm run typecheck && pnpm run format && pnpm run lint && pnpm run test:coverage && pnpm run build && pnpm run pack:smoke"
|
|
50
|
+
},
|
|
30
51
|
"exports": {
|
|
31
52
|
".": {
|
|
32
53
|
"types": "./dist/index.d.mts",
|
|
@@ -132,6 +153,7 @@
|
|
|
132
153
|
},
|
|
133
154
|
"devDependencies": {
|
|
134
155
|
"nuxt": "4.5.2",
|
|
156
|
+
"@kit/eslint-config": "workspace:^",
|
|
135
157
|
"@react-three/fiber": "9.7.0",
|
|
136
158
|
"@tanstack/react-router": "1.120.5",
|
|
137
159
|
"@types/react": "19.1.0",
|
|
@@ -155,26 +177,6 @@
|
|
|
155
177
|
"vite": "7.3.6",
|
|
156
178
|
"vitest": "3.2.4",
|
|
157
179
|
"vue": "3.5.42",
|
|
158
|
-
"vue-router": "5.3.1"
|
|
159
|
-
"@kit/eslint-config": "^0.2.0"
|
|
160
|
-
},
|
|
161
|
-
"scripts": {
|
|
162
|
-
"build": "tsup",
|
|
163
|
-
"clean": "git clean -xdf .turbo node_modules dist",
|
|
164
|
-
"format": "prettier --check \"**/*.{ts,tsx}\"",
|
|
165
|
-
"lint": "eslint . && node scripts/check-eslint-suppressions.mjs",
|
|
166
|
-
"pack:smoke": "node scripts/pack-smoke.mjs",
|
|
167
|
-
"peer:smoke": "node scripts/peer-compat-smoke.mjs",
|
|
168
|
-
"vue:smoke": "pnpm run build && node scripts/vue-install-smoke.mjs",
|
|
169
|
-
"nuxt:smoke": "pnpm run build && node scripts/nuxt-install-smoke.mjs",
|
|
170
|
-
"astro:smoke": "pnpm run build && node scripts/framework-install-smoke.mjs astro",
|
|
171
|
-
"svelte:smoke": "pnpm run build && node scripts/framework-install-smoke.mjs svelte && node scripts/framework-install-smoke.mjs sveltekit",
|
|
172
|
-
"test": "vitest run",
|
|
173
|
-
"test:coverage": "vitest run --coverage.enabled",
|
|
174
|
-
"test:browser": "pnpm run build && tsc --noEmit -p tsconfig.browser.json && vitest run --config vitest.browser.config.ts",
|
|
175
|
-
"test:browser:mutation": "node e2e/check-lifecycle-mutation.mjs",
|
|
176
|
-
"test:watch": "vitest",
|
|
177
|
-
"typecheck": "tsc --noEmit --incremental false",
|
|
178
|
-
"verify": "pnpm run typecheck && pnpm run format && pnpm run lint && pnpm run test:coverage && pnpm run build && pnpm run pack:smoke"
|
|
180
|
+
"vue-router": "5.3.1"
|
|
179
181
|
}
|
|
180
|
-
}
|
|
182
|
+
}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import{b as m,a as i}from"./chunk-JNR6PO2Z.mjs";import"./chunk-Q5PC5FWC.mjs";import"./chunk-M3MBL5NR.mjs";import"./chunk-EX63NVDN.mjs";import"./chunk-N2ZEZCHO.mjs";import"./chunk-J3UIBBU2.mjs";import"./chunk-3LBOX7HQ.mjs";import"./chunk-PKTQWFUA.mjs";import"./chunk-R5RMIYS5.mjs";import"./chunk-BISCKKOX.mjs";import"./chunk-XTOCFTVW.mjs";import"./chunk-LVEMYZOA.mjs";import"./chunk-YIAZGECE.mjs";import"./chunk-HGW2U6PD.mjs";import{createElement as p}from"react";import{createRoot as e}from"react-dom/client";function n(o,t){let r=e(o);return r.render(p(m,t)),()=>{r.unmount(),i()}}export{n as mountBrowserRuntime};
|
package/dist/chunk-M3MBL5NR.mjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import{a as y,i as S}from"./chunk-YIAZGECE.mjs";function h(e){return Array.from(e,t=>{if(t==='"'||t==="\\")return`\\${t}`;let r=t.codePointAt(0);return r<32||r===127?`\\${r.toString(16)} `:t}).join("")}function f(e){return`[data-popmelt-subject-adapter="${h(e.adapter)}"][data-popmelt-subject-key="${h(e.key)}"]`}function g(e){let t=e?.getAttribute("data-popmelt-subject-adapter"),r=e?.getAttribute("data-popmelt-subject-key");return t&&r?{adapter:t,key:r}:void 0}function d(e,t){let r=!1;e.dataset.popmeltSubjectLabel!==t.label&&(e.dataset.popmeltSubjectLabel=t.label,r=!0);let{left:a,top:s,width:i,height:n}=t.bounds,u=l=>`${Math.round(l*2)/2}px`,b={left:u(a),top:u(s),width:u(Math.max(0,i)),height:u(Math.max(0,n))};for(let[l,c]of Object.entries(b)){let m=l;e.style[m]!==c&&(e.style[m]=c,r=!0)}let o=t.surfaceBounds,j={popmeltSubjectSurfaceLeft:o?String(o.left):void 0,popmeltSubjectSurfaceTop:o?String(o.top):void 0,popmeltSubjectSurfaceWidth:o?String(o.width):void 0,popmeltSubjectSurfaceHeight:o?String(o.height):void 0};for(let[l,c]of Object.entries(j))c===void 0?l in e.dataset&&(delete e.dataset[l],r=!0):e.dataset[l]!==c&&(e.dataset[l]=c,r=!0);let p=t.outline?.map(l=>`${l.x},${l.y}`).join(" ");return p?e.dataset.popmeltSubjectOutline!==p&&(e.dataset.popmeltSubjectOutline=p,r=!0):e.dataset.popmeltSubjectOutline!==void 0&&(delete e.dataset.popmeltSubjectOutline,r=!0),r}var v=class{constructor(e){this.adapters=e,this.projections=new Map,this.frameListeners=new Set,this.frame=null,this.lastProjectionFrameTime=0,this.adapterUnsubscribes=e.flatMap(t=>{let r=t.subscribe?.(()=>{for(let a of this.frameListeners)a()});return r?[r]:[]})}async whenReady(){await Promise.all(this.adapters.map(e=>e.whenReady?.()))}hitTest(e){return this.hitTestAll(e)[0]??null}hitTestAll(e){for(let t=this.adapters.length-1;t>=0;t-=1){let r=this.adapters[t];if(!r)continue;let a=(r.hitTestAll?.(e)??[r.hitTest(e)]).filter(s=>!!s).map(s=>this.project(r,s));if(a.length>0)return a}return[]}resolve(e){let t=this.adapters.find(a=>a.id===e.adapter);if(!t)return null;let r=t.resolve(e.key);return r?this.project(t,r):null}restore(e,t){let r=this.adapters.find(s=>s.id===e.adapter),a=r?.restoreSubject?.(e.key,t);return r&&a?this.project(r,a):null}async captureFeedback(e){let t=this.resolve(e);if(!t)return null;let{adapter:r,subject:a}=t,s={...t.elementInfo};if(a.sourceElement&&(s.sourceElement={...S(a.sourceElement),selector:y(a.sourceElement)}),!r.captureSubject)return{elementInfo:s};try{let i=await r.captureSubject(e.key);return i?{elementInfo:s,crop:i}:{elementInfo:s,warning:"Object crop unavailable; use the page screenshot and image coordinates."}}catch{return{elementInfo:s,warning:"Object crop unavailable (the image may block canvas access via CORS); use the page screenshot and image coordinates."}}}beginCreate(e){for(let t=this.adapters.length-1;t>=0;t-=1){let r=this.adapters[t],a=r?.beginCreate?.(e);if(r&&a)return{adapter:r,session:a}}return null}rename(e,t){let r=this.adapters.find(s=>s.id===e.adapter),a=r?.renameSubject?.(e.key,t);return r&&a?this.project(r,a):null}updateBounds(e,t){let r=this.adapters.find(s=>s.id===e.adapter),a=r?.updateSubjectBounds?.(e.key,t);return r&&a?this.project(r,a):null}updateTrackingAnchors(e,t){let r=this.adapters.find(s=>s.id===e.adapter),a=r?.updateSubjectTrackingAnchors?.(e.key,t);return r&&a?this.project(r,a):null}promote(e){let t=this.adapters.find(a=>a.id===e.adapter),r=t?.promoteSubject?.(e.key);return t&&r?this.project(t,r):null}remove(e){this.adapters.find(t=>t.id===e.adapter)?.removeSubject?.(e.key)}async captureSurfaces(){return(await Promise.all(this.adapters.map(async e=>e.captureSurfaces?.()??[]))).flat()}subscribeFrame(e){return this.frameListeners.add(e),()=>this.frameListeners.delete(e)}destroy(){this.frame!==null&&cancelAnimationFrame(this.frame),this.frame=null;for(let e of this.projections.values())e.element.remove();this.projections.clear();for(let e of this.adapterUnsubscribes)e();this.frameListeners.clear()}project(e,t){let r={adapter:e.id,key:t.key},a=`${e.id}\0${t.key}`,s=this.projections.get(a);if(s)return s.subject=t,s.elementInfo=this.elementInfo(e,t,s.selector),d(s.element,t),s;let i=f(r),n=document.createElement("div");n.dataset.popmeltSubjectAdapter=e.id,n.dataset.popmeltSubjectKey=t.key,n.dataset.popmeltSubjectLabel=t.label,n.dataset.popmeltSubjectProjection="true",n.setAttribute("aria-hidden","true"),Object.assign(n.style,{position:"fixed",pointerEvents:"none",opacity:"0",zIndex:"-1"}),d(n,t),document.body.appendChild(n);let u={adapter:e,subject:t,target:r,element:n,selector:i,elementInfo:this.elementInfo(e,t,i)};return this.projections.set(a,u),this.ensureFrame(),u}elementInfo(e,t,r){return{selector:r,tagName:e.id,subjectLabel:t.label,textContent:t.label,context:t.context,...t.imageObject?{imageObject:t.imageObject}:{},...t.videoObject?{videoObject:t.videoObject}:{},dataAttributes:{adapter:e.id,key:t.key,...t.data??{}}}}ensureFrame(){if(this.frame!==null||this.projections.size===0)return;let e=t=>{if(this.frame=null,this.lastProjectionFrameTime>0&&t-this.lastProjectionFrameTime<32){this.ensureFrame();return}this.lastProjectionFrameTime=t;let r=!1;for(let[a,s]of this.projections){let i=s.adapter.resolve(s.target.key);if(!i){s.element.remove(),this.projections.delete(a),r=!0;continue}s.subject=i,r=d(s.element,i)||r}if(r)for(let a of this.frameListeners)a();this.projections.size>0&&this.ensureFrame()};this.frame=requestAnimationFrame(e)}};export{f as a,g as b,v as c};
|