@polishd/next 0.2.1-dev.1 → 0.2.1-dev.2
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 +28 -0
- package/README.md +12 -11
- package/dist/ai/profile.d.ts +11 -3
- package/dist/ai/profile.d.ts.map +1 -1
- package/dist/ai/profile.js.map +1 -1
- package/dist/dashboard/chrome.d.ts +22 -0
- package/dist/dashboard/chrome.d.ts.map +1 -0
- package/dist/dashboard/chrome.js +107 -0
- package/dist/dashboard/chrome.js.map +1 -0
- package/dist/dashboard/design-review-card.d.ts.map +1 -1
- package/dist/dashboard/design-review-card.js +5 -23
- package/dist/dashboard/design-review-card.js.map +1 -1
- package/dist/dashboard/design.d.ts.map +1 -1
- package/dist/dashboard/design.js +1 -4
- package/dist/dashboard/design.js.map +1 -1
- package/dist/dashboard/index.d.ts +1 -1
- package/dist/dashboard/index.d.ts.map +1 -1
- package/dist/dashboard/index.js +16 -29
- package/dist/dashboard/index.js.map +1 -1
- package/dist/dashboard/settings.d.ts +18 -0
- package/dist/dashboard/settings.d.ts.map +1 -0
- package/dist/dashboard/settings.js +309 -0
- package/dist/dashboard/settings.js.map +1 -0
- package/dist/dashboard/summary.d.ts.map +1 -1
- package/dist/dashboard/summary.js +32 -316
- package/dist/dashboard/summary.js.map +1 -1
- package/dist/dashboard/ui.d.ts +30 -0
- package/dist/dashboard/ui.d.ts.map +1 -0
- package/dist/dashboard/ui.js +51 -0
- package/dist/dashboard/ui.js.map +1 -0
- package/dist/dashboard.css +116 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,34 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
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.
|
|
32
|
+
|
|
5
33
|
### A dashboard mounted off `/polishd` no longer reads itself back
|
|
6
34
|
|
|
7
35
|
The read side of the dashboard (its own queries) previously excluded only the
|
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
|
|
302
|
-
setup — connect a model (Anthropic, OpenAI, any
|
|
303
|
-
Google), describe your site, scan your codebase,
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
package/dist/ai/profile.d.ts
CHANGED
|
@@ -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:
|
|
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:
|
|
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:
|
|
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). */
|
package/dist/ai/profile.d.ts.map
CHANGED
|
@@ -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,
|
|
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"}
|
package/dist/ai/profile.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/ai/profile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,aAAa,EAAmB,MAAM,QAAQ,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAG7C,MAAM,WAAW,GAAG,iBAAiB,CAAC;AAEtC,oEAAoE;AACpE,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC;IACvC,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAA0B,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;
|
|
1
|
+
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/ai/profile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,aAAa,EAAmB,MAAM,QAAQ,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAG7C,MAAM,WAAW,GAAG,iBAAiB,CAAC;AAEtC,oEAAoE;AACpE,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC;IACvC,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAA0B,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAWD,gEAAgE;AAChE,MAAM,UAAU,oBAAoB,CAAC,IAA4B;IAC/D,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS;QAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAChD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO;QAAE,IAAI,CAAC,CAAC,WAAW;YAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AACzB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAC1B,IAA4B,EAC5B,OAAqC;IAErC,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IACxB,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;IACzC,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAC,MAAM,CACtC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAC9D,CAAC;AACJ,CAAC;AAED,MAAM,qBAAqB,GACzB,4EAA4E;IAC5E,8EAA8E;IAC9E,4EAA4E;IAC5E,yEAAyE;IACzE,+EAA+E;IAC/E,+EAA+E;IAC/E,iFAAiF;IACjF,8EAA8E;IAC9E,6EAA6E;IAC7E,+EAA+E,CAAC;AAElF,6EAA6E;AAC7E,sCAAsC;AACtC,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAEhC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,IAA2B;IAE3B,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,eAAe,EAAE,CAAC;IAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QACrB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC;IAC3E,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACxD,MAAM,IAAI,GAAe,aAAa,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IACtE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACpB,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,WAAW;YAClB,OAAO,EACL,oGAAoG;SACvG,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,QAAQ,CAAC,OAAO;QAAE,KAAK,CAAC,IAAI,CAAC,wBAAwB,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IAC7E,IAAI,QAAQ,CAAC,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,oBAAoB,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC3E,IAAI,QAAQ,CAAC,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,8BAA8B,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;IACrF,IAAI,QAAQ,CAAC,MAAM;QACjB,KAAK,CAAC,IAAI,CAAC,4CAA4C,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChF,KAAK,CAAC,IAAI,CACR,cAAc,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,gDAAgD,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAChG,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,KAAK,CAAC;IACV,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,SAAS,CAAC,QAAQ,EAAE,qBAAqB,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;YAC3E,SAAS,EAAE,kBAAkB;SAC9B,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,gBAAgB;YACvB,OAAO,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,2BAA2B;SAC1E,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAChB,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,gBAAgB;YACvB,OAAO,EAAE,uCAAuC;SACjD,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,wEAAwE;QACxE,+CAA+C;QAC/C,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,gBAAgB;YACvB,OAAO,EACL,0GAA0G;SAC7G,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAA0B;QACrC,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;QACvB,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,0EAA0E;QAC1E,2EAA2E;QAC3E,0EAA0E;QAC1E,kBAAkB,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;QAC3E,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;QAC9B,SAAS,EAAE,IAAI,CAAC,SAAS;KAC1B,CAAC;IACF,MAAM,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IACpD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC/B,CAAC;AAED,+EAA+E;AAC/E,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAA4B;IAMjE,MAAM,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAChD,kBAAkB,EAAE;QACpB,eAAe,EAAE;KAClB,CAAC,CAAC;IACH,4EAA4E;IAC5E,kCAAkC;IAClC,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACxF,MAAM,KAAK,GAAG,UAAU,EAAE,MAAM;QAC9B,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IACjD,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;AACzE,CAAC"}
|
|
@@ -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;
|
|
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
|
-
|
|
20
|
-
|
|
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
|
|
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.
|
|
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":"AAAA,YAAY,CAAC;;AAEb;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;
|
|
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;
|
|
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"}
|
package/dist/dashboard/design.js
CHANGED
|
@@ -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
|
-
|
|
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":"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"}
|
|
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
|
|
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;
|
|
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"}
|
package/dist/dashboard/index.js
CHANGED
|
@@ -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),
|