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.
@@ -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 { mountMeasurer } from "mesurer-solid"
350
+ import { mountMesurer } from "mesurer-solid"
351
351
  import { screenshotPlugin } from "mesurer-solid/screenshot"
352
352
 
353
- const mesurer = mountMeasurer({
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, mountMeasurer } from "mesurer-solid"
393
+ import { contextPlugin, mountMesurer } from "mesurer-solid"
394
394
 
395
- const mesurer = mountMeasurer({
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 { mountMeasurer } from "mesurer-solid"
30
+ import { mountMesurer } from "mesurer-solid"
31
31
 
32
- const mesurer = mountMeasurer()
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
- mountMeasurer,
44
+ mountMesurer,
45
45
  } from "mesurer-solid"
46
46
 
47
- const mesurer = mountMeasurer({
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 { mountMeasurer } from "mesurer-solid"
274
+ import { mountMesurer } from "mesurer-solid"
275
275
  import { screenshotPlugin } from "mesurer-solid/screenshot"
276
276
 
277
- const mesurer = mountMeasurer({
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 MountMeasurerOptions = MesurerOptions & {
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 MountedMeasurer = {
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 mountMeasurer(options?: MountMeasurerOptions): MountedMeasurer;
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.1", Wd = "mesurer.context", Gd = "context:v1", Kd = "mesurer.context.settings", qd = "context.ui", Jd = {
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("mountMeasurer() requires a browser or Electron renderer document.");
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
- }), mf = () => pf(Fu()), hf = () => pf(Iu()), gf = () => pf(Lu()), _f = () => pf(Ru()), vf = () => pf(zu()), yf = () => pf(Bu()), bf = () => pf(Hu()), xf = () => pf(Vu()), Sf = () => Uu().map(pf), Cf = (e = [], t = []) => Wu(e, t).map((e) => e.id.startsWith("mesurer.") ? pf(e) : e);
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, gf as colorPickerPlugin, Cf as composeMesurerPlugins, ef as contextPlugin, Hd as copyTextToClipboard, yd as createMesurerAgentHarness, Rd as createMesurerCapturePlan, uf as createMesurerPluginHost, df as createMesurerRuntime, Sf as defaultMesurerPlugins, lf as defineMesurerPlugin, bf as distancePlugin, Ld as formatMesurerContext, yf as guidesPlugin, ff as mountMeasurer, Vd as reviewMesurerAnnotation, _f as rulersPlugin, mf as selectPlugin, xf as settingsPlugin, vf as textInspectorPlugin, hf as xrayPlugin };
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 };
@@ -1,6 +1,6 @@
1
- import { type MountedMeasurer } from "./index";
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__: MountedMeasurer | undefined;
5
+ var __MESURER_INSTANCE__: MountedMesurer | undefined;
6
6
  }
@@ -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 MountMeasurerOptions, type MountedMeasurer } from "./index";
1
+ import { type MesurerContextPluginOptions, type MountMesurerOptions, type MountedMesurer } from "./index";
2
2
  import { type MesurerScreenshotPluginOptions } from "./screenshot";
3
- export type MesurerInjectConfig = Omit<MountMeasurerOptions, "target" | "agent" | "plugins"> & {
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?: MountMeasurerOptions["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__: MountedMeasurer | undefined;
25
+ var __MESURER_INSTANCE__: MountedMesurer | undefined;
26
26
  }
27
- export declare const mesurer: MountedMeasurer;
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.1", Rf = "mesurer.context", zf = "context:v1", Bf = "mesurer.context.settings", Vf = "context.ui", Hf = {
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("mountMeasurer() requires a browser or Electron renderer document.");
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;
@@ -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.1", 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 = {}) => ({
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);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mesurer-solid",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "Framework-agnostic UI measurement and inspection tools for browser apps and coding agents.",
5
5
  "license": "MIT",
6
6
  "type": "module",