mesurer 0.2.2 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +5 -0
- package/README.md +2 -2
- package/dist/chunk-DBVWPZ7G.js +272 -0
- package/dist/index.cjs +1156 -581
- package/dist/index.js +688 -547
- package/dist/screen-recording-gif-J4EOWLWH.js +155 -0
- package/dist/styles.css +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
import {
|
|
2
|
+
correctWebmDuration,
|
|
3
|
+
encodeGifClip,
|
|
4
|
+
isFullClipExport,
|
|
5
|
+
readBlobVideoDuration,
|
|
6
|
+
reencodeVideoClip,
|
|
7
|
+
requestDisplayMediaStream,
|
|
8
|
+
resolveRecordingDuration,
|
|
9
|
+
seekVideoElement
|
|
10
|
+
} from "./chunk-DBVWPZ7G.js";
|
|
11
|
+
|
|
1
12
|
// runtime/style-inject.ts
|
|
2
13
|
var MESURER_STYLE_ID = "mesurer-styles";
|
|
3
14
|
var injectedTargets = /* @__PURE__ */ new WeakSet();
|
|
@@ -48,7 +59,7 @@ function ensureMesurerStyles(cssText, target) {
|
|
|
48
59
|
}
|
|
49
60
|
|
|
50
61
|
// styles.generated.ts
|
|
51
|
-
var MESURER_STYLES = '/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--msr-font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--msr-font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--msr-color-red-50:oklch(97.1% .013 17.38);--msr-color-red-200:oklch(88.5% .062 18.334);--msr-color-red-600:oklch(57.7% .245 27.325);--msr-color-red-700:oklch(50.5% .213 27.518);--msr-color-black:#000;--msr-color-white:#fff;--msr-spacing:.25rem;--msr-text-xs:.75rem;--msr-text-xs--line-height:calc(1 / .75);--msr-text-sm:.875rem;--msr-text-sm--line-height:calc(1.25 / .875);--msr-font-weight-normal:400;--msr-font-weight-medium:500;--msr-font-weight-semibold:600;--msr-radius-sm:.25rem;--msr-radius-md:.375rem;--msr-radius-lg:.5rem;--msr-radius-xl:.75rem;--msr-ease-out:cubic-bezier(0, 0, .2, 1);--msr-animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--msr-aspect-video:16 / 9;--msr-default-transition-duration:.15s;--msr-default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--msr-default-font-family:var(--msr-font-sans);--msr-default-mono-font-family:var(--msr-font-mono);--msr-radius-control:5px;--msr-radius-wide-card:13px;--msr-shadow-toolbar:drop-shadow(0 0 .4px #00000038) drop-shadow(0 6px 18px #00000008) drop-shadow(0 3px 9px #0000000f) drop-shadow(0 1px 1px #0000000f);--msr-shadow-floating:0 0 0 .4px #00000038, 0 6px 18px #00000008, 0 3px 9px #0000000f, 0 1px 1px #0000000f;--msr-color-ink-50:#f8fafc;--msr-color-ink-100:#f1f5f9;--msr-color-ink-200:#e2e8f0;--msr-color-ink-300:#cbd5e1;--msr-color-ink-500:#64748b;--msr-color-ink-700:#334155;--msr-color-ink-900:#18181b}}@layer base{.mesurer-root{font-family:var(--msr-font-sans);font-size:12px;line-height:1.5}.mesurer-root button,.mesurer-root input,.mesurer-root select,.mesurer-root textarea{font-family:inherit;font-size:inherit;line-height:inherit}.mesurer-root input[type=search]::-webkit-search-cancel-button{appearance:none;display:none}.mesurer-root input[type=search]::-webkit-search-decoration{appearance:none;display:none}.mesurer-root input[type=search]::-moz-search-clear{appearance:none;display:none}.mesurer-root input[type=search]::-ms-clear{appearance:none;display:none}:where(.mesurer-root,.mesurer-root *){--tw-border-style:solid;--tw-outline-style:solid;--tw-shadow:0 0 #0000;--tw-inset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-offset-shadow:0 0 #0000;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;border:0 solid}.mesurer-root button,.mesurer-root input,.mesurer-root select,.mesurer-root textarea{appearance:none;font:inherit;color:inherit;letter-spacing:inherit;background-color:#0000;padding:0}}@layer components;@layer utilities{.msr\\:pointer-events-auto{pointer-events:auto}.msr\\:pointer-events-none{pointer-events:none}.msr\\:absolute{position:absolute}.msr\\:fixed{position:fixed}.msr\\:relative{position:relative}.msr\\:inset-0{inset:calc(var(--msr-spacing) * 0)}.msr\\:inset-x-0{inset-inline:calc(var(--msr-spacing) * 0)}.msr\\:inset-y-0{inset-block:calc(var(--msr-spacing) * 0)}.msr\\:top-0{top:calc(var(--msr-spacing) * 0)}.msr\\:top-0\\.5{top:calc(var(--msr-spacing) * .5)}.msr\\:top-1\\.5{top:calc(var(--msr-spacing) * 1.5)}.msr\\:top-1\\/2{top:50%}.msr\\:top-1\\/3{top:33.3333%}.msr\\:top-2\\/3{top:66.6667%}.msr\\:top-9{top:calc(var(--msr-spacing) * 9)}.msr\\:top-\\[18px\\]{top:18px}.msr\\:top-full{top:100%}.msr\\:right-0{right:calc(var(--msr-spacing) * 0)}.msr\\:right-1{right:calc(var(--msr-spacing) * 1)}.msr\\:right-1\\.5{right:calc(var(--msr-spacing) * 1.5)}.msr\\:right-2{right:calc(var(--msr-spacing) * 2)}.msr\\:right-\\[8px\\]{right:8px}.msr\\:bottom-0{bottom:calc(var(--msr-spacing) * 0)}.msr\\:bottom-1\\.5{bottom:calc(var(--msr-spacing) * 1.5)}.msr\\:bottom-4{bottom:calc(var(--msr-spacing) * 4)}.msr\\:bottom-full{bottom:100%}.msr\\:left-0{left:calc(var(--msr-spacing) * 0)}.msr\\:left-1\\.5{left:calc(var(--msr-spacing) * 1.5)}.msr\\:left-1\\/2{left:50%}.msr\\:left-1\\/3{left:33.3333%}.msr\\:left-2\\/3{left:66.6667%}.msr\\:left-\\[8px\\]{left:8px}.msr\\:left-\\[18px\\]{left:18px}.msr\\:left-full{left:100%}.msr\\:z-10{z-index:10}.msr\\:z-20{z-index:20}.msr\\:z-30{z-index:30}.msr\\:z-40{z-index:40}.msr\\:z-50{z-index:50}.msr\\:z-80{z-index:80}.msr\\:z-100{z-index:100}.msr\\:z-\\[1\\]{z-index:1}.msr\\:z-\\[2\\]{z-index:2}.msr\\:z-\\[25\\]{z-index:25}.msr\\:z-\\[60\\]{z-index:60}.msr\\:z-\\[70\\]{z-index:70}.msr\\:z-\\[71\\]{z-index:71}.msr\\:z-\\[80\\]{z-index:80}.msr\\:z-\\[85\\]{z-index:85}.msr\\:z-\\[90\\]{z-index:90}.msr\\:z-\\[95\\]{z-index:95}.msr\\:z-\\[100\\]{z-index:100}.msr\\:z-\\[101\\]{z-index:101}.msr\\:col-span-2{grid-column:span 2/span 2}.msr\\:m-0{margin:calc(var(--msr-spacing) * 0)}.msr\\:mx-auto{margin-inline:auto}.msr\\:my-1{margin-block:calc(var(--msr-spacing) * 1)}.msr\\:mt-0\\.5{margin-top:calc(var(--msr-spacing) * .5)}.msr\\:mt-1{margin-top:calc(var(--msr-spacing) * 1)}.msr\\:mt-2{margin-top:calc(var(--msr-spacing) * 2)}.msr\\:mt-3{margin-top:calc(var(--msr-spacing) * 3)}.msr\\:mt-4{margin-top:calc(var(--msr-spacing) * 4)}.msr\\:mb-1{margin-bottom:calc(var(--msr-spacing) * 1)}.msr\\:mb-2{margin-bottom:calc(var(--msr-spacing) * 2)}.msr\\:-ml-1{margin-left:calc(var(--msr-spacing) * -1)}.msr\\:ml-1{margin-left:calc(var(--msr-spacing) * 1)}.msr\\:ml-auto{margin-left:auto}.msr\\:box-border{box-sizing:border-box}.msr\\:line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.msr\\:block{display:block}.msr\\:flex{display:flex}.msr\\:grid{display:grid}.msr\\:inline-flex{display:inline-flex}.msr\\:size-1\\.5{width:calc(var(--msr-spacing) * 1.5);height:calc(var(--msr-spacing) * 1.5)}.msr\\:size-2{width:calc(var(--msr-spacing) * 2);height:calc(var(--msr-spacing) * 2)}.msr\\:size-3{width:calc(var(--msr-spacing) * 3);height:calc(var(--msr-spacing) * 3)}.msr\\:size-4{width:calc(var(--msr-spacing) * 4);height:calc(var(--msr-spacing) * 4)}.msr\\:size-5{width:calc(var(--msr-spacing) * 5);height:calc(var(--msr-spacing) * 5)}.msr\\:size-6{width:calc(var(--msr-spacing) * 6);height:calc(var(--msr-spacing) * 6)}.msr\\:size-7{width:calc(var(--msr-spacing) * 7);height:calc(var(--msr-spacing) * 7)}.msr\\:size-8{width:calc(var(--msr-spacing) * 8);height:calc(var(--msr-spacing) * 8)}.msr\\:size-\\[10px\\]{width:10px;height:10px}.msr\\:size-\\[18px\\]{width:18px;height:18px}.msr\\:size-full{width:100%;height:100%}.msr\\:h-0{height:calc(var(--msr-spacing) * 0)}.msr\\:h-1\\.5{height:calc(var(--msr-spacing) * 1.5)}.msr\\:h-2{height:calc(var(--msr-spacing) * 2)}.msr\\:h-2\\.5{height:calc(var(--msr-spacing) * 2.5)}.msr\\:h-3{height:calc(var(--msr-spacing) * 3)}.msr\\:h-5{height:calc(var(--msr-spacing) * 5)}.msr\\:h-6{height:calc(var(--msr-spacing) * 6)}.msr\\:h-7{height:calc(var(--msr-spacing) * 7)}.msr\\:h-8{height:calc(var(--msr-spacing) * 8)}.msr\\:h-\\[3px\\]{height:3px}.msr\\:h-\\[14px\\]{height:14px}.msr\\:h-auto{height:auto}.msr\\:h-full{height:100%}.msr\\:h-max{height:max-content}.msr\\:h-px{height:1px}.msr\\:max-h-32{max-height:calc(var(--msr-spacing) * 32)}.msr\\:max-h-36{max-height:calc(var(--msr-spacing) * 36)}.msr\\:max-h-48{max-height:calc(var(--msr-spacing) * 48)}.msr\\:max-h-\\[28rem\\]{max-height:28rem}.msr\\:max-h-\\[120px\\]{max-height:120px}.msr\\:max-h-full{max-height:100%}.msr\\:min-h-0{min-height:calc(var(--msr-spacing) * 0)}.msr\\:min-h-6{min-height:calc(var(--msr-spacing) * 6)}.msr\\:min-h-8{min-height:calc(var(--msr-spacing) * 8)}.msr\\:min-h-\\[4\\.5rem\\]{min-height:4.5rem}.msr\\:w-0{width:calc(var(--msr-spacing) * 0)}.msr\\:w-0\\.5{width:calc(var(--msr-spacing) * .5)}.msr\\:w-4{width:calc(var(--msr-spacing) * 4)}.msr\\:w-5{width:calc(var(--msr-spacing) * 5)}.msr\\:w-6{width:calc(var(--msr-spacing) * 6)}.msr\\:w-8{width:calc(var(--msr-spacing) * 8)}.msr\\:w-9{width:calc(var(--msr-spacing) * 9)}.msr\\:w-12{width:calc(var(--msr-spacing) * 12)}.msr\\:w-32{width:calc(var(--msr-spacing) * 32)}.msr\\:w-40{width:calc(var(--msr-spacing) * 40)}.msr\\:w-44{width:calc(var(--msr-spacing) * 44)}.msr\\:w-48{width:calc(var(--msr-spacing) * 48)}.msr\\:w-52{width:calc(var(--msr-spacing) * 52)}.msr\\:w-60{width:calc(var(--msr-spacing) * 60)}.msr\\:w-64{width:calc(var(--msr-spacing) * 64)}.msr\\:w-72{width:calc(var(--msr-spacing) * 72)}.msr\\:w-\\[18px\\]{width:18px}.msr\\:w-\\[22rem\\]{width:22rem}.msr\\:w-\\[26px\\]{width:26px}.msr\\:w-\\[36rem\\]{width:36rem}.msr\\:w-\\[220px\\]{width:220px}.msr\\:w-auto{width:auto}.msr\\:w-full{width:100%}.msr\\:w-max{width:max-content}.msr\\:w-px{width:1px}.msr\\:max-w-\\[180px\\]{max-width:180px}.msr\\:max-w-\\[calc\\(100vw-16px\\)\\]{max-width:calc(100vw - 16px)}.msr\\:max-w-\\[calc\\(100vw-24px\\)\\]{max-width:calc(100vw - 24px)}.msr\\:max-w-\\[min\\(100vw-16px\\,15rem\\)\\]{max-width:min(100vw - 16px,15rem)}.msr\\:max-w-\\[min\\(200px\\,calc\\(100vw-24px\\)\\)\\]{max-width:min(200px,100vw - 24px)}.msr\\:max-w-\\[min\\(240px\\,calc\\(100vw-16px\\)\\)\\]{max-width:min(240px,100vw - 16px)}.msr\\:max-w-full{max-width:100%}.msr\\:min-w-0{min-width:calc(var(--msr-spacing) * 0)}.msr\\:min-w-32{min-width:calc(var(--msr-spacing) * 32)}.msr\\:min-w-36{min-width:calc(var(--msr-spacing) * 36)}.msr\\:min-w-44{min-width:calc(var(--msr-spacing) * 44)}.msr\\:flex-1{flex:1}.msr\\:flex-none{flex:none}.msr\\:shrink-0{flex-shrink:0}.msr\\:-translate-x-1\\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.msr\\:-translate-y-1\\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.msr\\:-translate-y-full{--tw-translate-y:-100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.msr\\:-rotate-90{rotate:-90deg}.msr\\:rotate-45{rotate:45deg}.msr\\:rotate-90{rotate:90deg}.msr\\:animate-\\[mesurer-screenshot-preview_5\\.16s_ease-out_both\\]{animation:5.16s ease-out both mesurer-screenshot-preview}.msr\\:cursor-crosshair{cursor:crosshair}.msr\\:cursor-default{cursor:default}.msr\\:cursor-ew-resize{cursor:ew-resize}.msr\\:cursor-move{cursor:move}.msr\\:cursor-nesw-resize{cursor:nesw-resize}.msr\\:cursor-ns-resize{cursor:ns-resize}.msr\\:cursor-nwse-resize{cursor:nwse-resize}.msr\\:cursor-pointer{cursor:pointer}.msr\\:cursor-text{cursor:text}.msr\\:touch-none{touch-action:none}.msr\\:resize-none{resize:none}.msr\\:list-none{list-style-type:none}.msr\\:appearance-none{appearance:none}.msr\\:grid-cols-\\[44px_minmax\\(0\\,1fr\\)\\]{grid-template-columns:44px minmax(0,1fr)}.msr\\:grid-cols-\\[56px_minmax\\(0\\,1fr\\)\\]{grid-template-columns:56px minmax(0,1fr)}.msr\\:grid-cols-\\[78px_150px\\]{grid-template-columns:78px 150px}.msr\\:grid-cols-\\[78px_minmax\\(0\\,1fr\\)\\]{grid-template-columns:78px minmax(0,1fr)}.msr\\:flex-col{flex-direction:column}.msr\\:items-baseline{align-items:baseline}.msr\\:items-center{align-items:center}.msr\\:items-start{align-items:flex-start}.msr\\:items-stretch{align-items:stretch}.msr\\:justify-between{justify-content:space-between}.msr\\:justify-center{justify-content:center}.msr\\:justify-end{justify-content:flex-end}.msr\\:gap-0{gap:calc(var(--msr-spacing) * 0)}.msr\\:gap-0\\.5{gap:calc(var(--msr-spacing) * .5)}.msr\\:gap-1{gap:calc(var(--msr-spacing) * 1)}.msr\\:gap-1\\.5{gap:calc(var(--msr-spacing) * 1.5)}.msr\\:gap-2{gap:calc(var(--msr-spacing) * 2)}.msr\\:gap-\\[2px\\]{gap:2px}.msr\\:gap-px{gap:1px}.msr\\:self-center{align-self:center}.msr\\:justify-self-end{justify-self:flex-end}.msr\\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.msr\\:overflow-hidden{overflow:hidden}.msr\\:overflow-visible{overflow:visible}.msr\\:overflow-y-auto{overflow-y:auto}.msr\\:rounded{border-radius:.25rem}.msr\\:rounded-\\[2px\\]{border-radius:2px}.msr\\:rounded-\\[3px\\]{border-radius:3px}.msr\\:rounded-\\[4px\\]{border-radius:4px}.msr\\:rounded-\\[10px\\]{border-radius:10px}.msr\\:rounded-full{border-radius:3.40282e38px}.msr\\:rounded-lg{border-radius:var(--msr-radius-lg)}.msr\\:rounded-md{border-radius:var(--msr-radius-md)}.msr\\:rounded-none{border-radius:0}.msr\\:border{border-style:var(--tw-border-style);border-width:1px}.msr\\:border-0{border-style:var(--tw-border-style);border-width:0}.msr\\:border-2{border-style:var(--tw-border-style);border-width:2px}.msr\\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.msr\\:border-t-2{border-top-style:var(--tw-border-style);border-top-width:2px}.msr\\:border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.msr\\:border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.msr\\:border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.msr\\:border-dashed{--tw-border-style:dashed;border-style:dashed}.msr\\:border-dotted{--tw-border-style:dotted;border-style:dotted}.msr\\:border-solid{--tw-border-style:solid;border-style:solid}.msr\\:border-\\[\\#0d99ff\\]{border-color:#0d99ff}.msr\\:border-\\[\\#2563eb\\]\\/70{border-color:oklab(54.615% -.026671 -.213549/.7)}.msr\\:border-\\[var\\(--msr-danger-border\\)\\]{border-color:var(--msr-danger-border)}.msr\\:border-black\\/10{border-color:var(--msr-color-black)}@supports (color:color-mix(in lab, red, red)){.msr\\:border-black\\/10{border-color:color-mix(in oklab, var(--msr-color-black) 10%, transparent)}}.msr\\:border-ink-100{border-color:var(--msr-color-ink-100)}.msr\\:border-ink-200{border-color:var(--msr-color-ink-200)}.msr\\:border-ink-300{border-color:var(--msr-color-ink-300)}.msr\\:border-ink-500,.msr\\:border-ink-500\\/30{border-color:var(--msr-color-ink-500)}@supports (color:color-mix(in lab, red, red)){.msr\\:border-ink-500\\/30{border-color:color-mix(in oklab, var(--msr-color-ink-500) 30%, transparent)}}.msr\\:border-ink-700{border-color:var(--msr-color-ink-700)}.msr\\:border-transparent{border-color:#0000}.msr\\:border-white{border-color:var(--msr-color-white)}.msr\\:\\!bg-black\\/50{background-color:var(--msr-color-black)!important}@supports (color:color-mix(in lab, red, red)){.msr\\:\\!bg-black\\/50{background-color:color-mix(in oklab, var(--msr-color-black) 50%, transparent)!important}}.msr\\:bg-\\[\\#0d99ff\\]{background-color:#0d99ff}.msr\\:bg-\\[\\#0d99ff\\]\\/8{background-color:oklab(66.9841% -.0648249 -.170866/.08)}.msr\\:bg-\\[\\#0d99ff\\]\\/10{background-color:oklab(66.9841% -.0648249 -.170866/.1)}.msr\\:bg-\\[\\#2563eb\\]{background-color:#2563eb}.msr\\:bg-\\[var\\(--msr-danger-solid-bg\\)\\]{background-color:var(--msr-danger-solid-bg)}.msr\\:bg-black,.msr\\:bg-black\\/4{background-color:var(--msr-color-black)}@supports (color:color-mix(in lab, red, red)){.msr\\:bg-black\\/4{background-color:color-mix(in oklab, var(--msr-color-black) 4%, transparent)}}.msr\\:bg-black\\/40{background-color:var(--msr-color-black)}@supports (color:color-mix(in lab, red, red)){.msr\\:bg-black\\/40{background-color:color-mix(in oklab, var(--msr-color-black) 40%, transparent)}}.msr\\:bg-ink-50{background-color:var(--msr-color-ink-50)}.msr\\:bg-ink-100{background-color:var(--msr-color-ink-100)}.msr\\:bg-ink-200{background-color:var(--msr-color-ink-200)}.msr\\:bg-ink-300{background-color:var(--msr-color-ink-300)}.msr\\:bg-ink-500\\/50{background-color:var(--msr-color-ink-500)}@supports (color:color-mix(in lab, red, red)){.msr\\:bg-ink-500\\/50{background-color:color-mix(in oklab, var(--msr-color-ink-500) 50%, transparent)}}.msr\\:bg-ink-900,.msr\\:bg-ink-900\\/45{background-color:var(--msr-color-ink-900)}@supports (color:color-mix(in lab, red, red)){.msr\\:bg-ink-900\\/45{background-color:color-mix(in oklab, var(--msr-color-ink-900) 45%, transparent)}}.msr\\:bg-ink-900\\/90{background-color:var(--msr-color-ink-900)}@supports (color:color-mix(in lab, red, red)){.msr\\:bg-ink-900\\/90{background-color:color-mix(in oklab, var(--msr-color-ink-900) 90%, transparent)}}.msr\\:bg-transparent{background-color:#0000}.msr\\:bg-white,.msr\\:bg-white\\/5{background-color:var(--msr-color-white)}@supports (color:color-mix(in lab, red, red)){.msr\\:bg-white\\/5{background-color:color-mix(in oklab, var(--msr-color-white) 5%, transparent)}}.msr\\:object-contain{object-fit:contain}.msr\\:p-0{padding:calc(var(--msr-spacing) * 0)}.msr\\:p-1{padding:calc(var(--msr-spacing) * 1)}.msr\\:p-2{padding:calc(var(--msr-spacing) * 2)}.msr\\:p-3{padding:calc(var(--msr-spacing) * 3)}.msr\\:p-\\[2px\\]{padding:2px}.msr\\:p-px{padding:1px}.msr\\:px-0{padding-inline:calc(var(--msr-spacing) * 0)}.msr\\:px-0\\.5{padding-inline:calc(var(--msr-spacing) * .5)}.msr\\:px-1{padding-inline:calc(var(--msr-spacing) * 1)}.msr\\:px-1\\.5{padding-inline:calc(var(--msr-spacing) * 1.5)}.msr\\:px-2{padding-inline:calc(var(--msr-spacing) * 2)}.msr\\:px-3{padding-inline:calc(var(--msr-spacing) * 3)}.msr\\:py-0\\.5{padding-block:calc(var(--msr-spacing) * .5)}.msr\\:py-1{padding-block:calc(var(--msr-spacing) * 1)}.msr\\:py-1\\.5{padding-block:calc(var(--msr-spacing) * 1.5)}.msr\\:py-2{padding-block:calc(var(--msr-spacing) * 2)}.msr\\:py-6{padding-block:calc(var(--msr-spacing) * 6)}.msr\\:pt-1\\.5{padding-top:calc(var(--msr-spacing) * 1.5)}.msr\\:pt-8{padding-top:calc(var(--msr-spacing) * 8)}.msr\\:pr-1\\.5{padding-right:calc(var(--msr-spacing) * 1.5)}.msr\\:pr-2{padding-right:calc(var(--msr-spacing) * 2)}.msr\\:pr-6{padding-right:calc(var(--msr-spacing) * 6)}.msr\\:pb-1{padding-bottom:calc(var(--msr-spacing) * 1)}.msr\\:pb-2{padding-bottom:calc(var(--msr-spacing) * 2)}.msr\\:pl-1{padding-left:calc(var(--msr-spacing) * 1)}.msr\\:pl-1\\.5{padding-left:calc(var(--msr-spacing) * 1.5)}.msr\\:pl-3{padding-left:calc(var(--msr-spacing) * 3)}.msr\\:pl-6{padding-left:calc(var(--msr-spacing) * 6)}.msr\\:text-center{text-align:center}.msr\\:text-left{text-align:left}.msr\\:text-right{text-align:right}.msr\\:font-mono{font-family:var(--msr-font-mono)}.msr\\:text-\\[9px\\]{font-size:9px}.msr\\:text-\\[10px\\]{font-size:10px}.msr\\:text-\\[11px\\]{font-size:11px}.msr\\:text-\\[12px\\]{font-size:12px}.msr\\:text-\\[13px\\]{font-size:13px}.msr\\:text-\\[16px\\]{font-size:16px}.msr\\:leading-4{--tw-leading:calc(var(--msr-spacing) * 4);line-height:calc(var(--msr-spacing) * 4)}.msr\\:leading-5{--tw-leading:calc(var(--msr-spacing) * 5);line-height:calc(var(--msr-spacing) * 5)}.msr\\:leading-6{--tw-leading:calc(var(--msr-spacing) * 6);line-height:calc(var(--msr-spacing) * 6)}.msr\\:leading-none{--tw-leading:1;line-height:1}.msr\\:font-medium{--tw-font-weight:var(--msr-font-weight-medium);font-weight:var(--msr-font-weight-medium)}.msr\\:font-normal{--tw-font-weight:var(--msr-font-weight-normal);font-weight:var(--msr-font-weight-normal)}.msr\\:font-semibold{--tw-font-weight:var(--msr-font-weight-semibold);font-weight:var(--msr-font-weight-semibold)}.msr\\:text-pretty{text-wrap:pretty}.msr\\:break-words{overflow-wrap:break-word}.msr\\:whitespace-normal{white-space:normal}.msr\\:whitespace-nowrap{white-space:nowrap}.msr\\:whitespace-pre{white-space:pre}.msr\\:whitespace-pre-wrap{white-space:pre-wrap}.msr\\:text-\\[\\#64748b\\]{color:#64748b}.msr\\:text-\\[var\\(--msr-danger-solid-text\\)\\]{color:var(--msr-danger-solid-text)}.msr\\:text-\\[var\\(--msr-danger-text\\)\\]{color:var(--msr-danger-text)}.msr\\:text-ink-50{color:var(--msr-color-ink-50)}.msr\\:text-ink-500{color:var(--msr-color-ink-500)}.msr\\:text-ink-700{color:var(--msr-color-ink-700)}.msr\\:text-ink-900{color:var(--msr-color-ink-900)}.msr\\:text-red-600{color:var(--msr-color-red-600)}.msr\\:text-white,.msr\\:text-white\\/60{color:var(--msr-color-white)}@supports (color:color-mix(in lab, red, red)){.msr\\:text-white\\/60{color:color-mix(in oklab, var(--msr-color-white) 60%, transparent)}}.msr\\:tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.msr\\:underline-offset-2{text-underline-offset:2px}.msr\\:caret-\\[\\#0d99ff\\]{caret-color:#0d99ff}.msr\\:opacity-0{opacity:0}.msr\\:opacity-100{opacity:1}.msr\\:shadow-\\[0_0_0_1px_rgba\\(0\\,0\\,0\\,0\\.25\\)\\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.msr\\:shadow-\\[0_1px_2px_rgb\\(0_0_0_\\/_0\\.06\\)\\]{--tw-shadow:0 1px 2px var(--tw-shadow-color,#0000000f);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.msr\\:shadow-floating{--tw-shadow:0 0 0 .4px var(--tw-shadow-color,#00000038), 0 6px 18px var(--tw-shadow-color,#00000008), 0 3px 9px var(--tw-shadow-color,#0000000f), 0 1px 1px var(--tw-shadow-color,#0000000f);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.msr\\:outline,.msr\\:outline-1{outline-style:var(--tw-outline-style);outline-width:1px}.msr\\:outline-\\[\\#0d99ff\\]{outline-color:#0d99ff}.msr\\:transition-\\[height\\]{transition-property:height;transition-timing-function:var(--tw-ease,var(--msr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--msr-default-transition-duration))}.msr\\:transition-\\[left\\]{transition-property:left;transition-timing-function:var(--tw-ease,var(--msr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--msr-default-transition-duration))}.msr\\:transition-\\[max-height\\]{transition-property:max-height;transition-timing-function:var(--tw-ease,var(--msr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--msr-default-transition-duration))}.msr\\:transition-\\[width\\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--msr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--msr-default-transition-duration))}.msr\\:transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--msr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--msr-default-transition-duration))}.msr\\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--msr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--msr-default-transition-duration))}.msr\\:transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--msr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--msr-default-transition-duration))}.msr\\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--msr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--msr-default-transition-duration))}.msr\\:transition-none{transition-property:none}.msr\\:duration-150{--tw-duration:.15s;transition-duration:.15s}.msr\\:duration-200{--tw-duration:.2s;transition-duration:.2s}.msr\\:duration-300{--tw-duration:.3s;transition-duration:.3s}.msr\\:ease-\\[cubic-bezier\\(0\\.22\\,1\\,0\\.36\\,1\\)\\]{--tw-ease:cubic-bezier(.22,1,.36,1);transition-timing-function:cubic-bezier(.22,1,.36,1)}.msr\\:ease-\\[ease\\]{--tw-ease:ease;transition-timing-function:ease}.msr\\:will-change-transform{will-change:transform}.msr\\:outline-none{--tw-outline-style:none;outline-style:none}.msr\\:select-none{-webkit-user-select:none;user-select:none}.msr\\:select-text{-webkit-user-select:text;user-select:text}@media (hover:hover){.msr\\:group-hover\\:h-3:is(:where(.msr\\:group):hover *){height:calc(var(--msr-spacing) * 3)}.msr\\:group-hover\\:opacity-100:is(:where(.msr\\:group):hover *){opacity:1}.msr\\:group-hover\\/video\\:pointer-events-auto:is(:where(.msr\\:group\\/video):hover *){pointer-events:auto}.msr\\:group-hover\\/video\\:opacity-100:is(:where(.msr\\:group\\/video):hover *){opacity:1}}.msr\\:group-focus-visible\\:h-3:is(:where(.msr\\:group):focus-visible *){height:calc(var(--msr-spacing) * 3)}.msr\\:focus-within\\:pointer-events-auto:focus-within{pointer-events:auto}.msr\\:focus-within\\:relative:focus-within{position:relative}.msr\\:focus-within\\:z-\\[1\\]:focus-within{z-index:1}.msr\\:focus-within\\:rounded-l-\\[5px\\]:focus-within{border-top-left-radius:5px;border-bottom-left-radius:5px}.msr\\:focus-within\\:rounded-r-\\[5px\\]:focus-within{border-top-right-radius:5px;border-bottom-right-radius:5px}.msr\\:focus-within\\:border-\\[\\#0d99ff\\]:focus-within{border-color:#0d99ff}.msr\\:focus-within\\:opacity-100:focus-within{opacity:1}.msr\\:focus-within\\:shadow-\\[0_0_0_1px_\\#0d99ff\\]:focus-within{--tw-shadow:0 0 0 1px var(--tw-shadow-color,#0d99ff);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}@media (hover:hover){.msr\\:hover\\:border-ink-200:hover{border-color:var(--msr-color-ink-200)}.msr\\:hover\\:\\!bg-black\\/60:hover{background-color:var(--msr-color-black)!important}@supports (color:color-mix(in lab, red, red)){.msr\\:hover\\:\\!bg-black\\/60:hover{background-color:color-mix(in oklab, var(--msr-color-black) 60%, transparent)!important}}.msr\\:hover\\:bg-\\[\\#0d99ff\\]:hover{background-color:#0d99ff}.msr\\:hover\\:bg-\\[\\#087dcc\\]:hover{background-color:#087dcc}.msr\\:hover\\:bg-\\[var\\(--msr-danger-bg\\)\\]:hover{background-color:var(--msr-danger-bg)}.msr\\:hover\\:bg-\\[var\\(--msr-danger-solid-hover\\)\\]:hover{background-color:var(--msr-danger-solid-hover)}.msr\\:hover\\:bg-black\\/4:hover{background-color:var(--msr-color-black)}@supports (color:color-mix(in lab, red, red)){.msr\\:hover\\:bg-black\\/4:hover{background-color:color-mix(in oklab, var(--msr-color-black) 4%, transparent)}}.msr\\:hover\\:bg-ink-50:hover{background-color:var(--msr-color-ink-50)}.msr\\:hover\\:bg-ink-100:hover{background-color:var(--msr-color-ink-100)}.msr\\:hover\\:bg-ink-200:hover,.msr\\:hover\\:bg-ink-200\\/50:hover{background-color:var(--msr-color-ink-200)}@supports (color:color-mix(in lab, red, red)){.msr\\:hover\\:bg-ink-200\\/50:hover{background-color:color-mix(in oklab, var(--msr-color-ink-200) 50%, transparent)}}.msr\\:hover\\:bg-red-50:hover{background-color:var(--msr-color-red-50)}.msr\\:hover\\:bg-transparent:hover{background-color:#0000}.msr\\:hover\\:text-ink-700:hover{color:var(--msr-color-ink-700)}.msr\\:hover\\:text-ink-900:hover{color:var(--msr-color-ink-900)}.msr\\:hover\\:text-white:hover{color:var(--msr-color-white)}.msr\\:hover\\:underline:hover{text-decoration-line:underline}.msr\\:hover\\:focus-within\\:border-\\[\\#0d99ff\\]:hover:focus-within{border-color:#0d99ff}}.msr\\:focus\\:border-\\[\\#0d99ff\\]:focus{border-color:#0d99ff}.msr\\:focus\\:shadow-\\[inset_0_0_0_1px_\\#0d99ff\\]:focus{--tw-shadow:inset 0 0 0 1px var(--tw-shadow-color,#0d99ff);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.msr\\:focus\\:shadow-\\[inset_0_0_0_1px_var\\(--msr-accent\\)\\]:focus{--tw-shadow:inset 0 0 0 1px var(--tw-shadow-color,var(--msr-accent));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.msr\\:focus\\:outline-none:focus{--tw-outline-style:none;outline-style:none}.msr\\:focus-visible\\:bg-ink-100:focus-visible{background-color:var(--msr-color-ink-100)}.msr\\:focus-visible\\:opacity-100:focus-visible{opacity:1}.msr\\:focus-visible\\:shadow-\\[inset_0_0_0_1px_var\\(--color-ink-700\\)\\]:focus-visible{--tw-shadow:inset 0 0 0 1px var(--tw-shadow-color,var(--color-ink-700));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.msr\\:focus-visible\\:shadow-\\[inset_0_0_0_1px_var\\(--msr-accent\\)\\]:focus-visible{--tw-shadow:inset 0 0 0 1px var(--tw-shadow-color,var(--msr-accent));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.msr\\:focus-visible\\:shadow-\\[inset_0_0_0_1px_var\\(--msr-danger-text\\)\\]:focus-visible{--tw-shadow:inset 0 0 0 1px var(--tw-shadow-color,var(--msr-danger-text));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.msr\\:focus-visible\\:ring-1:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.msr\\:focus-visible\\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.msr\\:focus-visible\\:ring-\\[var\\(--msr-accent\\)\\]\\/25:focus-visible{--tw-ring-color:var(--msr-accent)}@supports (color:color-mix(in lab, red, red)){.msr\\:focus-visible\\:ring-\\[var\\(--msr-accent\\)\\]\\/25:focus-visible{--tw-ring-color:color-mix(in oklab, var(--msr-accent) 25%, transparent)}}.msr\\:focus-visible\\:outline:focus-visible,.msr\\:focus-visible\\:outline-1:focus-visible{outline-style:var(--tw-outline-style);outline-width:1px}.msr\\:focus-visible\\:outline-offset-1:focus-visible{outline-offset:1px}.msr\\:focus-visible\\:outline-ink-500:focus-visible{outline-color:var(--msr-color-ink-500)}.msr\\:focus-visible\\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.msr\\:focus-visible\\:ring-inset:focus-visible{--tw-ring-inset:inset}.msr\\:disabled\\:cursor-default:disabled{cursor:default}.msr\\:disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.msr\\:disabled\\:opacity-40:disabled{opacity:.4}@media (prefers-reduced-motion:reduce){.msr\\:motion-reduce\\:transition-none{transition-property:none}}.msr\\:rounded-control{border-radius:var(--msr-radius-control)}.msr\\:rounded-wide-card{border-radius:var(--msr-radius-wide-card)}}:root,:host{--color-ink-50:#f8fafc;--color-ink-100:#f1f5f9;--color-ink-200:#e2e8f0;--color-ink-300:#cbd5e1;--color-ink-500:#64748b;--color-ink-700:#334155;--color-ink-900:#18181b}:host{all:initial;color-scheme:light dark;color:var(--msr-color-ink-900);letter-spacing:normal;--msr-spacing:4px;direction:ltr;font-family:ui-sans-serif,system-ui,sans-serif;font-size:16px;font-weight:400;line-height:1.5;display:block}.mesurer-root{--msr-accent:#0d99ff;--msr-surface:#fff;--msr-surface-raised:#fff;--msr-surface-muted:var(--msr-color-ink-50);--msr-content:var(--msr-color-ink-900);--msr-color-white:#fff;--msr-color-black:#000;--msr-danger-bg:#fef2f2;--msr-danger-border:#fecaca;--msr-danger-text:#dc2626;--msr-danger-solid-bg:#dc2626;--msr-danger-solid-hover:#b91c1c;--msr-danger-solid-text:#fff;--msr-control-thumb:#fff;--msr-slider-track:#0f172a29;--msr-shadow-toolbar:drop-shadow(0 0 .4px #00000038) drop-shadow(0 6px 18px #00000008) drop-shadow(0 3px 9px #0000000f) drop-shadow(0 1px 1px #0000000f);--msr-shadow-floating:0 0 0 .4px #00000038, 0 6px 18px #00000008, 0 3px 9px #0000000f, 0 1px 1px #0000000f;--msr-shadow-select-menu:var(--msr-shadow-floating);--msr-comment-menu-surface:var(--msr-surface-raised);--msr-shadow-comment-menu:var(--msr-shadow-select-menu);color:var(--msr-content);color-scheme:light}.mesurer-root [class~=msr\\:bg-white]{background-color:var(--msr-surface)!important}.mesurer-root [class~="msr:bg-[#0d99ff]"],.mesurer-root [class~="msr:hover:bg-[#0d99ff]"]:hover{background-color:var(--msr-accent)!important}.mesurer-root [class~="msr:border-[#0d99ff]"]{border-color:var(--msr-accent)!important}.mesurer-root [class~="msr:bg-[#0d99ff]/8"]{background-color:var(--msr-accent)!important}@supports (color:color-mix(in lab, red, red)){.mesurer-root [class~="msr:bg-[#0d99ff]/8"]{background-color:color-mix(in srgb, var(--msr-accent) 8%, transparent)!important}}.mesurer-root [class~=msr\\:text-black]{color:var(--msr-content)!important}.mesurer-root .mesurer-control-thumb{background-color:var(--msr-control-thumb)!important}.mesurer-root button{-webkit-user-select:none;user-select:none;cursor:default!important}.mesurer-root .mesurer-settings-button-ghost{opacity:.7}.mesurer-root .mesurer-settings-button-ghost:hover,.mesurer-root .mesurer-settings-button-ghost:focus-visible{opacity:1}.mesurer-root [data-mesurer-recording-timeline] .mesurer-recording-track-rail{background-color:var(--msr-color-ink-200)}.mesurer-root [data-mesurer-recording-timeline] .mesurer-recording-track-clip{background-color:var(--msr-color-ink-300)}.mesurer-root [data-mesurer-recording-timeline] .mesurer-recording-playhead,.mesurer-root [data-mesurer-recording-timeline] .mesurer-recording-trim-bar{background-color:var(--msr-color-ink-900)}.mesurer-root .mesurer-switch-thumb[data-checked=false]{background-color:var(--msr-color-ink-200)!important}.mesurer-root [class~="msr:hover:bg-black/4"]:hover,.mesurer-root [class~="msr:hover:bg-black/5"]:hover{background-color:var(--msr-content)!important}@supports (color:color-mix(in lab, red, red)){.mesurer-root [class~="msr:hover:bg-black/4"]:hover,.mesurer-root [class~="msr:hover:bg-black/5"]:hover{background-color:color-mix(in srgb, var(--msr-content) 6%, transparent)!important}}.mesurer-root .mesurer-menu-surface,.mesurer-root .mesurer-color-picker,.mesurer-root .mesurer-comment-card,.mesurer-root .mesurer-comment-hover-card,.mesurer-root .mesurer-comment-delete-confirmation{color:var(--msr-content);background-color:var(--msr-surface-raised)!important}.mesurer-root .mesurer-section-divider{background-color:var(--msr-color-ink-200)!important}.mesurer-root .mesurer-settings-select-menu{box-shadow:var(--msr-shadow-select-menu)}.mesurer-root .mesurer-comment-overflow-menu,.mesurer-root .mesurer-comment-delete-confirmation{box-shadow:var(--msr-shadow-comment-menu);background-color:var(--msr-comment-menu-surface)!important}.mesurer-root .mesurer-comment-menu-item:hover{background-color:var(--msr-color-ink-200)!important}.mesurer-root .mesurer-comment-menu-danger{color:var(--msr-danger-text)!important}.mesurer-root .mesurer-comment-menu-danger:hover{background-color:var(--msr-danger-bg)!important}.mesurer-root .mesurer-settings-button-default{background-color:#0000}.mesurer-root .mesurer-settings-button-default:hover{background-color:var(--msr-color-ink-50)}.mesurer-root[data-theme=dark] .mesurer-control-shell{background-color:var(--msr-color-ink-100)}.mesurer-root[data-theme=dark] .mesurer-settings-panel select,.mesurer-root[data-theme=dark] .mesurer-settings-select,.mesurer-root[data-theme=dark] .mesurer-settings-select-menu{background-color:var(--msr-surface-raised)!important;border-color:var(--msr-color-ink-200)!important}.mesurer-root[data-theme=dark] .mesurer-settings-button-default:hover{background-color:var(--msr-surface)!important}@media (prefers-color-scheme:dark){.mesurer-root[data-theme=system] .mesurer-control-shell{background-color:var(--msr-color-ink-100)}.mesurer-root[data-theme=system] .mesurer-settings-panel select,.mesurer-root[data-theme=system] .mesurer-settings-select,.mesurer-root[data-theme=system] .mesurer-settings-select-menu{background-color:var(--msr-surface-raised)!important;border-color:var(--msr-color-ink-200)!important}.mesurer-root[data-theme=system] .mesurer-settings-button-default:hover{background-color:var(--msr-surface)!important}}.mesurer-root[data-theme=dark] .mesurer-switch-track[data-checked=false]{background-color:var(--msr-color-ink-100)!important}@media (prefers-color-scheme:dark){.mesurer-root[data-theme=system] .mesurer-switch-track[data-checked=false]{background-color:var(--msr-color-ink-100)!important}}.mesurer-root .mesurer-settings-panel .mesurer-control-focus :is(input,select):focus{box-shadow:none!important;outline:none!important}.mesurer-root[data-theme=dark]{--msr-accent:#0c8ce9;--msr-color-red-50:#3f2020;--msr-color-red-200:#7f3f46;--msr-color-red-600:#f87171;--msr-color-red-700:#fca5a5;--msr-danger-bg:#3f2020;--msr-danger-border:#7f3f46;--msr-danger-text:#f87171;--msr-danger-solid-bg:#c95058;--msr-danger-solid-hover:#b7424b;--msr-danger-solid-text:#f5f5f5;--msr-color-ink-50:#3a3a3a;--msr-color-ink-100:#414141;--msr-color-ink-200:#4a4a4a;--msr-color-ink-300:#5a5a5a;--msr-color-ink-500:#a0a0a0;--msr-color-ink-700:#dedede;--msr-color-ink-900:#f5f5f5;--msr-surface:#323232;--msr-surface-raised:#3a3a3a;--msr-surface-muted:#3a3a3a;--msr-color-white:#f5f5f5;--msr-color-black:#171717;--msr-control-thumb:#f4f4f5;--msr-slider-track:#f5f5f53d;--msr-shadow-toolbar:drop-shadow(0 0 .4px lch(100% 0 0/.1)) drop-shadow(0 3px 8px lch(0% 0 0/.125)) drop-shadow(0 2px 5px lch(0% 0 0/.125)) drop-shadow(0 1px 1px lch(0% 0 0/.125));--msr-shadow-floating:0 0 0 .4px lch(100% 0 0/.05), 0 4px 12px lch(0% 0 0/.12), 0 1px 3px lch(0% 0 0/.1);--msr-shadow-select-menu:0 0 0 .4px lch(100% 0 0/.14), 0 4px 12px lch(0% 0 0/.22), 0 1px 3px lch(0% 0 0/.18);--msr-comment-menu-surface:#323232;--msr-shadow-comment-menu:0 0 0 .5px lch(100% 0 0/.16), 0 5px 14px lch(0% 0 0/.26), 0 1px 3px lch(0% 0 0/.18);color-scheme:dark}@media (prefers-color-scheme:dark){.mesurer-root[data-theme=system]{--msr-accent:#0c8ce9;--msr-color-red-50:#3f2020;--msr-color-red-200:#7f3f46;--msr-color-red-600:#f87171;--msr-color-red-700:#fca5a5;--msr-danger-bg:#3f2020;--msr-danger-border:#7f3f46;--msr-danger-text:#f87171;--msr-danger-solid-bg:#c95058;--msr-danger-solid-hover:#b7424b;--msr-danger-solid-text:#f5f5f5;--msr-color-ink-50:#3a3a3a;--msr-color-ink-100:#414141;--msr-color-ink-200:#4a4a4a;--msr-color-ink-300:#5a5a5a;--msr-color-ink-500:#a0a0a0;--msr-color-ink-700:#dedede;--msr-color-ink-900:#f5f5f5;--msr-surface:#323232;--msr-surface-raised:#3a3a3a;--msr-surface-muted:#3a3a3a;--msr-color-white:#f5f5f5;--msr-color-black:#171717;--msr-control-thumb:#f4f4f5;--msr-slider-track:#f5f5f53d;--msr-shadow-toolbar:drop-shadow(0 0 .4px lch(100% 0 0/.1)) drop-shadow(0 3px 8px lch(0% 0 0/.125)) drop-shadow(0 2px 5px lch(0% 0 0/.125)) drop-shadow(0 1px 1px lch(0% 0 0/.125));--msr-shadow-floating:0 0 0 .4px lch(100% 0 0/.05), 0 4px 12px lch(0% 0 0/.12), 0 1px 3px lch(0% 0 0/.1);--msr-shadow-select-menu:0 0 0 .4px lch(100% 0 0/.14), 0 4px 12px lch(0% 0 0/.22), 0 1px 3px lch(0% 0 0/.18);--msr-comment-menu-surface:#323232;--msr-shadow-comment-menu:0 0 0 .5px lch(100% 0 0/.16), 0 5px 14px lch(0% 0 0/.26), 0 1px 3px lch(0% 0 0/.18);color-scheme:dark}}.mesurer-color-picker,.mesurer-color-picker *,.mesurer-root [data-mesurer-inspect-info-card],.mesurer-root [data-mesurer-inspect-info-card] *,[data-mesurer-overlay][data-mesurer-inspect],[data-mesurer-overlay][data-mesurer-inspect] *{cursor:default!important}.mesurer-root button[data-mesurer-resize-cursor],.mesurer-root button[data-mesurer-resize-cursor] *,[data-mesurer-overlay][data-mesurer-inspect] [data-mesurer-resize-cursor],[data-mesurer-overlay][data-mesurer-inspect] [data-mesurer-resize-cursor] *{cursor:var(--msr-resize-cursor)!important}html[data-mesurer-resize-cursor],html[data-mesurer-resize-cursor] *,html[data-mesurer-resize-cursor] [data-mesurer-overlay][data-mesurer-inspect],html[data-mesurer-resize-cursor] [data-mesurer-overlay][data-mesurer-inspect] *,.mesurer-root[data-mesurer-resize-cursor],.mesurer-root[data-mesurer-resize-cursor] *{cursor:var(--msr-resize-cursor-lock)!important}.mesurer-root,.mesurer-root *,.mesurer-root :before,.mesurer-root :after{box-sizing:border-box}.mesurer-toolbar-motion{--msr-toolbar-motion:.2s ease;z-index:0;isolation:isolate;width:max-content;max-width:100%;display:block;position:relative}.mesurer-layout-guides,.mesurer-layout-guides-layer,.mesurer-layout-guides-grid{pointer-events:none;position:absolute;inset:0}.mesurer-layout-guides{z-index:2;overflow:hidden}.mesurer-toolbar-chrome{z-index:0;background:var(--msr-surface);width:100%;filter:var(--msr-shadow-toolbar);transform-origin:0;pointer-events:none;border-radius:9px;position:absolute;inset:0 auto 0 0;overflow:visible}.mesurer-toolbar-clip{z-index:1;isolation:isolate;transform-origin:0;position:relative;overflow:visible}.mesurer-toolbar-motion[data-resizing=collapse] .mesurer-toolbar-clip{overflow:hidden}.mesurer-toolbar-motion[data-resizing] .mesurer-toolbar-tooltips{visibility:hidden!important}.mesurer-toolbar-surface{transform-origin:0;padding:0;position:relative}.mesurer-toolbar-divider{background:var(--msr-color-ink-200);flex:none;align-self:stretch;width:1px;margin:0}.mesurer-toolbar-minimize-stage{min-width:0;width:var(--msr-expanded-w,auto);flex:none;overflow:visible}.mesurer-toolbar-minimize-stage[data-minimized=true]{width:var(--msr-icon-w,auto);overflow:hidden}.mesurer-toolbar-motion[data-resizing=collapse] .mesurer-toolbar-minimize-stage{overflow:hidden}.mesurer-toolbar-minimize-stage[data-minimized=true] .mesurer-toolbar-minimize-track{transform:translateX(calc(-1 * var(--msr-expanded-w,0px)))}.mesurer-toolbar-minimize-stage:has([role=dialog]),.mesurer-toolbar-minimize-stage:has([role=menu]),.mesurer-toolbar-minimize-stage:has(.mesurer-screenshot-preview){overflow:visible}.mesurer-toolbar-minimize-track{pointer-events:none;flex:none;display:flex;transform:translate(0)}.mesurer-toolbar-minimize-slot{flex:none}.mesurer-toolbar-minimize-slot[data-slot=expanded]{width:var(--msr-expanded-w,auto)}.mesurer-toolbar-minimize-slot[data-slot=icon]{width:auto}.mesurer-toolbar-minimize-slot:not([data-open=true]){pointer-events:none}.mesurer-toolbar-minimize-slot[data-open=true]{pointer-events:auto}.mesurer-toolbar-motion:not([data-resizing=collapse]) .mesurer-toolbar-minimize-slot[data-slot=icon]:not([data-open=true]){visibility:hidden}.mesurer-toolbar-restore svg{transform:translate(-.5px,.5px)}.mesurer-toolbar-tool-stage{min-width:0;width:var(--msr-inspect-w,auto);flex:none;overflow:hidden}.mesurer-toolbar-tool-stage[data-group=annotate]{width:var(--msr-annotate-w,auto)}.mesurer-toolbar-tool-stage[data-group=annotate] .mesurer-toolbar-tool-track{transform:translateX(calc(-1 * var(--msr-inspect-w,0px)))}.mesurer-toolbar-tool-stage:has([role=menu]),.mesurer-toolbar-tool-stage:has([role=dialog]){overflow:visible}.mesurer-toolbar-motion[data-resizing=true] .mesurer-toolbar-tool-stage{overflow:hidden}.mesurer-toolbar-tool-track{flex:none;display:flex;transform:translate(0)}.mesurer-toolbar-motion[data-ready=true] .mesurer-toolbar-tool-switch-pill{transition:transform var(--msr-toolbar-motion)}.mesurer-toolbar-tool-slot{flex:none}.mesurer-toolbar-tool-slot[data-group=inspect]{width:var(--msr-inspect-w,auto)}.mesurer-toolbar-tool-slot[data-group=annotate]{width:var(--msr-annotate-w,auto)}.mesurer-toolbar-tool-slot:not([data-open=true]){pointer-events:none}.mesurer-toolbar-motion:not([data-resizing]) .mesurer-toolbar-tool-slot:not([data-open=true]){visibility:hidden}.mesurer-toolbar-tool-panel{width:max-content}.mesurer-toolbar-tooltips{z-index:110;pointer-events:none;position:fixed;inset:0;overflow:visible}.mesurer-toolbar-trailing{z-index:1;isolation:isolate;background:var(--msr-surface);border-radius:0 9px 9px 0;flex:none;position:relative}.mesurer-toolbar-tool-switch{z-index:1;isolation:isolate;background:var(--msr-surface);position:relative}.mesurer-toolbar-tool-switch-pill{z-index:0;background:var(--msr-color-ink-200);border-radius:3px;width:28px;height:28px;position:absolute;top:2px;left:2px;transform:translate(0)}.mesurer-toolbar-tool-switch[data-value=annotate] .mesurer-toolbar-tool-switch-pill{transform:translate(30px)}.mesurer-toolbar-tool-switch>:not(.mesurer-toolbar-tool-switch-pill){z-index:1;position:relative}@media (prefers-reduced-motion:reduce){.mesurer-toolbar-motion,.mesurer-toolbar-chrome,.mesurer-toolbar-tool-track,.mesurer-toolbar-minimize-track,.mesurer-toolbar-trailing,.mesurer-toolbar-motion[data-ready=true] .mesurer-toolbar-tool-switch-pill{transition:none}.mesurer-screenshot-preview{animation-name:mesurer-screenshot-preview-reduced;animation-duration:5s;animation-timing-function:linear;animation-fill-mode:both}}@keyframes mesurer-screenshot-preview{0%,3.1%{opacity:0}6.2%,96.9%{opacity:1}to{opacity:0}}@keyframes mesurer-screenshot-preview-reduced{0%,to{opacity:1}}@keyframes mesurer-comment-nudge{0%,to{transform:translate(0)}35%{transform:translate(-3px)}70%{transform:translate(3px)}}.mesurer-comment-nudge{animation:.15s ease-out mesurer-comment-nudge}@keyframes mesurer-status-ellipsis{0%,32%{content:"."}33%,65%{content:".."}66%,to{content:"..."}}.mesurer-status-ellipsis{text-align:left;width:1.5em;display:inline-block}.mesurer-status-ellipsis:after{content:"...";animation:1.2s step-end infinite mesurer-status-ellipsis}@media (prefers-reduced-motion:reduce){.mesurer-status-ellipsis:after{content:"...";animation:none}}.mesurer-thin-scrollbar{scrollbar-width:thin;scrollbar-color:var(--msr-color-ink-200) transparent}.mesurer-thin-scrollbar::-webkit-scrollbar{width:4px;height:4px}.mesurer-thin-scrollbar::-webkit-scrollbar-track{background:0 0}.mesurer-thin-scrollbar::-webkit-scrollbar-thumb{background:var(--msr-color-ink-200);border-radius:var(--msr-radius-control)}.mesurer-thin-scrollbar:hover{scrollbar-color:var(--msr-color-ink-300) transparent}.mesurer-thin-scrollbar:hover::-webkit-scrollbar-thumb{background:var(--msr-color-ink-300)}.mesurer-thin-scrollbar::-webkit-scrollbar-corner{background:0 0}.mesurer-toast-surface{box-shadow:var(--msr-shadow-floating)}.mesurer-root{--msr-spacing:4px}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes pulse{50%{opacity:.5}}';
|
|
62
|
+
var MESURER_STYLES = '/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--msr-font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--msr-font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--msr-color-red-50:oklch(97.1% .013 17.38);--msr-color-red-200:oklch(88.5% .062 18.334);--msr-color-red-600:oklch(57.7% .245 27.325);--msr-color-red-700:oklch(50.5% .213 27.518);--msr-color-black:#000;--msr-color-white:#fff;--msr-spacing:.25rem;--msr-text-xs:.75rem;--msr-text-xs--line-height:calc(1 / .75);--msr-text-sm:.875rem;--msr-text-sm--line-height:calc(1.25 / .875);--msr-font-weight-normal:400;--msr-font-weight-medium:500;--msr-font-weight-semibold:600;--msr-radius-sm:.25rem;--msr-radius-md:.375rem;--msr-radius-lg:.5rem;--msr-radius-xl:.75rem;--msr-ease-out:cubic-bezier(0, 0, .2, 1);--msr-animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--msr-aspect-video:16 / 9;--msr-default-transition-duration:.15s;--msr-default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--msr-default-font-family:var(--msr-font-sans);--msr-default-mono-font-family:var(--msr-font-mono);--msr-radius-control:5px;--msr-radius-wide-card:13px;--msr-shadow-toolbar:drop-shadow(0 0 .4px #00000038) drop-shadow(0 6px 18px #00000008) drop-shadow(0 3px 9px #0000000f) drop-shadow(0 1px 1px #0000000f);--msr-shadow-floating:0 0 .4px #00000038, 0 6px 18px #00000008, 0 3px 9px #0000000f, 0 1px 1px #0000000f;--msr-color-ink-50:#f8fafc;--msr-color-ink-100:#f1f5f9;--msr-color-ink-200:#e2e8f0;--msr-color-ink-300:#cbd5e1;--msr-color-ink-500:#64748b;--msr-color-ink-700:#334155;--msr-color-ink-900:#18181b}}@layer base{.mesurer-root{font-family:var(--msr-font-sans);font-size:12px;line-height:1.5}.mesurer-root button,.mesurer-root input,.mesurer-root select,.mesurer-root textarea{font-family:inherit;font-size:inherit;line-height:inherit}.mesurer-root input[type=search]::-webkit-search-cancel-button{appearance:none;display:none}.mesurer-root input[type=search]::-webkit-search-decoration{appearance:none;display:none}.mesurer-root input[type=search]::-moz-search-clear{appearance:none;display:none}.mesurer-root input[type=search]::-ms-clear{appearance:none;display:none}:where(.mesurer-root,.mesurer-root *){--tw-border-style:solid;--tw-outline-style:solid;--tw-shadow:0 0 #0000;--tw-inset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-offset-shadow:0 0 #0000;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;border:0 solid}.mesurer-root button,.mesurer-root input,.mesurer-root select,.mesurer-root textarea{appearance:none;font:inherit;color:inherit;letter-spacing:inherit;background-color:#0000;padding:0}}@layer components;@layer utilities{.msr\\:pointer-events-auto{pointer-events:auto}.msr\\:pointer-events-none{pointer-events:none}.msr\\:absolute{position:absolute}.msr\\:fixed{position:fixed}.msr\\:relative{position:relative}.msr\\:inset-0{inset:calc(var(--msr-spacing) * 0)}.msr\\:inset-x-0{inset-inline:calc(var(--msr-spacing) * 0)}.msr\\:inset-y-0{inset-block:calc(var(--msr-spacing) * 0)}.msr\\:top-0{top:calc(var(--msr-spacing) * 0)}.msr\\:top-0\\.5{top:calc(var(--msr-spacing) * .5)}.msr\\:top-1\\.5{top:calc(var(--msr-spacing) * 1.5)}.msr\\:top-1\\/2{top:50%}.msr\\:top-1\\/3{top:33.3333%}.msr\\:top-2\\/3{top:66.6667%}.msr\\:top-9{top:calc(var(--msr-spacing) * 9)}.msr\\:top-\\[18px\\]{top:18px}.msr\\:top-full{top:100%}.msr\\:right-0{right:calc(var(--msr-spacing) * 0)}.msr\\:right-1{right:calc(var(--msr-spacing) * 1)}.msr\\:right-1\\.5{right:calc(var(--msr-spacing) * 1.5)}.msr\\:right-2{right:calc(var(--msr-spacing) * 2)}.msr\\:right-\\[8px\\]{right:8px}.msr\\:bottom-0{bottom:calc(var(--msr-spacing) * 0)}.msr\\:bottom-1\\.5{bottom:calc(var(--msr-spacing) * 1.5)}.msr\\:bottom-4{bottom:calc(var(--msr-spacing) * 4)}.msr\\:bottom-full{bottom:100%}.msr\\:left-0{left:calc(var(--msr-spacing) * 0)}.msr\\:left-1\\.5{left:calc(var(--msr-spacing) * 1.5)}.msr\\:left-1\\/2{left:50%}.msr\\:left-1\\/3{left:33.3333%}.msr\\:left-2\\/3{left:66.6667%}.msr\\:left-\\[8px\\]{left:8px}.msr\\:left-\\[18px\\]{left:18px}.msr\\:left-full{left:100%}.msr\\:z-10{z-index:10}.msr\\:z-20{z-index:20}.msr\\:z-30{z-index:30}.msr\\:z-40{z-index:40}.msr\\:z-50{z-index:50}.msr\\:z-80{z-index:80}.msr\\:z-100{z-index:100}.msr\\:z-\\[1\\]{z-index:1}.msr\\:z-\\[2\\]{z-index:2}.msr\\:z-\\[25\\]{z-index:25}.msr\\:z-\\[60\\]{z-index:60}.msr\\:z-\\[70\\]{z-index:70}.msr\\:z-\\[71\\]{z-index:71}.msr\\:z-\\[80\\]{z-index:80}.msr\\:z-\\[85\\]{z-index:85}.msr\\:z-\\[90\\]{z-index:90}.msr\\:z-\\[100\\]{z-index:100}.msr\\:z-\\[101\\]{z-index:101}.msr\\:z-\\[120\\]{z-index:120}.msr\\:col-span-2{grid-column:span 2/span 2}.msr\\:m-0{margin:calc(var(--msr-spacing) * 0)}.msr\\:mx-auto{margin-inline:auto}.msr\\:my-1{margin-block:calc(var(--msr-spacing) * 1)}.msr\\:mt-0\\.5{margin-top:calc(var(--msr-spacing) * .5)}.msr\\:mt-1{margin-top:calc(var(--msr-spacing) * 1)}.msr\\:mt-2{margin-top:calc(var(--msr-spacing) * 2)}.msr\\:mt-3{margin-top:calc(var(--msr-spacing) * 3)}.msr\\:mt-4{margin-top:calc(var(--msr-spacing) * 4)}.msr\\:mb-1{margin-bottom:calc(var(--msr-spacing) * 1)}.msr\\:mb-2{margin-bottom:calc(var(--msr-spacing) * 2)}.msr\\:-ml-1{margin-left:calc(var(--msr-spacing) * -1)}.msr\\:ml-1{margin-left:calc(var(--msr-spacing) * 1)}.msr\\:ml-auto{margin-left:auto}.msr\\:box-border{box-sizing:border-box}.msr\\:line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.msr\\:block{display:block}.msr\\:flex{display:flex}.msr\\:grid{display:grid}.msr\\:inline-flex{display:inline-flex}.msr\\:size-1\\.5{width:calc(var(--msr-spacing) * 1.5);height:calc(var(--msr-spacing) * 1.5)}.msr\\:size-2{width:calc(var(--msr-spacing) * 2);height:calc(var(--msr-spacing) * 2)}.msr\\:size-3{width:calc(var(--msr-spacing) * 3);height:calc(var(--msr-spacing) * 3)}.msr\\:size-4{width:calc(var(--msr-spacing) * 4);height:calc(var(--msr-spacing) * 4)}.msr\\:size-5{width:calc(var(--msr-spacing) * 5);height:calc(var(--msr-spacing) * 5)}.msr\\:size-6{width:calc(var(--msr-spacing) * 6);height:calc(var(--msr-spacing) * 6)}.msr\\:size-7{width:calc(var(--msr-spacing) * 7);height:calc(var(--msr-spacing) * 7)}.msr\\:size-8{width:calc(var(--msr-spacing) * 8);height:calc(var(--msr-spacing) * 8)}.msr\\:size-\\[10px\\]{width:10px;height:10px}.msr\\:size-\\[18px\\]{width:18px;height:18px}.msr\\:size-full{width:100%;height:100%}.msr\\:h-0{height:calc(var(--msr-spacing) * 0)}.msr\\:h-1\\.5{height:calc(var(--msr-spacing) * 1.5)}.msr\\:h-2{height:calc(var(--msr-spacing) * 2)}.msr\\:h-2\\.5{height:calc(var(--msr-spacing) * 2.5)}.msr\\:h-3{height:calc(var(--msr-spacing) * 3)}.msr\\:h-5{height:calc(var(--msr-spacing) * 5)}.msr\\:h-6{height:calc(var(--msr-spacing) * 6)}.msr\\:h-7{height:calc(var(--msr-spacing) * 7)}.msr\\:h-8{height:calc(var(--msr-spacing) * 8)}.msr\\:h-\\[3px\\]{height:3px}.msr\\:h-\\[14px\\]{height:14px}.msr\\:h-auto{height:auto}.msr\\:h-full{height:100%}.msr\\:h-max{height:max-content}.msr\\:h-px{height:1px}.msr\\:max-h-32{max-height:calc(var(--msr-spacing) * 32)}.msr\\:max-h-36{max-height:calc(var(--msr-spacing) * 36)}.msr\\:max-h-48{max-height:calc(var(--msr-spacing) * 48)}.msr\\:max-h-\\[28rem\\]{max-height:28rem}.msr\\:max-h-\\[120px\\]{max-height:120px}.msr\\:max-h-full{max-height:100%}.msr\\:min-h-0{min-height:calc(var(--msr-spacing) * 0)}.msr\\:min-h-6{min-height:calc(var(--msr-spacing) * 6)}.msr\\:min-h-8{min-height:calc(var(--msr-spacing) * 8)}.msr\\:min-h-\\[4\\.5rem\\]{min-height:4.5rem}.msr\\:w-0{width:calc(var(--msr-spacing) * 0)}.msr\\:w-0\\.5{width:calc(var(--msr-spacing) * .5)}.msr\\:w-4{width:calc(var(--msr-spacing) * 4)}.msr\\:w-5{width:calc(var(--msr-spacing) * 5)}.msr\\:w-6{width:calc(var(--msr-spacing) * 6)}.msr\\:w-8{width:calc(var(--msr-spacing) * 8)}.msr\\:w-9{width:calc(var(--msr-spacing) * 9)}.msr\\:w-12{width:calc(var(--msr-spacing) * 12)}.msr\\:w-32{width:calc(var(--msr-spacing) * 32)}.msr\\:w-40{width:calc(var(--msr-spacing) * 40)}.msr\\:w-44{width:calc(var(--msr-spacing) * 44)}.msr\\:w-48{width:calc(var(--msr-spacing) * 48)}.msr\\:w-52{width:calc(var(--msr-spacing) * 52)}.msr\\:w-60{width:calc(var(--msr-spacing) * 60)}.msr\\:w-64{width:calc(var(--msr-spacing) * 64)}.msr\\:w-72{width:calc(var(--msr-spacing) * 72)}.msr\\:w-\\[18px\\]{width:18px}.msr\\:w-\\[22rem\\]{width:22rem}.msr\\:w-\\[26px\\]{width:26px}.msr\\:w-\\[36rem\\]{width:36rem}.msr\\:w-\\[220px\\]{width:220px}.msr\\:w-auto{width:auto}.msr\\:w-full{width:100%}.msr\\:w-max{width:max-content}.msr\\:w-px{width:1px}.msr\\:max-w-\\[180px\\]{max-width:180px}.msr\\:max-w-\\[calc\\(100vw-16px\\)\\]{max-width:calc(100vw - 16px)}.msr\\:max-w-\\[calc\\(100vw-24px\\)\\]{max-width:calc(100vw - 24px)}.msr\\:max-w-\\[min\\(100vw-16px\\,15rem\\)\\]{max-width:min(100vw - 16px,15rem)}.msr\\:max-w-\\[min\\(200px\\,calc\\(100vw-24px\\)\\)\\]{max-width:min(200px,100vw - 24px)}.msr\\:max-w-\\[min\\(240px\\,calc\\(100vw-16px\\)\\)\\]{max-width:min(240px,100vw - 16px)}.msr\\:max-w-full{max-width:100%}.msr\\:max-w-none{max-width:none}.msr\\:min-w-0{min-width:calc(var(--msr-spacing) * 0)}.msr\\:min-w-32{min-width:calc(var(--msr-spacing) * 32)}.msr\\:min-w-36{min-width:calc(var(--msr-spacing) * 36)}.msr\\:min-w-44{min-width:calc(var(--msr-spacing) * 44)}.msr\\:flex-1{flex:1}.msr\\:flex-none{flex:none}.msr\\:shrink-0{flex-shrink:0}.msr\\:-translate-x-1\\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.msr\\:-translate-y-1\\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.msr\\:-translate-y-full{--tw-translate-y:-100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.msr\\:-rotate-90{rotate:-90deg}.msr\\:rotate-45{rotate:45deg}.msr\\:rotate-90{rotate:90deg}.msr\\:animate-\\[mesurer-screenshot-preview_5\\.16s_ease-out_both\\]{animation:5.16s ease-out both mesurer-screenshot-preview}.msr\\:cursor-crosshair{cursor:crosshair}.msr\\:cursor-default{cursor:default}.msr\\:cursor-ew-resize{cursor:ew-resize}.msr\\:cursor-move{cursor:move}.msr\\:cursor-nesw-resize{cursor:nesw-resize}.msr\\:cursor-ns-resize{cursor:ns-resize}.msr\\:cursor-nwse-resize{cursor:nwse-resize}.msr\\:cursor-pointer{cursor:pointer}.msr\\:cursor-text{cursor:text}.msr\\:touch-none{touch-action:none}.msr\\:resize-none{resize:none}.msr\\:list-none{list-style-type:none}.msr\\:appearance-none{appearance:none}.msr\\:grid-cols-\\[44px_minmax\\(0\\,1fr\\)\\]{grid-template-columns:44px minmax(0,1fr)}.msr\\:grid-cols-\\[56px_minmax\\(0\\,1fr\\)\\]{grid-template-columns:56px minmax(0,1fr)}.msr\\:grid-cols-\\[78px_150px\\]{grid-template-columns:78px 150px}.msr\\:grid-cols-\\[78px_minmax\\(0\\,1fr\\)\\]{grid-template-columns:78px minmax(0,1fr)}.msr\\:flex-col{flex-direction:column}.msr\\:items-baseline{align-items:baseline}.msr\\:items-center{align-items:center}.msr\\:items-start{align-items:flex-start}.msr\\:items-stretch{align-items:stretch}.msr\\:justify-between{justify-content:space-between}.msr\\:justify-center{justify-content:center}.msr\\:justify-end{justify-content:flex-end}.msr\\:gap-0{gap:calc(var(--msr-spacing) * 0)}.msr\\:gap-0\\.5{gap:calc(var(--msr-spacing) * .5)}.msr\\:gap-1{gap:calc(var(--msr-spacing) * 1)}.msr\\:gap-1\\.5{gap:calc(var(--msr-spacing) * 1.5)}.msr\\:gap-2{gap:calc(var(--msr-spacing) * 2)}.msr\\:gap-\\[2px\\]{gap:2px}.msr\\:gap-px{gap:1px}.msr\\:self-center{align-self:center}.msr\\:justify-self-end{justify-self:flex-end}.msr\\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.msr\\:overflow-hidden{overflow:hidden}.msr\\:overflow-visible{overflow:visible}.msr\\:overflow-y-auto{overflow-y:auto}.msr\\:rounded{border-radius:.25rem}.msr\\:rounded-\\[2px\\]{border-radius:2px}.msr\\:rounded-\\[3px\\]{border-radius:3px}.msr\\:rounded-\\[4px\\]{border-radius:4px}.msr\\:rounded-\\[10px\\]{border-radius:10px}.msr\\:rounded-full{border-radius:3.40282e38px}.msr\\:rounded-lg{border-radius:var(--msr-radius-lg)}.msr\\:rounded-md{border-radius:var(--msr-radius-md)}.msr\\:rounded-none{border-radius:0}.msr\\:border{border-style:var(--tw-border-style);border-width:1px}.msr\\:border-0{border-style:var(--tw-border-style);border-width:0}.msr\\:border-2{border-style:var(--tw-border-style);border-width:2px}.msr\\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.msr\\:border-t-2{border-top-style:var(--tw-border-style);border-top-width:2px}.msr\\:border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.msr\\:border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.msr\\:border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.msr\\:border-dashed{--tw-border-style:dashed;border-style:dashed}.msr\\:border-dotted{--tw-border-style:dotted;border-style:dotted}.msr\\:border-solid{--tw-border-style:solid;border-style:solid}.msr\\:border-\\[\\#0d99ff\\]{border-color:#0d99ff}.msr\\:border-\\[\\#2563eb\\]\\/70{border-color:oklab(54.615% -.026671 -.213549/.7)}.msr\\:border-\\[var\\(--msr-danger-border\\)\\]{border-color:var(--msr-danger-border)}.msr\\:border-black\\/10{border-color:var(--msr-color-black)}@supports (color:color-mix(in lab, red, red)){.msr\\:border-black\\/10{border-color:color-mix(in oklab, var(--msr-color-black) 10%, transparent)}}.msr\\:border-ink-100{border-color:var(--msr-color-ink-100)}.msr\\:border-ink-200{border-color:var(--msr-color-ink-200)}.msr\\:border-ink-300{border-color:var(--msr-color-ink-300)}.msr\\:border-ink-500,.msr\\:border-ink-500\\/30{border-color:var(--msr-color-ink-500)}@supports (color:color-mix(in lab, red, red)){.msr\\:border-ink-500\\/30{border-color:color-mix(in oklab, var(--msr-color-ink-500) 30%, transparent)}}.msr\\:border-ink-700{border-color:var(--msr-color-ink-700)}.msr\\:border-transparent{border-color:#0000}.msr\\:border-white{border-color:var(--msr-color-white)}.msr\\:\\!bg-black\\/50{background-color:var(--msr-color-black)!important}@supports (color:color-mix(in lab, red, red)){.msr\\:\\!bg-black\\/50{background-color:color-mix(in oklab, var(--msr-color-black) 50%, transparent)!important}}.msr\\:bg-\\[\\#0d99ff\\]{background-color:#0d99ff}.msr\\:bg-\\[\\#0d99ff\\]\\/8{background-color:oklab(66.9841% -.0648249 -.170866/.08)}.msr\\:bg-\\[\\#0d99ff\\]\\/10{background-color:oklab(66.9841% -.0648249 -.170866/.1)}.msr\\:bg-\\[\\#2563eb\\]{background-color:#2563eb}.msr\\:bg-\\[var\\(--msr-danger-solid-bg\\)\\]{background-color:var(--msr-danger-solid-bg)}.msr\\:bg-black,.msr\\:bg-black\\/4{background-color:var(--msr-color-black)}@supports (color:color-mix(in lab, red, red)){.msr\\:bg-black\\/4{background-color:color-mix(in oklab, var(--msr-color-black) 4%, transparent)}}.msr\\:bg-black\\/40{background-color:var(--msr-color-black)}@supports (color:color-mix(in lab, red, red)){.msr\\:bg-black\\/40{background-color:color-mix(in oklab, var(--msr-color-black) 40%, transparent)}}.msr\\:bg-black\\/80{background-color:var(--msr-color-black)}@supports (color:color-mix(in lab, red, red)){.msr\\:bg-black\\/80{background-color:color-mix(in oklab, var(--msr-color-black) 80%, transparent)}}.msr\\:bg-ink-50{background-color:var(--msr-color-ink-50)}.msr\\:bg-ink-100{background-color:var(--msr-color-ink-100)}.msr\\:bg-ink-200{background-color:var(--msr-color-ink-200)}.msr\\:bg-ink-300{background-color:var(--msr-color-ink-300)}.msr\\:bg-ink-500\\/50{background-color:var(--msr-color-ink-500)}@supports (color:color-mix(in lab, red, red)){.msr\\:bg-ink-500\\/50{background-color:color-mix(in oklab, var(--msr-color-ink-500) 50%, transparent)}}.msr\\:bg-ink-900,.msr\\:bg-ink-900\\/90{background-color:var(--msr-color-ink-900)}@supports (color:color-mix(in lab, red, red)){.msr\\:bg-ink-900\\/90{background-color:color-mix(in oklab, var(--msr-color-ink-900) 90%, transparent)}}.msr\\:bg-transparent{background-color:#0000}.msr\\:bg-white,.msr\\:bg-white\\/5{background-color:var(--msr-color-white)}@supports (color:color-mix(in lab, red, red)){.msr\\:bg-white\\/5{background-color:color-mix(in oklab, var(--msr-color-white) 5%, transparent)}}.msr\\:object-contain{object-fit:contain}.msr\\:p-0{padding:calc(var(--msr-spacing) * 0)}.msr\\:p-1{padding:calc(var(--msr-spacing) * 1)}.msr\\:p-2{padding:calc(var(--msr-spacing) * 2)}.msr\\:p-3{padding:calc(var(--msr-spacing) * 3)}.msr\\:p-\\[2px\\]{padding:2px}.msr\\:p-px{padding:1px}.msr\\:px-0{padding-inline:calc(var(--msr-spacing) * 0)}.msr\\:px-0\\.5{padding-inline:calc(var(--msr-spacing) * .5)}.msr\\:px-1{padding-inline:calc(var(--msr-spacing) * 1)}.msr\\:px-1\\.5{padding-inline:calc(var(--msr-spacing) * 1.5)}.msr\\:px-2{padding-inline:calc(var(--msr-spacing) * 2)}.msr\\:px-3{padding-inline:calc(var(--msr-spacing) * 3)}.msr\\:py-0\\.5{padding-block:calc(var(--msr-spacing) * .5)}.msr\\:py-1{padding-block:calc(var(--msr-spacing) * 1)}.msr\\:py-1\\.5{padding-block:calc(var(--msr-spacing) * 1.5)}.msr\\:py-2{padding-block:calc(var(--msr-spacing) * 2)}.msr\\:py-6{padding-block:calc(var(--msr-spacing) * 6)}.msr\\:pt-1\\.5{padding-top:calc(var(--msr-spacing) * 1.5)}.msr\\:pt-8{padding-top:calc(var(--msr-spacing) * 8)}.msr\\:pr-1\\.5{padding-right:calc(var(--msr-spacing) * 1.5)}.msr\\:pr-2{padding-right:calc(var(--msr-spacing) * 2)}.msr\\:pr-6{padding-right:calc(var(--msr-spacing) * 6)}.msr\\:pb-1{padding-bottom:calc(var(--msr-spacing) * 1)}.msr\\:pb-2{padding-bottom:calc(var(--msr-spacing) * 2)}.msr\\:pl-1{padding-left:calc(var(--msr-spacing) * 1)}.msr\\:pl-1\\.5{padding-left:calc(var(--msr-spacing) * 1.5)}.msr\\:pl-3{padding-left:calc(var(--msr-spacing) * 3)}.msr\\:pl-6{padding-left:calc(var(--msr-spacing) * 6)}.msr\\:text-center{text-align:center}.msr\\:text-left{text-align:left}.msr\\:text-right{text-align:right}.msr\\:font-mono{font-family:var(--msr-font-mono)}.msr\\:text-\\[9px\\]{font-size:9px}.msr\\:text-\\[10px\\]{font-size:10px}.msr\\:text-\\[11px\\]{font-size:11px}.msr\\:text-\\[12px\\]{font-size:12px}.msr\\:text-\\[13px\\]{font-size:13px}.msr\\:text-\\[16px\\]{font-size:16px}.msr\\:leading-4{--tw-leading:calc(var(--msr-spacing) * 4);line-height:calc(var(--msr-spacing) * 4)}.msr\\:leading-5{--tw-leading:calc(var(--msr-spacing) * 5);line-height:calc(var(--msr-spacing) * 5)}.msr\\:leading-6{--tw-leading:calc(var(--msr-spacing) * 6);line-height:calc(var(--msr-spacing) * 6)}.msr\\:leading-none{--tw-leading:1;line-height:1}.msr\\:font-medium{--tw-font-weight:var(--msr-font-weight-medium);font-weight:var(--msr-font-weight-medium)}.msr\\:font-normal{--tw-font-weight:var(--msr-font-weight-normal);font-weight:var(--msr-font-weight-normal)}.msr\\:font-semibold{--tw-font-weight:var(--msr-font-weight-semibold);font-weight:var(--msr-font-weight-semibold)}.msr\\:text-pretty{text-wrap:pretty}.msr\\:break-words{overflow-wrap:break-word}.msr\\:whitespace-normal{white-space:normal}.msr\\:whitespace-nowrap{white-space:nowrap}.msr\\:whitespace-pre{white-space:pre}.msr\\:whitespace-pre-wrap{white-space:pre-wrap}.msr\\:text-\\[\\#64748b\\]{color:#64748b}.msr\\:text-\\[var\\(--msr-danger-solid-text\\)\\]{color:var(--msr-danger-solid-text)}.msr\\:text-\\[var\\(--msr-danger-text\\)\\]{color:var(--msr-danger-text)}.msr\\:text-ink-50{color:var(--msr-color-ink-50)}.msr\\:text-ink-500{color:var(--msr-color-ink-500)}.msr\\:text-ink-700{color:var(--msr-color-ink-700)}.msr\\:text-ink-900{color:var(--msr-color-ink-900)}.msr\\:text-red-600{color:var(--msr-color-red-600)}.msr\\:text-white,.msr\\:text-white\\/60{color:var(--msr-color-white)}@supports (color:color-mix(in lab, red, red)){.msr\\:text-white\\/60{color:color-mix(in oklab, var(--msr-color-white) 60%, transparent)}}.msr\\:tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.msr\\:underline-offset-2{text-underline-offset:2px}.msr\\:caret-\\[\\#0d99ff\\]{caret-color:#0d99ff}.msr\\:opacity-0{opacity:0}.msr\\:opacity-100{opacity:1}.msr\\:shadow-\\[0_0_0_1px_rgba\\(0\\,0\\,0\\,0\\.25\\)\\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.msr\\:shadow-\\[0_1px_2px_rgb\\(0_0_0_\\/_0\\.06\\)\\]{--tw-shadow:0 1px 2px var(--tw-shadow-color,#0000000f);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.msr\\:shadow-floating{--tw-shadow:0 0 .4px var(--tw-shadow-color,#00000038), 0 6px 18px var(--tw-shadow-color,#00000008), 0 3px 9px var(--tw-shadow-color,#0000000f), 0 1px 1px var(--tw-shadow-color,#0000000f);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.msr\\:shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.msr\\:outline,.msr\\:outline-1{outline-style:var(--tw-outline-style);outline-width:1px}.msr\\:outline-\\[\\#0d99ff\\]{outline-color:#0d99ff}.msr\\:drop-shadow-\\[0_1px_2px_rgba\\(0\\,0\\,0\\,0\\.8\\)\\]{--tw-drop-shadow-size:drop-shadow(0 1px 2px var(--tw-drop-shadow-color,#000c));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.msr\\:transition-\\[height\\]{transition-property:height;transition-timing-function:var(--tw-ease,var(--msr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--msr-default-transition-duration))}.msr\\:transition-\\[left\\]{transition-property:left;transition-timing-function:var(--tw-ease,var(--msr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--msr-default-transition-duration))}.msr\\:transition-\\[max-height\\]{transition-property:max-height;transition-timing-function:var(--tw-ease,var(--msr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--msr-default-transition-duration))}.msr\\:transition-\\[width\\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--msr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--msr-default-transition-duration))}.msr\\:transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--msr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--msr-default-transition-duration))}.msr\\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--msr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--msr-default-transition-duration))}.msr\\:transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--msr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--msr-default-transition-duration))}.msr\\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--msr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--msr-default-transition-duration))}.msr\\:transition-none{transition-property:none}.msr\\:duration-150{--tw-duration:.15s;transition-duration:.15s}.msr\\:duration-200{--tw-duration:.2s;transition-duration:.2s}.msr\\:duration-300{--tw-duration:.3s;transition-duration:.3s}.msr\\:ease-\\[cubic-bezier\\(0\\.22\\,1\\,0\\.36\\,1\\)\\]{--tw-ease:cubic-bezier(.22,1,.36,1);transition-timing-function:cubic-bezier(.22,1,.36,1)}.msr\\:ease-\\[ease\\]{--tw-ease:ease;transition-timing-function:ease}.msr\\:will-change-transform{will-change:transform}.msr\\:outline-none{--tw-outline-style:none;outline-style:none}.msr\\:select-none{-webkit-user-select:none;user-select:none}.msr\\:select-text{-webkit-user-select:text;user-select:text}@media (hover:hover){.msr\\:group-hover\\:h-3:is(:where(.msr\\:group):hover *){height:calc(var(--msr-spacing) * 3)}.msr\\:group-hover\\:opacity-100:is(:where(.msr\\:group):hover *){opacity:1}.msr\\:group-hover\\/video\\:pointer-events-auto:is(:where(.msr\\:group\\/video):hover *){pointer-events:auto}.msr\\:group-hover\\/video\\:opacity-100:is(:where(.msr\\:group\\/video):hover *){opacity:1}}.msr\\:group-focus-visible\\:h-3:is(:where(.msr\\:group):focus-visible *){height:calc(var(--msr-spacing) * 3)}.msr\\:focus-within\\:pointer-events-auto:focus-within{pointer-events:auto}.msr\\:focus-within\\:relative:focus-within{position:relative}.msr\\:focus-within\\:z-\\[1\\]:focus-within{z-index:1}.msr\\:focus-within\\:rounded-l-\\[5px\\]:focus-within{border-top-left-radius:5px;border-bottom-left-radius:5px}.msr\\:focus-within\\:rounded-r-\\[5px\\]:focus-within{border-top-right-radius:5px;border-bottom-right-radius:5px}.msr\\:focus-within\\:border-\\[\\#0d99ff\\]:focus-within{border-color:#0d99ff}.msr\\:focus-within\\:opacity-100:focus-within{opacity:1}.msr\\:focus-within\\:shadow-\\[0_0_0_1px_\\#0d99ff\\]:focus-within{--tw-shadow:0 0 0 1px var(--tw-shadow-color,#0d99ff);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}@media (hover:hover){.msr\\:hover\\:border-ink-200:hover{border-color:var(--msr-color-ink-200)}.msr\\:hover\\:\\!bg-black\\/60:hover{background-color:var(--msr-color-black)!important}@supports (color:color-mix(in lab, red, red)){.msr\\:hover\\:\\!bg-black\\/60:hover{background-color:color-mix(in oklab, var(--msr-color-black) 60%, transparent)!important}}.msr\\:hover\\:bg-\\[\\#0d99ff\\]:hover{background-color:#0d99ff}.msr\\:hover\\:bg-\\[\\#087dcc\\]:hover{background-color:#087dcc}.msr\\:hover\\:bg-\\[var\\(--msr-danger-bg\\)\\]:hover{background-color:var(--msr-danger-bg)}.msr\\:hover\\:bg-\\[var\\(--msr-danger-solid-hover\\)\\]:hover{background-color:var(--msr-danger-solid-hover)}.msr\\:hover\\:bg-black\\/4:hover{background-color:var(--msr-color-black)}@supports (color:color-mix(in lab, red, red)){.msr\\:hover\\:bg-black\\/4:hover{background-color:color-mix(in oklab, var(--msr-color-black) 4%, transparent)}}.msr\\:hover\\:bg-ink-50:hover{background-color:var(--msr-color-ink-50)}.msr\\:hover\\:bg-ink-100:hover{background-color:var(--msr-color-ink-100)}.msr\\:hover\\:bg-ink-200:hover,.msr\\:hover\\:bg-ink-200\\/50:hover{background-color:var(--msr-color-ink-200)}@supports (color:color-mix(in lab, red, red)){.msr\\:hover\\:bg-ink-200\\/50:hover{background-color:color-mix(in oklab, var(--msr-color-ink-200) 50%, transparent)}}.msr\\:hover\\:bg-red-50:hover{background-color:var(--msr-color-red-50)}.msr\\:hover\\:bg-transparent:hover{background-color:#0000}.msr\\:hover\\:text-ink-700:hover{color:var(--msr-color-ink-700)}.msr\\:hover\\:text-ink-900:hover{color:var(--msr-color-ink-900)}.msr\\:hover\\:text-white:hover{color:var(--msr-color-white)}.msr\\:hover\\:underline:hover{text-decoration-line:underline}.msr\\:hover\\:focus-within\\:border-\\[\\#0d99ff\\]:hover:focus-within{border-color:#0d99ff}}.msr\\:focus\\:border-\\[\\#0d99ff\\]:focus{border-color:#0d99ff}.msr\\:focus\\:shadow-\\[inset_0_0_0_1px_\\#0d99ff\\]:focus{--tw-shadow:inset 0 0 0 1px var(--tw-shadow-color,#0d99ff);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.msr\\:focus\\:shadow-\\[inset_0_0_0_1px_var\\(--msr-accent\\)\\]:focus{--tw-shadow:inset 0 0 0 1px var(--tw-shadow-color,var(--msr-accent));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.msr\\:focus\\:outline-none:focus{--tw-outline-style:none;outline-style:none}.msr\\:focus-visible\\:bg-ink-100:focus-visible{background-color:var(--msr-color-ink-100)}.msr\\:focus-visible\\:opacity-100:focus-visible{opacity:1}.msr\\:focus-visible\\:shadow-\\[inset_0_0_0_1px_var\\(--color-ink-700\\)\\]:focus-visible{--tw-shadow:inset 0 0 0 1px var(--tw-shadow-color,var(--color-ink-700));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.msr\\:focus-visible\\:shadow-\\[inset_0_0_0_1px_var\\(--msr-accent\\)\\]:focus-visible{--tw-shadow:inset 0 0 0 1px var(--tw-shadow-color,var(--msr-accent));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.msr\\:focus-visible\\:shadow-\\[inset_0_0_0_1px_var\\(--msr-danger-text\\)\\]:focus-visible{--tw-shadow:inset 0 0 0 1px var(--tw-shadow-color,var(--msr-danger-text));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.msr\\:focus-visible\\:ring-1:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.msr\\:focus-visible\\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.msr\\:focus-visible\\:ring-\\[var\\(--msr-accent\\)\\]\\/25:focus-visible{--tw-ring-color:var(--msr-accent)}@supports (color:color-mix(in lab, red, red)){.msr\\:focus-visible\\:ring-\\[var\\(--msr-accent\\)\\]\\/25:focus-visible{--tw-ring-color:color-mix(in oklab, var(--msr-accent) 25%, transparent)}}.msr\\:focus-visible\\:outline:focus-visible,.msr\\:focus-visible\\:outline-1:focus-visible{outline-style:var(--tw-outline-style);outline-width:1px}.msr\\:focus-visible\\:outline-offset-1:focus-visible{outline-offset:1px}.msr\\:focus-visible\\:outline-ink-500:focus-visible{outline-color:var(--msr-color-ink-500)}.msr\\:focus-visible\\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.msr\\:focus-visible\\:ring-inset:focus-visible{--tw-ring-inset:inset}.msr\\:disabled\\:cursor-default:disabled{cursor:default}.msr\\:disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.msr\\:disabled\\:opacity-40:disabled{opacity:.4}@media (prefers-reduced-motion:reduce){.msr\\:motion-reduce\\:transition-none{transition-property:none}}.msr\\:rounded-control{border-radius:var(--msr-radius-control)}.msr\\:rounded-wide-card{border-radius:var(--msr-radius-wide-card)}}:root,:host{--color-ink-50:#f8fafc;--color-ink-100:#f1f5f9;--color-ink-200:#e2e8f0;--color-ink-300:#cbd5e1;--color-ink-500:#64748b;--color-ink-700:#334155;--color-ink-900:#18181b}:host{all:initial;color-scheme:light dark;color:var(--msr-color-ink-900);letter-spacing:normal;--msr-spacing:4px;direction:ltr;font-family:ui-sans-serif,system-ui,sans-serif;font-size:16px;font-weight:400;line-height:1.5;display:block}.mesurer-root{--msr-accent:#0d99ff;--msr-surface:#fff;--msr-surface-raised:#fff;--msr-surface-muted:var(--msr-color-ink-50);--msr-content:var(--msr-color-ink-900);--msr-color-white:#fff;--msr-color-black:#000;--msr-danger-bg:#fef2f2;--msr-danger-border:#fecaca;--msr-danger-text:#dc2626;--msr-danger-solid-bg:#dc2626;--msr-danger-solid-hover:#b91c1c;--msr-danger-solid-text:#fff;--msr-control-thumb:#fff;--msr-slider-track:#0f172a29;--msr-shadow-toolbar:drop-shadow(0 0 .4px #00000038) drop-shadow(0 6px 18px #00000008) drop-shadow(0 3px 9px #0000000f) drop-shadow(0 1px 1px #0000000f);--msr-shadow-floating:0 0 .4px #00000038, 0 6px 18px #00000008, 0 3px 9px #0000000f, 0 1px 1px #0000000f;--msr-shadow-select-menu:var(--msr-shadow-floating);--msr-comment-menu-surface:var(--msr-surface-raised);--msr-shadow-comment-menu:var(--msr-shadow-select-menu);color:var(--msr-content);color-scheme:light}.mesurer-root [class~=msr\\:bg-white]{background-color:var(--msr-surface)!important}.mesurer-root [class~="msr:bg-[#0d99ff]"],.mesurer-root [class~="msr:hover:bg-[#0d99ff]"]:hover{background-color:var(--msr-accent)!important}.mesurer-root [class~="msr:border-[#0d99ff]"]{border-color:var(--msr-accent)!important}.mesurer-root [class~="msr:bg-[#0d99ff]/8"]{background-color:var(--msr-accent)!important}@supports (color:color-mix(in lab, red, red)){.mesurer-root [class~="msr:bg-[#0d99ff]/8"]{background-color:color-mix(in srgb, var(--msr-accent) 8%, transparent)!important}}.mesurer-root [class~=msr\\:text-black]{color:var(--msr-content)!important}.mesurer-root .mesurer-control-thumb{background-color:var(--msr-control-thumb)!important}.mesurer-root button{-webkit-user-select:none;user-select:none;cursor:default!important}.mesurer-root .mesurer-settings-button-ghost{opacity:.7}.mesurer-root .mesurer-settings-button-ghost:hover,.mesurer-root .mesurer-settings-button-ghost:focus-visible{opacity:1}.mesurer-root [data-mesurer-recording-timeline] .mesurer-recording-track-rail{background-color:var(--msr-color-ink-200)}.mesurer-root [data-mesurer-recording-timeline] .mesurer-recording-track-clip{background-color:var(--msr-color-ink-300)}.mesurer-root [data-mesurer-recording-timeline] .mesurer-recording-playhead,.mesurer-root [data-mesurer-recording-timeline] .mesurer-recording-trim-bar{background-color:var(--msr-color-ink-900)}.mesurer-root .mesurer-switch-thumb[data-checked=false]{background-color:var(--msr-color-ink-200)!important}.mesurer-root [class~="msr:hover:bg-black/4"]:hover,.mesurer-root [class~="msr:hover:bg-black/5"]:hover{background-color:var(--msr-content)!important}@supports (color:color-mix(in lab, red, red)){.mesurer-root [class~="msr:hover:bg-black/4"]:hover,.mesurer-root [class~="msr:hover:bg-black/5"]:hover{background-color:color-mix(in srgb, var(--msr-content) 6%, transparent)!important}}.mesurer-root .mesurer-menu-surface,.mesurer-root .mesurer-color-picker{border-radius:9px}.mesurer-root .mesurer-menu-surface,.mesurer-root .mesurer-color-picker,.mesurer-root .mesurer-comment-card,.mesurer-root .mesurer-comment-hover-card,.mesurer-root .mesurer-comment-delete-confirmation{color:var(--msr-content);background-color:var(--msr-surface-raised)!important}.mesurer-root .mesurer-section-divider{background-color:var(--msr-color-ink-200)!important}.mesurer-root .mesurer-settings-select-menu{box-shadow:var(--msr-shadow-select-menu)}.mesurer-root .mesurer-comment-overflow-menu,.mesurer-root .mesurer-comment-delete-confirmation{box-shadow:var(--msr-shadow-comment-menu);background-color:var(--msr-comment-menu-surface)!important}.mesurer-root .mesurer-comment-menu-item:hover{background-color:var(--msr-color-ink-200)!important}.mesurer-root .mesurer-comment-menu-danger{color:var(--msr-danger-text)!important}.mesurer-root .mesurer-comment-menu-danger:hover{background-color:var(--msr-danger-bg)!important}.mesurer-root .mesurer-settings-button-default{background-color:#0000}.mesurer-root .mesurer-settings-button-default:hover{background-color:var(--msr-color-ink-50)}.mesurer-root[data-theme=dark] .mesurer-control-shell{background-color:var(--msr-color-ink-100)}.mesurer-root[data-theme=dark] .mesurer-settings-panel select,.mesurer-root[data-theme=dark] .mesurer-settings-select,.mesurer-root[data-theme=dark] .mesurer-settings-select-menu{background-color:var(--msr-surface-raised)!important;border-color:var(--msr-color-ink-200)!important}.mesurer-root[data-theme=dark] .mesurer-settings-button-default:hover{background-color:var(--msr-surface)!important}@media (prefers-color-scheme:dark){.mesurer-root[data-theme=system] .mesurer-control-shell{background-color:var(--msr-color-ink-100)}.mesurer-root[data-theme=system] .mesurer-settings-panel select,.mesurer-root[data-theme=system] .mesurer-settings-select,.mesurer-root[data-theme=system] .mesurer-settings-select-menu{background-color:var(--msr-surface-raised)!important;border-color:var(--msr-color-ink-200)!important}.mesurer-root[data-theme=system] .mesurer-settings-button-default:hover{background-color:var(--msr-surface)!important}}.mesurer-root[data-theme=dark] .mesurer-switch-track[data-checked=false]{background-color:var(--msr-color-ink-100)!important}@media (prefers-color-scheme:dark){.mesurer-root[data-theme=system] .mesurer-switch-track[data-checked=false]{background-color:var(--msr-color-ink-100)!important}}.mesurer-root .mesurer-settings-panel .mesurer-control-focus :is(input,select):focus{box-shadow:none!important;outline:none!important}.mesurer-root[data-theme=dark]{--msr-accent:#0c8ce9;--msr-color-red-50:#3f2020;--msr-color-red-200:#7f3f46;--msr-color-red-600:#f87171;--msr-color-red-700:#fca5a5;--msr-danger-bg:#3f2020;--msr-danger-border:#7f3f46;--msr-danger-text:#f87171;--msr-danger-solid-bg:#c95058;--msr-danger-solid-hover:#b7424b;--msr-danger-solid-text:#f5f5f5;--msr-color-ink-50:#3a3a3a;--msr-color-ink-100:#414141;--msr-color-ink-200:#4a4a4a;--msr-color-ink-300:#5a5a5a;--msr-color-ink-500:#a0a0a0;--msr-color-ink-700:#dedede;--msr-color-ink-900:#f5f5f5;--msr-surface:#323232;--msr-surface-raised:#3a3a3a;--msr-surface-muted:#3a3a3a;--msr-color-white:#f5f5f5;--msr-color-black:#171717;--msr-control-thumb:#f4f4f5;--msr-slider-track:#f5f5f53d;--msr-shadow-toolbar:drop-shadow(0 0 .4px lch(100% 0 0/.1)) drop-shadow(0 3px 8px lch(0% 0 0/.125)) drop-shadow(0 2px 5px lch(0% 0 0/.125)) drop-shadow(0 1px 1px lch(0% 0 0/.125));--msr-shadow-floating:0 0 .4px lch(100% 0 0/.1), 0 3px 8px lch(0% 0 0/.125), 0 2px 5px lch(0% 0 0/.125), 0 1px 1px lch(0% 0 0/.125);--msr-shadow-select-menu:0 0 0 .4px lch(100% 0 0/.14), 0 4px 12px lch(0% 0 0/.22), 0 1px 3px lch(0% 0 0/.18);--msr-comment-menu-surface:#323232;--msr-shadow-comment-menu:0 0 0 .5px lch(100% 0 0/.16), 0 5px 14px lch(0% 0 0/.26), 0 1px 3px lch(0% 0 0/.18);color-scheme:dark}@media (prefers-color-scheme:dark){.mesurer-root[data-theme=system]{--msr-accent:#0c8ce9;--msr-color-red-50:#3f2020;--msr-color-red-200:#7f3f46;--msr-color-red-600:#f87171;--msr-color-red-700:#fca5a5;--msr-danger-bg:#3f2020;--msr-danger-border:#7f3f46;--msr-danger-text:#f87171;--msr-danger-solid-bg:#c95058;--msr-danger-solid-hover:#b7424b;--msr-danger-solid-text:#f5f5f5;--msr-color-ink-50:#3a3a3a;--msr-color-ink-100:#414141;--msr-color-ink-200:#4a4a4a;--msr-color-ink-300:#5a5a5a;--msr-color-ink-500:#a0a0a0;--msr-color-ink-700:#dedede;--msr-color-ink-900:#f5f5f5;--msr-surface:#323232;--msr-surface-raised:#3a3a3a;--msr-surface-muted:#3a3a3a;--msr-color-white:#f5f5f5;--msr-color-black:#171717;--msr-control-thumb:#f4f4f5;--msr-slider-track:#f5f5f53d;--msr-shadow-toolbar:drop-shadow(0 0 .4px lch(100% 0 0/.1)) drop-shadow(0 3px 8px lch(0% 0 0/.125)) drop-shadow(0 2px 5px lch(0% 0 0/.125)) drop-shadow(0 1px 1px lch(0% 0 0/.125));--msr-shadow-floating:0 0 .4px lch(100% 0 0/.1), 0 3px 8px lch(0% 0 0/.125), 0 2px 5px lch(0% 0 0/.125), 0 1px 1px lch(0% 0 0/.125);--msr-shadow-select-menu:0 0 0 .4px lch(100% 0 0/.14), 0 4px 12px lch(0% 0 0/.22), 0 1px 3px lch(0% 0 0/.18);--msr-comment-menu-surface:#323232;--msr-shadow-comment-menu:0 0 0 .5px lch(100% 0 0/.16), 0 5px 14px lch(0% 0 0/.26), 0 1px 3px lch(0% 0 0/.18);color-scheme:dark}}.mesurer-color-picker,.mesurer-color-picker *,.mesurer-root [data-mesurer-inspect-info-card],.mesurer-root [data-mesurer-inspect-info-card] *,[data-mesurer-overlay][data-mesurer-inspect],[data-mesurer-overlay][data-mesurer-inspect] *{cursor:default!important}.mesurer-root button[data-mesurer-resize-cursor],.mesurer-root button[data-mesurer-resize-cursor] *,[data-mesurer-overlay][data-mesurer-inspect] [data-mesurer-resize-cursor],[data-mesurer-overlay][data-mesurer-inspect] [data-mesurer-resize-cursor] *{cursor:var(--msr-resize-cursor)!important}html[data-mesurer-resize-cursor],html[data-mesurer-resize-cursor] *,html[data-mesurer-resize-cursor] [data-mesurer-overlay][data-mesurer-inspect],html[data-mesurer-resize-cursor] [data-mesurer-overlay][data-mesurer-inspect] *,.mesurer-root[data-mesurer-resize-cursor],.mesurer-root[data-mesurer-resize-cursor] *{cursor:var(--msr-resize-cursor-lock)!important}.mesurer-root,.mesurer-root *,.mesurer-root :before,.mesurer-root :after{box-sizing:border-box}.mesurer-toolbar-motion{--msr-toolbar-motion:.2s ease;z-index:0;isolation:isolate;width:max-content;max-width:100%;display:block;position:relative}.mesurer-layout-guides,.mesurer-layout-guides-layer,.mesurer-layout-guides-grid{pointer-events:none;position:absolute;inset:0}.mesurer-layout-guides{z-index:2;overflow:hidden}.mesurer-toolbar-chrome{z-index:0;background:var(--msr-surface);width:100%;filter:var(--msr-shadow-toolbar);transform-origin:0;pointer-events:none;border-radius:9px;position:absolute;inset:0 auto 0 0;overflow:visible}.mesurer-toolbar-clip{z-index:1;isolation:isolate;transform-origin:0;position:relative;overflow:visible}.mesurer-toolbar-motion[data-resizing=collapse] .mesurer-toolbar-clip{overflow:hidden}.mesurer-toolbar-motion[data-resizing] .mesurer-toolbar-tooltips{visibility:hidden!important}.mesurer-toolbar-surface{transform-origin:0;padding:0;position:relative}.mesurer-toolbar-divider{background:var(--msr-color-ink-200);flex:none;align-self:stretch;width:1px;margin:0}.mesurer-toolbar-minimize-stage{min-width:0;width:var(--msr-expanded-w,auto);flex:none;overflow:visible}.mesurer-toolbar-minimize-stage[data-minimized=true]{width:var(--msr-icon-w,auto);overflow:hidden}.mesurer-toolbar-motion[data-resizing=collapse] .mesurer-toolbar-minimize-stage{overflow:hidden}.mesurer-toolbar-minimize-stage[data-minimized=true] .mesurer-toolbar-minimize-track{transform:translateX(calc(-1 * var(--msr-expanded-w,0px)))}.mesurer-toolbar-minimize-stage:has([role=dialog]),.mesurer-toolbar-minimize-stage:has([role=menu]),.mesurer-toolbar-minimize-stage:has(.mesurer-screenshot-preview){overflow:visible}.mesurer-toolbar-minimize-track{pointer-events:none;flex:none;display:flex;transform:translate(0)}.mesurer-toolbar-minimize-slot{flex:none}.mesurer-toolbar-minimize-slot[data-slot=expanded]{width:var(--msr-expanded-w,auto)}.mesurer-toolbar-minimize-slot[data-slot=icon]{width:auto}.mesurer-toolbar-minimize-slot:not([data-open=true]){pointer-events:none}.mesurer-toolbar-minimize-slot[data-open=true]{pointer-events:auto}.mesurer-toolbar-motion:not([data-resizing=collapse]) .mesurer-toolbar-minimize-slot[data-slot=icon]:not([data-open=true]){visibility:hidden}.mesurer-toolbar-restore svg{transform:translate(-.5px,.5px)}.mesurer-toolbar-tool-stage{min-width:0;width:var(--msr-inspect-w,auto);flex:none;overflow:hidden}.mesurer-toolbar-tool-stage[data-group=annotate]{width:var(--msr-annotate-w,auto)}.mesurer-toolbar-tool-stage[data-group=annotate] .mesurer-toolbar-tool-track{transform:translateX(calc(-1 * var(--msr-inspect-w,0px)))}.mesurer-toolbar-tool-stage:has([role=menu]),.mesurer-toolbar-tool-stage:has([role=dialog]){overflow:visible}.mesurer-toolbar-motion[data-resizing=true] .mesurer-toolbar-tool-stage{overflow:hidden}.mesurer-toolbar-tool-track{flex:none;display:flex;transform:translate(0)}.mesurer-toolbar-motion[data-ready=true] .mesurer-toolbar-tool-switch-pill{transition:transform var(--msr-toolbar-motion)}.mesurer-toolbar-tool-slot{flex:none}.mesurer-toolbar-tool-slot[data-group=inspect]{width:var(--msr-inspect-w,auto)}.mesurer-toolbar-tool-slot[data-group=annotate]{width:var(--msr-annotate-w,auto)}.mesurer-toolbar-tool-slot:not([data-open=true]){pointer-events:none}.mesurer-toolbar-motion:not([data-resizing]) .mesurer-toolbar-tool-slot:not([data-open=true]){visibility:hidden}.mesurer-toolbar-tool-panel{width:max-content}.mesurer-toolbar-tooltips{z-index:110;pointer-events:none;position:fixed;inset:0;overflow:visible}.mesurer-toolbar-trailing{z-index:1;isolation:isolate;background:var(--msr-surface);border-radius:0 9px 9px 0;flex:none;position:relative}.mesurer-toolbar-tool-switch{z-index:1;isolation:isolate;background:var(--msr-surface);position:relative}.mesurer-toolbar-tool-switch-pill{z-index:0;background:var(--msr-color-ink-200);border-radius:3px;width:28px;height:28px;position:absolute;top:2px;left:2px;transform:translate(0)}.mesurer-toolbar-tool-switch[data-value=annotate] .mesurer-toolbar-tool-switch-pill{transform:translate(30px)}.mesurer-toolbar-tool-switch>:not(.mesurer-toolbar-tool-switch-pill){z-index:1;position:relative}@media (prefers-reduced-motion:reduce){.mesurer-toolbar-motion,.mesurer-toolbar-chrome,.mesurer-toolbar-tool-track,.mesurer-toolbar-minimize-track,.mesurer-toolbar-trailing,.mesurer-toolbar-motion[data-ready=true] .mesurer-toolbar-tool-switch-pill{transition:none}.mesurer-screenshot-preview{animation-name:mesurer-screenshot-preview-reduced;animation-duration:5s;animation-timing-function:linear;animation-fill-mode:both}}@keyframes mesurer-screenshot-preview{0%,3.1%{opacity:0}6.2%,96.9%{opacity:1}to{opacity:0}}@keyframes mesurer-screenshot-preview-reduced{0%,to{opacity:1}}@keyframes mesurer-comment-nudge{0%,to{transform:translate(0)}35%{transform:translate(-3px)}70%{transform:translate(3px)}}.mesurer-comment-nudge{animation:.15s ease-out mesurer-comment-nudge}@keyframes mesurer-status-ellipsis{0%,24%{content:""}25%,49%{content:"."}50%,74%{content:".."}75%,to{content:"..."}}.mesurer-status-ellipsis{text-align:left;width:1.5em;display:inline-block}.mesurer-status-ellipsis:after{content:"";animation:1.2s step-end infinite mesurer-status-ellipsis}@media (prefers-reduced-motion:reduce){.mesurer-status-ellipsis:after{content:"...";animation:none}}.mesurer-thin-scrollbar{scrollbar-width:thin;scrollbar-color:var(--msr-color-ink-200) transparent}.mesurer-thin-scrollbar::-webkit-scrollbar{width:4px;height:4px}.mesurer-thin-scrollbar::-webkit-scrollbar-track{background:0 0}.mesurer-thin-scrollbar::-webkit-scrollbar-thumb{background:var(--msr-color-ink-200);border-radius:var(--msr-radius-control)}.mesurer-thin-scrollbar:hover{scrollbar-color:var(--msr-color-ink-300) transparent}.mesurer-thin-scrollbar:hover::-webkit-scrollbar-thumb{background:var(--msr-color-ink-300)}.mesurer-thin-scrollbar::-webkit-scrollbar-corner{background:0 0}.mesurer-toast-surface{box-shadow:var(--msr-shadow-floating)}.mesurer-root{--msr-spacing:4px}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes pulse{50%{opacity:.5}}';
|
|
52
63
|
|
|
53
64
|
// mesurer-client.tsx
|
|
54
65
|
import {
|
|
@@ -67,7 +78,7 @@ import { useId, useLayoutEffect as useLayoutEffect2, useRef as useRef2, useState
|
|
|
67
78
|
// package.json
|
|
68
79
|
var package_default = {
|
|
69
80
|
name: "mesurer",
|
|
70
|
-
version: "0.2.
|
|
81
|
+
version: "0.2.3",
|
|
71
82
|
description: "Inspect, annotate, and give feedback on any live interface",
|
|
72
83
|
license: "MIT",
|
|
73
84
|
author: "Julien Thibeaut",
|
|
@@ -1687,7 +1698,7 @@ function SettingsPanel({
|
|
|
1687
1698
|
color,
|
|
1688
1699
|
camera,
|
|
1689
1700
|
rulers,
|
|
1690
|
-
text,
|
|
1701
|
+
text: text2,
|
|
1691
1702
|
arrows,
|
|
1692
1703
|
focusSection,
|
|
1693
1704
|
general
|
|
@@ -1707,7 +1718,7 @@ function SettingsPanel({
|
|
|
1707
1718
|
} = general;
|
|
1708
1719
|
const { settings: screenshotSettings, setSettings: setScreenshotSettings } = camera;
|
|
1709
1720
|
const { settings: rulerSettings, setSettings: setRulerSettings } = rulers;
|
|
1710
|
-
const { settings: textSettings, setSettings: setTextSettings } =
|
|
1721
|
+
const { settings: textSettings, setSettings: setTextSettings } = text2;
|
|
1711
1722
|
const {
|
|
1712
1723
|
color: arrowColor,
|
|
1713
1724
|
setColor: setArrowColor,
|
|
@@ -2859,8 +2870,8 @@ var scaledFont = (scale) => ({
|
|
|
2859
2870
|
fontSize: `${BASE_FONT_SIZE * scale}px`,
|
|
2860
2871
|
lineHeight: `${BASE_LINE_HEIGHT * scale}px`
|
|
2861
2872
|
});
|
|
2862
|
-
var scaleBox = (
|
|
2863
|
-
const { x, y, width, height, rotation, scale, boxWidth } =
|
|
2873
|
+
var scaleBox = (box2, handle, pointer) => {
|
|
2874
|
+
const { x, y, width, height, rotation, scale, boxWidth } = box2;
|
|
2864
2875
|
const center = boxCenter(x, y, width, height);
|
|
2865
2876
|
const localPointer = rotatePoint(pointer, center, -rotation);
|
|
2866
2877
|
const { ax, ay } = ANCHOR[handle];
|
|
@@ -2891,8 +2902,8 @@ var scaleBox = (box, handle, pointer) => {
|
|
|
2891
2902
|
...typeof boxWidth === "number" ? { boxWidth: Math.max(MIN_BOX_WIDTH, boxWidth * applied) } : {}
|
|
2892
2903
|
};
|
|
2893
2904
|
};
|
|
2894
|
-
var resizeWidthBox = (
|
|
2895
|
-
const { x, y, width, height, rotation } =
|
|
2905
|
+
var resizeWidthBox = (box2, handle, pointer) => {
|
|
2906
|
+
const { x, y, width, height, rotation } = box2;
|
|
2896
2907
|
const center = boxCenter(x, y, width, height);
|
|
2897
2908
|
const localPointer = rotatePoint(pointer, center, -rotation);
|
|
2898
2909
|
const { ax } = ANCHOR[handle];
|
|
@@ -3353,6 +3364,8 @@ var installKeyboardGate = (view = window, {
|
|
|
3353
3364
|
}
|
|
3354
3365
|
if (event instanceof KeyboardEvent && isMesurerKeyboardBridgeKey(event.key, event)) {
|
|
3355
3366
|
bridgeKey(event);
|
|
3367
|
+
if (event.type === "keydown") event.preventDefault();
|
|
3368
|
+
return;
|
|
3356
3369
|
}
|
|
3357
3370
|
event.preventDefault();
|
|
3358
3371
|
if (isAnnotationHotkey(event)) return;
|
|
@@ -3365,6 +3378,8 @@ var installKeyboardGate = (view = window, {
|
|
|
3365
3378
|
if (event.type === "keydown" || event.type === "keyup") {
|
|
3366
3379
|
if (isolateMesurerEvents && isMesurerKeyboardBridgeKey(event.key, event)) {
|
|
3367
3380
|
bridgeKey(event);
|
|
3381
|
+
if (event.type === "keydown") event.preventDefault();
|
|
3382
|
+
return;
|
|
3368
3383
|
}
|
|
3369
3384
|
}
|
|
3370
3385
|
}
|
|
@@ -4561,21 +4576,26 @@ var MenuSurface = forwardRef3(
|
|
|
4561
4576
|
);
|
|
4562
4577
|
}
|
|
4563
4578
|
);
|
|
4564
|
-
|
|
4579
|
+
var ToolbarMenu = forwardRef3(function ToolbarMenu2({ className, side, align = "left", floating = false, floatingStyle, style, children, ...props }, ref) {
|
|
4565
4580
|
return /* @__PURE__ */ jsx38(
|
|
4566
4581
|
MenuSurface,
|
|
4567
4582
|
{
|
|
4568
4583
|
...props,
|
|
4584
|
+
ref,
|
|
4585
|
+
style: floating ? { ...floatingStyle, ...style } : style,
|
|
4569
4586
|
className: cn(
|
|
4570
|
-
"msr:
|
|
4571
|
-
|
|
4572
|
-
|
|
4587
|
+
"msr:flex msr:w-44 msr:flex-col msr:gap-px",
|
|
4588
|
+
floating ? "msr:pointer-events-auto msr:fixed msr:z-[120]" : cn(
|
|
4589
|
+
"msr:absolute msr:z-[100]",
|
|
4590
|
+
side === "bottom" ? "msr:top-full msr:mt-2" : "msr:bottom-full msr:mb-2",
|
|
4591
|
+
align === "left" ? "msr:left-0" : "msr:right-0"
|
|
4592
|
+
),
|
|
4573
4593
|
className
|
|
4574
4594
|
),
|
|
4575
4595
|
children
|
|
4576
4596
|
}
|
|
4577
4597
|
);
|
|
4578
|
-
}
|
|
4598
|
+
});
|
|
4579
4599
|
function MenuItem({
|
|
4580
4600
|
className,
|
|
4581
4601
|
children,
|
|
@@ -4706,6 +4726,7 @@ function CommentsPanel({
|
|
|
4706
4726
|
panelRef,
|
|
4707
4727
|
placement,
|
|
4708
4728
|
fixed = false,
|
|
4729
|
+
fixedZIndex = 100,
|
|
4709
4730
|
statusFilter,
|
|
4710
4731
|
onStatusFilterChange
|
|
4711
4732
|
}) {
|
|
@@ -4781,7 +4802,7 @@ function CommentsPanel({
|
|
|
4781
4802
|
style: {
|
|
4782
4803
|
position: fixed ? "fixed" : "absolute",
|
|
4783
4804
|
width: fixed ? "18rem" : void 0,
|
|
4784
|
-
zIndex: fixed ?
|
|
4805
|
+
zIndex: fixed ? fixedZIndex : void 0,
|
|
4785
4806
|
pointerEvents: "auto",
|
|
4786
4807
|
right: placement.right,
|
|
4787
4808
|
top: placement.top,
|
|
@@ -4952,7 +4973,7 @@ function CommentsPanel({
|
|
|
4952
4973
|
"data-mesurer-comment-actions": true,
|
|
4953
4974
|
"data-mesurer-comment-ui": true,
|
|
4954
4975
|
className: "mesurer-comment-overflow-menu msr:pointer-events-auto msr:fixed msr:z-[100] msr:w-32 msr:-translate-y-full msr:rounded-md msr:bg-white msr:p-1 msr:shadow-floating",
|
|
4955
|
-
style: { position: "fixed", zIndex:
|
|
4976
|
+
style: { position: "fixed", zIndex: 120, pointerEvents: "auto", width: "8rem", top: commentMenuPosition.top, right: commentMenuPosition.right },
|
|
4956
4977
|
onPointerDown: (event) => event.stopPropagation(),
|
|
4957
4978
|
children: /* @__PURE__ */ jsx40("button", { type: "button", role: "menuitem", className: "mesurer-comment-menu-danger msr:flex msr:w-full msr:rounded-[4px] msr:px-2 msr:py-1.5 msr:text-left msr:text-[12px] msr:text-red-600 msr:hover:bg-red-50", onClick: (event) => {
|
|
4958
4979
|
event.stopPropagation();
|
|
@@ -4970,7 +4991,7 @@ function CommentsPanel({
|
|
|
4970
4991
|
"data-mesurer-comment-actions": true,
|
|
4971
4992
|
"data-mesurer-comment-ui": true,
|
|
4972
4993
|
className: "mesurer-comment-overflow-menu msr:pointer-events-auto msr:fixed msr:z-[100] msr:w-40 msr:rounded-md msr:bg-white msr:p-1 msr:shadow-floating",
|
|
4973
|
-
style: { position: "fixed", zIndex:
|
|
4994
|
+
style: { position: "fixed", zIndex: 120, pointerEvents: "auto", width: "10rem", top: listMenuPosition.top, right: listMenuPosition.right },
|
|
4974
4995
|
onPointerDown: (event) => event.stopPropagation(),
|
|
4975
4996
|
children: [
|
|
4976
4997
|
["open", "resolved", "all"].map((filter) => /* @__PURE__ */ jsxs28(
|
|
@@ -5339,6 +5360,12 @@ var GUIDE_MENU_WIDTH = 176;
|
|
|
5339
5360
|
var VIEWPORT_PADDING2 = 8;
|
|
5340
5361
|
var TOOLBAR_HEIGHT = 40;
|
|
5341
5362
|
var TOOLTIP_HEIGHT_WITH_GAP = 34;
|
|
5363
|
+
var floatingMenuStyle = (placement) => ({
|
|
5364
|
+
zIndex: 120,
|
|
5365
|
+
top: placement.top,
|
|
5366
|
+
bottom: placement.bottom,
|
|
5367
|
+
...placement.left !== void 0 ? { left: placement.left } : { right: placement.right }
|
|
5368
|
+
});
|
|
5342
5369
|
var getSettingsShortcut = (eventTarget) => /Mac|iPhone|iPad|iPod/.test(eventTarget.navigator.platform) ? "\u2318 ," : "Ctrl + ,";
|
|
5343
5370
|
var toolGroupForMode = (mode, colorPickerActive) => {
|
|
5344
5371
|
if (colorPickerActive) return "inspect";
|
|
@@ -5730,7 +5757,8 @@ function ToolbarComponent({
|
|
|
5730
5757
|
anchorRef: settingsRef,
|
|
5731
5758
|
eventTarget,
|
|
5732
5759
|
open: settingsOpen,
|
|
5733
|
-
refreshKey: `${position.x}:${position.y}
|
|
5760
|
+
refreshKey: `${position.x}:${position.y}`,
|
|
5761
|
+
fixed: true
|
|
5734
5762
|
});
|
|
5735
5763
|
const { menuRef: commentsPanelRef, placement: commentsPlacement } = useSettingsMenuPlacement({
|
|
5736
5764
|
anchorRef: commentButtonRef,
|
|
@@ -5740,6 +5768,33 @@ function ToolbarComponent({
|
|
|
5740
5768
|
fixed: true
|
|
5741
5769
|
});
|
|
5742
5770
|
const recordingPanelOpen = Boolean(screenRecording.panel);
|
|
5771
|
+
const captureAnchorRef = useRef14(null);
|
|
5772
|
+
const colorPickerAnchorRef = useRef14(null);
|
|
5773
|
+
const [colorPickerShell, setColorPickerShell] = useState11(null);
|
|
5774
|
+
const { menuRef: guideMenuPortalRef, placement: guideMenuPortalPlacement } = useSettingsMenuPlacement({
|
|
5775
|
+
anchorRef: guideMenuButtonRef,
|
|
5776
|
+
eventTarget,
|
|
5777
|
+
open: recordingPanelOpen && guideMenuOpen,
|
|
5778
|
+
refreshKey: `${position.x}:${position.y}:${menuAlign}`,
|
|
5779
|
+
fixed: true,
|
|
5780
|
+
align: menuAlign
|
|
5781
|
+
});
|
|
5782
|
+
const { menuRef: captureMenuPortalRef, placement: captureMenuPortalPlacement } = useSettingsMenuPlacement({
|
|
5783
|
+
anchorRef: captureAnchorRef,
|
|
5784
|
+
eventTarget,
|
|
5785
|
+
open: recordingPanelOpen && captureMenuOpen,
|
|
5786
|
+
refreshKey: `${position.x}:${position.y}`,
|
|
5787
|
+
fixed: true,
|
|
5788
|
+
align: "right"
|
|
5789
|
+
});
|
|
5790
|
+
const { menuRef: commentDropdownPortalRef, placement: commentDropdownPlacement } = useSettingsMenuPlacement({
|
|
5791
|
+
anchorRef: commentButtonRef,
|
|
5792
|
+
eventTarget,
|
|
5793
|
+
open: recordingPanelOpen && commentMenuOpen && !commentsPanelOpen,
|
|
5794
|
+
refreshKey: `${position.x}:${position.y}`,
|
|
5795
|
+
fixed: true,
|
|
5796
|
+
align: "right"
|
|
5797
|
+
});
|
|
5743
5798
|
const { menuRef: recordingPanelRef, placement: recordingPlacement } = useSettingsMenuPlacement({
|
|
5744
5799
|
anchorRef: settingsRef,
|
|
5745
5800
|
eventTarget,
|
|
@@ -5755,6 +5810,26 @@ function ToolbarComponent({
|
|
|
5755
5810
|
refreshKey: `${position.x}:${position.y}`,
|
|
5756
5811
|
fixed: true
|
|
5757
5812
|
});
|
|
5813
|
+
useLayoutEffect8(() => {
|
|
5814
|
+
if (!recordingPanelOpen || !colorPickerActive) {
|
|
5815
|
+
setColorPickerShell(null);
|
|
5816
|
+
return;
|
|
5817
|
+
}
|
|
5818
|
+
const place = () => {
|
|
5819
|
+
const anchor = colorPickerAnchorRef.current;
|
|
5820
|
+
const tool = anchor?.querySelector("[data-tool-id='color-picker']") ?? anchor;
|
|
5821
|
+
if (!(tool instanceof HTMLElement)) return;
|
|
5822
|
+
const rect = tool.getBoundingClientRect();
|
|
5823
|
+
setColorPickerShell({ left: rect.left, top: rect.bottom, width: rect.width });
|
|
5824
|
+
};
|
|
5825
|
+
place();
|
|
5826
|
+
eventTarget.addEventListener("resize", place);
|
|
5827
|
+
eventTarget.addEventListener("scroll", place, true);
|
|
5828
|
+
return () => {
|
|
5829
|
+
eventTarget.removeEventListener("resize", place);
|
|
5830
|
+
eventTarget.removeEventListener("scroll", place, true);
|
|
5831
|
+
};
|
|
5832
|
+
}, [colorPickerActive, eventTarget, position.x, position.y, recordingPanelOpen]);
|
|
5758
5833
|
const selectMode = useCallback6(() => {
|
|
5759
5834
|
onCancelTransient();
|
|
5760
5835
|
clearSelection();
|
|
@@ -6203,123 +6278,129 @@ function ToolbarComponent({
|
|
|
6203
6278
|
anchorRef: guideMenuRef
|
|
6204
6279
|
}
|
|
6205
6280
|
),
|
|
6206
|
-
guideMenuOpen ?
|
|
6207
|
-
|
|
6208
|
-
|
|
6209
|
-
|
|
6210
|
-
|
|
6211
|
-
|
|
6212
|
-
|
|
6213
|
-
|
|
6214
|
-
|
|
6215
|
-
|
|
6216
|
-
|
|
6217
|
-
|
|
6218
|
-
|
|
6219
|
-
|
|
6220
|
-
|
|
6221
|
-
|
|
6222
|
-
|
|
6223
|
-
|
|
6224
|
-
}
|
|
6225
|
-
if (event.key === "Enter") {
|
|
6226
|
-
event.preventDefault();
|
|
6227
|
-
if (features.rulers && activeMenuIndex === 0) selectRulers();
|
|
6228
|
-
else if (activeMenuIndex === horizontalIndex) selectGuideOrientation("horizontal");
|
|
6229
|
-
else if (activeMenuIndex === verticalIndex) selectGuideOrientation("vertical");
|
|
6230
|
-
}
|
|
6231
|
-
if (features.rulers && key === "r") {
|
|
6232
|
-
event.preventDefault();
|
|
6233
|
-
selectRulers();
|
|
6234
|
-
}
|
|
6235
|
-
if (key === "h") {
|
|
6236
|
-
event.preventDefault();
|
|
6237
|
-
selectGuideOrientation("horizontal");
|
|
6238
|
-
}
|
|
6239
|
-
if (key === "v") {
|
|
6240
|
-
event.preventDefault();
|
|
6241
|
-
selectGuideOrientation("vertical");
|
|
6242
|
-
}
|
|
6243
|
-
if (event.key === "Escape") {
|
|
6244
|
-
event.preventDefault();
|
|
6245
|
-
event.stopPropagation();
|
|
6246
|
-
setOpenMenu(null);
|
|
6247
|
-
}
|
|
6248
|
-
},
|
|
6249
|
-
children: [
|
|
6250
|
-
features.rulers ? /* @__PURE__ */ jsxs30(
|
|
6251
|
-
MenuItem,
|
|
6252
|
-
{
|
|
6253
|
-
className: cn(
|
|
6254
|
-
"msr:group msr:flex msr:w-full msr:items-center msr:gap-2 msr:rounded-[4px] msr:px-2 msr:py-1 msr:text-left msr:text-[11px] msr:leading-4",
|
|
6255
|
-
activeMenuIndex === 0 || guideControl === "rulers" ? "msr:bg-[#0d99ff] msr:text-white" : "msr:text-ink-700 msr:hover:bg-[#0d99ff] msr:hover:text-white"
|
|
6256
|
-
),
|
|
6257
|
-
onClick: () => selectRulers(),
|
|
6258
|
-
children: [
|
|
6259
|
-
/* @__PURE__ */ jsx42(
|
|
6260
|
-
CheckIcon,
|
|
6261
|
-
{
|
|
6262
|
-
size: 12,
|
|
6263
|
-
className: cn(guideControl === "rulers" ? "msr:opacity-100" : "msr:opacity-0")
|
|
6264
|
-
}
|
|
6265
|
-
),
|
|
6266
|
-
/* @__PURE__ */ jsx42(MeasureLIcon, { size: 12 }),
|
|
6267
|
-
/* @__PURE__ */ jsx42("span", { className: "msr:flex-1", children: "Rulers" }),
|
|
6268
|
-
/* @__PURE__ */ jsx42("span", { children: "R" })
|
|
6269
|
-
]
|
|
6281
|
+
guideMenuOpen ? (() => {
|
|
6282
|
+
const menu = /* @__PURE__ */ jsxs30(
|
|
6283
|
+
ToolbarMenu,
|
|
6284
|
+
{
|
|
6285
|
+
ref: recordingPanelOpen ? guideMenuPortalRef : void 0,
|
|
6286
|
+
floating: recordingPanelOpen,
|
|
6287
|
+
floatingStyle: recordingPanelOpen ? floatingMenuStyle(guideMenuPortalPlacement) : void 0,
|
|
6288
|
+
side: menuSide,
|
|
6289
|
+
align: menuAlign,
|
|
6290
|
+
tabIndex: 0,
|
|
6291
|
+
onKeyDown: (event) => {
|
|
6292
|
+
const key = event.key.toLowerCase();
|
|
6293
|
+
const itemCount = features.rulers ? 3 : 2;
|
|
6294
|
+
const horizontalIndex = features.rulers ? 1 : 0;
|
|
6295
|
+
const verticalIndex = features.rulers ? 2 : 1;
|
|
6296
|
+
if (event.key === "ArrowDown") {
|
|
6297
|
+
event.preventDefault();
|
|
6298
|
+
setActiveMenuIndex((prev) => (prev + 1) % itemCount);
|
|
6270
6299
|
}
|
|
6271
|
-
|
|
6272
|
-
|
|
6273
|
-
|
|
6274
|
-
{
|
|
6275
|
-
className: cn(
|
|
6276
|
-
"msr:group msr:flex msr:w-full msr:items-center msr:gap-2 msr:rounded-[4px] msr:px-2 msr:py-1 msr:text-left msr:text-[11px] msr:leading-4",
|
|
6277
|
-
activeMenuIndex === (features.rulers ? 1 : 0) || guideControl === "guides" && guideOrientation === "horizontal" ? "msr:bg-[#0d99ff] msr:text-white" : "msr:text-ink-700 msr:hover:bg-[#0d99ff] msr:hover:text-white"
|
|
6278
|
-
),
|
|
6279
|
-
onClick: () => selectGuideOrientation("horizontal"),
|
|
6280
|
-
children: [
|
|
6281
|
-
/* @__PURE__ */ jsx42(
|
|
6282
|
-
CheckIcon,
|
|
6283
|
-
{
|
|
6284
|
-
size: 12,
|
|
6285
|
-
className: cn(
|
|
6286
|
-
guideControl === "guides" && guideOrientation === "horizontal" ? "msr:opacity-100" : "msr:opacity-0"
|
|
6287
|
-
)
|
|
6288
|
-
}
|
|
6289
|
-
),
|
|
6290
|
-
/* @__PURE__ */ jsx42(MinusIcon, { size: 12 }),
|
|
6291
|
-
/* @__PURE__ */ jsx42("span", { className: "msr:flex-1", children: "Horizontal" }),
|
|
6292
|
-
/* @__PURE__ */ jsx42("span", { children: "H" })
|
|
6293
|
-
]
|
|
6300
|
+
if (event.key === "ArrowUp") {
|
|
6301
|
+
event.preventDefault();
|
|
6302
|
+
setActiveMenuIndex((prev) => (prev - 1 + itemCount) % itemCount);
|
|
6294
6303
|
}
|
|
6295
|
-
|
|
6296
|
-
|
|
6297
|
-
|
|
6298
|
-
|
|
6299
|
-
|
|
6300
|
-
"msr:group msr:flex msr:w-full msr:items-center msr:gap-2 msr:rounded-[4px] msr:px-2 msr:py-1 msr:text-left msr:text-[11px] msr:leading-4",
|
|
6301
|
-
activeMenuIndex === (features.rulers ? 2 : 1) || guideControl === "guides" && guideOrientation === "vertical" ? "msr:bg-[#0d99ff] msr:text-white" : "msr:text-ink-700 msr:hover:bg-[#0d99ff] msr:hover:text-white"
|
|
6302
|
-
),
|
|
6303
|
-
onClick: () => selectGuideOrientation("vertical"),
|
|
6304
|
-
children: [
|
|
6305
|
-
/* @__PURE__ */ jsx42(
|
|
6306
|
-
CheckIcon,
|
|
6307
|
-
{
|
|
6308
|
-
size: 12,
|
|
6309
|
-
className: cn(
|
|
6310
|
-
guideControl === "guides" && guideOrientation === "vertical" ? "msr:opacity-100" : "msr:opacity-0"
|
|
6311
|
-
)
|
|
6312
|
-
}
|
|
6313
|
-
),
|
|
6314
|
-
/* @__PURE__ */ jsx42(MinusIcon, { size: 12, className: "msr:rotate-90" }),
|
|
6315
|
-
/* @__PURE__ */ jsx42("span", { className: "msr:flex-1", children: "Vertical" }),
|
|
6316
|
-
/* @__PURE__ */ jsx42("span", { children: "V" })
|
|
6317
|
-
]
|
|
6304
|
+
if (event.key === "Enter") {
|
|
6305
|
+
event.preventDefault();
|
|
6306
|
+
if (features.rulers && activeMenuIndex === 0) selectRulers();
|
|
6307
|
+
else if (activeMenuIndex === horizontalIndex) selectGuideOrientation("horizontal");
|
|
6308
|
+
else if (activeMenuIndex === verticalIndex) selectGuideOrientation("vertical");
|
|
6318
6309
|
}
|
|
6319
|
-
|
|
6320
|
-
|
|
6321
|
-
|
|
6322
|
-
|
|
6310
|
+
if (features.rulers && key === "r") {
|
|
6311
|
+
event.preventDefault();
|
|
6312
|
+
selectRulers();
|
|
6313
|
+
}
|
|
6314
|
+
if (key === "h") {
|
|
6315
|
+
event.preventDefault();
|
|
6316
|
+
selectGuideOrientation("horizontal");
|
|
6317
|
+
}
|
|
6318
|
+
if (key === "v") {
|
|
6319
|
+
event.preventDefault();
|
|
6320
|
+
selectGuideOrientation("vertical");
|
|
6321
|
+
}
|
|
6322
|
+
if (event.key === "Escape") {
|
|
6323
|
+
event.preventDefault();
|
|
6324
|
+
event.stopPropagation();
|
|
6325
|
+
setOpenMenu(null);
|
|
6326
|
+
}
|
|
6327
|
+
},
|
|
6328
|
+
children: [
|
|
6329
|
+
features.rulers ? /* @__PURE__ */ jsxs30(
|
|
6330
|
+
MenuItem,
|
|
6331
|
+
{
|
|
6332
|
+
className: cn(
|
|
6333
|
+
"msr:group msr:flex msr:w-full msr:items-center msr:gap-2 msr:rounded-[4px] msr:px-2 msr:py-1 msr:text-left msr:text-[11px] msr:leading-4",
|
|
6334
|
+
activeMenuIndex === 0 || guideControl === "rulers" ? "msr:bg-[#0d99ff] msr:text-white" : "msr:text-ink-700 msr:hover:bg-[#0d99ff] msr:hover:text-white"
|
|
6335
|
+
),
|
|
6336
|
+
onClick: () => selectRulers(),
|
|
6337
|
+
children: [
|
|
6338
|
+
/* @__PURE__ */ jsx42(
|
|
6339
|
+
CheckIcon,
|
|
6340
|
+
{
|
|
6341
|
+
size: 12,
|
|
6342
|
+
className: cn(guideControl === "rulers" ? "msr:opacity-100" : "msr:opacity-0")
|
|
6343
|
+
}
|
|
6344
|
+
),
|
|
6345
|
+
/* @__PURE__ */ jsx42(MeasureLIcon, { size: 12 }),
|
|
6346
|
+
/* @__PURE__ */ jsx42("span", { className: "msr:flex-1", children: "Rulers" }),
|
|
6347
|
+
/* @__PURE__ */ jsx42("span", { children: "R" })
|
|
6348
|
+
]
|
|
6349
|
+
}
|
|
6350
|
+
) : null,
|
|
6351
|
+
/* @__PURE__ */ jsxs30(
|
|
6352
|
+
MenuItem,
|
|
6353
|
+
{
|
|
6354
|
+
className: cn(
|
|
6355
|
+
"msr:group msr:flex msr:w-full msr:items-center msr:gap-2 msr:rounded-[4px] msr:px-2 msr:py-1 msr:text-left msr:text-[11px] msr:leading-4",
|
|
6356
|
+
activeMenuIndex === (features.rulers ? 1 : 0) || guideControl === "guides" && guideOrientation === "horizontal" ? "msr:bg-[#0d99ff] msr:text-white" : "msr:text-ink-700 msr:hover:bg-[#0d99ff] msr:hover:text-white"
|
|
6357
|
+
),
|
|
6358
|
+
onClick: () => selectGuideOrientation("horizontal"),
|
|
6359
|
+
children: [
|
|
6360
|
+
/* @__PURE__ */ jsx42(
|
|
6361
|
+
CheckIcon,
|
|
6362
|
+
{
|
|
6363
|
+
size: 12,
|
|
6364
|
+
className: cn(
|
|
6365
|
+
guideControl === "guides" && guideOrientation === "horizontal" ? "msr:opacity-100" : "msr:opacity-0"
|
|
6366
|
+
)
|
|
6367
|
+
}
|
|
6368
|
+
),
|
|
6369
|
+
/* @__PURE__ */ jsx42(MinusIcon, { size: 12 }),
|
|
6370
|
+
/* @__PURE__ */ jsx42("span", { className: "msr:flex-1", children: "Horizontal" }),
|
|
6371
|
+
/* @__PURE__ */ jsx42("span", { children: "H" })
|
|
6372
|
+
]
|
|
6373
|
+
}
|
|
6374
|
+
),
|
|
6375
|
+
/* @__PURE__ */ jsxs30(
|
|
6376
|
+
MenuItem,
|
|
6377
|
+
{
|
|
6378
|
+
className: cn(
|
|
6379
|
+
"msr:group msr:flex msr:w-full msr:items-center msr:gap-2 msr:rounded-[4px] msr:px-2 msr:py-1 msr:text-left msr:text-[11px] msr:leading-4",
|
|
6380
|
+
activeMenuIndex === (features.rulers ? 2 : 1) || guideControl === "guides" && guideOrientation === "vertical" ? "msr:bg-[#0d99ff] msr:text-white" : "msr:text-ink-700 msr:hover:bg-[#0d99ff] msr:hover:text-white"
|
|
6381
|
+
),
|
|
6382
|
+
onClick: () => selectGuideOrientation("vertical"),
|
|
6383
|
+
children: [
|
|
6384
|
+
/* @__PURE__ */ jsx42(
|
|
6385
|
+
CheckIcon,
|
|
6386
|
+
{
|
|
6387
|
+
size: 12,
|
|
6388
|
+
className: cn(
|
|
6389
|
+
guideControl === "guides" && guideOrientation === "vertical" ? "msr:opacity-100" : "msr:opacity-0"
|
|
6390
|
+
)
|
|
6391
|
+
}
|
|
6392
|
+
),
|
|
6393
|
+
/* @__PURE__ */ jsx42(MinusIcon, { size: 12, className: "msr:rotate-90" }),
|
|
6394
|
+
/* @__PURE__ */ jsx42("span", { className: "msr:flex-1", children: "Vertical" }),
|
|
6395
|
+
/* @__PURE__ */ jsx42("span", { children: "V" })
|
|
6396
|
+
]
|
|
6397
|
+
}
|
|
6398
|
+
)
|
|
6399
|
+
]
|
|
6400
|
+
}
|
|
6401
|
+
);
|
|
6402
|
+
return recordingPanelOpen ? createPortal4(menu, commentPanelPortalTarget) : menu;
|
|
6403
|
+
})() : null
|
|
6323
6404
|
]
|
|
6324
6405
|
}
|
|
6325
6406
|
),
|
|
@@ -6347,6 +6428,7 @@ function ToolbarComponent({
|
|
|
6347
6428
|
ref: layoutGuidesMenuRef,
|
|
6348
6429
|
className: "mesurer-menu-surface msr:pointer-events-auto msr:fixed msr:z-[100] msr:flex msr:w-60 msr:flex-col msr:overflow-hidden msr:rounded-lg msr:bg-white msr:p-0 msr:shadow-floating",
|
|
6349
6430
|
style: {
|
|
6431
|
+
zIndex: recordingPanelOpen ? 120 : void 0,
|
|
6350
6432
|
top: layoutGuidesPlacement.top,
|
|
6351
6433
|
bottom: layoutGuidesPlacement.bottom,
|
|
6352
6434
|
right: layoutGuidesPlacement.right,
|
|
@@ -6372,7 +6454,7 @@ function ToolbarComponent({
|
|
|
6372
6454
|
commentPanelPortalTarget
|
|
6373
6455
|
) : null
|
|
6374
6456
|
] }),
|
|
6375
|
-
/* @__PURE__ */ jsxs30("div", { className: "msr:relative msr:flex", children: [
|
|
6457
|
+
/* @__PURE__ */ jsxs30("div", { ref: colorPickerAnchorRef, className: "msr:relative msr:flex", children: [
|
|
6376
6458
|
/* @__PURE__ */ jsx42(
|
|
6377
6459
|
ToolbarButton,
|
|
6378
6460
|
{
|
|
@@ -6386,7 +6468,23 @@ function ToolbarComponent({
|
|
|
6386
6468
|
children: /* @__PURE__ */ jsx42(DropperIcon, { size: 20, "aria-hidden": "true" })
|
|
6387
6469
|
}
|
|
6388
6470
|
),
|
|
6389
|
-
|
|
6471
|
+
recordingPanelOpen && colorPickerActive ? createPortal4(
|
|
6472
|
+
/* @__PURE__ */ jsx42(
|
|
6473
|
+
"div",
|
|
6474
|
+
{
|
|
6475
|
+
className: "msr:pointer-events-none msr:fixed msr:z-[120]",
|
|
6476
|
+
style: {
|
|
6477
|
+
left: colorPickerShell?.left ?? 0,
|
|
6478
|
+
top: colorPickerShell?.top ?? 0,
|
|
6479
|
+
width: colorPickerShell?.width,
|
|
6480
|
+
height: 0,
|
|
6481
|
+
visibility: colorPickerShell ? "visible" : "hidden"
|
|
6482
|
+
},
|
|
6483
|
+
children: /* @__PURE__ */ jsx42("div", { className: "msr:pointer-events-auto", children: colorPicker.panel })
|
|
6484
|
+
}
|
|
6485
|
+
),
|
|
6486
|
+
commentPanelPortalTarget
|
|
6487
|
+
) : colorPicker.panel
|
|
6390
6488
|
] })
|
|
6391
6489
|
] }) })
|
|
6392
6490
|
}
|
|
@@ -6461,7 +6559,7 @@ function ToolbarComponent({
|
|
|
6461
6559
|
/* @__PURE__ */ jsxs30("div", { ref: trailingRef, className: "mesurer-toolbar-trailing msr:flex msr:items-stretch", children: [
|
|
6462
6560
|
/* @__PURE__ */ jsx42(ToolbarDivider, {}),
|
|
6463
6561
|
/* @__PURE__ */ jsxs30(ToolbarGroup, { label: "Capture and settings", className: "msr:px-1", children: [
|
|
6464
|
-
/* @__PURE__ */ jsxs30("div", { className: "msr:relative msr:flex msr:flex-none", children: [
|
|
6562
|
+
/* @__PURE__ */ jsxs30("div", { ref: captureAnchorRef, className: "msr:relative msr:flex msr:flex-none", children: [
|
|
6465
6563
|
features.screenshot ? /* @__PURE__ */ jsxs30(Fragment9, { children: [
|
|
6466
6564
|
/* @__PURE__ */ jsx42(
|
|
6467
6565
|
ToolbarButton,
|
|
@@ -6505,50 +6603,56 @@ function ToolbarComponent({
|
|
|
6505
6603
|
children: /* @__PURE__ */ jsx42(CaretDownIcon, { size: 8, "aria-hidden": "true" })
|
|
6506
6604
|
}
|
|
6507
6605
|
),
|
|
6508
|
-
captureMenuOpen ?
|
|
6509
|
-
|
|
6510
|
-
|
|
6511
|
-
|
|
6512
|
-
|
|
6513
|
-
|
|
6514
|
-
|
|
6515
|
-
|
|
6516
|
-
|
|
6517
|
-
|
|
6518
|
-
|
|
6519
|
-
|
|
6520
|
-
|
|
6521
|
-
|
|
6522
|
-
|
|
6523
|
-
|
|
6524
|
-
|
|
6525
|
-
|
|
6526
|
-
|
|
6527
|
-
|
|
6528
|
-
|
|
6529
|
-
|
|
6530
|
-
|
|
6531
|
-
|
|
6532
|
-
|
|
6533
|
-
|
|
6534
|
-
|
|
6535
|
-
|
|
6536
|
-
|
|
6537
|
-
|
|
6538
|
-
|
|
6539
|
-
|
|
6540
|
-
|
|
6541
|
-
|
|
6542
|
-
|
|
6543
|
-
|
|
6544
|
-
|
|
6545
|
-
|
|
6546
|
-
|
|
6547
|
-
|
|
6548
|
-
|
|
6549
|
-
|
|
6550
|
-
|
|
6551
|
-
|
|
6606
|
+
captureMenuOpen ? (() => {
|
|
6607
|
+
const menu = /* @__PURE__ */ jsxs30(
|
|
6608
|
+
ToolbarMenu,
|
|
6609
|
+
{
|
|
6610
|
+
ref: recordingPanelOpen ? captureMenuPortalRef : void 0,
|
|
6611
|
+
floating: recordingPanelOpen,
|
|
6612
|
+
floatingStyle: recordingPanelOpen ? floatingMenuStyle(captureMenuPortalPlacement) : void 0,
|
|
6613
|
+
side: menuSide,
|
|
6614
|
+
align: "right",
|
|
6615
|
+
onKeyDown: (event) => {
|
|
6616
|
+
if (event.key !== "Escape") return;
|
|
6617
|
+
event.preventDefault();
|
|
6618
|
+
event.stopPropagation();
|
|
6619
|
+
setOpenMenu(null);
|
|
6620
|
+
},
|
|
6621
|
+
children: [
|
|
6622
|
+
/* @__PURE__ */ jsxs30(
|
|
6623
|
+
ToolbarMenuItem,
|
|
6624
|
+
{
|
|
6625
|
+
onClick: () => {
|
|
6626
|
+
setOpenMenu(null);
|
|
6627
|
+
screenshotMode();
|
|
6628
|
+
},
|
|
6629
|
+
children: [
|
|
6630
|
+
/* @__PURE__ */ jsx42(CameraIcon, { size: 12 }),
|
|
6631
|
+
/* @__PURE__ */ jsx42("span", { className: "msr:flex-1", children: "Screenshot" }),
|
|
6632
|
+
/* @__PURE__ */ jsx42("span", { children: "C" })
|
|
6633
|
+
]
|
|
6634
|
+
}
|
|
6635
|
+
),
|
|
6636
|
+
/* @__PURE__ */ jsxs30(
|
|
6637
|
+
ToolbarMenuItem,
|
|
6638
|
+
{
|
|
6639
|
+
onClick: () => {
|
|
6640
|
+
setOpenMenu(null);
|
|
6641
|
+
if (recording) onScreenRecordingStop();
|
|
6642
|
+
else recordMode();
|
|
6643
|
+
},
|
|
6644
|
+
children: [
|
|
6645
|
+
/* @__PURE__ */ jsx42(RecordIcon, { size: 12 }),
|
|
6646
|
+
/* @__PURE__ */ jsx42("span", { className: "msr:flex-1", children: recording ? "Stop recording" : "Screen record" }),
|
|
6647
|
+
/* @__PURE__ */ jsx42("span", { children: "V" })
|
|
6648
|
+
]
|
|
6649
|
+
}
|
|
6650
|
+
)
|
|
6651
|
+
]
|
|
6652
|
+
}
|
|
6653
|
+
);
|
|
6654
|
+
return recordingPanelOpen ? createPortal4(menu, commentPanelPortalTarget) : menu;
|
|
6655
|
+
})() : null
|
|
6552
6656
|
] }),
|
|
6553
6657
|
/* @__PURE__ */ jsxs30("div", { ref: commentMenuRef, className: "msr:relative msr:flex msr:flex-none", "data-mesurer-comment-ui": true, children: [
|
|
6554
6658
|
/* @__PURE__ */ jsx42(
|
|
@@ -6604,9 +6708,38 @@ function ToolbarComponent({
|
|
|
6604
6708
|
if (toolMode !== "comments") preserveToolGroupRef.current = true;
|
|
6605
6709
|
onSelectComment(id);
|
|
6606
6710
|
},
|
|
6607
|
-
fixed: true
|
|
6711
|
+
fixed: true,
|
|
6712
|
+
fixedZIndex: recordingPanelOpen ? 120 : 100
|
|
6608
6713
|
}
|
|
6609
|
-
), commentPanelPortalTarget) :
|
|
6714
|
+
), commentPanelPortalTarget) : recordingPanelOpen ? createPortal4(
|
|
6715
|
+
/* @__PURE__ */ jsx42(
|
|
6716
|
+
MenuSurface,
|
|
6717
|
+
{
|
|
6718
|
+
ref: commentDropdownPortalRef,
|
|
6719
|
+
className: "msr:pointer-events-auto msr:fixed msr:flex msr:w-44 msr:flex-col msr:gap-px",
|
|
6720
|
+
style: floatingMenuStyle(commentDropdownPlacement),
|
|
6721
|
+
"data-mesurer-comment-ui": true,
|
|
6722
|
+
children: /* @__PURE__ */ jsxs30(Fragment9, { children: [
|
|
6723
|
+
/* @__PURE__ */ jsx42(MenuItem, { disabled: commentCount === 0, onClick: openCommentsPanel, children: /* @__PURE__ */ jsx42("span", { className: "msr:flex-1", children: "Show all comments" }) }),
|
|
6724
|
+
/* @__PURE__ */ jsxs30(
|
|
6725
|
+
MenuItem,
|
|
6726
|
+
{
|
|
6727
|
+
disabled: commentCount === 0,
|
|
6728
|
+
onClick: () => {
|
|
6729
|
+
void onCopyComments();
|
|
6730
|
+
setOpenMenu(null);
|
|
6731
|
+
},
|
|
6732
|
+
children: [
|
|
6733
|
+
/* @__PURE__ */ jsx42("span", { className: "msr:flex-1", children: "Copy comments" }),
|
|
6734
|
+
commentsCopied ? /* @__PURE__ */ jsx42(CheckIcon, { size: 12 }) : /* @__PURE__ */ jsx42("span", { children: copyCommentsShortcut })
|
|
6735
|
+
]
|
|
6736
|
+
}
|
|
6737
|
+
)
|
|
6738
|
+
] })
|
|
6739
|
+
}
|
|
6740
|
+
),
|
|
6741
|
+
commentPanelPortalTarget
|
|
6742
|
+
) : /* @__PURE__ */ jsx42(
|
|
6610
6743
|
MenuSurface,
|
|
6611
6744
|
{
|
|
6612
6745
|
className: cn(
|
|
@@ -6652,29 +6785,31 @@ function ToolbarComponent({
|
|
|
6652
6785
|
children: /* @__PURE__ */ jsx42(SettingsIcon, { size: 20, "aria-hidden": "true" })
|
|
6653
6786
|
}
|
|
6654
6787
|
),
|
|
6655
|
-
settingsOpen ?
|
|
6656
|
-
|
|
6657
|
-
|
|
6658
|
-
|
|
6659
|
-
|
|
6660
|
-
"mesurer-menu-surface msr:
|
|
6661
|
-
|
|
6662
|
-
|
|
6663
|
-
|
|
6664
|
-
|
|
6665
|
-
|
|
6666
|
-
|
|
6667
|
-
|
|
6668
|
-
|
|
6669
|
-
|
|
6670
|
-
|
|
6671
|
-
|
|
6672
|
-
|
|
6673
|
-
|
|
6674
|
-
|
|
6675
|
-
|
|
6676
|
-
|
|
6677
|
-
|
|
6788
|
+
settingsOpen ? createPortal4(
|
|
6789
|
+
/* @__PURE__ */ jsx42(
|
|
6790
|
+
"div",
|
|
6791
|
+
{
|
|
6792
|
+
ref: settingsMenuRef,
|
|
6793
|
+
className: "mesurer-menu-surface msr:pointer-events-auto msr:fixed msr:z-[120] msr:flex msr:w-auto msr:max-w-[calc(100vw-16px)] msr:flex-col msr:overflow-hidden msr:rounded-lg msr:bg-white msr:p-0 msr:shadow-floating",
|
|
6794
|
+
style: {
|
|
6795
|
+
top: settingsPlacement.top,
|
|
6796
|
+
bottom: settingsPlacement.bottom,
|
|
6797
|
+
right: settingsPlacement.right,
|
|
6798
|
+
height: settingsPlacement.height,
|
|
6799
|
+
maxHeight: settingsPlacement.height
|
|
6800
|
+
},
|
|
6801
|
+
"data-mesurer-inspector-ui": "true",
|
|
6802
|
+
"data-mesurer-settings-panel": true,
|
|
6803
|
+
role: "dialog",
|
|
6804
|
+
"aria-label": "Settings",
|
|
6805
|
+
onPointerDown: (event) => event.stopPropagation(),
|
|
6806
|
+
onPointerMove: (event) => event.stopPropagation(),
|
|
6807
|
+
onPointerUp: (event) => event.stopPropagation(),
|
|
6808
|
+
onClick: (event) => event.stopPropagation(),
|
|
6809
|
+
children: settingsPanel
|
|
6810
|
+
}
|
|
6811
|
+
),
|
|
6812
|
+
commentPanelPortalTarget
|
|
6678
6813
|
) : null
|
|
6679
6814
|
] }) : null
|
|
6680
6815
|
] })
|
|
@@ -6788,11 +6923,11 @@ var getDirectTextRangeAtPoint = (control, point, ownerDocument) => {
|
|
|
6788
6923
|
const container = range.startContainer;
|
|
6789
6924
|
if (container.nodeType !== Node.TEXT_NODE) return null;
|
|
6790
6925
|
if (!control.contains(container)) return null;
|
|
6791
|
-
const
|
|
6792
|
-
const trimmed =
|
|
6926
|
+
const text2 = container.nodeValue ?? "";
|
|
6927
|
+
const trimmed = text2.trim();
|
|
6793
6928
|
if (!trimmed) return null;
|
|
6794
6929
|
const textRange = ownerDocument.createRange();
|
|
6795
|
-
const start =
|
|
6930
|
+
const start = text2.indexOf(trimmed);
|
|
6796
6931
|
if (start < 0) return null;
|
|
6797
6932
|
textRange.setStart(container, start);
|
|
6798
6933
|
textRange.setEnd(container, start + trimmed.length);
|
|
@@ -7418,24 +7553,24 @@ var lineOrientation = (rect) => {
|
|
|
7418
7553
|
if (rect.height < 1 && rect.width >= 1) return "horizontal";
|
|
7419
7554
|
return null;
|
|
7420
7555
|
};
|
|
7421
|
-
var measureLineToBox = (line,
|
|
7422
|
-
const boxRight =
|
|
7423
|
-
const boxBottom =
|
|
7556
|
+
var measureLineToBox = (line, box2, orientation) => {
|
|
7557
|
+
const boxRight = box2.left + box2.width;
|
|
7558
|
+
const boxBottom = box2.top + box2.height;
|
|
7424
7559
|
let horizontal = null;
|
|
7425
7560
|
let vertical = null;
|
|
7426
7561
|
const extraHorizontals = [];
|
|
7427
7562
|
const extraVerticals = [];
|
|
7428
7563
|
if (orientation === "vertical") {
|
|
7429
7564
|
const x = line.left;
|
|
7430
|
-
const y =
|
|
7431
|
-
if (x <=
|
|
7432
|
-
horizontal = { x1: x, x2:
|
|
7565
|
+
const y = box2.top + box2.height / 2;
|
|
7566
|
+
if (x <= box2.left) {
|
|
7567
|
+
horizontal = { x1: x, x2: box2.left, y, value: box2.left - x };
|
|
7433
7568
|
} else if (x >= boxRight) {
|
|
7434
7569
|
horizontal = { x1: boxRight, x2: x, y, value: x - boxRight };
|
|
7435
7570
|
} else {
|
|
7436
|
-
const toLeft = x -
|
|
7571
|
+
const toLeft = x - box2.left;
|
|
7437
7572
|
const toRight = boxRight - x;
|
|
7438
|
-
if (toLeft > 0.5) horizontal = { x1:
|
|
7573
|
+
if (toLeft > 0.5) horizontal = { x1: box2.left, x2: x, y, value: toLeft };
|
|
7439
7574
|
if (toRight > 0.5) {
|
|
7440
7575
|
const right = { x1: x, x2: boxRight, y, value: toRight };
|
|
7441
7576
|
if (horizontal) extraHorizontals.push(right);
|
|
@@ -7444,15 +7579,15 @@ var measureLineToBox = (line, box, orientation) => {
|
|
|
7444
7579
|
}
|
|
7445
7580
|
} else {
|
|
7446
7581
|
const y = line.top;
|
|
7447
|
-
const x =
|
|
7448
|
-
if (y <=
|
|
7449
|
-
vertical = { y1: y, y2:
|
|
7582
|
+
const x = box2.left + box2.width / 2;
|
|
7583
|
+
if (y <= box2.top) {
|
|
7584
|
+
vertical = { y1: y, y2: box2.top, x, value: box2.top - y };
|
|
7450
7585
|
} else if (y >= boxBottom) {
|
|
7451
7586
|
vertical = { y1: boxBottom, y2: y, x, value: y - boxBottom };
|
|
7452
7587
|
} else {
|
|
7453
|
-
const toTop = y -
|
|
7588
|
+
const toTop = y - box2.top;
|
|
7454
7589
|
const toBottom = boxBottom - y;
|
|
7455
|
-
if (toTop > 0.5) vertical = { y1:
|
|
7590
|
+
if (toTop > 0.5) vertical = { y1: box2.top, y2: y, x, value: toTop };
|
|
7456
7591
|
if (toBottom > 0.5) {
|
|
7457
7592
|
const bottom = { y1: y, y2: boxBottom, x, value: toBottom };
|
|
7458
7593
|
if (vertical) extraVerticals.push(bottom);
|
|
@@ -7484,9 +7619,9 @@ var getDistanceOverlay = (rectA, rectB, elementRefA, elementRefB, ownerWindow =
|
|
|
7484
7619
|
if (Boolean(lineA) !== Boolean(lineB)) {
|
|
7485
7620
|
const orientation = lineA ?? lineB;
|
|
7486
7621
|
const line = lineA ? rectA : rectB;
|
|
7487
|
-
const
|
|
7622
|
+
const box2 = lineA ? rectB : rectA;
|
|
7488
7623
|
if (orientation) {
|
|
7489
|
-
const measured = measureLineToBox(line,
|
|
7624
|
+
const measured = measureLineToBox(line, box2, orientation);
|
|
7490
7625
|
horizontal = measured.horizontal;
|
|
7491
7626
|
vertical = measured.vertical;
|
|
7492
7627
|
extraHorizontals = measured.extraHorizontals.length > 0 ? measured.extraHorizontals : void 0;
|
|
@@ -8976,9 +9111,9 @@ var transformedArrowBounds = (arrow) => {
|
|
|
8976
9111
|
return rotatedBounds(arrowBounds(arrow), arrow.rotation ?? 0);
|
|
8977
9112
|
};
|
|
8978
9113
|
var resizeArrow = (arrow, handle, pointer) => {
|
|
8979
|
-
const
|
|
9114
|
+
const box2 = arrowBounds(arrow);
|
|
8980
9115
|
const rotation = arrow.rotation ?? 0;
|
|
8981
|
-
const geometry = resizeGeometry(
|
|
9116
|
+
const geometry = resizeGeometry(box2, rotation, handle, pointer);
|
|
8982
9117
|
const points = [arrow.start, arrow.control ?? { x: (arrow.start.x + arrow.end.x) / 2, y: (arrow.start.y + arrow.end.y) / 2 }, arrow.end];
|
|
8983
9118
|
const nextPoints = points.map((point) => resizePoint(point, geometry));
|
|
8984
9119
|
return { ...arrow, start: nextPoints[0], control: nextPoints[1], end: nextPoints[2] };
|
|
@@ -9772,10 +9907,10 @@ function TextItem({
|
|
|
9772
9907
|
}
|
|
9773
9908
|
}, [editing, item.text]);
|
|
9774
9909
|
const measureBox = () => {
|
|
9775
|
-
const
|
|
9910
|
+
const box2 = boxRef.current;
|
|
9776
9911
|
return {
|
|
9777
|
-
width:
|
|
9778
|
-
height:
|
|
9912
|
+
width: box2?.offsetWidth ?? 32,
|
|
9913
|
+
height: box2?.offsetHeight ?? 24
|
|
9779
9914
|
};
|
|
9780
9915
|
};
|
|
9781
9916
|
const pointerPage = (event) => ({
|
|
@@ -9964,9 +10099,9 @@ var movePenStroke = (stroke, dx, dy) => ({
|
|
|
9964
10099
|
points: stroke.points.map((point) => ({ x: point.x + dx, y: point.y + dy }))
|
|
9965
10100
|
});
|
|
9966
10101
|
var resizePenStroke = (stroke, handle, pointer) => {
|
|
9967
|
-
const
|
|
10102
|
+
const box2 = penBounds(stroke);
|
|
9968
10103
|
const rotation = stroke.rotation ?? 0;
|
|
9969
|
-
const geometry = resizeGeometry(
|
|
10104
|
+
const geometry = resizeGeometry(box2, rotation, handle, pointer);
|
|
9970
10105
|
return {
|
|
9971
10106
|
...stroke,
|
|
9972
10107
|
points: stroke.points.map((point) => {
|
|
@@ -9976,8 +10111,8 @@ var resizePenStroke = (stroke, handle, pointer) => {
|
|
|
9976
10111
|
};
|
|
9977
10112
|
};
|
|
9978
10113
|
var rotatePenStroke = (stroke, pointer, offset) => {
|
|
9979
|
-
const
|
|
9980
|
-
const center = boxCenter(
|
|
10114
|
+
const box2 = penBounds(stroke);
|
|
10115
|
+
const center = boxCenter(box2.x, box2.y, box2.width, box2.height);
|
|
9981
10116
|
const nextRotation = rotationFromPointer(center, pointer) - offset;
|
|
9982
10117
|
return {
|
|
9983
10118
|
...stroke,
|
|
@@ -9985,8 +10120,8 @@ var rotatePenStroke = (stroke, pointer, offset) => {
|
|
|
9985
10120
|
};
|
|
9986
10121
|
};
|
|
9987
10122
|
var rotatePenStrokeAround = (stroke, center, degrees) => {
|
|
9988
|
-
const
|
|
9989
|
-
const strokeCenter = boxCenter(
|
|
10123
|
+
const box2 = penBounds(stroke);
|
|
10124
|
+
const strokeCenter = boxCenter(box2.x, box2.y, box2.width, box2.height);
|
|
9990
10125
|
const rotation = stroke.rotation ?? 0;
|
|
9991
10126
|
const nextCenter = rotatePoint(strokeCenter, center, degrees);
|
|
9992
10127
|
const nextRotation = rotation + degrees;
|
|
@@ -10122,8 +10257,8 @@ var PenLayer = memo8(function PenLayer2({
|
|
|
10122
10257
|
const startRotate = (stroke, event) => {
|
|
10123
10258
|
event.preventDefault();
|
|
10124
10259
|
event.stopPropagation();
|
|
10125
|
-
const
|
|
10126
|
-
const center = boxCenter(
|
|
10260
|
+
const box2 = penBounds(stroke);
|
|
10261
|
+
const center = boxCenter(box2.x, box2.y, box2.width, box2.height);
|
|
10127
10262
|
onChangeStart();
|
|
10128
10263
|
dragRef.current = { id: stroke.id, type: "rotate", start: pointerPage(event), stroke, offset: rotationFromPointer(center, pointerPage(event)) - (stroke.rotation ?? 0) };
|
|
10129
10264
|
trackDrag(event);
|
|
@@ -10148,9 +10283,9 @@ var PenLayer = memo8(function PenLayer2({
|
|
|
10148
10283
|
preview.length > 0 ? /* @__PURE__ */ jsx57("path", { d: pathForPoints(translate(preview)), fill: "none", stroke: "#0d99ff", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", opacity: 0.65, "data-mesurer-pen-preview": "true" }) : null
|
|
10149
10284
|
] }),
|
|
10150
10285
|
selectionMode ? selectedStrokes.map((stroke) => {
|
|
10151
|
-
const
|
|
10286
|
+
const box2 = penBounds(stroke);
|
|
10152
10287
|
const showControls = selectionCount === 1;
|
|
10153
|
-
return /* @__PURE__ */ jsx57("div", { className: `msr:absolute ${showControls ? "msr:pointer-events-auto msr:cursor-move" : "msr:pointer-events-none"}`, style: { left:
|
|
10288
|
+
return /* @__PURE__ */ jsx57("div", { className: `msr:absolute ${showControls ? "msr:pointer-events-auto msr:cursor-move" : "msr:pointer-events-none"}`, style: { left: box2.x - scrollOffset.x + (selectedIds.includes(stroke.id) ? moveOffset.x : 0), top: box2.y - scrollOffset.y + (selectedIds.includes(stroke.id) ? moveOffset.y : 0), width: box2.width, height: box2.height, transform: `rotate(${stroke.rotation ?? 0}deg)`, transformOrigin: "center center" }, onPointerDown: showControls ? (event) => startMove(stroke, event) : void 0, children: /* @__PURE__ */ jsx57(TextTransformFrame, { frameDataAttribute: "data-mesurer-pen-frame", handleDataAttribute: "data-mesurer-pen-handle", rotation: stroke.rotation ?? 0, showControls, showOutline: true, onResizeStart: (handle, event) => startResize2(stroke, handle, event), onRotateStart: (event) => startRotate(stroke, event) }) }, stroke.id);
|
|
10154
10289
|
}) : null
|
|
10155
10290
|
] });
|
|
10156
10291
|
});
|
|
@@ -10493,8 +10628,8 @@ function CommentComposer({
|
|
|
10493
10628
|
// comments/export.ts
|
|
10494
10629
|
var formatTarget = (comment) => {
|
|
10495
10630
|
const { target } = comment;
|
|
10496
|
-
const
|
|
10497
|
-
return `[<${target.tagName}>${
|
|
10631
|
+
const text2 = target.textSnippet ? `${target.textSnippet}` : "";
|
|
10632
|
+
return `[<${target.tagName}>${text2}</${target.tagName}> selector: \`${target.selector}\`]`;
|
|
10498
10633
|
};
|
|
10499
10634
|
var formatCommentsForAgent = (comments, url = "", viewport) => {
|
|
10500
10635
|
return [
|
|
@@ -11824,11 +11959,11 @@ function CommentsLayer({
|
|
|
11824
11959
|
setMessageDeleteConfirmationId(null);
|
|
11825
11960
|
},
|
|
11826
11961
|
onCancelDeleteMessage: () => setMessageDeleteConfirmationId(null),
|
|
11827
|
-
onSaveEdit: (messageId,
|
|
11962
|
+
onSaveEdit: (messageId, text2) => onEditMessage(selected.id, messageId, text2),
|
|
11828
11963
|
replyText,
|
|
11829
11964
|
onReplyTextChange: setReplyText,
|
|
11830
|
-
onAddMessage: (
|
|
11831
|
-
onAddMessage(selected.id,
|
|
11965
|
+
onAddMessage: (text2) => {
|
|
11966
|
+
onAddMessage(selected.id, text2);
|
|
11832
11967
|
setReplyText("");
|
|
11833
11968
|
},
|
|
11834
11969
|
onToggleResolved,
|
|
@@ -11917,7 +12052,7 @@ var MesurerOverlay = memo9(function MesurerOverlay2({
|
|
|
11917
12052
|
distances,
|
|
11918
12053
|
guides,
|
|
11919
12054
|
arrows,
|
|
11920
|
-
text,
|
|
12055
|
+
text: text2,
|
|
11921
12056
|
pen,
|
|
11922
12057
|
comments
|
|
11923
12058
|
}) {
|
|
@@ -11997,7 +12132,7 @@ var MesurerOverlay = memo9(function MesurerOverlay2({
|
|
|
11997
12132
|
}
|
|
11998
12133
|
),
|
|
11999
12134
|
toolMode === "selection" && marqueeRect ? /* @__PURE__ */ jsx65(MarqueeRect, { rect: marqueeRect, color: outlineColor }) : null,
|
|
12000
|
-
/* @__PURE__ */ jsx65(TextLayer, { ...
|
|
12135
|
+
/* @__PURE__ */ jsx65(TextLayer, { ...text2, selectionCount }),
|
|
12001
12136
|
/* @__PURE__ */ jsx65(PenLayer, { ...pen, selectionCount }),
|
|
12002
12137
|
/* @__PURE__ */ jsx65(
|
|
12003
12138
|
ArrowsLayer,
|
|
@@ -12737,7 +12872,7 @@ var useHotkeys = (options) => {
|
|
|
12737
12872
|
}
|
|
12738
12873
|
};
|
|
12739
12874
|
const handleKeyboardBridge = (event) => {
|
|
12740
|
-
if (event.source !== target || event.origin !== target.location.origin
|
|
12875
|
+
if (event.source !== target && event.source !== null || event.origin !== target.location.origin && event.origin !== "null") return;
|
|
12741
12876
|
const data = event.data;
|
|
12742
12877
|
if (!isMesurerKeyboardBridge(data)) return;
|
|
12743
12878
|
const signature = keyboardEventSignature(data.eventType, data);
|
|
@@ -12791,7 +12926,7 @@ var useOverlayKeyboard = ({
|
|
|
12791
12926
|
}) => {
|
|
12792
12927
|
useLayoutEffect15(() => {
|
|
12793
12928
|
installKeyboardGate(eventTarget);
|
|
12794
|
-
const claimedRef = { current:
|
|
12929
|
+
const claimedRef = { current: overlayActive };
|
|
12795
12930
|
const owned = overlayActive && (claimedRef.current || isInsideMesurer(getDeepActiveElement(eventTarget)));
|
|
12796
12931
|
setMesurerKeyboardOwned(eventTarget.document, owned);
|
|
12797
12932
|
const onFocusIn = () => {
|
|
@@ -12802,7 +12937,7 @@ var useOverlayKeyboard = ({
|
|
|
12802
12937
|
setMesurerKeyboardOwned(eventTarget.document, true);
|
|
12803
12938
|
return;
|
|
12804
12939
|
}
|
|
12805
|
-
if (active instanceof Element && !isInsideMesurer(active)) {
|
|
12940
|
+
if (active instanceof Element && !isInsideMesurer(active) && isEditableElement(active)) {
|
|
12806
12941
|
claimedRef.current = false;
|
|
12807
12942
|
setMesurerKeyboardOwned(eventTarget.document, false);
|
|
12808
12943
|
return;
|
|
@@ -12936,7 +13071,7 @@ var useInteractionLifecycle = (options) => {
|
|
|
12936
13071
|
options.setRulersVisible(false);
|
|
12937
13072
|
options.setToolMode("none");
|
|
12938
13073
|
}, [clearTransientState, options]);
|
|
12939
|
-
const keyboardOwned = options.enabled && !options.minimized
|
|
13074
|
+
const keyboardOwned = options.enabled && !options.minimized;
|
|
12940
13075
|
const overlayActive = options.enabled && (options.toolMode !== "none" || options.toolbarActive);
|
|
12941
13076
|
useOverlayKeyboard({
|
|
12942
13077
|
eventTarget: options.ownerWindow,
|
|
@@ -13264,7 +13399,7 @@ var normalizeStoredSettings = (value) => {
|
|
|
13264
13399
|
...typeof input.multiMeasureEnabled === "boolean" ? { multiMeasureEnabled: input.multiMeasureEnabled } : {},
|
|
13265
13400
|
...input.infoCardMode === "hover" || input.infoCardMode === "click" ? { infoCardMode: input.infoCardMode } : input.copySelectorOnInspect === true ? { infoCardMode: "click" } : {},
|
|
13266
13401
|
...typeof input.persistOnReload === "boolean" ? { persistOnReload: input.persistOnReload } : {},
|
|
13267
|
-
|
|
13402
|
+
shortcutsEnabled: typeof input.shortcutsEnabled === "boolean" ? input.shortcutsEnabled : true,
|
|
13268
13403
|
...input.theme === "system" || input.theme === "light" || input.theme === "dark" ? { theme: input.theme } : {},
|
|
13269
13404
|
...normalizeGuideStyle(input.guideStyle) ? { guideStyle: normalizeGuideStyle(input.guideStyle) } : {},
|
|
13270
13405
|
...normalizeRulerSettings(input.rulerSettings) ? { rulerSettings: normalizeRulerSettings(input.rulerSettings) } : {},
|
|
@@ -14162,7 +14297,7 @@ var useWorkspaceLifecycle = ({
|
|
|
14162
14297
|
|
|
14163
14298
|
// hooks/use-overlay-pointer-handlers.ts
|
|
14164
14299
|
var useOverlayPointerHandlers = (options) => {
|
|
14165
|
-
const { toolMode, arrows, pen, text, comments, measure } = options;
|
|
14300
|
+
const { toolMode, arrows, pen, text: text2, comments, measure } = options;
|
|
14166
14301
|
if (toolMode === "arrows") {
|
|
14167
14302
|
return {
|
|
14168
14303
|
onPointerDown: arrows.handlePointerDown,
|
|
@@ -14183,7 +14318,7 @@ var useOverlayPointerHandlers = (options) => {
|
|
|
14183
14318
|
}
|
|
14184
14319
|
if (toolMode === "text") {
|
|
14185
14320
|
return {
|
|
14186
|
-
onPointerDown:
|
|
14321
|
+
onPointerDown: text2.handlePointerDown,
|
|
14187
14322
|
onPointerMove: measure.handlePointerMove,
|
|
14188
14323
|
onPointerUp: measure.handlePointerUp,
|
|
14189
14324
|
onPointerLeave: measure.handlePointerLeave,
|
|
@@ -14813,7 +14948,7 @@ var useMesurerHistory = ({
|
|
|
14813
14948
|
measurements,
|
|
14814
14949
|
guides,
|
|
14815
14950
|
arrows,
|
|
14816
|
-
text,
|
|
14951
|
+
text: text2,
|
|
14817
14952
|
pen,
|
|
14818
14953
|
comments,
|
|
14819
14954
|
layoutGuides,
|
|
@@ -14858,7 +14993,7 @@ var useMesurerHistory = ({
|
|
|
14858
14993
|
clearSelectionRect
|
|
14859
14994
|
} = transient;
|
|
14860
14995
|
const { arrows: arrowEntries, setArrows, selectedArrowIds, setSelectedArrowIds } = arrows;
|
|
14861
|
-
const { textAnnotations, setTextAnnotations } =
|
|
14996
|
+
const { textAnnotations, setTextAnnotations } = text2;
|
|
14862
14997
|
const { penStrokes, setPenStrokes, selectedPenStrokeIds, setSelectedPenStrokeIds } = pen;
|
|
14863
14998
|
const { comments: commentEntries, setComments } = comments;
|
|
14864
14999
|
const { layoutGuides: layoutGuideEntries, setLayoutGuides } = layoutGuides;
|
|
@@ -15561,8 +15696,8 @@ var useCommentState = (initialComments = [], onChange) => {
|
|
|
15561
15696
|
setDraft(nextDraft);
|
|
15562
15697
|
};
|
|
15563
15698
|
const cancelDraft = () => setDraft(null);
|
|
15564
|
-
const addMessage = (id,
|
|
15565
|
-
const value =
|
|
15699
|
+
const addMessage = (id, text2) => {
|
|
15700
|
+
const value = text2.trim();
|
|
15566
15701
|
if (!value) return false;
|
|
15567
15702
|
const message = {
|
|
15568
15703
|
id: createCommentId(),
|
|
@@ -15577,9 +15712,9 @@ var useCommentState = (initialComments = [], onChange) => {
|
|
|
15577
15712
|
);
|
|
15578
15713
|
return true;
|
|
15579
15714
|
};
|
|
15580
|
-
const commitDraft = (
|
|
15715
|
+
const commitDraft = (text2) => {
|
|
15581
15716
|
if (!draft) return null;
|
|
15582
|
-
const value =
|
|
15717
|
+
const value = text2.trim();
|
|
15583
15718
|
if (!value) return null;
|
|
15584
15719
|
const now = Date.now();
|
|
15585
15720
|
const comment = {
|
|
@@ -15639,8 +15774,8 @@ var useCommentState = (initialComments = [], onChange) => {
|
|
|
15639
15774
|
)
|
|
15640
15775
|
);
|
|
15641
15776
|
};
|
|
15642
|
-
const updateMessage = (commentId, messageId,
|
|
15643
|
-
const value =
|
|
15777
|
+
const updateMessage = (commentId, messageId, text2) => {
|
|
15778
|
+
const value = text2.trim();
|
|
15644
15779
|
if (!value) return false;
|
|
15645
15780
|
updateComments(
|
|
15646
15781
|
(previous) => previous.map(
|
|
@@ -15752,7 +15887,7 @@ var useMesurerWorkspaceState = ({
|
|
|
15752
15887
|
persistedState?.penStrokes ?? initialState?.penStrokes,
|
|
15753
15888
|
persistedState?.selectedPenStrokeIds ?? initialState?.selectedPenStrokeIds
|
|
15754
15889
|
);
|
|
15755
|
-
const
|
|
15890
|
+
const text2 = useTextAnnotationState(
|
|
15756
15891
|
persistedState?.textAnnotations ?? initialState?.textAnnotations,
|
|
15757
15892
|
persistedState?.selectedTextIds ?? initialState?.selectedTextIds
|
|
15758
15893
|
);
|
|
@@ -15793,7 +15928,7 @@ var useMesurerWorkspaceState = ({
|
|
|
15793
15928
|
...guides,
|
|
15794
15929
|
...arrows,
|
|
15795
15930
|
...pen,
|
|
15796
|
-
...
|
|
15931
|
+
...text2,
|
|
15797
15932
|
...comments,
|
|
15798
15933
|
toolbarActive,
|
|
15799
15934
|
setToolbarActive,
|
|
@@ -17873,262 +18008,131 @@ async function cropTrackToElement(track, element) {
|
|
|
17873
18008
|
return true;
|
|
17874
18009
|
}
|
|
17875
18010
|
|
|
17876
|
-
// core/
|
|
17877
|
-
var
|
|
17878
|
-
var
|
|
17879
|
-
var
|
|
17880
|
-
var
|
|
17881
|
-
|
|
17882
|
-
|
|
17883
|
-
|
|
17884
|
-
|
|
17885
|
-
|
|
17886
|
-
if (first === void 0 || first === 0) return null;
|
|
17887
|
-
let length = 1;
|
|
17888
|
-
let mask = 128;
|
|
17889
|
-
while (length <= 4 && (first & mask) === 0) {
|
|
17890
|
-
mask >>= 1;
|
|
17891
|
-
length += 1;
|
|
17892
|
-
}
|
|
17893
|
-
if (offset + length > bytes.length) return null;
|
|
17894
|
-
let id = 0;
|
|
17895
|
-
for (let index = 0; index < length; index += 1) id = id * 256 + bytes[offset + index];
|
|
17896
|
-
return { length, id };
|
|
17897
|
-
};
|
|
17898
|
-
var readElementSize = (bytes, offset) => {
|
|
17899
|
-
const first = bytes[offset];
|
|
17900
|
-
if (first === void 0 || first === 0) return null;
|
|
17901
|
-
let length = 1;
|
|
17902
|
-
let mask = 128;
|
|
17903
|
-
while (length <= 8 && (first & mask) === 0) {
|
|
17904
|
-
mask >>= 1;
|
|
17905
|
-
length += 1;
|
|
18011
|
+
// core/mp4-boxes.ts
|
|
18012
|
+
var u16 = (value) => new Uint8Array([value >> 8 & 255, value & 255]);
|
|
18013
|
+
var u32 = (value) => new Uint8Array([value >>> 24 & 255, value >>> 16 & 255, value >>> 8 & 255, value & 255]);
|
|
18014
|
+
var text = (value) => new TextEncoder().encode(value);
|
|
18015
|
+
var join = (...parts) => {
|
|
18016
|
+
const output = new Uint8Array(parts.reduce((sum, part) => sum + part.length, 0));
|
|
18017
|
+
let offset = 0;
|
|
18018
|
+
for (const part of parts) {
|
|
18019
|
+
output.set(part, offset);
|
|
18020
|
+
offset += part.length;
|
|
17906
18021
|
}
|
|
17907
|
-
|
|
17908
|
-
|
|
17909
|
-
|
|
17910
|
-
|
|
17911
|
-
|
|
17912
|
-
|
|
17913
|
-
|
|
17914
|
-
|
|
18022
|
+
return output;
|
|
18023
|
+
};
|
|
18024
|
+
var box = (type, ...payload) => join(u32(8 + payload.reduce((sum, part) => sum + part.length, 0)), text(type), ...payload);
|
|
18025
|
+
var fullBox = (type, version, flags, ...payload) => box(type, new Uint8Array([version, flags >> 16 & 255, flags >> 8 & 255, flags & 255]), ...payload);
|
|
18026
|
+
var zeros = (length) => new Uint8Array(length);
|
|
18027
|
+
function muxH264Mp4(width, height, samples, avcConfig, timescale = 9e4) {
|
|
18028
|
+
const durations = samples.map((sample, index) => index + 1 < samples.length ? Math.max(1, Math.round((samples[index + 1].timestamp - sample.timestamp) * timescale / 1e6)) : Math.max(1, Math.round(timescale / 30)));
|
|
18029
|
+
const duration = durations.reduce((sum, value) => sum + value, 0);
|
|
18030
|
+
const mdatPayload = join(...samples.map((sample) => sample.data));
|
|
18031
|
+
const ftyp = box("ftyp", text("isom"), u32(512), text("isomiso2avc1mp41"));
|
|
18032
|
+
const mvhd = fullBox("mvhd", 0, 0, zeros(8), u32(timescale), u32(duration), u32(65536), u16(256), zeros(10), u32(65536), zeros(12), u32(65536), zeros(12), u32(2));
|
|
18033
|
+
const tkhd = fullBox("tkhd", 0, 7, zeros(8), u32(1), zeros(4), u32(duration), zeros(8), u16(0), u16(0), u16(0), u16(0), u32(65536), zeros(12), u32(65536), zeros(12), u32(width << 16), u32(height << 16));
|
|
18034
|
+
const mdhd = fullBox("mdhd", 0, 0, zeros(8), u32(timescale), u32(duration), u16(21956), u16(0));
|
|
18035
|
+
const hdlr = fullBox("hdlr", 0, 0, zeros(4), text("vide"), zeros(12), text("Mesurer Video\0"));
|
|
18036
|
+
const vmhd = fullBox("vmhd", 0, 1, zeros(8));
|
|
18037
|
+
const dref = fullBox("dref", 0, 0, u32(1), fullBox("url ", 0, 1));
|
|
18038
|
+
const avc1 = box("avc1", zeros(6), u16(1), zeros(16), u16(width), u16(height), u32(4718592), u32(4718592), zeros(4), u16(1), zeros(32), u16(24), u16(65535), box("avcC", avcConfig));
|
|
18039
|
+
const stsd = fullBox("stsd", 0, 0, u32(1), avc1);
|
|
18040
|
+
const runs = [];
|
|
18041
|
+
for (const delta of durations) {
|
|
18042
|
+
const last = runs[runs.length - 1];
|
|
18043
|
+
if (last?.delta === delta) last.count += 1;
|
|
18044
|
+
else runs.push({ count: 1, delta });
|
|
17915
18045
|
}
|
|
17916
|
-
|
|
17917
|
-
|
|
17918
|
-
|
|
17919
|
-
|
|
17920
|
-
|
|
17921
|
-
|
|
17922
|
-
|
|
17923
|
-
|
|
17924
|
-
|
|
17925
|
-
|
|
17926
|
-
|
|
17927
|
-
|
|
17928
|
-
|
|
17929
|
-
let cursor = start;
|
|
17930
|
-
while (cursor + 2 < end && durationOffset < 0) {
|
|
17931
|
-
const id = readElementId(bytes, cursor);
|
|
17932
|
-
if (!id) return;
|
|
17933
|
-
cursor += id.length;
|
|
17934
|
-
const size = readElementSize(bytes, cursor);
|
|
17935
|
-
if (!size) return;
|
|
17936
|
-
cursor += size.length;
|
|
17937
|
-
const dataStart = cursor;
|
|
17938
|
-
if (id.id === CLUSTER_ID) return;
|
|
17939
|
-
if (id.id === TIMECODE_SCALE_ID && !size.unknown && size.value > 0 && size.value <= 8) {
|
|
17940
|
-
timecodeScale = readUint(bytes, dataStart, size.value);
|
|
17941
|
-
}
|
|
17942
|
-
if (id.id === DURATION_ID && inInfo && !size.unknown && (size.value === 4 || size.value === 8)) {
|
|
17943
|
-
durationOffset = dataStart;
|
|
17944
|
-
durationSize = size.value;
|
|
17945
|
-
return;
|
|
17946
|
-
}
|
|
17947
|
-
const dataEnd = size.unknown ? end : dataStart + size.value;
|
|
17948
|
-
if (size.unknown || MASTER_IDS.has(id.id)) {
|
|
17949
|
-
walk(dataStart, dataEnd, inInfo || id.id === INFO_ID);
|
|
17950
|
-
if (durationOffset >= 0) return;
|
|
17951
|
-
}
|
|
17952
|
-
if (size.unknown) return;
|
|
17953
|
-
cursor = dataEnd;
|
|
17954
|
-
}
|
|
17955
|
-
};
|
|
17956
|
-
walk(0, bytes.length, false);
|
|
17957
|
-
if (durationOffset < 0 || timecodeScale <= 0) return false;
|
|
17958
|
-
const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
|
|
17959
|
-
const current = durationSize === 8 ? view.getFloat64(durationOffset) : view.getFloat32(durationOffset);
|
|
17960
|
-
const next = durationSeconds * (1e9 / timecodeScale);
|
|
17961
|
-
if (Number.isFinite(current) && current >= next - 1e9 / timecodeScale * 0.05) return false;
|
|
17962
|
-
if (durationSize === 8) view.setFloat64(durationOffset, next);
|
|
17963
|
-
else view.setFloat32(durationOffset, next);
|
|
17964
|
-
return true;
|
|
17965
|
-
}
|
|
17966
|
-
async function correctWebmDuration(blob, durationSeconds) {
|
|
17967
|
-
if (!(durationSeconds > 0) || !blob.type.includes("webm")) return blob;
|
|
17968
|
-
const bytes = new Uint8Array(await blob.arrayBuffer());
|
|
17969
|
-
if (!writeWebmDuration(bytes, durationSeconds)) return blob;
|
|
17970
|
-
return new Blob([bytes], { type: blob.type || "video/webm" });
|
|
18046
|
+
const stts = fullBox("stts", 0, 0, u32(runs.length), ...runs.map((run) => join(u32(run.count), u32(run.delta))));
|
|
18047
|
+
const stsc = fullBox("stsc", 0, 0, u32(1), u32(1), u32(samples.length), u32(1));
|
|
18048
|
+
const stsz = fullBox("stsz", 0, 0, u32(0), u32(samples.length), ...samples.map((sample) => u32(sample.data.length)));
|
|
18049
|
+
const stss = samples.some((sample) => !sample.key) ? fullBox("stss", 0, 0, u32(samples.filter((sample) => sample.key).length), ...samples.flatMap((sample, index) => sample.key ? [u32(index + 1)] : [])) : null;
|
|
18050
|
+
const stbl = box("stbl", stsd, stts, stsc, stsz, stss ?? new Uint8Array());
|
|
18051
|
+
const minf = box("minf", vmhd, box("dinf", dref), stbl);
|
|
18052
|
+
const trak = box("trak", tkhd, box("mdia", mdhd, hdlr, minf));
|
|
18053
|
+
const moov = box("moov", mvhd, trak);
|
|
18054
|
+
const chunkOffset = ftyp.length + moov.length + 20 + 8;
|
|
18055
|
+
const stco = fullBox("stco", 0, 0, u32(1), u32(chunkOffset));
|
|
18056
|
+
const patchedStbl = box("stbl", stsd, stts, stsc, stsz, stco, stss ?? new Uint8Array());
|
|
18057
|
+
const patchedMoov = box("moov", mvhd, box("trak", tkhd, box("mdia", mdhd, hdlr, box("minf", vmhd, box("dinf", dref), patchedStbl))));
|
|
18058
|
+
return join(ftyp, patchedMoov, box("mdat", mdatPayload));
|
|
17971
18059
|
}
|
|
17972
18060
|
|
|
17973
|
-
// core/screen-recording-
|
|
17974
|
-
|
|
17975
|
-
|
|
17976
|
-
|
|
17977
|
-
|
|
17978
|
-
|
|
17979
|
-
if (
|
|
17980
|
-
|
|
17981
|
-
|
|
17982
|
-
|
|
17983
|
-
|
|
17984
|
-
|
|
17985
|
-
}
|
|
17986
|
-
async function readBlobVideoDuration(blob, ownerDocument) {
|
|
17987
|
-
const url = URL.createObjectURL(blob);
|
|
17988
|
-
const video = ownerDocument.createElement("video");
|
|
17989
|
-
video.preload = "metadata";
|
|
17990
|
-
video.muted = true;
|
|
17991
|
-
try {
|
|
17992
|
-
return await new Promise((resolve, reject) => {
|
|
17993
|
-
video.onloadedmetadata = () => {
|
|
17994
|
-
resolve(video.duration);
|
|
17995
|
-
};
|
|
17996
|
-
video.onerror = () => reject(new Error("Could not read recording"));
|
|
17997
|
-
video.src = url;
|
|
17998
|
-
});
|
|
17999
|
-
} finally {
|
|
18000
|
-
URL.revokeObjectURL(url);
|
|
18001
|
-
video.removeAttribute("src");
|
|
18002
|
-
}
|
|
18003
|
-
}
|
|
18004
|
-
async function seekVideoElement(video, time) {
|
|
18005
|
-
const target = Math.max(0, time);
|
|
18006
|
-
if (target <= 0 && video.readyState >= 1) {
|
|
18007
|
-
video.currentTime = 0;
|
|
18008
|
-
return;
|
|
18009
|
-
}
|
|
18010
|
-
await new Promise((resolve, reject) => {
|
|
18011
|
-
const onSeeked = () => resolve();
|
|
18012
|
-
const onError = () => reject(new Error("Could not seek recording"));
|
|
18013
|
-
video.addEventListener("seeked", onSeeked, { once: true });
|
|
18014
|
-
video.addEventListener("error", onError, { once: true });
|
|
18015
|
-
if (video.readyState < 1) {
|
|
18016
|
-
video.addEventListener(
|
|
18017
|
-
"loadedmetadata",
|
|
18018
|
-
() => {
|
|
18019
|
-
video.currentTime = target;
|
|
18020
|
-
},
|
|
18021
|
-
{ once: true }
|
|
18022
|
-
);
|
|
18023
|
-
} else {
|
|
18024
|
-
video.currentTime = target;
|
|
18061
|
+
// core/screen-recording-mp4.ts
|
|
18062
|
+
var encoderCtor = (ownerWindow) => ownerWindow.VideoEncoder;
|
|
18063
|
+
var codecs = ["avc1.42001E", "avc1.42001F", "avc1.4D001F", "avc1.64001F"];
|
|
18064
|
+
var even = (value) => Math.max(2, Math.round(value) & ~1);
|
|
18065
|
+
async function supportedMp4Config(ownerWindow, width, height) {
|
|
18066
|
+
const Encoder = encoderCtor(ownerWindow);
|
|
18067
|
+
if (!Encoder) return null;
|
|
18068
|
+
const dimensions = { width: even(width), height: even(height) };
|
|
18069
|
+
for (const codec of codecs) {
|
|
18070
|
+
try {
|
|
18071
|
+
const result = await Encoder.isConfigSupported({ codec, ...dimensions, bitrate: 4e6, framerate: 30, avc: { format: "avc" } });
|
|
18072
|
+
if (result?.supported) return result.config;
|
|
18073
|
+
} catch {
|
|
18025
18074
|
}
|
|
18026
|
-
});
|
|
18027
|
-
}
|
|
18028
|
-
async function requestDisplayMediaStream(ownerWindow) {
|
|
18029
|
-
const fallback = {
|
|
18030
|
-
audio: false,
|
|
18031
|
-
video: true
|
|
18032
|
-
};
|
|
18033
|
-
const chromium = {
|
|
18034
|
-
audio: false,
|
|
18035
|
-
video: { displaySurface: "browser" },
|
|
18036
|
-
preferCurrentTab: true,
|
|
18037
|
-
selfBrowserSurface: "include"
|
|
18038
|
-
};
|
|
18039
|
-
try {
|
|
18040
|
-
return await ownerWindow.navigator.mediaDevices.getDisplayMedia(chromium);
|
|
18041
|
-
} catch (error) {
|
|
18042
|
-
if (error instanceof DOMException && error.name === "AbortError") throw error;
|
|
18043
|
-
return await ownerWindow.navigator.mediaDevices.getDisplayMedia(fallback);
|
|
18044
18075
|
}
|
|
18076
|
+
return null;
|
|
18045
18077
|
}
|
|
18046
|
-
async function
|
|
18078
|
+
async function supportsMp4Encoding(ownerWindow, width, height) {
|
|
18079
|
+
return Boolean(await supportedMp4Config(ownerWindow, width, height));
|
|
18080
|
+
}
|
|
18081
|
+
async function encodeMp4Clip(ownerDocument, ownerWindow, sourceUrl, startTime, endTime, scale) {
|
|
18047
18082
|
const source = ownerDocument.createElement("video");
|
|
18048
18083
|
source.muted = true;
|
|
18049
18084
|
source.playsInline = true;
|
|
18050
|
-
source.src = sourceUrl;
|
|
18051
18085
|
source.preload = "auto";
|
|
18052
|
-
|
|
18053
|
-
|
|
18054
|
-
|
|
18055
|
-
|
|
18056
|
-
resolve();
|
|
18057
|
-
|
|
18058
|
-
|
|
18059
|
-
|
|
18060
|
-
|
|
18061
|
-
source.onerror = () => reject(new Error("Could not trim recording"));
|
|
18062
|
-
if (ready()) resolve();
|
|
18063
|
-
});
|
|
18064
|
-
await seekVideoElement(source, startTime);
|
|
18065
|
-
if (source.videoWidth <= 0 || source.videoHeight <= 0) {
|
|
18066
|
-
await new Promise((resolve) => {
|
|
18067
|
-
if (typeof source.requestVideoFrameCallback === "function") {
|
|
18068
|
-
source.requestVideoFrameCallback(() => resolve());
|
|
18069
|
-
return;
|
|
18070
|
-
}
|
|
18071
|
-
ownerWindow.requestAnimationFrame(() => resolve());
|
|
18086
|
+
source.src = sourceUrl;
|
|
18087
|
+
try {
|
|
18088
|
+
await new Promise((resolve, reject) => {
|
|
18089
|
+
const ready = () => source.videoWidth > 0 && source.videoHeight > 0 && source.readyState >= 2;
|
|
18090
|
+
const finish = () => ready() && resolve();
|
|
18091
|
+
source.onloadedmetadata = finish;
|
|
18092
|
+
source.onloadeddata = finish;
|
|
18093
|
+
source.onerror = () => reject(new Error("Could not export MP4"));
|
|
18094
|
+
if (ready()) resolve();
|
|
18072
18095
|
});
|
|
18073
|
-
|
|
18074
|
-
|
|
18075
|
-
|
|
18076
|
-
|
|
18077
|
-
|
|
18078
|
-
|
|
18079
|
-
|
|
18080
|
-
|
|
18081
|
-
|
|
18082
|
-
|
|
18083
|
-
|
|
18084
|
-
|
|
18085
|
-
|
|
18086
|
-
|
|
18087
|
-
|
|
18088
|
-
|
|
18089
|
-
|
|
18090
|
-
|
|
18091
|
-
|
|
18092
|
-
|
|
18093
|
-
|
|
18094
|
-
|
|
18095
|
-
|
|
18096
|
-
|
|
18097
|
-
|
|
18098
|
-
|
|
18099
|
-
};
|
|
18100
|
-
const drawFrame = () => {
|
|
18101
|
-
if (stopped) return;
|
|
18096
|
+
const canvas = ownerDocument.createElement("canvas");
|
|
18097
|
+
canvas.width = even(source.videoWidth * scale);
|
|
18098
|
+
canvas.height = even(source.videoHeight * scale);
|
|
18099
|
+
const context = canvas.getContext("2d");
|
|
18100
|
+
const Encoder = encoderCtor(ownerWindow);
|
|
18101
|
+
if (!context || !Encoder) throw new Error("MP4 export is unavailable");
|
|
18102
|
+
const samples = [];
|
|
18103
|
+
let avcConfig;
|
|
18104
|
+
let failure;
|
|
18105
|
+
const config = await supportedMp4Config(ownerWindow, canvas.width, canvas.height);
|
|
18106
|
+
if (!config) throw new Error("MP4 export is unavailable");
|
|
18107
|
+
const encoder = new Encoder({ output: (chunk, metadata) => {
|
|
18108
|
+
const data = new Uint8Array(chunk.byteLength);
|
|
18109
|
+
chunk.copyTo(data);
|
|
18110
|
+
samples.push({ data, key: chunk.type === "key", timestamp: chunk.timestamp });
|
|
18111
|
+
const description = metadata?.decoderConfig?.description;
|
|
18112
|
+
if (description) avcConfig = new Uint8Array(description);
|
|
18113
|
+
}, error: (error) => {
|
|
18114
|
+
failure = error;
|
|
18115
|
+
} });
|
|
18116
|
+
encoder.configure(config);
|
|
18117
|
+
const VideoFrameCtor = ownerWindow.VideoFrame;
|
|
18118
|
+
if (!VideoFrameCtor) throw new Error("MP4 export is unavailable");
|
|
18119
|
+
let frameIndex = 0;
|
|
18120
|
+
for (const time of Array.from({ length: Math.max(1, Math.ceil((endTime - startTime) * 30)) }, (_, index) => startTime + index / 30)) {
|
|
18121
|
+
await seekVideoElement(source, Math.min(endTime, time));
|
|
18102
18122
|
context.drawImage(source, 0, 0, canvas.width, canvas.height);
|
|
18103
|
-
|
|
18104
|
-
|
|
18105
|
-
|
|
18106
|
-
|
|
18107
|
-
|
|
18108
|
-
|
|
18109
|
-
|
|
18110
|
-
|
|
18111
|
-
|
|
18112
|
-
|
|
18113
|
-
|
|
18114
|
-
|
|
18115
|
-
|
|
18116
|
-
};
|
|
18117
|
-
recorder.onstop = () => {
|
|
18118
|
-
const recorded = new Blob(chunks, { type: recorder.mimeType || mimeType || "video/webm" });
|
|
18119
|
-
void correctWebmDuration(recorded, Math.max(0.1, endTime - startTime)).then(resolve, reject);
|
|
18120
|
-
};
|
|
18121
|
-
recorder.onerror = () => reject(new Error("Could not trim recording"));
|
|
18122
|
-
source.addEventListener("timeupdate", onTimeUpdate);
|
|
18123
|
-
recorder.start(100);
|
|
18124
|
-
void source.play().then(
|
|
18125
|
-
() => drawFrame(),
|
|
18126
|
-
() => {
|
|
18127
|
-
source.removeEventListener("timeupdate", onTimeUpdate);
|
|
18128
|
-
reject(new Error("Could not trim recording"));
|
|
18129
|
-
}
|
|
18130
|
-
);
|
|
18131
|
-
});
|
|
18123
|
+
const frame = new VideoFrameCtor(canvas, { timestamp: Math.round(frameIndex++ * 1e6 / 30) });
|
|
18124
|
+
encoder.encode(frame, { keyFrame: frameIndex === 1 || frameIndex % 60 === 0 });
|
|
18125
|
+
frame.close();
|
|
18126
|
+
}
|
|
18127
|
+
await encoder.flush();
|
|
18128
|
+
encoder.close();
|
|
18129
|
+
if (failure || !avcConfig || samples.length === 0) throw failure ?? new Error("Could not export MP4");
|
|
18130
|
+
return new Blob([new Uint8Array(muxH264Mp4(canvas.width, canvas.height, samples, avcConfig))], { type: "video/mp4" });
|
|
18131
|
+
} finally {
|
|
18132
|
+
source.pause();
|
|
18133
|
+
source.removeAttribute("src");
|
|
18134
|
+
source.load();
|
|
18135
|
+
}
|
|
18132
18136
|
}
|
|
18133
18137
|
|
|
18134
18138
|
// core/screen-recording-display-capture.ts
|
|
@@ -18257,8 +18261,8 @@ function paintDisplayRecordingFrame(capture, rect, getViewport) {
|
|
|
18257
18261
|
const { source, canvas, context, regionLocked, cropTarget, captureTrack } = capture;
|
|
18258
18262
|
if (source.videoWidth <= 0 || source.videoHeight <= 0) return;
|
|
18259
18263
|
if (regionLocked && cropTarget) {
|
|
18260
|
-
const
|
|
18261
|
-
const slice = visibleSelectionSlice(
|
|
18264
|
+
const box2 = cropTarget.getBoundingClientRect();
|
|
18265
|
+
const slice = visibleSelectionSlice(box2, getViewport());
|
|
18262
18266
|
if (!slice.visible) {
|
|
18263
18267
|
context.fillStyle = "#000";
|
|
18264
18268
|
context.fillRect(0, 0, canvas.width, canvas.height);
|
|
@@ -18321,16 +18325,12 @@ function runDisplayRecordingDrawLoop(ownerWindow, capture, rect, getViewport, dr
|
|
|
18321
18325
|
}
|
|
18322
18326
|
|
|
18323
18327
|
// hooks/screen-recording-export.ts
|
|
18324
|
-
var mp4MimeType = () => ["video/mp4;codecs=avc1.42E01E", "video/mp4"].find((type) => MediaRecorder.isTypeSupported(type));
|
|
18325
18328
|
var supportedRecordingFormats = () => {
|
|
18326
|
-
|
|
18327
|
-
if (typeof MediaRecorder !== "undefined" && mp4MimeType()) formats.push("mp4");
|
|
18328
|
-
return formats;
|
|
18329
|
+
return ["webm", "gif"];
|
|
18329
18330
|
};
|
|
18330
18331
|
var supportedWebmMimeType = () => ["video/webm;codecs=vp9", "video/webm;codecs=vp8", "video/webm"].find(
|
|
18331
18332
|
(type) => MediaRecorder.isTypeSupported(type)
|
|
18332
18333
|
);
|
|
18333
|
-
var supportedMp4MimeType = mp4MimeType;
|
|
18334
18334
|
|
|
18335
18335
|
// hooks/use-screen-recording.ts
|
|
18336
18336
|
var MAX_RECORDING_MS = 6e4;
|
|
@@ -18643,8 +18643,16 @@ var useScreenRecording = ({ ownerDocument, ownerWindow, onPrepare, extensionReco
|
|
|
18643
18643
|
const blob2 = await fetch(video.url).then((response) => response.blob());
|
|
18644
18644
|
return { blob: blob2, filename };
|
|
18645
18645
|
}
|
|
18646
|
-
|
|
18647
|
-
|
|
18646
|
+
if (format === "gif") {
|
|
18647
|
+
return {
|
|
18648
|
+
blob: await encodeGifClip(ownerDocument, video.url, startTime, endTime, scale),
|
|
18649
|
+
filename
|
|
18650
|
+
};
|
|
18651
|
+
}
|
|
18652
|
+
if (format === "mp4") {
|
|
18653
|
+
return { blob: await encodeMp4Clip(ownerDocument, ownerWindow, video.url, startTime, endTime, scale), filename };
|
|
18654
|
+
}
|
|
18655
|
+
const mimeType = supportedWebmMimeType();
|
|
18648
18656
|
const blob = await reencodeVideoClip(
|
|
18649
18657
|
ownerDocument,
|
|
18650
18658
|
ownerWindow,
|
|
@@ -18702,7 +18710,8 @@ var TIMELINE_BAR_MOTION = "msr:transition-[height] msr:duration-300 msr:ease-[cu
|
|
|
18702
18710
|
var SCALE_OPTIONS = [1, 2, 3];
|
|
18703
18711
|
var FORMAT_LABEL = {
|
|
18704
18712
|
webm: "WebM",
|
|
18705
|
-
mp4: "MP4"
|
|
18713
|
+
mp4: "MP4",
|
|
18714
|
+
gif: "GIF"
|
|
18706
18715
|
};
|
|
18707
18716
|
var scaleLabel = (scale, size) => {
|
|
18708
18717
|
if (!size) return `${scale}\xD7`;
|
|
@@ -18833,24 +18842,118 @@ function TrimHandle({
|
|
|
18833
18842
|
}
|
|
18834
18843
|
function ScreenRecordingEditor(props) {
|
|
18835
18844
|
if (props.playerUrl) {
|
|
18836
|
-
return /* @__PURE__ */ jsx68(ExtensionRecordingFrame, {
|
|
18845
|
+
return /* @__PURE__ */ jsx68(ExtensionRecordingFrame, { playerUrl: props.playerUrl, onDiscard: props.onDiscard });
|
|
18837
18846
|
}
|
|
18838
18847
|
return /* @__PURE__ */ jsx68(StandardScreenRecordingEditor, { ...props });
|
|
18839
18848
|
}
|
|
18840
|
-
|
|
18849
|
+
var RECORDING_FRAME_WIDTH = 22 * 16;
|
|
18850
|
+
var RECORDING_FRAME_SHADOW = 28;
|
|
18851
|
+
var recordingTheme = (from) => {
|
|
18852
|
+
const theme = (from?.closest("[data-mesurer-root]") ?? document.querySelector("[data-mesurer-root]"))?.getAttribute("data-theme");
|
|
18853
|
+
return theme === "light" || theme === "dark" || theme === "system" ? theme : "system";
|
|
18854
|
+
};
|
|
18855
|
+
function ExtensionRecordingFrame({
|
|
18856
|
+
playerUrl,
|
|
18857
|
+
onDiscard
|
|
18858
|
+
}) {
|
|
18859
|
+
const hostRef = useRef40(null);
|
|
18841
18860
|
const frameRef = useRef40(null);
|
|
18861
|
+
const [frameSize, setFrameSize] = useState31({ width: RECORDING_FRAME_WIDTH, height: 280, menuExtra: 0 });
|
|
18862
|
+
const [anchorSide, setAnchorSide] = useState31("top");
|
|
18863
|
+
const [src, setSrc] = useState31(null);
|
|
18864
|
+
useLayoutEffect19(() => {
|
|
18865
|
+
const url = new URL(playerUrl);
|
|
18866
|
+
url.searchParams.set("theme", recordingTheme(hostRef.current));
|
|
18867
|
+
setSrc(url.toString());
|
|
18868
|
+
}, [playerUrl]);
|
|
18869
|
+
const postFrameState = useCallback23(() => {
|
|
18870
|
+
const frame = frameRef.current;
|
|
18871
|
+
const panel = frame?.parentElement?.parentElement;
|
|
18872
|
+
const side = panel?.style.bottom ? "bottom" : "top";
|
|
18873
|
+
setAnchorSide(side);
|
|
18874
|
+
frame?.contentWindow?.postMessage({ type: "mesurer:recording-theme", theme: recordingTheme(frame ?? hostRef.current) }, "*");
|
|
18875
|
+
frame?.contentWindow?.postMessage({ type: "mesurer:recording-anchor", side }, "*");
|
|
18876
|
+
}, []);
|
|
18842
18877
|
useEffect15(() => {
|
|
18843
18878
|
const onMessage = (event) => {
|
|
18844
|
-
if (event.source
|
|
18845
|
-
|
|
18879
|
+
if (event.source !== frameRef.current?.contentWindow) return;
|
|
18880
|
+
if (event.data?.type === "mesurer:recording-discard") onDiscard();
|
|
18881
|
+
if (event.data?.type === "mesurer:recording-frame-intent" && typeof event.data.expanded === "boolean") {
|
|
18882
|
+
setFrameSize((current) => ({
|
|
18883
|
+
...current,
|
|
18884
|
+
width: event.data.expanded ? 36 * 16 : RECORDING_FRAME_WIDTH,
|
|
18885
|
+
height: event.data.expanded ? Math.max(current.height, 520) : current.height
|
|
18886
|
+
}));
|
|
18887
|
+
}
|
|
18888
|
+
if (event.data?.type === "mesurer:recording-frame-size" && typeof event.data.width === "number" && typeof event.data.height === "number" && event.data.width >= 32 && event.data.height >= 32) {
|
|
18889
|
+
setFrameSize({
|
|
18890
|
+
width: event.data.width,
|
|
18891
|
+
height: event.data.height,
|
|
18892
|
+
menuExtra: typeof event.data.menuExtra === "number" ? event.data.menuExtra : 0
|
|
18893
|
+
});
|
|
18846
18894
|
}
|
|
18847
18895
|
};
|
|
18848
18896
|
window.addEventListener("message", onMessage);
|
|
18849
|
-
|
|
18850
|
-
|
|
18851
|
-
|
|
18897
|
+
const root = (frameRef.current ?? hostRef.current)?.closest("[data-mesurer-root]");
|
|
18898
|
+
const panel = frameRef.current?.parentElement?.parentElement;
|
|
18899
|
+
const observer = new MutationObserver(postFrameState);
|
|
18900
|
+
if (root) observer.observe(root, { attributes: true, attributeFilter: ["data-theme"] });
|
|
18901
|
+
if (panel) observer.observe(panel, { attributes: true, attributeFilter: ["style"] });
|
|
18902
|
+
return () => {
|
|
18903
|
+
window.removeEventListener("message", onMessage);
|
|
18904
|
+
observer.disconnect();
|
|
18905
|
+
};
|
|
18906
|
+
}, [onDiscard, postFrameState, src]);
|
|
18907
|
+
const menuAbove = anchorSide === "bottom";
|
|
18908
|
+
const shadow = RECORDING_FRAME_SHADOW;
|
|
18909
|
+
const frameWidth = frameSize.width + shadow * 2;
|
|
18910
|
+
const frameHeight = frameSize.height + frameSize.menuExtra + shadow * 2;
|
|
18911
|
+
return /* @__PURE__ */ jsx68(
|
|
18912
|
+
"div",
|
|
18913
|
+
{
|
|
18914
|
+
ref: hostRef,
|
|
18915
|
+
className: "msr:relative msr:max-w-[calc(100vw-16px)] msr:bg-transparent",
|
|
18916
|
+
style: {
|
|
18917
|
+
width: frameSize.width,
|
|
18918
|
+
height: frameSize.height
|
|
18919
|
+
},
|
|
18920
|
+
children: src ? /* @__PURE__ */ jsx68(
|
|
18921
|
+
"div",
|
|
18922
|
+
{
|
|
18923
|
+
className: "msr:pointer-events-none msr:absolute",
|
|
18924
|
+
style: {
|
|
18925
|
+
width: frameWidth,
|
|
18926
|
+
height: frameHeight,
|
|
18927
|
+
left: -shadow,
|
|
18928
|
+
top: menuAbove ? -(frameSize.menuExtra + shadow) : -shadow,
|
|
18929
|
+
// The iframe is larger than the card so its shadow can paint.
|
|
18930
|
+
// Clip the edge that faces the toolbar; otherwise that transparent
|
|
18931
|
+
// strip sits on the toolbar and swallows clicks.
|
|
18932
|
+
clipPath: menuAbove ? `inset(0 0 ${shadow}px 0)` : `inset(${shadow}px 0 0 0)`
|
|
18933
|
+
},
|
|
18934
|
+
children: /* @__PURE__ */ jsx68(
|
|
18935
|
+
"iframe",
|
|
18936
|
+
{
|
|
18937
|
+
ref: frameRef,
|
|
18938
|
+
title: "Recording preview",
|
|
18939
|
+
src,
|
|
18940
|
+
onLoad: postFrameState,
|
|
18941
|
+
allowTransparency: true,
|
|
18942
|
+
className: "msr:pointer-events-auto msr:absolute msr:inset-0 msr:size-full msr:border-0 msr:bg-transparent msr:shadow-none",
|
|
18943
|
+
style: {
|
|
18944
|
+
backgroundColor: "transparent",
|
|
18945
|
+
colorScheme: "light",
|
|
18946
|
+
border: 0,
|
|
18947
|
+
boxShadow: "none"
|
|
18948
|
+
}
|
|
18949
|
+
}
|
|
18950
|
+
)
|
|
18951
|
+
}
|
|
18952
|
+
) : null
|
|
18953
|
+
}
|
|
18954
|
+
);
|
|
18852
18955
|
}
|
|
18853
|
-
function StandardScreenRecordingEditor({ url, duration, onDiscard, onExport, ownerDocument }) {
|
|
18956
|
+
function StandardScreenRecordingEditor({ url, duration, onDiscard, onExport, ownerDocument, fillFrame }) {
|
|
18854
18957
|
const videoRef = useRef40(null);
|
|
18855
18958
|
const trackRef = useRef40(null);
|
|
18856
18959
|
const playheadRef = useRef40(null);
|
|
@@ -18869,7 +18972,8 @@ function StandardScreenRecordingEditor({ url, duration, onDiscard, onExport, own
|
|
|
18869
18972
|
const [playing, setPlaying] = useState31(false);
|
|
18870
18973
|
const [exporting, setExporting] = useState31(false);
|
|
18871
18974
|
const [expanded, setExpanded] = useState31(false);
|
|
18872
|
-
const
|
|
18975
|
+
const [mp4Supported, setMp4Supported] = useState31(false);
|
|
18976
|
+
const formats = useMemo4(() => mp4Supported ? [...supportedRecordingFormats(), "mp4"] : supportedRecordingFormats(), [mp4Supported]);
|
|
18873
18977
|
const [format, setFormat] = useState31(formats[0] ?? "webm");
|
|
18874
18978
|
const [scale, setScale] = useState31(1);
|
|
18875
18979
|
const [frameSize, setFrameSize] = useState31(null);
|
|
@@ -18884,6 +18988,22 @@ function StandardScreenRecordingEditor({ url, duration, onDiscard, onExport, own
|
|
|
18884
18988
|
const [exportMenuBox, setExportMenuBox] = useState31(null);
|
|
18885
18989
|
startRef.current = start;
|
|
18886
18990
|
endRef.current = end;
|
|
18991
|
+
useEffect15(() => {
|
|
18992
|
+
let active = true;
|
|
18993
|
+
setMp4Supported(false);
|
|
18994
|
+
if (!frameSize || !ownerDocument.defaultView) return () => {
|
|
18995
|
+
active = false;
|
|
18996
|
+
};
|
|
18997
|
+
void supportsMp4Encoding(ownerDocument.defaultView, frameSize.width, frameSize.height).then((supported) => {
|
|
18998
|
+
if (active) setMp4Supported(supported);
|
|
18999
|
+
});
|
|
19000
|
+
return () => {
|
|
19001
|
+
active = false;
|
|
19002
|
+
};
|
|
19003
|
+
}, [frameSize, ownerDocument]);
|
|
19004
|
+
useEffect15(() => {
|
|
19005
|
+
if (!mp4Supported && format === "mp4") setFormat("webm");
|
|
19006
|
+
}, [format, mp4Supported]);
|
|
18887
19007
|
useEffect15(() => {
|
|
18888
19008
|
setStart(0);
|
|
18889
19009
|
setEnd(duration);
|
|
@@ -18946,9 +19066,10 @@ function StandardScreenRecordingEditor({ url, duration, onDiscard, onExport, own
|
|
|
18946
19066
|
const padding = 8;
|
|
18947
19067
|
const spaceAbove = rect.top - origin.top - padding;
|
|
18948
19068
|
const spaceBelow = origin.bottom - rect.bottom - padding;
|
|
18949
|
-
const
|
|
19069
|
+
const anchorSide = ownerDocument.getElementById("root")?.getAttribute("data-anchor");
|
|
19070
|
+
const openAbove = anchorSide === "bottom" ? true : anchorSide === "top" ? false : spaceAbove >= height || spaceAbove >= spaceBelow;
|
|
18950
19071
|
const preferredTop = openAbove ? rect.top - origin.top - height - gap : rect.bottom - origin.top + gap;
|
|
18951
|
-
|
|
19072
|
+
const placed = clampOverlayPosition({
|
|
18952
19073
|
left: rect.right - origin.left - width,
|
|
18953
19074
|
top: preferredTop,
|
|
18954
19075
|
width,
|
|
@@ -18956,13 +19077,18 @@ function StandardScreenRecordingEditor({ url, duration, onDiscard, onExport, own
|
|
|
18956
19077
|
viewportWidth: origin.width,
|
|
18957
19078
|
viewportHeight: origin.height,
|
|
18958
19079
|
padding
|
|
18959
|
-
})
|
|
19080
|
+
});
|
|
19081
|
+
const ready = anchorSide ? openAbove ? spaceAbove >= height : spaceBelow >= height : true;
|
|
19082
|
+
setExportMenuBox({ left: placed.left, top: anchorSide ? preferredTop : placed.top, ready });
|
|
18960
19083
|
};
|
|
18961
19084
|
update();
|
|
18962
19085
|
const view = ownerDocument.defaultView;
|
|
18963
19086
|
view?.addEventListener("resize", update);
|
|
18964
19087
|
view?.addEventListener("scroll", update, true);
|
|
19088
|
+
const observer = new ResizeObserver(update);
|
|
19089
|
+
observer.observe(overlayLayer);
|
|
18965
19090
|
return () => {
|
|
19091
|
+
observer.disconnect();
|
|
18966
19092
|
view?.removeEventListener("resize", update);
|
|
18967
19093
|
view?.removeEventListener("scroll", update, true);
|
|
18968
19094
|
};
|
|
@@ -19148,6 +19274,7 @@ function StandardScreenRecordingEditor({ url, duration, onDiscard, onExport, own
|
|
|
19148
19274
|
}, [exporting, updatePlayheadPosition]);
|
|
19149
19275
|
const downloadRecording = async () => {
|
|
19150
19276
|
if (exporting) return;
|
|
19277
|
+
setExportMenuOpen(false);
|
|
19151
19278
|
setExporting(true);
|
|
19152
19279
|
setError(null);
|
|
19153
19280
|
try {
|
|
@@ -19162,8 +19289,8 @@ function StandardScreenRecordingEditor({ url, duration, onDiscard, onExport, own
|
|
|
19162
19289
|
link.click();
|
|
19163
19290
|
link.remove();
|
|
19164
19291
|
ownerDocument.defaultView?.setTimeout(() => URL.revokeObjectURL(objectUrl), 0);
|
|
19165
|
-
} catch {
|
|
19166
|
-
setError("Could not export the recording.");
|
|
19292
|
+
} catch (caught) {
|
|
19293
|
+
setError(caught instanceof Error && caught.message ? caught.message : "Could not export the recording.");
|
|
19167
19294
|
} finally {
|
|
19168
19295
|
setExporting(false);
|
|
19169
19296
|
}
|
|
@@ -19184,11 +19311,12 @@ function StandardScreenRecordingEditor({ url, duration, onDiscard, onExport, own
|
|
|
19184
19311
|
ref: cardRef,
|
|
19185
19312
|
tabIndex: 0,
|
|
19186
19313
|
"aria-keyshortcuts": "Space",
|
|
19314
|
+
"data-mesurer-recording-card": true,
|
|
19187
19315
|
"data-expanded": expanded ? "true" : "false",
|
|
19188
19316
|
className: cn(
|
|
19189
19317
|
"mesurer-menu-surface msr:relative msr:box-border msr:overflow-visible msr:rounded-wide-card msr:bg-white msr:shadow-floating msr:outline-none",
|
|
19190
|
-
"msr:w-[22rem] msr:max-w-[calc(100vw-24px)] msr:transition-[width] msr:duration-200 msr:ease-[ease] msr:motion-reduce:transition-none",
|
|
19191
|
-
expanded && "msr:w-[36rem]"
|
|
19318
|
+
fillFrame ? "msr:w-full msr:max-w-none" : "msr:w-[22rem] msr:max-w-[calc(100vw-24px)] msr:transition-[width] msr:duration-200 msr:ease-[ease] msr:motion-reduce:transition-none",
|
|
19319
|
+
!fillFrame && expanded && "msr:w-[36rem]"
|
|
19192
19320
|
),
|
|
19193
19321
|
"aria-label": "Screen recording editor",
|
|
19194
19322
|
"aria-busy": exporting,
|
|
@@ -19273,7 +19401,7 @@ function StandardScreenRecordingEditor({ url, duration, onDiscard, onExport, own
|
|
|
19273
19401
|
)
|
|
19274
19402
|
}
|
|
19275
19403
|
),
|
|
19276
|
-
exporting ? /* @__PURE__ */ jsx68("div", { className: "msr:absolute msr:inset-0 msr:z-30 msr:flex msr:items-center msr:justify-center msr:bg-
|
|
19404
|
+
exporting ? /* @__PURE__ */ jsx68("div", { className: "msr:absolute msr:inset-0 msr:z-30 msr:flex msr:items-center msr:justify-center msr:bg-black/80 msr:text-[11px] msr:font-medium msr:text-white msr:drop-shadow-[0_1px_2px_rgba(0,0,0,0.8)]", children: /* @__PURE__ */ jsx68(StatusEllipsis, { label: "Generating" }) }) : null,
|
|
19277
19405
|
/* @__PURE__ */ jsxs52(
|
|
19278
19406
|
"div",
|
|
19279
19407
|
{
|
|
@@ -19414,6 +19542,7 @@ function StandardScreenRecordingEditor({ url, duration, onDiscard, onExport, own
|
|
|
19414
19542
|
variant: "ghost",
|
|
19415
19543
|
"aria-haspopup": "menu",
|
|
19416
19544
|
"aria-expanded": exportMenuOpen,
|
|
19545
|
+
disabled: exporting,
|
|
19417
19546
|
"aria-label": "Export options",
|
|
19418
19547
|
className: "msr:px-1 msr:font-mono msr:text-[10px] msr:leading-none",
|
|
19419
19548
|
style: { height: 20 },
|
|
@@ -19442,7 +19571,7 @@ function StandardScreenRecordingEditor({ url, duration, onDiscard, onExport, own
|
|
|
19442
19571
|
{
|
|
19443
19572
|
ref: exportMenuSurfaceRef,
|
|
19444
19573
|
className: "msr:pointer-events-auto msr:absolute",
|
|
19445
|
-
style: exportMenuBox ? { left: exportMenuBox.left, top: exportMenuBox.top } : { left: 0, top: 0, visibility: "hidden" },
|
|
19574
|
+
style: exportMenuBox?.ready ? { left: exportMenuBox.left, top: exportMenuBox.top } : { left: exportMenuBox?.left ?? 0, top: exportMenuBox?.top ?? 0, visibility: "hidden" },
|
|
19446
19575
|
children: /* @__PURE__ */ jsxs52(MenuSurface, { className: "msr:w-max msr:min-w-44", children: [
|
|
19447
19576
|
/* @__PURE__ */ jsx68("p", { className: "msr:px-2 msr:py-1 msr:text-[10px] msr:font-medium msr:text-ink-500", children: "Format" }),
|
|
19448
19577
|
formats.map((item) => {
|
|
@@ -19453,7 +19582,10 @@ function StandardScreenRecordingEditor({ url, duration, onDiscard, onExport, own
|
|
|
19453
19582
|
variant: "neutral",
|
|
19454
19583
|
className: exportMenuRowClass(selected),
|
|
19455
19584
|
"aria-checked": selected,
|
|
19456
|
-
onClick: () =>
|
|
19585
|
+
onClick: () => {
|
|
19586
|
+
setFormat(item);
|
|
19587
|
+
setExportMenuOpen(false);
|
|
19588
|
+
},
|
|
19457
19589
|
children: [
|
|
19458
19590
|
/* @__PURE__ */ jsx68(
|
|
19459
19591
|
CheckIcon,
|
|
@@ -19477,7 +19609,10 @@ function StandardScreenRecordingEditor({ url, duration, onDiscard, onExport, own
|
|
|
19477
19609
|
variant: "neutral",
|
|
19478
19610
|
className: exportMenuRowClass(selected),
|
|
19479
19611
|
"aria-checked": selected,
|
|
19480
|
-
onClick: () =>
|
|
19612
|
+
onClick: () => {
|
|
19613
|
+
setScale(item);
|
|
19614
|
+
setExportMenuOpen(false);
|
|
19615
|
+
},
|
|
19481
19616
|
children: [
|
|
19482
19617
|
/* @__PURE__ */ jsx68(
|
|
19483
19618
|
CheckIcon,
|
|
@@ -19514,7 +19649,13 @@ function StandardScreenRecordingEditor({ url, duration, onDiscard, onExport, own
|
|
|
19514
19649
|
tooltipId: "recording-resize",
|
|
19515
19650
|
tooltip,
|
|
19516
19651
|
pressed: expanded,
|
|
19517
|
-
onClick: () =>
|
|
19652
|
+
onClick: () => {
|
|
19653
|
+
const next = !expanded;
|
|
19654
|
+
if (ownerDocument.defaultView && ownerDocument.defaultView.parent !== ownerDocument.defaultView) {
|
|
19655
|
+
ownerDocument.defaultView.parent.postMessage({ type: "mesurer:recording-frame-intent", expanded: next }, "*");
|
|
19656
|
+
}
|
|
19657
|
+
setExpanded(next);
|
|
19658
|
+
},
|
|
19518
19659
|
children: expanded ? /* @__PURE__ */ jsx68(CollapseIcon, {}) : /* @__PURE__ */ jsx68(ExpandIcon, {})
|
|
19519
19660
|
}
|
|
19520
19661
|
)
|
|
@@ -23563,23 +23704,23 @@ var makeEdge = (document2, side, color) => {
|
|
|
23563
23704
|
return edge;
|
|
23564
23705
|
};
|
|
23565
23706
|
var makeBox = (document2, fill, outline) => {
|
|
23566
|
-
const
|
|
23567
|
-
Object.assign(
|
|
23707
|
+
const box2 = document2.createElement("div");
|
|
23708
|
+
Object.assign(box2.style, {
|
|
23568
23709
|
position: "fixed",
|
|
23569
23710
|
zIndex: "0",
|
|
23570
23711
|
pointerEvents: "none",
|
|
23571
23712
|
backgroundColor: fill,
|
|
23572
23713
|
boxSizing: "border-box"
|
|
23573
23714
|
});
|
|
23574
|
-
|
|
23575
|
-
|
|
23715
|
+
box2.className = "mesurer-ti-box";
|
|
23716
|
+
box2.dataset.state = "hidden";
|
|
23576
23717
|
for (const side of ["top", "right", "bottom", "left"]) {
|
|
23577
|
-
|
|
23718
|
+
box2.appendChild(makeEdge(document2, side, outline));
|
|
23578
23719
|
}
|
|
23579
|
-
return
|
|
23720
|
+
return box2;
|
|
23580
23721
|
};
|
|
23581
|
-
var positionBox = (
|
|
23582
|
-
Object.assign(
|
|
23722
|
+
var positionBox = (box2, rect) => {
|
|
23723
|
+
Object.assign(box2.style, {
|
|
23583
23724
|
left: `${rect.left}px`,
|
|
23584
23725
|
top: `${rect.top}px`,
|
|
23585
23726
|
width: `${rect.width}px`,
|
|
@@ -24079,27 +24220,27 @@ var createTextInspector = (options = {}, legacy = false) => {
|
|
|
24079
24220
|
if (pinned.length >= maxPinned) removePin(pinned[0], false, true);
|
|
24080
24221
|
}
|
|
24081
24222
|
const root = ensureOverlay();
|
|
24082
|
-
const
|
|
24223
|
+
const box2 = makeBox(document2, FILL_PINNED, OUTLINE_PINNED);
|
|
24083
24224
|
const card = makeCard(document2, true);
|
|
24084
24225
|
const info = typography.getFull(sourceEl);
|
|
24085
24226
|
populateCard(document2, card, info, true);
|
|
24086
|
-
root.append(
|
|
24227
|
+
root.append(box2, card);
|
|
24087
24228
|
const pin = {
|
|
24088
24229
|
sourceEl,
|
|
24089
|
-
box,
|
|
24230
|
+
box: box2,
|
|
24090
24231
|
card,
|
|
24091
24232
|
userPlaced: state?.userPlaced ?? false,
|
|
24092
24233
|
detach: () => {
|
|
24093
24234
|
}
|
|
24094
24235
|
};
|
|
24095
24236
|
const rect = sourceEl.getBoundingClientRect();
|
|
24096
|
-
positionBox(
|
|
24237
|
+
positionBox(box2, rect);
|
|
24097
24238
|
positionCard(window2, card, rect);
|
|
24098
24239
|
if (state?.userPlaced) {
|
|
24099
24240
|
card.style.left = `${state.left}px`;
|
|
24100
24241
|
card.style.top = `${state.top}px`;
|
|
24101
24242
|
}
|
|
24102
|
-
setState(
|
|
24243
|
+
setState(box2, true);
|
|
24103
24244
|
setState(card, true);
|
|
24104
24245
|
pinned.push(pin);
|
|
24105
24246
|
card.querySelector(".mesurer-ti-close")?.addEventListener(
|