mesurer-solid 0.2.0-beta.11 → 0.2.0-beta.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENT_INTEGRATION.md +8 -13
- package/README.md +7 -20
- package/dist/index.d.ts +3 -3
- package/dist/index.js +470 -372
- package/dist/inject-script.js +13 -7
- package/dist/inject.js +476 -378
- package/dist/plugin-catalog.d.ts +5 -1
- package/dist/{codex-plugin.d.ts → plugins/codex/index.d.ts} +17 -19
- package/dist/plugins.d.ts +3 -3
- package/dist/plugins.js +772 -686
- package/package.json +8 -9
- package/plugins/codex/bridge.d.ts +63 -0
- package/plugins/codex/bridge.mjs +1304 -0
- package/plugins/codex/desktop.mjs +155 -0
- package/scripts/install-skill.mjs +1 -10
- package/skills/mesurer-ui/SKILL.md +12 -29
- package/codex/codex-bridge.mjs +0 -2037
- package/codex/codex-connect.mjs +0 -324
- package/codex/codex-lifecycle.mjs +0 -51
- package/scripts/codex-bridge.mjs +0 -2
- package/scripts/codex-connect.mjs +0 -2
- package/scripts/codex-lifecycle.mjs +0 -2
package/dist/inject.js
CHANGED
|
@@ -7679,6 +7679,16 @@ function ru(e) {
|
|
|
7679
7679
|
}), n;
|
|
7680
7680
|
}
|
|
7681
7681
|
}), d), Z(d, f), Z(f, p), Q(c, Y(q, {
|
|
7682
|
+
get when() {
|
|
7683
|
+
return e.description;
|
|
7684
|
+
},
|
|
7685
|
+
get children() {
|
|
7686
|
+
var t = X("p", { class: "msr:m-0 msr:bg-white/60 msr:px-2 msr:pb-1.5 msr:pt-0.5 msr:text-[10px] msr:leading-4 msr:text-ink-500" });
|
|
7687
|
+
return Q(t, () => e.description), J(() => e.id, (e, n) => {
|
|
7688
|
+
$(t, "data-mesurer-plugin-description", e, n);
|
|
7689
|
+
}), t;
|
|
7690
|
+
}
|
|
7691
|
+
}), null), Q(c, Y(q, {
|
|
7682
7692
|
get when() {
|
|
7683
7693
|
return Ui(() => !!n())() ? t() : n();
|
|
7684
7694
|
},
|
|
@@ -9843,7 +9853,7 @@ function zf(e) {
|
|
|
9843
9853
|
}
|
|
9844
9854
|
};
|
|
9845
9855
|
}
|
|
9846
|
-
var Bf = "/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n@layer properties;\n@layer theme, base, components, utilities;\n@layer theme {\n :root, :host {\n --msr-font-sans: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\",\n \"Noto Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\",\n \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --msr-font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\",\n \"Courier New\", monospace;\n --msr-color-red-50: oklch(97.1% 0.013 17.38);\n --msr-color-red-200: oklch(88.5% 0.062 18.334);\n --msr-color-red-600: oklch(57.7% 0.245 27.325);\n --msr-color-black: #000;\n --msr-color-white: #fff;\n --msr-spacing: 0.25rem;\n --msr-font-weight-normal: 400;\n --msr-font-weight-medium: 500;\n --msr-font-weight-semibold: 600;\n --msr-radius-md: 0.375rem;\n --msr-radius-lg: 0.5rem;\n --msr-default-transition-duration: 150ms;\n --msr-default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n --msr-default-font-family: var(--msr-font-sans);\n --msr-default-mono-font-family: var(--msr-font-mono);\n --msr-color-ink-50: #f8fafc;\n --msr-color-ink-200: #e2e8f0;\n --msr-color-ink-500: #64748b;\n --msr-color-ink-700: #334155;\n --msr-color-ink-900: #0f172a;\n }\n}\n@layer base {\n *, ::after, ::before, ::backdrop, ::file-selector-button {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n border: 0 solid;\n }\n html, :host {\n line-height: 1.5;\n -webkit-text-size-adjust: 100%;\n tab-size: 4;\n font-family: var(--msr-default-font-family, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\");\n font-feature-settings: var(--msr-default-font-feature-settings, normal);\n font-variation-settings: var(--msr-default-font-variation-settings, normal);\n -webkit-tap-highlight-color: transparent;\n }\n hr {\n height: 0;\n color: inherit;\n border-top-width: 1px;\n }\n abbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n }\n h1, h2, h3, h4, h5, h6 {\n font-size: inherit;\n font-weight: inherit;\n }\n a {\n color: inherit;\n -webkit-text-decoration: inherit;\n text-decoration: inherit;\n }\n b, strong {\n font-weight: bolder;\n }\n code, kbd, samp, pre {\n font-family: var(--msr-default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace);\n font-feature-settings: var(--msr-default-mono-font-feature-settings, normal);\n font-variation-settings: var(--msr-default-mono-font-variation-settings, normal);\n font-size: 1em;\n }\n small {\n font-size: 80%;\n }\n sub, sup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n }\n sub {\n bottom: -0.25em;\n }\n sup {\n top: -0.5em;\n }\n table {\n text-indent: 0;\n border-color: inherit;\n border-collapse: collapse;\n }\n :-moz-focusring:where(:not(iframe)) {\n outline: auto;\n }\n progress {\n vertical-align: baseline;\n }\n summary {\n display: list-item;\n }\n ol, ul, menu {\n list-style: none;\n }\n img, svg, video, canvas, audio, iframe, embed, object {\n display: block;\n vertical-align: middle;\n }\n img, video {\n max-width: 100%;\n height: auto;\n }\n button, input, select, optgroup, textarea, ::file-selector-button {\n font: inherit;\n font-feature-settings: inherit;\n font-variation-settings: inherit;\n letter-spacing: inherit;\n color: inherit;\n border-radius: 0;\n background-color: transparent;\n opacity: 1;\n }\n :where(select:is([multiple], [size])) optgroup {\n font-weight: bolder;\n }\n :where(select:is([multiple], [size])) optgroup option {\n padding-inline-start: 20px;\n }\n ::file-selector-button {\n margin-inline-end: 4px;\n }\n ::placeholder {\n opacity: 1;\n }\n @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) {\n ::placeholder {\n color: currentcolor;\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, currentcolor 50%, transparent);\n }\n }\n }\n textarea {\n resize: vertical;\n }\n ::-webkit-search-decoration {\n -webkit-appearance: none;\n }\n ::-webkit-date-and-time-value {\n min-height: 1lh;\n text-align: inherit;\n }\n ::-webkit-datetime-edit {\n display: inline-flex;\n }\n ::-webkit-datetime-edit-fields-wrapper {\n padding: 0;\n }\n ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field {\n padding-block: 0;\n }\n ::-webkit-calendar-picker-indicator {\n line-height: 1;\n }\n :-moz-ui-invalid {\n box-shadow: none;\n }\n button, input:where([type=\"button\"], [type=\"reset\"], [type=\"submit\"]), ::file-selector-button {\n appearance: button;\n }\n ::-webkit-inner-spin-button, ::-webkit-outer-spin-button {\n height: auto;\n }\n [hidden]:where(:not([hidden=\"until-found\"])) {\n display: none !important;\n }\n}\n@layer utilities {\n .msr\\:pointer-events-auto {\n pointer-events: auto;\n }\n .msr\\:pointer-events-none {\n pointer-events: none;\n }\n .msr\\:absolute {\n position: absolute;\n }\n .msr\\:fixed {\n position: fixed;\n }\n .msr\\:relative {\n position: relative;\n }\n .msr\\:inset-0 {\n inset: 0px;\n }\n .msr\\:top-0 {\n top: 0px;\n }\n .msr\\:top-1\\/2 {\n top: calc(1 / 2 * 100%);\n }\n .msr\\:top-\\[18px\\] {\n top: 18px;\n }\n .msr\\:top-full {\n top: 100%;\n }\n .msr\\:right-0 {\n right: 0px;\n }\n .msr\\:right-2 {\n right: calc(var(--msr-spacing) * 2);\n }\n .msr\\:right-\\[8px\\] {\n right: 8px;\n }\n .msr\\:bottom-0 {\n bottom: 0px;\n }\n .msr\\:bottom-full {\n bottom: 100%;\n }\n .msr\\:left-0 {\n left: 0px;\n }\n .msr\\:left-1\\/2 {\n left: calc(1 / 2 * 100%);\n }\n .msr\\:left-\\[8px\\] {\n left: 8px;\n }\n .msr\\:left-\\[18px\\] {\n left: 18px;\n }\n .msr\\:z-10 {\n z-index: 10;\n }\n .msr\\:z-\\[60\\] {\n z-index: 60;\n }\n .msr\\:z-\\[70\\] {\n z-index: 70;\n }\n .msr\\:z-\\[80\\] {\n z-index: 80;\n }\n .msr\\:z-\\[90\\] {\n z-index: 90;\n }\n .msr\\:z-\\[94\\] {\n z-index: 94;\n }\n .msr\\:z-\\[95\\] {\n z-index: 95;\n }\n .msr\\:col-span-2 {\n grid-column: span 2 / span 2;\n }\n .msr\\:col-start-1 {\n grid-column-start: 1;\n }\n .msr\\:col-start-2 {\n grid-column-start: 2;\n }\n .msr\\:col-start-3 {\n grid-column-start: 3;\n }\n .msr\\:m-0 {\n margin: 0px;\n }\n .msr\\:mx-1 {\n margin-inline: var(--msr-spacing);\n }\n .msr\\:mt-1 {\n margin-top: var(--msr-spacing);\n }\n .msr\\:mt-1\\.5 {\n margin-top: calc(var(--msr-spacing) * 1.5);\n }\n .msr\\:mt-2 {\n margin-top: calc(var(--msr-spacing) * 2);\n }\n .msr\\:mb-1 {\n margin-bottom: var(--msr-spacing);\n }\n .msr\\:mb-2 {\n margin-bottom: calc(var(--msr-spacing) * 2);\n }\n .msr\\:-ml-1 {\n margin-left: calc(var(--msr-spacing) * -1);\n }\n .msr\\:ml-1 {\n margin-left: var(--msr-spacing);\n }\n .msr\\:ml-2 {\n margin-left: calc(var(--msr-spacing) * 2);\n }\n .msr\\:ml-6 {\n margin-left: calc(var(--msr-spacing) * 6);\n }\n .msr\\:box-border {\n box-sizing: border-box;\n }\n .msr\\:block {\n display: block;\n }\n .msr\\:flex {\n display: flex;\n }\n .msr\\:grid {\n display: grid;\n }\n .msr\\:inline-flex {\n display: inline-flex;\n }\n .msr\\:size-1\\.5 {\n width: calc(var(--msr-spacing) * 1.5);\n height: calc(var(--msr-spacing) * 1.5);\n }\n .msr\\:size-3 {\n width: calc(var(--msr-spacing) * 3);\n height: calc(var(--msr-spacing) * 3);\n }\n .msr\\:size-4 {\n width: calc(var(--msr-spacing) * 4);\n height: calc(var(--msr-spacing) * 4);\n }\n .msr\\:size-6 {\n width: calc(var(--msr-spacing) * 6);\n height: calc(var(--msr-spacing) * 6);\n }\n .msr\\:size-7 {\n width: calc(var(--msr-spacing) * 7);\n height: calc(var(--msr-spacing) * 7);\n }\n .msr\\:size-8 {\n width: calc(var(--msr-spacing) * 8);\n height: calc(var(--msr-spacing) * 8);\n }\n .msr\\:size-\\[10px\\] {\n width: 10px;\n height: 10px;\n }\n .msr\\:size-\\[18px\\] {\n width: 18px;\n height: 18px;\n }\n .msr\\:size-full {\n width: 100%;\n height: 100%;\n }\n .msr\\:h-5 {\n height: calc(var(--msr-spacing) * 5);\n }\n .msr\\:h-6 {\n height: calc(var(--msr-spacing) * 6);\n }\n .msr\\:h-7 {\n height: calc(var(--msr-spacing) * 7);\n }\n .msr\\:h-8 {\n height: calc(var(--msr-spacing) * 8);\n }\n .msr\\:h-20 {\n height: calc(var(--msr-spacing) * 20);\n }\n .msr\\:h-\\[14px\\] {\n height: 14px;\n }\n .msr\\:h-\\[18px\\] {\n height: 18px;\n }\n .msr\\:h-\\[19px\\] {\n height: 19px;\n }\n .msr\\:h-full {\n height: 100%;\n }\n .msr\\:h-px {\n height: 1px;\n }\n .msr\\:max-h-36 {\n max-height: calc(var(--msr-spacing) * 36);\n }\n .msr\\:max-h-\\[220px\\] {\n max-height: 220px;\n }\n .msr\\:max-h-\\[calc\\(100vh-16px\\)\\] {\n max-height: calc(100vh - 16px);\n }\n .msr\\:max-h-\\[min\\(70vh\\,34rem\\)\\] {\n max-height: min(70vh, 34rem);\n }\n .msr\\:max-h-\\[min\\(320px\\,calc\\(100vh-16px\\)\\)\\] {\n max-height: min(320px, calc(100vh - 16px));\n }\n .msr\\:min-h-0 {\n min-height: 0px;\n }\n .msr\\:w-0 {\n width: 0px;\n }\n .msr\\:w-3 {\n width: calc(var(--msr-spacing) * 3);\n }\n .msr\\:w-4 {\n width: calc(var(--msr-spacing) * 4);\n }\n .msr\\:w-5 {\n width: calc(var(--msr-spacing) * 5);\n }\n .msr\\:w-6 {\n width: calc(var(--msr-spacing) * 6);\n }\n .msr\\:w-9 {\n width: calc(var(--msr-spacing) * 9);\n }\n .msr\\:w-12 {\n width: calc(var(--msr-spacing) * 12);\n }\n .msr\\:w-44 {\n width: calc(var(--msr-spacing) * 44);\n }\n .msr\\:w-60 {\n width: calc(var(--msr-spacing) * 60);\n }\n .msr\\:w-\\[18px\\] {\n width: 18px;\n }\n .msr\\:w-\\[26px\\] {\n width: 26px;\n }\n .msr\\:w-\\[272px\\] {\n width: 272px;\n }\n .msr\\:w-full {\n width: 100%;\n }\n .msr\\:w-px {\n width: 1px;\n }\n .msr\\:max-w-0 {\n max-width: 0px;\n }\n .msr\\:max-w-20 {\n max-width: calc(var(--msr-spacing) * 20);\n }\n .msr\\:max-w-\\[calc\\(100vw-16px\\)\\] {\n max-width: calc(100vw - 16px);\n }\n .msr\\:min-w-0 {\n min-width: 0px;\n }\n .msr\\:min-w-36 {\n min-width: calc(var(--msr-spacing) * 36);\n }\n .msr\\:flex-1 {\n flex: 1;\n }\n .msr\\:flex-none {\n flex: none;\n }\n .msr\\:shrink-0 {\n flex-shrink: 0;\n }\n .msr\\:-translate-x-1 {\n --tw-translate-x: calc(var(--msr-spacing) * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .msr\\:-translate-x-1\\/2 {\n --tw-translate-x: calc(calc(1 / 2 * 100%) * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .msr\\:translate-x-0 {\n --tw-translate-x: 0px;\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .msr\\:-translate-y-1\\/2 {\n --tw-translate-y: calc(calc(1 / 2 * 100%) * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .msr\\:-rotate-90 {\n rotate: calc(90deg * -1);\n }\n .msr\\:rotate-45 {\n rotate: 45deg;\n }\n .msr\\:rotate-90 {\n rotate: 90deg;\n }\n .msr\\:rotate-180 {\n rotate: 180deg;\n }\n .msr\\:rotate-\\[45deg\\] {\n rotate: 45deg;\n }\n .msr\\:rotate-\\[135deg\\] {\n rotate: 135deg;\n }\n .msr\\:cursor-crosshair {\n cursor: crosshair;\n }\n .msr\\:cursor-default {\n cursor: default;\n }\n .msr\\:cursor-pointer {\n cursor: pointer;\n }\n .msr\\:touch-none {\n touch-action: none;\n }\n .msr\\:resize-none {\n resize: none;\n }\n .msr\\:list-none {\n list-style-type: none;\n }\n .msr\\:appearance-none {\n appearance: none;\n }\n .msr\\:grid-cols-\\[78px_150px\\] {\n grid-template-columns: 78px 150px;\n }\n .msr\\:grid-cols-\\[78px_156px\\] {\n grid-template-columns: 78px 156px;\n }\n .msr\\:grid-cols-\\[78px_minmax\\(0\\,1fr\\)\\] {\n grid-template-columns: 78px minmax(0,1fr);\n }\n .msr\\:grid-cols-\\[minmax\\(0\\,1fr\\)_28px_34px\\] {\n grid-template-columns: minmax(0,1fr) 28px 34px;\n }\n .msr\\:flex-col {\n flex-direction: column;\n }\n .msr\\:items-center {\n align-items: center;\n }\n .msr\\:items-start {\n align-items: flex-start;\n }\n .msr\\:items-stretch {\n align-items: stretch;\n }\n .msr\\:justify-between {\n justify-content: space-between;\n }\n .msr\\:justify-center {\n justify-content: center;\n }\n .msr\\:justify-end {\n justify-content: flex-end;\n }\n .msr\\:gap-0 {\n gap: 0px;\n }\n .msr\\:gap-0\\.5 {\n gap: calc(var(--msr-spacing) * 0.5);\n }\n .msr\\:gap-1 {\n gap: var(--msr-spacing);\n }\n .msr\\:gap-1\\.5 {\n gap: calc(var(--msr-spacing) * 1.5);\n }\n .msr\\:gap-2 {\n gap: calc(var(--msr-spacing) * 2);\n }\n .msr\\:gap-3 {\n gap: calc(var(--msr-spacing) * 3);\n }\n .msr\\:gap-px {\n gap: 1px;\n }\n .msr\\:gap-x-3 {\n column-gap: calc(var(--msr-spacing) * 3);\n }\n .msr\\:gap-y-1 {\n row-gap: var(--msr-spacing);\n }\n .msr\\:self-stretch {\n align-self: stretch;\n }\n .msr\\:justify-self-end {\n justify-self: flex-end;\n }\n .msr\\:truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .msr\\:overflow-auto {\n overflow: auto;\n }\n .msr\\:overflow-hidden {\n overflow: hidden;\n }\n .msr\\:overflow-visible {\n overflow: visible;\n }\n .msr\\:overflow-x-hidden {\n overflow-x: hidden;\n }\n .msr\\:overflow-y-auto {\n overflow-y: auto;\n }\n .msr\\:rounded {\n border-radius: 0.25rem;\n }\n .msr\\:rounded-\\[3px\\] {\n border-radius: 3px;\n }\n .msr\\:rounded-\\[5px\\] {\n border-radius: 5px;\n }\n .msr\\:rounded-\\[6px\\] {\n border-radius: 6px;\n }\n .msr\\:rounded-\\[7px\\] {\n border-radius: 7px;\n }\n .msr\\:rounded-\\[8px\\] {\n border-radius: 8px;\n }\n .msr\\:rounded-\\[10px\\] {\n border-radius: 10px;\n }\n .msr\\:rounded-\\[12px\\] {\n border-radius: 12px;\n }\n .msr\\:rounded-full {\n border-radius: calc(infinity * 1px);\n }\n .msr\\:rounded-lg {\n border-radius: var(--msr-radius-lg);\n }\n .msr\\:rounded-md {\n border-radius: var(--msr-radius-md);\n }\n .msr\\:rounded-none {\n border-radius: 0;\n }\n .msr\\:border {\n border-style: var(--tw-border-style);\n border-width: 1px;\n }\n .msr\\:border-0 {\n border-style: var(--tw-border-style);\n border-width: 0px;\n }\n .msr\\:border-t {\n border-top-style: var(--tw-border-style);\n border-top-width: 1px;\n }\n .msr\\:border-t-2 {\n border-top-style: var(--tw-border-style);\n border-top-width: 2px;\n }\n .msr\\:border-r {\n border-right-style: var(--tw-border-style);\n border-right-width: 1px;\n }\n .msr\\:border-b {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 1px;\n }\n .msr\\:border-l {\n border-left-style: var(--tw-border-style);\n border-left-width: 1px;\n }\n .msr\\:border-dashed {\n --tw-border-style: dashed;\n border-style: dashed;\n }\n .msr\\:border-dotted {\n --tw-border-style: dotted;\n border-style: dotted;\n }\n .msr\\:border-solid {\n --tw-border-style: solid;\n border-style: solid;\n }\n .msr\\:border-\\[\\#0d99ff\\] {\n border-color: #0d99ff;\n }\n .msr\\:border-\\[\\#2563eb\\]\\/70 {\n border-color: color-mix(in oklab, #2563eb 70%, transparent);\n }\n .msr\\:border-black\\/8 {\n border-color: var(--msr-color-black);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--msr-color-black) 8%, transparent);\n }\n }\n .msr\\:border-black\\/10 {\n border-color: var(--msr-color-black);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--msr-color-black) 10%, transparent);\n }\n }\n .msr\\:border-black\\/15 {\n border-color: var(--msr-color-black);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--msr-color-black) 15%, transparent);\n }\n }\n .msr\\:border-ink-200 {\n border-color: var(--msr-color-ink-200);\n }\n .msr\\:border-ink-500 {\n border-color: var(--msr-color-ink-500);\n }\n .msr\\:border-ink-700 {\n border-color: var(--msr-color-ink-700);\n }\n .msr\\:border-red-200 {\n border-color: var(--msr-color-red-200);\n }\n .msr\\:border-transparent {\n border-color: transparent;\n }\n .msr\\:bg-\\[\\#0d99ff\\] {\n background-color: #0d99ff;\n }\n .msr\\:bg-\\[\\#0d99ff\\]\\/10 {\n background-color: color-mix(in oklab, #0d99ff 10%, transparent);\n }\n .msr\\:bg-\\[\\#2563eb\\] {\n background-color: #2563eb;\n }\n .msr\\:bg-\\[\\#fff\\] {\n background-color: #fff;\n }\n .msr\\:bg-black {\n background-color: var(--msr-color-black);\n }\n .msr\\:bg-black\\/10 {\n background-color: var(--msr-color-black);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--msr-color-black) 10%, transparent);\n }\n }\n .msr\\:bg-ink-50 {\n background-color: var(--msr-color-ink-50);\n }\n .msr\\:bg-ink-50\\/40 {\n background-color: var(--msr-color-ink-50);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--msr-color-ink-50) 40%, transparent);\n }\n }\n .msr\\:bg-ink-900\\/90 {\n background-color: var(--msr-color-ink-900);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--msr-color-ink-900) 90%, transparent);\n }\n }\n .msr\\:bg-transparent {\n background-color: transparent;\n }\n .msr\\:bg-white {\n background-color: var(--msr-color-white);\n }\n .msr\\:bg-white\\/60 {\n background-color: var(--msr-color-white);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--msr-color-white) 60%, transparent);\n }\n }\n .msr\\:p-0 {\n padding: 0px;\n }\n .msr\\:p-1 {\n padding: var(--msr-spacing);\n }\n .msr\\:p-1\\.5 {\n padding: calc(var(--msr-spacing) * 1.5);\n }\n .msr\\:p-2 {\n padding: calc(var(--msr-spacing) * 2);\n }\n .msr\\:p-3 {\n padding: calc(var(--msr-spacing) * 3);\n }\n .msr\\:p-px {\n padding: 1px;\n }\n .msr\\:px-0 {\n padding-inline: 0px;\n }\n .msr\\:px-0\\.5 {\n padding-inline: calc(var(--msr-spacing) * 0.5);\n }\n .msr\\:px-1 {\n padding-inline: var(--msr-spacing);\n }\n .msr\\:px-1\\.5 {\n padding-inline: calc(var(--msr-spacing) * 1.5);\n }\n .msr\\:px-2 {\n padding-inline: calc(var(--msr-spacing) * 2);\n }\n .msr\\:px-2\\.5 {\n padding-inline: calc(var(--msr-spacing) * 2.5);\n }\n .msr\\:py-0 {\n padding-block: 0px;\n }\n .msr\\:py-0\\.5 {\n padding-block: calc(var(--msr-spacing) * 0.5);\n }\n .msr\\:py-1 {\n padding-block: var(--msr-spacing);\n }\n .msr\\:py-1\\.5 {\n padding-block: calc(var(--msr-spacing) * 1.5);\n }\n .msr\\:py-2 {\n padding-block: calc(var(--msr-spacing) * 2);\n }\n .msr\\:pt-2 {\n padding-top: calc(var(--msr-spacing) * 2);\n }\n .msr\\:pr-2 {\n padding-right: calc(var(--msr-spacing) * 2);\n }\n .msr\\:pr-6 {\n padding-right: calc(var(--msr-spacing) * 6);\n }\n .msr\\:pb-1 {\n padding-bottom: var(--msr-spacing);\n }\n .msr\\:pb-2 {\n padding-bottom: calc(var(--msr-spacing) * 2);\n }\n .msr\\:text-center {\n text-align: center;\n }\n .msr\\:text-left {\n text-align: left;\n }\n .msr\\:font-mono {\n font-family: var(--msr-font-mono);\n }\n .msr\\:text-\\[9px\\] {\n font-size: 9px;\n }\n .msr\\:text-\\[10px\\] {\n font-size: 10px;\n }\n .msr\\:text-\\[11px\\] {\n font-size: 11px;\n }\n .msr\\:text-\\[12px\\] {\n font-size: 12px;\n }\n .msr\\:text-\\[14px\\] {\n font-size: 14px;\n }\n .msr\\:leading-4 {\n --tw-leading: calc(var(--msr-spacing) * 4);\n line-height: calc(var(--msr-spacing) * 4);\n }\n .msr\\:leading-\\[1\\.4\\] {\n --tw-leading: 1.4;\n line-height: 1.4;\n }\n .msr\\:leading-\\[1\\.45\\] {\n --tw-leading: 1.45;\n line-height: 1.45;\n }\n .msr\\:leading-\\[18px\\] {\n --tw-leading: 18px;\n line-height: 18px;\n }\n .msr\\:leading-none {\n --tw-leading: 1;\n line-height: 1;\n }\n .msr\\:font-medium {\n --tw-font-weight: var(--msr-font-weight-medium);\n font-weight: var(--msr-font-weight-medium);\n }\n .msr\\:font-normal {\n --tw-font-weight: var(--msr-font-weight-normal);\n font-weight: var(--msr-font-weight-normal);\n }\n .msr\\:font-semibold {\n --tw-font-weight: var(--msr-font-weight-semibold);\n font-weight: var(--msr-font-weight-semibold);\n }\n .msr\\:text-ellipsis {\n text-overflow: ellipsis;\n }\n .msr\\:whitespace-nowrap {\n white-space: nowrap;\n }\n .msr\\:whitespace-pre-wrap {\n white-space: pre-wrap;\n }\n .msr\\:text-\\[\\#64748b\\] {\n color: #64748b;\n }\n .msr\\:text-black {\n color: var(--msr-color-black);\n }\n .msr\\:text-black\\/30 {\n color: var(--msr-color-black);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--msr-color-black) 30%, transparent);\n }\n }\n .msr\\:text-black\\/45 {\n color: var(--msr-color-black);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--msr-color-black) 45%, transparent);\n }\n }\n .msr\\:text-ink-50 {\n color: var(--msr-color-ink-50);\n }\n .msr\\:text-ink-500 {\n color: var(--msr-color-ink-500);\n }\n .msr\\:text-ink-700 {\n color: var(--msr-color-ink-700);\n }\n .msr\\:text-ink-900 {\n color: var(--msr-color-ink-900);\n }\n .msr\\:text-red-600 {\n color: var(--msr-color-red-600);\n }\n .msr\\:text-white {\n color: var(--msr-color-white);\n }\n .msr\\:text-white\\/60 {\n color: var(--msr-color-white);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--msr-color-white) 60%, transparent);\n }\n }\n .msr\\:tabular-nums {\n --tw-numeric-spacing: tabular-nums;\n font-variant-numeric: var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,);\n }\n .msr\\:opacity-0 {\n opacity: 0%;\n }\n .msr\\:opacity-60 {\n opacity: 60%;\n }\n .msr\\:opacity-80 {\n opacity: 80%;\n }\n .msr\\:opacity-100 {\n opacity: 100%;\n }\n .msr\\:shadow-lg {\n --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .msr\\:shadow-sm {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .msr\\:outline {\n outline-style: var(--tw-outline-style);\n outline-width: 1px;\n }\n .msr\\:outline-transparent {\n outline-color: transparent;\n }\n .msr\\:transition-\\[max-width\\,opacity\\,transform\\,padding\\] {\n transition-property: max-width,opacity,transform,padding;\n transition-timing-function: var(--tw-ease, var(--msr-default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--msr-default-transition-duration));\n }\n .msr\\:transition-\\[width\\,opacity\\] {\n transition-property: width,opacity;\n transition-timing-function: var(--tw-ease, var(--msr-default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--msr-default-transition-duration));\n }\n .msr\\:transition-colors {\n transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;\n transition-timing-function: var(--tw-ease, var(--msr-default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--msr-default-transition-duration));\n }\n .msr\\:transition-opacity {\n transition-property: opacity;\n transition-timing-function: var(--tw-ease, var(--msr-default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--msr-default-transition-duration));\n }\n .msr\\:transition-transform {\n transition-property: transform, translate, scale, rotate;\n transition-timing-function: var(--tw-ease, var(--msr-default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--msr-default-transition-duration));\n }\n .msr\\:transition-none {\n transition-property: none;\n }\n .msr\\:duration-150 {\n --tw-duration: 150ms;\n transition-duration: 150ms;\n }\n .msr\\:ease-\\[ease\\] {\n --tw-ease: ease;\n transition-timing-function: ease;\n }\n .msr\\:outline-none {\n --tw-outline-style: none;\n outline-style: none;\n }\n .msr\\:select-none {\n -webkit-user-select: none;\n user-select: none;\n }\n @media (hover: hover) {\n .msr\\:group-hover\\:border-ink-200:is(:where(.msr\\:group):hover *) {\n border-color: var(--msr-color-ink-200);\n }\n }\n .msr\\:focus-within\\:rounded-l-\\[5px\\]:focus-within {\n border-top-left-radius: 5px;\n border-bottom-left-radius: 5px;\n }\n .msr\\:focus-within\\:rounded-r-\\[5px\\]:focus-within {\n border-top-right-radius: 5px;\n border-bottom-right-radius: 5px;\n }\n .msr\\:focus-within\\:outline:focus-within {\n outline-style: var(--tw-outline-style);\n outline-width: 1px;\n }\n .msr\\:focus-within\\:outline-1:focus-within {\n outline-style: var(--tw-outline-style);\n outline-width: 1px;\n }\n .msr\\:focus-within\\:outline-offset-\\[-1px\\]:focus-within {\n outline-offset: -1px;\n }\n .msr\\:focus-within\\:outline-\\[\\#0d99ff\\]:focus-within {\n outline-color: #0d99ff;\n }\n .msr\\:focus-within\\:outline-\\[var\\(--msr-accent\\)\\]:focus-within {\n outline-color: var(--msr-accent);\n }\n @media (hover: hover) {\n .msr\\:hover\\:border-ink-200:hover {\n border-color: var(--msr-color-ink-200);\n }\n .msr\\:hover\\:bg-\\[\\#0b8eea\\]:hover {\n background-color: #0b8eea;\n }\n .msr\\:hover\\:bg-\\[\\#0d99ff\\]:hover {\n background-color: #0d99ff;\n }\n .msr\\:hover\\:bg-black\\/4:hover {\n background-color: var(--msr-color-black);\n }\n @supports (color: color-mix(in lab, red, red)) {\n .msr\\:hover\\:bg-black\\/4:hover {\n background-color: color-mix(in oklab, var(--msr-color-black) 4%, transparent);\n }\n }\n .msr\\:hover\\:bg-black\\/10:hover {\n background-color: var(--msr-color-black);\n }\n @supports (color: color-mix(in lab, red, red)) {\n .msr\\:hover\\:bg-black\\/10:hover {\n background-color: color-mix(in oklab, var(--msr-color-black) 10%, transparent);\n }\n }\n .msr\\:hover\\:bg-ink-50:hover {\n background-color: var(--msr-color-ink-50);\n }\n .msr\\:hover\\:bg-red-50:hover {\n background-color: var(--msr-color-red-50);\n }\n .msr\\:hover\\:text-ink-700:hover {\n color: var(--msr-color-ink-700);\n }\n .msr\\:hover\\:text-ink-900:hover {\n color: var(--msr-color-ink-900);\n }\n .msr\\:hover\\:text-white:hover {\n color: var(--msr-color-white);\n }\n .msr\\:hover\\:underline:hover {\n text-decoration-line: underline;\n }\n }\n .msr\\:focus\\:border-\\[\\#0d99ff\\]:focus {\n border-color: #0d99ff;\n }\n .msr\\:focus\\:shadow-\\[inset_0_0_0_1px_\\#0d99ff\\]:focus {\n --tw-shadow: inset 0 0 0 1px var(--tw-shadow-color, #0d99ff);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .msr\\:focus\\:shadow-\\[inset_0_0_0_1px_var\\(--msr-accent\\)\\]:focus {\n --tw-shadow: inset 0 0 0 1px var(--tw-shadow-color, var(--msr-accent));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .msr\\:focus\\:outline-none:focus {\n --tw-outline-style: none;\n outline-style: none;\n }\n .msr\\:focus-visible\\:border-\\[\\#0d99ff\\]:focus-visible {\n border-color: #0d99ff;\n }\n .msr\\:focus-visible\\:bg-\\[\\#0d99ff\\]:focus-visible {\n background-color: #0d99ff;\n }\n .msr\\:focus-visible\\:text-white:focus-visible {\n color: var(--msr-color-white);\n }\n .msr\\:focus-visible\\:shadow-\\[inset_0_0_0_1px_\\#0d99ff\\]:focus-visible {\n --tw-shadow: inset 0 0 0 1px var(--tw-shadow-color, #0d99ff);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .msr\\:focus-visible\\:shadow-\\[inset_0_0_0_1px_\\#ef4444\\]:focus-visible {\n --tw-shadow: inset 0 0 0 1px var(--tw-shadow-color, #ef4444);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .msr\\:focus-visible\\:ring-1:focus-visible {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .msr\\:focus-visible\\:ring-\\[\\#0d99ff\\]\\/25:focus-visible {\n --tw-ring-color: color-mix(in oklab, #0d99ff 25%, transparent);\n }\n .msr\\:focus-visible\\:outline-none:focus-visible {\n --tw-outline-style: none;\n outline-style: none;\n }\n .msr\\:disabled\\:cursor-default:disabled {\n cursor: default;\n }\n .msr\\:disabled\\:opacity-40:disabled {\n opacity: 40%;\n }\n .msr\\:disabled\\:opacity-45:disabled {\n opacity: 45%;\n }\n @media (prefers-reduced-motion: reduce) {\n .msr\\:motion-reduce\\:transition-none {\n transition-property: none;\n }\n }\n}\n:root, :host {\n --color-ink-50: #f8fafc;\n --color-ink-200: #e2e8f0;\n --color-ink-500: #64748b;\n --color-ink-700: #334155;\n --color-ink-900: #0f172a;\n}\n:host {\n all: initial;\n display: block;\n color-scheme: light;\n color: #0f172a;\n font-family: ui-sans-serif, system-ui, sans-serif;\n font-size: 16px;\n font-weight: 400;\n line-height: 1.5;\n letter-spacing: normal;\n direction: ltr;\n --msr-spacing: 4px;\n}\n*, *::before, *::after {\n box-sizing: border-box;\n}\n@layer base {\n *, ::before, ::after, ::backdrop {\n --tw-border-style: solid;\n --tw-outline-style: solid;\n --tw-shadow: 0 0 #0000;\n --tw-inset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-inset-ring-shadow: 0 0 #0000;\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-translate-z: 0;\n }\n button, input, select, textarea {\n appearance: none;\n background-color: transparent;\n padding: 0;\n font: inherit;\n color: inherit;\n letter-spacing: inherit;\n }\n}\n.mesurer-toolbar-surface {\n box-shadow: 0 0 0.5px rgba(0, 0, 0, 0.18), 0 3px 8px rgba(0, 0, 0, 0.1), 0 1px 3px rgba(0, 0, 0, 0.1);\n}\n.mesurer-menu-surface {\n box-shadow: 0 10px 30px rgba(0, 0, 0, 0.08);\n}\n.mesurer-color-picker {\n border: 1px solid rgba(0, 0, 0, 0.1);\n box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n}\n.mesurer-settings-tabs {\n box-shadow: inset 0 0 0 1px rgba(15, 23, 42, 0.08);\n}\n.mesurer-settings-tab[aria-selected=\"true\"] {\n box-shadow: 0 0 0 1px rgba(15, 23, 42, 0.12);\n}\n.mesurer-switch-track {\n box-sizing: border-box;\n border: 1px solid #e2e8f0;\n}\n.mesurer-switch-track[data-checked=\"true\"] {\n border-color: #0d99ff;\n}\n.mesurer-control-shell {\n border: 1px solid transparent;\n}\n.mesurer-control-shell:hover {\n border-color: #e2e8f0;\n}\n.mesurer-control-focus:focus-within {\n outline: 1px solid #0d99ff;\n outline-offset: -1px;\n}\n.mesurer-root {\n --msr-spacing: 4px;\n}\nbody [data-mesurer-native-scroll-anchor=\"box\"][data-mesurer-nested-scroll-compensation=\"true\"] {\n position: absolute !important;\n left: calc(anchor(left) + var(--mesurer-nested-scroll-x, 0px)) !important;\n top: calc(anchor(top) + var(--mesurer-nested-scroll-y, 0px)) !important;\n}\nbody [data-mesurer-native-scroll-anchor=\"label\"][data-mesurer-nested-scroll-compensation=\"true\"] {\n position: absolute !important;\n left: calc(anchor(center) + var(--mesurer-nested-scroll-x, 0px)) !important;\n top: calc(anchor(bottom) + 2px + var(--mesurer-nested-scroll-y, 0px)) !important;\n}\nbody [data-mesurer-native-scroll-anchor=\"offset\"][data-mesurer-nested-scroll-compensation=\"true\"] {\n position: absolute !important;\n left: calc(anchor(left) + var(--mesurer-native-anchor-x, 0px) + var(--mesurer-nested-scroll-x, 0px)) !important;\n top: calc(anchor(top) + var(--mesurer-native-anchor-y, 0px) + var(--mesurer-nested-scroll-y, 0px)) !important;\n}\n[data-mesurer-text-edit-ring=\"true\"], [data-mesurer-text-selection-highlight=\"true\"], [data-mesurer-text-caret=\"true\"] {\n z-index: 2147482900 !important;\n}\n[data-mesurer-text-inspector-placement-shell=\"true\"], .mesurer-ti-card {\n z-index: 2147483647 !important;\n}\n[data-mesurer-context-root=\"true\"] [data-mesurer-annotation-scroll-mode=\"document\"] {\n position: absolute !important;\n}\n[data-mesurer-annotation-scroll-mode=\"native-anchor\"] {\n position: fixed !important;\n}\n[data-mesurer-native-scroll-anchor=\"offset\"][data-mesurer-nested-scroll-compensation=\"true\"][data-mesurer-annotation-scroll-mode=\"native-anchor\"] {\n position: fixed !important;\n}\n[data-mesurer-annotation-badge=\"true\"] {\n width: 20px !important;\n height: 20px !important;\n transform: none !important;\n transition: width 150ms ease, height 150ms ease, background 150ms ease, color 150ms ease, box-shadow 150ms ease !important;\n}\n[data-mesurer-annotation-marker=\"true\"][data-mesurer-annotation-highlighted=\"true\"] > [data-mesurer-annotation-badge=\"true\"] {\n width: 24px !important;\n height: 24px !important;\n}\n[data-mesurer-root=\"true\"][data-mesurer-direct-text-edit-active=\"true\"] [data-mesurer-annotation-trigger=\"true\"], [data-mesurer-context-root=\"true\"][data-mesurer-direct-text-edit-active=\"true\"] [data-mesurer-annotation-trigger=\"true\"] {\n display: none !important;\n}\n[data-mesurer-plugin-settings] [role=\"switch\"] {\n grid-template-columns: minmax(0, 1fr) auto;\n}\n[data-mesurer-plugin-settings] [role=\"switch\"] > span:first-child {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n[data-mesurer-plugin-settings-disclosure=\"plugins\"] {\n width: calc(100% + 16px);\n margin-inline: -8px;\n}\n.mesurer-solid-root {\n position: fixed;\n inset: 0;\n z-index: 2147483000;\n pointer-events: none;\n --msr-spacing: 4px;\n}\n.mesurer-solid-root [role=\"slider\"] {\n border: 0;\n}\n[data-mesurer-distance-kind=\"selection-spacing\"][data-mesurer-distance-active=\"true\"] [data-mesurer-distance-hover-target=\"true\"] {\n opacity: 1 !important;\n}\n[data-mesurer-distance-kind=\"selection-spacing\"][data-mesurer-distance-active=\"true\"]:has([data-mesurer-distance-label-axis=\"x\"]:hover) [data-mesurer-distance-line^=\"vertical\"], [data-mesurer-distance-kind=\"selection-spacing\"][data-mesurer-distance-active=\"true\"]:has([data-mesurer-distance-label-axis=\"y\"]:hover) [data-mesurer-distance-line^=\"horizontal\"], [data-mesurer-distance-kind=\"selection-spacing\"][data-mesurer-distance-active=\"true\"]:has([data-mesurer-distance-label-axis]:hover) [data-mesurer-distance-connector=\"true\"] {\n opacity: 0.16 !important;\n}\nbody.mesurer-solid-xray * {\n outline: solid 1px blue !important;\n}\nbody.mesurer-solid-xray [data-mesurer-root], body.mesurer-solid-xray [data-mesurer-root] *, body.mesurer-solid-xray [data-mesurer-inspector-ui], body.mesurer-solid-xray [data-mesurer-inspector-ui] *, body.mesurer-solid-xray .mesurer-toolbar-surface, body.mesurer-solid-xray .mesurer-toolbar-surface *, body.mesurer-solid-xray .mesurer-ti-box, body.mesurer-solid-xray .mesurer-ti-card, body.mesurer-solid-xray .mesurer-ti-card *, body.mesurer-solid-xray .mesurer-ti-close {\n outline: none !important;\n}\n[data-mesurer-toolbar=\"true\"] > div:has(> [data-mesurer-toolbar-compact-item]) {\n transition: padding-inline 150ms ease;\n}\n[data-mesurer-toolbar=\"true\"][data-mesurer-toolbar-compact=\"true\"] > div:has(> [data-mesurer-toolbar-compact-item]):not(:has(> [data-mesurer-toolbar-compact-item][data-visible=\"true\"])) {\n padding-inline: 0;\n}\n[data-mesurer-selected-measurement=\"true\"]:has(> [data-mesurer-native-scroll-anchor=\"box\"]) {\n display: contents !important;\n}\n@media (prefers-reduced-motion: reduce) {\n [data-mesurer-toolbar=\"true\"] > div:has(> [data-mesurer-toolbar-compact-item]) {\n transition: none;\n }\n [data-mesurer-annotation-badge=\"true\"] {\n transition: none !important;\n }\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) {\n --msr-accent: #0d99ff;\n --msr-surface: #fff;\n --msr-surface-raised: #fff;\n --msr-surface-muted: #f8fafc;\n --msr-content: #18181b;\n --msr-color-white: #fff;\n --msr-color-black: #000;\n --msr-color-ink-50: #f8fafc;\n --msr-color-ink-100: #f1f5f9;\n --msr-color-ink-200: #e2e8f0;\n --msr-color-ink-300: #cbd5e1;\n --msr-color-ink-500: #64748b;\n --msr-color-ink-700: #334155;\n --msr-color-ink-900: #18181b;\n --color-ink-50: var(--msr-color-ink-50);\n --color-ink-100: var(--msr-color-ink-100);\n --color-ink-200: var(--msr-color-ink-200);\n --color-ink-300: var(--msr-color-ink-300);\n --color-ink-500: var(--msr-color-ink-500);\n --color-ink-700: var(--msr-color-ink-700);\n --color-ink-900: var(--msr-color-ink-900);\n --msr-danger-bg: #fef2f2;\n --msr-danger-border: #fecaca;\n --msr-danger-text: #dc2626;\n --msr-danger-solid-bg: #dc2626;\n --msr-danger-solid-hover: #b91c1c;\n --msr-danger-solid-text: #fff;\n --color-red-50: var(--msr-danger-bg);\n --color-red-200: var(--msr-danger-border);\n --color-red-600: var(--msr-danger-text);\n --color-red-700: #b91c1c;\n --msr-control-thumb: #fff;\n --msr-slider-track: rgba(15, 23, 42, 0.16);\n --msr-shadow-toolbar: 0 0 0.4px rgba(0, 0, 0, 0.22),\n 0 6px 18px rgba(0, 0, 0, 0.03),\n 0 3px 9px rgba(0, 0, 0, 0.06),\n 0 1px 1px rgba(0, 0, 0, 0.06);\n --msr-shadow-floating: 0 0 0 0.4px rgba(0, 0, 0, 0.22),\n 0 6px 18px rgba(0, 0, 0, 0.03),\n 0 3px 9px rgba(0, 0, 0, 0.06),\n 0 1px 1px rgba(0, 0, 0, 0.06);\n --msr-shadow-select-menu: var(--msr-shadow-floating);\n color: var(--msr-content);\n color-scheme: light;\n}\n:where( [data-mesurer-root=\"true\"][data-theme=\"dark\"], [data-mesurer-inspector-ui=\"true\"][data-theme=\"dark\"] ) {\n --msr-accent: #0c8ce9;\n --msr-surface: #323232;\n --msr-surface-raised: #3a3a3a;\n --msr-surface-muted: #3a3a3a;\n --msr-content: #f5f5f5;\n --msr-color-white: #f5f5f5;\n --msr-color-black: #171717;\n --msr-color-ink-50: #3a3a3a;\n --msr-color-ink-100: #414141;\n --msr-color-ink-200: #4a4a4a;\n --msr-color-ink-300: #5a5a5a;\n --msr-color-ink-500: #a0a0a0;\n --msr-color-ink-700: #dedede;\n --msr-color-ink-900: #f5f5f5;\n --msr-danger-bg: #3f2020;\n --msr-danger-border: #7f3f46;\n --msr-danger-text: #f87171;\n --msr-danger-solid-bg: #c95058;\n --msr-danger-solid-hover: #b7424b;\n --msr-danger-solid-text: #f5f5f5;\n --color-red-700: #fca5a5;\n --msr-control-thumb: #f4f4f5;\n --msr-slider-track: rgba(245, 245, 245, 0.24);\n --msr-shadow-toolbar: 0 0 0.4px lch(100% 0 0 / 0.10),\n 0 3px 8px lch(0% 0 0 / 0.125),\n 0 2px 5px lch(0% 0 0 / 0.125),\n 0 1px 1px lch(0% 0 0 / 0.125);\n --msr-shadow-floating: 0 0 0 0.4px lch(100% 0 0 / 0.05),\n 0 4px 12px lch(0% 0 0 / 0.12),\n 0 1px 3px lch(0% 0 0 / 0.10);\n --msr-shadow-select-menu: 0 0 0 0.4px lch(100% 0 0 / 0.14),\n 0 4px 12px lch(0% 0 0 / 0.22),\n 0 1px 3px lch(0% 0 0 / 0.18);\n color-scheme: dark;\n}\n@media (prefers-color-scheme: dark) {\n :where( [data-mesurer-root=\"true\"][data-theme=\"system\"], [data-mesurer-inspector-ui=\"true\"][data-theme=\"system\"] ) {\n --msr-accent: #0c8ce9;\n --msr-surface: #323232;\n --msr-surface-raised: #3a3a3a;\n --msr-surface-muted: #3a3a3a;\n --msr-content: #f5f5f5;\n --msr-color-white: #f5f5f5;\n --msr-color-black: #171717;\n --msr-color-ink-50: #3a3a3a;\n --msr-color-ink-100: #414141;\n --msr-color-ink-200: #4a4a4a;\n --msr-color-ink-300: #5a5a5a;\n --msr-color-ink-500: #a0a0a0;\n --msr-color-ink-700: #dedede;\n --msr-color-ink-900: #f5f5f5;\n --msr-danger-bg: #3f2020;\n --msr-danger-border: #7f3f46;\n --msr-danger-text: #f87171;\n --msr-danger-solid-bg: #c95058;\n --msr-danger-solid-hover: #b7424b;\n --msr-danger-solid-text: #f5f5f5;\n --color-red-700: #fca5a5;\n --msr-control-thumb: #f4f4f5;\n --msr-slider-track: rgba(245, 245, 245, 0.24);\n --msr-shadow-toolbar: 0 0 0.4px lch(100% 0 0 / 0.10),\n 0 3px 8px lch(0% 0 0 / 0.125),\n 0 2px 5px lch(0% 0 0 / 0.125),\n 0 1px 1px lch(0% 0 0 / 0.125);\n --msr-shadow-floating: 0 0 0 0.4px lch(100% 0 0 / 0.05),\n 0 4px 12px lch(0% 0 0 / 0.12),\n 0 1px 3px lch(0% 0 0 / 0.10);\n --msr-shadow-select-menu: 0 0 0 0.4px lch(100% 0 0 / 0.14),\n 0 4px 12px lch(0% 0 0 / 0.22),\n 0 1px 3px lch(0% 0 0 / 0.18);\n color-scheme: dark;\n }\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) [class~=\"msr:bg-white\"], :where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) [class~=\"msr:bg-[#fff]\"] {\n background-color: var(--msr-surface) !important;\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) [class~=\"msr:text-black\"] {\n color: var(--msr-content) !important;\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) [class~=\"msr:hover:bg-black/4\"]:hover, :where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) [class~=\"msr:hover:bg-black/5\"]:hover {\n background-color: var(--msr-content) !important;\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in srgb, var(--msr-content) 6%, transparent) !important;\n }\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) .mesurer-toolbar-surface {\n background-color: var(--msr-surface) !important;\n box-shadow: var(--msr-shadow-toolbar) !important;\n color: var(--msr-content);\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) :is( .mesurer-menu-surface, .mesurer-color-picker, .mesurer-ti-card, [data-mesurer-text-inspector-info=\"true\"], [data-mesurer-annotation-panel=\"true\"], [data-mesurer-annotation-composer=\"true\"] ) {\n background-color: var(--msr-surface-raised) !important;\n color: var(--msr-content) !important;\n box-shadow: var(--msr-shadow-floating) !important;\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) .mesurer-switch-track[data-checked=\"false\"], :where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) .mesurer-control-shell {\n background-color: var(--msr-surface-muted) !important;\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) .mesurer-switch-track > span {\n background-color: var(--msr-control-thumb) !important;\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) :is(.mesurer-settings-select, .mesurer-settings-select-menu) {\n background-color: var(--msr-surface-raised) !important;\n border-color: var(--msr-color-ink-200) !important;\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) [data-mesurer-rulers=\"true\"] {\n color: var(--msr-color-ink-500) !important;\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) [data-slider-container=\"true\"] > div:first-child {\n background-color: var(--msr-slider-track) !important;\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) [class~=\"msr:bg-[#0d99ff]\"] {\n background-color: var(--msr-accent) !important;\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) [class~=\"msr:border-[#0d99ff]\"] {\n border-color: var(--msr-accent) !important;\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) [class~=\"msr:hover:bg-[#0d99ff]\"]:hover, :where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) [class~=\"msr:focus-visible:bg-[#0d99ff]\"]:focus-visible {\n background-color: var(--msr-accent) !important;\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) [class~=\"msr:text-white\"] {\n color: var(--msr-color-white) !important;\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) [data-slider-thumb=\"true\"]:focus-visible {\n box-shadow: 0 0 0 1px var(--msr-accent) !important;\n @supports (color: color-mix(in lab, red, red)) {\n box-shadow: 0 0 0 1px color-mix(in srgb, var(--msr-accent) 25%, transparent) !important;\n }\n}\n:where([data-mesurer-root=\"true\"], [data-mesurer-inspector-ui=\"true\"]) {\n --msr-radius-control: 5px;\n}\n@layer utilities {\n .msr\\:rounded-control {\n border-radius: var(--msr-radius-control);\n }\n}\n.mesurer-thin-scrollbar {\n scrollbar-width: thin;\n scrollbar-color: var(--msr-color-ink-200) transparent;\n}\n.mesurer-thin-scrollbar::-webkit-scrollbar {\n width: 4px;\n height: 4px;\n}\n.mesurer-thin-scrollbar::-webkit-scrollbar-track {\n background: transparent;\n}\n.mesurer-thin-scrollbar::-webkit-scrollbar-thumb {\n background: var(--msr-color-ink-200);\n border-radius: var(--msr-radius-control);\n}\n.mesurer-thin-scrollbar:hover {\n scrollbar-color: var(--msr-color-ink-300) transparent;\n}\n.mesurer-thin-scrollbar:hover::-webkit-scrollbar-thumb {\n background: var(--msr-color-ink-300);\n}\n.mesurer-thin-scrollbar::-webkit-scrollbar-corner {\n background: transparent;\n}\n@property --tw-translate-x {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-translate-y {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-translate-z {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-border-style {\n syntax: \"*\";\n inherits: false;\n initial-value: solid;\n}\n@property --tw-leading {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-font-weight {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ordinal {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-slashed-zero {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-numeric-figure {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-numeric-spacing {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-numeric-fraction {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-shadow-alpha {\n syntax: \"<percentage>\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-inset-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-inset-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-inset-shadow-alpha {\n syntax: \"<percentage>\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-ring-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ring-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-inset-ring-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-inset-ring-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-ring-inset {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ring-offset-width {\n syntax: \"<length>\";\n inherits: false;\n initial-value: 0px;\n}\n@property --tw-ring-offset-color {\n syntax: \"*\";\n inherits: false;\n initial-value: #fff;\n}\n@property --tw-ring-offset-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-outline-style {\n syntax: \"*\";\n inherits: false;\n initial-value: solid;\n}\n@property --tw-duration {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ease {\n syntax: \"*\";\n inherits: false;\n}\n@layer properties {\n @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {\n *, ::before, ::after, ::backdrop {\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-translate-z: 0;\n --tw-border-style: solid;\n --tw-leading: initial;\n --tw-font-weight: initial;\n --tw-ordinal: initial;\n --tw-slashed-zero: initial;\n --tw-numeric-figure: initial;\n --tw-numeric-spacing: initial;\n --tw-numeric-fraction: initial;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-color: initial;\n --tw-shadow-alpha: 100%;\n --tw-inset-shadow: 0 0 #0000;\n --tw-inset-shadow-color: initial;\n --tw-inset-shadow-alpha: 100%;\n --tw-ring-color: initial;\n --tw-ring-shadow: 0 0 #0000;\n --tw-inset-ring-color: initial;\n --tw-inset-ring-shadow: 0 0 #0000;\n --tw-ring-inset: initial;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-outline-style: solid;\n --tw-duration: initial;\n --tw-ease: initial;\n }\n }\n}\n", Vf = 0, Hf = "mesurer:tab-id", Uf = "mesurer-settings", Wf = "mesurer-state", Gf = 80, Kf = (e, t) => {
|
|
9856
|
+
var Bf = "/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n@layer properties;\n@layer theme, base, components, utilities;\n@layer theme {\n :root, :host {\n --msr-font-sans: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\",\n \"Noto Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\",\n \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --msr-font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\",\n \"Courier New\", monospace;\n --msr-color-red-50: oklch(97.1% 0.013 17.38);\n --msr-color-red-200: oklch(88.5% 0.062 18.334);\n --msr-color-red-600: oklch(57.7% 0.245 27.325);\n --msr-color-black: #000;\n --msr-color-white: #fff;\n --msr-spacing: 0.25rem;\n --msr-font-weight-normal: 400;\n --msr-font-weight-medium: 500;\n --msr-font-weight-semibold: 600;\n --msr-radius-md: 0.375rem;\n --msr-radius-lg: 0.5rem;\n --msr-default-transition-duration: 150ms;\n --msr-default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n --msr-default-font-family: var(--msr-font-sans);\n --msr-default-mono-font-family: var(--msr-font-mono);\n --msr-color-ink-50: #f8fafc;\n --msr-color-ink-200: #e2e8f0;\n --msr-color-ink-500: #64748b;\n --msr-color-ink-700: #334155;\n --msr-color-ink-900: #0f172a;\n }\n}\n@layer base {\n *, ::after, ::before, ::backdrop, ::file-selector-button {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n border: 0 solid;\n }\n html, :host {\n line-height: 1.5;\n -webkit-text-size-adjust: 100%;\n tab-size: 4;\n font-family: var(--msr-default-font-family, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\");\n font-feature-settings: var(--msr-default-font-feature-settings, normal);\n font-variation-settings: var(--msr-default-font-variation-settings, normal);\n -webkit-tap-highlight-color: transparent;\n }\n hr {\n height: 0;\n color: inherit;\n border-top-width: 1px;\n }\n abbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n }\n h1, h2, h3, h4, h5, h6 {\n font-size: inherit;\n font-weight: inherit;\n }\n a {\n color: inherit;\n -webkit-text-decoration: inherit;\n text-decoration: inherit;\n }\n b, strong {\n font-weight: bolder;\n }\n code, kbd, samp, pre {\n font-family: var(--msr-default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace);\n font-feature-settings: var(--msr-default-mono-font-feature-settings, normal);\n font-variation-settings: var(--msr-default-mono-font-variation-settings, normal);\n font-size: 1em;\n }\n small {\n font-size: 80%;\n }\n sub, sup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n }\n sub {\n bottom: -0.25em;\n }\n sup {\n top: -0.5em;\n }\n table {\n text-indent: 0;\n border-color: inherit;\n border-collapse: collapse;\n }\n :-moz-focusring:where(:not(iframe)) {\n outline: auto;\n }\n progress {\n vertical-align: baseline;\n }\n summary {\n display: list-item;\n }\n ol, ul, menu {\n list-style: none;\n }\n img, svg, video, canvas, audio, iframe, embed, object {\n display: block;\n vertical-align: middle;\n }\n img, video {\n max-width: 100%;\n height: auto;\n }\n button, input, select, optgroup, textarea, ::file-selector-button {\n font: inherit;\n font-feature-settings: inherit;\n font-variation-settings: inherit;\n letter-spacing: inherit;\n color: inherit;\n border-radius: 0;\n background-color: transparent;\n opacity: 1;\n }\n :where(select:is([multiple], [size])) optgroup {\n font-weight: bolder;\n }\n :where(select:is([multiple], [size])) optgroup option {\n padding-inline-start: 20px;\n }\n ::file-selector-button {\n margin-inline-end: 4px;\n }\n ::placeholder {\n opacity: 1;\n }\n @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) {\n ::placeholder {\n color: currentcolor;\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, currentcolor 50%, transparent);\n }\n }\n }\n textarea {\n resize: vertical;\n }\n ::-webkit-search-decoration {\n -webkit-appearance: none;\n }\n ::-webkit-date-and-time-value {\n min-height: 1lh;\n text-align: inherit;\n }\n ::-webkit-datetime-edit {\n display: inline-flex;\n }\n ::-webkit-datetime-edit-fields-wrapper {\n padding: 0;\n }\n ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field {\n padding-block: 0;\n }\n ::-webkit-calendar-picker-indicator {\n line-height: 1;\n }\n :-moz-ui-invalid {\n box-shadow: none;\n }\n button, input:where([type=\"button\"], [type=\"reset\"], [type=\"submit\"]), ::file-selector-button {\n appearance: button;\n }\n ::-webkit-inner-spin-button, ::-webkit-outer-spin-button {\n height: auto;\n }\n [hidden]:where(:not([hidden=\"until-found\"])) {\n display: none !important;\n }\n}\n@layer utilities {\n .msr\\:pointer-events-auto {\n pointer-events: auto;\n }\n .msr\\:pointer-events-none {\n pointer-events: none;\n }\n .msr\\:absolute {\n position: absolute;\n }\n .msr\\:fixed {\n position: fixed;\n }\n .msr\\:relative {\n position: relative;\n }\n .msr\\:inset-0 {\n inset: 0px;\n }\n .msr\\:top-0 {\n top: 0px;\n }\n .msr\\:top-1\\/2 {\n top: calc(1 / 2 * 100%);\n }\n .msr\\:top-\\[18px\\] {\n top: 18px;\n }\n .msr\\:top-full {\n top: 100%;\n }\n .msr\\:right-0 {\n right: 0px;\n }\n .msr\\:right-2 {\n right: calc(var(--msr-spacing) * 2);\n }\n .msr\\:right-\\[8px\\] {\n right: 8px;\n }\n .msr\\:bottom-0 {\n bottom: 0px;\n }\n .msr\\:bottom-full {\n bottom: 100%;\n }\n .msr\\:left-0 {\n left: 0px;\n }\n .msr\\:left-1\\/2 {\n left: calc(1 / 2 * 100%);\n }\n .msr\\:left-\\[8px\\] {\n left: 8px;\n }\n .msr\\:left-\\[18px\\] {\n left: 18px;\n }\n .msr\\:z-10 {\n z-index: 10;\n }\n .msr\\:z-\\[60\\] {\n z-index: 60;\n }\n .msr\\:z-\\[70\\] {\n z-index: 70;\n }\n .msr\\:z-\\[80\\] {\n z-index: 80;\n }\n .msr\\:z-\\[90\\] {\n z-index: 90;\n }\n .msr\\:z-\\[94\\] {\n z-index: 94;\n }\n .msr\\:z-\\[95\\] {\n z-index: 95;\n }\n .msr\\:col-span-2 {\n grid-column: span 2 / span 2;\n }\n .msr\\:col-start-1 {\n grid-column-start: 1;\n }\n .msr\\:col-start-2 {\n grid-column-start: 2;\n }\n .msr\\:col-start-3 {\n grid-column-start: 3;\n }\n .msr\\:m-0 {\n margin: 0px;\n }\n .msr\\:mx-1 {\n margin-inline: var(--msr-spacing);\n }\n .msr\\:mt-1 {\n margin-top: var(--msr-spacing);\n }\n .msr\\:mt-1\\.5 {\n margin-top: calc(var(--msr-spacing) * 1.5);\n }\n .msr\\:mt-2 {\n margin-top: calc(var(--msr-spacing) * 2);\n }\n .msr\\:mb-1 {\n margin-bottom: var(--msr-spacing);\n }\n .msr\\:mb-2 {\n margin-bottom: calc(var(--msr-spacing) * 2);\n }\n .msr\\:-ml-1 {\n margin-left: calc(var(--msr-spacing) * -1);\n }\n .msr\\:ml-1 {\n margin-left: var(--msr-spacing);\n }\n .msr\\:ml-2 {\n margin-left: calc(var(--msr-spacing) * 2);\n }\n .msr\\:ml-6 {\n margin-left: calc(var(--msr-spacing) * 6);\n }\n .msr\\:box-border {\n box-sizing: border-box;\n }\n .msr\\:block {\n display: block;\n }\n .msr\\:flex {\n display: flex;\n }\n .msr\\:grid {\n display: grid;\n }\n .msr\\:inline-flex {\n display: inline-flex;\n }\n .msr\\:size-1\\.5 {\n width: calc(var(--msr-spacing) * 1.5);\n height: calc(var(--msr-spacing) * 1.5);\n }\n .msr\\:size-3 {\n width: calc(var(--msr-spacing) * 3);\n height: calc(var(--msr-spacing) * 3);\n }\n .msr\\:size-4 {\n width: calc(var(--msr-spacing) * 4);\n height: calc(var(--msr-spacing) * 4);\n }\n .msr\\:size-6 {\n width: calc(var(--msr-spacing) * 6);\n height: calc(var(--msr-spacing) * 6);\n }\n .msr\\:size-7 {\n width: calc(var(--msr-spacing) * 7);\n height: calc(var(--msr-spacing) * 7);\n }\n .msr\\:size-8 {\n width: calc(var(--msr-spacing) * 8);\n height: calc(var(--msr-spacing) * 8);\n }\n .msr\\:size-\\[10px\\] {\n width: 10px;\n height: 10px;\n }\n .msr\\:size-\\[18px\\] {\n width: 18px;\n height: 18px;\n }\n .msr\\:size-full {\n width: 100%;\n height: 100%;\n }\n .msr\\:h-5 {\n height: calc(var(--msr-spacing) * 5);\n }\n .msr\\:h-6 {\n height: calc(var(--msr-spacing) * 6);\n }\n .msr\\:h-7 {\n height: calc(var(--msr-spacing) * 7);\n }\n .msr\\:h-8 {\n height: calc(var(--msr-spacing) * 8);\n }\n .msr\\:h-20 {\n height: calc(var(--msr-spacing) * 20);\n }\n .msr\\:h-\\[14px\\] {\n height: 14px;\n }\n .msr\\:h-\\[18px\\] {\n height: 18px;\n }\n .msr\\:h-\\[19px\\] {\n height: 19px;\n }\n .msr\\:h-full {\n height: 100%;\n }\n .msr\\:h-px {\n height: 1px;\n }\n .msr\\:max-h-36 {\n max-height: calc(var(--msr-spacing) * 36);\n }\n .msr\\:max-h-\\[220px\\] {\n max-height: 220px;\n }\n .msr\\:max-h-\\[calc\\(100vh-16px\\)\\] {\n max-height: calc(100vh - 16px);\n }\n .msr\\:max-h-\\[min\\(70vh\\,34rem\\)\\] {\n max-height: min(70vh, 34rem);\n }\n .msr\\:max-h-\\[min\\(320px\\,calc\\(100vh-16px\\)\\)\\] {\n max-height: min(320px, calc(100vh - 16px));\n }\n .msr\\:min-h-0 {\n min-height: 0px;\n }\n .msr\\:w-0 {\n width: 0px;\n }\n .msr\\:w-3 {\n width: calc(var(--msr-spacing) * 3);\n }\n .msr\\:w-4 {\n width: calc(var(--msr-spacing) * 4);\n }\n .msr\\:w-5 {\n width: calc(var(--msr-spacing) * 5);\n }\n .msr\\:w-6 {\n width: calc(var(--msr-spacing) * 6);\n }\n .msr\\:w-9 {\n width: calc(var(--msr-spacing) * 9);\n }\n .msr\\:w-12 {\n width: calc(var(--msr-spacing) * 12);\n }\n .msr\\:w-44 {\n width: calc(var(--msr-spacing) * 44);\n }\n .msr\\:w-60 {\n width: calc(var(--msr-spacing) * 60);\n }\n .msr\\:w-\\[18px\\] {\n width: 18px;\n }\n .msr\\:w-\\[26px\\] {\n width: 26px;\n }\n .msr\\:w-\\[272px\\] {\n width: 272px;\n }\n .msr\\:w-full {\n width: 100%;\n }\n .msr\\:w-px {\n width: 1px;\n }\n .msr\\:max-w-0 {\n max-width: 0px;\n }\n .msr\\:max-w-20 {\n max-width: calc(var(--msr-spacing) * 20);\n }\n .msr\\:max-w-\\[calc\\(100vw-16px\\)\\] {\n max-width: calc(100vw - 16px);\n }\n .msr\\:min-w-0 {\n min-width: 0px;\n }\n .msr\\:min-w-36 {\n min-width: calc(var(--msr-spacing) * 36);\n }\n .msr\\:flex-1 {\n flex: 1;\n }\n .msr\\:flex-none {\n flex: none;\n }\n .msr\\:shrink-0 {\n flex-shrink: 0;\n }\n .msr\\:-translate-x-1 {\n --tw-translate-x: calc(var(--msr-spacing) * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .msr\\:-translate-x-1\\/2 {\n --tw-translate-x: calc(calc(1 / 2 * 100%) * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .msr\\:translate-x-0 {\n --tw-translate-x: 0px;\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .msr\\:-translate-y-1\\/2 {\n --tw-translate-y: calc(calc(1 / 2 * 100%) * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .msr\\:-rotate-90 {\n rotate: calc(90deg * -1);\n }\n .msr\\:rotate-45 {\n rotate: 45deg;\n }\n .msr\\:rotate-90 {\n rotate: 90deg;\n }\n .msr\\:rotate-180 {\n rotate: 180deg;\n }\n .msr\\:rotate-\\[45deg\\] {\n rotate: 45deg;\n }\n .msr\\:rotate-\\[135deg\\] {\n rotate: 135deg;\n }\n .msr\\:cursor-crosshair {\n cursor: crosshair;\n }\n .msr\\:cursor-default {\n cursor: default;\n }\n .msr\\:cursor-pointer {\n cursor: pointer;\n }\n .msr\\:touch-none {\n touch-action: none;\n }\n .msr\\:resize-none {\n resize: none;\n }\n .msr\\:list-none {\n list-style-type: none;\n }\n .msr\\:appearance-none {\n appearance: none;\n }\n .msr\\:grid-cols-\\[78px_150px\\] {\n grid-template-columns: 78px 150px;\n }\n .msr\\:grid-cols-\\[78px_156px\\] {\n grid-template-columns: 78px 156px;\n }\n .msr\\:grid-cols-\\[78px_minmax\\(0\\,1fr\\)\\] {\n grid-template-columns: 78px minmax(0,1fr);\n }\n .msr\\:grid-cols-\\[minmax\\(0\\,1fr\\)_28px_34px\\] {\n grid-template-columns: minmax(0,1fr) 28px 34px;\n }\n .msr\\:flex-col {\n flex-direction: column;\n }\n .msr\\:items-center {\n align-items: center;\n }\n .msr\\:items-start {\n align-items: flex-start;\n }\n .msr\\:items-stretch {\n align-items: stretch;\n }\n .msr\\:justify-between {\n justify-content: space-between;\n }\n .msr\\:justify-center {\n justify-content: center;\n }\n .msr\\:justify-end {\n justify-content: flex-end;\n }\n .msr\\:gap-0 {\n gap: 0px;\n }\n .msr\\:gap-0\\.5 {\n gap: calc(var(--msr-spacing) * 0.5);\n }\n .msr\\:gap-1 {\n gap: var(--msr-spacing);\n }\n .msr\\:gap-1\\.5 {\n gap: calc(var(--msr-spacing) * 1.5);\n }\n .msr\\:gap-2 {\n gap: calc(var(--msr-spacing) * 2);\n }\n .msr\\:gap-3 {\n gap: calc(var(--msr-spacing) * 3);\n }\n .msr\\:gap-px {\n gap: 1px;\n }\n .msr\\:gap-x-3 {\n column-gap: calc(var(--msr-spacing) * 3);\n }\n .msr\\:gap-y-1 {\n row-gap: var(--msr-spacing);\n }\n .msr\\:self-stretch {\n align-self: stretch;\n }\n .msr\\:justify-self-end {\n justify-self: flex-end;\n }\n .msr\\:truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .msr\\:overflow-auto {\n overflow: auto;\n }\n .msr\\:overflow-hidden {\n overflow: hidden;\n }\n .msr\\:overflow-visible {\n overflow: visible;\n }\n .msr\\:overflow-x-hidden {\n overflow-x: hidden;\n }\n .msr\\:overflow-y-auto {\n overflow-y: auto;\n }\n .msr\\:rounded {\n border-radius: 0.25rem;\n }\n .msr\\:rounded-\\[3px\\] {\n border-radius: 3px;\n }\n .msr\\:rounded-\\[5px\\] {\n border-radius: 5px;\n }\n .msr\\:rounded-\\[6px\\] {\n border-radius: 6px;\n }\n .msr\\:rounded-\\[7px\\] {\n border-radius: 7px;\n }\n .msr\\:rounded-\\[8px\\] {\n border-radius: 8px;\n }\n .msr\\:rounded-\\[10px\\] {\n border-radius: 10px;\n }\n .msr\\:rounded-\\[12px\\] {\n border-radius: 12px;\n }\n .msr\\:rounded-full {\n border-radius: calc(infinity * 1px);\n }\n .msr\\:rounded-lg {\n border-radius: var(--msr-radius-lg);\n }\n .msr\\:rounded-md {\n border-radius: var(--msr-radius-md);\n }\n .msr\\:rounded-none {\n border-radius: 0;\n }\n .msr\\:border {\n border-style: var(--tw-border-style);\n border-width: 1px;\n }\n .msr\\:border-0 {\n border-style: var(--tw-border-style);\n border-width: 0px;\n }\n .msr\\:border-t {\n border-top-style: var(--tw-border-style);\n border-top-width: 1px;\n }\n .msr\\:border-t-2 {\n border-top-style: var(--tw-border-style);\n border-top-width: 2px;\n }\n .msr\\:border-r {\n border-right-style: var(--tw-border-style);\n border-right-width: 1px;\n }\n .msr\\:border-b {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 1px;\n }\n .msr\\:border-l {\n border-left-style: var(--tw-border-style);\n border-left-width: 1px;\n }\n .msr\\:border-dashed {\n --tw-border-style: dashed;\n border-style: dashed;\n }\n .msr\\:border-dotted {\n --tw-border-style: dotted;\n border-style: dotted;\n }\n .msr\\:border-solid {\n --tw-border-style: solid;\n border-style: solid;\n }\n .msr\\:border-\\[\\#0d99ff\\] {\n border-color: #0d99ff;\n }\n .msr\\:border-\\[\\#2563eb\\]\\/70 {\n border-color: color-mix(in oklab, #2563eb 70%, transparent);\n }\n .msr\\:border-black\\/8 {\n border-color: var(--msr-color-black);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--msr-color-black) 8%, transparent);\n }\n }\n .msr\\:border-black\\/10 {\n border-color: var(--msr-color-black);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--msr-color-black) 10%, transparent);\n }\n }\n .msr\\:border-black\\/15 {\n border-color: var(--msr-color-black);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--msr-color-black) 15%, transparent);\n }\n }\n .msr\\:border-ink-200 {\n border-color: var(--msr-color-ink-200);\n }\n .msr\\:border-ink-500 {\n border-color: var(--msr-color-ink-500);\n }\n .msr\\:border-ink-700 {\n border-color: var(--msr-color-ink-700);\n }\n .msr\\:border-red-200 {\n border-color: var(--msr-color-red-200);\n }\n .msr\\:border-transparent {\n border-color: transparent;\n }\n .msr\\:bg-\\[\\#0d99ff\\] {\n background-color: #0d99ff;\n }\n .msr\\:bg-\\[\\#0d99ff\\]\\/10 {\n background-color: color-mix(in oklab, #0d99ff 10%, transparent);\n }\n .msr\\:bg-\\[\\#2563eb\\] {\n background-color: #2563eb;\n }\n .msr\\:bg-\\[\\#fff\\] {\n background-color: #fff;\n }\n .msr\\:bg-black {\n background-color: var(--msr-color-black);\n }\n .msr\\:bg-black\\/10 {\n background-color: var(--msr-color-black);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--msr-color-black) 10%, transparent);\n }\n }\n .msr\\:bg-ink-50 {\n background-color: var(--msr-color-ink-50);\n }\n .msr\\:bg-ink-50\\/40 {\n background-color: var(--msr-color-ink-50);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--msr-color-ink-50) 40%, transparent);\n }\n }\n .msr\\:bg-ink-900\\/90 {\n background-color: var(--msr-color-ink-900);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--msr-color-ink-900) 90%, transparent);\n }\n }\n .msr\\:bg-transparent {\n background-color: transparent;\n }\n .msr\\:bg-white {\n background-color: var(--msr-color-white);\n }\n .msr\\:bg-white\\/60 {\n background-color: var(--msr-color-white);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--msr-color-white) 60%, transparent);\n }\n }\n .msr\\:p-0 {\n padding: 0px;\n }\n .msr\\:p-1 {\n padding: var(--msr-spacing);\n }\n .msr\\:p-1\\.5 {\n padding: calc(var(--msr-spacing) * 1.5);\n }\n .msr\\:p-2 {\n padding: calc(var(--msr-spacing) * 2);\n }\n .msr\\:p-3 {\n padding: calc(var(--msr-spacing) * 3);\n }\n .msr\\:p-px {\n padding: 1px;\n }\n .msr\\:px-0 {\n padding-inline: 0px;\n }\n .msr\\:px-0\\.5 {\n padding-inline: calc(var(--msr-spacing) * 0.5);\n }\n .msr\\:px-1 {\n padding-inline: var(--msr-spacing);\n }\n .msr\\:px-1\\.5 {\n padding-inline: calc(var(--msr-spacing) * 1.5);\n }\n .msr\\:px-2 {\n padding-inline: calc(var(--msr-spacing) * 2);\n }\n .msr\\:px-2\\.5 {\n padding-inline: calc(var(--msr-spacing) * 2.5);\n }\n .msr\\:py-0 {\n padding-block: 0px;\n }\n .msr\\:py-0\\.5 {\n padding-block: calc(var(--msr-spacing) * 0.5);\n }\n .msr\\:py-1 {\n padding-block: var(--msr-spacing);\n }\n .msr\\:py-1\\.5 {\n padding-block: calc(var(--msr-spacing) * 1.5);\n }\n .msr\\:py-2 {\n padding-block: calc(var(--msr-spacing) * 2);\n }\n .msr\\:pt-0\\.5 {\n padding-top: calc(var(--msr-spacing) * 0.5);\n }\n .msr\\:pt-2 {\n padding-top: calc(var(--msr-spacing) * 2);\n }\n .msr\\:pr-2 {\n padding-right: calc(var(--msr-spacing) * 2);\n }\n .msr\\:pr-6 {\n padding-right: calc(var(--msr-spacing) * 6);\n }\n .msr\\:pb-1 {\n padding-bottom: var(--msr-spacing);\n }\n .msr\\:pb-1\\.5 {\n padding-bottom: calc(var(--msr-spacing) * 1.5);\n }\n .msr\\:pb-2 {\n padding-bottom: calc(var(--msr-spacing) * 2);\n }\n .msr\\:text-center {\n text-align: center;\n }\n .msr\\:text-left {\n text-align: left;\n }\n .msr\\:font-mono {\n font-family: var(--msr-font-mono);\n }\n .msr\\:text-\\[9px\\] {\n font-size: 9px;\n }\n .msr\\:text-\\[10px\\] {\n font-size: 10px;\n }\n .msr\\:text-\\[11px\\] {\n font-size: 11px;\n }\n .msr\\:text-\\[12px\\] {\n font-size: 12px;\n }\n .msr\\:text-\\[14px\\] {\n font-size: 14px;\n }\n .msr\\:leading-4 {\n --tw-leading: calc(var(--msr-spacing) * 4);\n line-height: calc(var(--msr-spacing) * 4);\n }\n .msr\\:leading-\\[1\\.4\\] {\n --tw-leading: 1.4;\n line-height: 1.4;\n }\n .msr\\:leading-\\[1\\.45\\] {\n --tw-leading: 1.45;\n line-height: 1.45;\n }\n .msr\\:leading-\\[18px\\] {\n --tw-leading: 18px;\n line-height: 18px;\n }\n .msr\\:leading-none {\n --tw-leading: 1;\n line-height: 1;\n }\n .msr\\:font-medium {\n --tw-font-weight: var(--msr-font-weight-medium);\n font-weight: var(--msr-font-weight-medium);\n }\n .msr\\:font-normal {\n --tw-font-weight: var(--msr-font-weight-normal);\n font-weight: var(--msr-font-weight-normal);\n }\n .msr\\:font-semibold {\n --tw-font-weight: var(--msr-font-weight-semibold);\n font-weight: var(--msr-font-weight-semibold);\n }\n .msr\\:text-ellipsis {\n text-overflow: ellipsis;\n }\n .msr\\:whitespace-nowrap {\n white-space: nowrap;\n }\n .msr\\:whitespace-pre-wrap {\n white-space: pre-wrap;\n }\n .msr\\:text-\\[\\#64748b\\] {\n color: #64748b;\n }\n .msr\\:text-black {\n color: var(--msr-color-black);\n }\n .msr\\:text-black\\/30 {\n color: var(--msr-color-black);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--msr-color-black) 30%, transparent);\n }\n }\n .msr\\:text-black\\/45 {\n color: var(--msr-color-black);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--msr-color-black) 45%, transparent);\n }\n }\n .msr\\:text-ink-50 {\n color: var(--msr-color-ink-50);\n }\n .msr\\:text-ink-500 {\n color: var(--msr-color-ink-500);\n }\n .msr\\:text-ink-700 {\n color: var(--msr-color-ink-700);\n }\n .msr\\:text-ink-900 {\n color: var(--msr-color-ink-900);\n }\n .msr\\:text-red-600 {\n color: var(--msr-color-red-600);\n }\n .msr\\:text-white {\n color: var(--msr-color-white);\n }\n .msr\\:text-white\\/60 {\n color: var(--msr-color-white);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--msr-color-white) 60%, transparent);\n }\n }\n .msr\\:tabular-nums {\n --tw-numeric-spacing: tabular-nums;\n font-variant-numeric: var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,);\n }\n .msr\\:opacity-0 {\n opacity: 0%;\n }\n .msr\\:opacity-60 {\n opacity: 60%;\n }\n .msr\\:opacity-80 {\n opacity: 80%;\n }\n .msr\\:opacity-100 {\n opacity: 100%;\n }\n .msr\\:shadow-lg {\n --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .msr\\:shadow-sm {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .msr\\:outline {\n outline-style: var(--tw-outline-style);\n outline-width: 1px;\n }\n .msr\\:outline-transparent {\n outline-color: transparent;\n }\n .msr\\:transition-\\[max-width\\,opacity\\,transform\\,padding\\] {\n transition-property: max-width,opacity,transform,padding;\n transition-timing-function: var(--tw-ease, var(--msr-default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--msr-default-transition-duration));\n }\n .msr\\:transition-\\[width\\,opacity\\] {\n transition-property: width,opacity;\n transition-timing-function: var(--tw-ease, var(--msr-default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--msr-default-transition-duration));\n }\n .msr\\:transition-colors {\n transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;\n transition-timing-function: var(--tw-ease, var(--msr-default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--msr-default-transition-duration));\n }\n .msr\\:transition-opacity {\n transition-property: opacity;\n transition-timing-function: var(--tw-ease, var(--msr-default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--msr-default-transition-duration));\n }\n .msr\\:transition-transform {\n transition-property: transform, translate, scale, rotate;\n transition-timing-function: var(--tw-ease, var(--msr-default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--msr-default-transition-duration));\n }\n .msr\\:transition-none {\n transition-property: none;\n }\n .msr\\:duration-150 {\n --tw-duration: 150ms;\n transition-duration: 150ms;\n }\n .msr\\:ease-\\[ease\\] {\n --tw-ease: ease;\n transition-timing-function: ease;\n }\n .msr\\:outline-none {\n --tw-outline-style: none;\n outline-style: none;\n }\n .msr\\:select-none {\n -webkit-user-select: none;\n user-select: none;\n }\n @media (hover: hover) {\n .msr\\:group-hover\\:border-ink-200:is(:where(.msr\\:group):hover *) {\n border-color: var(--msr-color-ink-200);\n }\n }\n .msr\\:focus-within\\:rounded-l-\\[5px\\]:focus-within {\n border-top-left-radius: 5px;\n border-bottom-left-radius: 5px;\n }\n .msr\\:focus-within\\:rounded-r-\\[5px\\]:focus-within {\n border-top-right-radius: 5px;\n border-bottom-right-radius: 5px;\n }\n .msr\\:focus-within\\:outline:focus-within {\n outline-style: var(--tw-outline-style);\n outline-width: 1px;\n }\n .msr\\:focus-within\\:outline-1:focus-within {\n outline-style: var(--tw-outline-style);\n outline-width: 1px;\n }\n .msr\\:focus-within\\:outline-offset-\\[-1px\\]:focus-within {\n outline-offset: -1px;\n }\n .msr\\:focus-within\\:outline-\\[\\#0d99ff\\]:focus-within {\n outline-color: #0d99ff;\n }\n .msr\\:focus-within\\:outline-\\[var\\(--msr-accent\\)\\]:focus-within {\n outline-color: var(--msr-accent);\n }\n @media (hover: hover) {\n .msr\\:hover\\:border-ink-200:hover {\n border-color: var(--msr-color-ink-200);\n }\n .msr\\:hover\\:bg-\\[\\#0b8eea\\]:hover {\n background-color: #0b8eea;\n }\n .msr\\:hover\\:bg-\\[\\#0d99ff\\]:hover {\n background-color: #0d99ff;\n }\n .msr\\:hover\\:bg-black\\/4:hover {\n background-color: var(--msr-color-black);\n }\n @supports (color: color-mix(in lab, red, red)) {\n .msr\\:hover\\:bg-black\\/4:hover {\n background-color: color-mix(in oklab, var(--msr-color-black) 4%, transparent);\n }\n }\n .msr\\:hover\\:bg-black\\/10:hover {\n background-color: var(--msr-color-black);\n }\n @supports (color: color-mix(in lab, red, red)) {\n .msr\\:hover\\:bg-black\\/10:hover {\n background-color: color-mix(in oklab, var(--msr-color-black) 10%, transparent);\n }\n }\n .msr\\:hover\\:bg-ink-50:hover {\n background-color: var(--msr-color-ink-50);\n }\n .msr\\:hover\\:bg-red-50:hover {\n background-color: var(--msr-color-red-50);\n }\n .msr\\:hover\\:text-ink-700:hover {\n color: var(--msr-color-ink-700);\n }\n .msr\\:hover\\:text-ink-900:hover {\n color: var(--msr-color-ink-900);\n }\n .msr\\:hover\\:text-white:hover {\n color: var(--msr-color-white);\n }\n .msr\\:hover\\:underline:hover {\n text-decoration-line: underline;\n }\n }\n .msr\\:focus\\:border-\\[\\#0d99ff\\]:focus {\n border-color: #0d99ff;\n }\n .msr\\:focus\\:shadow-\\[inset_0_0_0_1px_\\#0d99ff\\]:focus {\n --tw-shadow: inset 0 0 0 1px var(--tw-shadow-color, #0d99ff);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .msr\\:focus\\:shadow-\\[inset_0_0_0_1px_var\\(--msr-accent\\)\\]:focus {\n --tw-shadow: inset 0 0 0 1px var(--tw-shadow-color, var(--msr-accent));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .msr\\:focus\\:outline-none:focus {\n --tw-outline-style: none;\n outline-style: none;\n }\n .msr\\:focus-visible\\:border-\\[\\#0d99ff\\]:focus-visible {\n border-color: #0d99ff;\n }\n .msr\\:focus-visible\\:bg-\\[\\#0d99ff\\]:focus-visible {\n background-color: #0d99ff;\n }\n .msr\\:focus-visible\\:text-white:focus-visible {\n color: var(--msr-color-white);\n }\n .msr\\:focus-visible\\:shadow-\\[inset_0_0_0_1px_\\#0d99ff\\]:focus-visible {\n --tw-shadow: inset 0 0 0 1px var(--tw-shadow-color, #0d99ff);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .msr\\:focus-visible\\:shadow-\\[inset_0_0_0_1px_\\#ef4444\\]:focus-visible {\n --tw-shadow: inset 0 0 0 1px var(--tw-shadow-color, #ef4444);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .msr\\:focus-visible\\:ring-1:focus-visible {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .msr\\:focus-visible\\:ring-\\[\\#0d99ff\\]\\/25:focus-visible {\n --tw-ring-color: color-mix(in oklab, #0d99ff 25%, transparent);\n }\n .msr\\:focus-visible\\:outline-none:focus-visible {\n --tw-outline-style: none;\n outline-style: none;\n }\n .msr\\:disabled\\:cursor-default:disabled {\n cursor: default;\n }\n .msr\\:disabled\\:opacity-40:disabled {\n opacity: 40%;\n }\n .msr\\:disabled\\:opacity-45:disabled {\n opacity: 45%;\n }\n @media (prefers-reduced-motion: reduce) {\n .msr\\:motion-reduce\\:transition-none {\n transition-property: none;\n }\n }\n}\n:root, :host {\n --color-ink-50: #f8fafc;\n --color-ink-200: #e2e8f0;\n --color-ink-500: #64748b;\n --color-ink-700: #334155;\n --color-ink-900: #0f172a;\n}\n:host {\n all: initial;\n display: block;\n color-scheme: light;\n color: #0f172a;\n font-family: ui-sans-serif, system-ui, sans-serif;\n font-size: 16px;\n font-weight: 400;\n line-height: 1.5;\n letter-spacing: normal;\n direction: ltr;\n --msr-spacing: 4px;\n}\n*, *::before, *::after {\n box-sizing: border-box;\n}\n@layer base {\n *, ::before, ::after, ::backdrop {\n --tw-border-style: solid;\n --tw-outline-style: solid;\n --tw-shadow: 0 0 #0000;\n --tw-inset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-inset-ring-shadow: 0 0 #0000;\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-translate-z: 0;\n }\n button, input, select, textarea {\n appearance: none;\n background-color: transparent;\n padding: 0;\n font: inherit;\n color: inherit;\n letter-spacing: inherit;\n }\n}\n.mesurer-toolbar-surface {\n box-shadow: 0 0 0.5px rgba(0, 0, 0, 0.18), 0 3px 8px rgba(0, 0, 0, 0.1), 0 1px 3px rgba(0, 0, 0, 0.1);\n}\n.mesurer-menu-surface {\n box-shadow: 0 10px 30px rgba(0, 0, 0, 0.08);\n}\n.mesurer-color-picker {\n border: 1px solid rgba(0, 0, 0, 0.1);\n box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n}\n.mesurer-settings-tabs {\n box-shadow: inset 0 0 0 1px rgba(15, 23, 42, 0.08);\n}\n.mesurer-settings-tab[aria-selected=\"true\"] {\n box-shadow: 0 0 0 1px rgba(15, 23, 42, 0.12);\n}\n.mesurer-switch-track {\n box-sizing: border-box;\n border: 1px solid #e2e8f0;\n}\n.mesurer-switch-track[data-checked=\"true\"] {\n border-color: #0d99ff;\n}\n.mesurer-control-shell {\n border: 1px solid transparent;\n}\n.mesurer-control-shell:hover {\n border-color: #e2e8f0;\n}\n.mesurer-control-focus:focus-within {\n outline: 1px solid #0d99ff;\n outline-offset: -1px;\n}\n.mesurer-root {\n --msr-spacing: 4px;\n}\nbody [data-mesurer-native-scroll-anchor=\"box\"][data-mesurer-nested-scroll-compensation=\"true\"] {\n position: absolute !important;\n left: calc(anchor(left) + var(--mesurer-nested-scroll-x, 0px)) !important;\n top: calc(anchor(top) + var(--mesurer-nested-scroll-y, 0px)) !important;\n}\nbody [data-mesurer-native-scroll-anchor=\"label\"][data-mesurer-nested-scroll-compensation=\"true\"] {\n position: absolute !important;\n left: calc(anchor(center) + var(--mesurer-nested-scroll-x, 0px)) !important;\n top: calc(anchor(bottom) + 2px + var(--mesurer-nested-scroll-y, 0px)) !important;\n}\nbody [data-mesurer-native-scroll-anchor=\"offset\"][data-mesurer-nested-scroll-compensation=\"true\"] {\n position: absolute !important;\n left: calc(anchor(left) + var(--mesurer-native-anchor-x, 0px) + var(--mesurer-nested-scroll-x, 0px)) !important;\n top: calc(anchor(top) + var(--mesurer-native-anchor-y, 0px) + var(--mesurer-nested-scroll-y, 0px)) !important;\n}\n[data-mesurer-text-edit-ring=\"true\"], [data-mesurer-text-selection-highlight=\"true\"], [data-mesurer-text-caret=\"true\"] {\n z-index: 2147482900 !important;\n}\n[data-mesurer-text-inspector-placement-shell=\"true\"], .mesurer-ti-card {\n z-index: 2147483647 !important;\n}\n[data-mesurer-context-root=\"true\"] [data-mesurer-annotation-scroll-mode=\"document\"] {\n position: absolute !important;\n}\n[data-mesurer-annotation-scroll-mode=\"native-anchor\"] {\n position: fixed !important;\n}\n[data-mesurer-native-scroll-anchor=\"offset\"][data-mesurer-nested-scroll-compensation=\"true\"][data-mesurer-annotation-scroll-mode=\"native-anchor\"] {\n position: fixed !important;\n}\n[data-mesurer-annotation-badge=\"true\"] {\n width: 20px !important;\n height: 20px !important;\n transform: none !important;\n transition: width 150ms ease, height 150ms ease, background 150ms ease, color 150ms ease, box-shadow 150ms ease !important;\n}\n[data-mesurer-annotation-marker=\"true\"][data-mesurer-annotation-highlighted=\"true\"] > [data-mesurer-annotation-badge=\"true\"] {\n width: 24px !important;\n height: 24px !important;\n}\n[data-mesurer-root=\"true\"][data-mesurer-direct-text-edit-active=\"true\"] [data-mesurer-annotation-trigger=\"true\"], [data-mesurer-context-root=\"true\"][data-mesurer-direct-text-edit-active=\"true\"] [data-mesurer-annotation-trigger=\"true\"] {\n display: none !important;\n}\n[data-mesurer-plugin-settings] [role=\"switch\"] {\n grid-template-columns: minmax(0, 1fr) auto;\n}\n[data-mesurer-plugin-settings] [role=\"switch\"] > span:first-child {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n[data-mesurer-plugin-settings-disclosure=\"plugins\"] {\n width: calc(100% + 16px);\n margin-inline: -8px;\n}\n.mesurer-solid-root {\n position: fixed;\n inset: 0;\n z-index: 2147483000;\n pointer-events: none;\n --msr-spacing: 4px;\n}\n.mesurer-solid-root [role=\"slider\"] {\n border: 0;\n}\n[data-mesurer-distance-kind=\"selection-spacing\"][data-mesurer-distance-active=\"true\"] [data-mesurer-distance-hover-target=\"true\"] {\n opacity: 1 !important;\n}\n[data-mesurer-distance-kind=\"selection-spacing\"][data-mesurer-distance-active=\"true\"]:has([data-mesurer-distance-label-axis=\"x\"]:hover) [data-mesurer-distance-line^=\"vertical\"], [data-mesurer-distance-kind=\"selection-spacing\"][data-mesurer-distance-active=\"true\"]:has([data-mesurer-distance-label-axis=\"y\"]:hover) [data-mesurer-distance-line^=\"horizontal\"], [data-mesurer-distance-kind=\"selection-spacing\"][data-mesurer-distance-active=\"true\"]:has([data-mesurer-distance-label-axis]:hover) [data-mesurer-distance-connector=\"true\"] {\n opacity: 0.16 !important;\n}\nbody.mesurer-solid-xray * {\n outline: solid 1px blue !important;\n}\nbody.mesurer-solid-xray [data-mesurer-root], body.mesurer-solid-xray [data-mesurer-root] *, body.mesurer-solid-xray [data-mesurer-inspector-ui], body.mesurer-solid-xray [data-mesurer-inspector-ui] *, body.mesurer-solid-xray .mesurer-toolbar-surface, body.mesurer-solid-xray .mesurer-toolbar-surface *, body.mesurer-solid-xray .mesurer-ti-box, body.mesurer-solid-xray .mesurer-ti-card, body.mesurer-solid-xray .mesurer-ti-card *, body.mesurer-solid-xray .mesurer-ti-close {\n outline: none !important;\n}\n[data-mesurer-toolbar=\"true\"] > div:has(> [data-mesurer-toolbar-compact-item]) {\n transition: padding-inline 150ms ease;\n}\n[data-mesurer-toolbar=\"true\"][data-mesurer-toolbar-compact=\"true\"] > div:has(> [data-mesurer-toolbar-compact-item]):not(:has(> [data-mesurer-toolbar-compact-item][data-visible=\"true\"])) {\n padding-inline: 0;\n}\n[data-mesurer-selected-measurement=\"true\"]:has(> [data-mesurer-native-scroll-anchor=\"box\"]) {\n display: contents !important;\n}\n@media (prefers-reduced-motion: reduce) {\n [data-mesurer-toolbar=\"true\"] > div:has(> [data-mesurer-toolbar-compact-item]) {\n transition: none;\n }\n [data-mesurer-annotation-badge=\"true\"] {\n transition: none !important;\n }\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) {\n --msr-accent: #0d99ff;\n --msr-surface: #fff;\n --msr-surface-raised: #fff;\n --msr-surface-muted: #f8fafc;\n --msr-content: #18181b;\n --msr-color-white: #fff;\n --msr-color-black: #000;\n --msr-color-ink-50: #f8fafc;\n --msr-color-ink-100: #f1f5f9;\n --msr-color-ink-200: #e2e8f0;\n --msr-color-ink-300: #cbd5e1;\n --msr-color-ink-500: #64748b;\n --msr-color-ink-700: #334155;\n --msr-color-ink-900: #18181b;\n --color-ink-50: var(--msr-color-ink-50);\n --color-ink-100: var(--msr-color-ink-100);\n --color-ink-200: var(--msr-color-ink-200);\n --color-ink-300: var(--msr-color-ink-300);\n --color-ink-500: var(--msr-color-ink-500);\n --color-ink-700: var(--msr-color-ink-700);\n --color-ink-900: var(--msr-color-ink-900);\n --msr-danger-bg: #fef2f2;\n --msr-danger-border: #fecaca;\n --msr-danger-text: #dc2626;\n --msr-danger-solid-bg: #dc2626;\n --msr-danger-solid-hover: #b91c1c;\n --msr-danger-solid-text: #fff;\n --color-red-50: var(--msr-danger-bg);\n --color-red-200: var(--msr-danger-border);\n --color-red-600: var(--msr-danger-text);\n --color-red-700: #b91c1c;\n --msr-control-thumb: #fff;\n --msr-slider-track: rgba(15, 23, 42, 0.16);\n --msr-shadow-toolbar: 0 0 0.4px rgba(0, 0, 0, 0.22),\n 0 6px 18px rgba(0, 0, 0, 0.03),\n 0 3px 9px rgba(0, 0, 0, 0.06),\n 0 1px 1px rgba(0, 0, 0, 0.06);\n --msr-shadow-floating: 0 0 0 0.4px rgba(0, 0, 0, 0.22),\n 0 6px 18px rgba(0, 0, 0, 0.03),\n 0 3px 9px rgba(0, 0, 0, 0.06),\n 0 1px 1px rgba(0, 0, 0, 0.06);\n --msr-shadow-select-menu: var(--msr-shadow-floating);\n color: var(--msr-content);\n color-scheme: light;\n}\n:where( [data-mesurer-root=\"true\"][data-theme=\"dark\"], [data-mesurer-inspector-ui=\"true\"][data-theme=\"dark\"] ) {\n --msr-accent: #0c8ce9;\n --msr-surface: #323232;\n --msr-surface-raised: #3a3a3a;\n --msr-surface-muted: #3a3a3a;\n --msr-content: #f5f5f5;\n --msr-color-white: #f5f5f5;\n --msr-color-black: #171717;\n --msr-color-ink-50: #3a3a3a;\n --msr-color-ink-100: #414141;\n --msr-color-ink-200: #4a4a4a;\n --msr-color-ink-300: #5a5a5a;\n --msr-color-ink-500: #a0a0a0;\n --msr-color-ink-700: #dedede;\n --msr-color-ink-900: #f5f5f5;\n --msr-danger-bg: #3f2020;\n --msr-danger-border: #7f3f46;\n --msr-danger-text: #f87171;\n --msr-danger-solid-bg: #c95058;\n --msr-danger-solid-hover: #b7424b;\n --msr-danger-solid-text: #f5f5f5;\n --color-red-700: #fca5a5;\n --msr-control-thumb: #f4f4f5;\n --msr-slider-track: rgba(245, 245, 245, 0.24);\n --msr-shadow-toolbar: 0 0 0.4px lch(100% 0 0 / 0.10),\n 0 3px 8px lch(0% 0 0 / 0.125),\n 0 2px 5px lch(0% 0 0 / 0.125),\n 0 1px 1px lch(0% 0 0 / 0.125);\n --msr-shadow-floating: 0 0 0 0.4px lch(100% 0 0 / 0.05),\n 0 4px 12px lch(0% 0 0 / 0.12),\n 0 1px 3px lch(0% 0 0 / 0.10);\n --msr-shadow-select-menu: 0 0 0 0.4px lch(100% 0 0 / 0.14),\n 0 4px 12px lch(0% 0 0 / 0.22),\n 0 1px 3px lch(0% 0 0 / 0.18);\n color-scheme: dark;\n}\n@media (prefers-color-scheme: dark) {\n :where( [data-mesurer-root=\"true\"][data-theme=\"system\"], [data-mesurer-inspector-ui=\"true\"][data-theme=\"system\"] ) {\n --msr-accent: #0c8ce9;\n --msr-surface: #323232;\n --msr-surface-raised: #3a3a3a;\n --msr-surface-muted: #3a3a3a;\n --msr-content: #f5f5f5;\n --msr-color-white: #f5f5f5;\n --msr-color-black: #171717;\n --msr-color-ink-50: #3a3a3a;\n --msr-color-ink-100: #414141;\n --msr-color-ink-200: #4a4a4a;\n --msr-color-ink-300: #5a5a5a;\n --msr-color-ink-500: #a0a0a0;\n --msr-color-ink-700: #dedede;\n --msr-color-ink-900: #f5f5f5;\n --msr-danger-bg: #3f2020;\n --msr-danger-border: #7f3f46;\n --msr-danger-text: #f87171;\n --msr-danger-solid-bg: #c95058;\n --msr-danger-solid-hover: #b7424b;\n --msr-danger-solid-text: #f5f5f5;\n --color-red-700: #fca5a5;\n --msr-control-thumb: #f4f4f5;\n --msr-slider-track: rgba(245, 245, 245, 0.24);\n --msr-shadow-toolbar: 0 0 0.4px lch(100% 0 0 / 0.10),\n 0 3px 8px lch(0% 0 0 / 0.125),\n 0 2px 5px lch(0% 0 0 / 0.125),\n 0 1px 1px lch(0% 0 0 / 0.125);\n --msr-shadow-floating: 0 0 0 0.4px lch(100% 0 0 / 0.05),\n 0 4px 12px lch(0% 0 0 / 0.12),\n 0 1px 3px lch(0% 0 0 / 0.10);\n --msr-shadow-select-menu: 0 0 0 0.4px lch(100% 0 0 / 0.14),\n 0 4px 12px lch(0% 0 0 / 0.22),\n 0 1px 3px lch(0% 0 0 / 0.18);\n color-scheme: dark;\n }\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) [class~=\"msr:bg-white\"], :where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) [class~=\"msr:bg-[#fff]\"] {\n background-color: var(--msr-surface) !important;\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) [class~=\"msr:text-black\"] {\n color: var(--msr-content) !important;\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) [class~=\"msr:hover:bg-black/4\"]:hover, :where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) [class~=\"msr:hover:bg-black/5\"]:hover {\n background-color: var(--msr-content) !important;\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in srgb, var(--msr-content) 6%, transparent) !important;\n }\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) .mesurer-toolbar-surface {\n background-color: var(--msr-surface) !important;\n box-shadow: var(--msr-shadow-toolbar) !important;\n color: var(--msr-content);\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) :is( .mesurer-menu-surface, .mesurer-color-picker, .mesurer-ti-card, [data-mesurer-text-inspector-info=\"true\"], [data-mesurer-annotation-panel=\"true\"], [data-mesurer-annotation-composer=\"true\"] ) {\n background-color: var(--msr-surface-raised) !important;\n color: var(--msr-content) !important;\n box-shadow: var(--msr-shadow-floating) !important;\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) .mesurer-switch-track[data-checked=\"false\"], :where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) .mesurer-control-shell {\n background-color: var(--msr-surface-muted) !important;\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) .mesurer-switch-track > span {\n background-color: var(--msr-control-thumb) !important;\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) :is(.mesurer-settings-select, .mesurer-settings-select-menu) {\n background-color: var(--msr-surface-raised) !important;\n border-color: var(--msr-color-ink-200) !important;\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) [data-mesurer-rulers=\"true\"] {\n color: var(--msr-color-ink-500) !important;\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) [data-slider-container=\"true\"] > div:first-child {\n background-color: var(--msr-slider-track) !important;\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) [class~=\"msr:bg-[#0d99ff]\"] {\n background-color: var(--msr-accent) !important;\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) [class~=\"msr:border-[#0d99ff]\"] {\n border-color: var(--msr-accent) !important;\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) [class~=\"msr:hover:bg-[#0d99ff]\"]:hover, :where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) [class~=\"msr:focus-visible:bg-[#0d99ff]\"]:focus-visible {\n background-color: var(--msr-accent) !important;\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) [class~=\"msr:text-white\"] {\n color: var(--msr-color-white) !important;\n}\n:where( [data-mesurer-root=\"true\"][data-theme], [data-mesurer-inspector-ui=\"true\"][data-theme] ) [data-slider-thumb=\"true\"]:focus-visible {\n box-shadow: 0 0 0 1px var(--msr-accent) !important;\n @supports (color: color-mix(in lab, red, red)) {\n box-shadow: 0 0 0 1px color-mix(in srgb, var(--msr-accent) 25%, transparent) !important;\n }\n}\n:where([data-mesurer-root=\"true\"], [data-mesurer-inspector-ui=\"true\"]) {\n --msr-radius-control: 5px;\n}\n@layer utilities {\n .msr\\:rounded-control {\n border-radius: var(--msr-radius-control);\n }\n}\n.mesurer-thin-scrollbar {\n scrollbar-width: thin;\n scrollbar-color: var(--msr-color-ink-200) transparent;\n}\n.mesurer-thin-scrollbar::-webkit-scrollbar {\n width: 4px;\n height: 4px;\n}\n.mesurer-thin-scrollbar::-webkit-scrollbar-track {\n background: transparent;\n}\n.mesurer-thin-scrollbar::-webkit-scrollbar-thumb {\n background: var(--msr-color-ink-200);\n border-radius: var(--msr-radius-control);\n}\n.mesurer-thin-scrollbar:hover {\n scrollbar-color: var(--msr-color-ink-300) transparent;\n}\n.mesurer-thin-scrollbar:hover::-webkit-scrollbar-thumb {\n background: var(--msr-color-ink-300);\n}\n.mesurer-thin-scrollbar::-webkit-scrollbar-corner {\n background: transparent;\n}\n@property --tw-translate-x {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-translate-y {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-translate-z {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-border-style {\n syntax: \"*\";\n inherits: false;\n initial-value: solid;\n}\n@property --tw-leading {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-font-weight {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ordinal {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-slashed-zero {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-numeric-figure {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-numeric-spacing {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-numeric-fraction {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-shadow-alpha {\n syntax: \"<percentage>\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-inset-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-inset-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-inset-shadow-alpha {\n syntax: \"<percentage>\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-ring-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ring-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-inset-ring-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-inset-ring-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-ring-inset {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ring-offset-width {\n syntax: \"<length>\";\n inherits: false;\n initial-value: 0px;\n}\n@property --tw-ring-offset-color {\n syntax: \"*\";\n inherits: false;\n initial-value: #fff;\n}\n@property --tw-ring-offset-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-outline-style {\n syntax: \"*\";\n inherits: false;\n initial-value: solid;\n}\n@property --tw-duration {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ease {\n syntax: \"*\";\n inherits: false;\n}\n@layer properties {\n @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {\n *, ::before, ::after, ::backdrop {\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-translate-z: 0;\n --tw-border-style: solid;\n --tw-leading: initial;\n --tw-font-weight: initial;\n --tw-ordinal: initial;\n --tw-slashed-zero: initial;\n --tw-numeric-figure: initial;\n --tw-numeric-spacing: initial;\n --tw-numeric-fraction: initial;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-color: initial;\n --tw-shadow-alpha: 100%;\n --tw-inset-shadow: 0 0 #0000;\n --tw-inset-shadow-color: initial;\n --tw-inset-shadow-alpha: 100%;\n --tw-ring-color: initial;\n --tw-ring-shadow: 0 0 #0000;\n --tw-inset-ring-color: initial;\n --tw-inset-ring-shadow: 0 0 #0000;\n --tw-ring-inset: initial;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-outline-style: solid;\n --tw-duration: initial;\n --tw-ease: initial;\n }\n }\n}\n", Vf = 0, Hf = "mesurer:tab-id", Uf = "mesurer-settings", Wf = "mesurer-state", Gf = 80, Kf = (e, t) => {
|
|
9847
9857
|
try {
|
|
9848
9858
|
let n = e.sessionStorage.getItem(`${t}:toolbar-position`);
|
|
9849
9859
|
if (!n) return;
|
|
@@ -10825,21 +10835,72 @@ var $f = "mesurer.presentation.preferences", ep = "presentation", tp = {
|
|
|
10825
10835
|
}, W = () => {
|
|
10826
10836
|
for (let [e, t] of h) t.value || t.priority ? e.style.setProperty("visibility", t.value, t.priority) : e.style.removeProperty("visibility");
|
|
10827
10837
|
h.clear();
|
|
10828
|
-
}, ee = (e
|
|
10838
|
+
}, ee = (e) => {
|
|
10839
|
+
if (e.parentElement instanceof c.HTMLElement) return e.parentElement;
|
|
10840
|
+
let t = e.getRootNode();
|
|
10841
|
+
return t instanceof c.ShadowRoot && t.host instanceof c.HTMLElement ? t.host : null;
|
|
10842
|
+
}, te = (e, t) => {
|
|
10843
|
+
let n = ee(e);
|
|
10844
|
+
for (; n;) {
|
|
10845
|
+
let e = t.get(n);
|
|
10846
|
+
if (e) return e;
|
|
10847
|
+
n = ee(n);
|
|
10848
|
+
}
|
|
10849
|
+
return {
|
|
10850
|
+
x: 0,
|
|
10851
|
+
y: 0
|
|
10852
|
+
};
|
|
10853
|
+
}, ne = (e = k()) => {
|
|
10829
10854
|
let t = /* @__PURE__ */ new Map();
|
|
10830
10855
|
for (let n of e) for (let e of n.targets) {
|
|
10831
10856
|
let n = N(e);
|
|
10832
|
-
n && t.set(n,
|
|
10833
|
-
x: e.desiredOffsetX,
|
|
10834
|
-
y: e.desiredOffsetY
|
|
10835
|
-
});
|
|
10857
|
+
n && t.set(n, e);
|
|
10836
10858
|
}
|
|
10837
10859
|
return t;
|
|
10838
|
-
},
|
|
10860
|
+
}, re = (e) => e.offsetSpace !== "local" || e.desiredLocalOffsetX === null || e.desiredLocalOffsetY === null ? null : {
|
|
10861
|
+
x: e.desiredLocalOffsetX,
|
|
10862
|
+
y: e.desiredLocalOffsetY
|
|
10863
|
+
}, ie = (e, t) => {
|
|
10864
|
+
let n = ee(e);
|
|
10865
|
+
for (; n;) {
|
|
10866
|
+
if (t.has(n)) return n;
|
|
10867
|
+
n = ee(n);
|
|
10868
|
+
}
|
|
10869
|
+
return null;
|
|
10870
|
+
}, ae = (e = k(), t = /* @__PURE__ */ new Map()) => {
|
|
10871
|
+
let n = ne(e), r = /* @__PURE__ */ new Set([...n.keys(), ...t.keys()]), i = /* @__PURE__ */ new Map(), a = /* @__PURE__ */ new Set(), o = (e) => {
|
|
10872
|
+
let s = i.get(e);
|
|
10873
|
+
if (s) return s;
|
|
10874
|
+
let c = n.get(e), l = t.get(e) ?? (c ? re(c) : null);
|
|
10875
|
+
if (!l && c) {
|
|
10876
|
+
let t = {
|
|
10877
|
+
x: c.desiredOffsetX,
|
|
10878
|
+
y: c.desiredOffsetY
|
|
10879
|
+
};
|
|
10880
|
+
return i.set(e, t), t;
|
|
10881
|
+
}
|
|
10882
|
+
if (!l) return {
|
|
10883
|
+
x: 0,
|
|
10884
|
+
y: 0
|
|
10885
|
+
};
|
|
10886
|
+
if (a.has(e)) return l;
|
|
10887
|
+
a.add(e);
|
|
10888
|
+
let u = ie(e, r), d = u ? o(u) : {
|
|
10889
|
+
x: 0,
|
|
10890
|
+
y: 0
|
|
10891
|
+
}, f = {
|
|
10892
|
+
x: d.x + l.x,
|
|
10893
|
+
y: d.y + l.y
|
|
10894
|
+
};
|
|
10895
|
+
return a.delete(e), i.set(e, f), f;
|
|
10896
|
+
};
|
|
10897
|
+
for (let e of r) o(e);
|
|
10898
|
+
return i;
|
|
10899
|
+
}, oe = () => {
|
|
10839
10900
|
if (_.state === "live") return /* @__PURE__ */ new Map();
|
|
10840
|
-
if (!_.intentId) return
|
|
10901
|
+
if (!_.intentId) return ae();
|
|
10841
10902
|
let e = w().intents.find((e) => e.id === _.intentId);
|
|
10842
|
-
if (!e) return
|
|
10903
|
+
if (!e) return ae();
|
|
10843
10904
|
let t = /* @__PURE__ */ new Map();
|
|
10844
10905
|
for (let n of e.targets) {
|
|
10845
10906
|
let e = N(n);
|
|
@@ -10852,25 +10913,10 @@ var $f = "mesurer.presentation.preferences", ep = "presentation", tp = {
|
|
|
10852
10913
|
});
|
|
10853
10914
|
}
|
|
10854
10915
|
return t;
|
|
10855
|
-
},
|
|
10856
|
-
if (e.parentElement instanceof c.HTMLElement) return e.parentElement;
|
|
10857
|
-
let t = e.getRootNode();
|
|
10858
|
-
return t instanceof c.ShadowRoot && t.host instanceof c.HTMLElement ? t.host : null;
|
|
10859
|
-
}, re = (e, t) => {
|
|
10860
|
-
let n = ne(e);
|
|
10861
|
-
for (; n;) {
|
|
10862
|
-
let e = t.get(n);
|
|
10863
|
-
if (e) return e;
|
|
10864
|
-
n = ne(n);
|
|
10865
|
-
}
|
|
10866
|
-
return {
|
|
10867
|
-
x: 0,
|
|
10868
|
-
y: 0
|
|
10869
|
-
};
|
|
10870
|
-
}, ie = (e) => {
|
|
10916
|
+
}, se = (e) => {
|
|
10871
10917
|
let t = [...e].flatMap(([t, n]) => {
|
|
10872
10918
|
if (!t.isConnected || !j(t)) return [];
|
|
10873
|
-
let r =
|
|
10919
|
+
let r = te(t, e), i = {
|
|
10874
10920
|
x: n.x - r.x,
|
|
10875
10921
|
y: n.y - r.y
|
|
10876
10922
|
};
|
|
@@ -10890,25 +10936,25 @@ var $f = "mesurer.presentation.preferences", ep = "presentation", tp = {
|
|
|
10890
10936
|
});
|
|
10891
10937
|
}
|
|
10892
10938
|
L(n);
|
|
10893
|
-
},
|
|
10939
|
+
}, ce = () => se(oe()), le = (e) => {
|
|
10894
10940
|
z();
|
|
10895
10941
|
try {
|
|
10896
10942
|
return e();
|
|
10897
10943
|
} finally {
|
|
10898
|
-
!x && !v &&
|
|
10944
|
+
!x && !v && ce();
|
|
10899
10945
|
}
|
|
10900
|
-
},
|
|
10946
|
+
}, ue = () => i.currentSelection().elements.filter((e) => e instanceof c.HTMLElement && e.isConnected && j(e));
|
|
10901
10947
|
e.state.register({
|
|
10902
10948
|
id: _p,
|
|
10903
|
-
initial:
|
|
10949
|
+
initial: ue().length > 0
|
|
10904
10950
|
});
|
|
10905
|
-
let
|
|
10906
|
-
let t =
|
|
10907
|
-
t !==
|
|
10908
|
-
},
|
|
10951
|
+
let de = () => e.state.get(_p) ?? !1, fe = () => {
|
|
10952
|
+
let t = ue().length > 0;
|
|
10953
|
+
t !== de() && e.state.update(_p, () => t);
|
|
10954
|
+
}, pe = () => Ap(ue().map((e) => Pu(e))), me = () => {
|
|
10909
10955
|
for (let e of g.values()) e.remove();
|
|
10910
10956
|
g.clear();
|
|
10911
|
-
},
|
|
10957
|
+
}, he = (e) => {
|
|
10912
10958
|
let t = e.getBoundingClientRect(), n = t.right + wp;
|
|
10913
10959
|
n + Cp > r.innerWidth - 4 && (n = Math.max(4, t.left - Cp - wp));
|
|
10914
10960
|
let i = Math.min(Math.max(4, t.top + Tp), Math.max(4, r.innerHeight - Cp - 4));
|
|
@@ -10916,27 +10962,34 @@ var $f = "mesurer.presentation.preferences", ep = "presentation", tp = {
|
|
|
10916
10962
|
left: n,
|
|
10917
10963
|
top: i
|
|
10918
10964
|
};
|
|
10919
|
-
},
|
|
10965
|
+
}, ge = () => {
|
|
10920
10966
|
if (!T() || v) {
|
|
10921
|
-
|
|
10967
|
+
me();
|
|
10922
10968
|
return;
|
|
10923
10969
|
}
|
|
10924
|
-
let t =
|
|
10925
|
-
for (let
|
|
10926
|
-
let
|
|
10927
|
-
if (!
|
|
10928
|
-
|
|
10929
|
-
|
|
10930
|
-
|
|
10931
|
-
|
|
10970
|
+
let t = k(), r = ne(t), i = ae(t), a = /* @__PURE__ */ new Set();
|
|
10971
|
+
for (let t of ue()) {
|
|
10972
|
+
let o = r.get(t);
|
|
10973
|
+
if (!o) continue;
|
|
10974
|
+
let s = i.get(t);
|
|
10975
|
+
if (!s) continue;
|
|
10976
|
+
let c = te(t, i), u = re(o) ?? {
|
|
10977
|
+
x: s.x - c.x,
|
|
10978
|
+
y: s.y - c.y
|
|
10979
|
+
};
|
|
10980
|
+
if (Math.abs(u.x) <= Ep && Math.abs(u.y) <= Ep) continue;
|
|
10981
|
+
a.add(t);
|
|
10982
|
+
let d = g.get(t);
|
|
10983
|
+
d || (d = n.createElement("button"), d.type = "button", d.dataset.mesurerArrangeReset = "true", d.dataset.mesurerInspectorUi = "true", d.setAttribute("aria-label", "Reset position"), d.title = "Reset position", d.textContent = "↺", d.className = "msr:pointer-events-auto msr:flex msr:size-6 msr:items-center msr:justify-center msr:rounded-[7px] msr:border msr:border-ink-200 msr:bg-white msr:text-[14px] msr:leading-none msr:text-black msr:outline-none msr:hover:bg-ink-50 msr:focus-visible:border-[#0d99ff]", d.style.position = "fixed", d.addEventListener("pointerdown", (e) => e.stopPropagation()), d.addEventListener("click", (n) => {
|
|
10984
|
+
n.preventDefault(), n.stopPropagation(), b = [t], e.command.execute(hp, void 0, { source: "arrange-reset-button" }).catch(() => {
|
|
10932
10985
|
b = null;
|
|
10933
10986
|
});
|
|
10934
|
-
}), g.set(
|
|
10935
|
-
let
|
|
10936
|
-
|
|
10987
|
+
}), g.set(t, d), l.append(d));
|
|
10988
|
+
let f = he(t);
|
|
10989
|
+
d.style.left = `${f.left}px`, d.style.top = `${f.top}px`;
|
|
10937
10990
|
}
|
|
10938
|
-
for (let [e, t] of g)
|
|
10939
|
-
},
|
|
10991
|
+
for (let [e, t] of g) a.has(e) || (t.remove(), g.delete(e));
|
|
10992
|
+
}, _e = (t) => {
|
|
10940
10993
|
let n = new Set(t);
|
|
10941
10994
|
n.size && (e.state.update("mesurer.arrange.intents", (e) => {
|
|
10942
10995
|
let t = !1, r = e.intents.flatMap((e) => {
|
|
@@ -10951,13 +11004,13 @@ var $f = "mesurer.presentation.preferences", ep = "presentation", tp = {
|
|
|
10951
11004
|
}] : [];
|
|
10952
11005
|
});
|
|
10953
11006
|
return t ? { intents: r } : e;
|
|
10954
|
-
}),
|
|
10955
|
-
},
|
|
11007
|
+
}), xe(), be());
|
|
11008
|
+
}, ve = () => {
|
|
10956
11009
|
e.state.update(sp, (e) => {
|
|
10957
11010
|
let t = e.intents.filter((e) => e.pageUrl !== O());
|
|
10958
11011
|
return t.length === e.intents.length ? e : { intents: t };
|
|
10959
|
-
}),
|
|
10960
|
-
},
|
|
11012
|
+
}), xe(), be();
|
|
11013
|
+
}, ye = (e) => {
|
|
10961
11014
|
let t = E();
|
|
10962
11015
|
if (!t.snapping) return [];
|
|
10963
11016
|
let n = [], a = new Set(e), s = i.snapshot(), l = s.xrayVisible && t.preferXrayEdges && t.elementEdges, u = 0, d = (i) => {
|
|
@@ -11029,38 +11082,38 @@ var $f = "mesurer.presentation.preferences", ep = "presentation", tp = {
|
|
|
11029
11082
|
kind: "guide"
|
|
11030
11083
|
});
|
|
11031
11084
|
return n;
|
|
11032
|
-
},
|
|
11085
|
+
}, be = (e) => {
|
|
11033
11086
|
if (!T()) {
|
|
11034
|
-
f.style.display = "none",
|
|
11087
|
+
f.style.display = "none", me();
|
|
11035
11088
|
return;
|
|
11036
11089
|
}
|
|
11037
|
-
let t = e === void 0 ?
|
|
11090
|
+
let t = e === void 0 ? pe() : e;
|
|
11038
11091
|
if (!t) {
|
|
11039
|
-
f.style.display = "none",
|
|
11092
|
+
f.style.display = "none", me();
|
|
11040
11093
|
return;
|
|
11041
11094
|
}
|
|
11042
|
-
f.style.display = "block", f.style.left = `${t.left}px`, f.style.top = `${t.top}px`, f.style.width = `${t.width}px`, f.style.height = `${t.height}px`, v ?
|
|
11043
|
-
},
|
|
11095
|
+
f.style.display = "block", f.style.left = `${t.left}px`, f.style.top = `${t.top}px`, f.style.width = `${t.width}px`, f.style.height = `${t.height}px`, v ? me() : ge();
|
|
11096
|
+
}, xe = () => {
|
|
11044
11097
|
_ = {
|
|
11045
11098
|
intentId: null,
|
|
11046
11099
|
state: "desired"
|
|
11047
|
-
},
|
|
11048
|
-
},
|
|
11100
|
+
}, ce(), V(), T() ? U() : W();
|
|
11101
|
+
}, Se = () => {
|
|
11049
11102
|
_ = {
|
|
11050
11103
|
intentId: null,
|
|
11051
11104
|
state: "live"
|
|
11052
11105
|
}, B(), V(), W();
|
|
11053
|
-
},
|
|
11054
|
-
x || v || (
|
|
11055
|
-
},
|
|
11106
|
+
}, Ce = () => {
|
|
11107
|
+
x || v || (ce(), V(), T() ? U() : W(), be());
|
|
11108
|
+
}, we = () => {
|
|
11056
11109
|
S || x || (S = r.requestAnimationFrame(() => {
|
|
11057
|
-
S = 0,
|
|
11110
|
+
S = 0, Ce();
|
|
11058
11111
|
}));
|
|
11059
|
-
},
|
|
11112
|
+
}, Te = async () => {
|
|
11060
11113
|
s.querySelector("[data-mesurer-builtin='select'] button")?.getAttribute("aria-pressed") !== "true" && await e.command.execute(dp, void 0, { source: "arrange" });
|
|
11061
|
-
},
|
|
11114
|
+
}, Ee = (e) => {
|
|
11062
11115
|
if (!T() || e.button !== 0) return;
|
|
11063
|
-
let r =
|
|
11116
|
+
let r = ue();
|
|
11064
11117
|
if (!r.length) return;
|
|
11065
11118
|
let a = e.shiftKey ? Wu(t.rendererRoot ?? null, () => Wu(l, () => Hu({
|
|
11066
11119
|
x: e.clientX,
|
|
@@ -11073,62 +11126,81 @@ var $f = "mesurer.presentation.preferences", ep = "presentation", tp = {
|
|
|
11073
11126
|
e.preventDefault(), e.stopPropagation(), _ = {
|
|
11074
11127
|
intentId: null,
|
|
11075
11128
|
state: "desired"
|
|
11076
|
-
},
|
|
11077
|
-
let s =
|
|
11129
|
+
}, ce();
|
|
11130
|
+
let s = ne(k()), u = ae(k()), d = new Set(r);
|
|
11078
11131
|
z();
|
|
11079
|
-
let
|
|
11080
|
-
let n = Pu(e), r = s.get(e) ?? {
|
|
11081
|
-
x:
|
|
11082
|
-
y:
|
|
11083
|
-
},
|
|
11132
|
+
let p = r.map((e, t) => {
|
|
11133
|
+
let n = Pu(e), r = te(e, u), i = u.get(e) ?? r, a = s.get(e), o = (a ? re(a) : null) ?? {
|
|
11134
|
+
x: i.x - r.x,
|
|
11135
|
+
y: i.y - r.y
|
|
11136
|
+
}, c = Op(n, i), l = Ku(e);
|
|
11084
11137
|
return {
|
|
11085
11138
|
element: e,
|
|
11139
|
+
movesDirectly: ie(e, d) === null,
|
|
11086
11140
|
target: {
|
|
11087
11141
|
id: `target-${t + 1}`,
|
|
11088
11142
|
selector: Gu(e),
|
|
11089
|
-
fingerprintTag:
|
|
11090
|
-
fingerprintId:
|
|
11091
|
-
fingerprintTestId:
|
|
11092
|
-
fingerprintRole:
|
|
11093
|
-
fingerprintAriaLabel:
|
|
11094
|
-
fingerprintClasses: [...
|
|
11095
|
-
fingerprintText:
|
|
11096
|
-
beforeLeft:
|
|
11097
|
-
beforeTop:
|
|
11098
|
-
beforeWidth:
|
|
11099
|
-
beforeHeight:
|
|
11100
|
-
desiredLeft:
|
|
11101
|
-
desiredTop:
|
|
11102
|
-
desiredWidth:
|
|
11103
|
-
desiredHeight:
|
|
11104
|
-
beforeOffsetX:
|
|
11105
|
-
beforeOffsetY:
|
|
11106
|
-
desiredOffsetX:
|
|
11107
|
-
desiredOffsetY:
|
|
11143
|
+
fingerprintTag: l.tag,
|
|
11144
|
+
fingerprintId: l.id,
|
|
11145
|
+
fingerprintTestId: l.testId,
|
|
11146
|
+
fingerprintRole: l.role,
|
|
11147
|
+
fingerprintAriaLabel: l.ariaLabel,
|
|
11148
|
+
fingerprintClasses: [...l.classes],
|
|
11149
|
+
fingerprintText: l.text,
|
|
11150
|
+
beforeLeft: c.left,
|
|
11151
|
+
beforeTop: c.top,
|
|
11152
|
+
beforeWidth: c.width,
|
|
11153
|
+
beforeHeight: c.height,
|
|
11154
|
+
desiredLeft: c.left,
|
|
11155
|
+
desiredTop: c.top,
|
|
11156
|
+
desiredWidth: c.width,
|
|
11157
|
+
desiredHeight: c.height,
|
|
11158
|
+
beforeOffsetX: i.x,
|
|
11159
|
+
beforeOffsetY: i.y,
|
|
11160
|
+
desiredOffsetX: i.x,
|
|
11161
|
+
desiredOffsetY: i.y,
|
|
11162
|
+
offsetSpace: "local",
|
|
11163
|
+
beforeLocalOffsetX: o.x,
|
|
11164
|
+
beforeLocalOffsetY: o.y,
|
|
11165
|
+
desiredLocalOffsetX: o.x,
|
|
11166
|
+
desiredLocalOffsetY: o.y
|
|
11108
11167
|
}
|
|
11109
11168
|
};
|
|
11110
|
-
}),
|
|
11169
|
+
}), m = Ap(p.map(({ target: e }) => ({
|
|
11111
11170
|
left: e.beforeLeft,
|
|
11112
11171
|
top: e.beforeTop,
|
|
11113
11172
|
width: e.beforeWidth,
|
|
11114
11173
|
height: e.beforeHeight
|
|
11115
11174
|
})));
|
|
11116
|
-
if (!
|
|
11117
|
-
|
|
11175
|
+
if (!m) {
|
|
11176
|
+
ce();
|
|
11118
11177
|
return;
|
|
11119
11178
|
}
|
|
11120
|
-
|
|
11179
|
+
ce(), U(), V(), v = {
|
|
11121
11180
|
pointerId: e.pointerId,
|
|
11122
11181
|
originX: e.clientX,
|
|
11123
11182
|
originY: e.clientY,
|
|
11124
|
-
targets:
|
|
11125
|
-
groupBefore:
|
|
11126
|
-
snapCandidates:
|
|
11183
|
+
targets: p,
|
|
11184
|
+
groupBefore: m,
|
|
11185
|
+
snapCandidates: ye(r),
|
|
11127
11186
|
shiftToggleElement: e.shiftKey && a instanceof c.HTMLElement && r.includes(a) ? a : null,
|
|
11128
11187
|
dx: 0,
|
|
11129
11188
|
dy: 0
|
|
11130
|
-
},
|
|
11131
|
-
},
|
|
11189
|
+
}, be(m), f.style.cursor = "grabbing", f.setPointerCapture?.(e.pointerId);
|
|
11190
|
+
}, De = (e, t, n) => {
|
|
11191
|
+
let r = /* @__PURE__ */ new Map();
|
|
11192
|
+
for (let i of e.targets) {
|
|
11193
|
+
let e = {
|
|
11194
|
+
x: i.target.beforeLocalOffsetX ?? 0,
|
|
11195
|
+
y: i.target.beforeLocalOffsetY ?? 0
|
|
11196
|
+
};
|
|
11197
|
+
r.set(i.element, i.movesDirectly ? {
|
|
11198
|
+
x: e.x + t,
|
|
11199
|
+
y: e.y + n
|
|
11200
|
+
} : e);
|
|
11201
|
+
}
|
|
11202
|
+
return r;
|
|
11203
|
+
}, Oe = (e) => {
|
|
11132
11204
|
if (!v || e.pointerId !== v.pointerId) return;
|
|
11133
11205
|
let t = e.clientX - v.originX, n = e.clientY - v.originY, r = null;
|
|
11134
11206
|
e.shiftKey && (Math.abs(t) >= Math.abs(n) ? (n = 0, r = "x") : (t = 0, r = "y"));
|
|
@@ -11137,60 +11209,71 @@ var $f = "mesurer.presentation.preferences", ep = "presentation", tp = {
|
|
|
11137
11209
|
y: n
|
|
11138
11210
|
}), a = r === "y" ? null : Fp("x", i, v.snapCandidates), o = r === "x" ? null : Fp("y", i, v.snapCandidates);
|
|
11139
11211
|
t += a?.delta ?? 0, n += o?.delta ?? 0, v.dx = t, v.dy = n;
|
|
11140
|
-
let s =
|
|
11141
|
-
|
|
11142
|
-
x: e.target.beforeOffsetX + t,
|
|
11143
|
-
y: e.target.beforeOffsetY + n
|
|
11144
|
-
});
|
|
11145
|
-
ie(s);
|
|
11212
|
+
let s = ae(k(), De(v, t, n));
|
|
11213
|
+
se(s);
|
|
11146
11214
|
let c = Op(v.groupBefore, {
|
|
11147
11215
|
x: t,
|
|
11148
11216
|
y: n
|
|
11149
11217
|
});
|
|
11150
|
-
|
|
11151
|
-
},
|
|
11218
|
+
be(c), H(a, o, c);
|
|
11219
|
+
}, ke = () => {
|
|
11152
11220
|
if (!v) return;
|
|
11153
11221
|
let e = v.pointerId;
|
|
11154
|
-
v = null, f.hasPointerCapture?.(e) && f.releasePointerCapture(e), f.style.cursor = "grab",
|
|
11155
|
-
},
|
|
11222
|
+
v = null, f.hasPointerCapture?.(e) && f.releasePointerCapture(e), f.style.cursor = "grab", xe(), be();
|
|
11223
|
+
}, Ae = (t) => {
|
|
11156
11224
|
if (!v || t.pointerId !== v.pointerId) return;
|
|
11157
11225
|
t.preventDefault(), t.stopPropagation();
|
|
11158
11226
|
let n = v;
|
|
11159
11227
|
if (v = null, f.hasPointerCapture?.(t.pointerId) && f.releasePointerCapture(t.pointerId), f.style.cursor = "grab", V(), n.dx === 0 && n.dy === 0) {
|
|
11160
|
-
n.shiftToggleElement && i.toggleSelection(n.shiftToggleElement),
|
|
11228
|
+
n.shiftToggleElement && i.toggleSelection(n.shiftToggleElement), xe(), be();
|
|
11161
11229
|
return;
|
|
11162
11230
|
}
|
|
11231
|
+
let a = ae(k(), De(n, n.dx, n.dy));
|
|
11163
11232
|
y = {
|
|
11164
11233
|
id: Lp(r, "arrange"),
|
|
11165
11234
|
createdAt: Date.now(),
|
|
11166
11235
|
pageUrl: O(),
|
|
11167
|
-
targets: n.targets.map(({
|
|
11168
|
-
|
|
11169
|
-
|
|
11170
|
-
|
|
11171
|
-
|
|
11172
|
-
|
|
11173
|
-
|
|
11236
|
+
targets: n.targets.map(({ element: e, movesDirectly: t, target: r }) => {
|
|
11237
|
+
let i = {
|
|
11238
|
+
x: r.beforeLocalOffsetX ?? 0,
|
|
11239
|
+
y: r.beforeLocalOffsetY ?? 0
|
|
11240
|
+
}, o = t ? {
|
|
11241
|
+
x: i.x + n.dx,
|
|
11242
|
+
y: i.y + n.dy
|
|
11243
|
+
} : i, s = a.get(e) ?? {
|
|
11244
|
+
x: r.beforeOffsetX + n.dx,
|
|
11245
|
+
y: r.beforeOffsetY + n.dy
|
|
11246
|
+
};
|
|
11247
|
+
return {
|
|
11248
|
+
...r,
|
|
11249
|
+
desiredLeft: r.beforeLeft + n.dx,
|
|
11250
|
+
desiredTop: r.beforeTop + n.dy,
|
|
11251
|
+
desiredOffsetX: s.x,
|
|
11252
|
+
desiredOffsetY: s.y,
|
|
11253
|
+
desiredLocalOffsetX: o.x,
|
|
11254
|
+
desiredLocalOffsetY: o.y
|
|
11255
|
+
};
|
|
11256
|
+
})
|
|
11174
11257
|
}, e.command.execute(pp).catch(() => {
|
|
11175
|
-
y = null,
|
|
11258
|
+
y = null, xe(), be();
|
|
11176
11259
|
});
|
|
11177
|
-
},
|
|
11178
|
-
!v || e.pointerId !== v.pointerId ||
|
|
11179
|
-
},
|
|
11260
|
+
}, je = (e) => {
|
|
11261
|
+
!v || e.pointerId !== v.pointerId || ke();
|
|
11262
|
+
}, Me = (t) => {
|
|
11180
11263
|
if (t.key !== "Escape" || !T() && !v || Kp(t.target) || s.querySelector("[data-mesurer-tool-menu]")) return;
|
|
11181
11264
|
if (t.preventDefault(), t.stopImmediatePropagation(), v) {
|
|
11182
|
-
|
|
11265
|
+
ke();
|
|
11183
11266
|
return;
|
|
11184
11267
|
}
|
|
11185
11268
|
let n = i.currentSelection();
|
|
11186
11269
|
if (n.elements.length > 0 || n.region) {
|
|
11187
|
-
i.clearSelection(),
|
|
11270
|
+
i.clearSelection(), be();
|
|
11188
11271
|
return;
|
|
11189
11272
|
}
|
|
11190
|
-
e.state.update(cp, () => !1),
|
|
11273
|
+
e.state.update(cp, () => !1), Se(), be(), e.command.execute(dp, void 0, { source: "arrange-escape" }).catch(() => void 0);
|
|
11191
11274
|
};
|
|
11192
|
-
f.addEventListener("pointerdown",
|
|
11193
|
-
|
|
11275
|
+
f.addEventListener("pointerdown", Ee), f.addEventListener("pointermove", Oe), f.addEventListener("pointerup", Ae), f.addEventListener("pointercancel", je), r.addEventListener("keydown", Me, !0), r.addEventListener("resize", we), r.addEventListener("scroll", we, !0), o.addEventListener("scroll", we, !0), C = new c.MutationObserver(() => {
|
|
11276
|
+
fe(), we();
|
|
11194
11277
|
}), C.observe(o, {
|
|
11195
11278
|
childList: !0,
|
|
11196
11279
|
subtree: !0,
|
|
@@ -11203,9 +11286,9 @@ var $f = "mesurer.presentation.preferences", ep = "presentation", tp = {
|
|
|
11203
11286
|
"aria-label"
|
|
11204
11287
|
]
|
|
11205
11288
|
});
|
|
11206
|
-
let
|
|
11207
|
-
|
|
11208
|
-
}),
|
|
11289
|
+
let Ne = i.subscribe(() => {
|
|
11290
|
+
fe(), we();
|
|
11291
|
+
}), Pe = e.state.subscribe(we), Fe = (e) => w().intents.find((t) => t.id === e) ?? null, Ie = (e, t) => {
|
|
11209
11292
|
let n = null;
|
|
11210
11293
|
if (n = t === "before" ? Ap(e.targets.map((e) => ({
|
|
11211
11294
|
left: e.beforeLeft,
|
|
@@ -11217,7 +11300,7 @@ var $f = "mesurer.presentation.preferences", ep = "presentation", tp = {
|
|
|
11217
11300
|
top: e.desiredTop,
|
|
11218
11301
|
width: e.desiredWidth,
|
|
11219
11302
|
height: e.desiredHeight
|
|
11220
|
-
}))) :
|
|
11303
|
+
}))) : le(() => Ap(e.targets.map((e) => N(e)).filter((e) => e !== null).map((e) => Pu(e)))), !n) throw Error(`Arrange intent has no resolvable capture region: ${e.id}`);
|
|
11221
11304
|
let i = Math.max(0, n.left - yp), a = Math.max(0, n.top - yp), o = Math.min(r.innerWidth, n.left + n.width + yp), s = Math.min(r.innerHeight, n.top + n.height + yp);
|
|
11222
11305
|
return {
|
|
11223
11306
|
left: i,
|
|
@@ -11225,28 +11308,28 @@ var $f = "mesurer.presentation.preferences", ep = "presentation", tp = {
|
|
|
11225
11308
|
width: Math.max(0, o - i),
|
|
11226
11309
|
height: Math.max(0, s - a)
|
|
11227
11310
|
};
|
|
11228
|
-
},
|
|
11311
|
+
}, Le = {
|
|
11229
11312
|
active: T,
|
|
11230
11313
|
intents: () => w().intents.map(Bp),
|
|
11231
11314
|
intent(e) {
|
|
11232
|
-
let t =
|
|
11315
|
+
let t = Fe(e);
|
|
11233
11316
|
return t ? Bp(t) : null;
|
|
11234
11317
|
},
|
|
11235
11318
|
show(e, t) {
|
|
11236
|
-
if (!
|
|
11319
|
+
if (!Fe(e)) throw Error(`Arrange intent not found: ${e}`);
|
|
11237
11320
|
_ = {
|
|
11238
11321
|
intentId: e,
|
|
11239
11322
|
state: t
|
|
11240
|
-
},
|
|
11323
|
+
}, Ce();
|
|
11241
11324
|
},
|
|
11242
11325
|
showCurrent() {
|
|
11243
11326
|
_ = {
|
|
11244
11327
|
intentId: null,
|
|
11245
11328
|
state: "desired"
|
|
11246
|
-
},
|
|
11329
|
+
}, Ce();
|
|
11247
11330
|
},
|
|
11248
11331
|
capturePlan(e, t) {
|
|
11249
|
-
let n =
|
|
11332
|
+
let n = Fe(e);
|
|
11250
11333
|
if (!n) throw Error(`Arrange intent not found: ${e}`);
|
|
11251
11334
|
return {
|
|
11252
11335
|
schema: "mesurer.arrange-capture/v1",
|
|
@@ -11259,14 +11342,14 @@ var $f = "mesurer.presentation.preferences", ep = "presentation", tp = {
|
|
|
11259
11342
|
}, {
|
|
11260
11343
|
id: "focus",
|
|
11261
11344
|
kind: "clip",
|
|
11262
|
-
rect:
|
|
11345
|
+
rect: Ie(n, t)
|
|
11263
11346
|
}]
|
|
11264
11347
|
};
|
|
11265
11348
|
},
|
|
11266
11349
|
review: (e, t = vp) => {
|
|
11267
|
-
let n =
|
|
11350
|
+
let n = Fe(e);
|
|
11268
11351
|
if (!n) throw Error(`Arrange intent not found: ${e}`);
|
|
11269
|
-
let r =
|
|
11352
|
+
let r = le(() => n.targets.map((e) => {
|
|
11270
11353
|
let n = N(e), r = {
|
|
11271
11354
|
left: e.desiredLeft,
|
|
11272
11355
|
top: e.desiredTop,
|
|
@@ -11433,24 +11516,24 @@ var $f = "mesurer.presentation.preferences", ep = "presentation", tp = {
|
|
|
11433
11516
|
]
|
|
11434
11517
|
}), e.command.register(fp, async () => {
|
|
11435
11518
|
let t = !T();
|
|
11436
|
-
if (t && await
|
|
11437
|
-
v &&
|
|
11519
|
+
if (t && await Te(), e.state.update("mesurer.arrange.active", () => t), !t) {
|
|
11520
|
+
v && ke(), Se(), be();
|
|
11438
11521
|
return;
|
|
11439
11522
|
}
|
|
11440
|
-
|
|
11523
|
+
xe(), be();
|
|
11441
11524
|
}), e.command.register(pp, () => {
|
|
11442
11525
|
let t = y;
|
|
11443
|
-
y = null, t && (e.state.update("mesurer.arrange.intents", (e) => ({ intents: [...e.intents, t].slice(-100) })),
|
|
11526
|
+
y = null, t && (e.state.update("mesurer.arrange.intents", (e) => ({ intents: [...e.intents, t].slice(-100) })), xe(), be());
|
|
11444
11527
|
}), e.command.register(hp, () => {
|
|
11445
|
-
let e = b ??
|
|
11446
|
-
b = null,
|
|
11447
|
-
}), e.command.register(gp,
|
|
11528
|
+
let e = b ?? ue();
|
|
11529
|
+
b = null, _e(e);
|
|
11530
|
+
}), e.command.register(gp, ve), e.command.register(mp, () => {
|
|
11448
11531
|
e.state.update(sp, () => ({ intents: [] })), _ = {
|
|
11449
11532
|
intentId: null,
|
|
11450
11533
|
state: "desired"
|
|
11451
|
-
}, B(), V(), T() ? U() : W(),
|
|
11452
|
-
}), e.service.provide(op,
|
|
11453
|
-
x = !0, S && r.cancelAnimationFrame(S), C?.disconnect(), C = null, f.removeEventListener("pointerdown",
|
|
11534
|
+
}, B(), V(), T() ? U() : W(), be();
|
|
11535
|
+
}), e.service.provide(op, Le), ce(), be(), e.lifecycle.onDispose(() => {
|
|
11536
|
+
x = !0, S && r.cancelAnimationFrame(S), C?.disconnect(), C = null, f.removeEventListener("pointerdown", Ee), f.removeEventListener("pointermove", Oe), f.removeEventListener("pointerup", Ae), f.removeEventListener("pointercancel", je), r.removeEventListener("keydown", Me, !0), r.removeEventListener("resize", we), r.removeEventListener("scroll", we, !0), o.removeEventListener("scroll", we, !0), Ne(), Pe.dispose(), B(), me(), V(), W(), i.dispose(), a.dispose();
|
|
11454
11537
|
});
|
|
11455
11538
|
}
|
|
11456
11539
|
}), Jp = (e, t, n) => {
|
|
@@ -15075,7 +15158,7 @@ var y_ = [
|
|
|
15075
15158
|
"text-inspector",
|
|
15076
15159
|
"guides",
|
|
15077
15160
|
"settings"
|
|
15078
|
-
], b_ = "mesurer-plugin-settings", x_ =
|
|
15161
|
+
], b_ = "mesurer-plugin-settings", x_ = 3, S_ = (e) => (e.startsWith("mesurer.") ? e.slice(8) : e).split(/[.-]/g).filter(Boolean).map((e) => e[0]?.toUpperCase() + e.slice(1)).join(" ") || e, C_ = (e) => "create" in e && typeof e.create == "function", w_ = (e) => e === "select" || e === "xray" || e === "color-picker" || e === "rulers" || e === "text-inspector" || e === "guides" || e === "distance" || e === "settings", T_ = (e) => `builtin.${e}`, E_ = (e, t) => {
|
|
15079
15162
|
let n = t.toLowerCase().replaceAll("cmd", "meta").split("+").map((e) => e.trim()).filter(Boolean);
|
|
15080
15163
|
if (!n.length) return !1;
|
|
15081
15164
|
let r = n.at(-1), i = new Set(n.slice(0, -1)), a = i.has("mod"), o = i.has("meta"), s = i.has("ctrl") || i.has("control"), c = i.has("shift"), l = i.has("alt") || i.has("option");
|
|
@@ -15117,6 +15200,7 @@ function D_(e) {
|
|
|
15117
15200
|
return {
|
|
15118
15201
|
id: t.id,
|
|
15119
15202
|
label: t.label ?? S_(t.id),
|
|
15203
|
+
description: t.description,
|
|
15120
15204
|
enabled: n.has(t.id),
|
|
15121
15205
|
busy: p.has(t.id),
|
|
15122
15206
|
sections: a
|
|
@@ -15205,8 +15289,8 @@ function D_(e) {
|
|
|
15205
15289
|
let e = L.localStorage.getItem(re);
|
|
15206
15290
|
if (e) {
|
|
15207
15291
|
let t = JSON.parse(e);
|
|
15208
|
-
if (t?.version === x_) {
|
|
15209
|
-
for (let [e, n] of Object.entries(t.enabled ?? {})) ie.set(e, n);
|
|
15292
|
+
if (t?.version === 1 || t?.version === 2 || t?.version === x_) {
|
|
15293
|
+
for (let [e, n] of Object.entries(t.enabled ?? {})) (t.version !== 2 || e !== "mesurer.codex") && ie.set(e, n);
|
|
15210
15294
|
for (let [e, n] of Object.entries(t.state ?? {})) f.set(e, n);
|
|
15211
15295
|
}
|
|
15212
15296
|
}
|
|
@@ -18036,7 +18120,7 @@ function Hy(e) {
|
|
|
18036
18120
|
}
|
|
18037
18121
|
//#endregion
|
|
18038
18122
|
//#region src/version.ts
|
|
18039
|
-
var Uy = "0.2.0-beta.
|
|
18123
|
+
var Uy = "0.2.0-beta.13", Wy = ap, Gy = op, Ky = () => ({
|
|
18040
18124
|
...$p(),
|
|
18041
18125
|
version: Uy
|
|
18042
18126
|
}), qy = (e, t) => e.left <= t.left + t.width && e.left + e.width >= t.left && e.top <= t.top + t.height && e.top + e.height >= t.top, Jy = (e) => {
|
|
@@ -18665,34 +18749,34 @@ function Fb(e, t, n = !0) {
|
|
|
18665
18749
|
};
|
|
18666
18750
|
}
|
|
18667
18751
|
//#endregion
|
|
18668
|
-
//#region src/codex
|
|
18669
|
-
var Ib = "mesurer.codex", Lb = "codex:v1", Rb =
|
|
18752
|
+
//#region src/plugins/codex/index.ts
|
|
18753
|
+
var Ib = "mesurer.codex", Lb = "codex:v1", Rb = 2e3, zb = 750, Bb = 1800, Vb = 2e3, Hb = 12e4, Ub = 10, Wb = 5, Gb = [
|
|
18670
18754
|
"Implement the current human feedback from Mesurer in this project.",
|
|
18671
18755
|
"Treat the rendered page as the source of truth, preserve unrelated Mesurer review state,",
|
|
18672
18756
|
"and verify the affected UI in the live page with Mesurer before claiming completion."
|
|
18673
|
-
].join(" "),
|
|
18757
|
+
].join(" "), Kb = {
|
|
18674
18758
|
viewBox: "0 0 256 256",
|
|
18675
18759
|
paths: ["M224,48,32,120l88,32,32,88Z M120,152l104-104"]
|
|
18676
|
-
},
|
|
18760
|
+
}, qb = {
|
|
18677
18761
|
viewBox: "0 0 256 256",
|
|
18678
18762
|
paths: ["M72,32H184a8,8,0,0,1,0,16h-8v20.69a40,40,0,0,1-11.72,28.28L137.25,124l27.03,27.03A40,40,0,0,1,176,179.31V208h8a8,8,0,0,1,0,16H72a8,8,0,0,1,0-16h8V179.31a40,40,0,0,1,11.72-28.28L118.75,124,91.72,96.97A40,40,0,0,1,80,68.69V48H72a8,8,0,0,1,0-16Zm24,16V68.69a24,24,0,0,0,7.03,16.97L128,110.63l24.97-24.97A24,24,0,0,0,160,68.69V48Zm32,90.63-24.97,24.97A24,24,0,0,0,96,180.57V208h64V180.57a24,24,0,0,0-7.03-16.97Z"]
|
|
18679
|
-
},
|
|
18763
|
+
}, Jb = {
|
|
18680
18764
|
viewBox: "0 0 256 256",
|
|
18681
18765
|
paths: ["M229.66,77.66l-128,128a8,8,0,0,1-11.32,0l-56-56a8,8,0,0,1,11.32-11.32L96,188.69,218.34,66.34a8,8,0,0,1,11.32,11.32Z"]
|
|
18682
|
-
},
|
|
18766
|
+
}, Yb = () => {
|
|
18683
18767
|
try {
|
|
18684
|
-
let
|
|
18685
|
-
return
|
|
18768
|
+
let e = globalThis.location;
|
|
18769
|
+
return e?.origin ? `mesurer-codex-ui:v2:${e.origin}${e.pathname}` : null;
|
|
18686
18770
|
} catch {
|
|
18687
18771
|
return null;
|
|
18688
18772
|
}
|
|
18689
|
-
},
|
|
18690
|
-
let
|
|
18691
|
-
if (!
|
|
18773
|
+
}, Xb = () => {
|
|
18774
|
+
let e = Yb();
|
|
18775
|
+
if (!e) return null;
|
|
18692
18776
|
try {
|
|
18693
|
-
let
|
|
18694
|
-
if (!
|
|
18695
|
-
let n = JSON.parse(
|
|
18777
|
+
let t = globalThis.sessionStorage?.getItem(e);
|
|
18778
|
+
if (!t) return null;
|
|
18779
|
+
let n = JSON.parse(t);
|
|
18696
18780
|
if (n.version !== 1) return null;
|
|
18697
18781
|
let r = n.originThread?.trim() || null, i = n.selectedThread?.trim() || null, a = n.delivery;
|
|
18698
18782
|
return {
|
|
@@ -18712,39 +18796,41 @@ var Ib = "mesurer.codex", Lb = "codex:v1", Rb = "http://127.0.0.1:47365", zb = 2
|
|
|
18712
18796
|
} catch {
|
|
18713
18797
|
return null;
|
|
18714
18798
|
}
|
|
18715
|
-
},
|
|
18716
|
-
let
|
|
18717
|
-
if (
|
|
18718
|
-
globalThis.sessionStorage?.setItem(
|
|
18799
|
+
}, Zb = (e) => {
|
|
18800
|
+
let t = Yb();
|
|
18801
|
+
if (t) try {
|
|
18802
|
+
globalThis.sessionStorage?.setItem(t, JSON.stringify(e));
|
|
18719
18803
|
} catch {}
|
|
18720
|
-
},
|
|
18721
|
-
let
|
|
18722
|
-
|
|
18723
|
-
|
|
18724
|
-
|
|
18725
|
-
|
|
18726
|
-
|
|
18727
|
-
|
|
18728
|
-
|
|
18729
|
-
|
|
18730
|
-
|
|
18731
|
-
|
|
18732
|
-
|
|
18733
|
-
|
|
18734
|
-
|
|
18735
|
-
|
|
18736
|
-
|
|
18737
|
-
|
|
18738
|
-
|
|
18739
|
-
|
|
18740
|
-
|
|
18741
|
-
|
|
18742
|
-
|
|
18804
|
+
}, Qb = async (e) => {
|
|
18805
|
+
let t = window.__MESURER_HOST__?.codexBridge;
|
|
18806
|
+
if (!t) throw Error("Codex Bridge is unavailable in this host.");
|
|
18807
|
+
let n = await t(e);
|
|
18808
|
+
if (n.ok === !1) throw Error(n.error ?? "Codex Bridge request failed.");
|
|
18809
|
+
return n;
|
|
18810
|
+
}, $b = (e) => {
|
|
18811
|
+
let t = e.runtime;
|
|
18812
|
+
return !t || ![
|
|
18813
|
+
"shared",
|
|
18814
|
+
"standalone",
|
|
18815
|
+
"desktop",
|
|
18816
|
+
"none"
|
|
18817
|
+
].includes(t.source) || ![
|
|
18818
|
+
"shared-app-server",
|
|
18819
|
+
"desktop-queue",
|
|
18820
|
+
"private-stdio",
|
|
18821
|
+
"none"
|
|
18822
|
+
].includes(t.transport) || t.reason !== null && t.reason !== "desktop-private-transport" && t.reason !== "runtime-not-found" ? null : {
|
|
18823
|
+
source: t.source,
|
|
18824
|
+
transport: t.transport,
|
|
18825
|
+
available: t.available === !0,
|
|
18826
|
+
reason: t.reason
|
|
18827
|
+
};
|
|
18828
|
+
}, ex = (e) => ({
|
|
18743
18829
|
thread: e.thread?.trim() || null,
|
|
18744
18830
|
threads: Array.isArray(e.threads) ? e.threads.filter((e) => e.trim().length > 0) : []
|
|
18745
|
-
}),
|
|
18831
|
+
}), tx = (e) => {
|
|
18746
18832
|
let t = e.deliveryId?.trim(), n = e.thread?.trim(), r = e.status;
|
|
18747
|
-
if (!t || !n || !r) throw Error("
|
|
18833
|
+
if (!t || !n || !r) throw Error("Codex Bridge returned an invalid delivery state.");
|
|
18748
18834
|
let i = {
|
|
18749
18835
|
id: t,
|
|
18750
18836
|
thread: n,
|
|
@@ -18754,7 +18840,7 @@ var Ib = "mesurer.codex", Lb = "codex:v1", Rb = "http://127.0.0.1:47365", zb = 2
|
|
|
18754
18840
|
updatedAt: Number.isFinite(e.updatedAt) ? Number(e.updatedAt) : 0
|
|
18755
18841
|
};
|
|
18756
18842
|
return e.queuedSubmissionId !== void 0 && (i.queuedSubmissionId = e.queuedSubmissionId?.trim() || null), e.dispatch !== void 0 && (i.dispatch = e.dispatch), e.dispatchError !== void 0 && (i.dispatchError = e.dispatchError?.trim() || null), i;
|
|
18757
|
-
},
|
|
18843
|
+
}, nx = (e) => ({
|
|
18758
18844
|
thread: e.thread?.trim() || null,
|
|
18759
18845
|
threads: Array.isArray(e.threadDetails) ? e.threadDetails.flatMap((e) => {
|
|
18760
18846
|
let t = e.id?.trim() ?? "";
|
|
@@ -18766,7 +18852,7 @@ var Ib = "mesurer.codex", Lb = "codex:v1", Rb = "http://127.0.0.1:47365", zb = 2
|
|
|
18766
18852
|
}] : [];
|
|
18767
18853
|
}) : [],
|
|
18768
18854
|
hasMore: e.hasMore === !0
|
|
18769
|
-
}),
|
|
18855
|
+
}), rx = async (e, t, n) => {
|
|
18770
18856
|
let r = t?.instruction?.trim() || n, i = await e.annotations(), a = t?.annotationIds, o = a ? a.flatMap((e) => {
|
|
18771
18857
|
let t = i.find((t) => t.id === e);
|
|
18772
18858
|
return t ? [t] : [];
|
|
@@ -18789,76 +18875,87 @@ var Ib = "mesurer.codex", Lb = "codex:v1", Rb = "http://127.0.0.1:47365", zb = 2
|
|
|
18789
18875
|
])
|
|
18790
18876
|
].join("\n").trimEnd()
|
|
18791
18877
|
};
|
|
18792
|
-
},
|
|
18793
|
-
function
|
|
18794
|
-
let t = e.
|
|
18878
|
+
}, ix = (e) => e.length > 16 ? `${e.slice(0, 8)}…${e.slice(-4)}` : e, ax = (e, t = 42) => e.length > t ? `${e.slice(0, t - 1)}…` : e, ox = (e) => e instanceof Error && e.message === "Codex Bridge is unavailable in this host.";
|
|
18879
|
+
function sx(e = {}) {
|
|
18880
|
+
let t = e.instruction?.trim() || Gb, n = e.ui ?? !0, r = e.clearCompletedAnnotations ?? !0;
|
|
18795
18881
|
return {
|
|
18796
18882
|
id: Ib,
|
|
18797
18883
|
version: Uy,
|
|
18798
18884
|
requires: [vb],
|
|
18799
18885
|
provides: [Lb],
|
|
18800
18886
|
setup(e) {
|
|
18801
|
-
let
|
|
18802
|
-
if (!
|
|
18803
|
-
let
|
|
18804
|
-
id:
|
|
18805
|
-
thread:
|
|
18806
|
-
status:
|
|
18807
|
-
annotationIds:
|
|
18808
|
-
queuedSubmissionId:
|
|
18809
|
-
dispatch:
|
|
18810
|
-
dispatchError:
|
|
18811
|
-
} : null, x = 0, S = 0, C = null, w = !1, T = async () =>
|
|
18887
|
+
let i = e.service.get(vb);
|
|
18888
|
+
if (!i) throw Error("Mesurer Codex plugin requires context() from mesurer-solid/plugins.");
|
|
18889
|
+
let a = n ? Xb() : null, o = "unknown", s = null, c = !1, l = a?.originThread ?? null, u = a?.selectedThread ?? a?.originThread ?? null, d = !1, f = null, p = [], m = [], h = !1, g = Wb, _, v = "", y = null, b = a?.delivery ? {
|
|
18890
|
+
id: a.delivery.id,
|
|
18891
|
+
thread: a.delivery.thread,
|
|
18892
|
+
status: a.delivery.status,
|
|
18893
|
+
annotationIds: a.delivery.annotationIds,
|
|
18894
|
+
queuedSubmissionId: a.delivery.queuedSubmissionId ?? null,
|
|
18895
|
+
dispatch: a.delivery.dispatch ?? null,
|
|
18896
|
+
dispatchError: a.delivery.dispatchError ?? null
|
|
18897
|
+
} : null, x = 0, S = 0, C = null, w = !1, T = async () => {
|
|
18898
|
+
let e = $b(await Qb({ action: "runtime" }));
|
|
18899
|
+
if (!e) throw Error("Codex Bridge returned an invalid runtime state.");
|
|
18900
|
+
return s = e, e;
|
|
18901
|
+
}, E = async () => {
|
|
18902
|
+
let e = await Qb({
|
|
18903
|
+
action: "health",
|
|
18904
|
+
thread: u ?? l ?? void 0
|
|
18905
|
+
});
|
|
18906
|
+
return s = $b(e) ?? s, ex(e);
|
|
18907
|
+
}, D = E, O = async (e) => tx(await Qb({
|
|
18908
|
+
action: "delivery",
|
|
18909
|
+
deliveryId: e
|
|
18910
|
+
})), k = async (e) => {
|
|
18812
18911
|
if (!e.id || !e.thread) throw Error("Cannot restore a Codex delivery without its id and thread.");
|
|
18813
|
-
let
|
|
18912
|
+
let t = {
|
|
18913
|
+
action: "restore",
|
|
18814
18914
|
deliveryId: e.id,
|
|
18815
18915
|
thread: e.thread
|
|
18816
18916
|
};
|
|
18817
|
-
return e.queuedSubmissionId && (
|
|
18818
|
-
|
|
18819
|
-
|
|
18820
|
-
|
|
18821
|
-
|
|
18822
|
-
|
|
18823
|
-
|
|
18824
|
-
|
|
18825
|
-
|
|
18826
|
-
return r && n.set("thread", r), rx(await ex(t, `threads?${n.toString()}`));
|
|
18827
|
-
}, k = () => u ?? l ?? (d ? null : f), A = () => {
|
|
18828
|
-
if (!r) return;
|
|
18917
|
+
return e.queuedSubmissionId && (t.queuedSubmissionId = e.queuedSubmissionId), tx(await Qb(t));
|
|
18918
|
+
}, A = async (e = {}) => {
|
|
18919
|
+
let t = {
|
|
18920
|
+
action: "threads",
|
|
18921
|
+
limit: e.limit ?? Ub
|
|
18922
|
+
}, n = e.thread?.trim();
|
|
18923
|
+
return n && (t.thread = n), nx(await Qb(t));
|
|
18924
|
+
}, j = () => u ?? l ?? (d ? null : f), M = () => {
|
|
18925
|
+
if (!n) return;
|
|
18829
18926
|
let e = b?.id && (b.status === "queued" || b.status === "working" || b.status === "interrupted") ? {
|
|
18830
18927
|
id: b.id,
|
|
18831
|
-
thread: b.thread ??
|
|
18928
|
+
thread: b.thread ?? j() ?? "",
|
|
18832
18929
|
status: b.status,
|
|
18833
18930
|
annotationIds: [...b.annotationIds],
|
|
18834
18931
|
queuedSubmissionId: b.queuedSubmissionId,
|
|
18835
18932
|
dispatch: b.dispatch,
|
|
18836
18933
|
dispatchError: b.dispatchError
|
|
18837
18934
|
} : null;
|
|
18838
|
-
|
|
18935
|
+
Zb({
|
|
18839
18936
|
version: 1,
|
|
18840
18937
|
originThread: l,
|
|
18841
18938
|
selectedThread: u,
|
|
18842
18939
|
delivery: e?.thread ? e : null
|
|
18843
18940
|
});
|
|
18844
|
-
},
|
|
18941
|
+
}, N = (e, t = !1) => {
|
|
18845
18942
|
let n = e.trim();
|
|
18846
|
-
n && ((t || !l) && (l = n), u = n, d = !1,
|
|
18847
|
-
},
|
|
18943
|
+
n && ((t || !l) && (l = n), u = n, d = !1, M());
|
|
18944
|
+
}, P = () => b !== null && [
|
|
18848
18945
|
"queueing",
|
|
18849
18946
|
"queued",
|
|
18850
18947
|
"working",
|
|
18851
18948
|
"completed"
|
|
18852
|
-
].includes(b.status),
|
|
18949
|
+
].includes(b.status), F = (e) => e === "queueing" ? "Queueing…" : e === "queued" ? "Queued" : e === "working" ? "Working…" : e === "completed" ? "Done" : e === "interrupted" ? "Interrupted" : "Failed", I = () => b ? b.status === "queueing" ? "Queueing to Codex…" : b.status === "queued" ? b.dispatch === "desktop-wake-failed" ? "Queued — open Codex" : "Queued for Codex" : b.status === "working" ? "Codex working…" : b.status === "completed" ? "Codex finished" : b.status === "interrupted" ? "Codex interrupted" : "Queue failed" : null, L = () => b ? [
|
|
18853
18950
|
"queueing",
|
|
18854
18951
|
"queued",
|
|
18855
18952
|
"working"
|
|
18856
|
-
].includes(b.status) ?
|
|
18953
|
+
].includes(b.status) ? qb : b.status === "completed" ? Jb : Kb : Kb, R = () => {
|
|
18857
18954
|
let e = [], t = /* @__PURE__ */ new Set(), n = (n) => {
|
|
18858
18955
|
t.has(n.id) || (t.add(n.id), e.push(n));
|
|
18859
18956
|
}, r = (e) => ({
|
|
18860
18957
|
id: e,
|
|
18861
|
-
title: `Codex ${
|
|
18958
|
+
title: `Codex ${ix(e)}`,
|
|
18862
18959
|
updatedAt: null,
|
|
18863
18960
|
connected: !0
|
|
18864
18961
|
});
|
|
@@ -18868,96 +18965,94 @@ function cx(e = {}) {
|
|
|
18868
18965
|
for (let e of m) n(e);
|
|
18869
18966
|
for (let e of p) n(m.find((t) => t.id === e) ?? r(e));
|
|
18870
18967
|
return e;
|
|
18871
|
-
},
|
|
18872
|
-
if (
|
|
18873
|
-
|
|
18874
|
-
|
|
18875
|
-
|
|
18876
|
-
|
|
18877
|
-
|
|
18878
|
-
|
|
18968
|
+
}, z = (e = !1) => Promise.resolve(), B = () => {
|
|
18969
|
+
if (o !== "available") {
|
|
18970
|
+
let e = s?.source === "desktop" && s.reason === "desktop-private-transport";
|
|
18971
|
+
return [{
|
|
18972
|
+
id: "codex.thread.connect",
|
|
18973
|
+
label: o === "unavailable" ? e ? "Retry Codex Desktop" : "Retry Codex connection" : "Choose Codex thread…",
|
|
18974
|
+
run: () => z(!0)
|
|
18975
|
+
}];
|
|
18976
|
+
}
|
|
18977
|
+
let e = R(), t = e.slice(0, g), n = j(), r = t.map((e) => {
|
|
18978
|
+
let t = e.id === l ? "Current · " : e.connected ? "Loaded · " : "", r = b?.thread === e.id ? ` · ${F(b.status)}` : "";
|
|
18879
18979
|
return {
|
|
18880
18980
|
id: `codex.thread.${e.id}`,
|
|
18881
|
-
label: `${t}${
|
|
18981
|
+
label: `${t}${ax(e.title)}${r}`,
|
|
18882
18982
|
checked: () => n === e.id,
|
|
18883
|
-
disabled: () =>
|
|
18983
|
+
disabled: () => P(),
|
|
18884
18984
|
run() {
|
|
18885
|
-
|
|
18985
|
+
P() || (N(e.id, !l), V());
|
|
18886
18986
|
}
|
|
18887
18987
|
};
|
|
18888
18988
|
});
|
|
18889
|
-
return g <
|
|
18989
|
+
return g < Ub && (e.length > g || h) && r.push({
|
|
18890
18990
|
id: "codex.thread.show-more",
|
|
18891
18991
|
label: "Show 5 more…",
|
|
18892
18992
|
run() {
|
|
18893
|
-
g =
|
|
18993
|
+
g = Ub, V();
|
|
18894
18994
|
}
|
|
18895
18995
|
}), r;
|
|
18896
|
-
},
|
|
18897
|
-
if (!
|
|
18898
|
-
let t =
|
|
18899
|
-
bridgeAvailability:
|
|
18996
|
+
}, V = () => {
|
|
18997
|
+
if (!n || w) return;
|
|
18998
|
+
let t = j(), r = B(), i = !P() && !d && o !== "unavailable" && (o === "unknown" || !!t), a = s?.source === "desktop" && s.reason === "desktop-private-transport", c = I() ?? (o === "unavailable" ? a ? "Codex Desktop not connected" : "Codex unavailable" : d || o === "available" && !t ? "Choose Codex thread" : "Queue to Codex"), l = JSON.stringify({
|
|
18999
|
+
bridgeAvailability: o,
|
|
19000
|
+
codexRuntime: s,
|
|
18900
19001
|
routeNeedsSelection: d,
|
|
18901
19002
|
target: t,
|
|
18902
|
-
label:
|
|
19003
|
+
label: c,
|
|
18903
19004
|
visibleThreadCount: g,
|
|
18904
19005
|
activeDelivery: b,
|
|
18905
|
-
items:
|
|
19006
|
+
items: r.map((e) => ({
|
|
18906
19007
|
id: e.id,
|
|
18907
19008
|
label: e.label,
|
|
18908
19009
|
checked: e.checked?.() ?? null,
|
|
18909
19010
|
disabled: e.disabled?.() ?? !1
|
|
18910
19011
|
}))
|
|
18911
19012
|
});
|
|
18912
|
-
|
|
19013
|
+
l !== v && (v = l, _?.dispose(), _ = e.tool.register({
|
|
18913
19014
|
id: "codex.send",
|
|
18914
|
-
label:
|
|
19015
|
+
label: c,
|
|
18915
19016
|
command: "codex.queue",
|
|
18916
19017
|
order: 73,
|
|
18917
|
-
icon:
|
|
19018
|
+
icon: L(),
|
|
18918
19019
|
disabled: () => !i,
|
|
18919
|
-
menu:
|
|
19020
|
+
menu: r.length ? {
|
|
18920
19021
|
label: "Codex destination",
|
|
18921
|
-
items:
|
|
19022
|
+
items: r
|
|
18922
19023
|
} : void 0
|
|
18923
19024
|
}));
|
|
18924
|
-
},
|
|
18925
|
-
if (
|
|
18926
|
-
let
|
|
18927
|
-
|
|
18928
|
-
|
|
18929
|
-
|
|
18930
|
-
|
|
18931
|
-
});
|
|
18932
|
-
m = t.threads, h = t.hasMore;
|
|
18933
|
-
} catch {
|
|
18934
|
-
m = p.map((e) => ({
|
|
18935
|
-
id: e,
|
|
18936
|
-
title: `Codex ${ax(e)}`,
|
|
18937
|
-
updatedAt: null,
|
|
18938
|
-
connected: !0
|
|
18939
|
-
})), h = !1;
|
|
18940
|
-
}
|
|
19025
|
+
}, H = async (e) => {
|
|
19026
|
+
if (o !== "available") return;
|
|
19027
|
+
let t = await A({
|
|
19028
|
+
limit: Ub,
|
|
19029
|
+
thread: e ?? void 0
|
|
19030
|
+
});
|
|
19031
|
+
m = t.threads, h = t.hasMore, p = t.threads.filter((e) => e.connected).map((e) => e.id), f = t.thread;
|
|
18941
19032
|
};
|
|
18942
|
-
|
|
19033
|
+
z = (e = !1) => w || o === "unknown" && !e ? Promise.resolve() : y || (y = (async () => {
|
|
18943
19034
|
try {
|
|
18944
|
-
let e = await
|
|
18945
|
-
|
|
18946
|
-
let
|
|
18947
|
-
|
|
19035
|
+
let e = await D();
|
|
19036
|
+
o = "available", c = !0, f = e.thread, await H(u ?? l ?? e.thread);
|
|
19037
|
+
let t = u ?? l;
|
|
19038
|
+
t && p.includes(t) ? d = !1 : p.length === 1 ? N(p[0], !0) : d = !0, !d && t && M();
|
|
18948
19039
|
} catch (e) {
|
|
18949
|
-
throw
|
|
19040
|
+
throw o = "unavailable", s = await T().catch(() => s), e;
|
|
18950
19041
|
} finally {
|
|
18951
|
-
y = null,
|
|
19042
|
+
y = null, V();
|
|
18952
19043
|
}
|
|
18953
19044
|
})(), y);
|
|
18954
|
-
let
|
|
19045
|
+
let U = () => {
|
|
18955
19046
|
x &&= (globalThis.clearTimeout(x), 0), S &&= (globalThis.clearTimeout(S), 0);
|
|
18956
|
-
},
|
|
19047
|
+
}, W = () => {
|
|
19048
|
+
S && globalThis.clearTimeout(S), S = globalThis.setTimeout(() => {
|
|
19049
|
+
S = 0, b?.status === "completed" && (b = null, M(), V());
|
|
19050
|
+
}, Bb);
|
|
19051
|
+
}, ee = () => {
|
|
18957
19052
|
S && globalThis.clearTimeout(S), S = globalThis.setTimeout(() => {
|
|
18958
|
-
S = 0, b?.status
|
|
18959
|
-
},
|
|
18960
|
-
},
|
|
19053
|
+
S = 0, !(b?.status !== "queued" || b.dispatch !== "desktop-opened" && b.dispatch !== "desktop-wake-failed") && (b = null, M(), V());
|
|
19054
|
+
}, Bb);
|
|
19055
|
+
}, te = async (e) => {
|
|
18961
19056
|
if (!(!b || b.id !== e.id)) {
|
|
18962
19057
|
if (b = {
|
|
18963
19058
|
...b,
|
|
@@ -18966,104 +19061,106 @@ function cx(e = {}) {
|
|
|
18966
19061
|
queuedSubmissionId: e.queuedSubmissionId ?? b.queuedSubmissionId,
|
|
18967
19062
|
dispatch: e.dispatch ?? b.dispatch,
|
|
18968
19063
|
dispatchError: e.dispatchError ?? b.dispatchError
|
|
18969
|
-
},
|
|
18970
|
-
|
|
18971
|
-
|
|
19064
|
+
}, M(), e.status === "queued" && (e.dispatch === "desktop-opened" || e.dispatch === "desktop-wake-failed")) {
|
|
19065
|
+
V(), ee();
|
|
19066
|
+
return;
|
|
19067
|
+
}
|
|
19068
|
+
if (e.status === "completed") {
|
|
19069
|
+
if (r) for (let e of b.annotationIds) await i.removeAnnotation(e);
|
|
19070
|
+
M(), V(), W();
|
|
18972
19071
|
return;
|
|
18973
19072
|
}
|
|
18974
19073
|
if (e.status === "interrupted") {
|
|
18975
|
-
|
|
19074
|
+
M(), V();
|
|
18976
19075
|
let t = e.updatedAt > 0 ? e.updatedAt : Date.now();
|
|
18977
|
-
Date.now() - t <
|
|
18978
|
-
x = 0,
|
|
18979
|
-
},
|
|
19076
|
+
Date.now() - t < Hb && (x = globalThis.setTimeout(() => {
|
|
19077
|
+
x = 0, ne(e.id);
|
|
19078
|
+
}, Vb));
|
|
18980
19079
|
return;
|
|
18981
19080
|
}
|
|
18982
|
-
|
|
18983
|
-
x = 0,
|
|
18984
|
-
},
|
|
19081
|
+
V(), x = globalThis.setTimeout(() => {
|
|
19082
|
+
x = 0, ne(e.id);
|
|
19083
|
+
}, zb);
|
|
18985
19084
|
}
|
|
18986
|
-
},
|
|
19085
|
+
}, ne = async (e) => {
|
|
18987
19086
|
if (!(w || b?.id !== e)) try {
|
|
18988
|
-
await
|
|
18989
|
-
} catch (
|
|
19087
|
+
await te(await O(e));
|
|
19088
|
+
} catch (t) {
|
|
18990
19089
|
if (b?.id !== e) return;
|
|
18991
|
-
let
|
|
19090
|
+
let n = t;
|
|
18992
19091
|
if (b.status === "queued" && b.thread) try {
|
|
18993
|
-
|
|
18994
|
-
let e = await
|
|
18995
|
-
await
|
|
19092
|
+
o !== "available" && await z(!0);
|
|
19093
|
+
let e = await k(b);
|
|
19094
|
+
await te(e);
|
|
18996
19095
|
return;
|
|
18997
19096
|
} catch (e) {
|
|
18998
|
-
|
|
19097
|
+
n = e;
|
|
18999
19098
|
}
|
|
19000
19099
|
if (b?.id !== e) return;
|
|
19001
19100
|
if (b.status === "interrupted") {
|
|
19002
|
-
|
|
19101
|
+
V();
|
|
19003
19102
|
return;
|
|
19004
19103
|
}
|
|
19005
19104
|
b = {
|
|
19006
19105
|
...b,
|
|
19007
19106
|
status: "failed"
|
|
19008
|
-
},
|
|
19107
|
+
}, M(), ox(n) && (o = "unavailable"), V();
|
|
19009
19108
|
}
|
|
19010
|
-
},
|
|
19011
|
-
health:
|
|
19012
|
-
listThreads:
|
|
19013
|
-
delivery:
|
|
19109
|
+
}, re = {
|
|
19110
|
+
health: E,
|
|
19111
|
+
listThreads: A,
|
|
19112
|
+
delivery: O,
|
|
19014
19113
|
async useThread(e) {
|
|
19015
|
-
let
|
|
19016
|
-
if (!
|
|
19017
|
-
let
|
|
19018
|
-
|
|
19019
|
-
|
|
19020
|
-
|
|
19021
|
-
|
|
19022
|
-
return j(n, !l), f = r.thread, p = r.threads, s = "available", c = !0, B(), r;
|
|
19114
|
+
let t = e.trim();
|
|
19115
|
+
if (!t) throw Error("Codex thread must be a non-empty string.");
|
|
19116
|
+
let n = await Qb({
|
|
19117
|
+
action: "target",
|
|
19118
|
+
thread: t
|
|
19119
|
+
}), r = ex(n);
|
|
19120
|
+
return s = $b(n) ?? s, N(t, !l), f = r.thread, p = r.threads, o = "available", c = !0, V(), r;
|
|
19023
19121
|
},
|
|
19024
19122
|
async queue(e) {
|
|
19025
|
-
let
|
|
19026
|
-
if (
|
|
19027
|
-
let
|
|
19028
|
-
|
|
19123
|
+
let r = await rx(i, e, t), a = e?.thread?.trim(), s = a || (n ? j() : null);
|
|
19124
|
+
if (n && !a && (d || !s)) throw Error("Choose a Codex thread before queueing feedback.");
|
|
19125
|
+
let c = { message: r.message };
|
|
19126
|
+
s && (c.thread = s);
|
|
19029
19127
|
try {
|
|
19030
|
-
let e = await
|
|
19031
|
-
|
|
19032
|
-
|
|
19033
|
-
|
|
19034
|
-
|
|
19035
|
-
|
|
19036
|
-
|
|
19037
|
-
thread: n,
|
|
19128
|
+
let e = await Qb({
|
|
19129
|
+
action: "queue",
|
|
19130
|
+
...c
|
|
19131
|
+
}), t = e.thread?.trim();
|
|
19132
|
+
if (!t) throw Error("Codex Bridge did not report the destination thread.");
|
|
19133
|
+
let n = {
|
|
19134
|
+
thread: t,
|
|
19038
19135
|
output: e.output ?? "",
|
|
19039
19136
|
delivery: "queued",
|
|
19040
19137
|
deliveryId: e.deliveryId?.trim() || null,
|
|
19041
19138
|
status: e.status ?? "queued",
|
|
19042
|
-
annotationIds:
|
|
19139
|
+
annotationIds: r.annotationIds
|
|
19043
19140
|
};
|
|
19044
|
-
return e.queuedSubmissionId !== void 0 && (
|
|
19141
|
+
return e.queuedSubmissionId !== void 0 && (n.queuedSubmissionId = e.queuedSubmissionId?.trim() || null), e.dispatch !== void 0 && (n.dispatch = e.dispatch), e.dispatchError !== void 0 && (n.dispatchError = e.dispatchError?.trim() || null), n;
|
|
19045
19142
|
} catch (e) {
|
|
19046
|
-
throw
|
|
19143
|
+
throw n && ox(e) && (o = "unavailable", V()), e;
|
|
19047
19144
|
}
|
|
19048
19145
|
},
|
|
19049
19146
|
send(e) {
|
|
19050
|
-
return
|
|
19147
|
+
return re.queue(e);
|
|
19051
19148
|
}
|
|
19052
19149
|
};
|
|
19053
|
-
e.service.provide(Lb,
|
|
19054
|
-
let
|
|
19055
|
-
if (!(C ||
|
|
19150
|
+
e.service.provide(Lb, re);
|
|
19151
|
+
let ie = async () => {
|
|
19152
|
+
if (!(C || P())) return U(), b = {
|
|
19056
19153
|
id: null,
|
|
19057
|
-
thread:
|
|
19154
|
+
thread: j(),
|
|
19058
19155
|
status: "queueing",
|
|
19059
19156
|
annotationIds: [],
|
|
19060
19157
|
queuedSubmissionId: null,
|
|
19061
19158
|
dispatch: null,
|
|
19062
19159
|
dispatchError: null
|
|
19063
|
-
},
|
|
19160
|
+
}, V(), C = (async () => {
|
|
19064
19161
|
try {
|
|
19065
|
-
|
|
19066
|
-
let e = await
|
|
19162
|
+
n && o !== "available" && await z(!0);
|
|
19163
|
+
let e = await re.queue();
|
|
19067
19164
|
b = {
|
|
19068
19165
|
id: e.deliveryId,
|
|
19069
19166
|
thread: e.thread,
|
|
@@ -19072,7 +19169,7 @@ function cx(e = {}) {
|
|
|
19072
19169
|
queuedSubmissionId: e.queuedSubmissionId ?? null,
|
|
19073
19170
|
dispatch: e.dispatch ?? null,
|
|
19074
19171
|
dispatchError: e.dispatchError ?? null
|
|
19075
|
-
},
|
|
19172
|
+
}, N(e.thread, !l), M(), V(), console.info(`[Mesurer] Queued feedback for Codex thread ${e.thread}.`), e.deliveryId ? e.status === "completed" || e.status === "interrupted" ? await te({
|
|
19076
19173
|
id: e.deliveryId,
|
|
19077
19174
|
thread: e.thread,
|
|
19078
19175
|
status: e.status,
|
|
@@ -19080,12 +19177,12 @@ function cx(e = {}) {
|
|
|
19080
19177
|
createdAt: 0,
|
|
19081
19178
|
updatedAt: 0
|
|
19082
19179
|
}) : x = globalThis.setTimeout(() => {
|
|
19083
|
-
x = 0,
|
|
19084
|
-
},
|
|
19085
|
-
S = 0, b?.id === null && b?.status === "queued" && (b = null,
|
|
19086
|
-
},
|
|
19180
|
+
x = 0, ne(e.deliveryId);
|
|
19181
|
+
}, zb) : S = globalThis.setTimeout(() => {
|
|
19182
|
+
S = 0, b?.id === null && b?.status === "queued" && (b = null, M(), V());
|
|
19183
|
+
}, Bb);
|
|
19087
19184
|
} catch (e) {
|
|
19088
|
-
b = null,
|
|
19185
|
+
b = null, M(), V();
|
|
19089
19186
|
let t = e instanceof Error ? e.message : String(e);
|
|
19090
19187
|
throw console.error(`[Mesurer] Failed to queue feedback for Codex: ${t}`), e;
|
|
19091
19188
|
} finally {
|
|
@@ -19093,15 +19190,15 @@ function cx(e = {}) {
|
|
|
19093
19190
|
}
|
|
19094
19191
|
})(), C;
|
|
19095
19192
|
};
|
|
19096
|
-
if (e.command.register("codex.queue",
|
|
19097
|
-
|
|
19098
|
-
x = 0, b?.id &&
|
|
19193
|
+
if (e.command.register("codex.queue", ie), e.command.register("codex.send", ie), n) {
|
|
19194
|
+
V(), window.__MESURER_HOST__?.codexBridge && z(!0).catch(() => void 0), b?.id && (c = !0, x = globalThis.setTimeout(() => {
|
|
19195
|
+
x = 0, b?.id && ne(b.id);
|
|
19099
19196
|
}, 0));
|
|
19100
19197
|
let t = globalThis.setInterval(() => {
|
|
19101
|
-
c &&
|
|
19102
|
-
},
|
|
19198
|
+
c && z().catch(() => void 0);
|
|
19199
|
+
}, Rb);
|
|
19103
19200
|
e.lifecycle.onDispose(() => {
|
|
19104
|
-
w = !0,
|
|
19201
|
+
w = !0, U(), globalThis.clearInterval(t), _?.dispose(), _ = void 0;
|
|
19105
19202
|
});
|
|
19106
19203
|
}
|
|
19107
19204
|
}
|
|
@@ -19109,7 +19206,7 @@ function cx(e = {}) {
|
|
|
19109
19206
|
}
|
|
19110
19207
|
//#endregion
|
|
19111
19208
|
//#region src/plugin-catalog.ts
|
|
19112
|
-
var
|
|
19209
|
+
var cx = [
|
|
19113
19210
|
{
|
|
19114
19211
|
id: _b,
|
|
19115
19212
|
label: "Context",
|
|
@@ -19145,17 +19242,18 @@ var lx = [
|
|
|
19145
19242
|
{
|
|
19146
19243
|
id: Ib,
|
|
19147
19244
|
label: "Codex",
|
|
19245
|
+
description: "Connects Mesurer to your open Codex threads on this computer.",
|
|
19148
19246
|
order: 45,
|
|
19149
|
-
create:
|
|
19247
|
+
create: sx
|
|
19150
19248
|
}
|
|
19151
|
-
],
|
|
19152
|
-
let t = e !== void 0, n = new Map((e ?? []).map((e) => [e.id, e])), r = new Set(
|
|
19249
|
+
], lx = (e) => {
|
|
19250
|
+
let t = e !== void 0, n = new Map((e ?? []).map((e) => [e.id, e])), r = new Set(cx.map((e) => e.id)), i = cx.map((e) => {
|
|
19153
19251
|
let r = n.get(e.id);
|
|
19154
19252
|
return {
|
|
19155
19253
|
...e,
|
|
19156
19254
|
settingsIds: e.settingsIds ? [...e.settingsIds] : void 0,
|
|
19157
19255
|
hiddenSettingsControlIds: e.hiddenSettingsControlIds ? [...e.hiddenSettingsControlIds] : void 0,
|
|
19158
|
-
enabled:
|
|
19256
|
+
enabled: t ? !!r : e.enabled !== !1,
|
|
19159
19257
|
create: r ? () => r : e.create
|
|
19160
19258
|
};
|
|
19161
19259
|
});
|
|
@@ -19166,7 +19264,7 @@ var lx = [
|
|
|
19166
19264
|
create: () => n
|
|
19167
19265
|
});
|
|
19168
19266
|
return i;
|
|
19169
|
-
},
|
|
19267
|
+
}, ux = {
|
|
19170
19268
|
select: "select",
|
|
19171
19269
|
xray: "xray",
|
|
19172
19270
|
colorPicker: "color-picker",
|
|
@@ -19176,7 +19274,7 @@ var lx = [
|
|
|
19176
19274
|
distance: "distance",
|
|
19177
19275
|
settings: "settings"
|
|
19178
19276
|
};
|
|
19179
|
-
function
|
|
19277
|
+
function dx(e = {}) {
|
|
19180
19278
|
if (!("document" in globalThis)) throw Error("mountMesurer() requires a browser or Electron renderer document.");
|
|
19181
19279
|
let { target: t = document.body, isolate: n = !0, shadowMode: r = "open", topLayer: i = !0, agent: a = !1, signal: o, onPluginHost: s, onPluginsReady: c, plugins: l, excludeBuiltins: u, excludePlugins: d, ...f } = e;
|
|
19182
19280
|
if (o?.aborted) throw o.reason ?? new DOMException("Mesurer mount aborted.", "AbortError");
|
|
@@ -19253,8 +19351,8 @@ function fx(e = {}) {
|
|
|
19253
19351
|
}), se = {
|
|
19254
19352
|
...f,
|
|
19255
19353
|
version: Uy,
|
|
19256
|
-
plugins:
|
|
19257
|
-
excludePlugins: u ? u.map((e) =>
|
|
19354
|
+
plugins: lx(l),
|
|
19355
|
+
excludePlugins: u ? u.map((e) => ux[e]) : [...d ?? []]
|
|
19258
19356
|
}, ce = _i(() => Rr(D_, gi(se, {
|
|
19259
19357
|
portalTarget: y,
|
|
19260
19358
|
pageTarget: t,
|
|
@@ -19325,20 +19423,20 @@ function fx(e = {}) {
|
|
|
19325
19423
|
}
|
|
19326
19424
|
//#endregion
|
|
19327
19425
|
//#region src/inject.ts
|
|
19328
|
-
var { target:
|
|
19329
|
-
function
|
|
19330
|
-
let e =
|
|
19331
|
-
if (!e) throw Error(`Mesurer injection target not found: ${
|
|
19332
|
-
return globalThis.__MESURER_INSTANCE__?.dispose(),
|
|
19333
|
-
...
|
|
19426
|
+
var { target: fx, globalName: px = "__MESURER__", reuseExisting: mx = !0, recoverDisconnected: hx = !1, ...gx } = globalThis.__MESURER_CONFIG__ ?? {}, _x = globalThis.__MESURER_INSTANCE__, vx = mx && _x?.element.isConnected ? _x : void 0;
|
|
19427
|
+
function yx() {
|
|
19428
|
+
let e = fx ? document.querySelector(fx) : document.body;
|
|
19429
|
+
if (!e) throw Error(`Mesurer injection target not found: ${fx}`);
|
|
19430
|
+
return globalThis.__MESURER_INSTANCE__?.dispose(), dx({
|
|
19431
|
+
...gx,
|
|
19334
19432
|
target: e,
|
|
19335
19433
|
agent: {
|
|
19336
|
-
globalName:
|
|
19434
|
+
globalName: px,
|
|
19337
19435
|
root: document
|
|
19338
19436
|
}
|
|
19339
19437
|
});
|
|
19340
19438
|
}
|
|
19341
|
-
var
|
|
19439
|
+
var bx = (e) => {
|
|
19342
19440
|
globalThis.__MESURER_INJECT_RECOVERY__?.stop();
|
|
19343
19441
|
let t = !1, n = !1, r = () => {
|
|
19344
19442
|
if (n = !1, t || globalThis.__MESURER_INSTANCE__?.element.isConnected) return;
|
|
@@ -19357,7 +19455,7 @@ var xx = (e) => {
|
|
|
19357
19455
|
}), globalThis.__MESURER_INJECT_RECOVERY__ = { stop() {
|
|
19358
19456
|
t = !0, i.disconnect();
|
|
19359
19457
|
} };
|
|
19360
|
-
},
|
|
19361
|
-
globalThis.__MESURER_INSTANCE__ =
|
|
19458
|
+
}, xx = vx ?? yx();
|
|
19459
|
+
globalThis.__MESURER_INSTANCE__ = xx, globalThis.__MESURER_INJECT_RECOVERY__?.stop(), globalThis.__MESURER_INJECT_RECOVERY__ = void 0, hx && bx(yx), await xx.ready;
|
|
19362
19460
|
//#endregion
|
|
19363
|
-
export {
|
|
19461
|
+
export { xx as mesurer };
|