@polishd/next 0.2.1-dev.1 → 0.2.1

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 CHANGED
@@ -1,6 +1,34 @@
1
1
  # Changelog
2
2
 
3
- ## Unreleased
3
+ ## 0.2.1
4
+
5
+ ### Setup moved out of the way, into a Settings tab
6
+
7
+ The first screen of the dashboard was also its setup form. Provider, key, site
8
+ description, codebase profile and GitHub all lived behind a gear on the
9
+ analytics summary card — which pushed the actual analytics down the page, and
10
+ left the Design tab telling people to go and find "the Analytics tab's summary
11
+ card" to configure a model it uses too.
12
+
13
+ All of it now lives in a third sidebar tab, **Settings**, grouped into Model /
14
+ Your site / Codebase / GitHub with one save. First-run onboarding runs there as
15
+ well, and finishing it drops you on Analytics with your first summary. The
16
+ summary card keeps only the story and a gear that jumps to Settings; the one
17
+ piece of setup still worth seeing next to a summary — whether the model has
18
+ actually read your codebase — stays as a one-line nudge.
19
+
20
+ ### Switching tabs responds immediately
21
+
22
+ Each tab is a full server render, so clicking "Design" used to do nothing
23
+ visible for a second or two, which reads as a dead button and gets clicked
24
+ again. The tab rail now answers on the click: the tab you picked highlights
25
+ straight away, its icon becomes a spinner, further clicks on it are ignored,
26
+ and the content column shows a skeleton until the render lands. Cross-tab links
27
+ inside a tab behave identically, and the dashboard's own scroll container
28
+ returns to the top rather than dropping you halfway down the new tab.
29
+
30
+ Links are still real anchors — ⌘-click and middle-click open a tab as before,
31
+ and with JavaScript off the rail falls back to ordinary navigation.
4
32
 
5
33
  ### A dashboard mounted off `/polishd` no longer reads itself back
6
34
 
package/README.md CHANGED
@@ -298,12 +298,13 @@ bar: each must cite the exact page, selector, or component from the data —
298
298
  citations that don't appear in the analytics are discarded as hallucinations,
299
299
  and the rest are matched to your source files so every loss shows the file it
300
300
  lives in (or an honest "not matched to source" tag for dynamic content). It's
301
- **bring-your-own-key**: on first visit the card walks you through a four-step
302
- setup — connect a model (Anthropic, OpenAI, any OpenAI-compatible endpoint, or
303
- Google), describe your site, scan your codebase, and pick a refresh cadence.
304
- After that the card is just the story: the summary, when it was generated, a
305
- **refresh** icon to force a regenerate, and a **gear** that opens the full
306
- settings when you need them. Nothing is sent to a model until you ask.
301
+ **bring-your-own-key**. The **Settings** tab in the sidebar walks a fresh
302
+ install through a five-step setup — connect a model (Anthropic, OpenAI, any
303
+ OpenAI-compatible endpoint, or Google), describe your site, scan your codebase,
304
+ connect GitHub, pick a refresh cadence — and holds all of it afterwards. The
305
+ card itself is only ever the story: the summary, when it was generated, a
306
+ **refresh** icon to force a regenerate, and a **gear** that jumps to Settings.
307
+ Nothing is sent to a model until you ask.
307
308
 
308
309
  It's built to spend as few tokens as possible:
309
310
 
@@ -337,7 +338,7 @@ settings take precedence.
337
338
  ### Project profile — the one-time setup scan
338
339
 
339
340
  To make the summary understand your *code* — not just the numbers — run the
340
- one-time **Scan codebase** step from the card's Project profile strip. Polishd
341
+ one-time **Scan codebase** step from Settings → Codebase. Polishd
341
342
  reads your app's source from disk (pages and layouts first, then component
342
343
  files, under a hard token budget), and asks the model to write a compact
343
344
  profile: what the site is for, a map of its routes, and every interactive
@@ -351,8 +352,8 @@ authoritative context, so:
351
352
  - **Summaries never re-read source.** One scan, then pure digest + profile.
352
353
  - **The codebase is only touched again** when analytics mention a component the
353
354
  profile doesn't cover — a tiny targeted read of just the files naming it —
354
- or when you explicitly re-scan (the strip shows a hint when new components
355
- appear).
355
+ or when you explicitly re-scan (the summary card shows a hint when new
356
+ components appear).
356
357
  - On serverless hosts where source isn't on disk, scan in local dev; the saved
357
358
  profile keeps serving in production.
358
359
 
@@ -383,7 +384,7 @@ colors (`#fefefe` living next to `#ffffff`), contrast failures with the exact
383
384
  ratio, one-off values that appear on a single page, padding off the 4px grid.
384
385
 
385
386
  The second layer is the **Aesthetic review** card: the same model you
386
- configured for the analytics summary reads the measured tokens and findings
387
+ configured in Settings reads the measured tokens and findings
387
388
  and answers the real question — does this read as one deliberate design, or an
388
389
  accumulation of one-off decisions? Issues it raises must cite a token that
389
390
  actually appears in the metrics (a hex value, a px size, a page path), and each
@@ -487,7 +488,7 @@ POLISHD_SESSION_COOKIE=my_session
487
488
  | `POLISHD_GITHUB_TOKEN` | GitHub (optional) | Fine-grained PAT: Contents (read), Issues & Pull requests (write) |
488
489
  | `POLISHD_GITHUB_AUTO_ISSUES` | GitHub (optional) | `true` — file a GitHub issue automatically for each new problem a summary finds |
489
490
 
490
- AI settings are optional — the dashboard's Settings panel configures the same
491
+ AI settings are optional — the dashboard's **Settings** tab configures the same
491
492
  fields, and what you save there overrides these env defaults.
492
493
 
493
494
  Local dev needs nothing. If no writable store is available the package degrades
@@ -2,22 +2,30 @@ import type { PolishdDashboardData } from "../server/queries";
2
2
  import type { PolishdProjectProfile, GenerateProfileResult } from "./types";
3
3
  /** The cached profile, or null. Read-only — never calls a model. */
4
4
  export declare function loadProjectProfile(): Promise<PolishdProjectProfile | null>;
5
+ /**
6
+ * The slice of the dashboard data that names components.
7
+ *
8
+ * Narrower than `PolishdDashboardData` on purpose: the Settings tab needs
9
+ * coverage gaps but none of the rest of the analytics, and asking for the
10
+ * whole bundle would mean running the entire query set to render a form.
11
+ */
12
+ export type PolishdComponentSource = Pick<PolishdDashboardData, "monitored" | "topUsed">;
5
13
  /** Component identifiers the analytics currently know about. */
6
- export declare function componentIdentifiers(data: PolishdDashboardData): string[];
14
+ export declare function componentIdentifiers(data: PolishdComponentSource): string[];
7
15
  /**
8
16
  * Identifiers the analytics talk about that the profile does NOT cover — the
9
17
  * trigger for a targeted source read at summary time (and a "re-scan" hint in
10
18
  * the UI). An identifier counts as covered if the scan saw it in source or the
11
19
  * profile prose mentions it.
12
20
  */
13
- export declare function coverageGaps(data: PolishdDashboardData, profile: PolishdProjectProfile | null): string[];
21
+ export declare function coverageGaps(data: PolishdComponentSource, profile: PolishdProjectProfile | null): string[];
14
22
  /**
15
23
  * Scan the codebase and (re)generate the project profile. Always calls the
16
24
  * model — this is an explicit owner action, not something that runs on load.
17
25
  */
18
26
  export declare function generateProjectProfile(data?: PolishdDashboardData): Promise<GenerateProfileResult>;
19
27
  /** What the dashboard needs on first paint. Reads only — no model, no scan. */
20
- export declare function loadProfileState(data: PolishdDashboardData): Promise<{
28
+ export declare function loadProfileState(data: PolishdComponentSource): Promise<{
21
29
  profile: PolishdProjectProfile | null;
22
30
  gaps: string[];
23
31
  /** Whether a scan could run here (source tree present on disk). */
@@ -1 +1 @@
1
- {"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../src/ai/profile.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAK9D,OAAO,KAAK,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAI5E,oEAAoE;AACpE,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAQhF;AAED,gEAAgE;AAChE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,oBAAoB,GAAG,MAAM,EAAE,CAKzE;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,oBAAoB,EAC1B,OAAO,EAAE,qBAAqB,GAAG,IAAI,GACpC,MAAM,EAAE,CAOV;AAkBD;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,CAAC,EAAE,oBAAoB,GAC1B,OAAO,CAAC,qBAAqB,CAAC,CA2EhC;AAED,+EAA+E;AAC/E,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC;IAC1E,OAAO,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACtC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,mEAAmE;IACnE,eAAe,EAAE,OAAO,CAAC;CAC1B,CAAC,CAaD"}
1
+ {"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../src/ai/profile.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAK9D,OAAO,KAAK,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAI5E,oEAAoE;AACpE,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAQhF;AAED;;;;;;GAMG;AACH,MAAM,MAAM,sBAAsB,GAAG,IAAI,CAAC,oBAAoB,EAAE,WAAW,GAAG,SAAS,CAAC,CAAC;AAEzF,gEAAgE;AAChE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,sBAAsB,GAAG,MAAM,EAAE,CAK3E;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,sBAAsB,EAC5B,OAAO,EAAE,qBAAqB,GAAG,IAAI,GACpC,MAAM,EAAE,CAOV;AAkBD;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,CAAC,EAAE,oBAAoB,GAC1B,OAAO,CAAC,qBAAqB,CAAC,CA2EhC;AAED,+EAA+E;AAC/E,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC;IAC5E,OAAO,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACtC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,mEAAmE;IACnE,eAAe,EAAE,OAAO,CAAC;CAC1B,CAAC,CAaD"}
@@ -1 +1 @@
1
- {"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/ai/profile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/ai/profile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { type ReactNode } from "react";
2
+ export type PolishdDashboardTab = "analytics" | "design" | "settings";
3
+ /**
4
+ * A link to another dashboard tab that reports for duty immediately — the rail
5
+ * highlights and the skeleton appears on click, not on server response.
6
+ */
7
+ export declare function TabLink({ tab, className, title, current, busy, "aria-label": ariaLabel, children, }: {
8
+ tab: PolishdDashboardTab;
9
+ className?: string;
10
+ title?: string;
11
+ /** Marks this link as the tab currently being shown. */
12
+ current?: boolean;
13
+ /** Marks it as the tab being navigated to right now. */
14
+ busy?: boolean;
15
+ "aria-label"?: string;
16
+ children: ReactNode;
17
+ }): import("react").JSX.Element;
18
+ export default function DashboardChrome({ active, children, }: {
19
+ active: PolishdDashboardTab;
20
+ children: ReactNode;
21
+ }): import("react").JSX.Element;
22
+ //# sourceMappingURL=chrome.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chrome.d.ts","sourceRoot":"","sources":["../../src/dashboard/chrome.tsx"],"names":[],"mappings":"AA4BA,OAAO,EAQL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAIf,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAC;AAgBtE;;;GAGG;AACH,wBAAgB,OAAO,CAAC,EACtB,GAAG,EACH,SAAS,EACT,KAAK,EACL,OAAe,EACf,IAAY,EACZ,YAAY,EAAE,SAAS,EACvB,QAAQ,GACT,EAAE;IACD,GAAG,EAAE,mBAAmB,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wDAAwD;IACxD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,SAAS,CAAC;CACrB,+BAoBA;AAkBD,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EACtC,MAAM,EACN,QAAQ,GACT,EAAE;IACD,MAAM,EAAE,mBAAmB,CAAC;IAC5B,QAAQ,EAAE,SAAS,CAAC;CACrB,+BAkEA"}
@@ -0,0 +1,107 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ /**
4
+ * Polishd — the dashboard's outer frame: brand block, tab rail, content column.
5
+ *
6
+ * Every tab is a full server render of the same route with a different `?tab=`,
7
+ * which is honest but slow enough to feel broken: you click "Design", nothing
8
+ * moves for a second or two, so you click it again. This component takes the
9
+ * tab state into the client and answers the click immediately —
10
+ *
11
+ * • the clicked tab becomes the selected one straight away, before the server
12
+ * has said anything;
13
+ * • its icon turns into a spinner, and it stops accepting clicks, so an
14
+ * impatient second click can't queue a second navigation;
15
+ * • the content column swaps to a skeleton, so the page visibly *becomes*
16
+ * something new rather than sitting there looking ignored.
17
+ *
18
+ * The links are still real `next/link` anchors with real hrefs — only plain
19
+ * left clicks are intercepted, so middle-click and ⌘-click still open a tab,
20
+ * and the whole thing degrades to ordinary navigation without JS.
21
+ *
22
+ * `TabLink` exports the same behaviour to links *inside* a tab (the summary
23
+ * card's gear, the design review's "connect a model"), so a cross-tab link
24
+ * anywhere on the dashboard gets the identical instant response.
25
+ */
26
+ import Link from "next/link";
27
+ import { useRouter } from "next/navigation";
28
+ import { createContext, useContext, useEffect, useRef, useState, useTransition, } from "react";
29
+ import { ChartIcon, DropletIcon, GearIcon, SpinnerIcon, card, labelCls } from "./ui";
30
+ const TABS = [
31
+ { id: "analytics", name: "Analytics", icon: _jsx(ChartIcon, {}) },
32
+ { id: "design", name: "Design", icon: _jsx(DropletIcon, {}) },
33
+ { id: "settings", name: "Settings", icon: _jsx(GearIcon, {}) },
34
+ ];
35
+ /** Set by the chrome; null when a tab's markup is rendered outside it. */
36
+ const TabNavContext = createContext(null);
37
+ /** True for clicks the browser should keep: new tab, new window, middle-click. */
38
+ function isModified(e) {
39
+ return e.metaKey || e.ctrlKey || e.shiftKey || e.altKey || e.button !== 0;
40
+ }
41
+ /**
42
+ * A link to another dashboard tab that reports for duty immediately — the rail
43
+ * highlights and the skeleton appears on click, not on server response.
44
+ */
45
+ export function TabLink({ tab, className, title, current = false, busy = false, "aria-label": ariaLabel, children, }) {
46
+ const navigate = useContext(TabNavContext);
47
+ return (_jsx(Link, { href: `?tab=${tab}`, prefetch: false, title: title, "aria-label": ariaLabel, "aria-current": current ? "page" : undefined, "aria-busy": busy || undefined, className: className, onClick: (e) => {
48
+ if (isModified(e) || !navigate)
49
+ return;
50
+ e.preventDefault();
51
+ navigate(tab);
52
+ }, children: children }));
53
+ }
54
+ /**
55
+ * The dashboard renders inside its own scroll container (`PolishdShell`), not
56
+ * the document, so Next's scroll-to-top on navigation doesn't reach it — you
57
+ * would land on the new tab already scrolled halfway down it. Find whatever is
58
+ * actually scrolling and reset that too.
59
+ */
60
+ function scrollTopFrom(node) {
61
+ for (let el = node?.parentElement ?? null; el; el = el.parentElement) {
62
+ const overflowY = getComputedStyle(el).overflowY;
63
+ if ((overflowY === "auto" || overflowY === "scroll") && el.scrollHeight > el.clientHeight) {
64
+ el.scrollTop = 0;
65
+ return;
66
+ }
67
+ }
68
+ }
69
+ export default function DashboardChrome({ active, children, }) {
70
+ const router = useRouter();
71
+ const rootRef = useRef(null);
72
+ const [pending, startNav] = useTransition();
73
+ // The tab the owner asked for, held only until the server render arrives.
74
+ const [target, setTarget] = useState(null);
75
+ // The committed render is the truth again — whether it's the tab we asked
76
+ // for, or a back/forward that went somewhere else entirely.
77
+ useEffect(() => {
78
+ setTarget(null);
79
+ }, [active]);
80
+ const selected = target ?? active;
81
+ const loading = pending && target !== null;
82
+ const navigate = (tab) => {
83
+ if (tab === selected)
84
+ return;
85
+ setTarget(tab);
86
+ scrollTopFrom(rootRef.current);
87
+ startNav(() => router.push(`?tab=${tab}`));
88
+ };
89
+ return (_jsx(TabNavContext.Provider, { value: navigate, children: _jsx("div", { ref: rootRef, className: "mx-auto max-w-6xl px-4 py-8 text-white sm:px-6 sm:py-10", children: _jsxs("div", { className: "flex flex-col gap-6 lg:flex-row lg:gap-10", children: [_jsx("aside", { className: "shrink-0 lg:w-44", children: _jsxs("div", { className: "lg:sticky lg:top-8", children: [_jsx("p", { className: labelCls, children: "Polishd" }), _jsx("p", { className: "mt-1 hidden text-[12px] leading-snug text-[#555] lg:block", children: "What gets measured gets improved" }), _jsx("nav", { "aria-label": "Dashboard sections", className: "mt-1 flex gap-1.5 lg:mt-5 lg:flex-col", children: TABS.map((tab) => {
90
+ const isSelected = selected === tab.id;
91
+ return (_jsxs(TabLink, { tab: tab.id, current: isSelected, busy: loading && isSelected, className: `flex items-center gap-2 rounded-md border px-3 py-1.5 text-[13px] transition-colors ${isSelected
92
+ ? "border-[#2e2e2e] bg-[#141414] font-medium text-white"
93
+ : "border-transparent text-[#888] hover:bg-[#0f0f0f] hover:text-white"}`, children: [loading && isSelected ? _jsx(SpinnerIcon, {}) : tab.icon, tab.name] }, tab.id));
94
+ }) })] }) }), _jsx("div", { className: "min-w-0 flex-1", children: loading ? _jsx(TabSkeleton, { name: TABS.find((t) => t.id === target).name }) : children })] }) }) }));
95
+ }
96
+ /**
97
+ * Stand-in for the tab being fetched.
98
+ *
99
+ * Deliberately the *shape* every tab shares — a title block, a wide card, a
100
+ * grid, a list — rather than a per-tab replica. A skeleton that mirrors the
101
+ * real layout too closely reads as a broken render when the real thing lands
102
+ * slightly different; this one reads as "loading" and gets out of the way.
103
+ */
104
+ function TabSkeleton({ name }) {
105
+ return (_jsxs("div", { className: "animate-pulse text-white", children: [_jsxs("span", { className: "sr-only", role: "status", children: ["Loading ", name] }), _jsxs("div", { className: "mb-8 flex items-start justify-between gap-3 border-b border-[#2e2e2e] pb-6", children: [_jsxs("div", { children: [_jsx("div", { className: "h-[22px] w-40 rounded bg-[#1a1a1a]" }), _jsx("div", { className: "mt-2.5 h-3 w-64 max-w-full rounded bg-[#141414]" })] }), _jsx("div", { className: "h-6 w-28 shrink-0 rounded-full bg-[#141414]" })] }), _jsxs("div", { className: `mb-8 ${card} px-4 py-5 sm:px-5`, children: [_jsx("div", { className: "h-3 w-32 rounded bg-[#1a1a1a]" }), _jsxs("div", { className: "mt-4 space-y-2", children: [_jsx("div", { className: "h-3 w-full rounded bg-[#141414]" }), _jsx("div", { className: "h-3 w-[92%] rounded bg-[#141414]" }), _jsx("div", { className: "h-3 w-[68%] rounded bg-[#141414]" })] })] }), _jsx("div", { className: "mb-8 grid grid-cols-2 gap-3 sm:grid-cols-3 lg:grid-cols-6", children: Array.from({ length: 6 }, (_, i) => (_jsxs("div", { className: `${card} px-4 py-4`, children: [_jsx("div", { className: "h-6 w-14 rounded bg-[#1a1a1a]" }), _jsx("div", { className: "mt-3 h-2.5 w-16 rounded bg-[#141414]" })] }, i))) }), _jsx("div", { className: `${card} overflow-hidden`, children: Array.from({ length: 4 }, (_, i) => (_jsxs("div", { className: "flex items-center justify-between gap-4 border-t border-[#2e2e2e] px-5 py-3.5 first:border-t-0", children: [_jsx("div", { className: "h-3 flex-1 rounded bg-[#141414]", style: { maxWidth: `${70 - i * 12}%` } }), _jsx("div", { className: "h-3 w-12 shrink-0 rounded bg-[#141414]" })] }, i))) })] }));
106
+ }
107
+ //# sourceMappingURL=chrome.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chrome.js","sourceRoot":"","sources":["../../src/dashboard/chrome.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"design-review-card.d.ts","sourceRoot":"","sources":["../../src/dashboard/design-review-card.tsx"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAsB,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAwC3E,4EAA4E;AAC5E,wBAAgB,oBAAoB,gCAenC;AAED,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAC1C,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,oEAAoE;IACpE,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,gEAAgE;AAChE,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EACvC,aAAa,EACb,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,KAAK,EACL,YAAY,GACb,EAAE,qBAAqB,+BA8FvB"}
1
+ {"version":3,"file":"design-review-card.d.ts","sourceRoot":"","sources":["../../src/dashboard/design-review-card.tsx"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAsB,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAI3E,4EAA4E;AAC5E,wBAAgB,oBAAoB,gCAenC;AAED,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAC1C,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,oEAAoE;IACpE,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,gEAAgE;AAChE,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EACvC,aAAa,EACb,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,KAAK,EACL,YAAY,GACb,EAAE,qBAAqB,+BAoGvB"}
@@ -16,26 +16,8 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
16
16
  import { useState, useTransition } from "react";
17
17
  import { useRouter } from "next/navigation";
18
18
  import { generateDesignReviewAction } from "../ai/actions";
19
- const border = "border-[#2e2e2e]";
20
- const card = `border ${border} rounded-lg bg-[#0a0a0a]`;
21
- const labelCls = "text-[11px] font-medium uppercase tracking-[0.08em] text-[#666]";
22
- const iconBtn = "flex h-7 w-7 items-center justify-center rounded-md border border-[#2e2e2e] text-[#aaa] transition-colors hover:border-[#555] hover:text-white disabled:cursor-not-allowed disabled:opacity-40";
23
- const primaryBtn = "rounded-md bg-white px-3 py-1.5 text-[12px] font-medium text-black transition-opacity hover:opacity-90 disabled:cursor-not-allowed disabled:opacity-40";
24
- function relTime(ms) {
25
- const s = Math.max(0, Math.round((Date.now() - ms) / 1000));
26
- if (s < 60)
27
- return "just now";
28
- const m = Math.round(s / 60);
29
- if (m < 60)
30
- return `${m}m ago`;
31
- const h = Math.round(m / 60);
32
- if (h < 24)
33
- return `${h}h ago`;
34
- return `${Math.round(h / 24)}d ago`;
35
- }
36
- function RefreshIcon({ spinning }) {
37
- return (_jsxs("svg", { width: "13", height: "13", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className: spinning ? "animate-spin" : undefined, "aria-hidden": true, children: [_jsx("polyline", { points: "23 4 23 10 17 10" }), _jsx("path", { d: "M20.49 15a9 9 0 1 1-2.12-9.36L23 10" })] }));
38
- }
19
+ import { TabLink } from "./chrome";
20
+ import { RefreshIcon, border, card, iconBtn, labelCls, primaryBtn, relTime } from "./ui";
39
21
  /** Re-run the deterministic metrics: refresh the server render in place. */
40
22
  export function RefreshMetricsButton() {
41
23
  const router = useRouter();
@@ -63,14 +45,14 @@ export default function DesignReviewCard({ initialReview, initialStale, hasApiKe
63
45
  };
64
46
  const canGenerate = hasApiKey && scannedPages > 0;
65
47
  return (_jsxs("section", { className: `mb-8 ${card} overflow-hidden`, children: [_jsxs("div", { className: `flex 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: "Aesthetic review" }), hasApiKey && (_jsxs("span", { className: "hidden rounded-full bg-[#1a1a1a] px-2 py-0.5 text-[10px] font-medium text-[#888] sm:inline", children: [provider, " \u00B7 ", model] }))] }), _jsx("button", { type: "button", onClick: () => generate(review !== null), disabled: pending || !canGenerate, title: !hasApiKey
66
- ? "Connect a model first (Analytics tab → summary card settings)"
48
+ ? "Connect a model first — Settings tab"
67
49
  : scannedPages === 0
68
50
  ? "No pages scanned yet"
69
51
  : "Regenerate the design review now", "aria-label": "Refresh design review", className: iconBtn, children: _jsx(RefreshIcon, { spinning: pending }) })] }), _jsxs("div", { className: "px-4 py-4 sm:px-5 sm:py-5", children: [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 })), review ? (_jsxs(_Fragment, { children: [_jsx("p", { className: "text-[14px] leading-relaxed text-[#e4e4e4]", children: review.text }), _jsx(StrengthsIssues, { strengths: review.strengths, issues: review.issues }), _jsxs("div", { className: "mt-3 flex flex-wrap items-center gap-x-3 gap-y-1 text-[11px] text-[#555]", children: [_jsxs("span", { children: ["Generated ", relTime(review.generatedAt), " \u00B7 ", review.provider, "/", review.model] }), stale && (_jsx("span", { className: "rounded-full bg-amber-950/50 px-2 py-0.5 text-amber-400", children: "Metrics changed since this review \u2014 refresh to update" }))] })] })) : (_jsxs("div", { className: "flex flex-wrap items-center justify-between gap-3", children: [_jsx("p", { className: "text-[13px] leading-relaxed text-[#888]", children: !hasApiKey
70
- ? "No model connected. Configure one in the Analytics tab's summary card — the design review uses the same provider and key."
52
+ ? "No model connected. The design review uses the same provider and key as the analytics summary — add one in Settings."
71
53
  : scannedPages === 0
72
54
  ? "No pages scanned yet — browse the site and the design metrics will appear here."
73
- : "No review yet — ask the model how coherent this design system reads, and what would sharpen it." }), _jsx("button", { type: "button", onClick: () => generate(false), disabled: pending || !canGenerate, className: primaryBtn, children: pending ? "Reviewing…" : "Generate review" })] }))] })] }));
55
+ : "No review yet — ask the model how coherent this design system reads, and what would sharpen it." }), hasApiKey ? (_jsx("button", { type: "button", onClick: () => generate(false), disabled: pending || !canGenerate, className: primaryBtn, children: pending ? "Reviewing…" : "Generate review" })) : (_jsx(TabLink, { tab: "settings", className: primaryBtn, children: "Connect a model" }))] }))] })] }));
74
56
  }
75
57
  function StrengthsIssues({ strengths, issues, }) {
76
58
  const hasStrengths = !!strengths?.length;
@@ -1 +1 @@
1
- {"version":3,"file":"design-review-card.js","sourceRoot":"","sources":["../../src/dashboard/design-review-card.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"design-review-card.js","sourceRoot":"","sources":["../../src/dashboard/design-review-card.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"design.d.ts","sourceRoot":"","sources":["../../src/dashboard/design.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAGV,iBAAiB,EAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAqZhF,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,iBAAiB,CAAC;IACxB,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACnC,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,uBAAuB,CAAC;CACnC;AAED,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,gBAAgB,+BAoEpF"}
1
+ {"version":3,"file":"design.d.ts","sourceRoot":"","sources":["../../src/dashboard/design.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAGV,iBAAiB,EAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAiZhF,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,iBAAiB,CAAC;IACxB,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACnC,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,uBAAuB,CAAC;CACnC;AAED,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,gBAAgB,+BAoEpF"}
@@ -1,10 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import DesignReviewCard, { RefreshMetricsButton } from "./design-review-card";
3
3
  import ShowMore from "./show-more";
4
- const border = "border-[#2e2e2e]";
5
- const card = `border ${border} rounded-lg bg-[#0a0a0a]`;
6
- const label = "text-[11px] font-medium uppercase tracking-[0.08em] text-[#666]";
7
- const divider = `border-t ${border}`;
4
+ import { border, card, divider, labelCls as label } from "./ui";
8
5
  /** Rows shown before a list collapses behind "Show more". */
9
6
  const VISIBLE_ROWS = 5;
10
7
  function OutlierBadge({ text = "one-off" }) {
@@ -1 +1 @@
1
- {"version":3,"file":"design.js","sourceRoot":"","sources":["../../src/dashboard/design.tsx"],"names":[],"mappings":";AAmBA,OAAO,gBAAgB,EAAE,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,QAAQ,MAAM,aAAa,CAAC;AAEnC,MAAM,MAAM,GAAG,kBAAkB,CAAC;AAClC,MAAM,IAAI,GAAG,UAAU,MAAM,0BAA0B,CAAC;AACxD,MAAM,KAAK,GAAG,iEAAiE,CAAC;AAChF,MAAM,OAAO,GAAG,YAAY,MAAM,EAAE,CAAC;AAErC,6DAA6D;AAC7D,MAAM,YAAY,GAAG,CAAC,CAAC;AAEvB,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,yBAAO,CAAC,CAAC,OAAO,GAAQ,KAbnB,CAAC,CAcH,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,EAAE,CAAC,EAAE,KAAK,EAA6D;IACtF,OAAO,CACL,eACE,SAAS,EAAE,mEAAmE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,aAEpG,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,IACH,CACP,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,EAAE,IAAI,EAA+B;IAC9D,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,wFAAmF,YAEvF,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,IAA6C,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,IAA3D,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,EAAE,CAA0B,CAC9E,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,IAA6C,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,IAAzD,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,EAAE,CAAwB,CAC5E,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,SAAS,CAAC,EAAE,CAAC,EAA8C;IAClE,OAAO,CACL,gBACE,SAAS,EAAC,mFAAmF,EAC7F,KAAK,EAAE,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,OAAO,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,MAAM,UAAU,aAEjF,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,IACzB,CACR,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,EAAE,IAAI,EAA+B;IAC3D,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,CAAC,GAAG,YAAY,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,YAAY,EAAE,EAAE,CAAC,CAAC;IACzD,OAAO,CACL,KAAC,OAAO,IACN,KAAK,EAAC,eAAe,EACrB,GAAG,EAAC,yFAAoF,YAExF,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,eAAiB,SAAS,EAAC,SAAS,aAClC,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,KAVE,CAAC,CAAC,GAAG,CAWT,CACP,CAAC,GACE,CACP,EACA,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CACnB,cAAK,SAAS,EAAC,wCAAwC,YACpD,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAChB,KAAC,SAAS,IAAa,CAAC,EAAE,CAAC,IAAX,CAAC,CAAC,GAAG,CAAU,CAChC,CAAC,GACE,CACP,EACD,KAAC,QAAQ,IAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAC,QAAQ,YAC9C,cAAK,SAAS,EAAC,6CAA6C,YACzD,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACnB,KAAC,SAAS,IAAa,CAAC,EAAE,CAAC,IAAX,CAAC,CAAC,GAAG,CAAU,CAChC,CAAC,GACE,GACG,IACP,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,mCAAmC,aAChD,CAAC,CAAC,EAAE,UAAM,CAAC,CAAC,EAAE,IACV,EACP,gBAAM,SAAS,EAAC,uCAAuC,aACpD,CAAC,CAAC,KAAK,SAAI,gBAAM,SAAS,EAAC,aAAa,wBAAS,CAAC,CAAC,QAAQ,YAAQ,CAAC,CAAC,SAAS,WAAW,IACrF,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,YAElE,eAAK,SAAS,EAAE,GAAG,IAAI,kBAAkB,aACvC,KAAC,YAAY,IAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,EAAC,UAAU,GAAG,EACrD,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,IACG,GACE,CACX,CAAC;AACJ,CAAC;AAED,gFAAgF;AAEhF,SAAS,UAAU,CAAC,EAAE,CAAC,EAA6C;IAClE,OAAO,CACL,eAAK,SAAS,EAAC,oCAAoC,aACjD,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,IACrF,CACP,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,EAAE,IAAI,EAA+B;IAC1D,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,EAAE,EAAE,CAAC,CAAC;IACpD,OAAO,CACL,KAAC,OAAO,IAAC,KAAK,EAAC,cAAc,EAAC,GAAG,EAAC,uDAAkD,YAClF,eAAK,SAAS,EAAE,GAAG,IAAI,uBAAuB,aAC5C,KAAC,YAAY,IAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,EAAC,QAAQ,GAAG,EACpD,cAAK,SAAS,EAAC,kDAAkD,YAC9D,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAClB,KAAC,UAAU,IAAe,CAAC,EAAE,CAAC,IAAb,CAAC,CAAC,KAAK,CAAU,CACnC,CAAC,GACE,EACN,KAAC,QAAQ,IAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAC,OAAO,YAC7C,cAAK,SAAS,EAAC,uDAAuD,YACnE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACnB,KAAC,UAAU,IAAe,CAAC,EAAE,CAAC,IAAb,CAAC,CAAC,KAAK,CAAU,CACnC,CAAC,GACE,GACG,IACP,GACE,CACX,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,EAAE,CAAC,EAAE,GAAG,EAA4D;IACtF,OAAO,CACL,eAAK,SAAS,EAAC,yBAAyB,aACtC,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,IACH,CACP,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,EAAE,IAAI,EAA+B;IAC3D,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,IAAC,KAAK,EAAC,SAAS,EAAC,GAAG,EAAC,8DAAyD,YACpF,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,IAApB,CAAC,CAAC,EAAE,CAAoB,CAC1C,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,IAApB,CAAC,CAAC,EAAE,CAAoB,CAC1C,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;AAWD,MAAM,UAAU,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAoB;IACnF,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IACvC,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,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,GAC/B,EAED,QAAQ,IAAI,CACX,8BACE,KAAC,iBAAiB,IAAC,IAAI,EAAE,IAAI,GAAI,EACjC,KAAC,cAAc,IAAC,IAAI,EAAE,IAAI,GAAI,EAC9B,KAAC,eAAe,IAAC,IAAI,EAAE,IAAI,GAAI,EAC/B,KAAC,aAAa,IAAC,IAAI,EAAE,IAAI,GAAI,EAC7B,KAAC,cAAc,IAAC,IAAI,EAAE,IAAI,GAAI,EAC9B,KAAC,YAAY,IAAC,IAAI,EAAE,IAAI,GAAI,IAC3B,CACJ,IACI,CACR,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"design.js","sourceRoot":"","sources":["../../src/dashboard/design.tsx"],"names":[],"mappings":"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"}
@@ -37,7 +37,7 @@ export interface PolishdAIBundle {
37
37
  /** Whether the source tree is on disk here (codebase scan possible). */
38
38
  sourceAvailable: boolean;
39
39
  }
40
- export type PolishdDashboardTab = "analytics" | "design";
40
+ export type { PolishdDashboardTab } from "./chrome";
41
41
  export declare function PolishdDashboard({ data, ai, }: {
42
42
  data: PolishdDashboardData;
43
43
  ai: PolishdAIBundle;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dashboard/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAGrC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,EAAiC,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC;AAE9E,OAAO,EAEL,KAAK,oBAAoB,EAG1B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAGL,KAAK,mBAAmB,EAEzB,MAAM,aAAa,CAAC;AACrB,OAAO,EAGL,KAAK,uBAAuB,EAC7B,MAAM,cAAc,CAAC;AAMtB,OAAO,KAAK,EACV,uBAAuB,EACvB,qBAAqB,EACrB,cAAc,EACf,MAAM,aAAa,CAAC;AAQrB,eAAO,MAAM,OAAO,WAAW,CAAC;AAChC,eAAO,MAAM,OAAO,kBAAkB,CAAC;AAEvC,eAAO,MAAM,QAAQ,EAAE,QAGtB,CAAC;AAyLF,OAAO,EAAE,wBAAwB,EAAE,KAAK,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAIxF,OAAO,EACL,gBAAgB,EAChB,wBAAwB,EACxB,KAAK,uBAAuB,GAC7B,MAAM,cAAc,CAAC;AAEtB,kDAAkD;AAClD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,cAAc,GAAG,IAAI,CAAC;IAC/B,QAAQ,EAAE,uBAAuB,CAAC;IAClC,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACtC,iEAAiE;IACjE,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,wEAAwE;IACxE,eAAe,EAAE,OAAO,CAAC;CAC1B;AAID,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG,QAAQ,CAAC;AAyFzD,wBAAgB,gBAAgB,CAAC,EAC/B,IAAI,EACJ,EAAE,GACH,EAAE;IACD,IAAI,EAAE,oBAAoB,CAAC;IAC3B,EAAE,EAAE,eAAe,CAAC;CACrB,+BAyTA;AAgED;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,YAAY,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;CACvE;AAED,MAAM,WAAW,wBAAwB;IACvC;;;;;;;;;OASG;IACH,YAAY,CAAC,EAAE,mBAAmB,CAAC;IACnC;;;OAGG;IACH,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,iEAAiE;IACjE,SAAS,CAAC,EAAE,uBAAuB,CAAC;IACpC;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAChC;;;;;OAKG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AA0ID;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,GAAE,wBAA6B,IA4BjC,QAAO,gBAAqB,0CAqF/D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dashboard/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAErC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,EAAiC,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC;AAE9E,OAAO,EAIL,KAAK,oBAAoB,EAG1B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAGL,KAAK,mBAAmB,EAEzB,MAAM,aAAa,CAAC;AACrB,OAAO,EAGL,KAAK,uBAAuB,EAC7B,MAAM,cAAc,CAAC;AAMtB,OAAO,KAAK,EACV,uBAAuB,EACvB,qBAAqB,EACrB,cAAc,EACf,MAAM,aAAa,CAAC;AAWrB,eAAO,MAAM,OAAO,WAAW,CAAC;AAChC,eAAO,MAAM,OAAO,kBAAkB,CAAC;AAEvC,eAAO,MAAM,QAAQ,EAAE,QAGtB,CAAC;AAmLF,OAAO,EAAE,wBAAwB,EAAE,KAAK,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAIxF,OAAO,EACL,gBAAgB,EAChB,wBAAwB,EACxB,KAAK,uBAAuB,GAC7B,MAAM,cAAc,CAAC;AAEtB,kDAAkD;AAClD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,cAAc,GAAG,IAAI,CAAC;IAC/B,QAAQ,EAAE,uBAAuB,CAAC;IAClC,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACtC,iEAAiE;IACjE,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,wEAAwE;IACxE,eAAe,EAAE,OAAO,CAAC;CAC1B;AAID,YAAY,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAGpD,wBAAgB,gBAAgB,CAAC,EAC/B,IAAI,EACJ,EAAE,GACH,EAAE;IACD,IAAI,EAAE,oBAAoB,CAAC;IAC3B,EAAE,EAAE,eAAe,CAAC;CACrB,+BAyTA;AAgED;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,YAAY,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;CACvE;AAED,MAAM,WAAW,wBAAwB;IACvC;;;;;;;;;OASG;IACH,YAAY,CAAC,EAAE,mBAAmB,CAAC;IACnC;;;OAGG;IACH,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,iEAAiE;IACjE,SAAS,CAAC,EAAE,uBAAuB,CAAC;IACpC;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAChC;;;;;OAKG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AA0ID;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,GAAE,wBAA6B,IA4BjC,QAAO,gBAAqB,0CA4G/D"}
@@ -1,8 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import Link from "next/link";
3
2
  import { after } from "next/server";
4
3
  import { registerPolishdDashboardRoute } from "../config";
5
- import { loadPolishdDashboardData, } from "../server/queries";
4
+ import { getMonitoredComponents, getTopInteractions, loadPolishdDashboardData, } from "../server/queries";
6
5
  import { polishdAuthContext, registerPolishdAuth, } from "../ai/guard";
7
6
  import { polishdDashboardToken, polishdTokenAuth, } from "./token-auth";
8
7
  import { unlockPolishdDashboard } from "./unlock";
@@ -10,23 +9,21 @@ import { loadDesignReviewState } from "../ai/design";
10
9
  import { loadProfileState } from "../ai/profile";
11
10
  import { generateSummary, getAISettingsPublic, loadSummaryState } from "../ai/summary";
12
11
  import { getDesignData } from "../server/design";
12
+ import DashboardChrome from "./chrome";
13
13
  import { DesignPanel } from "./design";
14
14
  import ElementsTable from "./elements";
15
15
  import TopFeaturesTable from "./features";
16
16
  import JourneyList from "./journeys";
17
17
  import TopPagesTable from "./pages";
18
+ import SettingsView from "./settings";
18
19
  import SummaryCard from "./summary";
20
+ import { border, card, divider, labelCls as label } from "./ui";
19
21
  export const runtime = "nodejs";
20
22
  export const dynamic = "force-dynamic";
21
23
  export const metadata = {
22
24
  title: "Polishd — What gets measured gets improved",
23
25
  robots: { index: false, follow: false },
24
26
  };
25
- // ── Design tokens (Vercel aesthetic) ────────────────────────────────────────
26
- const border = "border-[#2e2e2e]";
27
- const card = `border ${border} rounded-lg bg-[#0a0a0a]`;
28
- const label = "text-[11px] font-medium uppercase tracking-[0.08em] text-[#666]";
29
- const divider = `border-t ${border}`;
30
27
  // ── Tooltip ──────────────────────────────────────────────────────────────────
31
28
  function InfoTip({ text, anchor = "center", below = false, }) {
32
29
  const anchorClass = anchor === "left" ? "left-0" : anchor === "right" ? "right-0" : "left-1/2 -translate-x-1/2";
@@ -73,28 +70,6 @@ export { loadPolishdDashboardData } from "../server/queries";
73
70
  // Named explicitly by hosts that want token auth alongside their own options;
74
71
  // `createPolishdPage()` already applies it when POLISHD_DASHBOARD_TOKEN is set.
75
72
  export { polishdTokenAuth, POLISHD_DASHBOARD_COOKIE, } from "./token-auth";
76
- function ChartIcon() {
77
- return (_jsxs("svg", { width: "13", height: "13", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": true, children: [_jsx("line", { x1: "18", y1: "20", x2: "18", y2: "10" }), _jsx("line", { x1: "12", y1: "20", x2: "12", y2: "4" }), _jsx("line", { x1: "6", y1: "20", x2: "6", y2: "14" })] }));
78
- }
79
- function DropletIcon() {
80
- return (_jsx("svg", { width: "13", height: "13", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": true, children: _jsx("path", { d: "M12 2.69l5.66 5.66a8 8 0 1 1-11.31 0z" }) }));
81
- }
82
- function TabLink({ href, active, icon, children, }) {
83
- return (_jsxs(Link, { href: href, prefetch: false, "aria-current": active ? "page" : undefined, className: `flex items-center gap-2 rounded-md border px-3 py-1.5 text-[13px] transition-colors ${active
84
- ? "border-[#2e2e2e] bg-[#141414] font-medium text-white"
85
- : "border-transparent text-[#888] hover:bg-[#0f0f0f] hover:text-white"}`, children: [icon, children] }));
86
- }
87
- /**
88
- * The dashboard's outer frame: brand block plus the tab rail. A left sidebar
89
- * on desktop, a horizontal tab row on small screens. Tabs are `next/link`s
90
- * carrying a `?tab=` query — client-side navigation, so switching tabs swaps
91
- * the rendered content without a full document reload — and query-relative,
92
- * so they work at whatever route the host mounted the dashboard on. Prefetch
93
- * is off because each tab render runs the full query set.
94
- */
95
- function DashboardChrome({ active, children, }) {
96
- return (_jsx("div", { className: "mx-auto max-w-6xl px-4 py-8 sm:px-6 sm:py-10 text-white", children: _jsxs("div", { className: "flex flex-col gap-6 lg:flex-row lg:gap-10", children: [_jsx("aside", { className: "shrink-0 lg:w-44", children: _jsxs("div", { className: "lg:sticky lg:top-8", children: [_jsx("p", { className: label, children: "Polishd" }), _jsx("p", { className: "mt-1 hidden text-[12px] leading-snug text-[#555] lg:block", children: "What gets measured gets improved" }), _jsxs("nav", { "aria-label": "Dashboard sections", className: "mt-1 flex gap-1.5 lg:mt-5 lg:flex-col", children: [_jsx(TabLink, { href: "?tab=analytics", active: active === "analytics", icon: _jsx(ChartIcon, {}), children: "Analytics" }), _jsx(TabLink, { href: "?tab=design", active: active === "design", icon: _jsx(DropletIcon, {}), children: "Design" })] })] }) }), _jsx("div", { className: "min-w-0 flex-1", children: children })] }) }));
97
- }
98
73
  // ── Dashboard (presentational) ───────────────────────────────────────────────
99
74
  export function PolishdDashboard({ data, ai, }) {
100
75
  const { overview, health, pages, elements, devices, topUsed, journeys, errors, monitored } = data;
@@ -274,6 +249,18 @@ export function createPolishdPage(opts = {}) {
274
249
  const reviewState = await loadDesignReviewState(design);
275
250
  return wrap(_jsx(DashboardChrome, { active: "design", children: _jsx(DesignPanel, { data: design, review: reviewState.review, reviewStale: reviewState.stale, settings: settings }) }));
276
251
  }
252
+ if (rawTab === "settings") {
253
+ // `loadProfileState` only reads component identifiers out of the
254
+ // dashboard data, so this tab loads those two queries rather than the
255
+ // whole analytics set it would otherwise never look at.
256
+ const [settings, monitored, topUsed] = await Promise.all([
257
+ getAISettingsPublic(),
258
+ getMonitoredComponents(),
259
+ getTopInteractions(),
260
+ ]);
261
+ const profileState = await loadProfileState({ monitored, topUsed });
262
+ return wrap(_jsx(DashboardChrome, { active: "settings", children: _jsx(SettingsView, { initialSettings: settings, initialProfile: profileState.profile, initialGaps: profileState.gaps, sourceAvailable: profileState.sourceAvailable }) }));
263
+ }
277
264
  const data = await loadPolishdDashboardData();
278
265
  const [summaryState, settings, profileState] = await Promise.all([
279
266
  loadSummaryState(data),