linear-grab 0.23.6 → 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 -295
- 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,42 +46068,42 @@ function C2(e) {
|
|
|
46031
46068
|
})).catch(() => {});
|
|
46032
46069
|
}, 1500);
|
|
46033
46070
|
}
|
|
46034
|
-
var
|
|
46035
|
-
function
|
|
46036
|
-
let t = e.mode === "live" ?
|
|
46037
|
-
t ? (t.count += 1, t.at = e.at, t.sinceInputMs = e.sinceInputMs,
|
|
46038
|
-
for (let e of
|
|
46039
|
-
|
|
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);
|
|
46040
46077
|
}
|
|
46041
|
-
function
|
|
46042
|
-
return
|
|
46078
|
+
function j2(e) {
|
|
46079
|
+
return k2.add(e), e(O2), () => void k2.delete(e);
|
|
46043
46080
|
}
|
|
46044
|
-
function
|
|
46045
|
-
|
|
46046
|
-
for (let e of
|
|
46081
|
+
function M2() {
|
|
46082
|
+
O2 = [];
|
|
46083
|
+
for (let e of k2) e(O2);
|
|
46047
46084
|
}
|
|
46048
|
-
var
|
|
46085
|
+
var N2 = !0;
|
|
46049
46086
|
try {
|
|
46050
|
-
|
|
46087
|
+
N2 = localStorage.getItem("linear-grab:css-watch") !== "0";
|
|
46051
46088
|
} catch {}
|
|
46052
|
-
var
|
|
46053
|
-
function
|
|
46054
|
-
return
|
|
46089
|
+
var P2 = /* @__PURE__ */ new Set();
|
|
46090
|
+
function F2() {
|
|
46091
|
+
return N2;
|
|
46055
46092
|
}
|
|
46056
|
-
function
|
|
46057
|
-
|
|
46093
|
+
function I2(e) {
|
|
46094
|
+
N2 = e;
|
|
46058
46095
|
try {
|
|
46059
46096
|
localStorage.setItem("linear-grab:css-watch", e ? "1" : "0");
|
|
46060
46097
|
} catch {}
|
|
46061
|
-
for (let t of
|
|
46098
|
+
for (let t of P2) t(e);
|
|
46062
46099
|
}
|
|
46063
|
-
function
|
|
46064
|
-
return
|
|
46100
|
+
function L2(e) {
|
|
46101
|
+
return P2.add(e), e(N2), () => void P2.delete(e);
|
|
46065
46102
|
}
|
|
46066
|
-
var
|
|
46067
|
-
function
|
|
46068
|
-
if (
|
|
46069
|
-
|
|
46103
|
+
var R2 = !1;
|
|
46104
|
+
function z2() {
|
|
46105
|
+
if (R2 || typeof window > "u") return;
|
|
46106
|
+
R2 = !0;
|
|
46070
46107
|
let e = 0, t = () => {
|
|
46071
46108
|
e = performance.now();
|
|
46072
46109
|
};
|
|
@@ -46080,13 +46117,15 @@ function F2() {
|
|
|
46080
46117
|
});
|
|
46081
46118
|
let n = /* @__PURE__ */ new Map(), r = /* @__PURE__ */ new Map();
|
|
46082
46119
|
window.addEventListener("transitionrun", (t) => {
|
|
46083
|
-
if (!
|
|
46120
|
+
if (!N2) return;
|
|
46084
46121
|
let i = performance.now() - e;
|
|
46085
|
-
if (i >
|
|
46122
|
+
if (i > b2) return;
|
|
46086
46123
|
let a = t.target;
|
|
46087
46124
|
if (!(a instanceof Element) || a.closest("#linear-grab-root") || a === document.documentElement || a === document.body || t.propertyName.startsWith("--")) return;
|
|
46088
|
-
let o = getComputedStyle(a), s = o.transitionProperty.split(",").map((e) => e.trim())
|
|
46089
|
-
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;
|
|
46090
46129
|
let p = r.get(a);
|
|
46091
46130
|
if (p) {
|
|
46092
46131
|
p.props.add(t.propertyName), p.duration = Math.max(p.duration, d), p.delay = Math.max(p.delay, f);
|
|
@@ -46099,12 +46138,12 @@ function F2() {
|
|
|
46099
46138
|
since: i,
|
|
46100
46139
|
timer: setTimeout(() => {
|
|
46101
46140
|
r.delete(a);
|
|
46102
|
-
let e =
|
|
46141
|
+
let e = y2(a), t = Date.now();
|
|
46103
46142
|
if (t - (n.get(e) ?? 0) < 5e3) return;
|
|
46104
46143
|
n.set(e, t);
|
|
46105
|
-
let i =
|
|
46106
|
-
|
|
46107
|
-
|
|
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({
|
|
46108
46147
|
mode: "live",
|
|
46109
46148
|
page: location.pathname,
|
|
46110
46149
|
element: e,
|
|
@@ -46118,7 +46157,7 @@ function F2() {
|
|
|
46118
46157
|
classHint: i,
|
|
46119
46158
|
easing: s ?? void 0,
|
|
46120
46159
|
jankProps: c.length ? c : void 0,
|
|
46121
|
-
suggestion:
|
|
46160
|
+
suggestion: S2(o, m.duration, m.delay, i, s, c),
|
|
46122
46161
|
at: t
|
|
46123
46162
|
});
|
|
46124
46163
|
});
|
|
@@ -46130,54 +46169,56 @@ function F2() {
|
|
|
46130
46169
|
passive: !0
|
|
46131
46170
|
});
|
|
46132
46171
|
}
|
|
46133
|
-
var
|
|
46134
|
-
async function
|
|
46135
|
-
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);
|
|
46136
46175
|
for (let n of t) {
|
|
46137
46176
|
if (n.closest("#linear-grab-root")) continue;
|
|
46138
46177
|
let t = n.getBoundingClientRect();
|
|
46139
46178
|
if (t.width < 2 && t.height < 2) continue;
|
|
46140
46179
|
let r = getComputedStyle(n);
|
|
46141
46180
|
if (r.cursor !== "pointer" && !n.matches("button, a, input, select, textarea")) continue;
|
|
46142
|
-
let i =
|
|
46143
|
-
if (
|
|
46144
|
-
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);
|
|
46145
46186
|
if (u) {
|
|
46146
46187
|
u.finding.count += 1;
|
|
46147
46188
|
continue;
|
|
46148
46189
|
}
|
|
46149
|
-
let d =
|
|
46190
|
+
let d = m2(r.transitionTimingFunction), f = p2(i);
|
|
46150
46191
|
e.set(l, {
|
|
46151
46192
|
example: n,
|
|
46152
46193
|
finding: {
|
|
46153
46194
|
mode: "audit",
|
|
46154
46195
|
page: location.pathname,
|
|
46155
|
-
element:
|
|
46196
|
+
element: y2(n),
|
|
46156
46197
|
component: null,
|
|
46157
46198
|
source: null,
|
|
46158
|
-
properties:
|
|
46159
|
-
durationMs: Math.round(Math.max(...
|
|
46160
|
-
delayMs: Math.round(Math.max(...
|
|
46199
|
+
properties: i,
|
|
46200
|
+
durationMs: Math.round(Math.max(...a, 0)),
|
|
46201
|
+
delayMs: Math.round(Math.max(...o, 0)),
|
|
46161
46202
|
count: 1,
|
|
46162
46203
|
classHint: c,
|
|
46163
46204
|
easing: d ?? void 0,
|
|
46164
46205
|
jankProps: f.length ? f : void 0,
|
|
46165
|
-
suggestion:
|
|
46206
|
+
suggestion: S2(i, Math.max(...a, 0), Math.max(...o, 0), c, d, f),
|
|
46166
46207
|
at: Date.now()
|
|
46167
46208
|
}
|
|
46168
46209
|
});
|
|
46169
46210
|
}
|
|
46170
46211
|
let n = [];
|
|
46171
46212
|
for (let { finding: t, example: r } of e.values()) {
|
|
46172
|
-
let { component: e, source: i } = await
|
|
46213
|
+
let { component: e, source: i } = await w2(r);
|
|
46173
46214
|
t.component = e, t.source = i, n.push(t);
|
|
46174
46215
|
}
|
|
46175
|
-
n.sort((e, t) => t.durationMs + t.delayMs - (e.durationMs + e.delayMs) || t.count - e.count),
|
|
46176
|
-
for (let e of
|
|
46177
|
-
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);
|
|
46178
46219
|
return n;
|
|
46179
46220
|
}
|
|
46180
|
-
function
|
|
46221
|
+
function H2(e) {
|
|
46181
46222
|
return [
|
|
46182
46223
|
"Below is a CSS-slowdown report from my running app (live-captured on real input + full-page audit).",
|
|
46183
46224
|
"Goal: ALL interaction feedback must be instant. Rules:",
|
|
@@ -46194,8 +46235,14 @@ function R2(e) {
|
|
|
46194
46235
|
"3b. Findings marked ⚠ layout/paint: NEVER transition width/height/top/left/",
|
|
46195
46236
|
" margin/padding/box-shadow — they reflow or repaint every frame. Use",
|
|
46196
46237
|
" transform: translate/scale, and animate a pseudo-element's opacity for shadows.",
|
|
46197
|
-
"3c. Findings marked ⚠ easing: never ease-in on UI
|
|
46198
|
-
" (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.",
|
|
46199
46246
|
"4. Where a finding's source looks like a generic fallback (one file:line repeated",
|
|
46200
46247
|
" for many components), locate the code by the `classes:` line instead.",
|
|
46201
46248
|
"5. Do NOT touch entry/exit animations of popovers/menus or icon micro-motion",
|
|
@@ -46206,36 +46253,702 @@ function R2(e) {
|
|
|
46206
46253
|
"",
|
|
46207
46254
|
"---",
|
|
46208
46255
|
"",
|
|
46209
|
-
|
|
46256
|
+
U2(e)
|
|
46210
46257
|
].join("\n");
|
|
46211
46258
|
}
|
|
46212
|
-
function
|
|
46259
|
+
function U2(e) {
|
|
46213
46260
|
let t = [
|
|
46214
46261
|
`# CSS slowdowns on ${location.host}${location.pathname}`,
|
|
46215
|
-
"Threshold:
|
|
46262
|
+
"Threshold: 100ms (interaction feedback should be instant).",
|
|
46216
46263
|
""
|
|
46217
46264
|
];
|
|
46218
|
-
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}`, "");
|
|
46219
46266
|
return t.join("\n");
|
|
46220
46267
|
}
|
|
46221
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
|
|
46222
46908
|
//#region src/panel/views/DesignView.tsx
|
|
46223
|
-
var
|
|
46224
|
-
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() {
|
|
46225
46911
|
try {
|
|
46226
|
-
return JSON.parse(localStorage.getItem(
|
|
46912
|
+
return JSON.parse(localStorage.getItem(_3) ?? "[]");
|
|
46227
46913
|
} catch {
|
|
46228
46914
|
return [];
|
|
46229
46915
|
}
|
|
46230
46916
|
}
|
|
46231
|
-
function
|
|
46917
|
+
function b3(e) {
|
|
46232
46918
|
try {
|
|
46233
|
-
localStorage.setItem(
|
|
46919
|
+
localStorage.setItem(_3, JSON.stringify(e.slice(0, v3)));
|
|
46234
46920
|
} catch {}
|
|
46235
46921
|
}
|
|
46236
|
-
var
|
|
46237
|
-
function
|
|
46238
|
-
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({
|
|
46239
46952
|
active: !1,
|
|
46240
46953
|
msLeft: 0,
|
|
46241
46954
|
total: 0,
|
|
@@ -46243,37 +46956,68 @@ function S4() {
|
|
|
46243
46956
|
});
|
|
46244
46957
|
ae(i2(p));
|
|
46245
46958
|
let [m, h] = T([]);
|
|
46246
|
-
ae(
|
|
46247
|
-
let [g, _] = T(
|
|
46248
|
-
ae(
|
|
46959
|
+
ae(j2(h));
|
|
46960
|
+
let [g, _] = T(F2());
|
|
46961
|
+
ae(L2(_));
|
|
46249
46962
|
let [v, y] = T(!1), [b, x] = T(!1), S = async () => {
|
|
46250
46963
|
y(!0);
|
|
46251
46964
|
try {
|
|
46252
|
-
await
|
|
46965
|
+
await V2();
|
|
46253
46966
|
} finally {
|
|
46254
46967
|
y(!1);
|
|
46255
46968
|
}
|
|
46256
46969
|
}, C = async () => {
|
|
46257
46970
|
try {
|
|
46258
|
-
await navigator.clipboard.writeText(
|
|
46971
|
+
await navigator.clipboard.writeText(U2(m())), x(!0), setTimeout(() => x(!1), 1600);
|
|
46259
46972
|
} catch {
|
|
46260
46973
|
l("Clipboard was blocked — click Copy again.");
|
|
46261
46974
|
}
|
|
46262
46975
|
}, [w, E] = T(!1), O = async () => {
|
|
46263
46976
|
try {
|
|
46264
|
-
await navigator.clipboard.writeText(
|
|
46977
|
+
await navigator.clipboard.writeText(H2(m())), E(!0), setTimeout(() => E(!1), 1600);
|
|
46265
46978
|
} catch {
|
|
46266
46979
|
l("Clipboard was blocked — click Copy again.");
|
|
46267
46980
|
}
|
|
46268
|
-
}, k = (
|
|
46269
|
-
|
|
46270
|
-
|
|
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 () => {
|
|
46271
47015
|
l(null), a("extract"), window.dispatchEvent(new CustomEvent(BZ));
|
|
46272
47016
|
try {
|
|
46273
47017
|
let t = await u2();
|
|
46274
47018
|
if (!t) return;
|
|
46275
47019
|
let n = await e2(t), i = Date.now();
|
|
46276
|
-
|
|
47020
|
+
x3.set(i, new WeakRef(t)), xe([{
|
|
46277
47021
|
id: i,
|
|
46278
47022
|
genome: n
|
|
46279
47023
|
}, ...e()]), r(i);
|
|
@@ -46282,16 +47026,16 @@ function S4() {
|
|
|
46282
47026
|
} finally {
|
|
46283
47027
|
a(null), oj("design"), window.dispatchEvent(new CustomEvent(VZ));
|
|
46284
47028
|
}
|
|
46285
|
-
},
|
|
47029
|
+
}, Ce = async (t) => {
|
|
46286
47030
|
l(null), a(t.id), window.dispatchEvent(new CustomEvent(BZ));
|
|
46287
47031
|
try {
|
|
46288
|
-
let n =
|
|
47032
|
+
let n = x3.get(t.id)?.deref() ?? null;
|
|
46289
47033
|
if (!n || !n.isConnected) {
|
|
46290
47034
|
if (n = await u2(), !n) return;
|
|
46291
|
-
|
|
47035
|
+
x3.set(t.id, new WeakRef(n));
|
|
46292
47036
|
}
|
|
46293
47037
|
let r = await c2(n, 8e3, (e) => s(Math.ceil(e / 1e3)));
|
|
46294
|
-
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 ? {
|
|
46295
47039
|
...e,
|
|
46296
47040
|
genome: {
|
|
46297
47041
|
...e.genome,
|
|
@@ -46303,37 +47047,37 @@ function S4() {
|
|
|
46303
47047
|
} finally {
|
|
46304
47048
|
a(null), s(null), oj("design"), window.dispatchEvent(new CustomEvent(VZ));
|
|
46305
47049
|
}
|
|
46306
|
-
},
|
|
47050
|
+
}, we = async (e) => {
|
|
46307
47051
|
try {
|
|
46308
47052
|
await navigator.clipboard.writeText(l2(e.genome)), d(e.id), setTimeout(() => d(null), 1600);
|
|
46309
47053
|
} catch {
|
|
46310
47054
|
l("Clipboard was blocked — click Copy again.");
|
|
46311
47055
|
}
|
|
46312
|
-
},
|
|
46313
|
-
|
|
46314
|
-
}, [
|
|
47056
|
+
}, Te = (t) => {
|
|
47057
|
+
x3.delete(t), xe(e().filter((e) => e.id !== t));
|
|
47058
|
+
}, [Ee, De] = T(!1), Oe = async () => {
|
|
46315
47059
|
try {
|
|
46316
47060
|
let t = e().map((e) => l2(e.genome)).join("\n\n---\n\n");
|
|
46317
|
-
await navigator.clipboard.writeText(t),
|
|
47061
|
+
await navigator.clipboard.writeText(t), De(!0), setTimeout(() => De(!1), 1600);
|
|
46318
47062
|
} catch {
|
|
46319
47063
|
l("Clipboard was blocked — click Copy again.");
|
|
46320
47064
|
}
|
|
46321
|
-
},
|
|
46322
|
-
|
|
47065
|
+
}, ke = () => {
|
|
47066
|
+
x3.clear(), xe([]), r(null);
|
|
46323
47067
|
};
|
|
46324
47068
|
return (() => {
|
|
46325
|
-
var t =
|
|
47069
|
+
var t = K4(), a = t.firstChild;
|
|
46326
47070
|
a.firstChild;
|
|
46327
|
-
var o = a.nextSibling, s = o.firstChild.firstChild.nextSibling;
|
|
46328
|
-
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, {
|
|
46329
47073
|
variant: "primary",
|
|
46330
47074
|
class: "h-7 shrink-0 px-2.5 text-[11.5px]",
|
|
46331
47075
|
get loading() {
|
|
46332
47076
|
return i() === "extract";
|
|
46333
47077
|
},
|
|
46334
|
-
onClick: () => void
|
|
47078
|
+
onClick: () => void Se(),
|
|
46335
47079
|
get children() {
|
|
46336
|
-
return
|
|
47080
|
+
return P4();
|
|
46337
47081
|
}
|
|
46338
47082
|
}), null), P(t, j(M, {
|
|
46339
47083
|
get when() {
|
|
@@ -46356,7 +47100,7 @@ function S4() {
|
|
|
46356
47100
|
},
|
|
46357
47101
|
get children() {
|
|
46358
47102
|
return [(() => {
|
|
46359
|
-
var t =
|
|
47103
|
+
var t = F4();
|
|
46360
47104
|
return t.firstChild, P(t, j(We, {
|
|
46361
47105
|
get each() {
|
|
46362
47106
|
return e();
|
|
@@ -46364,7 +47108,7 @@ function S4() {
|
|
|
46364
47108
|
children: (e) => {
|
|
46365
47109
|
let t = () => n() === e.id;
|
|
46366
47110
|
return (() => {
|
|
46367
|
-
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;
|
|
46368
47112
|
p.nextSibling;
|
|
46369
47113
|
var m = l.nextSibling;
|
|
46370
47114
|
return s.$$click = () => r(t() ? null : e.id), P(c, () => e.genome.title), P(l, () => e.genome.nodes.length, d), P(l, (() => {
|
|
@@ -46375,19 +47119,19 @@ function S4() {
|
|
|
46375
47119
|
return t();
|
|
46376
47120
|
},
|
|
46377
47121
|
get children() {
|
|
46378
|
-
var t =
|
|
47122
|
+
var t = X4(), n = t.firstChild, r = n.nextSibling, a = r.nextSibling;
|
|
46379
47123
|
return P(n, () => e.genome.pageUrl), P(r, j(We, {
|
|
46380
47124
|
get each() {
|
|
46381
47125
|
return e.genome.nodes;
|
|
46382
47126
|
},
|
|
46383
47127
|
children: (e) => (() => {
|
|
46384
|
-
var t =
|
|
47128
|
+
var t = $4(), n = t.firstChild;
|
|
46385
47129
|
return P(n, () => e.label, null), P(n, j(M, {
|
|
46386
47130
|
get when() {
|
|
46387
47131
|
return e.count > 1;
|
|
46388
47132
|
},
|
|
46389
47133
|
get children() {
|
|
46390
|
-
var t =
|
|
47134
|
+
var t = Q4();
|
|
46391
47135
|
return t.firstChild, P(t, () => e.count, null), t;
|
|
46392
47136
|
}
|
|
46393
47137
|
}), null), P(t, j(We, {
|
|
@@ -46395,13 +47139,13 @@ function S4() {
|
|
|
46395
47139
|
return Object.entries(e.styles);
|
|
46396
47140
|
},
|
|
46397
47141
|
children: ([t, n]) => (() => {
|
|
46398
|
-
var r =
|
|
47142
|
+
var r = t3(), i = r.firstChild;
|
|
46399
47143
|
return P(r, t, i), P(r, n, null), P(r, j(M, {
|
|
46400
47144
|
get when() {
|
|
46401
47145
|
return e.tokens[t];
|
|
46402
47146
|
},
|
|
46403
47147
|
get children() {
|
|
46404
|
-
var n =
|
|
47148
|
+
var n = e3(), r = n.firstChild.nextSibling;
|
|
46405
47149
|
return r.nextSibling, P(n, () => e.tokens[t], r), n;
|
|
46406
47150
|
}
|
|
46407
47151
|
}), null), r;
|
|
@@ -46413,18 +47157,18 @@ function S4() {
|
|
|
46413
47157
|
return e.genome.states.length > 0;
|
|
46414
47158
|
},
|
|
46415
47159
|
get children() {
|
|
46416
|
-
return [
|
|
47160
|
+
return [q4(), j(We, {
|
|
46417
47161
|
get each() {
|
|
46418
47162
|
return e.genome.states;
|
|
46419
47163
|
},
|
|
46420
47164
|
children: (e) => (() => {
|
|
46421
|
-
var t =
|
|
47165
|
+
var t = n3(), n = t.firstChild, r = n.firstChild;
|
|
46422
47166
|
return P(n, () => e.label, r), P(n, () => e.trigger, null), P(t, j(We, {
|
|
46423
47167
|
get each() {
|
|
46424
47168
|
return Object.entries(e.changed);
|
|
46425
47169
|
},
|
|
46426
47170
|
children: ([e, t]) => (() => {
|
|
46427
|
-
var n =
|
|
47171
|
+
var n = r3(), r = n.firstChild, i = r.nextSibling;
|
|
46428
47172
|
return i.nextSibling, P(n, e, r), P(n, () => t.from, i), P(n, () => t.to, null), n;
|
|
46429
47173
|
})()
|
|
46430
47174
|
}), null), t;
|
|
@@ -46444,9 +47188,9 @@ function S4() {
|
|
|
46444
47188
|
},
|
|
46445
47189
|
title: "Capture states — records hover/focus/open styles for 8s while you interact; the pill shows the timer and Stop",
|
|
46446
47190
|
"aria-label": "Capture interaction states",
|
|
46447
|
-
onClick: () => void
|
|
47191
|
+
onClick: () => void Ce(e),
|
|
46448
47192
|
get children() {
|
|
46449
|
-
return
|
|
47193
|
+
return i3();
|
|
46450
47194
|
}
|
|
46451
47195
|
});
|
|
46452
47196
|
},
|
|
@@ -46460,10 +47204,10 @@ function S4() {
|
|
|
46460
47204
|
"aria-label": "Stop recording states",
|
|
46461
47205
|
onClick: () => o2(),
|
|
46462
47206
|
get children() {
|
|
46463
|
-
return
|
|
47207
|
+
return J4();
|
|
46464
47208
|
}
|
|
46465
47209
|
}), (() => {
|
|
46466
|
-
var e =
|
|
47210
|
+
var e = Y4(), t = e.firstChild, n = t.nextSibling;
|
|
46467
47211
|
return n.nextSibling, P(e, () => Math.ceil(f().msLeft / 1e3), t), P(e, () => f().total, n), e;
|
|
46468
47212
|
})()];
|
|
46469
47213
|
}
|
|
@@ -46474,17 +47218,17 @@ function S4() {
|
|
|
46474
47218
|
return u() === e.id ? "Copied!" : "Copy spec — markdown for an agent or issue";
|
|
46475
47219
|
},
|
|
46476
47220
|
"aria-label": "Copy genome spec",
|
|
46477
|
-
onClick: () => void
|
|
47221
|
+
onClick: () => void we(e),
|
|
46478
47222
|
get children() {
|
|
46479
47223
|
return j(M, {
|
|
46480
47224
|
get when() {
|
|
46481
47225
|
return u() === e.id;
|
|
46482
47226
|
},
|
|
46483
47227
|
get fallback() {
|
|
46484
|
-
return
|
|
47228
|
+
return a3();
|
|
46485
47229
|
},
|
|
46486
47230
|
get children() {
|
|
46487
|
-
return
|
|
47231
|
+
return I4();
|
|
46488
47232
|
}
|
|
46489
47233
|
});
|
|
46490
47234
|
}
|
|
@@ -46493,9 +47237,9 @@ function S4() {
|
|
|
46493
47237
|
variant: "ghost",
|
|
46494
47238
|
title: "Delete this genome",
|
|
46495
47239
|
"aria-label": "Delete genome",
|
|
46496
|
-
onClick: () =>
|
|
47240
|
+
onClick: () => Te(e.id),
|
|
46497
47241
|
get children() {
|
|
46498
|
-
return
|
|
47242
|
+
return L4();
|
|
46499
47243
|
}
|
|
46500
47244
|
}), null), t;
|
|
46501
47245
|
}
|
|
@@ -46510,25 +47254,25 @@ function S4() {
|
|
|
46510
47254
|
}
|
|
46511
47255
|
}), null), t;
|
|
46512
47256
|
})(), (() => {
|
|
46513
|
-
var e =
|
|
47257
|
+
var e = R4();
|
|
46514
47258
|
return P(e, j(kj, {
|
|
46515
47259
|
class: "size-7 px-0",
|
|
46516
47260
|
variant: "ghost",
|
|
46517
47261
|
get title() {
|
|
46518
|
-
return
|
|
47262
|
+
return Ee() ? "Copied!" : "Copy all genomes as one markdown document";
|
|
46519
47263
|
},
|
|
46520
47264
|
"aria-label": "Copy all genomes",
|
|
46521
|
-
onClick: () => void
|
|
47265
|
+
onClick: () => void Oe(),
|
|
46522
47266
|
get children() {
|
|
46523
47267
|
return j(M, {
|
|
46524
47268
|
get when() {
|
|
46525
|
-
return
|
|
47269
|
+
return Ee();
|
|
46526
47270
|
},
|
|
46527
47271
|
get fallback() {
|
|
46528
|
-
return
|
|
47272
|
+
return a3();
|
|
46529
47273
|
},
|
|
46530
47274
|
get children() {
|
|
46531
|
-
return
|
|
47275
|
+
return I4();
|
|
46532
47276
|
}
|
|
46533
47277
|
});
|
|
46534
47278
|
}
|
|
@@ -46537,9 +47281,9 @@ function S4() {
|
|
|
46537
47281
|
variant: "ghost",
|
|
46538
47282
|
title: "Delete all saved genomes",
|
|
46539
47283
|
"aria-label": "Delete all genomes",
|
|
46540
|
-
onClick:
|
|
47284
|
+
onClick: ke,
|
|
46541
47285
|
get children() {
|
|
46542
|
-
return
|
|
47286
|
+
return L4();
|
|
46543
47287
|
}
|
|
46544
47288
|
}), null), e;
|
|
46545
47289
|
})()];
|
|
@@ -46553,17 +47297,17 @@ function S4() {
|
|
|
46553
47297
|
get "aria-label"() {
|
|
46554
47298
|
return g() ? "Pause live capture" : "Start live capture";
|
|
46555
47299
|
},
|
|
46556
|
-
onClick: () =>
|
|
47300
|
+
onClick: () => I2(!g()),
|
|
46557
47301
|
get children() {
|
|
46558
47302
|
return j(M, {
|
|
46559
47303
|
get when() {
|
|
46560
47304
|
return g();
|
|
46561
47305
|
},
|
|
46562
47306
|
get fallback() {
|
|
46563
|
-
return
|
|
47307
|
+
return o3();
|
|
46564
47308
|
},
|
|
46565
47309
|
get children() {
|
|
46566
|
-
return
|
|
47310
|
+
return z4();
|
|
46567
47311
|
}
|
|
46568
47312
|
});
|
|
46569
47313
|
}
|
|
@@ -46575,24 +47319,24 @@ function S4() {
|
|
|
46575
47319
|
},
|
|
46576
47320
|
onClick: () => void S(),
|
|
46577
47321
|
get children() {
|
|
46578
|
-
return
|
|
47322
|
+
return B4();
|
|
46579
47323
|
}
|
|
46580
47324
|
}), null), P(o, j(M, {
|
|
46581
47325
|
get when() {
|
|
46582
47326
|
return m().length > 0;
|
|
46583
47327
|
},
|
|
46584
47328
|
get fallback() {
|
|
46585
|
-
return
|
|
47329
|
+
return s3();
|
|
46586
47330
|
},
|
|
46587
47331
|
get children() {
|
|
46588
47332
|
return [(() => {
|
|
46589
|
-
var e =
|
|
47333
|
+
var e = V4();
|
|
46590
47334
|
return P(e, j(We, {
|
|
46591
47335
|
get each() {
|
|
46592
47336
|
return m();
|
|
46593
47337
|
},
|
|
46594
47338
|
children: (e) => (() => {
|
|
46595
|
-
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;
|
|
46596
47340
|
return P(r, () => e.mode === "live" ? "live" : "audit"), P(i, () => e.component ?? e.element, null), P(i, j(M, {
|
|
46597
47341
|
get when() {
|
|
46598
47342
|
return e.count > 1;
|
|
@@ -46608,7 +47352,7 @@ function S4() {
|
|
|
46608
47352
|
return e.source;
|
|
46609
47353
|
},
|
|
46610
47354
|
get children() {
|
|
46611
|
-
var t =
|
|
47355
|
+
var t = c3();
|
|
46612
47356
|
return P(t, () => e.source), t;
|
|
46613
47357
|
}
|
|
46614
47358
|
}), s), P(s, () => e.properties.join(", "), null), P(s, j(M, {
|
|
@@ -46627,7 +47371,7 @@ function S4() {
|
|
|
46627
47371
|
return e.jankProps?.length;
|
|
46628
47372
|
},
|
|
46629
47373
|
get children() {
|
|
46630
|
-
var t =
|
|
47374
|
+
var t = l3();
|
|
46631
47375
|
return t.firstChild, P(t, () => e.jankProps.join(", "), null), t;
|
|
46632
47376
|
}
|
|
46633
47377
|
}), c), P(t, j(M, {
|
|
@@ -46635,14 +47379,14 @@ function S4() {
|
|
|
46635
47379
|
return e.easing;
|
|
46636
47380
|
},
|
|
46637
47381
|
get children() {
|
|
46638
|
-
var t =
|
|
47382
|
+
var t = u3();
|
|
46639
47383
|
return t.firstChild, P(t, () => e.easing, null), t;
|
|
46640
47384
|
}
|
|
46641
47385
|
}), c), P(c, () => e.suggestion), t;
|
|
46642
47386
|
})()
|
|
46643
47387
|
})), e;
|
|
46644
47388
|
})(), (() => {
|
|
46645
|
-
var e =
|
|
47389
|
+
var e = U4();
|
|
46646
47390
|
return P(e, j(kj, {
|
|
46647
47391
|
class: "size-7 px-0",
|
|
46648
47392
|
variant: "primary",
|
|
@@ -46657,10 +47401,10 @@ function S4() {
|
|
|
46657
47401
|
return w();
|
|
46658
47402
|
},
|
|
46659
47403
|
get fallback() {
|
|
46660
|
-
return
|
|
47404
|
+
return f3();
|
|
46661
47405
|
},
|
|
46662
47406
|
get children() {
|
|
46663
|
-
return
|
|
47407
|
+
return H4();
|
|
46664
47408
|
}
|
|
46665
47409
|
});
|
|
46666
47410
|
}
|
|
@@ -46678,10 +47422,10 @@ function S4() {
|
|
|
46678
47422
|
return b();
|
|
46679
47423
|
},
|
|
46680
47424
|
get fallback() {
|
|
46681
|
-
return
|
|
47425
|
+
return a3();
|
|
46682
47426
|
},
|
|
46683
47427
|
get children() {
|
|
46684
|
-
return
|
|
47428
|
+
return I4();
|
|
46685
47429
|
}
|
|
46686
47430
|
});
|
|
46687
47431
|
}
|
|
@@ -46690,20 +47434,154 @@ function S4() {
|
|
|
46690
47434
|
variant: "ghost",
|
|
46691
47435
|
title: "Clear all findings (live + audit)",
|
|
46692
47436
|
"aria-label": "Clear all findings",
|
|
46693
|
-
onClick:
|
|
47437
|
+
onClick: M2,
|
|
46694
47438
|
get children() {
|
|
46695
|
-
return
|
|
47439
|
+
return L4();
|
|
46696
47440
|
}
|
|
46697
47441
|
}), null), e;
|
|
46698
47442
|
})()];
|
|
46699
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
|
+
}
|
|
46700
47578
|
}), null), t;
|
|
46701
47579
|
})();
|
|
46702
47580
|
}
|
|
46703
47581
|
rt(["click"]);
|
|
46704
47582
|
//#endregion
|
|
46705
47583
|
//#region src/lib/projectConfig.ts
|
|
46706
|
-
var
|
|
47584
|
+
var E3 = [
|
|
46707
47585
|
"defaultTeamId",
|
|
46708
47586
|
"defaultProjectId",
|
|
46709
47587
|
"defaultLabelIds",
|
|
@@ -46718,29 +47596,29 @@ var C4 = [
|
|
|
46718
47596
|
"issueTemplate",
|
|
46719
47597
|
"testUsername"
|
|
46720
47598
|
];
|
|
46721
|
-
function
|
|
47599
|
+
function D3(e) {
|
|
46722
47600
|
let t = {};
|
|
46723
|
-
for (let n of
|
|
47601
|
+
for (let n of E3) {
|
|
46724
47602
|
let r = e[n];
|
|
46725
47603
|
r !== void 0 && r !== "" && !(Array.isArray(r) && r.length === 0) && (t[n] = r);
|
|
46726
47604
|
}
|
|
46727
47605
|
return t;
|
|
46728
47606
|
}
|
|
46729
|
-
function
|
|
47607
|
+
function O3(e, t) {
|
|
46730
47608
|
let n = {};
|
|
46731
|
-
for (let r of
|
|
47609
|
+
for (let r of E3) e[r] === void 0 && t[r] !== void 0 && (n[r] = t[r]);
|
|
46732
47610
|
return Object.keys(n).length ? n : null;
|
|
46733
47611
|
}
|
|
46734
47612
|
//#endregion
|
|
46735
47613
|
//#region src/lib/linear/auth.ts
|
|
46736
47614
|
Br();
|
|
46737
|
-
function
|
|
47615
|
+
function k3(e) {
|
|
46738
47616
|
let t = "";
|
|
46739
47617
|
for (let n of e) t += String.fromCharCode(n);
|
|
46740
47618
|
return btoa(t).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
|
|
46741
47619
|
}
|
|
46742
|
-
async function
|
|
46743
|
-
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");
|
|
46744
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");
|
|
46745
47623
|
let s = await chrome.identity.launchWebAuthFlow({
|
|
46746
47624
|
url: o.toString(),
|
|
@@ -46768,15 +47646,15 @@ async function D4(e) {
|
|
|
46768
47646
|
linearOauthClientId: e
|
|
46769
47647
|
});
|
|
46770
47648
|
}
|
|
46771
|
-
async function
|
|
47649
|
+
async function j3() {
|
|
46772
47650
|
await Er({
|
|
46773
47651
|
linearAccessToken: void 0,
|
|
46774
47652
|
linearApiKey: void 0
|
|
46775
47653
|
});
|
|
46776
47654
|
}
|
|
46777
47655
|
Br(), Sr(), Fx(), gD();
|
|
46778
|
-
var
|
|
46779
|
-
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() {
|
|
46780
47658
|
let e = sr(), t = _r(() => ({
|
|
46781
47659
|
queryKey: ["settings"],
|
|
46782
47660
|
queryFn: Tr,
|
|
@@ -46804,13 +47682,13 @@ function p3() {
|
|
|
46804
47682
|
retry: 0
|
|
46805
47683
|
})), [l, u] = T(!1), d = async () => {
|
|
46806
47684
|
try {
|
|
46807
|
-
await navigator.clipboard.writeText(JSON.stringify(
|
|
47685
|
+
await navigator.clipboard.writeText(JSON.stringify(D3(n()), null, 2) + "\n"), u(!0), setTimeout(() => u(!1), 1800);
|
|
46808
47686
|
} catch {}
|
|
46809
47687
|
}, f = () => {
|
|
46810
47688
|
let e = c.data?.projectConfig;
|
|
46811
47689
|
if (!e) return;
|
|
46812
47690
|
let t = {};
|
|
46813
|
-
for (let n of
|
|
47691
|
+
for (let n of E3) e[n] !== void 0 && (t[n] = e[n]);
|
|
46814
47692
|
r(t);
|
|
46815
47693
|
}, p = _r(() => ({
|
|
46816
47694
|
queryKey: ["linear-labels"],
|
|
@@ -46843,7 +47721,7 @@ function p3() {
|
|
|
46843
47721
|
}
|
|
46844
47722
|
E(!0), ee("");
|
|
46845
47723
|
try {
|
|
46846
|
-
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"] });
|
|
46847
47725
|
} catch (e) {
|
|
46848
47726
|
ee(e instanceof Error ? e.message : "OAuth flow failed.");
|
|
46849
47727
|
} finally {
|
|
@@ -46854,7 +47732,7 @@ function p3() {
|
|
|
46854
47732
|
async function re() {
|
|
46855
47733
|
ne(!0);
|
|
46856
47734
|
try {
|
|
46857
|
-
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"] });
|
|
46858
47736
|
} finally {
|
|
46859
47737
|
ne(!1);
|
|
46860
47738
|
}
|
|
@@ -46870,12 +47748,12 @@ function p3() {
|
|
|
46870
47748
|
return e ? `Drafting with ${e} — ${Nx[e].fast} (fast) / ${Nx[e].best} (best)` : null;
|
|
46871
47749
|
});
|
|
46872
47750
|
return (() => {
|
|
46873
|
-
var e =
|
|
47751
|
+
var e = r6();
|
|
46874
47752
|
return P(e, j(Rj, {
|
|
46875
47753
|
title: "Workflow",
|
|
46876
47754
|
get children() {
|
|
46877
47755
|
return [(() => {
|
|
46878
|
-
var e =
|
|
47756
|
+
var e = M3();
|
|
46879
47757
|
return P(e, j(We, {
|
|
46880
47758
|
each: [{
|
|
46881
47759
|
id: "cloud",
|
|
@@ -46885,19 +47763,19 @@ function p3() {
|
|
|
46885
47763
|
label: "Local · clipboard"
|
|
46886
47764
|
}],
|
|
46887
47765
|
children: (e) => (() => {
|
|
46888
|
-
var t =
|
|
47766
|
+
var t = i6();
|
|
46889
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;
|
|
46890
47768
|
})()
|
|
46891
47769
|
})), e;
|
|
46892
|
-
})(),
|
|
47770
|
+
})(), N3()];
|
|
46893
47771
|
}
|
|
46894
47772
|
}), null), P(e, j(Rj, {
|
|
46895
47773
|
title: "Capture",
|
|
46896
47774
|
get children() {
|
|
46897
47775
|
return [(() => {
|
|
46898
|
-
var e =
|
|
47776
|
+
var e = P3(), t = e.firstChild;
|
|
46899
47777
|
return t.addEventListener("change", (e) => void r({ captureShots: e.currentTarget.checked || void 0 })), D(() => t.checked = !!n().captureShots), e;
|
|
46900
|
-
})(),
|
|
47778
|
+
})(), F3()];
|
|
46901
47779
|
}
|
|
46902
47780
|
}), null), P(e, j(Rj, {
|
|
46903
47781
|
title: "Linear",
|
|
@@ -46908,13 +47786,13 @@ function p3() {
|
|
|
46908
47786
|
},
|
|
46909
47787
|
get fallback() {
|
|
46910
47788
|
return (() => {
|
|
46911
|
-
var e =
|
|
47789
|
+
var e = c6();
|
|
46912
47790
|
return P(e, j(Lj, {
|
|
46913
47791
|
label: "Personal API key",
|
|
46914
47792
|
hint: "Create one at linear.app → Settings → API — fastest path.",
|
|
46915
47793
|
get children() {
|
|
46916
47794
|
return [(() => {
|
|
46917
|
-
var e =
|
|
47795
|
+
var e = a6();
|
|
46918
47796
|
return P(e, j(jj, {
|
|
46919
47797
|
type: "password",
|
|
46920
47798
|
placeholder: "lin_api_…",
|
|
@@ -46951,12 +47829,12 @@ function p3() {
|
|
|
46951
47829
|
}), null), P(e, j(M, {
|
|
46952
47830
|
when: xr,
|
|
46953
47831
|
get children() {
|
|
46954
|
-
return [
|
|
47832
|
+
return [o6(), j(Lj, {
|
|
46955
47833
|
label: "OAuth client ID",
|
|
46956
47834
|
get children() {
|
|
46957
47835
|
return [
|
|
46958
47836
|
(() => {
|
|
46959
|
-
var e =
|
|
47837
|
+
var e = a6();
|
|
46960
47838
|
return P(e, j(jj, {
|
|
46961
47839
|
placeholder: "your-client-id",
|
|
46962
47840
|
get value() {
|
|
@@ -46984,7 +47862,7 @@ function p3() {
|
|
|
46984
47862
|
}
|
|
46985
47863
|
}),
|
|
46986
47864
|
(() => {
|
|
46987
|
-
var e =
|
|
47865
|
+
var e = s6(), t = e.firstChild.nextSibling.nextSibling;
|
|
46988
47866
|
return P(t, ie), e;
|
|
46989
47867
|
})()
|
|
46990
47868
|
];
|
|
@@ -46995,13 +47873,13 @@ function p3() {
|
|
|
46995
47873
|
})();
|
|
46996
47874
|
},
|
|
46997
47875
|
get children() {
|
|
46998
|
-
var e =
|
|
47876
|
+
var e = L3(), t = e.firstChild;
|
|
46999
47877
|
return P(t, j(M, {
|
|
47000
47878
|
get when() {
|
|
47001
47879
|
return !a.isLoading;
|
|
47002
47880
|
},
|
|
47003
47881
|
get fallback() {
|
|
47004
|
-
return
|
|
47882
|
+
return l6();
|
|
47005
47883
|
},
|
|
47006
47884
|
get children() {
|
|
47007
47885
|
return j(M, {
|
|
@@ -47014,7 +47892,7 @@ function p3() {
|
|
|
47014
47892
|
return a.isError;
|
|
47015
47893
|
},
|
|
47016
47894
|
get fallback() {
|
|
47017
|
-
return
|
|
47895
|
+
return l6();
|
|
47018
47896
|
},
|
|
47019
47897
|
get children() {
|
|
47020
47898
|
return j(Hj, { message: "Key rejected — reconnect" });
|
|
@@ -47022,7 +47900,7 @@ function p3() {
|
|
|
47022
47900
|
});
|
|
47023
47901
|
},
|
|
47024
47902
|
get children() {
|
|
47025
|
-
var e =
|
|
47903
|
+
var e = I3(), t = e.firstChild.nextSibling, n = t.nextSibling.nextSibling;
|
|
47026
47904
|
return P(t, () => a.data.name), P(n, () => a.data.email), e;
|
|
47027
47905
|
}
|
|
47028
47906
|
});
|
|
@@ -47063,7 +47941,7 @@ function p3() {
|
|
|
47063
47941
|
return o.isLoading;
|
|
47064
47942
|
},
|
|
47065
47943
|
get children() {
|
|
47066
|
-
return [
|
|
47944
|
+
return [R3(), j(M, {
|
|
47067
47945
|
get when() {
|
|
47068
47946
|
return o.data;
|
|
47069
47947
|
},
|
|
@@ -47073,7 +47951,7 @@ function p3() {
|
|
|
47073
47951
|
return o.data;
|
|
47074
47952
|
},
|
|
47075
47953
|
children: (e) => (() => {
|
|
47076
|
-
var t =
|
|
47954
|
+
var t = u6(), r = t.firstChild, i = r.nextSibling;
|
|
47077
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;
|
|
47078
47956
|
})()
|
|
47079
47957
|
});
|
|
@@ -47097,14 +47975,14 @@ function p3() {
|
|
|
47097
47975
|
},
|
|
47098
47976
|
get children() {
|
|
47099
47977
|
return [(() => {
|
|
47100
|
-
var e =
|
|
47978
|
+
var e = z3();
|
|
47101
47979
|
return D(() => e.selected = !n().defaultProjectId), e;
|
|
47102
47980
|
})(), j(We, {
|
|
47103
47981
|
get each() {
|
|
47104
47982
|
return s.data ?? [];
|
|
47105
47983
|
},
|
|
47106
47984
|
children: (e) => (() => {
|
|
47107
|
-
var t =
|
|
47985
|
+
var t = d6();
|
|
47108
47986
|
return P(t, () => e.name), D(() => t.selected = e.id === n().defaultProjectId), D(() => t.value = e.id), t;
|
|
47109
47987
|
})()
|
|
47110
47988
|
})];
|
|
@@ -47116,7 +47994,7 @@ function p3() {
|
|
|
47116
47994
|
label: "Default labels",
|
|
47117
47995
|
hint: "Applied to every issue created from the panel.",
|
|
47118
47996
|
get children() {
|
|
47119
|
-
var e =
|
|
47997
|
+
var e = B3();
|
|
47120
47998
|
return P(e, j(We, {
|
|
47121
47999
|
get each() {
|
|
47122
48000
|
return p.data ?? [];
|
|
@@ -47124,7 +48002,7 @@ function p3() {
|
|
|
47124
48002
|
children: (e) => {
|
|
47125
48003
|
let t = () => (n().defaultLabelIds ?? []).includes(e.id);
|
|
47126
48004
|
return (() => {
|
|
47127
|
-
var i =
|
|
48005
|
+
var i = f6(), a = i.firstChild;
|
|
47128
48006
|
return i.$$click = () => {
|
|
47129
48007
|
let i = n().defaultLabelIds ?? [];
|
|
47130
48008
|
r({ defaultLabelIds: t() ? i.filter((t) => t !== e.id) : [...i, e.id] });
|
|
@@ -47141,7 +48019,7 @@ function p3() {
|
|
|
47141
48019
|
}
|
|
47142
48020
|
}),
|
|
47143
48021
|
(() => {
|
|
47144
|
-
var e =
|
|
48022
|
+
var e = V3(), t = e.firstChild;
|
|
47145
48023
|
return t.addEventListener("change", (e) => void r({ shareLinearKey: e.currentTarget.checked })), D(() => t.checked = !!n().shareLinearKey), e;
|
|
47146
48024
|
})(),
|
|
47147
48025
|
j(Lj, {
|
|
@@ -47191,7 +48069,7 @@ function p3() {
|
|
|
47191
48069
|
return m.isLoading;
|
|
47192
48070
|
},
|
|
47193
48071
|
get children() {
|
|
47194
|
-
return [
|
|
48072
|
+
return [p6(), j(M, {
|
|
47195
48073
|
get when() {
|
|
47196
48074
|
return m.data;
|
|
47197
48075
|
},
|
|
@@ -47201,7 +48079,7 @@ function p3() {
|
|
|
47201
48079
|
return m.data;
|
|
47202
48080
|
},
|
|
47203
48081
|
children: (e) => (() => {
|
|
47204
|
-
var t =
|
|
48082
|
+
var t = d6();
|
|
47205
48083
|
return P(t, () => e.displayName), D(() => t.selected = e.id === n().cursorAgentId), D(() => t.value = e.id), t;
|
|
47206
48084
|
})()
|
|
47207
48085
|
});
|
|
@@ -47211,7 +48089,7 @@ function p3() {
|
|
|
47211
48089
|
});
|
|
47212
48090
|
},
|
|
47213
48091
|
get children() {
|
|
47214
|
-
return
|
|
48092
|
+
return H3();
|
|
47215
48093
|
}
|
|
47216
48094
|
});
|
|
47217
48095
|
}
|
|
@@ -47259,7 +48137,7 @@ function p3() {
|
|
|
47259
48137
|
onBlur: (e) => {
|
|
47260
48138
|
r({ issueTemplate: e.currentTarget.value.trim() || void 0 });
|
|
47261
48139
|
}
|
|
47262
|
-
}),
|
|
48140
|
+
}), U3()];
|
|
47263
48141
|
}
|
|
47264
48142
|
}),
|
|
47265
48143
|
j(Lj, {
|
|
@@ -47316,7 +48194,7 @@ function p3() {
|
|
|
47316
48194
|
label: "Test account",
|
|
47317
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.",
|
|
47318
48196
|
get children() {
|
|
47319
|
-
var e =
|
|
48197
|
+
var e = W3();
|
|
47320
48198
|
return P(e, j(jj, {
|
|
47321
48199
|
placeholder: "Username or email (e.g. demo@yourapp.com)",
|
|
47322
48200
|
get value() {
|
|
@@ -47348,7 +48226,7 @@ function p3() {
|
|
|
47348
48226
|
title: "Panel",
|
|
47349
48227
|
get children() {
|
|
47350
48228
|
return [(() => {
|
|
47351
|
-
var e =
|
|
48229
|
+
var e = G3(), t = e.firstChild.nextSibling;
|
|
47352
48230
|
return P(t, j(We, {
|
|
47353
48231
|
each: [{
|
|
47354
48232
|
id: "overlay",
|
|
@@ -47358,7 +48236,7 @@ function p3() {
|
|
|
47358
48236
|
label: "Beside page"
|
|
47359
48237
|
}],
|
|
47360
48238
|
children: (e) => (() => {
|
|
47361
|
-
var t =
|
|
48239
|
+
var t = i6();
|
|
47362
48240
|
return t.$$click = () => void r({
|
|
47363
48241
|
panelMode: e.id,
|
|
47364
48242
|
panelPos: void 0
|
|
@@ -47366,11 +48244,11 @@ function p3() {
|
|
|
47366
48244
|
})()
|
|
47367
48245
|
})), e;
|
|
47368
48246
|
})(), (() => {
|
|
47369
|
-
var e =
|
|
48247
|
+
var e = K3(), t = e.firstChild.nextSibling;
|
|
47370
48248
|
return P(t, j(We, {
|
|
47371
48249
|
each: ["left", "right"],
|
|
47372
48250
|
children: (e) => (() => {
|
|
47373
|
-
var t =
|
|
48251
|
+
var t = i6();
|
|
47374
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;
|
|
47375
48253
|
})()
|
|
47376
48254
|
})), e;
|
|
@@ -47400,8 +48278,8 @@ function p3() {
|
|
|
47400
48278
|
}), null), P(e, j(Rj, {
|
|
47401
48279
|
title: "Project config (.lineargrab.json)",
|
|
47402
48280
|
get children() {
|
|
47403
|
-
return [
|
|
47404
|
-
var e =
|
|
48281
|
+
return [q3(), (() => {
|
|
48282
|
+
var e = Y3();
|
|
47405
48283
|
return P(e, j(M, {
|
|
47406
48284
|
get when() {
|
|
47407
48285
|
return c.data?.projectConfig;
|
|
@@ -47432,7 +48310,7 @@ function p3() {
|
|
|
47432
48310
|
},
|
|
47433
48311
|
onClick: () => void d(),
|
|
47434
48312
|
get children() {
|
|
47435
|
-
var e =
|
|
48313
|
+
var e = J3();
|
|
47436
48314
|
return P(e, () => l() ? "Copied ✓" : "Copy config"), e;
|
|
47437
48315
|
}
|
|
47438
48316
|
}), null), e;
|
|
@@ -47523,12 +48401,12 @@ function p3() {
|
|
|
47523
48401
|
});
|
|
47524
48402
|
},
|
|
47525
48403
|
get children() {
|
|
47526
|
-
return [
|
|
48404
|
+
return [X3(), j(We, {
|
|
47527
48405
|
get each() {
|
|
47528
48406
|
return ae.data ?? [];
|
|
47529
48407
|
},
|
|
47530
48408
|
children: (e) => (() => {
|
|
47531
|
-
var t =
|
|
48409
|
+
var t = m6();
|
|
47532
48410
|
return t.firstChild, P(t, () => e.name, null), D(() => t.selected = e.id === n().slackChannelId), D(() => t.value = e.id), t;
|
|
47533
48411
|
})()
|
|
47534
48412
|
})];
|
|
@@ -47579,10 +48457,10 @@ function p3() {
|
|
|
47579
48457
|
}
|
|
47580
48458
|
}),
|
|
47581
48459
|
(() => {
|
|
47582
|
-
var e =
|
|
48460
|
+
var e = Z3(), t = e.firstChild;
|
|
47583
48461
|
return t.addEventListener("change", (e) => void r({ notifyOnCreate: e.currentTarget.checked ? void 0 : !1 })), D(() => t.checked = n().notifyOnCreate !== !1), e;
|
|
47584
48462
|
})(),
|
|
47585
|
-
|
|
48463
|
+
Q3()
|
|
47586
48464
|
];
|
|
47587
48465
|
}
|
|
47588
48466
|
}), null), P(e, j(Rj, {
|
|
@@ -47620,7 +48498,7 @@ function p3() {
|
|
|
47620
48498
|
}
|
|
47621
48499
|
}),
|
|
47622
48500
|
(() => {
|
|
47623
|
-
var e =
|
|
48501
|
+
var e = $3(), t = e.firstChild.nextSibling.firstChild, i = t.nextSibling, a = i.nextSibling;
|
|
47624
48502
|
return t.$$click = () => void r({ preferredProvider: void 0 }), i.$$click = () => void r({ preferredProvider: "openai" }), a.$$click = () => void r({ preferredProvider: "anthropic" }), D((e) => {
|
|
47625
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;
|
|
47626
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;
|
|
@@ -47633,16 +48511,16 @@ function p3() {
|
|
|
47633
48511
|
}), e;
|
|
47634
48512
|
})(),
|
|
47635
48513
|
(() => {
|
|
47636
|
-
var e =
|
|
48514
|
+
var e = t6();
|
|
47637
48515
|
return P(e, j(M, {
|
|
47638
48516
|
get when() {
|
|
47639
48517
|
return se();
|
|
47640
48518
|
},
|
|
47641
48519
|
get fallback() {
|
|
47642
|
-
return
|
|
48520
|
+
return h6();
|
|
47643
48521
|
},
|
|
47644
48522
|
get children() {
|
|
47645
|
-
var e =
|
|
48523
|
+
var e = e6();
|
|
47646
48524
|
return P(e, se), e;
|
|
47647
48525
|
}
|
|
47648
48526
|
})), e;
|
|
@@ -47652,7 +48530,7 @@ function p3() {
|
|
|
47652
48530
|
}), null), P(e, j(Rj, {
|
|
47653
48531
|
title: "How it works",
|
|
47654
48532
|
get children() {
|
|
47655
|
-
return
|
|
48533
|
+
return n6();
|
|
47656
48534
|
}
|
|
47657
48535
|
}), null), e;
|
|
47658
48536
|
})();
|
|
@@ -47660,38 +48538,38 @@ function p3() {
|
|
|
47660
48538
|
rt(["click"]);
|
|
47661
48539
|
//#endregion
|
|
47662
48540
|
//#region src/lib/idbCache.ts
|
|
47663
|
-
var
|
|
48541
|
+
var _6 = "linear-grab", v6 = "queries", y6 = [
|
|
47664
48542
|
"my-issues",
|
|
47665
48543
|
"issue",
|
|
47666
48544
|
"sessions",
|
|
47667
48545
|
"teams",
|
|
47668
48546
|
"agents"
|
|
47669
48547
|
];
|
|
47670
|
-
function
|
|
48548
|
+
function b6() {
|
|
47671
48549
|
return new Promise((e) => {
|
|
47672
48550
|
try {
|
|
47673
|
-
let t = indexedDB.open(
|
|
47674
|
-
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);
|
|
47675
48553
|
} catch {
|
|
47676
48554
|
e(null);
|
|
47677
48555
|
}
|
|
47678
48556
|
});
|
|
47679
48557
|
}
|
|
47680
|
-
function
|
|
47681
|
-
return typeof e[0] == "string" &&
|
|
48558
|
+
function x6(e) {
|
|
48559
|
+
return typeof e[0] == "string" && y6.includes(e[0]);
|
|
47682
48560
|
}
|
|
47683
|
-
async function
|
|
47684
|
-
let t = await
|
|
48561
|
+
async function S6(e) {
|
|
48562
|
+
let t = await b6();
|
|
47685
48563
|
if (!t) return () => {};
|
|
47686
48564
|
await new Promise((n) => {
|
|
47687
48565
|
try {
|
|
47688
|
-
let r = t.transaction(
|
|
48566
|
+
let r = t.transaction(v6, "readonly").objectStore(v6).openCursor();
|
|
47689
48567
|
r.onsuccess = () => {
|
|
47690
48568
|
let t = r.result;
|
|
47691
48569
|
if (!t) return n();
|
|
47692
48570
|
try {
|
|
47693
48571
|
let { queryKey: n, data: r } = t.value;
|
|
47694
|
-
|
|
48572
|
+
x6(n) && e.getQueryData(n) === void 0 && e.setQueryData(n, r, { updatedAt: 0 });
|
|
47695
48573
|
} catch {}
|
|
47696
48574
|
t.continue();
|
|
47697
48575
|
}, r.onerror = () => n();
|
|
@@ -47702,14 +48580,14 @@ async function y3(e) {
|
|
|
47702
48580
|
let n = /* @__PURE__ */ new Map(), r = e.getQueryCache().subscribe((r) => {
|
|
47703
48581
|
if (r.type !== "updated" || r.action.type !== "success") return;
|
|
47704
48582
|
let { queryKey: i, queryHash: a } = r.query;
|
|
47705
|
-
if (!
|
|
48583
|
+
if (!x6(i)) return;
|
|
47706
48584
|
let o = n.get(a);
|
|
47707
48585
|
o && clearTimeout(o), n.set(a, setTimeout(() => {
|
|
47708
48586
|
n.delete(a);
|
|
47709
48587
|
try {
|
|
47710
48588
|
let n = e.getQueryData(i);
|
|
47711
48589
|
if (n === void 0) return;
|
|
47712
|
-
t.transaction(
|
|
48590
|
+
t.transaction(v6, "readwrite").objectStore(v6).put({
|
|
47713
48591
|
queryKey: i,
|
|
47714
48592
|
data: n
|
|
47715
48593
|
}, a);
|
|
@@ -47725,7 +48603,7 @@ async function y3(e) {
|
|
|
47725
48603
|
//#endregion
|
|
47726
48604
|
//#region src/panel/App.tsx
|
|
47727
48605
|
Br();
|
|
47728
|
-
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 = [
|
|
47729
48607
|
{
|
|
47730
48608
|
id: "draft",
|
|
47731
48609
|
label: "Draft"
|
|
@@ -47762,35 +48640,35 @@ var b3 = /*#__PURE__*/ N("<svg viewBox=\"0 0 100 100\"fill=currentColor aria-hid
|
|
|
47762
48640
|
id: "settings",
|
|
47763
48641
|
label: "Settings"
|
|
47764
48642
|
}
|
|
47765
|
-
],
|
|
47766
|
-
function
|
|
47767
|
-
if (
|
|
47768
|
-
|
|
48643
|
+
], k6 = /* @__PURE__ */ new Set();
|
|
48644
|
+
function A6(e, t, n) {
|
|
48645
|
+
if (k6.has(e) || typeof Notification > "u") return;
|
|
48646
|
+
k6.add(e);
|
|
47769
48647
|
let r = () => new Notification(t, { body: n });
|
|
47770
48648
|
Notification.permission === "granted" ? r() : Notification.permission === "default" && Notification.requestPermission().then((e) => e === "granted" && r());
|
|
47771
48649
|
}
|
|
47772
|
-
function
|
|
48650
|
+
function j6() {
|
|
47773
48651
|
setInterval(() => {
|
|
47774
48652
|
NO().then((e) => {
|
|
47775
48653
|
for (let t of e) {
|
|
47776
48654
|
if (t.status !== "running") continue;
|
|
47777
48655
|
let e = t.lastEventAt ?? t.startedAt;
|
|
47778
|
-
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.`);
|
|
47779
48657
|
}
|
|
47780
48658
|
}).catch(() => {}), gO().then((e) => {
|
|
47781
|
-
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.`);
|
|
47782
48660
|
}).catch(() => {});
|
|
47783
48661
|
}, 6e4);
|
|
47784
48662
|
}
|
|
47785
|
-
|
|
47786
|
-
var
|
|
48663
|
+
j6();
|
|
48664
|
+
var M6 = new gr({ defaultOptions: { queries: {
|
|
47787
48665
|
retry: 1,
|
|
47788
48666
|
refetchOnWindowFocus: !1,
|
|
47789
48667
|
staleTime: 5e3
|
|
47790
48668
|
} } });
|
|
47791
|
-
function
|
|
48669
|
+
function N6(e) {
|
|
47792
48670
|
return (() => {
|
|
47793
|
-
var t =
|
|
48671
|
+
var t = C6();
|
|
47794
48672
|
return D((n) => {
|
|
47795
48673
|
var r = e.size ?? 14, i = e.size ?? 14;
|
|
47796
48674
|
return r !== n.e && it(t, "width", n.e = r), i !== n.t && it(t, "height", n.t = i), n;
|
|
@@ -47800,36 +48678,36 @@ function A3(e) {
|
|
|
47800
48678
|
}), t;
|
|
47801
48679
|
})();
|
|
47802
48680
|
}
|
|
47803
|
-
function
|
|
48681
|
+
function P6(e) {
|
|
47804
48682
|
let [t, n] = T("draft"), r = () => {
|
|
47805
|
-
|
|
48683
|
+
M6.invalidateQueries({ queryKey: ["grab"] }), cj() === "capture" && n("capture"), e.onGrab?.();
|
|
47806
48684
|
};
|
|
47807
48685
|
return O(() => {
|
|
47808
48686
|
let e = nj();
|
|
47809
48687
|
e && n(e);
|
|
47810
48688
|
}), ie(() => {
|
|
47811
|
-
let e =
|
|
48689
|
+
let e = S6(M6), t = XZ(r), n = () => {
|
|
47812
48690
|
JO().then(y$), VO(), MO().then(async (e) => {
|
|
47813
48691
|
if (!e.projectConfig) return;
|
|
47814
|
-
let t =
|
|
48692
|
+
let t = O3(await Tr(), e.projectConfig);
|
|
47815
48693
|
t && await Er(t);
|
|
47816
48694
|
}).catch(() => {});
|
|
47817
48695
|
};
|
|
47818
48696
|
n();
|
|
47819
48697
|
let i = Mr((e) => {
|
|
47820
|
-
e === "settings" && (
|
|
48698
|
+
e === "settings" && (M6.invalidateQueries({ queryKey: ["settings"] }), n()), e === "grab" && r();
|
|
47821
48699
|
});
|
|
47822
48700
|
ae(() => {
|
|
47823
48701
|
t(), i(), e.then((e) => e());
|
|
47824
48702
|
});
|
|
47825
48703
|
}), j(cr, {
|
|
47826
|
-
client:
|
|
48704
|
+
client: M6,
|
|
47827
48705
|
get children() {
|
|
47828
|
-
var r =
|
|
47829
|
-
return i.$$pointerdown = (t) => e.onHeaderPointerDown?.(t), P(a, j(
|
|
47830
|
-
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,
|
|
47831
48709
|
children: (e) => (() => {
|
|
47832
|
-
var r =
|
|
48710
|
+
var r = D6();
|
|
47833
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;
|
|
47834
48712
|
})()
|
|
47835
48713
|
})), P(i, j(M, {
|
|
@@ -47837,7 +48715,7 @@ function j3(e) {
|
|
|
47837
48715
|
return e.onTogglePin;
|
|
47838
48716
|
},
|
|
47839
48717
|
get children() {
|
|
47840
|
-
var t =
|
|
48718
|
+
var t = w6();
|
|
47841
48719
|
return t.$$click = () => e.onTogglePin?.(), D((n) => {
|
|
47842
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"}`;
|
|
47843
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;
|
|
@@ -47852,10 +48730,10 @@ function j3(e) {
|
|
|
47852
48730
|
return e.onClose;
|
|
47853
48731
|
},
|
|
47854
48732
|
get children() {
|
|
47855
|
-
var t =
|
|
48733
|
+
var t = T6();
|
|
47856
48734
|
return t.$$click = () => e.onClose?.(), t;
|
|
47857
48735
|
}
|
|
47858
|
-
}), 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) => {
|
|
47859
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";
|
|
47860
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;
|
|
47861
48739
|
}, {
|
|
@@ -47876,16 +48754,16 @@ function j3(e) {
|
|
|
47876
48754
|
rt(["pointerdown", "click"]);
|
|
47877
48755
|
//#endregion
|
|
47878
48756
|
//#region src/styles/app.css?inline
|
|
47879
|
-
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}}";
|
|
47880
48758
|
//#endregion
|
|
47881
48759
|
//#region src/page/index.tsx
|
|
47882
48760
|
Br();
|
|
47883
|
-
var
|
|
47884
|
-
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 = {}) {
|
|
47885
48763
|
if (typeof window > "u" || window.__LINEAR_GRAB_PAGE__) return;
|
|
47886
48764
|
window.__LINEAR_GRAB_PAGE__ = !0;
|
|
47887
48765
|
let t = () => {
|
|
47888
|
-
lk(),
|
|
48766
|
+
lk(), z2(), JZ();
|
|
47889
48767
|
let t = document.createElement("div");
|
|
47890
48768
|
t.id = "linear-grab-root", document.body.appendChild(t);
|
|
47891
48769
|
let n = (e) => {
|
|
@@ -47913,17 +48791,17 @@ function X3(e = {}) {
|
|
|
47913
48791
|
"keypress"
|
|
47914
48792
|
]) window.addEventListener(e, n, { capture: !0 });
|
|
47915
48793
|
let r = t.attachShadow({ mode: "open" }), i = document.createElement("style");
|
|
47916
|
-
i.textContent =
|
|
48794
|
+
i.textContent = F6, r.appendChild(i);
|
|
47917
48795
|
let a = document.createElement("div");
|
|
47918
48796
|
r.appendChild(a);
|
|
47919
|
-
let o = () => a.setAttribute("data-theme",
|
|
47920
|
-
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() {
|
|
47921
48799
|
return e.defaultOpen ?? !1;
|
|
47922
48800
|
} }), a);
|
|
47923
48801
|
};
|
|
47924
48802
|
document.body ? t() : document.addEventListener("DOMContentLoaded", t, { once: !0 });
|
|
47925
48803
|
}
|
|
47926
|
-
function
|
|
48804
|
+
function e8() {
|
|
47927
48805
|
try {
|
|
47928
48806
|
let e = [document.body, document.documentElement];
|
|
47929
48807
|
for (let t of e) {
|
|
@@ -47933,11 +48811,11 @@ function Z3() {
|
|
|
47933
48811
|
} catch {}
|
|
47934
48812
|
return matchMedia("(prefers-color-scheme: light)").matches ? "light" : "dark";
|
|
47935
48813
|
}
|
|
47936
|
-
var
|
|
47937
|
-
function
|
|
48814
|
+
var t8 = 130, n8 = 36, r8 = 380, i8 = 280, a8 = 720;
|
|
48815
|
+
function o8(e) {
|
|
47938
48816
|
let [t, n] = T(e.defaultOpen), [r, i] = T("right"), [a, o] = T({
|
|
47939
|
-
x: Math.max(8, window.innerWidth -
|
|
47940
|
-
y: Math.max(8, window.innerHeight -
|
|
48817
|
+
x: Math.max(8, window.innerWidth - t8 - 24),
|
|
48818
|
+
y: Math.max(8, window.innerHeight - n8 - 20)
|
|
47941
48819
|
}), [s, c] = T({
|
|
47942
48820
|
running: [],
|
|
47943
48821
|
review: []
|
|
@@ -47957,12 +48835,12 @@ function r6(e) {
|
|
|
47957
48835
|
let t = Math.floor(e / 1e3);
|
|
47958
48836
|
return `${Math.floor(t / 60)}:${String(t % 60).padStart(2, "0")}`;
|
|
47959
48837
|
}, [b, x] = T(null), S = (e) => ({
|
|
47960
|
-
x: Math.min(Math.max(8, e.x), window.innerWidth -
|
|
47961
|
-
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)
|
|
47962
48840
|
}), C = (e) => ({
|
|
47963
48841
|
x: Math.min(Math.max(8 - (ne() - 80), e.x), window.innerWidth - 80),
|
|
47964
48842
|
y: Math.min(Math.max(0, e.y), window.innerHeight - 80)
|
|
47965
|
-
}), [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)));
|
|
47966
48844
|
O(() => {
|
|
47967
48845
|
let e = document.documentElement, n = t() && w();
|
|
47968
48846
|
e.style.transition = "margin 0.2s ease", e.style.marginRight = n && r() === "right" ? `${ne()}px` : "", e.style.marginLeft = n && r() === "left" ? `${ne()}px` : "";
|
|
@@ -48076,7 +48954,7 @@ function r6(e) {
|
|
|
48076
48954
|
return !t();
|
|
48077
48955
|
},
|
|
48078
48956
|
get children() {
|
|
48079
|
-
var e =
|
|
48957
|
+
var e = V6(), t = e.firstChild;
|
|
48080
48958
|
return t.$$click = () => {
|
|
48081
48959
|
ce || p() === "recording" || h().active || (f(!1), n(!0));
|
|
48082
48960
|
}, t.$$pointerdown = le, P(t, j(M, {
|
|
@@ -48086,14 +48964,14 @@ function r6(e) {
|
|
|
48086
48964
|
get fallback() {
|
|
48087
48965
|
return [
|
|
48088
48966
|
(() => {
|
|
48089
|
-
var e =
|
|
48967
|
+
var e = U6();
|
|
48090
48968
|
return e.$$click = () => {
|
|
48091
48969
|
ce || (f(!1), n(!0));
|
|
48092
|
-
}, P(e, j(
|
|
48970
|
+
}, P(e, j(N6, { size: 13 })), e;
|
|
48093
48971
|
})(),
|
|
48094
|
-
|
|
48972
|
+
W6(),
|
|
48095
48973
|
(() => {
|
|
48096
|
-
var e =
|
|
48974
|
+
var e = q6(), t = e.firstChild, n = t.nextSibling;
|
|
48097
48975
|
return e.$$click = (e) => {
|
|
48098
48976
|
e.stopPropagation(), !ce && f((e) => !e);
|
|
48099
48977
|
}, P(n, (() => {
|
|
@@ -48104,8 +48982,8 @@ function r6(e) {
|
|
|
48104
48982
|
return $e(() => !te())() && u().length > 0;
|
|
48105
48983
|
},
|
|
48106
48984
|
get children() {
|
|
48107
|
-
return [
|
|
48108
|
-
var e =
|
|
48985
|
+
return [G6(), (() => {
|
|
48986
|
+
var e = K6(), t = e.firstChild;
|
|
48109
48987
|
return P(e, () => u().length, t), e;
|
|
48110
48988
|
})()];
|
|
48111
48989
|
}
|
|
@@ -48126,17 +49004,17 @@ function r6(e) {
|
|
|
48126
49004
|
},
|
|
48127
49005
|
get fallback() {
|
|
48128
49006
|
return [
|
|
48129
|
-
|
|
49007
|
+
J6(),
|
|
48130
49008
|
(() => {
|
|
48131
|
-
var e =
|
|
49009
|
+
var e = Y6(), t = e.firstChild;
|
|
48132
49010
|
return P(e, () => Math.ceil(h().msLeft / 1e3), t), e;
|
|
48133
49011
|
})(),
|
|
48134
49012
|
(() => {
|
|
48135
|
-
var e =
|
|
49013
|
+
var e = X6(), t = e.firstChild;
|
|
48136
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;
|
|
48137
49015
|
})(),
|
|
48138
49016
|
(() => {
|
|
48139
|
-
var e =
|
|
49017
|
+
var e = R6();
|
|
48140
49018
|
return e.$$click = (e) => {
|
|
48141
49019
|
e.stopPropagation(), !ce && o2();
|
|
48142
49020
|
}, e;
|
|
@@ -48145,13 +49023,13 @@ function r6(e) {
|
|
|
48145
49023
|
},
|
|
48146
49024
|
get children() {
|
|
48147
49025
|
return [
|
|
48148
|
-
|
|
49026
|
+
I6(),
|
|
48149
49027
|
(() => {
|
|
48150
|
-
var e =
|
|
49028
|
+
var e = L6();
|
|
48151
49029
|
return P(e, () => y(_())), e;
|
|
48152
49030
|
})(),
|
|
48153
49031
|
(() => {
|
|
48154
|
-
var e =
|
|
49032
|
+
var e = R6();
|
|
48155
49033
|
return e.$$click = () => {
|
|
48156
49034
|
ce || eO();
|
|
48157
49035
|
}, e;
|
|
@@ -48165,17 +49043,17 @@ function r6(e) {
|
|
|
48165
49043
|
return d();
|
|
48166
49044
|
},
|
|
48167
49045
|
get children() {
|
|
48168
|
-
var e =
|
|
49046
|
+
var e = B6(), t = e.firstChild;
|
|
48169
49047
|
return P(e, j(M, {
|
|
48170
49048
|
get when() {
|
|
48171
49049
|
return u().length > 0;
|
|
48172
49050
|
},
|
|
48173
49051
|
get children() {
|
|
48174
|
-
return [
|
|
49052
|
+
return [z6(), j(We, {
|
|
48175
49053
|
get each() {
|
|
48176
49054
|
return u();
|
|
48177
49055
|
},
|
|
48178
|
-
children: (e) => j(
|
|
49056
|
+
children: (e) => j(s8, {
|
|
48179
49057
|
agent: e,
|
|
48180
49058
|
review: !0,
|
|
48181
49059
|
onOpen: de
|
|
@@ -48187,14 +49065,14 @@ function r6(e) {
|
|
|
48187
49065
|
return l().length > 0;
|
|
48188
49066
|
},
|
|
48189
49067
|
get fallback() {
|
|
48190
|
-
return
|
|
49068
|
+
return Z6();
|
|
48191
49069
|
},
|
|
48192
49070
|
get children() {
|
|
48193
49071
|
return j(We, {
|
|
48194
49072
|
get each() {
|
|
48195
49073
|
return l();
|
|
48196
49074
|
},
|
|
48197
|
-
children: (e) => j(
|
|
49075
|
+
children: (e) => j(s8, {
|
|
48198
49076
|
agent: e,
|
|
48199
49077
|
onOpen: de
|
|
48200
49078
|
})
|
|
@@ -48215,8 +49093,8 @@ function r6(e) {
|
|
|
48215
49093
|
return t();
|
|
48216
49094
|
},
|
|
48217
49095
|
get children() {
|
|
48218
|
-
var e =
|
|
48219
|
-
return t.$$pointerdown = fe, P(e, j(
|
|
49096
|
+
var e = H6(), t = e.firstChild;
|
|
49097
|
+
return t.$$pointerdown = fe, P(e, j(P6, {
|
|
48220
49098
|
onGrab: () => n(!0),
|
|
48221
49099
|
onClose: () => n(!1),
|
|
48222
49100
|
get onHeaderPointerDown() {
|
|
@@ -48244,19 +49122,19 @@ function r6(e) {
|
|
|
48244
49122
|
}
|
|
48245
49123
|
})];
|
|
48246
49124
|
}
|
|
48247
|
-
function
|
|
49125
|
+
function s8(e) {
|
|
48248
49126
|
return (() => {
|
|
48249
|
-
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;
|
|
48250
49128
|
return c.nextSibling, t.$$click = () => e.onOpen(e.agent.id), P(i, () => e.agent.identifier), P(a, () => e.agent.title), P(o, (() => {
|
|
48251
49129
|
var t = $e(() => !!e.review);
|
|
48252
49130
|
return () => t() ? "PR ready · needs review" : e.agent.stateName;
|
|
48253
|
-
})(), 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;
|
|
48254
49132
|
})();
|
|
48255
49133
|
}
|
|
48256
|
-
function
|
|
49134
|
+
function c8(e) {
|
|
48257
49135
|
let t = Math.max(0, Math.floor((Date.now() - Date.parse(e)) / 1e3));
|
|
48258
49136
|
return t < 60 ? "now" : t < 3600 ? `${Math.floor(t / 60)}m` : t < 86400 ? `${Math.floor(t / 3600)}h` : `${Math.floor(t / 86400)}d`;
|
|
48259
49137
|
}
|
|
48260
49138
|
rt(["pointerdown", "click"]);
|
|
48261
49139
|
//#endregion
|
|
48262
|
-
export {
|
|
49140
|
+
export { $6 as init };
|