linear-grab 0.23.5 → 0.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.global.js +9 -7
- package/dist/linear-grab.js +1173 -294
- package/package.json +4 -1
package/dist/linear-grab.js
CHANGED
|
@@ -45964,45 +45964,82 @@ function u2() {
|
|
|
45964
45964
|
window.addEventListener("mousemove", i, !0), window.addEventListener("click", o, !0), window.addEventListener("keydown", s, !0);
|
|
45965
45965
|
});
|
|
45966
45966
|
}
|
|
45967
|
-
|
|
45968
|
-
|
|
45967
|
+
//#endregion
|
|
45968
|
+
//#region src/lib/cssShared.ts
|
|
45969
|
+
function d2(e) {
|
|
45969
45970
|
return e.split(",").map((e) => {
|
|
45970
45971
|
let t = e.trim();
|
|
45971
45972
|
return t.endsWith("ms") ? parseFloat(t) || 0 : t.endsWith("s") ? (parseFloat(t) || 0) * 1e3 : 0;
|
|
45972
45973
|
});
|
|
45973
45974
|
}
|
|
45975
|
+
var f2 = /* @__PURE__ */ new Set(/* @__PURE__ */ "width.height.min-width.min-height.max-width.max-height.top.left.right.bottom.inset.margin.margin-top.margin-right.margin-bottom.margin-left.padding.padding-top.padding-right.padding-bottom.padding-left.font-size.line-height.letter-spacing.box-shadow.filter.background-position.grid-template-columns.grid-template-rows.flex-basis.gap".split("."));
|
|
45974
45976
|
function p2(e) {
|
|
45977
|
+
return e.includes("all") ? ["all (includes layout/paint props)"] : e.filter((e) => f2.has(e));
|
|
45978
|
+
}
|
|
45979
|
+
function m2(e) {
|
|
45980
|
+
let t = h2(e);
|
|
45981
|
+
if (t === "ease-in" || t === "ease-in-out") return t;
|
|
45982
|
+
let n = t.match(/cubic-bezier\(\s*([\d.]+)\s*,\s*(-?[\d.]+)/);
|
|
45983
|
+
if (n) {
|
|
45984
|
+
let e = parseFloat(n[1]), r = parseFloat(n[2]);
|
|
45985
|
+
if (e >= .4 && r < e / 2) return t;
|
|
45986
|
+
}
|
|
45987
|
+
return null;
|
|
45988
|
+
}
|
|
45989
|
+
function h2(e) {
|
|
45990
|
+
let t = 0;
|
|
45991
|
+
for (let n = 0; n < e.length; n++) {
|
|
45992
|
+
let r = e[n];
|
|
45993
|
+
if (r === "(") t++;
|
|
45994
|
+
else if (r === ")") t--;
|
|
45995
|
+
else if (r === "," && t === 0) return e.slice(0, n).trim();
|
|
45996
|
+
}
|
|
45997
|
+
return e.trim();
|
|
45998
|
+
}
|
|
45999
|
+
var g2 = "[data-slot*=\"content\"], [role=\"menu\"], [role=\"dialog\"], [role=\"listbox\"]", _2 = /* @__PURE__ */ new Set([
|
|
46000
|
+
"width",
|
|
46001
|
+
"height",
|
|
46002
|
+
"flex-basis",
|
|
46003
|
+
"grid-template-columns",
|
|
46004
|
+
"grid-template-rows",
|
|
46005
|
+
"grid-template-areas"
|
|
46006
|
+
]);
|
|
46007
|
+
function v2(e, t) {
|
|
46008
|
+
if (e instanceof SVGElement) return !0;
|
|
46009
|
+
try {
|
|
46010
|
+
if (e.closest("svg")) return !0;
|
|
46011
|
+
} catch {}
|
|
46012
|
+
try {
|
|
46013
|
+
if (e.closest(g2)) return !0;
|
|
46014
|
+
} catch {}
|
|
46015
|
+
try {
|
|
46016
|
+
if (e.closest("[data-panel]")) return !t || t.length === 0 || t.every((e) => _2.has(e));
|
|
46017
|
+
} catch {}
|
|
46018
|
+
return !1;
|
|
46019
|
+
}
|
|
46020
|
+
function y2(e) {
|
|
45975
46021
|
let t = e.id ? `#${e.id}` : "", n = typeof e.className == "string" && e.className ? `.${e.className.split(/\s+/).filter(Boolean).slice(0, 2).join(".")}` : "";
|
|
45976
46022
|
return `${e.tagName.toLowerCase()}${t}${n}`;
|
|
45977
46023
|
}
|
|
45978
|
-
|
|
46024
|
+
var b2 = 200;
|
|
46025
|
+
function x2(e) {
|
|
45979
46026
|
if (typeof e.className != "string") return;
|
|
45980
46027
|
let t = e.className.split(/\s+/).filter((e) => /^(transition|duration-|delay-|ease-)/.test(e));
|
|
45981
46028
|
return t.length ? t.join(" ") : void 0;
|
|
45982
46029
|
}
|
|
45983
|
-
|
|
45984
|
-
function g2(e) {
|
|
45985
|
-
return e.includes("all") ? ["all (includes layout/paint props)"] : e.filter((e) => h2.has(e));
|
|
45986
|
-
}
|
|
45987
|
-
function _2(e) {
|
|
45988
|
-
let t = e.split(",")[0].trim();
|
|
45989
|
-
if (t === "ease-in") return "ease-in";
|
|
45990
|
-
let n = t.match(/cubic-bezier\(\s*([\d.]+)\s*,\s*(-?[\d.]+)/);
|
|
45991
|
-
return n && parseFloat(n[1]) >= .4 && parseFloat(n[2]) <= .1 ? t : null;
|
|
45992
|
-
}
|
|
45993
|
-
function v2(e, t, n, r, i, a) {
|
|
46030
|
+
function S2(e, t, n, r, i, a) {
|
|
45994
46031
|
let o = [];
|
|
45995
|
-
return n > 0 && o.push(`remove the ${Math.round(n)}ms transition-delay`), (r?.includes("transition-all") || e.includes("all")) && o.push("scope 'transition-all' to the intended properties (e.g. transition-colors)"), a?.length && o.push(`JANK: transitions LAYOUT/PAINT props (${a.join(", ")}) — reflow/repaint every frame; animate transform/opacity instead (box-shadow → animate a pseudo-element's opacity)`), i && o.push(`easing '${i}' starts slow —
|
|
46032
|
+
return n > 0 && o.push(`remove the ${Math.round(n)}ms transition-delay`), (r?.includes("transition-all") || e.includes("all")) && o.push("scope 'transition-all' to the intended properties (e.g. transition-colors)"), a?.length && o.push(`JANK: transitions LAYOUT/PAINT props (${a.join(", ")}) — reflow/repaint every frame; animate transform/opacity instead (box-shadow → animate a pseudo-element's opacity)`), i && o.push(`easing '${i}' starts slow — §42 bans ease-in/ease-in-out on UI, use ease-out`), t > 500 ? o.push(`${Math.round(t)}ms is over the 500ms HARD CAP for UI feedback`) : t > 300 ? o.push(`${Math.round(t)}ms is over the 300ms UI cap`) : t > 100 && o.push(`shorten ${Math.round(t)}ms → ≤100ms`), o.push("make PRESS feedback instant: 'active:transition-none' (and data-[state=…]:transition-none for toggles) — animate only hover in/out"), o.join("; ");
|
|
45996
46033
|
}
|
|
45997
|
-
async function
|
|
46034
|
+
async function C2() {
|
|
45998
46035
|
try {
|
|
45999
46036
|
return (await Promise.resolve().then(() => (RZ(), AZ))).getGlobalApi() ?? null;
|
|
46000
46037
|
} catch {
|
|
46001
46038
|
return null;
|
|
46002
46039
|
}
|
|
46003
46040
|
}
|
|
46004
|
-
async function
|
|
46005
|
-
let t = await
|
|
46041
|
+
async function w2(e) {
|
|
46042
|
+
let t = await C2(), n = null, r = null;
|
|
46006
46043
|
try {
|
|
46007
46044
|
n = t?.getDisplayName?.(e) ?? null;
|
|
46008
46045
|
} catch {}
|
|
@@ -46015,15 +46052,15 @@ async function b2(e) {
|
|
|
46015
46052
|
source: r
|
|
46016
46053
|
};
|
|
46017
46054
|
}
|
|
46018
|
-
var
|
|
46019
|
-
function
|
|
46020
|
-
|
|
46021
|
-
|
|
46022
|
-
let e =
|
|
46055
|
+
var T2 = [], E2 = null;
|
|
46056
|
+
function D2(e) {
|
|
46057
|
+
T2.push(e), E2 ??= setTimeout(() => {
|
|
46058
|
+
E2 = null;
|
|
46059
|
+
let e = T2.slice(0, 50).map((e) => ({
|
|
46023
46060
|
kind: "css-slowdown",
|
|
46024
46061
|
...e
|
|
46025
46062
|
}));
|
|
46026
|
-
|
|
46063
|
+
T2 = [], JO().then((t) => fetch(`${t}/scan/events`, {
|
|
46027
46064
|
method: "POST",
|
|
46028
46065
|
headers: { "Content-Type": "application/json" },
|
|
46029
46066
|
body: JSON.stringify({ events: e }),
|
|
@@ -46031,41 +46068,42 @@ function C2(e) {
|
|
|
46031
46068
|
})).catch(() => {});
|
|
46032
46069
|
}, 1500);
|
|
46033
46070
|
}
|
|
46034
|
-
var
|
|
46035
|
-
function
|
|
46036
|
-
|
|
46037
|
-
|
|
46038
|
-
|
|
46071
|
+
var O2 = [], k2 = /* @__PURE__ */ new Set();
|
|
46072
|
+
function A2(e) {
|
|
46073
|
+
let t = e.mode === "live" ? O2.find((t) => t.mode === "live" && t.element === e.element && (t.classHint ?? "") === (e.classHint ?? "") && t.properties.join() === e.properties.join()) : void 0;
|
|
46074
|
+
t ? (t.count += 1, t.at = e.at, t.sinceInputMs = e.sinceInputMs, O2 = [...O2]) : O2 = [e, ...O2].slice(0, 100);
|
|
46075
|
+
for (let e of k2) e(O2);
|
|
46076
|
+
D2(e);
|
|
46039
46077
|
}
|
|
46040
|
-
function
|
|
46041
|
-
return
|
|
46078
|
+
function j2(e) {
|
|
46079
|
+
return k2.add(e), e(O2), () => void k2.delete(e);
|
|
46042
46080
|
}
|
|
46043
|
-
function
|
|
46044
|
-
|
|
46045
|
-
for (let e of
|
|
46081
|
+
function M2() {
|
|
46082
|
+
O2 = [];
|
|
46083
|
+
for (let e of k2) e(O2);
|
|
46046
46084
|
}
|
|
46047
|
-
var
|
|
46085
|
+
var N2 = !0;
|
|
46048
46086
|
try {
|
|
46049
|
-
|
|
46087
|
+
N2 = localStorage.getItem("linear-grab:css-watch") !== "0";
|
|
46050
46088
|
} catch {}
|
|
46051
|
-
var
|
|
46052
|
-
function
|
|
46053
|
-
return
|
|
46089
|
+
var P2 = /* @__PURE__ */ new Set();
|
|
46090
|
+
function F2() {
|
|
46091
|
+
return N2;
|
|
46054
46092
|
}
|
|
46055
|
-
function
|
|
46056
|
-
|
|
46093
|
+
function I2(e) {
|
|
46094
|
+
N2 = e;
|
|
46057
46095
|
try {
|
|
46058
46096
|
localStorage.setItem("linear-grab:css-watch", e ? "1" : "0");
|
|
46059
46097
|
} catch {}
|
|
46060
|
-
for (let t of
|
|
46098
|
+
for (let t of P2) t(e);
|
|
46061
46099
|
}
|
|
46062
|
-
function
|
|
46063
|
-
return
|
|
46100
|
+
function L2(e) {
|
|
46101
|
+
return P2.add(e), e(N2), () => void P2.delete(e);
|
|
46064
46102
|
}
|
|
46065
|
-
var
|
|
46066
|
-
function
|
|
46067
|
-
if (
|
|
46068
|
-
|
|
46103
|
+
var R2 = !1;
|
|
46104
|
+
function z2() {
|
|
46105
|
+
if (R2 || typeof window > "u") return;
|
|
46106
|
+
R2 = !0;
|
|
46069
46107
|
let e = 0, t = () => {
|
|
46070
46108
|
e = performance.now();
|
|
46071
46109
|
};
|
|
@@ -46079,13 +46117,15 @@ function F2() {
|
|
|
46079
46117
|
});
|
|
46080
46118
|
let n = /* @__PURE__ */ new Map(), r = /* @__PURE__ */ new Map();
|
|
46081
46119
|
window.addEventListener("transitionrun", (t) => {
|
|
46082
|
-
if (!
|
|
46120
|
+
if (!N2) return;
|
|
46083
46121
|
let i = performance.now() - e;
|
|
46084
|
-
if (i >
|
|
46122
|
+
if (i > b2) return;
|
|
46085
46123
|
let a = t.target;
|
|
46086
46124
|
if (!(a instanceof Element) || a.closest("#linear-grab-root") || a === document.documentElement || a === document.body || t.propertyName.startsWith("--")) return;
|
|
46087
|
-
let o = getComputedStyle(a), s = o.transitionProperty.split(",").map((e) => e.trim())
|
|
46088
|
-
if (
|
|
46125
|
+
let o = getComputedStyle(a), s = o.transitionProperty.split(",").map((e) => e.trim());
|
|
46126
|
+
if (v2(a, s)) return;
|
|
46127
|
+
let c = d2(o.transitionDuration), l = d2(o.transitionDelay), u = Math.max(0, s.indexOf(t.propertyName)), d = c[u % c.length] ?? c[0] ?? 0, f = l[u % l.length] ?? l[0] ?? 0;
|
|
46128
|
+
if (d + f <= 100) return;
|
|
46089
46129
|
let p = r.get(a);
|
|
46090
46130
|
if (p) {
|
|
46091
46131
|
p.props.add(t.propertyName), p.duration = Math.max(p.duration, d), p.delay = Math.max(p.delay, f);
|
|
@@ -46098,12 +46138,12 @@ function F2() {
|
|
|
46098
46138
|
since: i,
|
|
46099
46139
|
timer: setTimeout(() => {
|
|
46100
46140
|
r.delete(a);
|
|
46101
|
-
let e =
|
|
46141
|
+
let e = y2(a), t = Date.now();
|
|
46102
46142
|
if (t - (n.get(e) ?? 0) < 5e3) return;
|
|
46103
46143
|
n.set(e, t);
|
|
46104
|
-
let i =
|
|
46105
|
-
|
|
46106
|
-
|
|
46144
|
+
let i = x2(a), o = [...m.props], s = a.isConnected ? m2(getComputedStyle(a).transitionTimingFunction) : null, c = p2(o);
|
|
46145
|
+
w2(a).then(({ component: n, source: r }) => {
|
|
46146
|
+
A2({
|
|
46107
46147
|
mode: "live",
|
|
46108
46148
|
page: location.pathname,
|
|
46109
46149
|
element: e,
|
|
@@ -46117,7 +46157,7 @@ function F2() {
|
|
|
46117
46157
|
classHint: i,
|
|
46118
46158
|
easing: s ?? void 0,
|
|
46119
46159
|
jankProps: c.length ? c : void 0,
|
|
46120
|
-
suggestion:
|
|
46160
|
+
suggestion: S2(o, m.duration, m.delay, i, s, c),
|
|
46121
46161
|
at: t
|
|
46122
46162
|
});
|
|
46123
46163
|
});
|
|
@@ -46129,54 +46169,56 @@ function F2() {
|
|
|
46129
46169
|
passive: !0
|
|
46130
46170
|
});
|
|
46131
46171
|
}
|
|
46132
|
-
var
|
|
46133
|
-
async function
|
|
46134
|
-
let e = /* @__PURE__ */ new Map(), t = Array.from(document.querySelectorAll(
|
|
46172
|
+
var B2 = "button, a, input, select, textarea, [role], [tabindex], [data-state], [aria-expanded]";
|
|
46173
|
+
async function V2() {
|
|
46174
|
+
let e = /* @__PURE__ */ new Map(), t = Array.from(document.querySelectorAll(B2)).slice(0, 3e3);
|
|
46135
46175
|
for (let n of t) {
|
|
46136
46176
|
if (n.closest("#linear-grab-root")) continue;
|
|
46137
46177
|
let t = n.getBoundingClientRect();
|
|
46138
46178
|
if (t.width < 2 && t.height < 2) continue;
|
|
46139
46179
|
let r = getComputedStyle(n);
|
|
46140
46180
|
if (r.cursor !== "pointer" && !n.matches("button, a, input, select, textarea")) continue;
|
|
46141
|
-
let i =
|
|
46142
|
-
if (
|
|
46143
|
-
let
|
|
46181
|
+
let i = r.transitionProperty.split(",").map((e) => e.trim());
|
|
46182
|
+
if (v2(n, i)) continue;
|
|
46183
|
+
let a = d2(r.transitionDuration), o = d2(r.transitionDelay), s = Math.max(...a, 0) + Math.max(...o, 0);
|
|
46184
|
+
if (s <= 100) continue;
|
|
46185
|
+
let c = x2(n), l = `${n.tagName}|${c ?? i.join()}|${Math.round(s)}`, u = e.get(l);
|
|
46144
46186
|
if (u) {
|
|
46145
46187
|
u.finding.count += 1;
|
|
46146
46188
|
continue;
|
|
46147
46189
|
}
|
|
46148
|
-
let d =
|
|
46190
|
+
let d = m2(r.transitionTimingFunction), f = p2(i);
|
|
46149
46191
|
e.set(l, {
|
|
46150
46192
|
example: n,
|
|
46151
46193
|
finding: {
|
|
46152
46194
|
mode: "audit",
|
|
46153
46195
|
page: location.pathname,
|
|
46154
|
-
element:
|
|
46196
|
+
element: y2(n),
|
|
46155
46197
|
component: null,
|
|
46156
46198
|
source: null,
|
|
46157
|
-
properties:
|
|
46158
|
-
durationMs: Math.round(Math.max(...
|
|
46159
|
-
delayMs: Math.round(Math.max(...
|
|
46199
|
+
properties: i,
|
|
46200
|
+
durationMs: Math.round(Math.max(...a, 0)),
|
|
46201
|
+
delayMs: Math.round(Math.max(...o, 0)),
|
|
46160
46202
|
count: 1,
|
|
46161
46203
|
classHint: c,
|
|
46162
46204
|
easing: d ?? void 0,
|
|
46163
46205
|
jankProps: f.length ? f : void 0,
|
|
46164
|
-
suggestion:
|
|
46206
|
+
suggestion: S2(i, Math.max(...a, 0), Math.max(...o, 0), c, d, f),
|
|
46165
46207
|
at: Date.now()
|
|
46166
46208
|
}
|
|
46167
46209
|
});
|
|
46168
46210
|
}
|
|
46169
46211
|
let n = [];
|
|
46170
46212
|
for (let { finding: t, example: r } of e.values()) {
|
|
46171
|
-
let { component: e, source: i } = await
|
|
46213
|
+
let { component: e, source: i } = await w2(r);
|
|
46172
46214
|
t.component = e, t.source = i, n.push(t);
|
|
46173
46215
|
}
|
|
46174
|
-
n.sort((e, t) => t.durationMs + t.delayMs - (e.durationMs + e.delayMs) || t.count - e.count),
|
|
46175
|
-
for (let e of
|
|
46176
|
-
for (let e of n)
|
|
46216
|
+
n.sort((e, t) => t.durationMs + t.delayMs - (e.durationMs + e.delayMs) || t.count - e.count), O2 = [...n, ...O2.filter((e) => e.mode === "live")].slice(0, 100);
|
|
46217
|
+
for (let e of k2) e(O2);
|
|
46218
|
+
for (let e of n) D2(e);
|
|
46177
46219
|
return n;
|
|
46178
46220
|
}
|
|
46179
|
-
function
|
|
46221
|
+
function H2(e) {
|
|
46180
46222
|
return [
|
|
46181
46223
|
"Below is a CSS-slowdown report from my running app (live-captured on real input + full-page audit).",
|
|
46182
46224
|
"Goal: ALL interaction feedback must be instant. Rules:",
|
|
@@ -46193,8 +46235,14 @@ function R2(e) {
|
|
|
46193
46235
|
"3b. Findings marked ⚠ layout/paint: NEVER transition width/height/top/left/",
|
|
46194
46236
|
" margin/padding/box-shadow — they reflow or repaint every frame. Use",
|
|
46195
46237
|
" transform: translate/scale, and animate a pseudo-element's opacity for shadows.",
|
|
46196
|
-
"3c. Findings marked ⚠ easing: never ease-in on UI
|
|
46197
|
-
" (house curve: cubic-bezier(.2,0,.1,1)
|
|
46238
|
+
"3c. Findings marked ⚠ easing: never ease-in OR ease-in-out on UI (§42 bans",
|
|
46239
|
+
" both) — replace with ease-out (house curve: cubic-bezier(.2,0,.1,1), the",
|
|
46240
|
+
" theme default).",
|
|
46241
|
+
"3d. Press must be instant GLOBALLY: keep the unlayered §42 rule in globals.css",
|
|
46242
|
+
" — `button:active, a:active, [role=button/tab/menuitem/option]:active",
|
|
46243
|
+
" { transition-duration: 0s }` — so pointer-down feedback snaps and only the",
|
|
46244
|
+
" release animates back. If a control still animates on press, that global",
|
|
46245
|
+
" rule is missing or overridden.",
|
|
46198
46246
|
"4. Where a finding's source looks like a generic fallback (one file:line repeated",
|
|
46199
46247
|
" for many components), locate the code by the `classes:` line instead.",
|
|
46200
46248
|
"5. Do NOT touch entry/exit animations of popovers/menus or icon micro-motion",
|
|
@@ -46205,36 +46253,702 @@ function R2(e) {
|
|
|
46205
46253
|
"",
|
|
46206
46254
|
"---",
|
|
46207
46255
|
"",
|
|
46208
|
-
|
|
46256
|
+
U2(e)
|
|
46209
46257
|
].join("\n");
|
|
46210
46258
|
}
|
|
46211
|
-
function
|
|
46259
|
+
function U2(e) {
|
|
46212
46260
|
let t = [
|
|
46213
46261
|
`# CSS slowdowns on ${location.host}${location.pathname}`,
|
|
46214
|
-
"Threshold:
|
|
46262
|
+
"Threshold: 100ms (interaction feedback should be instant).",
|
|
46215
46263
|
""
|
|
46216
46264
|
];
|
|
46217
|
-
for (let n of e) t.push(`## ${n.component ?? n.element}${n.count > 1 ? ` ×${n.count}` : ""} — ${n.durationMs}ms${n.delayMs ? ` +${n.delayMs}ms delay` : ""}`), n.source && t.push(`- source: ${n.source}`), t.push(`- transitions: ${n.properties.join(", ")}`), n.classHint && t.push(`- classes: \`${n.classHint}\``), n.jankProps?.length && t.push(`- ⚠ layout/paint transition (reflows every frame): ${n.jankProps.join(", ")}`), n.easing && t.push(`- ⚠ easing: ${n.easing} (ease-in
|
|
46265
|
+
for (let n of e) t.push(`## ${n.component ?? n.element}${n.count > 1 ? ` ×${n.count}` : ""} — ${n.durationMs}ms${n.delayMs ? ` +${n.delayMs}ms delay` : ""}`), n.source && t.push(`- source: ${n.source}`), t.push(`- transitions: ${n.properties.join(", ")}`), n.classHint && t.push(`- classes: \`${n.classHint}\``), n.jankProps?.length && t.push(`- ⚠ layout/paint transition (reflows every frame): ${n.jankProps.join(", ")}`), n.easing && t.push(`- ⚠ easing: ${n.easing} (§42 bans ease-in/ease-in-out — use ease-out)`), n.sinceInputMs != null && t.push(`- fired ${n.sinceInputMs}ms after user input (live capture)`), t.push(`- fix: ${n.suggestion}`, "");
|
|
46218
46266
|
return t.join("\n");
|
|
46219
46267
|
}
|
|
46220
46268
|
//#endregion
|
|
46269
|
+
//#region src/lib/slopScan.ts
|
|
46270
|
+
function W2(e, t, n) {
|
|
46271
|
+
return {
|
|
46272
|
+
ruleId: e.id,
|
|
46273
|
+
part: e.part,
|
|
46274
|
+
severity: e.severity,
|
|
46275
|
+
description: e.description,
|
|
46276
|
+
selector: y2(t),
|
|
46277
|
+
evidence: n,
|
|
46278
|
+
el: typeof WeakRef < "u" ? new WeakRef(t) : void 0
|
|
46279
|
+
};
|
|
46280
|
+
}
|
|
46281
|
+
function G2(e) {
|
|
46282
|
+
return e.getBoundingClientRect();
|
|
46283
|
+
}
|
|
46284
|
+
function K2(e) {
|
|
46285
|
+
return e.split("/")[0].trim().split(/\s+/).filter(Boolean).map((e) => e.endsWith("px") ? parseFloat(e) : NaN);
|
|
46286
|
+
}
|
|
46287
|
+
function q2(e) {
|
|
46288
|
+
let t = e.match(/rgba?\(([^)]+)\)/);
|
|
46289
|
+
return t ? t[1].split(",").map((e) => e.trim()).join(",") : null;
|
|
46290
|
+
}
|
|
46291
|
+
function J2(e, t) {
|
|
46292
|
+
let n = t, r = n.maskImage || n.webkitMaskImage || "";
|
|
46293
|
+
if (r && r !== "none") return r;
|
|
46294
|
+
let i = (e.getAttribute("style") ?? "").match(/(?:^|;|\s)(?:-webkit-)?mask-image\s*:\s*([^;]+)/i);
|
|
46295
|
+
return i && i[1].trim() && i[1].trim() !== "none" ? i[1].trim() : "";
|
|
46296
|
+
}
|
|
46297
|
+
var Y2 = /* @__PURE__ */ new Set([
|
|
46298
|
+
0,
|
|
46299
|
+
8,
|
|
46300
|
+
12,
|
|
46301
|
+
16
|
|
46302
|
+
]), X2 = {
|
|
46303
|
+
light: q2("rgb(240, 240, 241)"),
|
|
46304
|
+
dark: q2("rgb(35, 35, 37)")
|
|
46305
|
+
}, Z2 = /* @__PURE__ */ new Set([
|
|
46306
|
+
"#50e3c2",
|
|
46307
|
+
"#ee0000",
|
|
46308
|
+
"#f5a623"
|
|
46309
|
+
]), Q2 = "button, a, [role=\"button\"], [role=\"tab\"], [role=\"menuitem\"], [role=\"option\"], input, textarea, select";
|
|
46310
|
+
function $2(e) {
|
|
46311
|
+
let t = [], n = (e) => {
|
|
46312
|
+
for (let r of Array.from(e)) {
|
|
46313
|
+
let e = r;
|
|
46314
|
+
if (e.cssRules && e.cssRules.length) {
|
|
46315
|
+
n(e.cssRules);
|
|
46316
|
+
continue;
|
|
46317
|
+
}
|
|
46318
|
+
let i = r.selectorText;
|
|
46319
|
+
i && i.includes(":hover") && t.push(i.replace(/:hover/g, ""));
|
|
46320
|
+
}
|
|
46321
|
+
};
|
|
46322
|
+
for (let t of Array.from(e.styleSheets)) try {
|
|
46323
|
+
n(t.cssRules);
|
|
46324
|
+
} catch {}
|
|
46325
|
+
return t;
|
|
46326
|
+
}
|
|
46327
|
+
function e4(e, t) {
|
|
46328
|
+
for (let n of t) if (n.trim()) try {
|
|
46329
|
+
if (e.matches(n)) return !0;
|
|
46330
|
+
} catch {}
|
|
46331
|
+
return !1;
|
|
46332
|
+
}
|
|
46333
|
+
function t4(e) {
|
|
46334
|
+
return !e.matches("button, [role=\"button\"]") || e.querySelectorAll("svg").length === 0 ? !1 : (e.textContent ?? "").trim().length === 0;
|
|
46335
|
+
}
|
|
46336
|
+
function n4(e) {
|
|
46337
|
+
let t = e.parentElement;
|
|
46338
|
+
for (; t;) {
|
|
46339
|
+
try {
|
|
46340
|
+
let e = r4(t).overflowY;
|
|
46341
|
+
if (e === "auto" || e === "scroll") return t;
|
|
46342
|
+
} catch {}
|
|
46343
|
+
t = t.parentElement;
|
|
46344
|
+
}
|
|
46345
|
+
return null;
|
|
46346
|
+
}
|
|
46347
|
+
var r4 = (e) => getComputedStyle(e), i4 = {
|
|
46348
|
+
id: "radius-vocabulary",
|
|
46349
|
+
part: "§40",
|
|
46350
|
+
severity: "error",
|
|
46351
|
+
description: "§40: radius vocabulary is {8, 12, 16, full} — never rounded-md/[4px]/[6px]/[10px]. Off-vocabulary radius.",
|
|
46352
|
+
check(e) {
|
|
46353
|
+
let t = [];
|
|
46354
|
+
for (let n of e.els) {
|
|
46355
|
+
let r = e.css(n).borderRadius;
|
|
46356
|
+
if (!r || r === "0px") continue;
|
|
46357
|
+
let i = K2(r);
|
|
46358
|
+
if (i.some((e) => Number.isNaN(e))) continue;
|
|
46359
|
+
let a = Math.max(...i);
|
|
46360
|
+
if (a === 0) continue;
|
|
46361
|
+
let o = G2(n), s = Math.min(o.width || 0, o.height || 0);
|
|
46362
|
+
s > 0 && a >= s / 2 - .5 || i.every((e) => Y2.has(e)) || t.push(W2(this, n, `border-radius: ${r}`));
|
|
46363
|
+
}
|
|
46364
|
+
return t;
|
|
46365
|
+
}
|
|
46366
|
+
}, a4 = {
|
|
46367
|
+
id: "row-radius-token",
|
|
46368
|
+
part: "§40",
|
|
46369
|
+
severity: "error",
|
|
46370
|
+
description: "§40: list rows consume --row-radius (8px) or 0 — no bespoke per-surface row radius.",
|
|
46371
|
+
check(e) {
|
|
46372
|
+
let t = [];
|
|
46373
|
+
for (let n of e.els) {
|
|
46374
|
+
let r = G2(n).height;
|
|
46375
|
+
if (r < 26 || r > 50 || !n4(n)) continue;
|
|
46376
|
+
let i = n.parentElement;
|
|
46377
|
+
if (!i || Array.from(i.children).filter((e) => {
|
|
46378
|
+
let t = G2(e);
|
|
46379
|
+
return Math.abs(t.height - r) < 2;
|
|
46380
|
+
}).length < 3) continue;
|
|
46381
|
+
let a = K2(e.css(n).borderRadius);
|
|
46382
|
+
if (a.some((e) => Number.isNaN(e))) continue;
|
|
46383
|
+
let o = Math.max(0, ...a);
|
|
46384
|
+
o === 0 || o === 8 || t.push(W2(this, n, `row radius ${e.css(n).borderRadius} (want 0 or var(--row-radius)=8px)`));
|
|
46385
|
+
}
|
|
46386
|
+
return t;
|
|
46387
|
+
}
|
|
46388
|
+
}, o4 = {
|
|
46389
|
+
id: "active-fill-token",
|
|
46390
|
+
part: "§11",
|
|
46391
|
+
severity: "error",
|
|
46392
|
+
description: "§11: active/selected fill must be var(--selected) (theme-safe) — never bg-secondary (#F0F0F1 / #232325).",
|
|
46393
|
+
check(e) {
|
|
46394
|
+
let t = [], n = null;
|
|
46395
|
+
try {
|
|
46396
|
+
let t = e.root.documentElement ?? document.documentElement;
|
|
46397
|
+
t && (n = q2(e.css(t).getPropertyValue("--selected").trim()));
|
|
46398
|
+
} catch {}
|
|
46399
|
+
let r = [X2.light, X2.dark].filter(Boolean);
|
|
46400
|
+
if (n && r.includes(n)) {
|
|
46401
|
+
let t = e.root.documentElement ?? document.documentElement;
|
|
46402
|
+
return [W2({
|
|
46403
|
+
id: this.id,
|
|
46404
|
+
part: this.part,
|
|
46405
|
+
severity: "warn",
|
|
46406
|
+
description: "§11: active-fill-token unverifiable — --selected resolves EQUAL to bg-secondary this theme; cannot distinguish the token from the anti-pattern."
|
|
46407
|
+
}, t ?? e.els[0], `--selected == bg-secondary (${n})`)];
|
|
46408
|
+
}
|
|
46409
|
+
for (let n of e.els) {
|
|
46410
|
+
if (!(n.matches("[role=\"tab\"], [role=\"button\"], [aria-selected], [role=\"option\"]") || n.closest("[role=\"tablist\"], [role=\"menu\"], [data-rail], nav"))) continue;
|
|
46411
|
+
let i = q2(e.css(n).backgroundColor);
|
|
46412
|
+
i && r.includes(i) && t.push(W2(this, n, `background bg-secondary (${e.css(n).backgroundColor}) — use var(--selected)`));
|
|
46413
|
+
}
|
|
46414
|
+
return t;
|
|
46415
|
+
}
|
|
46416
|
+
}, s4 = {
|
|
46417
|
+
id: "inline-style-state",
|
|
46418
|
+
part: "§40",
|
|
46419
|
+
severity: "error",
|
|
46420
|
+
description: "§40: the shared row-action class owns ALL visual states; inline styles carry LAYOUT ONLY — an inline background/color kills the class state.",
|
|
46421
|
+
check(e) {
|
|
46422
|
+
let t = [];
|
|
46423
|
+
for (let n of e.els) {
|
|
46424
|
+
let e = typeof n.className == "string" ? n.className : "";
|
|
46425
|
+
if (!/pb-row-action|row-action/.test(e)) continue;
|
|
46426
|
+
let r = n.getAttribute("style") ?? "";
|
|
46427
|
+
/(^|;|\s)(background|color)\s*:/.test(r) && t.push(W2(this, n, `inline style="${r}" on a row-action element`));
|
|
46428
|
+
}
|
|
46429
|
+
return t;
|
|
46430
|
+
}
|
|
46431
|
+
}, c4 = {
|
|
46432
|
+
id: "icon-button-no-hover",
|
|
46433
|
+
part: "§40",
|
|
46434
|
+
severity: "warn",
|
|
46435
|
+
description: "§40/Part 10: every interactive control changes color on hover — icon-only button with no :hover rule and no .pb-row-action.",
|
|
46436
|
+
check(e) {
|
|
46437
|
+
let t = [], n = $2(e.root.styleSheets ? e.root : document);
|
|
46438
|
+
for (let r of e.els) {
|
|
46439
|
+
if (!t4(r)) continue;
|
|
46440
|
+
let i = typeof r.className == "string" ? r.className : "";
|
|
46441
|
+
/pb-row-action|row-action/.test(i) || r.hasAttribute("data-framer-appear-id") || Array.from(r.attributes).some((e) => e.name.startsWith("data-framer")) || e.css(r).willChange.includes("transform") || e4(r, n) || t.push(W2(this, r, `icon-only ${r.tagName.toLowerCase()} with no hover rule / .pb-row-action`));
|
|
46442
|
+
}
|
|
46443
|
+
return t;
|
|
46444
|
+
}
|
|
46445
|
+
}, l4 = {
|
|
46446
|
+
id: "icon-button-no-tooltip",
|
|
46447
|
+
part: "§7",
|
|
46448
|
+
severity: "warn",
|
|
46449
|
+
description: "§7: every icon-only button gets the shared Tooltip — needs aria-describedby / data-slot=\"tooltip-trigger\" (menu-row title exempt).",
|
|
46450
|
+
check(e) {
|
|
46451
|
+
let t = [];
|
|
46452
|
+
for (let n of e.els) t4(n) && (n.hasAttribute("aria-describedby") || n.getAttribute("data-slot") === "tooltip-trigger" || n.closest("[data-slot=\"tooltip-trigger\"]") || n.closest("[role=\"menuitem\"]") && n.hasAttribute("title") || t.push(W2(this, n, `icon-only ${n.tagName.toLowerCase()} with no tooltip trigger / aria-describedby`)));
|
|
46453
|
+
return t;
|
|
46454
|
+
}
|
|
46455
|
+
}, u4 = {
|
|
46456
|
+
id: "unvirtualized-scroller",
|
|
46457
|
+
part: "§0",
|
|
46458
|
+
severity: "error",
|
|
46459
|
+
description: "§0: every dynamic-length scrolling list virtualizes — a tall scroller with 60+ direct children is unvirtualized.",
|
|
46460
|
+
check(e) {
|
|
46461
|
+
let t = [];
|
|
46462
|
+
for (let n of e.els) {
|
|
46463
|
+
let r = e.css(n);
|
|
46464
|
+
if (![
|
|
46465
|
+
r.overflowY,
|
|
46466
|
+
r.overflowX,
|
|
46467
|
+
r.overflow
|
|
46468
|
+
].some((e) => e === "auto" || e === "scroll") || n.scrollHeight <= 2 * n.clientHeight) continue;
|
|
46469
|
+
let i = n.children.length;
|
|
46470
|
+
i <= 60 || t.push(W2(this, n, `${i} direct children, scrollHeight ${n.scrollHeight} > 2×clientHeight ${n.clientHeight}`));
|
|
46471
|
+
}
|
|
46472
|
+
return t;
|
|
46473
|
+
}
|
|
46474
|
+
}, d4 = {
|
|
46475
|
+
id: "scroll-no-fade",
|
|
46476
|
+
part: "§1",
|
|
46477
|
+
severity: "warn",
|
|
46478
|
+
description: "§1: a horizontal scroller needs a truthful scroll fade — no scroll-fade-x/scroll-fade-x-js class and no mask-image.",
|
|
46479
|
+
check(e) {
|
|
46480
|
+
let t = [];
|
|
46481
|
+
for (let n of e.els) {
|
|
46482
|
+
if (n.scrollWidth <= n.clientWidth + 8) continue;
|
|
46483
|
+
let r = typeof n.className == "string" ? n.className : "";
|
|
46484
|
+
/scroll-fade-x(-js)?/.test(r) || J2(n, e.css(n)) || t.push(W2(this, n, `horizontal scroller (scrollWidth ${n.scrollWidth} > clientWidth ${n.clientWidth}) with no fade`));
|
|
46485
|
+
}
|
|
46486
|
+
return t;
|
|
46487
|
+
}
|
|
46488
|
+
}, f4 = {
|
|
46489
|
+
id: "phantom-fade",
|
|
46490
|
+
part: "§1",
|
|
46491
|
+
severity: "warn",
|
|
46492
|
+
description: "§1: a fade must NEVER paint when nothing is hidden — mask-image present but scrollWidth ≤ clientWidth (the fade lies).",
|
|
46493
|
+
check(e) {
|
|
46494
|
+
let t = [];
|
|
46495
|
+
for (let n of e.els) J2(n, e.css(n)) && (n.scrollWidth > n.clientWidth || t.push(W2(this, n, `mask-image fade but scrollWidth ${n.scrollWidth} ≤ clientWidth ${n.clientWidth}`)));
|
|
46496
|
+
return t;
|
|
46497
|
+
}
|
|
46498
|
+
}, p4 = {
|
|
46499
|
+
id: "scrollbar-flush",
|
|
46500
|
+
part: "Part 5",
|
|
46501
|
+
severity: "warn",
|
|
46502
|
+
description: "Part 5: scrollables carry asymmetric right padding so content clears the scrollbar — padding-right < 8px while overflowing vertically with content reaching the right edge.",
|
|
46503
|
+
check(e) {
|
|
46504
|
+
let t = [];
|
|
46505
|
+
for (let n of e.els) {
|
|
46506
|
+
let r = e.css(n);
|
|
46507
|
+
if (![r.overflowY, r.overflow].some((e) => e === "auto" || e === "scroll") || n.scrollHeight <= n.clientHeight) continue;
|
|
46508
|
+
let i = parseFloat(r.paddingRight) || 0;
|
|
46509
|
+
if (i >= 8) continue;
|
|
46510
|
+
let a = G2(n);
|
|
46511
|
+
Array.from(n.children).some((e) => {
|
|
46512
|
+
let t = G2(e);
|
|
46513
|
+
return a.right - t.right <= 4;
|
|
46514
|
+
}) && t.push(W2(this, n, `padding-right ${i}px (<8px) with content flush to the scrollbar`));
|
|
46515
|
+
}
|
|
46516
|
+
return t;
|
|
46517
|
+
}
|
|
46518
|
+
}, m4 = /^("?(Geist|Geist Mono)"?|ui-monospace|ui-sans-serif|-apple-system|system-ui)/i, h4 = {
|
|
46519
|
+
id: "font-family",
|
|
46520
|
+
part: "Part 5",
|
|
46521
|
+
severity: "warn",
|
|
46522
|
+
description: "Part 5: Geist / Geist Mono ONLY — computed font-family does not start with the Geist / ui-monospace fallback chain.",
|
|
46523
|
+
check(e) {
|
|
46524
|
+
let t = [];
|
|
46525
|
+
for (let n of e.els) {
|
|
46526
|
+
if (!O4(n)) continue;
|
|
46527
|
+
let r = e.css(n).fontFamily;
|
|
46528
|
+
r && (m4.test(r.trim()) || t.push(W2(this, n, `font-family: ${r}`)));
|
|
46529
|
+
}
|
|
46530
|
+
return t;
|
|
46531
|
+
}
|
|
46532
|
+
}, g4 = {
|
|
46533
|
+
id: "uppercase-label",
|
|
46534
|
+
part: "§25",
|
|
46535
|
+
severity: "error",
|
|
46536
|
+
description: "§25: group/section labels are sentence-case — never uppercase (text-transform: uppercase on small <13px text).",
|
|
46537
|
+
check(e) {
|
|
46538
|
+
let t = [];
|
|
46539
|
+
for (let n of e.els) {
|
|
46540
|
+
if (!O4(n)) continue;
|
|
46541
|
+
let r = e.css(n);
|
|
46542
|
+
r.textTransform === "uppercase" && ((parseFloat(r.fontSize) || 0) >= 13 || t.push(W2(this, n, `text-transform: uppercase at ${r.fontSize}`)));
|
|
46543
|
+
}
|
|
46544
|
+
return t;
|
|
46545
|
+
}
|
|
46546
|
+
}, _4 = {
|
|
46547
|
+
id: "hardcoded-status-hex",
|
|
46548
|
+
part: "Part 5",
|
|
46549
|
+
severity: "warn",
|
|
46550
|
+
description: "Part 5: raw hex only for the status trio (#50E3C2/#EE0000/#F5A623) — a saturated non-token color on small UI text.",
|
|
46551
|
+
check(e) {
|
|
46552
|
+
let t = [];
|
|
46553
|
+
for (let n of e.els) {
|
|
46554
|
+
if (!O4(n)) continue;
|
|
46555
|
+
let r = (n.getAttribute("style") ?? "").match(/#[0-9a-fA-F]{6}/g) ?? [], i = e.css(n);
|
|
46556
|
+
if ((parseFloat(i.fontSize) || 0) >= 16) continue;
|
|
46557
|
+
for (let e of r) Z2.has(e.toLowerCase()) || t.push(W2(this, n, `hardcoded ${e} (not the brand status trio)`));
|
|
46558
|
+
let a = q2(i.color);
|
|
46559
|
+
if (a && r.length === 0) {
|
|
46560
|
+
let [e, r, o] = a.split(",").map((e) => parseFloat(e));
|
|
46561
|
+
Number.isFinite(e) && k4(e, r, o) && t.push(W2(this, n, `saturated non-token color ${i.color} on small UI text`));
|
|
46562
|
+
}
|
|
46563
|
+
}
|
|
46564
|
+
return t;
|
|
46565
|
+
}
|
|
46566
|
+
}, v4 = {
|
|
46567
|
+
id: "editor-shadow",
|
|
46568
|
+
part: "Part 5",
|
|
46569
|
+
severity: "error",
|
|
46570
|
+
description: "Part 5: editor surfaces are FLAT — box-shadow that is not a 0.5px hairline ring / approved popover/card/input token shadow.",
|
|
46571
|
+
check(e) {
|
|
46572
|
+
let t = [];
|
|
46573
|
+
if (!(e.root.querySelector?.("[data-editor-surface]") || typeof location < "u" && /\/editor\//.test(location.pathname))) return t;
|
|
46574
|
+
for (let n of e.els) {
|
|
46575
|
+
if (!n.closest("[data-editor-surface]") && !/\/editor\//.test(typeof location < "u" ? location.pathname : "")) continue;
|
|
46576
|
+
let r = e.css(n).boxShadow;
|
|
46577
|
+
!r || r === "none" || A4(r) || t.push(W2(this, n, `box-shadow: ${r}`));
|
|
46578
|
+
}
|
|
46579
|
+
return t;
|
|
46580
|
+
}
|
|
46581
|
+
}, y4 = {
|
|
46582
|
+
id: "focusring-clip",
|
|
46583
|
+
part: "§24",
|
|
46584
|
+
severity: "warn",
|
|
46585
|
+
description: "§24/Part 5: focus rings never clip — a focusable element whose nearest overflow-hidden ancestor sits <4px from its border box.",
|
|
46586
|
+
check(e) {
|
|
46587
|
+
let t = [];
|
|
46588
|
+
for (let n of e.els) {
|
|
46589
|
+
if (!n.matches(Q2) && n.getAttribute("tabindex") == null) continue;
|
|
46590
|
+
let r = n.parentElement;
|
|
46591
|
+
for (; r;) {
|
|
46592
|
+
let t = e.css(r);
|
|
46593
|
+
if ([
|
|
46594
|
+
t.overflow,
|
|
46595
|
+
t.overflowX,
|
|
46596
|
+
t.overflowY
|
|
46597
|
+
].some((e) => e === "hidden")) break;
|
|
46598
|
+
r = r.parentElement;
|
|
46599
|
+
}
|
|
46600
|
+
if (!r) continue;
|
|
46601
|
+
let i = G2(n), a = G2(r);
|
|
46602
|
+
if (i.width === 0 && i.height === 0) continue;
|
|
46603
|
+
let o = Math.min(i.left - a.left, a.right - i.right, i.top - a.top, a.bottom - i.bottom);
|
|
46604
|
+
o >= 4 || t.push(W2(this, n, `overflow-hidden ancestor ${o.toFixed(1)}px from border box — focus ring will clip`));
|
|
46605
|
+
}
|
|
46606
|
+
return t;
|
|
46607
|
+
}
|
|
46608
|
+
}, b4 = {
|
|
46609
|
+
id: "fixed-width-in-pane",
|
|
46610
|
+
part: "§24",
|
|
46611
|
+
severity: "warn",
|
|
46612
|
+
description: "§24: no fixed field widths in resizable panes — w-[Npx] (N ≥ 200) inside a [data-panel] / flex-basis sibling clips at the pane edge.",
|
|
46613
|
+
check(e) {
|
|
46614
|
+
let t = [];
|
|
46615
|
+
for (let n of e.els) {
|
|
46616
|
+
if (!n.closest("[data-panel]")) continue;
|
|
46617
|
+
let e = typeof n.className == "string" ? n.className : "", r = n.getAttribute("style") ?? "", i = e.match(/w-\[(\d+)px\]/) ?? r.match(/(?:^|;|\s)width\s*:\s*(\d+)px/);
|
|
46618
|
+
if (!i) continue;
|
|
46619
|
+
let a = parseFloat(i[1]);
|
|
46620
|
+
a < 200 || t.push(W2(this, n, `fixed width ${a}px inside a resizable pane — use w-full max-w-[${a}px]`));
|
|
46621
|
+
}
|
|
46622
|
+
return t;
|
|
46623
|
+
}
|
|
46624
|
+
}, x4 = {
|
|
46625
|
+
id: "menu-icons-all-or-none",
|
|
46626
|
+
part: "§21",
|
|
46627
|
+
severity: "error",
|
|
46628
|
+
description: "§21: within one menu ALL items carry a leading icon or NONE do — a mixed set reads broken.",
|
|
46629
|
+
check(e) {
|
|
46630
|
+
let t = [], n = Array.from(e.root.querySelectorAll("[role=\"menu\"]"));
|
|
46631
|
+
for (let e of n) {
|
|
46632
|
+
let n = Array.from(e.querySelectorAll("[role=\"menuitem\"]"));
|
|
46633
|
+
if (n.length < 2) continue;
|
|
46634
|
+
let r = n.filter((e) => e.querySelector("svg")).length;
|
|
46635
|
+
r === 0 || r === n.length || t.push(W2(this, e, `${r}/${n.length} menu items have a leading icon`));
|
|
46636
|
+
}
|
|
46637
|
+
return t;
|
|
46638
|
+
}
|
|
46639
|
+
}, S4 = {
|
|
46640
|
+
id: "menu-icon-mixed-weight",
|
|
46641
|
+
part: "§21",
|
|
46642
|
+
severity: "warn",
|
|
46643
|
+
description: "§21: menu icons are ONE stroke family — some filled (fill=currentColor) and some stroke-based, or rendered sizes differing >2px, mixes two design systems.",
|
|
46644
|
+
check(e) {
|
|
46645
|
+
let t = [], n = Array.from(e.root.querySelectorAll("[role=\"menu\"]"));
|
|
46646
|
+
for (let e of n) {
|
|
46647
|
+
let n = Array.from(e.querySelectorAll("[role=\"menuitem\"] svg"));
|
|
46648
|
+
if (n.length < 2) continue;
|
|
46649
|
+
let r = 0, i = 0, a = [];
|
|
46650
|
+
for (let e of n) {
|
|
46651
|
+
Array.from(e.querySelectorAll("path, circle, rect, polygon")).some((e) => {
|
|
46652
|
+
let t = (e.getAttribute("fill") ?? "").toLowerCase();
|
|
46653
|
+
return t === "currentcolor" || t && t !== "none";
|
|
46654
|
+
}) ? r++ : i++;
|
|
46655
|
+
let t = G2(e);
|
|
46656
|
+
a.push(Math.max(t.width, t.height));
|
|
46657
|
+
}
|
|
46658
|
+
let o = Math.max(...a), s = Math.min(...a), c = r > 0 && i > 0, l = o > 0 && o - s > 2;
|
|
46659
|
+
!c && !l || t.push(W2(this, e, c ? `${r} filled + ${i} stroke-based icons in one menu` : `icon sizes differ by ${(o - s).toFixed(1)}px`));
|
|
46660
|
+
}
|
|
46661
|
+
return t;
|
|
46662
|
+
}
|
|
46663
|
+
}, C4 = {
|
|
46664
|
+
id: "chrome-selectable",
|
|
46665
|
+
part: "Part 5",
|
|
46666
|
+
severity: "warn",
|
|
46667
|
+
description: "Part 5: chrome (rails/pills/tabs) is select-none — a rail/pill/tab without user-select:none.",
|
|
46668
|
+
check(e) {
|
|
46669
|
+
let t = [];
|
|
46670
|
+
for (let n of e.els) {
|
|
46671
|
+
if (!(n.matches("[role=\"tab\"]") || n.closest("[role=\"tablist\"], [data-rail], nav") || /\bpill\b/.test(typeof n.className == "string" ? n.className : ""))) continue;
|
|
46672
|
+
let r = e.css(n).userSelect || e.css(n).webkitUserSelect;
|
|
46673
|
+
r !== "none" && t.push(W2(this, n, `chrome element without user-select:none (user-select: ${r || "auto"})`));
|
|
46674
|
+
}
|
|
46675
|
+
return t;
|
|
46676
|
+
}
|
|
46677
|
+
}, w4 = {
|
|
46678
|
+
id: "cursor-mismatch",
|
|
46679
|
+
part: "Part 5",
|
|
46680
|
+
severity: "warn",
|
|
46681
|
+
description: "Part 5: cursor semantics — buttons get pointer, static text gets default. A button with cursor:text, or static text with cursor:pointer and no interactive ancestor.",
|
|
46682
|
+
check(e) {
|
|
46683
|
+
let t = [];
|
|
46684
|
+
for (let n of e.els) {
|
|
46685
|
+
let r = e.css(n).cursor;
|
|
46686
|
+
if (n.matches("button, [role=\"button\"]") && r === "text") {
|
|
46687
|
+
t.push(W2(this, n, "interactive control with cursor:text"));
|
|
46688
|
+
continue;
|
|
46689
|
+
}
|
|
46690
|
+
if (r === "pointer" && n.matches("p, h1, h2, h3, h4, h5, h6, span, label")) {
|
|
46691
|
+
if (n.closest("button, a, [role=\"button\"], [onclick]") || n.matches("button, a, [role=\"button\"]")) continue;
|
|
46692
|
+
t.push(W2(this, n, `static ${n.tagName.toLowerCase()} with cursor:pointer and no interactive ancestor`));
|
|
46693
|
+
}
|
|
46694
|
+
}
|
|
46695
|
+
return t;
|
|
46696
|
+
}
|
|
46697
|
+
};
|
|
46698
|
+
function T4(e) {
|
|
46699
|
+
let t = e.transitionProperty.split(",").map((e) => e.trim()).filter(Boolean);
|
|
46700
|
+
return t.length === 1 && t[0] === "none" ? [] : t;
|
|
46701
|
+
}
|
|
46702
|
+
var E4 = [
|
|
46703
|
+
i4,
|
|
46704
|
+
a4,
|
|
46705
|
+
o4,
|
|
46706
|
+
s4,
|
|
46707
|
+
c4,
|
|
46708
|
+
l4,
|
|
46709
|
+
u4,
|
|
46710
|
+
d4,
|
|
46711
|
+
f4,
|
|
46712
|
+
p4,
|
|
46713
|
+
h4,
|
|
46714
|
+
g4,
|
|
46715
|
+
_4,
|
|
46716
|
+
v4,
|
|
46717
|
+
y4,
|
|
46718
|
+
b4,
|
|
46719
|
+
x4,
|
|
46720
|
+
S4,
|
|
46721
|
+
C4,
|
|
46722
|
+
w4,
|
|
46723
|
+
{
|
|
46724
|
+
id: "transition-all",
|
|
46725
|
+
part: "§42",
|
|
46726
|
+
severity: "error",
|
|
46727
|
+
description: "§42: never transition-all — scope to what changes (transition-colors / transition-[transform,...]).",
|
|
46728
|
+
check(e) {
|
|
46729
|
+
let t = [];
|
|
46730
|
+
for (let n of e.els) {
|
|
46731
|
+
if (!n.matches(Q2)) continue;
|
|
46732
|
+
let r = T4(e.css(n));
|
|
46733
|
+
r.includes("all") && (v2(n, r) || t.push(W2(this, n, "transition-property: all")));
|
|
46734
|
+
}
|
|
46735
|
+
return t;
|
|
46736
|
+
}
|
|
46737
|
+
},
|
|
46738
|
+
{
|
|
46739
|
+
id: "transition-paint-prop",
|
|
46740
|
+
part: "§42",
|
|
46741
|
+
severity: "error",
|
|
46742
|
+
description: "§42: never transition layout/paint props (box-shadow, width, height, top/left, margin, padding) — they reflow/repaint every frame; focus rings SNAP, shadows animate a pseudo-element opacity.",
|
|
46743
|
+
check(e) {
|
|
46744
|
+
let t = [];
|
|
46745
|
+
for (let n of e.els) {
|
|
46746
|
+
let r = T4(e.css(n)), i = p2(r).filter((e) => e !== "all (includes layout/paint props)");
|
|
46747
|
+
i.length !== 0 && (v2(n, r) || t.push(W2(this, n, `transitions layout/paint props: ${i.join(", ")}`)));
|
|
46748
|
+
}
|
|
46749
|
+
return t;
|
|
46750
|
+
}
|
|
46751
|
+
},
|
|
46752
|
+
{
|
|
46753
|
+
id: "transition-too-slow",
|
|
46754
|
+
part: "§42",
|
|
46755
|
+
severity: "error",
|
|
46756
|
+
description: "§42: interaction feedback is ≤100ms (duration-75 for small controls) — the 100ms theme default is fine; an explicit duration-150+ crept in.",
|
|
46757
|
+
check(e) {
|
|
46758
|
+
let t = [];
|
|
46759
|
+
for (let n of e.els) {
|
|
46760
|
+
if (!n.matches(Q2)) continue;
|
|
46761
|
+
let r = e.css(n), i = T4(r);
|
|
46762
|
+
if (i.length === 0 || v2(n, i)) continue;
|
|
46763
|
+
let a = d2(r.transitionDuration), o = Math.max(0, ...a);
|
|
46764
|
+
o <= 100 || t.push(W2(this, n, `transition-duration ${o}ms (>100ms) on [${i.join(", ")}]`));
|
|
46765
|
+
}
|
|
46766
|
+
return t;
|
|
46767
|
+
}
|
|
46768
|
+
},
|
|
46769
|
+
{
|
|
46770
|
+
id: "ease-in-feedback",
|
|
46771
|
+
part: "§42",
|
|
46772
|
+
severity: "warn",
|
|
46773
|
+
description: "§42: house curve is cubic-bezier(.2,0,.1,1) ease-out — never ease-in / ease-in-out (or an ease-in-shaped bezier) on feedback.",
|
|
46774
|
+
check(e) {
|
|
46775
|
+
let t = [];
|
|
46776
|
+
for (let n of e.els) {
|
|
46777
|
+
if (!n.matches(Q2)) continue;
|
|
46778
|
+
let r = e.css(n), i = T4(r);
|
|
46779
|
+
if (i.length === 0 || v2(n, i)) continue;
|
|
46780
|
+
let a = m2(r.transitionTimingFunction);
|
|
46781
|
+
a && t.push(W2(this, n, `transition-timing-function: ${a}`));
|
|
46782
|
+
}
|
|
46783
|
+
return t;
|
|
46784
|
+
}
|
|
46785
|
+
},
|
|
46786
|
+
{
|
|
46787
|
+
id: "press-instant-rule-missing",
|
|
46788
|
+
part: "§42",
|
|
46789
|
+
severity: "error",
|
|
46790
|
+
description: "§42: the global press-instant rule (globals.css) must exist — `button:active{transition-duration:0s}` (or transition:none). Absent = press feedback animates instead of snapping.",
|
|
46791
|
+
check(e) {
|
|
46792
|
+
let t = e.root.styleSheets ? e.root : document, n = !1, r = (e) => {
|
|
46793
|
+
for (let t of Array.from(e)) {
|
|
46794
|
+
if (n) return;
|
|
46795
|
+
let e = t;
|
|
46796
|
+
if (e.cssRules && e.cssRules.length) {
|
|
46797
|
+
r(e.cssRules);
|
|
46798
|
+
continue;
|
|
46799
|
+
}
|
|
46800
|
+
let i = t, a = i.selectorText;
|
|
46801
|
+
if (a && /:active\b/.test(a) && /(^|[\s,])(button|a|\[role=("|')?(button|tab|menuitem|option)("|')?\])/i.test(a)) try {
|
|
46802
|
+
let e = i.style.transitionDuration, t = i.style.transition;
|
|
46803
|
+
if (e === "0s" || /(^|\s)none(\s|$)/.test(t) || /\b0s\b/.test(t)) {
|
|
46804
|
+
n = !0;
|
|
46805
|
+
return;
|
|
46806
|
+
}
|
|
46807
|
+
} catch {}
|
|
46808
|
+
}
|
|
46809
|
+
};
|
|
46810
|
+
try {
|
|
46811
|
+
for (let e of Array.from(t.styleSheets)) {
|
|
46812
|
+
if (n) break;
|
|
46813
|
+
try {
|
|
46814
|
+
r(e.cssRules);
|
|
46815
|
+
} catch {}
|
|
46816
|
+
}
|
|
46817
|
+
} catch {}
|
|
46818
|
+
if (n) return [];
|
|
46819
|
+
let i = e.root.documentElement ?? e.els[0] ?? document.documentElement;
|
|
46820
|
+
return [W2(this, i, "no `button:active { transition-duration: 0s }` rule on this page")];
|
|
46821
|
+
}
|
|
46822
|
+
}
|
|
46823
|
+
], D4 = [];
|
|
46824
|
+
function O4(e) {
|
|
46825
|
+
for (let t of Array.from(e.childNodes)) if (t.nodeType === 3 && (t.textContent ?? "").trim().length > 0) return !0;
|
|
46826
|
+
return !1;
|
|
46827
|
+
}
|
|
46828
|
+
function k4(e, t, n) {
|
|
46829
|
+
let r = Math.max(e, t, n);
|
|
46830
|
+
return r < 40 ? !1 : r - Math.min(e, t, n) > 60;
|
|
46831
|
+
}
|
|
46832
|
+
function A4(e) {
|
|
46833
|
+
return !!(/\b0px\s+0px\s+0px\s+0?\.?5px\b/.test(e) || /\b0px?\s+0px?\s+0px?\s+0?\.?5px\b/.test(e));
|
|
46834
|
+
}
|
|
46835
|
+
function j4(e = typeof document < "u" ? document : {}) {
|
|
46836
|
+
let t = /* @__PURE__ */ new Map(), n = (e) => {
|
|
46837
|
+
let n = t.get(e);
|
|
46838
|
+
return n || (n = getComputedStyle(e), t.set(e, n)), n;
|
|
46839
|
+
};
|
|
46840
|
+
r4 = n;
|
|
46841
|
+
let r = Array.from(e.querySelectorAll("*")), i = [];
|
|
46842
|
+
for (let e of r) {
|
|
46843
|
+
if (e.closest("#linear-grab-root")) continue;
|
|
46844
|
+
let t = G2(e);
|
|
46845
|
+
t.width === 0 && t.height === 0 && e.children.length === 0 || i.push(e);
|
|
46846
|
+
}
|
|
46847
|
+
let a = {
|
|
46848
|
+
root: e,
|
|
46849
|
+
els: i,
|
|
46850
|
+
css: n
|
|
46851
|
+
}, o = [];
|
|
46852
|
+
for (let e of [...E4, ...D4]) try {
|
|
46853
|
+
o.push(...e.check(a));
|
|
46854
|
+
} catch {}
|
|
46855
|
+
return r4 = (e) => getComputedStyle(e), o;
|
|
46856
|
+
}
|
|
46857
|
+
function M4(e) {
|
|
46858
|
+
let t = /* @__PURE__ */ new Map();
|
|
46859
|
+
for (let n of e) {
|
|
46860
|
+
let e = t.get(n.ruleId);
|
|
46861
|
+
e ? e.push(n) : t.set(n.ruleId, [n]);
|
|
46862
|
+
}
|
|
46863
|
+
let n = Array.from(t.entries()).sort((e, t) => {
|
|
46864
|
+
let n = e[1][0].severity === "error" ? 0 : 1, r = t[1][0].severity === "error" ? 0 : 1;
|
|
46865
|
+
return n === r ? t[1].length === e[1].length ? e[0].localeCompare(t[0]) : t[1].length - e[1].length : n - r;
|
|
46866
|
+
}), r = e.length, i = e.filter((e) => e.severity === "error").length, a = [`# Slop scan — ${i} error${i === 1 ? "" : "s"}, ${r - i} warn (${r} total)`, ""];
|
|
46867
|
+
for (let [e, t] of n) {
|
|
46868
|
+
let n = t[0];
|
|
46869
|
+
a.push(`## ${e} — ${n.severity} ×${t.length} [${n.part}]`), a.push(n.description);
|
|
46870
|
+
for (let e of t) a.push(`- \`${e.selector}\` — ${e.evidence}`);
|
|
46871
|
+
a.push("");
|
|
46872
|
+
}
|
|
46873
|
+
return a.join("\n");
|
|
46874
|
+
}
|
|
46875
|
+
function N4(e) {
|
|
46876
|
+
return [
|
|
46877
|
+
"Below is a design-system SLOP report from my running app — each finding is a",
|
|
46878
|
+
"live-DOM violation of the Linear/Protocolbase primitives contract (`Linear",
|
|
46879
|
+
"-primitives.md`). Every rule cites its §id. Goal: zero errors. Rules:",
|
|
46880
|
+
"",
|
|
46881
|
+
"1. Fix at the TOKEN / VARIANT level, not the call sites. Most of these come",
|
|
46882
|
+
" from shared row/button/menu variants — change --row-radius, --selected,",
|
|
46883
|
+
" .pb-row-action, the Button/Input variant, or the globals.css §42 rules —",
|
|
46884
|
+
" not one component at a time.",
|
|
46885
|
+
"2. Cite the primitives §id in your fix (each finding carries it). Radius →",
|
|
46886
|
+
" §40 vocabulary {8,12,16,full}; active fill → §11 var(--selected); menus →",
|
|
46887
|
+
" §21 all-or-none icons + one stroke family; uppercase labels → §25;",
|
|
46888
|
+
" editor flatness → Part 5; scrollers → §0–1 virtualize + truthful fade.",
|
|
46889
|
+
"3. §42 group (transition-all / paint-prop / too-slow / ease-in / press-",
|
|
46890
|
+
" instant): scope transitions to what changes, drop box-shadow/width/height",
|
|
46891
|
+
" from transition lists, keep feedback ≤100ms (duration-75 small controls),",
|
|
46892
|
+
" use ease-out (cubic-bezier(.2,0,.1,1)), and keep the global",
|
|
46893
|
+
" `button:active{transition-duration:0s}` press-instant rule.",
|
|
46894
|
+
"4. Do NOT touch EXEMPT intentional motion — popover/menu/dialog entry-exit,",
|
|
46895
|
+
" svg icon micro-motion, and panel width/height transitions are §42-blessed.",
|
|
46896
|
+
" The scan already excludes them; do not \"fix\" them.",
|
|
46897
|
+
"5. 'unverifiable' warnings mean the token collapsed to the anti-pattern this",
|
|
46898
|
+
" theme — verify the intent in BOTH themes, do not just silence it.",
|
|
46899
|
+
"6. PROOF REQUIRED: after the change I will re-run the scan — it must show 0",
|
|
46900
|
+
" errors. State what you changed per token/variant; do not claim done blind.",
|
|
46901
|
+
"",
|
|
46902
|
+
"---",
|
|
46903
|
+
"",
|
|
46904
|
+
M4(e)
|
|
46905
|
+
].join("\n");
|
|
46906
|
+
}
|
|
46907
|
+
//#endregion
|
|
46221
46908
|
//#region src/panel/views/DesignView.tsx
|
|
46222
|
-
var
|
|
46223
|
-
function
|
|
46909
|
+
var P4 = /*#__PURE__*/ N("<span class=\"inline-block min-w-[7ch] text-center\">Extract"), F4 = /*#__PURE__*/ N("<div class=\"relative flex flex-col gap-2 pl-4\"><div class=\"bg-border absolute top-1 bottom-1 left-[5px] w-px\"aria-hidden>"), I4 = /*#__PURE__*/ N("<span class=\"text-success text-[12px] leading-none\">✓"), L4 = /*#__PURE__*/ N("<svg width=12 height=12 viewBox=\"0 0 16 16\"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round aria-hidden><path d=\"M4 4l8 8M12 4l-8 8\">"), R4 = /*#__PURE__*/ N("<div class=\"flex items-center justify-end gap-1 px-1\">"), z4 = /*#__PURE__*/ N("<span class=\"relative inline-flex items-center justify-center\"><svg width=12 height=12 viewBox=\"0 0 16 16\"fill=currentColor aria-hidden><rect x=3.5 y=3 width=3.2 height=10 rx=1></rect><rect x=9.3 y=3 width=3.2 height=10 rx=1></rect></svg><span class=\"bg-success absolute -top-0.5 -right-0.5 size-1.5 animate-pulse rounded-full\"aria-hidden>"), B4 = /*#__PURE__*/ N("<span class=\"inline-block min-w-[5ch] text-center\">Audit"), V4 = /*#__PURE__*/ N("<div class=\"flex max-h-72 flex-col gap-1.5 overflow-y-auto pr-2\">"), H4 = /*#__PURE__*/ N("<span class=\"text-[12px] leading-none\">✓"), U4 = /*#__PURE__*/ N("<div class=\"flex items-center gap-1 px-1\">"), W4 = /*#__PURE__*/ N("<span class=\"inline-block min-w-[4ch] text-center\">Scan"), G4 = /*#__PURE__*/ N("<div class=\"flex items-center gap-1 px-1\"><button class=\"border-border cursor-pointer rounded-full border px-2 py-0.5 text-[10px] font-medium tabular-nums\"> errors</button><button class=\"border-border cursor-pointer rounded-full border px-2 py-0.5 text-[10px] font-medium tabular-nums\"> warns"), K4 = /*#__PURE__*/ N("<div class=\"flex h-full flex-col gap-3 overflow-y-auto pt-3 pb-4 pr-3 pl-2\"><div class=\"flex items-center justify-between gap-2 px-1\"><div class=min-w-0><p class=\"text-text text-[12.5px] font-semibold\">Design genomes</p><p class=\"text-text-faint text-[10.5px] leading-snug\">Point at a component → get its structure, tokens and interaction states as a spec you can hand to an agent.</p></div></div><div class=\"border-border mt-1 flex flex-col gap-2 border-t pt-3\"><div class=\"flex items-center justify-between gap-2 px-1\"><div class=min-w-0><p class=\"text-text text-[12.5px] font-semibold\">CSS slowdowns</p><p class=\"text-text-faint text-[10.5px] leading-snug\">Transitions/delays over the 100ms house cap (§42) on interactive elements — feedback that animates instead of being instant. Live hits appear as you use the app; Audit sweeps the whole page.</p></div><div class=\"flex shrink-0 items-center gap-1\"></div></div></div><div class=\"border-border mt-1 flex flex-col gap-2 border-t pt-3\"><div class=\"flex items-center justify-between gap-2 px-1\"><div class=min-w-0><p class=\"text-text text-[12.5px] font-semibold\">Slop scan</p><p class=\"text-text-faint text-[10.5px] leading-snug\">Design-contract drift — Linear-primitives rules checked against the live DOM. Open menus/popovers first to include them."), q4 = /*#__PURE__*/ N("<p class=\"text-text mt-1 text-[11px] font-semibold\">Interaction states"), J4 = /*#__PURE__*/ N("<svg width=12 height=12 viewBox=\"0 0 16 16\"aria-hidden><rect x=3.5 y=3.5 width=9 height=9 rx=1.5 fill=currentColor>"), Y4 = /*#__PURE__*/ N("<span class=\"text-warn text-[10.5px] font-medium tabular-nums\">s · <!> states"), X4 = /*#__PURE__*/ N("<div class=\"border-border flex flex-col gap-2 border-t px-2.5 py-2\"><p class=\"text-text-faint truncate text-[10px]\"></p><div class=\"flex max-h-64 flex-col gap-2 overflow-y-auto pr-2\"></div><div class=\"flex items-center gap-1\">"), Z4 = /*#__PURE__*/ N("<div class=relative><span class=\"border-border bg-surface absolute top-3 -left-[13.5px] size-[9px] rounded-full border\"aria-hidden></span><div class=\"bg-surface border-border flex flex-col rounded-lg border\"><button class=\"flex w-full cursor-pointer items-center gap-2 px-2.5 py-2 text-left\"><span class=\"text-accent min-w-0 truncate font-mono text-[12px]\"></span><span class=\"text-text-faint ml-auto shrink-0 text-[10.5px] tabular-nums\"> roles<!> · </span><svg width=10 height=10 viewBox=\"0 0 16 16\"fill=none stroke=currentColor stroke-width=1.5 class=\"text-text-faint shrink-0 transition-transform\"aria-hidden><path d=\"m4 6 4 4 4-4\">"), Q4 = /*#__PURE__*/ N("<span class=text-text-faint> ×"), $4 = /*#__PURE__*/ N("<div class=\"flex flex-col gap-0.5\"><p class=\"text-text text-[11px] font-medium\">"), e3 = /*#__PURE__*/ N("<span class=text-accent> ← var(<!>)"), t3 = /*#__PURE__*/ N("<p class=\"text-text-dim font-mono text-[10px] leading-snug break-all\">: "), n3 = /*#__PURE__*/ N("<div class=\"flex flex-col gap-0.5\"><p class=\"text-warn text-[10.5px] font-medium\"> — "), r3 = /*#__PURE__*/ N("<p class=\"text-text-dim font-mono text-[10px] leading-snug break-all\">: <!> → "), i3 = /*#__PURE__*/ N("<svg width=13 height=13 viewBox=\"0 0 16 16\"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round aria-hidden><circle cx=8 cy=8 r=6></circle><circle cx=8 cy=8 r=2 fill=currentColor stroke=none>"), a3 = /*#__PURE__*/ N("<svg width=13 height=13 viewBox=\"0 0 16 16\"fill=none stroke=currentColor stroke-width=1.5 stroke-linejoin=round aria-hidden><rect x=5.5 y=5.5 width=9 height=9 rx=1.5></rect><path d=\"M10.5 5.5v-2a2 2 0 0 0-2-2h-5a2 2 0 0 0-2 2v5a2 2 0 0 0 2 2h2\">"), o3 = /*#__PURE__*/ N("<svg width=12 height=12 viewBox=\"0 0 16 16\"fill=currentColor aria-hidden><path d=\"M4.5 2.5v11l9-5.5z\">"), s3 = /*#__PURE__*/ N("<p class=\"text-text-faint px-1 text-[10.5px]\">Nothing caught yet — interact with the app, or run Audit."), c3 = /*#__PURE__*/ N("<span class=\"text-text-dim font-mono text-[10px] break-all\">"), l3 = /*#__PURE__*/ N("<span class=\"text-danger text-[10px] leading-snug\">⚠ layout/paint transition: "), u3 = /*#__PURE__*/ N("<span class=\"text-danger text-[10px] leading-snug\">⚠ ease-in easing: "), d3 = /*#__PURE__*/ N("<div class=\"bg-surface border-border flex flex-col gap-0.5 rounded-lg border p-2\"><div class=\"flex items-center gap-2\"><span class=\"text-warn shrink-0 text-[10px] font-semibold tracking-wide uppercase\"></span><span class=\"text-accent min-w-0 truncate font-mono text-[11.5px]\"></span><span class=\"text-text ml-auto shrink-0 text-[11px] font-medium tabular-nums\">ms</span></div><span class=\"text-text-dim text-[10px] leading-snug\"></span><span class=\"text-text-faint text-[10px] leading-snug\">"), f3 = /*#__PURE__*/ N("<svg width=13 height=13 viewBox=\"0 0 16 16\"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round aria-hidden><path d=\"M8 1.5 9.6 6l4.4 1.6L9.6 9.2 8 13.7 6.4 9.2 2 7.6 6.4 6Z\"></path><path d=\"M13 11.5l.6 1.7 1.7.6-1.7.6-.6 1.7-.6-1.7-1.7-.6 1.7-.6Z\">"), p3 = /*#__PURE__*/ N("<p class=\"text-text-faint px-1 text-[10.5px]\">No scan yet — click Scan to audit this page against the contract."), m3 = /*#__PURE__*/ N("<div class=\"border-border flex flex-col gap-1 border-t px-2 py-1.5\"><p class=\"text-text-dim text-[10px] leading-snug\">"), h3 = /*#__PURE__*/ N("<div class=\"bg-surface border-border flex flex-col rounded-lg border\"><button class=\"flex w-full cursor-pointer items-center gap-2 px-2 py-1.5 text-left\"><span class=\"size-1.5 shrink-0 rounded-full\"aria-hidden></span><span class=\"text-accent min-w-0 truncate font-mono text-[11.5px]\"></span><span class=\"text-text-faint ml-auto shrink-0 text-[10.5px] tabular-nums\">×</span><svg width=10 height=10 viewBox=\"0 0 16 16\"fill=none stroke=currentColor stroke-width=1.5 class=\"text-text-faint shrink-0 transition-transform\"aria-hidden><path d=\"m4 6 4 4 4-4\">"), g3 = /*#__PURE__*/ N("<button class=\"hover:bg-surface-2 flex w-full cursor-pointer flex-col gap-0.5 rounded px-1 py-0.5 text-left\"title=\"Reveal on the page\"><span class=\"text-text min-w-0 truncate font-mono text-[10.5px]\"></span><span class=\"text-text-faint font-mono text-[10px] leading-snug break-all\">"), _3 = "linear-grab:genomes:v1", v3 = 30;
|
|
46910
|
+
function y3() {
|
|
46224
46911
|
try {
|
|
46225
|
-
return JSON.parse(localStorage.getItem(
|
|
46912
|
+
return JSON.parse(localStorage.getItem(_3) ?? "[]");
|
|
46226
46913
|
} catch {
|
|
46227
46914
|
return [];
|
|
46228
46915
|
}
|
|
46229
46916
|
}
|
|
46230
|
-
function
|
|
46917
|
+
function b3(e) {
|
|
46231
46918
|
try {
|
|
46232
|
-
localStorage.setItem(
|
|
46919
|
+
localStorage.setItem(_3, JSON.stringify(e.slice(0, v3)));
|
|
46233
46920
|
} catch {}
|
|
46234
46921
|
}
|
|
46235
|
-
var
|
|
46236
|
-
function
|
|
46237
|
-
let
|
|
46922
|
+
var x3 = /* @__PURE__ */ new Map(), S3 = [];
|
|
46923
|
+
function C3(e) {
|
|
46924
|
+
let t = e.el?.deref();
|
|
46925
|
+
if (!(t instanceof HTMLElement) || !t.isConnected) return !1;
|
|
46926
|
+
t.scrollIntoView({
|
|
46927
|
+
block: "center",
|
|
46928
|
+
behavior: "smooth"
|
|
46929
|
+
});
|
|
46930
|
+
let n = t.style.outline, r = t.style.outlineOffset;
|
|
46931
|
+
return t.style.outline = "2px solid #e5a13a", t.style.outlineOffset = "2px", setTimeout(() => {
|
|
46932
|
+
t.style.outline = n, t.style.outlineOffset = r;
|
|
46933
|
+
}, 1400), !0;
|
|
46934
|
+
}
|
|
46935
|
+
function w3(e) {
|
|
46936
|
+
if (e.length === 0) return;
|
|
46937
|
+
let t = Date.now(), n = e.slice(0, 200).map(({ el: e, ...n }) => ({
|
|
46938
|
+
kind: "slop-scan",
|
|
46939
|
+
page: location.pathname,
|
|
46940
|
+
at: t,
|
|
46941
|
+
...n
|
|
46942
|
+
}));
|
|
46943
|
+
JO().then((e) => fetch(`${e}/scan/events`, {
|
|
46944
|
+
method: "POST",
|
|
46945
|
+
headers: { "Content-Type": "application/json" },
|
|
46946
|
+
body: JSON.stringify({ events: n }),
|
|
46947
|
+
keepalive: !0
|
|
46948
|
+
})).catch(() => {});
|
|
46949
|
+
}
|
|
46950
|
+
function T3() {
|
|
46951
|
+
let [e, t] = T(y3()), [n, r] = T(null), [i, a] = T(null), [o, s] = T(null), [c, l] = T(null), [u, d] = T(null), [f, p] = T({
|
|
46238
46952
|
active: !1,
|
|
46239
46953
|
msLeft: 0,
|
|
46240
46954
|
total: 0,
|
|
@@ -46242,37 +46956,68 @@ function S4() {
|
|
|
46242
46956
|
});
|
|
46243
46957
|
ae(i2(p));
|
|
46244
46958
|
let [m, h] = T([]);
|
|
46245
|
-
ae(
|
|
46246
|
-
let [g, _] = T(
|
|
46247
|
-
ae(
|
|
46959
|
+
ae(j2(h));
|
|
46960
|
+
let [g, _] = T(F2());
|
|
46961
|
+
ae(L2(_));
|
|
46248
46962
|
let [v, y] = T(!1), [b, x] = T(!1), S = async () => {
|
|
46249
46963
|
y(!0);
|
|
46250
46964
|
try {
|
|
46251
|
-
await
|
|
46965
|
+
await V2();
|
|
46252
46966
|
} finally {
|
|
46253
46967
|
y(!1);
|
|
46254
46968
|
}
|
|
46255
46969
|
}, C = async () => {
|
|
46256
46970
|
try {
|
|
46257
|
-
await navigator.clipboard.writeText(
|
|
46971
|
+
await navigator.clipboard.writeText(U2(m())), x(!0), setTimeout(() => x(!1), 1600);
|
|
46258
46972
|
} catch {
|
|
46259
46973
|
l("Clipboard was blocked — click Copy again.");
|
|
46260
46974
|
}
|
|
46261
46975
|
}, [w, E] = T(!1), O = async () => {
|
|
46262
46976
|
try {
|
|
46263
|
-
await navigator.clipboard.writeText(
|
|
46977
|
+
await navigator.clipboard.writeText(H2(m())), E(!0), setTimeout(() => E(!1), 1600);
|
|
46264
46978
|
} catch {
|
|
46265
46979
|
l("Clipboard was blocked — click Copy again.");
|
|
46266
46980
|
}
|
|
46267
|
-
}, k = (
|
|
46268
|
-
|
|
46269
|
-
|
|
46981
|
+
}, [k, ee] = T(S3), [te, A] = T(!1), [ne, re] = T(null), [ie, oe] = T(!0), [se, ce] = T(!0), [le, ue] = T(!1), [de, fe] = T(!1), pe = () => {
|
|
46982
|
+
l(null), A(!0);
|
|
46983
|
+
try {
|
|
46984
|
+
let e = j4(document);
|
|
46985
|
+
S3 = e, ee(e), re(null), w3(e);
|
|
46986
|
+
} catch (e) {
|
|
46987
|
+
l(e instanceof Error ? e.message : String(e));
|
|
46988
|
+
} finally {
|
|
46989
|
+
A(!1);
|
|
46990
|
+
}
|
|
46991
|
+
}, me = () => {
|
|
46992
|
+
S3 = [], ee([]), re(null);
|
|
46993
|
+
}, he = () => k().filter((e) => e.severity === "error" ? ie() : se()), ge = () => {
|
|
46994
|
+
let e = /* @__PURE__ */ new Map();
|
|
46995
|
+
for (let t of he()) {
|
|
46996
|
+
let n = e.get(t.ruleId);
|
|
46997
|
+
n ? n.push(t) : e.set(t.ruleId, [t]);
|
|
46998
|
+
}
|
|
46999
|
+
return [...e.values()].sort((e, t) => Number(t[0].severity === "error") - Number(e[0].severity === "error") || t.length - e.length);
|
|
47000
|
+
}, _e = () => k().filter((e) => e.severity === "error").length, ve = () => k().length - _e(), ye = async () => {
|
|
47001
|
+
try {
|
|
47002
|
+
await navigator.clipboard.writeText(M4(he())), ue(!0), setTimeout(() => ue(!1), 1600);
|
|
47003
|
+
} catch {
|
|
47004
|
+
l("Clipboard was blocked — click Copy again.");
|
|
47005
|
+
}
|
|
47006
|
+
}, be = async () => {
|
|
47007
|
+
try {
|
|
47008
|
+
await navigator.clipboard.writeText(N4(he())), fe(!0), setTimeout(() => fe(!1), 1600);
|
|
47009
|
+
} catch {
|
|
47010
|
+
l("Clipboard was blocked — click Copy again.");
|
|
47011
|
+
}
|
|
47012
|
+
}, xe = (e) => {
|
|
47013
|
+
t(e), b3(e);
|
|
47014
|
+
}, Se = async () => {
|
|
46270
47015
|
l(null), a("extract"), window.dispatchEvent(new CustomEvent(BZ));
|
|
46271
47016
|
try {
|
|
46272
47017
|
let t = await u2();
|
|
46273
47018
|
if (!t) return;
|
|
46274
47019
|
let n = await e2(t), i = Date.now();
|
|
46275
|
-
|
|
47020
|
+
x3.set(i, new WeakRef(t)), xe([{
|
|
46276
47021
|
id: i,
|
|
46277
47022
|
genome: n
|
|
46278
47023
|
}, ...e()]), r(i);
|
|
@@ -46281,16 +47026,16 @@ function S4() {
|
|
|
46281
47026
|
} finally {
|
|
46282
47027
|
a(null), oj("design"), window.dispatchEvent(new CustomEvent(VZ));
|
|
46283
47028
|
}
|
|
46284
|
-
},
|
|
47029
|
+
}, Ce = async (t) => {
|
|
46285
47030
|
l(null), a(t.id), window.dispatchEvent(new CustomEvent(BZ));
|
|
46286
47031
|
try {
|
|
46287
|
-
let n =
|
|
47032
|
+
let n = x3.get(t.id)?.deref() ?? null;
|
|
46288
47033
|
if (!n || !n.isConnected) {
|
|
46289
47034
|
if (n = await u2(), !n) return;
|
|
46290
|
-
|
|
47035
|
+
x3.set(t.id, new WeakRef(n));
|
|
46291
47036
|
}
|
|
46292
47037
|
let r = await c2(n, 8e3, (e) => s(Math.ceil(e / 1e3)));
|
|
46293
|
-
r.length === 0 && l("No state changes captured — hover/open the component while the 8s window runs."),
|
|
47038
|
+
r.length === 0 && l("No state changes captured — hover/open the component while the 8s window runs."), xe(e().map((e) => e.id === t.id ? {
|
|
46294
47039
|
...e,
|
|
46295
47040
|
genome: {
|
|
46296
47041
|
...e.genome,
|
|
@@ -46302,37 +47047,37 @@ function S4() {
|
|
|
46302
47047
|
} finally {
|
|
46303
47048
|
a(null), s(null), oj("design"), window.dispatchEvent(new CustomEvent(VZ));
|
|
46304
47049
|
}
|
|
46305
|
-
},
|
|
47050
|
+
}, we = async (e) => {
|
|
46306
47051
|
try {
|
|
46307
47052
|
await navigator.clipboard.writeText(l2(e.genome)), d(e.id), setTimeout(() => d(null), 1600);
|
|
46308
47053
|
} catch {
|
|
46309
47054
|
l("Clipboard was blocked — click Copy again.");
|
|
46310
47055
|
}
|
|
46311
|
-
},
|
|
46312
|
-
|
|
46313
|
-
}, [
|
|
47056
|
+
}, Te = (t) => {
|
|
47057
|
+
x3.delete(t), xe(e().filter((e) => e.id !== t));
|
|
47058
|
+
}, [Ee, De] = T(!1), Oe = async () => {
|
|
46314
47059
|
try {
|
|
46315
47060
|
let t = e().map((e) => l2(e.genome)).join("\n\n---\n\n");
|
|
46316
|
-
await navigator.clipboard.writeText(t),
|
|
47061
|
+
await navigator.clipboard.writeText(t), De(!0), setTimeout(() => De(!1), 1600);
|
|
46317
47062
|
} catch {
|
|
46318
47063
|
l("Clipboard was blocked — click Copy again.");
|
|
46319
47064
|
}
|
|
46320
|
-
},
|
|
46321
|
-
|
|
47065
|
+
}, ke = () => {
|
|
47066
|
+
x3.clear(), xe([]), r(null);
|
|
46322
47067
|
};
|
|
46323
47068
|
return (() => {
|
|
46324
|
-
var t =
|
|
47069
|
+
var t = K4(), a = t.firstChild;
|
|
46325
47070
|
a.firstChild;
|
|
46326
|
-
var o = a.nextSibling, s = o.firstChild.firstChild.nextSibling;
|
|
46327
|
-
return P(a, j(kj, {
|
|
47071
|
+
var o = a.nextSibling, s = o.firstChild.firstChild.nextSibling, d = o.nextSibling, p = d.firstChild;
|
|
47072
|
+
return p.firstChild, P(a, j(kj, {
|
|
46328
47073
|
variant: "primary",
|
|
46329
47074
|
class: "h-7 shrink-0 px-2.5 text-[11.5px]",
|
|
46330
47075
|
get loading() {
|
|
46331
47076
|
return i() === "extract";
|
|
46332
47077
|
},
|
|
46333
|
-
onClick: () => void
|
|
47078
|
+
onClick: () => void Se(),
|
|
46334
47079
|
get children() {
|
|
46335
|
-
return
|
|
47080
|
+
return P4();
|
|
46336
47081
|
}
|
|
46337
47082
|
}), null), P(t, j(M, {
|
|
46338
47083
|
get when() {
|
|
@@ -46355,7 +47100,7 @@ function S4() {
|
|
|
46355
47100
|
},
|
|
46356
47101
|
get children() {
|
|
46357
47102
|
return [(() => {
|
|
46358
|
-
var t =
|
|
47103
|
+
var t = F4();
|
|
46359
47104
|
return t.firstChild, P(t, j(We, {
|
|
46360
47105
|
get each() {
|
|
46361
47106
|
return e();
|
|
@@ -46363,7 +47108,7 @@ function S4() {
|
|
|
46363
47108
|
children: (e) => {
|
|
46364
47109
|
let t = () => n() === e.id;
|
|
46365
47110
|
return (() => {
|
|
46366
|
-
var n =
|
|
47111
|
+
var n = Z4(), a = n.firstChild, o = a.nextSibling, s = o.firstChild, c = s.firstChild, l = c.nextSibling, d = l.firstChild, p = d.nextSibling;
|
|
46367
47112
|
p.nextSibling;
|
|
46368
47113
|
var m = l.nextSibling;
|
|
46369
47114
|
return s.$$click = () => r(t() ? null : e.id), P(c, () => e.genome.title), P(l, () => e.genome.nodes.length, d), P(l, (() => {
|
|
@@ -46374,19 +47119,19 @@ function S4() {
|
|
|
46374
47119
|
return t();
|
|
46375
47120
|
},
|
|
46376
47121
|
get children() {
|
|
46377
|
-
var t =
|
|
47122
|
+
var t = X4(), n = t.firstChild, r = n.nextSibling, a = r.nextSibling;
|
|
46378
47123
|
return P(n, () => e.genome.pageUrl), P(r, j(We, {
|
|
46379
47124
|
get each() {
|
|
46380
47125
|
return e.genome.nodes;
|
|
46381
47126
|
},
|
|
46382
47127
|
children: (e) => (() => {
|
|
46383
|
-
var t =
|
|
47128
|
+
var t = $4(), n = t.firstChild;
|
|
46384
47129
|
return P(n, () => e.label, null), P(n, j(M, {
|
|
46385
47130
|
get when() {
|
|
46386
47131
|
return e.count > 1;
|
|
46387
47132
|
},
|
|
46388
47133
|
get children() {
|
|
46389
|
-
var t =
|
|
47134
|
+
var t = Q4();
|
|
46390
47135
|
return t.firstChild, P(t, () => e.count, null), t;
|
|
46391
47136
|
}
|
|
46392
47137
|
}), null), P(t, j(We, {
|
|
@@ -46394,13 +47139,13 @@ function S4() {
|
|
|
46394
47139
|
return Object.entries(e.styles);
|
|
46395
47140
|
},
|
|
46396
47141
|
children: ([t, n]) => (() => {
|
|
46397
|
-
var r =
|
|
47142
|
+
var r = t3(), i = r.firstChild;
|
|
46398
47143
|
return P(r, t, i), P(r, n, null), P(r, j(M, {
|
|
46399
47144
|
get when() {
|
|
46400
47145
|
return e.tokens[t];
|
|
46401
47146
|
},
|
|
46402
47147
|
get children() {
|
|
46403
|
-
var n =
|
|
47148
|
+
var n = e3(), r = n.firstChild.nextSibling;
|
|
46404
47149
|
return r.nextSibling, P(n, () => e.tokens[t], r), n;
|
|
46405
47150
|
}
|
|
46406
47151
|
}), null), r;
|
|
@@ -46412,18 +47157,18 @@ function S4() {
|
|
|
46412
47157
|
return e.genome.states.length > 0;
|
|
46413
47158
|
},
|
|
46414
47159
|
get children() {
|
|
46415
|
-
return [
|
|
47160
|
+
return [q4(), j(We, {
|
|
46416
47161
|
get each() {
|
|
46417
47162
|
return e.genome.states;
|
|
46418
47163
|
},
|
|
46419
47164
|
children: (e) => (() => {
|
|
46420
|
-
var t =
|
|
47165
|
+
var t = n3(), n = t.firstChild, r = n.firstChild;
|
|
46421
47166
|
return P(n, () => e.label, r), P(n, () => e.trigger, null), P(t, j(We, {
|
|
46422
47167
|
get each() {
|
|
46423
47168
|
return Object.entries(e.changed);
|
|
46424
47169
|
},
|
|
46425
47170
|
children: ([e, t]) => (() => {
|
|
46426
|
-
var n =
|
|
47171
|
+
var n = r3(), r = n.firstChild, i = r.nextSibling;
|
|
46427
47172
|
return i.nextSibling, P(n, e, r), P(n, () => t.from, i), P(n, () => t.to, null), n;
|
|
46428
47173
|
})()
|
|
46429
47174
|
}), null), t;
|
|
@@ -46443,9 +47188,9 @@ function S4() {
|
|
|
46443
47188
|
},
|
|
46444
47189
|
title: "Capture states — records hover/focus/open styles for 8s while you interact; the pill shows the timer and Stop",
|
|
46445
47190
|
"aria-label": "Capture interaction states",
|
|
46446
|
-
onClick: () => void
|
|
47191
|
+
onClick: () => void Ce(e),
|
|
46447
47192
|
get children() {
|
|
46448
|
-
return
|
|
47193
|
+
return i3();
|
|
46449
47194
|
}
|
|
46450
47195
|
});
|
|
46451
47196
|
},
|
|
@@ -46459,10 +47204,10 @@ function S4() {
|
|
|
46459
47204
|
"aria-label": "Stop recording states",
|
|
46460
47205
|
onClick: () => o2(),
|
|
46461
47206
|
get children() {
|
|
46462
|
-
return
|
|
47207
|
+
return J4();
|
|
46463
47208
|
}
|
|
46464
47209
|
}), (() => {
|
|
46465
|
-
var e =
|
|
47210
|
+
var e = Y4(), t = e.firstChild, n = t.nextSibling;
|
|
46466
47211
|
return n.nextSibling, P(e, () => Math.ceil(f().msLeft / 1e3), t), P(e, () => f().total, n), e;
|
|
46467
47212
|
})()];
|
|
46468
47213
|
}
|
|
@@ -46473,17 +47218,17 @@ function S4() {
|
|
|
46473
47218
|
return u() === e.id ? "Copied!" : "Copy spec — markdown for an agent or issue";
|
|
46474
47219
|
},
|
|
46475
47220
|
"aria-label": "Copy genome spec",
|
|
46476
|
-
onClick: () => void
|
|
47221
|
+
onClick: () => void we(e),
|
|
46477
47222
|
get children() {
|
|
46478
47223
|
return j(M, {
|
|
46479
47224
|
get when() {
|
|
46480
47225
|
return u() === e.id;
|
|
46481
47226
|
},
|
|
46482
47227
|
get fallback() {
|
|
46483
|
-
return
|
|
47228
|
+
return a3();
|
|
46484
47229
|
},
|
|
46485
47230
|
get children() {
|
|
46486
|
-
return
|
|
47231
|
+
return I4();
|
|
46487
47232
|
}
|
|
46488
47233
|
});
|
|
46489
47234
|
}
|
|
@@ -46492,9 +47237,9 @@ function S4() {
|
|
|
46492
47237
|
variant: "ghost",
|
|
46493
47238
|
title: "Delete this genome",
|
|
46494
47239
|
"aria-label": "Delete genome",
|
|
46495
|
-
onClick: () =>
|
|
47240
|
+
onClick: () => Te(e.id),
|
|
46496
47241
|
get children() {
|
|
46497
|
-
return
|
|
47242
|
+
return L4();
|
|
46498
47243
|
}
|
|
46499
47244
|
}), null), t;
|
|
46500
47245
|
}
|
|
@@ -46509,25 +47254,25 @@ function S4() {
|
|
|
46509
47254
|
}
|
|
46510
47255
|
}), null), t;
|
|
46511
47256
|
})(), (() => {
|
|
46512
|
-
var e =
|
|
47257
|
+
var e = R4();
|
|
46513
47258
|
return P(e, j(kj, {
|
|
46514
47259
|
class: "size-7 px-0",
|
|
46515
47260
|
variant: "ghost",
|
|
46516
47261
|
get title() {
|
|
46517
|
-
return
|
|
47262
|
+
return Ee() ? "Copied!" : "Copy all genomes as one markdown document";
|
|
46518
47263
|
},
|
|
46519
47264
|
"aria-label": "Copy all genomes",
|
|
46520
|
-
onClick: () => void
|
|
47265
|
+
onClick: () => void Oe(),
|
|
46521
47266
|
get children() {
|
|
46522
47267
|
return j(M, {
|
|
46523
47268
|
get when() {
|
|
46524
|
-
return
|
|
47269
|
+
return Ee();
|
|
46525
47270
|
},
|
|
46526
47271
|
get fallback() {
|
|
46527
|
-
return
|
|
47272
|
+
return a3();
|
|
46528
47273
|
},
|
|
46529
47274
|
get children() {
|
|
46530
|
-
return
|
|
47275
|
+
return I4();
|
|
46531
47276
|
}
|
|
46532
47277
|
});
|
|
46533
47278
|
}
|
|
@@ -46536,9 +47281,9 @@ function S4() {
|
|
|
46536
47281
|
variant: "ghost",
|
|
46537
47282
|
title: "Delete all saved genomes",
|
|
46538
47283
|
"aria-label": "Delete all genomes",
|
|
46539
|
-
onClick:
|
|
47284
|
+
onClick: ke,
|
|
46540
47285
|
get children() {
|
|
46541
|
-
return
|
|
47286
|
+
return L4();
|
|
46542
47287
|
}
|
|
46543
47288
|
}), null), e;
|
|
46544
47289
|
})()];
|
|
@@ -46552,17 +47297,17 @@ function S4() {
|
|
|
46552
47297
|
get "aria-label"() {
|
|
46553
47298
|
return g() ? "Pause live capture" : "Start live capture";
|
|
46554
47299
|
},
|
|
46555
|
-
onClick: () =>
|
|
47300
|
+
onClick: () => I2(!g()),
|
|
46556
47301
|
get children() {
|
|
46557
47302
|
return j(M, {
|
|
46558
47303
|
get when() {
|
|
46559
47304
|
return g();
|
|
46560
47305
|
},
|
|
46561
47306
|
get fallback() {
|
|
46562
|
-
return
|
|
47307
|
+
return o3();
|
|
46563
47308
|
},
|
|
46564
47309
|
get children() {
|
|
46565
|
-
return
|
|
47310
|
+
return z4();
|
|
46566
47311
|
}
|
|
46567
47312
|
});
|
|
46568
47313
|
}
|
|
@@ -46574,24 +47319,24 @@ function S4() {
|
|
|
46574
47319
|
},
|
|
46575
47320
|
onClick: () => void S(),
|
|
46576
47321
|
get children() {
|
|
46577
|
-
return
|
|
47322
|
+
return B4();
|
|
46578
47323
|
}
|
|
46579
47324
|
}), null), P(o, j(M, {
|
|
46580
47325
|
get when() {
|
|
46581
47326
|
return m().length > 0;
|
|
46582
47327
|
},
|
|
46583
47328
|
get fallback() {
|
|
46584
|
-
return
|
|
47329
|
+
return s3();
|
|
46585
47330
|
},
|
|
46586
47331
|
get children() {
|
|
46587
47332
|
return [(() => {
|
|
46588
|
-
var e =
|
|
47333
|
+
var e = V4();
|
|
46589
47334
|
return P(e, j(We, {
|
|
46590
47335
|
get each() {
|
|
46591
47336
|
return m();
|
|
46592
47337
|
},
|
|
46593
47338
|
children: (e) => (() => {
|
|
46594
|
-
var t =
|
|
47339
|
+
var t = d3(), n = t.firstChild, r = n.firstChild, i = r.nextSibling, a = i.nextSibling, o = a.firstChild, s = n.nextSibling, c = s.nextSibling;
|
|
46595
47340
|
return P(r, () => e.mode === "live" ? "live" : "audit"), P(i, () => e.component ?? e.element, null), P(i, j(M, {
|
|
46596
47341
|
get when() {
|
|
46597
47342
|
return e.count > 1;
|
|
@@ -46607,7 +47352,7 @@ function S4() {
|
|
|
46607
47352
|
return e.source;
|
|
46608
47353
|
},
|
|
46609
47354
|
get children() {
|
|
46610
|
-
var t =
|
|
47355
|
+
var t = c3();
|
|
46611
47356
|
return P(t, () => e.source), t;
|
|
46612
47357
|
}
|
|
46613
47358
|
}), s), P(s, () => e.properties.join(", "), null), P(s, j(M, {
|
|
@@ -46626,7 +47371,7 @@ function S4() {
|
|
|
46626
47371
|
return e.jankProps?.length;
|
|
46627
47372
|
},
|
|
46628
47373
|
get children() {
|
|
46629
|
-
var t =
|
|
47374
|
+
var t = l3();
|
|
46630
47375
|
return t.firstChild, P(t, () => e.jankProps.join(", "), null), t;
|
|
46631
47376
|
}
|
|
46632
47377
|
}), c), P(t, j(M, {
|
|
@@ -46634,14 +47379,14 @@ function S4() {
|
|
|
46634
47379
|
return e.easing;
|
|
46635
47380
|
},
|
|
46636
47381
|
get children() {
|
|
46637
|
-
var t =
|
|
47382
|
+
var t = u3();
|
|
46638
47383
|
return t.firstChild, P(t, () => e.easing, null), t;
|
|
46639
47384
|
}
|
|
46640
47385
|
}), c), P(c, () => e.suggestion), t;
|
|
46641
47386
|
})()
|
|
46642
47387
|
})), e;
|
|
46643
47388
|
})(), (() => {
|
|
46644
|
-
var e =
|
|
47389
|
+
var e = U4();
|
|
46645
47390
|
return P(e, j(kj, {
|
|
46646
47391
|
class: "size-7 px-0",
|
|
46647
47392
|
variant: "primary",
|
|
@@ -46656,10 +47401,10 @@ function S4() {
|
|
|
46656
47401
|
return w();
|
|
46657
47402
|
},
|
|
46658
47403
|
get fallback() {
|
|
46659
|
-
return
|
|
47404
|
+
return f3();
|
|
46660
47405
|
},
|
|
46661
47406
|
get children() {
|
|
46662
|
-
return
|
|
47407
|
+
return H4();
|
|
46663
47408
|
}
|
|
46664
47409
|
});
|
|
46665
47410
|
}
|
|
@@ -46677,10 +47422,10 @@ function S4() {
|
|
|
46677
47422
|
return b();
|
|
46678
47423
|
},
|
|
46679
47424
|
get fallback() {
|
|
46680
|
-
return
|
|
47425
|
+
return a3();
|
|
46681
47426
|
},
|
|
46682
47427
|
get children() {
|
|
46683
|
-
return
|
|
47428
|
+
return I4();
|
|
46684
47429
|
}
|
|
46685
47430
|
});
|
|
46686
47431
|
}
|
|
@@ -46689,20 +47434,154 @@ function S4() {
|
|
|
46689
47434
|
variant: "ghost",
|
|
46690
47435
|
title: "Clear all findings (live + audit)",
|
|
46691
47436
|
"aria-label": "Clear all findings",
|
|
46692
|
-
onClick:
|
|
47437
|
+
onClick: M2,
|
|
46693
47438
|
get children() {
|
|
46694
|
-
return
|
|
47439
|
+
return L4();
|
|
46695
47440
|
}
|
|
46696
47441
|
}), null), e;
|
|
46697
47442
|
})()];
|
|
46698
47443
|
}
|
|
47444
|
+
}), null), P(p, j(kj, {
|
|
47445
|
+
variant: "ghost",
|
|
47446
|
+
class: "h-7 shrink-0 px-2.5 text-[11.5px]",
|
|
47447
|
+
get loading() {
|
|
47448
|
+
return te();
|
|
47449
|
+
},
|
|
47450
|
+
onClick: pe,
|
|
47451
|
+
get children() {
|
|
47452
|
+
return W4();
|
|
47453
|
+
}
|
|
47454
|
+
}), null), P(d, j(M, {
|
|
47455
|
+
get when() {
|
|
47456
|
+
return k().length > 0;
|
|
47457
|
+
},
|
|
47458
|
+
get fallback() {
|
|
47459
|
+
return p3();
|
|
47460
|
+
},
|
|
47461
|
+
get children() {
|
|
47462
|
+
return [
|
|
47463
|
+
(() => {
|
|
47464
|
+
var e = G4(), t = e.firstChild, n = t.firstChild, r = t.nextSibling, i = r.firstChild;
|
|
47465
|
+
return t.$$click = () => oe(!ie()), P(t, _e, n), r.$$click = () => ce(!se()), P(r, ve, i), D((e) => {
|
|
47466
|
+
var n = {
|
|
47467
|
+
"text-danger bg-danger/10 border-danger/40": ie(),
|
|
47468
|
+
"text-text-faint": !ie()
|
|
47469
|
+
}, i = ie(), a = {
|
|
47470
|
+
"text-warn bg-warn/10 border-warn/40": se(),
|
|
47471
|
+
"text-text-faint": !se()
|
|
47472
|
+
}, o = se();
|
|
47473
|
+
return e.e = lt(t, n, e.e), i !== e.t && it(t, "aria-pressed", e.t = i), e.a = lt(r, a, e.a), o !== e.o && it(r, "aria-pressed", e.o = o), e;
|
|
47474
|
+
}, {
|
|
47475
|
+
e: void 0,
|
|
47476
|
+
t: void 0,
|
|
47477
|
+
a: void 0,
|
|
47478
|
+
o: void 0
|
|
47479
|
+
}), e;
|
|
47480
|
+
})(),
|
|
47481
|
+
(() => {
|
|
47482
|
+
var e = V4();
|
|
47483
|
+
return P(e, j(We, {
|
|
47484
|
+
get each() {
|
|
47485
|
+
return ge();
|
|
47486
|
+
},
|
|
47487
|
+
children: (e) => {
|
|
47488
|
+
let t = e[0], n = () => ne() === t.ruleId;
|
|
47489
|
+
return (() => {
|
|
47490
|
+
var r = h3(), i = r.firstChild, a = i.firstChild, o = a.nextSibling, s = o.nextSibling;
|
|
47491
|
+
s.firstChild;
|
|
47492
|
+
var c = s.nextSibling;
|
|
47493
|
+
return i.$$click = () => re(n() ? null : t.ruleId), P(o, () => t.ruleId), P(s, () => e.length, null), P(r, j(M, {
|
|
47494
|
+
get when() {
|
|
47495
|
+
return n();
|
|
47496
|
+
},
|
|
47497
|
+
get children() {
|
|
47498
|
+
var n = m3(), r = n.firstChild;
|
|
47499
|
+
return P(r, () => t.description), P(n, j(We, {
|
|
47500
|
+
each: e,
|
|
47501
|
+
children: (e) => (() => {
|
|
47502
|
+
var t = g3(), n = t.firstChild, r = n.nextSibling;
|
|
47503
|
+
return t.$$click = () => {
|
|
47504
|
+
C3(e) || l("Element is gone — run Scan again.");
|
|
47505
|
+
}, P(n, () => e.selector), P(r, () => e.evidence), t;
|
|
47506
|
+
})()
|
|
47507
|
+
}), null), n;
|
|
47508
|
+
}
|
|
47509
|
+
}), null), D((e) => {
|
|
47510
|
+
var r = t.severity === "error", i = t.severity === "warn", o = !!n();
|
|
47511
|
+
return r !== e.e && a.classList.toggle("bg-danger", e.e = r), i !== e.t && a.classList.toggle("bg-warn", e.t = i), o !== e.a && c.classList.toggle("rotate-180", e.a = o), e;
|
|
47512
|
+
}, {
|
|
47513
|
+
e: void 0,
|
|
47514
|
+
t: void 0,
|
|
47515
|
+
a: void 0
|
|
47516
|
+
}), r;
|
|
47517
|
+
})();
|
|
47518
|
+
}
|
|
47519
|
+
})), e;
|
|
47520
|
+
})(),
|
|
47521
|
+
(() => {
|
|
47522
|
+
var e = U4();
|
|
47523
|
+
return P(e, j(kj, {
|
|
47524
|
+
class: "size-7 px-0",
|
|
47525
|
+
variant: "primary",
|
|
47526
|
+
get title() {
|
|
47527
|
+
return de() ? "Copied!" : "Copy AI prompt — findings + contract fix rules, ready for a Claude Code session";
|
|
47528
|
+
},
|
|
47529
|
+
"aria-label": "Copy AI fix prompt",
|
|
47530
|
+
onClick: () => void be(),
|
|
47531
|
+
get children() {
|
|
47532
|
+
return j(M, {
|
|
47533
|
+
get when() {
|
|
47534
|
+
return de();
|
|
47535
|
+
},
|
|
47536
|
+
get fallback() {
|
|
47537
|
+
return f3();
|
|
47538
|
+
},
|
|
47539
|
+
get children() {
|
|
47540
|
+
return H4();
|
|
47541
|
+
}
|
|
47542
|
+
});
|
|
47543
|
+
}
|
|
47544
|
+
}), null), P(e, j(kj, {
|
|
47545
|
+
class: "size-7 px-0",
|
|
47546
|
+
variant: "ghost",
|
|
47547
|
+
get title() {
|
|
47548
|
+
return le() ? "Copied!" : "Copy report — findings grouped by rule, markdown";
|
|
47549
|
+
},
|
|
47550
|
+
"aria-label": "Copy slop report",
|
|
47551
|
+
onClick: () => void ye(),
|
|
47552
|
+
get children() {
|
|
47553
|
+
return j(M, {
|
|
47554
|
+
get when() {
|
|
47555
|
+
return le();
|
|
47556
|
+
},
|
|
47557
|
+
get fallback() {
|
|
47558
|
+
return a3();
|
|
47559
|
+
},
|
|
47560
|
+
get children() {
|
|
47561
|
+
return I4();
|
|
47562
|
+
}
|
|
47563
|
+
});
|
|
47564
|
+
}
|
|
47565
|
+
}), null), P(e, j(kj, {
|
|
47566
|
+
class: "text-danger ml-auto size-7 px-0",
|
|
47567
|
+
variant: "ghost",
|
|
47568
|
+
title: "Clear scan results",
|
|
47569
|
+
"aria-label": "Clear scan results",
|
|
47570
|
+
onClick: me,
|
|
47571
|
+
get children() {
|
|
47572
|
+
return L4();
|
|
47573
|
+
}
|
|
47574
|
+
}), null), e;
|
|
47575
|
+
})()
|
|
47576
|
+
];
|
|
47577
|
+
}
|
|
46699
47578
|
}), null), t;
|
|
46700
47579
|
})();
|
|
46701
47580
|
}
|
|
46702
47581
|
rt(["click"]);
|
|
46703
47582
|
//#endregion
|
|
46704
47583
|
//#region src/lib/projectConfig.ts
|
|
46705
|
-
var
|
|
47584
|
+
var E3 = [
|
|
46706
47585
|
"defaultTeamId",
|
|
46707
47586
|
"defaultProjectId",
|
|
46708
47587
|
"defaultLabelIds",
|
|
@@ -46717,29 +47596,29 @@ var C4 = [
|
|
|
46717
47596
|
"issueTemplate",
|
|
46718
47597
|
"testUsername"
|
|
46719
47598
|
];
|
|
46720
|
-
function
|
|
47599
|
+
function D3(e) {
|
|
46721
47600
|
let t = {};
|
|
46722
|
-
for (let n of
|
|
47601
|
+
for (let n of E3) {
|
|
46723
47602
|
let r = e[n];
|
|
46724
47603
|
r !== void 0 && r !== "" && !(Array.isArray(r) && r.length === 0) && (t[n] = r);
|
|
46725
47604
|
}
|
|
46726
47605
|
return t;
|
|
46727
47606
|
}
|
|
46728
|
-
function
|
|
47607
|
+
function O3(e, t) {
|
|
46729
47608
|
let n = {};
|
|
46730
|
-
for (let r of
|
|
47609
|
+
for (let r of E3) e[r] === void 0 && t[r] !== void 0 && (n[r] = t[r]);
|
|
46731
47610
|
return Object.keys(n).length ? n : null;
|
|
46732
47611
|
}
|
|
46733
47612
|
//#endregion
|
|
46734
47613
|
//#region src/lib/linear/auth.ts
|
|
46735
47614
|
Br();
|
|
46736
|
-
function
|
|
47615
|
+
function k3(e) {
|
|
46737
47616
|
let t = "";
|
|
46738
47617
|
for (let n of e) t += String.fromCharCode(n);
|
|
46739
47618
|
return btoa(t).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
|
|
46740
47619
|
}
|
|
46741
|
-
async function
|
|
46742
|
-
let t =
|
|
47620
|
+
async function A3(e) {
|
|
47621
|
+
let t = k3(crypto.getRandomValues(/* @__PURE__ */ new Uint8Array(32))), n = await crypto.subtle.digest("SHA-256", new TextEncoder().encode(t)), r = k3(new Uint8Array(n)), i = k3(crypto.getRandomValues(/* @__PURE__ */ new Uint8Array(16))), a = chrome.identity.getRedirectURL(), o = new URL("https://linear.app/oauth/authorize");
|
|
46743
47622
|
o.searchParams.set("client_id", e), o.searchParams.set("redirect_uri", a), o.searchParams.set("response_type", "code"), o.searchParams.set("scope", "read,write"), o.searchParams.set("state", i), o.searchParams.set("code_challenge", r), o.searchParams.set("code_challenge_method", "S256");
|
|
46744
47623
|
let s = await chrome.identity.launchWebAuthFlow({
|
|
46745
47624
|
url: o.toString(),
|
|
@@ -46767,15 +47646,15 @@ async function D4(e) {
|
|
|
46767
47646
|
linearOauthClientId: e
|
|
46768
47647
|
});
|
|
46769
47648
|
}
|
|
46770
|
-
async function
|
|
47649
|
+
async function j3() {
|
|
46771
47650
|
await Er({
|
|
46772
47651
|
linearAccessToken: void 0,
|
|
46773
47652
|
linearApiKey: void 0
|
|
46774
47653
|
});
|
|
46775
47654
|
}
|
|
46776
47655
|
Br(), Sr(), Fx(), gD();
|
|
46777
|
-
var
|
|
46778
|
-
function
|
|
47656
|
+
var M3 = /*#__PURE__*/ N("<div class=\"bg-surface-2 border-border flex rounded-md border p-0.5\">"), N3 = /*#__PURE__*/ N("<span class=\"text-text-faint text-[10.5px] leading-snug\">Cloud: picking an element opens the panel to draft & delegate to the Cursor agent. Local (react-grab style): picking auto-copies the element's context — source, stack, and your skills/memory paths — straight to the clipboard for a local Claude Code or Cursor session; the panel stays out of the way. Both share the same picker; switch anytime."), P3 = /*#__PURE__*/ N("<label class=\"flex cursor-pointer items-center gap-2 select-none\"><input type=checkbox class=\"accent-accent rounded\"><span class=\"text-text text-[12px]\">Element screenshots"), F3 = /*#__PURE__*/ N("<span class=\"text-text-faint text-[10.5px] leading-snug\">Captures a highlighted screenshot of each picked element and attaches it to the issue. Costs a beat on huge pages — with this off, picking is instant (pure react-grab speed)."), I3 = /*#__PURE__*/ N("<span class=text-text>Connected as <span class=font-medium></span> · <span class=text-text-dim>"), L3 = /*#__PURE__*/ N("<div class=\"bg-surface border-border flex items-center justify-between rounded-lg border p-2.5\"><span class=\"text-text text-[12px]\">"), R3 = /*#__PURE__*/ N("<option value>Select a team…"), z3 = /*#__PURE__*/ N("<option value>No project"), B3 = /*#__PURE__*/ N("<div class=\"flex flex-wrap gap-1\">"), V3 = /*#__PURE__*/ N("<label class=\"flex items-start gap-2\"><input type=checkbox class=\"accent-accent mt-0.5\"><span class=\"flex flex-col gap-0.5\"><span class=text-[12px]>Let agents close out Linear themselves</span><span class=\"text-text-faint text-[10.5px] leading-snug\">Embeds your Linear API key + raw GraphQL closeout recipes in every issue's Agent instructions — cloud agent VMs have no authenticated Linear MCP, so without this they can't comment, attach media, or move the issue. The key is visible to anyone who can read the issue."), H3 = /*#__PURE__*/ N("<p class=\"text-text-dim text-[11px]\">No agents found — install the Cursor integration in Linear first."), U3 = /*#__PURE__*/ N("<span class=\"text-text-faint text-[10.5px] leading-snug\">Empty = the default above (computer-use testing, video demo, PR + review babysitting)."), W3 = /*#__PURE__*/ N("<div class=\"flex flex-col gap-1.5\">"), G3 = /*#__PURE__*/ N("<div class=\"flex flex-col gap-1\"><span class=\"text-text-dim text-[11px] font-medium\">Mode</span><div class=\"bg-surface-2 border-border flex rounded-md border p-0.5\"></div><span class=\"text-text-faint text-[10.5px] leading-snug\">Beside page squeezes the app next to the panel, DevTools-style — nothing gets covered. Also toggleable from the dock icon in the panel header."), K3 = /*#__PURE__*/ N("<div class=\"flex flex-col gap-1\"><span class=\"text-text-dim text-[11px] font-medium\">Dock side</span><div class=\"bg-surface-2 border-border flex rounded-md border p-0.5\"></div><span class=\"text-text-faint text-[10.5px] leading-snug\">The launcher pill is draggable — park it anywhere it doesn't cover your app."), q3 = /*#__PURE__*/ N("<p class=\"text-text-faint text-[10.5px] leading-snug\">A committed <code>.lineargrab.json</code> at the repo root (where the bridge runs) shares team/project/labels, skills, staging branch, and workflow defaults with every machine and teammate — it seeds any setting you haven't set locally. Secrets never belong in it."), J3 = /*#__PURE__*/ N("<span class=\"inline-block min-w-[10ch] text-center\">"), Y3 = /*#__PURE__*/ N("<div class=\"flex items-center gap-2\">"), X3 = /*#__PURE__*/ N("<option value>Select a channel…"), Z3 = /*#__PURE__*/ N("<label class=\"flex cursor-pointer items-center gap-2 select-none\"><input type=checkbox class=\"accent-accent rounded\"><span class=\"text-text text-[12px]\">Announce new issues on create"), Q3 = /*#__PURE__*/ N("<span class=\"text-text-faint text-[10.5px] leading-snug\">⚠️ Tokens are embedded in issue Agent-instructions so agents can post the finished demo — everyone who can read the issue can read them. Use single-channel-scoped bots."), $3 = /*#__PURE__*/ N("<div class=\"flex flex-col gap-1\"><span class=\"text-text-dim text-[11px] font-medium\">Provider preference</span><div class=\"bg-surface-2 border-border flex rounded-md border p-0.5\"><button>Auto</button><button>OpenAI</button><button>Anthropic"), e6 = /*#__PURE__*/ N("<p class=\"text-text-dim text-[11px]\">"), t6 = /*#__PURE__*/ N("<div class=min-h-[2lh]>"), n6 = /*#__PURE__*/ N("<ol class=\"text-text-faint flex list-decimal flex-col gap-1 pl-4 text-[11px] leading-relaxed\"><li>Pick an element on your running dev app.</li><li>Draft the issue (AI optional).</li><li>Create + delegate — Cursor's cloud agent fixes it and opens a PR.</li><li>Track and steer it from Activity."), r6 = /*#__PURE__*/ N("<div class=\"flex h-full flex-col gap-5 overflow-y-auto pt-3 pb-6 pl-3 pr-4\">"), i6 = /*#__PURE__*/ N("<button>"), a6 = /*#__PURE__*/ N("<div class=\"flex gap-1.5\">"), o6 = /*#__PURE__*/ N("<p class=\"text-text-faint text-center text-[10.5px]\">or"), s6 = /*#__PURE__*/ N("<span class=\"text-text-faint text-[10.5px] leading-snug\">Register this callback URL in your Linear OAuth app config:<br><span class=\"font-mono text-[10.5px] break-all\">"), c6 = /*#__PURE__*/ N("<div class=\"flex flex-col gap-3\">"), l6 = /*#__PURE__*/ N("<span class=text-text-dim>Connected — verifying…"), u6 = /*#__PURE__*/ N("<option> (<!>)"), d6 = /*#__PURE__*/ N("<option>"), f6 = /*#__PURE__*/ N("<button type=button><span class=\"mr-1 inline-block size-2 rounded-full align-middle\">"), p6 = /*#__PURE__*/ N("<option value>Select the agent…"), m6 = /*#__PURE__*/ N("<option>#"), h6 = /*#__PURE__*/ N("<p class=\"text-text-dim text-[11px]\">No key set — AI drafting disabled, manual drafting still works.");
|
|
47657
|
+
function g6() {
|
|
46779
47658
|
let e = sr(), t = _r(() => ({
|
|
46780
47659
|
queryKey: ["settings"],
|
|
46781
47660
|
queryFn: Tr,
|
|
@@ -46803,13 +47682,13 @@ function p3() {
|
|
|
46803
47682
|
retry: 0
|
|
46804
47683
|
})), [l, u] = T(!1), d = async () => {
|
|
46805
47684
|
try {
|
|
46806
|
-
await navigator.clipboard.writeText(JSON.stringify(
|
|
47685
|
+
await navigator.clipboard.writeText(JSON.stringify(D3(n()), null, 2) + "\n"), u(!0), setTimeout(() => u(!1), 1800);
|
|
46807
47686
|
} catch {}
|
|
46808
47687
|
}, f = () => {
|
|
46809
47688
|
let e = c.data?.projectConfig;
|
|
46810
47689
|
if (!e) return;
|
|
46811
47690
|
let t = {};
|
|
46812
|
-
for (let n of
|
|
47691
|
+
for (let n of E3) e[n] !== void 0 && (t[n] = e[n]);
|
|
46813
47692
|
r(t);
|
|
46814
47693
|
}, p = _r(() => ({
|
|
46815
47694
|
queryKey: ["linear-labels"],
|
|
@@ -46842,7 +47721,7 @@ function p3() {
|
|
|
46842
47721
|
}
|
|
46843
47722
|
E(!0), ee("");
|
|
46844
47723
|
try {
|
|
46845
|
-
await
|
|
47724
|
+
await A3(t), await e.invalidateQueries({ queryKey: ["settings"] }), await e.invalidateQueries({ queryKey: ["viewer"] }), await e.invalidateQueries({ queryKey: ["teams"] }), await e.invalidateQueries({ queryKey: ["agents"] }), await e.invalidateQueries({ queryKey: ["my-issues"] });
|
|
46846
47725
|
} catch (e) {
|
|
46847
47726
|
ee(e instanceof Error ? e.message : "OAuth flow failed.");
|
|
46848
47727
|
} finally {
|
|
@@ -46853,7 +47732,7 @@ function p3() {
|
|
|
46853
47732
|
async function re() {
|
|
46854
47733
|
ne(!0);
|
|
46855
47734
|
try {
|
|
46856
|
-
await
|
|
47735
|
+
await j3(), await e.invalidateQueries({ queryKey: ["settings"] }), await e.invalidateQueries({ queryKey: ["viewer"] }), await e.invalidateQueries({ queryKey: ["teams"] }), await e.invalidateQueries({ queryKey: ["agents"] }), await e.invalidateQueries({ queryKey: ["my-issues"] });
|
|
46857
47736
|
} finally {
|
|
46858
47737
|
ne(!1);
|
|
46859
47738
|
}
|
|
@@ -46869,12 +47748,12 @@ function p3() {
|
|
|
46869
47748
|
return e ? `Drafting with ${e} — ${Nx[e].fast} (fast) / ${Nx[e].best} (best)` : null;
|
|
46870
47749
|
});
|
|
46871
47750
|
return (() => {
|
|
46872
|
-
var e =
|
|
47751
|
+
var e = r6();
|
|
46873
47752
|
return P(e, j(Rj, {
|
|
46874
47753
|
title: "Workflow",
|
|
46875
47754
|
get children() {
|
|
46876
47755
|
return [(() => {
|
|
46877
|
-
var e =
|
|
47756
|
+
var e = M3();
|
|
46878
47757
|
return P(e, j(We, {
|
|
46879
47758
|
each: [{
|
|
46880
47759
|
id: "cloud",
|
|
@@ -46884,19 +47763,19 @@ function p3() {
|
|
|
46884
47763
|
label: "Local · clipboard"
|
|
46885
47764
|
}],
|
|
46886
47765
|
children: (e) => (() => {
|
|
46887
|
-
var t =
|
|
47766
|
+
var t = i6();
|
|
46888
47767
|
return t.$$click = () => void r({ workflowMode: e.id }), P(t, () => e.label), D(() => st(t, `flex-1 rounded-[5px] px-2 py-1 text-[11.5px] font-medium transition-colors ${(n().workflowMode ?? "cloud") === e.id ? "bg-surface-3 text-text" : "text-text-dim hover:text-text cursor-pointer"}`)), t;
|
|
46889
47768
|
})()
|
|
46890
47769
|
})), e;
|
|
46891
|
-
})(),
|
|
47770
|
+
})(), N3()];
|
|
46892
47771
|
}
|
|
46893
47772
|
}), null), P(e, j(Rj, {
|
|
46894
47773
|
title: "Capture",
|
|
46895
47774
|
get children() {
|
|
46896
47775
|
return [(() => {
|
|
46897
|
-
var e =
|
|
47776
|
+
var e = P3(), t = e.firstChild;
|
|
46898
47777
|
return t.addEventListener("change", (e) => void r({ captureShots: e.currentTarget.checked || void 0 })), D(() => t.checked = !!n().captureShots), e;
|
|
46899
|
-
})(),
|
|
47778
|
+
})(), F3()];
|
|
46900
47779
|
}
|
|
46901
47780
|
}), null), P(e, j(Rj, {
|
|
46902
47781
|
title: "Linear",
|
|
@@ -46907,13 +47786,13 @@ function p3() {
|
|
|
46907
47786
|
},
|
|
46908
47787
|
get fallback() {
|
|
46909
47788
|
return (() => {
|
|
46910
|
-
var e =
|
|
47789
|
+
var e = c6();
|
|
46911
47790
|
return P(e, j(Lj, {
|
|
46912
47791
|
label: "Personal API key",
|
|
46913
47792
|
hint: "Create one at linear.app → Settings → API — fastest path.",
|
|
46914
47793
|
get children() {
|
|
46915
47794
|
return [(() => {
|
|
46916
|
-
var e =
|
|
47795
|
+
var e = a6();
|
|
46917
47796
|
return P(e, j(jj, {
|
|
46918
47797
|
type: "password",
|
|
46919
47798
|
placeholder: "lin_api_…",
|
|
@@ -46950,12 +47829,12 @@ function p3() {
|
|
|
46950
47829
|
}), null), P(e, j(M, {
|
|
46951
47830
|
when: xr,
|
|
46952
47831
|
get children() {
|
|
46953
|
-
return [
|
|
47832
|
+
return [o6(), j(Lj, {
|
|
46954
47833
|
label: "OAuth client ID",
|
|
46955
47834
|
get children() {
|
|
46956
47835
|
return [
|
|
46957
47836
|
(() => {
|
|
46958
|
-
var e =
|
|
47837
|
+
var e = a6();
|
|
46959
47838
|
return P(e, j(jj, {
|
|
46960
47839
|
placeholder: "your-client-id",
|
|
46961
47840
|
get value() {
|
|
@@ -46983,7 +47862,7 @@ function p3() {
|
|
|
46983
47862
|
}
|
|
46984
47863
|
}),
|
|
46985
47864
|
(() => {
|
|
46986
|
-
var e =
|
|
47865
|
+
var e = s6(), t = e.firstChild.nextSibling.nextSibling;
|
|
46987
47866
|
return P(t, ie), e;
|
|
46988
47867
|
})()
|
|
46989
47868
|
];
|
|
@@ -46994,13 +47873,13 @@ function p3() {
|
|
|
46994
47873
|
})();
|
|
46995
47874
|
},
|
|
46996
47875
|
get children() {
|
|
46997
|
-
var e =
|
|
47876
|
+
var e = L3(), t = e.firstChild;
|
|
46998
47877
|
return P(t, j(M, {
|
|
46999
47878
|
get when() {
|
|
47000
47879
|
return !a.isLoading;
|
|
47001
47880
|
},
|
|
47002
47881
|
get fallback() {
|
|
47003
|
-
return
|
|
47882
|
+
return l6();
|
|
47004
47883
|
},
|
|
47005
47884
|
get children() {
|
|
47006
47885
|
return j(M, {
|
|
@@ -47013,7 +47892,7 @@ function p3() {
|
|
|
47013
47892
|
return a.isError;
|
|
47014
47893
|
},
|
|
47015
47894
|
get fallback() {
|
|
47016
|
-
return
|
|
47895
|
+
return l6();
|
|
47017
47896
|
},
|
|
47018
47897
|
get children() {
|
|
47019
47898
|
return j(Hj, { message: "Key rejected — reconnect" });
|
|
@@ -47021,7 +47900,7 @@ function p3() {
|
|
|
47021
47900
|
});
|
|
47022
47901
|
},
|
|
47023
47902
|
get children() {
|
|
47024
|
-
var e =
|
|
47903
|
+
var e = I3(), t = e.firstChild.nextSibling, n = t.nextSibling.nextSibling;
|
|
47025
47904
|
return P(t, () => a.data.name), P(n, () => a.data.email), e;
|
|
47026
47905
|
}
|
|
47027
47906
|
});
|
|
@@ -47062,7 +47941,7 @@ function p3() {
|
|
|
47062
47941
|
return o.isLoading;
|
|
47063
47942
|
},
|
|
47064
47943
|
get children() {
|
|
47065
|
-
return [
|
|
47944
|
+
return [R3(), j(M, {
|
|
47066
47945
|
get when() {
|
|
47067
47946
|
return o.data;
|
|
47068
47947
|
},
|
|
@@ -47072,7 +47951,7 @@ function p3() {
|
|
|
47072
47951
|
return o.data;
|
|
47073
47952
|
},
|
|
47074
47953
|
children: (e) => (() => {
|
|
47075
|
-
var t =
|
|
47954
|
+
var t = u6(), r = t.firstChild, i = r.nextSibling;
|
|
47076
47955
|
return i.nextSibling, P(t, () => e.name, r), P(t, () => e.key, i), D(() => t.selected = e.id === n().defaultTeamId), D(() => t.value = e.id), t;
|
|
47077
47956
|
})()
|
|
47078
47957
|
});
|
|
@@ -47096,14 +47975,14 @@ function p3() {
|
|
|
47096
47975
|
},
|
|
47097
47976
|
get children() {
|
|
47098
47977
|
return [(() => {
|
|
47099
|
-
var e =
|
|
47978
|
+
var e = z3();
|
|
47100
47979
|
return D(() => e.selected = !n().defaultProjectId), e;
|
|
47101
47980
|
})(), j(We, {
|
|
47102
47981
|
get each() {
|
|
47103
47982
|
return s.data ?? [];
|
|
47104
47983
|
},
|
|
47105
47984
|
children: (e) => (() => {
|
|
47106
|
-
var t =
|
|
47985
|
+
var t = d6();
|
|
47107
47986
|
return P(t, () => e.name), D(() => t.selected = e.id === n().defaultProjectId), D(() => t.value = e.id), t;
|
|
47108
47987
|
})()
|
|
47109
47988
|
})];
|
|
@@ -47115,7 +47994,7 @@ function p3() {
|
|
|
47115
47994
|
label: "Default labels",
|
|
47116
47995
|
hint: "Applied to every issue created from the panel.",
|
|
47117
47996
|
get children() {
|
|
47118
|
-
var e =
|
|
47997
|
+
var e = B3();
|
|
47119
47998
|
return P(e, j(We, {
|
|
47120
47999
|
get each() {
|
|
47121
48000
|
return p.data ?? [];
|
|
@@ -47123,7 +48002,7 @@ function p3() {
|
|
|
47123
48002
|
children: (e) => {
|
|
47124
48003
|
let t = () => (n().defaultLabelIds ?? []).includes(e.id);
|
|
47125
48004
|
return (() => {
|
|
47126
|
-
var i =
|
|
48005
|
+
var i = f6(), a = i.firstChild;
|
|
47127
48006
|
return i.$$click = () => {
|
|
47128
48007
|
let i = n().defaultLabelIds ?? [];
|
|
47129
48008
|
r({ defaultLabelIds: t() ? i.filter((t) => t !== e.id) : [...i, e.id] });
|
|
@@ -47140,7 +48019,7 @@ function p3() {
|
|
|
47140
48019
|
}
|
|
47141
48020
|
}),
|
|
47142
48021
|
(() => {
|
|
47143
|
-
var e =
|
|
48022
|
+
var e = V3(), t = e.firstChild;
|
|
47144
48023
|
return t.addEventListener("change", (e) => void r({ shareLinearKey: e.currentTarget.checked })), D(() => t.checked = !!n().shareLinearKey), e;
|
|
47145
48024
|
})(),
|
|
47146
48025
|
j(Lj, {
|
|
@@ -47190,7 +48069,7 @@ function p3() {
|
|
|
47190
48069
|
return m.isLoading;
|
|
47191
48070
|
},
|
|
47192
48071
|
get children() {
|
|
47193
|
-
return [
|
|
48072
|
+
return [p6(), j(M, {
|
|
47194
48073
|
get when() {
|
|
47195
48074
|
return m.data;
|
|
47196
48075
|
},
|
|
@@ -47200,7 +48079,7 @@ function p3() {
|
|
|
47200
48079
|
return m.data;
|
|
47201
48080
|
},
|
|
47202
48081
|
children: (e) => (() => {
|
|
47203
|
-
var t =
|
|
48082
|
+
var t = d6();
|
|
47204
48083
|
return P(t, () => e.displayName), D(() => t.selected = e.id === n().cursorAgentId), D(() => t.value = e.id), t;
|
|
47205
48084
|
})()
|
|
47206
48085
|
});
|
|
@@ -47210,7 +48089,7 @@ function p3() {
|
|
|
47210
48089
|
});
|
|
47211
48090
|
},
|
|
47212
48091
|
get children() {
|
|
47213
|
-
return
|
|
48092
|
+
return H3();
|
|
47214
48093
|
}
|
|
47215
48094
|
});
|
|
47216
48095
|
}
|
|
@@ -47258,7 +48137,7 @@ function p3() {
|
|
|
47258
48137
|
onBlur: (e) => {
|
|
47259
48138
|
r({ issueTemplate: e.currentTarget.value.trim() || void 0 });
|
|
47260
48139
|
}
|
|
47261
|
-
}),
|
|
48140
|
+
}), U3()];
|
|
47262
48141
|
}
|
|
47263
48142
|
}),
|
|
47264
48143
|
j(Lj, {
|
|
@@ -47315,7 +48194,7 @@ function p3() {
|
|
|
47315
48194
|
label: "Test account",
|
|
47316
48195
|
hint: "The cloud agent logs into the app with this while testing and recording its demo. Added to every issue's Agent instructions. Use a throwaway account — it's visible to everyone who can read the issue.",
|
|
47317
48196
|
get children() {
|
|
47318
|
-
var e =
|
|
48197
|
+
var e = W3();
|
|
47319
48198
|
return P(e, j(jj, {
|
|
47320
48199
|
placeholder: "Username or email (e.g. demo@yourapp.com)",
|
|
47321
48200
|
get value() {
|
|
@@ -47347,7 +48226,7 @@ function p3() {
|
|
|
47347
48226
|
title: "Panel",
|
|
47348
48227
|
get children() {
|
|
47349
48228
|
return [(() => {
|
|
47350
|
-
var e =
|
|
48229
|
+
var e = G3(), t = e.firstChild.nextSibling;
|
|
47351
48230
|
return P(t, j(We, {
|
|
47352
48231
|
each: [{
|
|
47353
48232
|
id: "overlay",
|
|
@@ -47357,7 +48236,7 @@ function p3() {
|
|
|
47357
48236
|
label: "Beside page"
|
|
47358
48237
|
}],
|
|
47359
48238
|
children: (e) => (() => {
|
|
47360
|
-
var t =
|
|
48239
|
+
var t = i6();
|
|
47361
48240
|
return t.$$click = () => void r({
|
|
47362
48241
|
panelMode: e.id,
|
|
47363
48242
|
panelPos: void 0
|
|
@@ -47365,11 +48244,11 @@ function p3() {
|
|
|
47365
48244
|
})()
|
|
47366
48245
|
})), e;
|
|
47367
48246
|
})(), (() => {
|
|
47368
|
-
var e =
|
|
48247
|
+
var e = K3(), t = e.firstChild.nextSibling;
|
|
47369
48248
|
return P(t, j(We, {
|
|
47370
48249
|
each: ["left", "right"],
|
|
47371
48250
|
children: (e) => (() => {
|
|
47372
|
-
var t =
|
|
48251
|
+
var t = i6();
|
|
47373
48252
|
return t.$$click = () => void r({ panelSide: e }), P(t, e === "left" ? "Left" : "Right"), D(() => st(t, `flex-1 rounded-[5px] px-2 py-0.5 text-[11.5px] font-medium transition-colors ${(n().panelSide ?? "right") === e ? "bg-surface-3 text-text" : "text-text-dim hover:text-text cursor-pointer"}`)), t;
|
|
47374
48253
|
})()
|
|
47375
48254
|
})), e;
|
|
@@ -47399,8 +48278,8 @@ function p3() {
|
|
|
47399
48278
|
}), null), P(e, j(Rj, {
|
|
47400
48279
|
title: "Project config (.lineargrab.json)",
|
|
47401
48280
|
get children() {
|
|
47402
|
-
return [
|
|
47403
|
-
var e =
|
|
48281
|
+
return [q3(), (() => {
|
|
48282
|
+
var e = Y3();
|
|
47404
48283
|
return P(e, j(M, {
|
|
47405
48284
|
get when() {
|
|
47406
48285
|
return c.data?.projectConfig;
|
|
@@ -47431,7 +48310,7 @@ function p3() {
|
|
|
47431
48310
|
},
|
|
47432
48311
|
onClick: () => void d(),
|
|
47433
48312
|
get children() {
|
|
47434
|
-
var e =
|
|
48313
|
+
var e = J3();
|
|
47435
48314
|
return P(e, () => l() ? "Copied ✓" : "Copy config"), e;
|
|
47436
48315
|
}
|
|
47437
48316
|
}), null), e;
|
|
@@ -47522,12 +48401,12 @@ function p3() {
|
|
|
47522
48401
|
});
|
|
47523
48402
|
},
|
|
47524
48403
|
get children() {
|
|
47525
|
-
return [
|
|
48404
|
+
return [X3(), j(We, {
|
|
47526
48405
|
get each() {
|
|
47527
48406
|
return ae.data ?? [];
|
|
47528
48407
|
},
|
|
47529
48408
|
children: (e) => (() => {
|
|
47530
|
-
var t =
|
|
48409
|
+
var t = m6();
|
|
47531
48410
|
return t.firstChild, P(t, () => e.name, null), D(() => t.selected = e.id === n().slackChannelId), D(() => t.value = e.id), t;
|
|
47532
48411
|
})()
|
|
47533
48412
|
})];
|
|
@@ -47578,10 +48457,10 @@ function p3() {
|
|
|
47578
48457
|
}
|
|
47579
48458
|
}),
|
|
47580
48459
|
(() => {
|
|
47581
|
-
var e =
|
|
48460
|
+
var e = Z3(), t = e.firstChild;
|
|
47582
48461
|
return t.addEventListener("change", (e) => void r({ notifyOnCreate: e.currentTarget.checked ? void 0 : !1 })), D(() => t.checked = n().notifyOnCreate !== !1), e;
|
|
47583
48462
|
})(),
|
|
47584
|
-
|
|
48463
|
+
Q3()
|
|
47585
48464
|
];
|
|
47586
48465
|
}
|
|
47587
48466
|
}), null), P(e, j(Rj, {
|
|
@@ -47619,7 +48498,7 @@ function p3() {
|
|
|
47619
48498
|
}
|
|
47620
48499
|
}),
|
|
47621
48500
|
(() => {
|
|
47622
|
-
var e =
|
|
48501
|
+
var e = $3(), t = e.firstChild.nextSibling.firstChild, i = t.nextSibling, a = i.nextSibling;
|
|
47623
48502
|
return t.$$click = () => void r({ preferredProvider: void 0 }), i.$$click = () => void r({ preferredProvider: "openai" }), a.$$click = () => void r({ preferredProvider: "anthropic" }), D((e) => {
|
|
47624
48503
|
var r = `flex-1 rounded-[5px] px-2 py-0.5 text-[11.5px] font-medium transition-colors ${n().preferredProvider === void 0 ? "bg-surface-3 text-text" : "text-text-dim hover:text-text cursor-pointer"}`, o = `flex-1 rounded-[5px] px-2 py-0.5 text-[11.5px] font-medium transition-colors disabled:cursor-not-allowed ${n().preferredProvider === "openai" ? "bg-surface-3 text-text" : "text-text-dim hover:text-text cursor-pointer disabled:text-text-faint"}`, s = !n().openaiKey, c = `flex-1 rounded-[5px] px-2 py-0.5 text-[11.5px] font-medium transition-colors disabled:cursor-not-allowed ${n().preferredProvider === "anthropic" ? "bg-surface-3 text-text" : "text-text-dim hover:text-text cursor-pointer disabled:text-text-faint"}`, l = !n().anthropicKey;
|
|
47625
48504
|
return r !== e.e && st(t, e.e = r), o !== e.t && st(i, e.t = o), s !== e.a && (i.disabled = e.a = s), c !== e.o && st(a, e.o = c), l !== e.i && (a.disabled = e.i = l), e;
|
|
@@ -47632,16 +48511,16 @@ function p3() {
|
|
|
47632
48511
|
}), e;
|
|
47633
48512
|
})(),
|
|
47634
48513
|
(() => {
|
|
47635
|
-
var e =
|
|
48514
|
+
var e = t6();
|
|
47636
48515
|
return P(e, j(M, {
|
|
47637
48516
|
get when() {
|
|
47638
48517
|
return se();
|
|
47639
48518
|
},
|
|
47640
48519
|
get fallback() {
|
|
47641
|
-
return
|
|
48520
|
+
return h6();
|
|
47642
48521
|
},
|
|
47643
48522
|
get children() {
|
|
47644
|
-
var e =
|
|
48523
|
+
var e = e6();
|
|
47645
48524
|
return P(e, se), e;
|
|
47646
48525
|
}
|
|
47647
48526
|
})), e;
|
|
@@ -47651,7 +48530,7 @@ function p3() {
|
|
|
47651
48530
|
}), null), P(e, j(Rj, {
|
|
47652
48531
|
title: "How it works",
|
|
47653
48532
|
get children() {
|
|
47654
|
-
return
|
|
48533
|
+
return n6();
|
|
47655
48534
|
}
|
|
47656
48535
|
}), null), e;
|
|
47657
48536
|
})();
|
|
@@ -47659,38 +48538,38 @@ function p3() {
|
|
|
47659
48538
|
rt(["click"]);
|
|
47660
48539
|
//#endregion
|
|
47661
48540
|
//#region src/lib/idbCache.ts
|
|
47662
|
-
var
|
|
48541
|
+
var _6 = "linear-grab", v6 = "queries", y6 = [
|
|
47663
48542
|
"my-issues",
|
|
47664
48543
|
"issue",
|
|
47665
48544
|
"sessions",
|
|
47666
48545
|
"teams",
|
|
47667
48546
|
"agents"
|
|
47668
48547
|
];
|
|
47669
|
-
function
|
|
48548
|
+
function b6() {
|
|
47670
48549
|
return new Promise((e) => {
|
|
47671
48550
|
try {
|
|
47672
|
-
let t = indexedDB.open(
|
|
47673
|
-
t.onupgradeneeded = () => t.result.createObjectStore(
|
|
48551
|
+
let t = indexedDB.open(_6, 1);
|
|
48552
|
+
t.onupgradeneeded = () => t.result.createObjectStore(v6), t.onsuccess = () => e(t.result), t.onerror = () => e(null);
|
|
47674
48553
|
} catch {
|
|
47675
48554
|
e(null);
|
|
47676
48555
|
}
|
|
47677
48556
|
});
|
|
47678
48557
|
}
|
|
47679
|
-
function
|
|
47680
|
-
return typeof e[0] == "string" &&
|
|
48558
|
+
function x6(e) {
|
|
48559
|
+
return typeof e[0] == "string" && y6.includes(e[0]);
|
|
47681
48560
|
}
|
|
47682
|
-
async function
|
|
47683
|
-
let t = await
|
|
48561
|
+
async function S6(e) {
|
|
48562
|
+
let t = await b6();
|
|
47684
48563
|
if (!t) return () => {};
|
|
47685
48564
|
await new Promise((n) => {
|
|
47686
48565
|
try {
|
|
47687
|
-
let r = t.transaction(
|
|
48566
|
+
let r = t.transaction(v6, "readonly").objectStore(v6).openCursor();
|
|
47688
48567
|
r.onsuccess = () => {
|
|
47689
48568
|
let t = r.result;
|
|
47690
48569
|
if (!t) return n();
|
|
47691
48570
|
try {
|
|
47692
48571
|
let { queryKey: n, data: r } = t.value;
|
|
47693
|
-
|
|
48572
|
+
x6(n) && e.getQueryData(n) === void 0 && e.setQueryData(n, r, { updatedAt: 0 });
|
|
47694
48573
|
} catch {}
|
|
47695
48574
|
t.continue();
|
|
47696
48575
|
}, r.onerror = () => n();
|
|
@@ -47701,14 +48580,14 @@ async function y3(e) {
|
|
|
47701
48580
|
let n = /* @__PURE__ */ new Map(), r = e.getQueryCache().subscribe((r) => {
|
|
47702
48581
|
if (r.type !== "updated" || r.action.type !== "success") return;
|
|
47703
48582
|
let { queryKey: i, queryHash: a } = r.query;
|
|
47704
|
-
if (!
|
|
48583
|
+
if (!x6(i)) return;
|
|
47705
48584
|
let o = n.get(a);
|
|
47706
48585
|
o && clearTimeout(o), n.set(a, setTimeout(() => {
|
|
47707
48586
|
n.delete(a);
|
|
47708
48587
|
try {
|
|
47709
48588
|
let n = e.getQueryData(i);
|
|
47710
48589
|
if (n === void 0) return;
|
|
47711
|
-
t.transaction(
|
|
48590
|
+
t.transaction(v6, "readwrite").objectStore(v6).put({
|
|
47712
48591
|
queryKey: i,
|
|
47713
48592
|
data: n
|
|
47714
48593
|
}, a);
|
|
@@ -47724,7 +48603,7 @@ async function y3(e) {
|
|
|
47724
48603
|
//#endregion
|
|
47725
48604
|
//#region src/panel/App.tsx
|
|
47726
48605
|
Br();
|
|
47727
|
-
var
|
|
48606
|
+
var C6 = /*#__PURE__*/ N("<svg viewBox=\"0 0 100 100\"fill=currentColor aria-hidden><path d=\"M1.22541 61.5228c-.2225-.9485.90748-1.5459 1.59638-.857L39.3342 97.1782c.6889.6889.0915 1.8189-.857 1.5964C20.0515 94.4522 5.54779 79.9485 1.22541 61.5228ZM.00189135 46.8891c-.01764375.2833.08887215.5599.28957165.7606L52.3503 99.7085c.2007.2007.4773.3075.7606.2896 2.3692-.1476 4.6938-.46 6.9624-.9259.7645-.157 1.0301-1.0963.4782-1.6481L2.57595 39.4485c-.55186-.5519-1.49117-.2863-1.648174.4782-.465915 2.2686-.77832 4.5932-.92588465 6.9624ZM4.21093 29.7054c-.16649.3738-.08169.8106.20765 1.1l64.77602 64.776c.2894.2894.7262.3742 1.1.2077 1.7861-.7956 3.5171-1.6927 5.1855-2.684.5521-.328.6373-1.0867.1832-1.5407L8.43566 24.3367c-.45409-.4541-1.21271-.3689-1.54074.1832-.99132 1.6684-1.88843 3.3994-2.68399 5.1855ZM12.6587 18.074c-.3701-.3701-.393-.9637-.0443-1.3541C21.7795 6.45931 35.1114 0 49.9519 0 77.5927 0 100 22.4073 100 50.0481c0 14.8405-6.4593 28.1724-16.7199 37.3375-.3903.3487-.984.3258-1.3541-.0443L12.6587 18.074Z\">"), w6 = /*#__PURE__*/ N("<button><svg width=12 height=12 viewBox=\"0 0 16 16\"fill=none stroke=currentColor stroke-width=1.5 aria-hidden><rect x=1.5 y=2.5 width=13 height=11 rx=1.5></rect><path d=\"M10 2.5v11\">"), T6 = /*#__PURE__*/ N("<button aria-label=\"Minimize to launcher\"title=\"Minimize to launcher\"class=\"text-text-dim hover:text-text hover:bg-surface-3 grid size-6 shrink-0 cursor-pointer place-items-center rounded-md text-[15px] leading-none transition-colors\">–"), E6 = /*#__PURE__*/ N("<div class=\"bg-bg text-text flex h-full flex-col\"><header><span class=\"text-accent mr-0.5 inline-flex shrink-0\"title=\"Linear Grab\"></span><div class=\"no-scrollbar flex min-w-0 flex-1 items-center gap-1 overflow-x-auto\"></div></header><main class=\"min-h-0 flex-1\"><div class=h-full></div><div class=h-full></div><div class=h-full></div><div class=h-full></div><div class=h-full></div><div class=h-full></div><div class=h-full></div><div class=h-full></div><div class=h-full>"), D6 = /*#__PURE__*/ N("<button>"), O6 = [
|
|
47728
48607
|
{
|
|
47729
48608
|
id: "draft",
|
|
47730
48609
|
label: "Draft"
|
|
@@ -47761,35 +48640,35 @@ var b3 = /*#__PURE__*/ N("<svg viewBox=\"0 0 100 100\"fill=currentColor aria-hid
|
|
|
47761
48640
|
id: "settings",
|
|
47762
48641
|
label: "Settings"
|
|
47763
48642
|
}
|
|
47764
|
-
],
|
|
47765
|
-
function
|
|
47766
|
-
if (
|
|
47767
|
-
|
|
48643
|
+
], k6 = /* @__PURE__ */ new Set();
|
|
48644
|
+
function A6(e, t, n) {
|
|
48645
|
+
if (k6.has(e) || typeof Notification > "u") return;
|
|
48646
|
+
k6.add(e);
|
|
47768
48647
|
let r = () => new Notification(t, { body: n });
|
|
47769
48648
|
Notification.permission === "granted" ? r() : Notification.permission === "default" && Notification.requestPermission().then((e) => e === "granted" && r());
|
|
47770
48649
|
}
|
|
47771
|
-
function
|
|
48650
|
+
function j6() {
|
|
47772
48651
|
setInterval(() => {
|
|
47773
48652
|
NO().then((e) => {
|
|
47774
48653
|
for (let t of e) {
|
|
47775
48654
|
if (t.status !== "running") continue;
|
|
47776
48655
|
let e = t.lastEventAt ?? t.startedAt;
|
|
47777
|
-
Date.now() - e > 10 * 6e4 &&
|
|
48656
|
+
Date.now() - e > 10 * 6e4 && A6(`local-stuck:${t.id}:${e}`, "Local agent may be stuck", `${t.title.slice(0, 80)} — no output for ${Math.round((Date.now() - e) / 6e4)}m. Nudge or interrupt it in the Local tab.`);
|
|
47778
48657
|
}
|
|
47779
48658
|
}).catch(() => {}), gO().then((e) => {
|
|
47780
|
-
for (let t of e) /awaitingInput|elicit/i.test(t.status) &&
|
|
48659
|
+
for (let t of e) /awaitingInput|elicit/i.test(t.status) && A6(`cloud-input:${t.id}`, "Cloud agent needs input", `${t.issue?.identifier ?? "Session"} — ${t.issue?.title?.slice(0, 80) ?? "a Cursor agent"} is waiting for you.`);
|
|
47781
48660
|
}).catch(() => {});
|
|
47782
48661
|
}, 6e4);
|
|
47783
48662
|
}
|
|
47784
|
-
|
|
47785
|
-
var
|
|
48663
|
+
j6();
|
|
48664
|
+
var M6 = new gr({ defaultOptions: { queries: {
|
|
47786
48665
|
retry: 1,
|
|
47787
48666
|
refetchOnWindowFocus: !1,
|
|
47788
48667
|
staleTime: 5e3
|
|
47789
48668
|
} } });
|
|
47790
|
-
function
|
|
48669
|
+
function N6(e) {
|
|
47791
48670
|
return (() => {
|
|
47792
|
-
var t =
|
|
48671
|
+
var t = C6();
|
|
47793
48672
|
return D((n) => {
|
|
47794
48673
|
var r = e.size ?? 14, i = e.size ?? 14;
|
|
47795
48674
|
return r !== n.e && it(t, "width", n.e = r), i !== n.t && it(t, "height", n.t = i), n;
|
|
@@ -47799,36 +48678,36 @@ function A3(e) {
|
|
|
47799
48678
|
}), t;
|
|
47800
48679
|
})();
|
|
47801
48680
|
}
|
|
47802
|
-
function
|
|
48681
|
+
function P6(e) {
|
|
47803
48682
|
let [t, n] = T("draft"), r = () => {
|
|
47804
|
-
|
|
48683
|
+
M6.invalidateQueries({ queryKey: ["grab"] }), cj() === "capture" && n("capture"), e.onGrab?.();
|
|
47805
48684
|
};
|
|
47806
48685
|
return O(() => {
|
|
47807
48686
|
let e = nj();
|
|
47808
48687
|
e && n(e);
|
|
47809
48688
|
}), ie(() => {
|
|
47810
|
-
let e =
|
|
48689
|
+
let e = S6(M6), t = XZ(r), n = () => {
|
|
47811
48690
|
JO().then(y$), VO(), MO().then(async (e) => {
|
|
47812
48691
|
if (!e.projectConfig) return;
|
|
47813
|
-
let t =
|
|
48692
|
+
let t = O3(await Tr(), e.projectConfig);
|
|
47814
48693
|
t && await Er(t);
|
|
47815
48694
|
}).catch(() => {});
|
|
47816
48695
|
};
|
|
47817
48696
|
n();
|
|
47818
48697
|
let i = Mr((e) => {
|
|
47819
|
-
e === "settings" && (
|
|
48698
|
+
e === "settings" && (M6.invalidateQueries({ queryKey: ["settings"] }), n()), e === "grab" && r();
|
|
47820
48699
|
});
|
|
47821
48700
|
ae(() => {
|
|
47822
48701
|
t(), i(), e.then((e) => e());
|
|
47823
48702
|
});
|
|
47824
48703
|
}), j(cr, {
|
|
47825
|
-
client:
|
|
48704
|
+
client: M6,
|
|
47826
48705
|
get children() {
|
|
47827
|
-
var r =
|
|
47828
|
-
return i.$$pointerdown = (t) => e.onHeaderPointerDown?.(t), P(a, j(
|
|
47829
|
-
each:
|
|
48706
|
+
var r = E6(), i = r.firstChild, a = i.firstChild, o = a.nextSibling, s = i.nextSibling.firstChild, c = s.nextSibling, l = c.nextSibling, u = l.nextSibling, d = u.nextSibling, f = d.nextSibling, p = f.nextSibling, m = p.nextSibling, h = m.nextSibling;
|
|
48707
|
+
return i.$$pointerdown = (t) => e.onHeaderPointerDown?.(t), P(a, j(N6, { size: 14 })), P(o, j(We, {
|
|
48708
|
+
each: O6,
|
|
47830
48709
|
children: (e) => (() => {
|
|
47831
|
-
var r =
|
|
48710
|
+
var r = D6();
|
|
47832
48711
|
return r.$$click = () => n(e.id), P(r, () => e.label), D(() => st(r, `h-6 shrink-0 rounded-md px-2 text-[12px] font-medium whitespace-nowrap transition-colors ${t() === e.id ? "bg-surface-3 text-text" : "text-text-dim hover:text-text cursor-pointer"}`)), r;
|
|
47833
48712
|
})()
|
|
47834
48713
|
})), P(i, j(M, {
|
|
@@ -47836,7 +48715,7 @@ function j3(e) {
|
|
|
47836
48715
|
return e.onTogglePin;
|
|
47837
48716
|
},
|
|
47838
48717
|
get children() {
|
|
47839
|
-
var t =
|
|
48718
|
+
var t = w6();
|
|
47840
48719
|
return t.$$click = () => e.onTogglePin?.(), D((n) => {
|
|
47841
48720
|
var r = e.pinned ? "Switch to overlay" : "Dock beside page", i = e.pinned ? "Overlay the page" : "Dock beside page (squeezes the app, DevTools-style)", a = `hover:bg-surface-3 grid size-6 shrink-0 cursor-pointer place-items-center rounded-md transition-colors ${e.pinned ? "text-accent" : "text-text-dim hover:text-text"}`;
|
|
47842
48721
|
return r !== n.e && it(t, "aria-label", n.e = r), i !== n.t && it(t, "title", n.t = i), a !== n.a && st(t, n.a = a), n;
|
|
@@ -47851,10 +48730,10 @@ function j3(e) {
|
|
|
47851
48730
|
return e.onClose;
|
|
47852
48731
|
},
|
|
47853
48732
|
get children() {
|
|
47854
|
-
var t =
|
|
48733
|
+
var t = T6();
|
|
47855
48734
|
return t.$$click = () => e.onClose?.(), t;
|
|
47856
48735
|
}
|
|
47857
|
-
}), null), P(s, j(wM, { onCreated: () => n("activity") })), P(c, j(TQ, {})), P(l, j(_1, {})), P(u, j(B1, {})), P(d, j(P1, {})), P(f, j(T0, {})), P(p, j(B0, { onOpenIssue: () => n("activity") })), P(m, j(
|
|
48736
|
+
}), null), P(s, j(wM, { onCreated: () => n("activity") })), P(c, j(TQ, {})), P(l, j(_1, {})), P(u, j(B1, {})), P(d, j(P1, {})), P(f, j(T0, {})), P(p, j(B0, { onOpenIssue: () => n("activity") })), P(m, j(T3, {})), P(h, j(g6, {})), D((n) => {
|
|
47858
48737
|
var r = `border-border bg-surface flex shrink-0 items-center gap-1 border-b px-2 py-1.5 select-none ${e.onHeaderPointerDown ? "cursor-grab active:cursor-grabbing" : ""}`, a = t() !== "draft", o = t() !== "capture", g = t() !== "activity", _ = t() !== "running", v = t() !== "cloud", y = t() !== "local", b = t() !== "prs", x = t() !== "design", S = t() !== "settings";
|
|
47859
48738
|
return r !== n.e && st(i, n.e = r), a !== n.t && s.classList.toggle("hidden", n.t = a), o !== n.a && c.classList.toggle("hidden", n.a = o), g !== n.o && l.classList.toggle("hidden", n.o = g), _ !== n.i && u.classList.toggle("hidden", n.i = _), v !== n.n && d.classList.toggle("hidden", n.n = v), y !== n.s && f.classList.toggle("hidden", n.s = y), b !== n.h && p.classList.toggle("hidden", n.h = b), x !== n.r && m.classList.toggle("hidden", n.r = x), S !== n.d && h.classList.toggle("hidden", n.d = S), n;
|
|
47860
48739
|
}, {
|
|
@@ -47875,16 +48754,16 @@ function j3(e) {
|
|
|
47875
48754
|
rt(["pointerdown", "click"]);
|
|
47876
48755
|
//#endregion
|
|
47877
48756
|
//#region src/styles/app.css?inline
|
|
47878
|
-
var M3 = "/*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */\n@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-contain-size:initial;--tw-contain-layout:initial;--tw-contain-paint:initial;--tw-contain-style:initial}}}@layer theme{:root,:host{--font-sans:\"Inter\", ui-sans-serif, system-ui, -apple-system, sans-serif;--font-serif:ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif;--font-mono:ui-monospace, \"SF Mono\", Menlo, monospace;--color-red-500:oklch(63.7% .237 25.331);--color-white:#fff;--spacing:.25rem;--font-weight-thin:100;--font-weight-extralight:200;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--font-weight-black:900;--tracking-wide:.025em;--leading-snug:1.375;--leading-relaxed:1.625;--radius-sm:4px;--radius-md:6px;--radius-lg:10px;--radius-xl:.75rem;--ease-in:cubic-bezier(.4, 0, 1, 1);--ease-out:cubic-bezier(0, 0, .2, 1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-bg:#0b0c0e;--color-surface:#141517;--color-surface-2:#1c1d21;--color-surface-3:#24262b;--color-border:#26282d;--color-border-strong:#34363d;--color-text:#e8e9eb;--color-text-dim:#8b8e98;--color-text-faint:#5c5f6a;--color-accent:#5e6ad2;--color-accent-hover:#6e79e0;--color-accent-soft:#5e6ad226;--color-success:#4cb782;--color-warn:#f2c94c;--color-danger:#eb5757;--color-danger-soft:#eb575726}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.visible\\!{visibility:visible!important}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:0}.inset-y-0{inset-block:0}.-top-0{top:0}.-top-0\\.5{top:calc(var(--spacing) * -.5)}.top-0{top:0}.top-0\\.5{top:calc(var(--spacing) * .5)}.top-1{top:var(--spacing)}.top-1\\/2{top:50%}.top-3{top:calc(var(--spacing) * 3)}.top-\\[2px\\]{top:2px}.top-full{top:100%}.-right-0{right:0}.-right-0\\.5{right:calc(var(--spacing) * -.5)}.right-0{right:0}.right-0\\.5{right:calc(var(--spacing) * .5)}.right-4{right:calc(var(--spacing) * 4)}.right-full{right:100%}.bottom-0{bottom:0}.bottom-1{bottom:var(--spacing)}.bottom-4{bottom:calc(var(--spacing) * 4)}.bottom-\\[2px\\]{bottom:2px}.bottom-full{bottom:100%}.-left-\\[13\\.5px\\]{left:-13.5px}.left-0{left:0}.left-1{left:var(--spacing)}.left-1\\/2{left:50%}.left-\\[5px\\]{left:5px}.left-full{left:100%}.z-1{z-index:1}.z-10{z-index:10}.z-\\[2147483645\\]{z-index:2147483645}.z-\\[2147483646\\]{z-index:2147483646}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.container\\!{width:100%!important}@media (width>=40rem){.container\\!{max-width:40rem!important}}@media (width>=48rem){.container\\!{max-width:48rem!important}}@media (width>=64rem){.container\\!{max-width:64rem!important}}@media (width>=80rem){.container\\!{max-width:80rem!important}}@media (width>=96rem){.container\\!{max-width:96rem!important}}.-m-0{margin:0}.-m-0\\.5{margin:calc(var(--spacing) * -.5)}.-m-4{margin:calc(var(--spacing) * -4)}.m-0{margin:0}.-mx-2{margin-inline:calc(var(--spacing) * -2)}.-my-1{margin-block:calc(var(--spacing) * -1)}.-my-1\\.5{margin-block:calc(var(--spacing) * -1.5)}.mt-0{margin-top:0}.mt-0\\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-2\\.5{margin-top:calc(var(--spacing) * 2.5)}.mt-px{margin-top:1px}.mr-0{margin-right:0}.mr-0\\.5{margin-right:calc(var(--spacing) * .5)}.mr-1{margin-right:var(--spacing)}.mr-1\\.5{margin-right:calc(var(--spacing) * 1.5)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mr-2\\.5{margin-right:calc(var(--spacing) * 2.5)}.-mb-4{margin-bottom:calc(var(--spacing) * -4)}.mb-0{margin-bottom:0}.mb-0\\.5{margin-bottom:calc(var(--spacing) * .5)}.mb-1{margin-bottom:var(--spacing)}.mb-1\\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-2\\.5{margin-bottom:calc(var(--spacing) * 2.5)}.ml-1{margin-left:var(--spacing)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-2\\.5{margin-left:calc(var(--spacing) * 2.5)}.ml-4{margin-left:calc(var(--spacing) * 4)}.ml-auto{margin-left:auto}.ml-px{margin-left:1px}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-5{-webkit-line-clamp:5;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.list-item{display:list-item}.table{display:table}.size-0{width:0;height:0}.size-1{width:var(--spacing);height:var(--spacing)}.size-1\\.5{width:calc(var(--spacing) * 1.5);height:calc(var(--spacing) * 1.5)}.size-2{width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.size-2\\.5{width:calc(var(--spacing) * 2.5);height:calc(var(--spacing) * 2.5)}.size-3{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.size-7{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}.size-10{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10)}.size-\\[9px\\]{width:9px;height:9px}.size-\\[12px\\]{width:12px;height:12px}.size-\\[16px\\]{width:16px;height:16px}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-16{height:calc(var(--spacing) * 16)}.h-\\[8px\\]{height:8px}.h-\\[17px\\]{height:17px}.h-\\[18px\\]{height:18px}.h-\\[20px\\]{height:20px}.h-\\[24px\\]{height:24px}.h-fit{height:fit-content}.h-full{height:100%}.h-screen{height:100vh}.max-h-32{max-height:calc(var(--spacing) * 32)}.max-h-40{max-height:calc(var(--spacing) * 40)}.max-h-44{max-height:calc(var(--spacing) * 44)}.max-h-56{max-height:calc(var(--spacing) * 56)}.max-h-64{max-height:calc(var(--spacing) * 64)}.max-h-72{max-height:calc(var(--spacing) * 72)}.max-h-80{max-height:calc(var(--spacing) * 80)}.max-h-\\[var\\(--rg-edit-list-max-h\\)\\]{max-height:var(--rg-edit-list-max-h)}.min-h-0{min-height:0}.min-h-4{min-height:calc(var(--spacing) * 4)}.min-h-\\[2lh\\]{min-height:2lh}.min-h-\\[28px\\]{min-height:28px}.w-1{width:var(--spacing)}.w-3{width:calc(var(--spacing) * 3)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-16{width:calc(var(--spacing) * 16)}.w-28{width:calc(var(--spacing) * 28)}.w-72{width:calc(var(--spacing) * 72)}.w-\\[2px\\]{width:2px}.w-\\[calc\\(100\\%\\+16px\\)\\]{width:calc(100% + 16px)}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-px{width:1px}.max-w-\\[55\\%\\]{max-width:55%}.max-w-\\[100vw\\]{max-width:100vw}.max-w-\\[110px\\]{max-width:110px}.max-w-\\[280px\\]{max-width:280px}.max-w-full{max-width:100%}.min-w-0{min-width:0}.min-w-\\[3\\.5ch\\]{min-width:3.5ch}.min-w-\\[3ch\\]{min-width:3ch}.min-w-\\[4ch\\]{min-width:4ch}.min-w-\\[5ch\\]{min-width:5ch}.min-w-\\[6ch\\]{min-width:6ch}.min-w-\\[7ch\\]{min-width:7ch}.min-w-\\[8ch\\]{min-width:8ch}.min-w-\\[10ch\\]{min-width:10ch}.min-w-\\[12ch\\]{min-width:12ch}.min-w-\\[36px\\]{min-width:36px}.min-w-\\[52px\\]{min-width:52px}.min-w-\\[100px\\]{min-width:100px}.min-w-\\[150px\\]{min-width:150px}.flex-1{flex:1}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.-rotate-90{rotate:-90deg}.rotate-0{rotate:0deg}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-col-resize{cursor:col-resize}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-grabbing{cursor:grabbing}.cursor-pointer{cursor:pointer}.cursor-text{cursor:text}.resize{resize:both}.resize-none{resize:none}.resize-y{resize:vertical}.list-decimal{list-style-type:decimal}.grid-cols-\\[0fr\\]{grid-template-columns:0fr}.grid-cols-\\[1fr\\]{grid-template-columns:1fr}.grid-rows-\\[0fr\\]{grid-template-rows:0fr}.grid-rows-\\[1fr\\]{grid-template-rows:1fr}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0{gap:0}.gap-0\\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-\\[5px\\]{gap:5px}.self-end{align-self:flex-end}.self-start{align-self:flex-start}.self-stretch{align-self:stretch}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-clip{overflow:clip}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-\\[1px\\]{border-radius:1px}.rounded-\\[3px\\]{border-radius:3px}.rounded-\\[4px\\]{border-radius:4px}.rounded-\\[5px\\]{border-radius:5px}.rounded-\\[6px\\]{border-radius:6px}.rounded-\\[13px\\]{border-radius:13px}.rounded-\\[14px\\]{border-radius:14px}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.rounded-t-\\[10px\\]{border-top-left-radius:10px;border-top-right-radius:10px}.rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.rounded-l{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-l-\\[10px\\]{border-top-left-radius:10px;border-bottom-left-radius:10px}.rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.rounded-tl{border-top-left-radius:.25rem}.rounded-r{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.rounded-r-\\[10px\\]{border-top-right-radius:10px;border-bottom-right-radius:10px}.rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.rounded-tr{border-top-right-radius:.25rem}.rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-b-\\[6px\\]{border-bottom-right-radius:6px;border-bottom-left-radius:6px}.rounded-b-\\[10px\\]{border-bottom-right-radius:10px;border-bottom-left-radius:10px}.rounded-b-none{border-bottom-right-radius:0;border-bottom-left-radius:0}.rounded-br{border-bottom-right-radius:.25rem}.rounded-bl{border-bottom-left-radius:.25rem}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.\\[border-width\\:0\\.5px\\]{border-width:.5px}.border-x{border-inline-style:var(--tw-border-style);border-inline-width:1px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-s{border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px}.border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-t-4{border-top-style:var(--tw-border-style);border-top-width:4px}.\\[border-top-width\\:0\\.5px\\]{border-top-width:.5px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-dotted{--tw-border-style:dotted;border-style:dotted}.border-none{--tw-border-style:none;border-style:none}.border-solid{--tw-border-style:solid;border-style:solid}.border-\\[var\\(--rg-border-button\\)\\]{border-color:var(--rg-border-button)}.border-accent{border-color:var(--color-accent)}.border-accent\\/40{border-color:#5e6ad266}@supports (color:color-mix(in lab, red, red)){.border-accent\\/40{border-color:color-mix(in oklab, var(--color-accent) 40%, transparent)}}.border-border{border-color:var(--color-border)}.border-success{border-color:var(--color-success)}.border-success\\/40{border-color:#4cb78266}@supports (color:color-mix(in lab, red, red)){.border-success\\/40{border-color:color-mix(in oklab, var(--color-success) 40%, transparent)}}.border-text-dim{border-color:var(--color-text-dim)}.border-transparent{border-color:#0000}.border-warn{border-color:var(--color-warn)}.border-warn\\/40{border-color:#f2c94c66}@supports (color:color-mix(in lab, red, red)){.border-warn\\/40{border-color:color-mix(in oklab, var(--color-warn) 40%, transparent)}}.border-t-\\[var\\(--rg-border-subtle\\)\\]{border-top-color:var(--rg-border-subtle)}.border-t-transparent{border-top-color:#0000}.bg-\\[var\\(--rg-error-bg\\)\\]{background-color:var(--rg-error-bg)}.bg-\\[var\\(--rg-panel-bg\\)\\]{background-color:var(--rg-panel-bg)}.bg-\\[var\\(--rg-submit-bg\\)\\]{background-color:var(--rg-submit-bg)}.bg-\\[var\\(--rg-surface-active\\)\\]{background-color:var(--rg-surface-active)}.bg-\\[var\\(--rg-surface-hover\\)\\]{background-color:var(--rg-surface-hover)}.bg-\\[var\\(--rg-text-primary\\)\\]{background-color:var(--rg-text-primary)}.bg-\\[var\\(--rg-text-secondary\\)\\]{background-color:var(--rg-text-secondary)}.bg-accent{background-color:var(--color-accent)}.bg-accent-soft{background-color:var(--color-accent-soft)}.bg-bg{background-color:var(--color-bg)}.bg-bg\\/80{background-color:#0b0c0ecc}@supports (color:color-mix(in lab, red, red)){.bg-bg\\/80{background-color:color-mix(in oklab, var(--color-bg) 80%, transparent)}}.bg-border{background-color:var(--color-border)}.bg-current{background-color:currentColor}.bg-danger{background-color:var(--color-danger)}.bg-danger-soft{background-color:var(--color-danger-soft)}.bg-red-500{background-color:var(--color-red-500)}.bg-success{background-color:var(--color-success)}.bg-surface{background-color:var(--color-surface)}.bg-surface-2{background-color:var(--color-surface-2)}.bg-surface-3{background-color:var(--color-surface-3)}.bg-text-faint{background-color:var(--color-text-faint)}.bg-transparent{background-color:#0000}.bg-warn{background-color:var(--color-warn)}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.p-0{padding:0}.p-0\\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:var(--spacing)}.p-1\\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-2\\.5{padding:calc(var(--spacing) * 2.5)}.p-6{padding:calc(var(--spacing) * 6)}.px-0{padding-inline:0}.px-0\\.25{padding-inline:calc(var(--spacing) * .25)}.px-1{padding-inline:var(--spacing)}.px-1\\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-\\[3px\\]{padding-inline:3px}.py-0{padding-block:0}.py-0\\.5{padding-block:calc(var(--spacing) * .5)}.py-0\\.25{padding-block:calc(var(--spacing) * .25)}.py-1{padding-block:var(--spacing)}.py-1\\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-10{padding-block:calc(var(--spacing) * 10)}.py-px{padding-block:1px}.pt-0{padding-top:0}.pt-0\\.5{padding-top:calc(var(--spacing) * .5)}.pt-1{padding-top:var(--spacing)}.pt-1\\.5{padding-top:calc(var(--spacing) * 1.5)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-2\\.5{padding-top:calc(var(--spacing) * 2.5)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pr-1{padding-right:var(--spacing)}.pr-1\\.5{padding-right:calc(var(--spacing) * 1.5)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pr-4{padding-right:calc(var(--spacing) * 4)}.pb-1{padding-bottom:var(--spacing)}.pb-1\\.5{padding-bottom:calc(var(--spacing) * 1.5)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-6{padding-bottom:calc(var(--spacing) * 6)}.pl-0{padding-left:0}.pl-0\\.5{padding-left:calc(var(--spacing) * .5)}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-2\\.5{padding-left:calc(var(--spacing) * 2.5)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-4{padding-left:calc(var(--spacing) * 4)}.pl-5{padding-left:calc(var(--spacing) * 5)}.text-center{text-align:center}.text-end{text-align:end}.text-justify{text-align:justify}.text-left{text-align:left}.text-right{text-align:right}.text-start{text-align:start}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.font-serif{font-family:var(--font-serif)}.text-\\[9\\.5px\\]{font-size:9.5px}.text-\\[9px\\]{font-size:9px}.text-\\[10\\.5px\\]{font-size:10.5px}.text-\\[10px\\]{font-size:10px}.text-\\[11\\.5px\\]{font-size:11.5px}.text-\\[11px\\]{font-size:11px}.text-\\[12\\.5px\\]{font-size:12.5px}.text-\\[12px\\]{font-size:12px}.text-\\[13px\\]{font-size:13px}.text-\\[15px\\]{font-size:15px}.leading-3{--tw-leading:calc(var(--spacing) * 3);line-height:calc(var(--spacing) * 3)}.leading-3\\.5{--tw-leading:calc(var(--spacing) * 3.5);line-height:calc(var(--spacing) * 3.5)}.leading-4{--tw-leading:calc(var(--spacing) * 4);line-height:calc(var(--spacing) * 4)}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-extralight{--tw-font-weight:var(--font-weight-extralight);font-weight:var(--font-weight-extralight)}.font-light{--tw-font-weight:var(--font-weight-light);font-weight:var(--font-weight-light)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.font-thin{--tw-font-weight:var(--font-weight-thin);font-weight:var(--font-weight-thin)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.break-normal{overflow-wrap:normal;word-break:normal}.break-words,.wrap-break-word{overflow-wrap:break-word}.break-all{word-break:break-all}.break-keep{word-break:keep-all}.text-ellipsis{text-overflow:ellipsis}.whitespace-break-spaces{white-space:break-spaces}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-line{white-space:pre-line}.whitespace-pre-wrap{white-space:pre-wrap}.text-\\[var\\(--rg-error-text\\)\\]{color:var(--rg-error-text)}.text-\\[var\\(--rg-submit-fg\\)\\]{color:var(--rg-submit-fg)}.text-\\[var\\(--rg-text-primary\\)\\]{color:var(--rg-text-primary)}.text-\\[var\\(--rg-text-primary-85\\)\\]{color:var(--rg-text-primary-85)}.text-\\[var\\(--rg-text-secondary\\)\\]{color:var(--rg-text-secondary)}.text-accent{color:var(--color-accent)}.text-danger{color:var(--color-danger)}.text-success{color:var(--color-success)}.text-text{color:var(--color-text)}.text-text-dim{color:var(--color-text-dim)}.text-text-faint{color:var(--color-text-faint)}.text-warn{color:var(--color-warn)}.text-white{color:var(--color-white)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.normal-case{text-transform:none}.uppercase{text-transform:uppercase}.italic{font-style:italic}.not-italic{font-style:normal}.lining-nums{--tw-numeric-figure:lining-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.oldstyle-nums{--tw-numeric-figure:oldstyle-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.proportional-nums{--tw-numeric-spacing:proportional-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.slashed-zero{--tw-slashed-zero:slashed-zero;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.no-underline{text-decoration-line:none}.underline{text-decoration-line:underline}.underline-offset-2{text-underline-offset:2px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.accent-accent{accent-color:var(--color-accent)}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.\\[box-shadow\\:var\\(--rg-shadow\\)\\]{box-shadow:var(--rg-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.\\[filter\\:var\\(--rg-drop-shadow\\)\\]{filter:var(--rg-drop-shadow)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[grid-template-columns\\]{transition-property:grid-template-columns;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[grid-template-rows\\]{transition-property:grid-template-rows;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[opacity\\,transform\\]{transition-property:opacity,transform;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[padding\\,border-radius\\,transform\\]{transition-property:padding,border-radius,transform;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[top\\,left\\,width\\,height\\,opacity\\,border-radius\\]{transition-property:top,left,width,height,opacity,border-radius;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[transform\\,color\\]{transition-property:transform,color;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[transform\\,opacity\\]{transition-property:transform,opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.delay-\\[80ms\\]{transition-delay:80ms}.duration-60{--tw-duration:60ms;transition-duration:60ms}.duration-75{--tw-duration:75ms;transition-duration:75ms}.duration-100{--tw-duration:.1s;transition-duration:.1s}.duration-120{--tw-duration:.12s;transition-duration:.12s}.duration-140{--tw-duration:.14s;transition-duration:.14s}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-180{--tw-duration:.18s;transition-duration:.18s}.duration-220{--tw-duration:.22s;transition-duration:.22s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-400{--tw-duration:.4s;transition-duration:.4s}.ease-\\[cubic-bezier\\(0\\,0\\,0\\.2\\,1\\)\\]{--tw-ease:cubic-bezier(0,0,.2,1);transition-timing-function:cubic-bezier(0,0,.2,1)}.ease-in{--tw-ease:var(--ease-in);transition-timing-function:var(--ease-in)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.will-change-\\[opacity\\,transform\\]{will-change:opacity,transform}.will-change-transform{will-change:transform}.contain-layout{--tw-contain-layout:layout;contain:var(--tw-contain-size,) var(--tw-contain-layout,) var(--tw-contain-paint,) var(--tw-contain-style,)}.outline-none{--tw-outline-style:none;outline-style:none}.select-all{-webkit-user-select:all;user-select:all}.select-none{-webkit-user-select:none;user-select:none}.\\[corner-shape\\:superellipse\\(1\\.25\\)\\]{corner-shape:superellipse(1.25)}.\\[font-synthesis\\:none\\]{font-synthesis:none}.group-open\\:rotate-90:is(:where(.group):is([open],:popover-open,:open) *){rotate:90deg}@media (hover:hover){.group-hover\\:text-\\[var\\(--rg-text-primary\\)\\]:is(:where(.group):hover *){color:var(--rg-text-primary)}.group-hover\\:opacity-100:is(:where(.group):hover *){opacity:1}}.placeholder\\:text-text-faint::placeholder{color:var(--color-text-faint)}@media (hover:hover){.hover\\:bg-\\[var\\(--rg-error-bg-hover\\)\\]:hover{background-color:var(--rg-error-bg-hover)}.hover\\:bg-\\[var\\(--rg-surface-active\\)\\]:hover{background-color:var(--rg-surface-active)}.hover\\:bg-\\[var\\(--rg-surface-hover\\)\\]:hover{background-color:var(--rg-surface-hover)}.hover\\:bg-accent-hover:hover{background-color:var(--color-accent-hover)}.hover\\:bg-accent\\/50:hover{background-color:#5e6ad280}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-accent\\/50:hover{background-color:color-mix(in oklab, var(--color-accent) 50%, transparent)}}.hover\\:bg-danger\\/30:hover{background-color:#eb57574d}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-danger\\/30:hover{background-color:color-mix(in oklab, var(--color-danger) 30%, transparent)}}.hover\\:bg-surface-2:hover{background-color:var(--color-surface-2)}.hover\\:bg-surface-3:hover{background-color:var(--color-surface-3)}.hover\\:text-\\[var\\(--rg-text-primary\\)\\]:hover{color:var(--rg-text-primary)}.hover\\:text-accent:hover{color:var(--color-accent)}.hover\\:text-danger:hover{color:var(--color-danger)}.hover\\:text-text:hover{color:var(--color-text)}.hover\\:underline:hover{text-decoration-line:underline}.hover\\:opacity-80:hover{opacity:.8}}.focus\\:border-accent:focus{border-color:var(--color-accent)}.active\\:cursor-grabbing:active{cursor:grabbing}.active\\:bg-accent:active{background-color:var(--color-accent)}.active\\:transition-none:active{transition-property:none}.disabled\\:cursor-default:disabled{cursor:default}.disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:bg-surface-3:disabled{background-color:var(--color-surface-3)}.disabled\\:text-text-faint:disabled{color:var(--color-text-faint)}.disabled\\:opacity-40:disabled{opacity:.4}@media (hover:hover){.disabled\\:hover\\:bg-surface-2:disabled:hover{background-color:var(--color-surface-2)}}.data-\\[state\\=on\\]\\:transition-none[data-state=on],.data-\\[state\\=open\\]\\:transition-none[data-state=open],.data-\\[state\\=…\\]\\:transition-none[data-state=…]{transition-property:none}}:root{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}[data-theme=light],:host([data-theme=light]){--color-bg:#fbfbfc;--color-surface:#fff;--color-surface-2:#f4f4f6;--color-surface-3:#e9e9ee;--color-border:#e2e2e8;--color-border-strong:#cfcfd8;--color-text:#1b1c20;--color-text-dim:#5c5f6a;--color-text-faint:#9a9da8;--color-accent-soft:#5e6ad21f;--color-danger-soft:#eb57571a;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}@media (prefers-color-scheme:light){:root:not([data-theme=dark]){--color-bg:#fbfbfc;--color-surface:#fff;--color-surface-2:#f4f4f6;--color-surface-3:#e9e9ee;--color-border:#e2e2e8;--color-border-strong:#cfcfd8;--color-text:#1b1c20;--color-text-dim:#5c5f6a;--color-text-faint:#9a9da8;--color-accent-soft:#5e6ad21f;--color-danger-soft:#eb57571a;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}}body{background-color:var(--color-bg);font-family:var(--font-sans);color:var(--color-text);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;min-width:320px;margin:0;font-size:13px}@keyframes geist-spinner-fade{0%{opacity:1}to{opacity:.15}}[data-tip]{position:relative}[data-tip]:hover:after{content:attr(data-tip);color:#fff;white-space:nowrap;text-overflow:ellipsis;pointer-events:none;z-index:60;background:#1b1c20;border-radius:6px;max-width:260px;padding:3px 8px;font-size:10.5px;font-weight:500;line-height:1.35;position:absolute;bottom:calc(100% + 6px);left:50%;overflow:hidden;transform:translate(-50%);box-shadow:0 4px 12px #0000004d}[data-tip][data-tip-pos~=right]:hover:after{left:0;transform:none}[data-tip][data-tip-pos~=left]:hover:after{left:auto;right:0;transform:none}[data-tip][data-tip-pos~=bottom]:hover:after{top:calc(100% + 6px);bottom:auto}.no-scrollbar{scrollbar-width:none}.no-scrollbar::-webkit-scrollbar{display:none}.lg-md p{margin:0 0 6px}.lg-md p:last-child{margin-bottom:0}.lg-md a{color:var(--color-accent);word-break:break-all;text-decoration:none}.lg-md a:hover{text-decoration:underline}.lg-md code{background:var(--color-surface-2);border:1px solid var(--color-border);font-family:var(--font-mono);border-radius:4px;padding:0 4px;font-size:11px}.lg-md pre{background:var(--color-surface-2);border:1px solid var(--color-border);border-radius:6px;margin:6px 0;padding:8px;overflow-x:auto}.lg-md pre code{white-space:pre;background:0 0;border:none;padding:0;font-size:11px}.lg-md ul,.lg-md ol{flex-direction:column;gap:2px;margin:4px 0 6px;padding-left:18px;display:flex}.lg-md ul{list-style:outside}.lg-md ol{list-style:decimal}.lg-md h4{margin:8px 0 4px;font-size:12px;font-weight:600}.lg-md lg-media{display:block}.lg-md lg-media img,.lg-md lg-media video{border:1px solid var(--color-border);border-radius:6px;max-width:100%;margin:4px 0}.lg-md video{border:1px solid var(--color-border);background:#000;border-radius:6px;max-width:100%;margin:4px 0}.lg-md img{border:1px solid var(--color-border);border-radius:6px;max-width:100%;margin:4px 0}.lg-md strong{font-weight:600}*{scrollbar-width:thin;scrollbar-color:var(--color-border-strong) transparent}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-thumb{background:var(--color-border-strong);border-radius:4px}::-webkit-scrollbar-track{background:0 0}@property --tw-rotate-x{syntax:\"*\";inherits:false}@property --tw-rotate-y{syntax:\"*\";inherits:false}@property --tw-rotate-z{syntax:\"*\";inherits:false}@property --tw-skew-x{syntax:\"*\";inherits:false}@property --tw-skew-y{syntax:\"*\";inherits:false}@property --tw-border-style{syntax:\"*\";inherits:false;initial-value:solid}@property --tw-leading{syntax:\"*\";inherits:false}@property --tw-font-weight{syntax:\"*\";inherits:false}@property --tw-tracking{syntax:\"*\";inherits:false}@property --tw-ordinal{syntax:\"*\";inherits:false}@property --tw-slashed-zero{syntax:\"*\";inherits:false}@property --tw-numeric-figure{syntax:\"*\";inherits:false}@property --tw-numeric-spacing{syntax:\"*\";inherits:false}@property --tw-numeric-fraction{syntax:\"*\";inherits:false}@property --tw-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:\"*\";inherits:false}@property --tw-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:\"*\";inherits:false}@property --tw-inset-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:\"*\";inherits:false}@property --tw-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:\"*\";inherits:false}@property --tw-inset-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:\"*\";inherits:false}@property --tw-ring-offset-width{syntax:\"<length>\";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:\"*\";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:\"*\";inherits:false;initial-value:solid}@property --tw-blur{syntax:\"*\";inherits:false}@property --tw-brightness{syntax:\"*\";inherits:false}@property --tw-contrast{syntax:\"*\";inherits:false}@property --tw-grayscale{syntax:\"*\";inherits:false}@property --tw-hue-rotate{syntax:\"*\";inherits:false}@property --tw-invert{syntax:\"*\";inherits:false}@property --tw-opacity{syntax:\"*\";inherits:false}@property --tw-saturate{syntax:\"*\";inherits:false}@property --tw-sepia{syntax:\"*\";inherits:false}@property --tw-drop-shadow{syntax:\"*\";inherits:false}@property --tw-drop-shadow-color{syntax:\"*\";inherits:false}@property --tw-drop-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:\"*\";inherits:false}@property --tw-backdrop-blur{syntax:\"*\";inherits:false}@property --tw-backdrop-brightness{syntax:\"*\";inherits:false}@property --tw-backdrop-contrast{syntax:\"*\";inherits:false}@property --tw-backdrop-grayscale{syntax:\"*\";inherits:false}@property --tw-backdrop-hue-rotate{syntax:\"*\";inherits:false}@property --tw-backdrop-invert{syntax:\"*\";inherits:false}@property --tw-backdrop-opacity{syntax:\"*\";inherits:false}@property --tw-backdrop-saturate{syntax:\"*\";inherits:false}@property --tw-backdrop-sepia{syntax:\"*\";inherits:false}@property --tw-duration{syntax:\"*\";inherits:false}@property --tw-ease{syntax:\"*\";inherits:false}@property --tw-contain-size{syntax:\"*\";inherits:false}@property --tw-contain-layout{syntax:\"*\";inherits:false}@property --tw-contain-paint{syntax:\"*\";inherits:false}@property --tw-contain-style{syntax:\"*\";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}";
|
|
48757
|
+
var F6 = "/*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */\n@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-contain-size:initial;--tw-contain-layout:initial;--tw-contain-paint:initial;--tw-contain-style:initial}}}@layer theme{:root,:host{--font-sans:\"Inter\", ui-sans-serif, system-ui, -apple-system, sans-serif;--font-serif:ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif;--font-mono:ui-monospace, \"SF Mono\", Menlo, monospace;--color-red-500:oklch(63.7% .237 25.331);--color-white:#fff;--spacing:.25rem;--font-weight-thin:100;--font-weight-extralight:200;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--font-weight-black:900;--tracking-wide:.025em;--leading-snug:1.375;--leading-relaxed:1.625;--radius-sm:4px;--radius-md:6px;--radius-lg:10px;--radius-xl:.75rem;--ease-in:cubic-bezier(.4, 0, 1, 1);--ease-out:cubic-bezier(0, 0, .2, 1);--ease-in-out:cubic-bezier(.4, 0, .2, 1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-bg:#0b0c0e;--color-surface:#141517;--color-surface-2:#1c1d21;--color-surface-3:#24262b;--color-border:#26282d;--color-border-strong:#34363d;--color-text:#e8e9eb;--color-text-dim:#8b8e98;--color-text-faint:#5c5f6a;--color-accent:#5e6ad2;--color-accent-hover:#6e79e0;--color-accent-soft:#5e6ad226;--color-success:#4cb782;--color-warn:#f2c94c;--color-danger:#eb5757;--color-danger-soft:#eb575726}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.visible\\!{visibility:visible!important}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:0}.inset-y-0{inset-block:0}.-top-0{top:0}.-top-0\\.5{top:calc(var(--spacing) * -.5)}.top-0{top:0}.top-0\\.5{top:calc(var(--spacing) * .5)}.top-1{top:var(--spacing)}.top-1\\/2{top:50%}.top-3{top:calc(var(--spacing) * 3)}.top-\\[2px\\]{top:2px}.top-full{top:100%}.-right-0{right:0}.-right-0\\.5{right:calc(var(--spacing) * -.5)}.right-0{right:0}.right-0\\.5{right:calc(var(--spacing) * .5)}.right-4{right:calc(var(--spacing) * 4)}.right-full{right:100%}.bottom-0{bottom:0}.bottom-1{bottom:var(--spacing)}.bottom-4{bottom:calc(var(--spacing) * 4)}.bottom-\\[2px\\]{bottom:2px}.bottom-full{bottom:100%}.-left-\\[13\\.5px\\]{left:-13.5px}.left-0{left:0}.left-1{left:var(--spacing)}.left-1\\/2{left:50%}.left-\\[5px\\]{left:5px}.left-full{left:100%}.z-1{z-index:1}.z-10{z-index:10}.z-\\[2147483645\\]{z-index:2147483645}.z-\\[2147483646\\]{z-index:2147483646}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.container\\!{width:100%!important}@media (width>=40rem){.container\\!{max-width:40rem!important}}@media (width>=48rem){.container\\!{max-width:48rem!important}}@media (width>=64rem){.container\\!{max-width:64rem!important}}@media (width>=80rem){.container\\!{max-width:80rem!important}}@media (width>=96rem){.container\\!{max-width:96rem!important}}.-m-0{margin:0}.-m-0\\.5{margin:calc(var(--spacing) * -.5)}.-m-4{margin:calc(var(--spacing) * -4)}.m-0{margin:0}.-mx-2{margin-inline:calc(var(--spacing) * -2)}.-my-1{margin-block:calc(var(--spacing) * -1)}.-my-1\\.5{margin-block:calc(var(--spacing) * -1.5)}.mt-0{margin-top:0}.mt-0\\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-2\\.5{margin-top:calc(var(--spacing) * 2.5)}.mt-px{margin-top:1px}.mr-0{margin-right:0}.mr-0\\.5{margin-right:calc(var(--spacing) * .5)}.mr-1{margin-right:var(--spacing)}.mr-1\\.5{margin-right:calc(var(--spacing) * 1.5)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mr-2\\.5{margin-right:calc(var(--spacing) * 2.5)}.-mb-4{margin-bottom:calc(var(--spacing) * -4)}.mb-0{margin-bottom:0}.mb-0\\.5{margin-bottom:calc(var(--spacing) * .5)}.mb-1{margin-bottom:var(--spacing)}.mb-1\\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-2\\.5{margin-bottom:calc(var(--spacing) * 2.5)}.ml-1{margin-left:var(--spacing)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-2\\.5{margin-left:calc(var(--spacing) * 2.5)}.ml-4{margin-left:calc(var(--spacing) * 4)}.ml-auto{margin-left:auto}.ml-px{margin-left:1px}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-5{-webkit-line-clamp:5;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.list-item{display:list-item}.table{display:table}.size-0{width:0;height:0}.size-1{width:var(--spacing);height:var(--spacing)}.size-1\\.5{width:calc(var(--spacing) * 1.5);height:calc(var(--spacing) * 1.5)}.size-2{width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.size-2\\.5{width:calc(var(--spacing) * 2.5);height:calc(var(--spacing) * 2.5)}.size-3{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.size-7{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}.size-10{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10)}.size-\\[9px\\]{width:9px;height:9px}.size-\\[12px\\]{width:12px;height:12px}.size-\\[16px\\]{width:16px;height:16px}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-16{height:calc(var(--spacing) * 16)}.h-\\[8px\\]{height:8px}.h-\\[17px\\]{height:17px}.h-\\[18px\\]{height:18px}.h-\\[20px\\]{height:20px}.h-\\[24px\\]{height:24px}.h-fit{height:fit-content}.h-full{height:100%}.h-screen{height:100vh}.max-h-32{max-height:calc(var(--spacing) * 32)}.max-h-40{max-height:calc(var(--spacing) * 40)}.max-h-44{max-height:calc(var(--spacing) * 44)}.max-h-56{max-height:calc(var(--spacing) * 56)}.max-h-64{max-height:calc(var(--spacing) * 64)}.max-h-72{max-height:calc(var(--spacing) * 72)}.max-h-80{max-height:calc(var(--spacing) * 80)}.max-h-\\[var\\(--rg-edit-list-max-h\\)\\]{max-height:var(--rg-edit-list-max-h)}.min-h-0{min-height:0}.min-h-4{min-height:calc(var(--spacing) * 4)}.min-h-\\[2lh\\]{min-height:2lh}.min-h-\\[28px\\]{min-height:28px}.w-1{width:var(--spacing)}.w-3{width:calc(var(--spacing) * 3)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-16{width:calc(var(--spacing) * 16)}.w-28{width:calc(var(--spacing) * 28)}.w-72{width:calc(var(--spacing) * 72)}.w-\\[2px\\]{width:2px}.w-\\[Npx\\]{width:Npx}.w-\\[calc\\(100\\%\\+16px\\)\\]{width:calc(100% + 16px)}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-px{width:1px}.max-w-\\[55\\%\\]{max-width:55%}.max-w-\\[100vw\\]{max-width:100vw}.max-w-\\[110px\\]{max-width:110px}.max-w-\\[280px\\]{max-width:280px}.max-w-full{max-width:100%}.min-w-0{min-width:0}.min-w-\\[3\\.5ch\\]{min-width:3.5ch}.min-w-\\[3ch\\]{min-width:3ch}.min-w-\\[4ch\\]{min-width:4ch}.min-w-\\[5ch\\]{min-width:5ch}.min-w-\\[6ch\\]{min-width:6ch}.min-w-\\[7ch\\]{min-width:7ch}.min-w-\\[8ch\\]{min-width:8ch}.min-w-\\[10ch\\]{min-width:10ch}.min-w-\\[12ch\\]{min-width:12ch}.min-w-\\[36px\\]{min-width:36px}.min-w-\\[52px\\]{min-width:52px}.min-w-\\[100px\\]{min-width:100px}.min-w-\\[150px\\]{min-width:150px}.flex-1{flex:1}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.-rotate-90{rotate:-90deg}.rotate-0{rotate:0deg}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-col-resize{cursor:col-resize}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-grabbing{cursor:grabbing}.cursor-pointer{cursor:pointer}.cursor-text{cursor:text}.resize{resize:both}.resize-none{resize:none}.resize-y{resize:vertical}.list-decimal{list-style-type:decimal}.grid-cols-\\[0fr\\]{grid-template-columns:0fr}.grid-cols-\\[1fr\\]{grid-template-columns:1fr}.grid-rows-\\[0fr\\]{grid-template-rows:0fr}.grid-rows-\\[1fr\\]{grid-template-rows:1fr}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0{gap:0}.gap-0\\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-\\[5px\\]{gap:5px}.self-end{align-self:flex-end}.self-start{align-self:flex-start}.self-stretch{align-self:stretch}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-clip{overflow:clip}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-\\[1px\\]{border-radius:1px}.rounded-\\[3px\\]{border-radius:3px}.rounded-\\[4px\\]{border-radius:4px}.rounded-\\[5px\\]{border-radius:5px}.rounded-\\[6px\\]{border-radius:6px}.rounded-\\[13px\\]{border-radius:13px}.rounded-\\[14px\\]{border-radius:14px}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.rounded-t-\\[10px\\]{border-top-left-radius:10px;border-top-right-radius:10px}.rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.rounded-l{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-l-\\[10px\\]{border-top-left-radius:10px;border-bottom-left-radius:10px}.rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.rounded-tl{border-top-left-radius:.25rem}.rounded-r{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.rounded-r-\\[10px\\]{border-top-right-radius:10px;border-bottom-right-radius:10px}.rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.rounded-tr{border-top-right-radius:.25rem}.rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-b-\\[6px\\]{border-bottom-right-radius:6px;border-bottom-left-radius:6px}.rounded-b-\\[10px\\]{border-bottom-right-radius:10px;border-bottom-left-radius:10px}.rounded-b-none{border-bottom-right-radius:0;border-bottom-left-radius:0}.rounded-br{border-bottom-right-radius:.25rem}.rounded-bl{border-bottom-left-radius:.25rem}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.\\[border-width\\:0\\.5px\\]{border-width:.5px}.border-x{border-inline-style:var(--tw-border-style);border-inline-width:1px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-s{border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px}.border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-t-4{border-top-style:var(--tw-border-style);border-top-width:4px}.\\[border-top-width\\:0\\.5px\\]{border-top-width:.5px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-dotted{--tw-border-style:dotted;border-style:dotted}.border-none{--tw-border-style:none;border-style:none}.border-solid{--tw-border-style:solid;border-style:solid}.border-\\[var\\(--rg-border-button\\)\\]{border-color:var(--rg-border-button)}.border-accent{border-color:var(--color-accent)}.border-accent\\/40{border-color:#5e6ad266}@supports (color:color-mix(in lab, red, red)){.border-accent\\/40{border-color:color-mix(in oklab, var(--color-accent) 40%, transparent)}}.border-border{border-color:var(--color-border)}.border-danger{border-color:var(--color-danger)}.border-danger\\/40{border-color:#eb575766}@supports (color:color-mix(in lab, red, red)){.border-danger\\/40{border-color:color-mix(in oklab, var(--color-danger) 40%, transparent)}}.border-success{border-color:var(--color-success)}.border-success\\/40{border-color:#4cb78266}@supports (color:color-mix(in lab, red, red)){.border-success\\/40{border-color:color-mix(in oklab, var(--color-success) 40%, transparent)}}.border-text-dim{border-color:var(--color-text-dim)}.border-transparent{border-color:#0000}.border-warn{border-color:var(--color-warn)}.border-warn\\/40{border-color:#f2c94c66}@supports (color:color-mix(in lab, red, red)){.border-warn\\/40{border-color:color-mix(in oklab, var(--color-warn) 40%, transparent)}}.border-t-\\[var\\(--rg-border-subtle\\)\\]{border-top-color:var(--rg-border-subtle)}.border-t-transparent{border-top-color:#0000}.bg-\\[var\\(--rg-error-bg\\)\\]{background-color:var(--rg-error-bg)}.bg-\\[var\\(--rg-panel-bg\\)\\]{background-color:var(--rg-panel-bg)}.bg-\\[var\\(--rg-submit-bg\\)\\]{background-color:var(--rg-submit-bg)}.bg-\\[var\\(--rg-surface-active\\)\\]{background-color:var(--rg-surface-active)}.bg-\\[var\\(--rg-surface-hover\\)\\]{background-color:var(--rg-surface-hover)}.bg-\\[var\\(--rg-text-primary\\)\\]{background-color:var(--rg-text-primary)}.bg-\\[var\\(--rg-text-secondary\\)\\]{background-color:var(--rg-text-secondary)}.bg-accent{background-color:var(--color-accent)}.bg-accent-soft{background-color:var(--color-accent-soft)}.bg-bg{background-color:var(--color-bg)}.bg-bg\\/80{background-color:#0b0c0ecc}@supports (color:color-mix(in lab, red, red)){.bg-bg\\/80{background-color:color-mix(in oklab, var(--color-bg) 80%, transparent)}}.bg-border{background-color:var(--color-border)}.bg-current{background-color:currentColor}.bg-danger{background-color:var(--color-danger)}.bg-danger-soft{background-color:var(--color-danger-soft)}.bg-danger\\/10{background-color:#eb57571a}@supports (color:color-mix(in lab, red, red)){.bg-danger\\/10{background-color:color-mix(in oklab, var(--color-danger) 10%, transparent)}}.bg-red-500{background-color:var(--color-red-500)}.bg-success{background-color:var(--color-success)}.bg-surface{background-color:var(--color-surface)}.bg-surface-2{background-color:var(--color-surface-2)}.bg-surface-3{background-color:var(--color-surface-3)}.bg-text-faint{background-color:var(--color-text-faint)}.bg-transparent{background-color:#0000}.bg-warn{background-color:var(--color-warn)}.bg-warn\\/10{background-color:#f2c94c1a}@supports (color:color-mix(in lab, red, red)){.bg-warn\\/10{background-color:color-mix(in oklab, var(--color-warn) 10%, transparent)}}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.p-0{padding:0}.p-0\\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:var(--spacing)}.p-1\\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-2\\.5{padding:calc(var(--spacing) * 2.5)}.p-6{padding:calc(var(--spacing) * 6)}.px-0{padding-inline:0}.px-0\\.25{padding-inline:calc(var(--spacing) * .25)}.px-1{padding-inline:var(--spacing)}.px-1\\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-\\[3px\\]{padding-inline:3px}.py-0{padding-block:0}.py-0\\.5{padding-block:calc(var(--spacing) * .5)}.py-0\\.25{padding-block:calc(var(--spacing) * .25)}.py-1{padding-block:var(--spacing)}.py-1\\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-10{padding-block:calc(var(--spacing) * 10)}.py-px{padding-block:1px}.pt-0{padding-top:0}.pt-0\\.5{padding-top:calc(var(--spacing) * .5)}.pt-1{padding-top:var(--spacing)}.pt-1\\.5{padding-top:calc(var(--spacing) * 1.5)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-2\\.5{padding-top:calc(var(--spacing) * 2.5)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pr-1{padding-right:var(--spacing)}.pr-1\\.5{padding-right:calc(var(--spacing) * 1.5)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pr-4{padding-right:calc(var(--spacing) * 4)}.pb-1{padding-bottom:var(--spacing)}.pb-1\\.5{padding-bottom:calc(var(--spacing) * 1.5)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-6{padding-bottom:calc(var(--spacing) * 6)}.pl-0{padding-left:0}.pl-0\\.5{padding-left:calc(var(--spacing) * .5)}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-2\\.5{padding-left:calc(var(--spacing) * 2.5)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-4{padding-left:calc(var(--spacing) * 4)}.pl-5{padding-left:calc(var(--spacing) * 5)}.text-center{text-align:center}.text-end{text-align:end}.text-justify{text-align:justify}.text-left{text-align:left}.text-right{text-align:right}.text-start{text-align:start}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.font-serif{font-family:var(--font-serif)}.text-\\[9\\.5px\\]{font-size:9.5px}.text-\\[9px\\]{font-size:9px}.text-\\[10\\.5px\\]{font-size:10.5px}.text-\\[10px\\]{font-size:10px}.text-\\[11\\.5px\\]{font-size:11.5px}.text-\\[11px\\]{font-size:11px}.text-\\[12\\.5px\\]{font-size:12.5px}.text-\\[12px\\]{font-size:12px}.text-\\[13px\\]{font-size:13px}.text-\\[15px\\]{font-size:15px}.leading-3{--tw-leading:calc(var(--spacing) * 3);line-height:calc(var(--spacing) * 3)}.leading-3\\.5{--tw-leading:calc(var(--spacing) * 3.5);line-height:calc(var(--spacing) * 3.5)}.leading-4{--tw-leading:calc(var(--spacing) * 4);line-height:calc(var(--spacing) * 4)}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-extralight{--tw-font-weight:var(--font-weight-extralight);font-weight:var(--font-weight-extralight)}.font-light{--tw-font-weight:var(--font-weight-light);font-weight:var(--font-weight-light)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.font-thin{--tw-font-weight:var(--font-weight-thin);font-weight:var(--font-weight-thin)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.break-normal{overflow-wrap:normal;word-break:normal}.break-words,.wrap-break-word{overflow-wrap:break-word}.break-all{word-break:break-all}.break-keep{word-break:keep-all}.text-ellipsis{text-overflow:ellipsis}.whitespace-break-spaces{white-space:break-spaces}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-line{white-space:pre-line}.whitespace-pre-wrap{white-space:pre-wrap}.text-\\[var\\(--rg-error-text\\)\\]{color:var(--rg-error-text)}.text-\\[var\\(--rg-submit-fg\\)\\]{color:var(--rg-submit-fg)}.text-\\[var\\(--rg-text-primary\\)\\]{color:var(--rg-text-primary)}.text-\\[var\\(--rg-text-primary-85\\)\\]{color:var(--rg-text-primary-85)}.text-\\[var\\(--rg-text-secondary\\)\\]{color:var(--rg-text-secondary)}.text-accent{color:var(--color-accent)}.text-danger{color:var(--color-danger)}.text-success{color:var(--color-success)}.text-text{color:var(--color-text)}.text-text-dim{color:var(--color-text-dim)}.text-text-faint{color:var(--color-text-faint)}.text-warn{color:var(--color-warn)}.text-white{color:var(--color-white)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.normal-case{text-transform:none}.uppercase{text-transform:uppercase}.italic{font-style:italic}.not-italic{font-style:normal}.lining-nums{--tw-numeric-figure:lining-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.oldstyle-nums{--tw-numeric-figure:oldstyle-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.proportional-nums{--tw-numeric-spacing:proportional-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.slashed-zero{--tw-slashed-zero:slashed-zero;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.no-underline{text-decoration-line:none}.underline{text-decoration-line:underline}.underline-offset-2{text-underline-offset:2px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.accent-accent{accent-color:var(--color-accent)}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.\\[box-shadow\\:var\\(--rg-shadow\\)\\]{box-shadow:var(--rg-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.\\[filter\\:var\\(--rg-drop-shadow\\)\\]{filter:var(--rg-drop-shadow)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[grid-template-columns\\]{transition-property:grid-template-columns;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[grid-template-rows\\]{transition-property:grid-template-rows;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[opacity\\,transform\\]{transition-property:opacity,transform;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[padding\\,border-radius\\,transform\\]{transition-property:padding,border-radius,transform;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[top\\,left\\,width\\,height\\,opacity\\,border-radius\\]{transition-property:top,left,width,height,opacity,border-radius;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[transform\\,color\\]{transition-property:transform,color;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[transform\\,opacity\\]{transition-property:transform,opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.delay-\\[80ms\\]{transition-delay:80ms}.duration-60{--tw-duration:60ms;transition-duration:60ms}.duration-75{--tw-duration:75ms;transition-duration:75ms}.duration-100{--tw-duration:.1s;transition-duration:.1s}.duration-120{--tw-duration:.12s;transition-duration:.12s}.duration-140{--tw-duration:.14s;transition-duration:.14s}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-180{--tw-duration:.18s;transition-duration:.18s}.duration-220{--tw-duration:.22s;transition-duration:.22s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-400{--tw-duration:.4s;transition-duration:.4s}.ease-\\[cubic-bezier\\(0\\,0\\,0\\.2\\,1\\)\\]{--tw-ease:cubic-bezier(0,0,.2,1);transition-timing-function:cubic-bezier(0,0,.2,1)}.ease-in{--tw-ease:var(--ease-in);transition-timing-function:var(--ease-in)}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.will-change-\\[opacity\\,transform\\]{will-change:opacity,transform}.will-change-transform{will-change:transform}.contain-layout{--tw-contain-layout:layout;contain:var(--tw-contain-size,) var(--tw-contain-layout,) var(--tw-contain-paint,) var(--tw-contain-style,)}.outline-none{--tw-outline-style:none;outline-style:none}.select-all{-webkit-user-select:all;user-select:all}.select-none{-webkit-user-select:none;user-select:none}.\\[corner-shape\\:superellipse\\(1\\.25\\)\\]{corner-shape:superellipse(1.25)}.\\[font-synthesis\\:none\\]{font-synthesis:none}.group-open\\:rotate-90:is(:where(.group):is([open],:popover-open,:open) *){rotate:90deg}@media (hover:hover){.group-hover\\:text-\\[var\\(--rg-text-primary\\)\\]:is(:where(.group):hover *){color:var(--rg-text-primary)}.group-hover\\:opacity-100:is(:where(.group):hover *){opacity:1}}.placeholder\\:text-text-faint::placeholder{color:var(--color-text-faint)}@media (hover:hover){.hover\\:bg-\\[var\\(--rg-error-bg-hover\\)\\]:hover{background-color:var(--rg-error-bg-hover)}.hover\\:bg-\\[var\\(--rg-surface-active\\)\\]:hover{background-color:var(--rg-surface-active)}.hover\\:bg-\\[var\\(--rg-surface-hover\\)\\]:hover{background-color:var(--rg-surface-hover)}.hover\\:bg-accent-hover:hover{background-color:var(--color-accent-hover)}.hover\\:bg-accent\\/50:hover{background-color:#5e6ad280}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-accent\\/50:hover{background-color:color-mix(in oklab, var(--color-accent) 50%, transparent)}}.hover\\:bg-danger\\/30:hover{background-color:#eb57574d}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-danger\\/30:hover{background-color:color-mix(in oklab, var(--color-danger) 30%, transparent)}}.hover\\:bg-surface-2:hover{background-color:var(--color-surface-2)}.hover\\:bg-surface-3:hover{background-color:var(--color-surface-3)}.hover\\:text-\\[var\\(--rg-text-primary\\)\\]:hover{color:var(--rg-text-primary)}.hover\\:text-accent:hover{color:var(--color-accent)}.hover\\:text-danger:hover{color:var(--color-danger)}.hover\\:text-text:hover{color:var(--color-text)}.hover\\:underline:hover{text-decoration-line:underline}.hover\\:opacity-80:hover{opacity:.8}}.focus\\:border-accent:focus{border-color:var(--color-accent)}.active\\:cursor-grabbing:active{cursor:grabbing}.active\\:bg-accent:active{background-color:var(--color-accent)}.active\\:transition-none:active{transition-property:none}.disabled\\:cursor-default:disabled{cursor:default}.disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:bg-surface-3:disabled{background-color:var(--color-surface-3)}.disabled\\:text-text-faint:disabled{color:var(--color-text-faint)}.disabled\\:opacity-40:disabled{opacity:.4}@media (hover:hover){.disabled\\:hover\\:bg-surface-2:disabled:hover{background-color:var(--color-surface-2)}}.data-\\[state\\=on\\]\\:transition-none[data-state=on],.data-\\[state\\=open\\]\\:transition-none[data-state=open],.data-\\[state\\=…\\]\\:transition-none[data-state=…]{transition-property:none}}:root{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}[data-theme=light],:host([data-theme=light]){--color-bg:#fbfbfc;--color-surface:#fff;--color-surface-2:#f4f4f6;--color-surface-3:#e9e9ee;--color-border:#e2e2e8;--color-border-strong:#cfcfd8;--color-text:#1b1c20;--color-text-dim:#5c5f6a;--color-text-faint:#9a9da8;--color-accent-soft:#5e6ad21f;--color-danger-soft:#eb57571a;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}@media (prefers-color-scheme:light){:root:not([data-theme=dark]){--color-bg:#fbfbfc;--color-surface:#fff;--color-surface-2:#f4f4f6;--color-surface-3:#e9e9ee;--color-border:#e2e2e8;--color-border-strong:#cfcfd8;--color-text:#1b1c20;--color-text-dim:#5c5f6a;--color-text-faint:#9a9da8;--color-accent-soft:#5e6ad21f;--color-danger-soft:#eb57571a;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}}body{background-color:var(--color-bg);font-family:var(--font-sans);color:var(--color-text);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;min-width:320px;margin:0;font-size:13px}@keyframes geist-spinner-fade{0%{opacity:1}to{opacity:.15}}[data-tip]{position:relative}[data-tip]:hover:after{content:attr(data-tip);color:#fff;white-space:nowrap;text-overflow:ellipsis;pointer-events:none;z-index:60;background:#1b1c20;border-radius:6px;max-width:260px;padding:3px 8px;font-size:10.5px;font-weight:500;line-height:1.35;position:absolute;bottom:calc(100% + 6px);left:50%;overflow:hidden;transform:translate(-50%);box-shadow:0 4px 12px #0000004d}[data-tip][data-tip-pos~=right]:hover:after{left:0;transform:none}[data-tip][data-tip-pos~=left]:hover:after{left:auto;right:0;transform:none}[data-tip][data-tip-pos~=bottom]:hover:after{top:calc(100% + 6px);bottom:auto}.no-scrollbar{scrollbar-width:none}.no-scrollbar::-webkit-scrollbar{display:none}.lg-md p{margin:0 0 6px}.lg-md p:last-child{margin-bottom:0}.lg-md a{color:var(--color-accent);word-break:break-all;text-decoration:none}.lg-md a:hover{text-decoration:underline}.lg-md code{background:var(--color-surface-2);border:1px solid var(--color-border);font-family:var(--font-mono);border-radius:4px;padding:0 4px;font-size:11px}.lg-md pre{background:var(--color-surface-2);border:1px solid var(--color-border);border-radius:6px;margin:6px 0;padding:8px;overflow-x:auto}.lg-md pre code{white-space:pre;background:0 0;border:none;padding:0;font-size:11px}.lg-md ul,.lg-md ol{flex-direction:column;gap:2px;margin:4px 0 6px;padding-left:18px;display:flex}.lg-md ul{list-style:outside}.lg-md ol{list-style:decimal}.lg-md h4{margin:8px 0 4px;font-size:12px;font-weight:600}.lg-md lg-media{display:block}.lg-md lg-media img,.lg-md lg-media video{border:1px solid var(--color-border);border-radius:6px;max-width:100%;margin:4px 0}.lg-md video{border:1px solid var(--color-border);background:#000;border-radius:6px;max-width:100%;margin:4px 0}.lg-md img{border:1px solid var(--color-border);border-radius:6px;max-width:100%;margin:4px 0}.lg-md strong{font-weight:600}*{scrollbar-width:thin;scrollbar-color:var(--color-border-strong) transparent}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-thumb{background:var(--color-border-strong);border-radius:4px}::-webkit-scrollbar-track{background:0 0}@property --tw-rotate-x{syntax:\"*\";inherits:false}@property --tw-rotate-y{syntax:\"*\";inherits:false}@property --tw-rotate-z{syntax:\"*\";inherits:false}@property --tw-skew-x{syntax:\"*\";inherits:false}@property --tw-skew-y{syntax:\"*\";inherits:false}@property --tw-border-style{syntax:\"*\";inherits:false;initial-value:solid}@property --tw-leading{syntax:\"*\";inherits:false}@property --tw-font-weight{syntax:\"*\";inherits:false}@property --tw-tracking{syntax:\"*\";inherits:false}@property --tw-ordinal{syntax:\"*\";inherits:false}@property --tw-slashed-zero{syntax:\"*\";inherits:false}@property --tw-numeric-figure{syntax:\"*\";inherits:false}@property --tw-numeric-spacing{syntax:\"*\";inherits:false}@property --tw-numeric-fraction{syntax:\"*\";inherits:false}@property --tw-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:\"*\";inherits:false}@property --tw-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:\"*\";inherits:false}@property --tw-inset-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:\"*\";inherits:false}@property --tw-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:\"*\";inherits:false}@property --tw-inset-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:\"*\";inherits:false}@property --tw-ring-offset-width{syntax:\"<length>\";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:\"*\";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:\"*\";inherits:false;initial-value:solid}@property --tw-blur{syntax:\"*\";inherits:false}@property --tw-brightness{syntax:\"*\";inherits:false}@property --tw-contrast{syntax:\"*\";inherits:false}@property --tw-grayscale{syntax:\"*\";inherits:false}@property --tw-hue-rotate{syntax:\"*\";inherits:false}@property --tw-invert{syntax:\"*\";inherits:false}@property --tw-opacity{syntax:\"*\";inherits:false}@property --tw-saturate{syntax:\"*\";inherits:false}@property --tw-sepia{syntax:\"*\";inherits:false}@property --tw-drop-shadow{syntax:\"*\";inherits:false}@property --tw-drop-shadow-color{syntax:\"*\";inherits:false}@property --tw-drop-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:\"*\";inherits:false}@property --tw-backdrop-blur{syntax:\"*\";inherits:false}@property --tw-backdrop-brightness{syntax:\"*\";inherits:false}@property --tw-backdrop-contrast{syntax:\"*\";inherits:false}@property --tw-backdrop-grayscale{syntax:\"*\";inherits:false}@property --tw-backdrop-hue-rotate{syntax:\"*\";inherits:false}@property --tw-backdrop-invert{syntax:\"*\";inherits:false}@property --tw-backdrop-opacity{syntax:\"*\";inherits:false}@property --tw-backdrop-saturate{syntax:\"*\";inherits:false}@property --tw-backdrop-sepia{syntax:\"*\";inherits:false}@property --tw-duration{syntax:\"*\";inherits:false}@property --tw-ease{syntax:\"*\";inherits:false}@property --tw-contain-size{syntax:\"*\";inherits:false}@property --tw-contain-layout{syntax:\"*\";inherits:false}@property --tw-contain-paint{syntax:\"*\";inherits:false}@property --tw-contain-style{syntax:\"*\";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}";
|
|
47879
48758
|
//#endregion
|
|
47880
48759
|
//#region src/page/index.tsx
|
|
47881
48760
|
Br();
|
|
47882
|
-
var
|
|
47883
|
-
function
|
|
48761
|
+
var I6 = /*#__PURE__*/ N("<span aria-hidden class=\"bg-danger size-2 shrink-0 animate-pulse rounded-full\">"), L6 = /*#__PURE__*/ N("<span class=\"text-text min-w-[5ch] text-[11px] font-medium tabular-nums\">"), R6 = /*#__PURE__*/ N("<button class=\"bg-accent hover:bg-accent-hover h-7 cursor-pointer rounded-full px-2.5 text-[11px] font-medium text-white transition-colors\"><span class=\"inline-block min-w-[4ch] text-center\">Stop"), z6 = /*#__PURE__*/ N("<p class=\"text-warn px-1.5 pt-1 pb-1.5 text-[10.5px] font-semibold tracking-wide uppercase\">Needs review"), B6 = /*#__PURE__*/ N("<div><p class=\"text-text-dim px-1.5 pt-1 pb-1.5 text-[10.5px] font-semibold tracking-wide uppercase\">Running agents"), V6 = /*#__PURE__*/ N("<div class=\"fixed z-[2147483646] select-none\"><div class=\"bg-surface border-border text-text flex h-9 cursor-grab items-center gap-1 rounded-full border py-1 pr-1 pl-2.5 font-sans shadow-lg active:cursor-grabbing\">"), H6 = /*#__PURE__*/ N("<div><div title=\"Drag to resize\">"), U6 = /*#__PURE__*/ N("<button title=\"Open Linear Grab\"aria-label=\"Open Linear Grab\"class=\"text-accent hover:opacity-80 inline-flex cursor-pointer items-center gap-1.5\">"), W6 = /*#__PURE__*/ N("<span class=\"bg-border h-4 w-px\"aria-hidden>"), G6 = /*#__PURE__*/ N("<span aria-hidden class=\"bg-warn size-2 rounded-full\">"), K6 = /*#__PURE__*/ N("<span class=\"text-warn min-w-[3.5ch] text-left text-[11px] font-medium tabular-nums\"> rev"), q6 = /*#__PURE__*/ N("<button title=\"Running agents\"aria-label=\"Running agents\"class=\"hover:bg-surface-2 flex h-7 cursor-pointer items-center gap-1.5 rounded-full px-2 transition-colors\"><span aria-hidden></span><span>"), J6 = /*#__PURE__*/ N("<span aria-hidden class=\"bg-accent size-2 shrink-0 animate-pulse rounded-full\">"), Y6 = /*#__PURE__*/ N("<span class=\"text-text min-w-[3ch] text-[11px] font-medium tabular-nums\">s"), X6 = /*#__PURE__*/ N("<span class=\"text-text-dim min-w-[7ch] text-[11px] tabular-nums\"> states"), Z6 = /*#__PURE__*/ N("<p class=\"text-text-faint px-1.5 pb-1.5 text-[11.5px]\">No agents running right now."), Q6 = /*#__PURE__*/ N("<button class=\"hover:bg-surface-2 flex w-full cursor-pointer flex-col gap-0.5 rounded-md px-1.5 py-1.5 text-left transition-colors\"><span class=\"flex min-w-0 items-center gap-1.5\"><span aria-hidden class=\"size-1.5 shrink-0 rounded-full\"></span><span class=\"font-mono text-text-dim shrink-0 text-[10.5px]\"></span><span class=\"text-text truncate text-[11.5px]\"></span></span><span class=\"text-text-faint pl-3 text-[10.5px] tabular-nums\"> · <!> · ");
|
|
48762
|
+
function $6(e = {}) {
|
|
47884
48763
|
if (typeof window > "u" || window.__LINEAR_GRAB_PAGE__) return;
|
|
47885
48764
|
window.__LINEAR_GRAB_PAGE__ = !0;
|
|
47886
48765
|
let t = () => {
|
|
47887
|
-
lk(),
|
|
48766
|
+
lk(), z2(), JZ();
|
|
47888
48767
|
let t = document.createElement("div");
|
|
47889
48768
|
t.id = "linear-grab-root", document.body.appendChild(t);
|
|
47890
48769
|
let n = (e) => {
|
|
@@ -47912,17 +48791,17 @@ function X3(e = {}) {
|
|
|
47912
48791
|
"keypress"
|
|
47913
48792
|
]) window.addEventListener(e, n, { capture: !0 });
|
|
47914
48793
|
let r = t.attachShadow({ mode: "open" }), i = document.createElement("style");
|
|
47915
|
-
i.textContent =
|
|
48794
|
+
i.textContent = F6, r.appendChild(i);
|
|
47916
48795
|
let a = document.createElement("div");
|
|
47917
48796
|
r.appendChild(a);
|
|
47918
|
-
let o = () => a.setAttribute("data-theme",
|
|
47919
|
-
o(), matchMedia("(prefers-color-scheme: light)").addEventListener("change", o), nt(() => j(
|
|
48797
|
+
let o = () => a.setAttribute("data-theme", e8());
|
|
48798
|
+
o(), matchMedia("(prefers-color-scheme: light)").addEventListener("change", o), nt(() => j(o8, { get defaultOpen() {
|
|
47920
48799
|
return e.defaultOpen ?? !1;
|
|
47921
48800
|
} }), a);
|
|
47922
48801
|
};
|
|
47923
48802
|
document.body ? t() : document.addEventListener("DOMContentLoaded", t, { once: !0 });
|
|
47924
48803
|
}
|
|
47925
|
-
function
|
|
48804
|
+
function e8() {
|
|
47926
48805
|
try {
|
|
47927
48806
|
let e = [document.body, document.documentElement];
|
|
47928
48807
|
for (let t of e) {
|
|
@@ -47932,11 +48811,11 @@ function Z3() {
|
|
|
47932
48811
|
} catch {}
|
|
47933
48812
|
return matchMedia("(prefers-color-scheme: light)").matches ? "light" : "dark";
|
|
47934
48813
|
}
|
|
47935
|
-
var
|
|
47936
|
-
function
|
|
48814
|
+
var t8 = 130, n8 = 36, r8 = 380, i8 = 280, a8 = 720;
|
|
48815
|
+
function o8(e) {
|
|
47937
48816
|
let [t, n] = T(e.defaultOpen), [r, i] = T("right"), [a, o] = T({
|
|
47938
|
-
x: Math.max(8, window.innerWidth -
|
|
47939
|
-
y: Math.max(8, window.innerHeight -
|
|
48817
|
+
x: Math.max(8, window.innerWidth - t8 - 24),
|
|
48818
|
+
y: Math.max(8, window.innerHeight - n8 - 20)
|
|
47940
48819
|
}), [s, c] = T({
|
|
47941
48820
|
running: [],
|
|
47942
48821
|
review: []
|
|
@@ -47956,12 +48835,12 @@ function r6(e) {
|
|
|
47956
48835
|
let t = Math.floor(e / 1e3);
|
|
47957
48836
|
return `${Math.floor(t / 60)}:${String(t % 60).padStart(2, "0")}`;
|
|
47958
48837
|
}, [b, x] = T(null), S = (e) => ({
|
|
47959
|
-
x: Math.min(Math.max(8, e.x), window.innerWidth -
|
|
47960
|
-
y: Math.min(Math.max(8, e.y), window.innerHeight -
|
|
48838
|
+
x: Math.min(Math.max(8, e.x), window.innerWidth - t8 - 8),
|
|
48839
|
+
y: Math.min(Math.max(8, e.y), window.innerHeight - n8 - 8)
|
|
47961
48840
|
}), C = (e) => ({
|
|
47962
48841
|
x: Math.min(Math.max(8 - (ne() - 80), e.x), window.innerWidth - 80),
|
|
47963
48842
|
y: Math.min(Math.max(0, e.y), window.innerHeight - 80)
|
|
47964
|
-
}), [w, E] = T(!1), [k, ee] = T("cloud"), [te, A] = T(!1), [ne, re] = T(
|
|
48843
|
+
}), [w, E] = T(!1), [k, ee] = T("cloud"), [te, A] = T(!1), [ne, re] = T(r8), oe = (e) => Math.min(a8, Math.max(i8, Math.min(e, window.innerWidth - 60)));
|
|
47965
48844
|
O(() => {
|
|
47966
48845
|
let e = document.documentElement, n = t() && w();
|
|
47967
48846
|
e.style.transition = "margin 0.2s ease", e.style.marginRight = n && r() === "right" ? `${ne()}px` : "", e.style.marginLeft = n && r() === "left" ? `${ne()}px` : "";
|
|
@@ -48075,7 +48954,7 @@ function r6(e) {
|
|
|
48075
48954
|
return !t();
|
|
48076
48955
|
},
|
|
48077
48956
|
get children() {
|
|
48078
|
-
var e =
|
|
48957
|
+
var e = V6(), t = e.firstChild;
|
|
48079
48958
|
return t.$$click = () => {
|
|
48080
48959
|
ce || p() === "recording" || h().active || (f(!1), n(!0));
|
|
48081
48960
|
}, t.$$pointerdown = le, P(t, j(M, {
|
|
@@ -48085,14 +48964,14 @@ function r6(e) {
|
|
|
48085
48964
|
get fallback() {
|
|
48086
48965
|
return [
|
|
48087
48966
|
(() => {
|
|
48088
|
-
var e =
|
|
48967
|
+
var e = U6();
|
|
48089
48968
|
return e.$$click = () => {
|
|
48090
48969
|
ce || (f(!1), n(!0));
|
|
48091
|
-
}, P(e, j(
|
|
48970
|
+
}, P(e, j(N6, { size: 13 })), e;
|
|
48092
48971
|
})(),
|
|
48093
|
-
|
|
48972
|
+
W6(),
|
|
48094
48973
|
(() => {
|
|
48095
|
-
var e =
|
|
48974
|
+
var e = q6(), t = e.firstChild, n = t.nextSibling;
|
|
48096
48975
|
return e.$$click = (e) => {
|
|
48097
48976
|
e.stopPropagation(), !ce && f((e) => !e);
|
|
48098
48977
|
}, P(n, (() => {
|
|
@@ -48103,8 +48982,8 @@ function r6(e) {
|
|
|
48103
48982
|
return $e(() => !te())() && u().length > 0;
|
|
48104
48983
|
},
|
|
48105
48984
|
get children() {
|
|
48106
|
-
return [
|
|
48107
|
-
var e =
|
|
48985
|
+
return [G6(), (() => {
|
|
48986
|
+
var e = K6(), t = e.firstChild;
|
|
48108
48987
|
return P(e, () => u().length, t), e;
|
|
48109
48988
|
})()];
|
|
48110
48989
|
}
|
|
@@ -48125,17 +49004,17 @@ function r6(e) {
|
|
|
48125
49004
|
},
|
|
48126
49005
|
get fallback() {
|
|
48127
49006
|
return [
|
|
48128
|
-
|
|
49007
|
+
J6(),
|
|
48129
49008
|
(() => {
|
|
48130
|
-
var e =
|
|
49009
|
+
var e = Y6(), t = e.firstChild;
|
|
48131
49010
|
return P(e, () => Math.ceil(h().msLeft / 1e3), t), e;
|
|
48132
49011
|
})(),
|
|
48133
49012
|
(() => {
|
|
48134
|
-
var e =
|
|
49013
|
+
var e = X6(), t = e.firstChild;
|
|
48135
49014
|
return P(e, () => h().total, t), D(() => it(e, "title", Object.entries(h().byTrigger).map(([e, t]) => `${t} ${e}`).join(" · ") || "hover / open the component to record its states")), e;
|
|
48136
49015
|
})(),
|
|
48137
49016
|
(() => {
|
|
48138
|
-
var e =
|
|
49017
|
+
var e = R6();
|
|
48139
49018
|
return e.$$click = (e) => {
|
|
48140
49019
|
e.stopPropagation(), !ce && o2();
|
|
48141
49020
|
}, e;
|
|
@@ -48144,13 +49023,13 @@ function r6(e) {
|
|
|
48144
49023
|
},
|
|
48145
49024
|
get children() {
|
|
48146
49025
|
return [
|
|
48147
|
-
|
|
49026
|
+
I6(),
|
|
48148
49027
|
(() => {
|
|
48149
|
-
var e =
|
|
49028
|
+
var e = L6();
|
|
48150
49029
|
return P(e, () => y(_())), e;
|
|
48151
49030
|
})(),
|
|
48152
49031
|
(() => {
|
|
48153
|
-
var e =
|
|
49032
|
+
var e = R6();
|
|
48154
49033
|
return e.$$click = () => {
|
|
48155
49034
|
ce || eO();
|
|
48156
49035
|
}, e;
|
|
@@ -48164,17 +49043,17 @@ function r6(e) {
|
|
|
48164
49043
|
return d();
|
|
48165
49044
|
},
|
|
48166
49045
|
get children() {
|
|
48167
|
-
var e =
|
|
49046
|
+
var e = B6(), t = e.firstChild;
|
|
48168
49047
|
return P(e, j(M, {
|
|
48169
49048
|
get when() {
|
|
48170
49049
|
return u().length > 0;
|
|
48171
49050
|
},
|
|
48172
49051
|
get children() {
|
|
48173
|
-
return [
|
|
49052
|
+
return [z6(), j(We, {
|
|
48174
49053
|
get each() {
|
|
48175
49054
|
return u();
|
|
48176
49055
|
},
|
|
48177
|
-
children: (e) => j(
|
|
49056
|
+
children: (e) => j(s8, {
|
|
48178
49057
|
agent: e,
|
|
48179
49058
|
review: !0,
|
|
48180
49059
|
onOpen: de
|
|
@@ -48186,14 +49065,14 @@ function r6(e) {
|
|
|
48186
49065
|
return l().length > 0;
|
|
48187
49066
|
},
|
|
48188
49067
|
get fallback() {
|
|
48189
|
-
return
|
|
49068
|
+
return Z6();
|
|
48190
49069
|
},
|
|
48191
49070
|
get children() {
|
|
48192
49071
|
return j(We, {
|
|
48193
49072
|
get each() {
|
|
48194
49073
|
return l();
|
|
48195
49074
|
},
|
|
48196
|
-
children: (e) => j(
|
|
49075
|
+
children: (e) => j(s8, {
|
|
48197
49076
|
agent: e,
|
|
48198
49077
|
onOpen: de
|
|
48199
49078
|
})
|
|
@@ -48214,8 +49093,8 @@ function r6(e) {
|
|
|
48214
49093
|
return t();
|
|
48215
49094
|
},
|
|
48216
49095
|
get children() {
|
|
48217
|
-
var e =
|
|
48218
|
-
return t.$$pointerdown = fe, P(e, j(
|
|
49096
|
+
var e = H6(), t = e.firstChild;
|
|
49097
|
+
return t.$$pointerdown = fe, P(e, j(P6, {
|
|
48219
49098
|
onGrab: () => n(!0),
|
|
48220
49099
|
onClose: () => n(!1),
|
|
48221
49100
|
get onHeaderPointerDown() {
|
|
@@ -48243,19 +49122,19 @@ function r6(e) {
|
|
|
48243
49122
|
}
|
|
48244
49123
|
})];
|
|
48245
49124
|
}
|
|
48246
|
-
function
|
|
49125
|
+
function s8(e) {
|
|
48247
49126
|
return (() => {
|
|
48248
|
-
var t =
|
|
49127
|
+
var t = Q6(), n = t.firstChild, r = n.firstChild, i = r.nextSibling, a = i.nextSibling, o = n.nextSibling, s = o.firstChild, c = s.nextSibling;
|
|
48249
49128
|
return c.nextSibling, t.$$click = () => e.onOpen(e.agent.id), P(i, () => e.agent.identifier), P(a, () => e.agent.title), P(o, (() => {
|
|
48250
49129
|
var t = $e(() => !!e.review);
|
|
48251
49130
|
return () => t() ? "PR ready · needs review" : e.agent.stateName;
|
|
48252
|
-
})(), s), P(o, () => e.agent.delegateName, c), P(o, () =>
|
|
49131
|
+
})(), s), P(o, () => e.agent.delegateName, c), P(o, () => c8(e.agent.updatedAt), null), D((t) => dt(r, "background", e.review ? "var(--color-warn)" : e.agent.stateColor)), t;
|
|
48253
49132
|
})();
|
|
48254
49133
|
}
|
|
48255
|
-
function
|
|
49134
|
+
function c8(e) {
|
|
48256
49135
|
let t = Math.max(0, Math.floor((Date.now() - Date.parse(e)) / 1e3));
|
|
48257
49136
|
return t < 60 ? "now" : t < 3600 ? `${Math.floor(t / 60)}m` : t < 86400 ? `${Math.floor(t / 3600)}h` : `${Math.floor(t / 86400)}d`;
|
|
48258
49137
|
}
|
|
48259
49138
|
rt(["pointerdown", "click"]);
|
|
48260
49139
|
//#endregion
|
|
48261
|
-
export {
|
|
49140
|
+
export { $6 as init };
|