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/index.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) => {
|
|
@@ -18926,34 +19010,34 @@ function zb(e, t, n = !0) {
|
|
|
18926
19010
|
};
|
|
18927
19011
|
}
|
|
18928
19012
|
//#endregion
|
|
18929
|
-
//#region src/codex
|
|
18930
|
-
var Bb = "mesurer.codex", Vb = "codex:v1", Hb =
|
|
19013
|
+
//#region src/plugins/codex/index.ts
|
|
19014
|
+
var Bb = "mesurer.codex", Vb = "codex:v1", Hb = 2e3, Ub = 750, Wb = 1800, Gb = 2e3, Kb = 12e4, qb = 10, Jb = 5, Yb = [
|
|
18931
19015
|
"Implement the current human feedback from Mesurer in this project.",
|
|
18932
19016
|
"Treat the rendered page as the source of truth, preserve unrelated Mesurer review state,",
|
|
18933
19017
|
"and verify the affected UI in the live page with Mesurer before claiming completion."
|
|
18934
|
-
].join(" "),
|
|
19018
|
+
].join(" "), Xb = {
|
|
18935
19019
|
viewBox: "0 0 256 256",
|
|
18936
19020
|
paths: ["M224,48,32,120l88,32,32,88Z M120,152l104-104"]
|
|
18937
|
-
},
|
|
19021
|
+
}, Zb = {
|
|
18938
19022
|
viewBox: "0 0 256 256",
|
|
18939
19023
|
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"]
|
|
18940
|
-
},
|
|
19024
|
+
}, Qb = {
|
|
18941
19025
|
viewBox: "0 0 256 256",
|
|
18942
19026
|
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"]
|
|
18943
|
-
},
|
|
19027
|
+
}, $b = () => {
|
|
18944
19028
|
try {
|
|
18945
|
-
let
|
|
18946
|
-
return
|
|
19029
|
+
let e = globalThis.location;
|
|
19030
|
+
return e?.origin ? `mesurer-codex-ui:v2:${e.origin}${e.pathname}` : null;
|
|
18947
19031
|
} catch {
|
|
18948
19032
|
return null;
|
|
18949
19033
|
}
|
|
18950
|
-
},
|
|
18951
|
-
let
|
|
18952
|
-
if (!
|
|
19034
|
+
}, ex = () => {
|
|
19035
|
+
let e = $b();
|
|
19036
|
+
if (!e) return null;
|
|
18953
19037
|
try {
|
|
18954
|
-
let
|
|
18955
|
-
if (!
|
|
18956
|
-
let n = JSON.parse(
|
|
19038
|
+
let t = globalThis.sessionStorage?.getItem(e);
|
|
19039
|
+
if (!t) return null;
|
|
19040
|
+
let n = JSON.parse(t);
|
|
18957
19041
|
if (n.version !== 1) return null;
|
|
18958
19042
|
let r = n.originThread?.trim() || null, i = n.selectedThread?.trim() || null, a = n.delivery;
|
|
18959
19043
|
return {
|
|
@@ -18973,39 +19057,41 @@ var Bb = "mesurer.codex", Vb = "codex:v1", Hb = "http://127.0.0.1:47365", Ub = 2
|
|
|
18973
19057
|
} catch {
|
|
18974
19058
|
return null;
|
|
18975
19059
|
}
|
|
18976
|
-
},
|
|
18977
|
-
let
|
|
18978
|
-
if (
|
|
18979
|
-
globalThis.sessionStorage?.setItem(
|
|
19060
|
+
}, tx = (e) => {
|
|
19061
|
+
let t = $b();
|
|
19062
|
+
if (t) try {
|
|
19063
|
+
globalThis.sessionStorage?.setItem(t, JSON.stringify(e));
|
|
18980
19064
|
} catch {}
|
|
18981
|
-
},
|
|
18982
|
-
let
|
|
18983
|
-
|
|
18984
|
-
|
|
18985
|
-
|
|
18986
|
-
|
|
18987
|
-
|
|
18988
|
-
|
|
18989
|
-
|
|
18990
|
-
|
|
18991
|
-
|
|
18992
|
-
|
|
18993
|
-
|
|
18994
|
-
|
|
18995
|
-
|
|
18996
|
-
|
|
18997
|
-
|
|
18998
|
-
|
|
18999
|
-
|
|
19000
|
-
|
|
19001
|
-
|
|
19002
|
-
|
|
19003
|
-
|
|
19065
|
+
}, nx = async (e) => {
|
|
19066
|
+
let t = window.__MESURER_HOST__?.codexBridge;
|
|
19067
|
+
if (!t) throw Error("Codex Bridge is unavailable in this host.");
|
|
19068
|
+
let n = await t(e);
|
|
19069
|
+
if (n.ok === !1) throw Error(n.error ?? "Codex Bridge request failed.");
|
|
19070
|
+
return n;
|
|
19071
|
+
}, rx = (e) => {
|
|
19072
|
+
let t = e.runtime;
|
|
19073
|
+
return !t || ![
|
|
19074
|
+
"shared",
|
|
19075
|
+
"standalone",
|
|
19076
|
+
"desktop",
|
|
19077
|
+
"none"
|
|
19078
|
+
].includes(t.source) || ![
|
|
19079
|
+
"shared-app-server",
|
|
19080
|
+
"desktop-queue",
|
|
19081
|
+
"private-stdio",
|
|
19082
|
+
"none"
|
|
19083
|
+
].includes(t.transport) || t.reason !== null && t.reason !== "desktop-private-transport" && t.reason !== "runtime-not-found" ? null : {
|
|
19084
|
+
source: t.source,
|
|
19085
|
+
transport: t.transport,
|
|
19086
|
+
available: t.available === !0,
|
|
19087
|
+
reason: t.reason
|
|
19088
|
+
};
|
|
19089
|
+
}, ix = (e) => ({
|
|
19004
19090
|
thread: e.thread?.trim() || null,
|
|
19005
19091
|
threads: Array.isArray(e.threads) ? e.threads.filter((e) => e.trim().length > 0) : []
|
|
19006
|
-
}),
|
|
19092
|
+
}), ax = (e) => {
|
|
19007
19093
|
let t = e.deliveryId?.trim(), n = e.thread?.trim(), r = e.status;
|
|
19008
|
-
if (!t || !n || !r) throw Error("
|
|
19094
|
+
if (!t || !n || !r) throw Error("Codex Bridge returned an invalid delivery state.");
|
|
19009
19095
|
let i = {
|
|
19010
19096
|
id: t,
|
|
19011
19097
|
thread: n,
|
|
@@ -19015,7 +19101,7 @@ var Bb = "mesurer.codex", Vb = "codex:v1", Hb = "http://127.0.0.1:47365", Ub = 2
|
|
|
19015
19101
|
updatedAt: Number.isFinite(e.updatedAt) ? Number(e.updatedAt) : 0
|
|
19016
19102
|
};
|
|
19017
19103
|
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;
|
|
19018
|
-
},
|
|
19104
|
+
}, ox = (e) => ({
|
|
19019
19105
|
thread: e.thread?.trim() || null,
|
|
19020
19106
|
threads: Array.isArray(e.threadDetails) ? e.threadDetails.flatMap((e) => {
|
|
19021
19107
|
let t = e.id?.trim() ?? "";
|
|
@@ -19027,7 +19113,7 @@ var Bb = "mesurer.codex", Vb = "codex:v1", Hb = "http://127.0.0.1:47365", Ub = 2
|
|
|
19027
19113
|
}] : [];
|
|
19028
19114
|
}) : [],
|
|
19029
19115
|
hasMore: e.hasMore === !0
|
|
19030
|
-
}),
|
|
19116
|
+
}), sx = async (e, t, n) => {
|
|
19031
19117
|
let r = t?.instruction?.trim() || n, i = await e.annotations(), a = t?.annotationIds, o = a ? a.flatMap((e) => {
|
|
19032
19118
|
let t = i.find((t) => t.id === e);
|
|
19033
19119
|
return t ? [t] : [];
|
|
@@ -19050,76 +19136,87 @@ var Bb = "mesurer.codex", Vb = "codex:v1", Hb = "http://127.0.0.1:47365", Ub = 2
|
|
|
19050
19136
|
])
|
|
19051
19137
|
].join("\n").trimEnd()
|
|
19052
19138
|
};
|
|
19053
|
-
},
|
|
19054
|
-
function
|
|
19055
|
-
let t = e.
|
|
19139
|
+
}, cx = (e) => e.length > 16 ? `${e.slice(0, 8)}…${e.slice(-4)}` : e, lx = (e, t = 42) => e.length > t ? `${e.slice(0, t - 1)}…` : e, ux = (e) => e instanceof Error && e.message === "Codex Bridge is unavailable in this host.";
|
|
19140
|
+
function dx(e = {}) {
|
|
19141
|
+
let t = e.instruction?.trim() || Yb, n = e.ui ?? !0, r = e.clearCompletedAnnotations ?? !0;
|
|
19056
19142
|
return {
|
|
19057
19143
|
id: Bb,
|
|
19058
19144
|
version: Uy,
|
|
19059
19145
|
requires: [Sb],
|
|
19060
19146
|
provides: [Vb],
|
|
19061
19147
|
setup(e) {
|
|
19062
|
-
let
|
|
19063
|
-
if (!
|
|
19064
|
-
let
|
|
19065
|
-
id:
|
|
19066
|
-
thread:
|
|
19067
|
-
status:
|
|
19068
|
-
annotationIds:
|
|
19069
|
-
queuedSubmissionId:
|
|
19070
|
-
dispatch:
|
|
19071
|
-
dispatchError:
|
|
19072
|
-
} : null, x = 0, S = 0, C = null, w = !1, T = async () =>
|
|
19148
|
+
let i = e.service.get(Sb);
|
|
19149
|
+
if (!i) throw Error("Mesurer Codex plugin requires context() from mesurer-solid/plugins.");
|
|
19150
|
+
let a = n ? ex() : 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 = Jb, _, v = "", y = null, b = a?.delivery ? {
|
|
19151
|
+
id: a.delivery.id,
|
|
19152
|
+
thread: a.delivery.thread,
|
|
19153
|
+
status: a.delivery.status,
|
|
19154
|
+
annotationIds: a.delivery.annotationIds,
|
|
19155
|
+
queuedSubmissionId: a.delivery.queuedSubmissionId ?? null,
|
|
19156
|
+
dispatch: a.delivery.dispatch ?? null,
|
|
19157
|
+
dispatchError: a.delivery.dispatchError ?? null
|
|
19158
|
+
} : null, x = 0, S = 0, C = null, w = !1, T = async () => {
|
|
19159
|
+
let e = rx(await nx({ action: "runtime" }));
|
|
19160
|
+
if (!e) throw Error("Codex Bridge returned an invalid runtime state.");
|
|
19161
|
+
return s = e, e;
|
|
19162
|
+
}, E = async () => {
|
|
19163
|
+
let e = await nx({
|
|
19164
|
+
action: "health",
|
|
19165
|
+
thread: u ?? l ?? void 0
|
|
19166
|
+
});
|
|
19167
|
+
return s = rx(e) ?? s, ix(e);
|
|
19168
|
+
}, D = E, O = async (e) => ax(await nx({
|
|
19169
|
+
action: "delivery",
|
|
19170
|
+
deliveryId: e
|
|
19171
|
+
})), k = async (e) => {
|
|
19073
19172
|
if (!e.id || !e.thread) throw Error("Cannot restore a Codex delivery without its id and thread.");
|
|
19074
|
-
let
|
|
19173
|
+
let t = {
|
|
19174
|
+
action: "restore",
|
|
19075
19175
|
deliveryId: e.id,
|
|
19076
19176
|
thread: e.thread
|
|
19077
19177
|
};
|
|
19078
|
-
return e.queuedSubmissionId && (
|
|
19079
|
-
|
|
19080
|
-
|
|
19081
|
-
|
|
19082
|
-
|
|
19083
|
-
|
|
19084
|
-
|
|
19085
|
-
|
|
19086
|
-
|
|
19087
|
-
return r && n.set("thread", r), sx(await ix(t, `threads?${n.toString()}`));
|
|
19088
|
-
}, k = () => u ?? l ?? (d ? null : f), A = () => {
|
|
19089
|
-
if (!r) return;
|
|
19178
|
+
return e.queuedSubmissionId && (t.queuedSubmissionId = e.queuedSubmissionId), ax(await nx(t));
|
|
19179
|
+
}, A = async (e = {}) => {
|
|
19180
|
+
let t = {
|
|
19181
|
+
action: "threads",
|
|
19182
|
+
limit: e.limit ?? qb
|
|
19183
|
+
}, n = e.thread?.trim();
|
|
19184
|
+
return n && (t.thread = n), ox(await nx(t));
|
|
19185
|
+
}, j = () => u ?? l ?? (d ? null : f), M = () => {
|
|
19186
|
+
if (!n) return;
|
|
19090
19187
|
let e = b?.id && (b.status === "queued" || b.status === "working" || b.status === "interrupted") ? {
|
|
19091
19188
|
id: b.id,
|
|
19092
|
-
thread: b.thread ??
|
|
19189
|
+
thread: b.thread ?? j() ?? "",
|
|
19093
19190
|
status: b.status,
|
|
19094
19191
|
annotationIds: [...b.annotationIds],
|
|
19095
19192
|
queuedSubmissionId: b.queuedSubmissionId,
|
|
19096
19193
|
dispatch: b.dispatch,
|
|
19097
19194
|
dispatchError: b.dispatchError
|
|
19098
19195
|
} : null;
|
|
19099
|
-
|
|
19196
|
+
tx({
|
|
19100
19197
|
version: 1,
|
|
19101
19198
|
originThread: l,
|
|
19102
19199
|
selectedThread: u,
|
|
19103
19200
|
delivery: e?.thread ? e : null
|
|
19104
19201
|
});
|
|
19105
|
-
},
|
|
19202
|
+
}, N = (e, t = !1) => {
|
|
19106
19203
|
let n = e.trim();
|
|
19107
|
-
n && ((t || !l) && (l = n), u = n, d = !1,
|
|
19108
|
-
},
|
|
19204
|
+
n && ((t || !l) && (l = n), u = n, d = !1, M());
|
|
19205
|
+
}, P = () => b !== null && [
|
|
19109
19206
|
"queueing",
|
|
19110
19207
|
"queued",
|
|
19111
19208
|
"working",
|
|
19112
19209
|
"completed"
|
|
19113
|
-
].includes(b.status),
|
|
19210
|
+
].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 ? [
|
|
19114
19211
|
"queueing",
|
|
19115
19212
|
"queued",
|
|
19116
19213
|
"working"
|
|
19117
|
-
].includes(b.status) ?
|
|
19214
|
+
].includes(b.status) ? Zb : b.status === "completed" ? Qb : Xb : Xb, R = () => {
|
|
19118
19215
|
let e = [], t = /* @__PURE__ */ new Set(), n = (n) => {
|
|
19119
19216
|
t.has(n.id) || (t.add(n.id), e.push(n));
|
|
19120
19217
|
}, r = (e) => ({
|
|
19121
19218
|
id: e,
|
|
19122
|
-
title: `Codex ${
|
|
19219
|
+
title: `Codex ${cx(e)}`,
|
|
19123
19220
|
updatedAt: null,
|
|
19124
19221
|
connected: !0
|
|
19125
19222
|
});
|
|
@@ -19129,96 +19226,94 @@ function fx(e = {}) {
|
|
|
19129
19226
|
for (let e of m) n(e);
|
|
19130
19227
|
for (let e of p) n(m.find((t) => t.id === e) ?? r(e));
|
|
19131
19228
|
return e;
|
|
19132
|
-
},
|
|
19133
|
-
if (
|
|
19134
|
-
|
|
19135
|
-
|
|
19136
|
-
|
|
19137
|
-
|
|
19138
|
-
|
|
19139
|
-
|
|
19229
|
+
}, z = (e = !1) => Promise.resolve(), B = () => {
|
|
19230
|
+
if (o !== "available") {
|
|
19231
|
+
let e = s?.source === "desktop" && s.reason === "desktop-private-transport";
|
|
19232
|
+
return [{
|
|
19233
|
+
id: "codex.thread.connect",
|
|
19234
|
+
label: o === "unavailable" ? e ? "Retry Codex Desktop" : "Retry Codex connection" : "Choose Codex thread…",
|
|
19235
|
+
run: () => z(!0)
|
|
19236
|
+
}];
|
|
19237
|
+
}
|
|
19238
|
+
let e = R(), t = e.slice(0, g), n = j(), r = t.map((e) => {
|
|
19239
|
+
let t = e.id === l ? "Current · " : e.connected ? "Loaded · " : "", r = b?.thread === e.id ? ` · ${F(b.status)}` : "";
|
|
19140
19240
|
return {
|
|
19141
19241
|
id: `codex.thread.${e.id}`,
|
|
19142
|
-
label: `${t}${
|
|
19242
|
+
label: `${t}${lx(e.title)}${r}`,
|
|
19143
19243
|
checked: () => n === e.id,
|
|
19144
|
-
disabled: () =>
|
|
19244
|
+
disabled: () => P(),
|
|
19145
19245
|
run() {
|
|
19146
|
-
|
|
19246
|
+
P() || (N(e.id, !l), V());
|
|
19147
19247
|
}
|
|
19148
19248
|
};
|
|
19149
19249
|
});
|
|
19150
|
-
return g <
|
|
19250
|
+
return g < qb && (e.length > g || h) && r.push({
|
|
19151
19251
|
id: "codex.thread.show-more",
|
|
19152
19252
|
label: "Show 5 more…",
|
|
19153
19253
|
run() {
|
|
19154
|
-
g =
|
|
19254
|
+
g = qb, V();
|
|
19155
19255
|
}
|
|
19156
19256
|
}), r;
|
|
19157
|
-
},
|
|
19158
|
-
if (!
|
|
19159
|
-
let t =
|
|
19160
|
-
bridgeAvailability:
|
|
19257
|
+
}, V = () => {
|
|
19258
|
+
if (!n || w) return;
|
|
19259
|
+
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({
|
|
19260
|
+
bridgeAvailability: o,
|
|
19261
|
+
codexRuntime: s,
|
|
19161
19262
|
routeNeedsSelection: d,
|
|
19162
19263
|
target: t,
|
|
19163
|
-
label:
|
|
19264
|
+
label: c,
|
|
19164
19265
|
visibleThreadCount: g,
|
|
19165
19266
|
activeDelivery: b,
|
|
19166
|
-
items:
|
|
19267
|
+
items: r.map((e) => ({
|
|
19167
19268
|
id: e.id,
|
|
19168
19269
|
label: e.label,
|
|
19169
19270
|
checked: e.checked?.() ?? null,
|
|
19170
19271
|
disabled: e.disabled?.() ?? !1
|
|
19171
19272
|
}))
|
|
19172
19273
|
});
|
|
19173
|
-
|
|
19274
|
+
l !== v && (v = l, _?.dispose(), _ = e.tool.register({
|
|
19174
19275
|
id: "codex.send",
|
|
19175
|
-
label:
|
|
19276
|
+
label: c,
|
|
19176
19277
|
command: "codex.queue",
|
|
19177
19278
|
order: 73,
|
|
19178
|
-
icon:
|
|
19279
|
+
icon: L(),
|
|
19179
19280
|
disabled: () => !i,
|
|
19180
|
-
menu:
|
|
19281
|
+
menu: r.length ? {
|
|
19181
19282
|
label: "Codex destination",
|
|
19182
|
-
items:
|
|
19283
|
+
items: r
|
|
19183
19284
|
} : void 0
|
|
19184
19285
|
}));
|
|
19185
|
-
},
|
|
19186
|
-
if (
|
|
19187
|
-
let
|
|
19188
|
-
|
|
19189
|
-
|
|
19190
|
-
|
|
19191
|
-
|
|
19192
|
-
});
|
|
19193
|
-
m = t.threads, h = t.hasMore;
|
|
19194
|
-
} catch {
|
|
19195
|
-
m = p.map((e) => ({
|
|
19196
|
-
id: e,
|
|
19197
|
-
title: `Codex ${lx(e)}`,
|
|
19198
|
-
updatedAt: null,
|
|
19199
|
-
connected: !0
|
|
19200
|
-
})), h = !1;
|
|
19201
|
-
}
|
|
19286
|
+
}, H = async (e) => {
|
|
19287
|
+
if (o !== "available") return;
|
|
19288
|
+
let t = await A({
|
|
19289
|
+
limit: qb,
|
|
19290
|
+
thread: e ?? void 0
|
|
19291
|
+
});
|
|
19292
|
+
m = t.threads, h = t.hasMore, p = t.threads.filter((e) => e.connected).map((e) => e.id), f = t.thread;
|
|
19202
19293
|
};
|
|
19203
|
-
|
|
19294
|
+
z = (e = !1) => w || o === "unknown" && !e ? Promise.resolve() : y || (y = (async () => {
|
|
19204
19295
|
try {
|
|
19205
|
-
let e = await
|
|
19206
|
-
|
|
19207
|
-
let
|
|
19208
|
-
|
|
19296
|
+
let e = await D();
|
|
19297
|
+
o = "available", c = !0, f = e.thread, await H(u ?? l ?? e.thread);
|
|
19298
|
+
let t = u ?? l;
|
|
19299
|
+
t && p.includes(t) ? d = !1 : p.length === 1 ? N(p[0], !0) : d = !0, !d && t && M();
|
|
19209
19300
|
} catch (e) {
|
|
19210
|
-
throw
|
|
19301
|
+
throw o = "unavailable", s = await T().catch(() => s), e;
|
|
19211
19302
|
} finally {
|
|
19212
|
-
y = null,
|
|
19303
|
+
y = null, V();
|
|
19213
19304
|
}
|
|
19214
19305
|
})(), y);
|
|
19215
|
-
let
|
|
19306
|
+
let U = () => {
|
|
19216
19307
|
x &&= (globalThis.clearTimeout(x), 0), S &&= (globalThis.clearTimeout(S), 0);
|
|
19217
|
-
},
|
|
19308
|
+
}, W = () => {
|
|
19309
|
+
S && globalThis.clearTimeout(S), S = globalThis.setTimeout(() => {
|
|
19310
|
+
S = 0, b?.status === "completed" && (b = null, M(), V());
|
|
19311
|
+
}, Wb);
|
|
19312
|
+
}, ee = () => {
|
|
19218
19313
|
S && globalThis.clearTimeout(S), S = globalThis.setTimeout(() => {
|
|
19219
|
-
S = 0, b?.status
|
|
19220
|
-
},
|
|
19221
|
-
},
|
|
19314
|
+
S = 0, !(b?.status !== "queued" || b.dispatch !== "desktop-opened" && b.dispatch !== "desktop-wake-failed") && (b = null, M(), V());
|
|
19315
|
+
}, Wb);
|
|
19316
|
+
}, te = async (e) => {
|
|
19222
19317
|
if (!(!b || b.id !== e.id)) {
|
|
19223
19318
|
if (b = {
|
|
19224
19319
|
...b,
|
|
@@ -19227,104 +19322,106 @@ function fx(e = {}) {
|
|
|
19227
19322
|
queuedSubmissionId: e.queuedSubmissionId ?? b.queuedSubmissionId,
|
|
19228
19323
|
dispatch: e.dispatch ?? b.dispatch,
|
|
19229
19324
|
dispatchError: e.dispatchError ?? b.dispatchError
|
|
19230
|
-
},
|
|
19231
|
-
|
|
19232
|
-
|
|
19325
|
+
}, M(), e.status === "queued" && (e.dispatch === "desktop-opened" || e.dispatch === "desktop-wake-failed")) {
|
|
19326
|
+
V(), ee();
|
|
19327
|
+
return;
|
|
19328
|
+
}
|
|
19329
|
+
if (e.status === "completed") {
|
|
19330
|
+
if (r) for (let e of b.annotationIds) await i.removeAnnotation(e);
|
|
19331
|
+
M(), V(), W();
|
|
19233
19332
|
return;
|
|
19234
19333
|
}
|
|
19235
19334
|
if (e.status === "interrupted") {
|
|
19236
|
-
|
|
19335
|
+
M(), V();
|
|
19237
19336
|
let t = e.updatedAt > 0 ? e.updatedAt : Date.now();
|
|
19238
|
-
Date.now() - t <
|
|
19239
|
-
x = 0,
|
|
19240
|
-
},
|
|
19337
|
+
Date.now() - t < Kb && (x = globalThis.setTimeout(() => {
|
|
19338
|
+
x = 0, ne(e.id);
|
|
19339
|
+
}, Gb));
|
|
19241
19340
|
return;
|
|
19242
19341
|
}
|
|
19243
|
-
|
|
19244
|
-
x = 0,
|
|
19245
|
-
},
|
|
19342
|
+
V(), x = globalThis.setTimeout(() => {
|
|
19343
|
+
x = 0, ne(e.id);
|
|
19344
|
+
}, Ub);
|
|
19246
19345
|
}
|
|
19247
|
-
},
|
|
19346
|
+
}, ne = async (e) => {
|
|
19248
19347
|
if (!(w || b?.id !== e)) try {
|
|
19249
|
-
await
|
|
19250
|
-
} catch (
|
|
19348
|
+
await te(await O(e));
|
|
19349
|
+
} catch (t) {
|
|
19251
19350
|
if (b?.id !== e) return;
|
|
19252
|
-
let
|
|
19351
|
+
let n = t;
|
|
19253
19352
|
if (b.status === "queued" && b.thread) try {
|
|
19254
|
-
|
|
19255
|
-
let e = await
|
|
19256
|
-
await
|
|
19353
|
+
o !== "available" && await z(!0);
|
|
19354
|
+
let e = await k(b);
|
|
19355
|
+
await te(e);
|
|
19257
19356
|
return;
|
|
19258
19357
|
} catch (e) {
|
|
19259
|
-
|
|
19358
|
+
n = e;
|
|
19260
19359
|
}
|
|
19261
19360
|
if (b?.id !== e) return;
|
|
19262
19361
|
if (b.status === "interrupted") {
|
|
19263
|
-
|
|
19362
|
+
V();
|
|
19264
19363
|
return;
|
|
19265
19364
|
}
|
|
19266
19365
|
b = {
|
|
19267
19366
|
...b,
|
|
19268
19367
|
status: "failed"
|
|
19269
|
-
},
|
|
19368
|
+
}, M(), ux(n) && (o = "unavailable"), V();
|
|
19270
19369
|
}
|
|
19271
|
-
},
|
|
19272
|
-
health:
|
|
19273
|
-
listThreads:
|
|
19274
|
-
delivery:
|
|
19370
|
+
}, re = {
|
|
19371
|
+
health: E,
|
|
19372
|
+
listThreads: A,
|
|
19373
|
+
delivery: O,
|
|
19275
19374
|
async useThread(e) {
|
|
19276
|
-
let
|
|
19277
|
-
if (!
|
|
19278
|
-
let
|
|
19279
|
-
|
|
19280
|
-
|
|
19281
|
-
|
|
19282
|
-
|
|
19283
|
-
return j(n, !l), f = r.thread, p = r.threads, s = "available", c = !0, B(), r;
|
|
19375
|
+
let t = e.trim();
|
|
19376
|
+
if (!t) throw Error("Codex thread must be a non-empty string.");
|
|
19377
|
+
let n = await nx({
|
|
19378
|
+
action: "target",
|
|
19379
|
+
thread: t
|
|
19380
|
+
}), r = ix(n);
|
|
19381
|
+
return s = rx(n) ?? s, N(t, !l), f = r.thread, p = r.threads, o = "available", c = !0, V(), r;
|
|
19284
19382
|
},
|
|
19285
19383
|
async queue(e) {
|
|
19286
|
-
let
|
|
19287
|
-
if (
|
|
19288
|
-
let
|
|
19289
|
-
|
|
19384
|
+
let r = await sx(i, e, t), a = e?.thread?.trim(), s = a || (n ? j() : null);
|
|
19385
|
+
if (n && !a && (d || !s)) throw Error("Choose a Codex thread before queueing feedback.");
|
|
19386
|
+
let c = { message: r.message };
|
|
19387
|
+
s && (c.thread = s);
|
|
19290
19388
|
try {
|
|
19291
|
-
let e = await
|
|
19292
|
-
|
|
19293
|
-
|
|
19294
|
-
|
|
19295
|
-
|
|
19296
|
-
|
|
19297
|
-
|
|
19298
|
-
thread: n,
|
|
19389
|
+
let e = await nx({
|
|
19390
|
+
action: "queue",
|
|
19391
|
+
...c
|
|
19392
|
+
}), t = e.thread?.trim();
|
|
19393
|
+
if (!t) throw Error("Codex Bridge did not report the destination thread.");
|
|
19394
|
+
let n = {
|
|
19395
|
+
thread: t,
|
|
19299
19396
|
output: e.output ?? "",
|
|
19300
19397
|
delivery: "queued",
|
|
19301
19398
|
deliveryId: e.deliveryId?.trim() || null,
|
|
19302
19399
|
status: e.status ?? "queued",
|
|
19303
|
-
annotationIds:
|
|
19400
|
+
annotationIds: r.annotationIds
|
|
19304
19401
|
};
|
|
19305
|
-
return e.queuedSubmissionId !== void 0 && (
|
|
19402
|
+
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;
|
|
19306
19403
|
} catch (e) {
|
|
19307
|
-
throw
|
|
19404
|
+
throw n && ux(e) && (o = "unavailable", V()), e;
|
|
19308
19405
|
}
|
|
19309
19406
|
},
|
|
19310
19407
|
send(e) {
|
|
19311
|
-
return
|
|
19408
|
+
return re.queue(e);
|
|
19312
19409
|
}
|
|
19313
19410
|
};
|
|
19314
|
-
e.service.provide(Vb,
|
|
19315
|
-
let
|
|
19316
|
-
if (!(C ||
|
|
19411
|
+
e.service.provide(Vb, re);
|
|
19412
|
+
let ie = async () => {
|
|
19413
|
+
if (!(C || P())) return U(), b = {
|
|
19317
19414
|
id: null,
|
|
19318
|
-
thread:
|
|
19415
|
+
thread: j(),
|
|
19319
19416
|
status: "queueing",
|
|
19320
19417
|
annotationIds: [],
|
|
19321
19418
|
queuedSubmissionId: null,
|
|
19322
19419
|
dispatch: null,
|
|
19323
19420
|
dispatchError: null
|
|
19324
|
-
},
|
|
19421
|
+
}, V(), C = (async () => {
|
|
19325
19422
|
try {
|
|
19326
|
-
|
|
19327
|
-
let e = await
|
|
19423
|
+
n && o !== "available" && await z(!0);
|
|
19424
|
+
let e = await re.queue();
|
|
19328
19425
|
b = {
|
|
19329
19426
|
id: e.deliveryId,
|
|
19330
19427
|
thread: e.thread,
|
|
@@ -19333,7 +19430,7 @@ function fx(e = {}) {
|
|
|
19333
19430
|
queuedSubmissionId: e.queuedSubmissionId ?? null,
|
|
19334
19431
|
dispatch: e.dispatch ?? null,
|
|
19335
19432
|
dispatchError: e.dispatchError ?? null
|
|
19336
|
-
},
|
|
19433
|
+
}, 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({
|
|
19337
19434
|
id: e.deliveryId,
|
|
19338
19435
|
thread: e.thread,
|
|
19339
19436
|
status: e.status,
|
|
@@ -19341,12 +19438,12 @@ function fx(e = {}) {
|
|
|
19341
19438
|
createdAt: 0,
|
|
19342
19439
|
updatedAt: 0
|
|
19343
19440
|
}) : x = globalThis.setTimeout(() => {
|
|
19344
|
-
x = 0,
|
|
19345
|
-
},
|
|
19346
|
-
S = 0, b?.id === null && b?.status === "queued" && (b = null,
|
|
19347
|
-
},
|
|
19441
|
+
x = 0, ne(e.deliveryId);
|
|
19442
|
+
}, Ub) : S = globalThis.setTimeout(() => {
|
|
19443
|
+
S = 0, b?.id === null && b?.status === "queued" && (b = null, M(), V());
|
|
19444
|
+
}, Wb);
|
|
19348
19445
|
} catch (e) {
|
|
19349
|
-
b = null,
|
|
19446
|
+
b = null, M(), V();
|
|
19350
19447
|
let t = e instanceof Error ? e.message : String(e);
|
|
19351
19448
|
throw console.error(`[Mesurer] Failed to queue feedback for Codex: ${t}`), e;
|
|
19352
19449
|
} finally {
|
|
@@ -19354,15 +19451,15 @@ function fx(e = {}) {
|
|
|
19354
19451
|
}
|
|
19355
19452
|
})(), C;
|
|
19356
19453
|
};
|
|
19357
|
-
if (e.command.register("codex.queue",
|
|
19358
|
-
|
|
19359
|
-
x = 0, b?.id &&
|
|
19454
|
+
if (e.command.register("codex.queue", ie), e.command.register("codex.send", ie), n) {
|
|
19455
|
+
V(), window.__MESURER_HOST__?.codexBridge && z(!0).catch(() => void 0), b?.id && (c = !0, x = globalThis.setTimeout(() => {
|
|
19456
|
+
x = 0, b?.id && ne(b.id);
|
|
19360
19457
|
}, 0));
|
|
19361
19458
|
let t = globalThis.setInterval(() => {
|
|
19362
|
-
c &&
|
|
19363
|
-
},
|
|
19459
|
+
c && z().catch(() => void 0);
|
|
19460
|
+
}, Hb);
|
|
19364
19461
|
e.lifecycle.onDispose(() => {
|
|
19365
|
-
w = !0,
|
|
19462
|
+
w = !0, U(), globalThis.clearInterval(t), _?.dispose(), _ = void 0;
|
|
19366
19463
|
});
|
|
19367
19464
|
}
|
|
19368
19465
|
}
|
|
@@ -19370,7 +19467,7 @@ function fx(e = {}) {
|
|
|
19370
19467
|
}
|
|
19371
19468
|
//#endregion
|
|
19372
19469
|
//#region src/plugin-catalog.ts
|
|
19373
|
-
var
|
|
19470
|
+
var fx = [
|
|
19374
19471
|
{
|
|
19375
19472
|
id: xb,
|
|
19376
19473
|
label: "Context",
|
|
@@ -19406,17 +19503,18 @@ var px = [
|
|
|
19406
19503
|
{
|
|
19407
19504
|
id: Bb,
|
|
19408
19505
|
label: "Codex",
|
|
19506
|
+
description: "Connects Mesurer to your open Codex threads on this computer.",
|
|
19409
19507
|
order: 45,
|
|
19410
|
-
create:
|
|
19508
|
+
create: dx
|
|
19411
19509
|
}
|
|
19412
|
-
],
|
|
19413
|
-
let t = e !== void 0, n = new Map((e ?? []).map((e) => [e.id, e])), r = new Set(
|
|
19510
|
+
], px = (e) => {
|
|
19511
|
+
let t = e !== void 0, n = new Map((e ?? []).map((e) => [e.id, e])), r = new Set(fx.map((e) => e.id)), i = fx.map((e) => {
|
|
19414
19512
|
let r = n.get(e.id);
|
|
19415
19513
|
return {
|
|
19416
19514
|
...e,
|
|
19417
19515
|
settingsIds: e.settingsIds ? [...e.settingsIds] : void 0,
|
|
19418
19516
|
hiddenSettingsControlIds: e.hiddenSettingsControlIds ? [...e.hiddenSettingsControlIds] : void 0,
|
|
19419
|
-
enabled:
|
|
19517
|
+
enabled: t ? !!r : e.enabled !== !1,
|
|
19420
19518
|
create: r ? () => r : e.create
|
|
19421
19519
|
};
|
|
19422
19520
|
});
|
|
@@ -19427,16 +19525,16 @@ var px = [
|
|
|
19427
19525
|
create: () => n
|
|
19428
19526
|
});
|
|
19429
19527
|
return i;
|
|
19430
|
-
},
|
|
19431
|
-
function
|
|
19528
|
+
}, mx = (e) => e;
|
|
19529
|
+
function hx() {
|
|
19432
19530
|
return nb();
|
|
19433
19531
|
}
|
|
19434
|
-
async function
|
|
19532
|
+
async function gx(e = {}) {
|
|
19435
19533
|
return rb(e);
|
|
19436
19534
|
}
|
|
19437
19535
|
//#endregion
|
|
19438
19536
|
//#region src/index.tsx
|
|
19439
|
-
var
|
|
19537
|
+
var _x = {
|
|
19440
19538
|
select: "select",
|
|
19441
19539
|
xray: "xray",
|
|
19442
19540
|
colorPicker: "color-picker",
|
|
@@ -19446,7 +19544,7 @@ var vx = {
|
|
|
19446
19544
|
distance: "distance",
|
|
19447
19545
|
settings: "settings"
|
|
19448
19546
|
};
|
|
19449
|
-
function
|
|
19547
|
+
function vx(e = {}) {
|
|
19450
19548
|
if (!("document" in globalThis)) throw Error("mountMesurer() requires a browser or Electron renderer document.");
|
|
19451
19549
|
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;
|
|
19452
19550
|
if (o?.aborted) throw o.reason ?? new DOMException("Mesurer mount aborted.", "AbortError");
|
|
@@ -19523,8 +19621,8 @@ function yx(e = {}) {
|
|
|
19523
19621
|
}), se = {
|
|
19524
19622
|
...f,
|
|
19525
19623
|
version: Uy,
|
|
19526
|
-
plugins:
|
|
19527
|
-
excludePlugins: u ? u.map((e) =>
|
|
19624
|
+
plugins: px(l),
|
|
19625
|
+
excludePlugins: u ? u.map((e) => _x[e]) : [...d ?? []]
|
|
19528
19626
|
}, ce = _i(() => Rr(D_, gi(se, {
|
|
19529
19627
|
portalTarget: y,
|
|
19530
19628
|
pageTarget: t,
|
|
@@ -19593,6 +19691,6 @@ function yx(e = {}) {
|
|
|
19593
19691
|
}
|
|
19594
19692
|
return ge;
|
|
19595
19693
|
}
|
|
19596
|
-
var
|
|
19694
|
+
var yx = vx;
|
|
19597
19695
|
//#endregion
|
|
19598
|
-
export { By as MESURER_TEXT_EDIT_SERVICE_ID, Uy as MESURER_VERSION, cb as captureMesurerContext, _b as copyTextToClipboard, Hy as createMesurerAgentHarness, fb as createMesurerCapturePlan,
|
|
19696
|
+
export { By as MESURER_TEXT_EDIT_SERVICE_ID, Uy as MESURER_VERSION, cb as captureMesurerContext, _b as copyTextToClipboard, Hy as createMesurerAgentHarness, fb as createMesurerCapturePlan, hx as createMesurerPluginHost, gx as createMesurerRuntime, mx as defineMesurerPlugin, db as formatMesurerContext, yx as mountMeasurer, vx as mountMesurer, gb as reviewMesurerAnnotation };
|