@polishd/next 0.2.3-dev.4 → 0.2.3-dev.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +63 -0
- package/README.md +12 -5
- package/bin/init.mjs +4 -1
- package/dist/ai/actions.d.ts +7 -1
- package/dist/ai/actions.d.ts.map +1 -1
- package/dist/ai/actions.js +10 -1
- package/dist/ai/actions.js.map +1 -1
- package/dist/ai/design.d.ts +5 -1
- package/dist/ai/design.d.ts.map +1 -1
- package/dist/ai/design.js +21 -4
- package/dist/ai/design.js.map +1 -1
- package/dist/ai/issues.d.ts +22 -11
- package/dist/ai/issues.d.ts.map +1 -1
- package/dist/ai/issues.js +102 -43
- package/dist/ai/issues.js.map +1 -1
- package/dist/ai/types.d.ts +3 -0
- package/dist/ai/types.d.ts.map +1 -1
- package/dist/dashboard/design-review-card.d.ts +3 -1
- package/dist/dashboard/design-review-card.d.ts.map +1 -1
- package/dist/dashboard/design-review-card.js +14 -6
- package/dist/dashboard/design-review-card.js.map +1 -1
- package/dist/dashboard/design.d.ts.map +1 -1
- package/dist/dashboard/design.js +75 -17
- package/dist/dashboard/design.js.map +1 -1
- package/dist/dashboard/file-bug-button.d.ts +14 -0
- package/dist/dashboard/file-bug-button.d.ts.map +1 -0
- package/dist/dashboard/file-bug-button.js +37 -0
- package/dist/dashboard/file-bug-button.js.map +1 -0
- package/dist/dashboard/snapshot-actions.d.ts +15 -5
- package/dist/dashboard/snapshot-actions.d.ts.map +1 -1
- package/dist/dashboard/snapshot-actions.js +69 -24
- package/dist/dashboard/snapshot-actions.js.map +1 -1
- package/dist/dashboard/snapshots.d.ts.map +1 -1
- package/dist/dashboard/snapshots.js +58 -8
- package/dist/dashboard/snapshots.js.map +1 -1
- package/dist/dashboard/summary.d.ts.map +1 -1
- package/dist/dashboard/summary.js +8 -36
- package/dist/dashboard/summary.js.map +1 -1
- package/dist/dashboard/ui.d.ts +1 -0
- package/dist/dashboard/ui.d.ts.map +1 -1
- package/dist/dashboard/ui.js +1 -0
- package/dist/dashboard/ui.js.map +1 -1
- package/dist/dashboard/value-preview.d.ts +47 -0
- package/dist/dashboard/value-preview.d.ts.map +1 -0
- package/dist/dashboard/value-preview.js +138 -0
- package/dist/dashboard/value-preview.js.map +1 -0
- package/dist/dashboard.css +170 -50
- package/dist/server/snapshots.d.ts +69 -10
- package/dist/server/snapshots.d.ts.map +1 -1
- package/dist/server/snapshots.js +407 -158
- package/dist/server/snapshots.js.map +1 -1
- package/dist/server/value-previews.d.ts +47 -0
- package/dist/server/value-previews.d.ts.map +1 -0
- package/dist/server/value-previews.js +313 -0
- package/dist/server/value-previews.js.map +1 -0
- package/dist/shared/design-values.d.ts +71 -0
- package/dist/shared/design-values.d.ts.map +1 -0
- package/dist/shared/design-values.js +98 -0
- package/dist/shared/design-values.js.map +1 -0
- package/docs/SETUP.md +10 -0
- package/package.json +1 -1
package/dist/dashboard/design.js
CHANGED
|
@@ -1,12 +1,59 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { designValueKey } from "../shared/design-values";
|
|
2
3
|
import DesignReviewCard, { RefreshMetricsButton } from "./design-review-card";
|
|
3
4
|
import SnapshotsCard from "./snapshots";
|
|
4
5
|
import { Annotated, ColorToken, ContrastMeter, contrastPercent } from "./design-tokens";
|
|
5
6
|
import OverflowRow from "./overflow-row";
|
|
6
7
|
import ShowMore from "./show-more";
|
|
7
8
|
import { border, card, divider, labelCls as label } from "./ui";
|
|
9
|
+
import ValuePreview from "./value-preview";
|
|
8
10
|
/** Rows shown before a list collapses behind "Show more". */
|
|
9
11
|
const VISIBLE_ROWS = 5;
|
|
12
|
+
/**
|
|
13
|
+
* Index the snapshots' value pictures. A value's newest picture wins, from
|
|
14
|
+
* whichever snapshot took it — an older picture of a value that's still
|
|
15
|
+
* flagged still shows where it lived. Without one, the newest snapshot's
|
|
16
|
+
* "looked and didn't find it" is the next most useful thing to say.
|
|
17
|
+
*/
|
|
18
|
+
function previewIndex(snapshots) {
|
|
19
|
+
const pictured = new Map();
|
|
20
|
+
for (const s of snapshots) {
|
|
21
|
+
for (const p of s.previews ?? []) {
|
|
22
|
+
if (pictured.has(p.key))
|
|
23
|
+
continue;
|
|
24
|
+
pictured.set(p.key, {
|
|
25
|
+
snapshotId: s.id,
|
|
26
|
+
file: p.file,
|
|
27
|
+
route: p.route,
|
|
28
|
+
device: p.device,
|
|
29
|
+
theme: p.theme,
|
|
30
|
+
capturedAt: s.capturedAt,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
const latest = snapshots[0];
|
|
35
|
+
const missed = new Set(latest?.previewMisses ?? []);
|
|
36
|
+
return (ref) => {
|
|
37
|
+
const key = designValueKey(ref);
|
|
38
|
+
const preview = pictured.get(key);
|
|
39
|
+
if (preview)
|
|
40
|
+
return { kind: "pictured", preview };
|
|
41
|
+
if (latest && missed.has(key))
|
|
42
|
+
return { kind: "missed", capturedAt: latest.capturedAt };
|
|
43
|
+
return { kind: "none", hasSnapshots: snapshots.length > 0 };
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* A value's markup, wrapped in its hover card when it's flagged — one-off or
|
|
48
|
+
* off-grid — and rendered as a plain box otherwise.
|
|
49
|
+
*/
|
|
50
|
+
function Flaggable({ flagged, value, label: valueLabel, pages, previews, className, flaggedClassName, children, }) {
|
|
51
|
+
if (!flagged)
|
|
52
|
+
return _jsx("div", { className: className, children: children });
|
|
53
|
+
return (_jsx(ValuePreview, { label: valueLabel, pages: pages, state: previews(value), className: `${className} ${flaggedClassName}`, children: children }));
|
|
54
|
+
}
|
|
55
|
+
/** Rows highlight on hover and keyboard focus alike. */
|
|
56
|
+
const FLAGGED_ROW = "transition-colors hover:bg-[#111] focus-visible:bg-[#111]";
|
|
10
57
|
function OutlierBadge({ text = "one-off" }) {
|
|
11
58
|
return (_jsx("span", { className: "rounded px-1.5 py-0.5 text-[9px] font-semibold uppercase tracking-wider bg-amber-950 text-amber-400", children: text }));
|
|
12
59
|
}
|
|
@@ -28,18 +75,18 @@ function Section({ title, tip, children }) {
|
|
|
28
75
|
return (_jsxs("section", { className: "mb-8", children: [_jsxs("div", { className: `mb-3 flex items-baseline gap-2 ${label}`, children: [title, tip && _jsx("span", { className: "normal-case tracking-normal text-[11px] font-normal text-[#444]", children: tip })] }), children] }));
|
|
29
76
|
}
|
|
30
77
|
// ── Typography ───────────────────────────────────────────────────────────────
|
|
31
|
-
function FontRow({ f, first }) {
|
|
32
|
-
return (_jsxs("
|
|
78
|
+
function FontRow({ f, first, previews, }) {
|
|
79
|
+
return (_jsxs(Flaggable, { flagged: f.outlier, value: { kind: "font", family: f.family, sizePx: f.sizePx, weight: f.weight }, label: `${f.sizePx}px / ${f.weight}`, pages: f.pages, previews: previews, className: `flex flex-wrap items-baseline gap-x-4 gap-y-1 px-4 py-3 sm:px-5 ${first ? "" : divider}`, flaggedClassName: FLAGGED_ROW, children: [_jsx("span", { className: "min-w-0 flex-1 truncate text-white", style: {
|
|
33
80
|
fontFamily: `"${f.family}", ui-sans-serif, system-ui, sans-serif`,
|
|
34
81
|
fontSize: `${Math.min(f.sizePx, 34)}px`,
|
|
35
82
|
fontWeight: f.weight,
|
|
36
83
|
lineHeight: 1.25,
|
|
37
84
|
}, children: f.sample || "The quick brown fox jumps over the lazy dog" }), _jsxs("span", { className: "flex shrink-0 items-center gap-1.5 text-[11px] tabular-nums text-[#666]", children: [_jsxs("span", { className: "text-[#aaa]", children: [f.sizePx, "px / ", f.weight] }), "\u00B7 ", f.count.toLocaleString(), " uses \u00B7 ", f.pages.length, " ", f.pages.length === 1 ? "page" : "pages", f.tags.length > 0 && _jsxs("span", { className: "text-[#444]", children: ["\u00B7 ", f.tags.join(", ")] }), f.outlier && _jsx(OutlierBadge, {})] })] }));
|
|
38
85
|
}
|
|
39
|
-
function TypographySection({ data }) {
|
|
86
|
+
function TypographySection({ data, previews }) {
|
|
40
87
|
const visible = data.fonts.slice(0, VISIBLE_ROWS);
|
|
41
88
|
const overflow = data.fonts.slice(VISIBLE_ROWS, 40);
|
|
42
|
-
return (_jsx(Section, { title: "Typography", tip: "\u2014 every family / size / weight combination rendered on the site, most used first.", children: _jsxs("div", { className: `${card} overflow-hidden`, children: [_jsx(SectionFlags, { flags: data.flags, section: "typography" }), data.families.length > 0 && (_jsx("div", { className: "flex flex-wrap items-center gap-2 px-4 pt-4 sm:px-5", children: data.families.map((f) => (_jsxs("span", { className: "rounded-full border border-[#2e2e2e] px-2.5 py-1 text-[11px] text-[#aaa]", children: [f.family, " ", _jsxs("span", { className: "text-[#555]", children: ["\u00B7 ", f.count.toLocaleString(), " uses"] })] }, f.family))) })), _jsxs("div", { className: "mt-2", children: [visible.map((f, i) => (_jsx(FontRow, { f: f, first: i === 0 }, `${f.family}|${f.sizePx}|${f.weight}`))), _jsx(ShowMore, { count: overflow.length, label: "type styles", children: overflow.map((f) => (_jsx(FontRow, { f: f, first: false }, `${f.family}|${f.sizePx}|${f.weight}`))) })] })] }) }));
|
|
89
|
+
return (_jsx(Section, { title: "Typography", tip: "\u2014 every family / size / weight combination rendered on the site, most used first. Hover a one-off to see where it renders.", children: _jsxs("div", { className: `${card} overflow-hidden`, children: [_jsx(SectionFlags, { flags: data.flags, section: "typography" }), data.families.length > 0 && (_jsx("div", { className: "flex flex-wrap items-center gap-2 px-4 pt-4 sm:px-5", children: data.families.map((f) => (_jsxs("span", { className: "rounded-full border border-[#2e2e2e] px-2.5 py-1 text-[11px] text-[#aaa]", children: [f.family, " ", _jsxs("span", { className: "text-[#555]", children: ["\u00B7 ", f.count.toLocaleString(), " uses"] })] }, f.family))) })), _jsxs("div", { className: "mt-2", children: [visible.map((f, i) => (_jsx(FontRow, { f: f, first: i === 0, previews: previews }, `${f.family}|${f.sizePx}|${f.weight}`))), _jsx(ShowMore, { count: overflow.length, label: "type styles", children: overflow.map((f) => (_jsx(FontRow, { f: f, first: false, previews: previews }, `${f.family}|${f.sizePx}|${f.weight}`))) })] })] }) }));
|
|
43
90
|
}
|
|
44
91
|
// ── Palette ──────────────────────────────────────────────────────────────────
|
|
45
92
|
function roleLabel(roles) {
|
|
@@ -52,13 +99,23 @@ function roleLabel(roles) {
|
|
|
52
99
|
parts.push("border");
|
|
53
100
|
return parts.join(" · ");
|
|
54
101
|
}
|
|
55
|
-
function
|
|
56
|
-
|
|
102
|
+
function colorRef(c) {
|
|
103
|
+
const roles = ["text", "background", "border"].filter((r) => c.roles[r] > 0);
|
|
104
|
+
return { kind: "color", hex: c.hex, roles: [...roles] };
|
|
105
|
+
}
|
|
106
|
+
function ColorChip({ c, previews }) {
|
|
107
|
+
const chip = "flex items-center gap-1.5 rounded-full border border-[#2e2e2e] py-1 pl-1.5 pr-2.5";
|
|
108
|
+
const body = (_jsxs(_Fragment, { children: [_jsx("span", { className: "h-4 w-4 rounded-full border border-[#2e2e2e]", style: { backgroundColor: c.hex } }), _jsx("span", { className: "font-mono text-[10px] text-[#999]", children: c.hex }), c.outlier && _jsx(OutlierBadge, {})] }));
|
|
109
|
+
// A flagged chip's hover card carries everything the tooltip would.
|
|
110
|
+
if (c.outlier) {
|
|
111
|
+
return (_jsx(ValuePreview, { label: c.hex, pages: c.pages, state: previews(colorRef(c)), className: `${chip} transition-colors hover:border-[#555] focus-visible:border-[#777]`, children: body }));
|
|
112
|
+
}
|
|
113
|
+
return (_jsx("span", { className: chip, title: `${c.hex} · ${c.pct}% · ${roleLabel(c.roles)} · ${c.pages.length} page(s)`, children: body }));
|
|
57
114
|
}
|
|
58
|
-
function PaletteSection({ data }) {
|
|
115
|
+
function PaletteSection({ data, previews }) {
|
|
59
116
|
const primary = data.colors.slice(0, 6);
|
|
60
117
|
const chips = data.colors.slice(6, 48);
|
|
61
|
-
return (_jsx(Section, { title: "Color palette", tip: "\u2014 the colors your pages actually paint, weighted by how much of the UI they cover.", children: _jsxs("div", { className: `${card} overflow-hidden pb-4`, children: [_jsx(SectionFlags, { flags: data.flags, section: "color" }), primary.length > 0 && (_jsx("div", { className: "grid grid-cols-3 gap-3 px-4 pt-4 sm:grid-cols-6 sm:px-5", children: primary.map((c) => (_jsxs(
|
|
118
|
+
return (_jsx(Section, { title: "Color palette", tip: "\u2014 the colors your pages actually paint, weighted by how much of the UI they cover. Hover a one-off to see where it renders.", children: _jsxs("div", { className: `${card} overflow-hidden pb-4`, children: [_jsx(SectionFlags, { flags: data.flags, section: "color" }), primary.length > 0 && (_jsx("div", { className: "grid grid-cols-3 gap-3 px-4 pt-4 sm:grid-cols-6 sm:px-5", children: primary.map((c) => (_jsxs(Flaggable, { flagged: c.outlier, value: colorRef(c), label: c.hex, pages: c.pages, previews: previews, className: "min-w-0", flaggedClassName: "rounded-md focus-visible:ring-1 focus-visible:ring-amber-500/60", children: [_jsx("div", { className: "h-16 w-full rounded-md border border-[#2e2e2e]", style: { backgroundColor: c.hex } }), _jsx("div", { className: "mt-1.5 truncate font-mono text-[11px] text-[#ccc]", children: c.hex }), _jsxs("div", { className: "flex flex-wrap items-center gap-1 text-[10px] text-[#555]", children: [_jsxs("span", { className: "tabular-nums", children: [c.pct, "%"] }), _jsxs("span", { children: ["\u00B7 ", roleLabel(c.roles)] }), c.outlier && _jsx(OutlierBadge, {})] })] }, c.hex))) })), chips.length > 0 && (_jsx(OverflowRow, { label: "colors", className: "mt-4 px-4 sm:px-5", rowClassName: "flex flex-wrap gap-2", children: chips.map((c) => (_jsx(ColorChip, { c: c, previews: previews }, c.hex))) }))] }) }));
|
|
62
119
|
}
|
|
63
120
|
// ── Contrast ─────────────────────────────────────────────────────────────────
|
|
64
121
|
function ContrastRow({ p, first }) {
|
|
@@ -73,28 +130,28 @@ function ContrastSection({ data }) {
|
|
|
73
130
|
return (_jsx(Section, { title: "Contrast", tip: "\u2014 every text-on-background pairing measured against WCAG AA.", children: _jsx("div", { className: `${card} overflow-hidden`, children: failing.length === 0 ? (_jsxs("p", { className: "px-4 py-4 text-[13px] text-emerald-500 sm:px-5", children: ["All ", data.contrast.length, " measured text/background pairs meet WCAG AA. Nice."] })) : (_jsxs("div", { className: "mt-2", children: [visible.map((p, i) => (_jsx(ContrastRow, { p: p, first: i === 0 }, `${p.fg}|${p.bg}`))), _jsx(ShowMore, { count: overflow.length, label: "failing pairs", children: overflow.map((p) => (_jsx(ContrastRow, { p: p, first: false }, `${p.fg}|${p.bg}`))) })] })) }) }));
|
|
74
131
|
}
|
|
75
132
|
// ── Radii & spacing ──────────────────────────────────────────────────────────
|
|
76
|
-
function RadiusChip({ r }) {
|
|
77
|
-
return (_jsxs("
|
|
133
|
+
function RadiusChip({ r, previews }) {
|
|
134
|
+
return (_jsxs(Flaggable, { flagged: r.outlier, value: { kind: "radius", value: r.value }, label: `${r.value} radius`, pages: r.pages, previews: previews, className: "flex flex-col items-center gap-1.5", flaggedClassName: `-m-1.5 rounded-md p-1.5 ${FLAGGED_ROW}`, children: [_jsx("div", { className: "h-12 w-12 border border-[#555] bg-[#161616]", style: {
|
|
78
135
|
borderRadius: r.value === "full" ? "9999px" : r.value.replace(" (mixed)", ""),
|
|
79
136
|
} }), _jsxs("div", { className: "flex items-center gap-1 text-[11px] text-[#999]", children: [_jsx("span", { className: "font-mono", children: r.value }), r.outlier && _jsx(OutlierBadge, {})] }), _jsxs("span", { className: "text-[10px] tabular-nums text-[#555]", children: ["\u00D7", r.count.toLocaleString()] })] }));
|
|
80
137
|
}
|
|
81
|
-
function RadiusSection({ data }) {
|
|
138
|
+
function RadiusSection({ data, previews }) {
|
|
82
139
|
if (data.radii.length === 0)
|
|
83
140
|
return null;
|
|
84
141
|
const radii = data.radii.slice(0, 20);
|
|
85
|
-
return (_jsx(Section, { title: "Corner radii", tip: "\u2014 rounding in use on visible boxes and controls.", children: _jsxs("div", { className: `${card} overflow-hidden pb-4`, children: [_jsx(SectionFlags, { flags: data.flags, section: "radius" }), _jsx(OverflowRow, { label: "radii", className: "px-4 pt-4 sm:px-5", rowClassName: "flex flex-wrap items-end gap-4", children: radii.map((r) => (_jsx(RadiusChip, { r: r }, r.value))) })] }) }));
|
|
142
|
+
return (_jsx(Section, { title: "Corner radii", tip: "\u2014 rounding in use on visible boxes and controls. Hover a one-off to see where it renders.", children: _jsxs("div", { className: `${card} overflow-hidden pb-4`, children: [_jsx(SectionFlags, { flags: data.flags, section: "radius" }), _jsx(OverflowRow, { label: "radii", className: "px-4 pt-4 sm:px-5", rowClassName: "flex flex-wrap items-end gap-4", children: radii.map((r) => (_jsx(RadiusChip, { r: r, previews: previews }, r.value))) })] }) }));
|
|
86
143
|
}
|
|
87
|
-
function SpacingRow({ s, max }) {
|
|
88
|
-
return (_jsxs("
|
|
144
|
+
function SpacingRow({ s, max, previews, }) {
|
|
145
|
+
return (_jsxs(Flaggable, { flagged: s.offGrid, value: { kind: "spacing", px: s.px }, label: `${s.px}px padding`, pages: s.pages, previews: previews, className: "flex items-center gap-3", flaggedClassName: `-mx-1.5 rounded px-1.5 ${FLAGGED_ROW}`, children: [_jsxs("span", { className: "w-12 shrink-0 text-right font-mono text-[11px] tabular-nums text-[#999]", children: [s.px, "px"] }), _jsx("div", { className: "h-3 flex-1 overflow-hidden rounded-sm bg-[#141414]", children: _jsx("div", { className: `h-full rounded-sm ${s.offGrid ? "bg-amber-500/70" : "bg-blue-500/80"}`, style: { width: `${Math.max((s.px / max) * 100, 2)}%` } }) }), _jsxs("span", { className: "w-16 shrink-0 text-right text-[11px] tabular-nums text-[#555]", children: ["\u00D7", s.count.toLocaleString()] }), _jsx("span", { className: "w-14 shrink-0 text-[10px] text-amber-400", children: s.offGrid ? "off-grid" : "" })] }));
|
|
89
146
|
}
|
|
90
|
-
function SpacingSection({ data }) {
|
|
147
|
+
function SpacingSection({ data, previews }) {
|
|
91
148
|
if (data.spacing.length === 0)
|
|
92
149
|
return null;
|
|
93
150
|
const scale = [...data.spacing].sort((a, b) => a.px - b.px).slice(0, 24);
|
|
94
151
|
const max = Math.max(...scale.map((s) => s.px), 1);
|
|
95
152
|
const visible = scale.slice(0, VISIBLE_ROWS);
|
|
96
153
|
const overflow = scale.slice(VISIBLE_ROWS);
|
|
97
|
-
return (_jsx(Section, { title: "Spacing", tip: "\u2014 padding values in use, as a scale. Bars are to scale.", children: _jsxs("div", { className: `${card} overflow-hidden pb-4`, children: [_jsx(SectionFlags, { flags: data.flags, section: "spacing" }), _jsx("div", { className: "space-y-1.5 px-4 pt-4 sm:px-5", children: visible.map((s) => (_jsx(SpacingRow, { s: s, max: max }, s.px))) }), _jsx(ShowMore, { count: overflow.length, label: "padding values", children: _jsx("div", { className: "mt-1.5 space-y-1.5 px-4 pb-1 sm:px-5", children: overflow.map((s) => (_jsx(SpacingRow, { s: s, max: max }, s.px))) }) })] }) }));
|
|
154
|
+
return (_jsx(Section, { title: "Spacing", tip: "\u2014 padding values in use, as a scale. Bars are to scale. Hover an off-grid value to see where it renders.", children: _jsxs("div", { className: `${card} overflow-hidden pb-4`, children: [_jsx(SectionFlags, { flags: data.flags, section: "spacing" }), _jsx("div", { className: "space-y-1.5 px-4 pt-4 sm:px-5", children: visible.map((s) => (_jsx(SpacingRow, { s: s, max: max, previews: previews }, s.px))) }), _jsx(ShowMore, { count: overflow.length, label: "padding values", children: _jsx("div", { className: "mt-1.5 space-y-1.5 px-4 pb-1 sm:px-5", children: overflow.map((s) => (_jsx(SpacingRow, { s: s, max: max, previews: previews }, s.px))) }) })] }) }));
|
|
98
155
|
}
|
|
99
156
|
// ── Scanned pages ────────────────────────────────────────────────────────────
|
|
100
157
|
function PageRow({ p, first }) {
|
|
@@ -109,8 +166,9 @@ function ScannedPages({ data }) {
|
|
|
109
166
|
}
|
|
110
167
|
export function DesignPanel({ data, review, reviewStale, settings, snapshots, captureIssue, }) {
|
|
111
168
|
const hasScans = data.pages.length > 0;
|
|
169
|
+
const previews = previewIndex(snapshots);
|
|
112
170
|
return (_jsxs("main", { className: "text-white", children: [_jsxs("div", { className: `mb-8 flex items-start justify-between gap-3 border-b ${border} pb-6`, children: [_jsxs("div", { children: [_jsx("h1", { className: "text-[22px] font-semibold tracking-tight text-white", children: "Design review" }), _jsx("p", { className: "mt-1 max-w-xl text-[13px] leading-relaxed text-[#666]", children: "Your site's brand guideline, reverse-engineered from the rendered pages \u2014 the typography, palette, radii and spacing it actually ships, with anything that breaks the system flagged." })] }), _jsxs("div", { className: "flex shrink-0 items-center gap-2", children: [_jsx(RefreshMetricsButton, {}), _jsx("div", { className: `whitespace-nowrap rounded-full px-3 py-1 text-[11px] font-medium ${hasScans ? "bg-emerald-950 text-emerald-400" : "bg-[#1a1a1a] text-[#666]"}`, children: hasScans
|
|
113
171
|
? `● ${data.pages.length} ${data.pages.length === 1 ? "page" : "pages"} scanned`
|
|
114
|
-
: "○ no scans yet" })] })] }), !data.ready && (_jsxs("div", { className: "mb-8 rounded-lg border border-amber-900/50 bg-amber-950/30 px-4 py-3 text-[13px] text-amber-400", children: ["The analytics store isn't writable in this environment. Run locally or configure a database \u2014 see the ", _jsx("span", { className: "font-mono text-amber-300", children: "@polishd/next" }), " ", "DATABASE.md guide."] })), data.ready && !hasScans && (_jsx("div", { className: `mb-8 ${card} px-5 py-8 text-center`, children: _jsx("p", { className: "text-[13px] text-[#888]", children: "No design scans captured yet. Each page measures its own rendered design (fonts, colors, radii, spacing) once per visitor session \u2014 browse a few pages of the site, then refresh the metrics." }) })), _jsx(SnapshotsCard, { initial: snapshots, captureIssue: captureIssue }), _jsx(DesignReviewCard, { initialReview: review, initialStale: reviewStale, hasApiKey: settings.hasApiKey, provider: settings.provider, model: settings.model, scannedPages: data.pages.length }), hasScans && (_jsxs(_Fragment, { children: [_jsx(TypographySection, { data: data }), _jsx(PaletteSection, { data: data }), _jsx(ContrastSection, { data: data }), _jsx(RadiusSection, { data: data }), _jsx(SpacingSection, { data: data }), _jsx(ScannedPages, { data: data })] }))] }));
|
|
172
|
+
: "○ no scans yet" })] })] }), !data.ready && (_jsxs("div", { className: "mb-8 rounded-lg border border-amber-900/50 bg-amber-950/30 px-4 py-3 text-[13px] text-amber-400", children: ["The analytics store isn't writable in this environment. Run locally or configure a database \u2014 see the ", _jsx("span", { className: "font-mono text-amber-300", children: "@polishd/next" }), " ", "DATABASE.md guide."] })), data.ready && !hasScans && (_jsx("div", { className: `mb-8 ${card} px-5 py-8 text-center`, children: _jsx("p", { className: "text-[13px] text-[#888]", children: "No design scans captured yet. Each page measures its own rendered design (fonts, colors, radii, spacing) once per visitor session \u2014 browse a few pages of the site, then refresh the metrics." }) })), _jsx(SnapshotsCard, { initial: snapshots, captureIssue: captureIssue }), _jsx(DesignReviewCard, { initialReview: review, initialStale: reviewStale, hasApiKey: settings.hasApiKey, provider: settings.provider, model: settings.model, scannedPages: data.pages.length, githubConnected: settings.hasGithubToken && !!settings.githubRepo }), hasScans && (_jsxs(_Fragment, { children: [_jsx(TypographySection, { data: data, previews: previews }), _jsx(PaletteSection, { data: data, previews: previews }), _jsx(ContrastSection, { data: data }), _jsx(RadiusSection, { data: data, previews: previews }), _jsx(SpacingSection, { data: data, previews: previews }), _jsx(ScannedPages, { data: data })] }))] }));
|
|
115
173
|
}
|
|
116
174
|
//# sourceMappingURL=design.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"design.js","sourceRoot":"","sources":["../../src/dashboard/design.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"design.js","sourceRoot":"","sources":["../../src/dashboard/design.tsx"],"names":[],"mappings":";AAsBA,OAAO,EAAE,cAAc,EAAuB,MAAM,yBAAyB,CAAC;AAC9E,OAAO,gBAAgB,EAAE,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,aAAa,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACxF,OAAO,WAAW,MAAM,gBAAgB,CAAC;AACzC,OAAO,QAAQ,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,IAAI,KAAK,EAAE,MAAM,MAAM,CAAC;AAChE,OAAO,YAA8D,MAAM,iBAAiB,CAAC;AAE7F,6DAA6D;AAC7D,MAAM,YAAY,GAAG,CAAC,CAAC;AAKvB;;;;;GAKG;AACH,SAAS,YAAY,CAAC,SAA4B;IAChD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA2B,CAAC;IACpD,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;YACjC,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;gBAAE,SAAS;YAClC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE;gBAClB,UAAU,EAAE,CAAC,CAAC,EAAE;gBAChB,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,UAAU,EAAE,CAAC,CAAC,UAAU;aACzB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,aAAa,IAAI,EAAE,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,EAAE,EAAE;QACb,MAAM,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;QAChC,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,OAAO;YAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;QAClD,IAAI,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC;QACxF,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;IAC9D,CAAC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,SAAS,CAAC,EACjB,OAAO,EACP,KAAK,EACL,KAAK,EAAE,UAAU,EACjB,KAAK,EACL,QAAQ,EACR,SAAS,EACT,gBAAgB,EAChB,QAAQ,GAWT;IACC,IAAI,CAAC,OAAO;QAAE,OAAO,cAAK,SAAS,EAAE,SAAS,YAAG,QAAQ,GAAO,CAAC;IACjE,OAAO,CACL,KAAC,YAAY,IACX,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,EACtB,SAAS,EAAE,GAAG,SAAS,IAAI,gBAAgB,EAAE,YAE5C,QAAQ,GACI,CAChB,CAAC;AACJ,CAAC;AAED,wDAAwD;AACxD,MAAM,WAAW,GAAG,2DAA2D,CAAC;AAEhF,SAAS,YAAY,CAAC,EAAE,IAAI,GAAG,SAAS,EAAqB;IAC3D,OAAO,CACL,eAAM,SAAS,EAAC,qGAAqG,YAClH,IAAI,GACA,CACR,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,YAAY,CAAC,EAAE,KAAK,EAAE,OAAO,EAAuD;IAC3F,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;IACvD,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAClC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC;IACvD,OAAO,CACL,cACE,SAAS,EAAE,mDACT,OAAO;YACL,CAAC,CAAC,qCAAqC;YACvC,CAAC,CAAC,qCACN,EAAE,YAEF,aAAI,SAAS,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,YACtD,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CACjB,cAEE,SAAS,EAAE,0CACT,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,gBAC7C,EAAE,aAED,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,CACjB,oCAEE,SAAS,EAAE,0CACT,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,cAC3C,EAAE,GACF,CACH,EACD,yBACE,KAAC,SAAS,IAAC,IAAI,EAAE,CAAC,CAAC,OAAO,GAAI,GACzB,KAfF,CAAC,CAgBH,CACN,CAAC,GACC,GACD,CACP,CAAC;AACJ,CAAC;AAED,SAAS,OAAO,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAwD;IAC7F,OAAO,CACL,mBAAS,SAAS,EAAC,MAAM,aACvB,eAAK,SAAS,EAAE,kCAAkC,KAAK,EAAE,aACtD,KAAK,EACL,GAAG,IAAI,eAAM,SAAS,EAAC,iEAAiE,YAAE,GAAG,GAAQ,IAClG,EACL,QAAQ,IACD,CACX,CAAC;AACJ,CAAC;AAED,gFAAgF;AAEhF,SAAS,OAAO,CAAC,EACf,CAAC,EACD,KAAK,EACL,QAAQ,GAKT;IACC,OAAO,CACL,MAAC,SAAS,IACR,OAAO,EAAE,CAAC,CAAC,OAAO,EAClB,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,EAC7E,KAAK,EAAE,GAAG,CAAC,CAAC,MAAM,QAAQ,CAAC,CAAC,MAAM,EAAE,EACpC,KAAK,EAAE,CAAC,CAAC,KAAK,EACd,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,mEAAmE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,EACpG,gBAAgB,EAAE,WAAW,aAE7B,eACE,SAAS,EAAC,oCAAoC,EAC9C,KAAK,EAAE;oBACL,UAAU,EAAE,IAAI,CAAC,CAAC,MAAM,yCAAyC;oBACjE,QAAQ,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI;oBACvC,UAAU,EAAE,CAAC,CAAC,MAAM;oBACpB,UAAU,EAAE,IAAI;iBACjB,YAEA,CAAC,CAAC,MAAM,IAAI,6CAA6C,GACrD,EACP,gBAAM,SAAS,EAAC,yEAAyE,aACvF,gBAAM,SAAS,EAAC,aAAa,aAC1B,CAAC,CAAC,MAAM,WAAO,CAAC,CAAC,MAAM,IACnB,aACJ,CAAC,CAAC,KAAK,CAAC,cAAc,EAAE,mBAAU,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,EACvD,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EACvC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,gBAAM,SAAS,EAAC,aAAa,wBAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAQ,EAC/E,CAAC,CAAC,OAAO,IAAI,KAAC,YAAY,KAAG,IACzB,IACG,CACb,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAqD;IAC9F,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IACpD,OAAO,CACL,KAAC,OAAO,IACN,KAAK,EAAC,YAAY,EAClB,GAAG,EAAC,iIAA4H,YAEhI,eAAK,SAAS,EAAE,GAAG,IAAI,kBAAkB,aACvC,KAAC,YAAY,IAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,EAAC,YAAY,GAAG,EACvD,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CAC3B,cAAK,SAAS,EAAC,qDAAqD,YACjE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACxB,gBAEE,SAAS,EAAC,0EAA0E,aAEnF,CAAC,CAAC,MAAM,OAAE,gBAAM,SAAS,EAAC,aAAa,wBAAI,CAAC,CAAC,KAAK,CAAC,cAAc,EAAE,aAAa,KAH5E,CAAC,CAAC,MAAM,CAIR,CACR,CAAC,GACE,CACP,EACD,eAAK,SAAS,EAAC,MAAM,aAClB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CACrB,KAAC,OAAO,IAEN,CAAC,EAAE,CAAC,EACJ,KAAK,EAAE,CAAC,KAAK,CAAC,EACd,QAAQ,EAAE,QAAQ,IAHb,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,EAAE,CAI1C,CACH,CAAC,EACF,KAAC,QAAQ,IAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAC,aAAa,YAClD,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACnB,KAAC,OAAO,IAEN,CAAC,EAAE,CAAC,EACJ,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,IAHb,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,EAAE,CAI1C,CACH,CAAC,GACO,IACP,IACF,GACE,CACX,CAAC;AACJ,CAAC;AAED,gFAAgF;AAEhF,SAAS,SAAS,CAAC,KAAmD;IACpE,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,KAAK,CAAC,UAAU,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC3C,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC3B,CAAC;AAED,SAAS,QAAQ,CAAC,CAAsC;IACtD,MAAM,KAAK,GAAI,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,CAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACxF,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC;AAC1D,CAAC;AAED,SAAS,SAAS,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAoE;IAClG,MAAM,IAAI,GAAG,mFAAmF,CAAC;IACjG,MAAM,IAAI,GAAG,CACX,8BACE,eACE,SAAS,EAAC,8CAA8C,EACxD,KAAK,EAAE,EAAE,eAAe,EAAE,CAAC,CAAC,GAAG,EAAE,GACjC,EACF,eAAM,SAAS,EAAC,mCAAmC,YAAE,CAAC,CAAC,GAAG,GAAQ,EACjE,CAAC,CAAC,OAAO,IAAI,KAAC,YAAY,KAAG,IAC7B,CACJ,CAAC;IACF,oEAAoE;IACpE,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;QACd,OAAO,CACL,KAAC,YAAY,IACX,KAAK,EAAE,CAAC,CAAC,GAAG,EACZ,KAAK,EAAE,CAAC,CAAC,KAAK,EACd,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAC5B,SAAS,EAAE,GAAG,IAAI,oEAAoE,YAErF,IAAI,GACQ,CAChB,CAAC;IACJ,CAAC;IACD,OAAO,CACL,eACE,SAAS,EAAE,IAAI,EACf,KAAK,EAAE,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,OAAO,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,MAAM,UAAU,YAEhF,IAAI,GACA,CACR,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAqD;IAC3F,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACvC,OAAO,CACL,KAAC,OAAO,IACN,KAAK,EAAC,eAAe,EACrB,GAAG,EAAC,kIAA6H,YAEjI,eAAK,SAAS,EAAE,GAAG,IAAI,uBAAuB,aAC5C,KAAC,YAAY,IAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,EAAC,OAAO,GAAG,EAClD,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CACrB,cAAK,SAAS,EAAC,yDAAyD,YACrE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAClB,MAAC,SAAS,IAER,OAAO,EAAE,CAAC,CAAC,OAAO,EAClB,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,EAClB,KAAK,EAAE,CAAC,CAAC,GAAG,EACZ,KAAK,EAAE,CAAC,CAAC,KAAK,EACd,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAC,SAAS,EACnB,gBAAgB,EAAC,iEAAiE,aAElF,cACE,SAAS,EAAC,gDAAgD,EAC1D,KAAK,EAAE,EAAE,eAAe,EAAE,CAAC,CAAC,GAAG,EAAE,GACjC,EACF,cAAK,SAAS,EAAC,mDAAmD,YAAE,CAAC,CAAC,GAAG,GAAO,EAChF,eAAK,SAAS,EAAC,2DAA2D,aACxE,gBAAM,SAAS,EAAC,cAAc,aAAE,CAAC,CAAC,GAAG,SAAS,EAC9C,sCAAS,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAQ,EAClC,CAAC,CAAC,OAAO,IAAI,KAAC,YAAY,KAAG,IAC1B,KAlBD,CAAC,CAAC,GAAG,CAmBA,CACb,CAAC,GACE,CACP,EACA,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CACnB,KAAC,WAAW,IACV,KAAK,EAAC,QAAQ,EACd,SAAS,EAAC,mBAAmB,EAC7B,YAAY,EAAC,sBAAsB,YAElC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAChB,KAAC,SAAS,IAAa,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,IAA/B,CAAC,CAAC,GAAG,CAA8B,CACpD,CAAC,GACU,CACf,IACG,GACE,CACX,CAAC;AACJ,CAAC;AAED,gFAAgF;AAEhF,SAAS,WAAW,CAAC,EAAE,CAAC,EAAE,KAAK,EAAgE;IAC7F,OAAO,CACL,eAAK,SAAS,EAAE,uDAAuD,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,aAC3F,eACE,SAAS,EAAC,+GAA+G,EACzH,KAAK,EAAE,EAAE,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,mBAGxC,EACP,gBAAM,SAAS,EAAC,mDAAmD,aACjE,KAAC,UAAU,IAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAI,UAAI,KAAC,UAAU,IAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAI,IACjD,EACP,gBAAM,SAAS,EAAC,yBAAyB,aACvC,KAAC,aAAa,IAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,GAAI,EACvD,gBAAM,SAAS,EAAC,sCAAsC,uBAC7C,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAO,CAAC,CAAC,SAAS,UAC/C,IACF,EACP,gBAAM,SAAS,EAAC,yBAAyB,aACtC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAC9B,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAC3B,IACH,CACP,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,EAAE,IAAI,EAA+B;IAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACvD,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5C,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IACjD,OAAO,CACL,KAAC,OAAO,IACN,KAAK,EAAC,UAAU,EAChB,GAAG,EAAC,mEAA8D,YAQlE,cAAK,SAAS,EAAE,GAAG,IAAI,kBAAkB,YACtC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CACtB,aAAG,SAAS,EAAC,gDAAgD,qBACtD,IAAI,CAAC,QAAQ,CAAC,MAAM,2DACvB,CACL,CAAC,CAAC,CAAC,CACF,eAAK,SAAS,EAAC,MAAM,aAClB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CACrB,KAAC,WAAW,IAAyB,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,IAAvC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,CAA0B,CAC9D,CAAC,EACF,KAAC,QAAQ,IAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAC,eAAe,YACpD,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACnB,KAAC,WAAW,IAAyB,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,IAArC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,CAAwB,CAC5D,CAAC,GACO,IACP,CACP,GACG,GACE,CACX,CAAC;AACJ,CAAC;AAED,gFAAgF;AAEhF,SAAS,UAAU,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAmE;IAClG,OAAO,CACL,MAAC,SAAS,IACR,OAAO,EAAE,CAAC,CAAC,OAAO,EAClB,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,EACzC,KAAK,EAAE,GAAG,CAAC,CAAC,KAAK,SAAS,EAC1B,KAAK,EAAE,CAAC,CAAC,KAAK,EACd,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAC,oCAAoC,EAC9C,gBAAgB,EAAE,2BAA2B,WAAW,EAAE,aAE1D,cACE,SAAS,EAAC,6CAA6C,EACvD,KAAK,EAAE;oBACL,YAAY,EAAE,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;iBAC9E,GACD,EACF,eAAK,SAAS,EAAC,iDAAiD,aAC9D,eAAM,SAAS,EAAC,WAAW,YAAE,CAAC,CAAC,KAAK,GAAQ,EAC3C,CAAC,CAAC,OAAO,IAAI,KAAC,YAAY,KAAG,IAC1B,EACN,gBAAM,SAAS,EAAC,sCAAsC,uBAAG,CAAC,CAAC,KAAK,CAAC,cAAc,EAAE,IAAQ,IAC/E,CACb,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAqD;IAC1F,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACtC,OAAO,CACL,KAAC,OAAO,IACN,KAAK,EAAC,cAAc,EACpB,GAAG,EAAC,gGAA2F,YAE/F,eAAK,SAAS,EAAE,GAAG,IAAI,uBAAuB,aAC5C,KAAC,YAAY,IAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,EAAC,QAAQ,GAAG,EACpD,KAAC,WAAW,IACV,KAAK,EAAC,OAAO,EACb,SAAS,EAAC,mBAAmB,EAC7B,YAAY,EAAC,gCAAgC,YAE5C,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAChB,KAAC,UAAU,IAAe,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,IAAjC,CAAC,CAAC,KAAK,CAA8B,CACvD,CAAC,GACU,IACV,GACE,CACX,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,EAClB,CAAC,EACD,GAAG,EACH,QAAQ,GAKT;IACC,OAAO,CACL,MAAC,SAAS,IACR,OAAO,EAAE,CAAC,CAAC,OAAO,EAClB,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EACpC,KAAK,EAAE,GAAG,CAAC,CAAC,EAAE,YAAY,EAC1B,KAAK,EAAE,CAAC,CAAC,KAAK,EACd,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAC,yBAAyB,EACnC,gBAAgB,EAAE,0BAA0B,WAAW,EAAE,aAEzD,gBAAM,SAAS,EAAC,yEAAyE,aACtF,CAAC,CAAC,EAAE,UACA,EACP,cAAK,SAAS,EAAC,oDAAoD,YACjE,cACE,SAAS,EAAE,qBAAqB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,gBAAgB,EAAE,EAClF,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GACvD,GACE,EACN,gBAAM,SAAS,EAAC,+DAA+D,uBAC3E,CAAC,CAAC,KAAK,CAAC,cAAc,EAAE,IACrB,EACP,eAAM,SAAS,EAAC,0CAA0C,YACvD,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GACvB,IACG,CACb,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAqD;IAC3F,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3C,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACzE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC3C,OAAO,CACL,KAAC,OAAO,IACN,KAAK,EAAC,SAAS,EACf,GAAG,EAAC,+GAA0G,YAE9G,eAAK,SAAS,EAAE,GAAG,IAAI,uBAAuB,aAC5C,KAAC,YAAY,IAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,EAAC,SAAS,GAAG,EACrD,cAAK,SAAS,EAAC,+BAA+B,YAC3C,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAClB,KAAC,UAAU,IAAY,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,IAAxC,CAAC,CAAC,EAAE,CAAwC,CAC9D,CAAC,GACE,EACN,KAAC,QAAQ,IAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAC,gBAAgB,YACtD,cAAK,SAAS,EAAC,sCAAsC,YAClD,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACnB,KAAC,UAAU,IAAY,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,IAAxC,CAAC,CAAC,EAAE,CAAwC,CAC9D,CAAC,GACE,GACG,IACP,GACE,CACX,CAAC;AACJ,CAAC;AAED,gFAAgF;AAEhF,SAAS,OAAO,CAAC,EAAE,CAAC,EAAE,KAAK,EAA6D;IACtF,OAAO,CACL,eACE,SAAS,EAAE,+DAA+D,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,aAEhG,eAAM,SAAS,EAAC,4CAA4C,YAAE,CAAC,CAAC,IAAI,GAAQ,EAC5E,gBAAM,SAAS,EAAC,+CAA+C,aAC5D,CAAC,CAAC,QAAQ,CAAC,cAAc,EAAE,sBAAa,GAAG,EAC3C,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,IACnF,IACH,CACP,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,EAAE,IAAI,EAA+B;IACzD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAChD,OAAO,CACL,KAAC,OAAO,IAAC,KAAK,EAAC,eAAe,EAAC,GAAG,EAAC,6EAAwE,YACzG,eAAK,SAAS,EAAE,GAAG,IAAI,kBAAkB,aACtC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CACrB,KAAC,OAAO,IAAc,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,IAA5B,CAAC,CAAC,IAAI,CAA0B,CAC/C,CAAC,EACF,KAAC,QAAQ,IAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAC,OAAO,YAC5C,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACnB,KAAC,OAAO,IAAc,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,IAA1B,CAAC,CAAC,IAAI,CAAwB,CAC7C,CAAC,GACO,IACP,GACE,CACX,CAAC;AACJ,CAAC;AAcD,MAAM,UAAU,WAAW,CAAC,EAC1B,IAAI,EACJ,MAAM,EACN,WAAW,EACX,QAAQ,EACR,SAAS,EACT,YAAY,GACK;IACjB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IACzC,OAAO,CACL,gBAAM,SAAS,EAAC,YAAY,aAE1B,eAAK,SAAS,EAAE,wDAAwD,MAAM,OAAO,aACnF,0BACE,aAAI,SAAS,EAAC,qDAAqD,8BAAmB,EACtF,YAAG,SAAS,EAAC,uDAAuD,2MAIhE,IACA,EACN,eAAK,SAAS,EAAC,kCAAkC,aAC/C,KAAC,oBAAoB,KAAG,EACxB,cACE,SAAS,EAAE,oEACT,QAAQ,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC,0BACjD,EAAE,YAED,QAAQ;oCACP,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,UAAU;oCAChF,CAAC,CAAC,gBAAgB,GAChB,IACF,IACF,EAEL,CAAC,IAAI,CAAC,KAAK,IAAI,CACd,eAAK,SAAS,EAAC,iGAAiG,4HAE3F,eAAM,SAAS,EAAC,0BAA0B,8BAAqB,EAAC,GAAG,0BAElF,CACP,EAEA,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,IAAI,CAC1B,cAAK,SAAS,EAAE,QAAQ,IAAI,wBAAwB,YAClD,YAAG,SAAS,EAAC,yBAAyB,mNAIlC,GACA,CACP,EAGD,KAAC,aAAa,IAAC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,GAAI,EAGjE,KAAC,gBAAgB,IACf,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,WAAW,EACzB,SAAS,EAAE,QAAQ,CAAC,SAAS,EAC7B,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAC3B,KAAK,EAAE,QAAQ,CAAC,KAAK,EACrB,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAC/B,eAAe,EAAE,QAAQ,CAAC,cAAc,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,GACjE,EAED,QAAQ,IAAI,CACX,8BACE,KAAC,iBAAiB,IAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,GAAI,EACrD,KAAC,cAAc,IAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,GAAI,EAClD,KAAC,eAAe,IAAC,IAAI,EAAE,IAAI,GAAI,EAC/B,KAAC,aAAa,IAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,GAAI,EACjD,KAAC,cAAc,IAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,GAAI,EAClD,KAAC,YAAY,IAAC,IAAI,EAAE,IAAI,GAAI,IAC3B,CACJ,IACI,CACR,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { CreateIssueResult } from "../ai/types";
|
|
2
|
+
export interface FileBugButtonProps {
|
|
3
|
+
/** The issue already filed for this finding, when known at render time. */
|
|
4
|
+
filed: {
|
|
5
|
+
url: string;
|
|
6
|
+
number: number;
|
|
7
|
+
} | null;
|
|
8
|
+
/** The verify-and-file server action for this finding. */
|
|
9
|
+
file: () => Promise<CreateIssueResult>;
|
|
10
|
+
/** Telemetry name for the button (see the data-component note in summary.tsx). */
|
|
11
|
+
dataComponent: string;
|
|
12
|
+
}
|
|
13
|
+
export declare function FileBugButton({ filed, file, dataComponent }: FileBugButtonProps): import("react").JSX.Element;
|
|
14
|
+
//# sourceMappingURL=file-bug-button.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-bug-button.d.ts","sourceRoot":"","sources":["../../src/dashboard/file-bug-button.tsx"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGrD,MAAM,WAAW,kBAAkB;IACjC,2EAA2E;IAC3E,KAAK,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC9C,0DAA0D;IAC1D,IAAI,EAAE,MAAM,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACvC,kFAAkF;IAClF,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,kBAAkB,+BAoD/E"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs as _jsxs, jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
/**
|
|
4
|
+
* Polishd — the "file bug" micro-button, shared by every card that can turn a
|
|
5
|
+
* model finding into a GitHub issue: the summary's losses and the design
|
|
6
|
+
* review's issues.
|
|
7
|
+
*
|
|
8
|
+
* One click runs the caller's verify-and-file server action. The server checks
|
|
9
|
+
* the report against the repository's source first: confirmed reports become
|
|
10
|
+
* issues with the technical analysis and fix suggestions, disproved ones come
|
|
11
|
+
* back as `not-a-bug` with the reasoning — shown here instead of a link.
|
|
12
|
+
* Findings whose issue already exists (auto-filed, or filed on an earlier
|
|
13
|
+
* generation) render as the link straight away via `filed`.
|
|
14
|
+
*/
|
|
15
|
+
import { useState, useTransition } from "react";
|
|
16
|
+
import { microBtn } from "./ui";
|
|
17
|
+
export function FileBugButton({ filed, file, dataComponent }) {
|
|
18
|
+
const [created, setCreated] = useState(filed);
|
|
19
|
+
const [failed, setFailed] = useState(null);
|
|
20
|
+
const [pending, startFile] = useTransition();
|
|
21
|
+
if (created) {
|
|
22
|
+
return (_jsxs("a", { href: created.url, target: "_blank", rel: "noreferrer noopener", className: "rounded bg-[#101c14] px-1.5 py-0.5 text-[10px] font-medium text-emerald-500 hover:text-emerald-400", children: ["Issue #", created.number, " \u2197"] }));
|
|
23
|
+
}
|
|
24
|
+
if (failed?.notABug) {
|
|
25
|
+
return (_jsxs("span", { className: "rounded bg-amber-950/50 px-1.5 py-0.5 text-[10px] text-amber-400", title: failed.message, children: ["Checked the source \u2014 not an actual bug: ", failed.message] }));
|
|
26
|
+
}
|
|
27
|
+
const run = () => startFile(async () => {
|
|
28
|
+
setFailed(null);
|
|
29
|
+
const res = await file();
|
|
30
|
+
if (res.ok)
|
|
31
|
+
setCreated({ url: res.url, number: res.number });
|
|
32
|
+
else
|
|
33
|
+
setFailed({ notABug: res.error === "not-a-bug", message: res.message });
|
|
34
|
+
});
|
|
35
|
+
return (_jsxs(_Fragment, { children: [_jsx("button", { type: "button", "data-component": dataComponent, onClick: run, disabled: pending, title: "Verify this problem against the source code, then create a GitHub issue with the technical details", className: microBtn, children: pending ? "Verifying…" : "File bug" }), failed && _jsx("span", { className: "text-[10px] text-red-400", children: failed.message })] }));
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=file-bug-button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-bug-button.js","sourceRoot":"","sources":["../../src/dashboard/file-bug-button.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAGhD,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAWhC,MAAM,UAAU,aAAa,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAsB;IAC9E,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAA+C,IAAI,CAAC,CAAC;IACzF,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,aAAa,EAAE,CAAC;IAE7C,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CACL,aACE,IAAI,EAAE,OAAO,CAAC,GAAG,EACjB,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,qBAAqB,EACzB,SAAS,EAAC,oGAAoG,wBAEtG,OAAO,CAAC,MAAM,eACpB,CACL,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;QACpB,OAAO,CACL,gBACE,SAAS,EAAC,kEAAkE,EAC5E,KAAK,EAAE,MAAM,CAAC,OAAO,8DAEoB,MAAM,CAAC,OAAO,IAClD,CACR,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAAG,GAAG,EAAE,CACf,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,SAAS,CAAC,IAAI,CAAC,CAAC;QAChB,MAAM,GAAG,GAAG,MAAM,IAAI,EAAE,CAAC;QACzB,IAAI,GAAG,CAAC,EAAE;YAAE,UAAU,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;;YACxD,SAAS,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,KAAK,KAAK,WAAW,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEL,OAAO,CACL,8BACE,iBACE,IAAI,EAAC,QAAQ,oBACG,aAAa,EAC7B,OAAO,EAAE,GAAG,EACZ,QAAQ,EAAE,OAAO,EACjB,KAAK,EAAC,oGAAoG,EAC1G,SAAS,EAAE,QAAQ,YAElB,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,GAC7B,EACR,MAAM,IAAI,eAAM,SAAS,EAAC,0BAA0B,YAAE,MAAM,CAAC,OAAO,GAAQ,IAC5E,CACJ,CAAC;AACJ,CAAC"}
|
|
@@ -1,10 +1,20 @@
|
|
|
1
|
-
import { type CaptureSnapshotResult } from "../server/snapshots";
|
|
1
|
+
import { type BeginSnapshotResult, type CaptureRouteResult, type CaptureSnapshotResult } from "../server/snapshots";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
3
|
+
* Capture is chunked into one action call per route — begin, then one
|
|
4
|
+
* `captureSnapshotRouteAction` per returned route, then finish — so no single
|
|
5
|
+
* request has to outlive a serverless host's function time limit. The client
|
|
6
|
+
* drives the loop; every per-route call is validated against the plan the
|
|
7
|
+
* begin call parked server-side, so the client contributes nothing but ids.
|
|
8
|
+
*
|
|
9
|
+
* Everything after auth reduces to a message rather than a thrown error: a
|
|
10
|
+
* rejected action crashes the dashboard tab into Next's error boundary with
|
|
11
|
+
* an opaque digest, while a returned message renders in the card.
|
|
6
12
|
*/
|
|
7
|
-
export declare function
|
|
13
|
+
export declare function beginSnapshotCaptureAction(): Promise<BeginSnapshotResult>;
|
|
14
|
+
/** Shoot one route of the capture in progress — both devices, both themes. */
|
|
15
|
+
export declare function captureSnapshotRouteAction(id: string, route: string): Promise<CaptureRouteResult>;
|
|
16
|
+
/** Record the accumulated shots as a snapshot and prune old ones. */
|
|
17
|
+
export declare function finishSnapshotCaptureAction(id: string): Promise<CaptureSnapshotResult>;
|
|
8
18
|
export type SnapshotImageResult = {
|
|
9
19
|
ok: true;
|
|
10
20
|
dataUrl: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot-actions.d.ts","sourceRoot":"","sources":["../../src/dashboard/snapshot-actions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"snapshot-actions.d.ts","sourceRoot":"","sources":["../../src/dashboard/snapshot-actions.ts"],"names":[],"mappings":"AAwBA,OAAO,EAML,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC3B,MAAM,qBAAqB,CAAC;AAoB7B;;;;;;;;;;GAUG;AACH,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,mBAAmB,CAAC,CA+C/E;AAED,8EAA8E;AAC9E,wBAAsB,0BAA0B,CAC9C,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,kBAAkB,CAAC,CAY7B;AAED,qEAAqE;AACrE,wBAAsB,2BAA2B,CAC/C,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,qBAAqB,CAAC,CAYhC;AAED,MAAM,MAAM,mBAAmB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAA;CAAE,CAAC;AAEhF,8EAA8E;AAC9E,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,mBAAmB,CAAC,CAI9B"}
|
|
@@ -19,7 +19,8 @@ import { requirePolishdAuth } from "../ai/guard";
|
|
|
19
19
|
import { resolveSettings } from "../ai/settings";
|
|
20
20
|
import { isDashboardPath, resolveDashboardRoute } from "../config";
|
|
21
21
|
import { getDesignData } from "../server/design";
|
|
22
|
-
import {
|
|
22
|
+
import { designPreviewTargets } from "../shared/design-values";
|
|
23
|
+
import { MAX_SNAPSHOT_ROUTES, beginSnapshot, captureSnapshotRoute, finishSnapshot, readSnapshotImage, } from "../server/snapshots";
|
|
23
24
|
/**
|
|
24
25
|
* The origin to shoot. `POLISHD_SITE_ORIGIN` wins when set (proxies, tunnels,
|
|
25
26
|
* a prod URL shot from a dev machine); otherwise the origin the dashboard was
|
|
@@ -39,36 +40,80 @@ async function resolveSiteOrigin() {
|
|
|
39
40
|
return `${proto}://${host}`;
|
|
40
41
|
}
|
|
41
42
|
/**
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
43
|
+
* Capture is chunked into one action call per route — begin, then one
|
|
44
|
+
* `captureSnapshotRouteAction` per returned route, then finish — so no single
|
|
45
|
+
* request has to outlive a serverless host's function time limit. The client
|
|
46
|
+
* drives the loop; every per-route call is validated against the plan the
|
|
47
|
+
* begin call parked server-side, so the client contributes nothing but ids.
|
|
48
|
+
*
|
|
49
|
+
* Everything after auth reduces to a message rather than a thrown error: a
|
|
50
|
+
* rejected action crashes the dashboard tab into Next's error boundary with
|
|
51
|
+
* an opaque digest, while a returned message renders in the card.
|
|
45
52
|
*/
|
|
46
|
-
export async function
|
|
53
|
+
export async function beginSnapshotCaptureAction() {
|
|
47
54
|
await requirePolishdAuth();
|
|
48
|
-
|
|
49
|
-
|
|
55
|
+
try {
|
|
56
|
+
const origin = await resolveSiteOrigin();
|
|
57
|
+
if (!origin) {
|
|
58
|
+
return {
|
|
59
|
+
ok: false,
|
|
60
|
+
message: "Couldn't work out the site's URL from the request — set POLISHD_SITE_ORIGIN " +
|
|
61
|
+
"to the origin the site is reachable at.",
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
const data = await getDesignData();
|
|
65
|
+
const dashboardRoute = resolveDashboardRoute();
|
|
66
|
+
// Shoot what visitors have actually rendered, never the dashboard itself
|
|
67
|
+
// (nor the telemetry pseudo-paths the collector namespaces under /~polishd).
|
|
68
|
+
const scanned = data.pages
|
|
69
|
+
.map((p) => p.path)
|
|
70
|
+
.filter((p) => p.startsWith("/") && !p.startsWith("/~") && !isDashboardPath(p, dashboardRoute));
|
|
71
|
+
const routes = (scanned.length > 0 ? scanned : ["/"]).slice(0, MAX_SNAPSHOT_ROUTES);
|
|
72
|
+
// Stamp the snapshot with the same metrics fingerprint the AI review caches
|
|
73
|
+
// under, so "taken before/after this round of changes" is a hash comparison.
|
|
74
|
+
let fingerprint = null;
|
|
75
|
+
if (data.ready && data.pages.length > 0) {
|
|
76
|
+
const { settings } = await resolveSettings();
|
|
77
|
+
fingerprint = fingerprintDigest(buildDesignDigest(data, settings.context));
|
|
78
|
+
}
|
|
79
|
+
// The one-off and off-grid values flagged right now get pictured in place,
|
|
80
|
+
// so hovering one on the Design tab shows the element that carries it.
|
|
81
|
+
const shot = new Set(routes);
|
|
82
|
+
const targets = designPreviewTargets(data).filter((t) => t.pages.some((p) => shot.has(p)));
|
|
83
|
+
return await beginSnapshot({ origin, routes, fingerprint, targets });
|
|
84
|
+
}
|
|
85
|
+
catch (err) {
|
|
50
86
|
return {
|
|
51
87
|
ok: false,
|
|
52
|
-
message:
|
|
53
|
-
"to the origin the site is reachable at.",
|
|
88
|
+
message: `Snapshot capture failed unexpectedly: ${err instanceof Error ? err.message : "unknown error"}`,
|
|
54
89
|
};
|
|
55
90
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
91
|
+
}
|
|
92
|
+
/** Shoot one route of the capture in progress — both devices, both themes. */
|
|
93
|
+
export async function captureSnapshotRouteAction(id, route) {
|
|
94
|
+
await requirePolishdAuth();
|
|
95
|
+
try {
|
|
96
|
+
return await captureSnapshotRoute(id, route);
|
|
97
|
+
}
|
|
98
|
+
catch (err) {
|
|
99
|
+
return {
|
|
100
|
+
ok: false,
|
|
101
|
+
message: `Screenshot capture failed unexpectedly: ${err instanceof Error ? err.message : "unknown error"}`,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/** Record the accumulated shots as a snapshot and prune old ones. */
|
|
106
|
+
export async function finishSnapshotCaptureAction(id) {
|
|
107
|
+
await requirePolishdAuth();
|
|
108
|
+
try {
|
|
109
|
+
return await finishSnapshot(id);
|
|
110
|
+
}
|
|
111
|
+
catch (err) {
|
|
112
|
+
return {
|
|
113
|
+
ok: false,
|
|
114
|
+
message: `The snapshot couldn't be recorded: ${err instanceof Error ? err.message : "unknown error"}`,
|
|
115
|
+
};
|
|
70
116
|
}
|
|
71
|
-
return captureSnapshot({ origin, routes, fingerprint });
|
|
72
117
|
}
|
|
73
118
|
/** One shot's PNG as a data URL — fetched lazily as tiles scroll into use. */
|
|
74
119
|
export async function getSnapshotImageAction(snapshotId, file) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot-actions.js","sourceRoot":"","sources":["../../src/dashboard/snapshot-actions.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EACL,mBAAmB,EACnB,
|
|
1
|
+
{"version":3,"file":"snapshot-actions.js","sourceRoot":"","sources":["../../src/dashboard/snapshot-actions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshots.d.ts","sourceRoot":"","sources":["../../src/dashboard/snapshots.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,eAAe,EAAuB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"snapshots.d.ts","sourceRoot":"","sources":["../../src/dashboard/snapshots.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,eAAe,EAAuB,MAAM,qBAAqB,CAAC;AAwGhF,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B;;;;;OAKG;IACH,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,kBAAkB,+BA2PlF"}
|
|
@@ -10,7 +10,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
10
10
|
* expands into a full-height lightbox.
|
|
11
11
|
*/
|
|
12
12
|
import { useEffect, useState, useTransition } from "react";
|
|
13
|
-
import {
|
|
13
|
+
import { beginSnapshotCaptureAction, captureSnapshotRouteAction, finishSnapshotCaptureAction, getSnapshotImageAction, } from "./snapshot-actions";
|
|
14
14
|
import { border, card, labelCls, primaryBtn, relTime, RefreshIcon } from "./ui";
|
|
15
15
|
const DEVICES = ["desktop", "phone"];
|
|
16
16
|
const THEMES = ["light", "dark"];
|
|
@@ -53,6 +53,7 @@ export default function SnapshotsCard({ initial, captureIssue }) {
|
|
|
53
53
|
const [error, setError] = useState(null);
|
|
54
54
|
const [zoom, setZoom] = useState(null);
|
|
55
55
|
const [pending, startCapture] = useTransition();
|
|
56
|
+
const [progress, setProgress] = useState(null);
|
|
56
57
|
const selected = snapshots.find((s) => s.id === selectedId) ?? snapshots[0] ?? null;
|
|
57
58
|
// A site with no dark mode has its identical dark shots dropped at capture
|
|
58
59
|
// time — hide the toggle rather than offering an empty view.
|
|
@@ -60,13 +61,56 @@ export default function SnapshotsCard({ initial, captureIssue }) {
|
|
|
60
61
|
const capture = () => {
|
|
61
62
|
setError(null);
|
|
62
63
|
startCapture(async () => {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
64
|
+
// The capture is one action call per route, so no single request has to
|
|
65
|
+
// outlive a serverless host's function time limit — and every await is
|
|
66
|
+
// caught: a rejected action must land in the error box, never in the
|
|
67
|
+
// error boundary (which would take the whole tab down).
|
|
68
|
+
try {
|
|
69
|
+
const begun = await beginSnapshotCaptureAction();
|
|
70
|
+
if (!begun.ok) {
|
|
71
|
+
setError(begun.message);
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
setProgress({ done: 0, total: begun.routes.length });
|
|
75
|
+
const failed = [];
|
|
76
|
+
let failure = null;
|
|
77
|
+
for (const [i, route] of begun.routes.entries()) {
|
|
78
|
+
try {
|
|
79
|
+
const res = await captureSnapshotRouteAction(begun.id, route);
|
|
80
|
+
if (!res.ok) {
|
|
81
|
+
failed.push(route);
|
|
82
|
+
failure = res.message;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
failed.push(route);
|
|
87
|
+
failure =
|
|
88
|
+
"the request failed mid-shoot — usually a serverless function " +
|
|
89
|
+
"time limit; the host's function logs will name the exact failure";
|
|
90
|
+
}
|
|
91
|
+
setProgress({ done: i + 1, total: begun.routes.length });
|
|
92
|
+
}
|
|
93
|
+
// Finish even when every route failed: it sweeps the capture's state
|
|
94
|
+
// and reports "every page failed" — the per-route failure is more
|
|
95
|
+
// specific, so it wins the error box when there is one.
|
|
96
|
+
const fin = await finishSnapshotCaptureAction(begun.id);
|
|
97
|
+
if (fin.ok) {
|
|
98
|
+
setSnapshots((prev) => [fin.snapshot, ...prev]);
|
|
99
|
+
setSelectedId(fin.snapshot.id);
|
|
100
|
+
if (failed.length > 0) {
|
|
101
|
+
setError(`${failed.length} of ${begun.routes.length} page${begun.routes.length === 1 ? "" : "s"} failed to capture (${failure}). The rest are in the snapshot.`);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
setError(failure ? `Capture failed: ${failure}.` : fin.message);
|
|
106
|
+
}
|
|
67
107
|
}
|
|
68
|
-
|
|
69
|
-
setError(
|
|
108
|
+
catch {
|
|
109
|
+
setError("The capture failed before a result came back — your host's function " +
|
|
110
|
+
"logs will name the exact failure.");
|
|
111
|
+
}
|
|
112
|
+
finally {
|
|
113
|
+
setProgress(null);
|
|
70
114
|
}
|
|
71
115
|
});
|
|
72
116
|
};
|
|
@@ -81,7 +125,13 @@ export default function SnapshotsCard({ initial, captureIssue }) {
|
|
|
81
125
|
// clicks group under these on the collecting side, so "does anyone shoot
|
|
82
126
|
// a second snapshot?" is answerable. Inert for host apps.
|
|
83
127
|
_jsxs("section", { "data-component": "design-snapshots", className: `mb-8 ${card} overflow-hidden`, children: [_jsxs("div", { className: `flex flex-wrap items-center justify-between gap-3 border-b ${border} px-4 py-3 sm:px-5`, children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: labelCls, children: "Site snapshots" }), selected && (_jsx("span", { className: "hidden rounded-full bg-[#1a1a1a] px-2 py-0.5 text-[10px] font-medium text-[#888] sm:inline", children: selected.origin }))] }), _jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [selected && (_jsxs(_Fragment, { children: [_jsx(TogglePills, { options: DEVICES, value: device, onChange: setDevice, component: "design-snapshot-device" }), !selected.noDarkMode && (_jsx(TogglePills, { options: THEMES, value: theme, onChange: setTheme, component: "design-snapshot-theme" })), snapshots.length > 1 && (_jsx("select", { "data-component": "design-snapshot-history", value: selected.id, onChange: (e) => setSelectedId(e.target.value), className: "rounded-md border border-[#2e2e2e] bg-[#111] px-2 py-1 text-[11px] text-[#aaa] focus:border-[#555] focus:outline-none", children: snapshots.map((s) => (_jsx("option", { value: s.id, children: relTime(s.capturedAt) }, s.id))) }))] })), _jsx("button", { type: "button", "data-component": "design-snapshot-capture", onClick: capture, disabled: pending || captureIssue !== null, title: captureIssue ??
|
|
84
|
-
"Screenshot every scanned page — phone and desktop, light and dark", className: primaryBtn, children: _jsxs("span", { className: "flex items-center gap-1.5", children: [_jsx(RefreshIcon, { spinning: pending }), pending
|
|
128
|
+
"Screenshot every scanned page — phone and desktop, light and dark", className: primaryBtn, children: _jsxs("span", { className: "flex items-center gap-1.5", children: [_jsx(RefreshIcon, { spinning: pending }), pending
|
|
129
|
+
? progress
|
|
130
|
+
? `Shooting page ${Math.min(progress.done + 1, progress.total)} of ${progress.total}…`
|
|
131
|
+
: "Shooting pages…"
|
|
132
|
+
: selected
|
|
133
|
+
? "Capture again"
|
|
134
|
+
: "Capture snapshot"] }) })] })] }), _jsxs("div", { className: "px-4 py-4 sm:px-5 sm:py-5", children: [captureIssue && (_jsx("div", { className: "mb-3 rounded-md border border-amber-900/50 bg-amber-950/30 px-3 py-2 text-[12px] text-amber-400", children: captureIssue })), error && (_jsx("div", { className: "mb-3 rounded-md border border-red-900/50 bg-red-950/30 px-3 py-2 text-[12px] text-red-400", children: error })), pending && (_jsx("p", { className: "mb-3 text-[12px] text-[#888]", children: "Shooting every scanned page at two sizes in two themes, one page at a time \u2014 this can take a minute. Keep this tab open." })), !selected && !pending && (_jsx("p", { className: "text-[13px] leading-relaxed text-[#888]", children: "No snapshots yet. Capture one to see every page of the site as it renders right now \u2014 the \u201Cbefore\u201D to hold future design changes against." })), selected && (_jsxs(_Fragment, { children: [shots.length === 0 ? (_jsxs("p", { className: "text-[13px] text-[#888]", children: ["No ", device, "/", theme, " shots in this snapshot."] })) : (_jsx("div", { className: `grid gap-4 ${device === "phone"
|
|
85
135
|
? "grid-cols-3 sm:grid-cols-5 lg:grid-cols-6"
|
|
86
136
|
: "grid-cols-2 sm:grid-cols-3 lg:grid-cols-4"}`, children: shots.map((s) => (_jsx(ShotTile, { snapshotId: selected.id, shot: s, onZoom: (src, route) => setZoom({ src, route }) }, `${selected.id}|${s.file}`))) })), _jsxs("div", { className: "mt-3 flex flex-wrap items-center gap-x-3 gap-y-1 text-[11px] text-[#555]", children: [_jsxs("span", { children: ["Captured ", relTime(selected.capturedAt)] }), selected.noDarkMode && (_jsx("span", { className: "rounded-full bg-[#1a1a1a] px-2 py-0.5 text-[#777]", children: "Site renders identically in dark mode" })), skipped.length > 0 && (_jsxs("span", { className: "text-amber-400/80", children: [skipped.length, " page", skipped.length === 1 ? "" : "s", " skipped", skipped[0].skipped ? ` (${skipped[0].skipped})` : ""] })), selected.authWalled.length > 0 && (_jsxs("span", { className: "text-amber-400/80", children: ["behind login: ", selected.authWalled.slice(0, 3).join(", "), selected.authWalled.length > 3 ? ", …" : ""] }))] })] }))] }), zoom && (_jsx("div", { role: "dialog", "aria-label": `${zoom.route} screenshot`, onClick: () => setZoom(null), className: "fixed inset-0 z-50 flex cursor-zoom-out items-start justify-center overflow-y-auto bg-black/85 p-6", children: _jsx("img", { src: zoom.src, alt: `${zoom.route} full screenshot`, className: "w-full max-w-3xl rounded-md border border-[#333]" }) }))] }));
|
|
87
137
|
}
|