mesurer-solid 0.1.3-beta.1 → 0.1.3

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.
@@ -141,6 +141,44 @@ reviewArrange(id, tolerance?)
141
141
 
142
142
  There is no `send`, `screenshots`, or `sendContext` delivery capability. Screenshot bytes stay with the outer browser harness.
143
143
 
144
+ ## Broad Mesurer/context requests mean inspect all human intent
145
+
146
+ If the user says “check Mesurer,” “check Measure,” “look at Mesurer context,” “see what I highlighted/moved/annotated,” or otherwise asks generally about Mesurer state, treat that as a request to inspect the **combined live review state**, not only the return value of `context()`.
147
+
148
+ Start with a non-destructive inventory:
149
+
150
+ ```js
151
+ const capabilities = window.__MESURER__.capabilities().capabilities
152
+ const workspace = await window.__MESURER__.context()
153
+ const annotations = await window.__MESURER__.annotations()
154
+ const arrangements = capabilities.arrange
155
+ ? await window.__MESURER__.arrangements()
156
+ : []
157
+
158
+ let selection = null
159
+ try {
160
+ selection = await window.__MESURER__.context({ scope: "selection" })
161
+ } catch {}
162
+ ```
163
+
164
+ Then resolve the saved human intent that is relevant to the task:
165
+
166
+ ```js
167
+ const annotationContexts = await Promise.all(
168
+ annotations.map((annotation) =>
169
+ window.__MESURER__.context({ annotation: annotation.id })
170
+ ),
171
+ )
172
+
173
+ const arrangeIntents = await Promise.all(
174
+ arrangements.map((intent) => window.__MESURER__.arrange(intent.id)),
175
+ )
176
+ ```
177
+
178
+ Bring the useful pieces together before editing: target-bound notes, current selection, Arrange Before/Desired geometry, guides, measurements, held distances, exact target inspection, layout/style data, rulers/X-ray state, and any existing human screenshot preview that must be preserved.
179
+
180
+ The user may have selected one element, annotated another, moved a group with Arrange, and left measurements/guides that explain the relationship. Those are not separate conversations. They are one encoded visual request. Do not ask the person to repeat information Mesurer already contains, and do not overwrite one channel before reading the others.
181
+
144
182
  ## Arrange has highest human-intent precedence
145
183
 
146
184
  Arrange lets a person reposition selected rendered elements into the layout they want without editing application source. If Arrange is available, consume relevant saved intents before changing human selection or editing source:
@@ -441,15 +479,16 @@ A good harness-level loop is:
441
479
 
442
480
  ```text
443
481
  1. discover/reuse Mesurer and preserve human state
444
- 2. consume relevant Arrange intent first
445
- 3. capture Before/Desired when useful, before source edits
446
- 4. consume existing annotation/selection context
447
- 5. resolve exact targets; ask only when genuinely ambiguous
448
- 6. edit normal source
449
- 7. wait for stable render
450
- 8. switch Arrange to Live when applicable
451
- 9. get fresh Arrange review/context and optional screenshot
452
- 10. iterate until rendered evidence supports completion
482
+ 2. if the request is broad, inventory Arrange + annotations + selection + workspace context before narrowing
483
+ 3. consume relevant Arrange intent first
484
+ 4. capture Before/Desired when useful, before source edits
485
+ 5. consume existing annotation/selection context
486
+ 6. resolve exact targets; ask only when genuinely ambiguous
487
+ 7. edit normal source
488
+ 8. wait for stable render
489
+ 9. switch Arrange to Live when applicable
490
+ 10. get fresh Arrange review/context and optional screenshot
491
+ 11. iterate until rendered evidence supports completion
453
492
  ```
454
493
 
455
494
  Do not clear Arrange history, alter human measurements/guides, replace live Mesurer state, or use a temporary preview to make unfinished source work appear correct.
package/README.md CHANGED
@@ -77,7 +77,31 @@ import { mountMesurer } from "mesurer-solid"
77
77
  const mesurer = mountMesurer()
78
78
  ```
79
79
 
80
- The base inspector includes Select, X-ray, Color Picker, Rulers, Text Inspector, Guides, Distance, Settings, the plugin host, and the low-level inspection API.
80
+ The base inspector includes Select, X-ray, Rulers, Text Inspector, Guides, Distance, Settings, the plugin host, and the low-level inspection API. Color Picker is also available when the host exposes an operational native `EyeDropper`; it is intentionally hidden in unsupported hosts and has no DOM/CSS fallback.
81
+
82
+ Text Inspector can inspect rendered typography and supports reversible Desired-text preview editing on double-click.
83
+
84
+ ### Keyboard shortcuts
85
+
86
+ | Shortcut | Action |
87
+ | --- | --- |
88
+ | `M` | Toggle Mesurer visibility |
89
+ | `S` | Select |
90
+ | `X` | X-ray |
91
+ | `P` | Native Color Picker when supported |
92
+ | `R` | Rulers |
93
+ | `A` | Text Inspector |
94
+ | `G` | Guides |
95
+ | `H` / `V` | Choose horizontal / vertical guide orientation |
96
+ | `Alt` / `Option` | Distance overlay |
97
+ | `Cmd/Ctrl + ,` | Settings |
98
+ | `Shift + A` | Arrange when `arrangePlugin()` is mounted |
99
+ | `Shift + S` | Screenshot when `screenshotPlugin()` is mounted |
100
+ | `C` | Copy Context when `contextPlugin()` is mounted |
101
+ | `Shift + C` | Copy Selection when `contextPlugin()` is mounted |
102
+ | `N` | Add Note when `contextPlugin()` is mounted |
103
+
104
+ In the current Codex browser host, Color Picker is not advertised and `P` is inert because native screen sampling is not operational there.
81
105
 
82
106
  ## Arrange
83
107
 
@@ -92,7 +116,7 @@ const mesurer = mountMesurer({
92
116
  })
93
117
  ```
94
118
 
95
- Select one or more page elements, click **Arrange**, and drag the selection. Hold **Shift** while dragging to lock movement to the dominant axis.
119
+ Select one or more page elements, click **Arrange** or press **Shift+A**, and drag the selection. Arrange activates Select automatically and stays coordinated with selection state. Hold **Shift** while dragging to lock movement to the dominant axis.
96
120
 
97
121
  Each completed drag records one persisted, undoable intent containing:
98
122
 
@@ -204,7 +228,7 @@ Every selector must resolve to exactly one page target. Invalid, missing, or amb
204
228
 
205
229
  ## Annotations and review
206
230
 
207
- A human annotation stores a note plus an immutable rendered baseline:
231
+ Mesurer Solid context annotations are semantic, target-bound review records. A note stays attached to the rendered element or region the person selected and keeps an immutable baseline together with the structured context around that target.
208
232
 
209
233
  ```js
210
234
  const annotations = await window.__MESURER__.annotations()
@@ -220,7 +244,11 @@ await window.__MESURER__.stable()
220
244
  const review = await window.__MESURER__.review(annotationId)
221
245
  ```
222
246
 
223
- Review reports concrete pixel changes and missing evidence rather than relying on source assumptions.
247
+ Review reports concrete pixel changes and missing evidence rather than relying on source assumptions. Because the annotation already carries target identity, geometry, measurements, distances, guides, styles, and layout context, a coding agent can read what was highlighted directly instead of inferring intent from a drawn arrow or screenshot markup.
248
+
249
+ Upstream Mesurer `0.1.1` added a separate drawing workflow with arrows, freehand pen strokes, text drawings, transforms, and grouped annotation tools. Mesurer Solid intentionally does not adopt that drawing surface for the current product. Its annotation workflow is designed around structured context that an agent can consume and review against the same rendered target. Screenshots remain a separate optional tool for cases where real pixel evidence is useful.
250
+
251
+ The current upstream audit and intentional differences are documented in [`docs/UPSTREAM_PARITY.md`](https://github.com/jhomra21/mesurer-solid/blob/main/docs/UPSTREAM_PARITY.md).
224
252
 
225
253
  ## Agent integration
226
254
 
@@ -276,7 +304,7 @@ const mesurer = mountMesurer({
276
304
  })
277
305
  ```
278
306
 
279
- The human camera tool supports drag-region visible-tab capture, HiDPI/Retina-aware PNG cropping, copy/download settings, a draggable thumbnail, and a larger Copy/Save viewer.
307
+ The human camera tool supports **Shift+S**, drag-region visible-tab capture, HiDPI/Retina-aware PNG cropping, copy/download settings, a draggable thumbnail, and a larger Copy/Save viewer.
280
308
 
281
309
  For coding-agent verification, the outer browser harness should normally own screenshot bytes. Mesurer supplies exact capture scope and can temporarily remove inspector presentation:
282
310
 
@@ -330,6 +358,7 @@ Mesurer's renderer is bundled and isolated from the host framework. Supported ho
330
358
  - [Context workflow](https://github.com/jhomra21/mesurer-solid/blob/main/docs/CONTEXT_WORKFLOW.md)
331
359
  - [Screenshots](https://github.com/jhomra21/mesurer-solid/blob/main/docs/SCREENSHOTS.md)
332
360
  - [Host isolation](https://github.com/jhomra21/mesurer-solid/blob/main/docs/HOST_ISOLATION.md)
361
+ - [Upstream audit and intentional differences](https://github.com/jhomra21/mesurer-solid/blob/main/docs/UPSTREAM_PARITY.md)
333
362
  - [Agent integration](./AGENT_INTEGRATION.md)
334
363
 
335
364
  ## License
package/dist/arrange.js CHANGED
@@ -2900,7 +2900,7 @@ var Qn = "mesurer.arrange", $n = "arrange", er = "mesurer.arrange.intents", tr =
2900
2900
  ].join(",");
2901
2901
  //#endregion
2902
2902
  //#region src/version.ts
2903
- var jr = "0.1.3-beta.1", Mr = tr, Nr = Qn, Pr = $n, Fr = nr, Ir = er, Lr = () => ({
2903
+ var jr = "0.1.3", Mr = tr, Nr = Qn, Pr = $n, Fr = nr, Ir = er, Lr = () => ({
2904
2904
  ...Ar(),
2905
2905
  version: jr
2906
2906
  });
package/dist/index.js CHANGED
@@ -12725,7 +12725,7 @@ async function Wp(e, t, n) {
12725
12725
  }
12726
12726
  //#endregion
12727
12727
  //#region src/version.ts
12728
- var Gp = "0.1.3-beta.1", Kp = "mesurer.context", qp = "context:v1", Jp = "mesurer.context.settings", Yp = "context.ui", Xp = {
12728
+ var Gp = "0.1.3", Kp = "mesurer.context", qp = "context:v1", Jp = "mesurer.context.settings", Yp = "context.ui", Xp = {
12729
12729
  viewBox: "0 0 256 256",
12730
12730
  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"]
12731
12731
  }, Zp = {
@@ -1298,4 +1298,4 @@ body.mesurer-solid-xray [data-mesurer-root], body.mesurer-solid-xray [data-mesur
1298
1298
  }
1299
1299
  `,zu=0,Bu=`mesurer:tab-id`,Vu=`mesurer-settings`,Hu=`mesurer-state`,Uu=e=>{try{let t=e.sessionStorage.getItem(Bu);if(t)return t;let n=e.crypto.randomUUID();return e.sessionStorage.setItem(Bu,n),n}catch{return`session`}},Wu=(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},Gu=(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 Ku(e){let t=V(()=>e.model),n=V(()=>e.env),r=V(()=>e.input),i=V(()=>e.onSelectionSpacingStyleChange),a=V(()=>e.onResetSelectionSpacingStyle),{ownerDocument:o,ownerWindow:s}=n,c=r.pageTarget??o.body,l=++zu,u=r.persistKey??`mesurer-state:${Uu(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=Ql({model:t,ownerWindow:s}),T=e=>r.isBuiltinActionDisabled?.(e)??!1,E=(e,n=!1)=>{T(e)||(e===`color-picker`&&n&&t.current.colorPickerActive&&t.setTransient({colorPickerActive:!1}),w.run(e))},D=Lu({ownerDocument:o,target:r.pageTarget??o.body,instanceId:l});r.onBuiltinController?.(w);let O=W(()=>{let e=t.state.start,n=t.state.end;return e&&n?za(e,n):null}),k=W(()=>Gu(t.state.selectedMeasurements,t.state.selectionOriginRect)),A=W(()=>k()?[k()]:t.state.selectedMeasurements.length?t.state.selectedMeasurements:t.state.selectedMeasurement?[t.state.selectedMeasurement]:[]),j=W(()=>yl(t.state.guides,t.state.selectedGuideIds)),M=W(()=>vl(t.state.hoverPointer,t.state.guides)),N=W(()=>k()??t.state.selectedMeasurement??t.state.selectedMeasurements.at(-1)??null),P=W(()=>bl({document:o,window:s,altPressed:t.state.altPressed,primarySelectedMeasurement:N(),selectedGuide:j(),hoverGuide:M(),hoverElement:t.state.hoverElement,selectedElementRef:N()?.elementRef??null})),F=W(()=>xl({document:o,window:s,altPressed:t.state.altPressed,primarySelectedMeasurement:N(),optionPairOverlay:P(),selectedGuideIds:t.state.selectedGuideIds,selectedElement:N()?.elementRef??null,hoverElement:t.state.hoverElement})),I=W(()=>{if(!t.state.altPressed||t.state.toolMode!==`guides`)return null;let e=j(),n=M();if(e&&n&&e.id!==n.id)return qa(hl(e,s),hl(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(hl({id:`preview`,...r},s),hl(i,s),null,null,s):null}),ee=e=>{let n=kl(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)},te=e=>{v=e,!_&&(_=s.requestAnimationFrame(()=>{_=0;let e=v;e&&(t.current.toolMode===`select`&&!t.current.draggingGuideId&&ee(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:_l({orientation:t.current.guideOrientation,point:e,snapGuidesEnabled:t.current.settings.snapGuidesEnabled,overlayNode:f,guides:t.current.guides,draggingGuideId:null,document:o})}}))}))},L=()=>{x&&s.clearTimeout(x),x=0,S=null},R=e=>{L(),S=e,x=s.setTimeout(()=>{x=0,S===e&&t.setTransient({draggingGuideId:e})},220)},ne=()=>{t.setTransient({start:null,end:null,isDragging:!1,draggingGuideId:null,guidePreview:null}),y=null,b=!1,d.key=``,t.endAction()},re=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&&P()){e.preventDefault(),r(),t.addHeldDistance({...P(),id:Ka()}),t.endAction();return}if(t.current.toolMode===`guides`){e.preventDefault(),r();let i=Ka(),a=_l({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}),R(i),go(e.currentTarget,e.pointerId);return}t.current.selectedGuideIds.length>0&&(r(),t.setSelectedGuideIds([])),b=e.shiftKey,y=e.shiftKey?Hl({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)},ie=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}),te(n),t.current.draggingGuideId){let e=t.current.guides.find(e=>e.id===t.current.draggingGuideId);if(e){let r=_l({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})},z=e=>{if(!t.current.enabled)return;if(t.current.toolMode===`guides`){L(),e.currentTarget.hasPointerCapture?.(e.pointerId)&&e.currentTarget.releasePointerCapture?.(e.pointerId),ne();return}if(t.current.toolMode!==`select`){ne();return}let n=t.current.start;if(!n){ne();return}let r={x:e.clientX,y:e.clientY};if(t.current.isDragging){let i=za(n,r),a=zl(i,f,d,o,c).map(e=>({...pl(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}),ne();return}let i=y?t.current.selectedMeasurements.find(e=>e.elementRef===y)??null:Hl({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),ne();return}let a=e.shiftKey?kl(r,f,o,c)??Al(r,f,t.current.settings.snapEnabled,o,c):Al(r,f,t.current.settings.snapEnabled,o,c);if(a){let n=pl(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));ne()},ae=()=>{L(),t.current.draggingGuideId||ne(),t.setTransient({guidePreview:null})},oe=(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)}},se=(e,n)=>{n.stopPropagation(),t.setTransient({draggingGuideId:null}),n.currentTarget.hasPointerCapture?.(n.pointerId)&&n.currentTarget.releasePointerCapture?.(n.pointerId)},ce=(e,n,r=null)=>_l({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}),le=(e,n)=>{t.checkpoint();let r=Ka();return t.addGuide({id:r,orientation:e,position:ce(e,n)}),t.setSelectedGuideIds([]),r},ue=(e,n)=>{let r=t.current.guides.find(t=>t.id===e);r&&t.updateGuide(e,{position:ce(r.orientation,n,e)})},de=e=>{t.current.settings.selectNewGuideEnabled&&t.setSelectedGuideIds([e])},fe=e=>t.setGuides(t.current.guides.filter(t=>t.id!==e)),pe=()=>{t.clearWorkspace(),p?.clear(),m?.clearWorkspace()};return Hr(()=>[t.state.toolMode,t.state.enabled],([e,t])=>{p&&(e===`text-inspector`&&t?p.enable():p.disable())}),Hr(()=>t.state.xrayVisible,e=>D.setVisible(e)),Hr(()=>[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:{...V(()=>e.selectionSpacingStyle)}})}),Hr(()=>[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))}),Kt(()=>{nu(Ru,n.portalTarget),p=Au({portalTarget:n.portalTarget});let e=r.persistence??Vo(s,u,Vu,r.persistKey?void 0:Hu);m=e,e.setErrorHandler?.(r.onPersistenceError);let a=e.load();if(a?.settings){let e=Wu(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=Wu(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(),E(`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`){E(`select`);return}if(n===`a`){E(`text-inspector`);return}if(n===`g`){E(`guides`);return}if(n===`p`){E(`color-picker`,!0);return}if(n===`x`){E(`xray`);return}if(n===`r`){E(`rulers`);return}if(n===`h`){T(`guides`)||t.setGuideOrientation(`horizontal`,!0);return}n===`v`&&(T(`guides`)||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=>({...pl(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=>ml(e,n,o))),t.current.activeMeasurement&&t.setActiveMeasurement(ml(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:ce(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(_),L(),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,D.dispose(),r.onBuiltinController?.(null)}}),Y(Ci,{get mount(){return n.portalMount},get children(){var n=X(`div`,{class:`mesurer-solid-root`,"data-mesurer-root":`true`});return Qi(()=>e=>{f=e},n),Q(n,Y(K,{get when(){return J(()=>!!t.state.enabled)()?t.state.rulersVisible:t.state.enabled},get children(){return Y(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:le,onMoveGuide:ue,onFinishGuide:de,onCancelGuide:fe})}}),null),Q(n,Y(Ys,{model:t,get displayedSelectedMeasurements(){return A()},get activeRect(){return O()},get optionPairOverlay(){return P()},get guideDistanceOverlay(){return I()},get optionContainerLines(){return F()},get hoverGuide(){return M()},get selectionSpacingStyle(){return e.selectionSpacingStyle},get interactive(){return J(()=>!!t.state.enabled)()?!t.state.settingsOpen:t.state.enabled},onPointerDown:re,onPointerMove:ie,onPointerUp:z,onPointerLeave:ae,onGuidePointerDown:oe,onGuidePointerUp:se}),null),Q(n,Y(Fa,{model:t,ownerWindow:s}),null),Q(n,Y(Bc,{model:t,ownerWindow:s,onBuiltinAction:E,get pluginTools(){return r.pluginTools},get onPluginTool(){return r.onPluginTool},get onPluginToolMenuItem(){return r.onPluginToolMenuItem},isBuiltinActionDisabled:T,onClearWorkspace:pe,get selectionSpacingStyle(){return e.selectionSpacingStyle},onSelectionSpacingStyleChange:i,onResetSettings:()=>{t.resetSettings(),a(),m?.clearSettings()}}),null),n}})}function qu(e){let t=V(()=>({...vo,...e.selectionSpacingStyle})),[n,r]=G({...t}),i=e=>r(t=>({...t,...e})),a=()=>r({...t}),o=Gl({initialEnabled:!0,initialToolMode:`none`,settings:V(()=>({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]=G(null);return Kt(()=>{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()}}),Y(K,{get when(){return s()},children:t=>Y(Ku,{model:o,get env(){return t()},input:e,get selectionSpacingStyle(){return n()},onSelectionSpacingStyleChange:i,onResetSelectionSpacingStyle:a})})}var Ju=`mesurer.arrange`,Yu=`arrange`,Xu=`mesurer.arrange.intents`,Zu=`mesurer.arrange.active`,Qu=`mesurer.arrange.settings`,$u=`runtime:solid`,ed=`builtin.select`,td=`arrange.toggle`,nd=`arrange.commit`,rd=`arrange.clear`,id=`mesurer.arrange.selection-available`,ad=1,od=24,sd=160,cd=500,ld=`#ef4444`,ud={viewBox:`0 0 24 24`,paths:[`M12 2.75 8.75 6h2.5v5.25H6V8.75L2.75 12 6 15.25v-2.5h5.25V18h-2.5L12 21.25 15.25 18h-2.5v-5.25H18v2.5L21.25 12 18 8.75v2.5h-5.25V6h2.5L12 2.75Z`]},dd=(e,t)=>({left:e.left+t.x,top:e.top+t.y,width:e.width,height:e.height}),fd=(e,t)=>({left:e.left-t.left,top:e.top-t.top,width:e.width-t.width,height:e.height-t.height}),pd=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}},md=(e,t,n,r)=>Math.max(0,Math.max(e,n)-Math.min(t,r)),hd=(e,t,n)=>{let r=t===`x`?e.left:e.top,i=t===`x`?e.width:e.height,a=r+i;return n===`edge`?[r,a]:n===`center`?[r+i/2]:[r,r+i/2,a]},gd=(e,t)=>t===`x`?{start:e.top,end:e.top+e.height}:{start:e.left,end:e.left+e.width},_d=e=>e.kind===`edge`?2:+(e.kind===`guide`),vd=(e,t,n)=>{let r=gd(t,e),i=null;for(let a of n)if(a.axis===e&&!(a.source===`element`&&md(r.start,r.end,a.start,a.end)>sd))for(let n of hd(t,e,a.kind)){let e=a.position-n,t=Math.abs(e);if(t>10)continue;let r=i?Math.abs(i.delta):1/0;(t<r||t===r&&(!i||_d(a)>_d(i)))&&(i={...a,delta:e})}return i},yd=e=>{let{origin:t,pathname:n,search:r}=e.location;return`${t}${n}${r}`},bd=(e,t)=>`${t}-${e.crypto?.randomUUID?.()??`${Date.now()}-${Math.random().toString(36).slice(2)}`}`,xd=e=>({tag:e.fingerprintTag,id:e.fingerprintId,testId:e.fingerprintTestId,role:e.fingerprintRole,ariaLabel:e.fingerprintAriaLabel,classes:[...e.fingerprintClasses],text:e.fingerprintText}),Sd=e=>({id:e.id,selector:e.selector,fingerprint:xd(e),before:{left:e.beforeLeft,top:e.beforeTop,width:e.beforeWidth,height:e.beforeHeight},desired:{left:e.desiredLeft,top:e.desiredTop,width:e.desiredWidth,height:e.desiredHeight},beforeOffset:{x:e.beforeOffsetX,y:e.beforeOffsetY},desiredOffset:{x:e.desiredOffsetX,y:e.desiredOffsetY}}),Cd=e=>({id:e.id,createdAt:e.createdAt,pageUrl:e.pageUrl,targets:e.targets.map(Sd)}),wd=e=>{let{element:t,transform:n}=e;n.value||n.priority?t.style.setProperty(`transform`,n.value,n.priority):t.style.removeProperty(`transform`)},Td=e=>e instanceof Element&&!!e.closest(`input, textarea, select, [contenteditable='true'], [contenteditable='']`),Ed=()=>_a({id:Ju,version:`0.1.0`,requires:[$u,`tool:select`],provides:[`tool:arrange`,`intent:arrange`,`agent:arrange`,`settings:arrange`],setup(e){let t=e.service.get($u);if(!t)throw Error(`Arrange plugin requires the Solid renderer runtime.`);let{ownerDocument:n,ownerWindow:r}=t,i=t.createWorkspaceRuntime(),a=t.createInspectorMount(),o=t.pageTarget??n.body??n.documentElement,s=t.portalTarget,c=r;e.state.register({id:Xu,initial:{intents:[]},history:!0,persist:!0}),e.state.register({id:Zu,initial:!1}),e.state.register({id:Qu,initial:{snapping:!0,elementEdges:!0,elementCenters:!0,guides:!0,preferXrayEdges:!0,snapLines:!0},persist:!0});let l=a.element;l.dataset.mesurerArrange=`true`,l.style.position=`fixed`,l.style.inset=`0`,l.style.zIndex=`84`,l.style.pointerEvents=`none`;let u=n.createElement(`div`);u.dataset.mesurerArrangeSnapLine=`vertical`,u.setAttribute(`aria-hidden`,`true`),u.style.position=`fixed`,u.style.display=`none`,u.style.width=`1px`,u.style.backgroundColor=ld,u.style.pointerEvents=`none`;let d=n.createElement(`div`);d.dataset.mesurerArrangeSnapLine=`horizontal`,d.setAttribute(`aria-hidden`,`true`),d.style.position=`fixed`,d.style.display=`none`,d.style.height=`1px`,d.style.backgroundColor=ld,d.style.pointerEvents=`none`;let f=n.createElement(`div`);f.dataset.mesurerArrangeBox=`true`,f.setAttribute(`role`,`application`),f.setAttribute(`aria-label`,`Arrange selected elements`),f.style.position=`fixed`,f.style.display=`none`,f.style.boxSizing=`border-box`,f.style.border=`1px solid #0d99ff`,f.style.cursor=`grab`,f.style.pointerEvents=`auto`,f.style.touchAction=`none`,f.style.userSelect=`none`,l.append(u,d,f);let p=new Map,m=new Map,h={intentId:null,state:`desired`},g=null,_=null,v=!1,y=0,b=null,x=()=>e.state.get(`mesurer.arrange.intents`)??{intents:[]},S=()=>e.state.get(`mesurer.arrange.active`)??!1,C=()=>{let t=e.state.get(Qu);return{snapping:t?.snapping??!0,elementEdges:t?.elementEdges??!0,elementCenters:t?.elementCenters??!0,guides:t?.guides??!0,preferXrayEdges:t?.preferXrayEdges??!0,snapLines:t?.snapLines??!0}},w=t=>{e.state.update(Qu,e=>({...e,...t}))},T=()=>yd(r),E=()=>x().intents.filter(e=>e.pageUrl===T()),D=e=>!!e.closest(`[data-mesurer-island='true'], [data-mesurer-inspector-ui='true'], [data-mesurer-root='true']`),O=e=>Zc(e,o)&&!D(e),k=e=>{let t=[];o instanceof c.HTMLElement&&o.matches(e)&&!D(o)&&t.push(o);for(let n of o.querySelectorAll(e))n instanceof c.HTMLElement&&O(n)&&t.push(n);return t},A=e=>{let t=xd(e);if(!tl(t))return null;let n=[];try{n=k(e.selector).filter(e=>nl(e,t))}catch{return null}if(n.length!==1)return null;if(!t.id&&!t.testId){let e=[];try{e=k(t.tag).filter(e=>nl(e,t))}catch{return null}if(e.length!==1||e[0]!==n[0])return null}return n[0]??null},j=()=>{for(let e of p.values())wd(e);p.clear()},M=()=>{u.style.display=`none`,d.style.display=`none`},N=(e,t,n)=>{if(M(),C().snapLines){if(e){let t=Math.min(n.top,e.start),r=Math.max(n.top+n.height,e.end);u.style.display=`block`,u.style.left=`${e.position}px`,u.style.top=`${t}px`,u.style.height=`${Math.max(1,r-t)}px`}if(t){let e=Math.min(n.left,t.start),r=Math.max(n.left+n.width,t.end);d.style.display=`block`,d.style.left=`${e}px`,d.style.top=`${t.position}px`,d.style.width=`${Math.max(1,r-e)}px`}}},P=()=>{if(!(m.size>0))for(let e of s.querySelectorAll(`[data-mesurer-measurement='true']`))e instanceof c.HTMLElement&&(m.set(e,{value:e.style.getPropertyValue(`visibility`),priority:e.style.getPropertyPriority(`visibility`)}),e.style.setProperty(`visibility`,`hidden`,`important`))},F=()=>{for(let[e,t]of m)t.value||t.priority?e.style.setProperty(`visibility`,t.value,t.priority):e.style.removeProperty(`visibility`);m.clear()},I=(e=E())=>{let t=new Map;for(let n of e)for(let e of n.targets){let n=A(e);n&&t.set(n,{x:e.desiredOffsetX,y:e.desiredOffsetY})}return t},ee=()=>{if(h.state===`live`)return new Map;if(!h.intentId)return I();let e=x().intents.find(e=>e.id===h.intentId);if(!e)return I();let t=new Map;for(let n of e.targets){let e=A(n);e&&t.set(e,h.state===`before`?{x:n.beforeOffsetX,y:n.beforeOffsetY}:{x:n.desiredOffsetX,y:n.desiredOffsetY})}return t},te=e=>{j();for(let[t,n]of e){if(!t.isConnected||!O(t)||n.x===0&&n.y===0)continue;let e={value:t.style.getPropertyValue(`transform`),priority:t.style.getPropertyPriority(`transform`)},i=r.getComputedStyle(t).transform,a=i&&i!==`none`?` ${i}`:``;t.style.setProperty(`transform`,`translate3d(${n.x}px, ${n.y}px, 0)${a}`,`important`),p.set(t,{element:t,transform:e})}},L=()=>te(ee()),R=e=>{j();try{return e()}finally{!v&&!g&&L()}},ne=()=>i.currentSelection().elements.filter(e=>e.isConnected&&O(e));e.state.register({id,initial:ne().length>0});let re=()=>e.state.get(id)??!1,ie=()=>{let t=ne().length>0;t!==re()&&e.state.update(id,()=>t)},z=()=>pd(ne().map(e=>qc(e))),ae=e=>{let t=C();if(!t.snapping)return[];let n=[],a=new Set(e),s=i.snapshot(),l=s.xrayVisible&&t.preferXrayEdges&&t.elementEdges,u=0,d=i=>{if(u>=cd||a.has(i)||e.some(e=>e.contains(i))||!O(i))return;let o=r.getComputedStyle(i);if(o.display===`none`||o.visibility===`hidden`||o.visibility===`collapse`)return;let s=o.outlineStyle===`solid`&&(Number.parseFloat(o.outlineWidth)||0)>0;if(l&&!s)return;let c=qc(i);if(c.width<=0||c.height<=0)return;let d=sd;if(c.left+c.width<-160||c.top+c.height<-160||c.left>r.innerWidth+d||c.top>r.innerHeight+d)return;u+=1;let f=c.left+c.width,p=c.top+c.height;if(t.elementEdges){for(let e of[c.left,f])n.push({axis:`x`,position:e,start:c.top,end:p,source:`element`,kind:`edge`});for(let e of[c.top,p])n.push({axis:`y`,position:e,start:c.left,end:f,source:`element`,kind:`edge`})}t.elementCenters&&!l&&(n.push({axis:`x`,position:c.left+c.width/2,start:c.top,end:p,source:`element`,kind:`center`}),n.push({axis:`y`,position:c.top+c.height/2,start:c.left,end:f,source:`element`,kind:`center`}))};if(t.elementEdges||t.elementCenters){o instanceof c.HTMLElement&&d(o);for(let e of o.querySelectorAll(`*`)){if(u>=cd)break;e instanceof c.HTMLElement&&d(e)}}if(t.guides)for(let e of s.guides)e.orientation===`vertical`?n.push({axis:`x`,position:e.position,start:0,end:r.innerHeight,source:`guide`,kind:`guide`}):n.push({axis:`y`,position:e.position,start:0,end:r.innerWidth,source:`guide`,kind:`guide`});return n},oe=e=>{if(!S()){f.style.display=`none`;return}let t=e===void 0?z():e;if(!t){f.style.display=`none`;return}f.style.display=`block`,f.style.left=`${t.left}px`,f.style.top=`${t.top}px`,f.style.width=`${t.width}px`,f.style.height=`${t.height}px`},se=()=>{h={intentId:null,state:`desired`},L(),M(),S()?P():F()},ce=()=>{h={intentId:null,state:`live`},j(),M(),F()},le=()=>{v||g||(L(),M(),S()?P():F(),oe())},ue=()=>{y||v||(y=r.requestAnimationFrame(()=>{y=0,le()}))},de=async()=>{s.querySelector(`[data-mesurer-builtin='select'] button`)?.getAttribute(`aria-pressed`)!==`true`&&await e.command.execute(ed,void 0,{source:`arrange`})},fe=e=>{if(!S()||e.button!==0)return;let t=ne();if(!t.length)return;e.preventDefault(),e.stopPropagation(),h={intentId:null,state:`desired`},L();let n=I(E());j();let r=t.map((e,t)=>{let r=qc(e),i=n.get(e)??{x:0,y:0},a=dd(r,i),o=el(e);return{element:e,target:{id:`target-${t+1}`,selector:$c(e),fingerprintTag:o.tag,fingerprintId:o.id,fingerprintTestId:o.testId,fingerprintRole:o.role,fingerprintAriaLabel:o.ariaLabel,fingerprintClasses:[...o.classes],fingerprintText:o.text,beforeLeft:a.left,beforeTop:a.top,beforeWidth:a.width,beforeHeight:a.height,desiredLeft:a.left,desiredTop:a.top,desiredWidth:a.width,desiredHeight:a.height,beforeOffsetX:i.x,beforeOffsetY:i.y,desiredOffsetX:i.x,desiredOffsetY:i.y}}}),i=pd(r.map(({target:e})=>({left:e.beforeLeft,top:e.beforeTop,width:e.beforeWidth,height:e.beforeHeight})));if(!i){L();return}L(),P(),M(),g={pointerId:e.pointerId,originX:e.clientX,originY:e.clientY,targets:r,groupBefore:i,snapCandidates:ae(t),dx:0,dy:0},oe(i),f.style.cursor=`grabbing`,f.setPointerCapture?.(e.pointerId)},pe=e=>{if(!g||e.pointerId!==g.pointerId)return;let t=e.clientX-g.originX,n=e.clientY-g.originY,r=null;e.shiftKey&&(Math.abs(t)>=Math.abs(n)?(n=0,r=`x`):(t=0,r=`y`));let i=dd(g.groupBefore,{x:t,y:n}),a=r===`y`?null:vd(`x`,i,g.snapCandidates),o=r===`x`?null:vd(`y`,i,g.snapCandidates);t+=a?.delta??0,n+=o?.delta??0,g.dx=t,g.dy=n;let s=I(E());for(let e of g.targets)s.set(e.element,{x:e.target.beforeOffsetX+t,y:e.target.beforeOffsetY+n});te(s);let c=dd(g.groupBefore,{x:t,y:n});oe(c),N(a,o,c)},me=()=>{if(!g)return;let e=g.pointerId;g=null,f.hasPointerCapture?.(e)&&f.releasePointerCapture(e),f.style.cursor=`grab`,se(),oe()},he=t=>{if(!g||t.pointerId!==g.pointerId)return;t.preventDefault(),t.stopPropagation();let n=g;if(g=null,f.hasPointerCapture?.(t.pointerId)&&f.releasePointerCapture(t.pointerId),f.style.cursor=`grab`,M(),n.dx===0&&n.dy===0){se(),oe();return}_={id:bd(r,`arrange`),createdAt:Date.now(),pageUrl:T(),targets:n.targets.map(({target:e})=>({...e,desiredLeft:e.beforeLeft+n.dx,desiredTop:e.beforeTop+n.dy,desiredOffsetX:e.beforeOffsetX+n.dx,desiredOffsetY:e.beforeOffsetY+n.dy}))},e.command.execute(nd).catch(()=>{_=null,se(),oe()})},ge=e=>{!g||e.pointerId!==g.pointerId||me()},_e=t=>{t.key!==`Escape`||!S()&&!g||Td(t.target)||s.querySelector(`[data-mesurer-tool-menu]`)||(t.preventDefault(),t.stopImmediatePropagation(),g?me():(e.state.update(`mesurer.arrange.active`,()=>!1),ce(),oe()))};f.addEventListener(`pointerdown`,fe),f.addEventListener(`pointermove`,pe),f.addEventListener(`pointerup`,he),f.addEventListener(`pointercancel`,ge),r.addEventListener(`keydown`,_e,!0),r.addEventListener(`resize`,ue),r.addEventListener(`scroll`,ue,!0),o.addEventListener(`scroll`,ue,!0),b=new c.MutationObserver(()=>{ie(),ue()}),b.observe(o,{childList:!0,subtree:!0,attributes:!0,attributeFilter:[`id`,`class`,`data-testid`,`role`,`aria-label`]});let ve=i.subscribe(()=>{ie(),ue()}),ye=e.state.subscribe(ue),be=e=>x().intents.find(t=>t.id===e)??null,xe=(e,t)=>{let n=null;if(n=t===`before`?pd(e.targets.map(e=>({left:e.beforeLeft,top:e.beforeTop,width:e.beforeWidth,height:e.beforeHeight}))):t===`desired`?pd(e.targets.map(e=>({left:e.desiredLeft,top:e.desiredTop,width:e.desiredWidth,height:e.desiredHeight}))):R(()=>pd(e.targets.map(e=>A(e)).filter(e=>e!==null).map(e=>qc(e)))),!n)throw Error(`Arrange intent has no resolvable capture region: ${e.id}`);let i=Math.max(0,n.left-od),a=Math.max(0,n.top-od),o=Math.min(r.innerWidth,n.left+n.width+od),s=Math.min(r.innerHeight,n.top+n.height+od);return{left:i,top:a,width:Math.max(0,o-i),height:Math.max(0,s-a)}},Se={active:S,intents:()=>x().intents.map(Cd),intent(e){let t=be(e);return t?Cd(t):null},show(e,t){if(!be(e))throw Error(`Arrange intent not found: ${e}`);h={intentId:e,state:t},le()},showCurrent(){h={intentId:null,state:`desired`},le()},capturePlan(e,t){let n=be(e);if(!n)throw Error(`Arrange intent not found: ${e}`);return{schema:`mesurer.arrange-capture/v1`,arrangeId:e,state:t,chrome:`hide`,captures:[{id:`viewport`,kind:`viewport`},{id:`focus`,kind:`clip`,rect:xe(n,t)}]}},review:(e,t=ad)=>{let n=be(e);if(!n)throw Error(`Arrange intent not found: ${e}`);let r=R(()=>n.targets.map(e=>{let n=A(e),r={left:e.desiredLeft,top:e.desiredTop,width:e.desiredWidth,height:e.desiredHeight};if(!n)return{targetId:e.id,selector:e.selector,desired:r,current:null,delta:null,matched:!1};let i=qc(n),a=fd(i,r),o=Math.abs(a.left)<=t&&Math.abs(a.top)<=t&&Math.abs(a.width)<=t&&Math.abs(a.height)<=t;return{targetId:e.id,selector:e.selector,desired:r,current:i,delta:a,matched:o}})),i=r.filter(e=>e.current!==null).length,a=i===0?`stale`:i===r.length?`connected`:`partial`;return{schema:`mesurer.arrange-review/v1`,arrangeId:n.id,targetStatus:a,tolerance:t,matched:r.length>0&&r.every(e=>e.matched),targets:r}},clear:()=>e.command.execute(rd)};e.tool.register({id:`arrange`,label:`Arrange`,shortcut:`Shift+A`,order:65,command:td,icon:ud,active:S,menu:{label:`Arrange options`,items:[{id:`snapping`,label:`Snapping`,checked:()=>C().snapping,run:()=>w({snapping:!C().snapping})},{id:`element-edges`,label:`Element edges`,checked:()=>C().elementEdges,disabled:()=>!C().snapping,run:()=>w({elementEdges:!C().elementEdges})},{id:`element-centers`,label:`Element centers`,checked:()=>C().elementCenters,disabled:()=>!C().snapping,run:()=>w({elementCenters:!C().elementCenters})},{id:`guides`,label:`Guides`,checked:()=>C().guides,disabled:()=>!C().snapping,run:()=>w({guides:!C().guides})},{id:`prefer-xray-edges`,label:`Prefer X-ray edges`,checked:()=>C().preferXrayEdges,disabled:()=>!C().snapping||!C().elementEdges,run:()=>w({preferXrayEdges:!C().preferXrayEdges})},{id:`alignment-rulers`,label:`Alignment rulers`,checked:()=>C().snapLines,disabled:()=>!C().snapping,run:()=>w({snapLines:!C().snapLines})}]}}),e.settings.register({id:`arrange`,label:`Arrange`,order:35,controls:[{type:`toggle`,id:`snapping`,label:`Snapping`,description:`Magnetically align dragged selections to nearby layout anchors.`,value:()=>C().snapping,set:e=>w({snapping:e})},{type:`toggle`,id:`element-edges`,label:`Element edges`,description:`Snap left/right and top/bottom edges to nearby elements.`,value:()=>C().elementEdges,set:e=>w({elementEdges:e}),disabled:()=>!C().snapping},{type:`toggle`,id:`element-centers`,label:`Element centers`,description:`Snap center-to-center when X-ray edge preference is not active.`,value:()=>C().elementCenters,set:e=>w({elementCenters:e}),disabled:()=>!C().snapping},{type:`toggle`,id:`guides`,label:`Guides`,description:`Snap to existing Mesurer guides.`,value:()=>C().guides,set:e=>w({guides:e}),disabled:()=>!C().snapping},{type:`toggle`,id:`prefer-xray-edges`,label:`Prefer X-ray edges`,description:`When X-ray is on, use its visible blue box edges as element snap targets.`,value:()=>C().preferXrayEdges,set:e=>w({preferXrayEdges:e}),disabled:()=>!C().snapping||!C().elementEdges},{type:`toggle`,id:`alignment-rulers`,label:`Alignment rulers`,description:`Show the red alignment ruler while a snap is active.`,value:()=>C().snapLines,set:e=>w({snapLines:e}),disabled:()=>!C().snapping}]}),e.command.register(td,async()=>{let t=!S();if(t&&await de(),e.state.update(`mesurer.arrange.active`,()=>t),!t){g&&me(),ce(),oe();return}se(),oe()}),e.command.register(nd,()=>{let t=_;_=null,t&&(e.state.update(`mesurer.arrange.intents`,e=>({intents:[...e.intents,t].slice(-100)})),se(),oe())}),e.command.register(rd,()=>{e.state.update(Xu,()=>({intents:[]})),h={intentId:null,state:`desired`},j(),M(),S()?P():F(),oe()}),e.service.provide(Yu,Se),L(),oe(),e.lifecycle.onDispose(()=>{v=!0,y&&r.cancelAnimationFrame(y),b?.disconnect(),b=null,f.removeEventListener(`pointerdown`,fe),f.removeEventListener(`pointermove`,pe),f.removeEventListener(`pointerup`,he),f.removeEventListener(`pointercancel`,ge),r.removeEventListener(`keydown`,_e,!0),r.removeEventListener(`resize`,ue),r.removeEventListener(`scroll`,ue,!0),o.removeEventListener(`scroll`,ue,!0),ve(),ye.dispose(),j(),M(),F(),i.dispose(),a.dispose()})}}),Dd=(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}`})}}),Od=()=>Dd(`select`,`Select`,`S`,10),kd=()=>Dd(`xray`,`X-ray`,`X`,20),Ad=()=>Dd(`color-picker`,`Color picker`,`P`,30),jd=()=>Dd(`rulers`,`Rulers`,`R`,40),Md=()=>Dd(`text-inspector`,`Text inspector`,`A`,50),Nd=()=>Dd(`guides`,`Guides`,`G`,60),Pd=()=>Dd(`settings`,`Settings`,`⌘/Ctrl+,`,90),Fd=()=>_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})}}),Id=()=>[Od(),kd(),Ad(),jd(),Md(),Nd(),Fd(),Pd()];function Ld(e=[],t=[]){let n=new Set(t.map(e=>`mesurer.${e}`));return[...Id().filter(e=>!n.has(e.id)),...e]}var Rd=`mesurer:capture-bridge-ping`,zd=`mesurer:capture-bridge-request`,Bd=`mesurer:capture-bridge-response`,Vd=(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)}},Hd=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()}},Ud=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})])},Wd=(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)},Kd=e=>new Promise(t=>{e.requestAnimationFrame(()=>{e.requestAnimationFrame(()=>t())})}),qd=e=>e.crypto?.randomUUID?.()??`mesurer-${Date.now()}-${Math.random().toString(36).slice(2)}`,Jd=(e,t,n=``)=>`${e}:${t}:${n}`,Yd=(e,t,n)=>{let r=`${t}:${n}:`;return e.startsWith(r)?e.slice(r.length):null},Xd=e=>new Promise(t=>{let n=qd(e),r=e.location.origin,i=o=>{o.source===e&&o.origin===r&&Yd(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(Jd(Rd,n),r)}),Zd=e=>new Promise((t,n)=>{let r=qd(e),i=e.location.origin,a=s=>{if(s.source!==e||s.origin!==i)return;let c=Yd(String(s.data??``),Bd,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(Jd(zd,r),i)}),Qd=new WeakMap,$d=e=>{let t=Qd.get(e),n=t?.stream.getVideoTracks()[0];if(!t||!n||n.readyState!==`live`){Qd.delete(e);return}return t},ef=async(e,t)=>{let n=$d(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 Qd.set(t,r),a.addEventListener(`ended`,()=>{Qd.get(t)===r&&Qd.delete(t)},{once:!0}),r}catch(e){throw i.getTracks().forEach(e=>e.stop()),e}},tf=e=>{let t=Qd.get(e);t&&(Qd.delete(e),t.video.pause(),t.video.srcObject=null,t.stream.getTracks().forEach(e=>e.stop()))},nf=async({ownerDocument:e,ownerWindow:t})=>{let{video:n}=await ef(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`)})},rf=async(e,t)=>{await Xd(t)||await ef(e,t)},af=async({ownerDocument:e,ownerWindow:t})=>{if(await Xd(t)){let e=await Zd(t);if(e)return e}return nf({ownerDocument:e,ownerWindow:t})},of=144,sf=96,cf=8,lf=4,uf=1800,df=(e,t)=>{for(let[n,r]of Object.entries(t))e.style.setProperty(n,r)},ff=(e,t)=>({left:Math.min(Math.max(cf,e.left),Math.max(cf,t.innerWidth-of-cf)),top:Math.min(Math.max(cf,e.top),Math.max(cf,t.innerHeight-sf-cf))}),pf=(e,t)=>{let n=e.createElement(`button`);return n.type=`button`,n.textContent=t,df(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},mf=({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`,hf=e=>e!==null&&(e.nodeType===1||e.nodeType===11),gf=({ownerDocument:e,ownerWindow:t,root:n,previewDurationMs:r})=>{let i=n.closest(`[data-mesurer-root='true']`)?.parentNode??n.parentNode;if(!hf(i))throw Error(`Screenshot preview requires a mounted Mesurer host.`);let a=e.createElement(`div`);a.dataset.mesurerInspectorUi=`true`,a.dataset.mesurerScreenshotInteractive=`true`,df(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,df(o,{position:`fixed`,display:`none`,"z-index":`96`,width:`${of}px`,height:`${sf}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`,df(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`,df(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`),df(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`,df(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`,df(p,{position:`fixed`,top:`16px`,right:`16px`,display:`flex`,gap:`8px`,"pointer-events":`auto`});let m=pf(e,`Copy`);m.dataset.mesurerScreenshotViewerCopy=`true`,m.setAttribute(`aria-label`,`Copy screenshot`);let h=pf(e,`Save`);h.dataset.mesurerScreenshotViewerSave=`true`,h.setAttribute(`aria-label`,`Save screenshot`);let g=pf(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`),df(_,{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`},uf)},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=()=>ff({left:t.innerWidth-of-cf,top:t.innerHeight-sf-cf},t),M=e=>{let n=ff(e,t);b=n,o.style.left=`${n.left}px`,o.style.top=`${n.top}px`},N=()=>{!v||!y||(T(),d.style.display=`flex`,g.focus())},P=async()=>{let e=v;if(e)try{await Ud(Promise.resolve(e),t),D(`Copied screenshot`)}catch{D(`Could not copy screenshot`,!0)}},F=()=>{let n=v;if(n)try{Gd(n,Wd(),e,t),D(`Saved screenshot`)}catch{D(`Could not save screenshot`,!0)}},I=(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},ee=(e,t)=>{let n=x;if(!n)return;let r=e-n.startX,i=t-n.startY;!n.moved&&Math.hypot(r,i)>=lf&&(n.moved=!0),n.moved&&M({left:n.left+r,top:n.top+i})},te=()=>{let e=x;e&&(x=null,o.style.cursor=`grab`,e.moved||N())},L=()=>{x&&(x=null,o.style.cursor=`grab`)},R=e=>{e.button!==0||!I(e.clientX,e.clientY,null)||e.preventDefault()},ne=e=>{x?.pointerId===null&&ee(e.clientX,e.clientY)},re=e=>{e.button===0&&x?.pointerId===null&&te()},ie=e=>{e.pointerType!==`mouse`&&e.button===0&&I(e.clientX,e.clientY,e.pointerId)&&(o.setPointerCapture?.(e.pointerId),e.preventDefault())},z=e=>{let t=x?.pointerId;t!=null&&t===e.pointerId&&ee(e.clientX,e.clientY)},ae=e=>{let t=x?.pointerId;t!=null&&t===e.pointerId&&(o.hasPointerCapture?.(e.pointerId)&&o.releasePointerCapture(e.pointerId),te())},oe=e=>{let t=x?.pointerId;t!=null&&t===e.pointerId&&(o.hasPointerCapture?.(e.pointerId)&&o.releasePointerCapture(e.pointerId),L())},se=e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),N())},ce=e=>{e.target!==s&&e.preventDefault()},le=e=>{e.target===d&&O()},ue=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`,R),o.addEventListener(`pointerdown`,ie),o.addEventListener(`keydown`,se),o.addEventListener(`contextmenu`,ce),d.addEventListener(`click`,le),m.addEventListener(`click`,()=>{P()}),h.addEventListener(`click`,F),g.addEventListener(`click`,O),t.addEventListener(`mousemove`,ne,!0),t.addEventListener(`mouseup`,re,!0),t.addEventListener(`pointermove`,z,!0),t.addEventListener(`pointerup`,ae,!0),t.addEventListener(`pointercancel`,oe,!0),t.addEventListener(`keydown`,ue,!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(mf(n)),r>0&&(S=t.setTimeout(A,r))},dismiss:A,dispose(){w||(w=!0,T(),E(),A(),t.removeEventListener(`mousemove`,ne,!0),t.removeEventListener(`mouseup`,re,!0),t.removeEventListener(`pointermove`,z,!0),t.removeEventListener(`pointerup`,ae,!0),t.removeEventListener(`pointercancel`,oe,!0),t.removeEventListener(`keydown`,ue,!0),o.removeEventListener(`mousedown`,R),o.removeEventListener(`pointerdown`,ie),o.removeEventListener(`keydown`,se),o.removeEventListener(`contextmenu`,ce),d.removeEventListener(`click`,le),a.remove())}}},_f=`mesurer.screenshot`,vf=`screenshot`,yf=`mesurer.screenshot.settings`,bf=`mesurer.screenshot.active`,xf=`runtime:solid`,Sf=`screenshot.toggle`,Cf=2500,wf=0,Tf=[`[data-mesurer-measurement='true']`,`[data-mesurer-selected-measurement='true']`,`[data-mesurer-selection-spacing-target='true']`,`[data-mesurer-guide='true']`,`[data-mesurer-distance='true']`].join(`,`),Ef={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`]},Df=(e,t)=>{for(let[n,r]of Object.entries(t))e.style.setProperty(n,r)},Of=(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`)}},kf=e=>{let t=e(yf);return{toolEnabled:t?.toolEnabled??!0,copy:t?.copy??!0,download:t?.download??!1,includeMeasurements:t?.includeMeasurements??!1}},Af=e=>({value:e.style.getPropertyValue(`display`),priority:e.style.getPropertyPriority(`display`)}),jf=(e,t)=>{t.value||t.priority?e.style.setProperty(`display`,t.value,t.priority):e.style.removeProperty(`display`)},Mf=(e,t)=>{let n=e;for(;n.parentElement&&n.parentElement!==t;)n=n.parentElement;return n.parentElement===t?n:null},Nf=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=Mf(e,t);r&&n.add(r)}for(let e of t.querySelectorAll(Tf)){let r=Mf(e,t);r&&n.add(r)}let r=[];for(let e of n)e.dataset.mesurerInspectorUi!==`true`&&(r.push({element:e,display:Af(e)}),e.style.setProperty(`display`,`none`,`important`));return()=>{for(let e of r)jf(e.element,e.display)}},Pf=(e={})=>_a({id:_f,version:`0.1.0`,requires:[xf],provides:[`tool:screenshot`,`capture:screenshot`,`settings:screenshot`],setup(t){let n=t.service.get(xf);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??af,c=e.previewDurationMs??wf;t.state.register({id:yf,initial:{toolEnabled:e.toolEnabled??!0,copy:e.copy??!0,download:e.download??!1,includeMeasurements:e.includeMeasurements??!1},persist:!0}),t.state.register({id:bf,initial:!1});let l=o.element;l.dataset.mesurerScreenshot=`true`,Df(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`),Df(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 Df(e,{position:`fixed`,"background-color":`rgb(0 0 0 / 40%)`,"pointer-events":`none`}),u.append(e),e}),f=r.createElement(`div`);Df(f,{position:`fixed`,display:`none`,border:`1px solid #0d99ff`,"box-sizing":`border-box`,"pointer-events":`none`}),u.append(f);let p=r.createElement(`div`);Df(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`,Df(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`,Df(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=()=>kf(t.state.get),T=e=>{t.state.update(yf,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){Of(d[0],{left:0,top:0,width:t,height:n});for(let e of d.slice(1))Of(e,{left:0,top:0,width:0,height:0});f.style.display=`none`,p.style.display=`none`;return}Of(d[0],{left:0,top:0,width:t,height:e.top}),Of(d[1],{left:0,top:e.top,width:e.left,height:e.height}),Of(d[2],{left:e.left+e.width,top:e.top,width:Math.max(0,t-e.left-e.width),height:e.height}),Of(d[3],{left:0,top:e.top+e.height,width:t,height:Math.max(0,n-e.top-e.height)}),f.style.display=`block`,Of(f,e),p.style.display=`block`,p.textContent=`${Math.round(e.width)} × ${Math.round(e.height)}`,Of(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=gf({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`},N=()=>{v&&i.clearTimeout(v),h.style.display=`block`,M(h),v=i.setTimeout(()=>{v=0,h.style.display=`none`},Cf)},P=()=>{g=null,k(null),u.style.visibility=``,u.style.display=`none`,l.style.pointerEvents=`none`,E(!1),O()},F=()=>{y+=1,P(),tf(i)},I=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:Nf(n.portalTarget);a.prepareCapture();try{u.style.visibility=`hidden`,await Kd(i);let n=await Hd(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?Ud(Promise.resolve(n),i).then(()=>{a=!0}):Promise.resolve(),f=c.download?Promise.resolve().then(()=>{Gd(n,Wd(),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&&N(),e}finally{u.style.visibility=``,l(),a.finishCapture(),b=!1}},ee=async()=>{if(w().toolEnabled){if(C()){F();return}if(!x){x=!0,j.dismiss();try{if(e.captureVisibleTab===void 0&&await rf(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`||N(),e}finally{x=!1}}}},te=e=>{!C()||e.button!==0||(e.preventDefault(),e.stopPropagation(),g={x:e.clientX,y:e.clientY},k(Vd(g,g,{width:i.innerWidth,height:i.innerHeight})),u.setPointerCapture?.(e.pointerId))},L=e=>{!C()||!g||k(Vd(g,{x:e.clientX,y:e.clientY},{width:i.innerWidth,height:i.innerHeight}))},R=e=>{let t=g;if(g=null,!C()||!t)return;u.hasPointerCapture?.(e.pointerId)&&u.releasePointerCapture(e.pointerId);let n=Vd(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}I(n).catch(()=>void 0).finally(()=>{C()&&P()})},ne=e=>{g=null,u.hasPointerCapture?.(e.pointerId)&&u.releasePointerCapture(e.pointerId),k(null)},re=e=>{e.key!==`Escape`||!C()||(e.preventDefault(),e.stopImmediatePropagation(),F())};u.addEventListener(`pointerdown`,te),u.addEventListener(`pointermove`,L),u.addEventListener(`pointerup`,R),u.addEventListener(`pointercancel`,ne),i.addEventListener(`keydown`,re,!0);let ie={active:C,settings:w,setSettings:T,start:ee,cancel:F,capture:I};t.tool.register({id:`screenshot`,label:`Screenshot`,shortcut:`Shift+S`,order:70,command:Sf,icon:Ef,active:C,hidden:()=>!w().toolEnabled,menu:{label:`Screenshot options`,items:[{id:`copy`,label:`Auto-copy`,checked:()=>w().copy,run:()=>T({copy:!w().copy})},{id:`download`,label:`Auto-download`,checked:()=>w().download,run:()=>T({download:!w().download})},{id:`measurements`,label:`Include measurements`,checked:()=>w().includeMeasurements,run:()=>T({includeMeasurements:!w().includeMeasurements})}]}}),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()&&F()}},{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(Sf,ee),t.service.provide(vf,ie),t.lifecycle.onDispose(()=>{S=!0,y+=1,u.removeEventListener(`pointerdown`,te),u.removeEventListener(`pointermove`,L),u.removeEventListener(`pointerup`,R),u.removeEventListener(`pointercancel`,ne),i.removeEventListener(`keydown`,re,!0),v&&i.clearTimeout(v),j.dispose(),O(),tf(i),a.finishCapture(),a.dispose(),o.dispose()})}}),Ff=`arrange.toggle`;function If(e,t){let n=t.createWorkspaceRuntime(),r=!1,i=0,a=!1,o=()=>{r||i||(i=t.ownerWindow.requestAnimationFrame(()=>{i=0;let n=t.currentToolMode?.();r||a||n===void 0||n===`select`||(e.state.get(`mesurer.arrange.active`)??!1)&&(a=!0,e.command.execute(Ff,void 0,{source:`select-deactivated`}).catch(()=>void 0).finally(()=>{a=!1}))}))},s=n.subscribe(o);e.state.subscribe(o),o(),e.lifecycle.onDispose(()=>{r=!0,i&&t.ownerWindow.cancelAnimationFrame(i),i=0,s(),n.dispose()})}var Lf=`mesurer.text-edit.intents`,Rf=`text-edit`,zf=`text-edit.commit`,Bf=`text-edit.clear`,Vf=new Set([`HTML`,`BODY`,`SCRIPT`,`STYLE`,`META`,`LINK`,`NOSCRIPT`,`IMG`,`VIDEO`,`AUDIO`,`IFRAME`,`INPUT`,`TEXTAREA`,`SELECT`,`OPTION`]),Hf=e=>{let{origin:t,pathname:n,search:r}=e.location;return`${t}${n}${r}`},Uf=(e,t)=>`${t}-${e.crypto?.randomUUID?.()??`${Date.now()}-${Math.random().toString(36).slice(2)}`}`,Wf=e=>({tag:e.fingerprintTag,id:e.fingerprintId,testId:e.fingerprintTestId,role:e.fingerprintRole,ariaLabel:e.fingerprintAriaLabel,classes:e.fingerprintClasses,text:e.fingerprintText}),Gf=e=>({id:e.id,createdAt:e.createdAt,pageUrl:e.pageUrl,selector:e.selector,nodeIndex:e.nodeIndex,before:e.beforeText,desired:e.desiredText}),Kf=e=>{let t=e.match(/^\s*/)?.[0]??``,n=e.slice(t.length),r=n.match(/\s*$/)?.[0]??``;return{leading:t,trailing:r,value:n.slice(0,Math.max(0,n.length-r.length))}};function qf(e,t){let{ownerDocument:n,ownerWindow:r,pageTarget:i}=t,a=r,o=t.createWorkspaceRuntime(),s=t.createInspectorMount();s.element.dataset.mesurerTextEditRuntime=`true`,s.element.style.position=`fixed`,s.element.style.inset=`0`,s.element.style.zIndex=`2147483646`,s.element.style.pointerEvents=`none`,e.state.register({id:Lf,initial:{edits:[]},history:!0,persist:!0});let c=()=>e.state.get(`mesurer.text-edit.intents`)??{edits:[]},l=new Map,u=new Map,d=new WeakMap,f=null,p=null,m=!1,h=0,g=()=>t.currentToolMode?.()??`none`,_=e=>Zc(e,i)&&!e.closest(`[data-mesurer-root='true'], [data-mesurer-inspector-ui='true']`),v=e=>{let t=[];i instanceof a.HTMLElement&&i.matches(e)&&_(i)&&t.push(i);for(let n of i.querySelectorAll(e))n instanceof a.HTMLElement&&_(n)&&t.push(n);return t},y=e=>{let t=l.get(e.id);if(t?.element.isConnected&&t.node.isConnected&&_(t.element))return t;l.delete(e.id);let n=Wf(e);if(!tl(n))return null;let r=[];try{r=v(e.selector).filter(e=>nl(e,n))}catch{return null}if(r.length!==1)return null;if(!n.id&&!n.testId){let e=[];try{e=v(n.tag).filter(e=>nl(e,n))}catch{return null}if(e.length!==1||e[0]!==r[0])return null}let i=r[0],o=i.childNodes.item(e.nodeIndex);if(!o||o.nodeType!==a.Node.TEXT_NODE)return null;let s={element:i,node:o};return l.set(e.id,s),s},b=(e,t)=>{e.nodeValue!==t&&(d.set(e,(d.get(e)??0)+1),e.nodeValue=t)},x=()=>{for(let e of u.values())e.node.isConnected&&e.node.nodeValue===e.desiredText&&b(e.node,e.beforeText);u.clear()},S=()=>{let e=c().edits.filter(e=>e.pageUrl===Hf(r)),t=new Set(e.map(e=>e.id));for(let[e,n]of u)t.has(e)&&n.node.isConnected||(n.node.isConnected&&n.node.nodeValue===n.desiredText&&b(n.node,n.beforeText),u.delete(e));for(let t of e){let e=y(t);if(!e)continue;let n=e.node.nodeValue??``,r=u.get(t.id);if(r?.node===e.node){if(n===r.desiredText)continue;if(n!==r.beforeText&&n!==t.beforeText){u.delete(t.id);continue}}n!==t.desiredText&&n===t.beforeText&&(b(e.node,t.desiredText),u.set(t.id,{...e,beforeText:t.beforeText,desiredText:t.desiredText}))}},C=()=>{let e=p;if(!e||!e.element.isConnected)return;let t=e.element.getBoundingClientRect(),n=r.getComputedStyle(e.element),i=Math.min(Math.max(120,t.width),Math.max(120,r.innerWidth-16)),a=Math.min(Math.max(8,t.left),Math.max(8,r.innerWidth-i-8)),o=Math.min(Math.max(8,t.top),Math.max(8,r.innerHeight-Math.max(36,t.height)-8));Object.assign(e.editor.style,{left:`${a}px`,top:`${o}px`,width:`${i}px`,minHeight:`${Math.max(36,t.height)}px`,fontFamily:n.fontFamily,fontSize:n.fontSize,fontWeight:n.fontWeight,fontStyle:n.fontStyle,lineHeight:n.lineHeight,letterSpacing:n.letterSpacing,textAlign:n.textAlign,color:n.color})},w=()=>{let e=p;e&&(e.editor.remove(),p=null)},T=()=>{let e=p;e&&(b(e.node,e.initialText),w())},E=()=>{let t=p;if(!t)return;let n=`${t.leading}${t.editor.value}${t.trailing}`;if(n===t.initialText){b(t.node,t.initialText),w();return}f={id:t.editId,createdAt:Date.now(),pageUrl:Hf(r),selector:t.selector,nodeIndex:t.nodeIndex,beforeText:t.beforeText,desiredText:n,fingerprintTag:t.fingerprint.tag,fingerprintId:t.fingerprint.id,fingerprintTestId:t.fingerprint.testId,fingerprintRole:t.fingerprint.role,fingerprintAriaLabel:t.fingerprint.ariaLabel,fingerprintClasses:t.fingerprint.classes,fingerprintText:t.fingerprint.text},l.set(t.editId,{element:t.element,node:t.node}),n!==t.beforeText&&u.set(t.editId,{element:t.element,node:t.node,beforeText:t.beforeText,desiredText:n}),b(t.node,n),w(),e.command.execute(zf,void 0,{source:`text-inspector`}).catch(()=>{u.delete(t.editId),t.node.isConnected&&t.node.nodeValue===n&&b(t.node,t.beforeText)})},D=(e,t)=>{for(let r of n.elementsFromPoint(e,t)){if(!(r instanceof a.HTMLElement)||!_(r)||Vf.has(r.tagName)||r.matches(`[contenteditable='true'], [contenteditable=''], [contenteditable='plaintext-only']`))continue;let e=Array.from(r.childNodes).map((e,t)=>({node:e,index:t})).filter(({node:e})=>e.nodeType===a.Node.TEXT_NODE&&!!e.nodeValue?.trim());if(e.length===1)return{element:r,node:e[0].node,nodeIndex:e[0].index}}return null},O=(e,t,n,i)=>{let a=Hf(r);return c().edits.find(r=>{if(r.pageUrl!==a||r.nodeIndex!==i)return!1;let o=y(r);return o?.element===e&&o.node===t||r.selector===n})??null},k=e=>{if(!(e instanceof a.MouseEvent)||g()!==`text-inspector`)return;let t=D(e.clientX,e.clientY);if(!t)return;e.preventDefault(),e.stopImmediatePropagation(),T();let i=$c(t.element),o=el(t.element),c=O(t.element,t.node,i,t.nodeIndex),l=t.node.nodeValue??``,d=c?u.get(c.id)?.node===t.node:!1,f=l,m=l,h=c?.id??Uf(r,`text-edit`);c&&d?(f=c.beforeText,m=c.desiredText,b(t.node,m)):c&&l===c.beforeText?(f=c.beforeText,m=c.desiredText,b(t.node,m),u.set(c.id,{...t,beforeText:f,desiredText:m})):c&&l===c.desiredText&&(f=l,m=l);let _=Kf(m),v=n.createElement(`textarea`);v.dataset.mesurerTextEditor=`true`,v.dataset.mesurerInspectorUi=`true`,v.setAttribute(`aria-label`,`Edit text`),v.value=_.value,Object.assign(v.style,{position:`fixed`,boxSizing:`border-box`,zIndex:`2147483647`,pointerEvents:`auto`,resize:`none`,overflow:`hidden`,border:`1px solid #0d99ff`,borderRadius:`6px`,outline:`none`,padding:`4px 6px`,background:`white`,boxShadow:`0 6px 20px rgba(0,0,0,.16)`}),s.element.append(v),p={element:t.element,node:t.node,editor:v,editId:h,beforeText:f,initialText:m,leading:_.leading,trailing:_.trailing,nodeIndex:t.nodeIndex,selector:i,fingerprint:o},C(),v.addEventListener(`input`,()=>{let e=p;!e||e.editor!==v||(b(e.node,`${e.leading}${v.value}${e.trailing}`),v.style.height=`auto`,v.style.height=`${Math.max(36,v.scrollHeight)}px`)}),v.focus({preventScroll:!0}),v.setSelectionRange(0,v.value.length)},A=()=>{if(h=0,!m){if(g()!==`text-inspector`){p&&T(),x();return}S(),C()}},j=()=>{m||h||(h=r.requestAnimationFrame(A))},M=e=>{let t=p;!t||e.composedPath().includes(t.editor)||E()},N=t=>{if(p){if(t.key===`Escape`){t.preventDefault(),t.stopImmediatePropagation(),T();return}t.key===`Enter`&&!t.shiftKey&&(t.preventDefault(),t.stopImmediatePropagation(),E());return}t.key===`Escape`&&g()===`text-inspector`&&e.command.execute(Bf,void 0,{source:`text-inspector-clear`})},P=new a.MutationObserver(e=>{for(let t of e){if(t.type!==`characterData`||!(t.target instanceof a.Text))continue;let e=t.target,n=d.get(e)??0;if(n>0){n===1?d.delete(e):d.set(e,n-1);continue}for(let[t,n]of u)n.node===e&&u.delete(t)}j()});P.observe(i,{childList:!0,subtree:!0,characterData:!0,attributes:!0,attributeFilter:[`id`,`class`,`data-testid`,`role`,`aria-label`]}),e.command.register(zf,()=>{let t=f;f=null,t&&e.state.update(Lf,e=>{let n=e.edits.filter(e=>e.id!==t.id);return{edits:t.desiredText===t.beforeText?n:[...n,t].slice(-100)}})}),e.command.register(Bf,()=>{f=null,e.state.update(Lf,()=>({edits:[]}))}),e.service.provide(Rf,{intents:()=>c().edits.map(Gf),clear:()=>e.command.execute(Bf)});let F=o.subscribe(j);e.state.subscribe(j),i.addEventListener(`dblclick`,k,!0),r.addEventListener(`pointerdown`,M,!0),r.addEventListener(`keydown`,N,!0),r.addEventListener(`resize`,j),r.addEventListener(`scroll`,j,!0),j(),e.lifecycle.onDispose(()=>{m=!0,h&&r.cancelAnimationFrame(h),h=0,T(),x(),P.disconnect(),F(),i.removeEventListener(`dblclick`,k,!0),r.removeEventListener(`pointerdown`,M,!0),r.removeEventListener(`keydown`,N,!0),r.removeEventListener(`resize`,j),r.removeEventListener(`scroll`,j,!0),l.clear(),o.dispose(),s.dispose()})}var Jf=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}))}}),Yf=(e,t)=>`${t}-${e.crypto?.randomUUID?.()??`${Date.now()}-${Math.random().toString(36).slice(2)}`}`,Xf=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 Zf(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(!tl(e.fingerprint))return null;let t=[];try{t=x(e.selector).filter(t=>nl(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=>nl(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=qc(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:$c(e),fingerprint:el(e),lastRect:qc(e)}),N=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=>rl(e,r));return t.setSelectedMeasurements(a,a.at(-1)??null),t.setTransient({selectionOriginRect:null}),i},P=(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(),Jf(e)),F=(e,t)=>{let n=e.trim();if(!n)throw Error(`Annotation note cannot be empty.`);let i=$i(t);return P({id:Yf(r,`annotation`),note:n,createdAt:Date.now(),anchor:{kind:`region`,rect:i},baseline:j({targets:[],region:i})})},I=e=>{let n=e.trim();if(!n)throw Error(`Annotation note cannot be empty.`);let i=Xf(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 F(n,a)}let o=i.map(M);return P({id:Yf(r,`annotation`),note:n,createdAt:Date.now(),anchor:{kind:`elements`,targets:o,region:a},baseline:j({targets:o,elements:i})},i)},ee=()=>{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(Jf)}},currentSelection(){return{elements:Xf(t).filter(b),region:t.current.selectionOriginRect?$i(t.current.selectionOriginRect):null}},select:N,hoveredElement(){return t.current.hoverElement?.isConnected&&b(t.current.hoverElement)?t.current.hoverElement:null},annotations(){return T(),u.map(Jf)},annotation(e){T();let t=u.find(t=>t.id===e);if(!t)return null;let n=Jf(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:I,addRegionAnnotation:F,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(){ee()},dispose(){h||(h=!0,O(),k(),ee(),p.clear(),m.clear(),u.length=0,d.clear())}}}var Qf=[`select`,`xray`,`color-picker`,`rulers`,`text-inspector`,`guides`,`settings`],$f=`mesurer-plugin-settings`,ep=1,tp=[{id:Ju,label:`Arrange`,order:35,create:Ed,settingsIds:[`arrange`]},{id:_f,label:`Screenshot`,order:40,create:Pf,settingsIds:[`screenshot`],hiddenSettingsControlIds:[`tool`]}],np=e=>(e.startsWith(`mesurer.`)?e.slice(8):e).split(/[.-]/g).filter(Boolean).map(e=>e[0]?.toUpperCase()+e.slice(1)).join(` `)||e,rp=e=>e===`select`||e===`xray`||e===`color-picker`||e===`rulers`||e===`text-inspector`||e===`guides`||e===`distance`||e===`settings`,ip=e=>`builtin.${e}`,ap=(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 op(e){let t=V(()=>e.pluginHost),n=t??ya(),r=!t,i=V(()=>e.version??`0.1.0`),a=t=>e.version&&t.id.startsWith(`mesurer.`)?{...t,version:i}:t,o=new Set(V(()=>e.excludePlugins??[])),s=V(()=>Ld([],e.excludePlugins??[]).map(a)),c=V(()=>[...e.plugins??[]].map(a)),l=new Set(c.map(e=>e.id)),u=new Map;for(let t of[...tp,...V(()=>e.availablePlugins??[])])u.set(t.id,t);for(let[e,t]of c.entries()){let n=u.get(t.id);u.set(t.id,{...n,id:t.id,label:n?.label??np(t.id),order:n?.order??1e3+e,create:()=>t})}let d=new Map([...u.values()].map(e=>[e.id,new Set(e.settingsIds??[])])),f=new Map,p=new Map,m=new Set,h=new Map,g=null,_=null,v=()=>void 0,y=async()=>void 0,[b,x]=G(0),[S,C]=G(!1),w=e=>(b(),n.tools().find(t=>(t.builtin===e||t.id===e)&&t.command!==ip(e))),T=e=>(b(),S()?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)),E=()=>(b(),n.state.get(`mesurer.arrange.active`)??!1),D=e=>E()&&(e===`color-picker`||e===`text-inspector`||e===`guides`),O=W(()=>(b(),n.tools().filter(e=>e.hidden?.()?!1:!e.builtin||!rp(e.builtin)||e.command!==ip(e.builtin)))),k=W(()=>{b();let e=n.settings();return[...u.values()].sort((e,t)=>(e.order??0)-(t.order??0)).map(t=>{let r=d.get(t.id)??new Set,i=new Set(t.hiddenSettingsControlIds??[]),a=e.filter(e=>r.has(e.id)).map(e=>({...e,controls:(e.controls??[]).filter(e=>!i.has(e.id))})).filter(e=>(e.controls?.length??0)>0);return{id:t.id,label:t.label,enabled:n.has(t.id),busy:m.has(t.id),sections:a}})}),A=()=>{b();let e=[];for(let t of Qf)(!T(t)||w(t))&&e.push(`[data-mesurer-builtin='${t}']{display:none!important}`);return(!T(`guides`)||w(`guides`))&&e.push(`[data-mesurer-builtin='guides-menu']{display:none!important}`),T(`guides`)||e.push(`[data-mesurer-guide='true']{display:none!important}`),T(`distance`)||e.push(`[data-mesurer-distance='true']{display:none!important}`),T(`rulers`)||e.push(`[data-mesurer-rulers='true']{display:none!important}`),T(`color-picker`)||e.push(`.mesurer-color-picker{display:none!important}`),e.join(`
1300
1300
  `)},j=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}},M=(e,t=`toolbar`)=>{j(e,t).catch(()=>void 0)},N=(t,n)=>{n.disabled?.()||Promise.resolve(n.run()).catch(r=>{e.onPluginError?.(r,`${t.id}.${n.id}`)})},P=async(t,n,r)=>{try{await n.set(r)}catch(r){e.onPluginError?.(r,`${t}.${n.id}`)}},F=(e,t,n)=>{P(e,t,n)},I=async e=>{for(let t of n.settings()){if(e&&!e.has(t.id))continue;let n=h.get(t.id);if(n)for(let e of t.controls??[]){let r=n.get(e.id);r!==void 0&&await P(t.id,e,r)}}};return Kt(()=>{let t=!0,o=0,c=!1,b=Promise.resolve(),E=n,k=e,N=k.portalTarget??document.body,P=N.ownerDocument??document,F=P.defaultView??window,ee=k.pageTarget??P.body,te=N,L=()=>{if(!g)throw Error(`Mesurer renderer model is unavailable for runtime bridge setup.`);return g},R=()=>{if(!_)throw Error(`Mesurer built-in controller is unavailable for runtime bridge setup.`);return _},ne=()=>{let e=P.createElement(`div`);e.dataset.mesurerInspectorUi=`true`,(te.querySelector(`[data-mesurer-root='true']`)??N).append(e);let t=!1;return{element:e,dispose(){t||(t=!0,e.remove())}}},re=()=>Zf({model:L(),ownerDocument:P,ownerWindow:F,uiRoot:N,pageTarget:ee}),ie=P.createElement(`style`);ie.dataset.mesurerPluginVisibility=`true`,ie.dataset.mesurerInspectorUi=`true`,ie.textContent=A(),N.append(ie);let z=k.persistKey?`${k.persistKey}:plugins`:$f,ae=`${z}:availability`,oe=new Map;try{let e=F.localStorage.getItem(ae);if(e){let t=JSON.parse(e);if(t?.version===ep){for(let[e,n]of Object.entries(t.enabled??{}))oe.set(e,n);for(let[e,n]of Object.entries(t.state??{}))p.set(e,n)}}}catch(e){k.onPluginError?.(e,`plugin-availability-persistence`)}let se=()=>{let e=Object.fromEntries([...u.keys()].map(e=>[e,E.has(e)])),t=Object.fromEntries(p);try{F.localStorage.setItem(ae,JSON.stringify({version:ep,enabled:e,state:t}))}catch(e){k.onPluginError?.(e,`plugin-availability-persistence`)}},ce=()=>{o=0;try{F.localStorage.setItem(z,JSON.stringify(E.state.serialize(`persist`)))}catch(e){k.onPluginError?.(e,`plugin-persistence`)}},le=()=>{F.clearTimeout(o),o=F.setTimeout(ce,50)},ue=E.subscribe(e=>{if(x(e=>e+1),ie.textContent=A(),(e.reason===`state`||e.reason===`history`||e.reason===`remove`||e.reason===`replace`)&&le(),S()&&!c&&(e.reason===`load`||e.reason===`remove`||e.reason===`replace`)&&se(),e.reason===`remove`&&e.pluginId?.startsWith(`mesurer.`)){let t=e.pluginId.slice(8);rp(t)&&R().deactivate(t)}});k.onPluginHost?.(E);let de=async e=>{if(t)try{await E.load(e)}catch(t){k.onPluginError?.(t,e.id)}},fe=e=>{for(let t of E.settings())!e.has(t.id)||h.has(t.id)||h.set(t.id,new Map((t.controls??[]).map(e=>[e.id,e.value()])))},pe=async e=>{if(!t||E.has(e.id))return E.has(e.id);let n=new Set(E.settings().map(e=>e.id)),r=new Set(E.describe().state.map(e=>e.id));try{let t=a(await e.create());if(t.id!==e.id)throw Error(`Available plugin ${e.id} created mismatched plugin ${t.id}.`);await E.load(t);let i=new Set(d.get(e.id)??e.settingsIds??[]);for(let e of E.settings())n.has(e.id)||i.add(e.id);d.set(e.id,i);let o=new Set(f.get(e.id)??[]);for(let e of E.describe().state)r.has(e.id)||o.add(e.id);f.set(e.id,o),fe(i);let s=p.get(e.id);return s&&(E.state.restore(s,`persist`),p.delete(e.id)),!0}catch(t){return k.onPluginError?.(t,e.id),!1}},me=e=>{let t=f.get(e);if(!t?.size)return;let n=E.state.serialize(`persist`),r={};for(let e of t)Object.prototype.hasOwnProperty.call(n,e)&&(r[e]=n[e]);Object.keys(r).length&&p.set(e,r)},he=async(e,t,n=!0)=>{let r=u.get(e);if(!(!r||m.has(e)||E.has(e)===t)){m.add(e),x(e=>e+1);try{t?await pe(r):(n?me(e):p.delete(e),E.remove(e)),c||se()}finally{m.delete(e),x(e=>e+1)}}},ge=e=>{let t=b.then(e,e);return b=t.catch(()=>void 0),t};v=(e,t)=>{ge(async()=>{await he(e,t)})},y=()=>ge(async()=>{c=!0;try{await I();let e=[...u.values()].sort((e,t)=>(e.order??0)-(t.order??0));for(let t of e)!E.has(t.id)&&!await pe(t)||(await I(d.get(t.id)),l.has(t.id)?p.delete(t.id):(me(t.id),E.remove(t.id)))}finally{c=!1}o&&F.clearTimeout(o),ce(),se()});let _e=async e=>{if(D(e))return;let t=w(e);if(t){await j(t,{source:`builtin-command`,builtin:e});return}T(e)&&await R().run(e)};(async()=>{for(let e of s)await de(e);if(t&&(await de({id:`mesurer.runtime-bridge`,version:i,provides:[`runtime:solid`],setup(e){let t={ownerDocument:P,ownerWindow:F,portalTarget:N,pageTarget:ee,currentToolMode:()=>L().current.toolMode,createWorkspaceRuntime:re,createInspectorMount:ne};e.service.provide(`runtime:solid`,t),If(e,t),qf(e,t);for(let t of Qf)e.command.register(ip(t),()=>_e(t))}}),t)){for(let e of[...u.values()].sort((e,t)=>(e.order??0)-(t.order??0))){let n=oe.has(e.id)?oe.get(e.id)===!0:l.has(e.id);if(E.has(e.id)){n||E.remove(e.id);continue}if(n&&await pe(e),!t)return}h.clear();for(let e of E.settings())h.set(e.id,new Map((e.controls??[]).map(e=>[e.id,e.value()])));try{let e=F.localStorage.getItem(z);if(e){let t=JSON.parse(e);E.state.restore(t,`persist`)}}catch(e){k.onPluginError?.(e,`plugin-persistence`)}t&&(C(!0),ie.textContent=A(),k.onPluginsReady?.(E))}})();let ve=e=>{let t=e.key.toLowerCase(),n=e.metaKey||e.ctrlKey;return n&&!e.shiftKey&&!e.altKey&&t===`,`?`settings`:n||e.shiftKey||e.altKey?null:t===`s`?`select`:t===`a`?`text-inspector`:t===`g`?`guides`:t===`p`?`color-picker`:t===`x`?`xray`:t===`r`?`rulers`:null},ye=e=>{if(mo(e,F))return;let t=ve(e);if(t&&D(t)){e.preventDefault(),e.stopImmediatePropagation();return}let n=t?w(t):void 0;if(t&&n){e.preventDefault(),e.stopImmediatePropagation(),M(n,{source:`builtin-shortcut`,builtin:t});return}let r=e.key.toLowerCase();if((r===`h`||r===`v`)&&D(`guides`)){e.preventDefault(),e.stopImmediatePropagation();return}if((r===`h`||r===`v`)&&w(`guides`)){e.preventDefault(),e.stopImmediatePropagation();return}let i=O().find(t=>t.shortcut&&!t.disabled?.()&&ap(e,t.shortcut));if(i){e.preventDefault(),e.stopImmediatePropagation(),M(i);return}let a=e.metaKey||e.ctrlKey;if(a&&r===`z`&&(e.shiftKey?E.redo():E.undo())){e.preventDefault(),e.stopImmediatePropagation();return}(a&&r===`,`&&!T(`settings`)||r===`s`&&!T(`select`)||r===`a`&&!T(`text-inspector`)||r===`g`&&!T(`guides`)||(r===`h`||r===`v`)&&!T(`guides`)||r===`p`&&!T(`color-picker`)||r===`x`&&!T(`xray`)||r===`r`&&!T(`rulers`)||e.key===`Alt`&&!T(`distance`))&&(e.preventDefault(),e.stopImmediatePropagation())};return F.addEventListener(`keydown`,ye,!0),()=>{t=!1,o&&(F.clearTimeout(o),ce()),F.removeEventListener(`keydown`,ye,!0),ue(),ie.remove(),g=null,_=null,v=()=>void 0,y=async()=>void 0,r&&E.dispose()}}),Y(sc,{runtime:{plugins:k,version:()=>i,setEnabled:(e,t)=>v(e,t),update:F,reset:async()=>{await y()}},get children(){return Y(Wl,{value:e=>{g=e},get children(){return Y(qu,Xi(e,{get pluginTools(){return O()},onPluginTool:e=>M(e),onPluginToolMenuItem:N,isBuiltinActionDisabled:D,onBuiltinController:e=>{_=e}}))}})}})}var sp=(e,t,n)=>Math.min(Math.max(e,t),Math.max(t,n)),cp=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}},lp=(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:sp(e.left+e.width-t,8,a),top:sp(e.top,8,o)}};function up(e){let[t,n]=G(0),[r,i]=G(null),[a,o]=G({}),[s,c]=G(null),[l,u]=G(!1),[d,f]=G(``),[p,m]=G(null),[h,g]=G(!1),[_,v]=G(null),[y,b]=G(null),x=null,S=null,C,w=()=>C?.ownerDocument.defaultView??window;zt(e.runtime.subscribe(()=>n(e=>e+1)));let T=W(()=>(t(),e.runtime.currentSelection())),E=W(()=>(t(),e.runtime.annotations())),D=W(()=>{let e=r();return e?E().find(t=>t.id===e)??null:null}),O=()=>T().elements.length>0||T().region!==null,k=W(()=>{let e=T();return cp(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]},N=()=>{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:sp((o??s).left,4,r.innerWidth-24-4),top:sp((o??s).top,4,r.innerHeight-24-4)}},P=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:sp(i,8,r.innerWidth-24-8),f=l?o:u?c:lp(n,272,176,r).left,p=a()[t];return{marker:{left:d,top:sp(n.top-12,4,r.innerHeight-24-4)},panel:{left:p?sp(p.left,8,r.innerWidth-272-8):f,top:sp(p?p.top:n.top,8,r.innerHeight-176-8)}}},F=e=>P(e)?.marker??null,I=()=>{let e=k(),t=w(),n=s();return n?{left:sp(n.left,8,t.innerWidth-272-8),top:sp(n.top,8,t.innerHeight-154-8)}:e?lp(e,272,154,t):{left:8,top:8}},ee=e=>P(e)?.panel??{left:8,top:8},te=e=>{u(!1),i(e),v(null)},L=(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:sp(n.originLeft+e.clientX-n.startX,8,r),top:sp(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)}};zt(()=>{S?.(),S=null,x=null});let R=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)}}},ne=()=>{O()&&(m(null),v(null),i(null),c(null),u(!0))},re=()=>{u(!1),m(null),c(null)},ie=()=>{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 Kt(()=>(e.onController?.({openNoteComposer:ne}),()=>e.onController?.(null))),[(()=>{var e=X(`span`,{"aria-hidden":`true`,style:{display:`none`}});return Qi(()=>e=>{C=e},e),e})(),Y(K,{get when(){return J(()=>T().elements.length>0&&!l())()?!D():T().elements.length>0&&!l()},get children(){return Y(K,{get when(){return N()},children:e=>(()=>{var t=X(`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(),ne()}});return Q(t,Y(xc,{size:14})),q(()=>({left:`${e().left}px`,top:`${e().top}px`}),(e,n)=>{$(t,`style`,e,n)}),t})()})}}),Y(K,{get when(){return J(()=>!!l())()?k():l()},get children(){var e=X(`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=X(`div`,{class:`msr:flex msr:h-7 msr:items-center msr:gap-1.5 msr:px-1`,"aria-label":`Drag note composer`,onPointerDown:e=>L(e,`composer`)}),n=X(`div`,{class:`msr:min-w-0 msr:flex-1`}),r=X(`div`,{class:`msr:text-[11px] msr:font-medium msr:text-ink-900`}),i=X(`div`,{class:`msr:text-[9px] msr:text-ink-500`}),a=X(`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:re}),o=X(`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(),ie()),e.key===`Escape`&&(e.preventDefault(),re())},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=X(`div`,{class:`msr:mt-1.5 msr:flex msr:h-7 msr:items-center msr:justify-between msr:gap-2 msr:px-1`}),c=X(`span`,{class:`msr:text-[9px] msr:text-ink-400`}),l=X(`div`,{class:`msr:flex msr:gap-1`}),u=X(`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:re}),h=X(`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:ie});return Z(e,t),Z(e,o),Z(e,s),Z(t,n),Z(t,a),Q(t,Y(xc,{size:14,class:`msr:text-ink-700`}),n),Z(n,r),Z(n,i),Z(r,Ji(`Add note`)),Q(i,A),Q(a,Y(Cc,{size:14})),Q(e,Y(K,{get when(){return p()},children:e=>(()=>{var t=X(`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,Ji(`⌘/Ctrl ↵`)),Z(l,u),Z(l,h),Z(u,Ji(`Cancel`)),Z(h,Ji(`Add note`)),q(()=>({e:{left:`${I().left}px`,top:`${I().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}}),Y(Gr,{get each(){return E()},children:(e,t)=>{let n=()=>F(e.id);return Y(K,{get when(){return n()},children:n=>(()=>{var i=X(`button`,{type:`button`,"data-mesurer-layer":`evidence`,"data-mesurer-annotation-marker":`true`,onPointerDown:t=>{t.preventDefault(),t.stopPropagation(),te(e.id)},onPointerUp:e=>e.stopPropagation(),onClick:t=>{t.preventDefault(),t.stopPropagation(),te(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,Y(xc,{size:14})),q(()=>({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})()})}}),Y(K,{get when(){return D()},children:t=>{let n=()=>ee(t().id);var r=X(`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=X(`div`,{class:`msr:flex msr:h-7 msr:items-center msr:gap-1.5 msr:px-1`,"aria-label":`Drag annotation panel`,onPointerDown:e=>L(e,t().id)}),s=X(`div`,{class:`msr:min-w-0 msr:flex-1`}),c=X(`div`,{class:`msr:text-[11px] msr:font-medium msr:text-ink-700`}),l=Ji(`Note `),u=X(`div`,{class:`msr:text-[9px] msr:text-ink-500`}),d=X(`div`,{class:`msr:flex msr:items-center msr:gap-0.5`}),f=X(`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 R(()=>e.onCopy({annotation:t().id}),`Copied`)}),p=X(`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=X(`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=X(`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,Y(xc,{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,Y(bc,{size:14})),Q(p,Y(Sc,{size:14})),Q(m,Y(Cc,{size:14})),Q(g,()=>t().note),Q(r,Y(K,{get when(){return _()},children:e=>(()=>{var t=X(`div`,{class:`msr:mt-1.5 msr:px-1 msr:text-[10px] msr:text-ink-500`,role:`status`});return Q(t,e),t})()}),null),q(()=>({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 dp=e=>Number.parseFloat(e)||0,fp=0,pp=(e,t)=>{let n=t.CSS;return n?.escape?n.escape(e):e.replace(/[^a-zA-Z0-9_-]/g,e=>`\\${e}`)},mp=e=>e.nodeType===9,hp=e=>e.nodeType===11;function gp(e){let t=e.getRootNode();return hp(t)?t:e.ownerDocument}var _p=(e,t)=>{if(mp(e)||hp(e))return e;let n=gp(e);return hp(n)?n:t};function vp(e,t,n=mp(t)?t:t.ownerDocument??document){let r=_p(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 yp(e,t){if(mp(t))return!0;let n=e;for(;n;){if(t===n||t.contains(n))return!0;let e=n.getRootNode();if(!hp(e))return!1;n=e.host}return!1}function bp(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 xp(e){let t=e.ownerDocument.defaultView??window;if(e.id)return`#${pp(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 Sp(e,t,n=`dom-inspection-${++fp}`){let r=e.getBoundingClientRect(),i=t.getComputedStyle(e),a={top:dp(i.paddingTop),right:dp(i.paddingRight),bottom:dp(i.paddingBottom),left:dp(i.paddingLeft)},o={top:dp(i.marginTop),right:dp(i.marginRight),bottom:dp(i.marginBottom),left:dp(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 Cp(e){let t=e.ownerDocument.defaultView??window,n=t.getComputedStyle(e),r=e instanceof t.HTMLElement?e:null,i=e.getBoundingClientRect(),a=r?Sp(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:xp(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 wp=e=>Cp(e);function Tp(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||yp(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?wp(n):null},inspectAll(e,n=50){return[...t.querySelectorAll(e)].slice(0,Math.max(0,n)).map(wp)},at(n,r){let a=t.querySelector?.(`[data-mesurer-island]`)??null;return bp(a?.shadowRoot?.querySelector(`[data-mesurer-root='true']`)??a,()=>{let a=vp({x:n,y:r},t,e.ownerDocument);return a&&i(a)?wp(a):null})},distance(e,t){let n=r(e),i=r(t);if(!n||!i)return null;let a=wp(n),o=wp(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(wp)),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 Ep=(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,Dp=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}},Op=(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),kp=e=>[...e.measurements,...e.activeMeasurement&&!e.measurements.some(t=>t.id===e.activeMeasurement?.id)?[e.activeMeasurement]:[]];function Ap(e){let{workspace:t,scope:n,guideTolerance:r}=e;if(n.kind===`workspace`)return{guides:t.guides.map(e=>({...e})),measurements:kp(t),distances:[...t.distances]};let i=new Set(n.elements),a=e=>e!=null&&i.has(e),o=e=>n.regions.some(t=>Ep(e,t));return{guides:t.guides.filter(e=>Op(e,n.regions,r)).map(e=>({...e})),measurements:kp(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 jp={opacity:1,width:1,pattern:`solid`,dashLength:6,gap:4},Mp={opacity:1,edgeReveal:!1};({...jp}),{...Mp};var Np=10,Pp=e=>({left:e.left,top:e.top,width:e.width,height:e.height}),Fp=e=>{let t=new Set,n=[];for(let r of e)!r?.isConnected||t.has(r)||(t.add(r),n.push(r));return n},Ip=e=>e.crypto?.randomUUID?.()??`${Date.now()}-${Math.random().toString(36).slice(2)}`;function Lp(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=Fp(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=Fp(e.elements),!o.length&&!e.region)throw Error(`Mesurer has no current selection.`);s=e.region?[e.region]:o.map(e=>Pp(e.getBoundingClientRect())),c={kind:`selection`}}else o=Fp([...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=>Pp(e.getBoundingClientRect())),d=Ap({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??Np}),f=d.measurements,p=d.distances,m=d.guides,h=Fp([...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:Cp(e)}}),x=f.map(e=>{let t={id:e.id,rect:Pp(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:Pp(e.rectA),rectB:Pp(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:Ip(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(Pp),visualState:{rulersVisible:a.rulersVisible,xrayVisible:a.xrayVisible},targets:b,visualContext:{guides:m,measurements:x,distances:S}}}var Rp=e=>`${Math.round(e*100)/100}px`,zp=e=>`x=${Rp(e.left)} y=${Rp(e.top)} w=${Rp(e.width)} h=${Rp(e.height)}`;function Bp(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}: ${zp(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: ${zp(e.rect)}`,` margin: ${Rp(e.margin.top)} ${Rp(e.margin.right)} ${Rp(e.margin.bottom)} ${Rp(e.margin.left)}`,` padding: ${Rp(e.padding.top)} ${Rp(e.padding.right)} ${Rp(e.padding.bottom)} ${Rp(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`}=${Rp(n.position)}`)}if(e.visualContext.measurements.length){t.push(``,`Relevant measurements`);for(let n of e.visualContext.measurements)t.push(`- ${n.targetRef?`${n.targetRef}: `:``}${zp(n.rect)}; delta=${Rp(n.deltaX)} × ${Rp(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=${Rp(n.horizontal.value)}`:null,n.vertical?`vertical=${Rp(n.vertical.value)}`:null].filter(Boolean).join(`; `);t.push(`- ${e?`${e}: `:``}${r||`overlapping`}`)}}return t.join(`
1301
- `).trimEnd()}function Vp(e){let t=Dp([...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 Hp=(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`})},Up=(e,t,n,r)=>e.push({kind:`missing`,evidence:t,id:n,label:r});function Wp(e){let t=e.runtime.annotation(e.annotationId);if(!t)throw Error(`Mesurer annotation not found: ${e.annotationId}`);let n=Lp({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=kp({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){Up(a,`target`,e.id,e.selector);continue}Hp(a,`target-rect`,`${t.inspection.selector} left`,e.rect.left,t.inspection.rect.left),Hp(a,`target-rect`,`${t.inspection.selector} top`,e.rect.top,t.inspection.rect.top),Hp(a,`target-rect`,`${t.inspection.selector} width`,e.rect.width,t.inspection.rect.width),Hp(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){Up(a,`guide`,e.id,`${e.orientation} guide ${e.id}`);continue}Hp(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){Up(a,`measurement`,e.id,e.id);continue}Hp(a,`measurement`,`${e.id} width`,e.rect.width,t.rect.width),Hp(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){Up(a,`distance`,e.id,e.id);continue}e.horizontal&&t.horizontal?Hp(a,`distance`,`${e.id} horizontal`,e.horizontal.value,t.horizontal.value):e.horizontal&&!t.horizontal&&Up(a,`distance`,e.id,`${e.id} horizontal`),e.vertical&&t.vertical?Hp(a,`distance`,`${e.id} vertical`,e.vertical.value,t.vertical.value):e.vertical&&!t.vertical&&Up(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 Gp(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 Kp=`0.1.3-beta.1`,qp=`mesurer.context`,Jp=`context:v1`,Yp=`mesurer.context.settings`,Xp=`context.ui`,Zp={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`]},Qp={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`]},$p={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`]},em=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()))},tm=(e,t,n)=>{let r=async r=>Lp({runtime:e,ownerDocument:t,ownerWindow:n,request:r}),i=async e=>Bp(await r(e));return{context:r,contextText:i,copyContext:async e=>Gp(t,n,await i(e)),select:async i=>(e.select(Array.isArray(i)?i:[i]),await em(t,n),r({scope:`selection`})),annotations:async()=>e.annotations(),review:async r=>(await em(t,n),r?Wp({runtime:e,ownerDocument:t,ownerWindow:n,annotationId:r}):e.annotations().map(r=>Wp({runtime:e,ownerDocument:t,ownerWindow:n,annotationId:r.id}))),capturePlan:async e=>Vp(await r(e)),prepareCapture:async()=>{e.prepareCapture(),await em(t,n)},finishCapture:async()=>{e.finishCapture(),await em(t,n)}}},nm=e=>{let t=e.currentSelection();return t.elements.length>0||t.region!==null};function rm(e={}){return{id:qp,version:Kp,requires:[`runtime:solid`],provides:[Jp],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=tm(r,n.ownerDocument,n.ownerWindow);t.service.provide(Jp,i),t.state.register({id:Yp,initial:{ui:e.ui??!0},persist:!0}),t.state.register({id:Xp,initial:{hasSelection:nm(r)}});let a=()=>t.state.get(`mesurer.context.settings`)?.ui??!0,o=()=>t.state.get(Xp)?.hasSelection===!0,s=e=>{t.state.update(Yp,t=>({...t,ui:e}))},c=r.subscribe(()=>{let e=nm(r);e!==(t.state.get(Xp)?.hasSelection??!1)&&t.state.update(Xp,()=>({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=Si(()=>Ur(up,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:Zp,hidden:()=>!a()}),t.tool.register({id:`context.copy-selection`,label:`Copy selection`,shortcut:`Shift+C`,command:`context.copy-selection`,order:71,icon:Qp,hidden:()=>!a(),disabled:()=>!o()}),t.tool.register({id:`context.add-note`,label:`Add note`,shortcut:`N`,command:`context.add-note`,order:72,icon:$p,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 im={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 am(e){for(let[t,n]of Object.entries(im))e.style.setProperty(t,n,`important`)}function om(e){return`popover`in e&&`showPopover`in e&&typeof e.showPopover==`function`&&`hidePopover`in e&&typeof e.hidePopover==`function`}var sm=e=>`newState`in e,cm=e=>e.localName===`dialog`;function lm(e){if(!cm(e)||!e.open)return!1;try{return e.matches(`:modal`)}catch{return!1}}function um(e,t,n=!0){am(e);let r=e.ownerDocument,i=r.defaultView??window,a=t,o=!1,s=`fixed`,c=!1,l=0,u=[];if(n&&om(e)&&(e.popover=`manual`),t.append(e),n&&om(e))try{e.showPopover(),c=e.matches(`:popover-open`),c&&(s=`top-layer`)}catch{e.removeAttribute(`popover`)}let d=()=>{if(!(!c||!om(e)))try{e.matches(`:popover-open`)||e.showPopover()}catch{}},f=t=>{if(e.parentNode===t)return;let n=c&&om(e)&&e.matches(`:popover-open`);if(n&&om(e))try{e.hidePopover()}catch{}t.append(e),am(e),n&&d()},p=()=>{u=u.filter(e=>e.isConnected&&lm(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||!om(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=sm(t)?t.newState:void 0,r=t.target;if(r instanceof i.Element){if(cm(r)){n===`open`&&lm(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&&cm(t)&&h(t)},b=()=>{r.fullscreenElement&&_()},x=e=>{lm(e)&&m(e);for(let t of e.querySelectorAll(`dialog`))lm(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&&cm(e)&&(lm(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&&om(e)&&e.matches(`:popover-open`))try{e.hidePopover()}catch{}u=[]}}}}var dm=`arrange`,fm=()=>[{id:qp,label:`Context`,order:30,create:()=>rm(),settingsIds:[`context`],hiddenSettingsControlIds:[`ui`]}];function pm(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,availablePlugins:c=[],...l}=e,u=t.ownerDocument??document,d=u.defaultView??window,f=u.createElement(`div`);f.dataset.mesurerIsland=`true`;let p=um(f,t,i),m=f,h=f,g=f;if(n){let e=f.attachShadow({mode:r});h=u.createElement(`div`),h.dataset.mesurerIslandMount=`true`,e.append(h),m=e,g=e}let _,v,y,b=!1,x=new Promise(e=>{v=e}),S=new Promise(e=>{y=e}),C=async()=>(await(_?Promise.resolve(_):x),S),w=a===!0?{}:a===!1?null:a,T=Tp({ownerDocument:u,root:w?.root??(t.nodeType===11?t:u),getPluginHost:()=>_,waitForPluginHost:C}),E=async()=>{await T.ready();let e=_?.service.get(Jp);if(!e)throw Error(`Mesurer context plugin is not loaded. Add contextPlugin() to the plugins array.`);return e},D=async()=>{await T.ready();let e=_?.service.get(dm);if(!e)throw Error(`Mesurer Arrange plugin is not loaded. Add arrangePlugin() from mesurer-solid/arrange.`);return e},O=async e=>(await E()).context(e),k=async e=>(await E()).contextText(e),A=async e=>(await E()).copyContext(e),j=async e=>(await E()).select(e),M=async()=>(await E()).annotations(),N=async e=>(await E()).review(e),P=async e=>(await E()).capturePlan(e),F=async()=>(await E()).prepareCapture(),I=async()=>(await E()).finishCapture(),ee=async()=>(await D()).intents(),te=async e=>{let t=(await D()).intent(e);if(!t)throw Error(`Arrange intent not found: ${e}`);return t},L=async(e,t)=>{(await D()).show(e,t)},R=async(e,t)=>(await D()).capturePlan(e,t),ne=async(e,t)=>(await D()).review(e,t),re=Object.assign(T,{capabilities:()=>{let e=!!_?.service.get(Jp);return{protocol:`mesurer.agent/v1`,contextSchema:`mesurer.context/v1`,capabilities:{context:e,select:e,annotations:e,review:e,capturePlan:e,arrange:!!_?.service.get(dm)}}},context:O,contextText:k,select:j,annotations:M,review:N,capturePlan:P,prepareCapture:F,finishCapture:I,arrangements:ee,arrange:te,showArrange:L,arrangeCapturePlan:R,reviewArrange:ne}),ie={...l,version:Kp,availablePlugins:[...fm(),...c]},z=Si(()=>Ur(op,xi(ie,{portalTarget:g,pageTarget:t,onPluginHost:e=>{_||v(e),_=e,o?.(e)},onPluginsReady:e=>{_=e,b||(b=!0,y(e)),s?.(e)}})),h),ae=re.ready(),oe=null;if(w){let e=w.globalName??`__MESURER__`,t=Object.getOwnPropertyDescriptor(d,e);Reflect.set(d,e,re),oe=()=>{Object.getOwnPropertyDescriptor(d,e)?.value===re&&(t?Object.defineProperty(d,e,t):Reflect.deleteProperty(d,e))}}let se=!1;return{element:f,root:m,hostLayer:p.mode,get pluginHost(){return _},ready:ae,agent:re,context:O,contextText:k,copyContext:A,select:j,annotations:M,review:N,capturePlan:P,prepareCapture:F,finishCapture:I,arrangements:ee,arrange:te,showArrange:L,arrangeCapturePlan:R,reviewArrange:ne,bringToFront:p.bringToFront,describe:()=>_?.describe(),dispose(){se||(se=!0,oe?.(),z(),p.dispose(),f.remove())}}}var mm=(e={})=>({...Pf(e),version:Kp}),{target:hm,globalName:gm=`__MESURER__`,context:_m=!0,screenshot:vm=!1,plugins:ym=[],reuseExisting:bm=!0,...xm}=globalThis.__MESURER_CONFIG__??{},Sm=globalThis.__MESURER_INSTANCE__,Cm=bm&&Sm?.element.isConnected?Sm:void 0;if(Cm)Cm.ready.catch(e=>{queueMicrotask(()=>{throw e})});else{let e=hm?document.querySelector(hm):document.body;if(!e)throw Error(`Mesurer injection target not found: ${hm}`);let t=[..._m===!1?[]:[rm(_m===!0?{}:_m)],...vm===!1?[]:[mm(vm===!0?{}:vm)],...ym];Sm?.dispose();let n=pm({...xm,plugins:t,target:e,agent:{globalName:gm,root:document}});globalThis.__MESURER_INSTANCE__=n,n.ready.catch(e=>{queueMicrotask(()=>{throw e})})}})();
1301
+ `).trimEnd()}function Vp(e){let t=Dp([...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 Hp=(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`})},Up=(e,t,n,r)=>e.push({kind:`missing`,evidence:t,id:n,label:r});function Wp(e){let t=e.runtime.annotation(e.annotationId);if(!t)throw Error(`Mesurer annotation not found: ${e.annotationId}`);let n=Lp({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=kp({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){Up(a,`target`,e.id,e.selector);continue}Hp(a,`target-rect`,`${t.inspection.selector} left`,e.rect.left,t.inspection.rect.left),Hp(a,`target-rect`,`${t.inspection.selector} top`,e.rect.top,t.inspection.rect.top),Hp(a,`target-rect`,`${t.inspection.selector} width`,e.rect.width,t.inspection.rect.width),Hp(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){Up(a,`guide`,e.id,`${e.orientation} guide ${e.id}`);continue}Hp(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){Up(a,`measurement`,e.id,e.id);continue}Hp(a,`measurement`,`${e.id} width`,e.rect.width,t.rect.width),Hp(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){Up(a,`distance`,e.id,e.id);continue}e.horizontal&&t.horizontal?Hp(a,`distance`,`${e.id} horizontal`,e.horizontal.value,t.horizontal.value):e.horizontal&&!t.horizontal&&Up(a,`distance`,e.id,`${e.id} horizontal`),e.vertical&&t.vertical?Hp(a,`distance`,`${e.id} vertical`,e.vertical.value,t.vertical.value):e.vertical&&!t.vertical&&Up(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 Gp(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 Kp=`0.1.3`,qp=`mesurer.context`,Jp=`context:v1`,Yp=`mesurer.context.settings`,Xp=`context.ui`,Zp={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`]},Qp={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`]},$p={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`]},em=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()))},tm=(e,t,n)=>{let r=async r=>Lp({runtime:e,ownerDocument:t,ownerWindow:n,request:r}),i=async e=>Bp(await r(e));return{context:r,contextText:i,copyContext:async e=>Gp(t,n,await i(e)),select:async i=>(e.select(Array.isArray(i)?i:[i]),await em(t,n),r({scope:`selection`})),annotations:async()=>e.annotations(),review:async r=>(await em(t,n),r?Wp({runtime:e,ownerDocument:t,ownerWindow:n,annotationId:r}):e.annotations().map(r=>Wp({runtime:e,ownerDocument:t,ownerWindow:n,annotationId:r.id}))),capturePlan:async e=>Vp(await r(e)),prepareCapture:async()=>{e.prepareCapture(),await em(t,n)},finishCapture:async()=>{e.finishCapture(),await em(t,n)}}},nm=e=>{let t=e.currentSelection();return t.elements.length>0||t.region!==null};function rm(e={}){return{id:qp,version:Kp,requires:[`runtime:solid`],provides:[Jp],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=tm(r,n.ownerDocument,n.ownerWindow);t.service.provide(Jp,i),t.state.register({id:Yp,initial:{ui:e.ui??!0},persist:!0}),t.state.register({id:Xp,initial:{hasSelection:nm(r)}});let a=()=>t.state.get(`mesurer.context.settings`)?.ui??!0,o=()=>t.state.get(Xp)?.hasSelection===!0,s=e=>{t.state.update(Yp,t=>({...t,ui:e}))},c=r.subscribe(()=>{let e=nm(r);e!==(t.state.get(Xp)?.hasSelection??!1)&&t.state.update(Xp,()=>({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=Si(()=>Ur(up,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:Zp,hidden:()=>!a()}),t.tool.register({id:`context.copy-selection`,label:`Copy selection`,shortcut:`Shift+C`,command:`context.copy-selection`,order:71,icon:Qp,hidden:()=>!a(),disabled:()=>!o()}),t.tool.register({id:`context.add-note`,label:`Add note`,shortcut:`N`,command:`context.add-note`,order:72,icon:$p,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 im={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 am(e){for(let[t,n]of Object.entries(im))e.style.setProperty(t,n,`important`)}function om(e){return`popover`in e&&`showPopover`in e&&typeof e.showPopover==`function`&&`hidePopover`in e&&typeof e.hidePopover==`function`}var sm=e=>`newState`in e,cm=e=>e.localName===`dialog`;function lm(e){if(!cm(e)||!e.open)return!1;try{return e.matches(`:modal`)}catch{return!1}}function um(e,t,n=!0){am(e);let r=e.ownerDocument,i=r.defaultView??window,a=t,o=!1,s=`fixed`,c=!1,l=0,u=[];if(n&&om(e)&&(e.popover=`manual`),t.append(e),n&&om(e))try{e.showPopover(),c=e.matches(`:popover-open`),c&&(s=`top-layer`)}catch{e.removeAttribute(`popover`)}let d=()=>{if(!(!c||!om(e)))try{e.matches(`:popover-open`)||e.showPopover()}catch{}},f=t=>{if(e.parentNode===t)return;let n=c&&om(e)&&e.matches(`:popover-open`);if(n&&om(e))try{e.hidePopover()}catch{}t.append(e),am(e),n&&d()},p=()=>{u=u.filter(e=>e.isConnected&&lm(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||!om(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=sm(t)?t.newState:void 0,r=t.target;if(r instanceof i.Element){if(cm(r)){n===`open`&&lm(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&&cm(t)&&h(t)},b=()=>{r.fullscreenElement&&_()},x=e=>{lm(e)&&m(e);for(let t of e.querySelectorAll(`dialog`))lm(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&&cm(e)&&(lm(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&&om(e)&&e.matches(`:popover-open`))try{e.hidePopover()}catch{}u=[]}}}}var dm=`arrange`,fm=()=>[{id:qp,label:`Context`,order:30,create:()=>rm(),settingsIds:[`context`],hiddenSettingsControlIds:[`ui`]}];function pm(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,availablePlugins:c=[],...l}=e,u=t.ownerDocument??document,d=u.defaultView??window,f=u.createElement(`div`);f.dataset.mesurerIsland=`true`;let p=um(f,t,i),m=f,h=f,g=f;if(n){let e=f.attachShadow({mode:r});h=u.createElement(`div`),h.dataset.mesurerIslandMount=`true`,e.append(h),m=e,g=e}let _,v,y,b=!1,x=new Promise(e=>{v=e}),S=new Promise(e=>{y=e}),C=async()=>(await(_?Promise.resolve(_):x),S),w=a===!0?{}:a===!1?null:a,T=Tp({ownerDocument:u,root:w?.root??(t.nodeType===11?t:u),getPluginHost:()=>_,waitForPluginHost:C}),E=async()=>{await T.ready();let e=_?.service.get(Jp);if(!e)throw Error(`Mesurer context plugin is not loaded. Add contextPlugin() to the plugins array.`);return e},D=async()=>{await T.ready();let e=_?.service.get(dm);if(!e)throw Error(`Mesurer Arrange plugin is not loaded. Add arrangePlugin() from mesurer-solid/arrange.`);return e},O=async e=>(await E()).context(e),k=async e=>(await E()).contextText(e),A=async e=>(await E()).copyContext(e),j=async e=>(await E()).select(e),M=async()=>(await E()).annotations(),N=async e=>(await E()).review(e),P=async e=>(await E()).capturePlan(e),F=async()=>(await E()).prepareCapture(),I=async()=>(await E()).finishCapture(),ee=async()=>(await D()).intents(),te=async e=>{let t=(await D()).intent(e);if(!t)throw Error(`Arrange intent not found: ${e}`);return t},L=async(e,t)=>{(await D()).show(e,t)},R=async(e,t)=>(await D()).capturePlan(e,t),ne=async(e,t)=>(await D()).review(e,t),re=Object.assign(T,{capabilities:()=>{let e=!!_?.service.get(Jp);return{protocol:`mesurer.agent/v1`,contextSchema:`mesurer.context/v1`,capabilities:{context:e,select:e,annotations:e,review:e,capturePlan:e,arrange:!!_?.service.get(dm)}}},context:O,contextText:k,select:j,annotations:M,review:N,capturePlan:P,prepareCapture:F,finishCapture:I,arrangements:ee,arrange:te,showArrange:L,arrangeCapturePlan:R,reviewArrange:ne}),ie={...l,version:Kp,availablePlugins:[...fm(),...c]},z=Si(()=>Ur(op,xi(ie,{portalTarget:g,pageTarget:t,onPluginHost:e=>{_||v(e),_=e,o?.(e)},onPluginsReady:e=>{_=e,b||(b=!0,y(e)),s?.(e)}})),h),ae=re.ready(),oe=null;if(w){let e=w.globalName??`__MESURER__`,t=Object.getOwnPropertyDescriptor(d,e);Reflect.set(d,e,re),oe=()=>{Object.getOwnPropertyDescriptor(d,e)?.value===re&&(t?Object.defineProperty(d,e,t):Reflect.deleteProperty(d,e))}}let se=!1;return{element:f,root:m,hostLayer:p.mode,get pluginHost(){return _},ready:ae,agent:re,context:O,contextText:k,copyContext:A,select:j,annotations:M,review:N,capturePlan:P,prepareCapture:F,finishCapture:I,arrangements:ee,arrange:te,showArrange:L,arrangeCapturePlan:R,reviewArrange:ne,bringToFront:p.bringToFront,describe:()=>_?.describe(),dispose(){se||(se=!0,oe?.(),z(),p.dispose(),f.remove())}}}var mm=(e={})=>({...Pf(e),version:Kp}),{target:hm,globalName:gm=`__MESURER__`,context:_m=!0,screenshot:vm=!1,plugins:ym=[],reuseExisting:bm=!0,...xm}=globalThis.__MESURER_CONFIG__??{},Sm=globalThis.__MESURER_INSTANCE__,Cm=bm&&Sm?.element.isConnected?Sm:void 0;if(Cm)Cm.ready.catch(e=>{queueMicrotask(()=>{throw e})});else{let e=hm?document.querySelector(hm):document.body;if(!e)throw Error(`Mesurer injection target not found: ${hm}`);let t=[..._m===!1?[]:[rm(_m===!0?{}:_m)],...vm===!1?[]:[mm(vm===!0?{}:vm)],...ym];Sm?.dispose();let n=pm({...xm,plugins:t,target:e,agent:{globalName:gm,root:document}});globalThis.__MESURER_INSTANCE__=n,n.ready.catch(e=>{queueMicrotask(()=>{throw e})})}})();
package/dist/inject.js CHANGED
@@ -12496,7 +12496,7 @@ async function Vp(e, t, n) {
12496
12496
  }
12497
12497
  //#endregion
12498
12498
  //#region src/version.ts
12499
- var Hp = "0.1.3-beta.1", Up = "mesurer.context", Wp = "context:v1", Gp = "mesurer.context.settings", Kp = "context.ui", qp = {
12499
+ var Hp = "0.1.3", Up = "mesurer.context", Wp = "context:v1", Gp = "mesurer.context.settings", Kp = "context.ui", qp = {
12500
12500
  viewBox: "0 0 256 256",
12501
12501
  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"]
12502
12502
  }, Jp = {
@@ -2911,7 +2911,7 @@ var Gn = "mesurer:capture-bridge-ping", Kn = "mesurer:capture-bridge-request", q
2911
2911
  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();
2912
2912
  });
2913
2913
  }
2914
- }), Rr = "0.1.3-beta.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 = {}) => ({
2914
+ }), Rr = "0.1.3", 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 = {}) => ({
2915
2915
  ...Lr(e),
2916
2916
  version: Rr
2917
2917
  }), Qr = (e) => $n(e);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mesurer-solid",
3
- "version": "0.1.3-beta.1",
3
+ "version": "0.1.3",
4
4
  "description": "Framework-agnostic UI measurement and inspection tools for browser apps and coding agents.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: mesurer-ui
3
- description: Use Mesurer when implementing, reviewing, debugging, or fixing frontend UI in a browser. Load for visual alignment, spacing, sizing, layout, CSS, responsive work, design/Figma implementation, screenshots, pixel discrepancies, human Mesurer selections/measurements/guides/annotations, or Arrange intents. Consume existing human visual intent before editing and obtain fresh rendered evidence before claiming completion.
3
+ description: Use Mesurer when implementing, reviewing, debugging, or fixing frontend UI in a browser. Load for visual alignment, spacing, sizing, layout, CSS, responsive work, design/Figma implementation, screenshots, pixel discrepancies, human Mesurer selections/measurements/guides/annotations, Arrange intents, or any request to check Mesurer/Measure context. A broad Mesurer/context request means inventory all existing human visual intent before narrowing. Consume existing human visual intent before editing and obtain fresh rendered evidence before claiming completion.
4
4
  ---
5
5
 
6
6
  # Mesurer UI workflow
@@ -94,6 +94,44 @@ reviewArrange
94
94
 
95
95
  The optional screenshot plugin remains a separate human tool/service. It is not a screenshot-delivery capability on `window.__MESURER__`.
96
96
 
97
+ ### Treat broad Mesurer/context requests as a full intent sweep
98
+
99
+ If the user says “check Mesurer,” “check Measure,” “look at Mesurer context,” “see what I highlighted/moved/annotated,” or otherwise asks generally about Mesurer state without naming one specific tool, do **not** assume `context()` alone is the whole message.
100
+
101
+ Inventory the live human-intent channels before narrowing:
102
+
103
+ ```js
104
+ const capabilities = window.__MESURER__.capabilities().capabilities
105
+ const workspace = await window.__MESURER__.context()
106
+ const annotations = await window.__MESURER__.annotations()
107
+ const arrangements = capabilities.arrange
108
+ ? await window.__MESURER__.arrangements()
109
+ : []
110
+
111
+ let selection = null
112
+ try {
113
+ selection = await window.__MESURER__.context({ scope: "selection" })
114
+ } catch {}
115
+ ```
116
+
117
+ Then read the relevant saved objects instead of only listing them:
118
+
119
+ ```js
120
+ const annotationContexts = await Promise.all(
121
+ annotations.map((annotation) =>
122
+ window.__MESURER__.context({ annotation: annotation.id })
123
+ ),
124
+ )
125
+
126
+ const arrangeIntents = await Promise.all(
127
+ arrangements.map((intent) => window.__MESURER__.arrange(intent.id)),
128
+ )
129
+ ```
130
+
131
+ Bring forward whatever is relevant from the combined state: current selection, target-bound annotations and notes, Arrange Before/Desired geometry, guides, measurements, held distances, layout/style inspection, rulers/X-ray state, and any existing human screenshot preview that should be preserved. A person may use several Mesurer tools in one review; treat the combined state as one visual message rather than asking them to restate intent that is already encoded in the page.
132
+
133
+ Do not clear or replace any of those channels until their relevant evidence has been consumed.
134
+
97
135
  ## 2. Consume Arrange before source edits
98
136
 
99
137
  Arrange represents explicit human layout intent. If `capabilities.capabilities.arrange` is true, inspect it before replacing the human selection or editing source: