mesurer-solid 0.1.1 → 0.1.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/AGENT_INTEGRATION.md +5 -5
- package/README.md +7 -7
- package/dist/index.d.ts +9 -3
- package/dist/index.js +5 -5
- package/dist/inject-script.d.ts +2 -2
- package/dist/inject-script.js +1 -1
- package/dist/inject.d.ts +5 -5
- package/dist/inject.js +2 -2
- package/dist/screenshot.js +1 -1
- package/package.json +1 -1
package/AGENT_INTEGRATION.md
CHANGED
|
@@ -347,10 +347,10 @@ Mesurer has two intentionally different screenshot paths.
|
|
|
347
347
|
The optional `mesurer.screenshot` plugin gives the person a camera tool inside Mesurer:
|
|
348
348
|
|
|
349
349
|
```ts
|
|
350
|
-
import {
|
|
350
|
+
import { mountMesurer } from "mesurer-solid"
|
|
351
351
|
import { screenshotPlugin } from "mesurer-solid/screenshot"
|
|
352
352
|
|
|
353
|
-
const mesurer =
|
|
353
|
+
const mesurer = mountMesurer({
|
|
354
354
|
plugins: [screenshotPlugin()],
|
|
355
355
|
})
|
|
356
356
|
```
|
|
@@ -390,9 +390,9 @@ Do not replace exact Mesurer measurements with pixel estimates from either scree
|
|
|
390
390
|
When Mesurer is intentionally mounted from application code:
|
|
391
391
|
|
|
392
392
|
```ts
|
|
393
|
-
import { contextPlugin,
|
|
393
|
+
import { contextPlugin, mountMesurer } from "mesurer-solid"
|
|
394
394
|
|
|
395
|
-
const mesurer =
|
|
395
|
+
const mesurer = mountMesurer({
|
|
396
396
|
agent: true,
|
|
397
397
|
plugins: [contextPlugin()],
|
|
398
398
|
})
|
|
@@ -442,4 +442,4 @@ A good harness-level visual completion loop is:
|
|
|
442
442
|
|
|
443
443
|
When the task is specifically testing Mesurer's screenshot plugin, exercise its camera/preview/viewer path as the feature under test; otherwise do not substitute it for the harness's normal screenshot primitive.
|
|
444
444
|
|
|
445
|
-
**Context is the output of the Mesurer step, not an optional side effect.**
|
|
445
|
+
**Context is the output of the Mesurer step, not an optional side effect.**
|
package/README.md
CHANGED
|
@@ -27,9 +27,9 @@ Prereleases through `0.1.0-beta.11` used the old scoped package name; current re
|
|
|
27
27
|
## Mount the base inspector
|
|
28
28
|
|
|
29
29
|
```ts
|
|
30
|
-
import {
|
|
30
|
+
import { mountMesurer } from "mesurer-solid"
|
|
31
31
|
|
|
32
|
-
const mesurer =
|
|
32
|
+
const mesurer = mountMesurer()
|
|
33
33
|
```
|
|
34
34
|
|
|
35
35
|
The base inspector contains Select, X-ray, Color Picker, Rulers, Text Inspector, Guides, Distance, Settings, the plugin host, and the low-level agent inspection API.
|
|
@@ -41,10 +41,10 @@ Context and annotations are provided by removable `mesurer.context`:
|
|
|
41
41
|
```ts
|
|
42
42
|
import {
|
|
43
43
|
contextPlugin,
|
|
44
|
-
|
|
44
|
+
mountMesurer,
|
|
45
45
|
} from "mesurer-solid"
|
|
46
46
|
|
|
47
|
-
const mesurer =
|
|
47
|
+
const mesurer = mountMesurer({
|
|
48
48
|
agent: true,
|
|
49
49
|
plugins: [contextPlugin()],
|
|
50
50
|
})
|
|
@@ -271,10 +271,10 @@ For meaningful visual work, fresh Mesurer context/review is part of completion.
|
|
|
271
271
|
Screenshot capture is a removable first-party plugin instead of permanent core state:
|
|
272
272
|
|
|
273
273
|
```ts
|
|
274
|
-
import {
|
|
274
|
+
import { mountMesurer } from "mesurer-solid"
|
|
275
275
|
import { screenshotPlugin } from "mesurer-solid/screenshot"
|
|
276
276
|
|
|
277
|
-
const mesurer =
|
|
277
|
+
const mesurer = mountMesurer({
|
|
278
278
|
plugins: [
|
|
279
279
|
screenshotPlugin({
|
|
280
280
|
copy: true,
|
|
@@ -378,4 +378,4 @@ mesurer-solid/inject
|
|
|
378
378
|
mesurer-solid/inject-script
|
|
379
379
|
```
|
|
380
380
|
|
|
381
|
-
MIT. Adapted from `ibelick/mesurer`; see `THIRD_PARTY_LICENSES.md`.
|
|
381
|
+
MIT. Adapted from `ibelick/mesurer`; see `THIRD_PARTY_LICENSES.md`.
|
package/dist/index.d.ts
CHANGED
|
@@ -138,7 +138,7 @@ export type MesurerOptions = {
|
|
|
138
138
|
onPluginsReady?: (host: MesurerPluginHost) => void;
|
|
139
139
|
onPluginError?: (cause: unknown, pluginId: string) => void;
|
|
140
140
|
};
|
|
141
|
-
export type
|
|
141
|
+
export type MountMesurerOptions = MesurerOptions & {
|
|
142
142
|
target?: HTMLElement | ShadowRoot;
|
|
143
143
|
isolate?: boolean;
|
|
144
144
|
shadowMode?: ShadowRootMode;
|
|
@@ -168,7 +168,7 @@ export type MesurerContextHarness = {
|
|
|
168
168
|
finishCapture(): Promise<void>;
|
|
169
169
|
};
|
|
170
170
|
export type MesurerBrowserAgent = MesurerAgentHarness & MesurerContextHarness;
|
|
171
|
-
export type
|
|
171
|
+
export type MountedMesurer = {
|
|
172
172
|
element: HTMLDivElement;
|
|
173
173
|
root: HTMLDivElement | ShadowRoot;
|
|
174
174
|
readonly hostLayer: MesurerHostLayerMode;
|
|
@@ -188,7 +188,13 @@ export type MountedMeasurer = {
|
|
|
188
188
|
describe(): MesurerPluginDescription | undefined;
|
|
189
189
|
dispose(): void;
|
|
190
190
|
};
|
|
191
|
-
export declare function
|
|
191
|
+
export declare function mountMesurer(options?: MountMesurerOptions): MountedMesurer;
|
|
192
|
+
/** @deprecated Use `MountMesurerOptions`. */
|
|
193
|
+
export type MountMeasurerOptions = MountMesurerOptions;
|
|
194
|
+
/** @deprecated Use `MountedMesurer`. */
|
|
195
|
+
export type MountedMeasurer = MountedMesurer;
|
|
196
|
+
/** @deprecated Use `mountMesurer()`. */
|
|
197
|
+
export declare const mountMeasurer: typeof mountMesurer;
|
|
192
198
|
export { createMesurerAgentHarness } from "./agent";
|
|
193
199
|
export { MESURER_VERSION } from "./version";
|
|
194
200
|
export type { AgentDistance, AgentEdges, AgentElementInspection, AgentFeedbackSnapshot, AgentRect, AgentViewportSnapshot, CreateMesurerAgentHarnessOptions, MesurerAgentHarness, } from "./agent";
|
package/dist/index.js
CHANGED
|
@@ -10460,7 +10460,7 @@ async function Hd(e, t, n) {
|
|
|
10460
10460
|
}
|
|
10461
10461
|
//#endregion
|
|
10462
10462
|
//#region src/version.ts
|
|
10463
|
-
var Ud = "0.1.
|
|
10463
|
+
var Ud = "0.1.2", Wd = "mesurer.context", Gd = "context:v1", Kd = "mesurer.context.settings", qd = "context.ui", Jd = {
|
|
10464
10464
|
viewBox: "0 0 256 256",
|
|
10465
10465
|
paths: ["M216,32H88a8,8,0,0,0-8,8V80H40a8,8,0,0,0-8,8V216a8,8,0,0,0,8,8H168a8,8,0,0,0,8-8V176h40a8,8,0,0,0,8-8V40A8,8,0,0,0,216,32ZM160,208H48V96H160Zm48-48H176V88a8,8,0,0,0-8-8H96V48H208Z"]
|
|
10466
10466
|
}, Yd = {
|
|
@@ -10748,7 +10748,7 @@ async function df(e = {}) {
|
|
|
10748
10748
|
//#endregion
|
|
10749
10749
|
//#region src/index.tsx
|
|
10750
10750
|
function ff(e = {}) {
|
|
10751
|
-
if (!("document" in globalThis)) throw Error("
|
|
10751
|
+
if (!("document" in globalThis)) throw Error("mountMesurer() requires a browser or Electron renderer document.");
|
|
10752
10752
|
let { target: t = document.body, isolate: n = !0, shadowMode: r = "open", topLayer: i = !0, agent: a = !1, onPluginHost: o, onPluginsReady: s, ...c } = e, l = t.ownerDocument ?? document, u = l.defaultView ?? window, d = l.createElement("div");
|
|
10753
10753
|
d.dataset.mesurerIsland = "true";
|
|
10754
10754
|
let f = cf(d, t, i), p = d, m = d, h = d;
|
|
@@ -10838,9 +10838,9 @@ function ff(e = {}) {
|
|
|
10838
10838
|
}
|
|
10839
10839
|
};
|
|
10840
10840
|
}
|
|
10841
|
-
var pf = (e) => ({
|
|
10841
|
+
var pf = ff, mf = (e) => ({
|
|
10842
10842
|
...e,
|
|
10843
10843
|
version: Ud
|
|
10844
|
-
}),
|
|
10844
|
+
}), hf = () => mf(Fu()), gf = () => mf(Iu()), _f = () => mf(Lu()), vf = () => mf(Ru()), yf = () => mf(zu()), bf = () => mf(Bu()), xf = () => mf(Hu()), Sf = () => mf(Vu()), Cf = () => Uu().map(mf), wf = (e = [], t = []) => Wu(e, t).map((e) => e.id.startsWith("mesurer.") ? mf(e) : e);
|
|
10845
10845
|
//#endregion
|
|
10846
|
-
export { Wd as MESURER_CONTEXT_PLUGIN_ID, Gd as MESURER_CONTEXT_SERVICE_ID, Ud as MESURER_VERSION, Pd as captureMesurerContext,
|
|
10846
|
+
export { Wd as MESURER_CONTEXT_PLUGIN_ID, Gd as MESURER_CONTEXT_SERVICE_ID, Ud as MESURER_VERSION, Pd as captureMesurerContext, _f as colorPickerPlugin, wf as composeMesurerPlugins, ef as contextPlugin, Hd as copyTextToClipboard, yd as createMesurerAgentHarness, Rd as createMesurerCapturePlan, uf as createMesurerPluginHost, df as createMesurerRuntime, Cf as defaultMesurerPlugins, lf as defineMesurerPlugin, xf as distancePlugin, Ld as formatMesurerContext, bf as guidesPlugin, pf as mountMeasurer, ff as mountMesurer, Vd as reviewMesurerAnnotation, vf as rulersPlugin, hf as selectPlugin, Sf as settingsPlugin, yf as textInspectorPlugin, gf as xrayPlugin };
|
package/dist/inject-script.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type MountedMesurer } from "./index";
|
|
2
2
|
import type { MesurerInjectConfig } from "./inject";
|
|
3
3
|
declare global {
|
|
4
4
|
var __MESURER_CONFIG__: MesurerInjectConfig | undefined;
|
|
5
|
-
var __MESURER_INSTANCE__:
|
|
5
|
+
var __MESURER_INSTANCE__: MountedMesurer | undefined;
|
|
6
6
|
}
|
package/dist/inject-script.js
CHANGED
|
@@ -1244,4 +1244,4 @@ body.mesurer-solid-xray [data-mesurer-root], body.mesurer-solid-xray [data-mesur
|
|
|
1244
1244
|
}
|
|
1245
1245
|
`,ku=0,Au=`mesurer:tab-id`,ju=`mesurer-settings`,Mu=`mesurer-state`,Nu=e=>{try{let t=e.sessionStorage.getItem(Au);if(t)return t;let n=e.crypto.randomUUID();return e.sessionStorage.setItem(Au,n),n}catch{return`session`}},Pu=(e,t)=>{let n=t=>t!==void 0&&e.document.defaultView?.CSS?.supports(`color`,t)===!0,r={...t};if(n(t.highlightColor)||(r.highlightColor=void 0),n(t.guideColor)||(r.guideColor=void 0),t.selectionSpacingStyle){let e={...t.selectionSpacingStyle};e.color!==void 0&&!n(e.color)&&(e.color=void 0),r.selectionSpacingStyle=e}return r},Fu=(e,t)=>{if(e.length<=1)return null;let n=1/0,r=1/0,i=-1/0,a=-1/0;for(let t of e)n=Math.min(n,t.rect.left),r=Math.min(r,t.rect.top),i=Math.max(i,t.rect.left+t.rect.width),a=Math.max(a,t.rect.top+t.rect.height);let o={left:n,top:r,width:i-n,height:a-r};return{...e[e.length-1],id:`group-${e.map(e=>e.id).join(`|`)}`,label:`${e.length} elements`,rect:o,paddingRect:o,marginRect:o,padding:{top:0,right:0,bottom:0,left:0},margin:{top:0,right:0,bottom:0,left:0},elementRef:void 0,originRect:t??void 0}};function Iu(e){let t=L(()=>e.model),n=L(()=>e.env),r=L(()=>e.input),i=L(()=>e.onSelectionSpacingStyleChange),a=L(()=>e.onResetSelectionSpacingStyle),{ownerDocument:o,ownerWindow:s}=n,c=r.pageTarget??o.body,l=++ku,u=r.persistKey??`mesurer-state:${Nu(s)}${l===1?``:`:${l}`}`,d={key:``,entries:[],overlayNode:null,frame:-1},f=null,p=null,m=null,h=!1,g=0,_=0,v=null,y=null,b=!1,x=0,S=null,C={x:s.scrollX,y:s.scrollY},w=Hl({model:t,ownerWindow:s}),T=Du({ownerDocument:o,target:r.pageTarget??o.body,instanceId:l});r.onBuiltinController?.(w);let E=H(()=>{let e=t.state.start,n=t.state.end;return e&&n?za(e,n):null}),D=H(()=>Fu(t.state.selectedMeasurements,t.state.selectionOriginRect)),O=H(()=>D()?[D()]:t.state.selectedMeasurements.length?t.state.selectedMeasurements:t.state.selectedMeasurement?[t.state.selectedMeasurement]:[]),k=H(()=>fl(t.state.guides,t.state.selectedGuideIds)),A=H(()=>dl(t.state.hoverPointer,t.state.guides)),j=H(()=>D()??t.state.selectedMeasurement??t.state.selectedMeasurements.at(-1)??null),M=H(()=>pl({document:o,window:s,altPressed:t.state.altPressed,primarySelectedMeasurement:j(),selectedGuide:k(),hoverGuide:A(),hoverElement:t.state.hoverElement,selectedElementRef:j()?.elementRef??null})),ee=H(()=>ml({document:o,window:s,altPressed:t.state.altPressed,primarySelectedMeasurement:j(),optionPairOverlay:M(),selectedGuideIds:t.state.selectedGuideIds,selectedElement:j()?.elementRef??null,hoverElement:t.state.hoverElement})),te=H(()=>{if(!t.state.altPressed||t.state.toolMode!==`guides`)return null;let e=k(),n=A();if(e&&n&&e.id!==n.id)return qa(cl(e,s),cl(n,s),null,null,s);let r=t.state.guidePreview;if(!r)return null;let i=t.state.guides.filter(e=>e.orientation===r.orientation).sort((e,t)=>Math.abs(e.position-r.position)-Math.abs(t.position-r.position))[0];return i?qa(cl({id:`preview`,...r},s),cl(i,s),null,null,s):null}),ne=e=>{let n=Sl(e,f,o,c);if(!n){t.setHoverTarget(null,null);return}let r=n.getBoundingClientRect();t.setHoverTarget(n,t.current.settings.hoverHighlightEnabled?{left:r.left,top:r.top,width:r.width,height:r.height}:null)},N=e=>{v=e,!_&&(_=s.requestAnimationFrame(()=>{_=0;let e=v;e&&(t.current.toolMode===`select`&&!t.current.draggingGuideId&&ne(e),t.setTransient({hoverPointer:t.current.guides.length?e:null}),t.current.toolMode===`guides`&&!t.current.draggingGuideId&&t.setTransient({guidePreview:{orientation:t.current.guideOrientation,position:ul({orientation:t.current.guideOrientation,point:e,snapGuidesEnabled:t.current.settings.snapGuidesEnabled,overlayNode:f,guides:t.current.guides,draggingGuideId:null,document:o})}}))}))},re=()=>{x&&s.clearTimeout(x),x=0,S=null},ie=e=>{re(),S=e,x=s.setTimeout(()=>{x=0,S===e&&t.setTransient({draggingGuideId:e})},220)},P=()=>{t.setTransient({start:null,end:null,isDragging:!1,draggingGuideId:null,guidePreview:null}),y=null,b=!1,d.key=``,t.endAction()},ae=e=>{if(t.current.settingsOpen||!t.current.enabled||e.button!==0||t.current.toolMode===`none`)return;let n={x:e.clientX,y:e.clientY},r=t.beginAction();if(t.current.altPressed&&M()){e.preventDefault(),r(),t.addHeldDistance({...M(),id:Ka()}),t.endAction();return}if(t.current.toolMode===`guides`){e.preventDefault(),r();let i=Ka(),a=ul({orientation:t.current.guideOrientation,point:n,snapGuidesEnabled:t.current.settings.snapGuidesEnabled,overlayNode:f,guides:t.current.guides,draggingGuideId:null,document:o});t.addGuide({id:i,orientation:t.current.guideOrientation,position:a}),t.setSelectedGuideIds(t.current.settings.selectNewGuideEnabled?[i]:[]),t.setTransient({guidePreview:null}),ie(i),go(e.currentTarget,e.pointerId);return}t.current.selectedGuideIds.length>0&&(r(),t.setSelectedGuideIds([])),b=e.shiftKey,y=e.shiftKey?Fl({point:n,selectedMeasurements:t.current.selectedMeasurements,overlayNode:f,document:o,exact:!0})?.elementRef??null:null,t.setTransient({start:n,end:n,isDragging:!1,selectionOriginRect:null}),go(e.currentTarget,e.pointerId)},oe=e=>{if(!t.current.enabled||t.current.settingsOpen)return;let n={x:e.clientX,y:e.clientY};if(e.altKey!==t.current.altPressed&&t.setTransient({altPressed:e.altKey}),N(n),t.current.draggingGuideId){let e=t.current.guides.find(e=>e.id===t.current.draggingGuideId);if(e){let r=ul({orientation:e.orientation,point:n,snapGuidesEnabled:t.current.settings.snapGuidesEnabled,overlayNode:f,guides:t.current.guides,draggingGuideId:e.id,document:o});t.updateGuide(e.id,{position:r})}return}if(t.current.toolMode===`guides`)return;let r=t.current.start;if(!r)return;let i=b?12:4,a=t.current.isDragging||Math.abs(n.x-r.x)>i||Math.abs(n.y-r.y)>i;t.setTransient({end:n,isDragging:a})},se=e=>{if(!t.current.enabled)return;if(t.current.toolMode===`guides`){re(),e.currentTarget.hasPointerCapture?.(e.pointerId)&&e.currentTarget.releasePointerCapture?.(e.pointerId),P();return}if(t.current.toolMode!==`select`){P();return}let n=t.current.start;if(!n){P();return}let r={x:e.clientX,y:e.clientY};if(t.current.isDragging){let i=za(n,r),a=Ml(i,f,d,o,c).map(e=>({...ol(e,s),originRect:i})),l=a;if(e.shiftKey){let e=new Map;for(let n of[...t.current.selectedMeasurements,...a])n.elementRef&&e.set(n.elementRef,n);l=[...e.values()]}t.checkpoint(),t.setSelectedMeasurements(l,l.at(-1)??null),t.setTransient({selectionOriginRect:i}),P();return}let i=y?t.current.selectedMeasurements.find(e=>e.elementRef===y)??null:Fl({point:r,selectedMeasurements:t.current.selectedMeasurements,overlayNode:f,document:o,exact:e.shiftKey});if((e.shiftKey||!t.current.settings.hoverHighlightEnabled)&&i){t.checkpoint();let e=t.current.selectedMeasurements.filter(e=>e.elementRef!==i.elementRef);t.setSelectedMeasurements(e,e.at(-1)??null),P();return}let a=e.shiftKey?Sl(r,f,o,c)??Cl(r,f,t.current.settings.snapEnabled,o,c):Cl(r,f,t.current.settings.snapEnabled,o,c);if(a){let n=ol(a,s);if(t.checkpoint(),e.shiftKey||t.current.settings.multiMeasureEnabled){let e=t.current.selectedMeasurements.some(e=>e.elementRef===a)?t.current.selectedMeasurements.filter(e=>e.elementRef!==a):[...t.current.selectedMeasurements,n];t.setSelectedMeasurements(e,e.at(-1)??null)}else t.setSelectedMeasurements([n],n)}else e.shiftKey||(t.checkpoint(),t.setSelectedMeasurements([],null));P()},ce=()=>{re(),t.current.draggingGuideId||P(),t.setTransient({guidePreview:null})},F=(e,n)=>{if(!(!t.current.enabled||n.button!==0||t.current.settingsOpen)){if(n.preventDefault(),n.stopPropagation(),t.checkpoint(),n.shiftKey){let n=t.current.selectedGuideIds.includes(e.id)?t.current.selectedGuideIds.filter(t=>t!==e.id):[...t.current.selectedGuideIds,e.id];t.setSelectedGuideIds(n);return}t.setSelectedGuideIds([e.id]),t.setTransient({draggingGuideId:e.id}),go(n.currentTarget,n.pointerId)}},le=(e,n)=>{n.stopPropagation(),t.setTransient({draggingGuideId:null}),n.currentTarget.hasPointerCapture?.(n.pointerId)&&n.currentTarget.releasePointerCapture?.(n.pointerId)},ue=(e,n,r=null)=>ul({orientation:e,point:e===`vertical`?{x:n,y:0}:{x:0,y:n},snapGuidesEnabled:t.current.settings.snapGuidesEnabled,overlayNode:f,guides:t.current.guides,draggingGuideId:r,document:o}),de=(e,n)=>{t.checkpoint();let r=Ka();return t.addGuide({id:r,orientation:e,position:ue(e,n)}),t.setSelectedGuideIds([]),r},fe=(e,n)=>{let r=t.current.guides.find(t=>t.id===e);r&&t.updateGuide(e,{position:ue(r.orientation,n,e)})},pe=e=>{t.current.settings.selectNewGuideEnabled&&t.setSelectedGuideIds([e])},me=e=>t.setGuides(t.current.guides.filter(t=>t.id!==e)),he=()=>{t.clearWorkspace(),p?.clear(),m?.clearWorkspace()};return Wr(()=>[t.state.toolMode,t.state.enabled],([e,t])=>{p&&(e===`text-inspector`&&t?p.enable():p.disable())}),Wr(()=>t.state.xrayVisible,e=>T.setVisible(e)),Wr(()=>[t.state.settings.highlightColor,t.state.settings.guideColor,t.state.settings.hoverHighlightEnabled,t.state.settings.persistOnReload,t.state.settings.colorPickerClickFormat,t.state.settings.snapEnabled,t.state.settings.snapGuidesEnabled,t.state.settings.selectNewGuideEnabled,t.state.settings.multiMeasureEnabled,t.state.settings.colorPickerFormats.join(`|`),JSON.stringify(t.state.settings.guideStyle),JSON.stringify(t.state.settings.rulerSettings),JSON.stringify(e.selectionSpacingStyle)],()=>{!h||!m||m.saveSettings({...t.serializeSettings(),selectionSpacingStyle:{...L(()=>e.selectionSpacingStyle)}})}),Wr(()=>[t.state.enabled,t.state.toolMode,t.state.rulersVisible,t.state.xrayVisible,t.state.guideOrientation,t.state.settings.persistOnReload,t.state.guides.map(e=>`${e.id}:${e.orientation}:${e.position}`).join(`|`),t.state.selectedGuideIds.join(`|`),t.state.heldDistances.map(e=>e.id).join(`|`),t.state.measurements.map(e=>e.id).join(`|`),t.state.activeMeasurement?.id??``],()=>{!h||!m||!t.current.settings.persistOnReload||(s.clearTimeout(g),g=s.setTimeout(()=>m?.saveWorkspace(t.serializeWorkspace()),250))}),Xt(()=>{Kl(Ou,n.portalTarget),p=bu({portalTarget:n.portalTarget});let e=r.persistence??Vo(s,u,ju,r.persistKey?void 0:Mu);m=e,e.setErrorHandler?.(r.onPersistenceError);let a=e.load();if(a?.settings){let e=Pu(s,a.settings);t.applyStoredSettings(e),e.selectionSpacingStyle&&i(e.selectionSpacingStyle)}(t.current.settings.persistOnReload||r.persistOnReload)&&a?.workspace&&t.applyStoredWorkspace(a.workspace),h=!0,t.current.toolMode===`text-inspector`&&t.current.enabled&&p.enable();let c=e.subscribe?.((e,n)=>{if(e){if(n?.settings!==!1){let n=Pu(s,e.settings);t.applyStoredSettings(n),n.selectionSpacingStyle&&i(n.selectionSpacingStyle)}n?.workspace!==!1&&e.workspace&&t.current.settings.persistOnReload&&t.applyStoredWorkspace(e.workspace)}}),l=e=>{if(mo(e,s))return;let n=e.key.toLowerCase(),r=e.metaKey||e.ctrlKey;if(n===`escape`){if(t.current.settingsOpen){t.setTransient({settingsOpen:!1});return}if(t.current.colorPickerActive){t.setTransient({colorPickerActive:!1});return}t.current.toolMode===`text-inspector`&&p?.clear(),t.clearAll();return}if(e.key===`Alt`){t.setTransient({altPressed:!0});return}if(r&&n===`,`){e.preventDefault(),w.run(`settings`);return}if(r&&n===`z`){if(e.preventDefault(),t.current.toolMode===`text-inspector`&&(e.shiftKey?p?.redo():p?.undo()))return;e.shiftKey?t.redo():t.undo();return}if((n===`delete`||n===`backspace`)&&t.current.selectedGuideIds.length){e.preventDefault(),t.removeGuides(t.current.selectedGuideIds);return}if(n===`m`){t.toggleEnabled(!0);return}if(n===`s`){w.run(`select`);return}if(n===`a`){w.run(`text-inspector`);return}if(n===`g`){w.run(`guides`);return}if(n===`p`){w.run(`color-picker`);return}if(n===`x`){w.run(`xray`);return}if(n===`r`){w.run(`rulers`);return}if(n===`h`){t.setGuideOrientation(`horizontal`,!0);return}n===`v`&&t.setGuideOrientation(`vertical`,!0)},d=e=>{e.key===`Alt`&&t.setTransient({altPressed:!1})};s.addEventListener(`keydown`,l),s.addEventListener(`keyup`,d);let f=0,v=()=>{f||=s.requestAnimationFrame(()=>{f=0;let e=t.current.selectedMeasurements.filter(e=>e.elementRef?.isConnected).map(e=>({...ol(e.elementRef,s),id:e.id,originRect:e.originRect}));if(e.length||t.current.selectedMeasurements.length){let n=t.current.selectedMeasurement?.id;t.setSelectedMeasurements(e,e.find(e=>e.id===n)??e.at(-1)??null)}let n=Ia(s);t.current.measurements.length&&t.setMeasurements(t.current.measurements.map(e=>sl(e,n,o))),t.current.activeMeasurement&&t.setActiveMeasurement(sl(t.current.activeMeasurement,n,o)),t.current.heldDistances.length&&t.setHeldDistances(t.current.heldDistances.map(e=>uo(e,n,o,s)));let r=t.current.hoverElement;if(r?.isConnected&&t.current.toolMode===`select`){let e=r.getBoundingClientRect();t.setHoverTarget(r,t.current.settings.hoverHighlightEnabled?{left:e.left,top:e.top,width:e.width,height:e.height}:null)}})},y=()=>{let e={x:s.scrollX,y:s.scrollY},n=e.x-C.x,r=e.y-C.y;C=e,(n||r)&&t.setGuides(t.current.guides.map(e=>({...e,position:e.position-(e.orientation===`vertical`?n:r)}))),v()};s.addEventListener(`scroll`,y,!0),s.addEventListener(`resize`,v,!0);let b=e=>{let n=t.current.draggingGuideId;if(!n)return;let r=t.current.guides.find(e=>e.id===n);r&&t.updateGuide(n,{position:ue(r.orientation,r.orientation===`vertical`?e.clientX:e.clientY,n)})},x=()=>t.setTransient({draggingGuideId:null});return s.addEventListener(`pointermove`,b,!0),s.addEventListener(`pointerup`,x,!0),s.addEventListener(`pointercancel`,x,!0),()=>{s.cancelAnimationFrame(f),s.cancelAnimationFrame(_),re(),s.clearTimeout(g),t.current.settings.persistOnReload&&e.saveWorkspace(t.serializeWorkspace()),c?.(),e.setErrorHandler?.(void 0),s.removeEventListener(`keydown`,l),s.removeEventListener(`keyup`,d),s.removeEventListener(`scroll`,y,!0),s.removeEventListener(`resize`,v,!0),s.removeEventListener(`pointermove`,b,!0),s.removeEventListener(`pointerup`,x,!0),s.removeEventListener(`pointercancel`,x,!0),p?.destroy(),p=null,T.dispose(),r.onBuiltinController?.(null)}}),J(wi,{get mount(){return n.portalMount},get children(){var n=Y(`div`,{class:`mesurer-solid-root`,"data-mesurer-root":`true`});return Qi(()=>e=>{f=e},n),Q(n,J(G,{get when(){return q(()=>!!t.state.enabled)()?t.state.rulersVisible:t.state.enabled},get children(){return J(ec,{ownerWindow:s,get settings(){return t.state.settings.rulerSettings},get interactive(){return!t.state.settingsOpen},get forceVisible(){return t.state.settingsOpen},get guides(){return t.state.guides},get selectedGuideIds(){return t.state.selectedGuideIds},onStartGuide:de,onMoveGuide:fe,onFinishGuide:pe,onCancelGuide:me})}}),null),Q(n,J(Ys,{model:t,get displayedSelectedMeasurements(){return O()},get activeRect(){return E()},get optionPairOverlay(){return M()},get guideDistanceOverlay(){return te()},get optionContainerLines(){return ee()},get hoverGuide(){return A()},get selectionSpacingStyle(){return e.selectionSpacingStyle},get interactive(){return q(()=>!!t.state.enabled)()?!t.state.settingsOpen:t.state.enabled},onPointerDown:ae,onPointerMove:oe,onPointerUp:se,onPointerLeave:ce,onGuidePointerDown:F,onGuidePointerUp:le}),null),Q(n,J(Fa,{model:t,ownerWindow:s}),null),Q(n,J(Nc,{model:t,ownerWindow:s,onBuiltinAction:e=>{w.run(e)},get pluginTools(){return r.pluginTools},get onPluginTool(){return r.onPluginTool},onClearWorkspace:he,get selectionSpacingStyle(){return e.selectionSpacingStyle},onSelectionSpacingStyleChange:i,onResetSettings:()=>{t.resetSettings(),a(),m?.clearSettings()}}),null),n}})}function Lu(e){let t=L(()=>({...vo,...e.selectionSpacingStyle})),[n,r]=U({...t}),i=e=>r(t=>({...t,...e})),a=()=>r({...t}),o=Rl({initialEnabled:!0,initialToolMode:`none`,settings:L(()=>({highlightColor:e.highlightColor??`oklch(0.62 0.18 255)`,guideColor:e.guideColor??`oklch(0.63 0.26 29.23)`,hoverHighlightEnabled:e.hoverHighlightEnabled??!0,persistOnReload:e.persistOnReload??!1,colorPickerFormats:e.colorPickerFormats??[`hex`,`rgb`,`oklch`],colorPickerClickFormat:e.colorPickerClickFormat??`hex`,snapEnabled:e.snapEnabled??!0,snapGuidesEnabled:e.snapGuidesEnabled??!0,selectNewGuideEnabled:e.selectNewGuideEnabled??!0,multiMeasureEnabled:e.multiMeasureEnabled??!1,guideStyle:{..._o,...e.guideStyle},rulerSettings:{...yo,...e.rulerSettings}}))}),[s,c]=U(null);return Xt(()=>{let t=e.portalTarget??document.body,n=t.ownerDocument??document,r=n.defaultView??window,i,a=!1;return t instanceof r.ShadowRoot?(i=n.createElement(`div`),i.dataset.mesurerPortal=`true`,t.append(i),a=!0):i=t,c({ownerDocument:n,ownerWindow:r,portalTarget:t,portalMount:i,ownedPortalMount:a}),()=>{a&&i.remove()}}),J(G,{get when(){return s()},children:t=>J(Iu,{model:o,get env(){return t()},input:e,get selectionSpacingStyle(){return n()},onSelectionSpacingStyleChange:i,onResetSelectionSpacingStyle:a})})}var Ru=(e,t,n,r)=>_a({id:`mesurer.${e}`,version:`0.1.0`,provides:[`tool:${e}`],setup(i){i.tool.register({id:e,builtin:e,label:t,shortcut:n,order:r,command:`builtin.${e}`})}}),zu=()=>Ru(`select`,`Select`,`S`,10),Bu=()=>Ru(`xray`,`X-ray`,`X`,20),Vu=()=>Ru(`color-picker`,`Color picker`,`P`,30),Hu=()=>Ru(`rulers`,`Rulers`,`R`,40),Uu=()=>Ru(`text-inspector`,`Text inspector`,`A`,50),Wu=()=>Ru(`guides`,`Guides`,`G`,60),Gu=()=>Ru(`settings`,`Settings`,`⌘/Ctrl+,`,90),Ku=()=>_a({id:`mesurer.distance`,version:`0.1.0`,provides:[`overlay:distance`,`settings:selection-spacing`],setup(e){e.overlay.register({id:`distance`,builtin:`distance`,order:30}),e.settings.register({id:`selection-spacing`,label:`Selection spacing`,builtin:`distance`,order:30})}}),qu=()=>[zu(),Bu(),Vu(),Hu(),Uu(),Wu(),Ku(),Gu()];function Ju(e=[],t=[]){let n=new Set(t.map(e=>`mesurer.${e}`));return[...qu().filter(e=>!n.has(e.id)),...e]}var Yu=e=>({...e,anchor:e.anchor.kind===`elements`?{kind:`elements`,region:e.anchor.region?$i(e.anchor.region):null,targets:e.anchor.targets.map(e=>({...e,fingerprint:{...e.fingerprint,classes:[...e.fingerprint.classes]},lastRect:$i(e.lastRect)}))}:{kind:`region`,rect:$i(e.anchor.rect)},baseline:{targets:e.baseline.targets.map(e=>({...e,rect:$i(e.rect)})),guides:e.baseline.guides.map(e=>({...e})),measurements:e.baseline.measurements.map(e=>({...e,rect:$i(e.rect)})),distances:e.baseline.distances.map(e=>({...e,rectA:$i(e.rectA),rectB:$i(e.rectB),horizontal:e.horizontal?{...e.horizontal}:null,vertical:e.vertical?{...e.vertical}:null}))}}),Xu=(e,t)=>`${t}-${e.crypto?.randomUUID?.()??`${Date.now()}-${Math.random().toString(36).slice(2)}`}`,Zu=e=>{let t=new Set,n=[];for(let r of e.current.selectedMeasurements){let e=r.elementRef;!e?.isConnected||t.has(e)||(t.add(e),n.push(e))}let r=e.current.selectedMeasurement?.elementRef;return r?.isConnected&&!t.has(r)&&n.push(r),n};function Qu(e){let{model:t,ownerDocument:n,ownerWindow:r,uiRoot:i}=e,a=r,o=e.pageTarget??n.body??n.documentElement,s=o instanceof a.ShadowRoot?o:o.getRootNode(),c=s instanceof a.ShadowRoot?s:n,l=o,u=[],d=new Set,f=new Map,p=new Map,m=new Map,h=!1,g=0,_=null,v=!1,y=(e,t)=>`${e}:${t}`,b=e=>o===e||o.contains(e),x=e=>{let t=[];o instanceof a.HTMLElement&&o.matches(e)&&t.push(o);for(let n of c.querySelectorAll(e))n instanceof a.HTMLElement&&b(n)&&t.push(n);return t},S=()=>{for(let e of d)e()},C=e=>{if(!Jc(e.fingerprint))return null;let t=[];try{t=x(e.selector).filter(t=>Yc(t,e.fingerprint))}catch{return null}if(t.length!==1)return null;if(!e.fingerprint.id&&!e.fingerprint.testId){let n=[];try{n=x(e.fingerprint.tag).filter(t=>Yc(t,e.fingerprint))}catch{return null}if(n.length!==1||n[0]!==t[0])return null}return t[0]??null},w=(e,t)=>{let n=y(e,t.id),r=p.get(n);if(r?.isConnected&&b(r))return r;r&&p.delete(n);let i=C(t);return i&&p.set(n,i),i},T=()=>{let e=!1;for(let t of u)if(t.anchor.kind===`elements`)for(let n of t.anchor.targets){let r=y(t.id,n.id),i=w(t.id,n),a=!!i;if(m.get(r)!==a&&(m.set(r,a),e=!0),!i)continue;let o=Bc(i);(o.left!==n.lastRect.left||o.top!==n.lastRect.top||o.width!==n.lastRect.width||o.height!==n.lastRect.height)&&(n.lastRect=o,e=!0)}e&&S()},E=()=>{g||h||u.length===0||(g=r.requestAnimationFrame(()=>{g=0,T()}))},D=()=>{v||h||u.length===0||(v=!0,_=new a.MutationObserver(E),_.observe(l,{childList:!0,subtree:!0,attributes:!0,attributeFilter:[`id`,`class`,`data-testid`,`role`,`aria-label`,`style`]}),r.addEventListener(`resize`,E),r.addEventListener(`scroll`,E,!0),o.addEventListener(`scroll`,E,!0))},O=()=>{v&&(v=!1,_?.disconnect(),_=null,r.removeEventListener(`resize`,E),r.removeEventListener(`scroll`,E,!0),o.removeEventListener(`scroll`,E,!0),g&&r.cancelAnimationFrame(g),g=0)},k=t.subscribe(S),A=()=>({guides:t.current.guides,measurements:t.current.measurements,activeMeasurement:t.current.activeMeasurement,distances:t.current.heldDistances}),j=e=>aa({...e,workspace:A(),guideTolerance:10}),M=(e,t)=>({id:`target-${t+1}`,selector:Kc(e),fingerprint:qc(e),lastRect:Bc(e)}),ee=e=>{let n=[...new Set(e.map(e=>e.trim()).filter(Boolean))];if(!n.length)throw Error(`Mesurer select() requires at least one selector.`);let i=n.map(e=>{let t;try{t=x(e)}catch{throw Error(`Invalid Mesurer selection selector: ${e}`)}if(t.length===0)throw Error(`Mesurer selection target not found: ${e}`);if(t.length>1)throw Error(`Mesurer selection target is ambiguous (${t.length} matches): ${e}`);return t[0]});t.checkpoint(),t.setEnabled(!0),t.setToolMode(`select`);let a=i.map(e=>Xc(e,r));return t.setSelectedMeasurements(a,a.at(-1)??null),t.setTransient({selectionOriginRect:null}),i},te=(e,t=[])=>(u.push(e),e.anchor.kind===`elements`&&e.anchor.targets.forEach((n,r)=>{let i=t[r],a=y(e.id,n.id);i&&b(i)&&p.set(a,i),m.set(a,!!(i&&b(i)))}),D(),S(),Yu(e)),ne=(e,t)=>{let n=e.trim();if(!n)throw Error(`Annotation note cannot be empty.`);let i=$i(t);return te({id:Xu(r,`annotation`),note:n,createdAt:Date.now(),anchor:{kind:`region`,rect:i},baseline:j({targets:[],region:i})})},N=e=>{let n=e.trim();if(!n)throw Error(`Annotation note cannot be empty.`);let i=Zu(t).filter(b),a=t.current.selectionOriginRect?$i(t.current.selectionOriginRect):null;if(!i.length){if(!a)throw Error(`Select a page element or drag a region before adding an annotation.`);return ne(n,a)}let o=i.map(M);return te({id:Xu(r,`annotation`),note:n,createdAt:Date.now(),anchor:{kind:`elements`,targets:o,region:a},baseline:j({targets:o,elements:i})},i)},re=()=>{for(let[e,t]of f)t.value||t.priority?e.style.setProperty(`display`,t.value,t.priority):e.style.removeProperty(`display`);f.clear()};return{snapshot(){return{enabled:t.current.enabled,rulersVisible:t.current.rulersVisible,xrayVisible:t.current.xrayVisible,guideRelevanceTolerance:10,selectedMeasurements:[...t.current.selectedMeasurements],selectionOriginRect:t.current.selectionOriginRect?$i(t.current.selectionOriginRect):null,measurements:[...t.current.measurements],activeMeasurement:t.current.activeMeasurement,heldDistances:[...t.current.heldDistances],guides:t.current.guides.map(e=>({...e})),annotations:u.map(Yu)}},currentSelection(){return{elements:Zu(t).filter(b),region:t.current.selectionOriginRect?$i(t.current.selectionOriginRect):null}},select:ee,hoveredElement(){return t.current.hoverElement?.isConnected&&b(t.current.hoverElement)?t.current.hoverElement:null},annotations(){return T(),u.map(Yu)},annotation(e){T();let t=u.find(t=>t.id===e);if(!t)return null;let n=Yu(t),r=[];if(n.anchor.kind===`elements`&&t.anchor.kind===`elements`){let e=t.anchor.targets;r=n.anchor.targets.map((n,r)=>({target:n,element:w(t.id,e[r])}))}return{...n,resolvedTargets:r}},annotationRect(e){let t=u.find(t=>t.id===e);if(!t)return null;if(t.anchor.kind===`region`)return $i(t.anchor.rect);let n=t.anchor.targets.map(e=>w(t.id,e)?.getBoundingClientRect()).filter(e=>e!==void 0);if(!n.length){let e=ta(t.anchor.targets.map(e=>e.lastRect));return e?$i(e):null}return ta(n.map(e=>({left:e.left,top:e.top,width:e.width,height:e.height})))},addSelectionAnnotation:N,addRegionAnnotation:ne,removeAnnotation(e){let t=u.findIndex(t=>t.id===e);if(t<0)return;let[n]=u.splice(t,1);if(n.anchor.kind===`elements`)for(let e of n.anchor.targets){let t=y(n.id,e.id);p.delete(t),m.delete(t)}u.length===0&&O(),S()},subscribe(e){return d.add(e),()=>d.delete(e)},prepareCapture(){if(!i)return;let e=[`[data-mesurer-layer='chrome']`,`[data-mesurer-toolbar='true']`,`[data-mesurer-extension-toolbar='true']`,`[data-mesurer-inspector-ui='true']:not([data-mesurer-layer='evidence'])`,`.mesurer-color-picker`].join(`,`);for(let t of i.querySelectorAll(e))f.has(t)||(f.set(t,{value:t.style.getPropertyValue(`display`),priority:t.style.getPropertyPriority(`display`)}),t.style.setProperty(`display`,`none`,`important`))},finishCapture(){re()},dispose(){h||(h=!0,O(),k(),re(),p.clear(),m.clear(),u.length=0,d.clear())}}}var $u=[`select`,`xray`,`color-picker`,`rulers`,`text-inspector`,`guides`,`settings`],ed=`mesurer-plugin-settings`,td=e=>e===`select`||e===`xray`||e===`color-picker`||e===`rulers`||e===`text-inspector`||e===`guides`||e===`distance`||e===`settings`,nd=e=>`builtin.${e}`,rd=(e,t)=>{let n=t.toLowerCase().replaceAll(`cmd`,`meta`).split(`+`).map(e=>e.trim()).filter(Boolean);if(!n.length)return!1;let r=n.at(-1),i=new Set(n.slice(0,-1)),a=i.has(`mod`),o=i.has(`meta`),s=i.has(`ctrl`)||i.has(`control`),c=i.has(`shift`),l=i.has(`alt`)||i.has(`option`);return(a?!(e.metaKey||e.ctrlKey):o!==e.metaKey||s!==e.ctrlKey)||c!==e.shiftKey||l!==e.altKey||!a&&!o&&!s&&(e.metaKey||e.ctrlKey)?!1:e.key.toLowerCase()===r};function id(e){let t=L(()=>e.pluginHost),n=t??ya(),r=!t,i=L(()=>e.version??`0.1.0`),a=t=>e.version&&t.id.startsWith(`mesurer.`)?{...t,version:i}:t,o=new Set(L(()=>e.excludePlugins??[])),s=L(()=>Ju([],e.excludePlugins??[]).map(a)),c=L(()=>[...e.plugins??[]].map(a)),l=new Map,u=null,d=null,[f,p]=U(0),[m,h]=U(!1),g=e=>(f(),n.tools().find(t=>(t.builtin===e||t.id===e)&&t.command!==nd(e))),_=e=>(f(),m()?e===`distance`?n.overlays().some(t=>t.builtin===e||t.id===e):n.tools().some(t=>t.builtin===e||t.id===e):!o.has(e)),v=H(()=>(f(),n.tools().filter(e=>e.hidden?.()?!1:!e.builtin||!td(e.builtin)||e.command!==nd(e.builtin)))),y=H(()=>(f(),n.settings().filter(e=>(e.controls?.length??0)>0))),b=()=>{f();let e=[];for(let t of $u)(!_(t)||g(t))&&e.push(`[data-mesurer-builtin='${t}']{display:none!important}`);return(!_(`guides`)||g(`guides`))&&e.push(`[data-mesurer-builtin='guides-menu']{display:none!important}`),_(`guides`)||e.push(`[data-mesurer-guide='true']{display:none!important}`),_(`distance`)||e.push(`[data-mesurer-distance='true']{display:none!important}`),_(`rulers`)||e.push(`[data-mesurer-rulers='true']{display:none!important}`),_(`color-picker`)||e.push(`.mesurer-color-picker{display:none!important}`),e.join(`
|
|
1246
1246
|
`)},x=async(t,r=`toolbar`)=>{if(!t.disabled?.())try{await n.command.execute(t.command,void 0,{source:r,toolId:t.id})}catch(n){throw e.onPluginError?.(n,t.id),n}},S=(e,t=`toolbar`)=>{x(e,t).catch(()=>void 0)},C=(t,n,r)=>{Promise.resolve(n.set(r)).catch(r=>{e.onPluginError?.(r,`${t}.${n.id}`)})};return Xt(()=>{let t=!0,a=0,o=n,f=e,m=f.portalTarget??document.body,y=m.ownerDocument??document,C=y.defaultView??window,w=f.pageTarget??y.body,T=m,E=()=>{if(!u)throw Error(`Mesurer renderer model is unavailable for runtime bridge setup.`);return u},D=()=>{if(!d)throw Error(`Mesurer built-in controller is unavailable for runtime bridge setup.`);return d},O=()=>{let e=y.createElement(`div`);e.dataset.mesurerInspectorUi=`true`,(T.querySelector(`[data-mesurer-root='true']`)??m).append(e);let t=!1;return{element:e,dispose(){t||(t=!0,e.remove())}}},k=()=>Qu({model:E(),ownerDocument:y,ownerWindow:C,uiRoot:m,pageTarget:w}),A=y.createElement(`style`);A.dataset.mesurerPluginVisibility=`true`,A.dataset.mesurerInspectorUi=`true`,A.textContent=b(),m.append(A);let j=f.persistKey?`${f.persistKey}:plugins`:ed,M=()=>{a=0;try{C.localStorage.setItem(j,JSON.stringify(o.state.serialize(`persist`)))}catch(e){f.onPluginError?.(e,`plugin-persistence`)}},ee=()=>{C.clearTimeout(a),a=C.setTimeout(M,50)},te=o.subscribe(e=>{if(p(e=>e+1),A.textContent=b(),(e.reason===`state`||e.reason===`history`||e.reason===`remove`||e.reason===`replace`)&&ee(),e.reason===`remove`&&e.pluginId?.startsWith(`mesurer.`)){let t=e.pluginId.slice(8);td(t)&&D().deactivate(t)}});f.onPluginHost?.(o);let ne=async e=>{if(t)try{await o.load(e)}catch(t){f.onPluginError?.(t,e.id)}},N=async e=>{let t=g(e);if(t){await x(t,{source:`builtin-command`,builtin:e});return}_(e)&&await D().run(e)};(async()=>{for(let e of s)await ne(e);if(t&&(await ne({id:`mesurer.runtime-bridge`,version:i,provides:[`runtime:solid`],setup(e){e.service.provide(`runtime:solid`,{ownerDocument:y,ownerWindow:C,portalTarget:m,createWorkspaceRuntime:k,createInspectorMount:O});for(let t of $u)e.command.register(nd(t),()=>N(t))}}),t)){for(let e of c)await ne(e);if(t){l.clear();for(let e of o.settings())l.set(e.id,new Map((e.controls??[]).map(e=>[e.id,e.value()])));try{let e=C.localStorage.getItem(j);if(e){let t=JSON.parse(e);o.state.restore(t,`persist`)}}catch(e){f.onPluginError?.(e,`plugin-persistence`)}t&&(h(!0),A.textContent=b(),f.onPluginsReady?.(o))}}})();let re=e=>{let t=e.key.toLowerCase(),n=e.metaKey||e.ctrlKey;return n&&t===`,`?`settings`:n?null:t===`s`?`select`:t===`a`?`text-inspector`:t===`g`?`guides`:t===`p`?`color-picker`:t===`x`?`xray`:t===`r`?`rulers`:null},ie=e=>{if(mo(e,C))return;let t=re(e),n=t?g(t):void 0;if(t&&n){e.preventDefault(),e.stopImmediatePropagation(),S(n,{source:`builtin-shortcut`,builtin:t});return}let r=e.key.toLowerCase();if((r===`h`||r===`v`)&&g(`guides`)){e.preventDefault(),e.stopImmediatePropagation();return}let i=v().find(t=>t.shortcut&&!t.disabled?.()&&rd(e,t.shortcut));if(i){e.preventDefault(),e.stopImmediatePropagation(),S(i);return}let a=e.metaKey||e.ctrlKey;if(a&&r===`z`&&(e.shiftKey?o.redo():o.undo())){e.preventDefault(),e.stopImmediatePropagation();return}(a&&r===`,`&&!_(`settings`)||r===`s`&&!_(`select`)||r===`a`&&!_(`text-inspector`)||r===`g`&&!_(`guides`)||(r===`h`||r===`v`)&&!_(`guides`)||r===`p`&&!_(`color-picker`)||r===`x`&&!_(`xray`)||r===`r`&&!_(`rulers`)||e.key===`Alt`&&!_(`distance`))&&(e.preventDefault(),e.stopImmediatePropagation())};return C.addEventListener(`keydown`,ie,!0),()=>{t=!1,a&&(C.clearTimeout(a),M()),C.removeEventListener(`keydown`,ie,!0),te(),A.remove(),u=null,d=null,r&&o.dispose()}}),J(nc,{runtime:{sections:y,version:()=>i,update:C,reset:()=>{for(let e of n.settings()){let t=l.get(e.id);if(t)for(let n of e.controls??[]){let r=t.get(n.id);r!==void 0&&C(e.id,n,r)}}}},get children(){return J(Ll,{value:e=>{u=e},get children(){return J(Lu,Xi(e,{get pluginTools(){return v()},onPluginTool:e=>S(e),onBuiltinController:e=>{d=e}}))}})}})}var ad=(e,t,n)=>Math.min(Math.max(e,t),Math.max(t,n)),od=e=>{if(!e.length)return null;let t=Math.min(...e.map(e=>e.left)),n=Math.min(...e.map(e=>e.top)),r=Math.max(...e.map(e=>e.left+e.width)),i=Math.max(...e.map(e=>e.top+e.height));return{left:t,top:n,width:r-t,height:i-n}},sd=(e,t,n,r,i=8)=>{let a=r.innerWidth-t-8,o=r.innerHeight-n-8,s=e.left+e.width+i,c=e.left-t-i;return{left:s+t<=r.innerWidth-8?s:c>=8?c:ad(e.left+e.width-t,8,a),top:ad(e.top,8,o)}};function cd(e){let[t,n]=U(0),[r,i]=U(null),[a,o]=U({}),[s,c]=U(null),[l,u]=U(!1),[d,f]=U(``),[p,m]=U(null),[h,g]=U(!1),[_,v]=U(null),[y,b]=U(null),x=null,S=null,C,w=()=>C?.ownerDocument.defaultView??window;Ut(e.runtime.subscribe(()=>n(e=>e+1)));let T=H(()=>(t(),e.runtime.currentSelection())),E=H(()=>(t(),e.runtime.annotations())),D=H(()=>{let e=r();return e?E().find(t=>t.id===e)??null:null}),O=()=>T().elements.length>0||T().region!==null,k=H(()=>{let e=T();return od(e.elements.filter(e=>e.isConnected).map(e=>{let t=e.getBoundingClientRect();return{left:t.left,top:t.top,width:t.width,height:t.height}}))??e.region}),A=()=>{let e=T().elements.length;return e>1?`${e} selected elements`:e===1?`Selected element`:`Selected region`},j=e=>e.anchor.kind===`elements`?`${e.anchor.targets.length} selected ${e.anchor.targets.length===1?`element`:`elements`}`:`Selected region`,M=()=>{let t=T().elements;if(!t.length)return null;let n=e.runtime.hoveredElement();return t.find(e=>e===n)??t.find(e=>n&&e.contains(n))??t[0]},ee=()=>{let e=M();if(!e?.isConnected)return null;let t=e.getBoundingClientRect(),n={left:t.left,top:t.top,width:t.width,height:t.height},r=w(),i=n.left+n.width,a=n.top+n.height,o=[{space:r.innerWidth-i,points:[{left:i+6,top:n.top},{left:i+6,top:a-24}]},{space:n.left,points:[{left:n.left-24-6,top:n.top},{left:n.left-24-6,top:a-24}]},{space:r.innerHeight-a,points:[{left:i-24,top:a+6},{left:n.left,top:a+6}]},{space:n.top,points:[{left:i-24,top:n.top-24-6},{left:n.left,top:n.top-24-6}]}].sort((e,t)=>t.space-e.space).flatMap(e=>e.points).find(e=>e.left>=4&&e.top>=4&&e.left+24<=r.innerWidth-4&&e.top+24<=r.innerHeight-4),s={left:i+6,top:n.top};return{left:ad((o??s).left,4,r.innerWidth-24-4),top:ad((o??s).top,4,r.innerHeight-24-4)}},te=t=>{let n=e.runtime.annotationRect(t);if(!n)return null;let r=w(),i=n.left+n.width+6,o=i+24+8,s=n.left-6-24,c=s-8-272,l=o+272<=r.innerWidth-8,u=c>=8,d=l?i:u?s:ad(i,8,r.innerWidth-24-8),f=l?o:u?c:sd(n,272,176,r).left,p=a()[t];return{marker:{left:d,top:ad(n.top-12,4,r.innerHeight-24-4)},panel:{left:p?ad(p.left,8,r.innerWidth-272-8):f,top:ad(p?p.top:n.top,8,r.innerHeight-176-8)}}},ne=e=>te(e)?.marker??null,N=()=>{let e=k(),t=w(),n=s();return n?{left:ad(n.left,8,t.innerWidth-272-8),top:ad(n.top,8,t.innerHeight-154-8)}:e?sd(e,272,154,t):{left:8,top:8}},re=e=>te(e)?.panel??{left:8,top:8},ie=e=>{u(!1),i(e),v(null)},P=(e,t)=>{let n=e.currentTarget.ownerDocument.defaultView?.Element,r=e.target;if(e.button!==0||n&&r instanceof n&&r.closest(`button`))return;let i=e.currentTarget.parentElement;if(!i)return;let a=i.getBoundingClientRect(),s=w(),l=s.document.documentElement,u=l.style.userSelect;l.style.setProperty(`user-select`,`none`,`important`),x={surfaceId:t,pointerId:e.pointerId,startX:e.clientX,startY:e.clientY,originLeft:a.left,originTop:a.top,width:a.width,height:a.height},b(t),e.preventDefault(),e.stopPropagation();let d=e=>{if(!x||e.pointerId!==x.pointerId)return;let n=x,r=Math.max(8,s.innerWidth-n.width-8),i=Math.max(8,s.innerHeight-n.height-8),a={left:ad(n.originLeft+e.clientX-n.startX,8,r),top:ad(n.originTop+e.clientY-n.startY,8,i)};t===`composer`?c(a):o(e=>({...e,[t]:a}))},f=e=>{!x||e.pointerId!==x.pointerId||(l.style.userSelect=u,s.removeEventListener(`pointermove`,d),s.removeEventListener(`pointerup`,f),s.removeEventListener(`pointercancel`,f),x=null,b(null),S=null)};s.addEventListener(`pointermove`,d),s.addEventListener(`pointerup`,f),s.addEventListener(`pointercancel`,f),S=()=>{l.style.userSelect=u,s.removeEventListener(`pointermove`,d),s.removeEventListener(`pointerup`,f),s.removeEventListener(`pointercancel`,f),b(null)}};Ut(()=>{S?.(),S=null,x=null});let ae=async(e,t)=>{if(!h()){g(!0),v(null);try{await e(),v(t)}catch(e){v(e instanceof Error?e.message:String(e))}finally{g(!1)}}},oe=()=>{O()&&(m(null),v(null),i(null),c(null),u(!0))},se=()=>{u(!1),m(null),c(null)},ce=()=>{try{let t=e.runtime.addSelectionAnnotation(d());f(``),m(null),u(!1),c(null),i(t.id)}catch(e){m(e instanceof Error?e.message:String(e))}};return Xt(()=>(e.onController?.({openNoteComposer:oe}),()=>e.onController?.(null))),[(()=>{var e=Y(`span`,{"aria-hidden":`true`,style:{display:`none`}});return Qi(()=>e=>{C=e},e),e})(),J(G,{get when(){return q(()=>T().elements.length>0&&!l())()?!D():T().elements.length>0&&!l()},get children(){return J(G,{get when(){return ee()},children:e=>(()=>{var t=Y(`button`,{type:`button`,"data-mesurer-layer":`chrome`,"data-mesurer-inspector-ui":`true`,"data-mesurer-annotation-trigger":`true`,"aria-label":`Annotate selection`,title:`Annotate selection`,class:`msr:pointer-events-auto msr:fixed msr:z-[95] msr:flex msr:w-6 msr:h-6 msr:items-center msr:justify-center msr:rounded-[7px] msr:border msr:border-ink-200 msr:bg-white msr:text-black msr:outline-none msr:hover:bg-ink-50 msr:focus-visible:border-[#0d99ff]`,onPointerDown:e=>e.stopPropagation(),onClick:e=>{e.stopPropagation(),oe()}});return Q(t,J(wc,{size:14})),K(()=>({left:`${e().left}px`,top:`${e().top}px`}),(e,n)=>{$(t,`style`,e,n)}),t})()})}}),J(G,{get when(){return q(()=>!!l())()?k():l()},get children(){var e=Y(`div`,{"data-mesurer-layer":`chrome`,"data-mesurer-inspector-ui":`true`,"data-mesurer-annotation-composer":`true`,class:`mesurer-menu-surface msr:pointer-events-auto msr:fixed msr:z-[95] msr:w-[272px] msr:max-w-[calc(100vw-16px)] msr:rounded-[10px] msr:border msr:border-ink-200 msr:bg-white msr:p-1.5 msr:text-black`,onPointerDown:e=>e.stopPropagation(),onClick:e=>e.stopPropagation()}),t=Y(`div`,{class:`msr:flex msr:h-7 msr:items-center msr:gap-1.5 msr:px-1`,"aria-label":`Drag note composer`,onPointerDown:e=>P(e,`composer`)}),n=Y(`div`,{class:`msr:min-w-0 msr:flex-1`}),r=Y(`div`,{class:`msr:text-[11px] msr:font-medium msr:text-ink-900`}),i=Y(`div`,{class:`msr:text-[9px] msr:text-ink-500`}),a=Y(`button`,{type:`button`,class:`msr:flex msr:w-6 msr:h-6 msr:items-center msr:justify-center msr:rounded-[7px] msr:border-0 msr:bg-transparent msr:text-black msr:outline-none msr:hover:bg-black/4 msr:disabled:cursor-default msr:disabled:opacity-40`,"aria-label":`Close note composer`,title:`Close`,onClick:se}),o=Y(`textarea`,{autofocus:!0,placeholder:`Describe what should change…`,onInput:e=>{f(e.currentTarget.value),m(null)},onKeyDown:e=>{(e.metaKey||e.ctrlKey)&&e.key===`Enter`&&(e.preventDefault(),ce()),e.key===`Escape`&&(e.preventDefault(),se())},class:`msr:box-border msr:mt-1 msr:h-20 msr:w-full msr:resize-none msr:rounded-[7px] msr:border msr:border-ink-200 msr:bg-white msr:p-2 msr:text-[12px] msr:leading-[1.4] msr:text-black msr:outline-none msr:placeholder:text-ink-400 msr:focus:border-[#0d99ff]`}),s=Y(`div`,{class:`msr:mt-1.5 msr:flex msr:h-7 msr:items-center msr:justify-between msr:gap-2 msr:px-1`}),c=Y(`span`,{class:`msr:text-[9px] msr:text-ink-400`}),l=Y(`div`,{class:`msr:flex msr:gap-1`}),u=Y(`button`,{type:`button`,class:`msr:h-7 msr:rounded-[7px] msr:border-0 msr:bg-transparent msr:px-2 msr:text-[11px] msr:text-ink-700 msr:hover:bg-black/4`,onClick:se}),h=Y(`button`,{type:`button`,class:`msr:h-7 msr:rounded-[7px] msr:border-0 msr:bg-[#0d99ff] msr:px-2.5 msr:text-[11px] msr:font-medium msr:text-white msr:hover:bg-[#0b8eea]`,onClick:ce});return Z(e,t),Z(e,o),Z(e,s),Z(t,n),Z(t,a),Q(t,J(wc,{size:14,class:`msr:text-ink-700`}),n),Z(n,r),Z(n,i),Z(r,X(`Add note`)),Q(i,A),Q(a,J(Ec,{size:14})),Q(e,J(G,{get when(){return p()},children:e=>(()=>{var t=Y(`div`,{class:`msr:mt-1.5 msr:px-1 msr:text-[10px] msr:text-red-600`});return Q(t,e),t})()}),s),Z(s,c),Z(s,l),Z(c,X(`⌘/Ctrl ↵`)),Z(l,u),Z(l,h),Z(u,X(`Cancel`)),Z(h,X(`Add note`)),K(()=>({e:{left:`${N().left}px`,top:`${N().top}px`},t:{cursor:y()===`composer`?`grabbing`:`grab`},a:d()}),({e:n,t:r,a:i},a)=>{n!==a?.e&&$(e,`style`,n,a?.e),r!==a?.t&&$(t,`style`,r,a?.t),i!==a?.a&&$(o,`value`,i,a?.a)}),e}}),J(W,{get each(){return E()},children:(e,t)=>{let n=()=>ne(e.id);return J(G,{get when(){return n()},children:n=>(()=>{var i=Y(`button`,{type:`button`,"data-mesurer-layer":`evidence`,"data-mesurer-annotation-marker":`true`,onPointerDown:t=>{t.preventDefault(),t.stopPropagation(),ie(e.id)},onPointerUp:e=>e.stopPropagation(),onClick:t=>{t.preventDefault(),t.stopPropagation(),ie(e.id)},class:`msr:pointer-events-auto msr:fixed msr:z-[94] msr:flex msr:w-6 msr:h-6 msr:items-center msr:justify-center msr:rounded-[7px] msr:border msr:border-[#0d99ff] msr:bg-white msr:text-[#0d99ff] msr:outline-none msr:hover:bg-[#0d99ff]/8`});return Q(i,J(wc,{size:14})),K(()=>({e:`Mesurer annotation ${t()+1}: ${e.note}`,t:e.note,a:r()===e.id?`true`:`false`,o:{left:`${n().left}px`,top:`${n().top}px`}}),({e,t,a:n,o:r},a)=>{e!==a?.e&&$(i,`aria-label`,e,a?.e),t!==a?.t&&$(i,`title`,t,a?.t),n!==a?.a&&$(i,`aria-expanded`,n,a?.a),r!==a?.o&&$(i,`style`,r,a?.o)}),i})()})}}),J(G,{get when(){return D()},children:t=>{let n=()=>re(t().id);var r=Y(`div`,{"data-mesurer-layer":`chrome`,"data-mesurer-inspector-ui":`true`,"data-mesurer-annotation-panel":`true`,class:`mesurer-menu-surface msr:pointer-events-auto msr:fixed msr:z-[95] msr:w-[272px] msr:max-h-[220px] msr:rounded-[10px] msr:border msr:border-ink-200 msr:bg-white msr:p-1.5 msr:text-black`,onPointerDown:e=>e.stopPropagation(),onClick:e=>e.stopPropagation()}),a=Y(`div`,{class:`msr:flex msr:h-7 msr:items-center msr:gap-1.5 msr:px-1`,"aria-label":`Drag annotation panel`,onPointerDown:e=>P(e,t().id)}),s=Y(`div`,{class:`msr:min-w-0 msr:flex-1`}),c=Y(`div`,{class:`msr:text-[11px] msr:font-medium msr:text-ink-700`}),l=X(`Note `),u=Y(`div`,{class:`msr:text-[9px] msr:text-ink-500`}),d=Y(`div`,{class:`msr:flex msr:items-center msr:gap-0.5`}),f=Y(`button`,{type:`button`,class:`msr:flex msr:w-6 msr:h-6 msr:items-center msr:justify-center msr:rounded-[7px] msr:border-0 msr:bg-transparent msr:text-black msr:outline-none msr:hover:bg-black/4 msr:disabled:cursor-default msr:disabled:opacity-40`,"aria-label":`Copy annotation context`,title:`Copy context`,onClick:()=>void ae(()=>e.onCopy({annotation:t().id}),`Copied`)}),p=Y(`button`,{type:`button`,class:`msr:flex msr:w-6 msr:h-6 msr:items-center msr:justify-center msr:rounded-[7px] msr:border-0 msr:bg-transparent msr:text-black msr:outline-none msr:hover:bg-black/4 msr:disabled:cursor-default msr:disabled:opacity-40`,"aria-label":`Delete annotation`,title:`Delete`,onClick:()=>{e.runtime.removeAnnotation(t().id),o(e=>{let n={...e};return delete n[t().id],n}),i(null),v(null)}}),m=Y(`button`,{type:`button`,class:`msr:flex msr:w-6 msr:h-6 msr:items-center msr:justify-center msr:rounded-[7px] msr:border-0 msr:bg-transparent msr:text-black msr:outline-none msr:hover:bg-black/4 msr:disabled:cursor-default msr:disabled:opacity-40`,"aria-label":`Close annotation`,title:`Close`,onClick:()=>{i(null),v(null)}}),g=Y(`div`,{class:`msr:mx-1 msr:mt-1 msr:max-h-36 msr:overflow-auto msr:whitespace-pre-wrap msr:rounded-[7px] msr:bg-ink-50 msr:px-2 msr:py-2 msr:text-[12px] msr:leading-[1.45] msr:text-ink-800`});return Z(r,a),Z(r,g),Z(a,s),Z(a,d),Q(a,J(wc,{size:14,class:`msr:text-[#0d99ff]`}),s),Z(s,c),Z(s,u),Z(c,l),Q(c,()=>E().findIndex(e=>e.id===t().id)+1,null),Q(u,()=>j(t())),Z(d,f),Z(d,p),Z(d,m),Q(f,J(Cc,{size:14})),Q(p,J(Tc,{size:14})),Q(m,J(Ec,{size:14})),Q(g,()=>t().note),Q(r,J(G,{get when(){return _()},children:e=>(()=>{var t=Y(`div`,{class:`msr:mt-1.5 msr:px-1 msr:text-[10px] msr:text-ink-500`,role:`status`});return Q(t,e),t})()}),null),K(()=>({e:{left:`${n().left}px`,top:`${n().top}px`},t:{cursor:y()===t().id?`grabbing`:`grab`},a:h()}),({e,t,a:n},i)=>{e!==i?.e&&$(r,`style`,e,i?.e),t!==i?.t&&$(a,`style`,t,i?.t),n!==i?.a&&$(f,`disabled`,n,i?.a)}),r}})]}var ld=`mesurer:capture-bridge-ping`,ud=`mesurer:capture-bridge-request`,dd=`mesurer:capture-bridge-response`,fd=(e,t,n)=>{let r=Math.max(0,Math.min(e.x,t.x,n.width)),i=Math.max(0,Math.min(e.y,t.y,n.height)),a=Math.max(0,Math.min(Math.max(e.x,t.x),n.width)),o=Math.max(0,Math.min(Math.max(e.y,t.y),n.height));return{left:r,top:i,width:Math.max(0,a-r),height:Math.max(0,o-i)}},pd=async(e,t,n,r)=>{let i=await createImageBitmap(e);try{let e=i.width/n.width,a=i.height/n.height,o=Math.max(0,Math.round(t.left*e)),s=Math.max(0,Math.round(t.top*a)),c=Math.max(1,Math.min(i.width-o,Math.round(t.width*e))),l=Math.max(1,Math.min(i.height-s,Math.round(t.height*a))),u=r.createElement(`canvas`);u.width=c,u.height=l;let d=u.getContext(`2d`);if(!d)throw Error(`Could not crop screenshot`);return d.drawImage(i,o,s,c,l,0,0,c,l),await new Promise((e,t)=>{u.toBlob(n=>{n?e(n):t(Error(`Could not crop screenshot`))},`image/png`)})}finally{i.close()}},md=async(e,t)=>{let n=t.navigator.clipboard,r=globalThis.ClipboardItem;if(!n?.write||!r)throw Error(`PNG clipboard copy is not available`);await n.write([new r({"image/png":e})])},hd=(e=new Date)=>{let t=e=>String(e).padStart(2,`0`);return`mesurer-${e.getFullYear()}-${t(e.getMonth()+1)}-${t(e.getDate())}-${t(e.getHours())}${t(e.getMinutes())}${t(e.getSeconds())}.png`},gd=(e,t,n,r)=>{let i=globalThis.URL.createObjectURL(e),a=n.createElement(`a`);a.href=i,a.download=t,a.rel=`noopener`,n.documentElement.append(a),a.click(),a.remove(),r.setTimeout(()=>globalThis.URL.revokeObjectURL(i),1e3)},_d=e=>new Promise(t=>{e.requestAnimationFrame(()=>{e.requestAnimationFrame(()=>t())})}),vd=e=>e.crypto?.randomUUID?.()??`mesurer-${Date.now()}-${Math.random().toString(36).slice(2)}`,yd=(e,t,n=``)=>`${e}:${t}:${n}`,bd=(e,t,n)=>{let r=`${t}:${n}:`;return e.startsWith(r)?e.slice(r.length):null},xd=e=>new Promise(t=>{let n=vd(e),r=e.location.origin,i=o=>{o.source===e&&o.origin===r&&bd(String(o.data??``),`mesurer:capture-bridge-pong`,n)!==null&&(e.removeEventListener(`message`,i),e.clearTimeout(a),t(!0))},a=e.setTimeout(()=>{e.removeEventListener(`message`,i),t(!1)},80);e.addEventListener(`message`,i),e.postMessage(yd(ld,n),r)}),Sd=e=>new Promise((t,n)=>{let r=vd(e),i=e.location.origin,a=s=>{if(s.source!==e||s.origin!==i)return;let c=bd(String(s.data??``),dd,r);if(c===null)return;if(e.removeEventListener(`message`,a),e.clearTimeout(o),!c.startsWith(`ok:`)){t(null);return}let l=c.slice(3);if(!l){t(null);return}e.fetch(l).then(e=>e.blob()).then(t,n)},o=e.setTimeout(()=>{e.removeEventListener(`message`,a),t(null)},4e3);e.addEventListener(`message`,a),e.postMessage(yd(ud,r),i)}),Cd=new WeakMap,wd=e=>{let t=Cd.get(e),n=t?.stream.getVideoTracks()[0];if(!t||!n||n.readyState!==`live`){Cd.delete(e);return}return t},Td=async(e,t)=>{let n=wd(t);if(n)return n;let r=t.navigator.mediaDevices;if(!r?.getDisplayMedia)throw Error(`Screenshot capture is unavailable`);let i=await r.getDisplayMedia({audio:!1,video:!0,preferCurrentTab:!0,selfBrowserSurface:`include`}),a=i.getVideoTracks()[0];if(!a)throw i.getTracks().forEach(e=>e.stop()),Error(`Capture failed`);try{let n=e.createElement(`video`);n.autoplay=!0,n.muted=!0,n.playsInline=!0,n.srcObject=i,await n.play(),(n.videoWidth===0||n.videoHeight===0)&&await new Promise(e=>{n.onloadedmetadata=()=>e()});let r={stream:i,video:n};return Cd.set(t,r),a.addEventListener(`ended`,()=>{Cd.get(t)===r&&Cd.delete(t)},{once:!0}),r}catch(e){throw i.getTracks().forEach(e=>e.stop()),e}},Ed=e=>{let t=Cd.get(e);t&&(Cd.delete(e),t.video.pause(),t.video.srcObject=null,t.stream.getTracks().forEach(e=>e.stop()))},Dd=async({ownerDocument:e,ownerWindow:t})=>{let{video:n}=await Td(e,t),r=e.createElement(`canvas`);r.width=n.videoWidth,r.height=n.videoHeight;let i=r.getContext(`2d`);if(!i)throw Error(`Capture failed`);return i.drawImage(n,0,0),await new Promise((e,t)=>{r.toBlob(n=>{n?e(n):t(Error(`Capture failed`))},`image/png`)})},Od=async(e,t)=>{await xd(t)||await Td(e,t)},kd=async({ownerDocument:e,ownerWindow:t})=>{if(await xd(t)){let e=await Sd(t);if(e)return e}return Dd({ownerDocument:e,ownerWindow:t})},Ad=144,jd=96,Md=8,Nd=4,Pd=1800,Fd=(e,t)=>{for(let[n,r]of Object.entries(t))e.style.setProperty(n,r)},Id=(e,t)=>({left:Math.min(Math.max(Md,e.left),Math.max(Md,t.innerWidth-Ad-Md)),top:Math.min(Math.max(Md,e.top),Math.max(Md,t.innerHeight-jd-Md))}),Ld=(e,t)=>{let n=e.createElement(`button`);return n.type=`button`,n.textContent=t,Fd(n,{height:`32px`,padding:`0 12px`,border:`1px solid rgb(255 255 255 / 18%)`,"border-radius":`8px`,"background-color":`rgb(28 28 30 / 84%)`,color:`white`,"font-family":`inherit`,"font-size":`12px`,"font-weight":`500`,cursor:`pointer`}),n},Rd=({copied:e,downloaded:t,copyFailed:n,downloadFailed:r})=>e&&t?`Copied and saved screenshot`:e&&r?`Copied screenshot · Save unavailable`:t&&n?`Saved screenshot · Copy unavailable`:e?`Copied screenshot`:t?`Saved screenshot`:n&&r?`Screenshot captured · Copy and save unavailable`:n?`Screenshot captured · Copy unavailable`:r?`Screenshot captured · Save unavailable`:`Screenshot captured`,zd=e=>e!==null&&(e.nodeType===1||e.nodeType===11),Bd=({ownerDocument:e,ownerWindow:t,root:n,previewDurationMs:r})=>{let i=n.closest(`[data-mesurer-root='true']`)?.parentNode??n.parentNode;if(!zd(i))throw Error(`Screenshot preview requires a mounted Mesurer host.`);let a=e.createElement(`div`);a.dataset.mesurerInspectorUi=`true`,a.dataset.mesurerScreenshotInteractive=`true`,Fd(a,{position:`fixed`,left:`0`,top:`0`,width:`0`,height:`0`,overflow:`visible`,"z-index":`96`,"pointer-events":`auto`,"font-family":`ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif`}),i.append(a);let o=e.createElement(`div`);o.dataset.mesurerScreenshotPreview=`true`,o.setAttribute(`role`,`button`),o.setAttribute(`aria-label`,`Open captured screenshot`),o.tabIndex=0,Fd(o,{position:`fixed`,display:`none`,"z-index":`96`,width:`${Ad}px`,height:`${jd}px`,"box-sizing":`border-box`,overflow:`hidden`,"border-radius":`10px`,border:`1px solid rgb(0 0 0 / 14%)`,"background-color":`white`,"box-shadow":`0 2px 8px rgb(0 0 0 / 12%)`,"pointer-events":`auto`,cursor:`grab`,"user-select":`none`,"touch-action":`none`});let s=e.createElement(`img`);s.dataset.mesurerScreenshotPreviewImage=`true`,s.alt=`Captured screenshot`,s.draggable=!1,s.title=`Click to open · Right-click for browser image actions`,Fd(s,{display:`block`,width:`100%`,height:`100%`,"object-fit":`contain`,"background-color":`white`}),o.append(s);let c=e.createElement(`button`);c.dataset.mesurerScreenshotPreviewDismiss=`true`,c.type=`button`,c.setAttribute(`aria-label`,`Dismiss screenshot preview`),c.title=`Dismiss`,Fd(c,{position:`absolute`,top:`8px`,right:`8px`,width:`20px`,height:`20px`,display:`flex`,"align-items":`center`,"justify-content":`center`,"box-sizing":`border-box`,padding:`0`,border:`0`,"border-radius":`999px`,"background-color":`rgb(48 51 64)`,color:`white`,"font-family":`inherit`,"font-size":`14px`,"line-height":`1`,"z-index":`1`,cursor:`pointer`});let l=e.createElementNS(`http://www.w3.org/2000/svg`,`svg`);l.setAttribute(`viewBox`,`0 0 16 16`),l.setAttribute(`width`,`12`),l.setAttribute(`height`,`12`),l.setAttribute(`fill`,`none`),l.setAttribute(`aria-hidden`,`true`);let u=e.createElementNS(`http://www.w3.org/2000/svg`,`path`);u.setAttribute(`d`,`m4 4 8 8M12 4l-8 8`),u.setAttribute(`stroke`,`currentColor`),u.setAttribute(`stroke-width`,`1.75`),u.setAttribute(`stroke-linecap`,`round`),l.append(u),c.append(l),o.append(c),a.append(o);let d=e.createElement(`div`);d.dataset.mesurerScreenshotViewer=`true`,d.setAttribute(`role`,`dialog`),d.setAttribute(`aria-modal`,`true`),d.setAttribute(`aria-label`,`Screenshot viewer`),Fd(d,{position:`fixed`,inset:`0`,display:`none`,"z-index":`110`,"align-items":`center`,"justify-content":`center`,padding:`56px 48px 40px`,"box-sizing":`border-box`,"background-color":`rgb(0 0 0 / 72%)`,"backdrop-filter":`blur(8px)`,"pointer-events":`auto`});let f=e.createElement(`img`);f.dataset.mesurerScreenshotViewerImage=`true`,f.alt=`Captured screenshot`,Fd(f,{display:`block`,"max-width":`calc(100vw - 96px)`,"max-height":`calc(100vh - 112px)`,width:`auto`,height:`auto`,"object-fit":`contain`,"border-radius":`8px`,"box-shadow":`0 8px 30px rgb(0 0 0 / 28%)`}),d.append(f);let p=e.createElement(`div`);p.dataset.mesurerScreenshotViewerControls=`true`,Fd(p,{position:`fixed`,top:`16px`,right:`16px`,display:`flex`,gap:`8px`,"pointer-events":`auto`});let m=Ld(e,`Copy`);m.dataset.mesurerScreenshotViewerCopy=`true`,m.setAttribute(`aria-label`,`Copy screenshot`);let h=Ld(e,`Save`);h.dataset.mesurerScreenshotViewerSave=`true`,h.setAttribute(`aria-label`,`Save screenshot`);let g=Ld(e,`Close`);g.dataset.mesurerScreenshotViewerClose=`true`,g.setAttribute(`aria-label`,`Close screenshot viewer`),p.append(m,h,g),d.append(p),a.append(d);let _=e.createElement(`div`);_.dataset.mesurerScreenshotToast=`true`,_.setAttribute(`role`,`status`),Fd(_,{position:`fixed`,left:`50%`,bottom:`20px`,display:`none`,"z-index":`120`,transform:`translateX(-50%)`,padding:`7px 10px`,"border-radius":`8px`,"background-color":`rgb(28 28 30 / 90%)`,color:`white`,"font-size":`12px`,"font-weight":`500`,"pointer-events":`none`}),a.append(_);let v=null,y=null,b=null,x=null,S=0,C=0,w=!1,T=()=>{S&&t.clearTimeout(S),S=0},E=()=>{C&&t.clearTimeout(C),C=0},D=(e,n=!1)=>{E(),_.textContent=e,_.style.backgroundColor=n?`#b42318`:`rgb(28 28 30 / 90%)`,_.style.display=`block`,C=t.setTimeout(()=>{C=0,_.style.display=`none`},Pd)},O=()=>{d.style.display=`none`},k=()=>{y&&globalThis.URL.revokeObjectURL(y),y=null,v=null,s.removeAttribute(`src`),f.removeAttribute(`src`)},A=()=>{T(),O(),o.style.display=`none`,k()},j=()=>Id({left:t.innerWidth-Ad-Md,top:t.innerHeight-jd-Md},t),M=e=>{let n=Id(e,t);b=n,o.style.left=`${n.left}px`,o.style.top=`${n.top}px`},ee=()=>{!v||!y||(T(),d.style.display=`flex`,g.focus())},te=async()=>{let e=v;if(e)try{await md(Promise.resolve(e),t),D(`Copied screenshot`)}catch{D(`Could not copy screenshot`,!0)}},ne=()=>{let n=v;if(n)try{gd(n,hd(),e,t),D(`Saved screenshot`)}catch{D(`Could not save screenshot`,!0)}},N=(e,t,n)=>{if(!v)return!1;T();let r=o.getBoundingClientRect();return x={pointerId:n,startX:e,startY:t,left:r.left,top:r.top,moved:!1},o.style.cursor=`grabbing`,!0},re=(e,t)=>{let n=x;if(!n)return;let r=e-n.startX,i=t-n.startY;!n.moved&&Math.hypot(r,i)>=Nd&&(n.moved=!0),n.moved&&M({left:n.left+r,top:n.top+i})},ie=()=>{let e=x;e&&(x=null,o.style.cursor=`grab`,e.moved||ee())},P=()=>{x&&(x=null,o.style.cursor=`grab`)},ae=e=>{e.button!==0||!N(e.clientX,e.clientY,null)||e.preventDefault()},oe=e=>{x?.pointerId===null&&re(e.clientX,e.clientY)},se=e=>{e.button===0&&x?.pointerId===null&&ie()},ce=e=>{e.pointerType!==`mouse`&&e.button===0&&N(e.clientX,e.clientY,e.pointerId)&&(o.setPointerCapture?.(e.pointerId),e.preventDefault())},F=e=>{let t=x?.pointerId;t!=null&&t===e.pointerId&&re(e.clientX,e.clientY)},le=e=>{let t=x?.pointerId;t!=null&&t===e.pointerId&&(o.hasPointerCapture?.(e.pointerId)&&o.releasePointerCapture(e.pointerId),ie())},ue=e=>{let t=x?.pointerId;t!=null&&t===e.pointerId&&(o.hasPointerCapture?.(e.pointerId)&&o.releasePointerCapture(e.pointerId),P())},de=e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),ee())},fe=e=>{e.target===d&&O()},pe=e=>{e.key===`Escape`&&d.style.display!==`none`&&(e.preventDefault(),e.stopImmediatePropagation(),O())};return c.addEventListener(`pointerdown`,e=>e.stopPropagation()),c.addEventListener(`mousedown`,e=>e.stopPropagation()),c.addEventListener(`click`,e=>{e.stopPropagation(),A()}),o.addEventListener(`mousedown`,ae),o.addEventListener(`pointerdown`,ce),o.addEventListener(`keydown`,de),d.addEventListener(`click`,fe),m.addEventListener(`click`,()=>{te()}),h.addEventListener(`click`,ne),g.addEventListener(`click`,O),t.addEventListener(`mousemove`,oe,!0),t.addEventListener(`mouseup`,se,!0),t.addEventListener(`pointermove`,F,!0),t.addEventListener(`pointerup`,le,!0),t.addEventListener(`pointercancel`,ue,!0),t.addEventListener(`keydown`,pe,!0),{show(e,n){if(w)return;T(),O(),k(),v=e;let i=globalThis.URL.createObjectURL(e);y=i,s.src=i,f.src=i,o.style.display=`block`,M(b??j()),D(Rd(n)),r>0&&(S=t.setTimeout(A,r))},dismiss:A,dispose(){w||(w=!0,T(),E(),A(),t.removeEventListener(`mousemove`,oe,!0),t.removeEventListener(`mouseup`,se,!0),t.removeEventListener(`pointermove`,F,!0),t.removeEventListener(`pointerup`,le,!0),t.removeEventListener(`pointercancel`,ue,!0),t.removeEventListener(`keydown`,pe,!0),o.removeEventListener(`mousedown`,ae),o.removeEventListener(`pointerdown`,ce),o.removeEventListener(`keydown`,de),d.removeEventListener(`click`,fe),a.remove())}}},Vd=`mesurer.screenshot`,Hd=`screenshot`,Ud=`mesurer.screenshot.settings`,Wd=`mesurer.screenshot.active`,Gd=`runtime:solid`,Kd=`screenshot.toggle`,qd=2500,Jd=0,Yd=[`[data-mesurer-measurement='true']`,`[data-mesurer-selected-measurement='true']`,`[data-mesurer-selection-spacing-target='true']`,`[data-mesurer-guide='true']`,`[data-mesurer-distance='true']`].join(`,`),Xd={viewBox:`0 0 256 256`,paths:[`m 96,50 a 6.0006,6.0006 0 0 0 -4.992188,2.671875 L 76.789062,74 H 40 C 27.920803,74 18,83.920803 18,96 v 96 c 0,12.0792 9.920803,22 22,22 h 176 c 12.0792,0 22,-9.9208 22,-22 V 96 C 238,83.920803 228.0792,74 216,74 H 179.21094 L 164.99219,52.671875 A 6.0006,6.0006 0 0 0 160,50 Z m 3.210937,12 h 57.578123 l 14.21875,21.328125 A 6.0006,6.0006 0 0 0 176,86 h 40 c 5.59392,0 10,4.406085 10,10 v 96 c 0,5.59392 -4.40608,10 -10,10 H 40 c -5.593915,0 -10,-4.40608 -10,-10 V 96 c 0,-5.593915 4.406085,-10 10,-10 h 40 a 6.0006,6.0006 0 0 0 4.992187,-2.671875 z`,`m 128,94 c -23.12489,0 -42,18.87511 -42,42 0,23.12489 18.87511,42 42,42 23.12489,0 42,-18.87511 42,-42 0,-23.12489 -18.87511,-42 -42,-42 z m 0,12 c 16.63961,0 30,13.36039 30,30 0,16.63961 -13.36039,30 -30,30 -16.63961,0 -30,-13.36039 -30,-30 0,-16.63961 13.36039,-30 30,-30 z`]},Zd=(e,t)=>{for(let[n,r]of Object.entries(t))e.style.setProperty(n,r)},Qd=(e,t)=>{for(let n of[`left`,`top`,`right`,`bottom`,`width`,`height`]){let r=t[n];r===void 0?e.style.removeProperty(n):e.style.setProperty(n,`${r}px`)}},$d=e=>{let t=e(Ud);return{toolEnabled:t?.toolEnabled??!0,copy:t?.copy??!0,download:t?.download??!1,includeMeasurements:t?.includeMeasurements??!1}},ef=e=>({value:e.style.getPropertyValue(`display`),priority:e.style.getPropertyPriority(`display`)}),tf=(e,t)=>{t.value||t.priority?e.style.setProperty(`display`,t.value,t.priority):e.style.removeProperty(`display`)},nf=(e,t)=>{let n=e;for(;n.parentElement&&n.parentElement!==t;)n=n.parentElement;return n.parentElement===t?n:null},rf=e=>{let t=e.querySelector(`[data-mesurer-root='true']`);if(!t)return()=>void 0;let n=new Set;for(let e of t.querySelectorAll(`[data-mesurer-rulers='true']`)){let r=nf(e,t);r&&n.add(r)}for(let e of t.querySelectorAll(Yd)){let r=nf(e,t);r&&n.add(r)}let r=[];for(let e of n)e.dataset.mesurerInspectorUi!==`true`&&(r.push({element:e,display:ef(e)}),e.style.setProperty(`display`,`none`,`important`));return()=>{for(let e of r)tf(e.element,e.display)}},af=(e={})=>_a({id:Vd,version:`0.1.0`,requires:[Gd],provides:[`tool:screenshot`,`capture:screenshot`,`settings:screenshot`],setup(t){let n=t.service.get(Gd);if(!n)throw Error(`Screenshot plugin requires the Solid renderer runtime.`);let{ownerDocument:r,ownerWindow:i}=n,a=n.createWorkspaceRuntime(),o=n.createInspectorMount(),s=e.captureVisibleTab??kd,c=e.previewDurationMs??Jd;t.state.register({id:Ud,initial:{toolEnabled:e.toolEnabled??!0,copy:e.copy??!0,download:e.download??!1,includeMeasurements:e.includeMeasurements??!1},persist:!0}),t.state.register({id:Wd,initial:!1});let l=o.element;l.dataset.mesurerScreenshot=`true`,Zd(l,{position:`fixed`,inset:`0`,"z-index":`85`,"pointer-events":`none`,"font-family":`ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif`});let u=r.createElement(`div`);u.dataset.mesurerScreenshotSelect=`true`,u.setAttribute(`role`,`application`),u.setAttribute(`aria-label`,`Screenshot selection`),Zd(u,{position:`fixed`,inset:`0`,display:`none`,"z-index":`85`,cursor:`crosshair`,"pointer-events":`auto`,"user-select":`none`,"touch-action":`none`}),l.append(u);let d=Array.from({length:4},()=>{let e=r.createElement(`div`);return Zd(e,{position:`fixed`,"background-color":`rgb(0 0 0 / 40%)`,"pointer-events":`none`}),u.append(e),e}),f=r.createElement(`div`);Zd(f,{position:`fixed`,display:`none`,border:`1px solid #0d99ff`,"box-sizing":`border-box`,"pointer-events":`none`}),u.append(f);let p=r.createElement(`div`);Zd(p,{position:`fixed`,display:`none`,"z-index":`86`,transform:`translateX(-50%)`,"border-radius":`4px`,padding:`2px 4px`,"background-color":`#0d99ff`,color:`white`,"font-size":`10px`,"font-variant-numeric":`tabular-nums`,"pointer-events":`none`}),u.append(p);let m=r.createElement(`div`);m.textContent=`Drag to select · Esc to cancel`,Zd(m,{position:`fixed`,left:`50%`,bottom:`16px`,transform:`translateX(-50%)`,"border-radius":`4px`,padding:`4px 8px`,"background-color":`black`,color:`white`,"font-size":`11px`,"pointer-events":`none`}),u.append(m);let h=r.createElement(`div`);h.dataset.mesurerScreenshotError=`true`,h.setAttribute(`role`,`status`),h.textContent=`Could not save screenshot`,Zd(h,{position:`fixed`,display:`none`,"z-index":`97`,"border-radius":`6px`,padding:`6px 8px`,"background-color":`#b42318`,color:`white`,"font-size":`11px`,"pointer-events":`none`}),l.append(h);let g=null,_=null,v=0,y=0,b=!1,x=!1,S=!1,C=()=>t.state.get(`mesurer.screenshot.active`)??!1,w=()=>$d(t.state.get),T=e=>{t.state.update(Ud,t=>{let n={...t};return e.toolEnabled!==void 0&&(n.toolEnabled=e.toolEnabled),e.copy!==void 0&&(n.copy=e.copy),e.download!==void 0&&(n.download=e.download),e.includeMeasurements!==void 0&&(n.includeMeasurements=e.includeMeasurements),n})},E=e=>{C()!==e&&t.state.update(`mesurer.screenshot.active`,()=>e)},D=()=>{if(_)return;let e=n.portalTarget.querySelector(`[data-mesurer-toolbar='true']`);e&&(_={element:e,visibility:{value:e.style.getPropertyValue(`visibility`),priority:e.style.getPropertyPriority(`visibility`)}},e.style.setProperty(`visibility`,`hidden`,`important`))},O=()=>{if(!_)return;let{element:e,visibility:t}=_;_=null,t.value||t.priority?e.style.setProperty(`visibility`,t.value,t.priority):e.style.removeProperty(`visibility`)},k=e=>{let t=i.innerWidth,n=i.innerHeight;if(!e||e.width<=0||e.height<=0){Qd(d[0],{left:0,top:0,width:t,height:n});for(let e of d.slice(1))Qd(e,{left:0,top:0,width:0,height:0});f.style.display=`none`,p.style.display=`none`;return}Qd(d[0],{left:0,top:0,width:t,height:e.top}),Qd(d[1],{left:0,top:e.top,width:e.left,height:e.height}),Qd(d[2],{left:e.left+e.width,top:e.top,width:Math.max(0,t-e.left-e.width),height:e.height}),Qd(d[3],{left:0,top:e.top+e.height,width:t,height:Math.max(0,n-e.top-e.height)}),f.style.display=`block`,Qd(f,e),p.style.display=`block`,p.textContent=`${Math.round(e.width)} × ${Math.round(e.height)}`,Qd(p,{left:e.left+e.width/2,top:Math.min(n-22,e.top+e.height+6)})},A=()=>n.portalTarget.querySelector(`[data-mesurer-tool-id='screenshot']`)?.getBoundingClientRect()??null,j=Bd({ownerDocument:r,ownerWindow:i,root:l,previewDurationMs:c}),M=e=>{let t=A(),n=Math.max(140,e.offsetWidth||140),r=Math.max(26,e.offsetHeight||26),a=t?Math.min(i.innerWidth-n-8,Math.max(8,t.left+t.width/2-n/2)):8,o=t?t.bottom+8:8,s=o+r<=i.innerHeight-8?o:Math.max(8,(t?.top??i.innerHeight)-r-8);e.style.left=`${a}px`,e.style.top=`${s}px`},ee=()=>{v&&i.clearTimeout(v),h.style.display=`block`,M(h),v=i.setTimeout(()=>{v=0,h.style.display=`none`},qd)},te=()=>{g=null,k(null),u.style.visibility=``,u.style.display=`none`,l.style.pointerEvents=`none`,E(!1),O()},ne=()=>{y+=1,te(),Ed(i)},N=async e=>{if(b)throw Error(`A screenshot capture is already running.`);if(e.width<4||e.height<4)throw Error(`Screenshot selection must be at least 4px by 4px.`);b=!0;let o=++y,c=w(),l=c.includeMeasurements?()=>void 0:rf(n.portalTarget);a.prepareCapture();try{u.style.visibility=`hidden`,await _d(i);let n=await pd(await s({ownerDocument:r,ownerWindow:i}),e,{width:i.innerWidth,height:i.innerHeight},r);if(y!==o)throw Error(`Screenshot capture was cancelled.`);let a=!1,l=!1,d=c.copy?md(Promise.resolve(n),i).then(()=>{a=!0}):Promise.resolve(),f=c.download?Promise.resolve().then(()=>{gd(n,hd(),r,i),l=!0}):Promise.resolve(),p=await Promise.allSettled([d,f]),m=c.copy&&p[0]?.status===`rejected`,h=c.download&&p[1]?.status===`rejected`;if(y!==o)throw Error(`Screenshot capture was cancelled.`);return j.show(n,{copied:a,downloaded:l,copyFailed:m,downloadFailed:h}),await t.hook.emit(`screenshot:capture`,{rect:{...e},copied:a,downloaded:l}),{blob:n,rect:{...e},copied:a,downloaded:l}}catch(e){throw y===o&&ee(),e}finally{u.style.visibility=``,l(),a.finishCapture(),b=!1}},re=async()=>{if(w().toolEnabled){if(C()){ne();return}if(!x){x=!0,j.dismiss();try{if(e.captureVisibleTab===void 0&&await Od(r,i),S)return;D(),k(null),u.style.visibility=`visible`,l.style.pointerEvents=`auto`,u.style.display=`block`,E(!0)}catch(e){throw e instanceof Error&&e.name===`AbortError`||ee(),e}finally{x=!1}}}},ie=e=>{!C()||e.button!==0||(e.preventDefault(),e.stopPropagation(),g={x:e.clientX,y:e.clientY},k(fd(g,g,{width:i.innerWidth,height:i.innerHeight})),u.setPointerCapture?.(e.pointerId))},P=e=>{!C()||!g||k(fd(g,{x:e.clientX,y:e.clientY},{width:i.innerWidth,height:i.innerHeight}))},ae=e=>{let t=g;if(g=null,!C()||!t)return;u.hasPointerCapture?.(e.pointerId)&&u.releasePointerCapture(e.pointerId);let n=fd(t,{x:e.clientX,y:e.clientY},{width:i.innerWidth,height:i.innerHeight});if(k(n),n.width<4||n.height<4){k(null);return}N(n).catch(()=>void 0).finally(()=>{C()&&te()})},oe=e=>{g=null,u.hasPointerCapture?.(e.pointerId)&&u.releasePointerCapture(e.pointerId),k(null)},se=e=>{e.key!==`Escape`||!C()||(e.preventDefault(),e.stopImmediatePropagation(),ne())};u.addEventListener(`pointerdown`,ie),u.addEventListener(`pointermove`,P),u.addEventListener(`pointerup`,ae),u.addEventListener(`pointercancel`,oe),i.addEventListener(`keydown`,se,!0);let ce={active:C,settings:w,setSettings:T,start:re,cancel:ne,capture:N};t.tool.register({id:`screenshot`,label:`Screenshot`,order:70,command:Kd,icon:Xd,active:C,hidden:()=>!w().toolEnabled}),t.settings.register({id:`screenshot`,label:`Screenshot`,order:40,controls:[{type:`toggle`,id:`tool`,label:`Screenshot tool`,description:`Show the camera tool in the toolbar.`,value:()=>w().toolEnabled,set:e=>{T({toolEnabled:e}),!e&&C()&&ne()}},{type:`toggle`,id:`copy`,label:`Auto-copy`,description:`Copy each successful capture when the browser allows it.`,value:()=>w().copy,set:e=>T({copy:e})},{type:`toggle`,id:`download`,label:`Auto-download`,description:`Download each successful capture as a PNG.`,value:()=>w().download,set:e=>T({download:e})},{type:`toggle`,id:`measurements`,label:`Include measurements`,description:`Keep selections, measurements, guides, distances, and rulers in the PNG.`,value:()=>w().includeMeasurements,set:e=>T({includeMeasurements:e})}]}),t.command.register(Kd,re),t.service.provide(Hd,ce),t.lifecycle.onDispose(()=>{S=!0,y+=1,u.removeEventListener(`pointerdown`,ie),u.removeEventListener(`pointermove`,P),u.removeEventListener(`pointerup`,ae),u.removeEventListener(`pointercancel`,oe),i.removeEventListener(`keydown`,se,!0),v&&i.clearTimeout(v),j.dispose(),O(),Ed(i),a.finishCapture(),a.dispose(),o.dispose()})}}),of=e=>Number.parseFloat(e)||0,sf=0,cf=(e,t)=>{let n=t.CSS;return n?.escape?n.escape(e):e.replace(/[^a-zA-Z0-9_-]/g,e=>`\\${e}`)},lf=e=>e.nodeType===9,uf=e=>e.nodeType===11;function df(e){let t=e.getRootNode();return uf(t)?t:e.ownerDocument}var ff=(e,t)=>{if(lf(e)||uf(e))return e;let n=df(e);return uf(n)?n:t};function pf(e,t,n=lf(t)?t:t.ownerDocument??document){let r=ff(t,n).elementFromPoint(e.x,e.y);for(;r?.shadowRoot;){let t=r.shadowRoot.elementFromPoint(e.x,e.y);if(!t||t===r)break;r=t}return r}function mf(e,t){if(lf(t))return!0;let n=e;for(;n;){if(t===n||t.contains(n))return!0;let e=n.getRootNode();if(!uf(e))return!1;n=e.host}return!1}function hf(e,t){if(!e)return t();let n=[e,...e.querySelectorAll(`*`)],r=n.map(e=>[e,e.style.getPropertyValue(`pointer-events`),e.style.getPropertyPriority(`pointer-events`)]);for(let e of n)e.style.setProperty(`pointer-events`,`none`,`important`);try{return t()}finally{for(let[e,t,n]of r)t?e.style.setProperty(`pointer-events`,t,n):e.style.removeProperty(`pointer-events`)}}function gf(e){let t=e.ownerDocument.defaultView??window;if(e.id)return`#${cf(e.id,t)}`;let n=e.getAttribute(`data-testid`);if(n)return`[data-testid=${JSON.stringify(n)}]`;let r=[],i=e;for(;i&&r.length<5;){let e=i.localName,t=i.localName,n=i.parentElement;if(n){let r=[...n.children].filter(e=>e.localName===t);r.length>1&&(e+=`:nth-of-type(${r.indexOf(i)+1})`)}r.unshift(e),i=n}return r.join(` > `)}function _f(e,t,n=`dom-inspection-${++sf}`){let r=e.getBoundingClientRect(),i=t.getComputedStyle(e),a={top:of(i.paddingTop),right:of(i.paddingRight),bottom:of(i.paddingBottom),left:of(i.paddingLeft)},o={top:of(i.marginTop),right:of(i.marginRight),bottom:of(i.marginBottom),left:of(i.marginLeft)},s={left:r.left+a.left,top:r.top+a.top,width:Math.max(0,r.width-a.left-a.right),height:Math.max(0,r.height-a.top-a.bottom)},c={left:r.left-o.left,top:r.top-o.top,width:r.width+o.left+o.right,height:r.height+o.top+o.bottom},l=e.tagName.toLowerCase(),u=e.id?`#${e.id}`:``,d=e.classList.item(0),f=d?`.${d}`:``;return{id:n,rect:{left:r.left,top:r.top,width:r.width,height:r.height},paddingRect:s,marginRect:c,padding:a,margin:o,label:`${l}${u}${f}`,elementRef:e}}function vf(e){let t=e.ownerDocument.defaultView??window,n=t.getComputedStyle(e),r=e instanceof t.HTMLElement?e:null,i=e.getBoundingClientRect(),a=r?_f(r,t):null,o=e=>{let t=Number.parseFloat(e);return Number.isFinite(t)?t:0},s=e=>({top:o(n.getPropertyValue(`${e}-top${e===`border`?`-width`:``}`)),right:o(n.getPropertyValue(`${e}-right${e===`border`?`-width`:``}`)),bottom:o(n.getPropertyValue(`${e}-bottom${e===`border`?`-width`:``}`)),left:o(n.getPropertyValue(`${e}-left${e===`border`?`-width`:``}`))});return{selector:gf(e),tag:e.localName,id:e.id||null,classes:[...e.classList],text:(e.textContent??``).replace(/\s+/g,` `).trim().slice(0,500),role:e.getAttribute(`role`),ariaLabel:e.getAttribute(`aria-label`),rect:{left:i.left,top:i.top,right:i.right,bottom:i.bottom,width:i.width,height:i.height,x:i.x,y:i.y},margin:a?.margin??s(`margin`),padding:a?.padding??s(`padding`),border:s(`border`),typography:{fontFamily:n.fontFamily,fontSize:n.fontSize,fontWeight:n.fontWeight,lineHeight:n.lineHeight,letterSpacing:n.letterSpacing,textAlign:n.textAlign,color:n.color},appearance:{backgroundColor:n.backgroundColor,borderColor:n.borderColor,borderRadius:n.borderRadius,boxShadow:n.boxShadow,opacity:n.opacity},layout:{display:n.display,position:n.position,zIndex:n.zIndex,overflowX:n.overflowX,overflowY:n.overflowY,flexDirection:n.flexDirection,alignItems:n.alignItems,justifyContent:n.justifyContent,gap:n.gap,gridTemplateColumns:n.gridTemplateColumns,gridTemplateRows:n.gridTemplateRows,transform:n.transform},scroll:{clientWidth:r?.clientWidth??0,clientHeight:r?.clientHeight??0,scrollWidth:r?.scrollWidth??0,scrollHeight:r?.scrollHeight??0,overflowsX:(r?.scrollWidth??0)>(r?.clientWidth??0)+1,overflowsY:(r?.scrollHeight??0)>(r?.clientHeight??0)+1}}}var yf=e=>vf(e);function bf(e){let t=e.root??e.ownerDocument,n=e.ownerDocument.defaultView??window,r=(e,n=0)=>t.querySelectorAll(e).item(n)||null,i=n=>t===e.ownerDocument||mf(n,t),a=()=>{let t=e.ownerDocument.documentElement,r=e.ownerDocument.body,i=Math.max(t.scrollWidth,r?.scrollWidth??0),a=Math.max(t.scrollHeight,r?.scrollHeight??0);return{width:n.innerWidth,height:n.innerHeight,devicePixelRatio:n.devicePixelRatio,scrollX:n.scrollX,scrollY:n.scrollY,documentWidth:i,documentHeight:a,horizontalOverflow:i>n.innerWidth+1,verticalOverflow:a>n.innerHeight+1}},o=async(t=2)=>{await e.ownerDocument.fonts?.ready;for(let e=0;e<Math.max(1,t);e+=1)await new Promise(e=>n.requestAnimationFrame(()=>e()))};return{async ready(){await e.waitForPluginHost(),await o()},async describe(){return(await e.waitForPluginHost()).describe()},inspect(e,t=0){let n=r(e,t);return n?yf(n):null},inspectAll(e,n=50){return[...t.querySelectorAll(e)].slice(0,Math.max(0,n)).map(yf)},at(n,r){let a=t.querySelector?.(`[data-mesurer-island]`)??null;return hf(a?.shadowRoot?.querySelector(`[data-mesurer-root='true']`)??a,()=>{let a=pf({x:n,y:r},t,e.ownerDocument);return a&&i(a)?yf(a):null})},distance(e,t){let n=r(e),i=r(t);if(!n||!i)return null;let a=yf(n),o=yf(i),s=a.rect,c=o.rect;return{a,b:o,horizontalGap:c.left>=s.right?c.left-s.right:s.left>=c.right?s.left-c.right:0,verticalGap:c.top>=s.bottom?c.top-s.bottom:s.top>=c.bottom?s.top-c.bottom:0,centerDeltaX:c.left+c.width/2-(s.left+s.width/2),centerDeltaY:c.top+c.height/2-(s.top+s.height/2)}},viewport:a,async feedback(n=[]){await o();let r=e.getPluginHost()??await e.waitForPluginHost();return{viewport:a(),elements:n.flatMap(e=>[...t.querySelectorAll(e)].slice(0,50).map(yf)),plugins:r.describe(),pluginState:r.state.serialize(`all`)}},async command(t,n){await(e.getPluginHost()??await e.waitForPluginHost()).command.execute(t,n,{source:`agent-harness`}),await o(1)},async state(){return(e.getPluginHost()??await e.waitForPluginHost()).state.serialize(`all`)},stable:o}}var xf=(e,t)=>e.left<=t.left+t.width&&e.left+e.width>=t.left&&e.top<=t.top+t.height&&e.top+e.height>=t.top,Sf=e=>{if(!e.length)return null;let t=Math.min(...e.map(e=>e.left)),n=Math.min(...e.map(e=>e.top)),r=Math.max(...e.map(e=>e.left+e.width)),i=Math.max(...e.map(e=>e.top+e.height));return{left:t,top:n,width:r-t,height:i-n}},Cf=(e,t,n)=>t.some(t=>e.orientation===`vertical`?e.position>=t.left-n&&e.position<=t.left+t.width+n:e.position>=t.top-n&&e.position<=t.top+t.height+n),wf=e=>[...e.measurements,...e.activeMeasurement&&!e.measurements.some(t=>t.id===e.activeMeasurement?.id)?[e.activeMeasurement]:[]];function Tf(e){let{workspace:t,scope:n,guideTolerance:r}=e;if(n.kind===`workspace`)return{guides:t.guides.map(e=>({...e})),measurements:wf(t),distances:[...t.distances]};let i=new Set(n.elements),a=e=>e!=null&&i.has(e),o=e=>n.regions.some(t=>xf(e,t));return{guides:t.guides.filter(e=>Cf(e,n.regions,r)).map(e=>({...e})),measurements:wf(t).filter(e=>a(e.elementRef)||o(e.rect)),distances:t.distances.filter(e=>a(e.elementRefA)||a(e.elementRefB)||o(e.rectA)||o(e.rectB))}}var Ef={opacity:1,width:1,pattern:`solid`,dashLength:6,gap:4},Df={opacity:1,edgeReveal:!1};({...Ef}),{...Df};var Of=10,kf=e=>({left:e.left,top:e.top,width:e.width,height:e.height}),Af=e=>{let t=new Set,n=[];for(let r of e)!r?.isConnected||t.has(r)||(t.add(r),n.push(r));return n},jf=e=>e.crypto?.randomUUID?.()??`${Date.now()}-${Math.random().toString(36).slice(2)}`;function Mf(e){let{runtime:t,ownerDocument:n,ownerWindow:r}=e,i=e.request??{scope:`workspace`},a=t.snapshot();if(!a)throw Error(`Mesurer workspace is not ready yet.`);let o=[],s=[],c={kind:`workspace`},l=new Map;if(`annotation`in i){let e=t.annotation(i.annotation);if(!e)throw Error(`Mesurer annotation not found: ${i.annotation}`);for(let t of e.resolvedTargets)t.element?.isConnected&&l.set(t.element,t.target.id);o=Af(e.resolvedTargets.map(e=>e.element));let n=t.annotationRect(e.id);n&&(s=[n]);let r=e.resolvedTargets.length,a=e.resolvedTargets.filter(e=>e.element?.isConnected).length,u=e.anchor.kind===`region`?`connected`:r===0||a===0?`stale`:a===r?`connected`:`partial`;c={kind:`annotation`,annotationId:e.id,note:e.note,targetStatus:u}}else if(i.scope===`selection`){let e=t.currentSelection();if(o=Af(e.elements),!o.length&&!e.region)throw Error(`Mesurer has no current selection.`);s=e.region?[e.region]:o.map(e=>kf(e.getBoundingClientRect())),c={kind:`selection`}}else o=Af([...t.currentSelection().elements,...a.measurements.map(e=>e.elementRef),a.activeMeasurement?.elementRef,...a.heldDistances.flatMap(e=>[e.elementRefA,e.elementRefB])]);let u=c.kind===`workspace`?[]:s.length?s:o.map(e=>kf(e.getBoundingClientRect())),d=Tf({workspace:{guides:a.guides,measurements:a.measurements,activeMeasurement:a.activeMeasurement,distances:a.heldDistances},scope:c.kind===`workspace`?{kind:`workspace`}:{kind:`scoped`,elements:o,regions:u},guideTolerance:a.guideRelevanceTolerance??Of}),f=d.measurements,p=d.distances,m=d.guides,h=Af([...o,...f.map(e=>e.elementRef),...p.flatMap(e=>[e.elementRefA,e.elementRefB])]),g=new Map,_=new Set(l.values()),v=1,y=()=>{let e=`target-${v++}`;for(;_.has(e);)e=`target-${v++}`;return _.add(e),e},b=h.map(e=>{let t=l.get(e)??y();return g.set(e,t),{ref:t,inspection:vf(e)}}),x=f.map(e=>{let t={id:e.id,rect:kf(e.rect),deltaX:e.deltaX,deltaY:e.deltaY};e.snapped!==void 0&&(t.snapped=e.snapped);let n=e.elementRef?g.get(e.elementRef):void 0;return n&&(t.targetRef=n),t}),S=p.map(e=>{let t={id:e.id,rectA:kf(e.rectA),rectB:kf(e.rectB),horizontal:e.horizontal?{...e.horizontal}:null,vertical:e.vertical?{...e.vertical}:null},n=e.elementRefA?g.get(e.elementRefA):void 0,r=e.elementRefB?g.get(e.elementRefB):void 0;return n&&(t.targetARef=n),r&&(t.targetBRef=r),t});return{schema:`mesurer.context/v1`,id:jf(r),createdAt:new Date().toISOString(),scope:c,page:{url:r.location?.href??n.URL,title:n.title},viewport:{width:r.innerWidth,height:r.innerHeight,devicePixelRatio:r.devicePixelRatio,scrollX:r.scrollX,scrollY:r.scrollY},coordinateSpace:`viewport-css-px`,regions:c.kind===`workspace`?[]:s.map(kf),visualState:{rulersVisible:a.rulersVisible,xrayVisible:a.xrayVisible},targets:b,visualContext:{guides:m,measurements:x,distances:S}}}var Nf=e=>`${Math.round(e*100)/100}px`,Pf=e=>`x=${Nf(e.left)} y=${Nf(e.top)} w=${Nf(e.width)} h=${Nf(e.height)}`;function Ff(e){let t=[`Mesurer visual context`,``,`Page: ${e.page.url}`,`Viewport: ${e.viewport.width} × ${e.viewport.height} CSS px; scroll x=${e.viewport.scrollX} y=${e.viewport.scrollY}`];if(e.scope.kind===`annotation`?t.push(``,`Annotation`,e.scope.note,`Target status: ${e.scope.targetStatus}`):t.push(``,`Scope: ${e.scope.kind}`),e.regions.length&&(t.push(``,`Requested regions`),e.regions.forEach((e,n)=>t.push(`- region-${n+1}: ${Pf(e)}`))),(e.visualState.rulersVisible||e.visualState.xrayVisible)&&t.push(``,`Visual state: rulers=${e.visualState.rulersVisible?`on`:`off`}; x-ray=${e.visualState.xrayVisible?`on`:`off`}`),e.targets.length){t.push(``,`Targets`);for(let n of e.targets){let e=n.inspection;t.push(`[${n.ref}] ${e.selector}`,` rect: ${Pf(e.rect)}`,` margin: ${Nf(e.margin.top)} ${Nf(e.margin.right)} ${Nf(e.margin.bottom)} ${Nf(e.margin.left)}`,` padding: ${Nf(e.padding.top)} ${Nf(e.padding.right)} ${Nf(e.padding.bottom)} ${Nf(e.padding.left)}`,` layout: display=${e.layout.display}; position=${e.layout.position}; gap=${e.layout.gap}`,` typography: ${e.typography.fontSize} / ${e.typography.lineHeight}; weight=${e.typography.fontWeight}; align=${e.typography.textAlign}`),e.text&&t.push(` text: ${JSON.stringify(e.text)}`)}}if(e.visualContext.guides.length){t.push(``,`Relevant guides`);for(let n of e.visualContext.guides)t.push(`- ${n.orientation} ${n.orientation===`vertical`?`x`:`y`}=${Nf(n.position)}`)}if(e.visualContext.measurements.length){t.push(``,`Relevant measurements`);for(let n of e.visualContext.measurements)t.push(`- ${n.targetRef?`${n.targetRef}: `:``}${Pf(n.rect)}; delta=${Nf(n.deltaX)} × ${Nf(n.deltaY)}`)}if(e.visualContext.distances.length){t.push(``,`Relevant distances`);for(let n of e.visualContext.distances){let e=[n.targetARef,n.targetBRef].filter(Boolean).join(` → `),r=[n.horizontal?`horizontal=${Nf(n.horizontal.value)}`:null,n.vertical?`vertical=${Nf(n.vertical.value)}`:null].filter(Boolean).join(`; `);t.push(`- ${e?`${e}: `:``}${r||`overlapping`}`)}}return t.join(`
|
|
1247
|
-
`).trimEnd()}function If(e){let t=Sf([...e.regions,...e.targets.map(e=>e.inspection.rect),...e.visualContext.measurements.map(e=>e.rect),...e.visualContext.distances.flatMap(e=>[e.rectA,e.rectB])]),n=[{id:`viewport`,kind:`viewport`}];if(t){let r=Math.max(0,t.left-48),i=Math.max(0,t.top-48),a=Math.min(e.viewport.width,t.left+t.width+48),o=Math.min(e.viewport.height,t.top+t.height+48);a>r&&o>i&&n.push({id:`focus`,kind:`clip`,rect:{left:r,top:i,width:a-r,height:o-i}})}return{schema:`mesurer.capture/v1`,contextId:e.id,chrome:`hide`,evidence:`show`,captures:n}}var Lf=(e,t,n,r,i)=>{!Number.isFinite(r)||!Number.isFinite(i)||Math.abs(r-i)<.01||e.push({kind:t,label:n,before:r,current:i,delta:i-r,unit:`px`})},Rf=(e,t,n,r)=>e.push({kind:`missing`,evidence:t,id:n,label:r});function zf(e){let t=e.runtime.annotation(e.annotationId);if(!t)throw Error(`Mesurer annotation not found: ${e.annotationId}`);let n=Mf({runtime:e.runtime,ownerDocument:e.ownerDocument,ownerWindow:e.ownerWindow,request:{annotation:e.annotationId}});if(n.scope.kind!==`annotation`)throw Error(`Mesurer annotation context invariant failed.`);let r=e.runtime.snapshot();if(!r)throw Error(`Mesurer workspace is not ready yet.`);let i=wf({measurements:r.measurements,activeMeasurement:r.activeMeasurement}),a=[];for(let e of t.baseline.targets){let t=n.targets.find(t=>t.ref===e.id);if(!t){Rf(a,`target`,e.id,e.selector);continue}Lf(a,`target-rect`,`${t.inspection.selector} left`,e.rect.left,t.inspection.rect.left),Lf(a,`target-rect`,`${t.inspection.selector} top`,e.rect.top,t.inspection.rect.top),Lf(a,`target-rect`,`${t.inspection.selector} width`,e.rect.width,t.inspection.rect.width),Lf(a,`target-rect`,`${t.inspection.selector} height`,e.rect.height,t.inspection.rect.height)}for(let e of t.baseline.guides){let t=n.visualContext.guides.find(t=>t.id===e.id)??r.guides.find(t=>t.id===e.id);if(!t){Rf(a,`guide`,e.id,`${e.orientation} guide ${e.id}`);continue}Lf(a,`guide`,`${e.orientation} guide ${e.id}`,e.position,t.position)}for(let e of t.baseline.measurements){let t=n.visualContext.measurements.find(t=>t.id===e.id)??i.find(t=>t.id===e.id);if(!t){Rf(a,`measurement`,e.id,e.id);continue}Lf(a,`measurement`,`${e.id} width`,e.rect.width,t.rect.width),Lf(a,`measurement`,`${e.id} height`,e.rect.height,t.rect.height)}for(let e of t.baseline.distances){let t=n.visualContext.distances.find(t=>t.id===e.id)??r.heldDistances.find(t=>t.id===e.id);if(!t){Rf(a,`distance`,e.id,e.id);continue}e.horizontal&&t.horizontal?Lf(a,`distance`,`${e.id} horizontal`,e.horizontal.value,t.horizontal.value):e.horizontal&&!t.horizontal&&Rf(a,`distance`,e.id,`${e.id} horizontal`),e.vertical&&t.vertical?Lf(a,`distance`,`${e.id} vertical`,e.vertical.value,t.vertical.value):e.vertical&&!t.vertical&&Rf(a,`distance`,e.id,`${e.id} vertical`)}return{schema:`mesurer.review/v1`,annotationId:t.id,note:t.note,targetStatus:n.scope.targetStatus,baseline:t.baseline,current:n,changes:a}}async function Bf(e,t,n){try{if(t.navigator.clipboard?.writeText){await t.navigator.clipboard.writeText(n);return}}catch{}let r=e.createElement(`textarea`);r.value=n,r.setAttribute(`readonly`,``),r.style.position=`fixed`,r.style.opacity=`0`,r.style.pointerEvents=`none`,e.body.append(r),r.select();let i=e.execCommand?.(`copy`)??!1;if(r.remove(),!i)throw Error(`Unable to copy Mesurer context to the clipboard.`)}var Vf=`0.1.1`,Hf=`mesurer.context`,Uf=`context:v1`,Wf=`mesurer.context.settings`,Gf=`context.ui`,Kf={viewBox:`0 0 256 256`,paths:[`M216,32H88a8,8,0,0,0-8,8V80H40a8,8,0,0,0-8,8V216a8,8,0,0,0,8,8H168a8,8,0,0,0,8-8V176h40a8,8,0,0,0,8-8V40A8,8,0,0,0,216,32ZM160,208H48V96H160Zm48-48H176V88a8,8,0,0,0-8-8H96V48H208Z`]},qf={viewBox:`0 0 256 256`,paths:[`M152,40a8,8,0,0,1-8,8H112a8,8,0,0,1,0-16h32A8,8,0,0,1,152,40Zm-8,168H112a8,8,0,0,0,0,16h32a8,8,0,0,0,0-16ZM208,32H184a8,8,0,0,0,0,16h24V72a8,8,0,0,0,16,0V48A16,16,0,0,0,208,32Zm8,72a8,8,0,0,0-8,8v32a8,8,0,0,0,16,0V112A8,8,0,0,0,216,104Zm0,72a8,8,0,0,0-8,8v24H184a8,8,0,0,0,0,16h24a16,16,0,0,0,16-16V184A8,8,0,0,0,216,176ZM40,152a8,8,0,0,0,8-8V112a8,8,0,0,0-16,0v32A8,8,0,0,0,40,152Zm32,56H48V184a8,8,0,0,0-16,0v24a16,16,0,0,0,16,16H72a8,8,0,0,0,0-16ZM72,32H48A16,16,0,0,0,32,48V72a8,8,0,0,0,16,0V48H72a8,8,0,0,0,0-16Z`]},Jf={viewBox:`0 0 256 256`,paths:[`M229.66,58.34l-32-32a8,8,0,0,0-11.32,0l-96,96A8,8,0,0,0,88,128v32a8,8,0,0,0,8,8h32a8,8,0,0,0,5.66-2.34l96-96A8,8,0,0,0,229.66,58.34ZM124.69,152H104V131.31l64-64L188.69,88ZM200,76.69,179.31,56,192,43.31,212.69,64ZM224,128v80a16,16,0,0,1-16,16H48a16,16,0,0,1-16-16V48A16,16,0,0,1,48,32h80a8,8,0,0,1,0,16H48V208H208V128a8,8,0,0,1,16,0Z`]},Yf=async(e,t,n=1)=>{await e.fonts?.ready;for(let e=0;e<Math.max(1,n);e+=1)await new Promise(e=>t.requestAnimationFrame(()=>e()))},Xf=(e,t,n)=>{let r=async r=>Mf({runtime:e,ownerDocument:t,ownerWindow:n,request:r}),i=async e=>Ff(await r(e));return{context:r,contextText:i,copyContext:async e=>Bf(t,n,await i(e)),select:async i=>(e.select(Array.isArray(i)?i:[i]),await Yf(t,n),r({scope:`selection`})),annotations:async()=>e.annotations(),review:async r=>(await Yf(t,n),r?zf({runtime:e,ownerDocument:t,ownerWindow:n,annotationId:r}):e.annotations().map(r=>zf({runtime:e,ownerDocument:t,ownerWindow:n,annotationId:r.id}))),capturePlan:async e=>If(await r(e)),prepareCapture:async()=>{e.prepareCapture(),await Yf(t,n)},finishCapture:async()=>{e.finishCapture(),await Yf(t,n)}}},Zf=e=>{let t=e.currentSelection();return t.elements.length>0||t.region!==null};function Qf(e={}){return{id:Hf,version:Vf,requires:[`runtime:solid`],provides:[Uf],setup(t){let n=t.service.get(`runtime:solid`);if(!n)throw Error(`Mesurer context plugin requires the renderer runtime service.`);let r=n.createWorkspaceRuntime(),i=Xf(r,n.ownerDocument,n.ownerWindow);t.service.provide(Uf,i),t.state.register({id:Wf,initial:{ui:e.ui??!0},persist:!0}),t.state.register({id:Gf,initial:{hasSelection:Zf(r)}});let a=()=>t.state.get(`mesurer.context.settings`)?.ui??!0,o=()=>t.state.get(Gf)?.hasSelection===!0,s=e=>{t.state.update(Wf,t=>({...t,ui:e}))},c=r.subscribe(()=>{let e=Zf(r);e!==(t.state.get(Gf)?.hasSelection??!1)&&t.state.update(Gf,()=>({hasSelection:e}))});t.command.register(`context.copy`,()=>i.copyContext()),t.command.register(`context.copy-selection`,()=>i.copyContext({scope:`selection`}));let l=null,u=null,d=null,f=()=>{l=null,u?.(),u=null,d?.dispose(),d=null},p=()=>{if(d)return;d=n.createInspectorMount(),d.element.dataset.mesurerLayer=`evidence`;let e={runtime:r,onCopy:i.copyContext,onController:e=>{l=e}};u=Ci(()=>Gr(cd,e),d.element)},m=()=>{a()?p():f()};m(),t.state.subscribe(m),t.command.register(`context.add-note`,()=>l?.openNoteComposer()),t.tool.register({id:`context.copy`,label:`Copy context`,shortcut:`C`,command:`context.copy`,order:70,icon:Kf,hidden:()=>!a()}),t.tool.register({id:`context.copy-selection`,label:`Copy selection`,shortcut:`Shift+C`,command:`context.copy-selection`,order:71,icon:qf,hidden:()=>!a(),disabled:()=>!o()}),t.tool.register({id:`context.add-note`,label:`Add note`,shortcut:`N`,command:`context.add-note`,order:72,icon:Jf,hidden:()=>!a(),disabled:()=>!o()}),t.settings.register({id:`context`,label:`Context`,order:30,controls:[{type:`toggle`,id:`ui`,label:`Context tools`,description:`Show Copy Context, Copy Selection, Add Note, and annotation controls.`,value:a,set:s}]}),t.lifecycle.onDispose(()=>{c(),f(),r.dispose()})}}}var $f={display:`block`,position:`fixed`,inset:`0`,width:`0`,height:`0`,"min-width":`0`,"min-height":`0`,"max-width":`none`,"max-height":`none`,margin:`0`,padding:`0`,border:`0`,overflow:`visible`,background:`transparent`,"box-sizing":`border-box`,"pointer-events":`auto`,"z-index":`2147483647`,opacity:`1`,visibility:`visible`,transform:`none`,translate:`none`,rotate:`none`,scale:`none`,filter:`none`,"backdrop-filter":`none`,"clip-path":`none`,mask:`none`,contain:`none`,isolation:`isolate`,"mix-blend-mode":`normal`,animation:`none`,transition:`none`,"color-scheme":`light`,color:`#0f172a`,"font-family":`ui-sans-serif, system-ui, sans-serif`,"font-size":`16px`,"font-weight":`400`,"line-height":`1.5`,"letter-spacing":`normal`,direction:`ltr`};function ep(e){for(let[t,n]of Object.entries($f))e.style.setProperty(t,n,`important`)}function tp(e){return`popover`in e&&`showPopover`in e&&typeof e.showPopover==`function`&&`hidePopover`in e&&typeof e.hidePopover==`function`}var np=e=>`newState`in e,rp=e=>e.localName===`dialog`;function ip(e){if(!rp(e)||!e.open)return!1;try{return e.matches(`:modal`)}catch{return!1}}function ap(e,t,n=!0){ep(e);let r=e.ownerDocument,i=r.defaultView??window,a=t,o=!1,s=`fixed`,c=!1,l=0,u=[];if(n&&tp(e)&&(e.popover=`manual`),t.append(e),n&&tp(e))try{e.showPopover(),c=e.matches(`:popover-open`),c&&(s=`top-layer`)}catch{e.removeAttribute(`popover`)}let d=()=>{if(!(!c||!tp(e)))try{e.matches(`:popover-open`)||e.showPopover()}catch{}},f=t=>{if(e.parentNode===t)return;let n=c&&tp(e)&&e.matches(`:popover-open`);if(n&&tp(e))try{e.hidePopover()}catch{}t.append(e),ep(e),n&&d()},p=()=>{u=u.filter(e=>e.isConnected&&ip(e)),f(u.at(-1)??a)},m=e=>{u=u.filter(t=>t!==e),u.push(e),p()},h=e=>{u=u.filter(t=>t!==e),p()},g=()=>{if(!(o||!c||!tp(e)))try{e.matches(`:popover-open`)&&e.hidePopover(),e.showPopover()}catch{}},_=()=>{o||!c||l||(l=i.requestAnimationFrame(()=>{l=0,g()}))},v=t=>{if(!c||t.target===e)return;let n=np(t)?t.newState:void 0,r=t.target;if(r instanceof i.Element){if(rp(r)){n===`open`&&ip(r)?(m(r),_()):n===`closed`?h(r):n===`open`&&_();return}n===`open`&&r.hasAttribute(`popover`)&&_()}},y=e=>{let t=e.target;t instanceof i.Element&&rp(t)&&h(t)},b=()=>{r.fullscreenElement&&_()},x=e=>{ip(e)&&m(e);for(let t of e.querySelectorAll(`dialog`))ip(t)&&m(t)},S=new i.MutationObserver(e=>{if(c)for(let t of e){if(t.type===`attributes`){let e=t.target;e instanceof i.Element&&rp(e)&&(ip(e)?m(e):h(e))}for(let e of t.addedNodes)e instanceof i.Element&&x(e);u.some(e=>!e.isConnected)&&p()}});return c&&(r.addEventListener(`toggle`,v,!0),r.addEventListener(`close`,y,!0),r.addEventListener(`fullscreenchange`,b,!0),S.observe(r.documentElement,{subtree:!0,childList:!0,attributes:!0,attributeFilter:[`open`]}),x(r.documentElement)),{mode:s,bringToFront:g,dispose(){if(!o){if(o=!0,l&&i.cancelAnimationFrame(l),r.removeEventListener(`toggle`,v,!0),r.removeEventListener(`close`,y,!0),r.removeEventListener(`fullscreenchange`,b,!0),S.disconnect(),c&&tp(e)&&e.matches(`:popover-open`))try{e.hidePopover()}catch{}u=[]}}}}function op(e={}){if(!(`document`in globalThis))throw Error(`mountMeasurer() requires a browser or Electron renderer document.`);let{target:t=document.body,isolate:n=!0,shadowMode:r=`open`,topLayer:i=!0,agent:a=!1,onPluginHost:o,onPluginsReady:s,...c}=e,l=t.ownerDocument??document,u=l.defaultView??window,d=l.createElement(`div`);d.dataset.mesurerIsland=`true`;let f=ap(d,t,i),p=d,m=d,h=d;if(n){let e=d.attachShadow({mode:r});m=l.createElement(`div`),m.dataset.mesurerIslandMount=`true`,e.append(m),p=e,h=e}let g,_,v,y=!1,b=new Promise(e=>{_=e}),x=new Promise(e=>{v=e}),S=async()=>(await(g?Promise.resolve(g):b),x),C=a===!0?{}:a===!1?null:a,w=bf({ownerDocument:l,root:C?.root??(t.nodeType===11?t:l),getPluginHost:()=>g,waitForPluginHost:S}),T=async()=>{await w.ready();let e=g?.service.get(Uf);if(!e)throw Error(`Mesurer context plugin is not loaded. Add contextPlugin() to the plugins array.`);return e},E=async e=>(await T()).context(e),D=async e=>(await T()).contextText(e),O=async e=>(await T()).copyContext(e),k=async e=>(await T()).select(e),A=async()=>(await T()).annotations(),j=async e=>(await T()).review(e),M=async e=>(await T()).capturePlan(e),ee=async()=>(await T()).prepareCapture(),te=async()=>(await T()).finishCapture(),ne=Object.assign(w,{capabilities:()=>{let e=!!g?.service.get(Uf);return{protocol:`mesurer.agent/v1`,contextSchema:`mesurer.context/v1`,capabilities:{context:e,select:e,annotations:e,review:e,capturePlan:e}}},context:E,contextText:D,select:k,annotations:A,review:j,capturePlan:M,prepareCapture:ee,finishCapture:te}),N={...c,version:Vf},re=Ci(()=>Gr(id,Si(N,{portalTarget:h,pageTarget:t,onPluginHost:e=>{g||_(e),g=e,o?.(e)},onPluginsReady:e=>{g=e,y||(y=!0,v(e)),s?.(e)}})),m),ie=ne.ready(),P=null;if(C){let e=C.globalName??`__MESURER__`,t=Object.getOwnPropertyDescriptor(u,e);Reflect.set(u,e,ne),P=()=>{Object.getOwnPropertyDescriptor(u,e)?.value===ne&&(t?Object.defineProperty(u,e,t):Reflect.deleteProperty(u,e))}}let ae=!1;return{element:d,root:p,hostLayer:f.mode,get pluginHost(){return g},ready:ie,agent:ne,context:E,contextText:D,copyContext:O,select:k,annotations:A,review:j,capturePlan:M,prepareCapture:ee,finishCapture:te,bringToFront:f.bringToFront,describe:()=>g?.describe(),dispose(){ae||(ae=!0,P?.(),re(),f.dispose(),d.remove())}}}var sp=(e={})=>({...af(e),version:Vf}),{target:cp,globalName:lp=`__MESURER__`,context:up=!0,screenshot:dp=!1,plugins:fp=[],reuseExisting:pp=!0,...mp}=globalThis.__MESURER_CONFIG__??{},hp=globalThis.__MESURER_INSTANCE__,gp=pp&&hp?.element.isConnected?hp:void 0;if(gp)gp.ready.catch(e=>{queueMicrotask(()=>{throw e})});else{let e=cp?document.querySelector(cp):document.body;if(!e)throw Error(`Mesurer injection target not found: ${cp}`);let t=[...up===!1?[]:[Qf(up===!0?{}:up)],...dp===!1?[]:[sp(dp===!0?{}:dp)],...fp];hp?.dispose();let n=op({...mp,plugins:t,target:e,agent:{globalName:lp,root:document}});globalThis.__MESURER_INSTANCE__=n,n.ready.catch(e=>{queueMicrotask(()=>{throw e})})}})();
|
|
1247
|
+
`).trimEnd()}function If(e){let t=Sf([...e.regions,...e.targets.map(e=>e.inspection.rect),...e.visualContext.measurements.map(e=>e.rect),...e.visualContext.distances.flatMap(e=>[e.rectA,e.rectB])]),n=[{id:`viewport`,kind:`viewport`}];if(t){let r=Math.max(0,t.left-48),i=Math.max(0,t.top-48),a=Math.min(e.viewport.width,t.left+t.width+48),o=Math.min(e.viewport.height,t.top+t.height+48);a>r&&o>i&&n.push({id:`focus`,kind:`clip`,rect:{left:r,top:i,width:a-r,height:o-i}})}return{schema:`mesurer.capture/v1`,contextId:e.id,chrome:`hide`,evidence:`show`,captures:n}}var Lf=(e,t,n,r,i)=>{!Number.isFinite(r)||!Number.isFinite(i)||Math.abs(r-i)<.01||e.push({kind:t,label:n,before:r,current:i,delta:i-r,unit:`px`})},Rf=(e,t,n,r)=>e.push({kind:`missing`,evidence:t,id:n,label:r});function zf(e){let t=e.runtime.annotation(e.annotationId);if(!t)throw Error(`Mesurer annotation not found: ${e.annotationId}`);let n=Mf({runtime:e.runtime,ownerDocument:e.ownerDocument,ownerWindow:e.ownerWindow,request:{annotation:e.annotationId}});if(n.scope.kind!==`annotation`)throw Error(`Mesurer annotation context invariant failed.`);let r=e.runtime.snapshot();if(!r)throw Error(`Mesurer workspace is not ready yet.`);let i=wf({measurements:r.measurements,activeMeasurement:r.activeMeasurement}),a=[];for(let e of t.baseline.targets){let t=n.targets.find(t=>t.ref===e.id);if(!t){Rf(a,`target`,e.id,e.selector);continue}Lf(a,`target-rect`,`${t.inspection.selector} left`,e.rect.left,t.inspection.rect.left),Lf(a,`target-rect`,`${t.inspection.selector} top`,e.rect.top,t.inspection.rect.top),Lf(a,`target-rect`,`${t.inspection.selector} width`,e.rect.width,t.inspection.rect.width),Lf(a,`target-rect`,`${t.inspection.selector} height`,e.rect.height,t.inspection.rect.height)}for(let e of t.baseline.guides){let t=n.visualContext.guides.find(t=>t.id===e.id)??r.guides.find(t=>t.id===e.id);if(!t){Rf(a,`guide`,e.id,`${e.orientation} guide ${e.id}`);continue}Lf(a,`guide`,`${e.orientation} guide ${e.id}`,e.position,t.position)}for(let e of t.baseline.measurements){let t=n.visualContext.measurements.find(t=>t.id===e.id)??i.find(t=>t.id===e.id);if(!t){Rf(a,`measurement`,e.id,e.id);continue}Lf(a,`measurement`,`${e.id} width`,e.rect.width,t.rect.width),Lf(a,`measurement`,`${e.id} height`,e.rect.height,t.rect.height)}for(let e of t.baseline.distances){let t=n.visualContext.distances.find(t=>t.id===e.id)??r.heldDistances.find(t=>t.id===e.id);if(!t){Rf(a,`distance`,e.id,e.id);continue}e.horizontal&&t.horizontal?Lf(a,`distance`,`${e.id} horizontal`,e.horizontal.value,t.horizontal.value):e.horizontal&&!t.horizontal&&Rf(a,`distance`,e.id,`${e.id} horizontal`),e.vertical&&t.vertical?Lf(a,`distance`,`${e.id} vertical`,e.vertical.value,t.vertical.value):e.vertical&&!t.vertical&&Rf(a,`distance`,e.id,`${e.id} vertical`)}return{schema:`mesurer.review/v1`,annotationId:t.id,note:t.note,targetStatus:n.scope.targetStatus,baseline:t.baseline,current:n,changes:a}}async function Bf(e,t,n){try{if(t.navigator.clipboard?.writeText){await t.navigator.clipboard.writeText(n);return}}catch{}let r=e.createElement(`textarea`);r.value=n,r.setAttribute(`readonly`,``),r.style.position=`fixed`,r.style.opacity=`0`,r.style.pointerEvents=`none`,e.body.append(r),r.select();let i=e.execCommand?.(`copy`)??!1;if(r.remove(),!i)throw Error(`Unable to copy Mesurer context to the clipboard.`)}var Vf=`0.1.2`,Hf=`mesurer.context`,Uf=`context:v1`,Wf=`mesurer.context.settings`,Gf=`context.ui`,Kf={viewBox:`0 0 256 256`,paths:[`M216,32H88a8,8,0,0,0-8,8V80H40a8,8,0,0,0-8,8V216a8,8,0,0,0,8,8H168a8,8,0,0,0,8-8V176h40a8,8,0,0,0,8-8V40A8,8,0,0,0,216,32ZM160,208H48V96H160Zm48-48H176V88a8,8,0,0,0-8-8H96V48H208Z`]},qf={viewBox:`0 0 256 256`,paths:[`M152,40a8,8,0,0,1-8,8H112a8,8,0,0,1,0-16h32A8,8,0,0,1,152,40Zm-8,168H112a8,8,0,0,0,0,16h32a8,8,0,0,0,0-16ZM208,32H184a8,8,0,0,0,0,16h24V72a8,8,0,0,0,16,0V48A16,16,0,0,0,208,32Zm8,72a8,8,0,0,0-8,8v32a8,8,0,0,0,16,0V112A8,8,0,0,0,216,104Zm0,72a8,8,0,0,0-8,8v24H184a8,8,0,0,0,0,16h24a16,16,0,0,0,16-16V184A8,8,0,0,0,216,176ZM40,152a8,8,0,0,0,8-8V112a8,8,0,0,0-16,0v32A8,8,0,0,0,40,152Zm32,56H48V184a8,8,0,0,0-16,0v24a16,16,0,0,0,16,16H72a8,8,0,0,0,0-16ZM72,32H48A16,16,0,0,0,32,48V72a8,8,0,0,0,16,0V48H72a8,8,0,0,0,0-16Z`]},Jf={viewBox:`0 0 256 256`,paths:[`M229.66,58.34l-32-32a8,8,0,0,0-11.32,0l-96,96A8,8,0,0,0,88,128v32a8,8,0,0,0,8,8h32a8,8,0,0,0,5.66-2.34l96-96A8,8,0,0,0,229.66,58.34ZM124.69,152H104V131.31l64-64L188.69,88ZM200,76.69,179.31,56,192,43.31,212.69,64ZM224,128v80a16,16,0,0,1-16,16H48a16,16,0,0,1-16-16V48A16,16,0,0,1,48,32h80a8,8,0,0,1,0,16H48V208H208V128a8,8,0,0,1,16,0Z`]},Yf=async(e,t,n=1)=>{await e.fonts?.ready;for(let e=0;e<Math.max(1,n);e+=1)await new Promise(e=>t.requestAnimationFrame(()=>e()))},Xf=(e,t,n)=>{let r=async r=>Mf({runtime:e,ownerDocument:t,ownerWindow:n,request:r}),i=async e=>Ff(await r(e));return{context:r,contextText:i,copyContext:async e=>Bf(t,n,await i(e)),select:async i=>(e.select(Array.isArray(i)?i:[i]),await Yf(t,n),r({scope:`selection`})),annotations:async()=>e.annotations(),review:async r=>(await Yf(t,n),r?zf({runtime:e,ownerDocument:t,ownerWindow:n,annotationId:r}):e.annotations().map(r=>zf({runtime:e,ownerDocument:t,ownerWindow:n,annotationId:r.id}))),capturePlan:async e=>If(await r(e)),prepareCapture:async()=>{e.prepareCapture(),await Yf(t,n)},finishCapture:async()=>{e.finishCapture(),await Yf(t,n)}}},Zf=e=>{let t=e.currentSelection();return t.elements.length>0||t.region!==null};function Qf(e={}){return{id:Hf,version:Vf,requires:[`runtime:solid`],provides:[Uf],setup(t){let n=t.service.get(`runtime:solid`);if(!n)throw Error(`Mesurer context plugin requires the renderer runtime service.`);let r=n.createWorkspaceRuntime(),i=Xf(r,n.ownerDocument,n.ownerWindow);t.service.provide(Uf,i),t.state.register({id:Wf,initial:{ui:e.ui??!0},persist:!0}),t.state.register({id:Gf,initial:{hasSelection:Zf(r)}});let a=()=>t.state.get(`mesurer.context.settings`)?.ui??!0,o=()=>t.state.get(Gf)?.hasSelection===!0,s=e=>{t.state.update(Wf,t=>({...t,ui:e}))},c=r.subscribe(()=>{let e=Zf(r);e!==(t.state.get(Gf)?.hasSelection??!1)&&t.state.update(Gf,()=>({hasSelection:e}))});t.command.register(`context.copy`,()=>i.copyContext()),t.command.register(`context.copy-selection`,()=>i.copyContext({scope:`selection`}));let l=null,u=null,d=null,f=()=>{l=null,u?.(),u=null,d?.dispose(),d=null},p=()=>{if(d)return;d=n.createInspectorMount(),d.element.dataset.mesurerLayer=`evidence`;let e={runtime:r,onCopy:i.copyContext,onController:e=>{l=e}};u=Ci(()=>Gr(cd,e),d.element)},m=()=>{a()?p():f()};m(),t.state.subscribe(m),t.command.register(`context.add-note`,()=>l?.openNoteComposer()),t.tool.register({id:`context.copy`,label:`Copy context`,shortcut:`C`,command:`context.copy`,order:70,icon:Kf,hidden:()=>!a()}),t.tool.register({id:`context.copy-selection`,label:`Copy selection`,shortcut:`Shift+C`,command:`context.copy-selection`,order:71,icon:qf,hidden:()=>!a(),disabled:()=>!o()}),t.tool.register({id:`context.add-note`,label:`Add note`,shortcut:`N`,command:`context.add-note`,order:72,icon:Jf,hidden:()=>!a(),disabled:()=>!o()}),t.settings.register({id:`context`,label:`Context`,order:30,controls:[{type:`toggle`,id:`ui`,label:`Context tools`,description:`Show Copy Context, Copy Selection, Add Note, and annotation controls.`,value:a,set:s}]}),t.lifecycle.onDispose(()=>{c(),f(),r.dispose()})}}}var $f={display:`block`,position:`fixed`,inset:`0`,width:`0`,height:`0`,"min-width":`0`,"min-height":`0`,"max-width":`none`,"max-height":`none`,margin:`0`,padding:`0`,border:`0`,overflow:`visible`,background:`transparent`,"box-sizing":`border-box`,"pointer-events":`auto`,"z-index":`2147483647`,opacity:`1`,visibility:`visible`,transform:`none`,translate:`none`,rotate:`none`,scale:`none`,filter:`none`,"backdrop-filter":`none`,"clip-path":`none`,mask:`none`,contain:`none`,isolation:`isolate`,"mix-blend-mode":`normal`,animation:`none`,transition:`none`,"color-scheme":`light`,color:`#0f172a`,"font-family":`ui-sans-serif, system-ui, sans-serif`,"font-size":`16px`,"font-weight":`400`,"line-height":`1.5`,"letter-spacing":`normal`,direction:`ltr`};function ep(e){for(let[t,n]of Object.entries($f))e.style.setProperty(t,n,`important`)}function tp(e){return`popover`in e&&`showPopover`in e&&typeof e.showPopover==`function`&&`hidePopover`in e&&typeof e.hidePopover==`function`}var np=e=>`newState`in e,rp=e=>e.localName===`dialog`;function ip(e){if(!rp(e)||!e.open)return!1;try{return e.matches(`:modal`)}catch{return!1}}function ap(e,t,n=!0){ep(e);let r=e.ownerDocument,i=r.defaultView??window,a=t,o=!1,s=`fixed`,c=!1,l=0,u=[];if(n&&tp(e)&&(e.popover=`manual`),t.append(e),n&&tp(e))try{e.showPopover(),c=e.matches(`:popover-open`),c&&(s=`top-layer`)}catch{e.removeAttribute(`popover`)}let d=()=>{if(!(!c||!tp(e)))try{e.matches(`:popover-open`)||e.showPopover()}catch{}},f=t=>{if(e.parentNode===t)return;let n=c&&tp(e)&&e.matches(`:popover-open`);if(n&&tp(e))try{e.hidePopover()}catch{}t.append(e),ep(e),n&&d()},p=()=>{u=u.filter(e=>e.isConnected&&ip(e)),f(u.at(-1)??a)},m=e=>{u=u.filter(t=>t!==e),u.push(e),p()},h=e=>{u=u.filter(t=>t!==e),p()},g=()=>{if(!(o||!c||!tp(e)))try{e.matches(`:popover-open`)&&e.hidePopover(),e.showPopover()}catch{}},_=()=>{o||!c||l||(l=i.requestAnimationFrame(()=>{l=0,g()}))},v=t=>{if(!c||t.target===e)return;let n=np(t)?t.newState:void 0,r=t.target;if(r instanceof i.Element){if(rp(r)){n===`open`&&ip(r)?(m(r),_()):n===`closed`?h(r):n===`open`&&_();return}n===`open`&&r.hasAttribute(`popover`)&&_()}},y=e=>{let t=e.target;t instanceof i.Element&&rp(t)&&h(t)},b=()=>{r.fullscreenElement&&_()},x=e=>{ip(e)&&m(e);for(let t of e.querySelectorAll(`dialog`))ip(t)&&m(t)},S=new i.MutationObserver(e=>{if(c)for(let t of e){if(t.type===`attributes`){let e=t.target;e instanceof i.Element&&rp(e)&&(ip(e)?m(e):h(e))}for(let e of t.addedNodes)e instanceof i.Element&&x(e);u.some(e=>!e.isConnected)&&p()}});return c&&(r.addEventListener(`toggle`,v,!0),r.addEventListener(`close`,y,!0),r.addEventListener(`fullscreenchange`,b,!0),S.observe(r.documentElement,{subtree:!0,childList:!0,attributes:!0,attributeFilter:[`open`]}),x(r.documentElement)),{mode:s,bringToFront:g,dispose(){if(!o){if(o=!0,l&&i.cancelAnimationFrame(l),r.removeEventListener(`toggle`,v,!0),r.removeEventListener(`close`,y,!0),r.removeEventListener(`fullscreenchange`,b,!0),S.disconnect(),c&&tp(e)&&e.matches(`:popover-open`))try{e.hidePopover()}catch{}u=[]}}}}function op(e={}){if(!(`document`in globalThis))throw Error(`mountMesurer() requires a browser or Electron renderer document.`);let{target:t=document.body,isolate:n=!0,shadowMode:r=`open`,topLayer:i=!0,agent:a=!1,onPluginHost:o,onPluginsReady:s,...c}=e,l=t.ownerDocument??document,u=l.defaultView??window,d=l.createElement(`div`);d.dataset.mesurerIsland=`true`;let f=ap(d,t,i),p=d,m=d,h=d;if(n){let e=d.attachShadow({mode:r});m=l.createElement(`div`),m.dataset.mesurerIslandMount=`true`,e.append(m),p=e,h=e}let g,_,v,y=!1,b=new Promise(e=>{_=e}),x=new Promise(e=>{v=e}),S=async()=>(await(g?Promise.resolve(g):b),x),C=a===!0?{}:a===!1?null:a,w=bf({ownerDocument:l,root:C?.root??(t.nodeType===11?t:l),getPluginHost:()=>g,waitForPluginHost:S}),T=async()=>{await w.ready();let e=g?.service.get(Uf);if(!e)throw Error(`Mesurer context plugin is not loaded. Add contextPlugin() to the plugins array.`);return e},E=async e=>(await T()).context(e),D=async e=>(await T()).contextText(e),O=async e=>(await T()).copyContext(e),k=async e=>(await T()).select(e),A=async()=>(await T()).annotations(),j=async e=>(await T()).review(e),M=async e=>(await T()).capturePlan(e),ee=async()=>(await T()).prepareCapture(),te=async()=>(await T()).finishCapture(),ne=Object.assign(w,{capabilities:()=>{let e=!!g?.service.get(Uf);return{protocol:`mesurer.agent/v1`,contextSchema:`mesurer.context/v1`,capabilities:{context:e,select:e,annotations:e,review:e,capturePlan:e}}},context:E,contextText:D,select:k,annotations:A,review:j,capturePlan:M,prepareCapture:ee,finishCapture:te}),N={...c,version:Vf},re=Ci(()=>Gr(id,Si(N,{portalTarget:h,pageTarget:t,onPluginHost:e=>{g||_(e),g=e,o?.(e)},onPluginsReady:e=>{g=e,y||(y=!0,v(e)),s?.(e)}})),m),ie=ne.ready(),P=null;if(C){let e=C.globalName??`__MESURER__`,t=Object.getOwnPropertyDescriptor(u,e);Reflect.set(u,e,ne),P=()=>{Object.getOwnPropertyDescriptor(u,e)?.value===ne&&(t?Object.defineProperty(u,e,t):Reflect.deleteProperty(u,e))}}let ae=!1;return{element:d,root:p,hostLayer:f.mode,get pluginHost(){return g},ready:ie,agent:ne,context:E,contextText:D,copyContext:O,select:k,annotations:A,review:j,capturePlan:M,prepareCapture:ee,finishCapture:te,bringToFront:f.bringToFront,describe:()=>g?.describe(),dispose(){ae||(ae=!0,P?.(),re(),f.dispose(),d.remove())}}}var sp=(e={})=>({...af(e),version:Vf}),{target:cp,globalName:lp=`__MESURER__`,context:up=!0,screenshot:dp=!1,plugins:fp=[],reuseExisting:pp=!0,...mp}=globalThis.__MESURER_CONFIG__??{},hp=globalThis.__MESURER_INSTANCE__,gp=pp&&hp?.element.isConnected?hp:void 0;if(gp)gp.ready.catch(e=>{queueMicrotask(()=>{throw e})});else{let e=cp?document.querySelector(cp):document.body;if(!e)throw Error(`Mesurer injection target not found: ${cp}`);let t=[...up===!1?[]:[Qf(up===!0?{}:up)],...dp===!1?[]:[sp(dp===!0?{}:dp)],...fp];hp?.dispose();let n=op({...mp,plugins:t,target:e,agent:{globalName:lp,root:document}});globalThis.__MESURER_INSTANCE__=n,n.ready.catch(e=>{queueMicrotask(()=>{throw e})})}})();
|
package/dist/inject.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { type MesurerContextPluginOptions, type
|
|
1
|
+
import { type MesurerContextPluginOptions, type MountMesurerOptions, type MountedMesurer } from "./index";
|
|
2
2
|
import { type MesurerScreenshotPluginOptions } from "./screenshot";
|
|
3
|
-
export type MesurerInjectConfig = Omit<
|
|
3
|
+
export type MesurerInjectConfig = Omit<MountMesurerOptions, "target" | "agent" | "plugins"> & {
|
|
4
4
|
/** Optional application container selector. Defaults to document.body. */
|
|
5
5
|
target?: string;
|
|
6
6
|
/** Global agent API name. Defaults to __MESURER__. */
|
|
7
7
|
globalName?: string;
|
|
8
8
|
/** Additional plugins loaded after first-party injected plugins. */
|
|
9
|
-
plugins?:
|
|
9
|
+
plugins?: MountMesurerOptions["plugins"];
|
|
10
10
|
/** Enable/configure the removable context plugin. Defaults to true for injection. */
|
|
11
11
|
context?: boolean | MesurerContextPluginOptions;
|
|
12
12
|
/** Enable/configure the optional screenshot plugin. Defaults to false. */
|
|
@@ -22,6 +22,6 @@ export type MesurerInjectConfig = Omit<MountMeasurerOptions, "target" | "agent"
|
|
|
22
22
|
};
|
|
23
23
|
declare global {
|
|
24
24
|
var __MESURER_CONFIG__: MesurerInjectConfig | undefined;
|
|
25
|
-
var __MESURER_INSTANCE__:
|
|
25
|
+
var __MESURER_INSTANCE__: MountedMesurer | undefined;
|
|
26
26
|
}
|
|
27
|
-
export declare const mesurer:
|
|
27
|
+
export declare const mesurer: MountedMesurer;
|
package/dist/inject.js
CHANGED
|
@@ -10987,7 +10987,7 @@ async function If(e, t, n) {
|
|
|
10987
10987
|
}
|
|
10988
10988
|
//#endregion
|
|
10989
10989
|
//#region src/version.ts
|
|
10990
|
-
var Lf = "0.1.
|
|
10990
|
+
var Lf = "0.1.2", Rf = "mesurer.context", zf = "context:v1", Bf = "mesurer.context.settings", Vf = "context.ui", Hf = {
|
|
10991
10991
|
viewBox: "0 0 256 256",
|
|
10992
10992
|
paths: ["M216,32H88a8,8,0,0,0-8,8V80H40a8,8,0,0,0-8,8V216a8,8,0,0,0,8,8H168a8,8,0,0,0,8-8V176h40a8,8,0,0,0,8-8V40A8,8,0,0,0,216,32ZM160,208H48V96H160Zm48-48H176V88a8,8,0,0,0-8-8H96V48H208Z"]
|
|
10993
10993
|
}, Uf = {
|
|
@@ -11264,7 +11264,7 @@ function tp(e, t, n = !0) {
|
|
|
11264
11264
|
//#endregion
|
|
11265
11265
|
//#region src/index.tsx
|
|
11266
11266
|
function np(e = {}) {
|
|
11267
|
-
if (!("document" in globalThis)) throw Error("
|
|
11267
|
+
if (!("document" in globalThis)) throw Error("mountMesurer() requires a browser or Electron renderer document.");
|
|
11268
11268
|
let { target: t = document.body, isolate: n = !0, shadowMode: r = "open", topLayer: i = !0, agent: a = !1, onPluginHost: o, onPluginsReady: s, ...c } = e, l = t.ownerDocument ?? document, u = l.defaultView ?? window, d = l.createElement("div");
|
|
11269
11269
|
d.dataset.mesurerIsland = "true";
|
|
11270
11270
|
let f = tp(d, t, i), p = d, m = d, h = d;
|
package/dist/screenshot.js
CHANGED
|
@@ -2885,7 +2885,7 @@ var Gn = "mesurer:capture-bridge-ping", Kn = "mesurer:capture-bridge-request", q
|
|
|
2885
2885
|
S = !0, y += 1, u.removeEventListener("pointerdown", L), u.removeEventListener("pointermove", R), u.removeEventListener("pointerup", z), u.removeEventListener("pointercancel", B), i.removeEventListener("keydown", V, !0), v && i.clearTimeout(v), ee.dispose(), O(), cr(i), a.finishCapture(), a.dispose(), o.dispose();
|
|
2886
2886
|
});
|
|
2887
2887
|
}
|
|
2888
|
-
}), Rr = "0.1.
|
|
2888
|
+
}), Rr = "0.1.2", zr = wr, Br = xr, Vr = Sr, Hr = Cr, Ur = 4, Wr = dr, Gr = (e, t) => Xn(e, t), Kr = (e = /* @__PURE__ */ new Date()) => Zn(e), qr = (e, t, n, r) => Yn(e, t, n, r), Jr = (e, t, n) => Jn(e, t, n), Yr = (e, t) => ur(e, t), Xr = (e) => cr(e), Zr = (e = {}) => ({
|
|
2889
2889
|
...Lr(e),
|
|
2890
2890
|
version: Rr
|
|
2891
2891
|
}), Qr = (e) => $n(e);
|