mesurer-solid 0.2.1-beta.5 → 0.2.1-beta.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -5508,7 +5508,7 @@ function ll(e) {
5508
5508
  get children() {
5509
5509
  var n = X("div", {
5510
5510
  "data-mesurer-measurement-chrome": "true",
5511
- class: "msr:absolute"
5511
+ class: "msr:pointer-events-none msr:absolute"
5512
5512
  });
5513
5513
  return aa(() => (e) => {
5514
5514
  t = e;
@@ -5870,6 +5870,7 @@ function dl(e) {
5870
5870
  };
5871
5871
  });
5872
5872
  var B = X("div", {
5873
+ "data-mesurer-interaction-overlay": "true",
5873
5874
  onPointerDown: (t) => e.onPointerDown(t),
5874
5875
  onPointerUp: (t) => e.onPointerUp(t),
5875
5876
  onPointerLeave: (t) => e.onPointerLeave(t)
@@ -17972,42 +17973,57 @@ var Kv = "mesurer.layout-guides", qv = "layout-guides:v1", Jv = "mesurer.layout-
17972
17973
  }, lb = (e) => {
17973
17974
  let t = Number.isFinite(e) ? Math.max(0, e) : 0, n = Math.floor(t / 60);
17974
17975
  return `${n}:${(t - n * 60).toFixed(2).padStart(5, "0")}`;
17975
- }, ub = (e, t) => {
17976
- let n = e.createElement("button");
17977
- return n.type = "button", n.textContent = t, cb(n, {
17978
- height: "28px",
17979
- padding: "0 9px",
17980
- border: "1px solid var(--msr-color-ink-200, #e2e8f0)",
17981
- "border-radius": "7px",
17982
- background: "var(--msr-surface-raised, #fff)",
17976
+ }, ub = (e, t, n) => {
17977
+ let r = e.createElement("button");
17978
+ return r.type = "button", r.setAttribute("aria-label", t), r.title = t, r.textContent = n, cb(r, {
17979
+ display: "inline-flex",
17980
+ width: "20px",
17981
+ height: "20px",
17982
+ padding: "0",
17983
+ border: "0",
17984
+ "border-radius": "5px",
17985
+ background: "transparent",
17983
17986
  color: "var(--msr-content, #18181b)",
17987
+ "align-items": "center",
17988
+ "justify-content": "center",
17984
17989
  "font-family": "inherit",
17985
17990
  "font-size": "11px",
17986
- "font-weight": "500",
17991
+ "line-height": "1",
17987
17992
  cursor: "pointer"
17988
- }), n;
17993
+ }), r;
17989
17994
  }, db = (e, t) => {
17990
- let n = e.createElement("select");
17991
- return n.setAttribute("aria-label", t), cb(n, {
17995
+ let n = e.createElement("button");
17996
+ n.type = "button", n.setAttribute("role", "menuitemradio"), cb(n, {
17997
+ display: "grid",
17998
+ width: "100%",
17992
17999
  height: "28px",
17993
- padding: "0 24px 0 8px",
17994
- border: "1px solid var(--msr-color-ink-200, #e2e8f0)",
17995
- "border-radius": "7px",
17996
- background: "var(--msr-surface-raised, #fff)",
18000
+ padding: "0 8px",
18001
+ border: "0",
18002
+ "border-radius": "6px",
18003
+ background: "transparent",
17997
18004
  color: "var(--msr-content, #18181b)",
18005
+ "grid-template-columns": "14px minmax(0, 1fr)",
18006
+ gap: "6px",
18007
+ "align-items": "center",
18008
+ "text-align": "left",
17998
18009
  "font-family": "inherit",
17999
18010
  "font-size": "11px",
18000
18011
  cursor: "pointer"
18001
- }), n;
18012
+ });
18013
+ let r = e.createElement("span");
18014
+ r.setAttribute("aria-hidden", "true"), r.textContent = "✓", r.style.opacity = "0";
18015
+ let i = e.createElement("span");
18016
+ return i.textContent = t, n.append(r, i), {
18017
+ button: n,
18018
+ check: r,
18019
+ text: i
18020
+ };
18002
18021
  }, fb = (e, t, n, r) => {
18003
- let i = e.createElement("option");
18004
- i.value = n, i.textContent = r, t.append(i);
18005
- }, pb = (e, t, n, r) => {
18006
18022
  let i = globalThis.URL.createObjectURL(e), a = n.createElement("a");
18007
18023
  a.href = i, a.download = t, a.rel = "noopener", n.documentElement.append(a), a.click(), a.remove(), r.setTimeout(() => globalThis.URL.revokeObjectURL(i), 1e3);
18008
- }, mb = ({ ownerDocument: e, ownerWindow: t, root: n, formats: r, onDiscard: i, onExport: a }) => {
18024
+ }, pb = ({ ownerDocument: e, ownerWindow: t, root: n, formats: r, onDiscard: i, onExport: a }) => {
18009
18025
  let o = e.createElement("section");
18010
- o.dataset.mesurerRecordingPreview = "true", o.dataset.mesurerInspectorUi = "true", o.setAttribute("role", "dialog"), o.setAttribute("aria-label", "Screen recording editor"), cb(o, {
18026
+ o.dataset.mesurerRecordingPreview = "true", o.dataset.mesurerInspectorUi = "true", o.setAttribute("role", "dialog"), o.setAttribute("aria-label", "Screen recording editor"), o.tabIndex = 0, cb(o, {
18011
18027
  position: "fixed",
18012
18028
  display: "none",
18013
18029
  width: `${rb}px`,
@@ -18022,234 +18038,425 @@ var Kv = "mesurer.layout-guides", qv = "layout-guides:v1", Jv = "mesurer.layout-
18022
18038
  "box-shadow": "var(--msr-shadow-floating, 0 10px 30px rgba(0, 0, 0, 0.12))",
18023
18039
  "font-family": "ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif",
18024
18040
  "font-size": "11px",
18025
- "pointer-events": "auto"
18041
+ "pointer-events": "auto",
18042
+ outline: "none",
18043
+ transition: "width 200ms ease"
18026
18044
  }), n.append(o);
18027
18045
  let s = e.createElement("div");
18028
18046
  cb(s, {
18029
18047
  position: "relative",
18048
+ display: "flex",
18030
18049
  width: "100%",
18031
18050
  "min-height": "72px",
18032
- "max-height": "160px",
18051
+ "max-height": "144px",
18033
18052
  overflow: "hidden",
18034
18053
  "border-radius": "8px",
18035
18054
  background: "var(--msr-surface-muted, #f8fafc)",
18036
- transition: "max-height 150ms ease"
18055
+ "align-items": "center",
18056
+ "justify-content": "center",
18057
+ transition: "max-height 200ms ease",
18058
+ cursor: "default"
18037
18059
  }), o.append(s);
18038
18060
  let c = e.createElement("video");
18039
18061
  c.muted = !0, c.playsInline = !0, c.preload = "auto", cb(c, {
18040
18062
  display: "block",
18041
18063
  width: "100%",
18042
18064
  height: "100%",
18043
- "max-height": "160px",
18065
+ "max-width": "100%",
18066
+ "max-height": "144px",
18044
18067
  "object-fit": "contain",
18045
- transition: "max-height 150ms ease"
18068
+ transition: "max-height 200ms ease"
18046
18069
  }), s.append(c);
18047
- let l = ub(e, "×");
18048
- l.dataset.mesurerRecordingDiscard = "true", l.setAttribute("aria-label", "Discard recording"), cb(l, {
18070
+ let l = e.createElement("div");
18071
+ l.dataset.mesurerRecordingExporting = "true", l.textContent = "Exporting…", cb(l, {
18072
+ position: "absolute",
18073
+ inset: "0",
18074
+ display: "none",
18075
+ "align-items": "center",
18076
+ "justify-content": "center",
18077
+ "z-index": "30",
18078
+ background: "rgb(15 23 42 / 45%)",
18079
+ color: "#fff",
18080
+ "font-size": "11px",
18081
+ "pointer-events": "none"
18082
+ }), s.append(l);
18083
+ let u = ub(e, "Close", "×");
18084
+ u.dataset.mesurerRecordingDiscard = "true", cb(u, {
18049
18085
  position: "absolute",
18050
18086
  top: "6px",
18051
18087
  right: "6px",
18052
18088
  width: "24px",
18053
- padding: "0",
18054
- "border-radius": "999px",
18089
+ height: "24px",
18090
+ "z-index": "40",
18055
18091
  background: "rgb(15 23 42 / 78%)",
18056
18092
  color: "#fff",
18057
- border: "0"
18058
- }), s.append(l);
18059
- let u = e.createElement("div");
18060
- cb(u, {
18093
+ opacity: "0",
18094
+ "pointer-events": "none",
18095
+ transition: "opacity 150ms ease"
18096
+ }), s.append(u), s.addEventListener("mouseenter", () => {
18097
+ u.style.opacity = "1", u.style.pointerEvents = "auto";
18098
+ }), s.addEventListener("mouseleave", () => {
18099
+ e.activeElement !== u && (u.style.opacity = "0", u.style.pointerEvents = "none");
18100
+ }), u.addEventListener("focus", () => {
18101
+ u.style.opacity = "1", u.style.pointerEvents = "auto";
18102
+ }), u.addEventListener("blur", () => {
18103
+ u.style.opacity = "0", u.style.pointerEvents = "none";
18104
+ });
18105
+ let d = e.createElement("div");
18106
+ cb(d, {
18061
18107
  display: "flex",
18108
+ height: "20px",
18062
18109
  "align-items": "center",
18063
18110
  gap: "6px",
18064
18111
  "margin-top": "8px"
18065
- }), o.append(u);
18066
- let d = ub(e, "Play");
18067
- d.dataset.mesurerRecordingPlay = "true", u.append(d);
18068
- let f = e.createElement("span");
18069
- f.textContent = "0:00.00", cb(f, {
18070
- width: "48px",
18071
- color: "var(--msr-color-ink-500, #64748b)",
18072
- "font-family": "ui-monospace, SFMono-Regular, Menlo, monospace",
18073
- "font-variant-numeric": "tabular-nums"
18074
- }), u.append(f);
18112
+ }), o.append(d);
18113
+ let f = ub(e, "Play", "▶");
18114
+ f.dataset.mesurerRecordingPlay = "true", d.append(f);
18075
18115
  let p = e.createElement("span");
18076
- cb(p, {
18077
- "margin-left": "auto",
18116
+ p.textContent = "0:00.00", cb(p, {
18117
+ display: "flex",
18118
+ width: "32px",
18119
+ height: "20px",
18120
+ "align-items": "center",
18121
+ "flex-shrink": "0",
18078
18122
  color: "var(--msr-color-ink-500, #64748b)",
18079
18123
  "font-family": "ui-monospace, SFMono-Regular, Menlo, monospace",
18124
+ "font-size": "10px",
18080
18125
  "font-variant-numeric": "tabular-nums"
18081
- }), u.append(p);
18126
+ }), d.append(p);
18082
18127
  let m = e.createElement("div");
18083
- m.dataset.mesurerRecordingTrimLabel = "true", cb(m, {
18084
- "margin-top": "8px",
18128
+ m.dataset.mesurerRecordingTimeline = "true", cb(m, {
18129
+ position: "relative",
18130
+ height: "20px",
18131
+ "min-width": "0",
18132
+ flex: "1 1 0",
18133
+ cursor: "pointer",
18134
+ "user-select": "none"
18135
+ }), d.append(m);
18136
+ let h = e.createElement("div");
18137
+ h.dataset.mesurerRecordingTimelineRail = "true", cb(h, {
18138
+ position: "absolute",
18139
+ left: "0",
18140
+ right: "0",
18141
+ top: "50%",
18142
+ height: "3px",
18143
+ transform: "translateY(-50%)",
18144
+ "border-radius": "999px",
18145
+ background: "var(--msr-color-ink-200, #e2e8f0)",
18146
+ "pointer-events": "none"
18147
+ }), m.append(h);
18148
+ let g = e.createElement("div");
18149
+ g.dataset.mesurerRecordingTimelineClip = "true", cb(g, {
18150
+ position: "absolute",
18151
+ top: "50%",
18152
+ height: "3px",
18153
+ transform: "translateY(-50%)",
18154
+ "border-radius": "999px",
18155
+ background: "var(--msr-color-ink-300, #cbd5e1)",
18156
+ "pointer-events": "none"
18157
+ }), m.append(g);
18158
+ let _ = e.createElement("div");
18159
+ cb(_, {
18160
+ position: "absolute",
18161
+ display: "none",
18162
+ top: "50%",
18163
+ width: "2px",
18164
+ height: "10px",
18165
+ transform: "translate(-50%, -50%)",
18166
+ "border-radius": "999px",
18167
+ background: "var(--msr-color-ink-500, #64748b)",
18168
+ opacity: "0.5",
18169
+ "pointer-events": "none"
18170
+ }), m.append(_);
18171
+ let v = e.createElement("div");
18172
+ v.dataset.mesurerRecordingPlayhead = "true", cb(v, {
18173
+ position: "absolute",
18174
+ top: "50%",
18175
+ left: "0",
18176
+ width: "2px",
18177
+ height: "8px",
18178
+ transform: "translate(-50%, -50%)",
18179
+ "border-radius": "999px",
18180
+ background: "var(--msr-content, #18181b)",
18181
+ "z-index": "25",
18182
+ "pointer-events": "none",
18183
+ transition: "height 150ms ease"
18184
+ }), m.append(v);
18185
+ let y = (t, n) => {
18186
+ let r = e.createElement("button");
18187
+ return r.type = "button", r.dataset.mesurerRecordingTrimHandle = t, r.setAttribute("role", "slider"), r.setAttribute("aria-label", n), r.setAttribute("aria-valuemin", "0"), cb(r, {
18188
+ position: "absolute",
18189
+ top: "50%",
18190
+ width: "8px",
18191
+ height: "14px",
18192
+ padding: "0",
18193
+ border: "1px solid var(--msr-surface-raised, #fff)",
18194
+ "border-radius": "3px",
18195
+ background: "var(--msr-content, #18181b)",
18196
+ transform: "translate(-50%, -50%)",
18197
+ "z-index": "20",
18198
+ cursor: "ew-resize"
18199
+ }), m.append(r), r;
18200
+ }, b = y("start", "Trim start"), x = y("end", "Trim end"), S = e.createElement("span");
18201
+ cb(S, {
18202
+ display: "flex",
18203
+ width: "32px",
18204
+ height: "20px",
18205
+ "align-items": "center",
18206
+ "justify-content": "flex-end",
18207
+ "flex-shrink": "0",
18085
18208
  color: "var(--msr-color-ink-500, #64748b)",
18086
18209
  "font-family": "ui-monospace, SFMono-Regular, Menlo, monospace",
18210
+ "font-size": "10px",
18087
18211
  "font-variant-numeric": "tabular-nums"
18088
- }), o.append(m);
18089
- let h = e.createElement("div");
18090
- cb(h, {
18091
- display: "grid",
18092
- "grid-template-columns": "32px minmax(0, 1fr)",
18093
- gap: "5px 8px",
18094
- "align-items": "center",
18095
- "margin-top": "5px"
18096
- }), o.append(h);
18097
- let g = e.createElement("span");
18098
- g.textContent = "In", g.style.color = "var(--msr-color-ink-500, #64748b)", h.append(g);
18099
- let _ = e.createElement("input");
18100
- _.type = "range", _.min = "0", _.step = "0.01", _.dataset.mesurerRecordingTrimStart = "true", h.append(_);
18101
- let v = e.createElement("span");
18102
- v.textContent = "Out", v.style.color = "var(--msr-color-ink-500, #64748b)", h.append(v);
18103
- let y = e.createElement("input");
18104
- y.type = "range", y.min = "0", y.step = "0.01", y.dataset.mesurerRecordingTrimEnd = "true", h.append(y);
18105
- for (let e of [_, y]) cb(e, {
18106
- width: "100%",
18107
- height: "20px",
18108
- margin: "0",
18109
- accentColor: "var(--msr-accent, #0d99ff)",
18110
- cursor: "ew-resize"
18111
- });
18112
- let b = e.createElement("div");
18113
- cb(b, {
18212
+ }), d.append(S);
18213
+ let C = e.createElement("div");
18214
+ cb(C, {
18215
+ position: "relative",
18114
18216
  display: "flex",
18115
- "align-items": "center",
18116
- gap: "6px",
18117
- "margin-top": "8px"
18118
- }), o.append(b);
18119
- let x = db(e, "Export format");
18120
- x.dataset.mesurerRecordingFormat = "true", b.append(x);
18121
- let S = db(e, "Export scale");
18122
- S.dataset.mesurerRecordingScale = "true", fb(e, S, "1", "1×"), fb(e, S, "2", "2×"), fb(e, S, "3", "3×"), b.append(S);
18123
- let C = ub(e, "Export");
18124
- C.dataset.mesurerRecordingExport = "true", cb(C, {
18125
- "margin-left": "auto",
18126
- background: "var(--msr-content, #18181b)",
18127
- color: "var(--msr-surface, #fff)",
18128
- border: "0"
18129
- }), b.append(C);
18130
- let w = ub(e, "Expand");
18131
- w.dataset.mesurerRecordingExpand = "true", b.append(w);
18132
- let T = e.createElement("p");
18133
- T.dataset.mesurerRecordingPreviewStatus = "true", T.setAttribute("role", "status"), cb(T, {
18217
+ height: "20px",
18218
+ "align-items": "center"
18219
+ }), d.append(C);
18220
+ let w = ub(e, "Export options", "1×");
18221
+ w.dataset.mesurerRecordingExportOptions = "true", w.setAttribute("aria-haspopup", "menu"), w.setAttribute("aria-expanded", "false"), cb(w, {
18222
+ width: "28px",
18223
+ "font-family": "ui-monospace, SFMono-Regular, Menlo, monospace",
18224
+ "font-size": "10px"
18225
+ }), C.append(w);
18226
+ let T = e.createElement("div");
18227
+ T.dataset.mesurerRecordingExportMenu = "true", T.setAttribute("role", "menu"), cb(T, {
18228
+ position: "absolute",
18134
18229
  display: "none",
18135
- margin: "7px 0 0",
18230
+ right: "0",
18231
+ bottom: "24px",
18232
+ width: "176px",
18233
+ padding: "4px",
18234
+ "z-index": "120",
18235
+ border: "1px solid var(--msr-color-ink-200, #e2e8f0)",
18236
+ "border-radius": "9px",
18237
+ background: "var(--msr-surface-raised, #fff)",
18238
+ color: "var(--msr-content, #18181b)",
18239
+ "box-shadow": "var(--msr-shadow-floating, 0 10px 30px rgba(0, 0, 0, 0.12))",
18240
+ "pointer-events": "auto"
18241
+ }), C.append(T);
18242
+ let E = e.createElement("p");
18243
+ E.textContent = "Format", cb(E, {
18244
+ margin: "0",
18245
+ padding: "4px 8px",
18136
18246
  color: "var(--msr-color-ink-500, #64748b)",
18137
- "font-size": "11px"
18138
- }), o.append(T);
18139
- let E = null, D = null, O = !1, k = !1, A = 0, j = () => {
18140
- let e = Number(S.value);
18141
- return e === 2 || e === 3 ? e : 1;
18142
- }, M = () => {
18143
- let e = E?.duration ?? 0, t = Math.min(e, Math.max(0, Number(_.value) || 0));
18144
- return {
18145
- start: t,
18146
- end: Math.min(e, Math.max(t + sb, Number(y.value) || e))
18247
+ "font-size": "10px",
18248
+ "font-weight": "500"
18249
+ }), T.append(E);
18250
+ let D = e.createElement("div");
18251
+ T.append(D);
18252
+ let O = e.createElement("p");
18253
+ O.textContent = "Size", cb(O, {
18254
+ margin: "0",
18255
+ padding: "6px 8px 4px",
18256
+ color: "var(--msr-color-ink-500, #64748b)",
18257
+ "font-size": "10px",
18258
+ "font-weight": "500"
18259
+ }), T.append(O);
18260
+ let k = e.createElement("div");
18261
+ T.append(k);
18262
+ let A = [
18263
+ 1,
18264
+ 2,
18265
+ 3
18266
+ ].map((t) => {
18267
+ let n = db(e, `${t}×`);
18268
+ return n.button.dataset.mesurerRecordingScale = String(t), k.append(n.button), {
18269
+ scale: t,
18270
+ ...n
18147
18271
  };
18148
- }, N = () => {
18149
- let { start: e, end: t } = M();
18150
- m.textContent = `Trim ${lb(e)}–${lb(t)}`;
18151
- }, P = (e) => {
18152
- k = e;
18272
+ }), j = ub(e, "Download", "↓");
18273
+ j.dataset.mesurerRecordingExport = "true", d.append(j);
18274
+ let M = ub(e, "Grow preview", "↗");
18275
+ M.dataset.mesurerRecordingExpand = "true", d.append(M);
18276
+ let N = e.createElement("p");
18277
+ N.dataset.mesurerRecordingPreviewStatus = "true", N.setAttribute("role", "status"), cb(N, {
18278
+ display: "none",
18279
+ margin: "8px 0 0",
18280
+ color: "var(--msr-color-ink-500, #64748b)",
18281
+ "font-size": "11px",
18282
+ "line-height": "16px"
18283
+ }), o.append(N);
18284
+ let P = null, F = null, I = !1, L = !1, R = 0, z = ["webm"], B = "webm", V = 1, H = 0, U = 0, ee = null, te = null, ne = (e) => {
18285
+ let t = P?.duration ?? 0;
18286
+ return t <= 0 ? 0 : Math.min(1, Math.max(0, e / t));
18287
+ }, W = () => ({
18288
+ start: H,
18289
+ end: U
18290
+ }), re = (e) => {
18291
+ let t = P?.duration ?? 0, n = m.getBoundingClientRect();
18292
+ return t <= 0 || n.width <= 0 ? 0 : Math.min(t, Math.max(0, (e - n.left) / n.width * t));
18293
+ }, ie = () => {
18294
+ let e = P?.duration ?? 0, t = Math.min(e, Math.max(0, c.currentTime || 0)), n = ne(H) * 100, r = ne(U) * 100;
18295
+ b.style.left = `${n}%`, x.style.left = `${r}%`, g.style.left = `${n}%`, g.style.width = `${Math.max(0, r - n)}%`, v.style.left = `${ne(t) * 100}%`, b.setAttribute("aria-valuemax", String(Math.max(0, U - sb))), b.setAttribute("aria-valuenow", String(H)), b.setAttribute("aria-valuetext", lb(H)), x.setAttribute("aria-valuemin", String(Math.min(e, H + sb))), x.setAttribute("aria-valuemax", String(e)), x.setAttribute("aria-valuenow", String(U)), x.setAttribute("aria-valuetext", lb(U)), p.textContent = lb(t), S.textContent = lb(e);
18296
+ }, ae = (e, t = !0) => {
18297
+ if (!P) return;
18298
+ let n = Math.min(U, Math.max(H, e));
18299
+ t && !c.paused && c.pause(), c.currentTime = n, ie();
18300
+ }, oe = (e, t = !1) => {
18301
+ P && (H = Math.min(Math.max(0, e), Math.max(0, U - sb)), (t || c.currentTime < H) && ae(H), ie());
18302
+ }, se = (e, t = !1) => {
18303
+ P && (U = Math.max(Math.min(P.duration, e), Math.min(P.duration, H + sb)), t ? ae(U) : c.currentTime > U && ae(H), ie());
18304
+ }, ce = () => {
18305
+ w.textContent = `${V}×`;
18306
+ for (let e of A) {
18307
+ let t = e.scale === V;
18308
+ e.button.setAttribute("aria-checked", t ? "true" : "false"), e.check.style.opacity = t ? "1" : "0", e.text.textContent = P ? `${e.scale}× ${Math.round(P.width * e.scale)} × ${Math.round(P.height * e.scale)}` : `${e.scale}×`;
18309
+ }
18310
+ }, le = () => {
18311
+ D.replaceChildren();
18312
+ for (let t of z) {
18313
+ let n = db(e, t === "mp4" ? "MP4" : "WebM"), r = t === B;
18314
+ n.button.dataset.mesurerRecordingFormat = t, n.button.setAttribute("aria-checked", r ? "true" : "false"), n.check.style.opacity = r ? "1" : "0", n.button.addEventListener("click", () => {
18315
+ B = t, le();
18316
+ }), D.append(n.button);
18317
+ }
18318
+ }, G = () => {
18319
+ if (T.style.display === "none") return;
18320
+ let e = C.getBoundingClientRect(), n = Math.max(1, T.offsetHeight), r = e.top - ab, i = t.innerHeight - e.bottom - ab;
18321
+ r >= n || r >= i ? (T.style.top = "auto", T.style.bottom = "24px") : (T.style.top = "24px", T.style.bottom = "auto");
18322
+ }, ue = (e) => {
18323
+ T.style.display = e ? "block" : "none", w.setAttribute("aria-expanded", e ? "true" : "false"), e && G();
18324
+ }, de = (e) => {
18325
+ L = e, l.style.display = e ? "flex" : "none";
18153
18326
  for (let t of [
18154
- d,
18155
- l,
18156
- _,
18157
- y,
18327
+ f,
18328
+ u,
18329
+ b,
18158
18330
  x,
18159
- S,
18160
- C,
18161
- w
18331
+ w,
18332
+ j,
18333
+ M,
18334
+ ...A.map((e) => e.button)
18162
18335
  ]) t.toggleAttribute("disabled", e);
18163
- C.textContent = e ? "Exporting…" : "Export";
18164
- }, F = () => {
18336
+ }, fe = () => {
18165
18337
  if (o.style.display === "none") return;
18166
- let r = Math.min(O ? ib : rb, Math.max(1, t.innerWidth - 16)), i = Math.max(180, o.offsetHeight), a = (n.closest("[data-mesurer-root='true']")?.querySelector("[data-mesurer-tool-id='recording']") ?? e.querySelector("[data-mesurer-tool-id='recording']"))?.getBoundingClientRect(), s = a ? a.left + a.width / 2 - r / 2 : t.innerWidth - r - ab, c = a ? a.bottom + ob : ab;
18167
- s = Math.min(Math.max(ab, s), Math.max(ab, t.innerWidth - r - ab)), c + i > t.innerHeight - ab && (c = a ? a.top - i - ob : t.innerHeight - i - ab), o.style.left = `${s}px`, o.style.top = `${Math.max(ab, c)}px`;
18168
- }, I = () => {
18169
- c.pause(), c.removeAttribute("src"), c.load(), D &&= (globalThis.URL.revokeObjectURL(D), null);
18170
- }, L = () => {
18171
- A += 1, I(), E = null, o.style.display = "none", T.style.display = "none", P(!1);
18172
- };
18173
- l.addEventListener("click", () => {
18174
- L(), i();
18175
- }), d.addEventListener("click", () => {
18176
- if (!(!E || k)) {
18177
- if (c.paused) {
18178
- let { start: e, end: t } = M();
18179
- (c.currentTime < e || c.currentTime >= t) && (c.currentTime = e), c.play();
18338
+ let r = Math.min(I ? ib : rb, Math.max(1, t.innerWidth - 16)), i = Math.max(180, o.offsetHeight), a = (n.closest("[data-mesurer-root='true']")?.querySelector("[data-mesurer-tool-id='recording']") ?? e.querySelector("[data-mesurer-tool-id='recording']"))?.getBoundingClientRect(), s = a ? a.left + a.width / 2 - r / 2 : t.innerWidth - r - ab, c = a ? a.bottom + ob : ab;
18339
+ s = Math.min(Math.max(ab, s), Math.max(ab, t.innerWidth - r - ab)), c + i > t.innerHeight - ab && (c = a ? a.top - i - ob : t.innerHeight - i - ab), o.style.left = `${s}px`, o.style.top = `${Math.max(ab, c)}px`, T.style.display !== "none" && G();
18340
+ }, pe = () => {
18341
+ c.pause(), c.removeAttribute("src"), c.load(), F &&= (globalThis.URL.revokeObjectURL(F), null);
18342
+ }, me = () => {
18343
+ R += 1, pe(), P = null, ee = null, te = null, ue(!1), o.style.display = "none", N.style.display = "none", de(!1);
18344
+ }, he = () => {
18345
+ if (!(!P || L)) {
18346
+ if (!c.paused) {
18347
+ c.pause();
18180
18348
  return;
18181
18349
  }
18182
- c.pause();
18350
+ (c.currentTime < H || c.currentTime >= U) && (c.currentTime = H), c.play();
18183
18351
  }
18184
- }), c.addEventListener("play", () => {
18185
- d.textContent = "Pause";
18352
+ }, ge = () => {
18353
+ ee = null, te = null, v.style.height = "8px";
18354
+ }, _e = (e) => {
18355
+ if (!ee) return;
18356
+ let t = re(e);
18357
+ ee === "start" ? oe(t, !0) : ee === "end" ? se(t, !0) : ae(t);
18358
+ }, ve = (e, t) => {
18359
+ !P || L || t.button !== 0 || (t.preventDefault(), t.stopPropagation(), ee = e, te = t.pointerId, v.style.height = "10px", _e(t.clientX));
18360
+ }, ye = (e) => {
18361
+ te !== null && e.pointerId === te && _e(e.clientX);
18362
+ }, be = (e) => {
18363
+ te !== null && e.pointerId === te && ge();
18364
+ };
18365
+ b.addEventListener("pointerdown", (e) => ve("start", e)), x.addEventListener("pointerdown", (e) => ve("end", e)), m.addEventListener("pointerdown", (e) => {
18366
+ let t = e.target;
18367
+ t instanceof Element && t.closest("[data-mesurer-recording-trim-handle]") || ve("playhead", e);
18368
+ }), m.addEventListener("pointermove", (e) => {
18369
+ te === null && (_.style.display = "block", _.style.left = `${ne(re(e.clientX)) * 100}%`);
18370
+ }), m.addEventListener("pointerleave", () => {
18371
+ _.style.display = "none";
18372
+ });
18373
+ for (let [e, t] of [["start", b], ["end", x]]) t.addEventListener("keydown", (t) => {
18374
+ if (!P || t.key !== "ArrowLeft" && t.key !== "ArrowRight") return;
18375
+ t.preventDefault();
18376
+ let n = t.key === "ArrowLeft" ? -1 : 1, r = (e === "start" ? H : U) + n * .05;
18377
+ e === "start" ? oe(r, !0) : se(r, !0);
18378
+ });
18379
+ t.addEventListener("pointermove", ye, !0), t.addEventListener("pointerup", be, !0), t.addEventListener("pointercancel", be, !0), u.addEventListener("click", (e) => {
18380
+ e.stopPropagation(), me(), i();
18381
+ }), s.addEventListener("click", (e) => {
18382
+ let t = e.target;
18383
+ t instanceof Element && t.closest("button") || he();
18384
+ }), f.addEventListener("click", he), c.addEventListener("play", () => {
18385
+ f.textContent = "Ⅱ", f.setAttribute("aria-label", "Pause"), f.title = "Pause";
18186
18386
  }), c.addEventListener("pause", () => {
18187
- d.textContent = "Play";
18387
+ f.textContent = "▶", f.setAttribute("aria-label", "Play"), f.title = "Play";
18188
18388
  }), c.addEventListener("timeupdate", () => {
18189
- if (!E) return;
18190
- let { start: e, end: t } = M();
18191
- c.currentTime >= t - .01 ? (c.pause(), c.currentTime = e) : c.currentTime < e && (c.currentTime = e), f.textContent = lb(c.currentTime);
18192
- }), _.addEventListener("input", () => {
18193
- if (!E) return;
18194
- let e = Math.min(E.duration - sb, Math.max(0, Number(_.value) || 0));
18195
- _.value = String(e), (Number(y.value) || E.duration) < e + sb && (y.value = String(Math.min(E.duration, e + sb))), c.currentTime = e, N();
18196
- }), y.addEventListener("input", () => {
18197
- if (!E) return;
18198
- let e = Number(_.value) || 0, t = Math.max(e + sb, Math.min(E.duration, Number(y.value) || E.duration));
18199
- y.value = String(t), c.currentTime = t, N();
18389
+ P && (c.currentTime >= U - .01 ? (c.pause(), c.currentTime = H) : c.currentTime < H && (c.currentTime = H), ie());
18390
+ }), c.addEventListener("loadedmetadata", () => {
18391
+ ie();
18200
18392
  }), w.addEventListener("click", () => {
18201
- O = !O, o.style.width = `${O ? ib : rb}px`, s.style.maxHeight = O ? "440px" : "160px", c.style.maxHeight = O ? "440px" : "160px", w.textContent = O ? "Shrink" : "Expand", t.requestAnimationFrame(F);
18202
- }), C.addEventListener("click", () => {
18203
- if (!E || k) return;
18204
- let n = ++A, { start: r, end: i } = M(), o = x.value === "mp4" ? "mp4" : "webm";
18205
- P(!0), T.style.display = "block", T.textContent = "Exporting with MediaBunny…", a({
18206
- format: o,
18393
+ L || ue(T.style.display === "none");
18394
+ });
18395
+ for (let e of A) e.button.addEventListener("click", () => {
18396
+ V = e.scale, ce();
18397
+ });
18398
+ let xe = (e) => {
18399
+ T.style.display !== "none" && (e.composedPath().includes(C) || ue(!1));
18400
+ };
18401
+ e.addEventListener("pointerdown", xe, !0), M.addEventListener("click", () => {
18402
+ I = !I, o.style.width = `${I ? ib : rb}px`, s.style.maxHeight = I ? "448px" : "144px", c.style.maxHeight = I ? "448px" : "144px", M.textContent = I ? "↙" : "↗", M.setAttribute("aria-label", I ? "Shrink preview" : "Grow preview"), M.title = I ? "Shrink preview" : "Grow preview", t.requestAnimationFrame(fe);
18403
+ }), j.addEventListener("click", () => {
18404
+ if (!P || L || z.length === 0) return;
18405
+ let n = ++R, { start: r, end: i } = W();
18406
+ de(!0), ue(!1), N.style.display = "none", a({
18407
+ format: B,
18207
18408
  startTime: r,
18208
18409
  endTime: i,
18209
- scale: j()
18410
+ scale: V
18210
18411
  }).then((r) => {
18211
- n === A && (pb(r.blob, r.filename, e, t), T.textContent = `Exported ${r.width}×${r.height} ${r.format.toUpperCase()}`);
18412
+ n === R && fb(r.blob, r.filename, e, t);
18212
18413
  }).catch((e) => {
18213
- n === A && (T.textContent = e instanceof Error ? e.message : "Could not export the recording.");
18414
+ n === R && (N.style.display = "block", N.style.color = "var(--msr-danger-text, #dc2626)", N.textContent = e instanceof Error ? e.message : "Could not export the recording.");
18214
18415
  }).finally(() => {
18215
- n === A && P(!1);
18416
+ n === R && de(!1);
18216
18417
  });
18418
+ }), o.addEventListener("keydown", (e) => {
18419
+ if (e.key === "Escape") {
18420
+ if (T.style.display !== "none") {
18421
+ e.preventDefault(), ue(!1);
18422
+ return;
18423
+ }
18424
+ e.preventDefault(), me(), i();
18425
+ return;
18426
+ }
18427
+ (e.key === " " || e.code === "Space") && e.target === o && (e.preventDefault(), he());
18217
18428
  });
18218
- let R = () => F();
18219
- return t.addEventListener("resize", R), {
18220
- show(n) {
18221
- A += 1, I(), E = n;
18222
- let i = globalThis.URL.createObjectURL(n.blob);
18223
- D = i, c.src = i, c.currentTime = 0, f.textContent = "0:00.00", p.textContent = lb(n.duration), _.max = String(n.duration), _.value = "0", y.max = String(n.duration), y.value = String(n.duration), N(), x.replaceChildren(), fb(e, x, "webm", "WebM"), o.style.display = "block", T.style.display = "none", P(!1), F();
18224
- let a = A;
18225
- r(n).then((t) => {
18226
- if (!(a !== A || !E)) {
18227
- x.replaceChildren();
18228
- for (let n of t) fb(e, x, n, n === "mp4" ? "MP4" : "WebM");
18229
- t.length === 0 ? (fb(e, x, "webm", "No export codec"), x.disabled = !0, C.disabled = !0, T.style.display = "block", T.textContent = "No MediaBunny video encoder is available in this runtime.") : (x.disabled = !1, C.disabled = !1);
18230
- }
18429
+ let Se = () => fe();
18430
+ return t.addEventListener("resize", Se), {
18431
+ show(e) {
18432
+ R += 1, pe(), P = e, I = !1, V = 1, B = "webm", z = ["webm"], H = 0, U = e.duration, ee = null, te = null;
18433
+ let n = globalThis.URL.createObjectURL(e.blob);
18434
+ F = n, c.src = n, c.currentTime = 0, s.style.aspectRatio = e.width > 0 && e.height > 0 ? `${e.width} / ${e.height}` : "16 / 9", o.style.width = `${rb}px`, s.style.maxHeight = "144px", c.style.maxHeight = "144px", M.textContent = "↗", M.setAttribute("aria-label", "Grow preview"), M.title = "Grow preview", p.textContent = "0:00.00", S.textContent = lb(e.duration), N.style.display = "none", N.style.color = "var(--msr-color-ink-500, #64748b)", ue(!1), le(), ce(), ie(), de(!1), o.style.display = "block", fe(), o.focus({ preventScroll: !0 });
18435
+ let i = R;
18436
+ r(e).then((e) => {
18437
+ i !== R || !P || (z = e, B = e.includes(B) ? B : e[0] ?? "webm", le(), j.disabled = e.length === 0, e.length === 0 && (N.style.display = "block", N.style.color = "var(--msr-danger-text, #dc2626)", N.textContent = "No MediaBunny video encoder is available in this runtime."));
18231
18438
  }).catch((e) => {
18232
- a === A && (T.style.display = "block", T.textContent = e instanceof Error ? e.message : "Could not inspect export support.");
18233
- }), t.requestAnimationFrame(F);
18439
+ i === R && (z = [], le(), j.disabled = !0, N.style.display = "block", N.style.color = "var(--msr-danger-text, #dc2626)", N.textContent = e instanceof Error ? e.message : "Could not inspect export support.");
18440
+ }), t.requestAnimationFrame(fe);
18234
18441
  },
18235
- dismiss: L,
18442
+ dismiss: me,
18236
18443
  dispose() {
18237
- L(), t.removeEventListener("resize", R), o.remove();
18444
+ me(), t.removeEventListener("resize", Se), t.removeEventListener("pointermove", ye, !0), t.removeEventListener("pointerup", be, !0), t.removeEventListener("pointercancel", be, !0), e.removeEventListener("pointerdown", xe, !0), o.remove();
18238
18445
  }
18239
18446
  };
18240
- }, hb = "mesurer.recording", gb = "recording:v1", _b = "mesurer.recording.settings", vb = "runtime:solid", yb = "recording.toggle", bb = "recording.stop", xb = "recording.discard", Sb = "recording.export", Cb = 30, wb = 60, Tb = 3e3, Eb = {
18447
+ }, mb = "mesurer.recording", hb = "recording:v1", gb = "mesurer.recording.settings", _b = "runtime:solid", vb = "recording.toggle", yb = "recording.stop", bb = "recording.discard", xb = "recording.export", Sb = 30, Cb = 60, wb = 3e3, Tb = {
18241
18448
  viewBox: "0 0 24 24",
18242
18449
  paths: ["M7 5.75A3.25 3.25 0 0 0 3.75 9v6A3.25 3.25 0 0 0 7 18.25h7A3.25 3.25 0 0 0 17.25 15v-1.03l2.13 1.42a.75.75 0 0 0 1.17-.624V9.234a.75.75 0 0 0-1.17-.624l-2.13 1.42V9A3.25 3.25 0 0 0 14 5.75H7Zm10.25 6.082 1.8-1.2v2.736l-1.8-1.2v-.336Z", "M10.5 9.25a2.75 2.75 0 1 0 0 5.5 2.75 2.75 0 0 0 0-5.5Z"]
18243
- }, Db = (e) => e ? { ...e } : null, Ob = (e) => ({
18450
+ }, Eb = (e) => e ? { ...e } : null, Db = (e) => ({
18244
18451
  ...e,
18245
- rect: Db(e.rect)
18246
- }), kb = (e, t) => {
18452
+ rect: Eb(e.rect)
18453
+ }), Ob = (e, t) => {
18247
18454
  for (let [n, r] of Object.entries(t)) e.style.setProperty(n, r);
18248
- }, Ab = (e) => e != null && !Array.isArray(e) && typeof e == "object", jb = (e) => typeof e == "number" && Number.isFinite(e), Mb = (e) => {
18249
- if (!Ab(e)) return {};
18455
+ }, kb = (e) => e != null && !Array.isArray(e) && typeof e == "object", Ab = (e) => typeof e == "number" && Number.isFinite(e), jb = (e) => {
18456
+ if (!kb(e)) return {};
18250
18457
  let t = {};
18251
- return (e.format === "webm" || e.format === "mp4") && (t.format = e.format), jb(e.startTime) && (t.startTime = e.startTime), jb(e.endTime) && (t.endTime = e.endTime), (e.scale === 1 || e.scale === 2 || e.scale === 3) && (t.scale = e.scale), t;
18252
- }, Nb = (e) => ({
18458
+ return (e.format === "webm" || e.format === "mp4") && (t.format = e.format), Ab(e.startTime) && (t.startTime = e.startTime), Ab(e.endTime) && (t.endTime = e.endTime), (e.scale === 1 || e.scale === 2 || e.scale === 3) && (t.scale = e.scale), t;
18459
+ }, Mb = (e) => ({
18253
18460
  status: e.status,
18254
18461
  elapsed: e.elapsed,
18255
18462
  rect: e.rect ? { ...e.rect } : null,
@@ -18257,52 +18464,56 @@ var Kv = "mesurer.layout-guides", qv = "layout-guides:v1", Jv = "mesurer.layout-
18257
18464
  width: e.width,
18258
18465
  height: e.height,
18259
18466
  error: e.error
18260
- }), Pb = (e) => ({
18467
+ }), Nb = (e) => ({
18261
18468
  filename: e.filename,
18262
18469
  format: e.format,
18263
18470
  duration: e.duration,
18264
18471
  width: e.width,
18265
18472
  height: e.height,
18266
18473
  bytes: e.blob.size
18267
- }), Fb = (e) => ({
18474
+ }), Pb = (e) => ({
18268
18475
  format: e.format,
18269
18476
  duration: e.duration,
18270
18477
  width: e.width,
18271
18478
  height: e.height,
18272
18479
  bytes: e.blob.size,
18273
18480
  createdAt: e.createdAt
18274
- }), Ib = (e, t, n) => {
18481
+ }), Fb = (e, t, n) => {
18275
18482
  let r = globalThis.URL.createObjectURL(e.blob), i = t.createElement("a");
18276
18483
  i.href = r, i.download = e.filename, i.rel = "noopener", t.documentElement.append(i), i.click(), i.remove(), n.setTimeout(() => globalThis.URL.revokeObjectURL(r), 1e3);
18277
- }, Lb = (e = {}) => Ta({
18278
- id: hb,
18484
+ }, Ib = (e = {}) => Ta({
18485
+ id: mb,
18279
18486
  version: "0.1.0",
18280
- requires: [vb],
18281
- provides: ["tool:recording", gb],
18487
+ requires: [_b],
18488
+ provides: ["tool:recording", hb],
18282
18489
  setup(t) {
18283
- let n = t.service.get(vb);
18490
+ let n = t.service.get(_b);
18284
18491
  if (!n) throw Error("Recording plugin requires the Solid renderer runtime.");
18285
- let { ownerDocument: r, ownerWindow: i } = n, a = n.createInspectorMount(), o = a.element;
18286
- o.dataset.mesurerRecording = "true", kb(o, {
18492
+ let { ownerDocument: r, ownerWindow: i } = n, a = n.createInspectorMount(), o = a.element, s = n.rendererRoot ?? n.portalTarget.querySelector("[data-mesurer-root='true']"), c = (e) => {
18493
+ s?.toggleAttribute("data-mesurer-recording-active", e);
18494
+ let t = s?.querySelector("[data-mesurer-interaction-overlay='true']");
18495
+ t && (e ? (t.style.setProperty("pointer-events", "none", "important"), t.style.setProperty("cursor", "default", "important")) : (t.style.removeProperty("pointer-events"), t.style.removeProperty("cursor")));
18496
+ };
18497
+ o.dataset.mesurerRecording = "true", Ob(o, {
18287
18498
  position: "fixed",
18288
18499
  inset: "0",
18289
18500
  "z-index": "86",
18290
18501
  "pointer-events": "none",
18291
18502
  "font-family": "ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif"
18292
18503
  });
18293
- let s = Math.max(1, Math.min(60, Math.round(e.frameRate ?? Cb))), c = Math.max(1, Math.min(600, e.maxDurationSeconds ?? wb)), l = e.quality ?? "medium";
18504
+ let l = Math.max(1, Math.min(60, Math.round(e.frameRate ?? Sb))), u = Math.max(1, Math.min(600, e.maxDurationSeconds ?? Cb)), d = e.quality ?? "medium";
18294
18505
  t.state.register({
18295
- id: _b,
18506
+ id: gb,
18296
18507
  initial: { toolEnabled: e.toolEnabled ?? !0 },
18297
18508
  persist: !0
18298
18509
  });
18299
- let u = () => ({ toolEnabled: t.state.get("mesurer.recording.settings")?.toolEnabled ?? !0 }), d = (e) => {
18300
- t.state.update(_b, (t) => {
18510
+ let f = () => ({ toolEnabled: t.state.get("mesurer.recording.settings")?.toolEnabled ?? !0 }), p = (e) => {
18511
+ t.state.update(gb, (t) => {
18301
18512
  let n = { ...t };
18302
18513
  return e.toolEnabled !== void 0 && (n.toolEnabled = e.toolEnabled), n;
18303
18514
  });
18304
- }, f = r.createElement("div");
18305
- f.dataset.mesurerRecordingSelect = "true", f.dataset.mesurerInspectorUi = "true", f.setAttribute("role", "application"), f.setAttribute("aria-label", "Recording selection"), kb(f, {
18515
+ }, m = r.createElement("div");
18516
+ m.dataset.mesurerRecordingSelect = "true", m.dataset.mesurerInspectorUi = "true", m.setAttribute("role", "application"), m.setAttribute("aria-label", "Recording selection"), Ob(m, {
18306
18517
  position: "fixed",
18307
18518
  inset: "0",
18308
18519
  display: "none",
@@ -18311,24 +18522,24 @@ var Kv = "mesurer.layout-guides", qv = "layout-guides:v1", Jv = "mesurer.layout-
18311
18522
  "pointer-events": "auto",
18312
18523
  "user-select": "none",
18313
18524
  "touch-action": "none"
18314
- }), o.append(f);
18315
- let p = Array.from({ length: 4 }, () => {
18525
+ }), o.append(m);
18526
+ let h = Array.from({ length: 4 }, () => {
18316
18527
  let e = r.createElement("div");
18317
- return kb(e, {
18528
+ return Ob(e, {
18318
18529
  position: "fixed",
18319
18530
  background: "rgb(0 0 0 / 40%)",
18320
18531
  "pointer-events": "none"
18321
- }), f.append(e), e;
18322
- }), m = r.createElement("div");
18323
- m.dataset.mesurerRecordingSelection = "true", kb(m, {
18532
+ }), m.append(e), e;
18533
+ }), g = r.createElement("div");
18534
+ g.dataset.mesurerRecordingSelection = "true", Ob(g, {
18324
18535
  position: "fixed",
18325
18536
  display: "none",
18326
18537
  border: "1px solid var(--msr-accent, #0d99ff)",
18327
18538
  "box-sizing": "border-box",
18328
18539
  "pointer-events": "none"
18329
- }), f.append(m);
18330
- let h = r.createElement("div");
18331
- kb(h, {
18540
+ }), m.append(g);
18541
+ let _ = r.createElement("div");
18542
+ Ob(_, {
18332
18543
  position: "fixed",
18333
18544
  display: "none",
18334
18545
  transform: "translateX(-50%)",
@@ -18339,9 +18550,9 @@ var Kv = "mesurer.layout-guides", qv = "layout-guides:v1", Jv = "mesurer.layout-
18339
18550
  "font-size": "10px",
18340
18551
  "font-variant-numeric": "tabular-nums",
18341
18552
  "pointer-events": "none"
18342
- }), f.append(h);
18343
- let g = r.createElement("div");
18344
- g.textContent = "Drag a region to record · Esc to cancel", kb(g, {
18553
+ }), m.append(_);
18554
+ let v = r.createElement("div");
18555
+ v.textContent = "Drag a region to record · Esc to cancel", Ob(v, {
18345
18556
  position: "fixed",
18346
18557
  left: "50%",
18347
18558
  bottom: "16px",
@@ -18352,26 +18563,217 @@ var Kv = "mesurer.layout-guides", qv = "layout-guides:v1", Jv = "mesurer.layout-
18352
18563
  color: "var(--msr-surface, #fff)",
18353
18564
  "font-size": "11px",
18354
18565
  "pointer-events": "none"
18355
- }), f.append(g);
18356
- let _ = r.createElement("button");
18357
- _.type = "button", _.dataset.mesurerRecordingStatus = "true", _.dataset.mesurerInspectorUi = "true", _.setAttribute("aria-label", "Stop recording"), kb(_, {
18566
+ }), m.append(v);
18567
+ let y = r.createElement("div");
18568
+ y.dataset.mesurerRecordingRegion = "true", y.dataset.mesurerInspectorUi = "true", y.setAttribute("role", "dialog"), y.setAttribute("aria-label", "Recording region"), Ob(y, {
18358
18569
  position: "fixed",
18359
18570
  display: "none",
18360
- height: "30px",
18361
- padding: "0 10px",
18571
+ width: "220px",
18572
+ padding: "8px",
18573
+ "z-index": "90",
18574
+ "box-sizing": "border-box",
18575
+ overflow: "hidden",
18576
+ "border-radius": "10px",
18577
+ background: "var(--msr-surface-raised, #fff)",
18578
+ color: "var(--msr-content, #18181b)",
18579
+ "box-shadow": "var(--msr-shadow-floating, 0 10px 30px rgba(0,0,0,.12))",
18580
+ "font-size": "11px",
18581
+ "pointer-events": "auto",
18582
+ transform: "translateX(-50%)"
18583
+ }), m.append(y);
18584
+ let b = (e) => {
18585
+ let t = r.createElement("label");
18586
+ Ob(t, {
18587
+ display: "grid",
18588
+ "grid-template-columns": "44px minmax(0,1fr)",
18589
+ "align-items": "center",
18590
+ gap: "8px"
18591
+ });
18592
+ let n = r.createElement("span");
18593
+ n.textContent = e, n.style.color = "var(--msr-color-ink-500, #64748b)", t.append(n);
18594
+ let i = r.createElement("div");
18595
+ return Ob(i, {
18596
+ display: "flex",
18597
+ "align-items": "center",
18598
+ gap: "4px",
18599
+ "min-width": "0"
18600
+ }), t.append(i), y.append(t), i;
18601
+ }, x = (e) => {
18602
+ let t = r.createElement("input");
18603
+ return t.type = "number", t.setAttribute("aria-label", e), t.step = "1", Ob(t, {
18604
+ width: "0",
18605
+ "min-width": "0",
18606
+ flex: "1 1 0",
18607
+ height: "26px",
18608
+ padding: "0 6px",
18609
+ border: "1px solid var(--msr-color-ink-200, #e2e8f0)",
18610
+ "border-radius": "6px",
18611
+ background: "var(--msr-surface, #fff)",
18612
+ color: "var(--msr-content, #18181b)",
18613
+ "font-family": "ui-monospace, SFMono-Regular, Menlo, monospace",
18614
+ "font-size": "10px",
18615
+ "font-variant-numeric": "tabular-nums"
18616
+ }), t;
18617
+ }, S = b("Size"), C = x("Width"), w = x("Height");
18618
+ S.append(C);
18619
+ let T = r.createElement("span");
18620
+ T.textContent = "×", T.style.color = "var(--msr-color-ink-500, #64748b)", S.append(T, w);
18621
+ let E = r.createElement("span");
18622
+ E.textContent = "px", E.style.color = "var(--msr-color-ink-500, #64748b)", S.append(E);
18623
+ let D = b("Position");
18624
+ D.style.marginTop = "8px";
18625
+ let O = x("Left"), k = x("Top");
18626
+ D.append(O, k);
18627
+ let A = r.createElement("span");
18628
+ A.textContent = "px", A.style.color = "var(--msr-color-ink-500, #64748b)", D.append(A);
18629
+ let j = r.createElement("button");
18630
+ j.type = "button", j.dataset.mesurerRecordingStart = "true", j.textContent = "● Start recording", Ob(j, {
18631
+ width: "100%",
18632
+ height: "28px",
18633
+ "margin-top": "8px",
18634
+ border: "1px solid var(--msr-color-ink-200, #e2e8f0)",
18635
+ "border-radius": "7px",
18636
+ background: "var(--msr-surface-raised, #fff)",
18637
+ color: "var(--msr-content, #18181b)",
18638
+ "font-family": "inherit",
18639
+ "font-size": "11px",
18640
+ "font-weight": "500",
18641
+ cursor: "pointer"
18642
+ }), y.append(j);
18643
+ let M = r.createElement("div");
18644
+ M.dataset.mesurerRecordingGrid = "true", Ob(M, {
18645
+ position: "absolute",
18646
+ inset: "0",
18647
+ display: "none",
18648
+ "pointer-events": "none"
18649
+ }), g.append(M);
18650
+ let N = (e) => {
18651
+ let t = r.createElement("div");
18652
+ Ob(t, {
18653
+ position: "absolute",
18654
+ opacity: "0.3",
18655
+ ...e
18656
+ }), M.append(t);
18657
+ };
18658
+ N({
18659
+ left: "33.333%",
18660
+ top: "0",
18661
+ bottom: "0",
18662
+ borderLeft: "1px dashed var(--msr-color-ink-500, #64748b)"
18663
+ }), N({
18664
+ left: "66.666%",
18665
+ top: "0",
18666
+ bottom: "0",
18667
+ borderLeft: "1px dashed var(--msr-color-ink-500, #64748b)"
18668
+ }), N({
18669
+ top: "33.333%",
18670
+ left: "0",
18671
+ right: "0",
18672
+ borderTop: "1px dashed var(--msr-color-ink-500, #64748b)"
18673
+ }), N({
18674
+ top: "66.666%",
18675
+ left: "0",
18676
+ right: "0",
18677
+ borderTop: "1px dashed var(--msr-color-ink-500, #64748b)"
18678
+ });
18679
+ let P = Object.entries({
18680
+ nw: {
18681
+ left: "0",
18682
+ top: "0"
18683
+ },
18684
+ n: {
18685
+ left: "50%",
18686
+ top: "0"
18687
+ },
18688
+ ne: {
18689
+ left: "100%",
18690
+ top: "0"
18691
+ },
18692
+ e: {
18693
+ left: "100%",
18694
+ top: "50%"
18695
+ },
18696
+ se: {
18697
+ left: "100%",
18698
+ top: "100%"
18699
+ },
18700
+ s: {
18701
+ left: "50%",
18702
+ top: "100%"
18703
+ },
18704
+ sw: {
18705
+ left: "0",
18706
+ top: "100%"
18707
+ },
18708
+ w: {
18709
+ left: "0",
18710
+ top: "50%"
18711
+ }
18712
+ }).map(([e, t]) => {
18713
+ let n = r.createElement("button");
18714
+ return n.type = "button", n.dataset.mesurerRecordingResize = e, n.setAttribute("aria-label", `Resize ${e}`), Ob(n, {
18715
+ position: "absolute",
18716
+ display: "none",
18717
+ left: t.left,
18718
+ top: t.top,
18719
+ width: "8px",
18720
+ height: "8px",
18721
+ padding: "0",
18722
+ border: "1px solid var(--msr-color-white, #fff)",
18723
+ "border-radius": "999px",
18724
+ background: "var(--msr-color-ink-900, #18181b)",
18725
+ "box-shadow": "0 0 0 1px rgb(0 0 0 / 25%)",
18726
+ transform: "translate(-50%, -50%)",
18727
+ cursor: e === "n" || e === "s" ? "ns-resize" : e === "e" || e === "w" ? "ew-resize" : e === "nw" || e === "se" ? "nwse-resize" : "nesw-resize",
18728
+ "pointer-events": "auto"
18729
+ }), g.append(n), n;
18730
+ }), F = r.createElement("section");
18731
+ F.dataset.mesurerRecordingStatus = "true", F.dataset.mesurerInspectorUi = "true", F.setAttribute("aria-label", "Screen recording"), Ob(F, {
18732
+ position: "fixed",
18733
+ display: "none",
18734
+ height: "34px",
18735
+ padding: "0 8px",
18736
+ "align-items": "center",
18737
+ gap: "8px",
18362
18738
  border: "0",
18363
- "border-radius": "999px",
18739
+ "border-radius": "9px",
18364
18740
  background: "var(--msr-surface-raised, #fff)",
18365
18741
  color: "var(--msr-content, #18181b)",
18366
18742
  "box-shadow": "var(--msr-shadow-floating, 0 8px 24px rgba(0,0,0,.14))",
18367
18743
  "font-family": "inherit",
18368
18744
  "font-size": "11px",
18369
- "font-variant-numeric": "tabular-nums",
18370
- cursor: "pointer",
18371
18745
  "pointer-events": "auto"
18372
- }), o.append(_);
18373
- let v = r.createElement("div");
18374
- v.dataset.mesurerRecordingError = "true", v.dataset.mesurerInspectorUi = "true", v.setAttribute("role", "status"), kb(v, {
18746
+ });
18747
+ let I = r.createElement("span");
18748
+ I.setAttribute("aria-hidden", "true"), Ob(I, {
18749
+ width: "6px",
18750
+ height: "6px",
18751
+ "border-radius": "999px",
18752
+ background: "var(--msr-danger-solid-bg, #dc2626)",
18753
+ "flex-shrink": "0"
18754
+ }), F.append(I);
18755
+ let L = r.createElement("span");
18756
+ L.dataset.mesurerRecordingTime = "true", L.textContent = "00:00", Ob(L, {
18757
+ color: "var(--msr-content, #18181b)",
18758
+ "font-family": "ui-monospace, SFMono-Regular, Menlo, monospace",
18759
+ "font-size": "11px",
18760
+ "font-variant-numeric": "tabular-nums"
18761
+ }), F.append(L);
18762
+ let R = r.createElement("button");
18763
+ R.type = "button", R.dataset.mesurerRecordingStop = "true", R.textContent = "Stop", R.setAttribute("aria-label", "Stop recording"), Ob(R, {
18764
+ height: "24px",
18765
+ padding: "0 8px",
18766
+ border: "0",
18767
+ "border-radius": "6px",
18768
+ background: "var(--msr-danger-solid-bg, #dc2626)",
18769
+ color: "var(--msr-danger-solid-text, #fff)",
18770
+ "font-family": "inherit",
18771
+ "font-size": "11px",
18772
+ "font-weight": "500",
18773
+ cursor: "pointer"
18774
+ }), F.append(R), o.append(F);
18775
+ let z = r.createElement("div");
18776
+ z.dataset.mesurerRecordingError = "true", z.dataset.mesurerInspectorUi = "true", z.setAttribute("role", "status"), Ob(z, {
18375
18777
  position: "fixed",
18376
18778
  display: "none",
18377
18779
  left: "8px",
@@ -18383,8 +18785,8 @@ var Kv = "mesurer.layout-guides", qv = "layout-guides:v1", Jv = "mesurer.layout-
18383
18785
  color: "#fff",
18384
18786
  "font-size": "11px",
18385
18787
  "pointer-events": "none"
18386
- }), o.append(v);
18387
- let y = {
18788
+ }), o.append(z);
18789
+ let B = {
18388
18790
  status: "idle",
18389
18791
  elapsed: 0,
18390
18792
  rect: null,
@@ -18392,28 +18794,28 @@ var Kv = "mesurer.layout-guides", qv = "layout-guides:v1", Jv = "mesurer.layout-
18392
18794
  width: null,
18393
18795
  height: null,
18394
18796
  error: null
18395
- }, b = /* @__PURE__ */ new Set(), x = null, S = null, C = null, w = null, T = null, E = null, D = 0, O = 0, k = 0, A = 0, j = 0, M = -1, N = !1, P = null, F = () => {
18396
- let e = Ob(y);
18397
- for (let t of b) t(e);
18398
- }, I = (e) => {
18399
- y = {
18400
- ...y,
18797
+ }, V = /* @__PURE__ */ new Set(), H = null, U = null, ee = null, te = null, ne = null, W = null, re = !1, ie = null, ae = null, oe = 0, se = 0, ce = 0, le = 0, G = 0, ue = -1, de = !1, fe = null, pe = () => {
18798
+ let e = Db(B);
18799
+ for (let t of V) t(e);
18800
+ }, me = (e) => {
18801
+ B = {
18802
+ ...B,
18401
18803
  ...e,
18402
- rect: e.rect === void 0 ? y.rect : Db(e.rect)
18403
- }, F();
18404
- }, L = () => y.status === "selecting" || y.status === "recording" || y.status === "exporting", R = () => {
18405
- if (E) return;
18804
+ rect: e.rect === void 0 ? B.rect : Eb(e.rect)
18805
+ }, pe();
18806
+ }, he = () => B.status === "selecting" || B.status === "recording" || B.status === "exporting", ge = () => {
18807
+ if (ae) return;
18406
18808
  let e = n.portalTarget.querySelector("[data-mesurer-toolbar='true']");
18407
- e && (E = {
18809
+ e && (ae = {
18408
18810
  element: e,
18409
18811
  value: e.style.getPropertyValue("visibility"),
18410
18812
  priority: e.style.getPropertyPriority("visibility")
18411
18813
  }, e.style.setProperty("visibility", "hidden", "important"));
18412
- }, z = () => {
18413
- if (!E) return;
18414
- let e = E;
18415
- E = null, e.value || e.priority ? e.element.style.setProperty("visibility", e.value, e.priority) : e.element.style.removeProperty("visibility");
18416
- }, B = (e, t) => {
18814
+ }, _e = () => {
18815
+ if (!ae) return;
18816
+ let e = ae;
18817
+ ae = null, e.value || e.priority ? e.element.style.setProperty("visibility", e.value, e.priority) : e.element.style.removeProperty("visibility");
18818
+ }, ve = (e, t) => {
18417
18819
  for (let n of [
18418
18820
  "left",
18419
18821
  "top",
@@ -18423,78 +18825,128 @@ var Kv = "mesurer.layout-guides", qv = "layout-guides:v1", Jv = "mesurer.layout-
18423
18825
  let r = t[n];
18424
18826
  r === void 0 ? e.style.removeProperty(n) : e.style.setProperty(n, `${r}px`);
18425
18827
  }
18426
- }, V = (e) => {
18828
+ }, ye = (e) => {
18829
+ let t = i.innerWidth, n = i.innerHeight, r = Math.min(t, Math.max(4, Math.round(e.width))), a = Math.min(n, Math.max(4, Math.round(e.height)));
18830
+ return {
18831
+ left: Math.min(Math.max(0, Math.round(e.left)), Math.max(0, t - r)),
18832
+ top: Math.min(Math.max(0, Math.round(e.top)), Math.max(0, n - a)),
18833
+ width: r,
18834
+ height: a
18835
+ };
18836
+ }, be = (e, t) => t.x >= e.left && t.x <= e.left + e.width && t.y >= e.top && t.y <= e.top + e.height, xe = (e) => {
18427
18837
  let t = i.innerWidth, n = i.innerHeight;
18428
18838
  if (!e || e.width <= 0 || e.height <= 0) {
18429
- B(p[0], {
18839
+ ve(h[0], {
18430
18840
  left: 0,
18431
18841
  top: 0,
18432
18842
  width: t,
18433
18843
  height: n
18434
18844
  });
18435
- for (let e of p.slice(1)) B(e, {
18845
+ for (let e of h.slice(1)) ve(e, {
18436
18846
  left: 0,
18437
18847
  top: 0,
18438
18848
  width: 0,
18439
18849
  height: 0
18440
18850
  });
18441
- m.style.display = "none", h.style.display = "none";
18851
+ g.style.display = "none", g.style.pointerEvents = "none", M.style.display = "none";
18852
+ for (let e of P) e.style.display = "none";
18853
+ _.style.display = "none", y.style.display = "none", v.textContent = "Drag to select a region · Esc to cancel";
18442
18854
  return;
18443
18855
  }
18444
- B(p[0], {
18856
+ if (ve(h[0], {
18445
18857
  left: 0,
18446
18858
  top: 0,
18447
18859
  width: t,
18448
18860
  height: e.top
18449
- }), B(p[1], {
18861
+ }), ve(h[1], {
18450
18862
  left: 0,
18451
18863
  top: e.top,
18452
18864
  width: e.left,
18453
18865
  height: e.height
18454
- }), B(p[2], {
18866
+ }), ve(h[2], {
18455
18867
  left: e.left + e.width,
18456
18868
  top: e.top,
18457
18869
  width: Math.max(0, t - e.left - e.width),
18458
18870
  height: e.height
18459
- }), B(p[3], {
18871
+ }), ve(h[3], {
18460
18872
  left: 0,
18461
18873
  top: e.top + e.height,
18462
18874
  width: t,
18463
18875
  height: Math.max(0, n - e.top - e.height)
18464
- }), m.style.display = "block", B(m, e), h.style.display = "block", h.textContent = `${Math.round(e.width)} × ${Math.round(e.height)}`, B(h, {
18465
- left: e.left + e.width / 2,
18466
- top: Math.min(n - 22, e.top + e.height + 6)
18467
- });
18468
- }, H = () => {
18469
- T = null, V(null), f.style.display = "none", o.style.pointerEvents = "none";
18470
- }, U = (e) => {
18471
- let t = i.innerHeight, n = i.innerWidth, r = Math.max(112, _.offsetWidth || 112), a = null;
18876
+ }), g.style.display = "block", ve(g, e), re) {
18877
+ g.style.pointerEvents = "auto", g.style.cursor = "move", M.style.display = "block";
18878
+ for (let e of P) e.style.display = "block";
18879
+ _.style.display = "none", C.value = String(Math.round(e.width)), w.value = String(Math.round(e.height)), O.value = String(Math.round(e.left)), k.value = String(Math.round(e.top)), C.max = String(t), w.max = String(n), O.max = String(Math.max(0, t - e.width)), k.max = String(Math.max(0, n - e.height));
18880
+ let r = Math.min(Math.max(118, e.left + e.width / 2), Math.max(118, t - 110 - 8)), i = e.top + e.height + 12, a = i + 112 <= n ? i : Math.max(8, e.top - 112);
18881
+ y.style.left = `${r}px`, y.style.top = `${a}px`, y.style.display = "block", v.textContent = "Adjust region · Enter to start · Esc to cancel";
18882
+ } else {
18883
+ g.style.pointerEvents = "none", g.style.cursor = "", M.style.display = "none";
18884
+ for (let e of P) e.style.display = "none";
18885
+ y.style.display = "none", _.style.display = "block", _.textContent = `${Math.round(e.width)} × ${Math.round(e.height)}`, ve(_, {
18886
+ left: e.left + e.width / 2,
18887
+ top: Math.min(n - 22, e.top + e.height + 6)
18888
+ }), v.textContent = "Drag to select a region · Esc to cancel";
18889
+ }
18890
+ }, Se = (e) => {
18891
+ let t = ye(e);
18892
+ W = t, me({ rect: t }), xe(t);
18893
+ }, Ce = (e) => {
18894
+ let t = i.innerWidth, n = i.innerHeight;
18895
+ ve(h[0], {
18896
+ left: 0,
18897
+ top: 0,
18898
+ width: t,
18899
+ height: e.top
18900
+ }), ve(h[1], {
18901
+ left: 0,
18902
+ top: e.top,
18903
+ width: e.left,
18904
+ height: e.height
18905
+ }), ve(h[2], {
18906
+ left: e.left + e.width,
18907
+ top: e.top,
18908
+ width: Math.max(0, t - e.left - e.width),
18909
+ height: e.height
18910
+ }), ve(h[3], {
18911
+ left: 0,
18912
+ top: e.top + e.height,
18913
+ width: t,
18914
+ height: Math.max(0, n - e.top - e.height)
18915
+ }), g.style.display = "none", _.style.display = "none", y.style.display = "none", M.style.display = "none", v.style.display = "none";
18916
+ for (let e of P) e.style.display = "none";
18917
+ m.style.display = "block", m.style.pointerEvents = "none", m.style.cursor = "default";
18918
+ }, we = () => {
18919
+ c(!1), m.style.display = "none", m.style.pointerEvents = "auto", m.style.cursor = "crosshair", v.style.removeProperty("display");
18920
+ }, Te = () => {
18921
+ ne = null, W = null, re = !1, ie = null, xe(null), m.style.display = "none", m.style.cursor = "crosshair", o.style.pointerEvents = "none";
18922
+ }, Ee = (e) => {
18923
+ let t = i.innerHeight, n = i.innerWidth, r = Math.max(112, F.offsetWidth || 112), a = null;
18472
18924
  if (e.top >= 46 ? a = e.top - 30 - 8 : t - (e.top + e.height) >= 46 && (a = e.top + e.height + 8), a === null) {
18473
- _.style.display = "none";
18925
+ F.style.display = "none";
18474
18926
  return;
18475
18927
  }
18476
18928
  let o = Math.min(n - r - 8, Math.max(8, e.left + e.width / 2 - r / 2));
18477
- _.style.left = `${o}px`, _.style.top = `${a}px`, _.style.display = "block";
18478
- }, ee = () => {
18479
- _.style.display = "none";
18480
- }, te = (e) => {
18481
- k && i.clearTimeout(k);
18929
+ F.style.left = `${o}px`, F.style.top = `${a}px`, F.style.display = "flex";
18930
+ }, De = () => {
18931
+ F.style.display = "none";
18932
+ }, Oe = (e) => {
18933
+ ce && i.clearTimeout(ce);
18482
18934
  let t = e instanceof Error ? e.message : "Could not record this region.";
18483
- v.textContent = t, v.style.display = "block", k = i.setTimeout(() => {
18484
- k = 0, v.style.display = "none";
18485
- }, Tb);
18486
- }, ne = async (e) => {
18487
- D && i.cancelAnimationFrame(D), D = 0, O && i.clearTimeout(O), O = 0;
18488
- let t = w;
18489
- if (w = null, t) try {
18935
+ z.textContent = t, z.style.display = "block", ce = i.setTimeout(() => {
18936
+ ce = 0, z.style.display = "none";
18937
+ }, wb);
18938
+ }, ke = async (e) => {
18939
+ oe && i.cancelAnimationFrame(oe), oe = 0, se && i.clearTimeout(se), se = 0;
18940
+ let t = te;
18941
+ if (te = null, t) try {
18490
18942
  await t;
18491
18943
  } catch {}
18492
- let n = C;
18493
- C = null, e && await n?.cancel();
18494
- let r = S;
18495
- S = null, r && Vy(r), ee();
18496
- }, W = () => {
18497
- x = null, ae.dismiss(), I({
18944
+ let n = ee;
18945
+ ee = null, e && await n?.cancel();
18946
+ let r = U;
18947
+ U = null, r && Vy(r), we(), De();
18948
+ }, Ae = () => {
18949
+ H = null, Ne.dismiss(), me({
18498
18950
  status: "idle",
18499
18951
  elapsed: 0,
18500
18952
  rect: null,
@@ -18503,14 +18955,14 @@ var Kv = "mesurer.layout-guides", qv = "layout-guides:v1", Jv = "mesurer.layout-
18503
18955
  height: null,
18504
18956
  error: null
18505
18957
  }), t.hook.emit("recording:discard", {});
18506
- }, re = async () => {
18507
- let e = x;
18508
- return Zy(e?.width ?? Math.max(2, Math.round(i.innerWidth)), e?.height ?? Math.max(2, Math.round(i.innerHeight)), s);
18509
- }, ie = async (e = {}) => {
18510
- let n = x;
18958
+ }, je = async () => {
18959
+ let e = H;
18960
+ return Zy(e?.width ?? Math.max(2, Math.round(i.innerWidth)), e?.height ?? Math.max(2, Math.round(i.innerHeight)), l);
18961
+ }, Me = async (e = {}) => {
18962
+ let n = H;
18511
18963
  if (!n) throw Error("No recording is ready to export.");
18512
- let r = y.status;
18513
- I({
18964
+ let r = B.status;
18965
+ me({
18514
18966
  status: "exporting",
18515
18967
  error: null
18516
18968
  });
@@ -18519,7 +18971,7 @@ var Kv = "mesurer.layout-guides", qv = "layout-guides:v1", Jv = "mesurer.layout-
18519
18971
  ...r,
18520
18972
  filename: nb(r.format)
18521
18973
  };
18522
- return I({
18974
+ return me({
18523
18975
  status: "ready",
18524
18976
  duration: n.duration,
18525
18977
  width: n.width,
@@ -18534,29 +18986,29 @@ var Kv = "mesurer.layout-guides", qv = "layout-guides:v1", Jv = "mesurer.layout-
18534
18986
  bytes: i.blob.size
18535
18987
  }), i;
18536
18988
  } catch (e) {
18537
- throw I({
18989
+ throw me({
18538
18990
  status: r === "ready" ? "ready" : "error",
18539
18991
  error: e instanceof Error ? e.message : "Could not export the recording."
18540
18992
  }), e;
18541
18993
  }
18542
- }, ae = mb({
18994
+ }, Ne = pb({
18543
18995
  ownerDocument: r,
18544
18996
  ownerWindow: i,
18545
18997
  root: o,
18546
- formats: async () => re(),
18547
- onDiscard: W,
18548
- onExport: ie
18549
- }), oe = async () => {
18550
- if (P) return P;
18551
- if (y.status !== "recording" || !C || !S) throw Error("No recording is active.");
18552
- let e = A, n = C, r = S, a = Db(y.rect);
18998
+ formats: async () => je(),
18999
+ onDiscard: Ae,
19000
+ onExport: Me
19001
+ }), Pe = async () => {
19002
+ if (fe) return fe;
19003
+ if (B.status !== "recording" || !ee || !U) throw Error("No recording is active.");
19004
+ let e = le, n = ee, r = U, a = Eb(B.rect);
18553
19005
  if (!a) throw Error("Recording region is unavailable.");
18554
- return P = (async () => {
18555
- D && i.cancelAnimationFrame(D), D = 0, O && i.clearTimeout(O), O = 0;
18556
- let s = w;
18557
- w = null, s && await s;
19006
+ return fe = (async () => {
19007
+ oe && i.cancelAnimationFrame(oe), oe = 0, se && i.clearTimeout(se), se = 0;
19008
+ let s = te;
19009
+ te = null, s && await s;
18558
19010
  let c = await n.finalize();
18559
- if (C = null, S = null, Vy(r), A !== e || N) throw Error("Recording was cancelled.");
19011
+ if (ee = null, U = null, Vy(r), le !== e || de) throw Error("Recording was cancelled.");
18560
19012
  let l = await eb(c), u = {
18561
19013
  blob: c,
18562
19014
  format: "webm",
@@ -18565,14 +19017,14 @@ var Kv = "mesurer.layout-guides", qv = "layout-guides:v1", Jv = "mesurer.layout-
18565
19017
  height: l.height,
18566
19018
  createdAt: Date.now()
18567
19019
  };
18568
- return x = u, ee(), z(), o.style.pointerEvents = "none", I({
19020
+ return H = u, we(), De(), _e(), o.style.pointerEvents = "none", me({
18569
19021
  status: "ready",
18570
19022
  elapsed: l.duration,
18571
19023
  duration: l.duration,
18572
19024
  width: l.width,
18573
19025
  height: l.height,
18574
19026
  error: null
18575
- }), ae.show(u), await t.hook.emit("recording:ready", {
19027
+ }), Ne.show(u), await t.hook.emit("recording:ready", {
18576
19028
  rect: a,
18577
19029
  duration: l.duration,
18578
19030
  width: l.width,
@@ -18580,45 +19032,45 @@ var Kv = "mesurer.layout-guides", qv = "layout-guides:v1", Jv = "mesurer.layout-
18580
19032
  bytes: c.size
18581
19033
  }), u;
18582
19034
  })().catch(async (t) => {
18583
- if (await ne(!0), z(), A === e && !N) {
19035
+ if (await ke(!0), _e(), le === e && !de) {
18584
19036
  let e = t instanceof Error ? t.message : "Could not finish the recording.";
18585
- I({
19037
+ me({
18586
19038
  status: "error",
18587
19039
  error: e
18588
- }), te(t);
19040
+ }), Oe(t);
18589
19041
  }
18590
19042
  throw t;
18591
19043
  }).finally(() => {
18592
- P = null;
18593
- }), P;
18594
- }, se = (e, t, n) => {
18595
- let r = 1 / s, a = (o) => {
18596
- if (N || A !== n || y.status !== "recording" || C !== t || S !== e) return;
18597
- let s = Math.max(0, (o - j) / 1e3);
18598
- I({ elapsed: s }), _.textContent = `● ${Math.floor(s / 60)}:${String(Math.floor(s % 60)).padStart(2, "0")} Stop`;
19044
+ fe = null;
19045
+ }), fe;
19046
+ }, Fe = (e, t, n) => {
19047
+ let r = 1 / l, a = (o) => {
19048
+ if (de || le !== n || B.status !== "recording" || ee !== t || U !== e) return;
19049
+ let s = Math.max(0, (o - G) / 1e3);
19050
+ me({ elapsed: s }), L.textContent = `${String(Math.floor(s / 60)).padStart(2, "0")}:${String(Math.floor(s % 60)).padStart(2, "0")}`;
18599
19051
  let c = s;
18600
- !w && c - M >= r * .8 && (By(e, y.rect ?? {
19052
+ !te && c - ue >= r * .8 && (By(e, B.rect ?? {
18601
19053
  left: 0,
18602
19054
  top: 0,
18603
19055
  width: i.innerWidth,
18604
19056
  height: i.innerHeight
18605
- }, Ty(i)), M = c, w = t.addFrame(c, r).catch((e) => {
18606
- throw A === n && !N && ne(!0).then(() => {
18607
- z();
19057
+ }, Ty(i)), ue = c, te = t.addFrame(c, r).catch((e) => {
19058
+ throw le === n && !de && ke(!0).then(() => {
19059
+ _e();
18608
19060
  let t = e instanceof Error ? e.message : "MediaBunny could not encode the recording.";
18609
- I({
19061
+ me({
18610
19062
  status: "error",
18611
19063
  error: t
18612
- }), te(e);
19064
+ }), Oe(e);
18613
19065
  }), e;
18614
19066
  }).finally(() => {
18615
- w = null;
18616
- })), D = i.requestAnimationFrame(a);
19067
+ te = null;
19068
+ })), oe = i.requestAnimationFrame(a);
18617
19069
  };
18618
- D = i.requestAnimationFrame(a);
18619
- }, ce = async (e) => {
18620
- let n = ++A;
18621
- ae.dismiss(), x = null, H(), R(), I({
19070
+ oe = i.requestAnimationFrame(a);
19071
+ }, Ie = async (e) => {
19072
+ let n = ++le;
19073
+ Ne.dismiss(), H = null, Te(), _e(), me({
18622
19074
  status: "selecting",
18623
19075
  elapsed: 0,
18624
19076
  rect: e,
@@ -18629,46 +19081,46 @@ var Kv = "mesurer.layout-guides", qv = "layout-guides:v1", Jv = "mesurer.layout-
18629
19081
  });
18630
19082
  try {
18631
19083
  let a = await zy(r, i, e);
18632
- if (N || A !== n) {
19084
+ if (de || le !== n) {
18633
19085
  Vy(a);
18634
19086
  return;
18635
19087
  }
18636
- let u = await $y(a.canvas, {
19088
+ let s = await $y(a.canvas, {
18637
19089
  format: "webm",
18638
- frameRate: s,
18639
- quality: l
19090
+ frameRate: l,
19091
+ quality: d
18640
19092
  });
18641
- if (N || A !== n) {
18642
- await u.cancel(), Vy(a);
19093
+ if (de || le !== n) {
19094
+ await s.cancel(), Vy(a);
18643
19095
  return;
18644
19096
  }
18645
- if (S = a, C = u, j = i.performance.now(), M = 0, By(a, e, Ty(i)), await u.addFrame(0, 1 / s), N || A !== n) {
18646
- await ne(!0);
19097
+ if (U = a, ee = s, G = i.performance.now(), ue = 0, By(a, e, Ty(i)), await s.addFrame(0, 1 / l), de || le !== n) {
19098
+ await ke(!0);
18647
19099
  return;
18648
19100
  }
18649
- I({
19101
+ me({
18650
19102
  status: "recording",
18651
19103
  elapsed: 0
18652
- }), o.style.pointerEvents = "auto", _.textContent = "● 0:00 Stop", U(e), se(a, u, n), a.track.addEventListener("ended", () => {
18653
- A === n && y.status === "recording" && oe().catch(() => void 0);
18654
- }, { once: !0 }), O = i.setTimeout(() => {
18655
- A === n && y.status === "recording" && oe().catch(() => void 0);
18656
- }, c * 1e3), await t.hook.emit("recording:start", {
19104
+ }), o.style.pointerEvents = "none", c(!0), Ce(e), L.textContent = "00:00", Ee(e), Fe(a, s, n), a.track.addEventListener("ended", () => {
19105
+ le === n && B.status === "recording" && Pe().catch(() => void 0);
19106
+ }, { once: !0 }), se = i.setTimeout(() => {
19107
+ le === n && B.status === "recording" && Pe().catch(() => void 0);
19108
+ }, u * 1e3), await t.hook.emit("recording:start", {
18657
19109
  rect: { ...e },
18658
- frameRate: s,
18659
- maxDurationSeconds: c
19110
+ frameRate: l,
19111
+ maxDurationSeconds: u
18660
19112
  });
18661
19113
  } catch (t) {
18662
- if (await ne(!0), z(), A !== n || N) return;
19114
+ if (await ke(!0), _e(), le !== n || de) return;
18663
19115
  let r = t instanceof DOMException && t.name === "AbortError", i = r ? null : t instanceof Error ? t.message : "Could not start the recording.";
18664
- throw I({
19116
+ throw me({
18665
19117
  status: r ? "idle" : "error",
18666
19118
  rect: r ? null : e,
18667
19119
  error: i
18668
- }), r || te(t), t;
19120
+ }), r || Oe(t), t;
18669
19121
  }
18670
- }, le = () => {
18671
- y.status !== "selecting" && (++A, ae.dismiss(), x = null, R(), V(null), f.style.display = "block", o.style.pointerEvents = "auto", I({
19122
+ }, Le = () => {
19123
+ B.status !== "selecting" && (++le, Ne.dismiss(), H = null, W = null, re = !1, ie = null, ge(), xe(null), m.style.display = "block", m.style.pointerEvents = "auto", v.style.removeProperty("display"), o.style.pointerEvents = "auto", me({
18672
19124
  status: "selecting",
18673
19125
  elapsed: 0,
18674
19126
  rect: null,
@@ -18677,23 +19129,23 @@ var Kv = "mesurer.layout-guides", qv = "layout-guides:v1", Jv = "mesurer.layout-
18677
19129
  height: null,
18678
19130
  error: null
18679
19131
  }));
18680
- }, G = async (e) => {
18681
- if (y.status === "recording") {
18682
- await oe();
19132
+ }, Re = async (e) => {
19133
+ if (B.status === "recording") {
19134
+ await Pe();
18683
19135
  return;
18684
19136
  }
18685
- if (y.status === "selecting") {
18686
- await ue();
19137
+ if (B.status === "selecting") {
19138
+ await ze();
18687
19139
  return;
18688
19140
  }
18689
19141
  if (!e) {
18690
- le();
19142
+ Le();
18691
19143
  return;
18692
19144
  }
18693
19145
  if (e.width < 4 || e.height < 4) throw Error("Recording selection must be at least 4px by 4px.");
18694
- await ce(e);
18695
- }, ue = async () => {
18696
- ++A, H(), await ne(!0), z(), y.status !== "ready" && I({
19146
+ await Ie(e);
19147
+ }, ze = async () => {
19148
+ ++le, Te(), await ke(!0), _e(), B.status !== "ready" && me({
18697
19149
  status: "idle",
18698
19150
  elapsed: 0,
18699
19151
  rect: null,
@@ -18702,26 +19154,64 @@ var Kv = "mesurer.layout-guides", qv = "layout-guides:v1", Jv = "mesurer.layout-
18702
19154
  height: null,
18703
19155
  error: null
18704
19156
  });
18705
- }, de = (e) => {
18706
- y.status === "selecting" && e.button === 0 && (e.preventDefault(), e.stopPropagation(), T = {
19157
+ }, Be = (e, t, n) => {
19158
+ let r = W;
19159
+ !re || !r || e.button !== 0 || (e.preventDefault(), e.stopPropagation(), ie = {
19160
+ kind: t,
19161
+ handle: n,
19162
+ pointerId: e.pointerId,
19163
+ startX: e.clientX,
19164
+ startY: e.clientY,
19165
+ rect: { ...r }
19166
+ }, m.setPointerCapture?.(e.pointerId));
19167
+ }, Ve = (e) => {
19168
+ B.status === "selecting" && e.button === 0 && (re && W && be(W, {
18707
19169
  x: e.clientX,
18708
19170
  y: e.clientY
18709
- }, V(qa(T, T, {
18710
- width: i.innerWidth,
18711
- height: i.innerHeight
18712
- })), f.setPointerCapture?.(e.pointerId));
18713
- }, fe = (e) => {
18714
- y.status !== "selecting" || !T || V(qa(T, {
19171
+ }) || (e.preventDefault(), e.stopPropagation(), re = !1, W = null, me({ rect: null }), m.style.cursor = "crosshair", ne = {
18715
19172
  x: e.clientX,
18716
19173
  y: e.clientY
18717
- }, {
19174
+ }, xe(qa(ne, ne, {
18718
19175
  width: i.innerWidth,
18719
19176
  height: i.innerHeight
18720
- }));
18721
- }, pe = (e) => {
18722
- let t = T;
18723
- if (T = null, y.status !== "selecting" || !t) return;
18724
- f.hasPointerCapture?.(e.pointerId) && f.releasePointerCapture(e.pointerId);
19177
+ })), m.setPointerCapture?.(e.pointerId)));
19178
+ }, He = (e) => {
19179
+ if (B.status === "selecting") {
19180
+ if (ie) {
19181
+ let t = ie, n = e.clientX - t.startX, r = e.clientY - t.startY, a = i.innerWidth, o = i.innerHeight;
19182
+ if (t.kind === "move") {
19183
+ Se({
19184
+ ...t.rect,
19185
+ left: t.rect.left + n,
19186
+ top: t.rect.top + r
19187
+ });
19188
+ return;
19189
+ }
19190
+ let s = t.handle ?? "", c = t.rect.left, l = t.rect.top, u = t.rect.left + t.rect.width, d = t.rect.top + t.rect.height;
19191
+ s.includes("w") && (c = Math.min(u - 4, Math.max(0, t.rect.left + n))), s.includes("e") && (u = Math.max(c + 4, Math.min(a, t.rect.left + t.rect.width + n))), s.includes("n") && (l = Math.min(d - 4, Math.max(0, t.rect.top + r))), s.includes("s") && (d = Math.max(l + 4, Math.min(o, t.rect.top + t.rect.height + r))), Se({
19192
+ left: c,
19193
+ top: l,
19194
+ width: u - c,
19195
+ height: d - l
19196
+ });
19197
+ return;
19198
+ }
19199
+ ne && xe(qa(ne, {
19200
+ x: e.clientX,
19201
+ y: e.clientY
19202
+ }, {
19203
+ width: i.innerWidth,
19204
+ height: i.innerHeight
19205
+ }));
19206
+ }
19207
+ }, Ue = (e) => {
19208
+ if (ie) {
19209
+ ie = null, m.hasPointerCapture?.(e.pointerId) && m.releasePointerCapture(e.pointerId), W && xe(W);
19210
+ return;
19211
+ }
19212
+ let t = ne;
19213
+ if (ne = null, B.status !== "selecting" || !t) return;
19214
+ m.hasPointerCapture?.(e.pointerId) && m.releasePointerCapture(e.pointerId);
18725
19215
  let n = qa(t, {
18726
19216
  x: e.clientX,
18727
19217
  y: e.clientY
@@ -18730,66 +19220,91 @@ var Kv = "mesurer.layout-guides", qv = "layout-guides:v1", Jv = "mesurer.layout-
18730
19220
  height: i.innerHeight
18731
19221
  });
18732
19222
  if (n.width < 4 || n.height < 4) {
18733
- V(null);
19223
+ W = null, re = !1, me({ rect: null }), xe(null);
19224
+ return;
19225
+ }
19226
+ W = ye(n), re = !0, m.style.cursor = "default", me({ rect: W }), xe(W);
19227
+ }, We = (e) => {
19228
+ ne = null, ie = null, m.hasPointerCapture?.(e.pointerId) && m.releasePointerCapture(e.pointerId), xe(W && re ? W : null);
19229
+ }, Ge = (e) => {
19230
+ if (e.key === "Enter" && B.status === "selecting" && re && W) {
19231
+ e.preventDefault(), e.stopImmediatePropagation(), Ie(W).catch(() => void 0);
18734
19232
  return;
18735
19233
  }
18736
- ce(n).catch(() => void 0);
18737
- }, me = (e) => {
18738
- T = null, f.hasPointerCapture?.(e.pointerId) && f.releasePointerCapture(e.pointerId), V(null);
18739
- }, he = (e) => {
18740
19234
  if (e.key === "Escape") {
18741
- if (y.status === "selecting") {
18742
- e.preventDefault(), e.stopImmediatePropagation(), ue();
19235
+ if (B.status === "selecting") {
19236
+ e.preventDefault(), e.stopImmediatePropagation(), ze();
18743
19237
  return;
18744
19238
  }
18745
- y.status === "recording" && (e.preventDefault(), e.stopImmediatePropagation(), oe().catch(() => void 0));
19239
+ B.status === "recording" && (e.preventDefault(), e.stopImmediatePropagation(), Pe().catch(() => void 0));
18746
19240
  }
18747
19241
  };
18748
- f.addEventListener("pointerdown", de), f.addEventListener("pointermove", fe), f.addEventListener("pointerup", pe), f.addEventListener("pointercancel", me), i.addEventListener("keydown", he, !0), _.addEventListener("click", () => {
18749
- y.status === "recording" && oe().catch(() => void 0);
19242
+ m.addEventListener("pointerdown", Ve), m.addEventListener("pointermove", He), m.addEventListener("pointerup", Ue), m.addEventListener("pointercancel", We), i.addEventListener("keydown", Ge, !0), g.addEventListener("pointerdown", (e) => {
19243
+ let t = e.target;
19244
+ t instanceof Element && t.closest("[data-mesurer-recording-resize]") || Be(e, "move");
19245
+ });
19246
+ for (let e of P) e.addEventListener("pointerdown", (t) => {
19247
+ Be(t, "resize", e.dataset.mesurerRecordingResize);
19248
+ });
19249
+ y.addEventListener("pointerdown", (e) => {
19250
+ e.stopPropagation();
19251
+ }), y.addEventListener("click", (e) => {
19252
+ e.stopPropagation();
19253
+ });
19254
+ let Ke = (e, t) => {
19255
+ let n = W, r = Number(e.value);
19256
+ !n || !Number.isFinite(r) || Se({
19257
+ ...n,
19258
+ [t]: r
19259
+ });
19260
+ };
19261
+ C.addEventListener("change", () => Ke(C, "width")), w.addEventListener("change", () => Ke(w, "height")), O.addEventListener("change", () => Ke(O, "left")), k.addEventListener("change", () => Ke(k, "top")), j.addEventListener("click", () => {
19262
+ B.status === "selecting" && re && W && Ie(W).catch(() => void 0);
19263
+ }), R.addEventListener("click", () => {
19264
+ B.status === "recording" && Pe().catch(() => void 0);
18750
19265
  });
18751
- let ge = {
18752
- snapshot: () => Ob(y),
19266
+ let qe = {
19267
+ snapshot: () => Db(B),
18753
19268
  subscribe(e) {
18754
- return b.add(e), () => b.delete(e);
19269
+ return V.add(e), () => V.delete(e);
18755
19270
  },
18756
- formats: re,
18757
- start: G,
18758
- stop: oe,
18759
- cancel: ue,
18760
- discard: W,
18761
- export: ie
19271
+ formats: je,
19272
+ start: Re,
19273
+ stop: Pe,
19274
+ cancel: ze,
19275
+ discard: Ae,
19276
+ export: Me
18762
19277
  };
18763
19278
  t.tool.register({
18764
19279
  id: "recording",
18765
19280
  label: "Record",
18766
19281
  shortcut: "Shift+R",
18767
19282
  order: 72,
18768
- command: yb,
19283
+ command: vb,
18769
19284
  toolbarMode: "select",
18770
- icon: Eb,
18771
- active: L,
18772
- hidden: () => !u().toolEnabled,
19285
+ icon: Tb,
19286
+ active: he,
19287
+ hidden: () => !f().toolEnabled,
18773
19288
  menu: {
18774
19289
  label: "Recording options",
18775
19290
  items: [
18776
19291
  {
18777
19292
  id: "new",
18778
19293
  label: "New recording",
18779
- disabled: () => y.status === "recording" || y.status === "exporting",
18780
- run: () => G()
19294
+ disabled: () => B.status === "recording" || B.status === "exporting",
19295
+ run: () => Re()
18781
19296
  },
18782
19297
  {
18783
19298
  id: "stop",
18784
19299
  label: "Stop recording",
18785
- disabled: () => y.status !== "recording",
18786
- run: () => oe().then(() => void 0)
19300
+ disabled: () => B.status !== "recording",
19301
+ run: () => Pe().then(() => void 0)
18787
19302
  },
18788
19303
  {
18789
19304
  id: "discard",
18790
19305
  label: "Discard clip",
18791
- disabled: () => x === null,
18792
- run: W
19306
+ disabled: () => H === null,
19307
+ run: Ae
18793
19308
  }
18794
19309
  ]
18795
19310
  }
@@ -18802,26 +19317,26 @@ var Kv = "mesurer.layout-guides", qv = "layout-guides:v1", Jv = "mesurer.layout-
18802
19317
  id: "tool",
18803
19318
  label: "Recording tool",
18804
19319
  description: "Show selected-region video recording in the Select toolbar.",
18805
- value: () => u().toolEnabled,
19320
+ value: () => f().toolEnabled,
18806
19321
  set: async (e) => {
18807
- d({ toolEnabled: e }), !e && L() && await ue();
19322
+ p({ toolEnabled: e }), !e && he() && await ze();
18808
19323
  }
18809
19324
  }]
18810
- }), t.command.register(yb, async () => (await G(), Nb(y))), t.command.register(bb, async () => Fb(await oe())), t.command.register(xb, () => (W(), Nb(y))), t.command.register(Sb, async (e) => {
18811
- let t = await ie(Mb(e));
18812
- return Ib(t, r, i), Pb(t);
18813
- }), t.service.provide(gb, ge), t.lifecycle.onDispose(() => {
18814
- N = !0, ++A, b.clear(), f.removeEventListener("pointerdown", de), f.removeEventListener("pointermove", fe), f.removeEventListener("pointerup", pe), f.removeEventListener("pointercancel", me), i.removeEventListener("keydown", he, !0), k && i.clearTimeout(k), ae.dispose(), H(), z(), ne(!0), a.dispose();
19325
+ }), t.command.register(vb, async () => (await Re(), Mb(B))), t.command.register(yb, async () => Pb(await Pe())), t.command.register(bb, () => (Ae(), Mb(B))), t.command.register(xb, async (e) => {
19326
+ let t = await Me(jb(e));
19327
+ return Fb(t, r, i), Nb(t);
19328
+ }), t.service.provide(hb, qe), t.lifecycle.onDispose(() => {
19329
+ de = !0, ++le, V.clear(), m.removeEventListener("pointerdown", Ve), m.removeEventListener("pointermove", He), m.removeEventListener("pointerup", Ue), m.removeEventListener("pointercancel", We), i.removeEventListener("keydown", Ge, !0), ce && i.clearTimeout(ce), Ne.dispose(), Te(), _e(), ke(!0), a.dispose();
18815
19330
  });
18816
19331
  }
18817
- }), Rb = 144, zb = 96, Bb = 8, Vb = 4, Hb = 1800, Ub = (e, t) => {
19332
+ }), Lb = 144, Rb = 96, zb = 8, Bb = 4, Vb = 1800, Hb = (e, t) => {
18818
19333
  for (let [n, r] of Object.entries(t)) e.style.setProperty(n, r);
18819
- }, Wb = (e, t) => ({
18820
- left: Math.min(Math.max(Bb, e.left), Math.max(Bb, t.innerWidth - Rb - Bb)),
18821
- top: Math.min(Math.max(Bb, e.top), Math.max(Bb, t.innerHeight - zb - Bb))
18822
- }), Gb = (e, t) => {
19334
+ }, Ub = (e, t) => ({
19335
+ left: Math.min(Math.max(zb, e.left), Math.max(zb, t.innerWidth - Lb - zb)),
19336
+ top: Math.min(Math.max(zb, e.top), Math.max(zb, t.innerHeight - Rb - zb))
19337
+ }), Wb = (e, t) => {
18823
19338
  let n = e.createElement("button");
18824
- return n.type = "button", n.textContent = t, Ub(n, {
19339
+ return n.type = "button", n.textContent = t, Hb(n, {
18825
19340
  height: "32px",
18826
19341
  padding: "0 12px",
18827
19342
  border: "1px solid rgb(255 255 255 / 18%)",
@@ -18833,11 +19348,11 @@ var Kv = "mesurer.layout-guides", qv = "layout-guides:v1", Jv = "mesurer.layout-
18833
19348
  "font-weight": "500",
18834
19349
  cursor: "pointer"
18835
19350
  }), n;
18836
- }, Kb = ({ 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", qb = (e) => e !== null && (e.nodeType === 1 || e.nodeType === 11), Jb = ({ ownerDocument: e, ownerWindow: t, root: n, previewDurationMs: r }) => {
19351
+ }, Gb = ({ 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", Kb = (e) => e !== null && (e.nodeType === 1 || e.nodeType === 11), qb = ({ ownerDocument: e, ownerWindow: t, root: n, previewDurationMs: r }) => {
18837
19352
  let i = n.closest("[data-mesurer-root='true']")?.parentNode ?? n.parentNode;
18838
- if (!qb(i)) throw Error("Screenshot preview requires a mounted Mesurer host.");
19353
+ if (!Kb(i)) throw Error("Screenshot preview requires a mounted Mesurer host.");
18839
19354
  let a = e.createElement("div");
18840
- a.dataset.mesurerInspectorUi = "true", a.dataset.mesurerScreenshotInteractive = "true", Ub(a, {
19355
+ a.dataset.mesurerInspectorUi = "true", a.dataset.mesurerScreenshotInteractive = "true", Hb(a, {
18841
19356
  position: "fixed",
18842
19357
  left: "0",
18843
19358
  top: "0",
@@ -18849,12 +19364,12 @@ var Kv = "mesurer.layout-guides", qv = "layout-guides:v1", Jv = "mesurer.layout-
18849
19364
  "font-family": "ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif"
18850
19365
  }), i.append(a);
18851
19366
  let o = e.createElement("div");
18852
- o.dataset.mesurerScreenshotPreview = "true", o.setAttribute("role", "button"), o.setAttribute("aria-label", "Open captured screenshot"), o.tabIndex = 0, Ub(o, {
19367
+ o.dataset.mesurerScreenshotPreview = "true", o.setAttribute("role", "button"), o.setAttribute("aria-label", "Open captured screenshot"), o.tabIndex = 0, Hb(o, {
18853
19368
  position: "fixed",
18854
19369
  display: "none",
18855
19370
  "z-index": "96",
18856
- width: `${Rb}px`,
18857
- height: `${zb}px`,
19371
+ width: `${Lb}px`,
19372
+ height: `${Rb}px`,
18858
19373
  "box-sizing": "border-box",
18859
19374
  overflow: "hidden",
18860
19375
  "border-radius": "10px",
@@ -18867,7 +19382,7 @@ var Kv = "mesurer.layout-guides", qv = "layout-guides:v1", Jv = "mesurer.layout-
18867
19382
  "touch-action": "none"
18868
19383
  });
18869
19384
  let s = e.createElement("img");
18870
- s.dataset.mesurerScreenshotPreviewImage = "true", s.alt = "Captured screenshot", s.draggable = !1, s.title = "Click to open · Right-click for browser image actions", Ub(s, {
19385
+ s.dataset.mesurerScreenshotPreviewImage = "true", s.alt = "Captured screenshot", s.draggable = !1, s.title = "Click to open · Right-click for browser image actions", Hb(s, {
18871
19386
  display: "block",
18872
19387
  width: "100%",
18873
19388
  height: "100%",
@@ -18875,7 +19390,7 @@ var Kv = "mesurer.layout-guides", qv = "layout-guides:v1", Jv = "mesurer.layout-
18875
19390
  "background-color": "white"
18876
19391
  }), o.append(s);
18877
19392
  let c = e.createElement("button");
18878
- c.dataset.mesurerScreenshotPreviewDismiss = "true", c.type = "button", c.setAttribute("aria-label", "Dismiss screenshot preview"), c.title = "Dismiss", Ub(c, {
19393
+ c.dataset.mesurerScreenshotPreviewDismiss = "true", c.type = "button", c.setAttribute("aria-label", "Dismiss screenshot preview"), c.title = "Dismiss", Hb(c, {
18879
19394
  position: "absolute",
18880
19395
  top: "8px",
18881
19396
  right: "8px",
@@ -18901,7 +19416,7 @@ var Kv = "mesurer.layout-guides", qv = "layout-guides:v1", Jv = "mesurer.layout-
18901
19416
  let u = e.createElementNS("http://www.w3.org/2000/svg", "path");
18902
19417
  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);
18903
19418
  let d = e.createElement("div");
18904
- d.dataset.mesurerScreenshotViewer = "true", d.setAttribute("role", "dialog"), d.setAttribute("aria-modal", "true"), d.setAttribute("aria-label", "Screenshot viewer"), Ub(d, {
19419
+ d.dataset.mesurerScreenshotViewer = "true", d.setAttribute("role", "dialog"), d.setAttribute("aria-modal", "true"), d.setAttribute("aria-label", "Screenshot viewer"), Hb(d, {
18905
19420
  position: "fixed",
18906
19421
  inset: "0",
18907
19422
  display: "none",
@@ -18915,7 +19430,7 @@ var Kv = "mesurer.layout-guides", qv = "layout-guides:v1", Jv = "mesurer.layout-
18915
19430
  "pointer-events": "auto"
18916
19431
  });
18917
19432
  let f = e.createElement("img");
18918
- f.dataset.mesurerScreenshotViewerImage = "true", f.alt = "Captured screenshot", Ub(f, {
19433
+ f.dataset.mesurerScreenshotViewerImage = "true", f.alt = "Captured screenshot", Hb(f, {
18919
19434
  display: "block",
18920
19435
  "max-width": "calc(100vw - 96px)",
18921
19436
  "max-height": "calc(100vh - 112px)",
@@ -18926,7 +19441,7 @@ var Kv = "mesurer.layout-guides", qv = "layout-guides:v1", Jv = "mesurer.layout-
18926
19441
  "box-shadow": "0 8px 30px rgb(0 0 0 / 28%)"
18927
19442
  }), d.append(f);
18928
19443
  let p = e.createElement("div");
18929
- p.dataset.mesurerScreenshotViewerControls = "true", Ub(p, {
19444
+ p.dataset.mesurerScreenshotViewerControls = "true", Hb(p, {
18930
19445
  position: "fixed",
18931
19446
  top: "16px",
18932
19447
  right: "16px",
@@ -18934,14 +19449,14 @@ var Kv = "mesurer.layout-guides", qv = "layout-guides:v1", Jv = "mesurer.layout-
18934
19449
  gap: "8px",
18935
19450
  "pointer-events": "auto"
18936
19451
  });
18937
- let m = Gb(e, "Copy");
19452
+ let m = Wb(e, "Copy");
18938
19453
  m.dataset.mesurerScreenshotViewerCopy = "true", m.setAttribute("aria-label", "Copy screenshot");
18939
- let h = Gb(e, "Save");
19454
+ let h = Wb(e, "Save");
18940
19455
  h.dataset.mesurerScreenshotViewerSave = "true", h.setAttribute("aria-label", "Save screenshot");
18941
- let g = Gb(e, "Close");
19456
+ let g = Wb(e, "Close");
18942
19457
  g.dataset.mesurerScreenshotViewerClose = "true", g.setAttribute("aria-label", "Close screenshot viewer"), p.append(m, h, g), d.append(p), a.append(d);
18943
19458
  let _ = e.createElement("div");
18944
- _.dataset.mesurerScreenshotToast = "true", _.setAttribute("role", "status"), Ub(_, {
19459
+ _.dataset.mesurerScreenshotToast = "true", _.setAttribute("role", "status"), Hb(_, {
18945
19460
  position: "fixed",
18946
19461
  left: "50%",
18947
19462
  bottom: "20px",
@@ -18963,18 +19478,18 @@ var Kv = "mesurer.layout-guides", qv = "layout-guides:v1", Jv = "mesurer.layout-
18963
19478
  }, D = (e, n = !1) => {
18964
19479
  E(), _.textContent = e, _.style.backgroundColor = n ? "#b42318" : "rgb(28 28 30 / 90%)", _.style.display = "block", C = t.setTimeout(() => {
18965
19480
  C = 0, _.style.display = "none";
18966
- }, Hb);
19481
+ }, Vb);
18967
19482
  }, O = () => {
18968
19483
  d.style.display = "none";
18969
19484
  }, k = () => {
18970
19485
  y && globalThis.URL.revokeObjectURL(y), y = null, v = null, s.removeAttribute("src"), f.removeAttribute("src");
18971
19486
  }, A = () => {
18972
19487
  T(), O(), o.style.display = "none", k();
18973
- }, j = () => Wb({
18974
- left: t.innerWidth - Rb - Bb,
18975
- top: t.innerHeight - zb - Bb
19488
+ }, j = () => Ub({
19489
+ left: t.innerWidth - Lb - zb,
19490
+ top: t.innerHeight - Rb - zb
18976
19491
  }, t), M = (e) => {
18977
- let n = Wb(e, t);
19492
+ let n = Ub(e, t);
18978
19493
  b = n, o.style.left = `${n.left}px`, o.style.top = `${n.top}px`;
18979
19494
  }, N = () => {
18980
19495
  !v || !y || (T(), d.style.display = "flex", g.focus());
@@ -19008,7 +19523,7 @@ var Kv = "mesurer.layout-guides", qv = "layout-guides:v1", Jv = "mesurer.layout-
19008
19523
  let n = x;
19009
19524
  if (!n) return;
19010
19525
  let r = e - n.startX, i = t - n.startY;
19011
- !n.moved && Math.hypot(r, i) >= Vb && (n.moved = !0), n.moved && M({
19526
+ !n.moved && Math.hypot(r, i) >= Bb && (n.moved = !0), n.moved && M({
19012
19527
  left: n.left + r,
19013
19528
  top: n.top + i
19014
19529
  });
@@ -19052,25 +19567,25 @@ var Kv = "mesurer.layout-guides", qv = "layout-guides:v1", Jv = "mesurer.layout-
19052
19567
  if (w) return;
19053
19568
  T(), O(), k(), v = e;
19054
19569
  let i = globalThis.URL.createObjectURL(e);
19055
- y = i, s.src = i, f.src = i, o.style.display = "block", M(b ?? j()), D(Kb(n)), r > 0 && (S = t.setTimeout(A, r));
19570
+ y = i, s.src = i, f.src = i, o.style.display = "block", M(b ?? j()), D(Gb(n)), r > 0 && (S = t.setTimeout(A, r));
19056
19571
  },
19057
19572
  dismiss: A,
19058
19573
  dispose() {
19059
19574
  w || (w = !0, T(), E(), A(), t.removeEventListener("mousemove", V, !0), t.removeEventListener("mouseup", H, !0), t.removeEventListener("pointermove", ee, !0), t.removeEventListener("pointerup", te, !0), t.removeEventListener("pointercancel", ne, !0), t.removeEventListener("keydown", ae, !0), o.removeEventListener("mousedown", B), o.removeEventListener("pointerdown", U), o.removeEventListener("keydown", W), o.removeEventListener("contextmenu", re), d.removeEventListener("click", ie), a.remove());
19060
19575
  }
19061
19576
  };
19062
- }, Yb = "mesurer.screenshot", Xb = "screenshot", Zb = "mesurer.screenshot.settings", Qb = "mesurer.screenshot.active", $b = "runtime:solid", ex = "screenshot.toggle", tx = 2500, nx = 0, rx = [
19577
+ }, Jb = "mesurer.screenshot", Yb = "screenshot", Xb = "mesurer.screenshot.settings", Zb = "mesurer.screenshot.active", Qb = "runtime:solid", $b = "screenshot.toggle", ex = 2500, tx = 0, nx = [
19063
19578
  "[data-mesurer-measurement='true']",
19064
19579
  "[data-mesurer-selected-measurement='true']",
19065
19580
  "[data-mesurer-selection-spacing-target='true']",
19066
19581
  "[data-mesurer-guide='true']",
19067
19582
  "[data-mesurer-distance='true']"
19068
- ].join(","), ix = `${rx},[data-mesurer-rulers='true']`, ax = {
19583
+ ].join(","), rx = `${nx},[data-mesurer-rulers='true']`, ix = {
19069
19584
  viewBox: "0 0 256 256",
19070
19585
  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"]
19071
- }, ox = (e, t) => {
19586
+ }, ax = (e, t) => {
19072
19587
  for (let [n, r] of Object.entries(t)) e.style.setProperty(n, r);
19073
- }, sx = (e, t) => {
19588
+ }, ox = (e, t) => {
19074
19589
  for (let n of [
19075
19590
  "left",
19076
19591
  "top",
@@ -19082,63 +19597,63 @@ var Kv = "mesurer.layout-guides", qv = "layout-guides:v1", Jv = "mesurer.layout-
19082
19597
  let r = t[n];
19083
19598
  r === void 0 ? e.style.removeProperty(n) : e.style.setProperty(n, `${r}px`);
19084
19599
  }
19085
- }, cx = (e) => {
19086
- let t = e(Zb);
19600
+ }, sx = (e) => {
19601
+ let t = e(Xb);
19087
19602
  return {
19088
19603
  toolEnabled: t?.toolEnabled ?? !0,
19089
19604
  copy: t?.copy ?? !0,
19090
19605
  download: t?.download ?? !1,
19091
19606
  includeMeasurements: t?.includeMeasurements ?? !1
19092
19607
  };
19093
- }, lx = (e) => ({
19608
+ }, cx = (e) => ({
19094
19609
  value: e.style.getPropertyValue("display"),
19095
19610
  priority: e.style.getPropertyPriority("display")
19096
- }), ux = (e, t) => {
19611
+ }), lx = (e, t) => {
19097
19612
  t.value || t.priority ? e.style.setProperty("display", t.value, t.priority) : e.style.removeProperty("display");
19098
- }, dx = (e, t) => {
19613
+ }, ux = (e, t) => {
19099
19614
  let n = e;
19100
19615
  for (; n.parentElement && n.parentElement !== t;) n = n.parentElement;
19101
19616
  return n.parentElement === t ? n : null;
19102
- }, fx = (e) => {
19617
+ }, dx = (e) => {
19103
19618
  let t = e.querySelector("[data-mesurer-root='true']");
19104
19619
  if (!t) return () => void 0;
19105
19620
  let n = /* @__PURE__ */ new Set();
19106
19621
  for (let e of t.querySelectorAll("[data-mesurer-rulers='true']")) {
19107
- let r = dx(e, t);
19622
+ let r = ux(e, t);
19108
19623
  r && n.add(r);
19109
19624
  }
19110
- for (let e of t.querySelectorAll(rx)) {
19111
- let r = dx(e, t);
19625
+ for (let e of t.querySelectorAll(nx)) {
19626
+ let r = ux(e, t);
19112
19627
  r && n.add(r);
19113
19628
  }
19114
19629
  let r = [];
19115
19630
  for (let e of n) e.dataset.mesurerInspectorUi !== "true" && (r.push({
19116
19631
  element: e,
19117
- display: lx(e)
19632
+ display: cx(e)
19118
19633
  }), e.style.setProperty("display", "none", "important"));
19119
19634
  return () => {
19120
- for (let e of r) ux(e.element, e.display);
19635
+ for (let e of r) lx(e.element, e.display);
19121
19636
  };
19122
- }, px = (e) => Array.from(e.querySelectorAll(ix)).filter((e) => e.dataset.mesurerInspectorUi === "true").map((e) => ({
19637
+ }, fx = (e) => Array.from(e.querySelectorAll(rx)).filter((e) => e.dataset.mesurerInspectorUi === "true").map((e) => ({
19123
19638
  element: e,
19124
- display: lx(e)
19125
- })), mx = (e) => {
19126
- for (let t of e) t.element.isConnected && ux(t.element, t.display);
19127
- }, hx = (e = {}) => Ta({
19128
- id: Yb,
19639
+ display: cx(e)
19640
+ })), px = (e) => {
19641
+ for (let t of e) t.element.isConnected && lx(t.element, t.display);
19642
+ }, mx = (e = {}) => Ta({
19643
+ id: Jb,
19129
19644
  version: "0.1.0",
19130
- requires: [$b],
19645
+ requires: [Qb],
19131
19646
  provides: [
19132
19647
  "tool:screenshot",
19133
19648
  "capture:screenshot",
19134
19649
  "settings:screenshot"
19135
19650
  ],
19136
19651
  setup(t) {
19137
- let n = t.service.get($b);
19652
+ let n = t.service.get(Qb);
19138
19653
  if (!n) throw Error("Screenshot plugin requires the Solid renderer runtime.");
19139
- let { ownerDocument: r, ownerWindow: i } = n, a = n.createWorkspaceRuntime(), o = n.createInspectorMount(), s = e.capture ?? e.captureVisibleTab, c = s ?? _o, l = e.previewDurationMs ?? nx;
19654
+ let { ownerDocument: r, ownerWindow: i } = n, a = n.createWorkspaceRuntime(), o = n.createInspectorMount(), s = e.capture ?? e.captureVisibleTab, c = s ?? _o, l = e.previewDurationMs ?? tx;
19140
19655
  t.state.register({
19141
- id: Zb,
19656
+ id: Xb,
19142
19657
  initial: {
19143
19658
  toolEnabled: e.toolEnabled ?? !0,
19144
19659
  copy: e.copy ?? !0,
@@ -19147,11 +19662,11 @@ var Kv = "mesurer.layout-guides", qv = "layout-guides:v1", Jv = "mesurer.layout-
19147
19662
  },
19148
19663
  persist: !0
19149
19664
  }), t.state.register({
19150
- id: Qb,
19665
+ id: Zb,
19151
19666
  initial: !1
19152
19667
  });
19153
19668
  let u = o.element;
19154
- u.dataset.mesurerScreenshot = "true", ox(u, {
19669
+ u.dataset.mesurerScreenshot = "true", ax(u, {
19155
19670
  position: "fixed",
19156
19671
  inset: "0",
19157
19672
  "z-index": "85",
@@ -19159,7 +19674,7 @@ var Kv = "mesurer.layout-guides", qv = "layout-guides:v1", Jv = "mesurer.layout-
19159
19674
  "font-family": "ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif"
19160
19675
  });
19161
19676
  let d = r.createElement("div");
19162
- d.dataset.mesurerScreenshotSelect = "true", d.setAttribute("role", "application"), d.setAttribute("aria-label", "Screenshot selection"), ox(d, {
19677
+ d.dataset.mesurerScreenshotSelect = "true", d.setAttribute("role", "application"), d.setAttribute("aria-label", "Screenshot selection"), ax(d, {
19163
19678
  position: "fixed",
19164
19679
  inset: "0",
19165
19680
  display: "none",
@@ -19171,13 +19686,13 @@ var Kv = "mesurer.layout-guides", qv = "layout-guides:v1", Jv = "mesurer.layout-
19171
19686
  }), u.append(d);
19172
19687
  let f = Array.from({ length: 4 }, () => {
19173
19688
  let e = r.createElement("div");
19174
- return ox(e, {
19689
+ return ax(e, {
19175
19690
  position: "fixed",
19176
19691
  "background-color": "rgb(0 0 0 / 40%)",
19177
19692
  "pointer-events": "none"
19178
19693
  }), d.append(e), e;
19179
19694
  }), p = r.createElement("div");
19180
- ox(p, {
19695
+ ax(p, {
19181
19696
  position: "fixed",
19182
19697
  display: "none",
19183
19698
  border: "1px solid #0d99ff",
@@ -19185,7 +19700,7 @@ var Kv = "mesurer.layout-guides", qv = "layout-guides:v1", Jv = "mesurer.layout-
19185
19700
  "pointer-events": "none"
19186
19701
  }), d.append(p);
19187
19702
  let m = r.createElement("div");
19188
- ox(m, {
19703
+ ax(m, {
19189
19704
  position: "fixed",
19190
19705
  display: "none",
19191
19706
  "z-index": "86",
@@ -19199,7 +19714,7 @@ var Kv = "mesurer.layout-guides", qv = "layout-guides:v1", Jv = "mesurer.layout-
19199
19714
  "pointer-events": "none"
19200
19715
  }), d.append(m);
19201
19716
  let h = r.createElement("div");
19202
- h.textContent = "Drag to select · Esc to cancel", ox(h, {
19717
+ h.textContent = "Drag to select · Esc to cancel", ax(h, {
19203
19718
  position: "fixed",
19204
19719
  left: "50%",
19205
19720
  bottom: "16px",
@@ -19212,7 +19727,7 @@ var Kv = "mesurer.layout-guides", qv = "layout-guides:v1", Jv = "mesurer.layout-
19212
19727
  "pointer-events": "none"
19213
19728
  }), d.append(h);
19214
19729
  let g = r.createElement("div");
19215
- g.dataset.mesurerScreenshotError = "true", g.setAttribute("role", "status"), g.textContent = "Could not save screenshot", ox(g, {
19730
+ g.dataset.mesurerScreenshotError = "true", g.setAttribute("role", "status"), g.textContent = "Could not save screenshot", ax(g, {
19216
19731
  position: "fixed",
19217
19732
  display: "none",
19218
19733
  "z-index": "97",
@@ -19223,8 +19738,8 @@ var Kv = "mesurer.layout-guides", qv = "layout-guides:v1", Jv = "mesurer.layout-
19223
19738
  "font-size": "11px",
19224
19739
  "pointer-events": "none"
19225
19740
  }), u.append(g);
19226
- let _ = null, v = null, y = 0, b = 0, x = !1, S = !1, C = !1, w = () => t.state.get("mesurer.screenshot.active") ?? !1, T = () => cx(t.state.get), E = (e) => {
19227
- t.state.update(Zb, (t) => {
19741
+ let _ = null, v = null, y = 0, b = 0, x = !1, S = !1, C = !1, w = () => t.state.get("mesurer.screenshot.active") ?? !1, T = () => sx(t.state.get), E = (e) => {
19742
+ t.state.update(Xb, (t) => {
19228
19743
  let n = { ...t };
19229
19744
  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;
19230
19745
  });
@@ -19247,13 +19762,13 @@ var Kv = "mesurer.layout-guides", qv = "layout-guides:v1", Jv = "mesurer.layout-
19247
19762
  }, A = (e) => {
19248
19763
  let t = i.innerWidth, n = i.innerHeight;
19249
19764
  if (!e || e.width <= 0 || e.height <= 0) {
19250
- sx(f[0], {
19765
+ ox(f[0], {
19251
19766
  left: 0,
19252
19767
  top: 0,
19253
19768
  width: t,
19254
19769
  height: n
19255
19770
  });
19256
- for (let e of f.slice(1)) sx(e, {
19771
+ for (let e of f.slice(1)) ox(e, {
19257
19772
  left: 0,
19258
19773
  top: 0,
19259
19774
  width: 0,
@@ -19262,31 +19777,31 @@ var Kv = "mesurer.layout-guides", qv = "layout-guides:v1", Jv = "mesurer.layout-
19262
19777
  p.style.display = "none", m.style.display = "none";
19263
19778
  return;
19264
19779
  }
19265
- sx(f[0], {
19780
+ ox(f[0], {
19266
19781
  left: 0,
19267
19782
  top: 0,
19268
19783
  width: t,
19269
19784
  height: e.top
19270
- }), sx(f[1], {
19785
+ }), ox(f[1], {
19271
19786
  left: 0,
19272
19787
  top: e.top,
19273
19788
  width: e.left,
19274
19789
  height: e.height
19275
- }), sx(f[2], {
19790
+ }), ox(f[2], {
19276
19791
  left: e.left + e.width,
19277
19792
  top: e.top,
19278
19793
  width: Math.max(0, t - e.left - e.width),
19279
19794
  height: e.height
19280
- }), sx(f[3], {
19795
+ }), ox(f[3], {
19281
19796
  left: 0,
19282
19797
  top: e.top + e.height,
19283
19798
  width: t,
19284
19799
  height: Math.max(0, n - e.top - e.height)
19285
- }), p.style.display = "block", sx(p, e), m.style.display = "block", m.textContent = `${Math.round(e.width)} × ${Math.round(e.height)}`, sx(m, {
19800
+ }), p.style.display = "block", ox(p, e), m.style.display = "block", m.textContent = `${Math.round(e.width)} × ${Math.round(e.height)}`, ox(m, {
19286
19801
  left: e.left + e.width / 2,
19287
19802
  top: Math.min(n - 22, e.top + e.height + 6)
19288
19803
  });
19289
- }, j = () => n.portalTarget.querySelector("[data-mesurer-tool-id='screenshot']")?.getBoundingClientRect() ?? null, M = Jb({
19804
+ }, j = () => n.portalTarget.querySelector("[data-mesurer-tool-id='screenshot']")?.getBoundingClientRect() ?? null, M = qb({
19290
19805
  ownerDocument: r,
19291
19806
  ownerWindow: i,
19292
19807
  root: u,
@@ -19297,7 +19812,7 @@ var Kv = "mesurer.layout-guides", qv = "layout-guides:v1", Jv = "mesurer.layout-
19297
19812
  }, P = () => {
19298
19813
  y && i.clearTimeout(y), g.style.display = "block", N(g), y = i.setTimeout(() => {
19299
19814
  y = 0, g.style.display = "none";
19300
- }, tx);
19815
+ }, ex);
19301
19816
  }, F = () => {
19302
19817
  _ = null, A(null), d.style.visibility = "", d.style.display = "none", u.style.pointerEvents = "none", D(!1), k();
19303
19818
  }, I = () => {
@@ -19306,8 +19821,8 @@ var Kv = "mesurer.layout-guides", qv = "layout-guides:v1", Jv = "mesurer.layout-
19306
19821
  if (x) throw Error("A screenshot capture is already running.");
19307
19822
  if (e.width < 4 || e.height < 4) throw Error("Screenshot selection must be at least 4px by 4px.");
19308
19823
  x = !0;
19309
- let o = ++b, s = T(), l = s.includeMeasurements ? px(r) : [], u = s.includeMeasurements ? () => void 0 : fx(n.portalTarget);
19310
- a.prepareCapture(), s.includeMeasurements && mx(l);
19824
+ let o = ++b, s = T(), l = s.includeMeasurements ? fx(r) : [], u = s.includeMeasurements ? () => void 0 : dx(n.portalTarget);
19825
+ a.prepareCapture(), s.includeMeasurements && px(l);
19311
19826
  try {
19312
19827
  d.style.visibility = "hidden", await Qa(i);
19313
19828
  let n = await Ja(await c({
@@ -19415,9 +19930,9 @@ var Kv = "mesurer.layout-guides", qv = "layout-guides:v1", Jv = "mesurer.layout-
19415
19930
  label: "Screenshot",
19416
19931
  shortcut: "Shift+S",
19417
19932
  order: 70,
19418
- command: ex,
19933
+ command: $b,
19419
19934
  toolbarMode: "select",
19420
- icon: ax,
19935
+ icon: ix,
19421
19936
  active: w,
19422
19937
  hidden: () => !T().toolEnabled,
19423
19938
  menu: {
@@ -19483,31 +19998,31 @@ var Kv = "mesurer.layout-guides", qv = "layout-guides:v1", Jv = "mesurer.layout-
19483
19998
  set: (e) => E({ includeMeasurements: e })
19484
19999
  }
19485
20000
  ]
19486
- }), t.command.register(ex, R), t.service.provide(Xb, ee), t.lifecycle.onDispose(() => {
20001
+ }), t.command.register($b, R), t.service.provide(Yb, ee), t.lifecycle.onDispose(() => {
19487
20002
  C = !0, b += 1, d.removeEventListener("pointerdown", z), d.removeEventListener("pointermove", B), d.removeEventListener("pointerup", V), d.removeEventListener("pointercancel", H), i.removeEventListener("keydown", U, !0), y && i.clearTimeout(y), M.dispose(), k(), vo(i), a.finishCapture(), a.dispose(), o.dispose();
19488
20003
  });
19489
20004
  }
19490
- }), gx = (e) => Number.parseFloat(e) || 0, _x = 0, vx = (e, t) => {
20005
+ }), hx = (e) => Number.parseFloat(e) || 0, gx = 0, _x = (e, t) => {
19491
20006
  let n = t.CSS;
19492
20007
  return n?.escape ? n.escape(e) : e.replace(/[^a-zA-Z0-9_-]/g, (e) => `\\${e}`);
19493
- }, yx = (e) => e.nodeType === 9, bx = (e) => e.nodeType === 11;
19494
- function xx(e) {
20008
+ }, vx = (e) => e.nodeType === 9, yx = (e) => e.nodeType === 11;
20009
+ function bx(e) {
19495
20010
  let t = e.getRootNode();
19496
- return bx(t) ? t : e.ownerDocument;
20011
+ return yx(t) ? t : e.ownerDocument;
19497
20012
  }
19498
- var Sx = (e, t) => {
19499
- if (yx(e) || bx(e)) return e;
19500
- let n = xx(e);
19501
- return bx(n) ? n : t;
19502
- }, Cx = 600, wx = "audio, canvas, embed, iframe, img, input, object, picture, select, textarea, video", Tx = /* @__PURE__ */ new WeakMap(), Ex = (e) => {
20013
+ var xx = (e, t) => {
20014
+ if (vx(e) || yx(e)) return e;
20015
+ let n = bx(e);
20016
+ return yx(n) ? n : t;
20017
+ }, Sx = 600, Cx = "audio, canvas, embed, iframe, img, input, object, picture, select, textarea, video", wx = /* @__PURE__ */ new WeakMap(), Tx = (e) => {
19503
20018
  let t = e;
19504
20019
  for (; t;) {
19505
- if ((Tx.get(t) ?? 0) > 0) return !0;
20020
+ if ((wx.get(t) ?? 0) > 0) return !0;
19506
20021
  let e = t.getRootNode();
19507
- t = bx(e) ? e.host : t.parentElement;
20022
+ t = yx(e) ? e.host : t.parentElement;
19508
20023
  }
19509
20024
  return !1;
19510
- }, Dx = (e, t) => t.x >= e.left && t.x <= e.right && t.y >= e.top && t.y <= e.bottom, Ox = (e, t) => Array.from(e.getClientRects()).some((e) => Dx(e, t)), kx = (e, t, n) => {
20025
+ }, Ex = (e, t) => t.x >= e.left && t.x <= e.right && t.y >= e.top && t.y <= e.bottom, Dx = (e, t) => Array.from(e.getClientRects()).some((e) => Ex(e, t)), Ox = (e, t, n) => {
19511
20026
  let r = e;
19512
20027
  for (; r;) {
19513
20028
  let e = n.getComputedStyle(r);
@@ -19516,7 +20031,7 @@ var Sx = (e, t) => {
19516
20031
  r = r.parentElement;
19517
20032
  }
19518
20033
  return !0;
19519
- }, Ax = (e, t) => {
20034
+ }, kx = (e, t) => {
19520
20035
  if (e.matches("img, picture, video, canvas, svg image, path, circle, ellipse, line, polygon, polyline, rect, text, use")) return !0;
19521
20036
  let n = t.getComputedStyle(e), r = n.backgroundImage !== "none" || n.backgroundColor !== "transparent" && n.backgroundColor !== "rgba(0, 0, 0, 0)", i = [
19522
20037
  "top",
@@ -19525,7 +20040,7 @@ var Sx = (e, t) => {
19525
20040
  "left"
19526
20041
  ].some((e) => Number.parseFloat(n.getPropertyValue(`border-${e}-width`)) > 0 && n.getPropertyValue(`border-${e}-style`) !== "none");
19527
20042
  return r || i || n.boxShadow !== "none" || n.outlineStyle !== "none";
19528
- }, jx = (e, t) => !!e.textContent?.trim() || Ax(e, t), Mx = (e, t, n) => {
20043
+ }, Ax = (e, t) => !!e.textContent?.trim() || kx(e, t), jx = (e, t, n) => {
19529
20044
  let r = t, i = r.caretRangeFromPoint?.(e.x, e.y)?.startContainer ?? r.caretPositionFromPoint?.(e.x, e.y)?.offsetNode;
19530
20045
  if (!i) return null;
19531
20046
  let a = t.defaultView?.Element;
@@ -19536,11 +20051,11 @@ var Sx = (e, t) => {
19536
20051
  o = o.parentElement;
19537
20052
  }
19538
20053
  return o === n ? n : null;
19539
- }, Nx = (e, t, n) => {
20054
+ }, Mx = (e, t, n) => {
19540
20055
  let r = n.defaultView, i = r?.Element;
19541
20056
  if (!r || !i) return [];
19542
20057
  let a = [], o = /* @__PURE__ */ new Set(), s = (n, i, s) => {
19543
- if (o.has(n) || Ex(n) || r.getComputedStyle(n).pointerEvents !== "none" || kx(n, e, r) || !Ox(n, t)) return;
20058
+ if (o.has(n) || Tx(n) || r.getComputedStyle(n).pointerEvents !== "none" || Ox(n, e, r) || !Dx(n, t)) return;
19544
20059
  let c = n.getBoundingClientRect();
19545
20060
  o.add(n), a.push({
19546
20061
  element: n,
@@ -19549,7 +20064,7 @@ var Sx = (e, t) => {
19549
20064
  order: s
19550
20065
  });
19551
20066
  }, c = n.createTreeWalker(e, 1), l = c.nextNode(), u = 1;
19552
- for (; l && u <= Cx;) {
20067
+ for (; l && u <= Sx;) {
19553
20068
  if (l instanceof i) {
19554
20069
  let t = l;
19555
20070
  if (r.getComputedStyle(t).pointerEvents === "none") {
@@ -19560,9 +20075,9 @@ var Sx = (e, t) => {
19560
20075
  }
19561
20076
  u += 1, l = c.nextNode();
19562
20077
  }
19563
- let d = Mx(t, n, e);
20078
+ let d = jx(t, n, e);
19564
20079
  return d && r.getComputedStyle(d).pointerEvents === "none" && s(d, 1e4, u), a.sort((e, t) => t.depth - e.depth || e.area - t.area || t.order - e.order).map(({ element: e }) => e);
19565
- }, Px = (e, t, n) => {
20080
+ }, Nx = (e, t, n) => {
19566
20081
  let r = t.ownerDocument.defaultView;
19567
20082
  if (!r) return [];
19568
20083
  let i = [...new Set(e)], a = /* @__PURE__ */ new Map();
@@ -19571,7 +20086,7 @@ var Sx = (e, t) => {
19571
20086
  t && (a.set(e, e.getAttribute("style")), t.style.setProperty("pointer-events", "auto", "important"));
19572
20087
  }
19573
20088
  try {
19574
- let e = xx(t).elementsFromPoint(n.x, n.y), r = e.findIndex((e) => e === t), a = new Map(e.map((e, t) => [e, t]));
20089
+ let e = bx(t).elementsFromPoint(n.x, n.y), r = e.findIndex((e) => e === t), a = new Map(e.map((e, t) => [e, t]));
19575
20090
  return i.filter((e) => {
19576
20091
  let t = a.get(e);
19577
20092
  return t !== void 0 && (r < 0 || t < r);
@@ -19579,31 +20094,31 @@ var Sx = (e, t) => {
19579
20094
  } finally {
19580
20095
  for (let [e, t] of a) t === null ? e.removeAttribute("style") : e.setAttribute("style", t);
19581
20096
  }
19582
- }, Fx = (e, t) => {
20097
+ }, Px = (e, t) => {
19583
20098
  let n = e;
19584
20099
  for (; n.parentElement && n.parentElement !== t;) n = n.parentElement;
19585
20100
  return n.parentElement === t ? n : null;
19586
- }, Ix = (e, t, n, r) => {
20101
+ }, Fx = (e, t, n, r) => {
19587
20102
  let i = r.defaultView;
19588
20103
  if (!i) return [];
19589
- let a = Px(Nx(e, t, r).filter((e) => jx(e, i)), e, t);
20104
+ let a = Nx(Mx(e, t, r).filter((e) => Ax(e, i)), e, t);
19590
20105
  if (a.length > 0) return a;
19591
- if (e.textContent?.trim() && !e.matches(wx) || e.matches("a, button, input, select, textarea, label, summary, [contenteditable='true']")) return [];
19592
- let o = [], s = /* @__PURE__ */ new Set(), c = !yx(n) && !bx(n) ? n : null, l = e.parentElement;
20106
+ if (e.textContent?.trim() && !e.matches(Cx) || e.matches("a, button, input, select, textarea, label, summary, [contenteditable='true']")) return [];
20107
+ let o = [], s = /* @__PURE__ */ new Set(), c = !vx(n) && !yx(n) ? n : null, l = e.parentElement;
19593
20108
  for (; l && l !== r.body && l !== r.documentElement && !(c && l !== c && !c.contains(l));) {
19594
- let a = l, u = Fx(e, a), d = Nx(a, t, r).filter((e) => {
19595
- if (!Rx(e, n) || e.closest("[aria-hidden='true'], [inert]")) return !1;
19596
- let t = Fx(e, a);
20109
+ let a = l, u = Px(e, a), d = Mx(a, t, r).filter((e) => {
20110
+ if (!Lx(e, n) || e.closest("[aria-hidden='true'], [inert]")) return !1;
20111
+ let t = Px(e, a);
19597
20112
  return t === null || t !== u;
19598
20113
  });
19599
- for (let e of d) s.has(e) || !jx(e, i) || (s.add(e), o.push(e));
20114
+ for (let e of d) s.has(e) || !Ax(e, i) || (s.add(e), o.push(e));
19600
20115
  if (a === c) break;
19601
20116
  l = a.parentElement;
19602
20117
  }
19603
- return Px(o, e, t);
20118
+ return Nx(o, e, t);
19604
20119
  };
19605
- function Lx(e, t, n = yx(t) ? t : t.ownerDocument ?? document) {
19606
- let r = Sx(t, n), i = n.defaultView;
20120
+ function Ix(e, t, n = vx(t) ? t : t.ownerDocument ?? document) {
20121
+ let r = xx(t, n), i = n.defaultView;
19607
20122
  if (!i) return null;
19608
20123
  let a = r.elementsFromPoint(e.x, e.y);
19609
20124
  for (let r of a) {
@@ -19613,28 +20128,28 @@ function Lx(e, t, n = yx(t) ? t : t.ownerDocument ?? document) {
19613
20128
  if (!t || t === a) break;
19614
20129
  a = t;
19615
20130
  }
19616
- if (!a || !Rx(a, t)) continue;
19617
- let o = Ix(a, e, t, n);
20131
+ if (!a || !Lx(a, t)) continue;
20132
+ let o = Fx(a, e, t, n);
19618
20133
  if (o.length > 0) return o[0];
19619
20134
  if (i.getComputedStyle(a).pointerEvents !== "none") return a;
19620
20135
  }
19621
20136
  return null;
19622
20137
  }
19623
- function Rx(e, t) {
19624
- if (yx(t)) return !0;
20138
+ function Lx(e, t) {
20139
+ if (vx(t)) return !0;
19625
20140
  let n = e;
19626
20141
  for (; n;) {
19627
20142
  if (t === n || t.contains(n)) return !0;
19628
20143
  let e = n.getRootNode();
19629
- if (!bx(e)) return !1;
20144
+ if (!yx(e)) return !1;
19630
20145
  n = e.host;
19631
20146
  }
19632
20147
  return !1;
19633
20148
  }
19634
- function zx(e, t) {
20149
+ function Rx(e, t) {
19635
20150
  if (!e) return t();
19636
- let n = Tx.get(e) ?? 0;
19637
- Tx.set(e, n + 1);
20151
+ let n = wx.get(e) ?? 0;
20152
+ wx.set(e, n + 1);
19638
20153
  let r = [e, ...e.querySelectorAll("*")], i = r.map((e) => [
19639
20154
  e,
19640
20155
  e.style.getPropertyValue("pointer-events"),
@@ -19644,13 +20159,13 @@ function zx(e, t) {
19644
20159
  try {
19645
20160
  return t();
19646
20161
  } finally {
19647
- n === 0 ? Tx.delete(e) : Tx.set(e, n);
20162
+ n === 0 ? wx.delete(e) : wx.set(e, n);
19648
20163
  for (let [e, t, n] of i) t ? e.style.setProperty("pointer-events", t, n) : e.style.removeProperty("pointer-events");
19649
20164
  }
19650
20165
  }
19651
- function Bx(e) {
20166
+ function zx(e) {
19652
20167
  let t = e.ownerDocument.defaultView ?? window;
19653
- if (e.id) return `#${vx(e.id, t)}`;
20168
+ if (e.id) return `#${_x(e.id, t)}`;
19654
20169
  let n = e.getAttribute("data-testid");
19655
20170
  if (n) return `[data-testid=${JSON.stringify(n)}]`;
19656
20171
  let r = [], i = e;
@@ -19664,17 +20179,17 @@ function Bx(e) {
19664
20179
  }
19665
20180
  return r.join(" > ");
19666
20181
  }
19667
- function Vx(e, t, n = `dom-inspection-${++_x}`) {
20182
+ function Bx(e, t, n = `dom-inspection-${++gx}`) {
19668
20183
  let r = e.getBoundingClientRect(), i = t.getComputedStyle(e), a = {
19669
- top: gx(i.paddingTop),
19670
- right: gx(i.paddingRight),
19671
- bottom: gx(i.paddingBottom),
19672
- left: gx(i.paddingLeft)
20184
+ top: hx(i.paddingTop),
20185
+ right: hx(i.paddingRight),
20186
+ bottom: hx(i.paddingBottom),
20187
+ left: hx(i.paddingLeft)
19673
20188
  }, o = {
19674
- top: gx(i.marginTop),
19675
- right: gx(i.marginRight),
19676
- bottom: gx(i.marginBottom),
19677
- left: gx(i.marginLeft)
20189
+ top: hx(i.marginTop),
20190
+ right: hx(i.marginRight),
20191
+ bottom: hx(i.marginBottom),
20192
+ left: hx(i.marginLeft)
19678
20193
  }, s = {
19679
20194
  left: r.left + a.left,
19680
20195
  top: r.top + a.top,
@@ -19702,8 +20217,8 @@ function Vx(e, t, n = `dom-inspection-${++_x}`) {
19702
20217
  elementRef: e
19703
20218
  };
19704
20219
  }
19705
- function Hx(e) {
19706
- let t = e.ownerDocument.defaultView ?? window, n = t.getComputedStyle(e), r = e instanceof t.HTMLElement ? e : null, i = e.getBoundingClientRect(), a = r ? Vx(r, t) : null, o = (e) => {
20220
+ function Vx(e) {
20221
+ let t = e.ownerDocument.defaultView ?? window, n = t.getComputedStyle(e), r = e instanceof t.HTMLElement ? e : null, i = e.getBoundingClientRect(), a = r ? Bx(r, t) : null, o = (e) => {
19707
20222
  let t = Number.parseFloat(e);
19708
20223
  return Number.isFinite(t) ? t : 0;
19709
20224
  }, s = (e) => ({
@@ -19713,7 +20228,7 @@ function Hx(e) {
19713
20228
  left: o(n.getPropertyValue(`${e}-left${e === "border" ? "-width" : ""}`))
19714
20229
  });
19715
20230
  return {
19716
- selector: Bx(e),
20231
+ selector: zx(e),
19717
20232
  tag: e.localName,
19718
20233
  id: e.id || null,
19719
20234
  classes: [...e.classList],
@@ -19775,10 +20290,10 @@ function Hx(e) {
19775
20290
  }
19776
20291
  //#endregion
19777
20292
  //#region src/agent.ts
19778
- var Ux = "text-edit", Wx = (e) => Hx(e);
19779
- function Gx(e) {
19780
- 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 || Rx(n, t), a = async () => {
19781
- let t = (e.getPluginHost() ?? await e.waitForPluginHost()).service.get(Ux);
20293
+ var Hx = "text-edit", Ux = (e) => Vx(e);
20294
+ function Wx(e) {
20295
+ 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 || Lx(n, t), a = async () => {
20296
+ let t = (e.getPluginHost() ?? await e.waitForPluginHost()).service.get(Hx);
19782
20297
  if (!t) throw Error("Mesurer text editing service is unavailable.");
19783
20298
  return t;
19784
20299
  }, o = () => {
@@ -19807,25 +20322,25 @@ function Gx(e) {
19807
20322
  },
19808
20323
  inspect(e, t = 0) {
19809
20324
  let n = r(e, t);
19810
- return n ? Wx(n) : null;
20325
+ return n ? Ux(n) : null;
19811
20326
  },
19812
20327
  inspectAll(e, n = 50) {
19813
- return [...t.querySelectorAll(e)].slice(0, Math.max(0, n)).map(Wx);
20328
+ return [...t.querySelectorAll(e)].slice(0, Math.max(0, n)).map(Ux);
19814
20329
  },
19815
20330
  at(n, r) {
19816
20331
  let a = t.querySelector?.("[data-mesurer-island]") ?? null;
19817
- return zx(a?.shadowRoot?.querySelector("[data-mesurer-root='true']") ?? a, () => {
19818
- let a = Lx({
20332
+ return Rx(a?.shadowRoot?.querySelector("[data-mesurer-root='true']") ?? a, () => {
20333
+ let a = Ix({
19819
20334
  x: n,
19820
20335
  y: r
19821
20336
  }, t, e.ownerDocument);
19822
- return a && i(a) ? Wx(a) : null;
20337
+ return a && i(a) ? Ux(a) : null;
19823
20338
  });
19824
20339
  },
19825
20340
  distance(e, t) {
19826
20341
  let n = r(e), i = r(t);
19827
20342
  if (!n || !i) return null;
19828
- let a = Wx(n), o = Wx(i), s = a.rect, c = o.rect;
20343
+ let a = Ux(n), o = Ux(i), s = a.rect, c = o.rect;
19829
20344
  return {
19830
20345
  a,
19831
20346
  b: o,
@@ -19841,7 +20356,7 @@ function Gx(e) {
19841
20356
  let r = e.getPluginHost() ?? await e.waitForPluginHost();
19842
20357
  return {
19843
20358
  viewport: o(),
19844
- elements: n.flatMap((e) => [...t.querySelectorAll(e)].slice(0, 50).map(Wx)),
20359
+ elements: n.flatMap((e) => [...t.querySelectorAll(e)].slice(0, 50).map(Ux)),
19845
20360
  plugins: r.describe(),
19846
20361
  pluginState: r.state.serialize("all")
19847
20362
  };
@@ -19866,10 +20381,10 @@ function Gx(e) {
19866
20381
  }
19867
20382
  //#endregion
19868
20383
  //#region src/version.ts
19869
- var Kx = "0.2.1-beta.5", qx = Np, Jx = Pp, Yx = () => ({
20384
+ var Gx = "0.2.1-beta.7", Kx = Np, qx = Pp, Jx = () => ({
19870
20385
  ...km(),
19871
- version: Kx
19872
- }), Xx = Jx, Zx = (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, Qx = (e) => {
20386
+ version: Gx
20387
+ }), Yx = qx, Xx = (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, Zx = (e) => {
19873
20388
  if (!e.length) return null;
19874
20389
  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));
19875
20390
  return {
@@ -19878,36 +20393,36 @@ var Kx = "0.2.1-beta.5", qx = Np, Jx = Pp, Yx = () => ({
19878
20393
  width: r - t,
19879
20394
  height: i - n
19880
20395
  };
19881
- }, $x = (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), eS = (e) => [...e.measurements, ...e.activeMeasurement && !e.measurements.some((t) => t.id === e.activeMeasurement?.id) ? [e.activeMeasurement] : []];
19882
- function tS(e) {
20396
+ }, Qx = (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), $x = (e) => [...e.measurements, ...e.activeMeasurement && !e.measurements.some((t) => t.id === e.activeMeasurement?.id) ? [e.activeMeasurement] : []];
20397
+ function eS(e) {
19883
20398
  let { workspace: t, scope: n, guideTolerance: r } = e;
19884
20399
  if (n.kind === "workspace") return {
19885
20400
  guides: t.guides.map((e) => ({ ...e })),
19886
- measurements: eS(t),
20401
+ measurements: $x(t),
19887
20402
  distances: [...t.distances]
19888
20403
  };
19889
- let i = new Set(n.elements), a = (e) => e != null && i.has(e), o = (e) => n.regions.some((t) => Zx(e, t));
20404
+ let i = new Set(n.elements), a = (e) => e != null && i.has(e), o = (e) => n.regions.some((t) => Xx(e, t));
19890
20405
  return {
19891
- guides: t.guides.filter((e) => $x(e, n.regions, r)).map((e) => ({ ...e })),
19892
- measurements: eS(t).filter((e) => a(e.elementRef) || o(e.rect)),
20406
+ guides: t.guides.filter((e) => Qx(e, n.regions, r)).map((e) => ({ ...e })),
20407
+ measurements: $x(t).filter((e) => a(e.elementRef) || o(e.rect)),
19893
20408
  distances: t.distances.filter((e) => a(e.elementRefA) || a(e.elementRefB) || o(e.rectA) || o(e.rectB))
19894
20409
  };
19895
20410
  }
19896
20411
  //#endregion
19897
20412
  //#region ../mesurer-core/dist/domain.js
19898
- var nS = {
20413
+ var tS = {
19899
20414
  opacity: 1,
19900
20415
  width: 1,
19901
20416
  pattern: "solid",
19902
20417
  dashLength: 6,
19903
20418
  gap: 4
19904
- }, rS = {
20419
+ }, nS = {
19905
20420
  opacity: 1,
19906
20421
  edgeReveal: !1
19907
20422
  };
19908
20423
  //#endregion
19909
20424
  //#region ../mesurer-core/dist/events.js
19910
- function iS() {
20425
+ function rS() {
19911
20426
  let e = /* @__PURE__ */ new Map();
19912
20427
  return {
19913
20428
  on(t, n) {
@@ -19925,12 +20440,12 @@ function iS() {
19925
20440
  }
19926
20441
  };
19927
20442
  }
19928
- ({ ...nS }), { ...rS };
20443
+ ({ ...tS }), { ...nS };
19929
20444
  //#endregion
19930
20445
  //#region ../mesurer-core/dist/plugins.js
19931
- var aS = 50;
19932
- function oS() {
19933
- let e = 1, t = 0, n = iS(), r = /* @__PURE__ */ new Map(), i = /* @__PURE__ */ new Map(), a = /* @__PURE__ */ new Map(), o = /* @__PURE__ */ new Map(), s = /* @__PURE__ */ new Map(), c = /* @__PURE__ */ new Map(), l = /* @__PURE__ */ new Map(), u = /* @__PURE__ */ new Map(), d = /* @__PURE__ */ new Map(), f = /* @__PURE__ */ new Map(), p = [], m = [], h = (e, t) => {
20446
+ var iS = 50;
20447
+ function aS() {
20448
+ let e = 1, t = 0, n = rS(), r = /* @__PURE__ */ new Map(), i = /* @__PURE__ */ new Map(), a = /* @__PURE__ */ new Map(), o = /* @__PURE__ */ new Map(), s = /* @__PURE__ */ new Map(), c = /* @__PURE__ */ new Map(), l = /* @__PURE__ */ new Map(), u = /* @__PURE__ */ new Map(), d = /* @__PURE__ */ new Map(), f = /* @__PURE__ */ new Map(), p = [], m = [], h = (e, t) => {
19934
20449
  n.emit("changed", {
19935
20450
  pluginId: e,
19936
20451
  reason: t
@@ -19993,15 +20508,15 @@ function oS() {
19993
20508
  }
19994
20509
  if (o && s) {
19995
20510
  let e = y("history");
19996
- x(s, e) || (p.push(s), p.length > aS && p.shift(), m.length = 0);
20511
+ x(s, e) || (p.push(s), p.length > iS && p.shift(), m.length = 0);
19997
20512
  }
19998
20513
  return l;
19999
20514
  }, w = () => {
20000
20515
  let e = p.pop();
20001
- return e ? (m.push(y("history")), m.length > aS && m.shift(), b(e, "history"), h(void 0, "history"), !0) : !1;
20516
+ return e ? (m.push(y("history")), m.length > iS && m.shift(), b(e, "history"), h(void 0, "history"), !0) : !1;
20002
20517
  }, T = () => {
20003
20518
  let e = m.pop();
20004
- return e ? (p.push(y("history")), p.length > aS && p.shift(), b(e, "history"), h(void 0, "history"), !0) : !1;
20519
+ return e ? (p.push(y("history")), p.length > iS && p.shift(), b(e, "history"), h(void 0, "history"), !0) : !1;
20005
20520
  }, E = async (e, t) => {
20006
20521
  for (let n of [...l.values()].filter((t) => t.name === e)) await n.handler(t);
20007
20522
  }, D = (e) => [...u.values()].reverse().find((t) => t.id === e)?.value, O = {
@@ -20158,8 +20673,8 @@ function oS() {
20158
20673
  }
20159
20674
  //#endregion
20160
20675
  //#region ../mesurer-core/dist/runtime.js
20161
- async function sS(e = {}) {
20162
- let t = oS();
20676
+ async function oS(e = {}) {
20677
+ let t = aS();
20163
20678
  try {
20164
20679
  for (let n of e.plugins ?? []) await t.load(n);
20165
20680
  return t;
@@ -20169,17 +20684,17 @@ async function sS(e = {}) {
20169
20684
  }
20170
20685
  //#endregion
20171
20686
  //#region src/context.ts
20172
- var cS = 10, lS = (e) => ({
20687
+ var sS = 10, cS = (e) => ({
20173
20688
  left: e.left,
20174
20689
  top: e.top,
20175
20690
  width: e.width,
20176
20691
  height: e.height
20177
- }), uS = (e) => {
20692
+ }), lS = (e) => {
20178
20693
  let t = /* @__PURE__ */ new Set(), n = [];
20179
20694
  for (let r of e) !r?.isConnected || t.has(r) || (t.add(r), n.push(r));
20180
20695
  return n;
20181
- }, dS = (e) => e.crypto?.randomUUID?.() ?? `${Date.now()}-${Math.random().toString(36).slice(2)}`;
20182
- function fS(e) {
20696
+ }, uS = (e) => e.crypto?.randomUUID?.() ?? `${Date.now()}-${Math.random().toString(36).slice(2)}`;
20697
+ function dS(e) {
20183
20698
  let { runtime: t, ownerDocument: n, ownerWindow: r } = e, i = e.request ?? { scope: "workspace" }, a = t.snapshot();
20184
20699
  if (!a) throw Error("Mesurer workspace is not ready yet.");
20185
20700
  let o = [], s = [], c = { kind: "workspace" }, l = /* @__PURE__ */ new Map();
@@ -20187,7 +20702,7 @@ function fS(e) {
20187
20702
  let e = t.annotation(i.annotation);
20188
20703
  if (!e) throw Error(`Mesurer annotation not found: ${i.annotation}`);
20189
20704
  for (let t of e.resolvedTargets) t.element?.isConnected && l.set(t.element, t.target.id);
20190
- o = uS(e.resolvedTargets.map((e) => e.element));
20705
+ o = lS(e.resolvedTargets.map((e) => e.element));
20191
20706
  let n = t.annotationRect(e.id);
20192
20707
  n && (s = [n]);
20193
20708
  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";
@@ -20199,15 +20714,15 @@ function fS(e) {
20199
20714
  };
20200
20715
  } else if (i.scope === "selection") {
20201
20716
  let e = t.currentSelection();
20202
- if (o = uS(e.elements), !o.length && !e.region) throw Error("Mesurer has no current selection.");
20203
- s = e.region ? [e.region] : o.map((e) => lS(e.getBoundingClientRect())), c = { kind: "selection" };
20204
- } else o = uS([
20717
+ if (o = lS(e.elements), !o.length && !e.region) throw Error("Mesurer has no current selection.");
20718
+ s = e.region ? [e.region] : o.map((e) => cS(e.getBoundingClientRect())), c = { kind: "selection" };
20719
+ } else o = lS([
20205
20720
  ...t.currentSelection().elements,
20206
20721
  ...a.measurements.map((e) => e.elementRef),
20207
20722
  a.activeMeasurement?.elementRef,
20208
20723
  ...a.heldDistances.flatMap((e) => [e.elementRefA, e.elementRefB])
20209
20724
  ]);
20210
- let u = c.kind === "workspace" ? [] : s.length ? s : o.map((e) => lS(e.getBoundingClientRect())), d = tS({
20725
+ let u = c.kind === "workspace" ? [] : s.length ? s : o.map((e) => cS(e.getBoundingClientRect())), d = eS({
20211
20726
  workspace: {
20212
20727
  guides: a.guides,
20213
20728
  measurements: a.measurements,
@@ -20219,8 +20734,8 @@ function fS(e) {
20219
20734
  elements: o,
20220
20735
  regions: u
20221
20736
  },
20222
- guideTolerance: a.guideRelevanceTolerance ?? cS
20223
- }), f = d.measurements, p = d.distances, m = d.guides, h = uS([
20737
+ guideTolerance: a.guideRelevanceTolerance ?? sS
20738
+ }), f = d.measurements, p = d.distances, m = d.guides, h = lS([
20224
20739
  ...o,
20225
20740
  ...f.map((e) => e.elementRef),
20226
20741
  ...p.flatMap((e) => [e.elementRefA, e.elementRefB])
@@ -20232,12 +20747,12 @@ function fS(e) {
20232
20747
  let t = l.get(e) ?? y();
20233
20748
  return g.set(e, t), {
20234
20749
  ref: t,
20235
- inspection: Hx(e)
20750
+ inspection: Vx(e)
20236
20751
  };
20237
20752
  }), x = f.map((e) => {
20238
20753
  let t = {
20239
20754
  id: e.id,
20240
- rect: lS(e.rect),
20755
+ rect: cS(e.rect),
20241
20756
  deltaX: e.deltaX,
20242
20757
  deltaY: e.deltaY
20243
20758
  };
@@ -20247,8 +20762,8 @@ function fS(e) {
20247
20762
  }), S = p.map((e) => {
20248
20763
  let t = {
20249
20764
  id: e.id,
20250
- rectA: lS(e.rectA),
20251
- rectB: lS(e.rectB),
20765
+ rectA: cS(e.rectA),
20766
+ rectB: cS(e.rectB),
20252
20767
  horizontal: e.horizontal ? { ...e.horizontal } : null,
20253
20768
  vertical: e.vertical ? { ...e.vertical } : null
20254
20769
  }, n = e.elementRefA ? g.get(e.elementRefA) : void 0, r = e.elementRefB ? g.get(e.elementRefB) : void 0;
@@ -20256,7 +20771,7 @@ function fS(e) {
20256
20771
  });
20257
20772
  return {
20258
20773
  schema: "mesurer.context/v1",
20259
- id: dS(r),
20774
+ id: uS(r),
20260
20775
  createdAt: (/* @__PURE__ */ new Date()).toISOString(),
20261
20776
  scope: c,
20262
20777
  page: {
@@ -20271,7 +20786,7 @@ function fS(e) {
20271
20786
  scrollY: r.scrollY
20272
20787
  },
20273
20788
  coordinateSpace: "viewport-css-px",
20274
- regions: c.kind === "workspace" ? [] : s.map(lS),
20789
+ regions: c.kind === "workspace" ? [] : s.map(cS),
20275
20790
  visualState: {
20276
20791
  rulersVisible: a.rulersVisible,
20277
20792
  xrayVisible: a.xrayVisible
@@ -20285,48 +20800,48 @@ function fS(e) {
20285
20800
  }
20286
20801
  };
20287
20802
  }
20288
- var pS = (e) => `${Math.round(e * 100) / 100}px`, mS = (e) => `x=${pS(e.left)} y=${pS(e.top)} w=${pS(e.width)} h=${pS(e.height)}`;
20289
- function hS(e) {
20803
+ var fS = (e) => `${Math.round(e * 100) / 100}px`, pS = (e) => `x=${fS(e.left)} y=${fS(e.top)} w=${fS(e.width)} h=${fS(e.height)}`;
20804
+ function mS(e) {
20290
20805
  let t = [
20291
20806
  "Mesurer visual context",
20292
20807
  "",
20293
20808
  `Page: ${e.page.url}`,
20294
20809
  `Viewport: ${e.viewport.width} × ${e.viewport.height} CSS px; scroll x=${e.viewport.scrollX} y=${e.viewport.scrollY}`
20295
20810
  ];
20296
- 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}: ${mS(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) {
20811
+ 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}: ${pS(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) {
20297
20812
  t.push("", "Targets");
20298
20813
  for (let n of e.targets) {
20299
20814
  let e = n.inspection;
20300
- t.push(`[${n.ref}] ${e.selector}`, ` rect: ${mS(e.rect)}`, ` margin: ${pS(e.margin.top)} ${pS(e.margin.right)} ${pS(e.margin.bottom)} ${pS(e.margin.left)}`, ` padding: ${pS(e.padding.top)} ${pS(e.padding.right)} ${pS(e.padding.bottom)} ${pS(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)}`);
20815
+ t.push(`[${n.ref}] ${e.selector}`, ` rect: ${pS(e.rect)}`, ` margin: ${fS(e.margin.top)} ${fS(e.margin.right)} ${fS(e.margin.bottom)} ${fS(e.margin.left)}`, ` padding: ${fS(e.padding.top)} ${fS(e.padding.right)} ${fS(e.padding.bottom)} ${fS(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)}`);
20301
20816
  }
20302
20817
  }
20303
20818
  if (e.visualContext.guides.length) {
20304
20819
  t.push("", "Relevant guides");
20305
- for (let n of e.visualContext.guides) t.push(`- ${n.orientation} ${n.orientation === "vertical" ? "x" : "y"}=${pS(n.position)}`);
20820
+ for (let n of e.visualContext.guides) t.push(`- ${n.orientation} ${n.orientation === "vertical" ? "x" : "y"}=${fS(n.position)}`);
20306
20821
  }
20307
20822
  if (e.visualContext.layoutGuides.length) {
20308
20823
  t.push("", "Layout guides");
20309
20824
  for (let n of e.visualContext.layoutGuides) {
20310
20825
  if (!n.visible) continue;
20311
- let e = n.kind === "grid" ? `grid ${pS(n.size)}` : `${n.count} ${n.kind}; gutter=${pS(n.gutter)}; offset=${pS(n.offset)}; align=${n.align}`;
20826
+ let e = n.kind === "grid" ? `grid ${fS(n.size)}` : `${n.count} ${n.kind}; gutter=${fS(n.gutter)}; offset=${fS(n.offset)}; align=${n.align}`;
20312
20827
  t.push(`- ${e}; color=${n.color}; opacity=${Math.round(n.opacity * 100)}%`);
20313
20828
  }
20314
20829
  }
20315
20830
  if (e.visualContext.measurements.length) {
20316
20831
  t.push("", "Relevant measurements");
20317
- for (let n of e.visualContext.measurements) t.push(`- ${n.targetRef ? `${n.targetRef}: ` : ""}${mS(n.rect)}; delta=${pS(n.deltaX)} × ${pS(n.deltaY)}`);
20832
+ for (let n of e.visualContext.measurements) t.push(`- ${n.targetRef ? `${n.targetRef}: ` : ""}${pS(n.rect)}; delta=${fS(n.deltaX)} × ${fS(n.deltaY)}`);
20318
20833
  }
20319
20834
  if (e.visualContext.distances.length) {
20320
20835
  t.push("", "Relevant distances");
20321
20836
  for (let n of e.visualContext.distances) {
20322
- let e = [n.targetARef, n.targetBRef].filter(Boolean).join(" → "), r = [n.horizontal ? `horizontal=${pS(n.horizontal.value)}` : null, n.vertical ? `vertical=${pS(n.vertical.value)}` : null].filter(Boolean).join("; ");
20837
+ let e = [n.targetARef, n.targetBRef].filter(Boolean).join(" → "), r = [n.horizontal ? `horizontal=${fS(n.horizontal.value)}` : null, n.vertical ? `vertical=${fS(n.vertical.value)}` : null].filter(Boolean).join("; ");
20323
20838
  t.push(`- ${e ? `${e}: ` : ""}${r || "overlapping"}`);
20324
20839
  }
20325
20840
  }
20326
20841
  return t.join("\n").trimEnd();
20327
20842
  }
20328
- function gS(e) {
20329
- let t = Qx([
20843
+ function hS(e) {
20844
+ let t = Zx([
20330
20845
  ...e.regions,
20331
20846
  ...e.targets.map((e) => e.inspection.rect),
20332
20847
  ...e.visualContext.measurements.map((e) => e.rect),
@@ -20356,7 +20871,7 @@ function gS(e) {
20356
20871
  captures: n
20357
20872
  };
20358
20873
  }
20359
- var _S = (e, t, n, r, i) => {
20874
+ var gS = (e, t, n, r, i) => {
20360
20875
  !Number.isFinite(r) || !Number.isFinite(i) || Math.abs(r - i) < .01 || e.push({
20361
20876
  kind: t,
20362
20877
  label: n,
@@ -20365,16 +20880,16 @@ var _S = (e, t, n, r, i) => {
20365
20880
  delta: i - r,
20366
20881
  unit: "px"
20367
20882
  });
20368
- }, vS = (e, t, n, r) => e.push({
20883
+ }, _S = (e, t, n, r) => e.push({
20369
20884
  kind: "missing",
20370
20885
  evidence: t,
20371
20886
  id: n,
20372
20887
  label: r
20373
- }), yS = (e, t) => Math.abs(e.left - t.left) < .01 && Math.abs(e.top - t.top) < .01 && Math.abs(e.width - t.width) < .01 && Math.abs(e.height - t.height) < .01;
20374
- function bS(e) {
20888
+ }), vS = (e, t) => Math.abs(e.left - t.left) < .01 && Math.abs(e.top - t.top) < .01 && Math.abs(e.width - t.width) < .01 && Math.abs(e.height - t.height) < .01;
20889
+ function yS(e) {
20375
20890
  let t = e.runtime.annotation(e.annotationId);
20376
20891
  if (!t) throw Error(`Mesurer annotation not found: ${e.annotationId}`);
20377
- let n = fS({
20892
+ let n = dS({
20378
20893
  runtime: e.runtime,
20379
20894
  ownerDocument: e.ownerDocument,
20380
20895
  ownerWindow: e.ownerWindow,
@@ -20384,42 +20899,42 @@ function bS(e) {
20384
20899
  if (n.scope.kind !== "annotation") throw Error("Mesurer annotation context invariant failed.");
20385
20900
  let r = e.runtime.snapshot();
20386
20901
  if (!r) throw Error("Mesurer workspace is not ready yet.");
20387
- let i = eS({
20902
+ let i = $x({
20388
20903
  measurements: r.measurements,
20389
20904
  activeMeasurement: r.activeMeasurement
20390
20905
  }), a = [];
20391
20906
  for (let e of t.baseline.targets) {
20392
20907
  let t = n.targets.find((t) => t.ref === e.id);
20393
20908
  if (!t) {
20394
- vS(a, "target", e.id, e.selector);
20909
+ _S(a, "target", e.id, e.selector);
20395
20910
  continue;
20396
20911
  }
20397
- _S(a, "target-rect", `${t.inspection.selector} left`, e.rect.left, t.inspection.rect.left), _S(a, "target-rect", `${t.inspection.selector} top`, e.rect.top, t.inspection.rect.top), _S(a, "target-rect", `${t.inspection.selector} width`, e.rect.width, t.inspection.rect.width), _S(a, "target-rect", `${t.inspection.selector} height`, e.rect.height, t.inspection.rect.height);
20912
+ gS(a, "target-rect", `${t.inspection.selector} left`, e.rect.left, t.inspection.rect.left), gS(a, "target-rect", `${t.inspection.selector} top`, e.rect.top, t.inspection.rect.top), gS(a, "target-rect", `${t.inspection.selector} width`, e.rect.width, t.inspection.rect.width), gS(a, "target-rect", `${t.inspection.selector} height`, e.rect.height, t.inspection.rect.height);
20398
20913
  }
20399
20914
  for (let e of t.baseline.guides) {
20400
20915
  let t = n.visualContext.guides.find((t) => t.id === e.id) ?? r.guides.find((t) => t.id === e.id);
20401
20916
  if (!t) {
20402
- vS(a, "guide", e.id, `${e.orientation} guide ${e.id}`);
20917
+ _S(a, "guide", e.id, `${e.orientation} guide ${e.id}`);
20403
20918
  continue;
20404
20919
  }
20405
- _S(a, "guide", `${e.orientation} guide ${e.id}`, e.position, t.position);
20920
+ gS(a, "guide", `${e.orientation} guide ${e.id}`, e.position, t.position);
20406
20921
  }
20407
20922
  for (let e of t.baseline.measurements) {
20408
20923
  let r = n.visualContext.measurements.find((t) => t.id === e.id) ?? i.find((t) => t.id === e.id);
20409
20924
  if (!r) {
20410
- let r = t.baseline.targets.find((t) => yS(t.rect, e.rect));
20411
- r && n.targets.some((e) => e.ref === r.id) || vS(a, "measurement", e.id, e.id);
20925
+ let r = t.baseline.targets.find((t) => vS(t.rect, e.rect));
20926
+ r && n.targets.some((e) => e.ref === r.id) || _S(a, "measurement", e.id, e.id);
20412
20927
  continue;
20413
20928
  }
20414
- _S(a, "measurement", `${e.id} width`, e.rect.width, r.rect.width), _S(a, "measurement", `${e.id} height`, e.rect.height, r.rect.height);
20929
+ gS(a, "measurement", `${e.id} width`, e.rect.width, r.rect.width), gS(a, "measurement", `${e.id} height`, e.rect.height, r.rect.height);
20415
20930
  }
20416
20931
  for (let e of t.baseline.distances) {
20417
20932
  let t = n.visualContext.distances.find((t) => t.id === e.id) ?? r.heldDistances.find((t) => t.id === e.id);
20418
20933
  if (!t) {
20419
- vS(a, "distance", e.id, e.id);
20934
+ _S(a, "distance", e.id, e.id);
20420
20935
  continue;
20421
20936
  }
20422
- e.horizontal && t.horizontal ? _S(a, "distance", `${e.id} horizontal`, e.horizontal.value, t.horizontal.value) : e.horizontal && !t.horizontal && vS(a, "distance", e.id, `${e.id} horizontal`), e.vertical && t.vertical ? _S(a, "distance", `${e.id} vertical`, e.vertical.value, t.vertical.value) : e.vertical && !t.vertical && vS(a, "distance", e.id, `${e.id} vertical`);
20937
+ e.horizontal && t.horizontal ? gS(a, "distance", `${e.id} horizontal`, e.horizontal.value, t.horizontal.value) : e.horizontal && !t.horizontal && _S(a, "distance", e.id, `${e.id} horizontal`), e.vertical && t.vertical ? gS(a, "distance", `${e.id} vertical`, e.vertical.value, t.vertical.value) : e.vertical && !t.vertical && _S(a, "distance", e.id, `${e.id} vertical`);
20423
20938
  }
20424
20939
  return {
20425
20940
  schema: "mesurer.review/v1",
@@ -20431,7 +20946,7 @@ function bS(e) {
20431
20946
  changes: a
20432
20947
  };
20433
20948
  }
20434
- async function xS(e, t, n) {
20949
+ async function bS(e, t, n) {
20435
20950
  try {
20436
20951
  if (t.navigator.clipboard?.writeText) {
20437
20952
  await t.navigator.clipboard.writeText(n);
@@ -20445,43 +20960,43 @@ async function xS(e, t, n) {
20445
20960
  }
20446
20961
  //#endregion
20447
20962
  //#region src/layout-guides.ts
20448
- var SS = Kv, CS = qv, wS = () => ({
20963
+ var xS = Kv, SS = qv, CS = () => ({
20449
20964
  ...yy(),
20450
- version: Kx
20451
- }), TS = "mesurer.context", ES = "context:v1", DS = "mesurer.context.settings", OS = "context.ui", kS = "data-mesurer-direct-text-edit-active", AS = {
20965
+ version: Gx
20966
+ }), wS = "mesurer.context", TS = "context:v1", ES = "mesurer.context.settings", DS = "context.ui", OS = "data-mesurer-direct-text-edit-active", kS = {
20452
20967
  viewBox: "0 0 256 256",
20453
20968
  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"]
20454
- }, jS = {
20969
+ }, AS = {
20455
20970
  viewBox: "0 0 256 256",
20456
20971
  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"]
20457
- }, MS = {
20972
+ }, jS = {
20458
20973
  viewBox: "0 0 256 256",
20459
20974
  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"]
20460
- }, NS = async (e, t, n = 1) => {
20975
+ }, MS = async (e, t, n = 1) => {
20461
20976
  await e.fonts?.ready;
20462
20977
  for (let e = 0; e < Math.max(1, n); e += 1) await new Promise((e) => t.requestAnimationFrame(() => e()));
20463
- }, PS = (e, t, n, r) => {
20464
- let i = async (i) => fS({
20978
+ }, NS = (e, t, n, r) => {
20979
+ let i = async (i) => dS({
20465
20980
  runtime: e,
20466
20981
  ownerDocument: t,
20467
20982
  ownerWindow: n,
20468
20983
  request: i,
20469
20984
  layoutGuides: r()
20470
- }), a = async (e) => hS(await i(e));
20985
+ }), a = async (e) => mS(await i(e));
20471
20986
  return {
20472
20987
  context: i,
20473
20988
  contextText: a,
20474
- copyContext: async (e) => xS(t, n, await a(e)),
20989
+ copyContext: async (e) => bS(t, n, await a(e)),
20475
20990
  select: async (r) => {
20476
20991
  let a = Array.isArray(r) ? [...r] : [String(r)];
20477
- return e.select(a), await NS(t, n), i({ scope: "selection" });
20992
+ return e.select(a), await MS(t, n), i({ scope: "selection" });
20478
20993
  },
20479
20994
  annotations: async () => e.annotations(),
20480
20995
  removeAnnotation: async (r) => {
20481
- e.removeAnnotation(r), await NS(t, n);
20996
+ e.removeAnnotation(r), await MS(t, n);
20482
20997
  },
20483
20998
  review: async (i) => {
20484
- if (await NS(t, n), i) return bS({
20999
+ if (await MS(t, n), i) return yS({
20485
21000
  runtime: e,
20486
21001
  ownerDocument: t,
20487
21002
  ownerWindow: n,
@@ -20489,7 +21004,7 @@ var SS = Kv, CS = qv, wS = () => ({
20489
21004
  layoutGuides: r()
20490
21005
  });
20491
21006
  let a = r();
20492
- return e.annotations().map((r) => bS({
21007
+ return e.annotations().map((r) => yS({
20493
21008
  runtime: e,
20494
21009
  ownerDocument: t,
20495
21010
  ownerWindow: n,
@@ -20497,38 +21012,38 @@ var SS = Kv, CS = qv, wS = () => ({
20497
21012
  layoutGuides: a
20498
21013
  }));
20499
21014
  },
20500
- capturePlan: async (e) => gS(await i(e)),
21015
+ capturePlan: async (e) => hS(await i(e)),
20501
21016
  prepareCapture: async () => {
20502
- e.prepareCapture(), await NS(t, n);
21017
+ e.prepareCapture(), await MS(t, n);
20503
21018
  },
20504
21019
  finishCapture: async () => {
20505
- e.finishCapture(), await NS(t, n);
21020
+ e.finishCapture(), await MS(t, n);
20506
21021
  }
20507
21022
  };
20508
- }, FS = (e) => {
21023
+ }, PS = (e) => {
20509
21024
  let t = e.currentSelection();
20510
21025
  return t.elements.length > 0 || t.region !== null;
20511
21026
  };
20512
- function IS(e = {}) {
21027
+ function FS(e = {}) {
20513
21028
  return {
20514
- id: TS,
20515
- version: Kx,
21029
+ id: wS,
21030
+ version: Gx,
20516
21031
  requires: ["runtime:solid"],
20517
- provides: [ES],
21032
+ provides: [TS],
20518
21033
  setup(t) {
20519
21034
  let n = t.service.get("runtime:solid");
20520
21035
  if (!n) throw Error("Mesurer context plugin requires the renderer runtime service.");
20521
- let r = n.createWorkspaceRuntime(TS), i = PS(r, n.ownerDocument, n.ownerWindow, () => t.service.get(CS)?.list() ?? []);
20522
- t.service.provide(ES, i), t.state.register({
20523
- id: DS,
21036
+ let r = n.createWorkspaceRuntime(wS), i = NS(r, n.ownerDocument, n.ownerWindow, () => t.service.get(SS)?.list() ?? []);
21037
+ t.service.provide(TS, i), t.state.register({
21038
+ id: ES,
20524
21039
  initial: { ui: e.ui ?? !0 },
20525
21040
  persist: !0
20526
21041
  }), t.state.register({
20527
- id: OS,
20528
- initial: { hasSelection: FS(r) }
21042
+ id: DS,
21043
+ initial: { hasSelection: PS(r) }
20529
21044
  });
20530
- let a = () => t.state.get("mesurer.context.settings")?.ui ?? !0, o = () => t.state.get(OS)?.hasSelection === !0, s = (e) => {
20531
- t.state.update(DS, (t) => ({
21045
+ let a = () => t.state.get("mesurer.context.settings")?.ui ?? !0, o = () => t.state.get(DS)?.hasSelection === !0, s = (e) => {
21046
+ t.state.update(ES, (t) => ({
20532
21047
  ...t,
20533
21048
  ui: e
20534
21049
  }));
@@ -20542,12 +21057,12 @@ function IS(e = {}) {
20542
21057
  region: e.region ? { ...e.region } : null
20543
21058
  }, r.selectGestureActive() ? c?.abandonNoteComposer() : n && c?.closeNoteComposer();
20544
21059
  let i = e.elements.length > 0 || e.region !== null;
20545
- i !== (t.state.get(OS)?.hasSelection ?? !1) && t.state.update(OS, () => ({ hasSelection: i }));
21060
+ i !== (t.state.get(DS)?.hasSelection ?? !1) && t.state.update(DS, () => ({ hasSelection: i }));
20546
21061
  });
20547
21062
  t.command.register("context.copy", () => i.copyContext()), t.command.register("context.copy-selection", () => i.copyContext({ scope: "selection" }));
20548
21063
  let g = () => {
20549
21064
  let e = u?.element;
20550
- e && (n.rendererRoot?.hasAttribute(kS) ? e.setAttribute(kS, "true") : e.removeAttribute(kS));
21065
+ e && (n.rendererRoot?.hasAttribute(OS) ? e.setAttribute(OS, "true") : e.removeAttribute(OS));
20551
21066
  }, _ = () => {
20552
21067
  d?.disconnect(), d = null, c = null, l?.(), l = null, u?.dispose(), u = null;
20553
21068
  }, v = () => {
@@ -20556,7 +21071,7 @@ function IS(e = {}) {
20556
21071
  let e = new n.ownerWindow.MutationObserver(g);
20557
21072
  d = e, e.observe(n.rendererRoot, {
20558
21073
  attributes: !0,
20559
- attributeFilter: [kS]
21074
+ attributeFilter: [OS]
20560
21075
  }), g();
20561
21076
  }
20562
21077
  let e = {
@@ -20580,7 +21095,7 @@ function IS(e = {}) {
20580
21095
  command: "context.copy",
20581
21096
  order: 70,
20582
21097
  toolbarMode: "always",
20583
- icon: AS,
21098
+ icon: kS,
20584
21099
  hidden: () => !a()
20585
21100
  }), t.tool.register({
20586
21101
  id: "context.copy-selection",
@@ -20589,7 +21104,7 @@ function IS(e = {}) {
20589
21104
  command: "context.copy-selection",
20590
21105
  order: 71,
20591
21106
  toolbarMode: "always",
20592
- icon: jS,
21107
+ icon: AS,
20593
21108
  hidden: () => !a(),
20594
21109
  disabled: () => !o()
20595
21110
  }), t.tool.register({
@@ -20599,7 +21114,7 @@ function IS(e = {}) {
20599
21114
  command: "context.add-note",
20600
21115
  order: 72,
20601
21116
  toolbarMode: "always",
20602
- icon: MS,
21117
+ icon: jS,
20603
21118
  hidden: () => !a(),
20604
21119
  disabled: () => !o()
20605
21120
  }), t.settings.register({
@@ -20622,7 +21137,7 @@ function IS(e = {}) {
20622
21137
  }
20623
21138
  //#endregion
20624
21139
  //#region src/host-layer.ts
20625
- var LS = {
21140
+ var IS = {
20626
21141
  display: "block",
20627
21142
  position: "fixed",
20628
21143
  inset: "0",
@@ -20638,7 +21153,7 @@ var LS = {
20638
21153
  overflow: "visible",
20639
21154
  background: "transparent",
20640
21155
  "box-sizing": "border-box",
20641
- "pointer-events": "auto",
21156
+ "pointer-events": "none",
20642
21157
  "z-index": "2147483647",
20643
21158
  opacity: "1",
20644
21159
  visibility: "visible",
@@ -20664,48 +21179,48 @@ var LS = {
20664
21179
  "letter-spacing": "normal",
20665
21180
  direction: "ltr"
20666
21181
  };
20667
- function RS(e) {
20668
- for (let [t, n] of Object.entries(LS)) e.style.setProperty(t, n, "important");
21182
+ function LS(e) {
21183
+ for (let [t, n] of Object.entries(IS)) e.style.setProperty(t, n, "important");
20669
21184
  }
20670
- function zS(e) {
21185
+ function RS(e) {
20671
21186
  return "popover" in e && "showPopover" in e && typeof e.showPopover == "function" && "hidePopover" in e && typeof e.hidePopover == "function";
20672
21187
  }
20673
- var BS = (e) => "newState" in e, VS = (e) => e.localName === "dialog";
20674
- function HS(e) {
20675
- if (!VS(e) || !e.open) return !1;
21188
+ var zS = (e) => "newState" in e, BS = (e) => e.localName === "dialog";
21189
+ function VS(e) {
21190
+ if (!BS(e) || !e.open) return !1;
20676
21191
  try {
20677
21192
  return e.matches(":modal");
20678
21193
  } catch {
20679
21194
  return !1;
20680
21195
  }
20681
21196
  }
20682
- function US(e, t, n = !0) {
20683
- RS(e);
21197
+ function HS(e, t, n = !0) {
21198
+ LS(e);
20684
21199
  let r = e.ownerDocument, i = r.defaultView ?? window, a = t, o = !1, s = "fixed", c = !1, l = 0, u = [];
20685
- if (n && zS(e) && (e.popover = "manual"), t.append(e), n && zS(e)) try {
21200
+ if (n && RS(e) && (e.popover = "manual"), t.append(e), n && RS(e)) try {
20686
21201
  e.showPopover(), c = e.matches(":popover-open"), c && (s = "top-layer");
20687
21202
  } catch {
20688
21203
  e.removeAttribute("popover");
20689
21204
  }
20690
21205
  let d = () => {
20691
- if (!(!c || !zS(e))) try {
21206
+ if (!(!c || !RS(e))) try {
20692
21207
  e.matches(":popover-open") || e.showPopover();
20693
21208
  } catch {}
20694
21209
  }, f = (t) => {
20695
21210
  if (e.parentNode === t) return;
20696
- let n = c && zS(e) && e.matches(":popover-open");
20697
- if (n && zS(e)) try {
21211
+ let n = c && RS(e) && e.matches(":popover-open");
21212
+ if (n && RS(e)) try {
20698
21213
  e.hidePopover();
20699
21214
  } catch {}
20700
- t.append(e), RS(e), n && d();
21215
+ t.append(e), LS(e), n && d();
20701
21216
  }, p = () => {
20702
- u = u.filter((e) => e.isConnected && HS(e)), f(u.at(-1) ?? a);
21217
+ u = u.filter((e) => e.isConnected && VS(e)), f(u.at(-1) ?? a);
20703
21218
  }, m = (e) => {
20704
21219
  u = u.filter((t) => t !== e), u.push(e), p();
20705
21220
  }, h = (e) => {
20706
21221
  u = u.filter((t) => t !== e), p();
20707
21222
  }, g = () => {
20708
- if (!(o || !c || !zS(e))) try {
21223
+ if (!(o || !c || !RS(e))) try {
20709
21224
  e.matches(":popover-open") && e.hidePopover(), e.showPopover();
20710
21225
  } catch {}
20711
21226
  }, _ = () => {
@@ -20714,27 +21229,27 @@ function US(e, t, n = !0) {
20714
21229
  }));
20715
21230
  }, v = (t) => {
20716
21231
  if (!c || t.target === e) return;
20717
- let n = BS(t) ? t.newState : void 0, r = t.target;
21232
+ let n = zS(t) ? t.newState : void 0, r = t.target;
20718
21233
  if (r instanceof i.Element) {
20719
- if (VS(r)) {
20720
- n === "open" && HS(r) ? (m(r), _()) : n === "closed" ? h(r) : n === "open" && _();
21234
+ if (BS(r)) {
21235
+ n === "open" && VS(r) ? (m(r), _()) : n === "closed" ? h(r) : n === "open" && _();
20721
21236
  return;
20722
21237
  }
20723
21238
  n === "open" && r.hasAttribute("popover") && _();
20724
21239
  }
20725
21240
  }, y = (e) => {
20726
21241
  let t = e.target;
20727
- t instanceof i.Element && VS(t) && h(t);
21242
+ t instanceof i.Element && BS(t) && h(t);
20728
21243
  }, b = () => {
20729
21244
  r.fullscreenElement && _();
20730
21245
  }, x = (e) => {
20731
- HS(e) && m(e);
20732
- for (let t of e.querySelectorAll("dialog")) HS(t) && m(t);
21246
+ VS(e) && m(e);
21247
+ for (let t of e.querySelectorAll("dialog")) VS(t) && m(t);
20733
21248
  }, S = new i.MutationObserver((e) => {
20734
21249
  if (c) for (let t of e) {
20735
21250
  if (t.type === "attributes") {
20736
21251
  let e = t.target;
20737
- e instanceof i.Element && VS(e) && (HS(e) ? m(e) : h(e));
21252
+ e instanceof i.Element && BS(e) && (VS(e) ? m(e) : h(e));
20738
21253
  }
20739
21254
  for (let e of t.addedNodes) e instanceof i.Element && x(e);
20740
21255
  u.some((e) => !e.isConnected) && p();
@@ -20750,7 +21265,7 @@ function US(e, t, n = !0) {
20750
21265
  bringToFront: g,
20751
21266
  dispose() {
20752
21267
  if (!o) {
20753
- 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 && zS(e) && e.matches(":popover-open")) try {
21268
+ 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 && RS(e) && e.matches(":popover-open")) try {
20754
21269
  e.hidePopover();
20755
21270
  } catch {}
20756
21271
  u = [];
@@ -20760,28 +21275,28 @@ function US(e, t, n = !0) {
20760
21275
  }
20761
21276
  //#endregion
20762
21277
  //#region src/plugins/codex/index.ts
20763
- var WS = "mesurer.codex", GS = "codex:v1", KS = "mesurer.plugin.before-disable", qS = 2e3, JS = 750, YS = 1800, XS = 2e3, ZS = 12e4, QS = 10, $S = 5, eC = "Codex host connection is unavailable. Electron apps must expose window.__MESURER_HOST__.codexBridge from preload.", tC = [
21278
+ var US = "mesurer.codex", WS = "codex:v1", GS = "mesurer.plugin.before-disable", KS = 2e3, qS = 750, JS = 1800, YS = 2e3, XS = 12e4, ZS = 10, QS = 5, $S = "Codex host connection is unavailable. Electron apps must expose window.__MESURER_HOST__.codexBridge from preload.", eC = [
20764
21279
  "Implement the current human feedback from Mesurer in this project.",
20765
21280
  "Treat the rendered page as the source of truth, preserve unrelated Mesurer review state,",
20766
21281
  "and verify the affected UI in the live page with Mesurer before claiming completion."
20767
- ].join(" "), nC = {
21282
+ ].join(" "), tC = {
20768
21283
  viewBox: "0 0 256 256",
20769
21284
  paths: ["M224,48,32,120l88,32,32,88Z M120,152l104-104"]
20770
- }, rC = {
21285
+ }, nC = {
20771
21286
  viewBox: "0 0 256 256",
20772
21287
  paths: ["M72,32H184a8,8,0,0,1,0,16h-8v20.69a40,40,0,0,1-11.72,28.28L137.25,124l27.03,27.03A40,40,0,0,1,176,179.31V208h8a8,8,0,0,1,0,16H72a8,8,0,0,1,0-16h8V179.31a40,40,0,0,1,11.72-28.28L118.75,124,91.72,96.97A40,40,0,0,1,80,68.69V48H72a8,8,0,0,1,0-16Zm24,16V68.69a24,24,0,0,0,7.03,16.97L128,110.63l24.97-24.97A24,24,0,0,0,160,68.69V48Zm32,90.63-24.97,24.97A24,24,0,0,0,96,180.57V208h64V180.57a24,24,0,0,0-7.03-16.97Z"]
20773
- }, iC = {
21288
+ }, rC = {
20774
21289
  viewBox: "0 0 256 256",
20775
21290
  paths: ["M229.66,77.66l-128,128a8,8,0,0,1-11.32,0l-56-56a8,8,0,0,1,11.32-11.32L96,188.69,218.34,66.34a8,8,0,0,1,11.32,11.32Z"]
20776
- }, aC = () => {
21291
+ }, iC = () => {
20777
21292
  try {
20778
21293
  let e = globalThis.location;
20779
21294
  return e?.origin ? `mesurer-codex-ui:v2:${e.origin}${e.pathname}` : null;
20780
21295
  } catch {
20781
21296
  return null;
20782
21297
  }
20783
- }, oC = () => {
20784
- let e = aC();
21298
+ }, aC = () => {
21299
+ let e = iC();
20785
21300
  if (!e) return null;
20786
21301
  try {
20787
21302
  let t = globalThis.sessionStorage?.getItem(e);
@@ -20806,18 +21321,18 @@ var WS = "mesurer.codex", GS = "codex:v1", KS = "mesurer.plugin.before-disable",
20806
21321
  } catch {
20807
21322
  return null;
20808
21323
  }
20809
- }, sC = (e) => {
20810
- let t = aC();
21324
+ }, oC = (e) => {
21325
+ let t = iC();
20811
21326
  if (t) try {
20812
21327
  globalThis.sessionStorage?.setItem(t, JSON.stringify(e));
20813
21328
  } catch {}
20814
- }, cC = async (e) => {
21329
+ }, sC = async (e) => {
20815
21330
  let t = window.__MESURER_HOST__?.codexBridge;
20816
- if (!t) throw Error(eC);
21331
+ if (!t) throw Error($S);
20817
21332
  let n = await t(e);
20818
21333
  if (n.ok === !1) throw Error(n.error ?? "Codex Bridge request failed.");
20819
21334
  return n;
20820
- }, lC = (e) => {
21335
+ }, cC = (e) => {
20821
21336
  let t = e.runtime;
20822
21337
  return !t || ![
20823
21338
  "shared",
@@ -20835,10 +21350,10 @@ var WS = "mesurer.codex", GS = "codex:v1", KS = "mesurer.plugin.before-disable",
20835
21350
  available: t.available === !0,
20836
21351
  reason: t.reason
20837
21352
  };
20838
- }, uC = (e) => ({
21353
+ }, lC = (e) => ({
20839
21354
  thread: e.thread?.trim() || null,
20840
21355
  threads: Array.isArray(e.threads) ? e.threads.filter((e) => e.trim().length > 0) : []
20841
- }), dC = (e) => {
21356
+ }), uC = (e) => {
20842
21357
  let t = e.deliveryId?.trim(), n = e.thread?.trim(), r = e.status;
20843
21358
  if (!t || !n || !r) throw Error("Codex Bridge returned an invalid delivery state.");
20844
21359
  let i = {
@@ -20850,7 +21365,7 @@ var WS = "mesurer.codex", GS = "codex:v1", KS = "mesurer.plugin.before-disable",
20850
21365
  updatedAt: Number.isFinite(e.updatedAt) ? Number(e.updatedAt) : 0
20851
21366
  };
20852
21367
  return e.queuedSubmissionId !== void 0 && (i.queuedSubmissionId = e.queuedSubmissionId?.trim() || null), e.dispatch !== void 0 && (i.dispatch = e.dispatch), e.dispatchError !== void 0 && (i.dispatchError = e.dispatchError?.trim() || null), i;
20853
- }, fC = (e) => ({
21368
+ }, dC = (e) => ({
20854
21369
  thread: e.thread?.trim() || null,
20855
21370
  threads: Array.isArray(e.threadDetails) ? e.threadDetails.flatMap((e) => {
20856
21371
  let t = e.id?.trim() ?? "";
@@ -20862,7 +21377,7 @@ var WS = "mesurer.codex", GS = "codex:v1", KS = "mesurer.plugin.before-disable",
20862
21377
  }] : [];
20863
21378
  }) : [],
20864
21379
  hasMore: e.hasMore === !0
20865
- }), pC = async (e, t, n) => {
21380
+ }), fC = async (e, t, n) => {
20866
21381
  let r = t?.instruction?.trim() || n, i = await e.annotations(), a = t?.annotationIds, o = a ? a.flatMap((e) => {
20867
21382
  let t = i.find((t) => t.id === e);
20868
21383
  return t ? [t] : [];
@@ -20885,18 +21400,18 @@ var WS = "mesurer.codex", GS = "codex:v1", KS = "mesurer.plugin.before-disable",
20885
21400
  ])
20886
21401
  ].join("\n").trimEnd()
20887
21402
  };
20888
- }, mC = (e) => e.length > 16 ? `${e.slice(0, 8)}…${e.slice(-4)}` : e, hC = (e, t = 42) => e.length > t ? `${e.slice(0, t - 1)}…` : e, gC = (e) => e instanceof Error && (e.message === eC || e.message === "Codex Bridge is unavailable in this host." || e.message.includes("Codex Bridge lease"));
20889
- function _C(e = {}) {
20890
- let t = e.instruction?.trim() || tC, n = e.ui ?? !0, r = e.clearCompletedAnnotations ?? !0;
21403
+ }, pC = (e) => e.length > 16 ? `${e.slice(0, 8)}…${e.slice(-4)}` : e, mC = (e, t = 42) => e.length > t ? `${e.slice(0, t - 1)}…` : e, hC = (e) => e instanceof Error && (e.message === $S || e.message === "Codex Bridge is unavailable in this host." || e.message.includes("Codex Bridge lease"));
21404
+ function gC(e = {}) {
21405
+ let t = e.instruction?.trim() || eC, n = e.ui ?? !0, r = e.clearCompletedAnnotations ?? !0;
20891
21406
  return {
20892
- id: WS,
20893
- version: Kx,
20894
- requires: [ES],
20895
- provides: [GS],
21407
+ id: US,
21408
+ version: Gx,
21409
+ requires: [TS],
21410
+ provides: [WS],
20896
21411
  async setup(e) {
20897
- let i = e.service.get(ES);
21412
+ let i = e.service.get(TS);
20898
21413
  if (!i) throw Error("Mesurer Codex plugin requires context() from mesurer-solid/plugins.");
20899
- let a = n ? oC() : null, o = "unknown", s = null, c = !1, l = a?.originThread ?? null, u = a?.selectedThread ?? a?.originThread ?? null, d = !1, f = null, p = [], m = [], h = !1, g = $S, _, v = "", y = null, b = a?.delivery ? {
21414
+ let a = n ? aC() : null, o = "unknown", s = null, c = !1, l = a?.originThread ?? null, u = a?.selectedThread ?? a?.originThread ?? null, d = !1, f = null, p = [], m = [], h = !1, g = QS, _, v = "", y = null, b = a?.delivery ? {
20900
21415
  id: a.delivery.id,
20901
21416
  thread: a.delivery.thread,
20902
21417
  status: a.delivery.status,
@@ -20905,38 +21420,38 @@ function _C(e = {}) {
20905
21420
  dispatch: a.delivery.dispatch ?? null,
20906
21421
  dispatchError: a.delivery.dispatchError ?? null
20907
21422
  } : null, x = 0, S = 0, C = null, w = !1, T = null, E = async (e) => {
20908
- if (e.action === "activate" || e.action === "runtime") return cC(e);
21423
+ if (e.action === "activate" || e.action === "runtime") return sC(e);
20909
21424
  if (!T) throw Error("Codex Bridge lease is not active for this plugin.");
20910
- return cC({
21425
+ return sC({
20911
21426
  ...e,
20912
21427
  leaseId: T
20913
21428
  });
20914
21429
  }, D = async () => {
20915
21430
  let e = T;
20916
21431
  if (e) {
20917
- if ((await cC({
21432
+ if ((await sC({
20918
21433
  action: "deactivate",
20919
21434
  leaseId: e
20920
21435
  })).released !== !0) throw Error("Codex Bridge did not confirm lease release.");
20921
21436
  T = null;
20922
21437
  }
20923
- }, O = await cC({
21438
+ }, O = await sC({
20924
21439
  action: "activate",
20925
21440
  thread: u ?? l ?? void 0
20926
21441
  }), k = O.leaseId?.trim();
20927
21442
  if (!k) throw Error("Codex Bridge did not return an activation lease.");
20928
- T = k, o = "available", s = lC(O);
20929
- let A = uC(O);
21443
+ T = k, o = "available", s = cC(O);
21444
+ let A = lC(O);
20930
21445
  c = !0, f = A.thread, p = A.threads, e.lifecycle.onDispose(() => {
20931
21446
  T && D().catch((e) => {
20932
21447
  let t = e instanceof Error ? e.message : String(e);
20933
21448
  console.error(`[Mesurer] Failed to release Codex host lease: ${t}`);
20934
21449
  });
20935
- }), e.hook.on(KS, async (e) => {
21450
+ }), e.hook.on(GS, async (e) => {
20936
21451
  e === "mesurer.codex" && await D();
20937
21452
  });
20938
21453
  let j = async () => {
20939
- let e = lC(await E({ action: "runtime" }));
21454
+ let e = cC(await E({ action: "runtime" }));
20940
21455
  if (!e) throw Error("Codex Bridge returned an invalid runtime state.");
20941
21456
  return s = e, e;
20942
21457
  }, M = async () => {
@@ -20944,8 +21459,8 @@ function _C(e = {}) {
20944
21459
  action: "health",
20945
21460
  thread: u ?? l ?? void 0
20946
21461
  });
20947
- return s = lC(e) ?? s, uC(e);
20948
- }, N = M, P = async (e) => dC(await E({
21462
+ return s = cC(e) ?? s, lC(e);
21463
+ }, N = M, P = async (e) => uC(await E({
20949
21464
  action: "delivery",
20950
21465
  deliveryId: e
20951
21466
  })), F = async (e) => {
@@ -20955,13 +21470,13 @@ function _C(e = {}) {
20955
21470
  deliveryId: e.id,
20956
21471
  thread: e.thread
20957
21472
  };
20958
- return e.queuedSubmissionId && (t.queuedSubmissionId = e.queuedSubmissionId), dC(await E(t));
21473
+ return e.queuedSubmissionId && (t.queuedSubmissionId = e.queuedSubmissionId), uC(await E(t));
20959
21474
  }, I = async (e = {}) => {
20960
21475
  let t = {
20961
21476
  action: "threads",
20962
- limit: e.limit ?? QS
21477
+ limit: e.limit ?? ZS
20963
21478
  }, n = e.thread?.trim();
20964
- return n && (t.thread = n), fC(await E(t));
21479
+ return n && (t.thread = n), dC(await E(t));
20965
21480
  }, L = () => u ?? l ?? (d ? null : f), R = () => {
20966
21481
  if (!n) return;
20967
21482
  let e = b?.id && (b.status === "queued" || b.status === "working" || b.status === "interrupted") ? {
@@ -20973,7 +21488,7 @@ function _C(e = {}) {
20973
21488
  dispatch: b.dispatch,
20974
21489
  dispatchError: b.dispatchError
20975
21490
  } : null;
20976
- sC({
21491
+ oC({
20977
21492
  version: 1,
20978
21493
  originThread: l,
20979
21494
  selectedThread: u,
@@ -20991,12 +21506,12 @@ function _C(e = {}) {
20991
21506
  "queueing",
20992
21507
  "queued",
20993
21508
  "working"
20994
- ].includes(b.status) ? rC : b.status === "completed" ? iC : nC : nC, ee = () => {
21509
+ ].includes(b.status) ? nC : b.status === "completed" ? rC : tC : tC, ee = () => {
20995
21510
  let e = [], t = /* @__PURE__ */ new Set(), n = (n) => {
20996
21511
  t.has(n.id) || (t.add(n.id), e.push(n));
20997
21512
  }, r = (e) => ({
20998
21513
  id: e,
20999
- title: `Codex ${mC(e)}`,
21514
+ title: `Codex ${pC(e)}`,
21000
21515
  updatedAt: null,
21001
21516
  connected: !0
21002
21517
  });
@@ -21024,7 +21539,7 @@ function _C(e = {}) {
21024
21539
  let t = e.id === l ? "Current · " : e.connected ? "Loaded · " : "", r = b?.thread === e.id ? ` · ${V(b.status)}` : "";
21025
21540
  return {
21026
21541
  id: `codex.thread.${e.id}`,
21027
- label: `${t}${hC(e.title)}${r}`,
21542
+ label: `${t}${mC(e.title)}${r}`,
21028
21543
  checked: () => n === e.id,
21029
21544
  disabled: () => B(),
21030
21545
  run() {
@@ -21032,15 +21547,15 @@ function _C(e = {}) {
21032
21547
  }
21033
21548
  };
21034
21549
  });
21035
- return g < QS && (e.length > g || h) && r.push({
21550
+ return g < ZS && (e.length > g || h) && r.push({
21036
21551
  id: "codex.thread.show-more",
21037
21552
  label: "Show 5 more…",
21038
21553
  run() {
21039
- g = QS, W();
21554
+ g = ZS, W();
21040
21555
  }
21041
21556
  }), b?.queuedSubmissionId && b.status === "queued" && (b.dispatch === "desktop-opened" || b.dispatch === "desktop-wake-failed") && r.push({
21042
21557
  id: "codex.delivery.receipt",
21043
- label: `Receipt · ${mC(b.queuedSubmissionId)}`,
21558
+ label: `Receipt · ${pC(b.queuedSubmissionId)}`,
21044
21559
  disabled: () => !0,
21045
21560
  run: () => void 0
21046
21561
  }), r;
@@ -21077,7 +21592,7 @@ function _C(e = {}) {
21077
21592
  }, re = async (e) => {
21078
21593
  if (o !== "available") return;
21079
21594
  let t = await I({
21080
- limit: QS,
21595
+ limit: ZS,
21081
21596
  thread: e ?? void 0
21082
21597
  });
21083
21598
  m = t.threads, h = t.hasMore, p = t.threads.filter((e) => e.connected).map((e) => e.id), f = t.thread;
@@ -21099,7 +21614,7 @@ function _C(e = {}) {
21099
21614
  }, ae = () => {
21100
21615
  S && globalThis.clearTimeout(S), S = globalThis.setTimeout(() => {
21101
21616
  S = 0, b?.status === "completed" && (b = null, R(), W());
21102
- }, YS);
21617
+ }, JS);
21103
21618
  }, oe = async (e) => {
21104
21619
  if (!(!b || b.id !== e.id)) {
21105
21620
  if (b = {
@@ -21121,14 +21636,14 @@ function _C(e = {}) {
21121
21636
  if (e.status === "interrupted") {
21122
21637
  R(), W();
21123
21638
  let t = e.updatedAt > 0 ? e.updatedAt : Date.now();
21124
- Date.now() - t < ZS && (x = globalThis.setTimeout(() => {
21639
+ Date.now() - t < XS && (x = globalThis.setTimeout(() => {
21125
21640
  x = 0, se(e.id);
21126
- }, XS));
21641
+ }, YS));
21127
21642
  return;
21128
21643
  }
21129
21644
  W(), x = globalThis.setTimeout(() => {
21130
21645
  x = 0, se(e.id);
21131
- }, JS);
21646
+ }, qS);
21132
21647
  }
21133
21648
  }, se = async (e) => {
21134
21649
  if (!(w || b?.id !== e)) try {
@@ -21152,7 +21667,7 @@ function _C(e = {}) {
21152
21667
  b = {
21153
21668
  ...b,
21154
21669
  status: "failed"
21155
- }, R(), gC(n) && (o = "unavailable"), W();
21670
+ }, R(), hC(n) && (o = "unavailable"), W();
21156
21671
  }
21157
21672
  }, ce = {
21158
21673
  health: M,
@@ -21164,11 +21679,11 @@ function _C(e = {}) {
21164
21679
  let n = await E({
21165
21680
  action: "target",
21166
21681
  thread: t
21167
- }), r = uC(n);
21168
- return s = lC(n) ?? s, z(t, !l), f = r.thread, p = r.threads, o = "available", c = !0, W(), r;
21682
+ }), r = lC(n);
21683
+ return s = cC(n) ?? s, z(t, !l), f = r.thread, p = r.threads, o = "available", c = !0, W(), r;
21169
21684
  },
21170
21685
  async queue(e) {
21171
- let r = await pC(i, e, t), a = e?.thread?.trim(), s = a || (n ? L() : null);
21686
+ let r = await fC(i, e, t), a = e?.thread?.trim(), s = a || (n ? L() : null);
21172
21687
  if (n && !a && (d || !s)) throw Error("Choose a Codex thread before queueing feedback.");
21173
21688
  let c = { message: r.message };
21174
21689
  s && (c.thread = s);
@@ -21188,14 +21703,14 @@ function _C(e = {}) {
21188
21703
  };
21189
21704
  return e.queuedSubmissionId !== void 0 && (n.queuedSubmissionId = e.queuedSubmissionId?.trim() || null), e.dispatch !== void 0 && (n.dispatch = e.dispatch), e.dispatchError !== void 0 && (n.dispatchError = e.dispatchError?.trim() || null), n;
21190
21705
  } catch (e) {
21191
- throw n && gC(e) && (o = "unavailable", W()), e;
21706
+ throw n && hC(e) && (o = "unavailable", W()), e;
21192
21707
  }
21193
21708
  },
21194
21709
  send(e) {
21195
21710
  return ce.queue(e);
21196
21711
  }
21197
21712
  };
21198
- e.service.provide(GS, ce);
21713
+ e.service.provide(WS, ce);
21199
21714
  let le = async () => {
21200
21715
  if (!(C || B())) return ie(), b = {
21201
21716
  id: null,
@@ -21226,9 +21741,9 @@ function _C(e = {}) {
21226
21741
  updatedAt: 0
21227
21742
  }) : x = globalThis.setTimeout(() => {
21228
21743
  x = 0, se(e.deliveryId);
21229
- }, JS) : S = globalThis.setTimeout(() => {
21744
+ }, qS) : S = globalThis.setTimeout(() => {
21230
21745
  S = 0, b?.id === null && b?.status === "queued" && (b = null, R(), W());
21231
- }, YS);
21746
+ }, JS);
21232
21747
  } catch (e) {
21233
21748
  b = null, R(), W();
21234
21749
  let t = e instanceof Error ? e.message : String(e);
@@ -21256,7 +21771,7 @@ function _C(e = {}) {
21256
21771
  }, 0));
21257
21772
  let t = globalThis.setInterval(() => {
21258
21773
  c && te().catch(() => void 0);
21259
- }, qS);
21774
+ }, KS);
21260
21775
  e.lifecycle.onDispose(() => {
21261
21776
  w = !0, ie(), globalThis.clearInterval(t), _?.dispose(), _ = void 0;
21262
21777
  });
@@ -21266,66 +21781,66 @@ function _C(e = {}) {
21266
21781
  }
21267
21782
  //#endregion
21268
21783
  //#region src/recording.ts
21269
- var vC = hb, yC = (e = {}) => ({
21270
- ...Lb(e),
21271
- version: Kx
21272
- }), bC = Yb, xC = (e = {}) => ({
21273
- ...hx(e),
21274
- version: Kx
21275
- }), SC = () => globalThis.window?.__MESURER_HOST__?.codexBridge !== void 0, CC = [
21784
+ var _C = mb, vC = (e = {}) => ({
21785
+ ...Ib(e),
21786
+ version: Gx
21787
+ }), yC = Jb, bC = (e = {}) => ({
21788
+ ...mx(e),
21789
+ version: Gx
21790
+ }), xC = () => globalThis.window?.__MESURER_HOST__?.codexBridge !== void 0, SC = [
21276
21791
  {
21277
- id: TS,
21792
+ id: wS,
21278
21793
  label: "Context",
21279
21794
  order: 30,
21280
- create: IS,
21795
+ create: FS,
21281
21796
  settingsIds: ["context"],
21282
21797
  hiddenSettingsControlIds: ["ui"]
21283
21798
  },
21284
21799
  {
21285
- id: qx,
21800
+ id: Kx,
21286
21801
  label: "Edit",
21287
21802
  order: 35,
21288
- create: Yx,
21803
+ create: Jx,
21289
21804
  settingsIds: ["arrange"]
21290
21805
  },
21291
21806
  {
21292
- id: SS,
21807
+ id: xS,
21293
21808
  label: "Layout Guides",
21294
21809
  order: 38,
21295
- create: wS
21810
+ create: CS
21296
21811
  },
21297
21812
  {
21298
- id: bC,
21813
+ id: yC,
21299
21814
  label: "Screenshot",
21300
21815
  order: 40,
21301
- create: xC,
21816
+ create: bC,
21302
21817
  settingsIds: ["screenshot"],
21303
21818
  hiddenSettingsControlIds: ["tool"]
21304
21819
  },
21305
21820
  {
21306
- id: vC,
21821
+ id: _C,
21307
21822
  label: "Recording",
21308
21823
  description: "Record a selected page region and trim, resize, or export it through MediaBunny.",
21309
21824
  order: 42,
21310
- create: yC,
21825
+ create: vC,
21311
21826
  settingsIds: ["recording"],
21312
21827
  hiddenSettingsControlIds: ["tool"]
21313
21828
  },
21314
21829
  {
21315
- id: WS,
21830
+ id: US,
21316
21831
  label: "Codex",
21317
21832
  description: "Connects Mesurer to open Codex threads on this computer. Electron hosts provide the native Codex connection through preload.",
21318
21833
  order: 45,
21319
- create: _C
21834
+ create: gC
21320
21835
  }
21321
- ], wC = (e) => {
21322
- let t = e !== void 0, n = new Map((e ?? []).map((e) => [e.id, e])), r = new Set(CC.map((e) => e.id)), i = CC.map((e) => {
21836
+ ], CC = (e) => {
21837
+ let t = e !== void 0, n = new Map((e ?? []).map((e) => [e.id, e])), r = new Set(SC.map((e) => e.id)), i = SC.map((e) => {
21323
21838
  let r = n.get(e.id);
21324
21839
  return {
21325
21840
  ...e,
21326
21841
  settingsIds: e.settingsIds ? [...e.settingsIds] : void 0,
21327
21842
  hiddenSettingsControlIds: e.hiddenSettingsControlIds ? [...e.hiddenSettingsControlIds] : void 0,
21328
- enabled: t ? !!r : e.id === "mesurer.codex" ? SC() : e.enabled !== !1,
21843
+ enabled: t ? !!r : e.id === "mesurer.codex" ? xC() : e.enabled !== !1,
21329
21844
  create: r ? () => r : e.create
21330
21845
  };
21331
21846
  });
@@ -21336,16 +21851,16 @@ var vC = hb, yC = (e = {}) => ({
21336
21851
  create: () => n
21337
21852
  });
21338
21853
  return i;
21339
- }, TC = (e) => e;
21340
- function EC() {
21341
- return oS();
21854
+ }, wC = (e) => e;
21855
+ function TC() {
21856
+ return aS();
21342
21857
  }
21343
- async function DC(e = {}) {
21344
- return sS(e);
21858
+ async function EC(e = {}) {
21859
+ return oS(e);
21345
21860
  }
21346
21861
  //#endregion
21347
21862
  //#region src/index.tsx
21348
- var OC = {
21863
+ var DC = {
21349
21864
  select: "select",
21350
21865
  xray: "xray",
21351
21866
  colorPicker: "color-picker",
@@ -21355,14 +21870,14 @@ var OC = {
21355
21870
  distance: "distance",
21356
21871
  settings: "settings"
21357
21872
  };
21358
- function kC(e = {}) {
21873
+ function OC(e = {}) {
21359
21874
  if (!("document" in globalThis)) throw Error("mountMesurer() requires a browser or Electron renderer document.");
21360
21875
  let { target: t = document.body, isolate: n = !0, shadowMode: r = "open", topLayer: i = !0, agent: a = !1, signal: o, onPluginHost: s, onPluginsReady: c, plugins: l, excludeBuiltins: u, excludePlugins: d, ...f } = e;
21361
21876
  if (o?.aborted) throw o.reason ?? new DOMException("Mesurer mount aborted.", "AbortError");
21362
21877
  if (!t) throw Error("mountMesurer() requires document.body to exist or an explicit target.");
21363
21878
  let p = t.ownerDocument ?? document, m = p.defaultView ?? window, h = p.createElement("div");
21364
21879
  h.dataset.mesurerIsland = "true";
21365
- let g = US(h, t, i), _ = h, v = h, y = h;
21880
+ let g = HS(h, t, i), _ = h, v = h, y = h;
21366
21881
  if (n) {
21367
21882
  let e = h.attachShadow({ mode: r });
21368
21883
  v = p.createElement("div"), v.dataset.mesurerIslandMount = "true", e.append(v), _ = e, y = e;
@@ -21373,7 +21888,7 @@ function kC(e = {}) {
21373
21888
  C = e, w = t;
21374
21889
  });
21375
21890
  D.catch(() => void 0), O.catch(() => void 0);
21376
- let k = async () => (await (b ? Promise.resolve(b) : D), O), A = a === !0 ? {} : a === !1 ? null : a, j = Gx({
21891
+ let k = async () => (await (b ? Promise.resolve(b) : D), O), A = a === !0 ? {} : a === !1 ? null : a, j = Wx({
21377
21892
  ownerDocument: p,
21378
21893
  root: A?.root ?? (t.nodeType === 11 ? t : p),
21379
21894
  getPluginHost: () => b,
@@ -21385,12 +21900,12 @@ function kC(e = {}) {
21385
21900
  return t;
21386
21901
  }, N = async () => {
21387
21902
  await j.ready();
21388
- let e = b?.service.get(ES);
21903
+ let e = b?.service.get(TS);
21389
21904
  if (!e) throw Error("Mesurer Context is disabled. Enable it in Settings or include context() in plugins.");
21390
21905
  return e;
21391
21906
  }, P = async () => {
21392
21907
  await j.ready();
21393
- let e = b?.service.get(Xx);
21908
+ let e = b?.service.get(Yx);
21394
21909
  if (!e) throw Error("Mesurer Edit is disabled. Enable it in Settings or include edit() in plugins.");
21395
21910
  return e;
21396
21911
  }, F = async (e) => (await N()).context(e), I = async (e) => (await N()).contextText(e), L = async (e) => (await N()).copyContext(e), R = async (e) => (await N()).select(e), z = async () => (await N()).annotations(), B = async (e) => (await N()).review(e), V = async (e) => (await N()).capturePlan(e), H = async () => (await N()).prepareCapture(), U = async () => (await N()).finishCapture(), ee = async () => (await P()).intents(), te = async (e) => {
@@ -21401,7 +21916,7 @@ function kC(e = {}) {
21401
21916
  (await P()).show(e, t);
21402
21917
  }, W = async (e, t) => (await P()).capturePlan(e, t), re = async (e, t) => (await P()).review(e, t), ie = () => j.textEdits(), ae = (e) => j.textEdit(e), oe = Object.assign(j, {
21403
21918
  capabilities: () => {
21404
- let e = !!b?.service.get(ES);
21919
+ let e = !!b?.service.get(TS);
21405
21920
  return {
21406
21921
  protocol: "mesurer.agent/v1",
21407
21922
  contextSchema: "mesurer.context/v1",
@@ -21411,8 +21926,8 @@ function kC(e = {}) {
21411
21926
  annotations: e,
21412
21927
  review: e,
21413
21928
  capturePlan: e,
21414
- arrange: !!b?.service.get(Xx),
21415
- textEdit: !!b?.service.get(Ux)
21929
+ arrange: !!b?.service.get(Yx),
21930
+ textEdit: !!b?.service.get(Hx)
21416
21931
  }
21417
21932
  };
21418
21933
  },
@@ -21431,9 +21946,9 @@ function kC(e = {}) {
21431
21946
  reviewArrange: re
21432
21947
  }), se = {
21433
21948
  ...f,
21434
- version: Kx,
21435
- plugins: wC(l),
21436
- excludePlugins: u ? u.map((e) => OC[e]) : [...d ?? []]
21949
+ version: Gx,
21950
+ plugins: CC(l),
21951
+ excludePlugins: u ? u.map((e) => DC[e]) : [...d ?? []]
21437
21952
  }, ce = Oi(() => Yr(rv, Di(se, {
21438
21953
  portalTarget: y,
21439
21954
  pageTarget: t,
@@ -21502,6 +22017,6 @@ function kC(e = {}) {
21502
22017
  }
21503
22018
  return he;
21504
22019
  }
21505
- var AC = kC;
22020
+ var kC = OC;
21506
22021
  //#endregion
21507
- export { Ux as MESURER_TEXT_EDIT_SERVICE_ID, Kx as MESURER_VERSION, fS as captureMesurerContext, xS as copyTextToClipboard, Gx as createMesurerAgentHarness, gS as createMesurerCapturePlan, EC as createMesurerPluginHost, DC as createMesurerRuntime, TC as defineMesurerPlugin, hS as formatMesurerContext, AC as mountMeasurer, kC as mountMesurer, bS as reviewMesurerAnnotation };
22022
+ export { Hx as MESURER_TEXT_EDIT_SERVICE_ID, Gx as MESURER_VERSION, dS as captureMesurerContext, bS as copyTextToClipboard, Wx as createMesurerAgentHarness, hS as createMesurerCapturePlan, TC as createMesurerPluginHost, EC as createMesurerRuntime, wC as defineMesurerPlugin, mS as formatMesurerContext, kC as mountMeasurer, OC as mountMesurer, yS as reviewMesurerAnnotation };